submitJob(Job job, TbCallback finishCallback);
+
void cancelJob(TenantId tenantId, JobId jobId);
void reprocessJob(TenantId tenantId, JobId jobId);
diff --git a/ui-ngx/package.json b/ui-ngx/package.json
index 6867a6c952..ab15b2e7fe 100644
--- a/ui-ngx/package.json
+++ b/ui-ngx/package.json
@@ -94,11 +94,11 @@
},
"devDependencies": {
"@angular-builders/custom-esbuild": "20.0.0",
- "@angular-devkit/build-angular": "20.3.15",
- "@angular-devkit/core": "20.3.15",
- "@angular-devkit/schematics": "20.3.15",
- "@angular/build": "20.3.15",
- "@angular/cli": "20.3.15",
+ "@angular-devkit/build-angular": "20.3.16",
+ "@angular-devkit/core": "20.3.16",
+ "@angular-devkit/schematics": "20.3.16",
+ "@angular/build": "20.3.16",
+ "@angular/cli": "20.3.16",
"@angular/compiler-cli": "20.3.16",
"@angular/language-service": "20.3.16",
"@types/ace-diff": "^2.1.4",
@@ -121,7 +121,7 @@
"angular-eslint": "~20.7.0",
"autoprefixer": "^10.4.23",
"directory-tree": "^3.5.2",
- "eslint": "~9.39.2",
+ "eslint": "9.39.3",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsdoc": "^62.4.1",
"eslint-plugin-prefer-arrow": "^1.2.3",
@@ -139,6 +139,9 @@
"ace-builds": "1.43.6",
"tinymce": "6.8.6",
"@babel/core": "7.28.3",
- "esbuild": "0.25.9"
+ "esbuild": "0.25.9",
+ "rollup": "4.52.3",
+ "jquery.terminal/**/form-data": ">=4.0.4",
+ "js-beautify/**/minimatch": "^9.0.6"
}
}
diff --git a/ui-ngx/patches/@angular+build+20.3.15.patch b/ui-ngx/patches/@angular+build+20.3.16.patch
similarity index 99%
rename from ui-ngx/patches/@angular+build+20.3.15.patch
rename to ui-ngx/patches/@angular+build+20.3.16.patch
index 1931d8d2b1..6c88eb6de2 100644
--- a/ui-ngx/patches/@angular+build+20.3.15.patch
+++ b/ui-ngx/patches/@angular+build+20.3.16.patch
@@ -12,7 +12,7 @@ index 53168ea..f07c80a 100755
// remove important annotations, such as /* @__PURE__ */ and comments like /* vite-ignore */.
removeComments: false,
diff --git a/node_modules/@angular/build/src/tools/esbuild/angular/compiler-plugin.js b/node_modules/@angular/build/src/tools/esbuild/angular/compiler-plugin.js
-index ee68408..ac15cbf 100755
+index ee68408..2667b84 100755
--- a/node_modules/@angular/build/src/tools/esbuild/angular/compiler-plugin.js
+++ b/node_modules/@angular/build/src/tools/esbuild/angular/compiler-plugin.js
@@ -90,7 +90,7 @@ function createCompilerPlugin(pluginOptions, compilationOrFactory, stylesheetBun
diff --git a/ui-ngx/patches/@iplab+ngx-color-picker+20.0.0.patch b/ui-ngx/patches/@iplab+ngx-color-picker+20.0.0.patch
index 211a3c8b0b..b0087a67e9 100644
--- a/ui-ngx/patches/@iplab+ngx-color-picker+20.0.0.patch
+++ b/ui-ngx/patches/@iplab+ngx-color-picker+20.0.0.patch
@@ -1,46 +1,13 @@
diff --git a/node_modules/@iplab/ngx-color-picker/fesm2022/iplab-ngx-color-picker.mjs b/node_modules/@iplab/ngx-color-picker/fesm2022/iplab-ngx-color-picker.mjs
-index a372799..a3d709a 100644
+index a372799..f64a6f8 100644
--- a/node_modules/@iplab/ngx-color-picker/fesm2022/iplab-ngx-color-picker.mjs
+++ b/node_modules/@iplab/ngx-color-picker/fesm2022/iplab-ngx-color-picker.mjs
-@@ -1129,11 +1129,11 @@ class RgbaComponent {
- this.color.set(newColor);
+@@ -516,7 +516,7 @@ class Color {
+ const s = (color.saturation / 100) * (l <= 1 ? l : 2 - l);
+ const value = (l + s) / 2;
+ const saturation = (2 * s) / (l + s) || 0;
+- return new Hsva(hue, saturation, value, color.alpha);
++ return new Hsva(hue, saturation * 100, value * 100, color.alpha);
}
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: RgbaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
-- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: RgbaComponent, isStandalone: true, selector: "rgba-input-component", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, labelVisible: { classPropertyName: "labelVisible", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isAlphaVisible: { classPropertyName: "isAlphaVisible", publicName: "alpha", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange" }, ngImport: i0, template: "\r\n \r\n @if (labelVisible()) {\r\n R\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n G\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n B\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n", ""], dependencies: [{ kind: "directive", type: ColorPickerInputDirective, selector: "[inputChange]", inputs: ["min", "max"], outputs: ["inputChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
-+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: RgbaComponent, isStandalone: true, selector: "rgba-input-component", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, labelVisible: { classPropertyName: "labelVisible", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isAlphaVisible: { classPropertyName: "isAlphaVisible", publicName: "alpha", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange" }, ngImport: i0, template: "\r\n \r\n @if (labelVisible()) {\r\n R\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n G\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n B\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n", ""], dependencies: [{ kind: "directive", type: ColorPickerInputDirective, selector: "[inputChange]", inputs: ["min", "max"], outputs: ["inputChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
- }
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: RgbaComponent, decorators: [{
- type: Component,
-- args: [{ selector: `rgba-input-component`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ColorPickerInputDirective], template: "\r\n \r\n @if (labelVisible()) {\r\n R\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n G\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n B\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n"] }]
-+ args: [{ selector: `rgba-input-component`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ColorPickerInputDirective], template: "\r\n \r\n @if (labelVisible()) {\r\n R\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n G\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n B\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n"] }]
- }] });
-
- class HslaComponent {
-@@ -1155,11 +1155,11 @@ class HslaComponent {
- this.color.set(newColor);
- }
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: HslaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
-- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: HslaComponent, isStandalone: true, selector: "hsla-input-component", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, labelVisible: { classPropertyName: "labelVisible", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isAlphaVisible: { classPropertyName: "isAlphaVisible", publicName: "alpha", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange" }, ngImport: i0, template: "\r\n \r\n @if (labelVisible()) {\r\n H\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n S\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n L\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n", ""], dependencies: [{ kind: "directive", type: ColorPickerInputDirective, selector: "[inputChange]", inputs: ["min", "max"], outputs: ["inputChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
-+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: HslaComponent, isStandalone: true, selector: "hsla-input-component", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, labelVisible: { classPropertyName: "labelVisible", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isAlphaVisible: { classPropertyName: "isAlphaVisible", publicName: "alpha", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange" }, ngImport: i0, template: "\r\n \r\n @if (labelVisible()) {\r\n H\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n S\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n L\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n", ""], dependencies: [{ kind: "directive", type: ColorPickerInputDirective, selector: "[inputChange]", inputs: ["min", "max"], outputs: ["inputChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
- }
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: HslaComponent, decorators: [{
- type: Component,
-- args: [{ selector: `hsla-input-component`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ColorPickerInputDirective], template: "\r\n \r\n @if (labelVisible()) {\r\n H\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n S\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n L\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n"] }]
-+ args: [{ selector: `hsla-input-component`, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ColorPickerInputDirective], template: "\r\n \r\n @if (labelVisible()) {\r\n H\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n S\r\n }\r\n
\r\n\r\n \r\n @if (labelVisible()) {\r\n L\r\n }\r\n
\r\n@if (isAlphaVisible()) {\r\n \r\n \r\n @if (labelVisible()) {\r\n A\r\n }\r\n
\r\n}", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n"] }]
- }] });
-
- class HexComponent {
-@@ -1190,11 +1190,11 @@ class HexComponent {
- }
- }
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: HexComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
-- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: HexComponent, isStandalone: true, selector: "hex-input-component", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, labelVisible: { classPropertyName: "labelVisible", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, prefixValue: { classPropertyName: "prefixValue", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange" }, ngImport: i0, template: "\r\n \r\n @if (labelVisible()) {\r\n HEX\r\n }\r\n
", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n", ""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
-+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.4", type: HexComponent, isStandalone: true, selector: "hex-input-component", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, labelVisible: { classPropertyName: "labelVisible", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, prefixValue: { classPropertyName: "prefixValue", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { color: "colorChange" }, ngImport: i0, template: "\r\n \r\n @if (labelVisible()) {\r\n HEX\r\n }\r\n
", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n", ""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
- }
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: HexComponent, decorators: [{
- type: Component,
-- args: [{ selector: `hex-input-component`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "\r\n \r\n @if (labelVisible()) {\r\n HEX\r\n }\r\n
", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n"] }]
-+ args: [{ selector: `hex-input-component`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "\r\n \r\n @if (labelVisible()) {\r\n HEX\r\n }\r\n
", styles: [":host,:host ::ng-deep *{padding:0;margin:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}\n", ":host{display:table;width:100%;text-align:center;color:#b4b4b4;font-size:11px}.column{display:table-cell;padding:0 2px}input{width:100%;border:1px solid rgb(218,218,218);color:#272727;text-align:center;font-size:12px;-webkit-appearance:none;border-radius:0;margin:0 0 6px;height:26px;outline:none}\n"] }]
- }] });
-
- const OpacityAnimation = trigger('opacityAnimation', [
+ rgbaToHsva(color) {
+ const red = color.red / 255;
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/bar-chart-with-labels-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/bar-chart-with-labels-basic-config.component.ts
index 9204a901b2..d569bcf37b 100644
--- a/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/bar-chart-with-labels-basic-config.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/bar-chart-with-labels-basic-config.component.ts
@@ -45,7 +45,10 @@ import {
barChartWithLabelsDefaultSettings,
BarChartWithLabelsWidgetSettings
} from '@home/components/widget/lib/chart/bar-chart-with-labels-widget.models';
-import { TimeSeriesChartType } from '@home/components/widget/lib/chart/time-series-chart.models';
+import {
+ TimeSeriesChartType,
+ updateLatestDataKeys
+} from '@home/components/widget/lib/chart/time-series-chart.models';
import { getSourceTbUnitSymbol } from '@shared/models/unit.models';
@Component({
@@ -76,7 +79,7 @@ export class BarChartWithLabelsBasicConfigComponent extends BasicWidgetConfigCom
tooltipDatePreviewFn = this._tooltipDatePreviewFn.bind(this);
predefinedValues = widgetTitleAutocompleteValues;
-
+
constructor(protected store: Store,
protected widgetConfigComponent: WidgetConfigComponent,
private $injector: Injector,
@@ -167,6 +170,11 @@ export class BarChartWithLabelsBasicConfigComponent extends BasicWidgetConfigCom
});
}
+ protected onConfigChanged(widgetConfig: WidgetConfigComponentData) {
+ updateLatestDataKeys([widgetConfig.config.settings.yAxis], this.datasource, this.callbacks);
+ super.onConfigChanged(widgetConfig);
+ }
+
protected prepareOutputConfig(config: any): WidgetConfigComponentData {
setTimewindowConfig(this.widgetConfig.config, config.timewindowConfig);
this.widgetConfig.config.datasources = config.datasources;
diff --git a/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/range-chart-basic-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/range-chart-basic-config.component.ts
index 0527045650..95dbabfbfc 100644
--- a/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/range-chart-basic-config.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/config/basic/chart/range-chart-basic-config.component.ts
@@ -47,7 +47,7 @@ import {
} from '@home/components/widget/lib/chart/range-chart-widget.models';
import {
lineSeriesStepTypes,
- lineSeriesStepTypeTranslations
+ lineSeriesStepTypeTranslations, updateLatestDataKeys
} from '@home/components/widget/lib/chart/time-series-chart.models';
import {
chartLabelPositions,
@@ -289,6 +289,11 @@ export class RangeChartBasicConfigComponent extends BasicWidgetConfigComponent {
return this.widgetConfig;
}
+ protected onConfigChanged(widgetConfig: WidgetConfigComponentData) {
+ updateLatestDataKeys([widgetConfig.config.settings.yAxis], this.datasource, this.callbacks);
+ super.onConfigChanged(widgetConfig);
+ }
+
protected validatorTriggers(): string[] {
return ['showTitle', 'showIcon', 'showRangeThresholds', 'fillArea', 'showLine',
'step', 'showPointLabel', 'enablePointLabelBackground', 'showLegend', 'showTooltip', 'tooltipShowDate'];
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/chart/bar-chart-with-labels-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/chart/bar-chart-with-labels-widget.component.ts
index 1f63cd8638..0287b775c3 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/chart/bar-chart-with-labels-widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/chart/bar-chart-with-labels-widget.component.ts
@@ -134,6 +134,12 @@ export class BarChartWithLabelsWidgetComponent implements OnInit, OnDestroy, Aft
}
}
+ public onLatestDataUpdated() {
+ if (this.timeSeriesChart) {
+ this.timeSeriesChart.latestUpdated();
+ }
+ }
+
public onLegendKeyEnter(key: DataKey) {
this.timeSeriesChart.keyEnter(key);
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/chart/range-chart-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/chart/range-chart-widget.component.ts
index 2412d51a83..4ad45c85a2 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/chart/range-chart-widget.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/chart/range-chart-widget.component.ts
@@ -162,6 +162,12 @@ export class RangeChartWidgetComponent implements OnInit, OnDestroy, AfterViewIn
}
}
+ public onLatestDataUpdated() {
+ if (this.timeSeriesChart) {
+ this.timeSeriesChart.latestUpdated();
+ }
+ }
+
public toggleRangeItem(item: RangeItem) {
item.enabled = !item.enabled;
this.timeSeriesChart.toggleVisualMapRange(item.index);
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.models.ts
index 4816852768..e815eefe11 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.models.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.models.ts
@@ -99,6 +99,8 @@ import {
TimeSeriesChartTooltipWidgetSettings
} from '@home/components/widget/lib/chart/time-series-chart-tooltip.models';
import { TbUnit, TbUnitConverter } from '@shared/models/unit.models';
+import { DataKeyType } from '@shared/models/telemetry/telemetry.models';
+import { DataKeysCallbacks } from '@home/components/widget/lib/settings/common/key/data-keys.component.models';
type TimeSeriesChartDataEntry = [number, any, number, number];
@@ -1495,3 +1497,101 @@ const createSeriesLabelOption = (item: TimeSeriesChartDataItem, show: boolean,
}
return labelOption;
};
+
+export const checkLatestDataKeys = (yAxes: TimeSeriesChartYAxes, datasource: Datasource): TimeSeriesChartYAxes => {
+ const latestKeys = datasource?.latestDataKeys || [];
+ const result: TimeSeriesChartYAxes = {};
+
+ for (const [id, axis] of Object.entries(yAxes)) {
+ axis.min = normalizeAxisLimit(axis.min);
+ axis.max = normalizeAxisLimit(axis.max);
+ const minCfg = axis.min;
+ const maxCfg = axis.max;
+
+ const minValid = !!minCfg && (
+ minCfg.type !== ValueSourceType.latestKey ||
+ latestKeys.some(k => isYAxisKey(k, minCfg))
+ );
+
+ const maxValid = !!maxCfg && (
+ maxCfg.type !== ValueSourceType.latestKey ||
+ latestKeys.some(k => isYAxisKey(k, maxCfg))
+ );
+
+ if (minValid && maxValid) {
+ result[id] = axis;
+ }
+ }
+
+ return result;
+}
+
+export const updateLatestDataKeys = (yAxes: TimeSeriesChartYAxisSettings[], datasource: Datasource, dataKeyCallbacks: DataKeysCallbacks)=> {
+ if (datasource) {
+ let latestKeys = datasource.latestDataKeys;
+ if (!latestKeys) {
+ latestKeys = [];
+ datasource.latestDataKeys = latestKeys;
+ }
+ const existingYAxisKeys = latestKeys.filter(k => k.settings?.__yAxisMinKey === true || k.settings?.__yAxisMaxKey === true);
+ const foundYAxisKeys: DataKey[] = [];
+
+ for(const yAxis of yAxes) {
+ const min = yAxis.min as ValueSourceConfig;
+ const max = yAxis.max as ValueSourceConfig;
+ if (min && min.type === ValueSourceType.latestKey) {
+ const found = existingYAxisKeys.find(k => isYAxisKey(k, min));
+ if (!found) {
+ const newKey = dataKeyCallbacks.generateDataKey(min.latestKey, min.latestKeyType,
+ null, true, null);
+ newKey.settings.__yAxisMinKey = true;
+ latestKeys.push(newKey);
+ } else if (foundYAxisKeys.indexOf(found) === -1) {
+ foundYAxisKeys.push(found);
+ }
+ }
+ if (max && max.type === ValueSourceType.latestKey) {
+ const found = existingYAxisKeys.find(k => isYAxisKey(k, max));
+ if (!found) {
+ const newKey = dataKeyCallbacks.generateDataKey(max.latestKey, max.latestKeyType,
+ null, true, null);
+ newKey.settings.__yAxisMaxKey = true;
+ latestKeys.push(newKey);
+ } else if (foundYAxisKeys.indexOf(found) === -1) {
+ foundYAxisKeys.push(found);
+ }
+ }
+ }
+ const toRemove = existingYAxisKeys.filter(k => foundYAxisKeys.indexOf(k) === -1);
+ for (const key of toRemove) {
+ const index = latestKeys.indexOf(key);
+ if (index > -1) {
+ latestKeys.splice(index, 1);
+ }
+ }
+ }
+}
+
+export const isYAxisKey = (d: DataKey, limit: ValueSourceConfig): boolean => {
+ return (d.type === DataKeyType.function && d.label === limit.latestKey) ||
+ (d.type !== DataKeyType.function && d.name === limit.latestKey &&
+ d.type === limit.latestKeyType);
+}
+
+export const normalizeAxisLimit = (limit: string | number | ValueSourceConfig): ValueSourceConfig => {
+ if (!limit) {
+ return {
+ type: ValueSourceType.constant,
+ value: null,
+ entityAlias: null
+ };
+ } else if (typeof limit === 'number' || typeof limit === 'string') {
+ return {
+ type: ValueSourceType.constant,
+ value: Number(limit),
+ entityAlias: null
+ };
+ }
+ return limit;
+}
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.ts b/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.ts
index 21f5f2d68c..d1928d75f0 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/chart/time-series-chart.ts
@@ -23,7 +23,7 @@ import {
createTimeSeriesYAxis,
defaultTimeSeriesChartYAxisSettings,
generateChartData,
- LineSeriesStepType,
+ LineSeriesStepType, normalizeAxisLimit,
parseThresholdData,
TimeSeriesChartAxis,
TimeSeriesChartDataItem,
@@ -581,8 +581,8 @@ export class TbTimeSeriesChart {
yAxisSettingsList.sort((a1, a2) => a1.order - a2.order);
const axisLimitDatasources: Datasource[] = [];
for (const yAxisSettings of yAxisSettingsList) {
- yAxisSettings.min = this.normalizeAxisLimit(yAxisSettings.min);
- yAxisSettings.max = this.normalizeAxisLimit(yAxisSettings.max);
+ yAxisSettings.min = normalizeAxisLimit(yAxisSettings.min);
+ yAxisSettings.max = normalizeAxisLimit(yAxisSettings.max);
const axisSettings = mergeDeep({} as TimeSeriesChartYAxisSettings,
defaultTimeSeriesChartYAxisSettings, yAxisSettings);
const units = isNotEmptyTbUnits(axisSettings.units) ? axisSettings.units : this.ctx.units;
@@ -1080,21 +1080,4 @@ export class TbTimeSeriesChart {
this.timeSeriesChart.setOption(this.timeSeriesChartOptions);
}
}
-
- private normalizeAxisLimit(limit: string | number | ValueSourceConfig): string | number | ValueSourceConfig {
- if (!limit) {
- return {
- type: ValueSourceType.constant,
- value: null,
- entityAlias: null
- };
- } else if (typeof limit === 'number' || typeof limit === 'string') {
- return {
- type: ValueSourceType.constant,
- value: Number(limit),
- entityAlias: null
- };
- }
- return limit;
- }
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/bar-chart-with-labels-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/bar-chart-with-labels-widget-settings.component.ts
index 6290572770..55ed3d5035 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/bar-chart-with-labels-widget-settings.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/bar-chart-with-labels-widget-settings.component.ts
@@ -31,6 +31,7 @@ import {
barChartWithLabelsDefaultSettings
} from '@home/components/widget/lib/chart/bar-chart-with-labels-widget.models';
import { getSourceTbUnitSymbol } from '@shared/models/unit.models';
+import { updateLatestDataKeys } from '@home/components/widget/lib/chart/time-series-chart.models';
@Component({
selector: 'tb-bar-chart-with-labels-widget-settings',
@@ -123,6 +124,11 @@ export class BarChartWithLabelsWidgetSettingsComponent extends WidgetSettingsCom
});
}
+ protected onSettingsChanged(updated: WidgetSettings) {
+ updateLatestDataKeys([updated.yAxis], this.datasource, this.dataKeyCallbacks);
+ super.onSettingsChanged(updated);
+ }
+
protected validatorTriggers(): string[] {
return ['showBarLabel', 'showBarValue', 'showBarBorder', 'showLegend', 'showTooltip', 'tooltipShowDate'];
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/range-chart-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/range-chart-widget-settings.component.ts
index 703c621d62..053b6858bc 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/range-chart-widget-settings.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/chart/range-chart-widget-settings.component.ts
@@ -30,7 +30,7 @@ import { rangeChartDefaultSettings } from '@home/components/widget/lib/chart/ran
import { DateFormatProcessor, DateFormatSettings } from '@shared/models/widget-settings.models';
import {
lineSeriesStepTypes,
- lineSeriesStepTypeTranslations
+ lineSeriesStepTypeTranslations, updateLatestDataKeys
} from '@home/components/widget/lib/chart/time-series-chart.models';
import {
chartLabelPositions,
@@ -269,6 +269,11 @@ export class RangeChartWidgetSettingsComponent extends WidgetSettingsComponent {
}
}
+ protected onSettingsChanged(updated: WidgetSettings) {
+ updateLatestDataKeys([updated.yAxis], this.datasource, this.dataKeyCallbacks);
+ super.onSettingsChanged(updated);
+ }
+
private _pointLabelPreviewFn(): string {
const units = getSourceTbUnitSymbol(this.widgetConfig.config.units);
const decimals: number = this.widgetConfig.config.decimals;
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/axis-scale-row.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/axis-scale-row.component.ts
index 24037f2170..914eb0abb2 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/axis-scale-row.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/axis-scale-row.component.ts
@@ -97,7 +97,7 @@ export class AxisScaleRowComponent implements ControlValueAccessor, OnInit, Vali
this.limitForm = this.fb.group({
type: [ValueSourceType.constant],
value: [null],
- entityAlias: [null]
+ entityAlias: [null, [Validators.required]]
});
this.latestKeyFormControl = this.fb.control(null, [Validators.required]);
this.entityKeyFormControl = this.fb.control(null, [Validators.required]);
@@ -169,23 +169,24 @@ export class AxisScaleRowComponent implements ControlValueAccessor, OnInit, Vali
}
private updateValidators() {
- const axisTypeControl = this.limitForm.get('type');
- if (axisTypeControl && this.entityKeyFormControl && this.latestKeyFormControl) {
- const type = axisTypeControl.value;
- if (type === ValueSourceType.latestKey) {
- this.latestKeyFormControl.setValidators([Validators.required]);
- this.entityKeyFormControl.clearValidators();
- } else if (type === ValueSourceType.entity) {
- this.latestKeyFormControl.clearValidators();
- this.limitForm.get('entityAlias').setValidators([Validators.required]);
- this.entityKeyFormControl.setValidators([Validators.required]);
- } else {
- this.latestKeyFormControl.clearValidators();
- this.entityKeyFormControl.clearValidators();
- }
- this.latestKeyFormControl.updateValueAndValidity({ emitEvent: false });
- this.entityKeyFormControl.updateValueAndValidity({ emitEvent: false });
- }
+ const type = this.limitForm.get('type')?.value;
+ const entityAliasCtr = this.limitForm.get('entityAlias');
+
+ const isLatestKey = type === ValueSourceType.latestKey;
+ const isEntity = type === ValueSourceType.entity;
+
+ isLatestKey ? this.latestKeyFormControl.enable({ emitEvent: false })
+ : this.latestKeyFormControl.disable({ emitEvent: false });
+
+ isEntity ? this.entityKeyFormControl.enable({ emitEvent: false })
+ : this.entityKeyFormControl.disable({ emitEvent: false });
+
+ isEntity ? entityAliasCtr.enable({ emitEvent: false })
+ : entityAliasCtr.disable({ emitEvent: false });
+
+ this.latestKeyFormControl.updateValueAndValidity({ emitEvent: false });
+ this.entityKeyFormControl.updateValueAndValidity({ emitEvent: false });
+ entityAliasCtr.updateValueAndValidity({ emitEvent: false });
}
private updateModel() {
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-axis-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-axis-settings.component.ts
index db0f8534a9..2f23666574 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-axis-settings.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-axis-settings.component.ts
@@ -25,7 +25,7 @@ import {
Validators
} from '@angular/forms';
import {
- AxisPosition, defaultXAxisTicksFormat,
+ AxisPosition, defaultXAxisTicksFormat, normalizeAxisLimit,
timeSeriesAxisPositionTranslations,
TimeSeriesChartAxisSettings, TimeSeriesChartXAxisSettings,
TimeSeriesChartYAxisSettings
@@ -138,8 +138,8 @@ export class TimeSeriesChartAxisSettingsComponent implements OnInit, ControlValu
this.axisSettingsFormGroup.addControl('ticksGenerator', this.fb.control(null, []));
this.axisSettingsFormGroup.addControl('interval', this.fb.control(null, [Validators.min(0)]));
this.axisSettingsFormGroup.addControl('splitNumber', this.fb.control(null, [Validators.min(1)]));
- this.axisSettingsFormGroup.addControl('min', this.fb.control(null, []));
- this.axisSettingsFormGroup.addControl('max', this.fb.control(null, []));
+ this.axisSettingsFormGroup.addControl('min', this.fb.control(normalizeAxisLimit(null), []));
+ this.axisSettingsFormGroup.addControl('max', this.fb.control(normalizeAxisLimit(null), []));
} else if (this.axisType === 'xAxis') {
this.axisSettingsFormGroup.addControl('ticksFormat', this.fb.control(null, []));
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axes-panel.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axes-panel.component.ts
index 694e856bfa..662214a1df 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axes-panel.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axes-panel.component.ts
@@ -36,13 +36,15 @@ import {
Validator
} from '@angular/forms';
import {
+ checkLatestDataKeys,
defaultTimeSeriesChartYAxisSettings,
getNextTimeSeriesYAxisId,
TimeSeriesChartYAxes,
TimeSeriesChartYAxisId,
TimeSeriesChartYAxisSettings,
timeSeriesChartYAxisValid,
- timeSeriesChartYAxisValidator
+ timeSeriesChartYAxisValidator,
+ updateLatestDataKeys
} from '@home/components/widget/lib/chart/time-series-chart.models';
import { mergeDeep } from '@core/utils';
import { CdkDragDrop } from '@angular/cdk/drag-drop';
@@ -50,7 +52,7 @@ import { coerceBoolean } from '@shared/decorators/coercion';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { IAliasController } from '@app/core/public-api';
import { DataKeysCallbacks } from '@home/components/widget/lib/settings/common/key/data-keys.component.models';
-import { DataKey, DataKeyType, Datasource, ValueSourceConfig, ValueSourceType } from '@app/shared/public-api';
+import { Datasource } from '@app/shared/public-api';
@Component({
selector: 'tb-time-series-chart-y-axes-panel',
@@ -127,7 +129,7 @@ export class TimeSeriesChartYAxesPanelComponent implements ControlValueAccessor,
for (const axis of axes) {
yAxes[axis.id] = axis;
}
- this.updateLatestDataKeys(Object.values(yAxes));
+ updateLatestDataKeys(Object.values(yAxes), this.datasource, this.dataKeyCallbacks);
this.propagateChange(yAxes);
}
);
@@ -150,7 +152,7 @@ export class TimeSeriesChartYAxesPanelComponent implements ControlValueAccessor,
}
writeValue(value: TimeSeriesChartYAxes | undefined): void {
- const yAxes: TimeSeriesChartYAxes = this.checkLatestDataKeys(value || {});
+ const yAxes: TimeSeriesChartYAxes = checkLatestDataKeys(value || {}, this.datasource);
if (!yAxes.default) {
yAxes.default = mergeDeep({} as TimeSeriesChartYAxisSettings, defaultTimeSeriesChartYAxisSettings,
{id: 'default', order: 0} as TimeSeriesChartYAxisSettings);
@@ -197,8 +199,6 @@ export class TimeSeriesChartYAxesPanelComponent implements ControlValueAccessor,
const axes: TimeSeriesChartYAxisSettings[] = this.yAxesFormGroup.get('axes').value;
axis.id = getNextTimeSeriesYAxisId(axes);
axis.order = axes.length;
- axis.min = this.normalizeAxisLimit(axis.min);
- axis.max = this.normalizeAxisLimit(axis.max);
const axesArray = this.yAxesFormGroup.get('axes') as UntypedFormArray;
const axisControl = this.fb.control(axis, [timeSeriesChartYAxisValidator]);
axesArray.push(axisControl);
@@ -212,100 +212,4 @@ export class TimeSeriesChartYAxesPanelComponent implements ControlValueAccessor,
return this.fb.array(axesControls);
}
- private checkLatestDataKeys(yAxes: TimeSeriesChartYAxes): TimeSeriesChartYAxes {
- const latestKeys = this.datasource?.latestDataKeys || [];
- const result: TimeSeriesChartYAxes = {};
-
- for (const [id, axis] of Object.entries(yAxes)) {
- axis.min = this.normalizeAxisLimit(axis.min);
- axis.max = this.normalizeAxisLimit(axis.max);
- const minCfg = axis.min;
- const maxCfg = axis.max;
-
- const minValid = !!minCfg && (
- minCfg.type !== ValueSourceType.latestKey ||
- latestKeys.some(k => this.isYAxisKey(k, minCfg))
- );
-
- const maxValid = !!maxCfg && (
- maxCfg.type !== ValueSourceType.latestKey ||
- latestKeys.some(k => this.isYAxisKey(k, maxCfg))
- );
-
- if (minValid && maxValid) {
- result[id] = axis;
- }
- }
-
- return result;
- }
-
- private updateLatestDataKeys(yAxes: TimeSeriesChartYAxisSettings[]) {
- if (this.datasource) {
- let latestKeys = this.datasource.latestDataKeys;
- if (!latestKeys) {
- latestKeys = [];
- this.datasource.latestDataKeys = latestKeys;
- }
- const existingYAxisKeys = latestKeys.filter(k => k.settings?.__yAxisMinKey === true || k.settings?.__yAxisMaxKey === true);
- const foundYAxisKeys: DataKey[] = [];
-
- for(const yAxis of yAxes) {
- const min = yAxis.min as ValueSourceConfig;
- const max = yAxis.max as ValueSourceConfig;
- if (min.type === ValueSourceType.latestKey) {
- const found = existingYAxisKeys.find(k => this.isYAxisKey(k, min));
- if (!found) {
- const newKey = this.dataKeyCallbacks.generateDataKey(min.latestKey, min.latestKeyType,
- null, true, null);
- newKey.settings.__yAxisMinKey = true;
- latestKeys.push(newKey);
- } else if (foundYAxisKeys.indexOf(found) === -1) {
- foundYAxisKeys.push(found);
- }
- }
- if (max.type === ValueSourceType.latestKey) {
- const found = existingYAxisKeys.find(k => this.isYAxisKey(k, max));
- if (!found) {
- const newKey = this.dataKeyCallbacks.generateDataKey(max.latestKey, max.latestKeyType,
- null, true, null);
- newKey.settings.__yAxisMaxKey = true;
- latestKeys.push(newKey);
- } else if (foundYAxisKeys.indexOf(found) === -1) {
- foundYAxisKeys.push(found);
- }
- }
- }
- const toRemove = existingYAxisKeys.filter(k => foundYAxisKeys.indexOf(k) === -1);
- for (const key of toRemove) {
- const index = latestKeys.indexOf(key);
- if (index > -1) {
- latestKeys.splice(index, 1);
- }
- }
- }
- }
-
- private isYAxisKey(d: DataKey, limit: ValueSourceConfig): boolean {
- return (d.type === DataKeyType.function && d.label === limit.latestKey) ||
- (d.type !== DataKeyType.function && d.name === limit.latestKey &&
- d.type === limit.latestKeyType);
- }
-
- private normalizeAxisLimit(limit: string | number | ValueSourceConfig): ValueSourceConfig {
- if (!limit) {
- return {
- type: ValueSourceType.constant,
- value: null,
- entityAlias: null
- };
- } else if (typeof limit === 'number' || typeof limit === 'string') {
- return {
- type: ValueSourceType.constant,
- value: Number(limit),
- entityAlias: null
- };
- }
- return limit;
- }
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axis-row.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axis-row.component.ts
index 5298b7f45b..93e91124d5 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axis-row.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/chart/time-series-chart-y-axis-row.component.ts
@@ -29,7 +29,7 @@ import {
} from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import {
- AxisPosition,
+ AxisPosition, normalizeAxisLimit,
timeSeriesAxisPositionTranslations,
TimeSeriesChartYAxisSettings
} from '@home/components/widget/lib/chart/time-series-chart.models';
@@ -136,8 +136,8 @@ export class TimeSeriesChartYAxisRowComponent implements ControlValueAccessor, O
writeValue(value: TimeSeriesChartYAxisSettings): void {
this.modelValue = value;
- const min = this.normalizeLimit(value.min);
- const max = this.normalizeLimit(value.max);
+ const min = normalizeAxisLimit(value.min);
+ const max = normalizeAxisLimit(value.max);
this.axisFormGroup.patchValue({
label: value.label,
@@ -252,27 +252,4 @@ export class TimeSeriesChartYAxisRowComponent implements ControlValueAccessor, O
entityKeyType: [null, []]
});
}
-
- private normalizeLimit(limit: any) {
- const base = {
- type: ValueSourceType.constant,
- value: null,
- latestKey: null,
- latestKeyType: null,
- entityAlias: null,
- entityKey: null,
- entityKeyType: null
- };
-
- if (limit == null) return base;
-
- if (typeof limit === 'number' || typeof limit === 'string') {
- return { ...base, type: ValueSourceType.constant, value: Number(limit) };
- }
-
- return {
- ...base,
- ...limit,
- };
- }
}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.ts
index ecbb03b580..0c0e504d74 100644
--- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.ts
+++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/color-settings-panel.component.ts
@@ -34,6 +34,7 @@ import { IAliasController } from '@core/api/widget-api.models';
import { coerceBoolean } from '@shared/decorators/coercion';
import { DataKeysCallbacks } from '@home/components/widget/lib/settings/common/key/data-keys.component.models';
import { Datasource } from '@shared/models/widget.models';
+import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'tb-color-settings-panel',
@@ -107,6 +108,12 @@ export class ColorSettingsPanelComponent extends PageComponent implements OnInit
colorFunction: [this.colorSettings?.colorFunction, []]
}
);
+ this.colorSettingsFormGroup.get('type').valueChanges.pipe(
+ takeUntilDestroyed(this.destroyRef)
+ ).subscribe(() => {
+ this.updateValidators();
+ setTimeout(() => {this.popover?.updatePosition();}, 0);
+ });
this.updateValidators();
}
diff --git a/ui-ngx/src/app/shared/components/color-picker/color-input.base.scss b/ui-ngx/src/app/shared/components/color-picker/color-input.base.scss
new file mode 100644
index 0000000000..bae2e433aa
--- /dev/null
+++ b/ui-ngx/src/app/shared/components/color-picker/color-input.base.scss
@@ -0,0 +1,28 @@
+/**
+ * Copyright © 2016-2026 The Thingsboard Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+:host {
+ .color-input-container {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ }
+ .color-input {
+ max-width: 72px;
+ margin-bottom: 4px;
+ }
+}
+
+
diff --git a/ui-ngx/src/app/shared/components/color-picker/color-picker-panel.component.scss b/ui-ngx/src/app/shared/components/color-picker/color-picker-panel.component.scss
index f9db566be8..5e867f9e61 100644
--- a/ui-ngx/src/app/shared/components/color-picker/color-picker-panel.component.scss
+++ b/ui-ngx/src/app/shared/components/color-picker/color-picker-panel.component.scss
@@ -16,7 +16,7 @@
@import "../scss/constants";
.tb-color-picker-panel {
- width: 342px;
+ width: 370px;
display: flex;
flex-direction: column;
max-height: calc(100vh - 24px);
diff --git a/ui-ngx/src/app/shared/components/color-picker/color-picker.component.html b/ui-ngx/src/app/shared/components/color-picker/color-picker.component.html
index 676dafbfef..fcb1cb067d 100644
--- a/ui-ngx/src/app/shared/components/color-picker/color-picker.component.html
+++ b/ui-ngx/src/app/shared/components/color-picker/color-picker.component.html
@@ -37,10 +37,8 @@
HSLA
-
-
+
+
diff --git a/ui-ngx/src/app/shared/components/color-picker/color-picker.component.scss b/ui-ngx/src/app/shared/components/color-picker/color-picker.component.scss
index ed161a5b9f..799bcdf00c 100644
--- a/ui-ngx/src/app/shared/components/color-picker/color-picker.component.scss
+++ b/ui-ngx/src/app/shared/components/color-picker/color-picker.component.scss
@@ -83,7 +83,7 @@
height: 56px;
display: flex;
align-items: center;
- gap: 20px;
+ gap: 8px;
.presentation-select {
font-size: 14px;
@@ -104,7 +104,7 @@
display: flex;
flex-direction: row;
flex-wrap: wrap;
- justify-content: space-between;
+ justify-content: center;
gap: 8px;
@media #{$mat-xs} {
flex-direction: column;
diff --git a/ui-ngx/src/app/shared/components/color-picker/hex-input.component.scss b/ui-ngx/src/app/shared/components/color-picker/hex-input.component.scss
index 2f7a404c0d..73a6aff9f6 100644
--- a/ui-ngx/src/app/shared/components/color-picker/hex-input.component.scss
+++ b/ui-ngx/src/app/shared/components/color-picker/hex-input.component.scss
@@ -19,11 +19,11 @@
gap: 8px;
}
.hex-input {
- max-width: 190px;
+ max-width: 220px;
}
.alpha-input {
- min-width: 60px;
- max-width: 60px;
+ min-width: 72px;
+ max-width: 72px;
}
::ng-deep {
diff --git a/ui-ngx/src/app/shared/components/color-picker/hsla-input.component.html b/ui-ngx/src/app/shared/components/color-picker/hsla-input.component.html
new file mode 100644
index 0000000000..cf8e25eb51
--- /dev/null
+++ b/ui-ngx/src/app/shared/components/color-picker/hsla-input.component.html
@@ -0,0 +1,54 @@
+
+
diff --git a/ui-ngx/src/app/shared/components/color-picker/hsla-input.component.ts b/ui-ngx/src/app/shared/components/color-picker/hsla-input.component.ts
new file mode 100644
index 0000000000..40ec056972
--- /dev/null
+++ b/ui-ngx/src/app/shared/components/color-picker/hsla-input.component.ts
@@ -0,0 +1,72 @@
+///
+/// Copyright © 2016-2026 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Color } from '@iplab/ngx-color-picker';
+import { coerceBoolean } from '@shared/decorators/coercion';
+
+type Channel = 'H' | 'S' | 'L';
+
+@Component({
+ selector: 'tb-hsla-input',
+ templateUrl: './hsla-input.component.html',
+ styleUrl: './color-input.base.scss',
+ standalone: false
+})
+export class HslaInputComponent {
+
+ @Input()
+ public color: Color;
+
+ @Output()
+ public colorChange = new EventEmitter(false);
+
+ @Input()
+ @coerceBoolean()
+ public labelVisible = false;
+
+ @Input()
+ public suffixValue = '%';
+
+ public get value() {
+ return this.color.getHsla();
+ }
+
+ public get alphaValue(): number {
+ return this.color ? Math.round(this.color.getHsla().getAlpha() * 100) : 0;
+ }
+
+ public onAlphaInputChange(inputValue: number): void {
+ if (!this.color) return;
+ const hsla = this.color.getHsla();
+ const alpha = +inputValue / 100;
+ if (hsla.alpha !== alpha) {
+ const newColor = new Color().setHsla(hsla.getHue(), hsla.getSaturation(), hsla.getLightness(), alpha);
+ this.colorChange.emit(newColor);
+ }
+ }
+
+ public onInputChange(newValue: number, channel: Channel): void {
+ if (!this.color) return;
+ const hsla = this.value;
+ const hue = channel === 'H' ? +newValue : hsla.getHue();
+ const saturation = channel === 'S' ? +newValue : hsla.getSaturation();
+ const lightness = channel === 'L' ? +newValue : hsla.getLightness();
+ if (hue === hsla.getHue() && saturation === hsla.getSaturation() && lightness === hsla.getLightness()) return;
+ const newColor = new Color().setHsla(hue, saturation, lightness, hsla.getAlpha());
+ this.colorChange.emit(newColor);
+ }
+}
diff --git a/ui-ngx/src/app/shared/components/color-picker/input-change.directive.ts b/ui-ngx/src/app/shared/components/color-picker/input-change.directive.ts
new file mode 100644
index 0000000000..55604df28e
--- /dev/null
+++ b/ui-ngx/src/app/shared/components/color-picker/input-change.directive.ts
@@ -0,0 +1,46 @@
+///
+/// Copyright © 2016-2026 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { Directive, EventEmitter, HostBinding, HostListener, Input, numberAttribute, Output } from '@angular/core';
+
+@Directive({
+ selector: '[inputChange]',
+ standalone: false
+})
+export class InputChangeDirective {
+
+ @Input({transform: numberAttribute})
+ @HostBinding('attr.min')
+ min = 0;
+
+ @Input({transform: numberAttribute})
+ @HostBinding('attr.max')
+ max = 255;
+
+ @Output()
+ public inputChange = new EventEmitter();
+
+ @HostListener('input', ['$event'])
+ public inputChanges(event: any): void {
+ const element = event.target as HTMLInputElement || event.srcElement as HTMLInputElement;
+ const value = element.value;
+
+ const numeric = parseFloat(value);
+ if (!isNaN(numeric) && numeric >= this.min && numeric <= this.max) {
+ this.inputChange.emit(numeric);
+ }
+ }
+}
diff --git a/ui-ngx/src/app/shared/components/color-picker/rgba-input.component.html b/ui-ngx/src/app/shared/components/color-picker/rgba-input.component.html
new file mode 100644
index 0000000000..3cb856f147
--- /dev/null
+++ b/ui-ngx/src/app/shared/components/color-picker/rgba-input.component.html
@@ -0,0 +1,52 @@
+
+
diff --git a/ui-ngx/src/app/shared/components/color-picker/rgba-input.component.ts b/ui-ngx/src/app/shared/components/color-picker/rgba-input.component.ts
new file mode 100644
index 0000000000..04f2dbc44b
--- /dev/null
+++ b/ui-ngx/src/app/shared/components/color-picker/rgba-input.component.ts
@@ -0,0 +1,71 @@
+///
+/// Copyright © 2016-2026 The Thingsboard Authors
+///
+/// Licensed under the Apache License, Version 2.0 (the "License");
+/// you may not use this file except in compliance with the License.
+/// You may obtain a copy of the License at
+///
+/// http://www.apache.org/licenses/LICENSE-2.0
+///
+/// Unless required by applicable law or agreed to in writing, software
+/// distributed under the License is distributed on an "AS IS" BASIS,
+/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+/// See the License for the specific language governing permissions and
+/// limitations under the License.
+///
+
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Color } from '@iplab/ngx-color-picker';
+import { coerceBoolean } from '@shared/decorators/coercion';
+
+type Channel = 'R' | 'G' | 'B';
+
+@Component({
+ selector: 'tb-rgba-input',
+ templateUrl: './rgba-input.component.html',
+ styleUrl: './color-input.base.scss',
+ standalone: false
+})
+export class RgbaInputComponent {
+
+ @Input()
+ public color: Color;
+
+ @Output()
+ public colorChange = new EventEmitter(false);
+
+ @Input()
+ @coerceBoolean()
+ public labelVisible = false;
+
+ @Input()
+ public suffixValue = '%';
+
+ public get value() {
+ return this.color.getRgba();
+ }
+
+ public get alphaValue(): string {
+ return this.color ? Math.round(this.color.getRgba().getAlpha() * 100).toString() : '';
+ }
+
+ public onAlphaInputChange(inputValue: number): void {
+ if (!this.color) return;
+ const color = this.color.getRgba();
+ const alpha = +inputValue / 100;
+ if (color.getAlpha() !== alpha) {
+ const newColor = new Color().setRgba(color.getRed(), color.getGreen(), color.getBlue(), alpha).toRgbaString();
+ this.colorChange.emit(new Color(newColor));
+ }
+ }
+
+ onInputChange(newValue: number, channel: Channel) {
+ if (!this.color) return;
+ const rgba = this.value;
+ const red = channel === 'R' ? newValue : rgba.getRed();
+ const green = channel === 'G' ? newValue : rgba.getGreen();
+ const blue = channel === 'B' ? newValue : rgba.getBlue();
+ if (red === rgba.getRed() && green === rgba.getGreen() && blue === rgba.getBlue()) return;
+ this.colorChange.emit(new Color().setRgba(red, green, blue, rgba.alpha));
+ }
+}
diff --git a/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.module.ts b/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.module.ts
index 078234dbda..50d847609f 100644
--- a/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.module.ts
+++ b/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.module.ts
@@ -15,36 +15,47 @@
///
import { Overlay, OverlayContainer, OverlayModule } from '@angular/cdk/overlay';
-import { NgModule } from '@angular/core';
+import { inject, Injector, NgModule } from '@angular/core';
import { DEFAULT_DIALOG_CONFIG, Dialog, DialogConfig, DialogModule } from '@angular/cdk/dialog';
import { MatDialogModule } from '@angular/material/dialog';
import { DynamicDialog, DynamicMatDialog } from './dynamic-dialog';
import { DynamicOverlay } from './dynamic-overlay';
-import { DynamicOverlayContainer } from './dynamic-overlay-container';
+import { DynamicOverlayContainer, PARENT_OVERLAY_CONTAINER } from './dynamic-overlay-container';
export const DYNAMIC_MAT_DIALOG_PROVIDERS = [
- DynamicOverlayContainer,
- { provide: OverlayContainer, useExisting: DynamicOverlayContainer },
- DynamicOverlay,
- { provide: Overlay, useExisting: DynamicOverlay },
- DynamicDialog,
- { provide: Dialog, useExisting: DynamicDialog },
- DynamicMatDialog,
{
- provide: DEFAULT_DIALOG_CONFIG,
- useValue: {
- ...new DialogConfig()
+ provide: DynamicMatDialog,
+ useFactory: () => {
+ const parentInjector = inject(Injector);
+ const parentOverlayContainer = parentInjector.get(OverlayContainer);
+
+ const customInjector = Injector.create({
+ providers: [
+ { provide: PARENT_OVERLAY_CONTAINER, useValue: parentOverlayContainer },
+ DynamicOverlayContainer,
+ { provide: OverlayContainer, useExisting: DynamicOverlayContainer },
+ DynamicOverlay,
+ { provide: Overlay, useExisting: DynamicOverlay },
+ DynamicDialog,
+ { provide: Dialog, useExisting: DynamicDialog },
+ DynamicMatDialog,
+ { provide: DEFAULT_DIALOG_CONFIG, useValue: new DialogConfig() }
+ ],
+ parent: parentInjector
+ });
+
+ return customInjector.get(DynamicMatDialog);
}
}
];
-@NgModule( {
+@NgModule({
imports: [
OverlayModule,
DialogModule,
MatDialogModule
],
providers: DYNAMIC_MAT_DIALOG_PROVIDERS
-} )
+})
export class DynamicMatDialogModule {
}
diff --git a/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.ts b/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.ts
index f717ccb0a7..df707ad49d 100644
--- a/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.ts
+++ b/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-dialog.ts
@@ -34,20 +34,13 @@ export class DynamicMatDialog extends MatDialog {
config.containerElement.style.transform = 'translateZ(0)';
this._customOverlay.setContainerElement(config.containerElement);
}
- const ref = super.open(component, config);
- if (config?.containerElement) {
- ref.afterClosed().subscribe(
- {
- next: () => {
- this._customOverlay.setContainerElement(null);
- },
- error: () => {
- this._customOverlay.setContainerElement(null);
- }
- }
- );
+ try {
+ return super.open(component, config);
+ } finally {
+ if (config?.containerElement) {
+ this._customOverlay.setContainerElement(null);
+ }
}
- return ref;
}
}
diff --git a/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-overlay-container.ts b/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-overlay-container.ts
index 83feda56fc..99a84f5a6a 100644
--- a/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-overlay-container.ts
+++ b/ui-ngx/src/app/shared/components/dialog/dynamic/dynamic-overlay-container.ts
@@ -15,13 +15,21 @@
///
import { OverlayContainer } from "@angular/cdk/overlay";
-import { Injectable } from "@angular/core";
+import { inject, Injectable, InjectionToken } from "@angular/core";
+
+export const PARENT_OVERLAY_CONTAINER = new InjectionToken('PARENT_OVERLAY_CONTAINER');
@Injectable()
export class DynamicOverlayContainer extends OverlayContainer {
- public setContainerElement( containerElement:HTMLElement ):void {
+ private _globalContainer = inject(PARENT_OVERLAY_CONTAINER);
+ private _customElement: HTMLElement | null = null;
+
+ public override getContainerElement(): HTMLElement {
+ return this._customElement || this._globalContainer.getContainerElement();
+ }
- this._containerElement = containerElement;
+ setContainerElement(element: HTMLElement | null): void {
+ this._customElement = element;
}
-}
+}
\ No newline at end of file
diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts
index dfe86539bc..cefc1c8824 100644
--- a/ui-ngx/src/app/shared/shared.module.ts
+++ b/ui-ngx/src/app/shared/shared.module.ts
@@ -239,6 +239,9 @@ import { DateExpirationPipe } from '@shared/pipe/date-expiration.pipe';
import { EntityLimitExceededDialogComponent } from '@shared/components/dialog/entity-limit-exceeded-dialog.component';
import { DynamicMatDialogModule } from '@shared/components/dialog/dynamic/dynamic-dialog.module';
import { MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS } from '@angular/material/button-toggle';
+import { RgbaInputComponent } from '@shared/components/color-picker/rgba-input.component';
+import { HslaInputComponent } from '@shared/components/color-picker/hsla-input.component';
+import { InputChangeDirective } from '@shared/components/color-picker/input-change.directive';
export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) {
return markedOptionsService;
@@ -466,7 +469,10 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService)
MqttVersionSelectComponent,
PasswordRequirementsTooltipComponent,
TimeUnitInputComponent,
- StringPatternAutocompleteComponent
+ StringPatternAutocompleteComponent,
+ RgbaInputComponent,
+ HslaInputComponent,
+ InputChangeDirective
],
imports: [
CommonModule,
diff --git a/ui-ngx/yarn.lock b/ui-ngx/yarn.lock
index d36c9c8684..c43dc47bd2 100644
--- a/ui-ngx/yarn.lock
+++ b/ui-ngx/yarn.lock
@@ -160,24 +160,24 @@
"@angular-devkit/core" "^20.0.0"
"@angular/build" "^20.0.0"
-"@angular-devkit/architect@0.2003.15", "@angular-devkit/architect@>= 0.2000.0 < 0.2100.0", "@angular-devkit/architect@>=0.2000.0 < 0.2100.0":
- version "0.2003.15"
- resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2003.15.tgz#09d4e520205dcfe44ae0dd5e4f865596c1fdec98"
- integrity sha512-HmGnUTLVwpvOFilc3gTP6CL9o+UbkVyu9S4WENkQbInbW3zp54lkzY71uWJIP7QvuXPa+bS4WHEmoGNQtNvv1A==
+"@angular-devkit/architect@0.2003.16", "@angular-devkit/architect@>= 0.2000.0 < 0.2100.0", "@angular-devkit/architect@>=0.2000.0 < 0.2100.0":
+ version "0.2003.16"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2003.16.tgz#bc45b8b5eb9ae9b26b2d03dcd70b3fade9f22f79"
+ integrity sha512-W7FPVhZzIeHVP/duuKepfZU66LpQ0k9YMHFhrGpzaUuHPOwKmza6+pjVvvti3g6jzT8b1uVlb+XlYgNPZ5jrPQ==
dependencies:
- "@angular-devkit/core" "20.3.15"
+ "@angular-devkit/core" "20.3.16"
rxjs "7.8.2"
-"@angular-devkit/build-angular@20.3.15":
- version "20.3.15"
- resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-20.3.15.tgz#144b7ca4cec60aebaa09453e731fe58207955c11"
- integrity sha512-md5ikmdH0rM4jkVFwNQhN++onUUZPUDUfKijnb1XZArQisT9hPiNqTPbO+OZTBK/hQYYV/GfTOhDH30whG32xQ==
+"@angular-devkit/build-angular@20.3.16":
+ version "20.3.16"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-20.3.16.tgz#7c71ce4d3cb0173cdff6aaf221048b390caf39e4"
+ integrity sha512-SsJmxRnBTrivG3UiRy0gaU1mGupRCAiEKrKlW30oe6Dm0UoIVXDi4srpSEECcng5Obr3jFPzJE6P16/gfp3ZBw==
dependencies:
"@ampproject/remapping" "2.3.0"
- "@angular-devkit/architect" "0.2003.15"
- "@angular-devkit/build-webpack" "0.2003.15"
- "@angular-devkit/core" "20.3.15"
- "@angular/build" "20.3.15"
+ "@angular-devkit/architect" "0.2003.16"
+ "@angular-devkit/build-webpack" "0.2003.16"
+ "@angular-devkit/core" "20.3.16"
+ "@angular/build" "20.3.16"
"@babel/core" "7.28.3"
"@babel/generator" "7.28.3"
"@babel/helper-annotate-as-pure" "7.27.3"
@@ -188,7 +188,7 @@
"@babel/preset-env" "7.28.3"
"@babel/runtime" "7.28.3"
"@discoveryjs/json-ext" "0.6.3"
- "@ngtools/webpack" "20.3.15"
+ "@ngtools/webpack" "20.3.16"
ansi-colors "4.1.3"
autoprefixer "10.4.21"
babel-loader "10.0.0"
@@ -222,7 +222,7 @@
terser "5.43.1"
tree-kill "1.2.2"
tslib "2.8.1"
- webpack "5.104.1"
+ webpack "5.105.0"
webpack-dev-middleware "7.4.2"
webpack-dev-server "5.2.2"
webpack-merge "6.0.1"
@@ -230,18 +230,18 @@
optionalDependencies:
esbuild "0.25.9"
-"@angular-devkit/build-webpack@0.2003.15":
- version "0.2003.15"
- resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.2003.15.tgz#780e56a2ab48cea75de73386baeda3600c36ca93"
- integrity sha512-u1gjLH0T+s4PiwbSUhzYZUKCsIF9CvTGJoN+Ki+CQqZAlTGLOp2y55VXmdrRX4e3tsKkS+chpQ8sN2b5vbzv9w==
+"@angular-devkit/build-webpack@0.2003.16":
+ version "0.2003.16"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.2003.16.tgz#a4e89f97595743597d6d23dae6d3b014931765bb"
+ integrity sha512-88c6jTNAzqVinwYswsHOJAinIUSq08PQd1PfRwoH7RXiZt8XzkSmeLmXKchtamSflDXdcnjNd+AZY29b279zDA==
dependencies:
- "@angular-devkit/architect" "0.2003.15"
+ "@angular-devkit/architect" "0.2003.16"
rxjs "7.8.2"
-"@angular-devkit/core@20.3.15", "@angular-devkit/core@>= 20.0.0 < 21.0.0", "@angular-devkit/core@^20.0.0":
- version "20.3.15"
- resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.3.15.tgz#d61e2b915b2347da9f33c37f39c6c163cc5d29ea"
- integrity sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==
+"@angular-devkit/core@20.3.16", "@angular-devkit/core@>= 20.0.0 < 21.0.0", "@angular-devkit/core@^20.0.0":
+ version "20.3.16"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.3.16.tgz#ad1c2b2e099cf1591cd3146944e95a3af614a82b"
+ integrity sha512-6L9Lpe3lbkyz32gzqxZGVC8MhXxXht+yV+4LUsb4+6T/mG/V9lW6UTW0dhwVOS3vpWMEwpy75XHT298t7HcKEg==
dependencies:
ajv "8.17.1"
ajv-formats "3.0.1"
@@ -250,12 +250,12 @@
rxjs "7.8.2"
source-map "0.7.6"
-"@angular-devkit/schematics@20.3.15", "@angular-devkit/schematics@>= 20.0.0 < 21.0.0":
- version "20.3.15"
- resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.3.15.tgz#7dd2f966a530fadb0c425ed01fb3cbb303df868a"
- integrity sha512-xMN1fyuhhP8Y5sNlmQvl4nMiOouHTKPkLR0zlhu5z6fHuwxxlverh31Gpq3eFzPHqmOzzb2TkgYCptCFXsXcrg==
+"@angular-devkit/schematics@20.3.16", "@angular-devkit/schematics@>= 20.0.0 < 21.0.0":
+ version "20.3.16"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.3.16.tgz#7a79c7b1cf91ff8ebb63ab318460c1f1ac073d51"
+ integrity sha512-3K8QwTpKjnLo3hIvNzB9sTjrlkeRyMK0TxdwgTbwJseewGhXLl98oBoTCWM2ygtpskiWNpYqXJNIhoslNN65WQ==
dependencies:
- "@angular-devkit/core" "20.3.15"
+ "@angular-devkit/core" "20.3.16"
jsonc-parser "3.3.1"
magic-string "0.30.17"
ora "8.2.0"
@@ -328,13 +328,13 @@
dependencies:
tslib "^2.3.0"
-"@angular/build@20.3.15", "@angular/build@^20.0.0":
- version "20.3.15"
- resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.3.15.tgz#fa1c4661a1ca7991cd8c19957442076a7266bf18"
- integrity sha512-DMp/wb3I9/izveXRuOkCTYEQlEzvNlJVnqA215tijOSiJGjYoUsQLazTCxtEx/trftOhVpnMP/2OvvMQVAJJoQ==
+"@angular/build@20.3.16", "@angular/build@^20.0.0":
+ version "20.3.16"
+ resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.3.16.tgz#ea33cc51483e474236190f7ef3efefca39fd6c4d"
+ integrity sha512-p1W3wwMG1Bs4tkPW7ceXO4woO1KCP28sjfpBJg32dIMW3dYSC+iWNmUkYS/wb4YEkqCV0wd6Apnd98mZjL6rNg==
dependencies:
"@ampproject/remapping" "2.3.0"
- "@angular-devkit/architect" "0.2003.15"
+ "@angular-devkit/architect" "0.2003.16"
"@babel/core" "7.28.3"
"@babel/helper-annotate-as-pure" "7.27.3"
"@babel/helper-split-export-declaration" "7.24.7"
@@ -370,18 +370,18 @@
parse5 "^8.0.0"
tslib "^2.3.0"
-"@angular/cli@20.3.15":
- version "20.3.15"
- resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.3.15.tgz#13eec3cf73beb400348a74decacfe2e8bf908580"
- integrity sha512-OgPMhXtNLXds0wIw6YU5/X3dU8TlAZbmPy6LYHs9ifF8K4pXpbm27vWGSZhUevSf66dMvfz8wB/aE2e0s2e5Ng==
+"@angular/cli@20.3.16":
+ version "20.3.16"
+ resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.3.16.tgz#cdb6c0c9300a15f9bbce5e9ec1cf18f48fb0c765"
+ integrity sha512-kjGp0ywIWebWrH6U5eCRkS4Tx1D/yMe2iT7DXMfEcLc8iMSrBozEriMJppbot9ou8O2LeEH5d1Nw0efNNo78Kw==
dependencies:
- "@angular-devkit/architect" "0.2003.15"
- "@angular-devkit/core" "20.3.15"
- "@angular-devkit/schematics" "20.3.15"
+ "@angular-devkit/architect" "0.2003.16"
+ "@angular-devkit/core" "20.3.16"
+ "@angular-devkit/schematics" "20.3.16"
"@inquirer/prompts" "7.8.2"
"@listr2/prompt-adapter-inquirer" "3.0.1"
- "@modelcontextprotocol/sdk" "1.25.2"
- "@schematics/angular" "20.3.15"
+ "@modelcontextprotocol/sdk" "1.26.0"
+ "@schematics/angular" "20.3.16"
"@yarnpkg/lockfile" "1.1.0"
algoliasearch "5.35.0"
ini "5.0.0"
@@ -489,19 +489,19 @@
dependencies:
tslib "^2.0.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7"
- integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c"
+ integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==
dependencies:
"@babel/helper-validator-identifier" "^7.28.5"
js-tokens "^4.0.0"
picocolors "^1.1.1"
"@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0", "@babel/compat-data@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c"
- integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d"
+ integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==
"@babel/core@7.28.3", "@babel/core@^7.23.9":
version "7.28.3"
@@ -535,13 +535,13 @@
"@jridgewell/trace-mapping" "^0.3.28"
jsesc "^3.0.2"
-"@babel/generator@^7.28.3", "@babel/generator@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.6.tgz#48dcc65d98fcc8626a48f72b62e263d25fc3c3f1"
- integrity sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==
+"@babel/generator@^7.28.3", "@babel/generator@^7.29.0":
+ version "7.29.1"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50"
+ integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==
dependencies:
- "@babel/parser" "^7.28.6"
- "@babel/types" "^7.28.6"
+ "@babel/parser" "^7.29.0"
+ "@babel/types" "^7.29.0"
"@jridgewell/gen-mapping" "^0.3.12"
"@jridgewell/trace-mapping" "^0.3.28"
jsesc "^3.0.2"
@@ -704,12 +704,12 @@
"@babel/template" "^7.28.6"
"@babel/types" "^7.28.6"
-"@babel/parser@^7.23.9", "@babel/parser@^7.28.3", "@babel/parser@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd"
- integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==
+"@babel/parser@^7.23.9", "@babel/parser@^7.28.3", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6"
+ integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==
dependencies:
- "@babel/types" "^7.28.6"
+ "@babel/types" "^7.29.0"
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1":
version "7.28.5"
@@ -1304,22 +1304,22 @@
"@babel/types" "^7.28.6"
"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e"
- integrity sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a"
+ integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==
dependencies:
- "@babel/code-frame" "^7.28.6"
- "@babel/generator" "^7.28.6"
+ "@babel/code-frame" "^7.29.0"
+ "@babel/generator" "^7.29.0"
"@babel/helper-globals" "^7.28.0"
- "@babel/parser" "^7.28.6"
+ "@babel/parser" "^7.29.0"
"@babel/template" "^7.28.6"
- "@babel/types" "^7.28.6"
+ "@babel/types" "^7.29.0"
debug "^4.3.1"
-"@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.4.4":
- version "7.28.6"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df"
- integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==
+"@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.4.4":
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7"
+ integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==
dependencies:
"@babel/helper-string-parser" "^7.27.1"
"@babel/helper-validator-identifier" "^7.28.5"
@@ -1569,10 +1569,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@9.39.2":
- version "9.39.2"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.2.tgz#2d4b8ec4c3ea13c1b3748e0c97ecd766bdd80599"
- integrity sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==
+"@eslint/js@9.39.3":
+ version "9.39.3"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.3.tgz#c6168736c7e0c43ead49654ed06a4bcb3833363d"
+ integrity sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==
"@eslint/object-schema@^2.1.7":
version "2.1.7"
@@ -1611,7 +1611,7 @@
lodash "4.17.21"
polyclip-ts "^0.16.5"
-"@hono/node-server@^1.19.7":
+"@hono/node-server@^1.19.9":
version "1.19.9"
resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.19.9.tgz#8f37119b1acf283fd3f6035f3d1356fdb97a09ac"
integrity sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==
@@ -1822,18 +1822,6 @@
dependencies:
tslib "^2.3.0"
-"@isaacs/balanced-match@^4.0.1":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29"
- integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==
-
-"@isaacs/brace-expansion@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3"
- integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==
- dependencies:
- "@isaacs/balanced-match" "^4.0.1"
-
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
@@ -1885,9 +1873,9 @@
"@jridgewell/trace-mapping" "^0.3.25"
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
- integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
"@jridgewell/trace-mapping@0.3.9":
version "0.3.9"
@@ -2220,12 +2208,12 @@
dependencies:
make-plural "^7.0.0"
-"@modelcontextprotocol/sdk@1.25.2":
- version "1.25.2"
- resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz#2284560b4e044b4ce5f328ee180931110cb8c5cf"
- integrity sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==
+"@modelcontextprotocol/sdk@1.26.0":
+ version "1.26.0"
+ resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz#5b35d73062125f126cc70b0be83cbab53bcdde74"
+ integrity sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==
dependencies:
- "@hono/node-server" "^1.19.7"
+ "@hono/node-server" "^1.19.9"
ajv "^8.17.1"
ajv-formats "^3.0.1"
content-type "^1.0.5"
@@ -2233,14 +2221,15 @@
cross-spawn "^7.0.5"
eventsource "^3.0.2"
eventsource-parser "^3.0.0"
- express "^5.0.1"
- express-rate-limit "^7.5.0"
- jose "^6.1.1"
+ express "^5.2.1"
+ express-rate-limit "^8.2.1"
+ hono "^4.11.4"
+ jose "^6.1.3"
json-schema-typed "^8.0.2"
pkce-challenge "^5.0.0"
raw-body "^3.0.0"
zod "^3.25 || ^4.0"
- zod-to-json-schema "^3.25.0"
+ zod-to-json-schema "^3.25.1"
"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3":
version "3.0.3"
@@ -2408,10 +2397,10 @@
dependencies:
tslib "^2.0.0"
-"@ngtools/webpack@20.3.15":
- version "20.3.15"
- resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-20.3.15.tgz#77161b676ff8f98bf8a3549acb3abb710f874f0b"
- integrity sha512-7bH91SdVN9xawMg4G+OoQG+nFz9/huUXx/MptR5iOsuRUpNo3PQwMNr07VTRV8o4YAtTTRIf2Yam4fNkb3rRAg==
+"@ngtools/webpack@20.3.16":
+ version "20.3.16"
+ resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-20.3.16.tgz#b5163cc57326381409fd535c1f902bd2d2139cc4"
+ integrity sha512-yXxo0CKkCa9SuP05OskOeFt9l1wirCzh7MhwW1S18Rpi6cyPbV1bc7GEz05+dfi5Ee8Dlbx3sbmdty0xtHvFQw==
"@ngx-translate/core@^17.0.0":
version "17.0.0"
@@ -2627,161 +2616,76 @@
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz#7050c2acdc1214a730058e21f613ab0e1fe1ced9"
integrity sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==
-"@rollup/rollup-android-arm-eabi@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz#067cfcd81f1c1bfd92aefe3ad5ef1523549d5052"
- integrity sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==
-
"@rollup/rollup-android-arm64@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz#3f5b2afbfcbe9021649701cf6ff0d54b1fb7e4a5"
integrity sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==
-"@rollup/rollup-android-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz#85e39a44034d7d4e4fee2a1616f0bddb85a80517"
- integrity sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==
-
"@rollup/rollup-darwin-arm64@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz#70a1679fb4393ba7bafb730ee56a5278cbcdafb0"
integrity sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==
-"@rollup/rollup-darwin-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz#17d92fe98f2cc277b91101eb1528b7c0b6c00c54"
- integrity sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==
-
"@rollup/rollup-darwin-x64@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz#ae75aec88fa72069de9bca3a3ec22bf4e6a962bf"
integrity sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==
-"@rollup/rollup-darwin-x64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz#89ae6c66b1451609bd1f297da9384463f628437d"
- integrity sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==
-
"@rollup/rollup-freebsd-arm64@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz#8a2bda997faa1d7e335ce1961ce71d1a76ac6288"
integrity sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==
-"@rollup/rollup-freebsd-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz#cdbdb9947b26e76c188a31238c10639347413628"
- integrity sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==
-
"@rollup/rollup-freebsd-x64@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz#fc287bcc39b9a9c0df97336d68fd5f4458f87977"
integrity sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==
-"@rollup/rollup-freebsd-x64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz#9b1458d07b6e040be16ee36d308a2c9520f7f7cc"
- integrity sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==
-
"@rollup/rollup-linux-arm-gnueabihf@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz#5b5a2a55dffaa64d7c7a231e80e491219e33d4f3"
integrity sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==
-"@rollup/rollup-linux-arm-gnueabihf@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz#1d50ded7c965d5f125f5832c971ad5b287befef7"
- integrity sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==
-
"@rollup/rollup-linux-arm-musleabihf@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz#979eab95003c21837ea0fdd8a721aa3e69fa4aa3"
integrity sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==
-"@rollup/rollup-linux-arm-musleabihf@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz#53597e319b7e65990d3bc2a5048097384814c179"
- integrity sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==
-
"@rollup/rollup-linux-arm64-gnu@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz#53b89f1289cbeca5ed9b6ca1602a6fe1a29dd4e2"
integrity sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==
-"@rollup/rollup-linux-arm64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz#597002909dec198ca4bdccb25f043d32db3d6283"
- integrity sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==
-
"@rollup/rollup-linux-arm64-musl@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz#3bbcf5e13c09d0c4c55bd9c75ec6a7aeee56fe28"
integrity sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==
-"@rollup/rollup-linux-arm64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz#286f0e0f799545ce288bdc5a7c777261fcba3d54"
- integrity sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==
-
"@rollup/rollup-linux-loong64-gnu@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz#1cc71838465a8297f92ccc5cc9c29756b71f6e73"
integrity sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==
-"@rollup/rollup-linux-loong64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz#1fab07fa1a4f8d3697735b996517f1bae0ba101b"
- integrity sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==
-
-"@rollup/rollup-linux-loong64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz#efc2cb143d6c067f95205482afb177f78ed9ea3d"
- integrity sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==
-
"@rollup/rollup-linux-ppc64-gnu@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz#fe3fdf2ef57dc2d58fedd4f1e0678660772c843a"
integrity sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==
-"@rollup/rollup-linux-ppc64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz#e8de8bd3463f96b92b7dfb7f151fd80ffe8a937c"
- integrity sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==
-
-"@rollup/rollup-linux-ppc64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz#8c508fe28a239da83b3a9da75bcf093186e064b4"
- integrity sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==
-
"@rollup/rollup-linux-riscv64-gnu@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz#eebc99e75832891d58532501879ca749b1592f93"
integrity sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==
-"@rollup/rollup-linux-riscv64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz#ff6d51976e0830732880770a9e18553136b8d92b"
- integrity sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==
-
"@rollup/rollup-linux-riscv64-musl@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz#9a2df234d61763a44601eba17c36844a18f20539"
integrity sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==
-"@rollup/rollup-linux-riscv64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz#325fb35eefc7e81d75478318f0deee1e4a111493"
- integrity sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==
-
"@rollup/rollup-linux-s390x-gnu@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz#f0e45ea7e41ee473c85458b1ec8fab9572cc1834"
integrity sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==
-"@rollup/rollup-linux-s390x-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz#37410fabb5d3ba4ad34abcfbe9ba9b6288413f30"
- integrity sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==
-
"@rollup/rollup-linux-x64-gnu@4.46.2":
version "4.46.2"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz#1e936446f90b2574ea4a83b4842a762cc0a0aed3"
@@ -2792,76 +2696,36 @@
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz#ed63dec576799fa5571eee5b2040f65faa82b49b"
integrity sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==
-"@rollup/rollup-linux-x64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz#8ef907a53b2042068fc03fcc6a641e2b02276eca"
- integrity sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==
-
"@rollup/rollup-linux-x64-musl@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz#755c56ac79b17fbdf0359bce7e2293a11de30ad0"
integrity sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==
-"@rollup/rollup-linux-x64-musl@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz#61b9ba09ea219e0174b3f35a6ad2afc94bdd5662"
- integrity sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==
-
-"@rollup/rollup-openbsd-x64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz#fc4e54133134c1787d0b016ffdd5aeb22a5effd3"
- integrity sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==
-
"@rollup/rollup-openharmony-arm64@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz#84b4170fe28c2b41e406add6ccf8513bf91195ea"
integrity sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==
-"@rollup/rollup-openharmony-arm64@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz#959ae225b1eeea0cc5b7c9f88e4834330fb6cd09"
- integrity sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==
-
"@rollup/rollup-win32-arm64-msvc@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz#4fb0cd004183da819bec804eba70f1ef6936ccbf"
integrity sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==
-"@rollup/rollup-win32-arm64-msvc@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz#842acd38869fa1cbdbc240c76c67a86f93444c27"
- integrity sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==
-
"@rollup/rollup-win32-ia32-msvc@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz#1788ba80313477a31e6214390906201604ee38eb"
integrity sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==
-"@rollup/rollup-win32-ia32-msvc@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz#7ab654def4042df44cb29f8ed9d5044e850c66d5"
- integrity sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==
-
"@rollup/rollup-win32-x64-gnu@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz#867222f288a9557487900c7836998123ebbadc9d"
integrity sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==
-"@rollup/rollup-win32-x64-gnu@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz#7426cdec1b01d2382ffd5cda83cbdd1c8efb3ca6"
- integrity sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==
-
"@rollup/rollup-win32-x64-msvc@4.52.3":
version "4.52.3"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz#3f55b6e8fe809a7d29959d6bc686cce1804581f0"
integrity sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==
-"@rollup/rollup-win32-x64-msvc@4.56.0":
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz#9eec0212732a432c71bde0350bc40b673d15b2db"
- integrity sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==
-
"@rtsao/scc@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8"
@@ -2872,13 +2736,13 @@
resolved "https://registry.yarnpkg.com/@sanity/diff-match-patch/-/diff-match-patch-3.2.0.tgz#7ce587273f7372a146308cb1075ba26177d42cdb"
integrity sha512-4hPADs0qUThFZkBK/crnfKKHg71qkRowfktBljH2UIxGHHTxIzt8g8fBiXItyCjxkuNy+zpYOdRMifQNv8+Yww==
-"@schematics/angular@20.3.15":
- version "20.3.15"
- resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.3.15.tgz#b66d9c3b5550bc660fb80ec8fdeead43df9a776d"
- integrity sha512-WkhW1HO8pA8JT8e27tvjQHQg8eO5KaOz+WsGkN00RyL5DwHgPSzu4a3eYug+b3rW7OGFub7jadXBuGSrzqgonA==
+"@schematics/angular@20.3.16":
+ version "20.3.16"
+ resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.3.16.tgz#f29cb0cf93aec3a13f00ad514d6f9cbe563bdc07"
+ integrity sha512-KeOcsM5piwv/6tUKBmLD1zXTwtJlZBnR2WM/4T9ImaQbmFGe1MMHUABT5SQ3Bifv1YKCw58ImxiaQUY9sdNqEQ==
dependencies:
- "@angular-devkit/core" "20.3.15"
- "@angular-devkit/schematics" "20.3.15"
+ "@angular-devkit/core" "20.3.16"
+ "@angular-devkit/schematics" "20.3.16"
jsonc-parser "3.3.1"
"@sigstore/bundle@^4.0.0":
@@ -3920,9 +3784,9 @@ ansi-colors@4.1.3:
integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
ansi-escapes@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7"
- integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.3.0.tgz#5395bb74b2150a4a1d6e3c2565f4aeca78d28627"
+ integrity sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==
dependencies:
environment "^1.0.0"
@@ -3937,9 +3801,9 @@ ansi-regex@^5.0.1:
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
ansi-regex@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
- integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
+ integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
ansi-styles@^3.2.1:
version "3.2.1"
@@ -3956,9 +3820,9 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
color-convert "^2.0.1"
ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
+ integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
ansidec@^0.3.4:
version "0.3.4"
@@ -4181,15 +4045,20 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+balanced-match@^4.0.2:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a"
+ integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==
+
base64-arraybuffer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc"
integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
baseline-browser-mapping@^2.9.0:
- version "2.9.17"
- resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz#9d6019766cd7eba738cb5f32c84b9f937cc87780"
- integrity sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz#5b09935025bf8a80e29130251e337c6a7fc8cbb9"
+ integrity sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==
batch@0.6.1:
version "0.6.1"
@@ -4272,19 +4141,19 @@ boolbase@^1.0.0:
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
+ integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+brace-expansion@^5.0.2:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.3.tgz#6a9c6c268f85b53959ec527aeafe0f7300258eef"
+ integrity sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==
dependencies:
- balanced-match "^1.0.0"
+ balanced-match "^4.0.2"
braces@^3.0.3, braces@~3.0.2:
version "3.0.3"
@@ -4385,9 +4254,9 @@ camelcase@^5.0.0:
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760:
- version "1.0.30001766"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz#b6f6b55cb25a2d888d9393104d14751c6a7d6f7a"
- integrity sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==
+ version "1.0.30001774"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz#0e576b6f374063abcd499d202b9ba1301be29b70"
+ integrity sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==
canvas-gauges@^2.1.7:
version "2.1.7"
@@ -4456,9 +4325,9 @@ chokidar@^3.6.0:
fsevents "~2.3.2"
chokidar@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41"
- integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
+ integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
dependencies:
readdirp "^4.0.1"
@@ -5428,14 +5297,14 @@ ee-first@1.1.1:
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
electron-to-chromium@^1.5.263:
- version "1.5.278"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz#807a5e321f012a41bfd64e653f35993c9af95493"
- integrity sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==
+ version "1.5.302"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz#032a5802b31f7119269959c69fe2015d8dad5edb"
+ integrity sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==
emoji-regex@^10.3.0:
- version "10.4.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4"
- integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==
+ version "10.6.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d"
+ integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==
emoji-regex@^8.0.0:
version "8.0.0"
@@ -5469,13 +5338,13 @@ encoding@^0.1.13:
dependencies:
iconv-lite "^0.6.2"
-enhanced-resolve@^5.17.4:
- version "5.18.4"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828"
- integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==
+enhanced-resolve@^5.19.0:
+ version "5.19.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c"
+ integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==
dependencies:
graceful-fs "^4.2.4"
- tapable "^2.2.0"
+ tapable "^2.3.0"
entities@^4.2.0:
version "4.5.0"
@@ -5801,10 +5670,10 @@ eslint-visitor-keys@^5.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz#b9aa1a74aa48c44b3ae46c1597ce7171246a94a9"
integrity sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==
-eslint@~9.39.2:
- version "9.39.2"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.2.tgz#cb60e6d16ab234c0f8369a3fe7cc87967faf4b6c"
- integrity sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==
+eslint@9.39.3:
+ version "9.39.3"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.3.tgz#08d63df1533d7743c0907b32a79a7e134e63ee2f"
+ integrity sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==
dependencies:
"@eslint-community/eslint-utils" "^4.8.0"
"@eslint-community/regexpp" "^4.12.1"
@@ -5812,7 +5681,7 @@ eslint@~9.39.2:
"@eslint/config-helpers" "^0.4.2"
"@eslint/core" "^0.17.0"
"@eslint/eslintrc" "^3.3.1"
- "@eslint/js" "9.39.2"
+ "@eslint/js" "9.39.3"
"@eslint/plugin-kit" "^0.4.1"
"@humanfs/node" "^0.16.6"
"@humanwhocodes/module-importer" "^1.0.1"
@@ -5904,9 +5773,9 @@ eventemitter3@^4.0.0:
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
eventemitter3@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
- integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb"
+ integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==
events@^3.2.0:
version "3.3.0"
@@ -5930,10 +5799,12 @@ exponential-backoff@^3.1.1:
resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
-express-rate-limit@^7.5.0:
- version "7.5.1"
- resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec"
- integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==
+express-rate-limit@^8.2.1:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-8.2.1.tgz#ec75fdfe280ecddd762b8da8784c61bae47d7f7f"
+ integrity sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==
+ dependencies:
+ ip-address "10.0.1"
express@^4.21.2:
version "4.22.1"
@@ -5972,7 +5843,7 @@ express@^4.21.2:
utils-merge "1.0.1"
vary "~1.1.2"
-express@^5.0.1:
+express@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04"
integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==
@@ -6033,9 +5904,9 @@ fast-levenshtein@^2.0.6:
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fast-uri@^3.0.1:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241"
- integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa"
+ integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==
fastq@^1.6.0:
version "1.17.1"
@@ -6184,13 +6055,15 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.0"
signal-exit "^4.0.1"
-form-data@4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
- integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+form-data@4.0.0, form-data@>=4.0.4:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053"
+ integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
+ hasown "^2.0.2"
mime-types "^2.1.12"
formdata-polyfill@^4.0.10:
@@ -6299,10 +6172,10 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-east-asian-width@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389"
- integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==
+get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz#ce7008fe345edcf5497a6f557cfa54bc318a9ce7"
+ integrity sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==
get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0:
version "1.3.0"
@@ -6494,6 +6367,11 @@ hasown@^2.0.2:
dependencies:
function-bind "^1.1.2"
+hono@^4.11.4:
+ version "4.12.2"
+ resolved "https://registry.yarnpkg.com/hono/-/hono-4.12.2.tgz#05c311c271b06685a0f229c484e3a2637d7d5f2a"
+ integrity sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==
+
hosted-git-info@^9.0.0:
version "9.0.2"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada"
@@ -6748,6 +6626,11 @@ internmap@^1.0.0:
resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95"
integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==
+ip-address@10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.0.1.tgz#a8180b783ce7788777d796286d61bce4276818ed"
+ integrity sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==
+
ip-address@^9.0.5:
version "9.0.5"
resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
@@ -6875,11 +6758,11 @@ is-fullwidth-code-point@^4.0.0:
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
is-fullwidth-code-point@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704"
- integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98"
+ integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==
dependencies:
- get-east-asian-width "^1.0.0"
+ get-east-asian-width "^1.3.1"
is-generator-function@^1.0.10:
version "1.1.2"
@@ -7120,7 +7003,7 @@ jiti@^1.20.0, jiti@^1.21.7:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9"
integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==
-jose@^6.1.1:
+jose@^6.1.3:
version "6.1.3"
resolved "https://registry.yarnpkg.com/jose/-/jose-6.1.3.tgz#8453d7be88af7bb7d64a0481d6a35a0145ba3ea5"
integrity sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==
@@ -7849,34 +7732,27 @@ minimalistic-assert@^1.0.0:
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-minimatch@9.0.1:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253"
- integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==
+minimatch@9.0.1, minimatch@^9.0.4, minimatch@^9.0.5, minimatch@~9.0.6:
+ version "9.0.6"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.6.tgz#a7e3bccfcb3d78ec1bf8d51c9ba749080237a5c8"
+ integrity sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==
dependencies:
- brace-expansion "^2.0.1"
+ brace-expansion "^5.0.2"
minimatch@^10.0.3, minimatch@^10.1.1:
- version "10.1.1"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55"
- integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==
+ version "10.2.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.2.tgz#361603ee323cfb83496fea2ae17cc44ea4e1f99f"
+ integrity sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==
dependencies:
- "@isaacs/brace-expansion" "^5.0.0"
+ brace-expansion "^5.0.2"
minimatch@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.3.tgz#6a5cba9b31f503887018f579c89f81f61162e624"
+ integrity sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==
dependencies:
brace-expansion "^1.1.7"
-minimatch@^9.0.4, minimatch@^9.0.5:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
- integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
- dependencies:
- brace-expansion "^2.0.1"
-
minimist@1.2.8, minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
@@ -9050,9 +8926,9 @@ readable-stream@^3.0.6:
util-deprecate "^1.0.1"
readdirp@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a"
- integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
+ integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
readdirp@~3.6.0:
version "3.6.0"
@@ -9237,7 +9113,7 @@ robust-predicates@^3.0.2:
resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771"
integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==
-rollup@4.52.3:
+rollup@4.52.3, rollup@^4.43.0:
version "4.52.3"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.3.tgz#cc5c28d772b022ce48b235a97b347ccd9d88c1a3"
integrity sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==
@@ -9268,40 +9144,6 @@ rollup@4.52.3:
"@rollup/rollup-win32-x64-msvc" "4.52.3"
fsevents "~2.3.2"
-rollup@^4.43.0:
- version "4.56.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.56.0.tgz#65959d13cfbd7e48b8868c05165b1738f0143862"
- integrity sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==
- dependencies:
- "@types/estree" "1.0.8"
- optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.56.0"
- "@rollup/rollup-android-arm64" "4.56.0"
- "@rollup/rollup-darwin-arm64" "4.56.0"
- "@rollup/rollup-darwin-x64" "4.56.0"
- "@rollup/rollup-freebsd-arm64" "4.56.0"
- "@rollup/rollup-freebsd-x64" "4.56.0"
- "@rollup/rollup-linux-arm-gnueabihf" "4.56.0"
- "@rollup/rollup-linux-arm-musleabihf" "4.56.0"
- "@rollup/rollup-linux-arm64-gnu" "4.56.0"
- "@rollup/rollup-linux-arm64-musl" "4.56.0"
- "@rollup/rollup-linux-loong64-gnu" "4.56.0"
- "@rollup/rollup-linux-loong64-musl" "4.56.0"
- "@rollup/rollup-linux-ppc64-gnu" "4.56.0"
- "@rollup/rollup-linux-ppc64-musl" "4.56.0"
- "@rollup/rollup-linux-riscv64-gnu" "4.56.0"
- "@rollup/rollup-linux-riscv64-musl" "4.56.0"
- "@rollup/rollup-linux-s390x-gnu" "4.56.0"
- "@rollup/rollup-linux-x64-gnu" "4.56.0"
- "@rollup/rollup-linux-x64-musl" "4.56.0"
- "@rollup/rollup-openbsd-x64" "4.56.0"
- "@rollup/rollup-openharmony-arm64" "4.56.0"
- "@rollup/rollup-win32-arm64-msvc" "4.56.0"
- "@rollup/rollup-win32-ia32-msvc" "4.56.0"
- "@rollup/rollup-win32-x64-gnu" "4.56.0"
- "@rollup/rollup-win32-x64-msvc" "4.56.0"
- fsevents "~2.3.2"
-
roughjs@^4.6.6:
version "4.6.6"
resolved "https://registry.yarnpkg.com/roughjs/-/roughjs-4.6.6.tgz#1059f49a5e0c80dee541a005b20cc322b222158b"
@@ -9463,7 +9305,7 @@ semver@7.7.2:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
-semver@7.7.3, semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.7.3:
+semver@7.7.3:
version "7.7.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
@@ -9478,6 +9320,11 @@ semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.7.3:
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
+ integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
+
send@^1.1.0, send@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed"
@@ -9700,9 +9547,9 @@ slice-ansi@^5.0.0:
is-fullwidth-code-point "^4.0.0"
slice-ansi@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9"
- integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.2.tgz#adf7be70aa6d72162d907cd0e6d5c11f507b5403"
+ integrity sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==
dependencies:
ansi-styles "^6.2.1"
is-fullwidth-code-point "^5.0.0"
@@ -9978,9 +9825,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
ansi-regex "^5.0.1"
strip-ansi@^7.0.1, strip-ansi@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba"
+ integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
dependencies:
ansi-regex "^6.0.1"
@@ -10088,15 +9935,15 @@ tailwindcss@^3.4.19:
resolve "^1.22.8"
sucrase "^3.35.0"
-tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0:
+tapable@^2.2.1, tapable@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6"
integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==
tar@^7.4.3, tar@^7.5.2:
- version "7.5.6"
- resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.6.tgz#2db7a210748a82f0a89cc31527b90d3a24984fb7"
- integrity sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==
+ version "7.5.9"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.9.tgz#817ac12a54bc4362c51340875b8985d7dc9724b8"
+ integrity sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==
dependencies:
"@isaacs/fs-minipass" "^4.0.0"
chownr "^3.0.0"
@@ -10626,7 +10473,7 @@ watchpack@2.4.4:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
-watchpack@^2.4.4:
+watchpack@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102"
integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==
@@ -10737,10 +10584,10 @@ webpack-subresource-integrity@5.1.0:
dependencies:
typed-assert "^1.0.8"
-webpack@5.104.1:
- version "5.104.1"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.1.tgz#94bd41eb5dbf06e93be165ba8be41b8260d4fb1a"
- integrity sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==
+webpack@5.105.0:
+ version "5.105.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a"
+ integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==
dependencies:
"@types/eslint-scope" "^3.7.7"
"@types/estree" "^1.0.8"
@@ -10752,7 +10599,7 @@ webpack@5.104.1:
acorn-import-phases "^1.0.3"
browserslist "^4.28.1"
chrome-trace-event "^1.0.2"
- enhanced-resolve "^5.17.4"
+ enhanced-resolve "^5.19.0"
es-module-lexer "^2.0.0"
eslint-scope "5.1.1"
events "^3.2.0"
@@ -10765,7 +10612,7 @@ webpack@5.104.1:
schema-utils "^4.3.3"
tapable "^2.3.0"
terser-webpack-plugin "^5.3.16"
- watchpack "^2.4.4"
+ watchpack "^2.5.1"
webpack-sources "^3.3.3"
websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
@@ -10907,9 +10754,9 @@ wrap-ansi@^8.1.0:
strip-ansi "^7.0.1"
wrap-ansi@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e"
- integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==
+ version "9.0.2"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98"
+ integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==
dependencies:
ansi-styles "^6.2.1"
string-width "^7.0.0"
@@ -11019,7 +10866,7 @@ yoctocolors-cjs@^2.1.3:
resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa"
integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==
-zod-to-json-schema@^3.25.0:
+zod-to-json-schema@^3.25.1:
version "3.25.1"
resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz#7f24962101a439ddade2bf1aeab3c3bfec7d84ba"
integrity sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==