diff --git a/.nvmrc b/.nvmrc index 9137833..1b1b507 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.19.1 \ No newline at end of file +v24.12.0 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index a7524e1..e7e8047 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,6 @@ "svelte.plugin.svelte.compilerWarnings": { "a11y-click-events-have-key-events": "ignore", "a11y-interactive-supports-focus": "ignore" - } + }, + "editor.formatOnSave": true, } \ No newline at end of file diff --git a/README.md b/README.md index d6f5f71..1987ba7 100644 --- a/README.md +++ b/README.md @@ -44,19 +44,23 @@ const login = async (restoreSession) => { transportOptions: { requestAccount: appIdentifier }, - selectorOptions: { - appName: "Tasklyy", - appLogo: "https://taskly.protonchain.com/static/media/taskly-logo.ad0bfb0f.svg", - customStyleOptions: { - modalBackgroundColor: "#F4F7FA", - logoBackgroundColor: "white", - isLogoRound: true, - optionBackgroundColor: "white", - optionFontColor: "black", - primaryFontColor: "black", - secondaryFontColor: "#6B727F", - linkColor: "#752EEB" - } + uiOptions: { + theme: 'light', + themes: { + dark: { + base: { + textColorBase: 'black', + textColorSecondary: '#6B727F', + textColorLink: '#752EEB', + bodyBackground: '#F4F7FA' + }, + button: { + primary: { + backgroundHover: 'black', + }, + }, + }, + }, } }) ​ @@ -119,6 +123,7 @@ The ```ProtonWebSDK``` Class takes three main types of option objects: - ```linkOptions``` - ```transportOptions``` - ```selectorOptions``` + - ```uiOptions``` ​ ### Link Options A required object which includes all options for communication customization. @@ -146,41 +151,26 @@ If you add [https://api-dev.protonchain.com/v1/chain/info](https://api-dev.proto An object which contains all needed data for the client communication. If not specified an empty object will be provided for the SDK. **transportOptions:** + - **requestAccount** – type string – optional – this field is used for identifying which account is requesting the client transaction. If no value provided, it will be replaced with the “Unknown Requestor” in the transaction request. ​ - > Typically same as appName -​ - - **backButton** – type Boolean – optional – this field specifies the need of displaying the “back” button in the wallet type selection screen of the modal window. By default - set to ```true```, if set to ```false``` no “back” button will be displayed. -​ +​​ ### Selector Options An object which includes style options for the wallet selection. If not specified the basic styling for the modal window will be provided. + **selectorOptions:** - - **appName** – type string – optional – text which is displayed in the modal window and the name of the app displayed in transaction -​ - - **appLogo** – type string – optional – image is displayed in the modal window. - - **dialogRootNode** - type string | HTMLElement - optional - The Webauth modal parent html node. Can be a valid css selector or a HTMLElement. If not provided the default parent is the ``document.body`` -​ - - **customStyleOptions** – type Object – optional – object which can include all styles needed for the wallet selection modal window. -The ```CustomStyleOptions``` interface located in the ```proton-web-sdk``` directory should be changed in order to customize it. -​ -#### Styling Options Definition of basic styling + - **enabledWalletTypes** - type stringp[] - optional - The list of enabled wallets. All wallets are enabled by default. Possible values: proton, webauth, anchor. ​ -Basic interface contains several fields which can be overridden by the styles provided by the developer. All color types are acceptable. + - **walletType** – type string – optional – The name of the wallet to use. In this case the wallet selector step will be skipped. -##### customStyleOptions: -``` -modalBackgroundColor: _string_, -logoBackgroundColor: _string_, -isLogoRound: _boolean_, -optionBackgroundColor: _string_, -optionFontColor: _string_, -primaryFontColor: _string_, -secondaryFontColor: _string_, -linkColor: _string_, -``` +**uiOptions:** + - **theme** - type string - optional - The name of the theme applied for the widget +​ + - **themes** – type Object – optional – object which can includes options to configure or defined theme of the widget. +Check the ```proton-web-renderer``` directory for more info. ## Contributors ​ diff --git a/packages/proton-browser-transport/.prettierrc b/packages/proton-browser-transport/.prettierrc index 3d952d4..4ba6022 100644 --- a/packages/proton-browser-transport/.prettierrc +++ b/packages/proton-browser-transport/.prettierrc @@ -1,19 +1,10 @@ { - "arrowParens": "always", - "bracketSpacing": false, - "endOfLine": "lf", - "printWidth": 100, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "plugins": ["prettier-plugin-svelte"], - "overrides": [ - { - "files": "*.svelte", - "options": { - "parser": "svelte" - } - } - ] + "arrowParens": "always", + "bracketSpacing": false, + "endOfLine": "lf", + "printWidth": 100, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5" } \ No newline at end of file diff --git a/packages/proton-browser-transport/Makefile b/packages/proton-browser-transport/Makefile deleted file mode 100644 index 0cb9f86..0000000 --- a/packages/proton-browser-transport/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -SRC_FILES := $(shell find src -name '*.ts' -or -name '*.svelte') -BIN := ./node_modules/.bin - -all: lib - -lib: ${SRC_FILES} package.json tsconfig.json node_modules rollup.config.js - @${BIN}/rollup -c && touch lib - -.PHONY: lint -lint: node_modules - @${BIN}/eslint src --ext .ts --fix - -.PHONY: publish -publish: | distclean node_modules - @git diff-index --quiet HEAD || (echo "Uncommitted changes, please commit first" && exit 1) - @git fetch origin && git diff origin/master --quiet || (echo "Changes not pushed to origin, please push first" && exit 1) - @yarn config set version-tag-prefix "" && yarn config set version-git-message "Version %s" - @yarn publish && git push && git push --tags - -node_modules: - yarn install --non-interactive --frozen-lockfile --ignore-scripts - -.PHONY: clean -clean: - rm -rf lib/ - -.PHONY: distclean -distclean: clean - rm -rf node_modules/ diff --git a/packages/proton-browser-transport/README.md b/packages/proton-browser-transport/README.md index 804121d..6265308 100644 --- a/packages/proton-browser-transport/README.md +++ b/packages/proton-browser-transport/README.md @@ -33,14 +33,10 @@ const link = new ProtonLink({transport}) ## Developing -You need [Make](https://www.gnu.org/software/make/), [node.js](https://nodejs.org/en/) and [yarn](https://classic.yarnpkg.com/en/docs/install) installed. +You need [node.js](https://nodejs.org/en/) and [pnpm](https://pnpm.io/installation) installed. -Clone the repository and run `make` to checkout all dependencies and build the project. See the [Makefile](./Makefile) for other useful targets. Before submitting a pull request make sure to run `make lint`. +Clone the repository and run `pnpm run build` to checkout all dependencies and build the project. See the [package.json](./package.json) for other useful commanfs. Before submitting a pull request make sure to run `pnpm run lint`. ## License [MIT](./LICENSE.md) - ---- - -Made with ☕️ & ❤️ by [Greymass](https://greymass.com), if you find this useful please consider [supporting us](https://greymass.com/support-us). diff --git a/packages/proton-browser-transport/eslint.config.ts b/packages/proton-browser-transport/eslint.config.ts index 577391b..a1e3619 100644 --- a/packages/proton-browser-transport/eslint.config.ts +++ b/packages/proton-browser-transport/eslint.config.ts @@ -1,10 +1,7 @@ import js from '@eslint/js' import globals from 'globals' import tseslint from 'typescript-eslint' -import css from '@eslint/css' import {defineConfig, globalIgnores} from 'eslint/config' -import svelte from 'eslint-plugin-svelte' -import svelteparser from 'svelte-eslint-parser' import prettier from 'eslint-plugin-prettier/recommended' export default defineConfig([ @@ -16,25 +13,12 @@ export default defineConfig([ languageOptions: { globals: {...globals.browser, ...globals.node, NodeJS: true}, parserOptions: { - extraFileExtensions: ['.svelte'], tsconfigRootDir: __dirname, }, }, }, tseslint.configs.recommended, - svelte.configs.recommended, prettier, - svelte.configs.prettier, - { - files: ['**/*.svelte', '**/*.svelte.ts'], - languageOptions: { - parser: svelteparser, - parserOptions: { - parser: tseslint.parser, - extraFileExtensions: ['.svelte'], - }, - }, - }, { rules: { 'prettier/prettier': 'warn', @@ -67,7 +51,4 @@ export default defineConfig([ ], }, }, - {files: ['**/*.css'], plugins: {css}, language: 'css/css', extends: ['css/recommended']}, - - // {files: ['**/*.json'], plugins: {json}, language: 'json/json', extends: ['json/recommended']}, ]) diff --git a/packages/proton-browser-transport/package.json b/packages/proton-browser-transport/package.json index 52b0cf5..66ef3f0 100644 --- a/packages/proton-browser-transport/package.json +++ b/packages/proton-browser-transport/package.json @@ -1,8 +1,11 @@ { "name": "@proton/browser-transport", - "version": "4.4.1", + "version": "5.0.0", "description": "Vanilla JS browser transport for Proton Link", - "homepage": "https://github.com/protonprotocol/proton-browser-transport", + "homepage": "https://github.com/XPRNetwork/proton-web-sdk", + "bugs": { + "url": "https://github.com/XPRNetwork/proton-web-sdk/issues" + }, "license": "BSD-3-Clause", "type": "module", "main": "lib/proton-browser-transport.js", @@ -15,19 +18,21 @@ }, "scripts": { "watch": "rollup -c -w", - "prepare": "make", - "build": "make", - "lint": "make lint" + "prepare": "pnpm run build", + "build": "rollup -c", + "lint": "eslint ./src --ext .ts --fix" }, "files": [ "lib", "src" ], "dependencies": { - "@proton/link": "workspace:^" + "@proton/link": "workspace:^", + "@proton/web-renderer": "workspace:^" }, "peerDependencies": { - "@proton/link": "workspace:^" + "@proton/link": "workspace:^", + "@proton/web-renderer": "workspace:^" }, "devDependencies": { "@eslint/css": "^0.14.1", @@ -39,31 +44,21 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.2", - "@tsconfig/svelte": "^5.0.4", "@types/node": "^16.4.0", "@types/ws": "^7.2.2", "core-js": "^3.42.0", "eslint": "^9.39.1", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-svelte": "^3.13.0", "globals": "^16.5.0", "jiti": "^2.6.1", - "postcss": "^8.5.3", "prettier": "^3.5.3", - "prettier-plugin-svelte": "^3.4.0", "rollup": "^4.40.0", "rollup-plugin-dts": "^6.2.1", - "rollup-plugin-svelte": "^7.2.0", - "sass": "^1.89.0", - "svelte": "^5.41.0", - "svelte-check": "^4.3.3", - "svelte-eslint-parser": "^1.4.0", - "svelte-preprocess": "^6.0.3", "ts-node": "^10.0.0", "tslib": "^2.4.0", "typescript": "~5.4.0", "typescript-eslint": "^8.46.4" }, "gitHead": "d81cd76c8aacc2538243e24d0801b3eae4b8dba2" -} +} \ No newline at end of file diff --git a/packages/proton-browser-transport/rollup.config.js b/packages/proton-browser-transport/rollup.config.js index 18dc95b..a7b1ac8 100644 --- a/packages/proton-browser-transport/rollup.config.js +++ b/packages/proton-browser-transport/rollup.config.js @@ -1,14 +1,12 @@ import {createRequire} from 'module' import fs from 'fs' import dts from 'rollup-plugin-dts' -import svelte from 'rollup-plugin-svelte' import resolve from '@rollup/plugin-node-resolve' import commonjs from '@rollup/plugin-commonjs' import typescript from '@rollup/plugin-typescript' import replace from '@rollup/plugin-replace' import terser from '@rollup/plugin-terser' import json from '@rollup/plugin-json' -import {sveltePreprocess} from 'svelte-preprocess' const pkg = createRequire(import.meta.url)('./package.json') @@ -30,19 +28,6 @@ const replaceVersion = replace({ __ver: `${pkg.version}`, }) -const svelteOnWarn = (warning, handler) => { - if ( - ['a11y-click-events-have-key-events', 'a11y-interactive-supports-focus'].includes(warning.code) - ) - return - // let Rollup handle all other warnings normally - handler(warning) -} - -const getCssHash = ({hash, css, filename}) => { - return `pbt-${hash(filename + css)}` -} - export default [ { input: 'src/index.ts', @@ -54,16 +39,6 @@ export default [ exports: 'default', }, plugins: [ - svelte({ - preprocess: sveltePreprocess({sourceMap: !production}), - compilerOptions: { - cssHash: getCssHash, - // enable run-time checks when not in production - dev: !production, - }, - emitCss: false, - onwarn: svelteOnWarn, - }), replaceVersion, // If you have external dependencies installed from // npm, you'll most likely need these plugins. In @@ -72,7 +47,6 @@ export default [ // https://github.com/rollup/plugins/tree/master/packages/commonjs resolve({ browser: true, - dedupe: ['svelte'], }), typescript({ sourceMap: !production, @@ -92,16 +66,6 @@ export default [ sourcemap: !production, }, plugins: [ - svelte({ - preprocess: sveltePreprocess({sourceMap: !production}), - compilerOptions: { - cssHash: getCssHash, - // enable run-time checks when not in production - dev: !production, - }, - emitCss: false, - onwarn: svelteOnWarn, - }), replaceVersion, // If you have external dependencies installed from // npm, you'll most likely need these plugins. In @@ -110,7 +74,6 @@ export default [ // https://github.com/rollup/plugins/tree/master/packages/commonjs resolve({ browser: true, - dedupe: ['svelte'], }), typescript({ sourceMap: !production, @@ -134,7 +97,7 @@ export default [ { input: 'src/index.ts', output: { - globals: {'@proton/link': 'ProtonLink'}, + globals: {'@proton/link': 'ProtonLink', '@proton/web-renderer': 'WebRenderer'}, banner, name: 'ProtonBrowserTransport', file: pkg.unpkg, @@ -142,16 +105,6 @@ export default [ sourcemap: !production, }, plugins: [ - svelte({ - preprocess: sveltePreprocess({sourceMap: !production}), - compilerOptions: { - cssHash: getCssHash, - // enable run-time checks when not in production - dev: !production, - }, - emitCss: false, - onwarn: svelteOnWarn, - }), replaceVersion, // If you have external dependencies installed from // npm, you'll most likely need these plugins. In @@ -160,7 +113,6 @@ export default [ // https://github.com/rollup/plugins/tree/master/packages/commonjs resolve({ browser: true, - dedupe: ['svelte'], }), json(), commonjs(), diff --git a/packages/proton-browser-transport/src/state.svelte.ts b/packages/proton-browser-transport/src/state.svelte.ts deleted file mode 100644 index c3ac443..0000000 --- a/packages/proton-browser-transport/src/state.svelte.ts +++ /dev/null @@ -1,27 +0,0 @@ -export interface DialogProps { - show?: boolean - showBackButton?: boolean - walletType?: string - title?: HTMLElement | string - subtitle?: HTMLElement | string | null - showFootnote?: boolean - countDown?: string | null - qrData?: {code: string; link: string} | null - action?: {text: string; callback: () => void} | null - back?: () => void - close?: () => void -} - -export const DIALOG_STATE = $state({ - show: false, - showBackButton: false, - walletType: 'proton', - title: '', - subtitle: null, - showFootnote: false, - countDown: null, - qrData: null, - action: null, - close: () => {}, - back: () => {}, -}) diff --git a/packages/proton-browser-transport/src/transport.ts b/packages/proton-browser-transport/src/transport.ts index a1fde02..78c1fe3 100644 --- a/packages/proton-browser-transport/src/transport.ts +++ b/packages/proton-browser-transport/src/transport.ts @@ -1,4 +1,4 @@ -import {Base64u, SessionError} from '@proton/link' +import {Base64u, SessionError, WalletTypeError} from '@proton/link' import type { Bytes, LinkChannelSession, @@ -7,14 +7,12 @@ import type { LinkTransport, SigningRequest, } from '@proton/link' -import DialogWidget from './views/Dialog.svelte' import {Storage} from './storage' import {generateReturnUrl, isMobile, parseErrorMessage} from './utils' -import {type BrowserTransportOptions, type DialogArgs, SkipToManual} from './types' - +import {type BrowserTransportOptions, SkipToManual} from './types' import GenerateQrCode from './qrcode' -import {mount, unmount} from 'svelte' -import {DIALOG_STATE} from './state.svelte' +import {WebRenderer} from '@proton/web-renderer' +import type {UIRenderer} from '@proton/web-renderer' export class BrowserTransport implements LinkTransport { /** Package version. */ @@ -27,129 +25,25 @@ export class BrowserTransport implements LinkTransport { private activeRequest?: SigningRequest // eslint-disable-next-line no-unused-vars private activeCancel?: (reason: string | Error) => void - private countdownTimer?: NodeJS.Timeout - private closeTimer?: NodeJS.Timeout private showingManual: boolean - private Widget?: any - private widgetProps = DIALOG_STATE - private widgetHolder?: Element + private ui?: UIRenderer - constructor(public readonly options: BrowserTransportOptions = {}) { + constructor(options: BrowserTransportOptions = {}) { this.requestStatus = !(options.requestStatus === false) this.requestAccount = options.requestAccount || '' this.walletType = options.walletType || 'proton' this.storage = new Storage(options.storagePrefix || 'proton-link') this.showingManual = false - } - - private closeModal() { - this.hide() - if (this.activeCancel) { - this.activeRequest = undefined - this.activeCancel('') - this.activeCancel = undefined - } - } - - private setupWidget() { - this.showingManual = false - if (!this.Widget) { - if (!this.widgetHolder) { - this.widgetHolder = document.createElement('div') - document.body.appendChild(this.widgetHolder) - } - - if (this.widgetHolder) { - this.widgetProps.back = () => { - document.dispatchEvent(new CustomEvent('backToSelector')) - } - this.widgetProps.close = () => { - this.closeModal() - } - this.Widget = mount(DialogWidget, {props: this.widgetProps, target: this.widgetHolder}) - } - } - } - - private hide() { - if (this.Widget) { - unmount(this.Widget) - this.Widget = undefined - } - if (this.widgetHolder) { - this.widgetHolder.remove() - this.widgetHolder = undefined - } - this.clearTimers() - } - - private showDialog(args: DialogArgs) { - this.setupWidget() - if (this.Widget) { - this.widgetProps.showBackButton = !args.hideBackButton - this.widgetProps.walletType = this.walletType - this.widgetProps.title = args.title || '' - this.widgetProps.subtitle = args.subtitle || '' - this.widgetProps.action = args.action || null - this.widgetProps.showFootnote = args.showFootnote - this.widgetProps.countDown = (args.content && args.content.countDown) || null - this.widgetProps.qrData = (args.content && args.content.qrData) || null - this.widgetProps.show = true - } - } - - private displayRequest( - request: SigningRequest, - title: string, - subtitle = '', - hideBackButton = false - ) { - const sameDeviceRequest = request.clone() - const returnUrl = generateReturnUrl() - sameDeviceRequest.setInfoKey('same_device', true) - sameDeviceRequest.setInfoKey('return_path', returnUrl) - - if (this.requestAccount.length > 0) { - request.setInfoKey('req_account', this.requestAccount) - sameDeviceRequest.setInfoKey('req_account', this.requestAccount) - } - - const sameDeviceUri = sameDeviceRequest.encode(true, false) - const crossDeviceUri = request.encode(true, false) - const qrCode = GenerateQrCode(crossDeviceUri) - const qrData = { - code: qrCode, - link: sameDeviceUri, + if (options.ui) { + this.ui = options.ui + } else { + this.ui = new WebRenderer() } - - this.showDialog({ - title, - showFootnote: request.isIdentity(), - subtitle, - hideBackButton, - content: {qrData}, - }) } public async showLoading() { - this.showDialog({ - title: 'Pending...', - subtitle: 'Preparing request...', - hideBackButton: true, - type: 'loading', - }) - } - - public onRequest(request: SigningRequest, cancel: (_reason: string | Error) => void) { - this.clearTimers() - this.activeRequest = request - this.activeCancel = cancel - try { - this.displayRequest(request, 'Scan the QR-Code') - } catch (e) { - cancel(e as string | Error) - } + this.ui?.showLoading() } public onSessionRequest( @@ -163,6 +57,7 @@ export class BrowserTransport implements LinkTransport { if (session.type === 'fallback') { this.onRequest(request, cancel) + if (session.metadata.sameDevice) { // trigger directly on a fallback same-device session window.location.href = request.encode() @@ -175,41 +70,21 @@ export class BrowserTransport implements LinkTransport { const deviceName = session.metadata.name - // Countdown timer - this.clearTimers() const timeout = session.metadata.timeout || 60 * 1000 * 2 - const start = Date.now() - const formatCountDown = (startTime: number) => { - const secondsLeft = Math.floor((timeout + startTime - Date.now()) / 1000) - const seconds = String(secondsLeft % 60).padStart(2, '0') - const minutes = String(Math.floor(secondsLeft / 60)).padStart(2, '0') - return secondsLeft > 0 ? `${minutes}:${seconds}` : '00:00' - } - const updateCountdown = (startTime: number) => { - if (this.Widget) { - this.widgetProps.countDown = formatCountDown(startTime) - } - } - - this.countdownTimer = setInterval(() => updateCountdown(start), 1000) - updateCountdown(start) - // Content subtitle - this.showDialog({ - title: 'Signing Request', - subtitle: `Please open ${deviceName || 'linked wallet'} to review the transaction`, - content: { - countDown: formatCountDown(start), + this.ui?.sign({ + wallet_type: this.walletType, + ...this.getCommonCallbacks({ + noBack: true, + }), + data: { + timeout, + deviceName, }, - hideBackButton: true, - action: { - text: 'Optional: Sign manually using QR code', - callback: () => { - this.clearTimers() - const error = new SessionError('Manual', 'E_TIMEOUT', session) - error[SkipToManual] = true - cancel(error) - }, + onManual: () => { + const error = new SessionError('Manual', 'E_TIMEOUT', session) + error[SkipToManual] = true + cancel(error) }, }) @@ -218,6 +93,16 @@ export class BrowserTransport implements LinkTransport { } } + public onRequest(request: SigningRequest, cancel: (_reason: string | Error) => void) { + this.activeRequest = request + this.activeCancel = cancel + try { + this.displayRequest(request) + } catch (e) { + cancel(e as string | Error) + } + } + public sendSessionPayload(payload: Bytes, session: LinkSession): boolean { if (!session.metadata.triggerUrl || !session.metadata.sameDevice) { // not same device or no trigger url supported @@ -231,36 +116,6 @@ export class BrowserTransport implements LinkTransport { return true } - private clearTimers() { - if (this.closeTimer) { - clearTimeout(this.closeTimer) - this.closeTimer = undefined - } - this.clearCountdown() - } - - private clearCountdown() { - if (this.countdownTimer) { - if (this.Widget) { - this.widgetProps.countDown = undefined - } - clearInterval(this.countdownTimer) - this.countdownTimer = undefined - } - } - - private showRecovery(request: SigningRequest, session: LinkSession) { - request.data.info = request.data.info.filter((pair) => pair.key !== 'return_path') - if (session.type === 'channel') { - const channelSession = session as Partial - if (channelSession.addLinkInfo) { - channelSession.addLinkInfo(request) - } - } - this.displayRequest(request, 'Sign manually', '', true) - this.showingManual = true - } - public async prepare(request: SigningRequest, _?: LinkSession) { return request } @@ -288,17 +143,18 @@ export class BrowserTransport implements LinkTransport { return true } - this.clearCountdown() - - this.showDialog({ - title: 'Unable to reach device', - subtitle: - error.message || - `Unable to deliver the request to ${session.metadata.name || 'the linked wallet'}.`, - type: 'warning', - action: { - text: 'Optional: Sign manually using QR code', - callback: () => this.showRecovery(request, session), + // this.clearCountdown() + + this.ui?.recoverError({ + wallet_type: this.walletType, + data: { + name: 'Unable to reach device', + description: + error.message || + `Unable to deliver the request to ${session.metadata.name || 'the linked wallet'}.`, + }, + onManual: () => { + this.showRecovery(request, session) }, }) return true @@ -306,7 +162,6 @@ export class BrowserTransport implements LinkTransport { public onSuccess(request: SigningRequest) { if (request === this.activeRequest) { - this.clearTimers() this.hide() } } @@ -317,14 +172,13 @@ export class BrowserTransport implements LinkTransport { return } - this.clearTimers() - if (this.requestStatus) { - this.showDialog({ - title: 'Transaction Error', - subtitle: parseErrorMessage(error), - hideBackButton: true, - type: 'error', + this.ui?.showError({ + wallet_type: this.walletType, + data: { + name: 'Transaction Error', + description: parseErrorMessage(error), + }, }) } else { this.hide() @@ -334,4 +188,92 @@ export class BrowserTransport implements LinkTransport { public userAgent() { return `BrowserTransport/${BrowserTransport.version} ${navigator.userAgent}` } + + private closeModal(error?: string | Error) { + if (this.activeCancel) { + this.activeRequest = undefined + this.activeCancel(error ?? '') + this.activeCancel = undefined + } + + this.hide() + } + + private getCommonCallbacks({noBack}: {noBack?: boolean} = {}) { + return { + onClose: () => { + this.closeModal() + }, + onBack: !noBack + ? () => { + this.closeModal(new WalletTypeError('Back to selector')) + } + : undefined, + } + } + + private hide() { + if (this.ui) { + this.ui.close() + } + } + + private displayRequest( + request: SigningRequest, + { + hideBackButton, + isSignRequest, + }: { + hideBackButton?: boolean + isSignRequest?: boolean + } = { + hideBackButton: false, + } + ) { + const sameDeviceRequest = request.clone() + const returnUrl = generateReturnUrl() + sameDeviceRequest.setInfoKey('same_device', true) + sameDeviceRequest.setInfoKey('return_path', returnUrl) + + if (this.requestAccount.length > 0) { + request.setInfoKey('req_account', this.requestAccount) + sameDeviceRequest.setInfoKey('req_account', this.requestAccount) + } + + const sameDeviceUri = sameDeviceRequest.encode(true, false) + const crossDeviceUri = request.encode(true, false) + + const qrCode = GenerateQrCode(crossDeviceUri) + const qrData = { + code: qrCode, + link: sameDeviceUri, + } + + const data = { + data: qrData, + wallet_type: this.walletType, + ...this.getCommonCallbacks({noBack: hideBackButton}), + } + + if (isSignRequest) { + this.ui?.signManually(data) + } else { + this.ui?.login(data) + } + } + + private showRecovery(request: SigningRequest, session: LinkSession) { + request.data.info = request.data.info.filter((pair) => pair.key !== 'return_path') + if (session.type === 'channel') { + const channelSession = session as Partial + if (channelSession.addLinkInfo) { + channelSession.addLinkInfo(request) + } + } + this.displayRequest(request, { + hideBackButton: true, + isSignRequest: true, + }) + this.showingManual = true + } } diff --git a/packages/proton-browser-transport/src/types.ts b/packages/proton-browser-transport/src/types.ts index d674446..caa12d2 100644 --- a/packages/proton-browser-transport/src/types.ts +++ b/packages/proton-browser-transport/src/types.ts @@ -1,3 +1,5 @@ +import type {UIRenderer} from '@proton/web-renderer' + export const SkipToManual = Symbol() export interface BrowserTransportOptions { @@ -9,20 +11,6 @@ export interface BrowserTransportOptions { walletType?: string /** Local storage prefix, defaults to `proton-link`. */ storagePrefix?: string -} - -export interface footNoteDownloadLinks { - [key: string]: string -} -export interface DialogArgs { - title: string | HTMLElement - manual?: HTMLElement - subtitle?: string | HTMLElement - type?: string - content?: Record - action?: {text: string; callback: () => void} - showFootnote?: boolean - hideLogo?: boolean - hideBackButton?: boolean + ui?: UIRenderer } diff --git a/packages/proton-browser-transport/src/utils.ts b/packages/proton-browser-transport/src/utils.ts index 1c37a57..b3bbd81 100644 --- a/packages/proton-browser-transport/src/utils.ts +++ b/packages/proton-browser-transport/src/utils.ts @@ -1,5 +1,3 @@ -import type {footNoteDownloadLinks} from './types' - /** * The UserAgent for IPad has changed since IOS 13. * Now it looks the same as for MacOS, so there is no `IPad` keyword anymore. @@ -121,7 +119,7 @@ export function parseErrorMessage(error: any) { } if (error.details) { - const {code, details, name, what} = error + const {details, name, what} = error if (name === 'eosio_assert_message_exception') { errorMessage = details[0].message.replace('assertion failure with message: ', '') } else if (details.length > 0) { @@ -135,12 +133,3 @@ export function parseErrorMessage(error: any) { return errorMessage } - -const footnoteLinks: footNoteDownloadLinks = { - proton: 'https://xprnetwork.org/wallet', - anchor: 'https://greymass.com/en/anchor/', -} - -export function getFootnoteLink(walletType: string): string { - return footnoteLinks[walletType] || '' -} diff --git a/packages/proton-browser-transport/src/views/CountDown.svelte b/packages/proton-browser-transport/src/views/CountDown.svelte deleted file mode 100644 index 4679ecd..0000000 --- a/packages/proton-browser-transport/src/views/CountDown.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/packages/proton-browser-transport/src/views/Dialog.svelte b/packages/proton-browser-transport/src/views/Dialog.svelte deleted file mode 100644 index 745f257..0000000 --- a/packages/proton-browser-transport/src/views/Dialog.svelte +++ /dev/null @@ -1,338 +0,0 @@ - - - - - diff --git a/packages/proton-browser-transport/src/views/QRCode.svelte b/packages/proton-browser-transport/src/views/QRCode.svelte deleted file mode 100644 index e8e3bdf..0000000 --- a/packages/proton-browser-transport/src/views/QRCode.svelte +++ /dev/null @@ -1,123 +0,0 @@ - - - - - diff --git a/packages/proton-link/Makefile b/packages/proton-link/Makefile deleted file mode 100644 index 8c496d8..0000000 --- a/packages/proton-link/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -SRC_FILES := $(shell find src -name '*.ts') - -lib: ${SRC_FILES} package.json tsconfig.json node_modules rollup.config.js - @./node_modules/.bin/rollup -c && touch lib - -.PHONY: test -test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts --grep '$(grep)' - -.PHONY: coverage -coverage: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/nyc --reporter=html ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts -R nyan && open coverage/index.html - -.PHONY: lint -lint: node_modules - @./node_modules/.bin/eslint src --ext .ts --fix - -.PHONY: ci-test -ci-test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/nyc --reporter=text ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts -R list - -.PHONY: ci-lint -ci-lint: node_modules - @./node_modules/.bin/eslint src --ext .ts --max-warnings 0 --format unix && echo "Ok" - -docs: $(SRC_FILES) node_modules - ./node_modules/.bin/typedoc \ - --excludeInternal \ - --excludePrivate --excludeProtected \ - --name "Proton Link" --includeVersion --readme none \ - --out docs \ - src/index-module.ts - -.PHONY: deploy-site -deploy-site: docs - cp -r ./examples ./docs/examples/ - ./node_modules/.bin/gh-pages -d docs - -node_modules: - yarn install --non-interactive --frozen-lockfile --ignore-scripts - -.PHONY: publish -publish: | distclean node_modules - @git diff-index --quiet HEAD || (echo "Uncommitted changes, please commit first" && exit 1) - @git fetch origin && git diff origin/master --quiet || (echo "Changes not pushed to origin, please push first" && exit 1) - @yarn config set version-tag-prefix "" && yarn config set version-git-message "Version %s" - @yarn publish && git push && git push --tags - -.PHONY: clean -clean: - rm -rf lib/ coverage/ docs/ - -.PHONY: distclean -distclean: clean - rm -rf node_modules/ diff --git a/packages/proton-link/README.md b/packages/proton-link/README.md index 396704a..f98cba8 100644 --- a/packages/proton-link/README.md +++ b/packages/proton-link/README.md @@ -178,8 +178,8 @@ A session key and unique channel URL is generated by the client which is attache ## Developing -You need [Make](https://www.gnu.org/software/make/), [node.js](https://nodejs.org/en/) and [yarn](https://classic.yarnpkg.com/en/docs/install) installed. +You need [node.js](https://nodejs.org/en/) and [pnpm](https://pnpm.io/installation) installed. -Clone the repository and run `make` to checkout all dependencies and build the project. See the [Makefile](./Makefile) for other useful targets. Before submitting a pull request make sure to run `make lint`. +Clone the repository and run `pnpm run build` to checkout all dependencies and build the project. See the [package.json](./package.json) for other useful commanfs. Before submitting a pull request make sure to run `pnpm run lint`. --- \ No newline at end of file diff --git a/packages/proton-link/package.json b/packages/proton-link/package.json index accc115..cb286da 100644 --- a/packages/proton-link/package.json +++ b/packages/proton-link/package.json @@ -1,7 +1,11 @@ { "name": "@proton/link", - "version": "4.4.1", + "version": "5.0.0", "description": "Library for authenticating and signing transactions using the Proton Link protocol", + "homepage": "https://github.com/XPRNetwork/proton-web-sdk", + "bugs": { + "url": "https://github.com/XPRNetwork/proton-web-sdk/issues" + }, "license": "BSD-3-Clause", "main": "lib/proton-link.js", "module": "lib/proton-link.m.js", @@ -13,25 +17,13 @@ }, "scripts": { "watch": "rollup -c -w", - "prepare": "make", - "build": "make", - "lint": "make lint" + "prepare": "pnpm run build", + "build": "rollup -c", + "lint": "eslint src --ext .ts --fix" }, "directories": { "lib": "lib" }, - "repository": { - "type": "git", - "url": "git+https://github.com/protonprotocol/proton-link.git" - }, - "authors": [ - "Johan Nordberg ", - "Aaron Cox " - ], - "bugs": { - "url": "https://github.com/protonprotocol/proton-link/issues" - }, - "homepage": "https://github.com/protonprotocol/proton-link", "files": [ "lib", "src" @@ -45,6 +37,7 @@ "@jafri/asmcrypto.js": "^2.3.2", "@proton/js": "^28.1.2", "@proton/signing-request": "workspace:^", + "@proton/web-renderer": "workspace:^", "bson": "^4.6.0", "fetch-ponyfill": "^7.1.0", "isomorphic-ws": "^4.0.1", @@ -84,4 +77,4 @@ "typescript": "~5.4.0", "typescript-eslint": "^8.46.4" } -} +} \ No newline at end of file diff --git a/packages/proton-link/src/errors.ts b/packages/proton-link/src/errors.ts index 74917e9..b208aaa 100644 --- a/packages/proton-link/src/errors.ts +++ b/packages/proton-link/src/errors.ts @@ -7,7 +7,7 @@ import type {LinkSession} from './link-session' * - `E_CANCEL`: The [[LinkTransport]] canceled the request. * - `E_IDENTITY`: Identity proof failed to verify. */ -export type LinkErrorCode = 'E_DELIVERY' | 'E_TIMEOUT' | 'E_CANCEL' | 'E_IDENTITY' +export type LinkErrorCode = 'E_DELIVERY' | 'E_TIMEOUT' | 'E_CANCEL' | 'E_IDENTITY' | 'E_WALLET_TYPE' /** * Error that is thrown if a [[LinkTransport]] cancels a request. @@ -20,6 +20,17 @@ export class CancelError extends Error { } } +/** + * Error that is thrown if a [[LinkTransport]] navigates back to wallet type selection. + * @internal + */ +export class WalletTypeError extends Error { + public code = 'E_WALLET_TYPE' + constructor(reason?: string) { + super(`Request cancelled ${reason ? '(' + reason + ')' : ''}`) + } +} + /** * Error that is thrown if an identity request fails to verify. * @internal diff --git a/packages/proton-react-native-sdk/Makefile b/packages/proton-react-native-sdk/Makefile deleted file mode 100644 index 3f5c8cf..0000000 --- a/packages/proton-react-native-sdk/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -SRC_FILES := $(shell find src -name '*.ts') - -lib: ${SRC_FILES} package.json tsconfig.json node_modules rollup.config.js - @./node_modules/.bin/rollup -c && touch lib - -.PHONY: test -test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts --grep '$(grep)' - -.PHONY: coverage -coverage: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/nyc --reporter=html ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts -R nyan && open coverage/index.html - -.PHONY: lint -lint: node_modules - @./node_modules/.bin/eslint src --ext .ts --fix - -.PHONY: ci-test -ci-test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/nyc --reporter=text ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts -R list - -.PHONY: ci-lint -ci-lint: node_modules - @./node_modules/.bin/eslint src --ext .ts --max-warnings 0 --format unix && echo "Ok" - -.PHONY: clean -clean: - rm -rf lib/ coverage/ docs/ - -.PHONY: distclean -distclean: clean - rm -rf node_modules/ diff --git a/packages/proton-react-native-sdk/package.json b/packages/proton-react-native-sdk/package.json index 6c17b1c..ef86f4a 100644 --- a/packages/proton-react-native-sdk/package.json +++ b/packages/proton-react-native-sdk/package.json @@ -10,6 +10,10 @@ "main": "lib/react-native-sdk.js", "typings": "lib/types/index.d.ts", "type": "module", + "homepage": "https://github.com/XPRNetwork/proton-web-sdk", + "bugs": { + "url": "https://github.com/XPRNetwork/proton-web-sdk/issues" + }, "files": [ "lib", "src" @@ -22,9 +26,9 @@ }, "scripts": { "watch": "rollup -c -w", - "prepare": "make", - "build": "make", - "lint": "make lint" + "prepare": "pnpm run build", + "build": "rollup -c", + "lint": "eslint src --ext .ts --fix" }, "dependencies": { "@proton/js": "^28.1.2", @@ -43,7 +47,6 @@ }, "gitHead": "e15e7e40cc610b4a7ceeaee75909ff6389d8f1e5", "devDependencies": { - "@eslint/js": "^9.39.1", "@rollup/plugin-commonjs": "^28.0.3", "@rollup/plugin-json": "^6.1.0", diff --git a/packages/proton-signing-request/Makefile b/packages/proton-signing-request/Makefile deleted file mode 100644 index 973bda4..0000000 --- a/packages/proton-signing-request/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -SRC_FILES := $(shell find src -name '*.ts') -BIN := ./node_modules/.bin - -lib: ${SRC_FILES} package.json tsconfig.json node_modules rollup.config.js - @${BIN}/rollup -c && touch lib - -.PHONY: test -test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ${BIN}/mocha -r ts-node/register --extension ts test/*.ts --grep '$(grep)' - -.PHONY: coverage -coverage: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ${BIN}/nyc --reporter=html ${BIN}/mocha -r ts-node/register --extension ts test/*.ts -R nyan && open coverage/index.html - -.PHONY: lint -lint: node_modules - @${BIN}/eslint src --ext .ts --fix - -.PHONY: ci-test -ci-test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ${BIN}/nyc --reporter=text ${BIN}/mocha -r ts-node/register --extension ts test/*.ts -R list - -.PHONY: ci-lint -ci-lint: node_modules - @${BIN}/eslint src --ext .ts --max-warnings 0 --format unix && echo "Ok" - -node_modules: - yarn install --non-interactive --frozen-lockfile --ignore-scripts - -.PHONY: publish -publish: | distclean node_modules - @git diff-index --quiet HEAD || (echo "Uncommitted changes, please commit first" && exit 1) - @git fetch origin && git diff origin/master --quiet || (echo "Changes not pushed to origin, please push first" && exit 1) - @yarn config set version-tag-prefix "" && yarn config set version-git-message "Version %s" - @yarn publish && git push && git push --tags - -.PHONY: clean -clean: - rm -rf lib/ coverage/ - -.PHONY: distclean -distclean: clean - rm -rf node_modules/ diff --git a/packages/proton-signing-request/package.json b/packages/proton-signing-request/package.json index f7ed793..a409808 100644 --- a/packages/proton-signing-request/package.json +++ b/packages/proton-signing-request/package.json @@ -1,8 +1,11 @@ { "name": "@proton/signing-request", - "version": "4.4.1", + "version": "5.0.0", "description": "Proton Signing Request (ESR / EEP-7) encoder and decoder", - "homepage": "https://github.com/ProtonProtocol/proton-signing-request", + "homepage": "https://github.com/XPRNetwork/proton-web-sdk", + "bugs": { + "url": "https://github.com/XPRNetwork/proton-web-sdk/issues" + }, "license": "MIT", "main": "lib/proton-signing-request.js", "module": "lib/proton-signing-request.m.js", @@ -19,9 +22,9 @@ }, "scripts": { "watch": "rollup -c -w", - "prepare": "make", - "build": "make", - "lint": "make lint" + "prepare": "pnpm run build", + "build": "rollup -c", + "lint": "eslint src --ext .ts --fix" }, "dependencies": { "@greymass/eosio": "^0.6.1" @@ -62,4 +65,4 @@ "typescript": "~5.4.0", "typescript-eslint": "^8.46.4" } -} +} \ No newline at end of file diff --git a/packages/proton-web-renderer/.editorconfig b/packages/proton-web-renderer/.editorconfig new file mode 100644 index 0000000..4a7ea30 --- /dev/null +++ b/packages/proton-web-renderer/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/proton-web-renderer/.gitignore b/packages/proton-web-renderer/.gitignore new file mode 100644 index 0000000..6f8d7ae --- /dev/null +++ b/packages/proton-web-renderer/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +lib +lib/ +lib/* +docs/ +.nyc_output +coverage diff --git a/packages/proton-web-renderer/.prettierrc b/packages/proton-web-renderer/.prettierrc new file mode 100644 index 0000000..3d952d4 --- /dev/null +++ b/packages/proton-web-renderer/.prettierrc @@ -0,0 +1,19 @@ +{ + "arrowParens": "always", + "bracketSpacing": false, + "endOfLine": "lf", + "printWidth": 100, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "plugins": ["prettier-plugin-svelte"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} \ No newline at end of file diff --git a/packages/proton-web-renderer/LICENSE b/packages/proton-web-renderer/LICENSE new file mode 100644 index 0000000..f671850 --- /dev/null +++ b/packages/proton-web-renderer/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2020 Greymass Inc. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistribution of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistribution in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT DESIGNED, LICENSED OR INTENDED FOR USE +IN THE DESIGN, CONSTRUCTION, OPERATION OR MAINTENANCE OF ANY MILITARY FACILITY. diff --git a/packages/proton-web-renderer/README.md b/packages/proton-web-renderer/README.md new file mode 100644 index 0000000..9de0fec --- /dev/null +++ b/packages/proton-web-renderer/README.md @@ -0,0 +1,139 @@ +# Proton Web Renderer - Browser Transport [![Package Version](https://img.shields.io/npm/v/@proton/web-renderer.svg?style=flat-square)](https://www.npmjs.com/package/@proton/web-renderer) ![License](https://img.shields.io/npm/l/@proton/web-renderer.svg?style=flat-square) + +A UI layer for usage of [Proton Link](https://github.com/protonprotocol/proton-link) within a web browser environment. + +## Basic usage + +UI is required for Proton Browser Transport to show widget for user. In most examples we use the browser transport with no configuration, like so: + +```ts +const transport = new ProtonBrowserTransport() +const link = new ProtonLink({transport}) +``` + +The UI will be created internally with default configuration. + +To use a customized Renderer it is required to create and instance of Renderer and pass it as argument to the transport +Parameters can be passed to the renders during construction as an object, allowing for the following optional changes: + +```ts +const renderer = new WebRenderer({ + /** The identifier of ShadowDOM node, defaults to proton-web-ui */ + id: 'custom-renderer' + + /** The name of the theme to use. Default: dark. Possible values: dark, light or any name of the theme defined in themes options */ + theme: 'light' + + /** The definition of themes. It is possible to adjust the existing themes (light or dark) and define a new one */ + themes: { + /* Theme name */ + light: { + /** Parameters of the theme should be provided here. Check Theme customization section to see all possible options */ + base: { + textColorBase: 'red' + } + } + } +}) + +const transport = new ProtonBrowserTransport({ + ui: renderer +}) +const link = new ProtonLink({transport}) +``` + +## Theme customization + +It is allowed to change color almost all elements of the widget. It is possible to define only some parameters, default values will be used for others. + +```js + + themes: { + /* Theme name. It could be light, dark or any other name*/ + light: { + // Base section + base: { + // Base text color + textColorBase: 'string', + // Secondary text color (used for some labels) + textColorSecondary: 'string', + // Color of text links + textColorLink: 'string', + + // Background color (or gradient) for the widget dialog + bodyBackground: 'string', + + // Border color for spacers and other similar elements + borderColor: 'string', + } + + // Tabs. Used, for example, to switch between mobile and desktop authentication types + tabs: { + // Background color of tabs block + background: 'string', + // Background color of the active element + backgroundActive: 'string', + // Text color for active element + textColorActive: 'string', + } + + // List. Used on Get WebAuth view to style list of features + list: { + // Background color of the list item + background: 'string', + // Border color of the list item + borderColor: 'string', + } + + // Buttons. There are several types of button used in the UI. Each has parameters for configuration + button: { + // Icon button + icon: { + // Button is transparent by default. This option defines the background color on hover + backgroundHover: 'string', + } + // Primary button + primary: { + // Defines a border color in default state + borderColor: 'string', + // Defines a border color on hover + borderColorHover: 'string', + // Defines a background color on button hover + backgroundHover: 'string', + } + // Outlined button + outlined: { + // Defines a border color in default state + borderColor: 'string', + // Defines a border color on hover + borderColorHover: 'string', + } + // Accent button + accent: { + // Defines a background color in default state + background: 'string', + // Defines a background color on button hover + backgroundHover: 'string', + // Defines a text color for the button + textColor: 'string', + } + // Flat button + flat: { + // Defines a text color in default state + textColor: 'string', + // Defines a text color on button hover + textColorHover: 'string', + } + } + } + } +``` +## Developing + +You need [node.js](https://nodejs.org/en/) and [pnpm](https://pnpm.io/installation) installed. + +Clone the repository and run `pnpm run build` to checkout all dependencies and build the project. See the [package.json](./package.json) for other useful commanfs. Before submitting a pull request make sure to run `pnpm run lint`. + +## License + +[MIT](./LICENSE.md) diff --git a/packages/proton-web-renderer/eslint.config.ts b/packages/proton-web-renderer/eslint.config.ts new file mode 100644 index 0000000..577391b --- /dev/null +++ b/packages/proton-web-renderer/eslint.config.ts @@ -0,0 +1,73 @@ +import js from '@eslint/js' +import globals from 'globals' +import tseslint from 'typescript-eslint' +import css from '@eslint/css' +import {defineConfig, globalIgnores} from 'eslint/config' +import svelte from 'eslint-plugin-svelte' +import svelteparser from 'svelte-eslint-parser' +import prettier from 'eslint-plugin-prettier/recommended' + +export default defineConfig([ + globalIgnores(['lib/*', 'node_modules/**/*']), + { + files: ['**/*.{js,mjs,cjs,ts,mts,cts}'], + plugins: {js}, + extends: ['js/recommended'], + languageOptions: { + globals: {...globals.browser, ...globals.node, NodeJS: true}, + parserOptions: { + extraFileExtensions: ['.svelte'], + tsconfigRootDir: __dirname, + }, + }, + }, + tseslint.configs.recommended, + svelte.configs.recommended, + prettier, + svelte.configs.prettier, + { + files: ['**/*.svelte', '**/*.svelte.ts'], + languageOptions: { + parser: svelteparser, + parserOptions: { + parser: tseslint.parser, + extraFileExtensions: ['.svelte'], + }, + }, + }, + { + rules: { + 'prettier/prettier': 'warn', + 'no-console': 'warn', + + 'sort-imports': [ + 'warn', + { + ignoreCase: true, + ignoreDeclarationSort: true, + }, + ], + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-empty-function': 'off', + 'no-inner-declarations': 'off', + 'no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + }, + ], + }, + }, + {files: ['**/*.css'], plugins: {css}, language: 'css/css', extends: ['css/recommended']}, + + // {files: ['**/*.json'], plugins: {json}, language: 'json/json', extends: ['json/recommended']}, +]) diff --git a/packages/proton-web-renderer/package.json b/packages/proton-web-renderer/package.json new file mode 100644 index 0000000..fd1a81c --- /dev/null +++ b/packages/proton-web-renderer/package.json @@ -0,0 +1,66 @@ +{ + "name": "@proton/web-renderer", + "version": "1.0.0", + "description": "UI layer for Proton Web SDK", + "homepage": "https://github.com/XPRNetwork/proton-web-sdk", + "bugs": { + "url": "https://github.com/XPRNetwork/proton-web-sdk/issues" + }, + "license": "BSD-3-Clause", + "type": "module", + "main": "lib/proton-web-renderer.js", + "module": "lib/proton-web-renderer.m.js", + "unpkg": "lib/proton-web-renderer.bundle.js", + "types": "lib/types/proton-web-renderer.d.ts", + "typings": "lib/types/index.d.ts", + "publishConfig": { + "access": "public" + }, + "scripts": { + "watch": "rollup -c -w", + "prepare": "pnpm run build", + "build": "rollup -c", + "lint": "eslint ./src --ext .ts --fix" + }, + "files": [ + "lib", + "src" + ], + "dependencies": {}, + "devDependencies": { + "@eslint/css": "^0.14.1", + "@eslint/js": "^9.39.1", + "@eslint/json": "^0.14.0", + "@rollup/plugin-commonjs": "^28.0.3", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.1", + "@rollup/plugin-replace": "^6.0.2", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^12.1.2", + "@tsconfig/svelte": "^5.0.4", + "@types/node": "^16.4.0", + "@types/ws": "^7.2.2", + "core-js": "^3.42.0", + "eslint": "^9.39.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-svelte": "^3.13.0", + "globals": "^16.5.0", + "jiti": "^2.6.1", + "postcss": "^8.5.3", + "prettier": "^3.5.3", + "prettier-plugin-svelte": "^3.4.0", + "rollup": "^4.40.0", + "rollup-plugin-dts": "^6.2.1", + "rollup-plugin-svelte": "^7.2.0", + "sass": "^1.89.0", + "svelte": "^5.41.0", + "svelte-check": "^4.3.3", + "svelte-eslint-parser": "^1.4.0", + "svelte-preprocess": "^6.0.3", + "ts-node": "^10.0.0", + "tslib": "^2.4.0", + "typescript": "~5.4.0", + "typescript-eslint": "^8.46.4" + } +} \ No newline at end of file diff --git a/packages/proton-web-renderer/rollup.config.js b/packages/proton-web-renderer/rollup.config.js new file mode 100644 index 0000000..4b6b1d7 --- /dev/null +++ b/packages/proton-web-renderer/rollup.config.js @@ -0,0 +1,188 @@ +import {createRequire} from 'module' +import fs from 'fs' +import dts from 'rollup-plugin-dts' +import svelte from 'rollup-plugin-svelte' +import resolve from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' +import typescript from '@rollup/plugin-typescript' +import replace from '@rollup/plugin-replace' +import terser from '@rollup/plugin-terser' +import json from '@rollup/plugin-json' +import {sveltePreprocess} from 'svelte-preprocess' + +const pkg = createRequire(import.meta.url)('./package.json') + +const production = !process.env.ROLLUP_WATCH + +const license = fs.readFileSync('LICENSE').toString('utf-8').trim() +const banner = ` +/** + * Proton Web Renderer v${pkg.version} + * ${pkg.homepage} + * + * @license + * ${license.replace(/\n/g, '\n * ')} + */ +`.trim() + +const replaceVersion = replace({ + preventAssignment: true, + __ver: `${pkg.version}`, +}) + +const svelteOnWarn = (warning, handler) => { + if ( + ['a11y-click-events-have-key-events', 'a11y-interactive-supports-focus'].includes(warning.code) + ) + return + // let Rollup handle all other warnings normally + handler(warning) +} + +const getCssHash = ({hash, css, filename}) => { + return `pwr-${hash(filename + css)}` +} + +export default [ + { + input: 'src/index.ts', + output: { + banner, + file: pkg.main, + format: 'cjs', + sourcemap: !production, + }, + plugins: [ + svelte({ + preprocess: sveltePreprocess({sourceMap: !production}), + compilerOptions: { + cssHash: getCssHash, + // enable run-time checks when not in production + dev: !production, + }, + emitCss: false, + onwarn: svelteOnWarn, + }), + replaceVersion, + // If you have external dependencies installed from + // npm, you'll most likely need these plugins. In + // some cases you'll need additional configuration - + // consult the documentation for details: + // https://github.com/rollup/plugins/tree/master/packages/commonjs + resolve({ + browser: true, + dedupe: ['svelte'], + }), + typescript({ + sourceMap: !production, + inlineSources: !production, + target: 'es6', + }), + ], + external: Object.keys({...pkg.dependencies, ...pkg.peerDependencies}), + onwarn, + }, + { + input: 'src/index.ts', + output: { + banner, + file: pkg.module, + format: 'esm', + sourcemap: !production, + }, + plugins: [ + svelte({ + preprocess: sveltePreprocess({sourceMap: !production}), + compilerOptions: { + cssHash: getCssHash, + // enable run-time checks when not in production + dev: !production, + }, + emitCss: false, + onwarn: svelteOnWarn, + }), + replaceVersion, + // If you have external dependencies installed from + // npm, you'll most likely need these plugins. In + // some cases you'll need additional configuration - + // consult the documentation for details: + // https://github.com/rollup/plugins/tree/master/packages/commonjs + resolve({ + browser: true, + dedupe: ['svelte'], + }), + typescript({ + sourceMap: !production, + inlineSources: !production, + target: 'es6', + }), + ], + external: Object.keys({...pkg.dependencies, ...pkg.peerDependencies}), + onwarn, + }, + { + input: 'src/index.ts', + output: { + banner, + file: pkg.types, + format: 'esm', + }, + onwarn, + plugins: [dts()], + }, + { + input: 'src/index.ts', + output: { + banner, + name: 'ProtonWebRenderer', + file: pkg.unpkg, + format: 'iife', + sourcemap: !production, + }, + plugins: [ + svelte({ + preprocess: sveltePreprocess({sourceMap: !production}), + compilerOptions: { + cssHash: getCssHash, + // enable run-time checks when not in production + dev: !production, + }, + emitCss: false, + onwarn: svelteOnWarn, + }), + replaceVersion, + // If you have external dependencies installed from + // npm, you'll most likely need these plugins. In + // some cases you'll need additional configuration - + // consult the documentation for details: + // https://github.com/rollup/plugins/tree/master/packages/commonjs + resolve({ + browser: true, + dedupe: ['svelte'], + }), + json(), + commonjs(), + typescript({ + sourceMap: !production, + inlineSources: !production, + target: 'es6', + }), + terser({ + format: { + comments(_, comment) { + return comment.type === 'comment2' && /@license/.test(comment.value) + }, + max_line_len: 500, + }, + }), + ], + external: Object.keys({...pkg.peerDependencies}), + onwarn, + }, +] + +function onwarn(warning, rollupWarn) { + if (warning.code !== 'CIRCULAR_DEPENDENCY') { + rollupWarn(warning) + } +} diff --git a/packages/proton-browser-transport/src/global.d.ts b/packages/proton-web-renderer/src/global.d.ts similarity index 100% rename from packages/proton-browser-transport/src/global.d.ts rename to packages/proton-web-renderer/src/global.d.ts diff --git a/packages/proton-web-renderer/src/index.ts b/packages/proton-web-renderer/src/index.ts new file mode 100644 index 0000000..cc5b113 --- /dev/null +++ b/packages/proton-web-renderer/src/index.ts @@ -0,0 +1,312 @@ +import {mount, unmount} from 'svelte' +import type { + UIErrorPayload, + UIErrorRecoverPayload, + UILoginPayload, + UIRenderer, + UIRendererOptions, + UIRequestPayload, + UISignManuallyPayload, + UISignPayload, +} from './types' +import { + active, + app_props, + backAction, + closeAction, + demoMode, + enabledWallets, + error, + manualAction, + qrRequestData, + recoverError, + router, + signRequestData, + theme, + walletSelect, +} from './ui/store' +import {addListener, flattenObject, toCssVars} from './utils' +import App from './ui/App.svelte' +import {ENABLED_WALLETS, ROUTES, SUPPORTED_WALLETS} from './ui/constants' +import type { + UIQRData, + UIRouteValue, + UISignData, + UITheme, + UIThemeOptions, + UIWalletType, +} from './ui/interfaces' + +export const defaultUIRendererOptions = { + id: 'proton-web-ui', +} + +export type {UIRenderer, UIRendererOptions} + +export class WebRenderer implements UIRenderer { + public element: Element | undefined + public shadow: ShadowRoot | undefined + public initialized = false + readonly options: UIRendererOptions + + private offDOMContentLoaded: () => void = () => void 0 + private elementId: string = '' + private app: any + + constructor(options: UIRendererOptions = defaultUIRendererOptions) { + this.options = options + if (typeof document !== 'undefined') { + this.initialize() + } + } + + async selectWallet({ + enabledWallets: wallets, + }: {enabledWallets?: UIWalletType[] | string[]} = {}): Promise { + if (!wallets) { + wallets = ENABLED_WALLETS + } + + enabledWallets.set(new Set(wallets as UIWalletType[])) + + router.push(ROUTES.WEBAUTH_CONNECT) + this.show() + + try { + return await new Promise((resolve, reject) => { + walletSelect.set({ + resolve, + reject, + }) + }) + } finally { + this.close() + } + } + + login(payload: UILoginPayload): void { + let route = ROUTES.WEBAUTH_LOGIN_MOBILE + if (payload.wallet_type === SUPPORTED_WALLETS.ANCHOR) { + route = ROUTES.OTHER_ANCHOR_USE + } + this.request(route, payload) + } + + sign(payload: UISignPayload): void { + let route = ROUTES.WEBAUTH_SIGN + if (payload.wallet_type === SUPPORTED_WALLETS.ANCHOR) { + route = ROUTES.OTHER_ANCHOR_SIGN + } + this.sign_request(route, payload) + } + + signManually(payload: UISignManuallyPayload): void { + let route = ROUTES.WEBAUTH_SIGN_MANUAL + if (payload.wallet_type === SUPPORTED_WALLETS.ANCHOR) { + route = ROUTES.OTHER_ANCHOR_SIGN_MANUAL + } + this.request(route, payload) + } + + showError(payload: UIErrorPayload): void { + error.set(payload.data) + this.show() + } + + recoverError(payload: UIErrorRecoverPayload): void { + let route = ROUTES.WEBAUTH_SIGN + if (payload.wallet_type === SUPPORTED_WALLETS.ANCHOR) { + route = ROUTES.OTHER_ANCHOR_SIGN + } + + recoverError.set(payload.data) + if (payload.onManual) { + manualAction.set(payload.onManual) + } + + router.push(route) + this.show() + } + + showLoading(): void { + router.push(ROUTES.PREPARING_REQUEST) + this.show() + } + + show(): void { + active.set(true) + } + + close(): void { + active.set(false) + } + + demo(): void { + const qrRequestData: UIQRData = { + code: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2OSA2OSI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjciIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEyIiB5PSIwIiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE4IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI2IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMyIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM1IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM4IiB5PSIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQxIiB5PSIwIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ1IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU3IiB5PSIwIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYyIiB5PSIwIiB3aWR0aD0iNyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNiIgeT0iMSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE0IiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE4IiB5PSIxIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI1IiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMyIiB5PSIxIiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM5IiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQzIiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ1IiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSIxIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU3IiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYyIiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY4IiB5PSIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSIyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjIiIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTciIHk9IjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTkiIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjIiIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjUiIHk9IjIiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzQiIHk9IjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzciIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTEiIHk9IjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTciIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjIiIHk9IjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjgiIHk9IjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMCIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSIzIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYiIHk9IjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOCIgeT0iMyIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOSIgeT0iMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMiIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNyIgeT0iMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMiIgeT0iMyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MCIgeT0iMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NSIgeT0iMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0OSIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MiIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NCIgeT0iMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NCIgeT0iMyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2OCIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNiIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNiIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMCIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMiIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iNCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iNCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMiIgeT0iNCIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iNCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MCIgeT0iNCIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OCIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NCIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2OCIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYiIHk9IjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iNSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNyIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOSIgeT0iNSIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNSIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNyIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMCIgeT0iNSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNiIgeT0iNSIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MiIgeT0iNSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iNSIgd2lkdGg9IjYiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NCIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OCIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2OCIgeT0iNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI2IiB3aWR0aD0iNyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTAiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTgiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjIiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjQiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjgiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzQiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzYiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzgiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDAiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDYiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDgiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTQiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTgiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjAiIHk9IjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjIiIHk9IjYiIHdpZHRoPSI3IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTAiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTkiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjMiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjgiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzEiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzYiIHk9IjciIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjciIHdpZHRoPSI2IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTUiIHk9IjciIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSI4IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjkiIHk9IjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjgiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjgiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjgiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzkiIHk9IjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjgiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTQiIHk9IjgiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTgiIHk9IjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjUiIHk9IjgiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNSIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNiIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iOSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMyIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNSIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MCIgeT0iOSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MCIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MyIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OSIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxIiB5PSIxMCIgd2lkdGg9IjciIGhlaWdodD0iMSIgLz48cmVjdCB4PSI5IiB5PSIxMCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iMTAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjEwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI3IiB5PSIxMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iMTAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzMiIHk9IjEwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM1IiB5PSIxMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNyIgeT0iMTAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDAiIHk9IjEwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQzIiB5PSIxMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iMTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDkiIHk9IjEwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU0IiB5PSIxMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iMTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTgiIHk9IjEwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYwIiB5PSIxMCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NiIgeT0iMTAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMyIgeT0iMTEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNyIgeT0iMTEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIxMSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNSIgeT0iMTEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTciIHk9IjExIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIxIiB5PSIxMSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iMTEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjUiIHk9IjExIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMxIiB5PSIxMSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNCIgeT0iMTEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDAiIHk9IjExIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQyIiB5PSIxMSIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iMTEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjExIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU4IiB5PSIxMSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MSIgeT0iMTEiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjgiIHk9IjExIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjEyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjEyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIxMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI2IiB5PSIxMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzMiIHk9IjEyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MyIgeT0iMTIiIHdpZHRoPSI3IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTEiIHk9IjEyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iMTIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTgiIHk9IjEyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYxIiB5PSIxMiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMSIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjEzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMCIgeT0iMTMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjIiIHk9IjEzIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iMTMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSIxMyIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iMTMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTciIHk9IjEzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iMTMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjYiIHk9IjEzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY4IiB5PSIxMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iMTQiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTciIHk9IjE0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNSIgeT0iMTQiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjE0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMzIiB5PSIxNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNyIgeT0iMTQiIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDUiIHk9IjE0IiB3aWR0aD0iOCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU1IiB5PSIxNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NyIgeT0iMTQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjEiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSIxNSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1IiB5PSIxNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI3IiB5PSIxNSIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMyIgeT0iMTUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjE1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI0IiB5PSIxNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iMTUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjgiIHk9IjE1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMwIiB5PSIxNSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNyIgeT0iMTUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDAiIHk9IjE1IiB3aWR0aD0iOCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSIxNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MSIgeT0iMTUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjE1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU4IiB5PSIxNSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MSIgeT0iMTUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjE1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY3IiB5PSIxNSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSIxNiIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iMTYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjE2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOCIgeT0iMTYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSIxNiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iMTYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjE2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSIxNiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iMTYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ0IiB5PSIxNiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NiIgeT0iMTYiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSIxNiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OCIgeT0iMTYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjAiIHk9IjE2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYyIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iMTYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNyIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTEiIHk9IjE3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNiIgeT0iMTciIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjIiIHk9IjE3IiB3aWR0aD0iNyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMxIiB5PSIxNyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNSIgeT0iMTciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzgiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQyIiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NSIgeT0iMTciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDkiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSIxNyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NyIgeT0iMTciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTkiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYyIiB5PSIxNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMCIgeT0iMTgiIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNiIgeT0iMTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOSIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE0IiB5PSIxOCIgd2lkdGg9IjYiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iMTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjciIHk9IjE4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSIxOCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzQiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQwIiB5PSIxOCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MiIgeT0iMTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjE4IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSIxOCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NSIgeT0iMTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTciIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYwIiB5PSIxOCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjciIHk9IjE4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjE5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjE5IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjciIHk9IjE5IiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOCIgeT0iMTkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjIiIHk9IjE5IiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM0IiB5PSIxOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDYiIHk9IjE5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSIxOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MSIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTQiIHk9IjE5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYwIiB5PSIxOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMSIgeT0iMjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMyIgeT0iMjAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTAiIHk9IjIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEyIiB5PSIyMCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOCIgeT0iMjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSIyMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNSIgeT0iMjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjkiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMyIiB5PSIyMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNiIgeT0iMjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzgiIHk9IjIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQxIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iMjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjIwIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUxIiB5PSIyMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NCIgeT0iMjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSIyMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MyIgeT0iMjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjUiIHk9IjIwIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjIxIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUiIHk9IjIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEwIiB5PSIyMSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iMjEiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTkiIHk9IjIxIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSIyMSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNyIgeT0iMjEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjkiIHk9IjIxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMxIiB5PSIyMSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNCIgeT0iMjEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzciIHk9IjIxIiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ0IiB5PSIyMSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iMjEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjIxIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSIyMSIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iMjEiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMCIgeT0iMjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNCIgeT0iMjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOSIgeT0iMjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTMiIHk9IjIyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE1IiB5PSIyMiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOSIgeT0iMjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI4IiB5PSIyMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzQiIHk9IjIyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM3IiB5PSIyMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUyIiB5PSIyMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NSIgeT0iMjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTgiIHk9IjIyIiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSIyMiIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxIiB5PSIyMyIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI5IiB5PSIyMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjIzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMiIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMzIiB5PSIyMyIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjIzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ1IiB5PSIyMyIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjgiIHk9IjIzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQiIHk9IjI0IiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIyNCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNyIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjQiIHk9IjI0IiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMzIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iMjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTkiIHk9IjI0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYxIiB5PSIyNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MyIgeT0iMjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjYiIHk9IjI0IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUiIHk9IjI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEyIiB5PSIyNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iMjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTgiIHk9IjI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iMjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjciIHk9IjI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMwIiB5PSIyNSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNiIgeT0iMjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzgiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQxIiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NSIgeT0iMjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjI1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUyIiB5PSIyNSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTkiIHk9IjI1IiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY2IiB5PSIyNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjI2IiB3aWR0aD0iOSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI3IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iMjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzQiIHk9IjI2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iMjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjI2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ2IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MCIgeT0iMjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjI2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU1IiB5PSIyNiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NyIgeT0iMjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjEiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY3IiB5PSIyNiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSIyNyIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI3IiB5PSIyNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iMjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjI3IiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSIyNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iMjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjI3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSIyNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMyIgeT0iMjciIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzkiIHk9IjI3IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSIyNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MCIgeT0iMjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU1IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iMjciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjI3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY3IiB5PSIyNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSIyOCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSIyOCIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iMjgiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIxIiB5PSIyOCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iMjgiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjI4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMyIiB5PSIyOCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iMjgiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjI4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ2IiB5PSIyOCIgd2lkdGg9IjYiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NSIgeT0iMjgiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjEiIHk9IjI4IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY2IiB5PSIyOCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSIyOSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI3IiB5PSIyOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTMiIHk9IjI5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE1IiB5PSIyOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjI5IiB3aWR0aD0iOCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSIyOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzYiIHk9IjI5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM4IiB5PSIyOSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MCIgeT0iMjkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjI5IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ4IiB5PSIyOSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iMjkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjMwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjMwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYiIHk9IjMwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjMwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEwIiB5PSIzMCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iMzAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTgiIHk9IjMwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iMzAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjkiIHk9IjMwIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM0IiB5PSIzMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iMzAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjMwIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSIzMCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MiIgeT0iMzAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTgiIHk9IjMwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYyIiB5PSIzMCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NiIgeT0iMzAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMCIgeT0iMzEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMyIgeT0iMzEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNyIgeT0iMzEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOSIgeT0iMzEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTEiIHk9IjMxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIzMSIgd2lkdGg9IjciIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMiIgeT0iMzEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjUiIHk9IjMxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI3IiB5PSIzMSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iMzEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzEiIHk9IjMxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMzIiB5PSIzMSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iMzEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjMxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSIzMSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MSIgeT0iMzEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjMxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY3IiB5PSIzMSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSIzMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSIzMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSIzMiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjMyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE5IiB5PSIzMiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iMzIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjUiIHk9IjMyIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSIzMiIgd2lkdGg9IjgiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iMzIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjMyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSIzMiIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MyIgeT0iMzIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjMyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU4IiB5PSIzMiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iMzIiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjciIHk9IjMyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEiIHk9IjMzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQiIHk9IjMzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjMzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIzMyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOCIgeT0iMzMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjMzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI0IiB5PSIzMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iMzMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjkiIHk9IjMzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSIzMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iMzMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjMzIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ1IiB5PSIzMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0OSIgeT0iMzMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjMzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU3IiB5PSIzMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iMzMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjMzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY2IiB5PSIzMyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSIzNCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iMzQiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTUiIHk9IjM0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iMzQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjM0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI4IiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iMzQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzQiIHk9IjM0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iMzQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjM0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ1IiB5PSIzNCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0OSIgeT0iMzQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjM0IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU1IiB5PSIzNCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iMzQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjIiIHk9IjM0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSIzNCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSIzNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSIzNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSIzNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSIzNSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMiIgeT0iMzUiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjM1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE5IiB5PSIzNSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNyIgeT0iMzUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjM1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMyIiB5PSIzNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNiIgeT0iMzUiIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjM1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ2IiB5PSIzNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0OSIgeT0iMzUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjM1IiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSIzNSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iMzUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMSIgeT0iMzYiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjM2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE3IiB5PSIzNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMSIgeT0iMzYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjQiIHk9IjM2IiB3aWR0aD0iNyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMyIiB5PSIzNiIgd2lkdGg9IjYiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iMzYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjM2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSIzNiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MyIgeT0iMzYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjM2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU4IiB5PSIzNiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMiIgeT0iMzciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNyIgeT0iMzciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTEiIHk9IjM3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSIzNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNSIgeT0iMzciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTgiIHk9IjM3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSIzNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMiIgeT0iMzciIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjciIHk9IjM3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMwIiB5PSIzNyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMyIgeT0iMzciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzkiIHk9IjM3IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ1IiB5PSIzNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iMzciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjM3IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSIzNyIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OSIgeT0iMzciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjEiIHk9IjM3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYzIiB5PSIzNyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NSIgeT0iMzciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjgiIHk9IjM3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEiIHk9IjM4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQiIHk9IjM4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYiIHk9IjM4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjkiIHk9IjM4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEyIiB5PSIzOCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iMzgiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTkiIHk9IjM4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSIzOCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNSIgeT0iMzgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjkiIHk9IjM4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSIzOCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iMzgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjM4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ1IiB5PSIzOCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MiIgeT0iMzgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTQiIHk9IjM4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSIzOCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NCIgeT0iMzgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjciIHk9IjM4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQiIHk9IjM5IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjkiIHk9IjM5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjExIiB5PSIzOSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNyIgeT0iMzkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjM5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSIzOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iMzkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjgiIHk9IjM5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMxIiB5PSIzOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNCIgeT0iMzkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzgiIHk9IjM5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQxIiB5PSIzOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iMzkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjM5IiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU1IiB5PSIzOSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OSIgeT0iMzkiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjciIHk9IjM5IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjQwIiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEwIiB5PSI0MCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOCIgeT0iNDAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjQwIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI2IiB5PSI0MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOCIgeT0iNDAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjQwIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM1IiB5PSI0MCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iNDAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjQwIiB3aWR0aD0iOCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSI0MCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iNDAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjAiIHk9IjQwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYyIiB5PSI0MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NCIgeT0iNDAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjYiIHk9IjQwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY4IiB5PSI0MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI0MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSI0MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSI0MSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI3IiB5PSI0MSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMiIgeT0iNDEiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjQxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI0IiB5PSI0MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iNDEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjkiIHk9IjQxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM0IiB5PSI0MSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iNDEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjQxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ0IiB5PSI0MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iNDEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjQxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUyIiB5PSI0MSIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NyIgeT0iNDEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTkiIHk9IjQxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYzIiB5PSI0MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NiIgeT0iNDEiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMiIgeT0iNDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNSIgeT0iNDIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOSIgeT0iNDIiIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTUiIHk9IjQyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE3IiB5PSI0MiIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iNDIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjQyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM0IiB5PSI0MiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNyIgeT0iNDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjQyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSI0MiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MiIgeT0iNDIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTUiIHk9IjQyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU3IiB5PSI0MiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OSIgeT0iNDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjEiIHk9IjQyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYzIiB5PSI0MiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iNDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNSIgeT0iNDMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNyIgeT0iNDMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjQzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE3IiB5PSI0MyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMSIgeT0iNDMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjMiIHk9IjQzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI2IiB5PSI0MyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iNDMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzMiIHk9IjQzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM4IiB5PSI0MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MCIgeT0iNDMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjQzIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ4IiB5PSI0MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NCIgeT0iNDMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjQzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU4IiB5PSI0MyIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MyIgeT0iNDMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjciIHk9IjQzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMiIHk9IjQ0IiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEwIiB5PSI0NCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMiIgeT0iNDQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjQ0IiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIxIiB5PSI0NCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iNDQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjQ0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI4IiB5PSI0NCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMiIgeT0iNDQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzUiIHk9IjQ0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM3IiB5PSI0NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNDQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjQ0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSI0NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNDQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjYiIHk9IjQ0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjQ1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUiIHk9IjQ1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjciIHk9IjQ1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjExIiB5PSI0NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMyIgeT0iNDUiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjQ1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSI0NSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iNDUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjkiIHk9IjQ1IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM0IiB5PSI0NSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iNDUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDEiIHk9IjQ1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ0IiB5PSI0NSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iNDUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjQ1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSI0NSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MSIgeT0iNDUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjQ1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY1IiB5PSI0NSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxIiB5PSI0NiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjQ2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOSIgeT0iNDYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjIiIHk9IjQ2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI0IiB5PSI0NiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOCIgeT0iNDYiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzQiIHk9IjQ2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM5IiB5PSI0NiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NSIgeT0iNDYiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDkiIHk9IjQ2IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSI0NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iNDYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjAiIHk9IjQ2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSI0NiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iNDYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMiIgeT0iNDciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNCIgeT0iNDciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTAiIHk9IjQ3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE0IiB5PSI0NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMSIgeT0iNDciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjQ3IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMxIiB5PSI0NyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNSIgeT0iNDciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzciIHk9IjQ3IiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ0IiB5PSI0NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iNDciIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjQ3IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSI0NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OCIgeT0iNDciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjAiIHk9IjQ3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY3IiB5PSI0NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSI0OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSI0OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iNDgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTUiIHk9IjQ4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE4IiB5PSI0OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMCIgeT0iNDgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjMiIHk9IjQ4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSI0OCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMyIgeT0iNDgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzUiIHk9IjQ4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM5IiB5PSI0OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MiIgeT0iNDgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjQ4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ2IiB5PSI0OCIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MSIgeT0iNDgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjQ4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYzIiB5PSI0OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iNDgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMSIgeT0iNDkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNyIgeT0iNDkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTAiIHk9IjQ5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEyIiB5PSI0OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNSIgeT0iNDkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTciIHk9IjQ5IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIyIiB5PSI0OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iNDkiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzYiIHk9IjQ5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM4IiB5PSI0OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MCIgeT0iNDkiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjQ5IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUwIiB5PSI0OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MiIgeT0iNDkiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjQ5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSI0OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNDkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjUiIHk9IjQ5IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEiIHk9IjUwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMiIHk9IjUwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUiIHk9IjUwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEwIiB5PSI1MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMyIgeT0iNTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTkiIHk9IjUwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIxIiB5PSI1MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iNTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjUiIHk9IjUwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI3IiB5PSI1MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMCIgeT0iNTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjUwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSI1MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iNTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjUwIiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSI1MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MSIgeT0iNTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjUwIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSI1MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MSIgeT0iNTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjUwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY1IiB5PSI1MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iNTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMiIgeT0iNTEiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOCIgeT0iNTEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSI1MSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iNTEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzMiIHk9IjUxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM5IiB5PSI1MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iNTEiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDgiIHk9IjUxIiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU1IiB5PSI1MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NyIgeT0iNTEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjAiIHk9IjUxIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYzIiB5PSI1MSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iNTEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMSIgeT0iNTIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMyIgeT0iNTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOSIgeT0iNTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjUyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSI1MiIgd2lkdGg9IjYiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iNTIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjUyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSI1MiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMyIgeT0iNTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzgiIHk9IjUyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ0IiB5PSI1MiIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MCIgeT0iNTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjUyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSI1MiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MSIgeT0iNTIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjUyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY3IiB5PSI1MiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxIiB5PSI1MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzIiB5PSI1MyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSI1MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iNTMiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTUiIHk9IjUzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE3IiB5PSI1MyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMCIgeT0iNTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjQiIHk9IjUzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSI1MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iNTMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzUiIHk9IjUzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQyIiB5PSI1MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NyIgeT0iNTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTAiIHk9IjUzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUyIiB5PSI1MyIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NyIgeT0iNTMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTkiIHk9IjUzIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY2IiB5PSI1MyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI1NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSI1NCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI5IiB5PSI1NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iNTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjEiIHk9IjU0IiB3aWR0aD0iNiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI4IiB5PSI1NCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMCIgeT0iNTQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzMiIHk9IjU0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSI1NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOSIgeT0iNTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjU0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ4IiB5PSI1NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MSIgeT0iNTQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjU0IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYwIiB5PSI1NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MyIgeT0iNTQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjciIHk9IjU0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjU1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIiIHk9IjU1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUiIHk9IjU1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjciIHk9IjU1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEwIiB5PSI1NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMiIgeT0iNTUiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTciIHk9IjU1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIyIiB5PSI1NSIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOCIgeT0iNTUiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzciIHk9IjU1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM5IiB5PSI1NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iNTUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDUiIHk9IjU1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ4IiB5PSI1NSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MiIgeT0iNTUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTUiIHk9IjU1IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSI1NSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNTUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjUiIHk9IjU1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY4IiB5PSI1NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1IiB5PSI1NiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI5IiB5PSI1NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMiIgeT0iNTYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTUiIHk9IjU2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE3IiB5PSI1NiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iNTYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjU2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSI1NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMSIgeT0iNTYiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzUiIHk9IjU2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQxIiB5PSI1NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNTYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDgiIHk9IjU2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUwIiB5PSI1NiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NSIgeT0iNTYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjEiIHk9IjU2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSI1NiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NyIgeT0iNTYiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMyIgeT0iNTciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNSIgeT0iNTciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iOCIgeT0iNTciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTgiIHk9IjU3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSI1NyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iNTciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjUiIHk9IjU3IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMwIiB5PSI1NyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMyIgeT0iNTciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzYiIHk9IjU3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM4IiB5PSI1NyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iNTciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjU3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSI1NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MCIgeT0iNTciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjU3IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSI1NyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1OSIgeT0iNTciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjU3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY3IiB5PSI1NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI1OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSI1OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0IiB5PSI1OCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSI1OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iNTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjU4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSI1OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOCIgeT0iNTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjU4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSI1OCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNyIgeT0iNTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjU4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM0IiB5PSI1OCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNyIgeT0iNTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzkiIHk9IjU4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQyIiB5PSI1OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNTgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjU4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUxIiB5PSI1OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NCIgeT0iNTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjEiIHk9IjU4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY1IiB5PSI1OCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI1OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI3IiB5PSI1OSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iNTkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTIiIHk9IjU5IiB3aWR0aD0iOCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIxIiB5PSI1OSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iNTkiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzAiIHk9IjU5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMzIiB5PSI1OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNyIgeT0iNTkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzkiIHk9IjU5IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ2IiB5PSI1OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MSIgeT0iNTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTQiIHk9IjU5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYwIiB5PSI1OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNTkiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjU5IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY4IiB5PSI1OSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI2MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzIiB5PSI2MCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSI2MCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI5IiB5PSI2MCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMyIgeT0iNjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTYiIHk9IjYwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE4IiB5PSI2MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMSIgeT0iNjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjMiIHk9IjYwIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI2IiB5PSI2MCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iNjAiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ0IiB5PSI2MCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NiIgeT0iNjAiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTEiIHk9IjYwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUzIiB5PSI2MCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NiIgeT0iNjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjAiIHk9IjYwIiB3aWR0aD0iNSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY2IiB5PSI2MCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSI2MSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNCIgeT0iNjEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTciIHk9IjYxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIwIiB5PSI2MSIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iNjEiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjYxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSI2MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzOCIgeT0iNjEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDAiIHk9IjYxIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQyIiB5PSI2MSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NSIgeT0iNjEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDgiIHk9IjYxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU0IiB5PSI2MSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NyIgeT0iNjEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTkiIHk9IjYxIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSI2MSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2OCIgeT0iNjEiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMCIgeT0iNjIiIHdpZHRoPSI3IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTAiIHk9IjYyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSI2MiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNiIgeT0iNjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTgiIHk9IjYyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIzIiB5PSI2MiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOCIgeT0iNjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjYyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM0IiB5PSI2MiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNiIgeT0iNjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjYyIiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSI2MiIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NCIgeT0iNjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTgiIHk9IjYyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYwIiB5PSI2MiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNjIiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjYyIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY2IiB5PSI2MiIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI2MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSI2MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSI2MyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iNjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTQiIHk9IjYzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSI2MyIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMCIgeT0iNjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjIiIHk9IjYzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI1IiB5PSI2MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOCIgeT0iNjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjYzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM2IiB5PSI2MyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MSIgeT0iNjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDQiIHk9IjYzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSI2MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0OSIgeT0iNjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTIiIHk9IjYzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSI2MyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MCIgeT0iNjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjYzIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY4IiB5PSI2MyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI2NCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSI2NCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSI2NCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSI2NCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMCIgeT0iNjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTMiIHk9IjY0IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjE2IiB5PSI2NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxOSIgeT0iNjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjMiIHk9IjY0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI1IiB5PSI2NCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyOSIgeT0iNjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzkiIHk9IjY0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQxIiB5PSI2NCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDYiIHk9IjY0IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUxIiB5PSI2NCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MyIgeT0iNjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjY0IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYwIiB5PSI2NCIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI2NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSI2NSIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSI2NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iNjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTgiIHk9IjY1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIyIiB5PSI2NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNCIgeT0iNjUiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjY1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjMyIiB5PSI2NSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzNSIgeT0iNjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzgiIHk9IjY1IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQyIiB5PSI2NSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDciIHk9IjY1IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUwIiB5PSI2NSIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MyIgeT0iNjUiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTkiIHk9IjY1IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY0IiB5PSI2NSIgd2lkdGg9IjUiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI2NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyIiB5PSI2NiIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2IiB5PSI2NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI5IiB5PSI2NiIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNSIgeT0iNjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjAiIHk9IjY2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI0IiB5PSI2NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNiIgeT0iNjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjgiIHk9IjY2IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM1IiB5PSI2NiIgd2lkdGg9IjQiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0MCIgeT0iNjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDIiIHk9IjY2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ3IiB5PSI2NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0OSIgeT0iNjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTEiIHk9IjY2IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU2IiB5PSI2NiIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MiIgeT0iNjYiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjQiIHk9IjY2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjAiIHk9IjY3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjYiIHk9IjY3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjgiIHk9IjY3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjEzIiB5PSI2NyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxNiIgeT0iNjciIHdpZHRoPSIyIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTkiIHk9IjY3IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI1IiB5PSI2NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyNyIgeT0iNjciIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzIiIHk9IjY3IiB3aWR0aD0iNCIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjM3IiB5PSI2NyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDYiIHk9IjY3IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQ5IiB5PSI2NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1MSIgeT0iNjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTMiIHk9IjY3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU1IiB5PSI2NyIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2MSIgeT0iNjciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjMiIHk9IjY3IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjY1IiB5PSI2NyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIwIiB5PSI2OCIgd2lkdGg9IjciIGhlaWdodD0iMSIgLz48cmVjdCB4PSI4IiB5PSI2OCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIxMSIgeT0iNjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMTciIHk9IjY4IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjIxIiB5PSI2OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIyMyIgeT0iNjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMjYiIHk9IjY4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjI5IiB5PSI2OCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSIzMiIgeT0iNjgiIHdpZHRoPSI0IiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iMzciIHk9IjY4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjQyIiB5PSI2OCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI0NCIgeT0iNjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNDYiIHk9IjY4IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjUwIiB5PSI2OCIgd2lkdGg9IjIiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI1NCIgeT0iNjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNTYiIHk9IjY4IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIiAvPjxyZWN0IHg9IjU5IiB5PSI2OCIgd2lkdGg9IjMiIGhlaWdodD0iMSIgLz48cmVjdCB4PSI2NSIgeT0iNjgiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIC8+PHJlY3QgeD0iNjgiIHk9IjY4IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiAvPjwvc3ZnPg==', + link: 'proton-dev:gmMsfNe856ui0zUByZvxc446VS9bcP1_15mbjzi6Hq1-9fnyXWYGJuuMkpKCYit9_eQkvcS85Iz8Ir2czLxsfbPk5FTLlNQk3TRT42Rdk6SkRF3LRCMzXdOURNM0I4PUFOMUMxYWkNLFjAxA8INj40kG5r3hDsu13I6frVQ1_hYznSlz8p6_G848sKi4-fwkp-aB8FcVjmArfEA2mOoZ6BkoOBXllxenFoUUJeYVF-QXlUCFffOrMnNyEkE8BY3wzLwUoCoFvxAFQ6CktQJQwMzEWqECRBSVWRmamOkZaCq4pyZn5-sbGRgaAJGhgltmUWpafoU-WJa7ODE3NT4ltSwzOZWRkbsotaS0KC--ILEkQwwUAED_5-QnJ-Zk5BeXWJkamhvrA5UUxicmJ-eX5pWwlSQWZ-dUAgA', + } + const signData: UISignData = { + timeout: 60 * 1_000, + } + demoMode.set({ + selectWallet: (wallet_type) => { + this.login({ + data: qrRequestData, + wallet_type, + }) + }, + sign: (wallet_type) => { + this.sign({ + data: signData, + wallet_type, + }) + }, + signManually: (wallet_type) => { + this.signManually({ + data: qrRequestData, + wallet_type, + }) + }, + timeout: (wallet_type) => { + this.recoverError({ + data: { + name: 'Unable to reach device', + description: 'Unable to deliver the request to the linked wallet', + }, + onManual: () => { + this.signManually({ + data: qrRequestData, + wallet_type, + }) + }, + wallet_type, + }) + }, + }) + enabledWallets.set(new Set(ENABLED_WALLETS)) + router.push(ROUTES.WEBAUTH_CONNECT) + this.show() + } + + setTheme(value: UITheme): void { + theme.set(value) + } + + destroy(): void { + unmount(this.app) + } + + private sign_request(route: UIRouteValue, payload: UISignPayload): void { + if (payload.onBack) { + backAction.set(payload.onBack) + } + + if (payload.onClose) { + closeAction.set(payload.onClose) + } + + if (payload.onManual) { + manualAction.set(payload.onManual) + } + + signRequestData.set(payload.data) + + router.push(route) + this.show() + } + + private request(route: UIRouteValue, payload: UIRequestPayload): void { + qrRequestData.set(payload.data) + + if (payload.onBack) { + backAction.set(payload.onBack) + } + + if (payload.onClose) { + closeAction.set(payload.onClose) + } + + router.push(route) + this.show() + } + + private initialize() { + // Prevent multiple initializations + if (this.initialized) { + return + } + const {options} = this + // Create the dialog element and its shadow root + this.element = document.createElement('div') + this.elementId = options.id || defaultUIRendererOptions.id + this.element.id = this.elementId + + app_props.set(options) + + this.shadow = this.element.attachShadow({mode: 'closed'}) + + if (document.readyState === 'complete' || document.readyState === 'interactive') { + // Document is ready, append element + this.appendDialogElement() + } else { + // Add listener to append to body + this.offDOMContentLoaded = addListener(document, 'DOMContentLoaded', () => { + this.appendDialogElement() + }) + } + this.initialized = true + } + + private appendDialogElement() { + const existing = document.getElementById(this.elementId) + if (!this.element || !this.shadow) { + throw new Error('The WebRenderer is not initialized. Call the initialize method first.') + } + if (!existing) { + document.body.append(this.element) + this.offDOMContentLoaded() + + this.app = mount(App, { + target: this.shadow, + }) + + this.appendStyles() + } + } + + private appendStyles() { + if (this.shadow) { + const {options} = this + if (options.themes && Object.keys(options.themes).length) { + const themes = options.themes + + const rules: string[] = [] + + Object.keys(themes).forEach((key) => { + const data: UIThemeOptions = themes[key] + + const source = Object.keys(data).reduce((acc, chapter) => { + let prefix = chapter + if (chapter === 'base') { + prefix = '' + } + + return Object.assign(acc, flattenObject(data[chapter], prefix)) + }, {}) + + rules.push(`:host dialog[data-theme='${key}'] { + ${toCssVars(source, 'pw').join('\n')} + }`) + }) + + if (rules.length > 0) { + const sheet = new CSSStyleSheet() + sheet.replaceSync(rules.join(' ')) + + this.shadow.adoptedStyleSheets = [sheet] + } + } + } + } +} diff --git a/packages/proton-web-renderer/src/styles/base.scss b/packages/proton-web-renderer/src/styles/base.scss new file mode 100644 index 0000000..a65d197 --- /dev/null +++ b/packages/proton-web-renderer/src/styles/base.scss @@ -0,0 +1,53 @@ +@use './mixins.scss' as *; + +:host { + dialog, + dialog[data-theme='light'] { + @include light-theme; + } + + dialog[data-theme='dark'] { + @include dark-theme; + } + + dialog { + /****************** + Colors + ******************/ + + /****************** + Typography + ******************/ + --text-xxs: 0.625rem; /* 10px */ + --text-xs: 0.75rem; /* 12px */ + --text-sm: 0.875rem; /* 14px */ + --text-base: 1rem; /* 16px */ + --text-lg: 1.125rem; /* 18px */ + --text-xl: 1.25rem; /* 20px */ + --text-2xl: 1.5rem; /* 24px */ + + --text-font: + 'Inter', 'Circular Std Book', -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', + Roboto, 'Helvetica Neue', Arial, sans-serif; + + /****************** + Size and Spacing + ******************/ + $spacing: 0.25rem; + --space-xs: #{$spacing}; /* 4px */ + --space-s: #{$spacing * 2}; /* 8px */ + --space-m: #{$spacing * 3}; /* 12px */ + --space-l: #{$spacing * 4}; /* 16px */ + --space-xl: #{$spacing * 5}; /* 20px */ + --space-2xl: #{$spacing * 6}; /* 24px */ + } +} + +dialog { + font-family: var(--text-font); + color: var(--text-color-base); +} + +* { + box-sizing: border-box; +} diff --git a/packages/proton-web-renderer/src/styles/mixins.scss b/packages/proton-web-renderer/src/styles/mixins.scss new file mode 100644 index 0000000..316bded --- /dev/null +++ b/packages/proton-web-renderer/src/styles/mixins.scss @@ -0,0 +1,135 @@ +@function create_var($name, $defaults...) { + @return '--' + #{$name}+ ': ' + var(--pw-#{$name}, #{$defaults}); +} + +@mixin create-var($name, $defaults...) { + --#{$name}: var(--pw-#{$name}, #{$defaults}); +} + +@mixin light-theme { + color-scheme: light; + + @include create-var('text-color-base', #000000); + @include create-var('text-color-secondary', #333333); + @include create-var('text-color-link', #333333); + @include create-var('text-color-secondary-link', #000000); + + @include create-var( + 'body-background', + linear-gradient(180deg, rgba(20, 44, 87, 0.1) 0%, rgba(23, 36, 60, 0) 100%), + #fff + ); + + @include create-var('border-color', rgba(0, 0, 0, 0.1)); + + @include create-var('button-icon-background-hover', rgba(0, 0, 0, 0.08)); + + @include create-var('button-primary-border-color', #a6a7a9); + @include create-var('button-primary-border-color-hover', #000); + @include create-var('button-primary-background-hover', #e4e5e8); + + @include create-var('button-outlined-border-color', #000); + @include create-var('button-outlined-border-color-hover', #b9b9b9); + + @include create-var('button-accent-background', #000000); + @include create-var('button-accent-background-hover', #1e1e1e); + @include create-var('button-accent-text-color', #ffffff); + + @include create-var('button-flat-text-color', #000); + @include create-var('button-flat-text-color-hover', #7f7f7f); + + @include create-var('countdown-background', 0, 0, 0); + + @include create-var('tabs-background', #d5d6d9); + @include create-var('tabs-background-active', #161616); + @include create-var('tabs-text-color-active', #ffffff); + + @include create-var('list-background', rgba(0, 0, 0, 0.02)); + @include create-var('list-border-color', var(--list-background)); +} + +@mixin dark-theme { + color-scheme: dark; + + @include create-var('text-color-base', #ffffff); + @include create-var('text-color-secondary', #c0c0c0); + @include create-var('text-color-link', #c0c0c0); + @include create-var('text-color-secondary-link', #ffffff); + + @include create-var( + 'body-background', + linear-gradient(180deg, rgba(20, 44, 87, 0.4) 0%, rgba(23, 36, 60, 0) 100%), + #000 + ); + + @include create-var('border-color', #161616); + + @include create-var('button-icon-background-hover', rgba(255, 255, 255, 0.08)); + + @include create-var('button-primary-border-color', #474d56); + @include create-var('button-primary-border-color-hover', #fff); + @include create-var('button-primary-background-hover', transparent); + + @include create-var('button-outlined-border-color', #fff); + @include create-var('button-outlined-border-color-hover', #434445); + + @include create-var('button-accent-background', #ffffff); + @include create-var('button-accent-background-hover', #e1e1e1); + @include create-var('button-accent-text-color', #000000); + + @include create-var('button-flat-text-color', #c0c0c0); + @include create-var('button-flat-text-color-hover', #ffffff); + + @include create-var('countdown-background', 255, 255, 255); + + @include create-var('tabs-background', #121a26); + @include create-var('tabs-background-active', #323944); + @include create-var('tabs-text-color-active', #ffffff); + + @include create-var('list-background', rgba(255, 255, 255, 0.02)); + @include create-var('list-border-color', var(--list-background)); +} + +@mixin button-reset { + position: relative; + isolation: isolate; + background: transparent; + border: none; + outline: none; + cursor: pointer; + box-sizing: border-box; + color: inherit; +} + +@mixin sexy-scrollbars { + // Give Chrome some nicer scrollbars + scrollbar-gutter: stable; + scrollbar-color: var(--body-background); + + @supports (-moz-osx-font-smoothing: grayscale) { + scrollbar-width: none; + } + + &::-webkit-scrollbar { + width: 2px; + background-color: var(--body-background); + } + + &::-webkit-scrollbar-thumb { + background: var(--body-background); + } +} + +@mixin hover { + @media (hover: hover) and (pointer: fine) { + &:hover, + &:active { + @content; + } + } + @media (hover: none) and (pointer: coarse) { + &:active { + @content; + } + } +} diff --git a/packages/proton-web-renderer/src/styles/utils.scss b/packages/proton-web-renderer/src/styles/utils.scss new file mode 100644 index 0000000..ad3f0b2 --- /dev/null +++ b/packages/proton-web-renderer/src/styles/utils.scss @@ -0,0 +1,62 @@ +@use './mixins.scss'; + +.visually-hidden { + border: 0; + clip: rect(0 0 0 0); + height: auto; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + white-space: nowrap; +} + +.btn { + &--full { + width: 100%; + } + + &--center { + justify-content: center; + } + + &--between { + justify-content: space-between; + } + + &-label { + font-size: var(--text-base); + font-weight: 600; + line-height: 1; + letter-spacing: -0.8px; + } + + &-sublabel { + display: block; + font-size: var(--text-xs); + font-weight: 500; + line-height: normal; + letter-spacing: -0.36px; + opacity: 0.65; + } + + &-label + &-sublabel { + margin-top: var(--space-xs); + } + + &-inner { + display: inline-flex; + align-items: center; + gap: var(--space-s); + } +} + +.link { + color: var(--text-color-link); + text-decoration: underline; + + @include mixins.hover { + color: var(--text-color-secondary-link); + } +} diff --git a/packages/proton-web-renderer/src/types.ts b/packages/proton-web-renderer/src/types.ts new file mode 100644 index 0000000..ae54aa1 --- /dev/null +++ b/packages/proton-web-renderer/src/types.ts @@ -0,0 +1,54 @@ +import type {UIError, UIProps, UIQRData, UISignData, UIWalletType} from './ui/interfaces' + +export type UIPercentageString = `${number}%` +export type UIPixelsString = `${number}px` + +export type UISpace = + | 'var(--space-xs)' + | 'var(--space-s)' + | 'var(--space-m)' + | 'var(--space-l)' + | 'var(--space-xl)' + | 'var(--space-2xl)' + +export interface UIRendererOptions extends UIProps { + id?: string +} + +interface UIGenericPayload { + wallet_type: UIWalletType | string + onClose?: () => void + onBack?: () => void +} + +export interface UIRequestPayload extends UIGenericPayload { + data: UIQRData +} + +export type UILoginPayload = UIRequestPayload +export type UISignManuallyPayload = UIRequestPayload + +export interface UIErrorPayload { + wallet_type: UIWalletType | string + data: UIError +} + +export interface UISignPayload extends UIGenericPayload { + onManual?: () => void + data: UISignData +} + +export interface UIErrorRecoverPayload extends UIErrorPayload, Pick {} + +export interface UIRenderer { + selectWallet(): Promise + login(_: UILoginPayload): void + sign(_: UISignPayload): void + signManually(_: UISignManuallyPayload): void + showError(_: UIErrorPayload): void + recoverError(_: UIErrorRecoverPayload): void + show(): void + close(): void + destroy(): void + showLoading(): void +} diff --git a/packages/proton-web-renderer/src/ui/App.svelte b/packages/proton-web-renderer/src/ui/App.svelte new file mode 100644 index 0000000..a7554b6 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/App.svelte @@ -0,0 +1,170 @@ + + + + + + + + + + {#snippet content()} + {#if $demoMode} +
+ + +
+ + + +
+ {/if} + +
+ + {#if $active} + {#if $error} + + {:else if $router.path === ROUTES.WEBAUTH_GET} + + {:else if $router.path === ROUTES.OTHER_ANCHOR_USE} + + {:else if $router.path === ROUTES.WEBAUTH_LOGIN_MOBILE} + + {:else if $router.path === ROUTES.WEBAUTH_CONNECT} + + {:else if $router.path === ROUTES.WEBAUTH_SIGN} + + {:else if $router.path === ROUTES.WEBAUTH_SIGN_MANUAL} + + {:else if $router.path === ROUTES.OTHER_ANCHOR_SIGN} + + {:else if $router.path === ROUTES.OTHER_ANCHOR_SIGN_MANUAL} + + {:else if $router.path === ROUTES.PREPARING_REQUEST} + + {/if} + {/if} + {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/ui/components/Button.svelte b/packages/proton-web-renderer/src/ui/components/Button.svelte new file mode 100644 index 0000000..8dd3239 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/Button.svelte @@ -0,0 +1,152 @@ + + + + + {#if content} + {@render content()} + {:else if label} + {label} + {/if} + + + diff --git a/packages/proton-web-renderer/src/ui/components/ButtonIcon.svelte b/packages/proton-web-renderer/src/ui/components/ButtonIcon.svelte new file mode 100644 index 0000000..3880056 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/ButtonIcon.svelte @@ -0,0 +1,52 @@ + + + + + diff --git a/packages/proton-web-renderer/src/ui/components/Countdown.svelte b/packages/proton-web-renderer/src/ui/components/Countdown.svelte new file mode 100644 index 0000000..4c79db6 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/Countdown.svelte @@ -0,0 +1,166 @@ + + +
+
+ {#if deadline} + {#key remaining} + + {countdownFormat(deadline)} + + {/key} + {/if} +
+ +
+ + + + + + + + + + + + + + +
+
+ + diff --git a/packages/proton-web-renderer/src/ui/components/ErrorDisplay.svelte b/packages/proton-web-renderer/src/ui/components/ErrorDisplay.svelte new file mode 100644 index 0000000..96dc9e1 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/ErrorDisplay.svelte @@ -0,0 +1,35 @@ + + +
+
{name}
+ {#if description} +
{description}
+ {/if} +
+ + diff --git a/packages/proton-web-renderer/src/ui/components/GetApp.svelte b/packages/proton-web-renderer/src/ui/components/GetApp.svelte new file mode 100644 index 0000000..03f568f --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/GetApp.svelte @@ -0,0 +1,53 @@ + + + + + diff --git a/packages/proton-web-renderer/src/ui/components/Header.svelte b/packages/proton-web-renderer/src/ui/components/Header.svelte new file mode 100644 index 0000000..ef3a4ed --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/Header.svelte @@ -0,0 +1,99 @@ + + +
+
+ {#if showBack} + back()}> + {/if} +
+ +
+ {#if !hideLogo} + + {/if} + {title} +
+ +
+ close()}> +
+
+ + diff --git a/packages/proton-web-renderer/src/ui/components/Layout.svelte b/packages/proton-web-renderer/src/ui/components/Layout.svelte new file mode 100644 index 0000000..fb9a6ac --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/Layout.svelte @@ -0,0 +1,47 @@ + + +
+
+ {@render content?.()} +
+ {#if footer} +
+ {@render footer()} +
+ {/if} +
+ + diff --git a/packages/proton-web-renderer/src/ui/components/Modal.svelte b/packages/proton-web-renderer/src/ui/components/Modal.svelte new file mode 100644 index 0000000..8139d88 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/Modal.svelte @@ -0,0 +1,109 @@ + + + + {@render content?.()} + + + diff --git a/packages/proton-web-renderer/src/ui/components/QRCode.svelte b/packages/proton-web-renderer/src/ui/components/QRCode.svelte new file mode 100644 index 0000000..0ec28c4 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/QRCode.svelte @@ -0,0 +1,44 @@ + + +
+ {#if label} +
{label}
+ {/if} +
+ QR Code +
+
+ + diff --git a/packages/proton-web-renderer/src/ui/components/Tabs.svelte b/packages/proton-web-renderer/src/ui/components/Tabs.svelte new file mode 100644 index 0000000..b73348e --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/Tabs.svelte @@ -0,0 +1,107 @@ + + +
+
+ {#each tabs as tab} + + {/each} +
+
+ + diff --git a/packages/proton-web-renderer/src/ui/components/WalletButton.svelte b/packages/proton-web-renderer/src/ui/components/WalletButton.svelte new file mode 100644 index 0000000..c8d655a --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/WalletButton.svelte @@ -0,0 +1,50 @@ + + + + + diff --git a/packages/proton-web-renderer/src/ui/components/icons/Icon.svelte b/packages/proton-web-renderer/src/ui/components/icons/Icon.svelte new file mode 100644 index 0000000..9ccd971 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/icons/Icon.svelte @@ -0,0 +1,43 @@ + + + + {#if isImg} + {name} + {:else} + {@html icons[name]} + {/if} + + + diff --git a/packages/proton-web-renderer/src/ui/components/icons/icons.ts b/packages/proton-web-renderer/src/ui/components/icons/icons.ts new file mode 100644 index 0000000..51a557e --- /dev/null +++ b/packages/proton-web-renderer/src/ui/components/icons/icons.ts @@ -0,0 +1,74 @@ +const XMark = ` + +` + +const WebAuth = ` + +` + +const ArrowLeft = ` + +` + +const ArrowRight = ` + +` + +const FingerPrint = ` + +` + +const QRCode = ` + + + + + + + + + + +` + +const Browser = ` + + +` + +const Storage = ` + + +` + +const Send = ` + +` + +const Trade = ` + + +` + +const Bars = ` + + + +` + +const icons = { + 'arrow-left': ArrowLeft, + 'arrow-right': ArrowRight, + browser: Browser, + 'qr-code': QRCode, + fingerprint: FingerPrint, + xmark: XMark, + 'web-auth': WebAuth, + storage: Storage, + send: Send, + trade: Trade, + bars: Bars, +} + +export type UIIcon = keyof typeof icons +export default icons diff --git a/packages/proton-web-renderer/src/ui/constants.ts b/packages/proton-web-renderer/src/ui/constants.ts new file mode 100644 index 0000000..86b5c2e --- /dev/null +++ b/packages/proton-web-renderer/src/ui/constants.ts @@ -0,0 +1,28 @@ +export const enum AUTH_TYPES { + MOBILE = 'mobile', + DESKTOP = 'desktop', +} + +export const enum ROUTES { + WEBAUTH_GET = 'webauth-get', + WEBAUTH_LOGIN_MOBILE = 'webauth-login-mobile', + WEBAUTH_CONNECT = 'webauth-connect', + WEBAUTH_SIGN = 'webauth-sign', + WEBAUTH_SIGN_MANUAL = 'webauth-manual-sign', + OTHER_ANCHOR_USE = 'other-anchor-use', + OTHER_ANCHOR_SIGN = 'other-anchor-sign', + OTHER_ANCHOR_SIGN_MANUAL = 'other-anchor-manual-sign', + PREPARING_REQUEST = 'preparing-request', +} + +export const enum SUPPORTED_WALLETS { + WEBAUTH_MOBILE = 'proton', + WEBAUTH_WEB = 'webauth', + ANCHOR = 'anchor', +} + +export const ENABLED_WALLETS = [ + SUPPORTED_WALLETS.WEBAUTH_MOBILE, + SUPPORTED_WALLETS.WEBAUTH_WEB, + SUPPORTED_WALLETS.ANCHOR, +] diff --git a/packages/proton-web-renderer/src/ui/interfaces.ts b/packages/proton-web-renderer/src/ui/interfaces.ts new file mode 100644 index 0000000..ffb3293 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/interfaces.ts @@ -0,0 +1,116 @@ +import type {Readable, Writable} from 'svelte/store' +import type {ROUTES, SUPPORTED_WALLETS} from './constants' + +export type UITheme = 'light' | 'dark' | string + +export type UIButtonAppearance = 'primary' | 'outlined' | 'secondary' | 'accent' | 'flat' + +export type UIRouteValue = (typeof ROUTES)[keyof typeof ROUTES] + +export type UIWalletType = (typeof SUPPORTED_WALLETS)[keyof typeof SUPPORTED_WALLETS] + +/** The router for the sections of the UI */ +export interface UIRouterState { + path?: UIRouteValue + history: UIRouteValue[] +} + +export interface UIRouter extends Writable { + back: () => void + push: (_: UIRouteValue) => void + onchange: Readable<{has_history: boolean}> +} + +export interface UIThemeOptions { + base?: { + textColorBase?: string + textColorSecondary?: string + textColorLink?: string + + bodyBackground?: string + + borderColor?: string + } + + tabs?: { + background?: string + backgroundActive?: string + textColorActive?: string + } + + list?: { + background?: string + borderColor?: string + } + + button?: { + icon?: { + backgroundHover?: string + } + primary?: { + borderColor?: string + borderColorHover?: string + backgroundHover?: string + } + outlined?: { + borderColor?: string + borderColorHover?: string + } + accent?: { + background?: string + backgroundHover?: string + textColor?: string + } + flat?: { + textColor?: string + textColorHover?: string + } + } +} + +/** The properties of the UI */ +export interface UIProps { + theme?: UITheme + themes?: Record +} + +export interface UIWalletConfig { + name: string + label?: string +} + +export interface UIError { + name: string + description?: string +} + +export type UIWalletSelectResponse = { + reject: (_: Error) => void + // eslint-disable-next-line no-unused-vars + resolve: (walletType: string) => void +} + +export type UIDemo = { + // eslint-disable-next-line no-unused-vars + selectWallet: (walletType: string) => void + // eslint-disable-next-line no-unused-vars + sign: (walletType: string) => void + // eslint-disable-next-line no-unused-vars + signManually: (walletType: string) => void + // eslint-disable-next-line no-unused-vars + timeout: (walletType: string) => void +} + +export interface WritableWithReset extends Writable { + reset: () => void +} + +export interface UIQRData { + code: string + link: string +} + +export interface UISignData { + timeout?: number + deviceName?: string +} diff --git a/packages/proton-web-renderer/src/ui/store.ts b/packages/proton-web-renderer/src/ui/store.ts new file mode 100644 index 0000000..8829cd5 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/store.ts @@ -0,0 +1,111 @@ +import {derived, writable} from 'svelte/store' +import type { + UIDemo, + UIError, + UIProps, + UIQRData, + UIRouter, + UIRouterState, + UIRouteValue, + UISignData, + UITheme, + UIWalletSelectResponse, + UIWalletType, + WritableWithReset, +} from './interfaces' + +const defaultUIProps: UIProps = {} + +export const app_props = writable(defaultUIProps) + +/** Whether or not the interface is active in the browser */ +export const active = writable(false) + +export const theme = writable('dark') + +export const closeAction = writable<(() => void) | undefined>(undefined) +export const backAction = writable<(() => void) | undefined>(undefined) +export const manualAction = writable<(() => void) | undefined>(undefined) + +export const error = writable(undefined) +export const recoverError = writable(undefined) + +export const enabledWallets = writable | undefined>(undefined) + +export const demoMode = writable(undefined) + +const defaultUIRouterState: UIRouterState = { + path: undefined, + history: [], +} + +const initRouter = (): UIRouter => { + const state = writable(defaultUIRouterState) + const onchange = derived(state, (value) => ({has_history: value.history.length > 0})) + return { + // Method to go one back in history + back: () => + state.update((current: UIRouterState) => ({ + ...current, + path: current.history[current.history.length - 1], + history: current.history.slice(0, -1), + })), + // Push a new path on to history + push: (path) => + state.update((current) => { + let history: UIRouteValue[] = [] + if (current.path) { + history = current.history + if (current.path !== path) { + history = [...current.history, current.path] + } + } + + return { + ...current, + path, + history, + } + }), + set: state.set, + subscribe: state.subscribe, + update: state.update, + onchange, + } +} + +export const router = initRouter() + +export function initWritableWithReset(): WritableWithReset { + const {set, subscribe, update} = writable(undefined) + return { + reset: () => set(undefined), + set, + subscribe, + update, + } +} + +export const walletSelect = initWritableWithReset() + +export const qrRequestData = initWritableWithReset() + +export const signRequestData = initWritableWithReset() + +// Reset data in all stores +export function resetState() { + active.set(false) + demoMode.set(undefined) + + router.set({...defaultUIRouterState}) + app_props.set({...defaultUIProps}) + + error.set(undefined) + walletSelect.reset() + backAction.set(undefined) + closeAction.set(undefined) + manualAction.set(undefined) + signRequestData.reset() + recoverError.set(undefined) + enabledWallets.set(undefined) +} diff --git a/packages/proton-web-renderer/src/ui/utils.ts b/packages/proton-web-renderer/src/ui/utils.ts new file mode 100644 index 0000000..e71ddf3 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/utils.ts @@ -0,0 +1,22 @@ +export function eventSelf(fn) { + return function (...args) { + const event = /** @type {Event} */ args[0] + // @ts-expect-error this is unknown + if (event.target === this) { + // @ts-expect-error this is unknown + fn?.apply(this, args) + } + } +} + +export function eventOnce(fn) { + let ran = false + + return function (...args) { + if (ran) return + ran = true + + // @ts-expect-error this is unknown + return fn?.apply(this, args) + } +} diff --git a/packages/proton-web-renderer/src/ui/views/ConnectWebAuth.svelte b/packages/proton-web-renderer/src/ui/views/ConnectWebAuth.svelte new file mode 100644 index 0000000..95e644c --- /dev/null +++ b/packages/proton-web-renderer/src/ui/views/ConnectWebAuth.svelte @@ -0,0 +1,162 @@ + + + + {#snippet content()} +
+ {#if noWallets} + + {:else} +
    + {#if $enabledWallets?.has(SUPPORTED_WALLETS.WEBAUTH_MOBILE)} +
  • + selectWallet(SUPPORTED_WALLETS.WEBAUTH_MOBILE)} + icon="qr-code" + label="Mobile App" + sublabel="Scan QR Code" + /> +
  • + {/if} + {#if $enabledWallets?.has(SUPPORTED_WALLETS.WEBAUTH_WEB)} +
  • + selectWallet(SUPPORTED_WALLETS.WEBAUTH_WEB)} + icon="browser" + label="Browser wallet" + sublabel="Authorize device" + /> +
  • + {/if} +
+ + + +
+ {#if $enabledWallets?.has(SUPPORTED_WALLETS.ANCHOR)} + + {/if} +
+ {/if} +
+ {/snippet} + + {#snippet footer()} +
+ + By connecting, I accept XPR Network's Terms of Service + +
+ {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/ui/views/GenericError.svelte b/packages/proton-web-renderer/src/ui/views/GenericError.svelte new file mode 100644 index 0000000..9bcdb07 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/views/GenericError.svelte @@ -0,0 +1,36 @@ + + + + {#snippet content()} +
+
+ +
+
+ {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/ui/views/GetWebAuth.svelte b/packages/proton-web-renderer/src/ui/views/GetWebAuth.svelte new file mode 100644 index 0000000..5026420 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/views/GetWebAuth.svelte @@ -0,0 +1,118 @@ + + + + {#snippet content()} +
    + {#each benefits as item} +
  • + +
    +
    {item.label}
    +
    {item.description}
    +
    +
  • + {/each} +
+ + {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/ui/views/LoginWebAuthMobile.svelte b/packages/proton-web-renderer/src/ui/views/LoginWebAuthMobile.svelte new file mode 100644 index 0000000..8d3b20b --- /dev/null +++ b/packages/proton-web-renderer/src/ui/views/LoginWebAuthMobile.svelte @@ -0,0 +1,60 @@ + + + + {#snippet content()} +
+ {#if code} + + {/if} +
+ {/snippet} + + {#snippet footer()} + + {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/ui/views/RequestWithQRCode.svelte b/packages/proton-web-renderer/src/ui/views/RequestWithQRCode.svelte new file mode 100644 index 0000000..b19d8a1 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/views/RequestWithQRCode.svelte @@ -0,0 +1,84 @@ + + + + {#snippet content()} +
+ {#if code} + + {/if} +
+ {/snippet} + + {#snippet footer()} + + {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/ui/views/SignRequest.svelte b/packages/proton-web-renderer/src/ui/views/SignRequest.svelte new file mode 100644 index 0000000..ff9d585 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/views/SignRequest.svelte @@ -0,0 +1,106 @@ + + + + {#snippet content()} +
+
+ {#if $recoverError} + + {:else} +
+ Please open {label} to
review the transaction +
+ + {/if} +
+
+ {/snippet} + {#snippet footer()} + + {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/ui/views/UseAnchorWallet.svelte b/packages/proton-web-renderer/src/ui/views/UseAnchorWallet.svelte new file mode 100644 index 0000000..3de9800 --- /dev/null +++ b/packages/proton-web-renderer/src/ui/views/UseAnchorWallet.svelte @@ -0,0 +1,91 @@ + + + + {#snippet content()} +
+
+ +
+ +
+ {#if current === AUTH_TYPES.MOBILE} + {#if code} + + {/if} + {:else if current === AUTH_TYPES.DESKTOP} + {#if link} +
+
+ {/snippet} + {#snippet footer()} + + {/snippet} +
+ + diff --git a/packages/proton-web-renderer/src/utils.ts b/packages/proton-web-renderer/src/utils.ts new file mode 100644 index 0000000..4169246 --- /dev/null +++ b/packages/proton-web-renderer/src/utils.ts @@ -0,0 +1,45 @@ +export function addListener(el: Node, event: string, callback: () => void) { + el.addEventListener(event, callback) + + return () => { + el.removeEventListener(event, callback) + } +} + +function toKebabCase(str: string) { + let kebabCase = '' + for (let i = 0; i < str.length; i++) { + const char = str[i] + if (char.toUpperCase() === char && char.toLowerCase() !== char) { + if (i > 0) { + kebabCase += '-' + } + kebabCase += char.toLowerCase() + } else if (char === ' ' || char === '_' || char === '-') { + kebabCase += '-' + } else { + kebabCase += char + } + } + return kebabCase +} + +export function flattenObject(obj: Record, prefix = '') { + return Object.keys(obj).reduce((acc, k) => { + const pre = prefix !== '' ? `${prefix}-` : undefined + const key = `${pre ?? ''}${toKebabCase(k)}` + if (typeof obj[k] === 'object' && obj[k] !== null && Object.keys(obj[k]).length > 0) { + Object.assign(acc, flattenObject(obj[k], key)) + } else { + acc[key] = obj[k] + } + return acc + }, {}) +} + +export function toCssVars(obj: Record, prefix = '') { + prefix = prefix !== '' ? `${prefix}-` : '' + return Object.entries(obj).map(([key, value]) => { + return `--${prefix}${key}: ${value};` + }) +} diff --git a/packages/proton-web-renderer/tsconfig.json b/packages/proton-web-renderer/tsconfig.json new file mode 100644 index 0000000..fe1d284 --- /dev/null +++ b/packages/proton-web-renderer/tsconfig.json @@ -0,0 +1,32 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "esnext", + "lib": [ + "esnext", + "dom" + ], + "target": "es2020", + "importHelpers": true, + "downlevelIteration": true, + "esModuleInterop": true, + "moduleResolution": "node", + "noImplicitAny": false, + "strict": true, + "declaration": true, + "declarationDir": "./lib/types", + "verbatimModuleSyntax": true, + "isolatedModules": true, + "outDir": "./lib", + /** + To have warnings/errors of the Svelte compiler at the correct position, + enable source maps by default. + */ + "sourceMap": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": [ + "src/**/*" + ] +} \ No newline at end of file diff --git a/packages/proton-web-sdk/.prettierrc b/packages/proton-web-sdk/.prettierrc index 3d952d4..4ba6022 100644 --- a/packages/proton-web-sdk/.prettierrc +++ b/packages/proton-web-sdk/.prettierrc @@ -1,19 +1,10 @@ { - "arrowParens": "always", - "bracketSpacing": false, - "endOfLine": "lf", - "printWidth": 100, - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "plugins": ["prettier-plugin-svelte"], - "overrides": [ - { - "files": "*.svelte", - "options": { - "parser": "svelte" - } - } - ] + "arrowParens": "always", + "bracketSpacing": false, + "endOfLine": "lf", + "printWidth": 100, + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5" } \ No newline at end of file diff --git a/packages/proton-web-sdk/Makefile b/packages/proton-web-sdk/Makefile deleted file mode 100644 index f172471..0000000 --- a/packages/proton-web-sdk/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -SRC_FILES := $(shell find src -name '*.ts') - -lib: ${SRC_FILES} package.json tsconfig.json node_modules rollup.config.js - @./node_modules/.bin/rollup -c - -.PHONY: test -test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts --grep '$(grep)' - -.PHONY: coverage -coverage: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/nyc --reporter=html ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts -R nyan && open coverage/index.html - -.PHONY: lint -lint: node_modules - @./node_modules/.bin/eslint src --ext .ts --fix - -.PHONY: ci-test -ci-test: node_modules - @TS_NODE_PROJECT='./test/tsconfig.json' ./node_modules/.bin/nyc --reporter=text ./node_modules/.bin/mocha -u tdd -r ts-node/register --extension ts test/*.ts -R list - -.PHONY: ci-lint -ci-lint: node_modules - @./node_modules/.bin/eslint src --ext .ts --max-warnings 0 --format unix && echo "Ok" - -docs: $(SRC_FILES) node_modules - ./node_modules/.bin/typedoc \ - --excludeInternal \ - --excludePrivate --excludeProtected \ - --name "Proton Link" --includeVersion --readme none \ - --out docs \ - src/index-module.ts - -.PHONY: deploy-site -deploy-site: docs - cp -r ./examples ./docs/examples/ - ./node_modules/.bin/gh-pages -d docs - -node_modules: - yarn install --non-interactive --frozen-lockfile --ignore-scripts - -.PHONY: publish -publish: | distclean node_modules - @git diff-index --quiet HEAD || (echo "Uncommitted changes, please commit first" && exit 1) - @git fetch origin && git diff origin/master --quiet || (echo "Changes not pushed to origin, please push first" && exit 1) - @yarn config set version-tag-prefix "" && yarn config set version-git-message "Version %s" - @yarn publish && git push && git push --tags - -.PHONY: clean -clean: - rm -rf lib/ coverage/ docs/ - -.PHONY: distclean -distclean: clean - rm -rf node_modules/ diff --git a/packages/proton-web-sdk/README.md b/packages/proton-web-sdk/README.md index 48e5d61..514b5f8 100644 --- a/packages/proton-web-sdk/README.md +++ b/packages/proton-web-sdk/README.md @@ -30,23 +30,41 @@ const { link, session } = await ProtonWebSDK({ requestStatus: true, }, selectorOptions: { - /* Optional: Name to show in modal, Default 'app' */ - appName: 'Taskly', - - /* Optional: Logo to show in modal */ - appLogo: 'https://protondemos.com/static/media/taskly-logo.ad0bfb0f.svg', - - /* Optional: Custom style options for modal */ - customStyleOptions: { - modalBackgroundColor: '#F4F7FA', - logoBackgroundColor: 'white', - isLogoRound: true, - optionBackgroundColor: 'white', - optionFontColor: 'black', - primaryFontColor: 'black', - secondaryFontColor: '#6B727F', - linkColor: '#752EEB' - } + /* Optional: The list of enabled wallets. All wallets are enabled by default. Possible values: proton, webauth, anchor */ + enabledWalletTypes: ['proton', 'webauth', 'anchor'] + + /* Optional: The name of the wallet to use. In this case the wallet selector step will be skipped. */ + walletType: 'proton' + }, + /* Optional: Configuration of UI widget */ + uiOptions: { + /* Optional: The name of the theme to use. Default: dark. Possible values: dark, light or any name of the theme defined in themes options */ + theme: 'light', + /* Optional: The set of themes with options to adjust. It is possible to define some parameters for light or dark theme or define completely new theme with all parameters set */ + themes: { + light: { + base: { + textColorBase: 'red', + textColorLink: 'green', + }, + button: { + primary: { + backgroundHover: 'red', + }, + }, + }, + my: { + base: { + textColorBase: 'green', + textColorLink: 'red', + }, + button: { + primary: { + backgroundHover: 'blue', + }, + }, + }, + }, } }) diff --git a/packages/proton-web-sdk/eslint.config.ts b/packages/proton-web-sdk/eslint.config.ts index 577391b..a1e3619 100644 --- a/packages/proton-web-sdk/eslint.config.ts +++ b/packages/proton-web-sdk/eslint.config.ts @@ -1,10 +1,7 @@ import js from '@eslint/js' import globals from 'globals' import tseslint from 'typescript-eslint' -import css from '@eslint/css' import {defineConfig, globalIgnores} from 'eslint/config' -import svelte from 'eslint-plugin-svelte' -import svelteparser from 'svelte-eslint-parser' import prettier from 'eslint-plugin-prettier/recommended' export default defineConfig([ @@ -16,25 +13,12 @@ export default defineConfig([ languageOptions: { globals: {...globals.browser, ...globals.node, NodeJS: true}, parserOptions: { - extraFileExtensions: ['.svelte'], tsconfigRootDir: __dirname, }, }, }, tseslint.configs.recommended, - svelte.configs.recommended, prettier, - svelte.configs.prettier, - { - files: ['**/*.svelte', '**/*.svelte.ts'], - languageOptions: { - parser: svelteparser, - parserOptions: { - parser: tseslint.parser, - extraFileExtensions: ['.svelte'], - }, - }, - }, { rules: { 'prettier/prettier': 'warn', @@ -67,7 +51,4 @@ export default defineConfig([ ], }, }, - {files: ['**/*.css'], plugins: {css}, language: 'css/css', extends: ['css/recommended']}, - - // {files: ['**/*.json'], plugins: {json}, language: 'json/json', extends: ['json/recommended']}, ]) diff --git a/packages/proton-web-sdk/package.json b/packages/proton-web-sdk/package.json index bae5cf4..b296b75 100644 --- a/packages/proton-web-sdk/package.json +++ b/packages/proton-web-sdk/package.json @@ -1,8 +1,12 @@ { "name": "@proton/web-sdk", - "version": "4.4.1", + "version": "5.0.0", "license": "MIT", "author": "metallicus", + "homepage": "https://github.com/XPRNetwork/proton-web-sdk", + "bugs": { + "url": "https://github.com/XPRNetwork/proton-web-sdk/issues" + }, "publishConfig": { "access": "public" }, @@ -22,17 +26,20 @@ }, "scripts": { "watch": "rollup -c -w", - "build": "make", - "lint": "make lint", - "prepare": "make", + "build": "rollup -c", + "lint": "eslint src --ext .ts --fix", + "prepare": "pnpm run build", "size": "size-limit", - "analyze": "size-limit --why" + "analyze": "size-limit --why", + "docs": "typedoc --excludeInternal --excludePrivate --excludeProtected --name 'Proton Link' --includeVersion --readme none --out docs src/index-module.ts", + "deploy-site": "cp -r ./examples ./docs/examples/ && gh-pages -d docs" }, "dependencies": { "@greymass/eosio": "^0.6.1", "@proton/browser-transport": "workspace:^", "@proton/js": "^28.1.2", - "@proton/link": "workspace:^" + "@proton/link": "workspace:^", + "@proton/web-renderer": "workspace:^" }, "gitHead": "d81cd76c8aacc2538243e24d0801b3eae4b8dba2", "devDependencies": { @@ -45,29 +52,19 @@ "@rollup/plugin-replace": "^6.0.2", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.2", - "@tsconfig/svelte": "^5.0.4", "@types/node": "^16.4.0", "core-js": "^3.42.0", "eslint": "^9.39.1", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-svelte": "^3.13.0", "globals": "^16.5.0", "jiti": "^2.6.1", - "postcss": "^8.5.3", "prettier": "^3.5.3", - "prettier-plugin-svelte": "^3.4.0", "rollup": "^4.40.0", "rollup-plugin-dts": "^6.2.1", - "rollup-plugin-svelte": "^7.2.0", - "sass": "^1.89.0", - "svelte": "^5.41.0", - "svelte-check": "^4.3.3", - "svelte-eslint-parser": "^1.4.0", - "svelte-preprocess": "^6.0.3", "ts-node": "^10.0.0", "tslib": "^2.4.0", "typescript": "~5.4.0", "typescript-eslint": "^8.46.4" } -} +} \ No newline at end of file diff --git a/packages/proton-web-sdk/rollup.config.js b/packages/proton-web-sdk/rollup.config.js index 7736374..ced0969 100644 --- a/packages/proton-web-sdk/rollup.config.js +++ b/packages/proton-web-sdk/rollup.config.js @@ -1,18 +1,16 @@ -import { createRequire } from "module"; +import {createRequire} from 'module' import fs from 'fs' import dts from 'rollup-plugin-dts' -import svelte from 'rollup-plugin-svelte' import resolve from '@rollup/plugin-node-resolve' import commonjs from '@rollup/plugin-commonjs' import typescript from '@rollup/plugin-typescript' import replace from '@rollup/plugin-replace' import terser from '@rollup/plugin-terser' import json from '@rollup/plugin-json' -import {sveltePreprocess} from 'svelte-preprocess'; -const pkg = createRequire(import.meta.url)("./package.json"); +const pkg = createRequire(import.meta.url)('./package.json') -const production = !process.env.ROLLUP_WATCH; +const production = !process.env.ROLLUP_WATCH const license = fs.readFileSync('LICENSE').toString('utf-8').trim() const banner = ` @@ -41,16 +39,6 @@ const replaceVersion = replace({ __ver: pkg.version, }) -const svelteOnWarn = (warning, handler) => { - if (['a11y-click-events-have-key-events', 'a11y-interactive-supports-focus'].includes(warning.code)) return; - // let Rollup handle all other warnings normally - handler(warning); -} - -const getCssHash = ({ hash, css, filename }) => { - return `pbt-${hash(filename + css)}` -} - export default [ { input: 'src/index.ts', @@ -59,19 +47,9 @@ export default [ file: pkg.main, format: 'cjs', sourcemap: !production, - exports: 'default', + exports: 'named', }, plugins: [ - svelte({ - preprocess: sveltePreprocess({ sourceMap: !production }), - compilerOptions: { - cssHash: getCssHash, - // enable run-time checks when not in production - dev: !production - }, - emitCss: false, - onwarn: svelteOnWarn, - }), replaceVersion, // If you have external dependencies installed from // npm, you'll most likely need these plugins. In @@ -80,15 +58,14 @@ export default [ // https://github.com/rollup/plugins/tree/master/packages/commonjs resolve({ browser: true, - dedupe: ['svelte'] }), typescript({ sourceMap: !production, inlineSources: !production, - target: 'es6' - }) + target: 'es6', + }), ], - external: Object.keys({ ...pkg.dependencies, ...pkg.peerDependencies }), + external: Object.keys({...pkg.dependencies, ...pkg.peerDependencies}), onwarn, }, { @@ -100,16 +77,6 @@ export default [ sourcemap: !production, }, plugins: [ - svelte({ - preprocess: sveltePreprocess({ sourceMap: !production }), - compilerOptions: { - cssHash: getCssHash, - // enable run-time checks when not in production - dev: !production - }, - emitCss: false, - onwarn: svelteOnWarn, - }), replaceVersion, // If you have external dependencies installed from // npm, you'll most likely need these plugins. In @@ -118,15 +85,14 @@ export default [ // https://github.com/rollup/plugins/tree/master/packages/commonjs resolve({ browser: true, - dedupe: ['svelte'] }), typescript({ sourceMap: !production, inlineSources: !production, target: 'es6', - }) + }), ], - external: Object.keys({ ...pkg.dependencies, ...pkg.peerDependencies }), + external: Object.keys({...pkg.dependencies, ...pkg.peerDependencies}), onwarn, }, { @@ -134,7 +100,7 @@ export default [ output: { banner, file: pkg.types, - format: 'esm' + format: 'esm', }, onwarn, plugins: [dts()], @@ -144,7 +110,7 @@ export default [ output: { banner, footer: exportFix, - globals: { '@proton/link': 'ProtonLink' }, + globals: {'@proton/link': 'ProtonLink'}, name: 'ProtonWebSDK', file: pkg.unpkg, format: 'iife', @@ -152,16 +118,6 @@ export default [ exports: 'named', }, plugins: [ - svelte({ - preprocess: sveltePreprocess({ sourceMap: !production }), - compilerOptions: { - cssHash: getCssHash, - // enable run-time checks when not in production - dev: !production - }, - emitCss: false, - onwarn: svelteOnWarn, - }), replaceVersion, // If you have external dependencies installed from // npm, you'll most likely need these plugins. In @@ -170,7 +126,6 @@ export default [ // https://github.com/rollup/plugins/tree/master/packages/commonjs resolve({ browser: true, - dedupe: ['svelte'] }), // , json(), @@ -183,8 +138,8 @@ export default [ replace({ preventAssignment: true, values: { - 'process.env.NODE_ENV': JSON.stringify('production') - } + 'process.env.NODE_ENV': JSON.stringify('production'), + }, }), terser({ format: { @@ -195,7 +150,7 @@ export default [ }, }), ], - external: Object.keys({ ...pkg.peerDependencies }), + external: Object.keys({...pkg.peerDependencies}), onwarn, }, ] diff --git a/packages/proton-web-sdk/src/connect.ts b/packages/proton-web-sdk/src/connect.ts index d1c8d14..29e1539 100644 --- a/packages/proton-web-sdk/src/connect.ts +++ b/packages/proton-web-sdk/src/connect.ts @@ -1,19 +1,31 @@ import ProtonLinkBrowserTransport from '@proton/browser-transport' import ProtonLink from '@proton/link' import type {LinkOptions, PermissionLevel} from '@proton/link' -import WalletTypeSelector from './walletTypeSelector' import {ProtonWebLink} from './links/protonWeb' import {Storage} from './storage' -import {WALLET_TYPES} from './constants' -import type {ConnectWalletArgs, ConnectWalletRet, LoginOptions} from './types' +import type {ConnectWalletArgs, ConnectWalletRet, LoginOptions, UIOptions} from './types' import {JsonRpc} from '@proton/js' +import {WebRenderer} from '@proton/web-renderer' -let walletSelector: WalletTypeSelector | undefined +let renderer: WebRenderer | undefined +let uiTheme: UIOptions['theme'] = undefined + +export const setUITheme = (value: UIOptions['theme']) => { + if (value) { + uiTheme = value + renderer?.setTheme(value) + } +} + +export const runDemo = () => { + renderer?.demo() +} export const ConnectWallet = async ({ linkOptions, transportOptions = {}, selectorOptions = {}, + uiOptions = {}, }: ConnectWalletArgs): Promise => { // Add RPC const rpc = new JsonRpc(linkOptions.endpoints) @@ -30,12 +42,13 @@ export const ConnectWallet = async ({ linkOptions.storage = new Storage(linkOptions.storagePrefix || 'proton-storage') } - return login({selectorOptions, linkOptions, transportOptions}).finally(() => { - if (walletSelector) { - walletSelector.destroy() - walletSelector = undefined - } - }) + if (uiTheme) { + uiOptions.theme = uiTheme + } + + renderer = new WebRenderer(uiOptions) + + return login({selectorOptions, linkOptions, transportOptions}) } const login = async ( @@ -56,15 +69,6 @@ const login = async ( let link let loginResult - if (!walletSelector) { - walletSelector = new WalletTypeSelector( - loginOptions.selectorOptions.appName, - loginOptions.selectorOptions.appLogo, - loginOptions.selectorOptions.customStyleOptions, - loginOptions.selectorOptions.dialogRootNode - ) - } - // Determine wallet type from storage or selector modal let walletType: string | null | undefined = loginOptions.selectorOptions ? loginOptions.selectorOptions.walletType @@ -74,18 +78,11 @@ const login = async ( if (loginOptions.linkOptions.restoreSession) { walletType = await loginOptions.linkOptions.storage!.read('wallet-type') } else { - const enabledWalletTypes = loginOptions.selectorOptions.enabledWalletTypes - ? WALLET_TYPES.filter( - (wallet) => - loginOptions.selectorOptions.enabledWalletTypes && - loginOptions.selectorOptions.enabledWalletTypes.includes(wallet.key) - ) - : WALLET_TYPES - try { - walletType = await walletSelector.displayWalletSelector(enabledWalletTypes) + walletType = await renderer?.selectWallet({ + enabledWallets: loginOptions.selectorOptions.enabledWalletTypes, + }) } catch (e) { - console.log('CANCEL', e) return { error: e, } @@ -122,6 +119,7 @@ const login = async ( transport: new ProtonLinkBrowserTransport({ ...loginOptions.transportOptions, walletType, + ui: renderer, }) as any, walletType, chains: [], @@ -136,20 +134,6 @@ const login = async ( // Session from login if (!loginOptions.linkOptions.restoreSession) { - let backToSelector = false - const listenBackToSelector = () => { - const callback = () => { - backToSelector = true - } - document.addEventListener('backToSelector', callback) - - return () => { - document.removeEventListener('backToSelector', callback) - } - } - - const stopListening = listenBackToSelector() - try { loginResult = await link.login(loginOptions.transportOptions?.requestAccount || '') session = loginResult.session as any @@ -162,8 +146,7 @@ const login = async ( console.error('restoreSession Error:') console.error(e) - if (backToSelector) { - stopListening() + if ((e as Error)['code'] === 'E_WALLET_TYPE') { return null } else { return { diff --git a/packages/proton-web-sdk/src/constants.ts b/packages/proton-web-sdk/src/constants.ts deleted file mode 100644 index 8632951..0000000 --- a/packages/proton-web-sdk/src/constants.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const WALLET_TYPES = [ - {key: 'proton', value: 'Mobile'}, - {key: 'webauth', value: 'Browser'}, - {key: 'anchor', value: 'Desktop'}, -] diff --git a/packages/proton-web-sdk/src/global.d.ts b/packages/proton-web-sdk/src/global.d.ts deleted file mode 100644 index 1a25456..0000000 --- a/packages/proton-web-sdk/src/global.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/packages/proton-web-sdk/src/index.ts b/packages/proton-web-sdk/src/index.ts index 02a79db..d0a1c0c 100644 --- a/packages/proton-web-sdk/src/index.ts +++ b/packages/proton-web-sdk/src/index.ts @@ -6,4 +6,6 @@ export type {Link, LinkSession, TransactResult} from '@proton/link' //Allowing Type Definitions to be used by other modules export * from './types' +export {setUITheme, runDemo} from './connect' + export default ConnectWallet diff --git a/packages/proton-web-sdk/src/state.svelte.ts b/packages/proton-web-sdk/src/state.svelte.ts deleted file mode 100644 index 6fddebf..0000000 --- a/packages/proton-web-sdk/src/state.svelte.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type {WalletItem} from './types' - -export interface DialogProps { - title?: string - subtitle?: string - show?: boolean - appLogo?: string | null - hasRoundedLogo?: boolean - wallets?: WalletItem[] - close: () => void - select_wallet: (walletName: string) => void -} - -export const DIALOG_STATE = $state({ - title: '', - subtitle: '', - show: false, - appLogo: '', - hasRoundedLogo: false, - wallets: [], - close: () => {}, - select_wallet: (_) => {}, -}) diff --git a/packages/proton-web-sdk/src/styles.ts b/packages/proton-web-sdk/src/styles.ts deleted file mode 100644 index 8b5381f..0000000 --- a/packages/proton-web-sdk/src/styles.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type {CustomStyleOptions} from './types' - -export const CustomStyleOptionsToVarsMap: Map = new Map([ - ['modalBackgroundColor', 'proton-wallet-modal-bgcolor'], - ['logoBackgroundColor', 'proton-wallet-color-bglogo'], - ['optionBackgroundColor', 'proton-wallet-option-bg'], - ['optionFontColor', 'proton-wallet-option-font'], - ['primaryFontColor', 'proton-wallet-color-font-primary'], - ['secondaryFontColor', 'proton-wallet-color-font-secondary'], - ['linkColor', 'proton-wallet-color-link'], -]) diff --git a/packages/proton-web-sdk/src/types.ts b/packages/proton-web-sdk/src/types.ts index 44bbfeb..7f66f9a 100644 --- a/packages/proton-web-sdk/src/types.ts +++ b/packages/proton-web-sdk/src/types.ts @@ -1,27 +1,15 @@ import type {Link, LinkOptions, LinkSession, LinkStorage, LoginResult} from '@proton/link' import type {BrowserTransportOptions} from '@proton/browser-transport' import type {ProtonWebLink} from './links/protonWeb' +import type {UIRendererOptions} from '@proton/web-renderer' type PartialBy = Omit & Partial> -export interface CustomStyleOptions { - modalBackgroundColor?: string - logoBackgroundColor?: string - isLogoRound?: boolean - optionBackgroundColor?: string - optionFontColor?: string - primaryFontColor?: string - secondaryFontColor?: string - linkColor?: string -} +export type UIOptions = UIRendererOptions export interface SelectorOptions { - appName?: string - appLogo?: string walletType?: string enabledWalletTypes?: string[] - dialogRootNode?: HTMLElement | string - customStyleOptions?: CustomStyleOptions } export type LocalLinkOptions = PartialBy & { @@ -36,6 +24,7 @@ export interface ConnectWalletArgs { linkOptions: LocalLinkOptions transportOptions?: BrowserTransportOptions selectorOptions?: SelectorOptions + uiOptions?: UIOptions } export interface ConnectWalletRet { diff --git a/packages/proton-web-sdk/src/views/Dialog.svelte b/packages/proton-web-sdk/src/views/Dialog.svelte deleted file mode 100644 index 0d6a57f..0000000 --- a/packages/proton-web-sdk/src/views/Dialog.svelte +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - diff --git a/packages/proton-web-sdk/src/views/Footer.svelte b/packages/proton-web-sdk/src/views/Footer.svelte deleted file mode 100644 index cf9d36b..0000000 --- a/packages/proton-web-sdk/src/views/Footer.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/packages/proton-web-sdk/src/views/Header.svelte b/packages/proton-web-sdk/src/views/Header.svelte deleted file mode 100644 index fef2d98..0000000 --- a/packages/proton-web-sdk/src/views/Header.svelte +++ /dev/null @@ -1,62 +0,0 @@ - - -
- {#if logo} - {/if} - {#if title}{title}{/if} - {#if subtitle}{subtitle}{/if} -
- - diff --git a/packages/proton-web-sdk/src/views/Wallet.svelte b/packages/proton-web-sdk/src/views/Wallet.svelte deleted file mode 100644 index 5fa8169..0000000 --- a/packages/proton-web-sdk/src/views/Wallet.svelte +++ /dev/null @@ -1,94 +0,0 @@ - - -
  • - -
    { - e.stopPropagation() - select_wallet(wallet.key) - }} - > -
    - {wallet.value} -
    -
    -
  • - - diff --git a/packages/proton-web-sdk/src/walletTypeSelector.ts b/packages/proton-web-sdk/src/walletTypeSelector.ts deleted file mode 100644 index 2a1fdc5..0000000 --- a/packages/proton-web-sdk/src/walletTypeSelector.ts +++ /dev/null @@ -1,133 +0,0 @@ -import {mount, unmount} from 'svelte' -import {DIALOG_STATE} from './state.svelte' -import {CustomStyleOptionsToVarsMap} from './styles' -import type {CustomStyleOptions, WalletItem} from './types' -import DialogWidget from './views/Dialog.svelte' - -export default class WalletTypeSelector { - private appLogo: string | undefined - private hasRoundedLogo: boolean = false - private appName: string - private customStyleOptions: CustomStyleOptions | undefined - private dialogRootNode: HTMLElement - private dialogProps = DIALOG_STATE - - constructor( - name?: string, - logo?: string, - customStyleOptions?: CustomStyleOptions, - dialogRootNode?: HTMLElement | string - ) { - this.appLogo = logo - this.appName = name || 'app' - this.customStyleOptions = customStyleOptions - this.dialogRootNode = this.setDialogRootNode(dialogRootNode) - } - - /** Container and stylesheet for Wallet Selector */ - private Widget?: any - private widgetHolder?: HTMLElement - - private fontAdded: boolean = false - - /** - * Only Proton and Anchor are available - */ - public displayWalletSelector(enabledWalletTypes: WalletItem[]): Promise { - return new Promise((resolve, reject) => { - this.setUpSelectorContainer() - - if (this.Widget) { - this.dialogProps.title = 'Connect Wallet' - this.dialogProps.subtitle = `To start using ${this.appName}` - this.dialogProps.hasRoundedLogo = this.hasRoundedLogo - this.dialogProps.wallets = enabledWalletTypes - this.dialogProps.appLogo = this.appLogo || null - - this.dialogProps.select_wallet = (walletName) => { - if (walletName) { - this.hideSelector() - resolve(walletName) - } - } - - this.dialogProps.close = () => { - this.hideSelector() - reject('no wallet selected') - } - - this.dialogProps.show = true - } - }) - } - - public destroy() { - this.hideSelector() - if (this.Widget) { - unmount(this.Widget) - } - if (this.widgetHolder) { - this.widgetHolder.remove() - } - } - - private hideSelector() { - if (this.Widget) { - this.dialogProps.show = false - this.dialogProps.appLogo = '' - this.dialogProps.hasRoundedLogo = false - this.dialogProps.title = '' - this.dialogProps.subtitle = '' - this.dialogProps.wallets = [] - } - } - - private setUpSelectorContainer() { - this.addFont() - - if (!this.Widget) { - this.widgetHolder = document.createElement('div') - this.dialogRootNode.appendChild(this.widgetHolder) - - this.Widget = mount(DialogWidget, {props: this.dialogProps, target: this.widgetHolder}) - - if (this.customStyleOptions) { - const options = this.customStyleOptions - Object.keys(options).forEach((key) => { - if (key === 'isLogoRound') { - this.hasRoundedLogo = !!options.isLogoRound - } else { - const cssVar = CustomStyleOptionsToVarsMap.get(key as keyof CustomStyleOptions) - if (cssVar && options[key] && this.widgetHolder) { - this.widgetHolder.style.setProperty(`--${cssVar}`, options[key]) - } - } - }) - } - } - } - - private addFont() { - const fontToAdd = 'https://fonts.cdnfonts.com/css/circular-std-book' - if (!this.fontAdded) { - const alreadyExists = Array.from(document.styleSheets).some((item) => item.href === fontToAdd) - if (!alreadyExists) { - const font = document.createElement('link') - font.href = fontToAdd - font.rel = 'stylesheet' - document.head.appendChild(font) - } - this.fontAdded = true - } - } - - private setDialogRootNode(rootNode?: string | HTMLElement): HTMLElement { - if (!rootNode) return document.body - if (typeof rootNode == 'string') { - const node = document.body.querySelector(rootNode) - if (!node) throw new Error('dialogRootNode is not a valid selector') - return node as HTMLElement - } - return rootNode - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e9b321..1e3d218 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,34 +10,34 @@ importers: devDependencies: '@changesets/cli': specifier: ^2.25.0 - version: 2.29.7(@types/node@22.19.1) + version: 2.29.8(@types/node@22.19.3) turbo: specifier: ^2.5.6 - version: 2.6.1 + version: 2.7.2 examples/angular: dependencies: '@angular/common': specifier: ^19.2.0 - version: 19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + version: 19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) '@angular/compiler': specifier: ^19.2.0 - version: 19.2.15 + version: 19.2.17 '@angular/core': specifier: ^19.2.0 - version: 19.2.15(rxjs@7.8.2)(zone.js@0.15.1) + version: 19.2.17(rxjs@7.8.2)(zone.js@0.15.1) '@angular/forms': specifier: ^19.2.0 - version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + version: 19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) '@angular/platform-browser': specifier: ^19.2.0 - version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)) + version: 19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)) '@angular/platform-browser-dynamic': specifier: ^19.2.0 - version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.15)(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))) + version: 19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.17)(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))) '@angular/router': specifier: ^19.2.0 - version: 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + version: 19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) '@proton/js': specifier: ^28.1.2 version: 28.1.2(encoding@0.1.13) @@ -46,7 +46,7 @@ importers: version: link:../../packages/proton-web-sdk '@tailwindcss/postcss': specifier: ^4.1.8 - version: 4.1.17 + version: 4.1.18 postcss: specifier: ^8.5.4 version: 8.5.6 @@ -55,7 +55,7 @@ importers: version: 7.8.2 tailwindcss: specifier: ^4.1.8 - version: 4.1.17 + version: 4.1.18 tslib: specifier: ^2.3.0 version: 2.8.1 @@ -65,16 +65,16 @@ importers: devDependencies: '@angular-devkit/build-angular': specifier: ^19.2.14 - version: 19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3))(@angular/compiler@19.2.15)(@types/node@22.19.1)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(lightningcss@1.30.2)(tailwindcss@4.1.17)(typescript@5.7.3)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1))(yaml@2.8.1) + version: 19.2.19(@angular/compiler-cli@19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3))(@angular/compiler@19.2.17)(@types/node@22.19.3)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(lightningcss@1.30.2)(tailwindcss@4.1.18)(typescript@5.7.3)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2) '@angular/cli': specifier: ^19.2.14 - version: 19.2.19(@types/node@22.19.1)(chokidar@4.0.3) + version: 19.2.19(@types/node@22.19.3)(chokidar@4.0.3) '@angular/compiler-cli': specifier: ^19.2.0 - version: 19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3) + version: 19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3) '@types/jasmine': specifier: ~5.1.0 - version: 5.1.12 + version: 5.1.13 jasmine-core: specifier: ~5.6.0 version: 5.6.0 @@ -107,47 +107,47 @@ importers: version: link:../../packages/proton-web-sdk '@reduxjs/toolkit': specifier: ^2.8.2 - version: 2.10.1(react-redux@9.2.0(@types/react@19.2.4)(react@19.2.0)(redux@5.0.1))(react@19.2.0) + version: 2.11.2(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1))(react@19.2.3) '@tailwindcss/vite': specifier: ^4.1.8 - version: 4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + version: 4.1.18(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) react: specifier: ^19.1.0 - version: 19.2.0 + version: 19.2.3 react-dom: specifier: ^19.1.0 - version: 19.2.0(react@19.2.0) + version: 19.2.3(react@19.2.3) react-redux: specifier: ^9.2.0 - version: 9.2.0(@types/react@19.2.4)(react@19.2.0)(redux@5.0.1) + version: 9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1) tailwindcss: specifier: ^4.1.8 - version: 4.1.17 + version: 4.1.18 devDependencies: '@eslint/js': specifier: ^9.25.0 - version: 9.39.1 + version: 9.39.2 '@types/react': specifier: ^19.1.2 - version: 19.2.4 + version: 19.2.7 '@types/react-dom': specifier: ^19.1.2 - version: 19.2.3(@types/react@19.2.4) + version: 19.2.3(@types/react@19.2.7) '@types/react-redux': specifier: ^7.1.34 version: 7.1.34 '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.7.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + version: 4.7.0(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) eslint: specifier: ^9.25.0 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.39.1(jiti@2.6.1)) + version: 5.2.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-refresh: specifier: ^0.4.19 - version: 0.4.24(eslint@9.39.1(jiti@2.6.1)) + version: 0.4.26(eslint@9.39.2(jiti@2.6.1)) globals: specifier: ^16.0.0 version: 16.5.0 @@ -156,10 +156,10 @@ importers: version: 5.8.3 typescript-eslint: specifier: ^8.30.1 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) vite: specifier: ^6.3.5 - version: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + version: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) examples/react-native: dependencies: @@ -196,7 +196,7 @@ importers: version: 26.0.24 '@types/react': specifier: ^18.0.21 - version: 18.3.26 + version: 18.3.27 '@types/react-native': specifier: ^0.70.6 version: 0.70.19 @@ -217,7 +217,7 @@ importers: version: 7.32.0 jest: specifier: ^26.6.3 - version: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + version: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) metro-react-native-babel-preset: specifier: 0.72.3 version: 0.72.3(@babel/core@7.28.5) @@ -238,35 +238,35 @@ importers: version: link:../../packages/proton-web-sdk '@tailwindcss/vite': specifier: ^4.1.8 - version: 4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + version: 4.1.18(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) tailwindcss: specifier: ^4.1.8 - version: 4.1.17 + version: 4.1.18 devDependencies: '@eslint/compat': specifier: ^1.2.5 - version: 1.4.1(eslint@9.39.1(jiti@2.6.1)) + version: 1.4.1(eslint@9.39.2(jiti@2.6.1)) '@eslint/js': specifier: ^9.18.0 - version: 9.39.1 + version: 9.39.2 '@sveltejs/adapter-auto': specifier: ^6.0.0 - version: 6.1.1(@sveltejs/kit@2.48.5(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))) + version: 6.1.1(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))) '@sveltejs/kit': specifier: ^2.16.0 - version: 2.48.5(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + version: 2.49.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.0 - version: 5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + version: 5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) eslint: specifier: ^9.18.0 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: ^10.0.1 - version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-svelte: specifier: ^3.0.0 - version: 3.13.0(eslint@9.39.1(jiti@2.6.1))(svelte@5.43.6)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3)) + version: 3.13.1(eslint@9.39.2(jiti@2.6.1))(svelte@5.46.1)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.8.3)) globals: specifier: ^16.0.0 version: 16.5.0 @@ -275,22 +275,22 @@ importers: version: 3.5.3 prettier-plugin-svelte: specifier: ^3.3.3 - version: 3.4.0(prettier@3.5.3)(svelte@5.43.6) + version: 3.4.1(prettier@3.5.3)(svelte@5.46.1) svelte: specifier: ^5.0.0 - version: 5.43.6 + version: 5.46.1 svelte-check: specifier: ^4.0.0 - version: 4.3.4(picomatch@4.0.3)(svelte@5.43.6)(typescript@5.8.3) + version: 4.3.5(picomatch@4.0.3)(svelte@5.46.1)(typescript@5.8.3) typescript: specifier: ^5.0.0 version: 5.8.3 typescript-eslint: specifier: ^8.20.0 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) vite: specifier: ^6.2.6 - version: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + version: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) examples/vue: dependencies: @@ -302,41 +302,41 @@ importers: version: link:../../packages/proton-web-sdk '@tailwindcss/vite': specifier: ^4.1.8 - version: 4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + version: 4.1.18(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) pinia: specifier: ^3.0.1 - version: 3.0.4(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3)) + version: 3.0.4(typescript@5.8.3)(vue@3.5.26(typescript@5.8.3)) tailwindcss: specifier: ^4.1.8 - version: 4.1.17 + version: 4.1.18 vue: specifier: ^3.5.13 - version: 3.5.24(typescript@5.8.3) + version: 3.5.26(typescript@5.8.3) devDependencies: '@tsconfig/node22': specifier: ^22.0.1 - version: 22.0.3 + version: 22.0.5 '@types/node': specifier: ^22.14.0 - version: 22.19.1 + version: 22.19.3 '@vitejs/plugin-vue': specifier: ^5.2.3 - version: 5.2.4(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.8.3)) + version: 5.2.4(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.8.3)) '@vue/eslint-config-prettier': specifier: ^10.2.0 - version: 10.2.0(@types/eslint@9.6.1)(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3) + version: 10.2.0(@types/eslint@9.6.1)(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) '@vue/eslint-config-typescript': specifier: ^14.5.0 - version: 14.6.0(eslint-plugin-vue@10.0.1(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) + version: 14.6.0(eslint-plugin-vue@10.0.1(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) '@vue/tsconfig': specifier: ^0.7.0 - version: 0.7.0(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3)) + version: 0.7.0(typescript@5.8.3)(vue@3.5.26(typescript@5.8.3)) eslint: specifier: ^9.22.0 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-plugin-vue: specifier: ~10.0.0 - version: 10.0.1(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))) + version: 10.0.1(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) jiti: specifier: ^2.4.2 version: 2.6.1 @@ -351,10 +351,10 @@ importers: version: 5.8.3 vite: specifier: ^6.2.4 - version: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + version: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) vite-plugin-vue-devtools: specifier: ^7.7.2 - version: 7.7.8(rollup@4.53.2)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.8.3)) + version: 7.7.9(rollup@4.54.0)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.8.3)) vue-tsc: specifier: ^2.2.8 version: 2.2.12(typescript@5.8.3) @@ -364,37 +364,37 @@ importers: '@proton/link': specifier: workspace:^ version: link:../proton-link + '@proton/web-renderer': + specifier: workspace:^ + version: link:../proton-web-renderer devDependencies: '@eslint/css': specifier: ^0.14.1 version: 0.14.1 '@eslint/js': specifier: ^9.39.1 - version: 9.39.1 + version: 9.39.2 '@eslint/json': specifier: ^0.14.0 version: 0.14.0 '@rollup/plugin-commonjs': specifier: ^28.0.3 - version: 28.0.9(rollup@4.53.2) + version: 28.0.9(rollup@4.54.0) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.53.2) + version: 6.1.0(rollup@4.54.0) '@rollup/plugin-node-resolve': specifier: ^16.0.1 - version: 16.0.3(rollup@4.53.2) + version: 16.0.3(rollup@4.54.0) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.3(rollup@4.53.2) + version: 6.0.3(rollup@4.54.0) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.53.2) + version: 0.4.4(rollup@4.54.0) '@rollup/plugin-typescript': specifier: ^12.1.2 - version: 12.3.0(rollup@4.53.2)(tslib@2.8.1)(typescript@5.4.5) - '@tsconfig/svelte': - specifier: ^5.0.4 - version: 5.0.6 + version: 12.3.0(rollup@4.54.0)(tslib@2.8.1)(typescript@5.4.5) '@types/node': specifier: ^16.4.0 version: 16.18.126 @@ -403,58 +403,31 @@ importers: version: 7.4.7 core-js: specifier: ^3.42.0 - version: 3.46.0 + version: 3.47.0 eslint: specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3) - eslint-plugin-svelte: - specifier: ^3.13.0 - version: 3.13.0(eslint@9.39.1(jiti@2.6.1))(svelte@5.43.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) globals: specifier: ^16.5.0 version: 16.5.0 jiti: specifier: ^2.6.1 version: 2.6.1 - postcss: - specifier: ^8.5.3 - version: 8.5.6 prettier: specifier: ^3.5.3 version: 3.5.3 - prettier-plugin-svelte: - specifier: ^3.4.0 - version: 3.4.0(prettier@3.5.3)(svelte@5.43.6) rollup: specifier: ^4.40.0 - version: 4.53.2 + version: 4.54.0 rollup-plugin-dts: specifier: ^6.2.1 - version: 6.2.3(rollup@4.53.2)(typescript@5.4.5) - rollup-plugin-svelte: - specifier: ^7.2.0 - version: 7.2.3(rollup@4.53.2)(svelte@5.43.6) - sass: - specifier: ^1.89.0 - version: 1.94.0 - svelte: - specifier: ^5.41.0 - version: 5.43.6 - svelte-check: - specifier: ^4.3.3 - version: 4.3.4(picomatch@4.0.3)(svelte@5.43.6)(typescript@5.4.5) - svelte-eslint-parser: - specifier: ^1.4.0 - version: 1.4.0(svelte@5.43.6) - svelte-preprocess: - specifier: ^6.0.3 - version: 6.0.3(@babel/core@7.28.5)(less@4.2.2)(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)))(postcss@8.5.6)(sass@1.94.0)(svelte@5.43.6)(typescript@5.4.5) + version: 6.3.0(rollup@4.54.0)(typescript@5.4.5) ts-node: specifier: ^10.0.0 version: 10.9.2(@types/node@16.18.126)(typescript@5.4.5) @@ -466,7 +439,7 @@ importers: version: 5.4.5 typescript-eslint: specifier: ^8.46.4 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) packages/proton-link: dependencies: @@ -482,6 +455,9 @@ importers: '@proton/signing-request': specifier: workspace:^ version: link:../proton-signing-request + '@proton/web-renderer': + specifier: workspace:^ + version: link:../proton-web-renderer bson: specifier: ^4.6.0 version: 4.7.2 @@ -503,25 +479,25 @@ importers: devDependencies: '@eslint/js': specifier: ^9.39.1 - version: 9.39.1 + version: 9.39.2 '@rollup/plugin-commonjs': specifier: ^28.0.3 - version: 28.0.9(rollup@4.53.2) + version: 28.0.9(rollup@4.54.0) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.53.2) + version: 6.1.0(rollup@4.54.0) '@rollup/plugin-node-resolve': specifier: ^16.0.1 - version: 16.0.3(rollup@4.53.2) + version: 16.0.3(rollup@4.54.0) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.3(rollup@4.53.2) + version: 6.0.3(rollup@4.54.0) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.53.2) + version: 0.4.4(rollup@4.54.0) '@rollup/plugin-typescript': specifier: ^12.1.2 - version: 12.3.0(rollup@4.53.2)(tslib@2.8.1)(typescript@5.4.5) + version: 12.3.0(rollup@4.54.0)(tslib@2.8.1)(typescript@5.4.5) '@types/bn.js': specifier: ^5.1.0 version: 5.2.0 @@ -542,16 +518,16 @@ importers: version: 7.4.7 core-js: specifier: ^3.42.0 - version: 3.46.0 + version: 3.47.0 eslint: specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) gh-pages: specifier: ^5.0.0 version: 5.0.0 @@ -572,10 +548,10 @@ importers: version: 3.5.3 rollup: specifier: ^4.40.0 - version: 4.53.2 + version: 4.54.0 rollup-plugin-dts: specifier: ^6.2.1 - version: 6.2.3(rollup@4.53.2)(typescript@5.4.5) + version: 6.3.0(rollup@4.54.0)(typescript@5.4.5) ts-node: specifier: ^10.0.0 version: 10.9.2(@types/node@16.18.126)(typescript@5.4.5) @@ -584,13 +560,13 @@ importers: version: 2.8.1 typedoc: specifier: ^0.28.14 - version: 0.28.14(typescript@5.4.5) + version: 0.28.15(typescript@5.4.5) typescript: specifier: ~5.4.0 version: 5.4.5 typescript-eslint: specifier: ^8.46.4 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) packages/proton-react-native-sdk: dependencies: @@ -624,25 +600,25 @@ importers: devDependencies: '@eslint/js': specifier: ^9.39.1 - version: 9.39.1 + version: 9.39.2 '@rollup/plugin-commonjs': specifier: ^28.0.3 - version: 28.0.9(rollup@4.53.2) + version: 28.0.9(rollup@4.54.0) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.53.2) + version: 6.1.0(rollup@4.54.0) '@rollup/plugin-node-resolve': specifier: ^16.0.1 - version: 16.0.3(rollup@4.53.2) + version: 16.0.3(rollup@4.54.0) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.3(rollup@4.53.2) + version: 6.0.3(rollup@4.54.0) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.53.2) + version: 0.4.4(rollup@4.54.0) '@rollup/plugin-typescript': specifier: ^12.1.2 - version: 12.3.0(rollup@4.53.2)(tslib@2.8.1)(typescript@5.4.5) + version: 12.3.0(rollup@4.54.0)(tslib@2.8.1)(typescript@5.4.5) '@types/node': specifier: ^16.4.0 version: 16.18.126 @@ -651,13 +627,13 @@ importers: version: 0.70.19 eslint: specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) globals: specifier: ^16.5.0 version: 16.5.0 @@ -669,10 +645,10 @@ importers: version: 3.5.3 rollup: specifier: ^4.40.0 - version: 4.53.2 + version: 4.54.0 rollup-plugin-dts: specifier: ^6.2.1 - version: 6.2.3(rollup@4.53.2)(typescript@5.4.5) + version: 6.3.0(rollup@4.54.0)(typescript@5.4.5) ts-node: specifier: ^10.0.0 version: 10.9.2(@types/node@16.18.126)(typescript@5.4.5) @@ -684,7 +660,7 @@ importers: version: 5.4.5 typescript-eslint: specifier: ^8.46.4 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) packages/proton-signing-request: dependencies: @@ -706,28 +682,28 @@ importers: version: 7.28.5(@babel/core@7.28.5) '@eslint/js': specifier: ^9.39.1 - version: 9.39.1 + version: 9.39.2 '@rollup/plugin-babel': specifier: ^6.1.0 - version: 6.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.53.2) + version: 6.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.54.0) '@rollup/plugin-commonjs': specifier: ^28.0.3 - version: 28.0.9(rollup@4.53.2) + version: 28.0.9(rollup@4.54.0) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.53.2) + version: 6.1.0(rollup@4.54.0) '@rollup/plugin-node-resolve': specifier: ^16.0.1 - version: 16.0.3(rollup@4.53.2) + version: 16.0.3(rollup@4.54.0) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.3(rollup@4.53.2) + version: 6.0.3(rollup@4.54.0) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.53.2) + version: 0.4.4(rollup@4.54.0) '@rollup/plugin-typescript': specifier: ^12.1.2 - version: 12.3.0(rollup@4.53.2)(tslib@2.8.1)(typescript@5.4.5) + version: 12.3.0(rollup@4.54.0)(tslib@2.8.1)(typescript@5.4.5) '@types/bn.js': specifier: ^5.1.0 version: 5.2.0 @@ -739,22 +715,22 @@ importers: version: 16.18.126 '@typescript-eslint/eslint-plugin': specifier: ^8.33.0 - version: 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + version: 8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^8.33.0 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) core-js: specifier: ^3.42.0 - version: 3.46.0 + version: 3.47.0 eslint: specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) globals: specifier: ^16.5.0 version: 16.5.0 @@ -775,13 +751,13 @@ importers: version: 3.5.3 rollup: specifier: ^4.40.0 - version: 4.53.2 + version: 4.54.0 rollup-plugin-dts: specifier: ^6.2.1 - version: 6.2.3(rollup@4.53.2)(typescript@5.4.5) + version: 6.3.0(rollup@4.54.0)(typescript@5.4.5) rollup-plugin-polyfill-node: specifier: ^0.13.0 - version: 0.13.0(rollup@4.53.2) + version: 0.13.0(rollup@4.54.0) ts-node: specifier: ^10.0.0 version: 10.9.2(@types/node@16.18.126)(typescript@5.4.5) @@ -793,71 +769,61 @@ importers: version: 5.4.5 typescript-eslint: specifier: ^8.46.4 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) - packages/proton-web-sdk: - dependencies: - '@greymass/eosio': - specifier: ^0.6.1 - version: 0.6.11 - '@proton/browser-transport': - specifier: workspace:^ - version: link:../proton-browser-transport - '@proton/js': - specifier: ^28.1.2 - version: 28.1.2(encoding@0.1.13) - '@proton/link': - specifier: workspace:^ - version: link:../proton-link + packages/proton-web-renderer: devDependencies: '@eslint/css': specifier: ^0.14.1 version: 0.14.1 '@eslint/js': specifier: ^9.39.1 - version: 9.39.1 + version: 9.39.2 '@eslint/json': specifier: ^0.14.0 version: 0.14.0 '@rollup/plugin-commonjs': specifier: ^28.0.3 - version: 28.0.9(rollup@4.53.2) + version: 28.0.9(rollup@4.54.0) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.53.2) + version: 6.1.0(rollup@4.54.0) '@rollup/plugin-node-resolve': specifier: ^16.0.1 - version: 16.0.3(rollup@4.53.2) + version: 16.0.3(rollup@4.54.0) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.3(rollup@4.53.2) + version: 6.0.3(rollup@4.54.0) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.53.2) + version: 0.4.4(rollup@4.54.0) '@rollup/plugin-typescript': specifier: ^12.1.2 - version: 12.3.0(rollup@4.53.2)(tslib@2.8.1)(typescript@5.4.5) + version: 12.3.0(rollup@4.54.0)(tslib@2.8.1)(typescript@5.4.5) '@tsconfig/svelte': specifier: ^5.0.4 version: 5.0.6 '@types/node': specifier: ^16.4.0 version: 16.18.126 + '@types/ws': + specifier: ^7.2.2 + version: 7.4.7 core-js: specifier: ^3.42.0 - version: 3.46.0 + version: 3.47.0 eslint: specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) eslint-plugin-svelte: specifier: ^3.13.0 - version: 3.13.0(eslint@9.39.1(jiti@2.6.1))(svelte@5.43.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)) + version: 3.13.1(eslint@9.39.2(jiti@2.6.1))(svelte@5.46.1)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)) globals: specifier: ^16.5.0 version: 16.5.0 @@ -872,31 +838,119 @@ importers: version: 3.5.3 prettier-plugin-svelte: specifier: ^3.4.0 - version: 3.4.0(prettier@3.5.3)(svelte@5.43.6) + version: 3.4.1(prettier@3.5.3)(svelte@5.46.1) rollup: specifier: ^4.40.0 - version: 4.53.2 + version: 4.54.0 rollup-plugin-dts: specifier: ^6.2.1 - version: 6.2.3(rollup@4.53.2)(typescript@5.4.5) + version: 6.3.0(rollup@4.54.0)(typescript@5.4.5) rollup-plugin-svelte: specifier: ^7.2.0 - version: 7.2.3(rollup@4.53.2)(svelte@5.43.6) + version: 7.2.3(rollup@4.54.0)(svelte@5.46.1) sass: specifier: ^1.89.0 - version: 1.94.0 + version: 1.97.1 svelte: specifier: ^5.41.0 - version: 5.43.6 + version: 5.46.1 svelte-check: specifier: ^4.3.3 - version: 4.3.4(picomatch@4.0.3)(svelte@5.43.6)(typescript@5.4.5) + version: 4.3.5(picomatch@4.0.3)(svelte@5.46.1)(typescript@5.4.5) svelte-eslint-parser: specifier: ^1.4.0 - version: 1.4.0(svelte@5.43.6) + version: 1.4.1(svelte@5.46.1) svelte-preprocess: specifier: ^6.0.3 - version: 6.0.3(@babel/core@7.28.5)(less@4.2.2)(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)))(postcss@8.5.6)(sass@1.94.0)(svelte@5.43.6)(typescript@5.4.5) + version: 6.0.3(@babel/core@7.28.5)(less@4.2.2)(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)))(postcss@8.5.6)(sass@1.97.1)(svelte@5.46.1)(typescript@5.4.5) + ts-node: + specifier: ^10.0.0 + version: 10.9.2(@types/node@16.18.126)(typescript@5.4.5) + tslib: + specifier: ^2.4.0 + version: 2.8.1 + typescript: + specifier: ~5.4.0 + version: 5.4.5 + typescript-eslint: + specifier: ^8.46.4 + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) + + packages/proton-web-sdk: + dependencies: + '@greymass/eosio': + specifier: ^0.6.1 + version: 0.6.11 + '@proton/browser-transport': + specifier: workspace:^ + version: link:../proton-browser-transport + '@proton/js': + specifier: ^28.1.2 + version: 28.1.2(encoding@0.1.13) + '@proton/link': + specifier: workspace:^ + version: link:../proton-link + '@proton/web-renderer': + specifier: workspace:^ + version: link:../proton-web-renderer + devDependencies: + '@eslint/css': + specifier: ^0.14.1 + version: 0.14.1 + '@eslint/js': + specifier: ^9.39.1 + version: 9.39.2 + '@eslint/json': + specifier: ^0.14.0 + version: 0.14.0 + '@rollup/plugin-commonjs': + specifier: ^28.0.3 + version: 28.0.9(rollup@4.54.0) + '@rollup/plugin-json': + specifier: ^6.1.0 + version: 6.1.0(rollup@4.54.0) + '@rollup/plugin-node-resolve': + specifier: ^16.0.1 + version: 16.0.3(rollup@4.54.0) + '@rollup/plugin-replace': + specifier: ^6.0.2 + version: 6.0.3(rollup@4.54.0) + '@rollup/plugin-terser': + specifier: ^0.4.4 + version: 0.4.4(rollup@4.54.0) + '@rollup/plugin-typescript': + specifier: ^12.1.2 + version: 12.3.0(rollup@4.54.0)(tslib@2.8.1)(typescript@5.4.5) + '@types/node': + specifier: ^16.4.0 + version: 16.18.126 + core-js: + specifier: ^3.42.0 + version: 3.47.0 + eslint: + specifier: ^9.39.1 + version: 9.39.2(jiti@2.6.1) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-prettier: + specifier: ^5.5.4 + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) + globals: + specifier: ^16.5.0 + version: 16.5.0 + jiti: + specifier: ^2.6.1 + version: 2.6.1 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + rollup: + specifier: ^4.40.0 + version: 4.54.0 + rollup-plugin-dts: + specifier: ^6.2.1 + version: 6.3.0(rollup@4.54.0)(typescript@5.4.5) ts-node: specifier: ^10.0.0 version: 10.9.2(@types/node@16.18.126)(typescript@5.4.5) @@ -908,7 +962,7 @@ importers: version: 5.4.5 typescript-eslint: specifier: ^8.46.4 - version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) packages: @@ -1029,68 +1083,68 @@ packages: engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular/common@19.2.15': - resolution: {integrity: sha512-aVa/ctBYH/4qgA7r4sS7TV+/DzRYmcS+3d6l89pNKUXkI8gpmsd+r3FjccaemX4Wqru1QOrMvC+i+e7IBIVv0g==} + '@angular/common@19.2.17': + resolution: {integrity: sha512-yFUXAdpvOFirGD/EGDwp1WHravHzI4sdyRE2iH7i8im9l8IE2VZ6D1KDJp8VVpMJt38LNlRAWYek3s+z6OcAkg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 19.2.15 + '@angular/core': 19.2.17 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@19.2.15': - resolution: {integrity: sha512-4r5tvGA2Ok3o8wROZBkF9qNKS7L0AEpdBIkAVJbLw2rBY2SlyycFIRYyV2+D1lJ1jq/f9U7uN6oon0MjTvNYkA==} + '@angular/compiler-cli@19.2.17': + resolution: {integrity: sha512-KG82fh2A0odttc6+FxlQmFfHY/Giq8rYeV1qtdafafJ8hdWIiMr4r37xwhZOl8uk2/XSLM66bxUMFHYm+zt87Q==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} hasBin: true peerDependencies: - '@angular/compiler': 19.2.15 + '@angular/compiler': 19.2.17 typescript: '>=5.5 <5.9' - '@angular/compiler@19.2.15': - resolution: {integrity: sha512-hMHZU6/03xG0tbPDIm1hbVSTFLnRkGYfh+xdBwUMnIFYYTS0QJ2hdPfEZKCJIXm+fz9IAI5MPdDTfeyp0sgaHQ==} + '@angular/compiler@19.2.17': + resolution: {integrity: sha512-qo8psYASAlDiQ8fAL8i/E2JfWH2nPTpZDKKZxSWvgBVA8o+zUEjYAJu6/k6btnu+4Qcb425T0rmM/zao6EU9Aw==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - '@angular/core@19.2.15': - resolution: {integrity: sha512-PxhzCwwm23N4Mq6oV7UPoYiJF4r6FzGhRSxOBBlEp322k7zEQbIxd/XO6F3eoG73qC1UsOXMYYv6GnQpx42y3A==} + '@angular/core@19.2.17': + resolution: {integrity: sha512-nVu0ryxfiXUZ9M+NV21TY+rJZkPXTYo9U0aJb19hvByPpG+EvuujXUOgpulz6vxIzGy7pz/znRa+K9kxuuC+yQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 - '@angular/forms@19.2.15': - resolution: {integrity: sha512-pZDElcYPmNzPxvWJpZQCIizsNApDIfk9xLJE4I8hzLISfWGbQvfjuuarDAuQZEXudeLXoDOstDXkDja40muLGg==} + '@angular/forms@19.2.17': + resolution: {integrity: sha512-INgGGmMbwXuT+niAjMiCsJrZVEGWKZOep1vCRHoKlVnGUQSRKc3UW8ztmKDKMua/io/Opi03pRMpwbYQcTBr5A==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 19.2.15 - '@angular/core': 19.2.15 - '@angular/platform-browser': 19.2.15 + '@angular/common': 19.2.17 + '@angular/core': 19.2.17 + '@angular/platform-browser': 19.2.17 rxjs: ^6.5.3 || ^7.4.0 - '@angular/platform-browser-dynamic@19.2.15': - resolution: {integrity: sha512-dKy0SS395FCh8cW9AQ8nf4Wn3XlONaH7z50T1bGxm3eOoRqjxJYyIeIlEbDdJakMz4QPR3dGr81HleZd8TJumQ==} + '@angular/platform-browser-dynamic@19.2.17': + resolution: {integrity: sha512-jrps9QKhuPrHBZwLv+43z+WldT4aVKZu8v7LPpRHb7/pVLvqccXtIxt3Ttm7sa4tc2SwlKazdE8/ezaNWIRnAg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 19.2.15 - '@angular/compiler': 19.2.15 - '@angular/core': 19.2.15 - '@angular/platform-browser': 19.2.15 + '@angular/common': 19.2.17 + '@angular/compiler': 19.2.17 + '@angular/core': 19.2.17 + '@angular/platform-browser': 19.2.17 - '@angular/platform-browser@19.2.15': - resolution: {integrity: sha512-OelQ6weCjon8kZD8kcqNzwugvZJurjS3uMJCwsA2vXmP/3zJ31SWtNqE2zLT1R2csVuwnp0h+nRMgq+pINU7Rg==} + '@angular/platform-browser@19.2.17': + resolution: {integrity: sha512-Rn23nIQwYMSeGXWFHI/X8bGHAkdahRxH9UIGUlJKxW61MSkK6AW4kCHG/Ev1TvDq9HjijsMjcqcsd6/Sb8aBXg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/animations': 19.2.15 - '@angular/common': 19.2.15 - '@angular/core': 19.2.15 + '@angular/animations': 19.2.17 + '@angular/common': 19.2.17 + '@angular/core': 19.2.17 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/router@19.2.15': - resolution: {integrity: sha512-0TM1D8S7RQ00drKy7hA/ZLBY14dUBqFBgm06djcNcOjNzVAtgkeV0i+0Smq9tCC7UsGKdpZu4RgfYjHATBNlTQ==} + '@angular/router@19.2.17': + resolution: {integrity: sha512-B3Vk+E8UHQwg06WEjGuvYaKNiIXxjHN9pN8S+hDE8xwRgIS5ojEwS94blEvsGQ4QsIja6WjZMOfDUBUPlgUSuA==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 19.2.15 - '@angular/core': 19.2.15 - '@angular/platform-browser': 19.2.15 + '@angular/common': 19.2.17 + '@angular/core': 19.2.17 + '@angular/platform-browser': 19.2.17 rxjs: ^6.5.3 || ^7.4.0 '@antfu/utils@0.7.10': @@ -1884,8 +1938,8 @@ packages: '@bloks/constants@28.11.0': resolution: {integrity: sha512-WMhvsIBane1y1RNvytG7ARKtQEdzAO7FZyR0l73KNczwKWt5G1WdhQyjEsNS0R+wbUt1yhqncYZocQKs5nyuaw==} - '@changesets/apply-release-plan@7.0.13': - resolution: {integrity: sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==} + '@changesets/apply-release-plan@7.0.14': + resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==} '@changesets/assemble-release-plan@6.0.9': resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} @@ -1893,12 +1947,12 @@ packages: '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/cli@2.29.7': - resolution: {integrity: sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==} + '@changesets/cli@2.29.8': + resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==} hasBin: true - '@changesets/config@3.1.1': - resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} + '@changesets/config@3.1.2': + resolution: {integrity: sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} @@ -1906,8 +1960,8 @@ packages: '@changesets/get-dependents-graph@2.1.3': resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - '@changesets/get-release-plan@4.0.13': - resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} + '@changesets/get-release-plan@4.0.14': + resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -1918,14 +1972,14 @@ packages: '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - '@changesets/parse@0.4.1': - resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} + '@changesets/parse@0.4.2': + resolution: {integrity: sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==} '@changesets/pre@2.0.2': resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - '@changesets/read@0.6.5': - resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==} + '@changesets/read@0.6.6': + resolution: {integrity: sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==} '@changesets/should-skip-package@0.1.2': resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} @@ -2293,8 +2347,8 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/css-tree@3.6.6': - resolution: {integrity: sha512-C3YiJMY9OZyZ/3vEMFWJIesdGaRY6DmIYvmtyxMT934CbrOKqRs+Iw7NWSRlJQEaK4dPYy2lZ2y1zkaj8z0p5A==} + '@eslint/css-tree@3.6.8': + resolution: {integrity: sha512-s0f40zY7dlMp8i0Jf0u6l/aSswS0WRAgkhgETgiCJRcxIWb4S/Sp9uScKHWbkM3BnoFLbJbmOYk5AZUDFVxaLA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} '@eslint/css@0.14.1': @@ -2305,12 +2359,12 @@ packages: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.1': - resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/json@0.14.0': @@ -2325,8 +2379,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@gerrit0/mini-shiki@3.15.0': - resolution: {integrity: sha512-L5IHdZIDa4bG4yJaOzfasOH/o22MCesY0mx+n6VATbaiCtMeR59pdRqYk4bEiQkIHfxsHPNgdi7VJlZb2FhdMQ==} + '@gerrit0/mini-shiki@3.20.0': + resolution: {integrity: sha512-Wa57i+bMpK6PGJZ1f2myxo3iO+K/kZikcyvH8NIqNNZhQUbDav7V9LQmWOXhf946mz5c1NZ19WMsGYiDKTryzQ==} '@greymass/eosio@0.6.11': resolution: {integrity: sha512-Ud6V7+vQJ+OLxqD7QcKTv/ik/Hd5uaRHyGY9Hzc+cJXezYU4sADX4TyQ8sn6XIr8ebVVNZFvWpc5JR0a9lBzKw==} @@ -2962,8 +3016,8 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@peculiar/asn1-schema@2.5.0': - resolution: {integrity: sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==} + '@peculiar/asn1-schema@2.6.0': + resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} '@peculiar/json-schema@1.1.12': resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} @@ -3055,8 +3109,8 @@ packages: '@react-native/polyfills@2.0.0': resolution: {integrity: sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==} - '@reduxjs/toolkit@2.10.1': - resolution: {integrity: sha512-/U17EXQ9Do9Yx4DlNGU6eVNfZvFJfYpUtRRdLf19PbPjdWBxNlxGZXywQZ1p1Nz8nMkWplTI7iD/23m07nolDA==} + '@reduxjs/toolkit@2.11.2': + resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 || ^19 react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 @@ -3167,8 +3221,8 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.53.2': - resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} + '@rollup/rollup-android-arm-eabi@4.54.0': + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} cpu: [arm] os: [android] @@ -3177,8 +3231,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.53.2': - resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} + '@rollup/rollup-android-arm64@4.54.0': + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] @@ -3187,8 +3241,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.53.2': - resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} + '@rollup/rollup-darwin-arm64@4.54.0': + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] @@ -3197,8 +3251,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.2': - resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} + '@rollup/rollup-darwin-x64@4.54.0': + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] @@ -3207,8 +3261,8 @@ packages: cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.53.2': - resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} + '@rollup/rollup-freebsd-arm64@4.54.0': + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] @@ -3217,8 +3271,8 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.2': - resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} + '@rollup/rollup-freebsd-x64@4.54.0': + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] @@ -3227,8 +3281,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': - resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] @@ -3237,8 +3291,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.2': - resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] @@ -3247,8 +3301,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.2': - resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} + '@rollup/rollup-linux-arm64-gnu@4.54.0': + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] @@ -3257,13 +3311,13 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.2': - resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} + '@rollup/rollup-linux-arm64-musl@4.54.0': + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.2': - resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} + '@rollup/rollup-linux-loong64-gnu@4.54.0': + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] @@ -3277,8 +3331,8 @@ packages: cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.2': - resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] @@ -3287,13 +3341,13 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.2': - resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.2': - resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} + '@rollup/rollup-linux-riscv64-musl@4.54.0': + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] @@ -3302,8 +3356,8 @@ packages: cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.2': - resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} + '@rollup/rollup-linux-s390x-gnu@4.54.0': + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] @@ -3312,8 +3366,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.2': - resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} + '@rollup/rollup-linux-x64-gnu@4.54.0': + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] @@ -3322,13 +3376,13 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.2': - resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} + '@rollup/rollup-linux-x64-musl@4.54.0': + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.2': - resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + '@rollup/rollup-openharmony-arm64@4.54.0': + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] @@ -3337,8 +3391,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.53.2': - resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} + '@rollup/rollup-win32-arm64-msvc@4.54.0': + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] @@ -3347,13 +3401,13 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.2': - resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} + '@rollup/rollup-win32-ia32-msvc@4.54.0': + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.2': - resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + '@rollup/rollup-win32-x64-gnu@4.54.0': + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} cpu: [x64] os: [win32] @@ -3362,8 +3416,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.2': - resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} + '@rollup/rollup-win32-x64-msvc@4.54.0': + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] @@ -3374,17 +3428,17 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/engine-oniguruma@3.15.0': - resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==} + '@shikijs/engine-oniguruma@3.20.0': + resolution: {integrity: sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==} - '@shikijs/langs@3.15.0': - resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==} + '@shikijs/langs@3.20.0': + resolution: {integrity: sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==} - '@shikijs/themes@3.15.0': - resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==} + '@shikijs/themes@3.20.0': + resolution: {integrity: sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==} - '@shikijs/types@3.15.0': - resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==} + '@shikijs/types@3.20.0': + resolution: {integrity: sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3439,14 +3493,14 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} - '@sveltejs/acorn-typescript@1.0.6': - resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} + '@sveltejs/acorn-typescript@1.0.8': + resolution: {integrity: sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==} peerDependencies: acorn: ^8.9.0 @@ -3455,8 +3509,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/kit@2.48.5': - resolution: {integrity: sha512-/rnwfSWS3qwUSzvHynUTORF9xSJi7PCR9yXkxUOnRrNqyKmCmh3FPHH+E9BbgqxXfTevGXBqgnlh9kMb+9T5XA==} + '@sveltejs/kit@2.49.2': + resolution: {integrity: sha512-Vp3zX/qlwerQmHMP6x0Ry1oY7eKKRcOWGc2P59srOp4zcqyn+etJyQpELgOi4+ZSUgteX8Y387NuwruLgGXLUQ==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -3483,65 +3537,65 @@ packages: svelte: ^5.0.0 vite: ^6.0.0 - '@tailwindcss/node@4.1.17': - resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==} + '@tailwindcss/node@4.1.18': + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} - '@tailwindcss/oxide-android-arm64@4.1.17': - resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==} + '@tailwindcss/oxide-android-arm64@4.1.18': + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.17': - resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==} + '@tailwindcss/oxide-darwin-arm64@4.1.18': + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.17': - resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==} + '@tailwindcss/oxide-darwin-x64@4.1.18': + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.17': - resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==} + '@tailwindcss/oxide-freebsd-x64@4.1.18': + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': - resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': - resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.17': - resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.17': - resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.17': - resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} + '@tailwindcss/oxide-linux-x64-musl@4.1.18': + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.17': - resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} + '@tailwindcss/oxide-wasm32-wasi@4.1.18': + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -3552,27 +3606,27 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': - resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.17': - resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.17': - resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==} + '@tailwindcss/oxide@4.1.18': + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.1.17': - resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==} + '@tailwindcss/postcss@4.1.18': + resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} - '@tailwindcss/vite@4.1.17': - resolution: {integrity: sha512-4+9w8ZHOiGnpcGI6z1TVVfWaX/koK7fKeSYF3qlYg2xpBtbteP2ddBxiarL+HVgfSJGeK5RIxRQmKm4rTJJAwA==} + '@tailwindcss/vite@4.1.18': + resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 @@ -3592,8 +3646,8 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tsconfig/node22@22.0.3': - resolution: {integrity: sha512-9UTUkYWI58+MiZhwcQWx2TNZbzkGRss9SCyjrSYeqkMIDYq8jv2FSRknrLOjsRmcYFUsYj79m/bgQYSD/yiRxw==} + '@tsconfig/node22@22.0.5': + resolution: {integrity: sha512-hLf2ld+sYN/BtOJjHUWOk568dvjFQkHnLNa6zce25GIH+vxKfvTgm3qpaH6ToF5tu/NN0IH66s+Bb5wElHrLcw==} '@tsconfig/react-native@2.0.3': resolution: {integrity: sha512-jE58snEKBd9DXfyR4+ssZmYJ/W2mOSnNrvljR0aLyQJL9JKX6vlWELHkRjb3HBbcM9Uy0hZGijXbqEAjOERW2A==} @@ -3689,8 +3743,8 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jasmine@5.1.12': - resolution: {integrity: sha512-1BzPxNsFDLDfj9InVR3IeY0ZVf4o9XV+4mDqoCfyPkbsA7dYyKAPAb2co6wLFlHcvxPlt1wShm7zQdV7uTfLGA==} + '@types/jasmine@5.1.13': + resolution: {integrity: sha512-MYCcDkruFc92LeYZux5BC0dmqo2jk+M5UIZ4/oFnAPCXN9mCcQhLyj7F3/Za7rocVyt5YRr1MmqJqFlvQ9LVcg==} '@types/jest@26.0.24': resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==} @@ -3713,8 +3767,8 @@ packages: '@types/node@16.18.126': resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==} - '@types/node@22.19.1': - resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + '@types/node@22.19.3': + resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3748,11 +3802,11 @@ packages: '@types/react-test-renderer@18.3.1': resolution: {integrity: sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==} - '@types/react@18.3.26': - resolution: {integrity: sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==} + '@types/react@18.3.27': + resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==} - '@types/react@19.2.4': - resolution: {integrity: sha512-tBFxBp9Nfyy5rsmefN+WXc1JeW/j2BpBHFdLZbEVfs9wn3E3NRFxwV0pJg8M1qQAexFpvz73hJXFofV0ZAu92A==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -3799,11 +3853,11 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@15.0.19': - resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} + '@types/yargs@15.0.20': + resolution: {integrity: sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==} - '@types/yargs@16.0.10': - resolution: {integrity: sha512-0xbOE6Ht/oj0MTVVXCCdEZzUk7adwW3YB1Tg1ZBm95jrkrUMI0VA4sf3SgxC1TG8p5aKkn3jxT9A2BDw1mM/TQ==} + '@types/yargs@16.0.11': + resolution: {integrity: sha512-sbtvk8wDN+JvEdabmZExoW/HNr1cB7D/j4LT08rMiuikfA7m/JNJg7ATQcgzs34zHnoScDkY0ZRSl29Fkmk36g==} '@typescript-eslint/eslint-plugin@3.10.1': resolution: {integrity: sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==} @@ -3827,11 +3881,11 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.46.4': - resolution: {integrity: sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==} + '@typescript-eslint/eslint-plugin@8.50.1': + resolution: {integrity: sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.4 + '@typescript-eslint/parser': ^8.50.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -3861,15 +3915,15 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.46.4': - resolution: {integrity: sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==} + '@typescript-eslint/parser@8.50.1': + resolution: {integrity: sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.4': - resolution: {integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==} + '@typescript-eslint/project-service@8.50.1': + resolution: {integrity: sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3878,12 +3932,12 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@8.46.4': - resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==} + '@typescript-eslint/scope-manager@8.50.1': + resolution: {integrity: sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.46.4': - resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==} + '@typescript-eslint/tsconfig-utils@8.50.1': + resolution: {integrity: sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3898,8 +3952,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.46.4': - resolution: {integrity: sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==} + '@typescript-eslint/type-utils@8.50.1': + resolution: {integrity: sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3913,8 +3967,8 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@8.46.4': - resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} + '@typescript-eslint/types@8.50.1': + resolution: {integrity: sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@3.10.1': @@ -3935,8 +3989,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.46.4': - resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==} + '@typescript-eslint/typescript-estree@8.50.1': + resolution: {integrity: sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3947,8 +4001,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@8.46.4': - resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==} + '@typescript-eslint/utils@8.50.1': + resolution: {integrity: sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3962,8 +4016,8 @@ packages: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@8.46.4': - resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} + '@typescript-eslint/visitor-keys@8.50.1': + resolution: {integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/promise-all-settled@1.1.2': @@ -4013,34 +4067,34 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.24': - resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==} + '@vue/compiler-core@3.5.26': + resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==} - '@vue/compiler-dom@3.5.24': - resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==} + '@vue/compiler-dom@3.5.26': + resolution: {integrity: sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==} - '@vue/compiler-sfc@3.5.24': - resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==} + '@vue/compiler-sfc@3.5.26': + resolution: {integrity: sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==} - '@vue/compiler-ssr@3.5.24': - resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==} + '@vue/compiler-ssr@3.5.26': + resolution: {integrity: sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==} '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/devtools-api@7.7.8': - resolution: {integrity: sha512-BtFcAmDbtXGwurWUFf8ogIbgZyR+rcVES1TSNEI8Em80fD8Anu+qTRN1Fc3J6vdRHlVM3fzPV1qIo+B4AiqGzw==} + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} - '@vue/devtools-core@7.7.8': - resolution: {integrity: sha512-EVLQTYML/v77JFA3Q8zvVANCvEv1WtG0TMo+HQR5eZ7PpEzSmVbEcBp2C1/OXyn8EJO4mHEeParMLpp43prUOw==} + '@vue/devtools-core@7.7.9': + resolution: {integrity: sha512-48jrBSwG4GVQRvVeeXn9p9+dlx+ISgasM7SxZZKczseohB0cBz+ITKr4YbLWjmJdy45UHL7UMPlR4Y0CWTRcSQ==} peerDependencies: vue: ^3.0.0 - '@vue/devtools-kit@7.7.8': - resolution: {integrity: sha512-4Y8op+AoxOJhB9fpcEF6d5vcJXWKgHxC3B0ytUB8zz15KbP9g9WgVzral05xluxi2fOeAy6t140rdQ943GcLRQ==} + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} - '@vue/devtools-shared@7.7.8': - resolution: {integrity: sha512-XHpO3jC5nOgYr40M9p8Z4mmKfTvUxKyRcUnpBAYg11pE78eaRFBKb0kG5yKLroMuJeeNH9LWmKp2zMU5LUc7CA==} + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} '@vue/eslint-config-prettier@10.2.0': resolution: {integrity: sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==} @@ -4067,22 +4121,22 @@ packages: typescript: optional: true - '@vue/reactivity@3.5.24': - resolution: {integrity: sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==} + '@vue/reactivity@3.5.26': + resolution: {integrity: sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==} - '@vue/runtime-core@3.5.24': - resolution: {integrity: sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==} + '@vue/runtime-core@3.5.26': + resolution: {integrity: sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==} - '@vue/runtime-dom@3.5.24': - resolution: {integrity: sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==} + '@vue/runtime-dom@3.5.26': + resolution: {integrity: sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==} - '@vue/server-renderer@3.5.24': - resolution: {integrity: sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==} + '@vue/server-renderer@3.5.26': + resolution: {integrity: sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==} peerDependencies: - vue: 3.5.24 + vue: 3.5.26 - '@vue/shared@3.5.24': - resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==} + '@vue/shared@3.5.26': + resolution: {integrity: sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==} '@vue/tsconfig@0.7.0': resolution: {integrity: sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==} @@ -4386,8 +4440,8 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1js@3.0.6: - resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==} + asn1js@3.0.7: + resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} engines: {node: '>=12.0.0'} assign-symbols@1.0.0: @@ -4529,8 +4583,8 @@ packages: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} - baseline-browser-mapping@2.8.28: - resolution: {integrity: sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==} + baseline-browser-mapping@2.9.11: + resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true batch@0.6.1: @@ -4551,8 +4605,8 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - birpc@2.8.0: - resolution: {integrity: sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==} + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4563,8 +4617,8 @@ packages: bn.js@5.2.2: resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + body-parser@1.20.4: + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} bonjour-service@1.3.0: @@ -4596,8 +4650,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.28.0: - resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4673,8 +4727,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001754: - resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} + caniuse-lite@1.0.30001761: + resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -4868,17 +4922,13 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.0.7: + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -4900,11 +4950,11 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.46.0: - resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} + core-js-compat@3.47.0: + resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==} - core-js@3.46.0: - resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==} + core-js@3.47.0: + resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -4974,8 +5024,8 @@ packages: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} - csstype@3.2.0: - resolution: {integrity: sha512-si++xzRAY9iPp60roQiFta7OFbhrgvcthrhlNAGeQptSY25uJjkfUV8OArC3KLocB8JT8ohz+qgxWCmz8RhjIg==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} custom-event@1.0.1: resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} @@ -5023,15 +5073,6 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -5071,8 +5112,8 @@ packages: resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} - default-browser@5.3.0: - resolution: {integrity: sha512-Qq68+VkJlc8tjnPV1i7HtbIn7ohmjZa88qUvHMIK0ZKUXMCuV45cT7cEXALPUmeXCe0q1DWQkQTemHVaLIFSrg==} + default-browser@5.4.0: + resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==} engines: {node: '>=18'} default-require-extensions@3.0.1: @@ -5145,8 +5186,8 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devalue@5.5.0: - resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==} + devalue@5.6.1: + resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==} di@0.0.1: resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} @@ -5210,8 +5251,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.252: - resolution: {integrity: sha512-53uTpjtRgS7gjIxZ4qCgFdNO2q+wJt/Z8+xAvxbCqXPJrY6h7ighUkadQmNMXH96crtpa6gPFNP7BF4UBGDuaA==} + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -5254,12 +5295,12 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - engine.io@6.6.4: - resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} + engine.io@6.6.5: + resolution: {integrity: sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + enhanced-resolve@5.18.4: + resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -5278,12 +5319,16 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.0: + resolution: {integrity: sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - envinfo@7.20.0: - resolution: {integrity: sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg==} + envinfo@7.21.0: + resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==} engines: {node: '>=4'} hasBin: true @@ -5307,12 +5352,12 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - errorhandler@1.5.1: - resolution: {integrity: sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==} + errorhandler@1.5.2: + resolution: {integrity: sha512-kNAL7hESndBCrWwS72QyV3IVOTrVmj9D062FV5BQswNL5zEdeRmz/WJFyh6Aj/plvvSOrzddkxW57HgkZcR9Fw==} engines: {node: '>= 0.8'} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -5323,8 +5368,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + es-iterator-helpers@1.2.2: + resolution: {integrity: sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==} engines: {node: '>= 0.4'} es-module-lexer@1.7.0: @@ -5459,8 +5504,8 @@ packages: peerDependencies: eslint: ^3.17.0 || ^4 || ^5 || ^6 || ^7 - eslint-plugin-react-refresh@0.4.24: - resolution: {integrity: sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==} + eslint-plugin-react-refresh@0.4.26: + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} peerDependencies: eslint: '>=8.40' @@ -5470,8 +5515,8 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-svelte@3.13.0: - resolution: {integrity: sha512-2ohCCQJJTNbIpQCSDSTWj+FN0OVfPmSO03lmSNT7ytqMaWF6kpT86LdzDqtm4sh7TVPl/OEWJ/d7R87bXP2Vjg==} + eslint-plugin-svelte@3.13.1: + resolution: {integrity: sha512-Ng+kV/qGS8P/isbNYVE3sJORtubB+yLEcYICMkUWNaDTb0SwZni/JhAYXh/Dz/q2eThUwWY0VMPZ//KYD1n3eQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 @@ -5521,8 +5566,8 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.39.1: - resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -5551,8 +5596,8 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} - esrap@2.1.2: - resolution: {integrity: sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==} + esrap@2.2.1: + resolution: {integrity: sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==} esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -5606,8 +5651,8 @@ packages: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} - execa@9.6.0: - resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} engines: {node: ^18.19.0 || >=20.5.0} exit@0.1.2: @@ -5625,8 +5670,8 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + express@4.22.1: + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} extend-shallow@2.0.1: @@ -5672,8 +5717,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} @@ -5726,8 +5771,8 @@ packages: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + finalhandler@1.3.2: + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} find-cache-dir@2.1.0: @@ -5827,8 +5872,8 @@ packages: fs-extra@1.0.0: resolution: {integrity: sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==} - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + fs-extra@11.3.3: + resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -5942,8 +5987,8 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true glob@7.2.0: @@ -6109,8 +6154,8 @@ packages: resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} engines: {node: '>= 0.6'} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} http-parser-js@0.5.10: @@ -6149,8 +6194,8 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-id@4.1.2: - resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==} + human-id@4.1.3: + resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} hasBin: true human-signals@1.1.1: @@ -6173,8 +6218,8 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + iconv-lite@0.7.1: + resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==} engines: {node: '>=0.10.0'} icss-utils@5.1.0: @@ -6212,8 +6257,8 @@ packages: engines: {node: '>=4.0'} hasBin: true - immer@10.2.0: - resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} + immer@11.1.0: + resolution: {integrity: sha512-dlzb07f5LDY+tzs+iLCSXV2yuhaYfezqyZQc+n6baLECWkOMEWxkECAOnXL0ba7lsA25fM9b2jtzpu/uxo1a7g==} immutable@5.1.4: resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} @@ -6271,8 +6316,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + ipaddr.js@2.3.0: + resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} engines: {node: '>= 10'} is-accessor-descriptor@1.0.1: @@ -6780,8 +6825,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true js-yaml@4.1.0: @@ -7185,8 +7230,8 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - memfs@4.51.0: - resolution: {integrity: sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==} + memfs@4.51.1: + resolution: {integrity: sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==} memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -7447,8 +7492,8 @@ packages: resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} hasBin: true - msgpackr@1.11.5: - resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==} + msgpackr@1.11.8: + resolution: {integrity: sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==} muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} @@ -7545,8 +7590,8 @@ packages: encoding: optional: true - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + node-forge@1.3.3: + resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} engines: {node: '>= 6.13.0'} node-gyp-build-optional-packages@5.2.2: @@ -7646,8 +7691,8 @@ packages: nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - nwsapi@2.2.22: - resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} + nwsapi@2.2.23: + resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} @@ -8076,8 +8121,8 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -8099,8 +8144,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier-plugin-svelte@3.4.0: - resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==} + prettier-plugin-svelte@3.4.1: + resolution: {integrity: sha512-xL49LCloMoZRvSwa6IEdN2GV6cq2IqpYGstYtMT+5wmml1/dClEoI0MZR78MiVPpu6BdQFfN0/y73yO6+br5Pg==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 @@ -8187,8 +8232,8 @@ packages: resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} engines: {node: '>=0.9'} - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} quansync@0.2.11: @@ -8207,17 +8252,17 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} react-devtools-core@4.24.0: resolution: {integrity: sha512-Rw7FzYOOzcfyUPaAm9P3g0tFdGqGq2LLiAI+wjYcp6CsF3DeeMrRS3HZAho4s273C29G/DJhx0e8BpRE/QZNGg==} - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} peerDependencies: - react: ^19.2.0 + react: ^19.2.3 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -8280,8 +8325,8 @@ packages: resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==} engines: {node: '>=0.10.0'} - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} read-package-json-fast@4.0.0: @@ -8504,8 +8549,8 @@ packages: resolution: {integrity: sha512-2XZ9cVFtjpQ3z6LmN+Kylz518XcPKmKHzxEXUEPJfqi8vZs+0reY65YU9wzhzrPGtqHzH3ARGZNnGNASlPaWfw==} engines: {node: '>=6.0.0'} - rollup-plugin-dts@6.2.3: - resolution: {integrity: sha512-UgnEsfciXSPpASuOelix7m4DrmyQgiaWBnvI0TM4GxuDh5FkqW8E5hu57bCxXB90VvR1WNfLV80yEDN18UogSA==} + rollup-plugin-dts@6.3.0: + resolution: {integrity: sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==} engines: {node: '>=16'} peerDependencies: rollup: ^3.29.4 || ^4 @@ -8528,8 +8573,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.53.2: - resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} + rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -8610,8 +8655,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - sass@1.94.0: - resolution: {integrity: sha512-Dqh7SiYcaFtdv5Wvku6QgS5IGPm281L+ZtVD1U2FJa7Q0EFRlq8Z3sjYtz6gYObsYThUOz9ArwFqPZx+1azILQ==} + sass@1.97.1: + resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==} engines: {node: '>=14.0.0'} hasBin: true @@ -8657,8 +8702,8 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + send@0.19.2: + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} serialize-error@2.1.0: @@ -8675,8 +8720,8 @@ packages: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + serve-static@1.16.3: + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} set-blocking@2.0.0: @@ -8811,15 +8856,15 @@ packages: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} - socket.io-adapter@2.5.5: - resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + socket.io-adapter@2.5.6: + resolution: {integrity: sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==} - socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + socket.io-parser@4.2.5: + resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==} engines: {node: '>=10.0.0'} - socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} + socket.io@4.8.3: + resolution: {integrity: sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==} engines: {node: '>=10.2.0'} sockjs@0.3.24: @@ -8930,8 +8975,8 @@ packages: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} stop-iteration-iterator@1.1.0: @@ -9027,8 +9072,8 @@ packages: resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - superjson@2.2.5: - resolution: {integrity: sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==} + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} engines: {node: '>=16'} supports-color@5.5.0: @@ -9051,17 +9096,17 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte-check@4.3.4: - resolution: {integrity: sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw==} + svelte-check@4.3.5: + resolution: {integrity: sha512-e4VWZETyXaKGhpkxOXP+B/d0Fp/zKViZoJmneZWe/05Y2aqSKj3YN2nLfYPJBQ87WEiY4BQCQ9hWGu9mPT1a1Q==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 typescript: '>=5.0.0' - svelte-eslint-parser@1.4.0: - resolution: {integrity: sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.18.3} + svelte-eslint-parser@1.4.1: + resolution: {integrity: sha512-1eqkfQ93goAhjAXxZiu1SaKI9+0/sxp4JIWQwUpsz7ybehRE5L8dNuz7Iry7K22R47p5/+s9EM+38nHV2OlgXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.24.0} peerDependencies: svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: @@ -9105,8 +9150,8 @@ packages: typescript: optional: true - svelte@5.43.6: - resolution: {integrity: sha512-RnyO9VXI85Bmsf4b8AuQFBKFYL3LKUl+ZrifOjvlrQoboAROj5IITVLK1yOXBjwUWUn2BI5cfmurktgCzuZ5QA==} + svelte@5.46.1: + resolution: {integrity: sha512-ynjfCHD3nP2el70kN5Pmg37sSi0EjOm9FgHYQdC4giWG/hzO3AatzXXJJgP305uIhGQxSufJLuYWtkY8uK/8RA==} engines: {node: '>=18'} symbol-observable@4.0.0: @@ -9124,8 +9169,8 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - tailwindcss@4.1.17: - resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==} + tailwindcss@4.1.18: + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} @@ -9155,8 +9200,8 @@ packages: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} - terser-webpack-plugin@5.3.14: - resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + terser-webpack-plugin@5.3.16: + resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -9302,38 +9347,38 @@ packages: resolution: {integrity: sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==} engines: {node: ^18.17.0 || >=20.5.0} - turbo-darwin-64@2.6.1: - resolution: {integrity: sha512-Dm0HwhyZF4J0uLqkhUyCVJvKM9Rw7M03v3J9A7drHDQW0qAbIGBrUijQ8g4Q9Cciw/BXRRd8Uzkc3oue+qn+ZQ==} + turbo-darwin-64@2.7.2: + resolution: {integrity: sha512-dxY3X6ezcT5vm3coK6VGixbrhplbQMwgNsCsvZamS/+/6JiebqW9DKt4NwpgYXhDY2HdH00I7FWs3wkVuan4rA==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.6.1: - resolution: {integrity: sha512-U0PIPTPyxdLsrC3jN7jaJUwgzX5sVUBsKLO7+6AL+OASaa1NbT1pPdiZoTkblBAALLP76FM0LlnsVQOnmjYhyw==} + turbo-darwin-arm64@2.7.2: + resolution: {integrity: sha512-1bXmuwPLqNFt3mzrtYcVx1sdJ8UYb124Bf48nIgcpMCGZy3kDhgxNv1503kmuK/37OGOZbsWSQFU4I08feIuSg==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.6.1: - resolution: {integrity: sha512-eM1uLWgzv89bxlK29qwQEr9xYWBhmO/EGiH22UGfq+uXr+QW1OvNKKMogSN65Ry8lElMH4LZh0aX2DEc7eC0Mw==} + turbo-linux-64@2.7.2: + resolution: {integrity: sha512-kP+TiiMaiPugbRlv57VGLfcjFNsFbo8H64wMBCPV2270Or2TpDCBULMzZrvEsvWFjT3pBFvToYbdp8/Kw0jAQg==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.6.1: - resolution: {integrity: sha512-MFFh7AxAQAycXKuZDrbeutfWM5Ep0CEZ9u7zs4Hn2FvOViTCzIfEhmuJou3/a5+q5VX1zTxQrKGy+4Lf5cdpsA==} + turbo-linux-arm64@2.7.2: + resolution: {integrity: sha512-VDJwQ0+8zjAfbyY6boNaWfP6RIez4ypKHxwkuB6SrWbOSk+vxTyW5/hEjytTwK8w/TsbKVcMDyvpora8tEsRFw==} cpu: [arm64] os: [linux] - turbo-windows-64@2.6.1: - resolution: {integrity: sha512-buq7/VAN7KOjMYi4tSZT5m+jpqyhbRU2EUTTvp6V0Ii8dAkY2tAAjQN1q5q2ByflYWKecbQNTqxmVploE0LVwQ==} + turbo-windows-64@2.7.2: + resolution: {integrity: sha512-rPjqQXVnI6A6oxgzNEE8DNb6Vdj2Wwyhfv3oDc+YM3U9P7CAcBIlKv/868mKl4vsBtz4ouWpTQNXG8vljgJO+w==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.6.1: - resolution: {integrity: sha512-7w+AD5vJp3R+FB0YOj1YJcNcOOvBior7bcHTodqp90S3x3bLgpr7tE6xOea1e8JkP7GK6ciKVUpQvV7psiwU5Q==} + turbo-windows-arm64@2.7.2: + resolution: {integrity: sha512-tcnHvBhO515OheIFWdxA+qUvZzNqqcHbLVFc1+n+TJ1rrp8prYicQtbtmsiKgMvr/54jb9jOabU62URAobnB7g==} cpu: [arm64] os: [win32] - turbo@2.6.1: - resolution: {integrity: sha512-qBwXXuDT3rA53kbNafGbT5r++BrhRgx3sAo0cHoDAeG9g1ItTmUMgltz3Hy7Hazy1ODqNpR+C7QwqL6DYB52yA==} + turbo@2.7.2: + resolution: {integrity: sha512-5JIA5aYBAJSAhrhbyag1ZuMSgUZnHtI+Sq3H8D3an4fL8PeF+L1yYvbEJg47akP1PFfATMf5ehkqFnxfkmuwZQ==} hasBin: true type-check@0.4.0: @@ -9390,15 +9435,15 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typedoc@0.28.14: - resolution: {integrity: sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==} + typedoc@0.28.15: + resolution: {integrity: sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x - typescript-eslint@8.46.4: - resolution: {integrity: sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==} + typescript-eslint@8.50.1: + resolution: {integrity: sha512-ytTHO+SoYSbhAH9CrYnMhiLx8To6PSSvqnvXyPUgPETCvB6eBKmTI9w6XMPS3HsBRGkwTVBX+urA8dYQx6bHfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -9496,8 +9541,8 @@ packages: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} - update-browserslist-db@1.1.4: - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -9568,8 +9613,8 @@ packages: '@nuxt/kit': optional: true - vite-plugin-vue-devtools@7.7.8: - resolution: {integrity: sha512-04jowFsal5f9Gbso0X5Ff/mtvik7VP/PBYcKDCQHnTLH0x+juWSj7v1QJfDtXnWrrxU7/yrljEP8KZTm4skvkg==} + vite-plugin-vue-devtools@7.7.9: + resolution: {integrity: sha512-08DvePf663SxqLFJeMVNW537zzVyakp9KIrI2K7lwgaTqA5R/ydN/N2K8dgZO34tg/Qmw0ch84fOKoBtCEdcGg==} engines: {node: '>=v14.21.3'} peerDependencies: vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 @@ -9649,8 +9694,8 @@ packages: peerDependencies: typescript: '>=5.0.0' - vue@3.5.24: - resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==} + vue@3.5.26: + resolution: {integrity: sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -9672,8 +9717,8 @@ packages: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} - watchpack@2.4.4: - resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} + watchpack@2.5.0: + resolution: {integrity: sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==} engines: {node: '>=10.13.0'} wbuf@1.7.3: @@ -9864,18 +9909,6 @@ packages: utf-8-validate: optional: true - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -9927,8 +9960,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -10006,14 +10039,14 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3))(@angular/compiler@19.2.15)(@types/node@22.19.1)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(lightningcss@1.30.2)(tailwindcss@4.1.17)(typescript@5.7.3)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1))(yaml@2.8.1)': + '@angular-devkit/build-angular@19.2.19(@angular/compiler-cli@19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3))(@angular/compiler@19.2.17)(@types/node@22.19.3)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(lightningcss@1.30.2)(tailwindcss@4.1.18)(typescript@5.7.3)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))(yaml@2.8.2)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3) '@angular-devkit/build-webpack': 0.1902.19(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.98.0))(webpack@5.98.0(esbuild@0.25.4)) '@angular-devkit/core': 19.2.19(chokidar@4.0.3) - '@angular/build': 19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3))(@angular/compiler@19.2.15)(@types/node@22.19.1)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(lightningcss@1.30.2)(postcss@8.5.2)(tailwindcss@4.1.17)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.1) - '@angular/compiler-cli': 19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3) + '@angular/build': 19.2.19(@angular/compiler-cli@19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3))(@angular/compiler@19.2.17)(@types/node@22.19.3)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(lightningcss@1.30.2)(postcss@8.5.2)(tailwindcss@4.1.18)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.2) + '@angular/compiler-cli': 19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3) '@babel/core': 7.26.10 '@babel/generator': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 @@ -10024,12 +10057,12 @@ snapshots: '@babel/preset-env': 7.26.9(@babel/core@7.26.10) '@babel/runtime': 7.26.10 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.98.0(esbuild@0.25.4)) - '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1)) + '@ngtools/webpack': 19.2.19(@angular/compiler-cli@19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.98.0(esbuild@0.25.4)) + '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)) ansi-colors: 4.1.3 autoprefixer: 10.4.20(postcss@8.5.2) babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.4)) - browserslist: 4.28.0 + browserslist: 4.28.1 copy-webpack-plugin: 12.0.2(webpack@5.98.0(esbuild@0.25.4)) css-loader: 7.1.2(webpack@5.98.0(esbuild@0.25.4)) esbuild-wasm: 0.25.4 @@ -10068,7 +10101,7 @@ snapshots: optionalDependencies: esbuild: 0.25.4 karma: 6.4.4 - tailwindcss: 4.1.17 + tailwindcss: 4.1.18 transitivePeerDependencies: - '@angular/compiler' - '@rspack/core' @@ -10122,20 +10155,20 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/build@19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3))(@angular/compiler@19.2.15)(@types/node@22.19.1)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(lightningcss@1.30.2)(postcss@8.5.2)(tailwindcss@4.1.17)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.1)': + '@angular/build@19.2.19(@angular/compiler-cli@19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3))(@angular/compiler@19.2.17)(@types/node@22.19.3)(chokidar@4.0.3)(jiti@2.6.1)(karma@6.4.4)(less@4.2.2)(lightningcss@1.30.2)(postcss@8.5.2)(tailwindcss@4.1.18)(terser@5.39.0)(typescript@5.7.3)(yaml@2.8.2)': dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3) - '@angular/compiler': 19.2.15 - '@angular/compiler-cli': 19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3) + '@angular/compiler': 19.2.17 + '@angular/compiler-cli': 19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3) '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-split-export-declaration': 7.24.7 '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) - '@inquirer/confirm': 5.1.6(@types/node@22.19.1) - '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1)) + '@inquirer/confirm': 5.1.6(@types/node@22.19.3) + '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2)) beasties: 0.3.2 - browserslist: 4.28.0 + browserslist: 4.28.1 esbuild: 0.25.4 fast-glob: 3.3.3 https-proxy-agent: 7.0.6 @@ -10151,14 +10184,14 @@ snapshots: semver: 7.7.1 source-map-support: 0.5.21 typescript: 5.7.3 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2) watchpack: 2.4.2 optionalDependencies: karma: 6.4.4 less: 4.2.2 lmdb: 3.2.6 postcss: 8.5.2 - tailwindcss: 4.1.17 + tailwindcss: 4.1.18 transitivePeerDependencies: - '@types/node' - chokidar @@ -10172,13 +10205,13 @@ snapshots: - tsx - yaml - '@angular/cli@19.2.19(@types/node@22.19.1)(chokidar@4.0.3)': + '@angular/cli@19.2.19(@types/node@22.19.3)(chokidar@4.0.3)': dependencies: '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3) '@angular-devkit/core': 19.2.19(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3) - '@inquirer/prompts': 7.3.2(@types/node@22.19.1) - '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@22.19.1)) + '@inquirer/prompts': 7.3.2(@types/node@22.19.3) + '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@22.19.3)) '@schematics/angular': 19.2.19(chokidar@4.0.3) '@yarnpkg/lockfile': 1.1.0 ini: 5.0.0 @@ -10196,15 +10229,15 @@ snapshots: - chokidar - supports-color - '@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)': + '@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 19.2.15(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/core': 19.2.17(rxjs@7.8.2)(zone.js@0.15.1) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3)': + '@angular/compiler-cli@19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3)': dependencies: - '@angular/compiler': 19.2.15 + '@angular/compiler': 19.2.17 '@babel/core': 7.26.9 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 4.0.3 @@ -10217,43 +10250,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@19.2.15': + '@angular/compiler@19.2.17': dependencies: tslib: 2.8.1 - '@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)': + '@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 zone.js: 0.15.1 - '@angular/forms@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)': + '@angular/forms@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 19.2.15(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser': 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/common': 19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + '@angular/core': 19.2.17(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/platform-browser': 19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/platform-browser-dynamic@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.15)(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))': + '@angular/platform-browser-dynamic@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.17)(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)))': dependencies: - '@angular/common': 19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/compiler': 19.2.15 - '@angular/core': 19.2.15(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser': 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/common': 19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + '@angular/compiler': 19.2.17 + '@angular/core': 19.2.17(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/platform-browser': 19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)) tslib: 2.8.1 - '@angular/platform-browser@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))': + '@angular/platform-browser@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))': dependencies: - '@angular/common': 19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 19.2.15(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/common': 19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + '@angular/core': 19.2.17(rxjs@7.8.2)(zone.js@0.15.1) tslib: 2.8.1 - '@angular/router@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)': + '@angular/router@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) - '@angular/core': 19.2.15(rxjs@7.8.2)(zone.js@0.15.1) - '@angular/platform-browser': 19.2.15(@angular/common@19.2.15(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.15(rxjs@7.8.2)(zone.js@0.15.1)) + '@angular/common': 19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2) + '@angular/core': 19.2.17(rxjs@7.8.2)(zone.js@0.15.1) + '@angular/platform-browser': 19.2.17(@angular/common@19.2.17(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.17(rxjs@7.8.2)(zone.js@0.15.1)) rxjs: 7.8.2 tslib: 2.8.1 @@ -10359,7 +10392,7 @@ snapshots: dependencies: '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.0 + browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 @@ -11627,7 +11660,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.26.10) babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.26.10) - core-js-compat: 3.46.0 + core-js-compat: 3.47.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -11703,7 +11736,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.46.0 + core-js-compat: 3.47.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -11782,9 +11815,9 @@ snapshots: '@bloks/constants@28.11.0': {} - '@changesets/apply-release-plan@7.0.13': + '@changesets/apply-release-plan@7.0.14': dependencies: - '@changesets/config': 3.1.1 + '@changesets/config': 3.1.2 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.4 '@changesets/should-skip-package': 0.1.2 @@ -11811,23 +11844,23 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.29.7(@types/node@22.19.1)': + '@changesets/cli@2.29.8(@types/node@22.19.3)': dependencies: - '@changesets/apply-release-plan': 7.0.13 + '@changesets/apply-release-plan': 7.0.14 '@changesets/assemble-release-plan': 6.0.9 '@changesets/changelog-git': 0.2.1 - '@changesets/config': 3.1.1 + '@changesets/config': 3.1.2 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 - '@changesets/get-release-plan': 4.0.13 + '@changesets/get-release-plan': 4.0.14 '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.5 + '@changesets/read': 0.6.6 '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@22.19.1) + '@inquirer/external-editor': 1.0.3(@types/node@22.19.3) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 @@ -11844,7 +11877,7 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@changesets/config@3.1.1': + '@changesets/config@3.1.2': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 @@ -11865,12 +11898,12 @@ snapshots: picocolors: 1.1.1 semver: 7.7.3 - '@changesets/get-release-plan@4.0.13': + '@changesets/get-release-plan@4.0.14': dependencies: '@changesets/assemble-release-plan': 6.0.9 - '@changesets/config': 3.1.1 + '@changesets/config': 3.1.2 '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.5 + '@changesets/read': 0.6.6 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 @@ -11888,10 +11921,10 @@ snapshots: dependencies: picocolors: 1.1.1 - '@changesets/parse@0.4.1': + '@changesets/parse@0.4.2': dependencies: '@changesets/types': 6.1.0 - js-yaml: 3.14.1 + js-yaml: 4.1.1 '@changesets/pre@2.0.2': dependencies: @@ -11900,11 +11933,11 @@ snapshots: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.5': + '@changesets/read@0.6.6': dependencies: '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.1 + '@changesets/parse': 0.4.2 '@changesets/types': 6.1.0 fs-extra: 7.0.1 p-filter: 2.1.0 @@ -11923,7 +11956,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 fs-extra: 7.0.1 - human-id: 4.1.2 + human-id: 4.1.3 prettier: 2.8.8 '@cnakazawa/watch@1.0.4': @@ -12097,18 +12130,18 @@ snapshots: eslint: 7.32.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))': dependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@1.4.1(eslint@9.39.1(jiti@2.6.1))': + '@eslint/compat@1.4.1(eslint@9.39.2(jiti@2.6.1))': dependencies: '@eslint/core': 0.17.0 optionalDependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) '@eslint/config-array@0.21.1': dependencies: @@ -12126,7 +12159,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/css-tree@3.6.6': + '@eslint/css-tree@3.6.8': dependencies: mdn-data: 2.23.0 source-map-js: 1.2.1 @@ -12134,7 +12167,7 @@ snapshots: '@eslint/css@0.14.1': dependencies: '@eslint/core': 0.17.0 - '@eslint/css-tree': 3.6.6 + '@eslint/css-tree': 3.6.8 '@eslint/plugin-kit': 0.4.1 '@eslint/eslintrc@0.4.3': @@ -12145,13 +12178,13 @@ snapshots: globals: 13.24.0 ignore: 4.0.6 import-fresh: 3.3.1 - js-yaml: 3.14.1 + js-yaml: 3.14.2 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 debug: 4.4.3 @@ -12165,7 +12198,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.1': {} + '@eslint/js@9.39.2': {} '@eslint/json@0.14.0': dependencies: @@ -12181,12 +12214,12 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@gerrit0/mini-shiki@3.15.0': + '@gerrit0/mini-shiki@3.20.0': dependencies: - '@shikijs/engine-oniguruma': 3.15.0 - '@shikijs/langs': 3.15.0 - '@shikijs/themes': 3.15.0 - '@shikijs/types': 3.15.0 + '@shikijs/engine-oniguruma': 3.20.0 + '@shikijs/langs': 3.20.0 + '@shikijs/themes': 3.20.0 + '@shikijs/types': 3.20.0 '@shikijs/vscode-textmate': 10.0.2 '@greymass/eosio@0.6.11': @@ -12228,139 +12261,139 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@4.3.2(@types/node@22.19.1)': + '@inquirer/checkbox@4.3.2(@types/node@22.19.3)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/type': 3.0.10(@types/node@22.19.3) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/confirm@5.1.21(@types/node@22.19.1)': + '@inquirer/confirm@5.1.21(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/confirm@5.1.6(@types/node@22.19.1)': + '@inquirer/confirm@5.1.6(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/core@10.3.2(@types/node@22.19.1)': + '@inquirer/core@10.3.2(@types/node@22.19.3)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/type': 3.0.10(@types/node@22.19.3) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/editor@4.2.23(@types/node@22.19.1)': + '@inquirer/editor@4.2.23(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/external-editor': 1.0.3(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/external-editor': 1.0.3(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/expand@4.0.23(@types/node@22.19.1)': + '@inquirer/expand@4.0.23(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/external-editor@1.0.3(@types/node@22.19.1)': + '@inquirer/external-editor@1.0.3(@types/node@22.19.3)': dependencies: chardet: 2.1.1 - iconv-lite: 0.7.0 + iconv-lite: 0.7.1 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@inquirer/figures@1.0.15': {} - '@inquirer/input@4.3.1(@types/node@22.19.1)': + '@inquirer/input@4.3.1(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/number@3.0.23(@types/node@22.19.1)': + '@inquirer/number@3.0.23(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/password@4.0.23(@types/node@22.19.1)': + '@inquirer/password@4.0.23(@types/node@22.19.3)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) optionalDependencies: - '@types/node': 22.19.1 - - '@inquirer/prompts@7.3.2(@types/node@22.19.1)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@22.19.1) - '@inquirer/confirm': 5.1.21(@types/node@22.19.1) - '@inquirer/editor': 4.2.23(@types/node@22.19.1) - '@inquirer/expand': 4.0.23(@types/node@22.19.1) - '@inquirer/input': 4.3.1(@types/node@22.19.1) - '@inquirer/number': 3.0.23(@types/node@22.19.1) - '@inquirer/password': 4.0.23(@types/node@22.19.1) - '@inquirer/rawlist': 4.1.11(@types/node@22.19.1) - '@inquirer/search': 3.2.2(@types/node@22.19.1) - '@inquirer/select': 4.4.2(@types/node@22.19.1) + '@types/node': 22.19.3 + + '@inquirer/prompts@7.3.2(@types/node@22.19.3)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@22.19.3) + '@inquirer/confirm': 5.1.21(@types/node@22.19.3) + '@inquirer/editor': 4.2.23(@types/node@22.19.3) + '@inquirer/expand': 4.0.23(@types/node@22.19.3) + '@inquirer/input': 4.3.1(@types/node@22.19.3) + '@inquirer/number': 3.0.23(@types/node@22.19.3) + '@inquirer/password': 4.0.23(@types/node@22.19.3) + '@inquirer/rawlist': 4.1.11(@types/node@22.19.3) + '@inquirer/search': 3.2.2(@types/node@22.19.3) + '@inquirer/select': 4.4.2(@types/node@22.19.3) optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/rawlist@4.1.11(@types/node@22.19.1)': + '@inquirer/rawlist@4.1.11(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) + '@inquirer/type': 3.0.10(@types/node@22.19.3) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/search@3.2.2(@types/node@22.19.1)': + '@inquirer/search@3.2.2(@types/node@22.19.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/type': 3.0.10(@types/node@22.19.3) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 - '@inquirer/select@4.4.2(@types/node@22.19.1)': + '@inquirer/select@4.4.2(@types/node@22.19.3)': dependencies: '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@22.19.1) + '@inquirer/core': 10.3.2(@types/node@22.19.3) '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@22.19.1) + '@inquirer/type': 3.0.10(@types/node@22.19.3) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@inquirer/type@1.5.5': dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.10(@types/node@22.19.1)': + '@inquirer/type@3.0.10(@types/node@22.19.3)': optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@isaacs/cliui@8.0.2': dependencies: @@ -12380,7 +12413,7 @@ snapshots: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.14.1 + js-yaml: 3.14.2 resolve-from: 5.0.0 '@istanbuljs/schema@0.1.3': {} @@ -12390,33 +12423,33 @@ snapshots: '@jest/console@26.6.2': dependencies: '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 chalk: 4.1.2 jest-message-util: 26.6.2 jest-util: 26.6.2 slash: 3.0.0 - '@jest/core@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5))': + '@jest/core@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5))': dependencies: '@jest/console': 26.6.2 '@jest/reporters': 26.6.2 '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 26.6.2 - jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-regex-util: 26.0.0 jest-resolve: 26.6.2 jest-resolve-dependencies: 26.6.3 - jest-runner: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) - jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-runner: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) + jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-snapshot: 26.6.2 jest-util: 26.6.2 jest-validate: 26.6.2 @@ -12441,14 +12474,14 @@ snapshots: dependencies: '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 jest-mock: 26.6.2 '@jest/fake-timers@26.6.2': dependencies: '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 - '@types/node': 22.19.1 + '@types/node': 22.19.3 jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 @@ -12503,13 +12536,13 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.3 - '@jest/test-sequencer@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5))': + '@jest/test-sequencer@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5))': dependencies: '@jest/test-result': 26.6.2 graceful-fs: 4.2.11 jest-haste-map: 26.6.2 - jest-runner: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) - jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-runner: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) + jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) transitivePeerDependencies: - bufferutil - canvas @@ -12541,16 +12574,16 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.1 - '@types/yargs': 15.0.19 + '@types/node': 22.19.3 + '@types/yargs': 15.0.20 chalk: 4.1.2 '@jest/types@27.5.1': dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.1 - '@types/yargs': 16.0.10 + '@types/node': 22.19.3 + '@types/yargs': 16.0.11 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': @@ -12620,9 +12653,9 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@22.19.1))': + '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@22.19.3))': dependencies: - '@inquirer/prompts': 7.3.2(@types/node@22.19.1) + '@inquirer/prompts': 7.3.2(@types/node@22.19.3) '@inquirer/type': 1.5.5 '@lmdb/lmdb-darwin-arm64@3.2.6': @@ -12749,9 +12782,9 @@ snapshots: '@napi-rs/nice-win32-x64-msvc': 1.1.1 optional: true - '@ngtools/webpack@19.2.19(@angular/compiler-cli@19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.98.0(esbuild@0.25.4))': + '@ngtools/webpack@19.2.19(@angular/compiler-cli@19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3))(typescript@5.7.3)(webpack@5.98.0(esbuild@0.25.4))': dependencies: - '@angular/compiler-cli': 19.2.15(@angular/compiler@19.2.15)(typescript@5.7.3) + '@angular/compiler-cli': 19.2.17(@angular/compiler@19.2.17)(typescript@5.7.3) typescript: 5.7.3 webpack: 5.98.0(esbuild@0.25.4) @@ -12765,7 +12798,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 '@npmcli/agent@3.0.0': dependencies: @@ -12802,7 +12835,7 @@ snapshots: '@npmcli/package-json@6.2.0': dependencies: '@npmcli/git': 6.0.3 - glob: 10.4.5 + glob: 10.5.0 hosted-git-info: 8.1.0 json-parse-even-better-errors: 4.0.0 proc-log: 5.0.0 @@ -12887,9 +12920,9 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.1 optional: true - '@peculiar/asn1-schema@2.5.0': + '@peculiar/asn1-schema@2.6.0': dependencies: - asn1js: 3.0.6 + asn1js: 3.0.7 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -12899,7 +12932,7 @@ snapshots: '@peculiar/webcrypto@1.5.0': dependencies: - '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-schema': 2.6.0 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -12960,7 +12993,7 @@ snapshots: '@react-native-community/cli-debugger-ui@9.0.0': dependencies: - serve-static: 1.16.2 + serve-static: 1.16.3 transitivePeerDependencies: - supports-color @@ -12971,7 +13004,7 @@ snapshots: '@react-native-community/cli-tools': 9.2.1(encoding@0.1.13) chalk: 4.1.2 command-exists: 1.2.9 - envinfo: 7.20.0 + envinfo: 7.21.0 execa: 1.0.0 hermes-profile-transformer: 0.0.6 ip: 1.1.9 @@ -13054,10 +13087,10 @@ snapshots: '@react-native-community/cli-tools': 9.2.1(encoding@0.1.13) compression: 1.8.1 connect: 3.7.0 - errorhandler: 1.5.1 + errorhandler: 1.5.2 nocache: 3.0.4 pretty-format: 26.6.2 - serve-static: 1.16.2 + serve-static: 1.16.3 ws: 7.5.10 transitivePeerDependencies: - bufferutil @@ -13137,34 +13170,34 @@ snapshots: '@react-native/polyfills@2.0.0': {} - '@reduxjs/toolkit@2.10.1(react-redux@9.2.0(@types/react@19.2.4)(react@19.2.0)(redux@5.0.1))(react@19.2.0)': + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1))(react@19.2.3)': dependencies: - '@standard-schema/spec': 1.0.0 + '@standard-schema/spec': 1.1.0 '@standard-schema/utils': 0.3.0 - immer: 10.2.0 + immer: 11.1.0 redux: 5.0.1 redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 optionalDependencies: - react: 19.2.0 - react-redux: 9.2.0(@types/react@19.2.4)(react@19.2.0)(redux@5.0.1) + react: 19.2.3 + react-redux: 9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1) '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/plugin-babel@6.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.53.2)': + '@rollup/plugin-babel@6.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.54.0)': dependencies: '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) optionalDependencies: '@types/babel__core': 7.20.5 - rollup: 4.53.2 + rollup: 4.54.0 transitivePeerDependencies: - supports-color - '@rollup/plugin-commonjs@28.0.9(rollup@4.53.2)': + '@rollup/plugin-commonjs@28.0.9(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -13172,54 +13205,54 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 - '@rollup/plugin-inject@5.0.5(rollup@4.53.2)': + '@rollup/plugin-inject@5.0.5(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 - '@rollup/plugin-json@6.1.0(rollup@4.53.2)': + '@rollup/plugin-json@6.1.0(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.53.2)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 - '@rollup/plugin-replace@6.0.3(rollup@4.53.2)': + '@rollup/plugin-replace@6.0.3(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) magic-string: 0.30.21 optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 - '@rollup/plugin-terser@0.4.4(rollup@4.53.2)': + '@rollup/plugin-terser@0.4.4(rollup@4.54.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.44.1 optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 - '@rollup/plugin-typescript@12.3.0(rollup@4.53.2)(tslib@2.8.1)(typescript@5.4.5)': + '@rollup/plugin-typescript@12.3.0(rollup@4.54.0)(tslib@2.8.1)(typescript@5.4.5)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) resolve: 1.22.11 typescript: 5.4.5 optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 tslib: 2.8.1 '@rollup/pluginutils@4.2.1': @@ -13227,75 +13260,75 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.3.0(rollup@4.53.2)': + '@rollup/pluginutils@5.3.0(rollup@4.54.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.53.2 + rollup: 4.54.0 '@rollup/rollup-android-arm-eabi@4.34.8': optional: true - '@rollup/rollup-android-arm-eabi@4.53.2': + '@rollup/rollup-android-arm-eabi@4.54.0': optional: true '@rollup/rollup-android-arm64@4.34.8': optional: true - '@rollup/rollup-android-arm64@4.53.2': + '@rollup/rollup-android-arm64@4.54.0': optional: true '@rollup/rollup-darwin-arm64@4.34.8': optional: true - '@rollup/rollup-darwin-arm64@4.53.2': + '@rollup/rollup-darwin-arm64@4.54.0': optional: true '@rollup/rollup-darwin-x64@4.34.8': optional: true - '@rollup/rollup-darwin-x64@4.53.2': + '@rollup/rollup-darwin-x64@4.54.0': optional: true '@rollup/rollup-freebsd-arm64@4.34.8': optional: true - '@rollup/rollup-freebsd-arm64@4.53.2': + '@rollup/rollup-freebsd-arm64@4.54.0': optional: true '@rollup/rollup-freebsd-x64@4.34.8': optional: true - '@rollup/rollup-freebsd-x64@4.53.2': + '@rollup/rollup-freebsd-x64@4.54.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.34.8': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': optional: true '@rollup/rollup-linux-arm-musleabihf@4.34.8': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.2': + '@rollup/rollup-linux-arm-musleabihf@4.54.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.2': + '@rollup/rollup-linux-arm64-gnu@4.54.0': optional: true '@rollup/rollup-linux-arm64-musl@4.34.8': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.2': + '@rollup/rollup-linux-arm64-musl@4.54.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.2': + '@rollup/rollup-linux-loong64-gnu@4.54.0': optional: true '@rollup/rollup-linux-loongarch64-gnu@4.34.8': @@ -13304,58 +13337,58 @@ snapshots: '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.2': + '@rollup/rollup-linux-ppc64-gnu@4.54.0': optional: true '@rollup/rollup-linux-riscv64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.2': + '@rollup/rollup-linux-riscv64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.2': + '@rollup/rollup-linux-riscv64-musl@4.54.0': optional: true '@rollup/rollup-linux-s390x-gnu@4.34.8': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.2': + '@rollup/rollup-linux-s390x-gnu@4.54.0': optional: true '@rollup/rollup-linux-x64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.2': + '@rollup/rollup-linux-x64-gnu@4.54.0': optional: true '@rollup/rollup-linux-x64-musl@4.34.8': optional: true - '@rollup/rollup-linux-x64-musl@4.53.2': + '@rollup/rollup-linux-x64-musl@4.54.0': optional: true - '@rollup/rollup-openharmony-arm64@4.53.2': + '@rollup/rollup-openharmony-arm64@4.54.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.34.8': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.2': + '@rollup/rollup-win32-arm64-msvc@4.54.0': optional: true '@rollup/rollup-win32-ia32-msvc@4.34.8': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.2': + '@rollup/rollup-win32-ia32-msvc@4.54.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.2': + '@rollup/rollup-win32-x64-gnu@4.54.0': optional: true '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.2': + '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true '@schematics/angular@19.2.19(chokidar@4.0.3)': @@ -13368,20 +13401,20 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/engine-oniguruma@3.15.0': + '@shikijs/engine-oniguruma@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.15.0': + '@shikijs/langs@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 - '@shikijs/themes@3.15.0': + '@shikijs/themes@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 - '@shikijs/types@3.15.0': + '@shikijs/types@3.20.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -13442,27 +13475,27 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@standard-schema/spec@1.0.0': {} + '@standard-schema/spec@1.1.0': {} '@standard-schema/utils@0.3.0': {} - '@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)': + '@sveltejs/acorn-typescript@1.0.8(acorn@8.15.0)': dependencies: acorn: 8.15.0 - '@sveltejs/adapter-auto@6.1.1(@sveltejs/kit@2.48.5(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))': + '@sveltejs/adapter-auto@6.1.1(@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))': dependencies: - '@sveltejs/kit': 2.48.5(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + '@sveltejs/kit': 2.49.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) - '@sveltejs/kit@2.48.5(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))': + '@sveltejs/kit@2.49.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': dependencies: - '@standard-schema/spec': 1.0.0 - '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + '@standard-schema/spec': 1.1.0 + '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 - devalue: 5.5.0 + devalue: 5.6.1 esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.21 @@ -13470,106 +13503,106 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.2 sirv: 3.0.2 - svelte: 5.43.6 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + svelte: 5.46.1 + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) debug: 4.4.3 - svelte: 5.43.6 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + svelte: 5.46.1 + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))': + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)))(svelte@5.43.6)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)))(svelte@5.46.1)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) debug: 4.4.3 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.21 - svelte: 5.43.6 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + svelte: 5.46.1 + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vitefu: 1.1.1(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) transitivePeerDependencies: - supports-color - '@tailwindcss/node@4.1.17': + '@tailwindcss/node@4.1.18': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.18.4 jiti: 2.6.1 lightningcss: 1.30.2 magic-string: 0.30.21 source-map-js: 1.2.1 - tailwindcss: 4.1.17 + tailwindcss: 4.1.18 - '@tailwindcss/oxide-android-arm64@4.1.17': + '@tailwindcss/oxide-android-arm64@4.1.18': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.17': + '@tailwindcss/oxide-darwin-arm64@4.1.18': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.17': + '@tailwindcss/oxide-darwin-x64@4.1.18': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.17': + '@tailwindcss/oxide-freebsd-x64@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.17': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.17': + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.17': + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.17': + '@tailwindcss/oxide-linux-x64-musl@4.1.18': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.17': + '@tailwindcss/oxide-wasm32-wasi@4.1.18': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.17': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.17': + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': optional: true - '@tailwindcss/oxide@4.1.17': + '@tailwindcss/oxide@4.1.18': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.17 - '@tailwindcss/oxide-darwin-arm64': 4.1.17 - '@tailwindcss/oxide-darwin-x64': 4.1.17 - '@tailwindcss/oxide-freebsd-x64': 4.1.17 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.17 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.17 - '@tailwindcss/oxide-linux-x64-musl': 4.1.17 - '@tailwindcss/oxide-wasm32-wasi': 4.1.17 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.17 - - '@tailwindcss/postcss@4.1.17': + '@tailwindcss/oxide-android-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 + '@tailwindcss/oxide-darwin-x64': 4.1.18 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + + '@tailwindcss/postcss@4.1.18': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.17 - '@tailwindcss/oxide': 4.1.17 + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 postcss: 8.5.6 - tailwindcss: 4.1.17 + tailwindcss: 4.1.18 - '@tailwindcss/vite@4.1.17(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))': + '@tailwindcss/vite@4.1.18(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': dependencies: - '@tailwindcss/node': 4.1.17 - '@tailwindcss/oxide': 4.1.17 - tailwindcss: 4.1.17 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + '@tailwindcss/node': 4.1.18 + '@tailwindcss/oxide': 4.1.18 + tailwindcss: 4.1.18 + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) '@tootallnate/once@1.1.2': {} @@ -13581,7 +13614,7 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@tsconfig/node22@22.0.3': {} + '@tsconfig/node22@22.0.5': {} '@tsconfig/react-native@2.0.3': {} @@ -13622,26 +13655,26 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.7 - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/cookie@0.6.0': {} '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/eslint-scope@3.7.7': dependencies: @@ -13661,7 +13694,7 @@ snapshots: '@types/express-serve-static-core@4.19.7': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -13675,22 +13708,22 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.4)': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.4 + '@types/react': 19.2.7 hoist-non-react-statics: 3.3.2 '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/istanbul-lib-coverage@2.0.6': {} @@ -13702,7 +13735,7 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jasmine@5.1.12': {} + '@types/jasmine@5.1.13': {} '@types/jest@26.0.24': dependencies: @@ -13717,13 +13750,13 @@ snapshots: '@types/node-forge@1.3.14': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/node@12.20.55': {} '@types/node@16.18.126': {} - '@types/node@22.19.1': + '@types/node@22.19.3': dependencies: undici-types: 6.21.0 @@ -13739,33 +13772,33 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-dom@19.2.3(@types/react@19.2.4)': + '@types/react-dom@19.2.3(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.4 + '@types/react': 19.2.7 '@types/react-native@0.70.19': dependencies: - '@types/react': 18.3.26 + '@types/react': 18.3.27 '@types/react-redux@7.1.34': dependencies: - '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.4) - '@types/react': 19.2.4 + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.7) + '@types/react': 19.2.7 hoist-non-react-statics: 3.3.2 redux: 4.2.1 '@types/react-test-renderer@18.3.1': dependencies: - '@types/react': 18.3.26 + '@types/react': 18.3.27 - '@types/react@18.3.26': + '@types/react@18.3.27': dependencies: '@types/prop-types': 15.7.15 - csstype: 3.2.0 + csstype: 3.2.3 - '@types/react@19.2.4': + '@types/react@19.2.7': dependencies: - csstype: 3.2.0 + csstype: 3.2.3 '@types/resolve@1.20.2': {} @@ -13776,11 +13809,11 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/serve-index@1.9.4': dependencies: @@ -13789,12 +13822,12 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/send': 0.17.6 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/stack-utils@2.0.3': {} @@ -13810,15 +13843,15 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 '@types/yargs-parser@21.0.3': {} - '@types/yargs@15.0.19': + '@types/yargs@15.0.20': dependencies: '@types/yargs-parser': 21.0.3 - '@types/yargs@16.0.10': + '@types/yargs@16.0.11': dependencies: '@types/yargs-parser': 21.0.3 @@ -13856,16 +13889,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/scope-manager': 8.46.4 - '@typescript-eslint/type-utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.46.4 - eslint: 9.39.1(jiti@2.6.1) - graphemer: 1.4.0 + '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/type-utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.50.1 + eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.4.5) @@ -13873,16 +13905,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.46.4 - '@typescript-eslint/type-utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.46.4 - eslint: 9.39.1(jiti@2.6.1) - graphemer: 1.4.0 + '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/type-utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.50.1 + eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.8.3) @@ -13927,43 +13958,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 8.46.4 - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 8.46.4 + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.50.1 debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.46.4 - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.46.4 + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.50.1 debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.4(typescript@5.4.5)': + '@typescript-eslint/project-service@8.50.1(typescript@5.4.5)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.4.5) - '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.4.5) + '@typescript-eslint/types': 8.50.1 debug: 4.4.3 typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.4(typescript@5.8.3)': + '@typescript-eslint/project-service@8.50.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.8.3) - '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.8.3) + '@typescript-eslint/types': 8.50.1 debug: 4.4.3 typescript: 5.8.3 transitivePeerDependencies: @@ -13974,16 +14005,16 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@8.46.4': + '@typescript-eslint/scope-manager@8.50.1': dependencies: - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/visitor-keys': 8.46.4 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/visitor-keys': 8.50.1 - '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.4.5)': + '@typescript-eslint/tsconfig-utils@8.50.1(typescript@5.4.5)': dependencies: typescript: 5.4.5 - '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.50.1(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -13999,25 +14030,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.4.5) - '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.4.5) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.8.3) - '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -14027,7 +14058,7 @@ snapshots: '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@8.46.4': {} + '@typescript-eslint/types@8.50.1': {} '@typescript-eslint/typescript-estree@3.10.1(typescript@4.9.5)': dependencies: @@ -14058,33 +14089,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.46.4(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.50.1(typescript@5.4.5)': dependencies: - '@typescript-eslint/project-service': 8.46.4(typescript@5.4.5) - '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.4.5) - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/visitor-keys': 8.46.4 + '@typescript-eslint/project-service': 8.50.1(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.4.5) + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/visitor-keys': 8.50.1 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 + tinyglobby: 0.2.15 ts-api-utils: 2.1.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.46.4(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.50.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.46.4(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.8.3) - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/visitor-keys': 8.46.4 + '@typescript-eslint/project-service': 8.50.1(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.8.3) + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/visitor-keys': 8.50.1 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 + tinyglobby: 0.2.15 ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -14105,24 +14134,24 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.4 - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.4.5) - eslint: 9.39.1(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.4.5) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)': + '@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.4 - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.8.3) - eslint: 9.39.1(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.8.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -14136,18 +14165,18 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.46.4': + '@typescript-eslint/visitor-keys@8.50.1': dependencies: - '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/types': 8.50.1 eslint-visitor-keys: 4.2.1 '@ungap/promise-all-settled@1.1.2': {} - '@vitejs/plugin-basic-ssl@1.2.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1))': + '@vitejs/plugin-basic-ssl@1.2.0(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2))': dependencies: - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2) - '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))': + '@vitejs/plugin-react@4.7.0(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -14155,14 +14184,14 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.8.3))': + '@vitejs/plugin-vue@5.2.4(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.8.3))': dependencies: - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) - vue: 3.5.24(typescript@5.8.3) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vue: 3.5.26(typescript@5.8.3) '@volar/language-core@2.4.15': dependencies: @@ -14188,7 +14217,7 @@ snapshots: '@babel/types': 7.28.5 '@vue/babel-helper-vue-transform-on': 1.5.0 '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.5) - '@vue/shared': 3.5.24 + '@vue/shared': 3.5.26 optionalDependencies: '@babel/core': 7.28.5 transitivePeerDependencies: @@ -14201,92 +14230,92 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/parser': 7.28.5 - '@vue/compiler-sfc': 3.5.24 + '@vue/compiler-sfc': 3.5.26 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.24': + '@vue/compiler-core@3.5.26': dependencies: '@babel/parser': 7.28.5 - '@vue/shared': 3.5.24 - entities: 4.5.0 + '@vue/shared': 3.5.26 + entities: 7.0.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.24': + '@vue/compiler-dom@3.5.26': dependencies: - '@vue/compiler-core': 3.5.24 - '@vue/shared': 3.5.24 + '@vue/compiler-core': 3.5.26 + '@vue/shared': 3.5.26 - '@vue/compiler-sfc@3.5.24': + '@vue/compiler-sfc@3.5.26': dependencies: '@babel/parser': 7.28.5 - '@vue/compiler-core': 3.5.24 - '@vue/compiler-dom': 3.5.24 - '@vue/compiler-ssr': 3.5.24 - '@vue/shared': 3.5.24 + '@vue/compiler-core': 3.5.26 + '@vue/compiler-dom': 3.5.26 + '@vue/compiler-ssr': 3.5.26 + '@vue/shared': 3.5.26 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.24': + '@vue/compiler-ssr@3.5.26': dependencies: - '@vue/compiler-dom': 3.5.24 - '@vue/shared': 3.5.24 + '@vue/compiler-dom': 3.5.26 + '@vue/shared': 3.5.26 '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 he: 1.2.0 - '@vue/devtools-api@7.7.8': + '@vue/devtools-api@7.7.9': dependencies: - '@vue/devtools-kit': 7.7.8 + '@vue/devtools-kit': 7.7.9 - '@vue/devtools-core@7.7.8(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.8.3))': + '@vue/devtools-core@7.7.9(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.8.3))': dependencies: - '@vue/devtools-kit': 7.7.8 - '@vue/devtools-shared': 7.7.8 + '@vue/devtools-kit': 7.7.9 + '@vue/devtools-shared': 7.7.9 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) - vue: 3.5.24(typescript@5.8.3) + vite-hot-client: 2.1.0(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + vue: 3.5.26(typescript@5.8.3) transitivePeerDependencies: - vite - '@vue/devtools-kit@7.7.8': + '@vue/devtools-kit@7.7.9': dependencies: - '@vue/devtools-shared': 7.7.8 - birpc: 2.8.0 + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 hookable: 5.5.3 mitt: 3.0.1 perfect-debounce: 1.0.0 speakingurl: 14.0.1 - superjson: 2.2.5 + superjson: 2.2.6 - '@vue/devtools-shared@7.7.8': + '@vue/devtools-shared@7.7.9': dependencies: rfdc: 1.4.1 - '@vue/eslint-config-prettier@10.2.0(@types/eslint@9.6.1)(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3)': + '@vue/eslint-config-prettier@10.2.0(@types/eslint@9.6.1)(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3)': dependencies: - eslint: 9.39.1(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3) + eslint: 9.39.2(jiti@2.6.1) + eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3) prettier: 3.5.3 transitivePeerDependencies: - '@types/eslint' - '@vue/eslint-config-typescript@14.6.0(eslint-plugin-vue@10.0.1(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3)': + '@vue/eslint-config-typescript@14.6.0(eslint-plugin-vue@10.0.1(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3)': dependencies: - '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - eslint: 9.39.1(jiti@2.6.1) - eslint-plugin-vue: 10.0.1(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.39.2(jiti@2.6.1) + eslint-plugin-vue: 10.0.1(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) fast-glob: 3.3.3 - typescript-eslint: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - vue-eslint-parser: 10.2.0(eslint@9.39.1(jiti@2.6.1)) + typescript-eslint: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@2.6.1)) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -14295,9 +14324,9 @@ snapshots: '@vue/language-core@2.2.12(typescript@5.8.3)': dependencies: '@volar/language-core': 2.4.15 - '@vue/compiler-dom': 3.5.24 + '@vue/compiler-dom': 3.5.26 '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.24 + '@vue/shared': 3.5.26 alien-signals: 1.0.13 minimatch: 9.0.5 muggle-string: 0.4.1 @@ -14305,34 +14334,34 @@ snapshots: optionalDependencies: typescript: 5.8.3 - '@vue/reactivity@3.5.24': + '@vue/reactivity@3.5.26': dependencies: - '@vue/shared': 3.5.24 + '@vue/shared': 3.5.26 - '@vue/runtime-core@3.5.24': + '@vue/runtime-core@3.5.26': dependencies: - '@vue/reactivity': 3.5.24 - '@vue/shared': 3.5.24 + '@vue/reactivity': 3.5.26 + '@vue/shared': 3.5.26 - '@vue/runtime-dom@3.5.24': + '@vue/runtime-dom@3.5.26': dependencies: - '@vue/reactivity': 3.5.24 - '@vue/runtime-core': 3.5.24 - '@vue/shared': 3.5.24 - csstype: 3.2.0 + '@vue/reactivity': 3.5.26 + '@vue/runtime-core': 3.5.26 + '@vue/shared': 3.5.26 + csstype: 3.2.3 - '@vue/server-renderer@3.5.24(vue@3.5.24(typescript@5.8.3))': + '@vue/server-renderer@3.5.26(vue@3.5.26(typescript@5.8.3))': dependencies: - '@vue/compiler-ssr': 3.5.24 - '@vue/shared': 3.5.24 - vue: 3.5.24(typescript@5.8.3) + '@vue/compiler-ssr': 3.5.26 + '@vue/shared': 3.5.26 + vue: 3.5.26(typescript@5.8.3) - '@vue/shared@3.5.24': {} + '@vue/shared@3.5.26': {} - '@vue/tsconfig@0.7.0(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3))': + '@vue/tsconfig@0.7.0(typescript@5.8.3)(vue@3.5.26(typescript@5.8.3))': optionalDependencies: typescript: 5.8.3 - vue: 3.5.24(typescript@5.8.3) + vue: 3.5.26(typescript@5.8.3) '@webassemblyjs/ast@1.14.1': dependencies: @@ -14589,7 +14618,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -14609,7 +14638,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -14618,21 +14647,21 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 @@ -14641,14 +14670,14 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 asap@2.0.6: {} - asn1js@3.0.6: + asn1js@3.0.7: dependencies: pvtsutils: 1.3.6 pvutils: 1.1.5 @@ -14676,8 +14705,8 @@ snapshots: autoprefixer@10.4.20(postcss@8.5.2): dependencies: - browserslist: 4.28.0 - caniuse-lite: 1.0.30001754 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001761 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -14766,7 +14795,7 @@ snapshots: dependencies: '@babel/core': 7.26.10 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.26.10) - core-js-compat: 3.46.0 + core-js-compat: 3.47.0 transitivePeerDependencies: - supports-color @@ -14774,7 +14803,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) - core-js-compat: 3.46.0 + core-js-compat: 3.47.0 transitivePeerDependencies: - supports-color @@ -14870,7 +14899,7 @@ snapshots: mixin-deep: 1.3.2 pascalcase: 0.1.1 - baseline-browser-mapping@2.8.28: {} + baseline-browser-mapping@2.9.11: {} batch@0.6.1: {} @@ -14893,7 +14922,7 @@ snapshots: binary-extensions@2.3.0: {} - birpc@2.8.0: {} + birpc@2.9.0: {} bl@4.1.0: dependencies: @@ -14905,18 +14934,18 @@ snapshots: bn.js@5.2.2: {} - body-parser@1.20.3: + body-parser@1.20.4: dependencies: bytes: 3.1.2 content-type: 1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 + qs: 6.14.0 + raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: @@ -14963,13 +14992,13 @@ snapshots: browser-stdout@1.3.1: {} - browserslist@4.28.0: + browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.8.28 - caniuse-lite: 1.0.30001754 - electron-to-chromium: 1.5.252 + baseline-browser-mapping: 2.9.11 + caniuse-lite: 1.0.30001761 + electron-to-chromium: 1.5.267 node-releases: 2.0.27 - update-browserslist-db: 1.1.4(browserslist@4.28.0) + update-browserslist-db: 1.2.3(browserslist@4.28.1) bser@2.1.1: dependencies: @@ -15001,7 +15030,7 @@ snapshots: dependencies: '@npmcli/fs': 4.0.0 fs-minipass: 3.0.3 - glob: 10.4.5 + glob: 10.5.0 lru-cache: 10.4.3 minipass: 7.1.2 minipass-collect: 2.0.1 @@ -15064,7 +15093,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001754: {} + caniuse-lite@1.0.30001761: {} capture-exit@2.0.0: dependencies: @@ -15261,12 +15290,10 @@ snapshots: convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} + cookie-signature@1.0.7: {} cookie@0.6.0: {} - cookie@0.7.1: {} - cookie@0.7.2: {} copy-anything@2.0.6: @@ -15289,11 +15316,11 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.98.0(esbuild@0.25.4) - core-js-compat@3.46.0: + core-js-compat@3.47.0: dependencies: - browserslist: 4.28.0 + browserslist: 4.28.1 - core-js@3.46.0: {} + core-js@3.47.0: {} core-util-is@1.0.3: {} @@ -15306,7 +15333,7 @@ snapshots: dependencies: import-fresh: 2.0.0 is-directory: 0.3.1 - js-yaml: 3.14.1 + js-yaml: 3.14.2 parse-json: 4.0.0 cosmiconfig@9.0.0(typescript@5.7.3): @@ -15373,7 +15400,7 @@ snapshots: dependencies: cssom: 0.3.8 - csstype@3.2.0: {} + csstype@3.2.3: {} custom-event@1.0.1: {} @@ -15417,10 +15444,6 @@ snapshots: optionalDependencies: supports-color: 8.1.1 - debug@4.3.7: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -15441,7 +15464,7 @@ snapshots: default-browser-id@5.0.1: {} - default-browser@5.3.0: + default-browser@5.4.0: dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.1 @@ -15502,7 +15525,7 @@ snapshots: detect-node@2.1.0: {} - devalue@5.5.0: {} + devalue@5.6.1: {} di@0.0.1: {} @@ -15567,7 +15590,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.252: {} + electron-to-chromium@1.5.267: {} elliptic@6.6.1: dependencies: @@ -15606,23 +15629,23 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.4: + engine.io@6.6.5: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.1 + '@types/node': 22.19.3 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 cors: 2.8.5 - debug: 4.3.7 + debug: 4.4.3 engine.io-parser: 5.2.3 - ws: 8.17.1 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - enhanced-resolve@5.18.3: + enhanced-resolve@5.18.4: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -15643,9 +15666,11 @@ snapshots: entities@6.0.1: {} + entities@7.0.0: {} + env-paths@2.2.1: {} - envinfo@7.20.0: {} + envinfo@7.21.0: {} environment@1.1.0: {} @@ -15666,12 +15691,12 @@ snapshots: dependencies: stackframe: 1.3.4 - errorhandler@1.5.1: + errorhandler@1.5.2: dependencies: accepts: 1.3.8 escape-html: 1.0.3 - es-abstract@1.24.0: + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -15732,12 +15757,12 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.2.1: + es-iterator-helpers@1.2.2: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -15853,9 +15878,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): dependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-config-prettier@6.15.0(eslint@7.32.0): dependencies: @@ -15883,23 +15908,23 @@ snapshots: prettier: 2.8.8 prettier-linter-helpers: 1.0.0 - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.5.3): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.5.3): dependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) prettier: 3.5.3 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks@4.6.2(eslint@7.32.0): dependencies: eslint: 7.32.0 - eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.2(jiti@2.6.1)): dependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-plugin-react-native-globals@0.1.2: {} @@ -15911,9 +15936,9 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.4.24(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@2.6.1)): dependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-plugin-react@7.37.5(eslint@7.32.0): dependencies: @@ -15922,7 +15947,7 @@ snapshots: array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 + es-iterator-helpers: 1.2.2 eslint: 7.32.0 estraverse: 5.3.0 hasown: 2.0.2 @@ -15937,11 +15962,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-svelte@3.13.0(eslint@9.39.1(jiti@2.6.1))(svelte@5.43.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)): + eslint-plugin-svelte@3.13.1(eslint@9.39.2(jiti@2.6.1))(svelte@5.46.1)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 @@ -15949,39 +15974,39 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)) postcss-safe-parser: 7.0.1(postcss@8.5.6) semver: 7.7.3 - svelte-eslint-parser: 1.4.0(svelte@5.43.6) + svelte-eslint-parser: 1.4.1(svelte@5.46.1) optionalDependencies: - svelte: 5.43.6 + svelte: 5.46.1 transitivePeerDependencies: - ts-node - eslint-plugin-svelte@3.13.0(eslint@9.39.1(jiti@2.6.1))(svelte@5.43.6)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3)): + eslint-plugin-svelte@3.13.1(eslint@9.39.2(jiti@2.6.1))(svelte@5.46.1)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.8.3)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3)) + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.8.3)) postcss-safe-parser: 7.0.1(postcss@8.5.6) semver: 7.7.3 - svelte-eslint-parser: 1.4.0(svelte@5.43.6) + svelte-eslint-parser: 1.4.1(svelte@5.46.1) optionalDependencies: - svelte: 5.43.6 + svelte: 5.46.1 transitivePeerDependencies: - ts-node - eslint-plugin-vue@10.0.1(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))): + eslint-plugin-vue@10.0.1(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) - eslint: 9.39.1(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + eslint: 9.39.2(jiti@2.6.1) natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.7.3 - vue-eslint-parser: 10.2.0(eslint@9.39.1(jiti@2.6.1)) + vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@2.6.1)) xml-name-validator: 4.0.0 eslint-scope@5.1.1: @@ -16033,7 +16058,7 @@ snapshots: import-fresh: 3.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 - js-yaml: 3.14.1 + js-yaml: 3.14.2 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -16051,15 +16076,15 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.39.1(jiti@2.6.1): + eslint@9.39.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.39.1 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -16112,7 +16137,7 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.1.2: + esrap@2.2.1: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -16164,7 +16189,7 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@9.6.0: + execa@9.6.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 @@ -16204,36 +16229,36 @@ snapshots: exponential-backoff@3.1.3: {} - express@4.21.2: + express@4.22.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.3 + body-parser: 1.20.4 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.7.1 - cookie-signature: 1.0.6 + cookie: 0.7.2 + cookie-signature: 1.0.7 debug: 2.6.9 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.1 + finalhandler: 1.3.2 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.13.0 + qs: 6.14.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 + send: 0.19.2 + serve-static: 1.16.3 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 @@ -16288,7 +16313,7 @@ snapshots: fast-uri@3.1.0: {} - fastq@1.19.1: + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -16353,14 +16378,14 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@1.3.1: + finalhandler@1.3.2: dependencies: debug: 2.6.9 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 unpipe: 1.0.0 transitivePeerDependencies: - supports-color @@ -16464,7 +16489,7 @@ snapshots: jsonfile: 2.4.0 klaw: 1.3.1 - fs-extra@11.3.2: + fs-extra@11.3.3: dependencies: graceful-fs: 4.2.11 jsonfile: 6.2.0 @@ -16585,7 +16610,7 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 @@ -16778,12 +16803,12 @@ snapshots: setprototypeof: 1.1.0 statuses: 1.5.0 - http-errors@2.0.0: + http-errors@2.0.1: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 toidentifier: 1.0.1 http-parser-js@0.5.10: {} @@ -16848,7 +16873,7 @@ snapshots: transitivePeerDependencies: - supports-color - human-id@4.1.2: {} + human-id@4.1.3: {} human-signals@1.1.1: {} @@ -16864,7 +16889,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.7.0: + iconv-lite@0.7.1: dependencies: safer-buffer: 2.1.2 @@ -16889,7 +16914,7 @@ snapshots: image-size@0.6.3: {} - immer@10.2.0: {} + immer@11.1.0: {} immutable@5.1.4: {} @@ -16939,7 +16964,7 @@ snapshots: ipaddr.js@1.9.1: {} - ipaddr.js@2.2.0: {} + ipaddr.js@2.3.0: {} is-accessor-descriptor@1.0.1: dependencies: @@ -17281,9 +17306,9 @@ snapshots: execa: 4.1.0 throat: 5.0.0 - jest-cli@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)): + jest-cli@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)): dependencies: - '@jest/core': 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + '@jest/core': 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 chalk: 4.1.2 @@ -17291,7 +17316,7 @@ snapshots: graceful-fs: 4.2.11 import-local: 3.2.0 is-ci: 2.0.0 - jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-util: 26.6.2 jest-validate: 26.6.2 prompts: 2.4.2 @@ -17303,10 +17328,10 @@ snapshots: - ts-node - utf-8-validate - jest-config@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)): + jest-config@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)): dependencies: '@babel/core': 7.28.5 - '@jest/test-sequencer': 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + '@jest/test-sequencer': 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) '@jest/types': 26.6.2 babel-jest: 26.6.3(@babel/core@7.28.5) chalk: 4.1.2 @@ -17316,7 +17341,7 @@ snapshots: jest-environment-jsdom: 26.6.2 jest-environment-node: 26.6.2 jest-get-type: 26.3.0 - jest-jasmine2: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-jasmine2: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-regex-util: 26.0.0 jest-resolve: 26.6.2 jest-util: 26.6.2 @@ -17324,7 +17349,7 @@ snapshots: micromatch: 4.0.8 pretty-format: 26.6.2 optionalDependencies: - ts-node: 10.9.2(@types/node@22.19.1)(typescript@4.9.5) + ts-node: 10.9.2(@types/node@22.19.3)(typescript@4.9.5) transitivePeerDependencies: - bufferutil - canvas @@ -17355,7 +17380,7 @@ snapshots: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 jest-mock: 26.6.2 jest-util: 26.6.2 jsdom: 16.7.0 @@ -17370,7 +17395,7 @@ snapshots: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 jest-mock: 26.6.2 jest-util: 26.6.2 @@ -17380,7 +17405,7 @@ snapshots: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.9 - '@types/node': 22.19.1 + '@types/node': 22.19.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -17396,14 +17421,14 @@ snapshots: transitivePeerDependencies: - supports-color - jest-jasmine2@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)): + jest-jasmine2@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)): dependencies: '@babel/traverse': 7.28.5 '@jest/environment': 26.6.2 '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 @@ -17411,7 +17436,7 @@ snapshots: jest-each: 26.6.2 jest-matcher-utils: 26.6.2 jest-message-util: 26.6.2 - jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-snapshot: 26.6.2 jest-util: 26.6.2 pretty-format: 26.6.2 @@ -17450,7 +17475,7 @@ snapshots: jest-mock@26.6.2: dependencies: '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 jest-pnp-resolver@1.2.3(jest-resolve@26.6.2): optionalDependencies: @@ -17479,24 +17504,24 @@ snapshots: resolve: 1.22.11 slash: 3.0.0 - jest-runner@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)): + jest-runner@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)): dependencies: '@jest/console': 26.6.2 '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-docblock: 26.0.0 jest-haste-map: 26.6.2 jest-leak-detector: 26.6.2 jest-message-util: 26.6.2 jest-resolve: 26.6.2 - jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-runtime: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-util: 26.6.2 jest-worker: 26.6.2 source-map-support: 0.5.21 @@ -17508,7 +17533,7 @@ snapshots: - ts-node - utf-8-validate - jest-runtime@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)): + jest-runtime@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)): dependencies: '@jest/console': 26.6.2 '@jest/environment': 26.6.2 @@ -17518,14 +17543,14 @@ snapshots: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/yargs': 15.0.19 + '@types/yargs': 15.0.20 chalk: 4.1.2 cjs-module-lexer: 0.6.0 collect-v8-coverage: 1.0.3 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-config: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) jest-haste-map: 26.6.2 jest-message-util: 26.6.2 jest-mock: 26.6.2 @@ -17546,12 +17571,12 @@ snapshots: jest-serializer@26.6.2: dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 graceful-fs: 4.2.11 jest-serializer@27.5.1: dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 graceful-fs: 4.2.11 jest-snapshot@26.6.2: @@ -17578,7 +17603,7 @@ snapshots: jest-util@26.6.2: dependencies: '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 chalk: 4.1.2 graceful-fs: 4.2.11 is-ci: 2.0.0 @@ -17587,7 +17612,7 @@ snapshots: jest-util@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 22.19.1 + '@types/node': 22.19.3 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -17606,7 +17631,7 @@ snapshots: dependencies: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 22.19.1 + '@types/node': 22.19.3 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 26.6.2 @@ -17614,21 +17639,21 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)): + jest@26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)): dependencies: - '@jest/core': 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + '@jest/core': 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) import-local: 3.2.0 - jest-cli: 26.6.3(ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5)) + jest-cli: 26.6.3(ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5)) transitivePeerDependencies: - bufferutil - canvas @@ -17650,7 +17675,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.14.1: + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -17708,7 +17733,7 @@ snapshots: http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.22 + nwsapi: 2.2.23 parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 @@ -17802,7 +17827,7 @@ snapshots: karma@6.4.4: dependencies: '@colors/colors': 1.5.0 - body-parser: 1.20.3 + body-parser: 1.20.4 braces: 3.0.3 chokidar: 3.6.0 connect: 3.7.0 @@ -17820,7 +17845,7 @@ snapshots: qjobs: 1.2.0 range-parser: 1.2.1 rimraf: 3.0.2 - socket.io: 4.8.1 + socket.io: 4.8.3 source-map: 0.6.1 tmp: 0.2.5 ua-parser-js: 0.7.41 @@ -17963,7 +17988,7 @@ snapshots: lmdb@3.2.6: dependencies: - msgpackr: 1.11.5 + msgpackr: 1.11.8 node-addon-api: 6.1.0 node-gyp-build-optional-packages: 5.2.2 ordered-binary: 1.6.0 @@ -18127,7 +18152,7 @@ snapshots: media-typer@0.3.0: {} - memfs@4.51.0: + memfs@4.51.1: dependencies: '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) @@ -18662,7 +18687,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 optional: true - msgpackr@1.11.5: + msgpackr@1.11.8: optionalDependencies: msgpackr-extract: 3.0.3 optional: true @@ -18744,7 +18769,7 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-forge@1.3.1: {} + node-forge@1.3.3: {} node-gyp-build-optional-packages@5.2.2: dependencies: @@ -18876,7 +18901,7 @@ snapshots: nullthrows@1.1.1: {} - nwsapi@2.2.22: {} + nwsapi@2.2.23: {} nyc@15.1.0: dependencies: @@ -18950,7 +18975,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 object.pick@1.3.0: @@ -18990,14 +19015,14 @@ snapshots: open@10.1.0: dependencies: - default-browser: 5.3.0 + default-browser: 5.4.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 3.1.0 open@10.2.0: dependencies: - default-browser: 5.3.0 + default-browser: 5.4.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 wsl-utils: 0.1.0 @@ -19218,10 +19243,10 @@ snapshots: pify@4.0.1: {} - pinia@3.0.4(typescript@5.8.3)(vue@3.5.24(typescript@5.8.3)): + pinia@3.0.4(typescript@5.8.3)(vue@3.5.26(typescript@5.8.3)): dependencies: - '@vue/devtools-api': 7.7.8 - vue: 3.5.24(typescript@5.8.3) + '@vue/devtools-api': 7.7.9 + vue: 3.5.26(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -19261,13 +19286,13 @@ snapshots: postcss: 8.5.6 ts-node: 10.9.2(@types/node@16.18.126)(typescript@5.4.5) - postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3)): + postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.8.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@types/node@22.19.1)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@22.19.3)(typescript@5.8.3) postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.7.3)(webpack@5.98.0(esbuild@0.25.4)): dependencies: @@ -19290,13 +19315,13 @@ snapshots: dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 postcss-modules-scope@3.2.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-modules-values@4.0.0(postcss@8.5.6): dependencies: @@ -19316,7 +19341,7 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.0: + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -19341,10 +19366,10 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.43.6): + prettier-plugin-svelte@3.4.1(prettier@3.5.3)(svelte@5.46.1): dependencies: prettier: 3.5.3 - svelte: 5.43.6 + svelte: 5.46.1 prettier@2.8.8: {} @@ -19422,7 +19447,7 @@ snapshots: qjobs@1.2.0: {} - qs@6.13.0: + qs@6.14.0: dependencies: side-channel: 1.1.0 @@ -19438,10 +19463,10 @@ snapshots: range-parser@1.2.1: {} - raw-body@2.5.2: + raw-body@2.5.3: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 unpipe: 1.0.0 @@ -19453,9 +19478,9 @@ snapshots: - bufferutil - utf-8-validate - react-dom@19.2.0(react@19.2.0): + react-dom@19.2.3(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 scheduler: 0.27.0 react-is@16.13.1: {} @@ -19524,13 +19549,13 @@ snapshots: - supports-color - utf-8-validate - react-redux@9.2.0(@types/react@19.2.4)(react@19.2.0)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 - react: 19.2.0 - use-sync-external-store: 1.6.0(react@19.2.0) + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: - '@types/react': 19.2.4 + '@types/react': 19.2.7 redux: 5.0.1 react-refresh@0.17.0: {} @@ -19554,7 +19579,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - react@19.2.0: {} + react@19.2.3: {} read-package-json-fast@4.0.0: dependencies: @@ -19577,7 +19602,7 @@ snapshots: read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 - js-yaml: 3.14.1 + js-yaml: 3.14.2 pify: 4.0.1 strip-bom: 3.0.0 @@ -19628,7 +19653,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -19774,25 +19799,25 @@ snapshots: ripemd-ts@0.0.2: {} - rollup-plugin-dts@6.2.3(rollup@4.53.2)(typescript@5.4.5): + rollup-plugin-dts@6.3.0(rollup@4.54.0)(typescript@5.4.5): dependencies: magic-string: 0.30.21 - rollup: 4.53.2 + rollup: 4.54.0 typescript: 5.4.5 optionalDependencies: '@babel/code-frame': 7.27.1 - rollup-plugin-polyfill-node@0.13.0(rollup@4.53.2): + rollup-plugin-polyfill-node@0.13.0(rollup@4.54.0): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.53.2) - rollup: 4.53.2 + '@rollup/plugin-inject': 5.0.5(rollup@4.54.0) + rollup: 4.54.0 - rollup-plugin-svelte@7.2.3(rollup@4.53.2)(svelte@5.43.6): + rollup-plugin-svelte@7.2.3(rollup@4.54.0)(svelte@5.46.1): dependencies: '@rollup/pluginutils': 4.2.1 resolve.exports: 2.0.3 - rollup: 4.53.2 - svelte: 5.43.6 + rollup: 4.54.0 + svelte: 5.46.1 rollup@4.34.8: dependencies: @@ -19819,32 +19844,32 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.8 fsevents: 2.3.3 - rollup@4.53.2: + rollup@4.54.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.2 - '@rollup/rollup-android-arm64': 4.53.2 - '@rollup/rollup-darwin-arm64': 4.53.2 - '@rollup/rollup-darwin-x64': 4.53.2 - '@rollup/rollup-freebsd-arm64': 4.53.2 - '@rollup/rollup-freebsd-x64': 4.53.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 - '@rollup/rollup-linux-arm-musleabihf': 4.53.2 - '@rollup/rollup-linux-arm64-gnu': 4.53.2 - '@rollup/rollup-linux-arm64-musl': 4.53.2 - '@rollup/rollup-linux-loong64-gnu': 4.53.2 - '@rollup/rollup-linux-ppc64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-musl': 4.53.2 - '@rollup/rollup-linux-s390x-gnu': 4.53.2 - '@rollup/rollup-linux-x64-gnu': 4.53.2 - '@rollup/rollup-linux-x64-musl': 4.53.2 - '@rollup/rollup-openharmony-arm64': 4.53.2 - '@rollup/rollup-win32-arm64-msvc': 4.53.2 - '@rollup/rollup-win32-ia32-msvc': 4.53.2 - '@rollup/rollup-win32-x64-gnu': 4.53.2 - '@rollup/rollup-win32-x64-msvc': 4.53.2 + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 rsvp@4.8.5: {} @@ -19925,7 +19950,7 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.5.1 - sass@1.94.0: + sass@1.97.1: dependencies: chokidar: 4.0.3 immutable: 5.1.4 @@ -19958,7 +19983,7 @@ snapshots: selfsigned@2.4.1: dependencies: '@types/node-forge': 1.3.14 - node-forge: 1.3.1 + node-forge: 1.3.3 semver@5.7.2: {} @@ -19968,21 +19993,21 @@ snapshots: semver@7.7.3: {} - send@0.19.0: + send@0.19.2: dependencies: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 2.0.0 + http-errors: 2.0.1 mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -20008,12 +20033,12 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@1.16.2: + serve-static@1.16.3: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.0 + send: 0.19.2 transitivePeerDependencies: - supports-color @@ -20179,31 +20204,31 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io-adapter@2.5.5: + socket.io-adapter@2.5.6: dependencies: - debug: 4.3.7 - ws: 8.17.1 + debug: 4.4.3 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - socket.io-parser@4.2.4: + socket.io-parser@4.2.5: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color - socket.io@4.8.1: + socket.io@4.8.3: dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 - debug: 4.3.7 - engine.io: 6.6.4 - socket.io-adapter: 2.5.5 - socket.io-parser: 4.2.4 + debug: 4.4.3 + engine.io: 6.6.5 + socket.io-adapter: 2.5.6 + socket.io-parser: 4.2.5 transitivePeerDependencies: - bufferutil - supports-color @@ -20337,7 +20362,7 @@ snapshots: statuses@1.5.0: {} - statuses@2.0.1: {} + statuses@2.0.2: {} stop-iteration-iterator@1.1.0: dependencies: @@ -20380,7 +20405,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -20394,7 +20419,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 string.prototype.trim@1.2.10: dependencies: @@ -20402,7 +20427,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -20457,7 +20482,7 @@ snapshots: sudo-prompt@9.2.1: {} - superjson@2.2.5: + superjson@2.2.6: dependencies: copy-anything: 4.0.5 @@ -20480,64 +20505,65 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.43.6)(typescript@5.4.5): + svelte-check@4.3.5(picomatch@4.0.3)(svelte@5.46.1)(typescript@5.4.5): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.43.6 + svelte: 5.46.1 typescript: 5.4.5 transitivePeerDependencies: - picomatch - svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.43.6)(typescript@5.8.3): + svelte-check@4.3.5(picomatch@4.0.3)(svelte@5.46.1)(typescript@5.8.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.43.6 + svelte: 5.46.1 typescript: 5.8.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.4.0(svelte@5.43.6): + svelte-eslint-parser@1.4.1(svelte@5.46.1): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 postcss: 8.5.6 postcss-scss: 4.0.9(postcss@8.5.6) - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 optionalDependencies: - svelte: 5.43.6 + svelte: 5.46.1 - svelte-preprocess@6.0.3(@babel/core@7.28.5)(less@4.2.2)(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)))(postcss@8.5.6)(sass@1.94.0)(svelte@5.43.6)(typescript@5.4.5): + svelte-preprocess@6.0.3(@babel/core@7.28.5)(less@4.2.2)(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)))(postcss@8.5.6)(sass@1.97.1)(svelte@5.46.1)(typescript@5.4.5): dependencies: - svelte: 5.43.6 + svelte: 5.46.1 optionalDependencies: '@babel/core': 7.28.5 less: 4.2.2 postcss: 8.5.6 postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@16.18.126)(typescript@5.4.5)) - sass: 1.94.0 + sass: 1.97.1 typescript: 5.4.5 - svelte@5.43.6: + svelte@5.46.1: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) '@types/estree': 1.0.8 acorn: 8.15.0 aria-query: 5.3.2 axobject-query: 4.1.0 clsx: 2.1.1 + devalue: 5.6.1 esm-env: 1.2.2 - esrap: 2.1.2 + esrap: 2.2.1 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -20559,7 +20585,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@4.1.17: {} + tailwindcss@4.1.18: {} tapable@2.3.0: {} @@ -20596,7 +20622,7 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.14(esbuild@0.25.4)(webpack@5.98.0): + terser-webpack-plugin@5.3.16(esbuild@0.25.4)(webpack@5.98.0): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 @@ -20726,14 +20752,14 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@22.19.1)(typescript@4.9.5): + ts-node@10.9.2(@types/node@22.19.3)(typescript@4.9.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.19.1 + '@types/node': 22.19.3 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -20745,14 +20771,14 @@ snapshots: yn: 3.1.1 optional: true - ts-node@10.9.2(@types/node@22.19.1)(typescript@5.8.3): + ts-node@10.9.2(@types/node@22.19.3)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.19.1 + '@types/node': 22.19.3 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -20781,32 +20807,32 @@ snapshots: transitivePeerDependencies: - supports-color - turbo-darwin-64@2.6.1: + turbo-darwin-64@2.7.2: optional: true - turbo-darwin-arm64@2.6.1: + turbo-darwin-arm64@2.7.2: optional: true - turbo-linux-64@2.6.1: + turbo-linux-64@2.7.2: optional: true - turbo-linux-arm64@2.6.1: + turbo-linux-arm64@2.7.2: optional: true - turbo-windows-64@2.6.1: + turbo-windows-64@2.7.2: optional: true - turbo-windows-arm64@2.6.1: + turbo-windows-arm64@2.7.2: optional: true - turbo@2.6.1: + turbo@2.7.2: optionalDependencies: - turbo-darwin-64: 2.6.1 - turbo-darwin-arm64: 2.6.1 - turbo-linux-64: 2.6.1 - turbo-linux-arm64: 2.6.1 - turbo-windows-64: 2.6.1 - turbo-windows-arm64: 2.6.1 + turbo-darwin-64: 2.7.2 + turbo-darwin-arm64: 2.7.2 + turbo-linux-64: 2.7.2 + turbo-linux-arm64: 2.7.2 + turbo-windows-64: 2.7.2 + turbo-windows-arm64: 2.7.2 type-check@0.4.0: dependencies: @@ -20868,33 +20894,33 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typedoc@0.28.14(typescript@5.4.5): + typedoc@0.28.15(typescript@5.4.5): dependencies: - '@gerrit0/mini-shiki': 3.15.0 + '@gerrit0/mini-shiki': 3.20.0 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 typescript: 5.4.5 - yaml: 2.8.1 + yaml: 2.8.2 - typescript-eslint@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5): + typescript-eslint@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/parser': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.4.5) - '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.4.5) - eslint: 9.39.1(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.4.5) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.4.5) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.4.5 transitivePeerDependencies: - supports-color - typescript-eslint@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3): + typescript-eslint@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/parser': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.8.3) - '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.8.3) - eslint: 9.39.1(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.8.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -20966,9 +20992,9 @@ snapshots: has-value: 0.3.1 isobject: 3.0.1 - update-browserslist-db@1.1.4(browserslist@4.28.0): + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: - browserslist: 4.28.0 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -20987,9 +21013,9 @@ snapshots: dependencies: react: 18.1.0 - use-sync-external-store@1.6.0(react@19.2.0): + use-sync-external-store@1.6.0(react@19.2.3): dependencies: - react: 19.2.0 + react: 19.2.3 use@3.1.1: {} @@ -21018,43 +21044,43 @@ snapshots: vary@1.1.2: {} - vite-hot-client@2.1.0(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)): + vite-hot-client@2.1.0(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): dependencies: - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) - vite-plugin-inspect@0.8.9(rollup@4.53.2)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)): + vite-plugin-inspect@0.8.9(rollup@4.54.0)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.3.0(rollup@4.53.2) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) debug: 4.4.3 error-stack-parser-es: 0.1.5 - fs-extra: 11.3.2 + fs-extra: 11.3.3 open: 10.2.0 perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.2 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-devtools@7.7.8(rollup@4.53.2)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.8.3)): + vite-plugin-vue-devtools@7.7.9(rollup@4.54.0)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.8.3)): dependencies: - '@vue/devtools-core': 7.7.8(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.24(typescript@5.8.3)) - '@vue/devtools-kit': 7.7.8 - '@vue/devtools-shared': 7.7.8 - execa: 9.6.0 + '@vue/devtools-core': 7.7.9(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.8.3)) + '@vue/devtools-kit': 7.7.9 + '@vue/devtools-shared': 7.7.9 + execa: 9.6.1 sirv: 3.0.2 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) - vite-plugin-inspect: 0.8.9(rollup@4.53.2)(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) - vite-plugin-vue-inspector: 5.3.2(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) + vite-plugin-inspect: 0.8.9(rollup@4.54.0)(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) + vite-plugin-vue-inspector: 5.3.2(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.2(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)): + vite-plugin-vue-inspector@5.3.2(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): dependencies: '@babel/core': 7.28.5 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5) @@ -21062,52 +21088,52 @@ snapshots: '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5) - '@vue/compiler-dom': 3.5.24 + '@vue/compiler-dom': 3.5.26 kolorist: 1.8.0 magic-string: 0.30.21 - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) transitivePeerDependencies: - supports-color - vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.1): + vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.2 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 fsevents: 2.3.3 jiti: 2.6.1 less: 4.2.2 lightningcss: 1.30.2 sass: 1.85.0 terser: 5.39.0 - yaml: 2.8.1 + yaml: 2.8.2 - vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1): + vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.2 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.3 fsevents: 2.3.3 jiti: 2.6.1 less: 4.2.2 lightningcss: 1.30.2 - sass: 1.94.0 + sass: 1.97.1 terser: 5.44.1 - yaml: 2.8.1 + yaml: 2.8.2 - vitefu@1.1.1(vite@6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1)): + vitefu@1.1.1(vite@6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2)): optionalDependencies: - vite: 6.4.1(@types/node@22.19.1)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.94.0)(terser@5.44.1)(yaml@2.8.1) + vite: 6.4.1(@types/node@22.19.3)(jiti@2.6.1)(less@4.2.2)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(yaml@2.8.2) vlq@1.0.1: {} @@ -21115,10 +21141,10 @@ snapshots: vscode-uri@3.1.0: {} - vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1)): + vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -21133,13 +21159,13 @@ snapshots: '@vue/language-core': 2.2.12(typescript@5.8.3) typescript: 5.8.3 - vue@3.5.24(typescript@5.8.3): + vue@3.5.26(typescript@5.8.3): dependencies: - '@vue/compiler-dom': 3.5.24 - '@vue/compiler-sfc': 3.5.24 - '@vue/runtime-dom': 3.5.24 - '@vue/server-renderer': 3.5.24(vue@3.5.24(typescript@5.8.3)) - '@vue/shared': 3.5.24 + '@vue/compiler-dom': 3.5.26 + '@vue/compiler-sfc': 3.5.26 + '@vue/runtime-dom': 3.5.26 + '@vue/server-renderer': 3.5.26(vue@3.5.26(typescript@5.8.3)) + '@vue/shared': 3.5.26 optionalDependencies: typescript: 5.8.3 @@ -21160,7 +21186,7 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - watchpack@2.4.4: + watchpack@2.5.0: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 @@ -21178,9 +21204,9 @@ snapshots: webcrypto-core@1.8.1: dependencies: - '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-schema': 2.6.0 '@peculiar/json-schema': 1.1.12 - asn1js: 3.0.6 + asn1js: 3.0.7 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -21193,7 +21219,7 @@ snapshots: webpack-dev-middleware@7.4.2(webpack@5.98.0): dependencies: colorette: 2.0.20 - memfs: 4.51.0 + memfs: 4.51.1 mime-types: 2.1.35 on-finished: 2.4.1 range-parser: 1.2.1 @@ -21217,10 +21243,10 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.21.2 + express: 4.22.1 graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) - ipaddr.js: 2.2.0 + ipaddr.js: 2.3.0 launch-editor: 2.12.0 open: 10.1.0 p-retry: 6.2.1 @@ -21260,9 +21286,9 @@ snapshots: '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 - browserslist: 4.28.0 + browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.18.4 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -21274,8 +21300,8 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.14(esbuild@0.25.4)(webpack@5.98.0) - watchpack: 2.4.4 + terser-webpack-plugin: 5.3.16(esbuild@0.25.4)(webpack@5.98.0) + watchpack: 2.5.0 webpack-sources: 3.3.3 transitivePeerDependencies: - '@swc/core' @@ -21415,8 +21441,6 @@ snapshots: ws@7.5.10: {} - ws@8.17.1: {} - ws@8.18.3: {} wsl-utils@0.1.0: @@ -21443,7 +21467,7 @@ snapshots: yaml@1.10.2: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yargs-parser@18.1.3: dependencies: diff --git a/tsconfig.json b/tsconfig.json index 73d8879..1947adb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,6 +17,9 @@ "@proton/web-sdk": [ "proton-web-sdk" ], + "@proton/web-renderer": [ + "proton-web-renderer" + ], }, "downlevelIteration": true, "declaration": true, diff --git a/turbo.json b/turbo.json index 82081d3..a13f10c 100644 --- a/turbo.json +++ b/turbo.json @@ -2,8 +2,13 @@ "$schema": "https://turborepo.org/schema.json", "tasks": { "build": { - "dependsOn": ["^build"], - "outputs": ["dist/**", "lib/**"] + "dependsOn": [ + "^build" + ], + "outputs": [ + "dist/**", + "lib/**" + ] }, "lint": { "outputs": [] @@ -11,8 +16,13 @@ "dev": { "cache": false }, + "watch": { + "cache": false + }, "deployprod": { - "dependsOn": ["build"] + "dependsOn": [ + "build" + ] } } } \ No newline at end of file