diff --git a/.gitignore b/.gitignore
index f138d8c..6de2706 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,4 +51,5 @@ tools/assets/App_Resources/Android/src/main/assets/ionicWebStart
tools/assets/App_Resources/iOS/ionicWebModal
tools/assets/App_Resources/Android/src/main/assets/ionicWebModal
.nx/cache
-.nx/workspace-data
\ No newline at end of file
+.nx/workspace-data
+packages/widgets/platforms/android/widgets.aar
diff --git a/README.md b/README.md
index 8e5b2d8..fb6266f 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@
- [@nativescript/rive](packages/rive/README.md)
- [@nativescript/swift-ui](packages/swift-ui/README.md)
- [@nativescript/ui-charts](packages/ui-charts/README.md)
+- [@nativescript/widgets](packages/widgets/README.md)
# How to use?
diff --git a/apps/demo-angular/package.json b/apps/demo-angular/package.json
index e18630a..612b790 100644
--- a/apps/demo-angular/package.json
+++ b/apps/demo-angular/package.json
@@ -8,7 +8,8 @@
"@nativescript/jetpack-compose": "file:../../dist/packages/jetpack-compose",
"@nativescript/rive": "file:../../dist/packages/rive",
"@nativescript/swift-ui": "file:../../dist/packages/swift-ui",
- "@nativescript/ui-charts": "file:../../dist/packages/ui-charts"
+ "@nativescript/ui-charts": "file:../../dist/packages/ui-charts",
+ "@nativescript/widgets": "file:../../dist/packages/widgets"
},
"devDependencies": {
"@nativescript/android": "~8.9.0",
diff --git a/apps/demo-angular/src/app-routing.module.ts b/apps/demo-angular/src/app-routing.module.ts
index 330b4a4..a201e98 100644
--- a/apps/demo-angular/src/app-routing.module.ts
+++ b/apps/demo-angular/src/app-routing.module.ts
@@ -14,6 +14,7 @@ const routes: Routes = [
{ path: 'rive', loadChildren: () => import('./plugin-demos/rive.module').then((m) => m.RiveModule) },
{ path: 'swift-ui', loadChildren: () => import('./plugin-demos/swift-ui.module').then((m) => m.SwiftUiModule) },
{ path: 'ui-charts', loadChildren: () => import('./plugin-demos/ui-charts.module').then((m) => m.UiChartsModule) },
+ { path: 'widgets', loadChildren: () => import('./plugin-demos/widgets.module').then((m) => m.WidgetsModule) },
];
@NgModule({
diff --git a/apps/demo-angular/src/home.component.ts b/apps/demo-angular/src/home.component.ts
index bf915b4..3a312d1 100644
--- a/apps/demo-angular/src/home.component.ts
+++ b/apps/demo-angular/src/home.component.ts
@@ -27,5 +27,8 @@ export class HomeComponent {
{
name: 'ui-charts',
},
+ {
+ name: 'widgets',
+ },
];
}
diff --git a/apps/demo-angular/src/plugin-demos/widgets.component.html b/apps/demo-angular/src/plugin-demos/widgets.component.html
new file mode 100644
index 0000000..865ee30
--- /dev/null
+++ b/apps/demo-angular/src/plugin-demos/widgets.component.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/apps/demo-angular/src/plugin-demos/widgets.component.ts b/apps/demo-angular/src/plugin-demos/widgets.component.ts
new file mode 100644
index 0000000..0cf7651
--- /dev/null
+++ b/apps/demo-angular/src/plugin-demos/widgets.component.ts
@@ -0,0 +1,17 @@
+import { Component, NgZone } from '@angular/core';
+import { DemoSharedWidgets } from '@demo/shared';
+import {} from '@nativescript/widgets';
+
+@Component({
+ selector: 'demo-widgets',
+ templateUrl: 'widgets.component.html',
+})
+export class WidgetsComponent {
+ demoShared: DemoSharedWidgets;
+
+ constructor(private _ngZone: NgZone) {}
+
+ ngOnInit() {
+ this.demoShared = new DemoSharedWidgets();
+ }
+}
diff --git a/apps/demo-angular/src/plugin-demos/widgets.module.ts b/apps/demo-angular/src/plugin-demos/widgets.module.ts
new file mode 100644
index 0000000..61f4e76
--- /dev/null
+++ b/apps/demo-angular/src/plugin-demos/widgets.module.ts
@@ -0,0 +1,10 @@
+import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
+import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular';
+import { WidgetsComponent } from './widgets.component';
+
+@NgModule({
+ imports: [NativeScriptCommonModule, NativeScriptRouterModule.forChild([{ path: '', component: WidgetsComponent }])],
+ declarations: [WidgetsComponent],
+ schemas: [NO_ERRORS_SCHEMA],
+})
+export class WidgetsModule {}
diff --git a/apps/demo-angular/tsconfig.json b/apps/demo-angular/tsconfig.json
index 0408fed..a1ee810 100644
--- a/apps/demo-angular/tsconfig.json
+++ b/apps/demo-angular/tsconfig.json
@@ -11,7 +11,8 @@
"@nativescript/jetpack-compose": ["../../packages/jetpack-compose/index.d.ts"],
"@nativescript/rive": ["../../packages/rive/index.d.ts"],
"@nativescript/swift-ui": ["../../packages/swift-ui/index.d.ts"],
- "@nativescript/ui-charts": ["../../packages/ui-charts/index.d.ts"]
+ "@nativescript/ui-charts": ["../../packages/ui-charts/index.d.ts"],
+ "@nativescript/widgets": ["../../packages/widgets/index.d.ts"]
}
},
"files": ["./references.d.ts", "./src/main.ts", "./src/polyfills.ts"],
diff --git a/apps/demo/package.json b/apps/demo/package.json
index 18b0f20..28fa4a1 100644
--- a/apps/demo/package.json
+++ b/apps/demo/package.json
@@ -11,7 +11,8 @@
"@nativescript/jetpack-compose": "file:../../packages/jetpack-compose",
"@nativescript/rive": "file:../../packages/rive",
"@nativescript/swift-ui": "file:../../packages/swift-ui",
- "@nativescript/ui-charts": "file:../../packages/ui-charts"
+ "@nativescript/ui-charts": "file:../../packages/ui-charts",
+ "@nativescript/widgets": "file:../../packages/widgets"
},
"devDependencies": {
"@nativescript/android": "~8.9.0",
diff --git a/apps/demo/src/app.ts b/apps/demo/src/app.ts
index 1c53e3f..b8be8f4 100644
--- a/apps/demo/src/app.ts
+++ b/apps/demo/src/app.ts
@@ -1,5 +1,5 @@
-import { Application } from '@nativescript/core';
-
+import { Application, Http, ImageSource } from '@nativescript/core';
+import { registerWidgetListener, LinearLayout, ImageView, Image, Button, VStack, List, Text, updateWidget, Root, HStack, ButtonView, Flipper, Chronometer, Clock, Grid, ProgressBar, Stack, Spacer, Switch, CheckBox, RadioButton } from '@nativescript/widgets';
// uncomment to test Flutter
// import { init } from '@nativescript/flutter';
// init();
@@ -17,4 +17,271 @@ import { Application } from '@nativescript/core';
// IonicPortalManager.register('');
// });
+// 1. Countdown timer widget
+function countdownWidget(provider: string, ids: number[]) {
+ const targetTime = Date.now() + 3600000; // 1 hour from now
+ const root = Root(() =>
+ VStack(() => [
+ Text('⏱️ Countdown').setColor('#1a1a2e').setTextSize(18),
+ Spacer(12),
+ Chronometer({
+ targetTime: targetTime, // Use targetTime for Unix timestamps
+ countDown: true,
+ started: true,
+ })
+ .setColor('#e74c3c')
+ .setTextSize(32),
+ Spacer(8),
+ Text('until deadline').setColor('#6c757d').setTextSize(12),
+ ]),
+ )
+ .setBackgroundColor('#ffffff')
+ .setPadding(16);
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 2. Clock widget
+function clockWidget(provider: string, ids: number[]) {
+ const root = Root(() => VStack(() => [Text('🕐 Current Time').setColor('#ecf0f1').setTextSize(14), Spacer(12), Clock({ color: '#3498db' }).setTextSize(42), Spacer(8), Text('Local timezone').setColor('#7f8c8d').setTextSize(11)]))
+ .setBackgroundColor('#1a1a2e')
+ .setPadding(16);
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 3. Progress indicator
+function progressWidget(provider: string, ids: number[]) {
+ const root = Root(() => VStack(() => [HStack(() => [Text('⬇️ Downloading').setColor('#2c3e50').setTextSize(16), Spacer(), Text('65%').setColor('#27ae60').setTextSize(16)]), Spacer(12), ProgressBar({ progress: 65, max: 100 }), Spacer(8), Text('file_backup.zip • 650 MB / 1 GB').setColor('#7f8c8d').setTextSize(11)]))
+ .setBackgroundColor('#ffffff')
+ .setPadding(16);
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 4. List with click handlers
+function listWidget(provider: string, ids: number[]) {
+ const items = [
+ { icon: '📥', name: 'Inbox', count: 12 },
+ { icon: '⭐', name: 'Starred', count: 3 },
+ { icon: '📤', name: 'Sent', count: 0 },
+ { icon: '📝', name: 'Drafts', count: 2 },
+ { icon: '🗑️', name: 'Trash', count: 0 },
+ ];
+ const root = Root(() =>
+ VStack(() => [
+ Text('📧 Mail').setColor('#2c3e50').setTextSize(18),
+ Spacer(8),
+ List(
+ items.length,
+ (index) => HStack(() => [Text(`${items[index].icon} ${items[index].name}`).setColor('#34495e').setTextSize(14), Spacer(), items[index].count > 0 ? Text(`${items[index].count}`).setColor('#3498db').setTextSize(12) : Text('').setTextSize(12)]).setMargin(4, 8, 4, 8),
+ () => Text('No folders').setColor('#95a5a6'),
+ ),
+ ]),
+ )
+ .setBackgroundColor('#ffffff')
+ .setPadding(12);
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 5. Image flipper/slideshow
+async function slideshowWidget(provider: string, ids: number[], loadImages = false) {
+ const imageUrls = ['https://picsum.photos/seed/1/400/300', 'https://picsum.photos/seed/2/400/300', 'https://picsum.photos/seed/3/400/300', 'https://picsum.photos/seed/4/400/300'];
+
+ const images = loadImages ? await Promise.all(imageUrls.map((url) => ImageSource.fromUrl(url))) : imageUrls;
+
+ const root = Root(() => VStack(() => [Text('📷 Gallery').setColor('#ffffff').setTextSize(16), Spacer(8), Flipper(images as never[], 3000, (src) => Image(src)), Spacer(8), Text('Auto-advances every 3s').setColor('#adb5bd').setTextSize(11)]))
+ .setBackgroundColor('#2c3e50')
+ .setPadding(12);
+
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 6. Grid layout
+function gridWidget(provider: string, ids: number[]) {
+ const actions = [
+ { icon: '📞', label: 'Call', color: '#3498db', bg: '#ebf5fb' },
+ { icon: '💬', label: 'Message', color: '#9b59b6', bg: '#f5eef8' },
+ { icon: '📧', label: 'Email', color: '#e74c3c', bg: '#fdedec' },
+ { icon: '📅', label: 'Calendar', color: '#27ae60', bg: '#eafaf1' },
+ { icon: '📷', label: 'Camera', color: '#f39c12', bg: '#fef9e7' },
+ { icon: '🎵', label: 'Music', color: '#e91e63', bg: '#fce4ec' },
+ ];
+
+ const root = Root(() =>
+ VStack(() => [
+ HStack(() => [Text('⚡ Quick Actions').setColor('#1a1a2e').setTextSize(18), Spacer(), Text('6 apps').setColor('#95a5a6').setTextSize(12)]),
+ Spacer(16),
+ Grid(3, 12, () =>
+ actions.map((action) =>
+ VStack(() => [
+ VStack(() => [Text(action.icon).setTextSize(28), Spacer(6), Text(action.label).setColor(action.color).setTextSize(11)])
+ .setBackgroundColor(action.bg)
+ .setPadding(12),
+ Spacer(4),
+ ]),
+ ),
+ ),
+ ]),
+ )
+ .setBackgroundColor('#ffffff')
+ .setPadding(16);
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 6b. Toggle widget (single Switch)
+function toggleWidget(provider: string, ids: number[]) {
+ const root = Root(() => VStack(() => [HStack(() => [Text('🔔 Notifications').setTextSize(16), Spacer(), Text('On').setTextSize(12)]), Spacer(12), HStack(() => [Text('Push alerts').setTextSize(14), Spacer(), Switch(true)]), Spacer(8), Text('Tap the switch to toggle').setColor('#95a5a6').setTextSize(11)]))
+ .setBackgroundColor('#ffffff')
+ .setPadding(12);
+
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 6c. Checklist widget (multiple checkboxes)
+function checklistWidget(provider: string, ids: number[]) {
+ const items = [
+ { label: 'Buy groceries', checked: true },
+ { label: 'Send invoices', checked: false },
+ { label: 'Workout', checked: false },
+ ];
+
+ const root = Root(() => VStack(() => [Text('🗒️ Today').setTextSize(18), Spacer(8), ...items.map((it) => HStack(() => [CheckBox(it.checked).onCheck('toggle', { label: it.label }), Spacer(8), Text(it.label).setTextSize(14)]).setMargin(6, 8, 6, 8))]))
+ .setBackgroundColor('#ffffff')
+ .setPadding(12);
+
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 6d. Radio group widget (select one)
+function radioWidget(provider: string, ids: number[]) {
+ const options = [
+ { label: 'Home', checked: true },
+ { label: 'Work', checked: false },
+ { label: 'Travel', checked: false },
+ ];
+
+ const root = Root(() => VStack(() => [Text('📍 Mode').setTextSize(18), Spacer(8), ...options.map((opt) => HStack(() => [RadioButton(opt.checked), Spacer(8), Text(opt.label).setTextSize(14)]).setMargin(6, 6, 6, 6))]))
+ .setBackgroundColor('#ffffff')
+ .setPadding(12);
+
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 7. StackView (swipeable cards)
+function stackWidget(provider: string, ids: number[]) {
+ const cards = [
+ { title: 'Meeting Notes', subtitle: 'Project sync @ 2pm', color: '#3498db' },
+ { title: 'Shopping List', subtitle: '5 items remaining', color: '#e74c3c' },
+ { title: 'Workout Plan', subtitle: 'Leg day tomorrow', color: '#27ae60' },
+ ];
+ const root = Root(() =>
+ VStack(() => [
+ Text('📚 Cards').setColor('#ffffff').setTextSize(16),
+ Spacer(8),
+ Stack(cards.length, (index) =>
+ VStack(() => [Text(cards[index].title).setColor('#2c3e50').setTextSize(16), Spacer(4), Text(cards[index].subtitle).setColor('#7f8c8d').setTextSize(12)])
+ .setBackgroundColor('#ffffff')
+ .setPadding(12),
+ ),
+ Spacer(8),
+ Text('Swipe to browse').setColor('#adb5bd').setTextSize(11),
+ ]),
+ )
+ .setBackgroundColor('#34495e')
+ .setPadding(12);
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+// 8. Complex combined layout
+function dashboardWidget(provider: string, ids: number[]) {
+ const tasks = [
+ { name: 'Review PR #142', done: true },
+ { name: 'Update documentation', done: true },
+ { name: 'Fix login bug', done: false },
+ { name: 'Deploy to staging', done: false },
+ { name: 'Team standup', done: false },
+ ];
+ const completed = tasks.filter((t) => t.done).length;
+ const progress = Math.round((completed / tasks.length) * 100);
+
+ const root = Root(() =>
+ VStack(() => [
+ // Header row
+ HStack(() => [Text('📊 Dashboard').setColor('#1a1a2e').setTextSize(18), Spacer(), Clock({ color: '#6c757d' }).setTextSize(14)]),
+
+ Spacer(12),
+
+ // Progress section
+ Text('Sprint Progress').setColor('#495057').setTextSize(12),
+ Spacer(4),
+ HStack(() => [ProgressBar({ progress, max: 100, flex: true }), Spacer(8), Text(`${progress}%`).setColor('#27ae60').setTextSize(14)]),
+
+ Spacer(16),
+
+ // Tasks section
+ HStack(() => [Text('Tasks').setColor('#495057').setTextSize(12), Spacer(), Text(`${completed}/${tasks.length}`).setColor('#6c757d').setTextSize(11)]),
+ Spacer(4),
+ List(tasks.length, (i) =>
+ HStack(() => [
+ CheckBox(tasks[i].done).onCheck('toggleTask', { name: tasks[i].name }),
+ Spacer(8),
+ Text(tasks[i].name)
+ .setColor(tasks[i].done ? '#27ae60' : '#212529')
+ .setTextSize(13),
+ ]),
+ ),
+ ]),
+ )
+ .setBackgroundColor('#ffffff')
+ .setPadding(16);
+ for (const id of ids) updateWidget(provider, root, id);
+}
+
+registerWidgetListener('org.nativescript.plugindemo.PluginDemoWidgetProvider', {
+ onClick(event) {
+ console.log('Widget clicked', event);
+ },
+ onCheck(event) {
+ console.log('Check toggled', event);
+ },
+ onUpdate: (event) => {
+ dashboardWidget(event.provider, event.appWidgetIds);
+ //countdownWidget(event.provider, event.appWidgetIds);
+ // clockWidget(event.provider, event.appWidgetIds);
+ // progressWidget(event.provider, event.appWidgetIds);
+ // listWidget(event.provider, event.appWidgetIds);
+ // slideshowWidget(event.provider, event.appWidgetIds);
+ //gridWidget(event.provider, event.appWidgetIds);
+ //stackWidget(event.provider, event.appWidgetIds);
+ //toggleWidget(event.provider, event.appWidgetIds);
+ // checklistWidget(event.provider, event.appWidgetIds);
+ // radioWidget(event.provider, event.appWidgetIds);
+ /* const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
+ const list = List(
+ data.length,
+ (index) =>
+ VStack(() =>
+ HStack(() => {
+ const img = Image('').setSize(20, 20) as ImageView;
+ const ret = [img, Text(`Item ${index}`), Button('Click', () => console.log(`Clicked item ${index}`))];
+ rows.push({ row: ret as never, src: `https://picsum.photos/seed/${data[index]}/300/300` });
+ return ret;
+ }),
+ ),
+ () => Text('No content'),
+ ).setBackgroundColor('white');
+
+ const root = Root(() => list)
+ .setBackgroundColor('lightgray')
+ .setPadding(20);
+
+ rootView = root;
+ for (const id of event.appWidgetIds) {
+ updateWidget(event.provider, root, id);
+ }
+ */
+ },
+ async onUpdateAsync(event) {
+ // slideshowWidget(event.provider, event.appWidgetIds, true);
+ },
+});
+
Application.run({ moduleName: 'app-root' });
diff --git a/apps/demo/src/main-page.xml b/apps/demo/src/main-page.xml
index eec59c8..f652756 100644
--- a/apps/demo/src/main-page.xml
+++ b/apps/demo/src/main-page.xml
@@ -12,6 +12,7 @@
+
diff --git a/apps/demo/src/plugin-demos/widgets.ts b/apps/demo/src/plugin-demos/widgets.ts
new file mode 100644
index 0000000..9c00746
--- /dev/null
+++ b/apps/demo/src/plugin-demos/widgets.ts
@@ -0,0 +1,10 @@
+import { Observable, EventData, Page } from '@nativescript/core';
+import { DemoSharedWidgets } from '@demo/shared';
+import {} from '@nativescript/widgets';
+
+export function navigatingTo(args: EventData) {
+ const page = args.object;
+ page.bindingContext = new DemoModel();
+}
+
+export class DemoModel extends DemoSharedWidgets {}
diff --git a/apps/demo/src/plugin-demos/widgets.xml b/apps/demo/src/plugin-demos/widgets.xml
new file mode 100644
index 0000000..a719e05
--- /dev/null
+++ b/apps/demo/src/plugin-demos/widgets.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/demo/tsconfig.json b/apps/demo/tsconfig.json
index 154cbb3..b907cd8 100644
--- a/apps/demo/tsconfig.json
+++ b/apps/demo/tsconfig.json
@@ -13,7 +13,8 @@
"@nativescript/rive": ["../../packages/rive/index.d.ts"],
"@nativescript/ui-charts": ["../../packages/ui-charts/index.d.ts"],
"@nativescript/*": ["../../packages/*"],
- "@nativescript/morph-modal-kit": ["../../packages/morph-modal-kit/index.d.ts"]
+ "@nativescript/morph-modal-kit": ["../../packages/morph-modal-kit/index.d.ts"],
+ "@nativescript/widgets": ["../../packages/widgets/index.d.ts"]
}
}
}
diff --git a/package-lock.json b/package-lock.json
index aad81a0..69f4552 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -58,13 +58,13 @@
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.1902.19",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.19.tgz",
- "integrity": "sha512-iexYDIYpGAeAU7T60bGcfrGwtq1bxpZixYxWuHYiaD1b5baQgNSfd1isGEOh37GgDNsf4In9i2LOLPm0wBdtgQ==",
+ "version": "0.1902.20",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.20.tgz",
+ "integrity": "sha512-tEM8PX9RTIvgEPJH/9nDaGlhbjZf9BBFS2FXKuOwKB+NFvfZuuDpPH7CzJKyyvkQLPtoNh2Y9C92m2f+RXsBmQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "19.2.19",
+ "@angular-devkit/core": "19.2.20",
"rxjs": "7.8.1"
},
"engines": {
@@ -84,17 +84,17 @@
}
},
"node_modules/@angular-devkit/build-angular": {
- "version": "19.2.19",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.19.tgz",
- "integrity": "sha512-uIxi6Vzss6+ycljVhkyPUPWa20w8qxJL9lEn0h6+sX/fhM8Djt0FHIuTQjoX58EoMaQ/1jrXaRaGimkbaFcG9A==",
+ "version": "19.2.20",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.20.tgz",
+ "integrity": "sha512-m7J+k0lJEFvr6STGUQROx6TyoGn0WQsQiooO8WTkM8QUWKxSUmq4WImlPSq6y+thc+Jzx1EBw3yn73+phNIZag==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
- "@angular-devkit/architect": "0.1902.19",
- "@angular-devkit/build-webpack": "0.1902.19",
- "@angular-devkit/core": "19.2.19",
- "@angular/build": "19.2.19",
+ "@angular-devkit/architect": "0.1902.20",
+ "@angular-devkit/build-webpack": "0.1902.20",
+ "@angular-devkit/core": "19.2.20",
+ "@angular/build": "19.2.20",
"@babel/core": "7.26.10",
"@babel/generator": "7.26.10",
"@babel/helper-annotate-as-pure": "7.25.9",
@@ -105,7 +105,7 @@
"@babel/preset-env": "7.26.9",
"@babel/runtime": "7.26.10",
"@discoveryjs/json-ext": "0.6.3",
- "@ngtools/webpack": "19.2.19",
+ "@ngtools/webpack": "19.2.20",
"@vitejs/plugin-basic-ssl": "1.2.0",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.20",
@@ -140,7 +140,7 @@
"terser": "5.39.0",
"tree-kill": "1.2.2",
"tslib": "2.8.1",
- "webpack": "5.98.0",
+ "webpack": "5.105.0",
"webpack-dev-middleware": "7.4.2",
"webpack-dev-server": "5.2.2",
"webpack-merge": "6.0.1",
@@ -159,7 +159,7 @@
"@angular/localize": "^19.0.0 || ^19.2.0-next.0",
"@angular/platform-server": "^19.0.0 || ^19.2.0-next.0",
"@angular/service-worker": "^19.0.0 || ^19.2.0-next.0",
- "@angular/ssr": "^19.2.19",
+ "@angular/ssr": "^19.2.20",
"@web/test-runner": "^0.20.0",
"browser-sync": "^3.0.2",
"jest": "^29.5.0",
@@ -209,13 +209,6 @@
}
}
},
- "node_modules/@angular-devkit/build-angular/node_modules/es-module-lexer": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
- "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@angular-devkit/build-angular/node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -250,36 +243,52 @@
"tslib": "^2.1.0"
}
},
+ "node_modules/@angular-devkit/build-angular/node_modules/watchpack": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
+ "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/@angular-devkit/build-angular/node_modules/webpack": {
- "version": "5.98.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
- "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
+ "version": "5.105.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
+ "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/eslint-scope": "^3.7.7",
- "@types/estree": "^1.0.6",
+ "@types/estree": "^1.0.8",
+ "@types/json-schema": "^7.0.15",
"@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1",
- "acorn": "^8.14.0",
- "browserslist": "^4.24.0",
+ "acorn": "^8.15.0",
+ "acorn-import-phases": "^1.0.3",
+ "browserslist": "^4.28.1",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
- "es-module-lexer": "^1.2.1",
+ "enhanced-resolve": "^5.19.0",
+ "es-module-lexer": "^2.0.0",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
+ "loader-runner": "^4.3.1",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
- "schema-utils": "^4.3.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.11",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
+ "schema-utils": "^4.3.3",
+ "tapable": "^2.3.0",
+ "terser-webpack-plugin": "^5.3.16",
+ "watchpack": "^2.5.1",
+ "webpack-sources": "^3.3.3"
},
"bin": {
"webpack": "bin/webpack.js"
@@ -298,13 +307,13 @@
}
},
"node_modules/@angular-devkit/build-webpack": {
- "version": "0.1902.19",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.19.tgz",
- "integrity": "sha512-x2tlGg5CsUveFzuRuqeHknSbGirSAoRynEh+KqPRGK0G3WpMViW/M8SuVurecasegfIrDWtYZ4FnVxKqNbKwXQ==",
+ "version": "0.1902.20",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.20.tgz",
+ "integrity": "sha512-T8RLKZOR0+l3FBMBTUQk83I/Dr5RpNPCOE6tWqGjAMRPKoL1m5BbqhkQ7ygnyd8/ZRz/x1RUVM08l0AeuzWUmA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.1902.19",
+ "@angular-devkit/architect": "0.1902.20",
"rxjs": "7.8.1"
},
"engines": {
@@ -328,9 +337,9 @@
}
},
"node_modules/@angular-devkit/core": {
- "version": "19.2.19",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.19.tgz",
- "integrity": "sha512-JbLL+4IMLMBgjLZlnPG4lYDfz4zGrJ/s6Aoon321NJKuw1Kb1k5KpFu9dUY0BqLIe8xPQ2UJBpI+xXdK5MXMHQ==",
+ "version": "19.2.20",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.20.tgz",
+ "integrity": "sha512-4AAmHlv+H1/2Nmsp6QsX8YQxjC/v5QAzc+76He7K/x3iIuLCntQE2BYxonSZMiQ3M8gc/yxTfyZoPYjSDDvWMA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -366,14 +375,14 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "19.2.19",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.19.tgz",
- "integrity": "sha512-J4Jarr0SohdrHcb40gTL4wGPCQ952IMWF1G/MSAQfBAPvA9ZKApYhpxcY7PmehVePve+ujpus1dGsJ7dPxz8Kg==",
+ "version": "19.2.20",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.20.tgz",
+ "integrity": "sha512-o2eexF1fLZU93V3utiQLNgyNaGvFhDqpITNQcI1qzv2ZkvFHg9WZjFtZKtm805JAE/DND8oAJ1p+BoxU++Qg8g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "@angular-devkit/core": "19.2.19",
+ "@angular-devkit/core": "19.2.20",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.17",
"ora": "5.4.1",
@@ -397,9 +406,9 @@
}
},
"node_modules/@angular/animations": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.17.tgz",
- "integrity": "sha512-6VTet2fzTpSHEjxcVVzL8ZIyNGo/qsUs4XF/3wh9Iwu6qfWx711qXKlqGD/IHWzMTumzvQXbTV4hzvnO7fJvIQ==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.18.tgz",
+ "integrity": "sha512-c76x1t+OiSstPsvJdHmV8Q4taF+8SxWKqiY750fOjpd01it4jJbU6YQqIroC6Xie7154zZIxOTHH2uTj+nm5qA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -409,19 +418,19 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.17",
- "@angular/core": "19.2.17"
+ "@angular/common": "19.2.18",
+ "@angular/core": "19.2.18"
}
},
"node_modules/@angular/build": {
- "version": "19.2.19",
- "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.19.tgz",
- "integrity": "sha512-SFzQ1bRkNFiOVu+aaz+9INmts7tDUrsHLEr9HmARXr9qk5UmR8prlw39p2u+Bvi6/lCiJ18TZMQQl9mGyr63lg==",
+ "version": "19.2.20",
+ "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.20.tgz",
+ "integrity": "sha512-8bQ1afN8AJ6N9lJJgxYF08M0gp4R/4SIedSJfSLohscgHumYJ1mITEygoB1JK5O9CEKlr4YyLYfgay8xr92wbQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
- "@angular-devkit/architect": "0.1902.19",
+ "@angular-devkit/architect": "0.1902.20",
"@babel/core": "7.26.10",
"@babel/helper-annotate-as-pure": "7.25.9",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -461,7 +470,7 @@
"@angular/localize": "^19.0.0 || ^19.2.0-next.0",
"@angular/platform-server": "^19.0.0 || ^19.2.0-next.0",
"@angular/service-worker": "^19.0.0 || ^19.2.0-next.0",
- "@angular/ssr": "^19.2.19",
+ "@angular/ssr": "^19.2.20",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^19.0.0 || ^19.2.0-next.0",
@@ -500,9 +509,9 @@
}
},
"node_modules/@angular/common": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.17.tgz",
- "integrity": "sha512-yFUXAdpvOFirGD/EGDwp1WHravHzI4sdyRE2iH7i8im9l8IE2VZ6D1KDJp8VVpMJt38LNlRAWYek3s+z6OcAkg==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.18.tgz",
+ "integrity": "sha512-CrV02Omzw/QtfjlEVXVPJVXipdx83NuA+qSASZYrxrhKFusUZyK3P/Zznqg+wiAeNDbedQwMUVqoAARHf0xQrw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -512,14 +521,14 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/core": "19.2.17",
+ "@angular/core": "19.2.18",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.17.tgz",
- "integrity": "sha512-qo8psYASAlDiQ8fAL8i/E2JfWH2nPTpZDKKZxSWvgBVA8o+zUEjYAJu6/k6btnu+4Qcb425T0rmM/zao6EU9Aw==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.18.tgz",
+ "integrity": "sha512-3MscvODxRVxc3Cs0ZlHI5Pk5rEvE80otfvxZTMksOZuPlv1B+S8MjWfc3X3jk9SbyUEzODBEH55iCaBHD48V3g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -530,9 +539,9 @@
}
},
"node_modules/@angular/compiler-cli": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.17.tgz",
- "integrity": "sha512-KG82fh2A0odttc6+FxlQmFfHY/Giq8rYeV1qtdafafJ8hdWIiMr4r37xwhZOl8uk2/XSLM66bxUMFHYm+zt87Q==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.18.tgz",
+ "integrity": "sha512-N4TMtLfImJIoMaRL6mx7885UBeQidywptHH6ACZj71Ar6++DBc1mMlcwuvbeJCd3r3y8MQ5nLv5PZSN/tHr13w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -554,7 +563,7 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/compiler": "19.2.17",
+ "@angular/compiler": "19.2.18",
"typescript": ">=5.5 <5.9"
}
},
@@ -607,9 +616,9 @@
}
},
"node_modules/@angular/core": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.17.tgz",
- "integrity": "sha512-nVu0ryxfiXUZ9M+NV21TY+rJZkPXTYo9U0aJb19hvByPpG+EvuujXUOgpulz6vxIzGy7pz/znRa+K9kxuuC+yQ==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.18.tgz",
+ "integrity": "sha512-+QRrf0Igt8ccUWXHA+7doK5W6ODyhHdqVyblSlcQ8OciwkzIIGGEYNZom5OZyWMh+oI54lcSeyV2O3xaDepSrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -624,9 +633,9 @@
}
},
"node_modules/@angular/forms": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.17.tgz",
- "integrity": "sha512-INgGGmMbwXuT+niAjMiCsJrZVEGWKZOep1vCRHoKlVnGUQSRKc3UW8ztmKDKMua/io/Opi03pRMpwbYQcTBr5A==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.18.tgz",
+ "integrity": "sha512-pe40934jWhoS7DyGl7jyZdoj1gvBgur2t1zrJD+csEkTitYnW14+La2Pv6SW1pNX5nIzFsgsS9Nex1KcH5S6Tw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -636,16 +645,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.17",
- "@angular/core": "19.2.17",
- "@angular/platform-browser": "19.2.17",
+ "@angular/common": "19.2.18",
+ "@angular/core": "19.2.18",
+ "@angular/platform-browser": "19.2.18",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.17.tgz",
- "integrity": "sha512-Rn23nIQwYMSeGXWFHI/X8bGHAkdahRxH9UIGUlJKxW61MSkK6AW4kCHG/Ev1TvDq9HjijsMjcqcsd6/Sb8aBXg==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.18.tgz",
+ "integrity": "sha512-eahtsHPyXTYLARs9YOlXhnXGgzw0wcyOcDkBvNWK/3lA0NHIgIHmQgXAmBo+cJ+g9skiEQTD2OmSrrwbFKWJkw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -655,9 +664,9 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/animations": "19.2.17",
- "@angular/common": "19.2.17",
- "@angular/core": "19.2.17"
+ "@angular/animations": "19.2.18",
+ "@angular/common": "19.2.18",
+ "@angular/core": "19.2.18"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -666,9 +675,9 @@
}
},
"node_modules/@angular/platform-browser-dynamic": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.17.tgz",
- "integrity": "sha512-jrps9QKhuPrHBZwLv+43z+WldT4aVKZu8v7LPpRHb7/pVLvqccXtIxt3Ttm7sa4tc2SwlKazdE8/ezaNWIRnAg==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.18.tgz",
+ "integrity": "sha512-wqDtK2yVN5VDqVeOSOfqELdu40fyoIDknBGSxA27CEXzFVdMWJyIpuvUi+GMa+9eGjlS+1uVVBaRwxmnuvHj+A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -678,16 +687,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.17",
- "@angular/compiler": "19.2.17",
- "@angular/core": "19.2.17",
- "@angular/platform-browser": "19.2.17"
+ "@angular/common": "19.2.18",
+ "@angular/compiler": "19.2.18",
+ "@angular/core": "19.2.18",
+ "@angular/platform-browser": "19.2.18"
}
},
"node_modules/@angular/router": {
- "version": "19.2.17",
- "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.17.tgz",
- "integrity": "sha512-B3Vk+E8UHQwg06WEjGuvYaKNiIXxjHN9pN8S+hDE8xwRgIS5ojEwS94blEvsGQ4QsIja6WjZMOfDUBUPlgUSuA==",
+ "version": "19.2.18",
+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.18.tgz",
+ "integrity": "sha512-7cimxtPODSwokFQ0TRYzX0ad8Yjrl0MJfzaDCJejd1n/q7RZ7KZmHd0DS/LkDNXVMEh4swr00fK+3YWG/Szsrg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -697,20 +706,20 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
- "@angular/common": "19.2.17",
- "@angular/core": "19.2.17",
- "@angular/platform-browser": "19.2.17",
+ "@angular/common": "19.2.18",
+ "@angular/core": "19.2.18",
+ "@angular/platform-browser": "19.2.18",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
@@ -719,9 +728,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
- "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -807,13 +816,13 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.27.2",
+ "@babel/compat-data": "^7.28.6",
"@babel/helper-validator-option": "^7.27.1",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
@@ -834,18 +843,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz",
- "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz",
+ "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.3",
"@babel/helper-member-expression-to-functions": "^7.28.5",
"@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
+ "@babel/helper-replace-supers": "^7.28.6",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.28.5",
+ "@babel/traverse": "^7.28.6",
"semver": "^6.3.1"
},
"engines": {
@@ -920,17 +929,17 @@
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz",
- "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==",
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz",
+ "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "debug": "^4.4.1",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "debug": "^4.4.3",
"lodash.debounce": "^4.0.8",
- "resolve": "^1.22.10"
+ "resolve": "^1.22.11"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -982,29 +991,29 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1027,9 +1036,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1068,15 +1077,15 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
- "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz",
+ "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.27.1",
+ "@babel/helper-member-expression-to-functions": "^7.28.5",
"@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/traverse": "^7.27.1"
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1143,42 +1152,42 @@
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz",
- "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz",
+ "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.3",
- "@babel/types": "^7.28.2"
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.5"
+ "@babel/types": "^7.29.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1255,14 +1264,14 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz",
- "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz",
+ "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.28.3"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1272,15 +1281,15 @@
}
},
"node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz",
- "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.0.tgz",
+ "integrity": "sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/plugin-syntax-decorators": "^7.27.1"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-syntax-decorators": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1358,13 +1367,13 @@
}
},
"node_modules/@babel/plugin-syntax-decorators": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
- "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.28.6.tgz",
+ "integrity": "sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1374,13 +1383,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz",
- "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz",
+ "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1432,13 +1441,13 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1558,13 +1567,13 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1659,13 +1668,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz",
- "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz",
+ "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1675,14 +1684,14 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz",
- "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz",
+ "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1692,14 +1701,14 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz",
- "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz",
+ "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.28.3",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1709,18 +1718,18 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz",
- "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz",
+ "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-compilation-targets": "^7.27.2",
+ "@babel/helper-compilation-targets": "^7.28.6",
"@babel/helper-globals": "^7.28.0",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-replace-supers": "^7.27.1",
- "@babel/traverse": "^7.28.4"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-replace-supers": "^7.28.6",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1743,14 +1752,14 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz",
- "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz",
+ "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/template": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/template": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1777,14 +1786,14 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz",
- "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz",
+ "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1810,14 +1819,14 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz",
- "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz",
+ "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1843,13 +1852,13 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz",
- "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz",
+ "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1910,13 +1919,13 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz",
- "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz",
+ "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1942,13 +1951,13 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz",
- "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz",
+ "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -1991,14 +2000,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",
- "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz",
+ "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2008,16 +2017,16 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz",
- "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz",
+ "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
"@babel/helper-validator-identifier": "^7.28.5",
- "@babel/traverse": "^7.28.5"
+ "@babel/traverse": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
@@ -2044,14 +2053,14 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz",
- "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz",
+ "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2077,13 +2086,13 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz",
- "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz",
+ "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2093,13 +2102,13 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz",
- "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz",
+ "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2109,17 +2118,17 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz",
- "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz",
+ "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/plugin-transform-destructuring": "^7.28.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/plugin-transform-destructuring": "^7.28.5",
"@babel/plugin-transform-parameters": "^7.27.7",
- "@babel/traverse": "^7.28.4"
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2146,13 +2155,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz",
- "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz",
+ "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2162,13 +2171,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz",
- "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz",
+ "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.28.6",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
@@ -2195,14 +2204,14 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz",
- "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz",
+ "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2212,15 +2221,15 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz",
- "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz",
+ "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.1",
- "@babel/helper-create-class-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-annotate-as-pure": "^7.27.3",
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2259,13 +2268,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz",
- "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz",
+ "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2275,14 +2284,14 @@
}
},
"node_modules/@babel/plugin-transform-regexp-modifiers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz",
- "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz",
+ "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2355,13 +2364,13 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz",
- "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz",
+ "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.28.6",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
@@ -2420,17 +2429,17 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz",
- "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz",
+ "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-create-class-features-plugin": "^7.28.5",
- "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-create-class-features-plugin": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.27.1"
+ "@babel/plugin-syntax-typescript": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2469,14 +2478,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz",
- "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz",
+ "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2503,14 +2512,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz",
- "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz",
+ "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.27.1",
- "@babel/helper-plugin-utils": "^7.27.1"
+ "@babel/helper-create-regexp-features-plugin": "^7.28.5",
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2662,33 +2671,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
- "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
"@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.5",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
"debug": "^4.3.1"
},
"engines": {
@@ -2696,14 +2705,14 @@
}
},
"node_modules/@babel/traverse/node_modules/@babel/generator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
- "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.5",
- "@babel/types": "^7.28.5",
+ "@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"
@@ -2713,9 +2722,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2734,9 +2743,9 @@
"license": "MIT"
},
"node_modules/@bufbuild/protobuf": {
- "version": "2.10.2",
- "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.2.tgz",
- "integrity": "sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.11.0.tgz",
+ "integrity": "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==",
"dev": true,
"license": "(Apache-2.0 AND BSD-3-Clause)"
},
@@ -2890,9 +2899,9 @@
}
},
"node_modules/@emnapi/core": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz",
- "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz",
+ "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2901,9 +2910,9 @@
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz",
- "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
+ "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3346,9 +3355,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
- "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3464,9 +3473,9 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3538,9 +3547,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
- "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
+ "version": "9.39.3",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz",
+ "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3709,9 +3718,9 @@
}
},
"node_modules/@inquirer/external-editor/node_modules/iconv-lite": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz",
- "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
+ "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3753,29 +3762,6 @@
}
}
},
- "node_modules/@isaacs/balanced-match": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
- "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "20 || >=22"
- }
- },
- "node_modules/@isaacs/brace-expansion": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
- "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@isaacs/balanced-match": "^4.0.1"
- },
- "engines": {
- "node": "20 || >=22"
- }
- },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -4559,30 +4545,299 @@
"@jridgewell/trace-mapping": "^0.3.25"
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.31",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
- "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@jsonjoy.com/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/buffers": {
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz",
+ "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/codegen": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz",
+ "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-core": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz",
+ "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/fs-node-builtins": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "thingies": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-fsa": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz",
+ "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/fs-core": "4.56.10",
+ "@jsonjoy.com/fs-node-builtins": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "thingies": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-node": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz",
+ "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/fs-core": "4.56.10",
+ "@jsonjoy.com/fs-node-builtins": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/fs-print": "4.56.10",
+ "@jsonjoy.com/fs-snapshot": "4.56.10",
+ "glob-to-regex.js": "^1.0.0",
+ "thingies": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-node-builtins": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz",
+ "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-node-to-fsa": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz",
+ "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/fs-fsa": "4.56.10",
+ "@jsonjoy.com/fs-node-builtins": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.56.10"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-node-utils": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz",
+ "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/fs-node-builtins": "4.56.10"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-print": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz",
+ "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "tree-dump": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-snapshot": {
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz",
+ "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/buffers": "^17.65.0",
+ "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/json-pack": "^17.65.0",
+ "@jsonjoy.com/util": "^17.65.0"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": {
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz",
+ "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": {
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz",
+ "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
}
},
- "node_modules/@jsonjoy.com/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
+ "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": {
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz",
+ "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==",
"dev": true,
"license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/base64": "17.67.0",
+ "@jsonjoy.com/buffers": "17.67.0",
+ "@jsonjoy.com/codegen": "17.67.0",
+ "@jsonjoy.com/json-pointer": "17.67.0",
+ "@jsonjoy.com/util": "17.67.0",
+ "hyperdyperid": "^1.2.0",
+ "thingies": "^2.5.0",
+ "tree-dump": "^1.1.0"
+ },
"engines": {
"node": ">=10.0"
},
@@ -4594,12 +4849,15 @@
"tslib": "2"
}
},
- "node_modules/@jsonjoy.com/buffers": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz",
- "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==",
+ "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": {
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz",
+ "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==",
"dev": true,
"license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/util": "17.67.0"
+ },
"engines": {
"node": ">=10.0"
},
@@ -4611,12 +4869,16 @@
"tslib": "2"
}
},
- "node_modules/@jsonjoy.com/codegen": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz",
- "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==",
+ "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": {
+ "version": "17.67.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz",
+ "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==",
"dev": true,
"license": "Apache-2.0",
+ "dependencies": {
+ "@jsonjoy.com/buffers": "17.67.0",
+ "@jsonjoy.com/codegen": "17.67.0"
+ },
"engines": {
"node": ">=10.0"
},
@@ -4655,6 +4917,23 @@
"tslib": "2"
}
},
+ "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz",
+ "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/@jsonjoy.com/json-pointer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz",
@@ -4697,6 +4976,23 @@
"tslib": "2"
}
},
+ "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz",
+ "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/@leichtgewicht/ip-codec": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
@@ -4923,14 +5219,14 @@
}
},
"node_modules/@module-federation/cli": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.22.0.tgz",
- "integrity": "sha512-kdeDg6HuOqJYKtPeoupWQg6wLZT7B+AwMDwMjwhcKHxKEmKFPImbJLymBWEgmKTktZKh1ERtEOplwFt9u5iEBA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-2.0.1.tgz",
+ "integrity": "sha512-2SL5Y8iODNX10y9T3CBLhHjSXo4afnA1BK82m4sNfZebuVO+o34bxewqwod9xfWq9xhTZmOSFZ+n+lgTKRv+CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/dts-plugin": "0.22.0",
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/dts-plugin": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
"chalk": "3.0.0",
"commander": "11.1.0",
"jiti": "2.4.2"
@@ -4943,16 +5239,16 @@
}
},
"node_modules/@module-federation/cli/node_modules/@module-federation/dts-plugin": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.22.0.tgz",
- "integrity": "sha512-lj5YtUZz0moaT1XziM0OyizE0mIhMa8W65RUiX/+UZ4iNK/KMs4e/CGpfhEt2Lj9+j6KYSzI2+676d+73j/kag==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-2.0.1.tgz",
+ "integrity": "sha512-PLneTsf1fQS5/RTBedtLAAmCPRdMfIlhfJkOa8QH3WDJaQsqm8Wb3r2cTUBf2aNj/bP3aH/y6Hs9JFB/4x0l5g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/error-codes": "0.22.0",
- "@module-federation/managers": "0.22.0",
- "@module-federation/sdk": "0.22.0",
- "@module-federation/third-party-dts-extractor": "0.22.0",
+ "@module-federation/error-codes": "2.0.1",
+ "@module-federation/managers": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
+ "@module-federation/third-party-dts-extractor": "2.0.1",
"adm-zip": "^0.5.10",
"ansi-colors": "^4.1.3",
"axios": "^1.12.0",
@@ -4977,35 +5273,35 @@
}
},
"node_modules/@module-federation/cli/node_modules/@module-federation/error-codes": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz",
- "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-2.0.1.tgz",
+ "integrity": "sha512-2bJF/ft+qL9L6Zvq2t/G9/f/0wFL73cM8/NJ04uyYz9BjIgvx28K5qu8/6+IwgEEKATG7vOhBBVj6wH3S+5ASA==",
"dev": true,
"license": "MIT"
},
"node_modules/@module-federation/cli/node_modules/@module-federation/managers": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.22.0.tgz",
- "integrity": "sha512-Ptv8gEUihPBeoQEpsKq3GZUEB4y/hqG83mKw5NrKpXMIfcoF6SZjcknXz5LuN7NF3xMi1XHYU74z/nKzr+izew==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-2.0.1.tgz",
+ "integrity": "sha512-KR01lSlcYRQ9C6hW2a8CQQtAE0LvfTLgtV/6ZNUTagw8sRfeDln+ggrZsYilKu9zl0i8RPDgpv/kS60o4lcxCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/sdk": "2.0.1",
"find-pkg": "2.0.0",
"fs-extra": "9.1.0"
}
},
"node_modules/@module-federation/cli/node_modules/@module-federation/sdk": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz",
- "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-2.0.1.tgz",
+ "integrity": "sha512-32PwudojGjog51cwpTali7D6ud82oVgsyvOx9JjAzhvXBX96YI4mRsursuWcthDxmigJP9ZvUTXDuRUEDh1OQA==",
"dev": true,
"license": "MIT"
},
"node_modules/@module-federation/cli/node_modules/@module-federation/third-party-dts-extractor": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.22.0.tgz",
- "integrity": "sha512-3y2DZdeEjArNKDqA1Ds32Q6A5RATcsmywCXyQaWcfaScprpmzfEWiDkeD/nzoA/0+4ePY8OEinJ4hLtoMNLbLQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-2.0.1.tgz",
+ "integrity": "sha512-neKSr6FNUeGRh+YR57l/QZUzPytJXuJx+babF7j5iGJG3FP+kfizr6QD0hgVis5KEoXMVbQ8yyvG0slERizeyw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5150,16 +5446,6 @@
"node": ">= 0.8"
}
},
- "node_modules/@module-federation/cli/node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/@module-federation/cli/node_modules/mime-types": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
@@ -5530,75 +5816,75 @@
}
},
"node_modules/@module-federation/node": {
- "version": "2.7.26",
- "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.26.tgz",
- "integrity": "sha512-C7aIABSxbZKOvVDMIivmV9Q/aOVh9xpUv+y+nwSWuQr9v2pgmMzVK3rxWoeusmkpaENia8h5AWNpYjcrMi+O9g==",
+ "version": "2.7.32",
+ "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.32.tgz",
+ "integrity": "sha512-hUj5v2GGwpNzl2gaJS4AyzCYRzJBhN8875A+ucKF9tq3jaQb5zpy3izYMISqqbN2q9a7jz3nEUgwAh3pjri+rQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/enhanced": "0.22.0",
- "@module-federation/runtime": "0.22.0",
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/enhanced": "2.0.1",
+ "@module-federation/runtime": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
"btoa": "1.2.1",
"encoding": "^0.1.13",
"node-fetch": "2.7.0"
},
"peerDependencies": {
- "react": "^16||^17||^18||^19",
- "react-dom": "^16||^17||^18||^19",
"webpack": "^5.40.0"
},
"peerDependenciesMeta": {
- "next": {
- "optional": true
- },
- "react": {
- "optional": true
- },
- "react-dom": {
+ "webpack": {
"optional": true
}
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/bridge-react-webpack-plugin": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.22.0.tgz",
- "integrity": "sha512-OzMBBbUhOMbDVX/wkVDxaOshgyUdxv+kRQDtxl1/ipV5GXTjs1tpS4NHtDwiJi0qKeG0AvnvGCrPu7bjMOcAVw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-2.0.1.tgz",
+ "integrity": "sha512-D7LMW5EMAJShOMR1aZDAJ6s+MdsYDHaQyJADLQ3LaY0sne/BkVqkPikUwcO1IwOwKbXjYsDlQVOEvk9wZVRFhA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/sdk": "2.0.1",
"@types/semver": "7.5.8",
"semver": "7.6.3"
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/data-prefetch": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.22.0.tgz",
- "integrity": "sha512-NESR/5Wcn9unPY18oQSSXlbXTnMbUFwqqvSZnpJt5vBb/8QlcJEiPnxERZqKhKrIS6GTD8KneHPRCOQsP6Xcqw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-2.0.1.tgz",
+ "integrity": "sha512-Kq0P1OABGt6QAvs6TaE/zY9Ut9Y/oJFrzoSF3eWaCYbUAr2KD2SpTyMsPz4ssBzjeKXTgimugh6tHHd6mpCBIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/runtime": "0.22.0",
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/runtime": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
"fs-extra": "9.1.0"
},
"peerDependencies": {
"react": ">=16.9.0",
"react-dom": ">=16.9.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/dts-plugin": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.22.0.tgz",
- "integrity": "sha512-lj5YtUZz0moaT1XziM0OyizE0mIhMa8W65RUiX/+UZ4iNK/KMs4e/CGpfhEt2Lj9+j6KYSzI2+676d+73j/kag==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-2.0.1.tgz",
+ "integrity": "sha512-PLneTsf1fQS5/RTBedtLAAmCPRdMfIlhfJkOa8QH3WDJaQsqm8Wb3r2cTUBf2aNj/bP3aH/y6Hs9JFB/4x0l5g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/error-codes": "0.22.0",
- "@module-federation/managers": "0.22.0",
- "@module-federation/sdk": "0.22.0",
- "@module-federation/third-party-dts-extractor": "0.22.0",
+ "@module-federation/error-codes": "2.0.1",
+ "@module-federation/managers": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
+ "@module-federation/third-party-dts-extractor": "2.0.1",
"adm-zip": "^0.5.10",
"ansi-colors": "^4.1.3",
"axios": "^1.12.0",
@@ -5623,23 +5909,23 @@
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/enhanced": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.22.0.tgz",
- "integrity": "sha512-OysyO6xbhpP+CeOEDp2v6HyFcVT5wWAdQrfga3jhlFUAdIR7nZZ2albysnF2CGn/xyU050Ss74ttgy7GiKi5fQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@module-federation/bridge-react-webpack-plugin": "0.22.0",
- "@module-federation/cli": "0.22.0",
- "@module-federation/data-prefetch": "0.22.0",
- "@module-federation/dts-plugin": "0.22.0",
- "@module-federation/error-codes": "0.22.0",
- "@module-federation/inject-external-runtime-core-plugin": "0.22.0",
- "@module-federation/managers": "0.22.0",
- "@module-federation/manifest": "0.22.0",
- "@module-federation/rspack": "0.22.0",
- "@module-federation/runtime-tools": "0.22.0",
- "@module-federation/sdk": "0.22.0",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-2.0.1.tgz",
+ "integrity": "sha512-EZIARQ/8ScoTP6PV8+E4SsmMYWK4ErrikZJ0G/FX8wvK8mCtdoKatFtvDN9++P6Nl78kN9zHYgAV4AHKdBVjfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@module-federation/bridge-react-webpack-plugin": "2.0.1",
+ "@module-federation/cli": "2.0.1",
+ "@module-federation/data-prefetch": "2.0.1",
+ "@module-federation/dts-plugin": "2.0.1",
+ "@module-federation/error-codes": "2.0.1",
+ "@module-federation/inject-external-runtime-core-plugin": "2.0.1",
+ "@module-federation/managers": "2.0.1",
+ "@module-federation/manifest": "2.0.1",
+ "@module-federation/rspack": "2.0.1",
+ "@module-federation/runtime-tools": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
"btoa": "^1.2.1",
"schema-utils": "^4.3.0",
"upath": "2.0.1"
@@ -5665,66 +5951,66 @@
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/error-codes": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz",
- "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-2.0.1.tgz",
+ "integrity": "sha512-2bJF/ft+qL9L6Zvq2t/G9/f/0wFL73cM8/NJ04uyYz9BjIgvx28K5qu8/6+IwgEEKATG7vOhBBVj6wH3S+5ASA==",
"dev": true,
"license": "MIT"
},
"node_modules/@module-federation/node/node_modules/@module-federation/inject-external-runtime-core-plugin": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.22.0.tgz",
- "integrity": "sha512-zeN6XiLV9l0tAsZzQxHLEQM28sWiijmIBp9CiIDc4iqk2f/kgCSqiBWTiNcS4sZODzupPkktaWsC5+5eWk0ENQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-2.0.1.tgz",
+ "integrity": "sha512-oAA7G+4GCHM+WRYfscR/x4GwCyM9CEqfdD9/x2L6y8mtLWK9anRLKTocsI759AvzXsbT1m3EQ5ki1O6wlwDu3g==",
"dev": true,
"license": "MIT",
"peerDependencies": {
- "@module-federation/runtime-tools": "0.22.0"
+ "@module-federation/runtime-tools": "2.0.1"
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/managers": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.22.0.tgz",
- "integrity": "sha512-Ptv8gEUihPBeoQEpsKq3GZUEB4y/hqG83mKw5NrKpXMIfcoF6SZjcknXz5LuN7NF3xMi1XHYU74z/nKzr+izew==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-2.0.1.tgz",
+ "integrity": "sha512-KR01lSlcYRQ9C6hW2a8CQQtAE0LvfTLgtV/6ZNUTagw8sRfeDln+ggrZsYilKu9zl0i8RPDgpv/kS60o4lcxCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/sdk": "2.0.1",
"find-pkg": "2.0.0",
"fs-extra": "9.1.0"
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/manifest": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.22.0.tgz",
- "integrity": "sha512-Exv+frMkRGKDs3KKXeBBKcHvL7nNTk5Yt2ftEvxCUIRPC16Ebvy6RcQvFFvbvmOhuM/If6j6E/aZu5Z9oau6xw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-2.0.1.tgz",
+ "integrity": "sha512-p8nYGjHWp17MsYdW/Vv0ogBDiTTsI1PHWPQbvVIqLQXDqwiesaRSRR1zziECXQoEL8lV5Bs+uSkcaJGhea9P+A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/dts-plugin": "0.22.0",
- "@module-federation/managers": "0.22.0",
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/dts-plugin": "2.0.1",
+ "@module-federation/managers": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
"chalk": "3.0.0",
"find-pkg": "2.0.0"
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/rspack": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.22.0.tgz",
- "integrity": "sha512-PvDlFxzCbufArZvt6wSLsJNm20hdDsz/4X04YAxAZfp/dTECZghZsebLcR7nHOzOwR2gCX8vv+gB3r+5MheobA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-2.0.1.tgz",
+ "integrity": "sha512-SAlNE8iclFmzrKtx3/C2GivXYx6nPzx4MgQV01QG/a4LpnLbwlxzdZu3rqQ2swp4NNWT/t/GT7Y+7gfhyVa7mg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/bridge-react-webpack-plugin": "0.22.0",
- "@module-federation/dts-plugin": "0.22.0",
- "@module-federation/inject-external-runtime-core-plugin": "0.22.0",
- "@module-federation/managers": "0.22.0",
- "@module-federation/manifest": "0.22.0",
- "@module-federation/runtime-tools": "0.22.0",
- "@module-federation/sdk": "0.22.0",
+ "@module-federation/bridge-react-webpack-plugin": "2.0.1",
+ "@module-federation/dts-plugin": "2.0.1",
+ "@module-federation/inject-external-runtime-core-plugin": "2.0.1",
+ "@module-federation/managers": "2.0.1",
+ "@module-federation/manifest": "2.0.1",
+ "@module-federation/runtime-tools": "2.0.1",
+ "@module-federation/sdk": "2.0.1",
"btoa": "1.2.1"
},
"peerDependencies": {
- "@rspack/core": ">=0.7",
+ "@rspack/core": "^0.7.0 || ^1.0.0 || ^2.0.0-0",
"typescript": "^4.9.0 || ^5.0.0",
"vue-tsc": ">=1.0.24"
},
@@ -5738,50 +6024,50 @@
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/runtime": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz",
- "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-2.0.1.tgz",
+ "integrity": "sha512-UQ72P5Oo40dS6vdhHetwTtIsbGciEr+bjoYvDgh1WLPfFlTYd8zo9cLfqaf3juuPfV3cMVARAVPmh16lQYpUGA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/error-codes": "0.22.0",
- "@module-federation/runtime-core": "0.22.0",
- "@module-federation/sdk": "0.22.0"
+ "@module-federation/error-codes": "2.0.1",
+ "@module-federation/runtime-core": "2.0.1",
+ "@module-federation/sdk": "2.0.1"
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/runtime-core": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz",
- "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-2.0.1.tgz",
+ "integrity": "sha512-gOuCPSHoQGUGwlxfSTMInFX+QvLxdEWegGGMiLdU5vqbXuva4E9M+kXBBO7/0MkcBPMmVs0wOJGm0XOLeV2f1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/error-codes": "0.22.0",
- "@module-federation/sdk": "0.22.0"
+ "@module-federation/error-codes": "2.0.1",
+ "@module-federation/sdk": "2.0.1"
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/runtime-tools": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz",
- "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-2.0.1.tgz",
+ "integrity": "sha512-AStdwBtsGB3jIfDg9oP+KyVPsimdaeHsP855gqCxDp1hi2+GKjlZWZx9ThkS8NytVSXSUysxqoUL1ivDoKgcCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/runtime": "0.22.0",
- "@module-federation/webpack-bundler-runtime": "0.22.0"
+ "@module-federation/runtime": "2.0.1",
+ "@module-federation/webpack-bundler-runtime": "2.0.1"
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/sdk": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz",
- "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-2.0.1.tgz",
+ "integrity": "sha512-32PwudojGjog51cwpTali7D6ud82oVgsyvOx9JjAzhvXBX96YI4mRsursuWcthDxmigJP9ZvUTXDuRUEDh1OQA==",
"dev": true,
"license": "MIT"
},
"node_modules/@module-federation/node/node_modules/@module-federation/third-party-dts-extractor": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.22.0.tgz",
- "integrity": "sha512-3y2DZdeEjArNKDqA1Ds32Q6A5RATcsmywCXyQaWcfaScprpmzfEWiDkeD/nzoA/0+4ePY8OEinJ4hLtoMNLbLQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-2.0.1.tgz",
+ "integrity": "sha512-neKSr6FNUeGRh+YR57l/QZUzPytJXuJx+babF7j5iGJG3FP+kfizr6QD0hgVis5KEoXMVbQ8yyvG0slERizeyw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5791,14 +6077,14 @@
}
},
"node_modules/@module-federation/node/node_modules/@module-federation/webpack-bundler-runtime": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz",
- "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-2.0.1.tgz",
+ "integrity": "sha512-u1NId3SF4lHDTmD2CHFEszulmXmIq1TGw9JYvnLx5rKJL7xt3aNxcb1GvkaYbRNVBXhSMjJ75E5LsQlZzyBx9A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/runtime": "0.22.0",
- "@module-federation/sdk": "0.22.0"
+ "@module-federation/runtime": "2.0.1",
+ "@module-federation/sdk": "2.0.1"
}
},
"node_modules/@module-federation/node/node_modules/ansi-styles": {
@@ -5917,16 +6203,6 @@
"node": ">= 0.8"
}
},
- "node_modules/@module-federation/node/node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/@module-federation/node/node_modules/mime-types": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
@@ -6730,12 +7006,11 @@
}
},
"node_modules/@nativescript/webpack/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -7165,9 +7440,9 @@
"dev": true
},
"node_modules/@ngtools/webpack": {
- "version": "19.2.19",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.19.tgz",
- "integrity": "sha512-R9aeTrOBiRVl8I698JWPniUAAEpSvzc8SUGWSM5UXWMcHnWqd92cOnJJ1aXDGJZKXrbhMhCBx9Dglmcks5IDpg==",
+ "version": "19.2.20",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.20.tgz",
+ "integrity": "sha512-nuCjcxLmFrn0s53G67V5R19mUpYjewZBLz6Wrg7BtJkjq08xfO0QgaJg3e6wzEmj1AclH7eMKRnuQhm5otyutg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7407,20 +7682,20 @@
"license": "MIT"
},
"node_modules/@nx/angular": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-20.8.3.tgz",
- "integrity": "sha512-kYfOSIzvzaRXRDKZmaKn0dBzOc0rPvFlm+UzyC2OINL3dpGWU2gGGhpuUfYG34beu8oPgLgOuZnlXFOdI8ghkg==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-20.8.4.tgz",
+ "integrity": "sha512-lDvCkyFttURxlQ2WBK2t3s19g7rMKYacHT6qnqvB/RSF4sjQLTNvy+eUre9nIUMHtPeyEiHiZqpri8aB7xzcOQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
- "@nx/eslint": "20.8.3",
- "@nx/js": "20.8.3",
- "@nx/module-federation": "20.8.3",
- "@nx/rspack": "20.8.3",
- "@nx/web": "20.8.3",
- "@nx/webpack": "20.8.3",
- "@nx/workspace": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/eslint": "20.8.4",
+ "@nx/js": "20.8.4",
+ "@nx/module-federation": "20.8.4",
+ "@nx/rspack": "20.8.4",
+ "@nx/web": "20.8.4",
+ "@nx/webpack": "20.8.4",
+ "@nx/workspace": "20.8.4",
"@phenomnomnominal/tsquery": "~5.0.1",
"@typescript-eslint/type-utils": "^8.0.0",
"enquirer": "~2.3.6",
@@ -7469,9 +7744,9 @@
}
},
"node_modules/@nx/devkit": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.8.3.tgz",
- "integrity": "sha512-5lbfJ6ICFOiGeirldQOU5fQ/W/VQ8L3dfWnmHG4UgpWSLoK/YFdRf4lTB4rS0aDXsBL0gyWABz3sZGLPGNYnPA==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.8.4.tgz",
+ "integrity": "sha512-3r+6QmIXXAWL6K7m8vAbW31aniAZmZAZXeMhOhWcJoOAU7ggpCQaM8JP8/kO5ov/Bmhyf0i/SSVXI6kwiR5WNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7502,14 +7777,14 @@
}
},
"node_modules/@nx/eslint": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-20.8.3.tgz",
- "integrity": "sha512-4lCLg79BcGjYx1K5JWToeCYCB8aEjQq0k1aWeCFk1SsWJBUELujH0qD4IdrHJ4oFeg5T34wmZMe9rJaiLOKtPw==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-20.8.4.tgz",
+ "integrity": "sha512-kXiqI0fdkZQnpPje3aunO7CLRdhFvMuTfbG+AYGY3rZYwM0DAT/wzMs8qSGtA+O8cAdRwgJWe2sId56Vki3V7w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
- "@nx/js": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/js": "20.8.4",
"semver": "^7.5.3",
"tslib": "^2.3.0",
"typescript": "~5.7.2"
@@ -7525,14 +7800,14 @@
}
},
"node_modules/@nx/eslint-plugin": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-20.8.3.tgz",
- "integrity": "sha512-pl4iuEo7xVZ23h3UaFe+iQP6YoIs5lYoHStgjYJSlPrun4YWDQWiYnr4zHnVnuUpgdIkLMewGN6KoQ9lECfY/w==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-20.8.4.tgz",
+ "integrity": "sha512-t6OPxOEWK+ylWrVeooXVIaNmWEccfN24X8jYeBpRodc3rkhug3ZlqOq9Q187TYM0riRuAUqjyFvxfJ78lhtZng==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
- "@nx/js": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/js": "20.8.4",
"@typescript-eslint/type-utils": "^8.0.0",
"@typescript-eslint/utils": "^8.0.0",
"chalk": "^4.1.0",
@@ -7643,16 +7918,16 @@
}
},
"node_modules/@nx/jest": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-20.8.3.tgz",
- "integrity": "sha512-IgGQC38V6bL6KRfddRJEFZKwDSQHpABvkiRgr1GI6bIYDaf00jp31APFrxnUEysHMYS5lpzczg1nJpJO+ZlhAQ==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-20.8.4.tgz",
+ "integrity": "sha512-x0ABrzm5BlilLoyxlatkrHtX1r2nyCruF0gf6VjAY28SBUb/MPypr0/dDawVm1T7xwfLYwbBt7kwkKRRjLIldw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/reporters": "^29.4.1",
"@jest/test-result": "^29.4.1",
- "@nx/devkit": "20.8.3",
- "@nx/js": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/js": "20.8.4",
"@phenomnomnominal/tsquery": "~5.0.1",
"identity-obj-proxy": "3.0.0",
"jest-config": "^29.4.1",
@@ -7667,9 +7942,9 @@
}
},
"node_modules/@nx/js": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.8.3.tgz",
- "integrity": "sha512-WQVvC9wQSks36wKFnAlkXC1f9zLqxsQqZkZ5HpVssuhWxQY6/bgWHa1tfhsyooMCKhEOCjxZcLn8dVpnLE7qxw==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/js/-/js-20.8.4.tgz",
+ "integrity": "sha512-XhK5a9lBsKB0D0KFVUJdPTmVWSDP+kxR/txZsMVFQDhgy6nxY1zNtgSRFI53ZNkIODJi9MO0cRfsz6XUV1rE0g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7680,8 +7955,8 @@
"@babel/preset-env": "^7.23.2",
"@babel/preset-typescript": "^7.22.5",
"@babel/runtime": "^7.22.6",
- "@nx/devkit": "20.8.3",
- "@nx/workspace": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/workspace": "20.8.4",
"@zkochan/js-yaml": "0.0.7",
"babel-plugin-const-enum": "^1.0.1",
"babel-plugin-macros": "^3.1.0",
@@ -7853,18 +8128,18 @@
}
},
"node_modules/@nx/module-federation": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-20.8.3.tgz",
- "integrity": "sha512-Pfag0bH4HAKLTkD2Y74RACx+1rZDCXN/XMeeywgaJECUH+YgnU5b4uAawAETcHLp7sPePVcV2DamI6yiXL2l8w==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-20.8.4.tgz",
+ "integrity": "sha512-brANrXgdi8diXemtK8X4K5vgnyduP+h54tYl4niNFK7ATTp4+q6mIi9DjCPFKwfpUUyRoGixMH8JE1DDoXt2Qg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@module-federation/enhanced": "^0.9.0",
"@module-federation/node": "^2.6.26",
"@module-federation/sdk": "^0.9.0",
- "@nx/devkit": "20.8.3",
- "@nx/js": "20.8.3",
- "@nx/web": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/js": "20.8.4",
+ "@nx/web": "20.8.4",
"@rspack/core": "^1.1.5",
"express": "^4.21.2",
"http-proxy-middleware": "^3.0.3",
@@ -7874,23 +8149,23 @@
}
},
"node_modules/@nx/node": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/node/-/node-20.8.3.tgz",
- "integrity": "sha512-jIw+D4HdKsACFdS1g48hLNUy1sbwbOt/tPFbytDO6eMwe4C7uR6AbpqDXsxvq7SJomeRJ8hHzRRsNUulECi0Aw==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/node/-/node-20.8.4.tgz",
+ "integrity": "sha512-g6xmLiOGjA7z428hFWi2KD8anIEMaa85DLPi7HL5TPKSNlvzPkLXrcpfiYt9d0Gs0MKoewDqA/t5DCp88x9D8w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
- "@nx/eslint": "20.8.3",
- "@nx/jest": "20.8.3",
- "@nx/js": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/eslint": "20.8.4",
+ "@nx/jest": "20.8.4",
+ "@nx/js": "20.8.4",
"tslib": "^2.3.0"
}
},
"node_modules/@nx/nx-darwin-arm64": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.3.tgz",
- "integrity": "sha512-BeYnPAcnaerg6q+qR0bAb0nebwwrsvm4STSVqqVlaqLmmQpU3Bfpx44CEa5d6T9b0V11ZqVE/bkmRhMqhUcrhw==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.8.4.tgz",
+ "integrity": "sha512-8Y7+4wj1qoZsuDRpnuiHzSIsMt3VqtJ0su8dgd/MyGccvvi4pndan2R5yTiVw/wmbMxtBmZ6PO6Z8dgSIrMVog==",
"cpu": [
"arm64"
],
@@ -7905,9 +8180,9 @@
}
},
"node_modules/@nx/nx-darwin-x64": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.3.tgz",
- "integrity": "sha512-RIFg1VkQ4jhI+ErqEZuIeGBcJGD8t+u9J5CdQBDIASd8QRhtudBkiYLYCJb+qaQly09G7nVfxuyItlS2uRW3qA==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.8.4.tgz",
+ "integrity": "sha512-2lfuxRc56QWnAysMhcD03tpCPiRzV1+foUq0MhV2sSBIybXmgV4wHLkPZNhlBCl4FNXrWiZiN1OJ2X9AGiOdug==",
"cpu": [
"x64"
],
@@ -7922,9 +8197,9 @@
}
},
"node_modules/@nx/nx-freebsd-x64": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.3.tgz",
- "integrity": "sha512-boQTgMUdnqpZhHMrV/xgnp/dTg5dfxw8I4d16NBwmW4j+Sez7zi/dydgsJpfZsj8TicOHvPu6KK4W5wzp82NPw==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.8.4.tgz",
+ "integrity": "sha512-99vnUXZy+OUBHU+8Yhabre2qafepKg9GKkQkhmXvJGqOmuIsepK7wirUFo2PiVM8YhS6UV2rv6hKAZcQ7skYyg==",
"cpu": [
"x64"
],
@@ -7939,9 +8214,9 @@
}
},
"node_modules/@nx/nx-linux-arm-gnueabihf": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.3.tgz",
- "integrity": "sha512-wpiNyY1igx1rLN3EsTLum2lDtblFijdBZB9/9u/6UDub4z9CaQ4yaC4h9n5v7yFYILwfL44YTsQKzrE+iv0y1Q==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.8.4.tgz",
+ "integrity": "sha512-dht73zpnpzEUEzMHFQs4mfiwZH3WcJgQNWkD5p7WkeJewHq2Yyd0eG5Jg3kB7wnFtwPUV1eNJRM5rephgylkLA==",
"cpu": [
"arm"
],
@@ -7956,9 +8231,9 @@
}
},
"node_modules/@nx/nx-linux-arm64-gnu": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.3.tgz",
- "integrity": "sha512-nbi/eZtJfWxuDwdUCiP+VJolFubtrz6XxVtB26eMAkODnREOKELHZtMOrlm8JBZCdtWCvTqibq9Az74XsqSfdA==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.8.4.tgz",
+ "integrity": "sha512-syXxbJZ0yPaqzVmB28QJgUtaarSiW/PQmv/5Z2Ps8rCi7kYylISPVNjP1NNiIOcGDRWbHqoBfM0bEGPfSp0rBQ==",
"cpu": [
"arm64"
],
@@ -7973,9 +8248,9 @@
}
},
"node_modules/@nx/nx-linux-arm64-musl": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.3.tgz",
- "integrity": "sha512-LTTGzI8YVPlF1v0YlVf+exM+1q7rpsiUbjTTHJcfHFRU5t4BsiZD54K19Y1UBg1XFx5cwhEaIomSmJ88RwPPVQ==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.8.4.tgz",
+ "integrity": "sha512-AlZZFolS/S0FahRKG7rJ0Z9CgmIkyzHgGaoy3qNEMDEjFhR3jt2ZZSLp90W7zjgrxojOo90ajNMrg2UmtcQRDA==",
"cpu": [
"arm64"
],
@@ -7990,9 +8265,9 @@
}
},
"node_modules/@nx/nx-linux-x64-gnu": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.3.tgz",
- "integrity": "sha512-SlA4GtXvQbSzSIWLgiIiLBOjdINPOUR/im+TUbaEMZ8wiGrOY8cnk0PVt95TIQJVBeXBCeb5HnoY0lHJpMOODg==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.8.4.tgz",
+ "integrity": "sha512-MSu+xVNdR95tuuO+eL/a/ZeMlhfrZ627On5xaCZXnJ+lFxNg/S4nlKZQk0Eq5hYALCd/GKgFGasRdlRdOtvGPg==",
"cpu": [
"x64"
],
@@ -8007,9 +8282,9 @@
}
},
"node_modules/@nx/nx-linux-x64-musl": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.3.tgz",
- "integrity": "sha512-MNzkEwPktp5SQH9dJDH2wP9hgG9LsBDhKJXJfKw6sUI/6qz5+/aAjFziKy+zBnhU4AO1yXt5qEWzR8lDcIriVQ==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.8.4.tgz",
+ "integrity": "sha512-KxpQpyLCgIIHWZ4iRSUN9ohCwn1ZSDASbuFCdG3mohryzCy8WrPkuPcb+68J3wuQhmA5w//Xpp/dL0hHoit9zQ==",
"cpu": [
"x64"
],
@@ -8024,9 +8299,9 @@
}
},
"node_modules/@nx/nx-win32-arm64-msvc": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.3.tgz",
- "integrity": "sha512-qUV7CyXKwRCM/lkvyS6Xa1MqgAuK5da6w27RAehh7LATBUKn1I4/M7DGn6L7ERCxpZuh1TrDz9pUzEy0R+Ekkg==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.8.4.tgz",
+ "integrity": "sha512-ffLBrxM9ibk+eWSY995kiFFRTSRb9HkD5T1s/uZyxV6jfxYPaZDBAWAETDneyBXps7WtaOMu+kVZlXQ3X+TfIA==",
"cpu": [
"arm64"
],
@@ -8041,9 +8316,9 @@
}
},
"node_modules/@nx/nx-win32-x64-msvc": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.3.tgz",
- "integrity": "sha512-gX1G8u6W6EPX6PO/wv07+B++UHyCHBXyVWXITA3Kv6HoSajOxIa2Kk1rv1iDQGmX1WWxBaj3bUyYJAFBDITe4w==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.8.4.tgz",
+ "integrity": "sha512-JxuuZc4h8EBqoYAiRHwskimpTJx70yn4lhIRFBoW5ICkxXW1Rw0yip/1UVsWRHXg/x9BxmH7VVazdfaQWmGu6A==",
"cpu": [
"x64"
],
@@ -8058,30 +8333,30 @@
}
},
"node_modules/@nx/plugin": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/plugin/-/plugin-20.8.3.tgz",
- "integrity": "sha512-2AMGu3kBqcaOuZ96mGhz3ppOsW+lXGTpPvF+WJl2uIx1V/IjNjfdMhfLSgD/lHpQUyDPgr2vnC3fRe6t549/VQ==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/plugin/-/plugin-20.8.4.tgz",
+ "integrity": "sha512-PQn6O2I4/CwEp6fVv0pq3k9nrPbstQ3EVEmiVgG9lQPRdJxiQhOqb2zryVx0x+QLk9PqLUgSE8/k8HR5yGHfzg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
- "@nx/eslint": "20.8.3",
- "@nx/jest": "20.8.3",
- "@nx/js": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/eslint": "20.8.4",
+ "@nx/jest": "20.8.4",
+ "@nx/js": "20.8.4",
"tslib": "^2.3.0"
}
},
"node_modules/@nx/rspack": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-20.8.3.tgz",
- "integrity": "sha512-rCXewJP7ZiEfXIy4XkNfUJQA/B2W71ESG8MvO28OiV6u9rb/3XFqVct01o9cKFWpVYooH+HnbTiH8QPoTqG7+g==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-20.8.4.tgz",
+ "integrity": "sha512-IHdfCeIWzYUXw8/Iod4oFhojJr7gwjjw/HmzONgqToeDYcuZbXFgBnQzL/zTWf3nWa8BlDMNocgagDRvGGr+kg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
- "@nx/js": "20.8.3",
- "@nx/module-federation": "20.8.3",
- "@nx/web": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/js": "20.8.4",
+ "@nx/module-federation": "20.8.4",
+ "@nx/web": "20.8.4",
"@phenomnomnominal/tsquery": "~5.0.1",
"@rspack/core": "^1.1.5",
"@rspack/dev-server": "^1.0.9",
@@ -8201,14 +8476,14 @@
}
},
"node_modules/@nx/web": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/web/-/web-20.8.3.tgz",
- "integrity": "sha512-bqzZVqKUbi17IzUL6nXHogiYyRqZ8dzzDL5F0DzfQB2tdSXPV+OmlHh5JlsfhbQBYAZIiL/RxSSHvT1Sv0m2Fg==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/web/-/web-20.8.4.tgz",
+ "integrity": "sha512-N8uV/f50qDUITlxu85fLPK0MyL/PL1Ftn+sO3/6grUjYFIH5He+uFSfN4ei66fY7DFyHUCmBhSRZjmSNOM8VOA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
- "@nx/js": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/js": "20.8.4",
"detect-port": "^1.5.1",
"http-server": "^14.1.0",
"picocolors": "^1.1.0",
@@ -8216,15 +8491,15 @@
}
},
"node_modules/@nx/webpack": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-20.8.3.tgz",
- "integrity": "sha512-AWgpKzmNRfzehI1eQkJS0j3xEWBnsj2MsyL/5bUkI6n4zLo0X5S8JU80FXoy7kbn1tjeD7z9tFGOuvMlq99H4Q==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-20.8.4.tgz",
+ "integrity": "sha512-b8i5zOZUozzDPC9pH5AHoU5Q8Uv55JBPqiAIn1++AX/fmCIFyvPnEPgCk9VhKUtuMNn+AcpPyh+aeyG8dFcqlA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.23.2",
- "@nx/devkit": "20.8.3",
- "@nx/js": "20.8.3",
+ "@nx/devkit": "20.8.4",
+ "@nx/js": "20.8.4",
"@phenomnomnominal/tsquery": "~5.0.1",
"ajv": "^8.12.0",
"autoprefixer": "^10.4.9",
@@ -8505,9 +8780,9 @@
}
},
"node_modules/@nx/webpack/node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8870,17 +9145,17 @@
}
},
"node_modules/@nx/workspace": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.8.3.tgz",
- "integrity": "sha512-Sh6/53btkPNUzRlQCYl3EPwoH9KEcQnoYv1nERqZ4vi/yCVe1bOQc9Dhke/dn1fEgKNlYI96UdgxXeiInciqiQ==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-20.8.4.tgz",
+ "integrity": "sha512-TRtC+iv8d019Oj3AdKRhYcK79DNsBWF7xSZPEI+7MCNgrTZY3zhz1tY0DNUnqZSv17oGjnNFdHEEVL4lGILx5A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nx/devkit": "20.8.3",
+ "@nx/devkit": "20.8.4",
"@zkochan/js-yaml": "0.0.7",
"chalk": "^4.1.0",
"enquirer": "~2.3.6",
- "nx": "20.8.3",
+ "nx": "20.8.4",
"picomatch": "4.0.2",
"tslib": "^2.3.0",
"yargs-parser": "21.1.1"
@@ -9255,9 +9530,23 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz",
- "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.58.0.tgz",
+ "integrity": "sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.58.0.tgz",
+ "integrity": "sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==",
"cpu": [
"loong64"
],
@@ -9297,9 +9586,23 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz",
- "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.58.0.tgz",
+ "integrity": "sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.58.0.tgz",
+ "integrity": "sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==",
"cpu": [
"ppc64"
],
@@ -9325,9 +9628,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz",
- "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.58.0.tgz",
+ "integrity": "sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==",
"cpu": [
"riscv64"
],
@@ -9380,10 +9683,24 @@
"linux"
]
},
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.58.0.tgz",
+ "integrity": "sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz",
- "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.58.0.tgz",
+ "integrity": "sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==",
"cpu": [
"arm64"
],
@@ -9423,9 +9740,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz",
- "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.58.0.tgz",
+ "integrity": "sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==",
"cpu": [
"x64"
],
@@ -9451,9 +9768,9 @@
]
},
"node_modules/@rollup/wasm-node": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.54.0.tgz",
- "integrity": "sha512-CeEdHzNY+ZIR6NWpIOiJuCrr6tTK7cRGeOf6GYg5f73+UwJLqn5a4d5Ovf/hOWDyHM1KcySbxHQESJ9krhe0+A==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.58.0.tgz",
+ "integrity": "sha512-G4YrvWabOgRPfRSYEM95ZZGESbzVGUS+uvO/gVPNs3P93z8lBLTDpRwoo6zeEg6AqK9AdIshWbvDGOehZOikMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9471,28 +9788,28 @@
}
},
"node_modules/@rspack/binding": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.8.tgz",
- "integrity": "sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.6.tgz",
+ "integrity": "sha512-/NrEcfo8Gx22hLGysanrV6gHMuqZSxToSci/3M4kzEQtF5cPjfOv5pqeLK/+B6cr56ul/OmE96cCdWcXeVnFjQ==",
"dev": true,
"license": "MIT",
"optionalDependencies": {
- "@rspack/binding-darwin-arm64": "1.6.8",
- "@rspack/binding-darwin-x64": "1.6.8",
- "@rspack/binding-linux-arm64-gnu": "1.6.8",
- "@rspack/binding-linux-arm64-musl": "1.6.8",
- "@rspack/binding-linux-x64-gnu": "1.6.8",
- "@rspack/binding-linux-x64-musl": "1.6.8",
- "@rspack/binding-wasm32-wasi": "1.6.8",
- "@rspack/binding-win32-arm64-msvc": "1.6.8",
- "@rspack/binding-win32-ia32-msvc": "1.6.8",
- "@rspack/binding-win32-x64-msvc": "1.6.8"
+ "@rspack/binding-darwin-arm64": "1.7.6",
+ "@rspack/binding-darwin-x64": "1.7.6",
+ "@rspack/binding-linux-arm64-gnu": "1.7.6",
+ "@rspack/binding-linux-arm64-musl": "1.7.6",
+ "@rspack/binding-linux-x64-gnu": "1.7.6",
+ "@rspack/binding-linux-x64-musl": "1.7.6",
+ "@rspack/binding-wasm32-wasi": "1.7.6",
+ "@rspack/binding-win32-arm64-msvc": "1.7.6",
+ "@rspack/binding-win32-ia32-msvc": "1.7.6",
+ "@rspack/binding-win32-x64-msvc": "1.7.6"
}
},
"node_modules/@rspack/binding-darwin-arm64": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.8.tgz",
- "integrity": "sha512-e8CTQtzaeGnf+BIzR7wRMUwKfIg0jd/sxMRc1Vd0bCMHBhSN9EsGoMuJJaKeRrSmy2nwMCNWHIG+TvT1CEKg+A==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.6.tgz",
+ "integrity": "sha512-NZ9AWtB1COLUX1tA9HQQvWpTy07NSFfKBU8A6ylWd5KH8AePZztpNgLLAVPTuNO4CZXYpwcoclf8jG/luJcQdQ==",
"cpu": [
"arm64"
],
@@ -9504,9 +9821,9 @@
]
},
"node_modules/@rspack/binding-darwin-x64": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.8.tgz",
- "integrity": "sha512-ku1XpTEPt6Za11zhpFWhfwrTQogcgi9RJrOUVC4FESiPO9aKyd4hJ+JiPgLY0MZOqsptK6vEAgOip+uDVXrCpg==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.6.tgz",
+ "integrity": "sha512-J2g6xk8ZS7uc024dNTGTHxoFzFovAZIRixUG7PiciLKTMP78svbSSWrmW6N8oAsAkzYfJWwQpVgWfFNRHvYxSw==",
"cpu": [
"x64"
],
@@ -9518,9 +9835,9 @@
]
},
"node_modules/@rspack/binding-linux-arm64-gnu": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.8.tgz",
- "integrity": "sha512-fvZX6xZPvBT8qipSpvkKMX5M7yd2BSpZNCZXcefw6gA3uC7LI3gu+er0LrDXY1PtPzVuHTyDx+abwWpagV3PiQ==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.6.tgz",
+ "integrity": "sha512-eQfcsaxhFrv5FmtaA7+O1F9/2yFDNIoPZzV/ZvqvFz5bBXVc4FAm/1fVpBg8Po/kX1h0chBc7Xkpry3cabFW8w==",
"cpu": [
"arm64"
],
@@ -9532,9 +9849,9 @@
]
},
"node_modules/@rspack/binding-linux-arm64-musl": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.8.tgz",
- "integrity": "sha512-++XMKcMNrt59HcFBLnRaJcn70k3X0GwkAegZBVpel8xYIAgvoXT5+L8P1ExId/yTFxqedaz8DbcxQnNmMozviw==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.6.tgz",
+ "integrity": "sha512-DfQXKiyPIl7i1yECHy4eAkSmlUzzsSAbOjgMuKn7pudsWf483jg0UUYutNgXSlBjc/QSUp7906Cg8oty9OfwPA==",
"cpu": [
"arm64"
],
@@ -9546,9 +9863,9 @@
]
},
"node_modules/@rspack/binding-linux-x64-gnu": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.8.tgz",
- "integrity": "sha512-tv3BWkTE1TndfX+DsE1rSTg8fBevCxujNZ3MlfZ22Wfy9x1FMXTJlWG8VIOXmaaJ1wUHzv8S7cE2YUUJ2LuiCg==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.6.tgz",
+ "integrity": "sha512-NdA+2X3lk2GGrMMnTGyYTzM3pn+zNjaqXqlgKmFBXvjfZqzSsKq3pdD1KHZCd5QHN+Fwvoszj0JFsquEVhE1og==",
"cpu": [
"x64"
],
@@ -9560,9 +9877,9 @@
]
},
"node_modules/@rspack/binding-linux-x64-musl": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.8.tgz",
- "integrity": "sha512-DCGgZ5/in1O3FjHWqXnDsncRy+48cMhfuUAAUyl0yDj1NpsZu9pP+xfGLvGcQTiYrVl7IH9Aojf1eShP/77WGA==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.6.tgz",
+ "integrity": "sha512-rEy6MHKob02t/77YNgr6dREyJ0e0tv1X6Xsg8Z5E7rPXead06zefUbfazj4RELYySWnM38ovZyJAkPx/gOn3VA==",
"cpu": [
"x64"
],
@@ -9574,9 +9891,9 @@
]
},
"node_modules/@rspack/binding-wasm32-wasi": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.8.tgz",
- "integrity": "sha512-VUwdhl/lI4m6o1OGCZ9JwtMjTV/yLY5VZTQdEPKb40JMTlmZ5MBlr5xk7ByaXXYHr6I+qnqEm73iMKQvg6iknw==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.6.tgz",
+ "integrity": "sha512-YupOrz0daSG+YBbCIgpDgzfMM38YpChv+afZpaxx5Ml7xPeAZIIdgWmLHnQ2rts73N2M1NspAiBwV00Xx0N4Vg==",
"cpu": [
"wasm32"
],
@@ -9588,9 +9905,9 @@
}
},
"node_modules/@rspack/binding-win32-arm64-msvc": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.8.tgz",
- "integrity": "sha512-23YX7zlOZlub+nPGDBUzktb4D5D6ETUAluKjXEeHIZ9m7fSlEYBnGL66YE+3t1DHXGd0OqsdwlvrNGcyo6EXDQ==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.6.tgz",
+ "integrity": "sha512-INj7aVXjBvlZ84kEhSK4kJ484ub0i+BzgnjDWOWM1K+eFYDZjLdAsQSS3fGGXwVc3qKbPIssFfnftATDMTEJHQ==",
"cpu": [
"arm64"
],
@@ -9602,9 +9919,9 @@
]
},
"node_modules/@rspack/binding-win32-ia32-msvc": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.8.tgz",
- "integrity": "sha512-cFgRE3APxrY4AEdooVk2LtipwNNT/9mrnjdC5lVbsIsz+SxvGbZR231bxDJEqP15+RJOaD07FO1sIjINFqXMEg==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.6.tgz",
+ "integrity": "sha512-lXGvC+z67UMcw58In12h8zCa9IyYRmuptUBMItQJzu+M278aMuD1nETyGLL7e4+OZ2lvrnnBIcjXN1hfw2yRzw==",
"cpu": [
"ia32"
],
@@ -9616,9 +9933,9 @@
]
},
"node_modules/@rspack/binding-win32-x64-msvc": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.8.tgz",
- "integrity": "sha512-cIuhVsZYd3o3Neo1JSAhJYw6BDvlxaBoqvgwRkG1rs0ExFmEmgYyG7ip9pFKnKNWph/tmW3rDYypmEfjs1is7g==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.6.tgz",
+ "integrity": "sha512-zeUxEc0ZaPpmaYlCeWcjSJUPuRRySiSHN23oJ2Xyw0jsQ01Qm4OScPdr0RhEOFuK/UE+ANyRtDo4zJsY52Hadw==",
"cpu": [
"x64"
],
@@ -9630,14 +9947,14 @@
]
},
"node_modules/@rspack/core": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.8.tgz",
- "integrity": "sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==",
+ "version": "1.7.6",
+ "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.6.tgz",
+ "integrity": "sha512-Iax6UhrfZqJajA778c1d5DBFbSIqPOSrI34kpNIiNpWd8Jq7mFIa+Z60SQb5ZQDZuUxcCZikjz5BxinFjTkg7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/runtime-tools": "0.21.6",
- "@rspack/binding": "1.6.8",
+ "@module-federation/runtime-tools": "0.22.0",
+ "@rspack/binding": "1.7.6",
"@rspack/lite-tapable": "1.1.0"
},
"engines": {
@@ -9653,75 +9970,98 @@
}
},
"node_modules/@rspack/core/node_modules/@module-federation/error-codes": {
- "version": "0.21.6",
- "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.6.tgz",
- "integrity": "sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz",
+ "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==",
"dev": true,
"license": "MIT"
},
"node_modules/@rspack/core/node_modules/@module-federation/runtime": {
- "version": "0.21.6",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.21.6.tgz",
- "integrity": "sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz",
+ "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/error-codes": "0.21.6",
- "@module-federation/runtime-core": "0.21.6",
- "@module-federation/sdk": "0.21.6"
+ "@module-federation/error-codes": "0.22.0",
+ "@module-federation/runtime-core": "0.22.0",
+ "@module-federation/sdk": "0.22.0"
}
},
"node_modules/@rspack/core/node_modules/@module-federation/runtime-core": {
- "version": "0.21.6",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz",
- "integrity": "sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz",
+ "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/error-codes": "0.21.6",
- "@module-federation/sdk": "0.21.6"
+ "@module-federation/error-codes": "0.22.0",
+ "@module-federation/sdk": "0.22.0"
}
},
"node_modules/@rspack/core/node_modules/@module-federation/runtime-tools": {
- "version": "0.21.6",
- "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz",
- "integrity": "sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz",
+ "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/runtime": "0.21.6",
- "@module-federation/webpack-bundler-runtime": "0.21.6"
+ "@module-federation/runtime": "0.22.0",
+ "@module-federation/webpack-bundler-runtime": "0.22.0"
}
},
"node_modules/@rspack/core/node_modules/@module-federation/sdk": {
- "version": "0.21.6",
- "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.21.6.tgz",
- "integrity": "sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz",
+ "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==",
"dev": true,
"license": "MIT"
},
"node_modules/@rspack/core/node_modules/@module-federation/webpack-bundler-runtime": {
- "version": "0.21.6",
- "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz",
- "integrity": "sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==",
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz",
+ "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@module-federation/runtime": "0.21.6",
- "@module-federation/sdk": "0.21.6"
+ "@module-federation/runtime": "0.22.0",
+ "@module-federation/sdk": "0.22.0"
}
},
"node_modules/@rspack/dev-server": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.4.tgz",
- "integrity": "sha512-kGHYX2jYf3ZiHwVl0aUEPBOBEIG1aWleCDCAi+Jg32KUu3qr/zDUpCEd0wPuHfLEgk0X0xAEYCS6JMO7nBStNQ==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.2.1.tgz",
+ "integrity": "sha512-e/ARvskYn2Qdd02qLvc0i6H9BnOmzP0xGHS2XCr7GZ3t2k5uC5ZlLkeN1iEebU0FkAW+6ot89NahFo3nupKuww==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@types/bonjour": "^3.5.13",
+ "@types/connect-history-api-fallback": "^1.5.4",
+ "@types/express": "^4.17.25",
+ "@types/express-serve-static-core": "^4.17.21",
+ "@types/serve-index": "^1.9.4",
+ "@types/serve-static": "^1.15.5",
+ "@types/sockjs": "^0.3.36",
+ "@types/ws": "^8.5.10",
+ "ansi-html-community": "^0.0.8",
+ "bonjour-service": "^1.2.1",
"chokidar": "^3.6.0",
+ "colorette": "^2.0.10",
+ "compression": "^1.8.1",
+ "connect-history-api-fallback": "^2.0.0",
+ "express": "^4.22.1",
+ "graceful-fs": "^4.2.6",
"http-proxy-middleware": "^2.0.9",
+ "ipaddr.js": "^2.1.0",
+ "launch-editor": "^2.6.1",
+ "open": "^10.0.3",
"p-retry": "^6.2.0",
- "webpack-dev-server": "5.2.2",
+ "schema-utils": "^4.2.0",
+ "selfsigned": "^2.4.1",
+ "serve-index": "^1.9.1",
+ "sockjs": "^0.3.24",
+ "spdy": "^4.0.2",
+ "webpack-dev-middleware": "^7.4.2",
"ws": "^8.18.0"
},
"engines": {
@@ -9828,9 +10168,9 @@
"license": "MIT"
},
"node_modules/@rspack/plugin-react-refresh": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.5.3.tgz",
- "integrity": "sha512-VOnQMf3YOHkTqJ0+BJbrYga4tQAWNwoAnkgwRauXB4HOyCc5wLfBs9DcOFla/2usnRT3Sq6CMVhXmdPobwAoTA==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.1.tgz",
+ "integrity": "sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9848,15 +10188,15 @@
}
},
"node_modules/@schematics/angular": {
- "version": "19.2.19",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.19.tgz",
- "integrity": "sha512-6/0pvbPCY4UHeB4lnM/5r250QX5gcLgOYbR5FdhFu+22mOPHfWpRc5tNuY9kCephDHzAHjo6fTW1vefOOmA4jw==",
+ "version": "19.2.20",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.20.tgz",
+ "integrity": "sha512-xDrYxZvk9dGA2eVqufqLYmVSMSXxVtv30pBHGGU/2xr4QzHzdmMHflk4It8eh4WMNLhn7kqnzMREwtNI3eW/Gw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "@angular-devkit/core": "19.2.19",
- "@angular-devkit/schematics": "19.2.19",
+ "@angular-devkit/core": "19.2.20",
+ "@angular-devkit/schematics": "19.2.20",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -9866,9 +10206,9 @@
}
},
"node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "version": "0.27.10",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz",
+ "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==",
"dev": true,
"license": "MIT"
},
@@ -10094,9 +10434,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "4.19.7",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz",
- "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==",
+ "version": "4.19.8",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz",
+ "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10175,9 +10515,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.19.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz",
- "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==",
+ "version": "22.19.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz",
+ "integrity": "sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10317,20 +10657,20 @@
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz",
- "integrity": "sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz",
+ "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.51.0",
- "@typescript-eslint/type-utils": "8.51.0",
- "@typescript-eslint/utils": "8.51.0",
- "@typescript-eslint/visitor-keys": "8.51.0",
- "ignore": "^7.0.0",
+ "@eslint-community/regexpp": "^4.12.2",
+ "@typescript-eslint/scope-manager": "8.56.0",
+ "@typescript-eslint/type-utils": "8.56.0",
+ "@typescript-eslint/utils": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0",
+ "ignore": "^7.0.5",
"natural-compare": "^1.4.0",
- "ts-api-utils": "^2.2.0"
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10340,8 +10680,8 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.51.0",
- "eslint": "^8.57.0 || ^9.0.0",
+ "@typescript-eslint/parser": "^8.56.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
@@ -10356,17 +10696,17 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.51.0.tgz",
- "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz",
+ "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.51.0",
- "@typescript-eslint/types": "8.51.0",
- "@typescript-eslint/typescript-estree": "8.51.0",
- "@typescript-eslint/visitor-keys": "8.51.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/scope-manager": "8.56.0",
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/typescript-estree": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10376,20 +10716,20 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.51.0.tgz",
- "integrity": "sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz",
+ "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.51.0",
- "@typescript-eslint/types": "^8.51.0",
- "debug": "^4.3.4"
+ "@typescript-eslint/tsconfig-utils": "^8.56.0",
+ "@typescript-eslint/types": "^8.56.0",
+ "debug": "^4.4.3"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10403,14 +10743,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz",
- "integrity": "sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz",
+ "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.51.0",
- "@typescript-eslint/visitor-keys": "8.51.0"
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10421,9 +10761,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz",
- "integrity": "sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz",
+ "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10438,17 +10778,17 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz",
- "integrity": "sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz",
+ "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.51.0",
- "@typescript-eslint/typescript-estree": "8.51.0",
- "@typescript-eslint/utils": "8.51.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^2.2.0"
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/typescript-estree": "8.56.0",
+ "@typescript-eslint/utils": "8.56.0",
+ "debug": "^4.4.3",
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10458,14 +10798,14 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.51.0.tgz",
- "integrity": "sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz",
+ "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10477,21 +10817,21 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz",
- "integrity": "sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz",
+ "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.51.0",
- "@typescript-eslint/tsconfig-utils": "8.51.0",
- "@typescript-eslint/types": "8.51.0",
- "@typescript-eslint/visitor-keys": "8.51.0",
- "debug": "^4.3.4",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
+ "@typescript-eslint/project-service": "8.56.0",
+ "@typescript-eslint/tsconfig-utils": "8.56.0",
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/visitor-keys": "8.56.0",
+ "debug": "^4.4.3",
+ "minimatch": "^9.0.5",
+ "semver": "^7.7.3",
"tinyglobby": "^0.2.15",
- "ts-api-utils": "^2.2.0"
+ "ts-api-utils": "^2.4.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10520,17 +10860,30 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@typescript-eslint/utils": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.51.0.tgz",
- "integrity": "sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz",
+ "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.51.0",
- "@typescript-eslint/types": "8.51.0",
- "@typescript-eslint/typescript-estree": "8.51.0"
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.56.0",
+ "@typescript-eslint/types": "8.56.0",
+ "@typescript-eslint/typescript-estree": "8.56.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10540,19 +10893,19 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz",
- "integrity": "sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==",
+ "version": "8.56.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz",
+ "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.51.0",
- "eslint-visitor-keys": "^4.2.1"
+ "@typescript-eslint/types": "8.56.0",
+ "eslint-visitor-keys": "^5.0.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10563,13 +10916,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
@@ -10950,10 +11303,20 @@
"node": ">= 0.6"
}
},
+ "node_modules/accepts/node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/acorn": {
- "version": "8.15.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
- "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
"bin": {
@@ -11066,9 +11429,9 @@
}
},
"node_modules/acorn-walk": {
- "version": "8.3.4",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
- "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
+ "version": "8.3.5",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
+ "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11411,14 +11774,14 @@
}
},
"node_modules/axios": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
- "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+ "version": "1.13.5",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
+ "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
"proxy-from-env": "^1.1.0"
}
},
@@ -11630,14 +11993,14 @@
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz",
- "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==",
+ "version": "0.4.15",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz",
+ "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.27.7",
- "@babel/helper-define-polyfill-provider": "^0.6.5",
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.6",
"semver": "^6.3.1"
},
"peerDependencies": {
@@ -11669,13 +12032,13 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz",
- "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==",
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz",
+ "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.5"
+ "@babel/helper-define-polyfill-provider": "^0.6.6"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -11764,13 +12127,16 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.11",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz",
- "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
+ "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
- "baseline-browser-mapping": "dist/cli.js"
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/basic-auth": {
@@ -12040,13 +12406,6 @@
"ieee754": "^1.1.13"
}
},
- "node_modules/buffer-builder": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz",
- "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==",
- "dev": true,
- "license": "MIT/X11"
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -12159,9 +12518,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001762",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz",
- "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==",
+ "version": "1.0.30001770",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz",
+ "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==",
"dev": true,
"funding": [
{
@@ -12807,16 +13166,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/compression/node_modules/negotiator": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
- "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -12955,13 +13304,13 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.47.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz",
- "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==",
+ "version": "3.48.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz",
+ "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "browserslist": "^4.28.0"
+ "browserslist": "^4.28.1"
},
"funding": {
"type": "opencollective",
@@ -12969,9 +13318,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.47.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz",
- "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==",
+ "version": "3.48.0",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.48.0.tgz",
+ "integrity": "sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -13072,9 +13421,9 @@
}
},
"node_modules/css-declaration-sorter": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz",
- "integrity": "sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz",
+ "integrity": "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==",
"dev": true,
"license": "ISC",
"engines": {
@@ -13090,7 +13439,6 @@
"integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"icss-utils": "^5.1.0",
"postcss": "^8.4.33",
@@ -13450,9 +13798,9 @@
}
},
"node_modules/default-browser": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz",
- "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
+ "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13600,9 +13948,9 @@
}
},
"node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz",
+ "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -13822,9 +14170,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.267",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
- "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
+ "version": "1.5.302",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.302.tgz",
+ "integrity": "sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==",
"dev": true,
"license": "ISC"
},
@@ -13889,14 +14237,14 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.4",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
- "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==",
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
+ "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tapable": "^2.3.0"
},
"engines": {
"node": ">=10.13.0"
@@ -14137,9 +14485,9 @@
}
},
"node_modules/eslint": {
- "version": "9.39.2",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz",
- "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
+ "version": "9.39.3",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz",
+ "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14149,7 +14497,7 @@
"@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",
@@ -14245,9 +14593,9 @@
}
},
"node_modules/eslint/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -14499,9 +14847,9 @@
}
},
"node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -14826,9 +15174,9 @@
"license": "BSD-3-Clause"
},
"node_modules/fast-xml-parser": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.3.tgz",
- "integrity": "sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==",
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.7.tgz",
+ "integrity": "sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==",
"dev": true,
"funding": [
{
@@ -14838,7 +15186,7 @@
],
"license": "MIT",
"dependencies": {
- "strnum": "^2.1.0"
+ "strnum": "^2.1.2"
},
"bin": {
"fxparser": "src/cli/cli.js"
@@ -15167,9 +15515,9 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -15600,9 +15948,9 @@
}
},
"node_modules/get-east-asian-width": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
- "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz",
+ "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -15678,7 +16026,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -16125,9 +16473,9 @@
"license": "MIT"
},
"node_modules/htmlparser2": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
- "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz",
+ "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==",
"dev": true,
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
@@ -16140,14 +16488,14 @@
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
- "domutils": "^3.2.1",
- "entities": "^6.0.0"
+ "domutils": "^3.2.2",
+ "entities": "^7.0.1"
}
},
"node_modules/htmlparser2/node_modules/entities": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
- "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -16847,13 +17195,13 @@
}
},
"node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz",
+ "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 0.10"
+ "node": ">= 10"
}
},
"node_modules/is-arrayish": {
@@ -17122,9 +17470,9 @@
}
},
"node_modules/is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
+ "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19007,7 +19355,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
"integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
- "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19151,9 +19498,9 @@
}
},
"node_modules/launch-editor": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz",
- "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.0.tgz",
+ "integrity": "sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -19531,9 +19878,9 @@
}
},
"node_modules/listr2/node_modules/eventemitter3": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
- "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+ "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
"dev": true,
"license": "MIT"
},
@@ -19655,9 +20002,9 @@
}
},
"node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"dev": true,
"license": "MIT"
},
@@ -19818,9 +20165,9 @@
}
},
"node_modules/log-update/node_modules/ansi-escapes": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz",
- "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz",
+ "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20231,9 +20578,9 @@
}
},
"node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20253,6 +20600,16 @@
"node": ">= 0.6"
}
},
+ "node_modules/mime-types/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/mimic-fn": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
@@ -20547,9 +20904,9 @@
}
},
"node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -20913,9 +21270,9 @@
}
},
"node_modules/nx": {
- "version": "20.8.3",
- "resolved": "https://registry.npmjs.org/nx/-/nx-20.8.3.tgz",
- "integrity": "sha512-8w815WSMWar3A/LFzwtmEY+E8cVW62lMiFuPDXje+C8O8hFndfvscP56QHNMn2Zdhz3q0+BZUe+se4Em1BKYdA==",
+ "version": "20.8.4",
+ "resolved": "https://registry.npmjs.org/nx/-/nx-20.8.4.tgz",
+ "integrity": "sha512-/++x0OM3/UTmDR+wmPeV13tSxeTr+QGzj3flgtH9DiOPmQnn2CjHWAMZiOhcSh/hHoE/V3ySL4757InQUsVtjQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -20960,16 +21317,16 @@
"nx-cloud": "bin/nx-cloud.js"
},
"optionalDependencies": {
- "@nx/nx-darwin-arm64": "20.8.3",
- "@nx/nx-darwin-x64": "20.8.3",
- "@nx/nx-freebsd-x64": "20.8.3",
- "@nx/nx-linux-arm-gnueabihf": "20.8.3",
- "@nx/nx-linux-arm64-gnu": "20.8.3",
- "@nx/nx-linux-arm64-musl": "20.8.3",
- "@nx/nx-linux-x64-gnu": "20.8.3",
- "@nx/nx-linux-x64-musl": "20.8.3",
- "@nx/nx-win32-arm64-msvc": "20.8.3",
- "@nx/nx-win32-x64-msvc": "20.8.3"
+ "@nx/nx-darwin-arm64": "20.8.4",
+ "@nx/nx-darwin-x64": "20.8.4",
+ "@nx/nx-freebsd-x64": "20.8.4",
+ "@nx/nx-linux-arm-gnueabihf": "20.8.4",
+ "@nx/nx-linux-arm64-gnu": "20.8.4",
+ "@nx/nx-linux-arm64-musl": "20.8.4",
+ "@nx/nx-linux-x64-gnu": "20.8.4",
+ "@nx/nx-linux-x64-musl": "20.8.4",
+ "@nx/nx-win32-arm64-msvc": "20.8.4",
+ "@nx/nx-win32-x64-msvc": "20.8.4"
},
"peerDependencies": {
"@swc-node/register": "^1.8.0",
@@ -21593,9 +21950,9 @@
}
},
"node_modules/ordered-binary": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz",
- "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz",
+ "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==",
"dev": true,
"license": "MIT",
"optional": true
@@ -21905,9 +22262,9 @@
"license": "MIT"
},
"node_modules/path-scurry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz",
- "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
+ "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -21915,16 +22272,16 @@
"minipass": "^7.1.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "11.2.4",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz",
- "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==",
+ "version": "11.2.6",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz",
+ "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
@@ -21932,11 +22289,11 @@
}
},
"node_modules/path-scurry/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -22861,9 +23218,9 @@
}
},
"node_modules/prettier": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz",
- "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==",
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
+ "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -22945,6 +23302,16 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-addr/node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -23011,9 +23378,9 @@
"license": "MIT"
},
"node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -23125,9 +23492,9 @@
}
},
"node_modules/raw-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -23193,9 +23560,9 @@
}
},
"node_modules/react": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz",
- "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==",
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
+ "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -23204,9 +23571,9 @@
}
},
"node_modules/react-dom": {
- "version": "19.2.3",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz",
- "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==",
+ "version": "19.2.4",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
+ "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -23214,7 +23581,7 @@
"scheduler": "^0.27.0"
},
"peerDependencies": {
- "react": "^19.2.3"
+ "react": "^19.2.4"
}
},
"node_modules/react-is": {
@@ -23585,13 +23952,13 @@
"license": "MIT"
},
"node_modules/rimraf": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.2.tgz",
- "integrity": "sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz",
+ "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
- "glob": "^13.0.0",
+ "glob": "^13.0.3",
"package-json-from-dist": "^1.0.1"
},
"bin": {
@@ -23604,46 +23971,69 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/rimraf/node_modules/balanced-match": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz",
+ "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/rimraf/node_modules/brace-expansion": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz",
+ "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
"node_modules/rimraf/node_modules/glob": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz",
- "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==",
+ "version": "13.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
+ "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
- "minimatch": "^10.1.1",
- "minipass": "^7.1.2",
- "path-scurry": "^2.0.0"
+ "minimatch": "^10.2.2",
+ "minipass": "^7.1.3",
+ "path-scurry": "^2.0.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/minimatch": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
- "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.2.tgz",
+ "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
- "@isaacs/brace-expansion": "^5.0.0"
+ "brace-expansion": "^5.0.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -23816,14 +24206,13 @@
}
},
"node_modules/sass-embedded": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.97.1.tgz",
- "integrity": "sha512-wH3CbOThHYGX0bUyqFf7laLKyhVWIFc2lHynitkqMIUCtX2ixH9mQh0bN7+hkUu5BFt/SXvEMjFbkEbBMpQiSQ==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.97.3.tgz",
+ "integrity": "sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@bufbuild/protobuf": "^2.5.0",
- "buffer-builder": "^0.2.0",
"colorjs.io": "^0.5.0",
"immutable": "^5.0.2",
"rxjs": "^7.4.0",
@@ -23838,30 +24227,30 @@
"node": ">=16.0.0"
},
"optionalDependencies": {
- "sass-embedded-all-unknown": "1.97.1",
- "sass-embedded-android-arm": "1.97.1",
- "sass-embedded-android-arm64": "1.97.1",
- "sass-embedded-android-riscv64": "1.97.1",
- "sass-embedded-android-x64": "1.97.1",
- "sass-embedded-darwin-arm64": "1.97.1",
- "sass-embedded-darwin-x64": "1.97.1",
- "sass-embedded-linux-arm": "1.97.1",
- "sass-embedded-linux-arm64": "1.97.1",
- "sass-embedded-linux-musl-arm": "1.97.1",
- "sass-embedded-linux-musl-arm64": "1.97.1",
- "sass-embedded-linux-musl-riscv64": "1.97.1",
- "sass-embedded-linux-musl-x64": "1.97.1",
- "sass-embedded-linux-riscv64": "1.97.1",
- "sass-embedded-linux-x64": "1.97.1",
- "sass-embedded-unknown-all": "1.97.1",
- "sass-embedded-win32-arm64": "1.97.1",
- "sass-embedded-win32-x64": "1.97.1"
+ "sass-embedded-all-unknown": "1.97.3",
+ "sass-embedded-android-arm": "1.97.3",
+ "sass-embedded-android-arm64": "1.97.3",
+ "sass-embedded-android-riscv64": "1.97.3",
+ "sass-embedded-android-x64": "1.97.3",
+ "sass-embedded-darwin-arm64": "1.97.3",
+ "sass-embedded-darwin-x64": "1.97.3",
+ "sass-embedded-linux-arm": "1.97.3",
+ "sass-embedded-linux-arm64": "1.97.3",
+ "sass-embedded-linux-musl-arm": "1.97.3",
+ "sass-embedded-linux-musl-arm64": "1.97.3",
+ "sass-embedded-linux-musl-riscv64": "1.97.3",
+ "sass-embedded-linux-musl-x64": "1.97.3",
+ "sass-embedded-linux-riscv64": "1.97.3",
+ "sass-embedded-linux-x64": "1.97.3",
+ "sass-embedded-unknown-all": "1.97.3",
+ "sass-embedded-win32-arm64": "1.97.3",
+ "sass-embedded-win32-x64": "1.97.3"
}
},
"node_modules/sass-embedded-all-unknown": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.1.tgz",
- "integrity": "sha512-0au5gUNibfob7W/g+ycBx74O22CL8vwHiZdEDY6J0uzMkHPiSJk//h0iRf5AUnMArFHJjFd3urIiQIaoRKYa1Q==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.3.tgz",
+ "integrity": "sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==",
"cpu": [
"!arm",
"!arm64",
@@ -23872,13 +24261,13 @@
"license": "MIT",
"optional": true,
"dependencies": {
- "sass": "1.97.1"
+ "sass": "1.97.3"
}
},
"node_modules/sass-embedded-android-arm": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.1.tgz",
- "integrity": "sha512-B5dlv4utJ+yC8ZpBeWTHwSZPVKRlqA8pcaD0FAzeNm/DelIFgQUQtt0UwgYoAI6wDIiie5uSVpMK9l2DaCbiBQ==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.3.tgz",
+ "integrity": "sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==",
"cpu": [
"arm"
],
@@ -23893,9 +24282,9 @@
}
},
"node_modules/sass-embedded-android-arm64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.1.tgz",
- "integrity": "sha512-h62DmOiS2Jn87s8+8GhJcMerJnTKa1IsIa9iIKjLiqbAvBDKCGUs027RugZkM+Zx7I+vhPq86PUXBYZ9EkRxdw==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.3.tgz",
+ "integrity": "sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==",
"cpu": [
"arm64"
],
@@ -23910,9 +24299,9 @@
}
},
"node_modules/sass-embedded-android-riscv64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.1.tgz",
- "integrity": "sha512-tGup88vgaXPnUHEgDMujrt5rfYadvkiVjRb/45FJTx2hQFoGVbmUXz5XqUFjIIbEjQ3kAJqp86A2jy11s43UiQ==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.3.tgz",
+ "integrity": "sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==",
"cpu": [
"riscv64"
],
@@ -23927,9 +24316,9 @@
}
},
"node_modules/sass-embedded-android-x64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.1.tgz",
- "integrity": "sha512-CAzKjjzu90LZduye2O9+UGX1oScMyF5/RVOa5CxACKALeIS+3XL3LVdV47kwKPoBv5B1aFUvGLscY0CR7jBAbg==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.3.tgz",
+ "integrity": "sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==",
"cpu": [
"x64"
],
@@ -23944,9 +24333,9 @@
}
},
"node_modules/sass-embedded-darwin-arm64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.1.tgz",
- "integrity": "sha512-tyDzspzh5PbqdAFGtVKUXuf0up6Lff3c1U8J7+4Y7jW6AWRBnq95vTzIIxfnNifGCTI2fW5e7GAZpYygKpNwcw==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.3.tgz",
+ "integrity": "sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==",
"cpu": [
"arm64"
],
@@ -23961,9 +24350,9 @@
}
},
"node_modules/sass-embedded-darwin-x64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.1.tgz",
- "integrity": "sha512-FMrRuSPI2ICt2M2SYaLbiG4yxn86D6ae+XtrRdrrBMhWprAcB7Iyu67bgRzZkipMZNIKKeTR7EUvJHgZzi5ixQ==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.3.tgz",
+ "integrity": "sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==",
"cpu": [
"x64"
],
@@ -23978,9 +24367,9 @@
}
},
"node_modules/sass-embedded-linux-arm": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.1.tgz",
- "integrity": "sha512-48VxaTUApLyx1NXFdZhKqI/7FYLmz8Ju3Ki2V/p+mhn5raHgAiYeFgn8O1WGxTOh+hBb9y3FdSR5a8MNTbmKMQ==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.3.tgz",
+ "integrity": "sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==",
"cpu": [
"arm"
],
@@ -23995,9 +24384,9 @@
}
},
"node_modules/sass-embedded-linux-arm64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.1.tgz",
- "integrity": "sha512-im80gfDWRivw9Su3r3YaZmJaCATcJgu3CsCSLodPk1b1R2+X/E12zEQayvrl05EGT9PDwTtuiqKgS4ND4xjwVg==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.3.tgz",
+ "integrity": "sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==",
"cpu": [
"arm64"
],
@@ -24012,9 +24401,9 @@
}
},
"node_modules/sass-embedded-linux-musl-arm": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.1.tgz",
- "integrity": "sha512-FUFs466t3PVViVOKY/60JgLLtl61Pf7OW+g5BeEfuqVcSvYUECVHeiYHtX1fT78PEVa0h9tHpM6XpWti+7WYFA==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.3.tgz",
+ "integrity": "sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==",
"cpu": [
"arm"
],
@@ -24029,9 +24418,9 @@
}
},
"node_modules/sass-embedded-linux-musl-arm64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.1.tgz",
- "integrity": "sha512-kD35WSD9o0279Ptwid3Jnbovo1FYnuG2mayYk9z4ZI4mweXEK6vTu+tlvCE/MdF/zFKSj11qaxaH+uzXe2cO5A==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.3.tgz",
+ "integrity": "sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==",
"cpu": [
"arm64"
],
@@ -24046,9 +24435,9 @@
}
},
"node_modules/sass-embedded-linux-musl-riscv64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.1.tgz",
- "integrity": "sha512-ZgpYps5YHuhA2+KiLkPukRbS5298QObgUhPll/gm5i0LOZleKCwrFELpVPcbhsSBuxqji2uaag5OL+n3JRBVVg==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.3.tgz",
+ "integrity": "sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==",
"cpu": [
"riscv64"
],
@@ -24063,9 +24452,9 @@
}
},
"node_modules/sass-embedded-linux-musl-x64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.1.tgz",
- "integrity": "sha512-wcAigOyyvZ6o1zVypWV7QLZqpOEVnlBqJr9MbpnRIm74qFTSbAEmShoh8yMXBymzuVSmEbThxAwW01/TLf62tA==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.3.tgz",
+ "integrity": "sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==",
"cpu": [
"x64"
],
@@ -24080,9 +24469,9 @@
}
},
"node_modules/sass-embedded-linux-riscv64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.1.tgz",
- "integrity": "sha512-9j1qE1ZrLMuGb+LUmBzw93Z4TNfqlRkkxjPVZy6u5vIggeSfvGbte7eRoYBNWX6SFew/yBCL90KXIirWFSGrlQ==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.3.tgz",
+ "integrity": "sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==",
"cpu": [
"riscv64"
],
@@ -24097,9 +24486,9 @@
}
},
"node_modules/sass-embedded-linux-x64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.1.tgz",
- "integrity": "sha512-7nrLFYMH/UgvEgXR5JxQJ6y9N4IJmnFnYoDxN0nw0jUp+CQWQL4EJ4RqAKTGelneueRbccvt2sEyPK+X0KJ9Jg==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.3.tgz",
+ "integrity": "sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==",
"cpu": [
"x64"
],
@@ -24114,9 +24503,9 @@
}
},
"node_modules/sass-embedded-unknown-all": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.1.tgz",
- "integrity": "sha512-oPSeKc7vS2dx3ZJHiUhHKcyqNq0GWzAiR8zMVpPd/kVMl5ZfVyw+5HTCxxWDBGkX02lNpou27JkeBPCaneYGAQ==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.3.tgz",
+ "integrity": "sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -24127,13 +24516,13 @@
"!win32"
],
"dependencies": {
- "sass": "1.97.1"
+ "sass": "1.97.3"
}
},
"node_modules/sass-embedded-win32-arm64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.1.tgz",
- "integrity": "sha512-L5j7J6CbZgHGwcfVedMVpM3z5MYeighcyZE8GF2DVmjWzZI3JtPKNY11wNTD/P9o1Uql10YPOKhGH0iWIXOT7Q==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.3.tgz",
+ "integrity": "sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==",
"cpu": [
"arm64"
],
@@ -24148,9 +24537,9 @@
}
},
"node_modules/sass-embedded-win32-x64": {
- "version": "1.97.1",
- "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.1.tgz",
- "integrity": "sha512-rfaZAKXU8cW3E7gvdafyD6YtgbEcsDeT99OEiHXRT0UGFuXT8qCOjpAwIKaOA3XXr2d8S42xx6cXcaZ1a+1fgw==",
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.3.tgz",
+ "integrity": "sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==",
"cpu": [
"x64"
],
@@ -24303,11 +24692,14 @@
}
},
"node_modules/sax": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz",
- "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==",
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz",
+ "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==",
"dev": true,
- "license": "BlueOak-1.0.0"
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=11.0.0"
+ }
},
"node_modules/scheduler": {
"version": "0.27.0",
@@ -24449,22 +24841,26 @@
}
},
"node_modules/serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz",
+ "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "accepts": "~1.3.4",
+ "accepts": "~1.3.8",
"batch": "0.6.1",
"debug": "2.6.9",
"escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
+ "http-errors": "~1.8.0",
+ "mime-types": "~2.1.35",
+ "parseurl": "~1.3.3"
},
"engines": {
"node": ">= 0.8.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/serve-index/node_modules/debug": {
@@ -24488,28 +24884,22 @@
}
},
"node_modules/serve-index/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"dev": true,
"license": "MIT",
"dependencies": {
"depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
},
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/serve-index/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/serve-index/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -24517,13 +24907,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/serve-index/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/serve-index/node_modules/statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -25277,6 +25660,7 @@
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -25318,11 +25702,11 @@
}
},
"node_modules/stylus/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -25441,9 +25825,9 @@
}
},
"node_modules/sync-message-port": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz",
- "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz",
+ "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -25468,6 +25852,7 @@
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
"integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -25816,9 +26201,9 @@
}
},
"node_modules/ts-api-utils": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.3.0.tgz",
- "integrity": "sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
+ "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -25829,22 +26214,19 @@
}
},
"node_modules/ts-checker-rspack-plugin": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.2.3.tgz",
- "integrity": "sha512-Fq2+/sSILEJKWrqoj/H+ytnBbYrudPfRLxaULA/MuL+/3jswXuiR4MOfL30R9XzVUD2km0pSx6bj8yk95IEOaA==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.3.0.tgz",
+ "integrity": "sha512-89oK/BtApjdid1j9CGjPGiYry+EZBhsnTAM481/8ipgr/y2IOgCbW1HPnan+fs5FnzlpUgf9dWGNZ4Ayw3Bd8A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
"@rspack/lite-tapable": "^1.1.0",
"chokidar": "^3.6.0",
- "is-glob": "^4.0.3",
- "memfs": "^4.51.1",
- "minimatch": "^9.0.5",
+ "memfs": "^4.56.10",
"picocolors": "^1.1.1"
},
"peerDependencies": {
- "@rspack/core": "^1.0.0",
+ "@rspack/core": "^1.0.0 || ^2.0.0-0",
"typescript": ">=3.8.0"
},
"peerDependenciesMeta": {
@@ -25892,12 +26274,20 @@
}
},
"node_modules/ts-checker-rspack-plugin/node_modules/memfs": {
- "version": "4.51.1",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.1.tgz",
- "integrity": "sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==",
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz",
+ "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
+ "@jsonjoy.com/fs-core": "4.56.10",
+ "@jsonjoy.com/fs-fsa": "4.56.10",
+ "@jsonjoy.com/fs-node": "4.56.10",
+ "@jsonjoy.com/fs-node-builtins": "4.56.10",
+ "@jsonjoy.com/fs-node-to-fsa": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/fs-print": "4.56.10",
+ "@jsonjoy.com/fs-snapshot": "4.56.10",
"@jsonjoy.com/json-pack": "^1.11.0",
"@jsonjoy.com/util": "^1.9.0",
"glob-to-regex.js": "^1.0.1",
@@ -25908,22 +26298,9 @@
"funding": {
"type": "github",
"url": "https://github.com/sponsors/streamich"
- }
- },
- "node_modules/ts-checker-rspack-plugin/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
},
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "peerDependencies": {
+ "tslib": "2"
}
},
"node_modules/ts-checker-rspack-plugin/node_modules/picomatch": {
@@ -26201,13 +26578,13 @@
}
},
"node_modules/ts-patch/node_modules/isexe": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
- "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
+ "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/ts-patch/node_modules/supports-color": {
@@ -26757,9 +27134,9 @@
}
},
"node_modules/vite/node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz",
- "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.58.0.tgz",
+ "integrity": "sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==",
"cpu": [
"arm"
],
@@ -26771,9 +27148,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-android-arm64": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz",
- "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.58.0.tgz",
+ "integrity": "sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==",
"cpu": [
"arm64"
],
@@ -26785,9 +27162,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz",
- "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.58.0.tgz",
+ "integrity": "sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==",
"cpu": [
"arm64"
],
@@ -26799,9 +27176,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz",
- "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.58.0.tgz",
+ "integrity": "sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==",
"cpu": [
"x64"
],
@@ -26813,9 +27190,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz",
- "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.58.0.tgz",
+ "integrity": "sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==",
"cpu": [
"arm64"
],
@@ -26827,9 +27204,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz",
- "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.58.0.tgz",
+ "integrity": "sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==",
"cpu": [
"x64"
],
@@ -26841,9 +27218,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz",
- "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.58.0.tgz",
+ "integrity": "sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==",
"cpu": [
"arm"
],
@@ -26855,9 +27232,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz",
- "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.58.0.tgz",
+ "integrity": "sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==",
"cpu": [
"arm"
],
@@ -26869,9 +27246,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz",
- "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.58.0.tgz",
+ "integrity": "sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==",
"cpu": [
"arm64"
],
@@ -26883,9 +27260,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz",
- "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.58.0.tgz",
+ "integrity": "sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==",
"cpu": [
"arm64"
],
@@ -26897,9 +27274,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz",
- "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.58.0.tgz",
+ "integrity": "sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==",
"cpu": [
"riscv64"
],
@@ -26911,9 +27288,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz",
- "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.58.0.tgz",
+ "integrity": "sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==",
"cpu": [
"s390x"
],
@@ -26925,9 +27302,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz",
- "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.58.0.tgz",
+ "integrity": "sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==",
"cpu": [
"x64"
],
@@ -26939,9 +27316,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz",
- "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.58.0.tgz",
+ "integrity": "sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==",
"cpu": [
"x64"
],
@@ -26953,9 +27330,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz",
- "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.58.0.tgz",
+ "integrity": "sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==",
"cpu": [
"arm64"
],
@@ -26967,9 +27344,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz",
- "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.58.0.tgz",
+ "integrity": "sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==",
"cpu": [
"ia32"
],
@@ -26981,9 +27358,9 @@
]
},
"node_modules/vite/node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz",
- "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.58.0.tgz",
+ "integrity": "sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==",
"cpu": [
"x64"
],
@@ -27024,9 +27401,9 @@
}
},
"node_modules/vite/node_modules/rollup": {
- "version": "4.54.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz",
- "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==",
+ "version": "4.58.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.58.0.tgz",
+ "integrity": "sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -27040,28 +27417,31 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.54.0",
- "@rollup/rollup-android-arm64": "4.54.0",
- "@rollup/rollup-darwin-arm64": "4.54.0",
- "@rollup/rollup-darwin-x64": "4.54.0",
- "@rollup/rollup-freebsd-arm64": "4.54.0",
- "@rollup/rollup-freebsd-x64": "4.54.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.54.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.54.0",
- "@rollup/rollup-linux-arm64-gnu": "4.54.0",
- "@rollup/rollup-linux-arm64-musl": "4.54.0",
- "@rollup/rollup-linux-loong64-gnu": "4.54.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.54.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.54.0",
- "@rollup/rollup-linux-riscv64-musl": "4.54.0",
- "@rollup/rollup-linux-s390x-gnu": "4.54.0",
- "@rollup/rollup-linux-x64-gnu": "4.54.0",
- "@rollup/rollup-linux-x64-musl": "4.54.0",
- "@rollup/rollup-openharmony-arm64": "4.54.0",
- "@rollup/rollup-win32-arm64-msvc": "4.54.0",
- "@rollup/rollup-win32-ia32-msvc": "4.54.0",
- "@rollup/rollup-win32-x64-gnu": "4.54.0",
- "@rollup/rollup-win32-x64-msvc": "4.54.0",
+ "@rollup/rollup-android-arm-eabi": "4.58.0",
+ "@rollup/rollup-android-arm64": "4.58.0",
+ "@rollup/rollup-darwin-arm64": "4.58.0",
+ "@rollup/rollup-darwin-x64": "4.58.0",
+ "@rollup/rollup-freebsd-arm64": "4.58.0",
+ "@rollup/rollup-freebsd-x64": "4.58.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.58.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.58.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.58.0",
+ "@rollup/rollup-linux-arm64-musl": "4.58.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.58.0",
+ "@rollup/rollup-linux-loong64-musl": "4.58.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.58.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.58.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.58.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.58.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.58.0",
+ "@rollup/rollup-linux-x64-gnu": "4.58.0",
+ "@rollup/rollup-linux-x64-musl": "4.58.0",
+ "@rollup/rollup-openbsd-x64": "4.58.0",
+ "@rollup/rollup-openharmony-arm64": "4.58.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.58.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.58.0",
+ "@rollup/rollup-win32-x64-gnu": "4.58.0",
+ "@rollup/rollup-win32-x64-msvc": "4.58.0",
"fsevents": "~2.3.2"
}
},
@@ -27232,9 +27612,9 @@
"license": "BSD-2-Clause"
},
"node_modules/webpack": {
- "version": "5.104.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz",
- "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
+ "version": "5.105.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz",
+ "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -27248,7 +27628,7 @@
"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",
@@ -27261,7 +27641,7 @@
"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"
},
"bin": {
@@ -27501,12 +27881,20 @@
}
},
"node_modules/webpack-dev-middleware/node_modules/memfs": {
- "version": "4.51.1",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.1.tgz",
- "integrity": "sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==",
+ "version": "4.56.10",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz",
+ "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
+ "@jsonjoy.com/fs-core": "4.56.10",
+ "@jsonjoy.com/fs-fsa": "4.56.10",
+ "@jsonjoy.com/fs-node": "4.56.10",
+ "@jsonjoy.com/fs-node-builtins": "4.56.10",
+ "@jsonjoy.com/fs-node-to-fsa": "4.56.10",
+ "@jsonjoy.com/fs-node-utils": "4.56.10",
+ "@jsonjoy.com/fs-print": "4.56.10",
+ "@jsonjoy.com/fs-snapshot": "4.56.10",
"@jsonjoy.com/json-pack": "^1.11.0",
"@jsonjoy.com/util": "^1.9.0",
"glob-to-regex.js": "^1.0.1",
@@ -27517,6 +27905,9 @@
"funding": {
"type": "github",
"url": "https://github.com/sponsors/streamich"
+ },
+ "peerDependencies": {
+ "tslib": "2"
}
},
"node_modules/webpack-dev-server": {
@@ -27640,16 +28031,6 @@
}
}
},
- "node_modules/webpack-dev-server/node_modules/ipaddr.js": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz",
- "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/webpack-dev-server/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -27702,9 +28083,9 @@
}
},
"node_modules/webpack-sources": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
- "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz",
+ "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -27765,9 +28146,9 @@
}
},
"node_modules/webpack/node_modules/watchpack": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz",
- "integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
+ "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
"dev": true,
"license": "MIT",
"dependencies": {
diff --git a/packages/widgets/.eslintrc.json b/packages/widgets/.eslintrc.json
new file mode 100644
index 0000000..53c06c8
--- /dev/null
+++ b/packages/widgets/.eslintrc.json
@@ -0,0 +1,18 @@
+{
+ "extends": ["../../.eslintrc.json"],
+ "ignorePatterns": ["!**/*", "node_modules/**/*"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/widgets/README.md b/packages/widgets/README.md
new file mode 100644
index 0000000..2e1abe0
--- /dev/null
+++ b/packages/widgets/README.md
@@ -0,0 +1,93 @@
+# @nativescript/widgets
+
+This package provides a small DSL and runtime helpers to build App Widgets for NativeScript apps on both Android and iOS. It exposes composable layout primitives (VStack/HStack/Grid/Spacer), basic views (Text, Image, Button, Chronometer, Clock, ProgressBar, List, Flipper, Stack) and helper functions to update widgets from your app.
+
+The Android implementation is built on top of Android RemoteViews; because of that RemoteViews' runtime restrictions apply (see Limitations below). The `ns widget android` command creates an Android AppWidget provider and metadata XML. For iOS widget guidance see:
+
+- https://docs.nativescript.org/guide/widgets-ios
+
+The NativeScript CLI provides `ns widget android` to create Android provider files; combined with `@nativescript/widgets` to handle widgets.
+
+## Quick install
+
+```bash
+npm install @nativescript/widgets
+```
+
+## Basic usage
+
+Register a widget listener and update widgets from your app code. The sample below is from the demo app and shows common patterns.
+
+```ts
+import { registerWidgetListener, Root, VStack, HStack, Text, Chronometer, Grid, Spacer, updateWidget } from '@nativescript/widgets';
+
+registerWidgetListener('org.nativescript.plugindemo.PluginDemoWidgetProvider', {
+ onUpdate: (event) => {
+ const targetTime = Date.now() + 3600_000; // 1 hour
+ const root = Root(() =>
+ VStack(() => [
+ Text('⏱️ Countdown').setTextSize(18),
+ Spacer(12),
+ Chronometer({ targetTime, countDown: true, started: true }).setTextSize(32),
+ Spacer(8),
+ Text('until deadline').setTextSize(12),
+ ]),
+ ).setBackgroundColor('#ffffff').setPadding(16);
+
+ for (const id of event.appWidgetIds) updateWidget(event.provider, root, id);
+ }
+});
+```
+
+## Grid example (quick actions)
+
+```ts
+function gridWidget(provider: string, ids: number[]) {
+ const actions = [
+ { icon: '📞', label: 'Call', color: '#3498db', bg: '#ebf5fb' },
+ { icon: '💬', label: 'Message', color: '#9b59b6', bg: '#f5eef8' },
+ { icon: '📧', label: 'Email', color: '#e74c3c', bg: '#fdedec' },
+ { icon: '📅', label: 'Calendar', color: '#27ae60', bg: '#eafaf1' },
+ { icon: '📷', label: 'Camera', color: '#f39c12', bg: '#fef9e7' },
+ { icon: '🎵', label: 'Music', color: '#e91e63', bg: '#fce4ec' },
+ ];
+
+ const root = Root(() =>
+ VStack(() => [
+ HStack(() => [Text('⚡ Quick Actions').setTextSize(18), Spacer(), Text('6 apps').setTextSize(12)]),
+ Spacer(16),
+ Grid(3, 12, () =>
+ actions.map((action) =>
+ VStack(() => [
+ Text(action.icon).setTextSize(28),
+ Spacer(6),
+ Text(action.label).setColor(action.color).setTextSize(11),
+ ]).setBackgroundColor(action.bg).setPadding(12),
+ ),
+ ),
+ ]),
+ ).setBackgroundColor('#ffffff').setPadding(16);
+
+ for (const id of ids) updateWidget(provider, root, id);
+}
+```
+
+## API notes
+
+- Use `Chronometer({ targetTime: Date.now() + ms })` when you have a Unix timestamp — the library converts it to the required `SystemClock.elapsedRealtime()` base for RemoteViews.
+- `ProgressBar` supports `flex` and `fullWidth` layouts — use `flex` inside horizontal stacks to share space, or `fullWidth` to make the bar match parent width.
+- `Spacer()` without args expands (weighted); `Spacer(8)` creates a fixed 8dp gap.
+
+## Limitations and implementation details
+
+- Android RemoteViews cannot modify LayoutParams for arbitrary views at runtime. To emulate responsive grids we generate rows of weighted LinearLayouts (each child gets `layout_width=0dp` and `layout_weight=1`) — similar to how Jetpack Glance implements weighted rows.
+- Because widget provider metadata (the `appwidget-provider` XML) controls default size and resize behavior, scaffold with `ns widget android` to ensure the correct `minWidth`/`minHeight` and `resizeMode` values.
+
+
+## Contributing
+
+- The demo app `apps/demo/src/app.ts` contains example widgets (countdown, clock, progress, list, slideshow, grid, stack, dashboard). Use them as a starting point when building your widgets.
+
+## License
+
+Apache License Version 2.0
diff --git a/packages/widgets/index.android.ts b/packages/widgets/index.android.ts
new file mode 100644
index 0000000..d79ceb9
--- /dev/null
+++ b/packages/widgets/index.android.ts
@@ -0,0 +1,1207 @@
+import { Utils, CoreTypes, Color, Length, ImageSource } from '@nativescript/core';
+import { layout } from '@nativescript/core/utils';
+
+const native_ = Symbol('[[_native_]]');
+const ACTION_CLICK = 'org.nativescript.widgets.ACTION_CLICK';
+const ACTION_CHECK = 'org.nativescript.widgets.ACTION_CHECK';
+export class WidgetManager {
+ [native_]: org.nativescript.widgets.AppWidgetManager;
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(manager: org.nativescript.widgets.AppWidgetManager) {
+ const ret = new WidgetManager();
+ ret[native_] = manager;
+ return ret;
+ }
+}
+
+export class ViewsManager {
+ [native_]: org.nativescript.widgets.RemoteViewsManager;
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(manager: org.nativescript.widgets.RemoteViewsManager) {
+ const ret = new ViewsManager();
+ ret[native_] = manager;
+ return ret;
+ }
+}
+
+export class PlatformWidgetManager {
+ [native_]: android.appwidget.AppWidgetManager;
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(nativeManager: android.appwidget.AppWidgetManager) {
+ const ret = new PlatformWidgetManager();
+ ret[native_] = nativeManager;
+ return ret;
+ }
+}
+
+interface IWidgetListener {
+ onEnabled?: (provider: string) => void;
+ onUpdate?: (event: { provider: string; appWidgetIds: number[]; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+ onUpdateAsync?: (event: { provider: string; appWidgetIds: number[]; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+ onDeleted?: (event: { provider: string; appWidgetIds: number[] }) => void;
+ onDisabled?: (provider: string) => void;
+ onClick?: (event: { action: string; extras: Record; provider: string }) => void;
+ onCheck?: (event: { action: string; extras: Record; provider: string }) => void;
+ onResize?: (event: { provider: string; appWidgetId: number; minWidth: number; minHeight: number; maxWidth: number; maxHeight: number; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+}
+
+const enum AndroidUnits {
+ COMPLEX_UNIT_PX = 0, //https://developer.android.com/reference/android/util/TypedValue#COMPLEX_UNIT_PX
+ COMPLEX_UNIT_DIP = 1, // https://developer.android.com/reference/android/util/TypedValue#COMPLEX_UNIT_DIP
+}
+
+export class PlatformRemoteViews {
+ [native_]: android.widget.RemoteViews;
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(views: android.widget.RemoteViews) {
+ const ret = new PlatformRemoteViews();
+ ret[native_] = views;
+ return ret;
+ }
+}
+
+const toUnitValue = (value: CoreTypes.FixedLengthType) => {
+ switch (typeof value) {
+ case 'string':
+ const parsed = Length.parse(value);
+ if (typeof parsed === 'string') {
+ return null;
+ }
+ return toUnitValue(parsed);
+ case 'number':
+ return {
+ value,
+ unit: AndroidUnits.COMPLEX_UNIT_DIP,
+ };
+ case 'object': {
+ switch (value?.unit) {
+ case 'dip':
+ return {
+ value: value.value,
+ unit: AndroidUnits.COMPLEX_UNIT_DIP,
+ };
+ case 'px':
+ return {
+ value: value.value,
+ unit: AndroidUnits.COMPLEX_UNIT_PX,
+ };
+ default:
+ return null;
+ }
+ }
+ }
+};
+
+type BundleValue = string | number | boolean | string[] | number[] | Record;
+
+const toBundle = (extras: Record): android.os.Bundle => {
+ const bundle = new android.os.Bundle();
+ for (const key in extras) {
+ if (!Object.prototype.hasOwnProperty.call(extras, key)) continue;
+ const value = extras[key];
+ switch (typeof value) {
+ case 'string':
+ bundle.putString(key, value);
+ break;
+ case 'number':
+ if (Number.isInteger(value)) bundle.putInt(key, value);
+ else bundle.putDouble(key, value);
+ break;
+ case 'boolean':
+ bundle.putBoolean(key, value);
+ break;
+ case 'object': {
+ if (Array.isArray(value)) {
+ if (value.length === 0) {
+ bundle.putStringArray(key, []);
+ } else if (value.every((item) => typeof item === 'string')) {
+ bundle.putStringArray(key, value as never);
+ } else if (value.every((item) => typeof item === 'number')) {
+ bundle.putIntArray(key, value as never);
+ }
+ } else if (value) {
+ const obj = toBundle(value);
+ bundle.putBundle(key, obj);
+ }
+ }
+ }
+ }
+ return bundle;
+};
+
+const fromBundle = (bundle: android.os.Bundle): Record => {
+ const result: Record = {};
+ if (!bundle) return result;
+ return Utils.dataDeserialize(bundle);
+};
+
+const toPxValue = (value: CoreTypes.FixedLengthType) => {
+ switch (typeof value) {
+ case 'string':
+ const parsed = Length.parse(value);
+ if (typeof parsed === 'string') {
+ return -1;
+ }
+ return toPxValue(parsed);
+ case 'number':
+ return layout.toDevicePixels(value);
+ case 'object': {
+ switch (value?.unit) {
+ case 'dip':
+ return layout.toDevicePixels(value.value);
+ case 'px':
+ return value.value;
+ default:
+ return -1;
+ }
+ }
+ }
+};
+
+export class RemoteViews {
+ protected [native_]: org.nativescript.widgets.RemoteViews;
+
+ get native() {
+ return this[native_];
+ }
+
+ setPadding(value: CoreTypes.FixedLengthType) {
+ let left = -1,
+ top = -1,
+ right = -1,
+ bottom = -1;
+
+ switch (arguments.length) {
+ case 1:
+ left = top = right = bottom = toPxValue(value);
+ break;
+ case 2:
+ left = right = toPxValue(arguments[0]);
+ top = bottom = toPxValue(arguments[1]);
+ break;
+ case 3:
+ left = right = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ bottom = toPxValue(arguments[2]);
+ break;
+ case 4:
+ left = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ right = toPxValue(arguments[2]);
+ bottom = toPxValue(arguments[3]);
+ break;
+ }
+ if (left >= -1 && top >= -1 && right >= -1 && bottom >= -1) {
+ this.native.setPadding(left, top, right, bottom);
+ }
+ return this;
+ }
+
+ setMargin(value: CoreTypes.FixedLengthType) {
+ let left = 0,
+ top = 0,
+ right = 0,
+ bottom = 0;
+
+ switch (arguments.length) {
+ case 1:
+ left = top = right = bottom = toPxValue(value);
+ break;
+ case 2:
+ left = right = toPxValue(arguments[0]);
+ top = bottom = toPxValue(arguments[1]);
+ break;
+ case 3:
+ left = right = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ bottom = toPxValue(arguments[2]);
+ break;
+ case 4:
+ left = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ right = toPxValue(arguments[2]);
+ bottom = toPxValue(arguments[3]);
+ break;
+ }
+ this.native.setMargin(left, top, right, bottom);
+ return this;
+ }
+
+ setBackgroundColor(color: Color | string) {
+ if (typeof color === 'string') {
+ this.native.setBackgroundColor(new Color(color).android);
+ } else {
+ if (color && color instanceof Color) {
+ this.native.setBackgroundColor(color.android);
+ }
+ }
+ return this;
+ }
+
+ setWidth(value: CoreTypes.FixedLengthType) {
+ const unitValue = toUnitValue(value);
+ if (unitValue) {
+ this.native.setWidth(unitValue.value, unitValue.unit);
+ }
+ return this;
+ }
+
+ setHeight(value: CoreTypes.FixedLengthType) {
+ const unitValue = toUnitValue(value);
+ if (unitValue) {
+ this.native.setHeight(unitValue.value, unitValue.unit);
+ }
+ return this;
+ }
+
+ setSize(width: CoreTypes.FixedLengthType, height: CoreTypes.FixedLengthType) {
+ const widthUnitValue = toUnitValue(width);
+ const heightUnitValue = toUnitValue(height);
+ if (widthUnitValue && heightUnitValue) {
+ this.native.setSize(widthUnitValue.value, widthUnitValue.unit, heightUnitValue.value, heightUnitValue.unit);
+ }
+ return this;
+ }
+
+ setPendingIntentTemplate(intent: android.app.PendingIntent): this {
+ this.native.setPendingIntentTemplate(intent);
+ return this;
+ }
+
+ setOnClickFillInIntent(intent: android.content.Intent): this {
+ this.native.setOnClickFillInIntent(intent);
+ return this;
+ }
+
+ onClick(action: string, extras?: Record): this {
+ this.native.onClick(action, extras ? toBundle(extras) : null);
+ return this;
+ }
+
+ onCheck(action: string, extras?: Record): this {
+ this.native.onCheck(action, extras ? toBundle(extras) : null);
+ return this;
+ }
+
+ onItemClick(action: string, extras?: Record): this {
+ this.native.onItemClick(action, extras ? toBundle(extras) : null);
+ return this;
+ }
+
+ toPlatformViews(packageName?: string): PlatformRemoteViews {
+ return PlatformRemoteViews.fromNative(this[native_].build(packageName ?? Utils.android.getApplicationContext().getPackageName()));
+ }
+}
+
+export type ViewBuilder = () => RemoteViews | RemoteViews[];
+
+export function ForEach(items: T[], id?: keyof T | ((item: T) => string | number), content?: (item: T, index: number) => RemoteViews): RemoteViews[] {
+ if (!content) return [];
+
+ return items.map((item, index) => content(item, index));
+}
+
+export function Root(content: ViewBuilder) {
+ const view = new RootLayoutView();
+ if (content) {
+ const result = content();
+
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ if (child instanceof SpacerView) {
+ child.setOrientation('vertical');
+ }
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function VStack(content?: ViewBuilder) {
+ const view = new VLinearLayoutView();
+ if (content) {
+ const result = content();
+
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ if (child instanceof SpacerView) {
+ child.setOrientation('vertical');
+ }
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function HStack(content?: ViewBuilder) {
+ const view = new HLinearLayoutView();
+ if (content) {
+ const result = content();
+
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ if (child instanceof SpacerView) {
+ child.setOrientation('horizontal');
+ }
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function ZStack(content?: ViewBuilder) {
+ const view = new FrameLayout();
+ if (content) {
+ const result = content();
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function Flipper(items: T[], interval?: number, content?: (item: T, index: number) => RemoteViews): RemoteViews {
+ const flipper = new AdapterViewFlipper();
+
+ if (interval) {
+ // flipInterval is baked into the layout XML, we just enable autoStart
+ flipper.setAutoStart(true);
+ }
+
+ if (content) {
+ for (let i = 0; i < items.length; i++) {
+ flipper.addItem(content(items[i], i));
+ }
+ }
+
+ return flipper;
+}
+
+export function Chronometer(options?: { base?: number; targetTime?: number; format?: string; countDown?: boolean; started?: boolean; color?: Color | string }) {
+ const view = new ChronometerView();
+ if (options) {
+ // targetTime uses Unix timestamp (Date.now() style), base uses elapsedRealtime
+ if (options.targetTime != null) view.setTargetTime(options.targetTime);
+ else if (options.base != null) view.setBase(options.base);
+ if (options.format) view.setFormat(options.format);
+ if (options.countDown != null) view.setCountDown(options.countDown);
+ if (options.color) view.setColor(options.color);
+ if (options.started) view.start();
+ }
+ return view;
+}
+
+export function Clock(options?: { format12Hour?: string; format24Hour?: string; timeZone?: string; color?: Color | string }) {
+ const view = new TextClockView();
+ if (options) {
+ if (options.format12Hour) view.setFormat12Hour(options.format12Hour);
+ if (options.format24Hour) view.setFormat24Hour(options.format24Hour);
+ if (options.timeZone) view.setTimeZone(options.timeZone);
+ if (options.color) view.setColor(options.color);
+ }
+ return view;
+}
+
+export function List(count: number, content: (index: number) => RemoteViews, emptyView?: () => RemoteViews): RemoteViews {
+ const view = new ListView();
+ for (let i = 0; i < count; i++) {
+ const item = content(i);
+ view.addItem(item);
+ }
+ if (emptyView) {
+ view.setEmptyView(emptyView());
+ }
+ return view;
+}
+
+export function ProgressBar(options?: { progress?: number; max?: number; indeterminate?: boolean; flex?: boolean; fullWidth?: boolean }) {
+ const view = new ProgressBarView();
+ if (options) {
+ const indeterminate = options.indeterminate ?? (options.progress == null && options.max == null);
+ const max = options.max ?? 100;
+ const progress = options.progress ?? 0;
+ view.setProgressBar(max, progress, indeterminate);
+ if (options.flex) {
+ view.setFlex(true);
+ }
+ if (options.fullWidth) {
+ view.setFullWidth(true);
+ }
+ }
+ return view;
+}
+
+export function RelativeLayout(content?: ViewBuilder) {
+ const view = new RelativeLayoutView();
+ if (content) {
+ const result = content();
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export class SpacerView extends RemoteViews {
+ private orientation_: 'horizontal' | 'vertical' = 'horizontal';
+ private size_: CoreTypes.FixedLengthType | undefined;
+
+ constructor(sizeOrOrientation?: CoreTypes.FixedLengthType | 'horizontal' | 'vertical') {
+ super();
+ // Determine if argument is orientation or size
+ if (sizeOrOrientation === 'horizontal' || sizeOrOrientation === 'vertical') {
+ this.orientation_ = sizeOrOrientation;
+ } else if (sizeOrOrientation != null) {
+ this.size_ = sizeOrOrientation;
+ }
+ this.updateNative();
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.HSpacer | org.nativescript.widgets.RemoteViews.VSpacer;
+ }
+
+ private updateNative() {
+ this[native_] = this.orientation_ === 'horizontal' ? new org.nativescript.widgets.RemoteViews.HSpacer() : new org.nativescript.widgets.RemoteViews.VSpacer();
+
+ // Apply fixed size if provided - use fixed layout (no weight)
+ if (this.size_ != null) {
+ this.native.setFixed(true);
+ const unitValue = toUnitValue(this.size_);
+ if (unitValue) {
+ if (this.orientation_ === 'horizontal') {
+ this.native.setWidth(unitValue.value, unitValue.unit);
+ } else {
+ this.native.setHeight(unitValue.value, unitValue.unit);
+ }
+ }
+ }
+ }
+
+ setOrientation(orientation: 'horizontal' | 'vertical') {
+ if (this.orientation_ !== orientation) {
+ this.orientation_ = orientation;
+ this.updateNative();
+ }
+ return this;
+ }
+
+ setSize(size: CoreTypes.FixedLengthType) {
+ this.size_ = size;
+ this.native.setFixed(true);
+ const unitValue = toUnitValue(size);
+ if (unitValue) {
+ if (this.orientation_ === 'horizontal') {
+ this.native.setWidth(unitValue.value, unitValue.unit);
+ } else {
+ this.native.setHeight(unitValue.value, unitValue.unit);
+ }
+ }
+ return this;
+ }
+}
+
+export function Spacer(sizeOrOrientation?: CoreTypes.FixedLengthType | 'horizontal' | 'vertical') {
+ return new SpacerView(sizeOrOrientation);
+}
+
+export function Stack(count?: number, content?: (index: number) => RemoteViews) {
+ const view = new StackView();
+ if (count != null && content) {
+ for (let i = 0; i < count; i++) {
+ view.addItem(content(i));
+ }
+ }
+ return view;
+}
+
+export function Text(text: string) {
+ const ret = new TextView();
+ if (text) {
+ ret.native.setText(text);
+ }
+ return ret;
+}
+
+export function Button(content: string | number | ImageSource, action?: () => void) {
+ if (typeof content === 'string') {
+ const button = new ButtonView();
+ button.native.setText(content);
+ return button;
+ }
+
+ const button = new ImageButton();
+ if (typeof content === 'number') {
+ button.native.setImageResource(content);
+ } else if (typeof content === 'string') {
+ button.native.setImageURI(android.net.Uri.parse(content));
+ } else {
+ button.native.setImageBitmap(content.android);
+ }
+ return button;
+}
+
+export function Image(source: ImageSource | number | string) {
+ const ret = new ImageView();
+ if (typeof source === 'number') {
+ ret.native.setImageResource(source);
+ } else if (typeof source === 'string') {
+ if (source.startsWith('http') || source.startsWith('https')) {
+ ret.native.setImageUrl(source);
+ } else {
+ ret.native.setImageURI(android.net.Uri.parse(source));
+ }
+ } else if (source instanceof ImageSource) {
+ ret.native.setImageBitmap(source.android);
+ }
+ return ret;
+}
+
+export function Grid(columns: number, spacing?: number, content?: ViewBuilder): RemoteViews {
+ // GridLayout doesn't work well with RemoteViews - simulate with nested layouts
+ const container = new VLinearLayoutView();
+
+ if (content) {
+ const children = content();
+ const views = Array.isArray(children) ? children.flat() : [children];
+ const rows = Math.ceil(views.length / columns);
+ const spacingPx = spacing ?? 0;
+
+ for (let row = 0; row < rows; row++) {
+ const rowLayout = new HLinearLayoutView();
+
+ for (let col = 0; col < columns; col++) {
+ const index = row * columns + col;
+
+ // Add spacing between items
+ if (col > 0 && spacingPx > 0) {
+ rowLayout.addView(Spacer(spacingPx));
+ }
+
+ if (index < views.length) {
+ const view = views[index];
+ // Wrap in a flex container so items share space equally
+ const wrapper = new VLinearLayoutView();
+ wrapper.setFlex(true);
+ wrapper.native.setInt('setGravity', 17); // center
+ wrapper.addView(view);
+ rowLayout.addView(wrapper);
+ } else {
+ // Empty placeholder to maintain grid structure
+ const placeholder = new VLinearLayoutView();
+ placeholder.setFlex(true);
+ rowLayout.addView(placeholder);
+ }
+ }
+
+ // Add spacing between rows
+ if (row > 0 && spacingPx > 0) {
+ container.addView(Spacer(spacingPx));
+ }
+ container.addView(rowLayout);
+ }
+ }
+
+ return container;
+}
+
+export function Switch(checked: boolean) {
+ const ret = new SwitchView();
+ ret.setChecked(checked);
+ return ret;
+}
+
+export function CheckBox(checked: boolean) {
+ const ret = new CheckBoxView();
+ ret.setChecked(checked);
+ return ret;
+}
+
+export function RadioButton(checked: boolean) {
+ const ret = new RadioButtonView();
+ ret.setChecked(checked);
+ return ret;
+}
+
+export class RootLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.RootLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.RootLayout;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+}
+
+export class AdapterViewFlipper extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.AdapterViewFlipper(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.AdapterViewFlipper;
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setAutoStart(autoStart: boolean): this {
+ this.native.setAutoStart(autoStart);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class ButtonView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.Button(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.Button;
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class ChronometerView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.Chronometer(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.Chronometer;
+ }
+
+ setBase(base: number): this {
+ this.native.setBase(base);
+ return this;
+ }
+
+ /**
+ * Set target time using Unix timestamp (Date.now() style).
+ * Automatically converts to SystemClock.elapsedRealtime() base.
+ * For countdown: pass future timestamp (Date.now() + milliseconds)
+ * For count up: pass past timestamp
+ */
+ setTargetTime(targetTime: number): this {
+ this.native.setTargetTime(targetTime);
+ return this;
+ }
+
+ setFormat(format: string): this {
+ this.native.setFormat(format);
+ return this;
+ }
+
+ setCountDown(countDown: boolean): this {
+ this.native.setCountDown(countDown);
+ return this;
+ }
+
+ start(): this {
+ this.native.start();
+ return this;
+ }
+
+ stop(): this {
+ this.native.stop();
+ return this;
+ }
+
+ setColor(color: Color | string): this {
+ if (typeof color === 'string') {
+ this.native.setTextColor(new Color(color).android);
+ } else if (color instanceof Color) {
+ this.native.setTextColor(color.android);
+ }
+ return this;
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class FrameLayout extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.FrameLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.FrameLayout;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ return this;
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ return this;
+ }
+}
+
+export class GridLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.GridLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.GridLayout;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+}
+
+export class GridView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.GridView(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.GridView;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class ImageButton extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.ImageButton(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.ImageButton;
+ }
+
+ resolveRemoteResources() {
+ this.native.resolveRemoteResources();
+ }
+}
+
+export class ImageView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.ImageView(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.ImageView;
+ }
+
+ resolveRemoteResources() {
+ this.native.resolveRemoteResources();
+ }
+}
+
+export class HLinearLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.HLinearLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.HLinearLayout;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ setFlex(value: boolean): this {
+ this.native.setFlex(value);
+ return this;
+ }
+}
+
+export class VLinearLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.LinearLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.LinearLayout;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ setFlex(value: boolean): this {
+ this.native.setFlex(value);
+ return this;
+ }
+}
+
+export class ListView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.ListView(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.ListView;
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class ProgressBarView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.ProgressBar(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.ProgressBar;
+ }
+
+ setProgressBar(max: number, progress: number, indeterminate: boolean): this {
+ this.native.setProgressBar(max, progress, indeterminate);
+ return this;
+ }
+
+ setFlex(value: boolean): this {
+ this.native.setFlex(value);
+ return this;
+ }
+
+ setFullWidth(value: boolean): this {
+ this.native.setFullWidth(value);
+ return this;
+ }
+}
+
+export class RelativeLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.RelativeLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.RelativeLayout;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+}
+
+export class StackView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.StackView(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.StackView;
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class TextView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.TextView(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.TextView;
+ }
+
+ setColor(color: Color | string) {
+ if (typeof color === 'string') {
+ this.native.setTextColor(new Color(color).android);
+ } else {
+ if (color && color instanceof Color) {
+ this.native.setTextColor(color.android);
+ }
+ }
+ return this;
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class TextClockView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.TextClock(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.TextClock;
+ }
+
+ setFormat12Hour(format: string): this {
+ // TextClock.setFormat12Hour is not remotable in RemoteViews
+ return this;
+ }
+
+ setFormat24Hour(format: string): this {
+ // TextClock.setFormat24Hour is not remotable in RemoteViews
+ return this;
+ }
+
+ setTimeZone(timeZone: string): this {
+ // TextClock.setTimeZone is not remotable in RemoteViews
+ return this;
+ }
+
+ setColor(color: Color | string): this {
+ if (typeof color === 'string') {
+ this.native.setTextColor(new Color(color).android);
+ } else if (color instanceof Color) {
+ this.native.setTextColor(color.android);
+ }
+ return this;
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class CheckBoxView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.CheckBox(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.CheckBox;
+ }
+
+ setChecked(checked: boolean): this {
+ this.native.setChecked(checked);
+ return this;
+ }
+}
+
+export class RadioButtonView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.RadioButton(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.RadioButton;
+ }
+
+ setChecked(checked: boolean): this {
+ this.native.setChecked(checked);
+ return this;
+ }
+}
+
+export class SwitchView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ this[native_] = new org.nativescript.widgets.RemoteViews.Switch(id ?? null);
+ }
+
+ get native() {
+ return this[native_] as org.nativescript.widgets.RemoteViews.Switch;
+ }
+
+ setChecked(checked: boolean): this {
+ this.native.setChecked(checked);
+ return this;
+ }
+}
+
+function toJSArray(array: androidNative.Array) {
+ const jsArray: number[] = [];
+ for (let i = 0; i < array.length; i++) {
+ jsArray.push(array[i]);
+ }
+ return jsArray;
+}
+
+let mgn: WidgetManager;
+export function registerWidgetListener(provider: string, listener: IWidgetListener) {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.register(
+ provider,
+ new org.nativescript.widgets.AppWidgetManager.WidgetListener({
+ onEnabled(provider) {
+ if (listener.onEnabled) {
+ listener.onEnabled(provider);
+ }
+ },
+ onUpdateAsync(context, provider, appWidgetIds, manager, widgetManager) {
+ if (!manager) {
+ mgn = WidgetManager.fromNative(org.nativescript.widgets.AppWidgetManager.INSTANCE);
+ }
+ if (listener.onUpdateAsync) {
+ listener.onUpdateAsync({ provider, appWidgetIds: toJSArray(appWidgetIds), manager: mgn, widgetManager: PlatformWidgetManager.fromNative(widgetManager) });
+ }
+ },
+ onUpdate(context, provider, appWidgetIds, manager, widgetManager) {
+ if (listener.onUpdate) {
+ listener.onUpdate({ provider, appWidgetIds: toJSArray(appWidgetIds), manager: mgn, widgetManager: PlatformWidgetManager.fromNative(widgetManager) });
+ }
+ },
+ onDeleted(provider, appWidgetIds) {
+ if (listener.onDeleted) {
+ listener.onDeleted({ provider, appWidgetIds: toJSArray(appWidgetIds) });
+ }
+ },
+ onDisabled(provider) {
+ if (listener.onDisabled) {
+ listener.onDisabled(provider);
+ }
+ },
+ onAction(context, provider, action, extras) {
+ if (action === ACTION_CLICK && listener.onClick) {
+ listener.onClick({ action, extras: extras ? fromBundle(extras) : {}, provider });
+ }
+ if (action === ACTION_CHECK && listener.onCheck) {
+ listener.onCheck({ action, extras: extras ? fromBundle(extras) : {}, provider });
+ }
+ },
+ onOptionsChanged(context, provider, appWidgetId, newOptions, manager, widgetManager) {
+ if (listener.onResize) {
+ const minWidth = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, 0);
+ const minHeight = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, 0);
+ const maxWidth = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, 0);
+ const maxHeight = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, 0);
+ listener.onResize({
+ provider,
+ appWidgetId,
+ minWidth,
+ minHeight,
+ maxWidth,
+ maxHeight,
+ manager: mgn,
+ widgetManager: PlatformWidgetManager.fromNative(widgetManager),
+ });
+ }
+ },
+ }),
+ );
+}
+
+export function unregisterWidgetListener(provider: string) {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.unregister(provider);
+}
+
+export function updateWidget(provider: string, root: RemoteViews, widgetIds?: number | number[], context?: any) {
+ const ctx = context ?? Utils.android.getApplicationContext();
+ if (widgetIds == null) {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.updateAppWidget(ctx, provider, root.native);
+ } else if (Array.isArray(widgetIds)) {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.updateAppWidget(ctx, provider, widgetIds, root.native);
+ } else {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.updateAppWidget(ctx, provider, widgetIds, root.native);
+ }
+}
diff --git a/packages/widgets/index.d.ts b/packages/widgets/index.d.ts
new file mode 100644
index 0000000..1f4428a
--- /dev/null
+++ b/packages/widgets/index.d.ts
@@ -0,0 +1,250 @@
+import { CoreTypes, Color, ImageSource, Switch } from '@nativescript/core';
+
+export class PlatformRemoteViews {
+ readonly native: any;
+}
+
+export class WidgetManager {
+ readonly native: any;
+}
+
+export class PlatformWidgetManager {
+ readonly native: any;
+}
+
+export class RemoteViews {
+ readonly native: any;
+
+ setBackgroundColor(color: Color | string): this;
+
+ setWidth(value: CoreTypes.FixedLengthType): this;
+
+ setHeight(value: CoreTypes.FixedLengthType): this;
+
+ setSize(width: CoreTypes.FixedLengthType, height: CoreTypes.FixedLengthType): this;
+
+ setPendingIntentTemplate(intent: any): this;
+
+ setOnClickFillInIntent(intent: any): this;
+
+ onClick(action: string, extras?: Record): this;
+ onCheck(action: string, extras?: Record): this;
+
+ onItemClick(action: string, extras?: Record): this;
+
+ toPlatformViews(packageName?: string): PlatformRemoteViews;
+
+ setPadding(value: CoreTypes.FixedLengthType): this;
+
+ setPadding(left: CoreTypes.FixedLengthType, top: CoreTypes.FixedLengthType, right: CoreTypes.FixedLengthType, bottom: CoreTypes.FixedLengthType): this;
+
+ setMargin(value: CoreTypes.FixedLengthType): this;
+
+ setMargin(left: CoreTypes.FixedLengthType, top: CoreTypes.FixedLengthType, right: CoreTypes.FixedLengthType, bottom: CoreTypes.FixedLengthType): this;
+}
+
+interface IWidgetListener {
+ onEnabled?: (provider: string) => void;
+ onUpdate?: (event: { provider: string; appWidgetIds: number[]; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+ onUpdateAsync?: (event: { provider: string; appWidgetIds: number[]; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+ onDeleted?: (event: { provider: string; appWidgetIds: number[] }) => void;
+ onDisabled?: (provider: string) => void;
+ onClick?: (event: { action: string; extras: Record; provider: string }) => void;
+ onCheck?: (event: { action: string; extras: Record; provider: string }) => void;
+ onResize?: (event: { provider: string; appWidgetId: number; minWidth: number; minHeight: number; maxWidth: number; maxHeight: number; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+}
+
+export type WidgetListener = IWidgetListener;
+
+export function registerWidgetListener(provider: string, listener: WidgetListener);
+export function unregisterWidgetListener(provider: string);
+export function updateWidget(provider: string, root: RemoteViews, widgetIds?: number | number[], context?: any): void;
+
+export type ViewBuilder = () => RemoteViews | RemoteViews[];
+
+export class ButtonView extends RemoteViews {
+ constructor(id?: string);
+ setTextSize(size: number): this;
+}
+
+export class TextView extends RemoteViews {
+ constructor(id?: string);
+ setColor(color: Color | string): this;
+ setTextSize(size: number): this;
+}
+
+export class ChronometerView extends RemoteViews {
+ constructor(id?: string);
+ setBase(base: number): this;
+ /**
+ * Set target time using Unix timestamp (Date.now() style).
+ * Automatically converts to SystemClock.elapsedRealtime() base.
+ * For countdown: pass future timestamp (Date.now() + milliseconds)
+ * For count up: pass past timestamp
+ */
+ setTargetTime(targetTime: number): this;
+ setFormat(format: string): this;
+ setCountDown(countDown: boolean): this;
+ start(): this;
+ stop(): this;
+ setColor(color: Color | string): this;
+ setTextSize(size: number): this;
+}
+
+export class ProgressBarView extends RemoteViews {
+ constructor(id?: string);
+ setProgress(progress: number): this;
+ setMax(max: number): this;
+ setIndeterminate(indeterminate: boolean): this;
+ setFlex(value: boolean): this;
+ setFullWidth(value: boolean): this;
+}
+
+export class TextClockView extends RemoteViews {
+ constructor(id?: string);
+ setFormat12Hour(format: string): this;
+ setFormat24Hour(format: string): this;
+ setTimeZone(timeZone: string): this;
+ setColor(color: Color | string): this;
+ setTextSize(size: number): this;
+}
+
+export class ViewGroupLike extends RemoteViews {
+ addView(view: RemoteViews): this;
+ removeView(view: RemoteViews): this;
+}
+
+export class FrameLayout extends ViewGroupLike {
+ constructor(id?: string);
+}
+
+export class GridLayout extends ViewGroupLike {
+ constructor(id?: string);
+}
+
+export class LinearLayout extends ViewGroupLike {
+ constructor(id?: string);
+}
+
+export class RelativeLayoutView extends ViewGroupLike {
+ constructor(id?: string);
+}
+
+export class ImageViewLike extends RemoteViews {
+ setImageResource(resourceId: number): this;
+ setImageURI(uri: string): this;
+ setImageBitmap(bitmap: any): this;
+ setImageSource(value: ImageSource): this;
+ resolveRemoteResources();
+}
+
+export class ImageButton extends ImageViewLike {
+ constructor(id?: string);
+}
+
+export class ImageView extends ImageViewLike {
+ constructor(id?: string);
+}
+
+export class AdapterViewFlipper extends RemoteViews {
+ constructor(id?: string);
+ addItem(item: RemoteViews): this;
+ setEmptyView(view: RemoteViews): this;
+}
+
+export class GridView extends ViewGroupLike {
+ constructor(id?: string);
+ addItem(item: RemoteViews): this;
+ setEmptyView(view: RemoteViews): this;
+}
+
+export class ListView extends RemoteViews {
+ constructor(id?: string);
+ addItem(item: RemoteViews): this;
+ setEmptyView(view: RemoteViews): this;
+}
+
+export class StackView extends ViewGroupLike {
+ constructor(id?: string);
+ addItem(item: RemoteViews): this;
+ setEmptyView(view: RemoteViews): this;
+}
+
+export class SpacerView extends RemoteViews {
+ constructor(sizeOrOrientation?: CoreTypes.FixedLengthType | 'horizontal' | 'vertical');
+ setOrientation(orientation: 'horizontal' | 'vertical'): this;
+ setSize(size: CoreTypes.FixedLengthType): this;
+}
+
+export class RadioButtonView extends RemoteViews {}
+
+export class SwitchView extends RemoteViews {}
+
+export class CheckBoxView extends RemoteViews {}
+
+export class RootLayoutView extends RemoteViews {}
+
+export function Root(content?: ViewBuilder): RemoteViews;
+export function VStack(content?: ViewBuilder): RemoteViews;
+export function HStack(content?: ViewBuilder): RemoteViews;
+export function ZStack(content?: ViewBuilder): RemoteViews;
+
+export function Text(text: string): TextView;
+export function Button(content: string | number | ImageSource, action?: () => void): RemoteViews;
+export function Image(source: ImageSource | number | string): RemoteViews;
+export function Spacer(sizeOrOrientation?: CoreTypes.FixedLengthType | 'horizontal' | 'vertical'): SpacerView;
+
+export function Grid(columns: number, spacing?: number, content?: ViewBuilder): RemoteViews;
+export function RelativeLayout(content?: ViewBuilder): RemoteViews;
+
+export function Chronometer(options?: {
+ /** Raw base in SystemClock.elapsedRealtime() units */
+ base?: number;
+ /** Unix timestamp (Date.now() style) - automatically converted */
+ targetTime?: number;
+ format?: string;
+ countDown?: boolean;
+ started?: boolean;
+ color?: Color | string;
+}): ChronometerView;
+export function Clock(options?: { format12Hour?: string; format24Hour?: string; timeZone?: string; color?: Color | string }): TextClockView;
+export function ProgressBar(options?: { progress?: number; max?: number; indeterminate?: boolean; flex?: boolean; fullWidth?: boolean }): ProgressBarView;
+
+export function List(count: number, content: (index: number) => RemoteViews, emptyView?: () => RemoteViews): RemoteViews;
+export function Flipper(items: T[], interval?: number, content?: (item: T, index: number) => RemoteViews): RemoteViews;
+export function Stack(count?: number, content?: (index: number) => RemoteViews): RemoteViews;
+
+export function ForEach(items: T[], id?: keyof T | ((item: T) => string | number), content?: (item: T, index: number) => RemoteViews): RemoteViews[];
+
+export function Switch(checked: boolean): SwitchView;
+
+export function CheckBox(checked: boolean): CheckBoxView;
+
+export function RadioButton(checked: boolean): RadioButtonView;
+
+export interface ViewModifers {
+ padding?: {
+ left?: number;
+ top?: number;
+ right?: number;
+ bottom?: number;
+ };
+ width?: number;
+ height?: number;
+ backgroundColor?: string | Color;
+}
+
+export interface ViewLike {
+ id?: string;
+ modifier?: ViewModifers;
+}
+export interface GroupLike extends ViewLike {
+ children?: ViewLike[];
+}
+
+export interface ImageLike extends ViewLike {
+ uri?: string;
+ resourceId?: number;
+ bitmap?: any;
+ imageSource?: ImageSource;
+}
diff --git a/packages/widgets/index.ios.ts b/packages/widgets/index.ios.ts
new file mode 100644
index 0000000..1db9e56
--- /dev/null
+++ b/packages/widgets/index.ios.ts
@@ -0,0 +1,1160 @@
+import { Utils, CoreTypes, Color, Length, ImageSource } from '@nativescript/core';
+import { layout } from '@nativescript/core/utils';
+
+const native_ = Symbol('[[_native_]]');
+export class WidgetManager {
+ [native_];
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(manager) {
+ const ret = new WidgetManager();
+ ret[native_] = manager;
+ return ret;
+ }
+}
+
+export class ViewsManager {
+ [native_];
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(manager) {
+ const ret = new ViewsManager();
+ ret[native_] = manager;
+ return ret;
+ }
+}
+
+export class PlatformWidgetManager {
+ [native_];
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(nativeManager) {
+ const ret = new PlatformWidgetManager();
+ ret[native_] = nativeManager;
+ return ret;
+ }
+}
+
+interface IWidgetListener {
+ onEnabled?: (provider: string) => void;
+ onUpdate?: (event: { provider: string; appWidgetIds: number[]; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+ onUpdateAsync?: (event: { provider: string; appWidgetIds: number[]; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+ onDeleted?: (event: { provider: string; appWidgetIds: number[] }) => void;
+ onDisabled?: (provider: string) => void;
+ onClick?: (event: { action: string; extras: Record; provider: string }) => void;
+ onResize?: (event: { provider: string; appWidgetId: number; minWidth: number; minHeight: number; maxWidth: number; maxHeight: number; manager: WidgetManager; widgetManager: PlatformWidgetManager }) => void;
+}
+
+export class PlatformRemoteViews {
+ [native_];
+
+ get native() {
+ return this[native_];
+ }
+
+ static fromNative(views) {
+ const ret = new PlatformRemoteViews();
+ ret[native_] = views;
+ return ret;
+ }
+}
+
+const toUnitValue = (value: CoreTypes.FixedLengthType) => {
+ switch (typeof value) {
+ case 'string':
+ const parsed = Length.parse(value);
+ if (typeof parsed === 'string') {
+ return null;
+ }
+ return toUnitValue(parsed);
+ case 'number':
+ return {
+ value,
+ unit: 'dip',
+ };
+ case 'object': {
+ switch (value?.unit) {
+ case 'dip':
+ return {
+ value: value.value,
+ unit: 'dip',
+ };
+ case 'px':
+ return {
+ value: value.value,
+ unit: 'px',
+ };
+ default:
+ return null;
+ }
+ }
+ }
+};
+
+type BundleValue = string | number | boolean | string[] | number[] | Record;
+
+const toBundle = (extras: Record): android.os.Bundle => {
+ return Utils.dataSerialize(extras, true);
+};
+
+const fromBundle = (bundle: android.os.Bundle): Record => {
+ return Utils.dataDeserialize(bundle) as Record;
+};
+
+const toPxValue = (value: CoreTypes.FixedLengthType) => {
+ switch (typeof value) {
+ case 'string':
+ const parsed = Length.parse(value);
+ if (typeof parsed === 'string') {
+ return -1;
+ }
+ return toPxValue(parsed);
+ case 'number':
+ return layout.toDevicePixels(value);
+ case 'object': {
+ switch (value?.unit) {
+ case 'dip':
+ return layout.toDevicePixels(value.value);
+ case 'px':
+ return value.value;
+ default:
+ return -1;
+ }
+ }
+ }
+};
+
+export class RemoteViews {
+ protected [native_];
+
+ get native() {
+ return this[native_];
+ }
+
+ setPadding(value: CoreTypes.FixedLengthType) {
+ let left = -1,
+ top = -1,
+ right = -1,
+ bottom = -1;
+
+ switch (arguments.length) {
+ case 1:
+ left = top = right = bottom = toPxValue(value);
+ break;
+ case 2:
+ left = right = toPxValue(arguments[0]);
+ top = bottom = toPxValue(arguments[1]);
+ break;
+ case 3:
+ left = right = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ bottom = toPxValue(arguments[2]);
+ break;
+ case 4:
+ left = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ right = toPxValue(arguments[2]);
+ bottom = toPxValue(arguments[3]);
+ break;
+ }
+ if (left >= -1 && top >= -1 && right >= -1 && bottom >= -1) {
+ this.native.setPadding(left, top, right, bottom);
+ }
+ return this;
+ }
+
+ setMargin(value: CoreTypes.FixedLengthType) {
+ let left = 0,
+ top = 0,
+ right = 0,
+ bottom = 0;
+
+ switch (arguments.length) {
+ case 1:
+ left = top = right = bottom = toPxValue(value);
+ break;
+ case 2:
+ left = right = toPxValue(arguments[0]);
+ top = bottom = toPxValue(arguments[1]);
+ break;
+ case 3:
+ left = right = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ bottom = toPxValue(arguments[2]);
+ break;
+ case 4:
+ left = toPxValue(arguments[0]);
+ top = toPxValue(arguments[1]);
+ right = toPxValue(arguments[2]);
+ bottom = toPxValue(arguments[3]);
+ break;
+ }
+ this.native.setMargin(left, top, right, bottom);
+ return this;
+ }
+
+ setBackgroundColor(color: Color | string) {
+ if (typeof color === 'string') {
+ this.native.setBackgroundColor(new Color(color).android);
+ } else {
+ if (color && color instanceof Color) {
+ this.native.setBackgroundColor(color.android);
+ }
+ }
+ return this;
+ }
+
+ setWidth(value: CoreTypes.FixedLengthType) {
+ const unitValue = toUnitValue(value);
+ if (unitValue) {
+ this.native.setWidth(unitValue.value, unitValue.unit);
+ }
+ return this;
+ }
+
+ setHeight(value: CoreTypes.FixedLengthType) {
+ const unitValue = toUnitValue(value);
+ if (unitValue) {
+ this.native.setHeight(unitValue.value, unitValue.unit);
+ }
+ return this;
+ }
+
+ setSize(width: CoreTypes.FixedLengthType, height: CoreTypes.FixedLengthType) {
+ const widthUnitValue = toUnitValue(width);
+ const heightUnitValue = toUnitValue(height);
+ if (widthUnitValue && heightUnitValue) {
+ this.native.setSize(widthUnitValue.value, widthUnitValue.unit, heightUnitValue.value, heightUnitValue.unit);
+ }
+ return this;
+ }
+
+ setPendingIntentTemplate(intent: android.app.PendingIntent): this {
+ this.native.setPendingIntentTemplate(intent);
+ return this;
+ }
+
+ setOnClickFillInIntent(intent: android.content.Intent): this {
+ this.native.setOnClickFillInIntent(intent);
+ return this;
+ }
+
+ onClick(action: string, extras?: Record): this {
+ this.native.onClick(action, extras ? toBundle(extras) : null);
+ return this;
+ }
+
+ onItemClick(action: string, extras?: Record): this {
+ this.native.onItemClick(action, extras ? toBundle(extras) : null);
+ return this;
+ }
+
+ toPlatformViews(packageName?: string): PlatformRemoteViews {
+ return PlatformRemoteViews.fromNative(this[native_].build(packageName ?? Utils.android.getApplicationContext().getPackageName()));
+ }
+}
+
+export type ViewBuilder = () => RemoteViews | RemoteViews[];
+
+export function ForEach(items: T[], id?: keyof T | ((item: T) => string | number), content?: (item: T, index: number) => RemoteViews): RemoteViews[] {
+ if (!content) return [];
+
+ return items.map((item, index) => content(item, index));
+}
+
+export function Root(content: ViewBuilder) {
+ const view = new RootLayoutView();
+ if (content) {
+ const result = content();
+
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ if (child instanceof SpacerView) {
+ child.setOrientation('vertical');
+ }
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function VStack(content?: ViewBuilder) {
+ const view = new VLinearLayoutView();
+ if (content) {
+ const result = content();
+
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ if (child instanceof SpacerView) {
+ child.setOrientation('vertical');
+ }
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function HStack(content?: ViewBuilder) {
+ const view = new HLinearLayoutView();
+ if (content) {
+ const result = content();
+
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ if (child instanceof SpacerView) {
+ child.setOrientation('horizontal');
+ }
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function ZStack(content?: ViewBuilder) {
+ const view = new FrameLayout();
+ if (content) {
+ const result = content();
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export function Flipper(items: T[], interval?: number, content?: (item: T, index: number) => RemoteViews): RemoteViews {
+ const flipper = new AdapterViewFlipper();
+
+ if (interval) {
+ // flipInterval is baked into the layout XML, we just enable autoStart
+ flipper.setAutoStart(true);
+ }
+
+ if (content) {
+ for (let i = 0; i < items.length; i++) {
+ flipper.addItem(content(items[i], i));
+ }
+ }
+
+ return flipper;
+}
+
+export function Chronometer(options?: { base?: number; targetTime?: number; format?: string; countDown?: boolean; started?: boolean; color?: Color | string }) {
+ const view = new ChronometerView();
+ if (options) {
+ // targetTime uses Unix timestamp (Date.now() style), base uses elapsedRealtime
+ if (options.targetTime != null) view.setTargetTime(options.targetTime);
+ else if (options.base != null) view.setBase(options.base);
+ if (options.format) view.setFormat(options.format);
+ if (options.countDown != null) view.setCountDown(options.countDown);
+ if (options.color) view.setColor(options.color);
+ if (options.started) view.start();
+ }
+ return view;
+}
+
+export function Clock(options?: { format12Hour?: string; format24Hour?: string; timeZone?: string; color?: Color | string }) {
+ const view = new TextClockView();
+ if (options) {
+ if (options.format12Hour) view.setFormat12Hour(options.format12Hour);
+ if (options.format24Hour) view.setFormat24Hour(options.format24Hour);
+ if (options.timeZone) view.setTimeZone(options.timeZone);
+ if (options.color) view.setColor(options.color);
+ }
+ return view;
+}
+
+export function List(count: number, content: (index: number) => RemoteViews, emptyView?: () => RemoteViews): RemoteViews {
+ const view = new ListView();
+ for (let i = 0; i < count; i++) {
+ const item = content(i);
+ view.addItem(item);
+ }
+ if (emptyView) {
+ view.setEmptyView(emptyView());
+ }
+ return view;
+}
+
+export function ProgressBar(options?: { progress?: number; max?: number; indeterminate?: boolean; flex?: boolean; fullWidth?: boolean }) {
+ const view = new ProgressBarView();
+ if (options) {
+ const indeterminate = options.indeterminate ?? (options.progress == null && options.max == null);
+ const max = options.max ?? 100;
+ const progress = options.progress ?? 0;
+ view.setProgressBar(max, progress, indeterminate);
+ if (options.flex) {
+ view.setFlex(true);
+ }
+ if (options.fullWidth) {
+ view.setFullWidth(true);
+ }
+ }
+ return view;
+}
+
+export function RelativeLayout(content?: ViewBuilder) {
+ const view = new RelativeLayoutView();
+ if (content) {
+ const result = content();
+ const views = Array.isArray(result) ? result.flat() : [result];
+ for (const child of views) {
+ view.addView(child);
+ }
+ }
+ return view;
+}
+
+export class SpacerView extends RemoteViews {
+ private orientation_: 'horizontal' | 'vertical' = 'horizontal';
+ private size_: CoreTypes.FixedLengthType | undefined;
+
+ constructor(sizeOrOrientation?: CoreTypes.FixedLengthType | 'horizontal' | 'vertical') {
+ super();
+ // Determine if argument is orientation or size
+ if (sizeOrOrientation === 'horizontal' || sizeOrOrientation === 'vertical') {
+ this.orientation_ = sizeOrOrientation;
+ } else if (sizeOrOrientation != null) {
+ this.size_ = sizeOrOrientation;
+ }
+ this.updateNative();
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ private updateNative() {
+ /* this[native_] = this.orientation_ === 'horizontal' ? new org.nativescript.widgets.RemoteViews.HSpacer() : new org.nativescript.widgets.RemoteViews.VSpacer();
+
+ // Apply fixed size if provided - use fixed layout (no weight)
+ if (this.size_ != null) {
+ this.native.setFixed(true);
+ const unitValue = toUnitValue(this.size_);
+ if (unitValue) {
+ if (this.orientation_ === 'horizontal') {
+ this.native.setWidth(unitValue.value, unitValue.unit);
+ } else {
+ this.native.setHeight(unitValue.value, unitValue.unit);
+ }
+ }
+ }
+ */
+ }
+
+ setOrientation(orientation: 'horizontal' | 'vertical') {
+ if (this.orientation_ !== orientation) {
+ this.orientation_ = orientation;
+ this.updateNative();
+ }
+ return this;
+ }
+
+ setSize(size: CoreTypes.FixedLengthType) {
+ this.size_ = size;
+ this.native.setFixed(true);
+ const unitValue = toUnitValue(size);
+ if (unitValue) {
+ if (this.orientation_ === 'horizontal') {
+ this.native.setWidth(unitValue.value, unitValue.unit);
+ } else {
+ this.native.setHeight(unitValue.value, unitValue.unit);
+ }
+ }
+ return this;
+ }
+}
+
+export function Spacer(sizeOrOrientation?: CoreTypes.FixedLengthType | 'horizontal' | 'vertical') {
+ return new SpacerView(sizeOrOrientation);
+}
+
+export function Stack(count?: number, content?: (index: number) => RemoteViews) {
+ const view = new StackView();
+ if (count != null && content) {
+ for (let i = 0; i < count; i++) {
+ view.addItem(content(i));
+ }
+ }
+ return view;
+}
+
+export function Text(text: string) {
+ const ret = new TextView();
+ if (text) {
+ ret.native.setText(text);
+ }
+ return ret;
+}
+
+export function Button(content: string | number | ImageSource, action?: () => void) {
+ if (typeof content === 'string') {
+ const button = new ButtonView();
+ button.native.setText(content);
+ return button;
+ }
+
+ const button = new ImageButton();
+ if (typeof content === 'string') {
+ // button.native.setImageURI(NSURL.URLWithString(content));
+ } else {
+ //button.native.setImage(content.ios);
+ }
+ return button;
+}
+
+export function Image(source: ImageSource | number | string) {
+ const ret = new ImageView();
+ // if (typeof source === 'string') {
+ // if (source.startsWith('http') || source.startsWith('https')) {
+ // ret.native.setImageUrl(source);
+ // } else {
+ // ret.native.setImageURI(android.net.Uri.parse(source));
+ // }
+ // } else if (source instanceof ImageSource) {
+ // ret.native.setImageBitmap(source.ios);
+ // }
+ return ret;
+}
+
+export function Grid(columns: number, spacing?: number, content?: ViewBuilder): RemoteViews {
+ // GridLayout doesn't work well with RemoteViews - simulate with nested layouts
+ const container = new VLinearLayoutView();
+
+ // if (content) {
+ // const children = content();
+ // const views = Array.isArray(children) ? children.flat() : [children];
+ // const rows = Math.ceil(views.length / columns);
+ // const spacingPx = spacing ?? 0;
+
+ // for (let row = 0; row < rows; row++) {
+ // const rowLayout = new HLinearLayoutView();
+
+ // for (let col = 0; col < columns; col++) {
+ // const index = row * columns + col;
+
+ // // Add spacing between items
+ // if (col > 0 && spacingPx > 0) {
+ // rowLayout.addView(Spacer(spacingPx));
+ // }
+
+ // if (index < views.length) {
+ // const view = views[index];
+ // // Wrap in a flex container so items share space equally
+ // const wrapper = new VLinearLayoutView();
+ // wrapper.setFlex(true);
+ // wrapper.native.setInt('setGravity', 17); // center
+ // wrapper.addView(view);
+ // rowLayout.addView(wrapper);
+ // } else {
+ // // Empty placeholder to maintain grid structure
+ // const placeholder = new VLinearLayoutView();
+ // placeholder.setFlex(true);
+ // rowLayout.addView(placeholder);
+ // }
+ // }
+
+ // // Add spacing between rows
+ // if (row > 0 && spacingPx > 0) {
+ // container.addView(Spacer(spacingPx));
+ // }
+ // container.addView(rowLayout);
+ // }
+ // }
+
+ return container;
+}
+
+export function Switch(checked: boolean) {
+ const ret = new SwitchView();
+ // ret.setChecked(checked);
+ return ret;
+}
+
+export function CheckBox(checked: boolean) {
+ const ret = new CheckBoxView();
+ // ret.setChecked(checked);
+ return ret;
+}
+
+export function RadioButton(checked: boolean) {
+ const ret = new RadioButtonView();
+ // ret.setChecked(checked);
+ return ret;
+}
+
+export class RootLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.RootLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+}
+
+export class AdapterViewFlipper extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.AdapterViewFlipper(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setAutoStart(autoStart: boolean): this {
+ this.native.setAutoStart(autoStart);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class ButtonView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.Button(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class ChronometerView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.Chronometer(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setBase(base: number): this {
+ this.native.setBase(base);
+ return this;
+ }
+
+ /**
+ * Set target time using Unix timestamp (Date.now() style).
+ * Automatically converts to SystemClock.elapsedRealtime() base.
+ * For countdown: pass future timestamp (Date.now() + milliseconds)
+ * For count up: pass past timestamp
+ */
+ setTargetTime(targetTime: number): this {
+ this.native.setTargetTime(targetTime);
+ return this;
+ }
+
+ setFormat(format: string): this {
+ this.native.setFormat(format);
+ return this;
+ }
+
+ setCountDown(countDown: boolean): this {
+ this.native.setCountDown(countDown);
+ return this;
+ }
+
+ start(): this {
+ this.native.start();
+ return this;
+ }
+
+ stop(): this {
+ this.native.stop();
+ return this;
+ }
+
+ setColor(color: Color | string): this {
+ if (typeof color === 'string') {
+ this.native.setTextColor(new Color(color).android);
+ } else if (color instanceof Color) {
+ this.native.setTextColor(color.android);
+ }
+ return this;
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class FrameLayout extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.FrameLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ return this;
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ return this;
+ }
+}
+
+export class GridLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.GridLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+}
+
+export class GridView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.GridView(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class ImageButton extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.ImageButton(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ resolveRemoteResources() {
+ this.native.resolveRemoteResources();
+ }
+}
+
+export class ImageView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.ImageView(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ resolveRemoteResources() {
+ this.native.resolveRemoteResources();
+ }
+}
+
+export class HLinearLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.HLinearLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ setFlex(value: boolean): this {
+ this.native.setFlex(value);
+ return this;
+ }
+}
+
+export class VLinearLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.LinearLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ setFlex(value: boolean): this {
+ this.native.setFlex(value);
+ return this;
+ }
+}
+
+export class ListView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.ListView(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class ProgressBarView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.ProgressBar(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setProgressBar(max: number, progress: number, indeterminate: boolean): this {
+ this.native.setProgressBar(max, progress, indeterminate);
+ return this;
+ }
+
+ setFlex(value: boolean): this {
+ this.native.setFlex(value);
+ return this;
+ }
+
+ setFullWidth(value: boolean): this {
+ this.native.setFullWidth(value);
+ return this;
+ }
+}
+
+export class RelativeLayoutView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.RelativeLayout(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+}
+
+export class StackView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.StackView(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ addView(view: RemoteViews) {
+ this.native.addView(view.native);
+ }
+
+ removeView(view: RemoteViews) {
+ this.native.removeView(view.native);
+ }
+
+ addItem(item: RemoteViews): this {
+ this.native.addItem(item.native);
+ return this;
+ }
+
+ setEmptyView(view: RemoteViews): this {
+ this.native.setEmptyView(view.native);
+ return this;
+ }
+}
+
+export class TextView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.TextView(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setColor(color: Color | string) {
+ if (typeof color === 'string') {
+ this.native.setTextColor(new Color(color).android);
+ } else {
+ if (color && color instanceof Color) {
+ this.native.setTextColor(color.android);
+ }
+ }
+ return this;
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class TextClockView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.TextClock(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setFormat12Hour(format: string): this {
+ // TextClock.setFormat12Hour is not remotable in RemoteViews
+ return this;
+ }
+
+ setFormat24Hour(format: string): this {
+ // TextClock.setFormat24Hour is not remotable in RemoteViews
+ return this;
+ }
+
+ setTimeZone(timeZone: string): this {
+ // TextClock.setTimeZone is not remotable in RemoteViews
+ return this;
+ }
+
+ setColor(color: Color | string): this {
+ if (typeof color === 'string') {
+ this.native.setTextColor(new Color(color).android);
+ } else if (color instanceof Color) {
+ this.native.setTextColor(color.android);
+ }
+ return this;
+ }
+
+ setTextSize(size: number): this {
+ this.native.setTextSize(size, android.util.TypedValue.COMPLEX_UNIT_SP);
+ return this;
+ }
+}
+
+export class CheckBoxView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.CheckBox(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setChecked(checked: boolean): this {
+ this.native.setChecked(checked);
+ return this;
+ }
+}
+
+export class RadioButtonView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.RadioButton(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setChecked(checked: boolean): this {
+ this.native.setChecked(checked);
+ return this;
+ }
+}
+
+export class SwitchView extends RemoteViews {
+ constructor(id?: string) {
+ super();
+ // this[native_] = new org.nativescript.widgets.RemoteViews.Switch(id ?? null);
+ }
+
+ get native() {
+ return this[native_];
+ }
+
+ setChecked(checked: boolean): this {
+ this.native.setChecked(checked);
+ return this;
+ }
+}
+
+function toJSArray(array: androidNative.Array) {
+ const jsArray: number[] = [];
+ for (let i = 0; i < array.length; i++) {
+ jsArray.push(array[i]);
+ }
+ return jsArray;
+}
+
+let mgn: WidgetManager;
+export function registerWidgetListener(provider: string, listener: IWidgetListener) {
+ /*
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.register(
+ provider,
+ new org.nativescript.widgets.AppWidgetManager.WidgetListener({
+ onEnabled(provider) {
+ if (listener.onEnabled) {
+ listener.onEnabled(provider);
+ }
+ },
+ onUpdateAsync(context, provider, appWidgetIds, manager, widgetManager) {
+ if (!manager) {
+ mgn = WidgetManager.fromNative(org.nativescript.widgets.AppWidgetManager.INSTANCE);
+ }
+ if (listener.onUpdateAsync) {
+ listener.onUpdateAsync({ provider, appWidgetIds: toJSArray(appWidgetIds), manager: mgn, widgetManager: PlatformWidgetManager.fromNative(widgetManager) });
+ }
+ },
+ onUpdate(context, provider, appWidgetIds, manager, widgetManager) {
+ if (listener.onUpdate) {
+ listener.onUpdate({ provider, appWidgetIds: toJSArray(appWidgetIds), manager: mgn, widgetManager: PlatformWidgetManager.fromNative(widgetManager) });
+ }
+ },
+ onDeleted(provider, appWidgetIds) {
+ if (listener.onDeleted) {
+ listener.onDeleted({ provider, appWidgetIds: toJSArray(appWidgetIds) });
+ }
+ },
+ onDisabled(provider) {
+ if (listener.onDisabled) {
+ listener.onDisabled(provider);
+ }
+ },
+ onAction(context, provider, action, extras) {
+ if (listener.onClick) {
+ listener.onClick({ action, extras: extras ? fromBundle(extras) : {}, provider });
+ }
+ },
+ onOptionsChanged(context, provider, appWidgetId, newOptions, manager, widgetManager) {
+ if (listener.onResize) {
+ const minWidth = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, 0);
+ const minHeight = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, 0);
+ const maxWidth = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH, 0);
+ const maxHeight = newOptions.getInt(android.appwidget.AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, 0);
+ listener.onResize({
+ provider,
+ appWidgetId,
+ minWidth,
+ minHeight,
+ maxWidth,
+ maxHeight,
+ manager: mgn,
+ widgetManager: PlatformWidgetManager.fromNative(widgetManager),
+ });
+ }
+ },
+ }),
+ );
+ */
+}
+
+export function unregisterWidgetListener(provider: string) {
+ /*
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.unregister(provider);
+ */
+}
+
+export function updateWidget(provider: string, root: RemoteViews, widgetIds?: number | number[], context?: any) {
+ /* const ctx = context ?? Utils.android.getApplicationContext();
+ if (widgetIds == null) {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.updateAppWidget(ctx, provider, root.native);
+ } else if (Array.isArray(widgetIds)) {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.updateAppWidget(ctx, provider, widgetIds, root.native);
+ } else {
+ org.nativescript.widgets.AppWidgetManager.INSTANCE.updateAppWidget(ctx, provider, widgetIds, root.native);
+ }
+ */
+}
diff --git a/packages/widgets/package.json b/packages/widgets/package.json
new file mode 100644
index 0000000..c8f9d9f
--- /dev/null
+++ b/packages/widgets/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "@nativescript/widgets",
+ "version": "1.0.0",
+ "description": "Add a plugin description",
+ "main": "index",
+ "types": "index.d.ts",
+ "nativescript": {
+ "platforms": {
+ "ios": "6.0.0",
+ "android": "6.0.0"
+ }
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/NativeScript/ui-kit.git"
+ },
+ "keywords": [
+ "NativeScript",
+ "JavaScript",
+ "TypeScript",
+ "iOS",
+ "Android"
+ ],
+ "author": {
+ "name": "NativeScript",
+ "email": "oss@nativescript.org"
+ },
+ "bugs": {
+ "url": "https://github.com/NativeScript/ui-kit/issues"
+ },
+ "license": "Apache-2.0",
+ "homepage": "https://github.com/NativeScript/ui-kit",
+ "readmeFilename": "README.md",
+ "bootstrapper": "@nativescript/plugin-seed"
+}
diff --git a/packages/widgets/platforms/android/AndroidManifest.xml b/packages/widgets/platforms/android/AndroidManifest.xml
new file mode 100644
index 0000000..bd5b191
--- /dev/null
+++ b/packages/widgets/platforms/android/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/widgets/platforms/android/include.gradle b/packages/widgets/platforms/android/include.gradle
new file mode 100644
index 0000000..34a3fd0
--- /dev/null
+++ b/packages/widgets/platforms/android/include.gradle
@@ -0,0 +1,7 @@
+dependencies {
+ def androidXWorkVersion = "2.10.0"
+ if (project.hasProperty("androidXWork")) {
+ androidXWorkVersion = androidXWork
+ }
+ implementation("androidx.work:work-runtime:$androidXWorkVersion")
+}
\ No newline at end of file
diff --git a/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetManager.kt b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetManager.kt
new file mode 100644
index 0000000..9a78e40
--- /dev/null
+++ b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetManager.kt
@@ -0,0 +1,289 @@
+package org.nativescript.widgets
+
+import android.content.Context
+import android.os.Build
+import android.os.Bundle
+import java.util.concurrent.ConcurrentHashMap
+
+object AppWidgetManager {
+
+ interface WidgetListener {
+ fun onEnabled(provider: String) {}
+
+ fun onUpdate(
+ context: Context,
+ provider: String,
+ appWidgetIds: IntArray,
+ manager: RemoteViewsManager,
+ widgetManager: android.appwidget.AppWidgetManager?
+ ) {
+ }
+
+
+ fun onUpdateAsync(
+ context: Context,
+ provider: String,
+ appWidgetIds: IntArray,
+ manager: RemoteViewsManager,
+ widgetManager: android.appwidget.AppWidgetManager?
+ ) {
+ }
+
+ fun onDisabled(provider: String) {}
+ fun onDeleted(provider: String, appWidgetIds: IntArray) {}
+ fun onOptionsChanged(
+ context: Context,
+ provider: String,
+ appWidgetId: Int,
+ newOptions: Bundle,
+ manager: RemoteViewsManager,
+ widgetManager: android.appwidget.AppWidgetManager?
+ ) {
+ }
+
+ fun onAction(
+ context: Context,
+ provider: String,
+ action: String,
+ extras: Bundle?
+ ) {
+ }
+ }
+
+ private val listeners = ConcurrentHashMap()
+ private val managers = ConcurrentHashMap()
+
+ // Pre-S: cached platform RemoteViews for immediate compound button updates, keyed by appWidgetId
+ private val cachedRootRvs = ConcurrentHashMap()
+ private val compoundButtonCaches = ConcurrentHashMap>()
+
+ fun getCachedRootRv(widgetId: Int): android.widget.RemoteViews? = cachedRootRvs[widgetId]
+ fun getCachedCompoundButton(widgetId: Int, nodeId: String): android.widget.RemoteViews? =
+ compoundButtonCaches[widgetId]?.get(nodeId)
+
+ // Pre-S: persist compound button checked state across reboots via SharedPreferences
+ private const val PREFS_NAME = "ns_widget_checked_state"
+
+ private fun checkedPrefs(context: Context) =
+ context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
+
+ private fun checkedKey(widgetId: Int, nodeId: String) = "${widgetId}_${nodeId}"
+
+ fun getCheckedState(context: Context, widgetId: Int, nodeId: String): Boolean =
+ checkedPrefs(context).getBoolean(checkedKey(widgetId, nodeId), false)
+
+ fun setCheckedState(context: Context, widgetId: Int, nodeId: String, checked: Boolean) {
+ checkedPrefs(context).edit().putBoolean(checkedKey(widgetId, nodeId), checked).apply()
+ }
+
+ private fun clearCheckedStates(context: Context, widgetId: Int) {
+ val prefs = checkedPrefs(context)
+ val prefix = "${widgetId}_"
+ val editor = prefs.edit()
+ prefs.all.keys.filter { it.startsWith(prefix) }.forEach { editor.remove(it) }
+ editor.apply()
+ }
+
+ // Queued events that arrived before a listener was registered
+ private sealed class PendingEvent {
+ data class Update(
+ val context: Context,
+ val appWidgetIds: IntArray,
+ val manager: RemoteViewsManager,
+ val widgetManager: android.appwidget.AppWidgetManager?
+ ) : PendingEvent()
+
+ data class Action(
+ val context: Context,
+ val action: String,
+ val extras: Bundle?
+ ) : PendingEvent()
+ }
+
+ private val pendingEvents = ConcurrentHashMap>()
+
+ fun register(providerClass: String, listener: WidgetListener) {
+ listeners[providerClass] = listener
+
+ // Replay any queued events
+ pendingEvents.remove(providerClass)?.forEach { event ->
+ when (event) {
+ is PendingEvent.Update -> listener.onUpdate(
+ event.context, providerClass, event.appWidgetIds,
+ event.manager, event.widgetManager
+ )
+ is PendingEvent.Action -> listener.onAction(
+ event.context, providerClass, event.action, event.extras
+ )
+ }
+ }
+ }
+
+ fun unregister(providerClass: String) {
+ listeners.remove(providerClass)
+ managers.remove(providerClass)
+ pendingEvents.remove(providerClass)
+ }
+
+ fun getManager(providerClass: String): RemoteViewsManager {
+ return managers.getOrPut(providerClass) { RemoteViewsManager() }
+ }
+
+ private fun queueEvent(provider: String, event: PendingEvent) {
+ pendingEvents.getOrPut(provider) { mutableListOf() }.add(event)
+ }
+
+ internal fun notifyUpdate(
+ context: Context,
+ provider: String,
+ appWidgetIds: IntArray,
+ manager: RemoteViewsManager,
+ widgetManager: android.appwidget.AppWidgetManager?
+ ) {
+ val listener = listeners[provider]
+ if (listener != null) {
+ listener.onUpdate(context, provider, appWidgetIds, manager, widgetManager)
+ } else {
+ queueEvent(provider, PendingEvent.Update(context, appWidgetIds, manager, widgetManager))
+ }
+ }
+
+ internal fun notifyUpdateAsync(
+ context: Context,
+ provider: String,
+ appWidgetIds: IntArray,
+ manager: RemoteViewsManager,
+ widgetManager: android.appwidget.AppWidgetManager?
+ ) {
+ val listener = listeners[provider]
+ if (listener != null) {
+ listener.onUpdateAsync(context, provider, appWidgetIds, manager, widgetManager)
+ } else {
+ queueEvent(provider, PendingEvent.Update(context, appWidgetIds, manager, widgetManager))
+ }
+ }
+
+ internal fun notifyEnabled(provider: String) {
+ listeners[provider]?.onEnabled(provider)
+ }
+
+ internal fun notifyDisabled(provider: String) {
+ listeners[provider]?.onDisabled(provider)
+ }
+
+ internal fun notifyDeleted(context: Context, provider: String, appWidgetIds: IntArray) {
+ for (id in appWidgetIds) {
+ cachedRootRvs.remove(id)
+ compoundButtonCaches.remove(id)
+ clearCheckedStates(context, id)
+ }
+ listeners[provider]?.onDeleted(provider, appWidgetIds)
+ }
+
+ internal fun notifyAction(
+ context: Context,
+ provider: String,
+ action: String,
+ extras: Bundle?
+ ) {
+ val listener = listeners[provider]
+ if (listener != null) {
+ listener.onAction(context, provider, action, extras)
+ } else {
+ queueEvent(provider, PendingEvent.Action(context, action, extras))
+ }
+ }
+
+ internal fun notifyOptionsChanged(
+ context: Context,
+ provider: String,
+ appWidgetId: Int,
+ newOptions: Bundle,
+ manager: RemoteViewsManager,
+ widgetManager: android.appwidget.AppWidgetManager?,
+ ) {
+ listeners[provider]?.onOptionsChanged(
+ context,
+ provider,
+ appWidgetId,
+ newOptions,
+ manager,
+ widgetManager
+ )
+ }
+
+ private fun cachePreS(widgetId: Int, rv: android.widget.RemoteViews, root: RemoteViews) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ cachedRootRvs[widgetId] = rv
+ root.manager?.compoundButtonCache?.let { cache ->
+ compoundButtonCaches[widgetId] = HashMap(cache)
+ }
+ }
+ }
+
+ private fun buildForWidget(
+ widgetId: Int,
+ root: RemoteViews,
+ context: Context,
+ provider: String
+ ): android.widget.RemoteViews? {
+ RemoteViews.buildAppWidgetId = widgetId
+ try {
+ val rv = root.build(context, provider) ?: return null
+ cachePreS(widgetId, rv, root)
+ return rv
+ } finally {
+ RemoteViews.buildAppWidgetId = 0
+ }
+ }
+
+ fun updateAppWidget(context: Context, provider: String, root: RemoteViews) {
+ val mgr = android.appwidget.AppWidgetManager.getInstance(context)
+ val component = android.content.ComponentName(context, provider)
+ val ids = mgr.getAppWidgetIds(component)
+ if (ids.isEmpty()) return
+ for (id in ids) {
+ val rv = buildForWidget(id, root, context, provider) ?: continue
+ mgr.updateAppWidget(id, rv)
+ root.manager?.adapterViewIds?.forEach { viewId ->
+ mgr.notifyAppWidgetViewDataChanged(id, viewId)
+ }
+ }
+ }
+
+ @JvmOverloads
+ fun updateAppWidget(context: Context, provider: String, widgetId: Int, root: RemoteViews) {
+ val mgr = android.appwidget.AppWidgetManager.getInstance(context)
+ val rv = buildForWidget(widgetId, root, context, provider) ?: return
+ mgr.updateAppWidget(widgetId, rv)
+ root.manager?.adapterViewIds?.forEach { viewId ->
+ mgr.notifyAppWidgetViewDataChanged(widgetId, viewId)
+ }
+ }
+
+ @JvmOverloads
+ fun updateAppWidget(context: Context, provider: String, widgetIds: IntArray, root: RemoteViews) {
+ val mgr = android.appwidget.AppWidgetManager.getInstance(context)
+ for (id in widgetIds) {
+ val rv = buildForWidget(id, root, context, provider) ?: continue
+ mgr.updateAppWidget(id, rv)
+ root.manager?.adapterViewIds?.forEach { viewId ->
+ mgr.notifyAppWidgetViewDataChanged(id, viewId)
+ }
+ }
+ }
+
+ fun notifyDataChanged(context: Context, provider: String, viewId: Int) {
+ val mgr = android.appwidget.AppWidgetManager.getInstance(context)
+ val component = android.content.ComponentName(context, provider)
+ val ids = mgr.getAppWidgetIds(component)
+ for (id in ids) {
+ mgr.notifyAppWidgetViewDataChanged(id, viewId)
+ }
+ }
+
+ fun notifyDataChanged(context: Context, widgetId: Int, viewId: Int) {
+ val mgr = android.appwidget.AppWidgetManager.getInstance(context)
+ mgr.notifyAppWidgetViewDataChanged(widgetId, viewId)
+ }
+}
diff --git a/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetProvider.kt b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetProvider.kt
new file mode 100644
index 0000000..b8f62a4
--- /dev/null
+++ b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetProvider.kt
@@ -0,0 +1,194 @@
+package org.nativescript.widgets
+
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import android.os.Bundle
+import androidx.work.WorkerParameters
+
+open class AppWidgetProvider : android.appwidget.AppWidgetProvider() {
+ private val providerName = this::class.java.name
+ open val interval = 900000L
+
+ override fun onReceive(context: Context, intent: Intent) {
+ if (intent.action == RemoteViews.ACTION_CLICK) {
+ val action = intent.getStringExtra(RemoteViews.EXTRA_CLICK_ACTION) ?: return
+ val extras = intent.getBundleExtra(RemoteViews.EXTRA_CLICK_EXTRAS)
+ AppWidgetManager.notifyAction(context, providerName, action, extras)
+ return
+ }
+
+
+ if (intent.action == RemoteViews.ACTION_CHECK) {
+
+ val action = intent.getStringExtra(RemoteViews.EXTRA_CHECK_ACTION) ?: return
+ val extras = intent.getBundleExtra(RemoteViews.EXTRA_CHECK_EXTRAS) ?: Bundle()
+ val checked: Boolean
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ checked = intent.extras?.getBoolean(android.widget.RemoteViews.EXTRA_CHECKED, false) ?: false
+ } else {
+ // Pre-S: read persisted state from SharedPreferences and toggle it
+ val widgetId = intent.getIntExtra(RemoteViews.EXTRA_WIDGET_ID, 0)
+ val nodeId = intent.data?.pathSegments?.getOrNull(0)
+ val layoutType = intent.getStringExtra(RemoteViews.EXTRA_LAYOUT_TYPE)
+
+ if (widgetId != 0 && nodeId != null) {
+ val currentState = AppWidgetManager.getCheckedState(context, widgetId, nodeId)
+ checked = !currentState
+ AppWidgetManager.setCheckedState(context, widgetId, nodeId, checked)
+ } else {
+ checked = false
+ }
+
+ // Ensure cache is warm, then swap the drawable for instant feedback
+ if (widgetId != 0 && nodeId != null && layoutType != null) {
+ // Rebuild if cache is cold (reboot / process death)
+ if (AppWidgetManager.getCachedRootRv(widgetId) == null) {
+ val manager = AppWidgetManager.getManager(providerName)
+ AppWidgetManager.notifyUpdate(
+ context, providerName, intArrayOf(widgetId),
+ manager, android.appwidget.AppWidgetManager.getInstance(context)
+ )
+ }
+
+ val cachedChildRv = AppWidgetManager.getCachedCompoundButton(widgetId, nodeId)
+ val cachedRoot = AppWidgetManager.getCachedRootRv(widgetId)
+
+ if (cachedChildRv != null && cachedRoot != null) {
+ val viewId = when (layoutType) {
+ "CheckBox" -> R.id.ns_remote_view_checkbox_compat
+ "RadioButton" -> R.id.ns_remote_view_radio_button_compat
+ "Switch" -> R.id.ns_remote_view_switch_compat
+ else -> null
+ }
+ val drawableRes = when (layoutType) {
+ "CheckBox" -> if (checked) R.drawable.ns_checkbox_on else R.drawable.ns_checkbox_off
+ "RadioButton" -> if (checked) R.drawable.ns_radio_on else R.drawable.ns_radio_off
+ "Switch" -> if (checked) R.drawable.ns_switch_on else R.drawable.ns_switch_off
+ else -> null
+ }
+
+ if (viewId != null && drawableRes != null) {
+ cachedChildRv.setImageViewResource(viewId, drawableRes)
+ val appWidgetMgr = android.appwidget.AppWidgetManager.getInstance(context)
+ appWidgetMgr.updateAppWidget(widgetId, cachedRoot)
+ }
+ }
+ }
+ }
+
+ extras.putBoolean(RemoteViews.CHECKED_VALUE, checked)
+ AppWidgetManager.notifyAction(context, providerName, action, extras)
+ return
+ }
+
+ if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
+ val appWidgetMgr = android.appwidget.AppWidgetManager.getInstance(context)
+ val component = ComponentName(context, providerName)
+ val ids = appWidgetMgr.getAppWidgetIds(component)
+ if (ids.isNotEmpty()) {
+ onUpdate(context, appWidgetMgr, ids)
+ }
+ return
+ }
+
+ super.onReceive(context, intent)
+ }
+
+ internal class WidgetWorker(
+ context: Context,
+ params: WorkerParameters
+ ) : AppWidgetWorker(context, params) {
+ override fun doWork(): Result {
+ val appWidgetManager = android.appwidget.AppWidgetManager.getInstance(applicationContext)
+ val component = ComponentName(
+ applicationContext, this.provider
+ )
+ val ids = appWidgetManager.getAppWidgetIds(component)
+ if (ids.isEmpty()) {
+ cancelPeriodic(
+ applicationContext,
+ this.provider
+ )
+ return Result.success()
+ }
+
+ val manager = AppWidgetManager.getManager(this.provider)
+ AppWidgetManager.notifyUpdateAsync(
+ applicationContext,
+ this.provider,
+ ids,
+ manager,
+ appWidgetManager
+ )
+
+ return Result.success()
+ }
+ }
+
+ override fun onEnabled(context: Context) {
+ super.onEnabled(context)
+ AppWidgetManager.notifyEnabled(providerName)
+ AppWidgetWorker.enqueuePeriodic(context, providerName, intArrayOf(), interval)
+ }
+
+ override fun onUpdate(
+ context: Context?,
+ appWidgetManager: android.appwidget.AppWidgetManager?,
+ appWidgetIds: IntArray?
+ ) {
+ val context = context ?: return
+ val ids = appWidgetIds ?: return
+ val manager = AppWidgetManager.getManager(providerName)
+ AppWidgetManager.notifyUpdate(
+ context,
+ providerName,
+ ids,
+ manager,
+ appWidgetManager
+ )
+ AppWidgetWorker.enqueueImmediate(
+ context, providerName, ids
+ )
+ }
+
+ override fun onDeleted(context: Context?, appWidgetIds: IntArray?) {
+ super.onDeleted(context, appWidgetIds)
+ val ctx = context ?: return
+ appWidgetIds?.let {
+ AppWidgetManager.notifyDeleted(ctx, providerName, it)
+ }
+ }
+
+ override fun onDisabled(context: Context) {
+ super.onDisabled(context)
+ AppWidgetManager.notifyDisabled(providerName)
+ AppWidgetWorker.cancelPeriodic(
+ context, providerName
+ )
+ }
+
+
+ override fun onAppWidgetOptionsChanged(
+ context: Context?,
+ appWidgetManager: android.appwidget.AppWidgetManager?,
+ appWidgetId: Int,
+ newOptions: Bundle?
+ ) {
+ super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions)
+ val ctx = context ?: return
+ newOptions?.let {
+ val manager = AppWidgetManager.getManager(providerName)
+ AppWidgetManager.notifyOptionsChanged(
+ ctx,
+ providerName,
+ appWidgetId,
+ it,
+ manager,
+ appWidgetManager
+ )
+ }
+ }
+}
diff --git a/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetReceiver.kt b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetReceiver.kt
new file mode 100644
index 0000000..3c25914
--- /dev/null
+++ b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetReceiver.kt
@@ -0,0 +1,41 @@
+package org.nativescript.widgets
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import org.nativescript.widgets.AppWidgetProvider.WidgetWorker
+
+class AppWidgetReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ if (intent.action == Intent.ACTION_MY_PACKAGE_REPLACED) {
+ val appWidgetMgr = android.appwidget.AppWidgetManager.getInstance(context)
+ val pm = context.packageManager
+ for (provider in appWidgetMgr.installedProviders) {
+
+ val receiverInfo = pm.getReceiverInfo(provider.provider, PackageManager.GET_META_DATA)
+ val isManaged = receiverInfo.metaData?.getBoolean(
+ "org.nativescript.widgets.MANAGED_WIDGET", false
+ ) == true
+ if (!isManaged) continue
+
+ val ids = appWidgetMgr.getAppWidgetIds(provider.provider)
+ if (ids.isNotEmpty()) {
+
+ val providerName = "${provider.provider.packageName}.${provider.provider.className}"
+
+ val manager = AppWidgetManager.getManager(providerName)
+
+ AppWidgetManager.notifyUpdate(
+ context, providerName, ids, manager, appWidgetMgr
+ )
+ AppWidgetWorker.enqueueImmediate(
+ context, providerName, ids
+ )
+
+ }
+ }
+ return
+ }
+ }
+}
diff --git a/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetWorker.kt b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetWorker.kt
new file mode 100644
index 0000000..f3b3ca0
--- /dev/null
+++ b/packages/widgets/platforms/android/java/org/nativescript/widgets/AppWidgetWorker.kt
@@ -0,0 +1,184 @@
+package org.nativescript.widgets
+
+import android.content.Context
+import android.os.SystemClock
+import androidx.work.Data
+import androidx.work.ExistingPeriodicWorkPolicy
+import androidx.work.ExistingWorkPolicy
+import androidx.work.OneTimeWorkRequest
+import androidx.work.PeriodicWorkRequest
+import androidx.work.WorkInfo
+import androidx.work.WorkManager
+import androidx.work.Worker
+import androidx.work.WorkerParameters
+import java.util.concurrent.ConcurrentHashMap
+import java.util.concurrent.TimeUnit
+
+abstract class AppWidgetWorker(
+ context: Context,
+ params: WorkerParameters
+) : Worker(context, params) {
+
+ val widgetIds: IntArray
+ get() = inputData.getIntArray(KEY_WIDGET_IDS) ?: intArrayOf()
+
+ val provider: String
+ get() = inputData.getString(KEY_PROVIDER) ?: ""
+
+ companion object {
+ const val KEY_WIDGET_IDS = "widget_ids"
+ const val KEY_PROVIDER = "provider"
+
+
+ private val lastEnqueuedAt = ConcurrentHashMap()
+ private const val MIN_INTERVAL_MS = 3000L
+
+ @JvmStatic
+ fun buildData(provider: String, widgetIds: IntArray): Data {
+ return Data.Builder()
+ .putString(KEY_PROVIDER, provider)
+ .putIntArray(KEY_WIDGET_IDS, widgetIds)
+ .build()
+ }
+
+ @JvmStatic
+ fun enqueue(
+ context: Context,
+ workerClass: Class,
+ provider: String,
+ widgetIds: IntArray
+ ) {
+ val workName = "widget_update_${provider}_once"
+ val now = SystemClock.elapsedRealtime()
+ val last = lastEnqueuedAt[workName]
+ if (last != null && now - last < MIN_INTERVAL_MS) return
+ lastEnqueuedAt[workName] = now
+
+ val request = OneTimeWorkRequest.Builder(workerClass)
+ .setInputData(buildData(provider, widgetIds))
+ .build()
+ WorkManager.getInstance(context)
+ .enqueueUniqueWork(
+ workName,
+ ExistingWorkPolicy.REPLACE,
+ request
+ )
+ }
+
+ inline fun enqueue(
+ context: Context,
+ provider: String,
+ widgetIds: IntArray
+ ) = enqueue(context, T::class.java, provider, widgetIds)
+
+ @JvmStatic
+ @JvmOverloads
+ fun enqueuePeriodic(
+ context: Context,
+ workerClass: Class,
+ provider: String,
+ widgetIds: IntArray,
+ repeatIntervalMilliSeconds: Long = 900000, // 15 mins min time allowed
+ uniqueWorkName: String = "widget_update_$provider"
+ ) {
+ val request = PeriodicWorkRequest.Builder(
+ workerClass,
+ repeatIntervalMilliSeconds, TimeUnit.MILLISECONDS
+ )
+ .setInputData(buildData(provider, widgetIds))
+ .build()
+ WorkManager.getInstance(context)
+ .enqueueUniquePeriodicWork(
+ uniqueWorkName,
+ ExistingPeriodicWorkPolicy.UPDATE,
+ request
+ )
+ }
+
+ inline fun enqueuePeriodic(
+ context: Context,
+ provider: String,
+ widgetIds: IntArray,
+ repeatIntervalMilliSeconds: Long = 900000,
+ uniqueWorkName: String = "widget_update_$provider"
+ ) = enqueuePeriodic(
+ context,
+ T::class.java,
+ provider,
+ widgetIds,
+ repeatIntervalMilliSeconds,
+ uniqueWorkName
+ )
+
+ @JvmStatic
+ @JvmOverloads
+ fun cancelPeriodic(
+ context: Context,
+ provider: String,
+ uniqueWorkName: String = "widget_update_$provider"
+ ) {
+ WorkManager.getInstance(context).cancelUniqueWork(uniqueWorkName)
+ }
+
+
+ @JvmStatic
+ inline fun enqueueImmediate(
+ context: Context,
+ provider: String,
+ widgetIds: IntArray,
+ ) {
+ val request = OneTimeWorkRequest.Builder(T::class.java)
+ .setInputData(buildData(provider, widgetIds))
+ .build()
+ WorkManager.getInstance(context).enqueueUniqueWork(
+ "widget_${provider}_immediate",
+ ExistingWorkPolicy.KEEP,
+ request
+ )
+ }
+
+ @JvmStatic
+ fun isScheduled(context: Context, provider: String): Boolean {
+ val statuses = WorkManager.getInstance(context)
+ .getWorkInfosForUniqueWork("widget_update_$provider")
+ .get()
+ return statuses.any { it.state == WorkInfo.State.ENQUEUED || it.state == WorkInfo.State.RUNNING }
+ }
+ }
+
+ fun updateWidgets(rv: android.widget.RemoteViews?) {
+ rv ?: return
+ val mgr = android.appwidget.AppWidgetManager.getInstance(applicationContext)
+ for (id in widgetIds) {
+ mgr.updateAppWidget(id, rv)
+ }
+ }
+
+ fun updateWidgets(root: RemoteViews) {
+ val rv = root.build(applicationContext, provider) ?: return
+ updateWidgets(rv)
+ }
+
+ fun updateWidget(widgetId: Int, rv: android.widget.RemoteViews?) {
+ rv ?: return
+ val mgr = android.appwidget.AppWidgetManager.getInstance(applicationContext)
+ mgr.updateAppWidget(widgetId, rv)
+ }
+
+ fun updateWidget(widgetId: Int, root: RemoteViews) {
+ val rv = root.build(applicationContext, provider) ?: return
+ updateWidget(widgetId, rv)
+ }
+
+ fun notifyDataChanged(viewId: Int) {
+ val mgr = android.appwidget.AppWidgetManager.getInstance(applicationContext)
+ for (id in widgetIds) {
+ mgr.notifyAppWidgetViewDataChanged(id, viewId)
+ }
+ }
+
+ fun notifyDataChanged(widgetId: Int, viewId: Int) {
+ val mgr = android.appwidget.AppWidgetManager.getInstance(applicationContext)
+ mgr.notifyAppWidgetViewDataChanged(widgetId, viewId)
+ }
+}
diff --git a/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViews.kt b/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViews.kt
new file mode 100644
index 0000000..8b68b09
--- /dev/null
+++ b/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViews.kt
@@ -0,0 +1,1250 @@
+package org.nativescript.widgets
+
+import android.annotation.SuppressLint
+import android.app.PendingIntent
+import android.content.Context
+import android.content.Intent
+import android.content.res.Resources
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.net.Uri
+import android.os.Build
+import android.util.TypedValue
+import java.net.URL
+import java.util.concurrent.atomic.AtomicLong
+import android.view.View
+
+open class RemoteViews(val layout: Layout, id: String? = null) {
+
+ val id: String = id ?: generateId()
+
+ companion object {
+ private const val TAG = "RemoteViews"
+ private val counter = AtomicLong(0)
+ fun generateId(): String = "ns_rv_${counter.incrementAndGet()}"
+
+ const val ACTION_CLICK = "org.nativescript.widgets.ACTION_CLICK"
+ const val EXTRA_CLICK_ACTION = "ns_click_action"
+ const val EXTRA_CLICK_EXTRAS = "ns_click_extras"
+ const val ACTION_CHECK = "org.nativescript.widgets.ACTION_CHECK"
+ const val EXTRA_CHECK_ACTION = "ns_check_action"
+ const val EXTRA_CHECK_EXTRAS = "ns_check_extras"
+ const val CHECKED_VALUE = "ns_checked_value"
+ const val EXTRA_LAYOUT_TYPE = "ns_layout_type"
+ const val EXTRA_WIDGET_ID = "ns_widget_id"
+
+ @JvmField
+ internal var buildContext: Context? = null
+ @JvmField
+ internal var buildProviderClass: String? = null
+ @JvmField
+ internal var buildForCollection: Boolean = false
+ @JvmField
+ internal var buildAppWidgetId: Int = 0
+ }
+
+ internal val commands = mutableMapOf()
+ internal var stableId: Int? = null
+ internal var manager: RemoteViewsManager? = null
+ internal val adapterItemsBackingField: MutableList by lazy { mutableListOf() }
+ internal var emptyViewBackingField: RemoteViews? = null
+
+ sealed class Command {
+ abstract fun applyTo(rv: android.widget.RemoteViews, targetId: Int)
+
+ open fun applyToWithContext(rv: android.widget.RemoteViews, targetId: Int, context: Context) {
+ applyTo(rv, targetId)
+ }
+
+ data class SetText(val value: String) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setTextViewText(targetId, value)
+ }
+ }
+
+ data class SetTextColor(val value: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setTextColor(targetId, value)
+ }
+ }
+
+ data class SetTextSize(val value: Float, val unit: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setTextViewTextSize(targetId, unit, value)
+ }
+ }
+
+ data class SetImageResource(val resId: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setImageViewResource(targetId, resId)
+ }
+ }
+
+ data class SetVisibility(val visibility: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setViewVisibility(targetId, visibility)
+ }
+ }
+
+ data class SetByte(val method: String, val value: Byte) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setByte(targetId, method, value)
+ }
+ }
+
+ data class SetShort(val method: String, val value: Short) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setShort(targetId, method, value)
+ }
+ }
+
+ data class SetInt(val method: String, val value: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setInt(targetId, method, value)
+ }
+ }
+
+ data class SetProgressBar(val max: Int, val progress: Int, val indeterminate: Boolean) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setProgressBar(targetId, max, progress, indeterminate)
+ }
+ }
+
+ data class SetLong(val method: String, val value: Long) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setLong(targetId, method, value)
+ }
+ }
+
+ data class SetFloat(val method: String, val value: Float) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setFloat(targetId, method, value)
+ }
+ }
+
+ data class SetBoolean(val method: String, val value: Boolean) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setBoolean(targetId, method, value)
+ }
+ }
+
+ data class SetString(val method: String, val value: String) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setString(targetId, method, value)
+ }
+ }
+
+ data class SetBackgroundColor(val value: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setInt(targetId, "setBackgroundColor", value)
+ }
+ }
+
+
+ data class SetImageURI(val value: Uri?) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setImageViewUri(targetId, value)
+ }
+ }
+
+ data class SetImageBitmap(val value: Bitmap) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setImageViewBitmap(targetId, value)
+ }
+ }
+
+ data class SetImageUrl(val url: String) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ // no-op: must be resolved via resolveRemoteResources() before build
+ }
+
+ fun resolve(): SetImageBitmap? {
+ return try {
+ val bitmap = URL(url).openStream().use { BitmapFactory.decodeStream(it) }
+ bitmap?.let { SetImageBitmap(it) }
+ } catch (e: Exception) {
+ null
+ }
+ }
+ }
+
+ data class SetOnClickPendingIntent(val intent: PendingIntent) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setOnClickPendingIntent(targetId, intent)
+ }
+ }
+
+ data class SetPendingIntentTemplate(val intent: PendingIntent) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setPendingIntentTemplate(targetId, intent)
+ }
+ }
+
+ data class SetOnClickFillInIntent(val intent: Intent) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setOnClickFillInIntent(targetId, intent)
+ }
+ }
+
+ data class SetOnClickAction(
+ val action: String,
+ val extras: android.os.Bundle?,
+ val nodeId: String
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ // no-op — requires context to create PendingIntent
+ }
+
+ override fun applyToWithContext(
+ rv: android.widget.RemoteViews,
+ targetId: Int,
+ context: Context
+ ) {
+ val providerClass = buildProviderClass ?: return
+ val intent = Intent(ACTION_CLICK).apply {
+ component = android.content.ComponentName(context, providerClass)
+ putExtra(EXTRA_CLICK_ACTION, action)
+ if (extras != null) {
+ putExtra(EXTRA_CLICK_EXTRAS, extras)
+ }
+ // mark as a click-origin event
+ data = Uri.parse("ns://click/$nodeId/$action")
+ }
+ val requestCode = nodeId.hashCode() and 0x7FFFFFFF
+ var flags = PendingIntent.FLAG_UPDATE_CURRENT
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ flags = flags or PendingIntent.FLAG_MUTABLE
+ } else {
+ flags = flags or PendingIntent.FLAG_IMMUTABLE
+ }
+ val pi = PendingIntent.getBroadcast(context, requestCode, intent, flags)
+ rv.setOnClickPendingIntent(targetId, pi)
+ }
+ }
+
+ data class SetOnClickFillInAction(
+ val action: String,
+ val extras: android.os.Bundle?
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ val fillInIntent = Intent().apply {
+ putExtra(EXTRA_CLICK_ACTION, action)
+ if (extras != null) putExtra(EXTRA_CLICK_EXTRAS, extras)
+ }
+ rv.setOnClickFillInIntent(targetId, fillInIntent)
+ }
+ }
+
+ data class SetWidth(val value: Float, val unit: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutWidth(targetId, value, unit)
+ } else {
+ rv.setInt(
+ targetId, "setMinimumWidth", TypedValue.applyDimension(
+ unit, value, Resources.getSystem().displayMetrics
+ ).toInt()
+ )
+ }
+ }
+ }
+
+ data class SetHeight(val value: Float, val unit: Int) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutHeight(targetId, value, unit)
+ } else {
+ rv.setInt(
+ targetId, "setMinimumHeight", TypedValue.applyDimension(
+ unit, value, Resources.getSystem().displayMetrics
+ ).toInt()
+ )
+ }
+ }
+ }
+
+ data class SetSize(
+ val width: Float,
+ val widthUnit: Int,
+ val height: Float,
+ val heightUnit: Int
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutWidth(targetId, width, widthUnit)
+ rv.setViewLayoutHeight(targetId, height, heightUnit)
+ } else {
+ rv.setInt(
+ targetId, "setMinimumWidth", TypedValue.applyDimension(
+ widthUnit, width, Resources.getSystem().displayMetrics
+ ).toInt()
+ )
+
+ rv.setInt(
+ targetId, "setMinimumHeight", TypedValue.applyDimension(
+ heightUnit, height, Resources.getSystem().displayMetrics
+ ).toInt()
+ )
+ }
+ }
+ }
+
+ data class SetWidthDimen(val value: Float, val resource: String, val packageName: String?) :
+ Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {}
+
+ @SuppressLint("DiscouragedApi")
+ override fun applyToWithContext(
+ rv: android.widget.RemoteViews,
+ targetId: Int,
+ context: Context
+ ) {
+ val res = context.resources.getIdentifier(
+ resource, "dimen", packageName ?: context.packageName
+ )
+ if (res > 0) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutWidthDimen(
+ targetId,
+ res
+ )
+ } else {
+ val width = context.resources.getDimensionPixelSize(res)
+ rv.setInt(
+ targetId, "setMinimumWidth", width
+ )
+ }
+ }
+ }
+ }
+
+ data class SetHeightDimen(val value: Float, val resource: String, val packageName: String?) :
+ Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {}
+
+ @SuppressLint("DiscouragedApi")
+ override fun applyToWithContext(
+ rv: android.widget.RemoteViews,
+ targetId: Int,
+ context: Context
+ ) {
+ val res = context.resources.getIdentifier(
+ resource, "dimen", packageName ?: context.packageName
+ )
+ if (res > 0) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutHeightDimen(
+ targetId,
+ res
+ )
+ } else {
+ val height = context.resources.getDimensionPixelSize(res)
+ rv.setInt(
+ targetId, "setMinimumHeight", height
+ )
+ }
+ }
+ }
+ }
+
+ data class SetSizeDimen(
+ val width: Float,
+ val widthResource: String,
+ val widthPackageName: String?,
+ val height: Float,
+ val heightResource: String,
+ val heightPackageName: String?
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {}
+
+ @SuppressLint("DiscouragedApi")
+ override fun applyToWithContext(
+ rv: android.widget.RemoteViews,
+ targetId: Int,
+ context: Context
+ ) {
+ val widthRes = context.resources.getIdentifier(
+ widthResource, "dimen", widthPackageName ?: context.packageName
+ )
+ if (widthRes > 0) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutWidthDimen(
+ targetId,
+ widthRes
+ )
+ } else {
+ val width = context.resources.getDimensionPixelSize(widthRes)
+ rv.setInt(
+ targetId, "setMinimumWidth", width
+ )
+ }
+ }
+
+
+ val heightRes = context.resources.getIdentifier(
+ heightResource, "dimen", heightPackageName ?: context.packageName
+ )
+ if (heightRes > 0) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutHeightDimen(
+ targetId,
+ heightRes
+ )
+ } else {
+ val height = context.resources.getDimensionPixelSize(heightRes)
+ rv.setInt(
+ targetId, "setMinimumHeight", height
+ )
+ }
+ }
+ }
+ }
+
+ data class SetPadding(
+ val left: Int,
+ val top: Int,
+ val right: Int,
+ val bottom: Int
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setViewPadding(
+ targetId, left, top, right, bottom
+ )
+ }
+ }
+
+ data class SetChronometer(
+ val base: Long,
+ val format: String?,
+ val started: Boolean
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setChronometer(targetId, base, format, started)
+ }
+ }
+
+ data class SetChronometerCountDown(val isCountDown: Boolean) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ rv.setChronometerCountDown(targetId, isCountDown)
+ }
+ }
+
+ data class SetMargin(
+ val left: Int,
+ val top: Int,
+ val right: Int,
+ val bottom: Int
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setViewLayoutMargin(targetId, android.widget.RemoteViews.MARGIN_LEFT, left.toFloat(), android.util.TypedValue.COMPLEX_UNIT_PX)
+ rv.setViewLayoutMargin(targetId, android.widget.RemoteViews.MARGIN_TOP, top.toFloat(), android.util.TypedValue.COMPLEX_UNIT_PX)
+ rv.setViewLayoutMargin(targetId, android.widget.RemoteViews.MARGIN_RIGHT, right.toFloat(), android.util.TypedValue.COMPLEX_UNIT_PX)
+ rv.setViewLayoutMargin(targetId, android.widget.RemoteViews.MARGIN_BOTTOM, bottom.toFloat(), android.util.TypedValue.COMPLEX_UNIT_PX)
+ }
+ }
+ }
+
+ data class SetChecked(
+ val value: Boolean,
+ val layout: Layout
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setCompoundButtonChecked(targetId, value)
+ } else {
+ val drawableRes = when (layout) {
+ Layout.CheckBox -> if (value) R.drawable.ns_checkbox_on else R.drawable.ns_checkbox_off
+ Layout.RadioButton -> if (value) R.drawable.ns_radio_on else R.drawable.ns_radio_off
+ Layout.Switch -> if (value) R.drawable.ns_switch_on else R.drawable.ns_switch_off
+ else -> return
+ }
+ rv.setImageViewResource(targetId, drawableRes)
+ }
+ }
+ }
+
+ data class SetOnCheckAction(
+ val action: String,
+ val extras: android.os.Bundle?,
+ val nodeId: String,
+ val checkedState: Boolean = false,
+ val layout: Layout = Layout.CheckBox
+ ) : Command() {
+ override fun applyTo(rv: android.widget.RemoteViews, targetId: Int) {
+ // no-op — requires context to create PendingIntent
+ }
+
+ override fun applyToWithContext(
+ rv: android.widget.RemoteViews,
+ targetId: Int,
+ context: Context
+ ) {
+ val providerClass = buildProviderClass ?: return
+ val intent = Intent(ACTION_CHECK).apply {
+ component = android.content.ComponentName(context, providerClass)
+ putExtra(EXTRA_CHECK_ACTION, action)
+ if (extras != null) {
+ putExtra(EXTRA_CHECK_EXTRAS, extras)
+ }
+ // Pre-S: embed layout type and widget ID so the receiver
+ // can look up SharedPreferences and update the correct widget
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ putExtra(EXTRA_LAYOUT_TYPE, layout.name)
+ if (buildAppWidgetId != 0) {
+ putExtra(EXTRA_WIDGET_ID, buildAppWidgetId)
+ }
+ }
+ // mark as a check-origin event
+ data = Uri.parse("ns://check/$nodeId/$action")
+ }
+
+ val requestCode = nodeId.hashCode() and 0x7FFFFFFF
+ var flags = PendingIntent.FLAG_UPDATE_CURRENT
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ flags = flags or PendingIntent.FLAG_MUTABLE
+ } else {
+ flags = flags or PendingIntent.FLAG_IMMUTABLE
+ }
+
+ val pi = PendingIntent.getBroadcast(context, requestCode, intent, flags)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ rv.setOnCheckedChangeResponse(
+ targetId,
+ android.widget.RemoteViews.RemoteResponse.fromPendingIntent(pi)
+ )
+ } else {
+ rv.setOnClickPendingIntent(targetId, pi)
+ }
+ }
+ }
+
+ }
+
+ fun resolveRemoteResources() {
+ ensureManager()
+ manager?.resolveRemoteResources()
+ }
+
+ fun build(packageName: String): android.widget.RemoteViews? {
+ ensureManager()
+ return manager?.build(id, packageName)
+ }
+
+ fun build(context: Context, providerClass: String): android.widget.RemoteViews? {
+ ensureManager()
+ return manager?.build(id, context, providerClass)
+ }
+
+ private fun ensureManager() {
+ if (manager == null) {
+ val mgr = RemoteViewsManager()
+ mgr.add(this)
+ }
+ }
+
+ internal fun buildSelf(packageName: String, forCollection: Boolean = false): android.widget.RemoteViews {
+ val viewId = toViewId()
+ val isCollectionItem = forCollection || buildForCollection
+ val rv = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ if(layout == Layout.Root) {
+ // Root layout: use 2-param constructor (it IS the widget root)
+ stableId = viewId
+ android.widget.RemoteViews(packageName, toLayoutId())
+ } else if (isCollectionItem) {
+ // Collection items: use 2-param constructor for proper view recycling
+ stableId = viewId
+ android.widget.RemoteViews(packageName, toLayoutId())
+ } else {
+ // All other views (including AdapterLike): use 3-param constructor with unique ID
+ // This enables multiple ListViews with different IDs
+ stableId = View.generateViewId()
+ android.widget.RemoteViews(packageName, toLayoutId(), stableId!!)
+ }
+
+ } else {
+ stableId = viewId
+ android.widget.RemoteViews(packageName, toLayoutId())
+ }
+ val ctx = buildContext
+
+ // Pre-S: persist checked state to SharedPreferences and sync into onCheck command
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ val checkedCmd = commands["setChecked"] as? Command.SetChecked
+ val checkActionCmd = commands["onCheck"] as? Command.SetOnCheckAction
+ if (checkedCmd != null && checkActionCmd != null) {
+ commands["onCheck"] = checkActionCmd.copy(checkedState = checkedCmd.value)
+ if (ctx != null && buildAppWidgetId != 0) {
+ AppWidgetManager.setCheckedState(ctx, buildAppWidgetId, id, checkedCmd.value)
+ }
+ }
+ }
+
+ // Commands target stableId - which is either the XML viewId (2-param) or generated id (3-param)
+ if (ctx != null) {
+ commands.values.forEach { cmd -> cmd.applyToWithContext(rv, stableId!!, ctx) }
+ } else {
+ commands.values.forEach { cmd -> cmd.applyTo(rv, stableId!!) }
+ }
+ return rv
+ }
+
+ enum class Layout {
+ AdapterViewFlipper,
+ Button,
+ Chronometer,
+ FrameLayout,
+ GridLayout,
+ GridView,
+ ImageButton,
+ ImageView,
+ LinearLayout,
+ HLinearLayout,
+ ListView,
+ ProgressBar,
+ RelativeLayout,
+ StackView,
+ TextView,
+ ViewFlipper,
+ TextClock,
+ VSpacer,
+ VSpacerFixed,
+ HSpacer,
+ HSpacerFixed,
+ Root,
+ CheckBox,
+ RadioButton,
+ Switch
+ }
+
+ fun setBackgroundColor(value: Int): RemoteViews {
+ commands["setBackgroundColor"] = Command.SetBackgroundColor(value)
+ return this
+ }
+
+ fun setVisibility(visibility: Int): RemoteViews {
+ commands["setVisibility"] = Command.SetVisibility(visibility)
+ return this
+ }
+
+ fun setString(method: String, value: String): RemoteViews {
+ commands["setString:$method"] = Command.SetString(method, value)
+ return this
+ }
+
+ fun setByte(method: String, value: Byte): RemoteViews {
+ commands["setByte:$method"] = Command.SetByte(method, value)
+ return this
+ }
+
+ fun setInt(method: String, value: Int): RemoteViews {
+ commands["setInt:$method"] = Command.SetInt(method, value)
+ return this
+ }
+
+ fun setShort(method: String, value: Short): RemoteViews {
+ commands["setShort:$method"] = Command.SetShort(method, value)
+ return this
+ }
+
+ fun setLong(method: String, value: Long): RemoteViews {
+ commands["setLong:$method"] = Command.SetLong(method, value)
+ return this
+ }
+
+ fun setFloat(method: String, value: Float): RemoteViews {
+ commands["setFloat:$method"] = Command.SetFloat(method, value)
+ return this
+ }
+
+ fun setBoolean(method: String, value: Boolean): RemoteViews {
+ commands["setBoolean:$method"] = Command.SetBoolean(method, value)
+ return this
+ }
+
+ fun setWidth(value: Float, unit: Int): RemoteViews {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ widthPx = TypedValue.applyDimension(
+ unit, value, Resources.getSystem().displayMetrics
+ ).toInt()
+ recomputePaddingPreS()
+ } else {
+ commands["setWidth"] = Command.SetWidth(value, unit)
+ }
+ return this
+ }
+
+ fun setHeight(value: Float, unit: Int): RemoteViews {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ heightPx = TypedValue.applyDimension(
+ unit, value, Resources.getSystem().displayMetrics
+ ).toInt()
+ recomputePaddingPreS()
+ } else {
+ commands["setHeight"] = Command.SetHeight(value, unit)
+ }
+ return this
+ }
+
+ fun setSize(width: Float, widthUnit: Int, height: Float, heightUnit: Int): RemoteViews {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ widthPx = TypedValue.applyDimension(
+ widthUnit, width, Resources.getSystem().displayMetrics
+ ).toInt()
+ heightPx = TypedValue.applyDimension(
+ heightUnit, height, Resources.getSystem().displayMetrics
+ ).toInt()
+ recomputePaddingPreS()
+ } else {
+ commands["setSize"] = Command.SetSize(width, widthUnit, height, heightUnit)
+ }
+ return this
+ }
+
+ fun setPadding(value: Int): RemoteViews {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ leftPadding = value
+ topPadding = value
+ rightPadding = value
+ bottomPadding = value
+ recomputePaddingPreS()
+ } else {
+ commands["setPadding"] = Command.SetPadding(value, value, value, value)
+ }
+ return this
+ }
+
+ fun setPadding(
+ left: Int,
+ top: Int,
+ right: Int,
+ bottom: Int
+ ): RemoteViews {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
+ leftPadding = left
+ topPadding = top
+ rightPadding = right
+ bottomPadding = bottom
+ recomputePaddingPreS()
+ } else {
+ commands["setPadding"] = Command.SetPadding(left, top, right, bottom)
+ }
+ return this
+ }
+
+ fun setMargin(value: Int): RemoteViews {
+ commands["setMargin"] = Command.SetMargin(value, value, value, value)
+ return this
+ }
+
+ fun setMargin(
+ left: Int,
+ top: Int,
+ right: Int,
+ bottom: Int
+ ): RemoteViews {
+ commands["setMargin"] = Command.SetMargin(left, top, right, bottom)
+ return this
+ }
+
+ fun setOnClickPendingIntent(intent: PendingIntent): RemoteViews {
+ commands["setOnClickPendingIntent"] = Command.SetOnClickPendingIntent(intent)
+ return this
+ }
+
+ fun setPendingIntentTemplate(intent: PendingIntent): RemoteViews {
+ commands["setPendingIntentTemplate"] = Command.SetPendingIntentTemplate(intent)
+ return this
+ }
+
+ fun setOnClickFillInIntent(intent: Intent): RemoteViews {
+ commands["setOnClickFillInIntent"] = Command.SetOnClickFillInIntent(intent)
+ return this
+ }
+
+ @JvmOverloads
+ fun onClick(action: String, extras: android.os.Bundle? = null): RemoteViews {
+ commands["onClick"] = Command.SetOnClickAction(action, extras, id)
+ return this
+ }
+
+ @JvmOverloads
+ fun onItemClick(action: String, extras: android.os.Bundle? = null): RemoteViews {
+ commands["onItemClick"] = Command.SetOnClickFillInAction(action, extras)
+ return this
+ }
+
+ @JvmOverloads
+ fun onCheck(action: String, extras: android.os.Bundle? = null): RemoteViews {
+ commands["onCheck"] = Command.SetOnCheckAction(action, extras, id, layout = layout)
+ return this
+ }
+
+ open fun toLayoutId(): Int {
+ return when (layout) {
+ Layout.AdapterViewFlipper -> R.layout.ns_remote_views_adapter_view_flipper
+ Layout.Button -> R.layout.ns_remote_views_button
+ Layout.Chronometer -> R.layout.ns_remote_views_chronometer
+ Layout.FrameLayout -> R.layout.ns_remote_views_frame_layout
+ Layout.GridLayout -> R.layout.ns_remote_views_grid_layout
+ Layout.GridView -> R.layout.ns_remote_views_grid_view
+ Layout.ImageButton -> R.layout.ns_remote_views_image_button
+ Layout.ImageView -> R.layout.ns_remote_views_image_view
+ Layout.LinearLayout -> R.layout.ns_remote_views_linear_layout
+ Layout.HLinearLayout -> R.layout.ns_remote_views_linear_layout_horizontal
+ Layout.ListView -> R.layout.ns_remote_views_list_view
+ Layout.ProgressBar -> R.layout.ns_remote_views_progress_bar
+ Layout.RelativeLayout -> R.layout.ns_remote_views_relative_layout
+ Layout.StackView -> R.layout.ns_remote_views_stack_view
+ Layout.TextView -> R.layout.ns_remote_views_text_view
+ Layout.ViewFlipper -> R.layout.ns_remote_views_view_flipper
+ Layout.TextClock -> R.layout.ns_remote_views_text_clock
+ Layout.HSpacer -> R.layout.ns_remote_views_h_spacer
+ Layout.HSpacerFixed -> R.layout.ns_remote_views_h_spacer_fixed
+ Layout.VSpacer -> R.layout.ns_remote_views_v_spacer
+ Layout.VSpacerFixed -> R.layout.ns_remote_views_v_spacer_fixed
+ Layout.Root -> R.layout.ns_remote_views_root_layout
+ Layout.CheckBox -> R.layout.ns_remote_views_checkbox_compat
+ Layout.RadioButton -> R.layout.ns_remote_views_radio_button_compat
+ Layout.Switch -> R.layout.ns_remote_views_switch_compat
+ }
+ }
+
+ open fun toViewId(): Int {
+ return when (layout) {
+ Layout.AdapterViewFlipper -> R.id.ns_remote_view_adapter_view_flipper
+ Layout.Button -> R.id.ns_remote_view_button
+ Layout.Chronometer -> R.id.ns_remote_view_chronometer
+ Layout.FrameLayout -> R.id.ns_remote_view_frame_layout
+ Layout.GridLayout -> R.id.ns_remote_view_grid_layout
+ Layout.GridView -> R.id.ns_remote_view_grid_view
+ Layout.ImageButton -> R.id.ns_remote_view_image_button
+ Layout.ImageView -> R.id.ns_remote_view_image_view
+ Layout.LinearLayout -> R.id.ns_remote_view_linear_layout_vertical
+ Layout.HLinearLayout -> R.id.ns_remote_view_linear_layout_horizontal
+ Layout.ListView -> R.id.ns_remote_view_list_view
+ Layout.ProgressBar -> R.id.ns_remote_view_progress_bar
+ Layout.RelativeLayout -> R.id.ns_remote_view_relative_layout
+ Layout.StackView -> R.id.ns_remote_view_stack_view
+ Layout.TextView -> R.id.ns_remote_view_text_view
+ Layout.ViewFlipper -> R.id.ns_remote_view_flipper
+ Layout.TextClock -> R.id.ns_remote_view_text_clock
+ Layout.HSpacer -> R.id.ns_remote_view_h_spacer
+ Layout.HSpacerFixed -> R.id.ns_remote_view_h_spacer_fixed
+ Layout.VSpacer -> R.id.ns_remote_view_v_spacer
+ Layout.VSpacerFixed -> R.id.ns_remote_view_v_spacer_fixed
+ Layout.Root -> R.id.ns_remote_view_root
+ Layout.CheckBox -> R.id.ns_remote_view_checkbox_compat
+ Layout.RadioButton -> R.id.ns_remote_view_radio_button_compat
+ Layout.Switch -> R.id.ns_remote_view_switch_compat
+ }
+ }
+
+ fun findViewById(id: String): RemoteViews? {
+ return manager?.findViewById(this.id, id)
+ }
+
+ private var widthPx: Int = 0
+ private var heightPx: Int = 0
+
+ private var leftPadding: Int = 0
+ private var topPadding: Int = 0
+ private var rightPadding: Int = 0
+ private var bottomPadding: Int = 0
+
+ private fun recomputePaddingPreS() {
+ commands["setPadding"] = Command.SetPadding(
+ leftPadding,
+ topPadding,
+ rightPadding + widthPx,
+ bottomPadding + heightPx
+ )
+ }
+
+
+ fun getCommands(): MutableMap {
+ return commands
+ }
+
+ class RootLayout(id: String? = null) : RemoteViews(Layout.Root, id), ViewGroupLike
+
+ class AdapterViewFlipper(id: String? = null) : RemoteViews(Layout.AdapterViewFlipper, id),
+ AdapterLike {
+ var autoStart: Boolean = false
+
+ fun setAutoStart(value: Boolean): AdapterViewFlipper {
+ autoStart = value
+ return this
+ }
+
+ override fun toLayoutId(): Int {
+ return if (autoStart) {
+ R.layout.ns_remote_views_adapter_view_flipper_auto
+ } else {
+ R.layout.ns_remote_views_adapter_view_flipper
+ }
+ }
+ }
+
+ class Button(id: String? = null) : RemoteViews(Layout.Button, id), TextLike
+
+ class Chronometer(id: String? = null) : RemoteViews(Layout.Chronometer, id), TextLike {
+ private var base: Long = android.os.SystemClock.elapsedRealtime()
+ private var format: String? = null
+ private var started: Boolean = false
+
+ private fun updateChronometer(): Chronometer {
+ commands["setChronometer"] = Command.SetChronometer(base, format, started)
+ return this
+ }
+
+ fun setBase(base: Long): Chronometer {
+ this.base = base
+ return updateChronometer()
+ }
+
+ // Set base using Unix timestamp (Date.now() style) - converts to elapsedRealtime
+ fun setTargetTime(targetTime: Long): Chronometer {
+ val elapsed = android.os.SystemClock.elapsedRealtime()
+ val now = System.currentTimeMillis()
+ this.base = elapsed + (targetTime - now)
+ return updateChronometer()
+ }
+
+ fun setFormat(format: String): Chronometer {
+ this.format = format
+ return updateChronometer()
+ }
+
+ fun setCountDown(countDown: Boolean): Chronometer {
+ commands["setChronometerCountDown"] = Command.SetChronometerCountDown(countDown)
+ return this
+ }
+
+ fun start(): Chronometer {
+ this.started = true
+ return updateChronometer()
+ }
+
+ fun stop(): Chronometer {
+ this.started = false
+ return updateChronometer()
+ }
+ }
+
+ class FrameLayout(id: String? = null) : RemoteViews(Layout.FrameLayout, id), ViewGroupLike
+
+ class GridLayout(id: String? = null) : RemoteViews(Layout.GridLayout, id), ViewGroupLike
+
+ class GridView(id: String? = null) : RemoteViews(Layout.GridView, id), ViewGroupLike,
+ AdapterLike
+
+ class ImageButton(id: String? = null) : RemoteViews(Layout.ImageButton, id), ImageLike
+
+ class ImageView(id: String? = null) : RemoteViews(Layout.ImageView, id), ImageLike
+
+ class LinearLayout(id: String? = null) : RemoteViews(Layout.LinearLayout, id),
+ ViewGroupLike {
+ var flex: Boolean = false
+
+ fun setFlex(value: Boolean): LinearLayout {
+ flex = value
+ return this
+ }
+
+ override fun toLayoutId(): Int {
+ return if (flex) R.layout.ns_remote_views_linear_layout_vertical_flex else super.toLayoutId()
+ }
+
+ override fun toViewId(): Int {
+ return if (flex) R.id.ns_remote_view_linear_layout_vertical_flex else super.toViewId()
+ }
+ }
+
+ class HLinearLayout(id: String? = null) : RemoteViews(Layout.HLinearLayout, id),
+ ViewGroupLike {
+ var flex: Boolean = false
+
+ fun setFlex(value: Boolean): HLinearLayout {
+ flex = value
+ return this
+ }
+
+ override fun toLayoutId(): Int {
+ return if (flex) R.layout.ns_remote_views_linear_layout_horizontal_flex else super.toLayoutId()
+ }
+
+ override fun toViewId(): Int {
+ return if (flex) R.id.ns_remote_view_linear_layout_horizontal_flex else super.toViewId()
+ }
+ }
+
+ class ListView(id: String? = null) : RemoteViews(Layout.ListView, id), AdapterLike
+
+ class ProgressBar(id: String? = null) : RemoteViews(Layout.ProgressBar, id) {
+ private var indeterminate: Boolean = true
+ private var max: Int = 100
+ private var progress: Int = 0
+ var flex: Boolean = false
+ var fullWidth: Boolean = false
+
+ fun setProgressBar(max: Int, progress: Int, indeterminate: Boolean): ProgressBar {
+ this.max = max
+ this.progress = progress
+ this.indeterminate = indeterminate
+ commands["setProgressBar"] = Command.SetProgressBar(max, progress, indeterminate)
+ return this
+ }
+
+ fun setFlex(value: Boolean): ProgressBar {
+ flex = value
+ return this
+ }
+
+ fun setFullWidth(value: Boolean): ProgressBar {
+ fullWidth = value
+ return this
+ }
+
+ override fun toLayoutId(): Int {
+ return when {
+ indeterminate -> R.layout.ns_remote_views_progress_bar
+ flex -> R.layout.ns_remote_views_progress_bar_determinate_flex
+ fullWidth -> R.layout.ns_remote_views_progress_bar_determinate_full
+ else -> R.layout.ns_remote_views_progress_bar_determinate
+ }
+ }
+
+ override fun toViewId(): Int {
+ return when {
+ indeterminate -> R.id.ns_remote_view_progress_bar
+ flex -> R.id.ns_remote_view_progress_bar_determinate_flex
+ fullWidth -> R.id.ns_remote_view_progress_bar_determinate_full
+ else -> R.id.ns_remote_view_progress_bar_determinate
+ }
+ }
+ }
+
+ class RelativeLayout(id: String? = null) : RemoteViews(Layout.RelativeLayout, id),
+ ViewGroupLike
+
+ class StackView(id: String? = null) : RemoteViews(Layout.StackView, id), ViewGroupLike,
+ AdapterLike
+
+ class TextView(id: String? = null) : RemoteViews(Layout.TextView, id), TextLike
+
+ class ViewFlipper(id: String? = null) : RemoteViews(Layout.ViewFlipper, id), ViewGroupLike
+
+ class TextClock(id: String? = null) : RemoteViews(Layout.TextClock, id), TextLike {
+ fun setFormat12Hour(format: String?): TextClock {
+ if (format != null) {
+ commands["setFormat12Hour"] = Command.SetString("setFormat12Hour", format)
+ }
+ return this
+ }
+
+ fun setFormat24Hour(format: String?): TextClock {
+ if (format != null) {
+ commands["setFormat24Hour"] = Command.SetString("setFormat24Hour", format)
+ }
+ return this
+ }
+
+ fun setTimeZone(timeZone: String?): TextClock {
+ if (timeZone != null) {
+ commands["setTimeZone"] = Command.SetString("setTimeZone", timeZone)
+ }
+ return this
+ }
+ }
+
+ class VSpacer(id: String? = null) : RemoteViews(Layout.VSpacer, id) {
+ var fixed: Boolean = false
+
+ fun setFixed(value: Boolean): VSpacer {
+ fixed = value
+ return this
+ }
+
+ override fun toLayoutId(): Int {
+ return if (fixed) R.layout.ns_remote_views_v_spacer_fixed else super.toLayoutId()
+ }
+
+ override fun toViewId(): Int {
+ return if (fixed) R.id.ns_remote_view_v_spacer_fixed else super.toViewId()
+ }
+ }
+
+ class HSpacer(id: String? = null) : RemoteViews(Layout.HSpacer, id) {
+ var fixed: Boolean = false
+
+ fun setFixed(value: Boolean): HSpacer {
+ fixed = value
+ return this
+ }
+
+ override fun toLayoutId(): Int {
+ return if (fixed) R.layout.ns_remote_views_h_spacer_fixed else super.toLayoutId()
+ }
+
+ override fun toViewId(): Int {
+ return if (fixed) R.id.ns_remote_view_h_spacer_fixed else super.toViewId()
+ }
+ }
+
+
+ class CheckBox(id: String? = null) : RemoteViews(Layout.CheckBox, id), CompoundButtonLike {
+
+ override fun toLayoutId(): Int {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return R.layout.ns_remote_views_checkbox
+ } else {
+ return R.layout.ns_remote_views_checkbox_compat
+ }
+ }
+
+ override fun toViewId(): Int {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return R.id.ns_remote_view_checkbox
+ } else {
+ return R.id.ns_remote_view_checkbox_compat
+ }
+ }
+ }
+
+ class RadioButton(id: String? = null) : RemoteViews(Layout.RadioButton, id), CompoundButtonLike {
+
+ override fun toLayoutId(): Int {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return R.layout.ns_remote_views_radio_button
+ } else {
+ return R.layout.ns_remote_views_radio_button_compat
+ }
+ }
+
+ override fun toViewId(): Int {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return R.id.ns_remote_view_radio_button
+ } else {
+ return R.id.ns_remote_view_radio_button_compat
+ }
+ }
+ }
+
+ class Switch(id: String? = null) : RemoteViews(Layout.Switch, id), CompoundButtonLike {
+
+ override fun toLayoutId(): Int {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return R.layout.ns_remote_views_switch
+ } else {
+ return R.layout.ns_remote_views_switch_compat
+ }
+ }
+
+ override fun toViewId(): Int {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ return R.id.ns_remote_view_switch
+ } else {
+ return R.id.ns_remote_view_switch_compat
+ }
+ }
+ }
+
+ interface TextLike {
+ fun getCommands(): MutableMap
+
+ fun setText(value: String): TextLike {
+ getCommands()["setText"] = Command.SetText(value)
+ return this
+ }
+
+ fun setTextColor(value: Int): TextLike {
+ getCommands()["setTextColor"] = Command.SetTextColor(value)
+ return this
+ }
+
+ fun setTextSize(value: Float, unit: Int): TextLike {
+ getCommands()["setTextSize"] = Command.SetTextSize(value, unit)
+ return this
+ }
+ }
+
+ interface ViewGroupLike {
+ fun addView(child: RemoteViews): ViewGroupLike {
+ val self = this as RemoteViews
+ self.ensureManager()
+ self.manager?.add(child, self.id)
+ return this
+ }
+
+ fun removeView(child: RemoteViews): ViewGroupLike {
+ val self = this as RemoteViews
+ child.id.let { self.manager?.remove(it) }
+ return this
+ }
+ }
+
+ interface AdapterLike {
+ fun getAdapterItems(): MutableList {
+ return (this as RemoteViews).adapterItemsBackingField
+ }
+
+ fun addItem(item: RemoteViews): AdapterLike {
+ getAdapterItems().add(item)
+ return this
+ }
+
+ fun setItems(newItems: List): AdapterLike {
+ val items = getAdapterItems()
+ items.clear()
+ items.addAll(newItems)
+ return this
+ }
+
+ fun getItemCount(): Int = getAdapterItems().size
+
+ fun getEmptyView(): RemoteViews? {
+ return (this as RemoteViews).emptyViewBackingField
+ }
+
+ fun setEmptyView(view: RemoteViews): AdapterLike {
+ (this as RemoteViews).emptyViewBackingField = view
+ return this
+ }
+ }
+
+ interface ImageLike {
+ fun getCommands(): MutableMap
+
+ fun setImageResource(value: Int): ImageLike {
+ getCommands()["setImageResource"] = Command.SetImageResource(value)
+ return this
+ }
+
+ fun setImageURI(value: Uri?): ImageLike {
+ getCommands()["setImageURI"] = Command.SetImageURI(value)
+ return this
+ }
+
+ fun setImageBitmap(value: Bitmap): ImageLike {
+ getCommands()["setImageBitmap"] = Command.SetImageBitmap(value)
+ return this
+ }
+
+ fun setImageUrl(url: String): ImageLike {
+ getCommands()["setImageUrl"] = Command.SetImageUrl(url)
+ return this
+ }
+ }
+
+ interface CompoundButtonLike {
+ fun getCommands(): MutableMap
+
+ val layout: Layout
+
+ fun setChecked(value: Boolean): CompoundButtonLike {
+ getCommands()["setChecked"] = Command.SetChecked(value, layout)
+ return this
+ }
+ }
+}
diff --git a/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViewsListService.kt b/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViewsListService.kt
new file mode 100644
index 0000000..38d7fba
--- /dev/null
+++ b/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViewsListService.kt
@@ -0,0 +1,89 @@
+package org.nativescript.widgets
+
+import android.content.Context
+import android.content.Intent
+import android.widget.RemoteViewsService
+import java.util.concurrent.ConcurrentHashMap
+
+class RemoteViewsListService : RemoteViewsService() {
+
+ data class ListData(
+ val items: List,
+ val viewTypeCount: Int
+ )
+
+ companion object {
+ private const val TAG = "RemoteViewsListService"
+ private val itemsRegistry =
+ ConcurrentHashMap()
+
+ const val EXTRA_KEY = "ns_list_key"
+
+ fun registerItems(key: String, items: List, viewTypeCount: Int) {
+ itemsRegistry[key] = ListData(items, viewTypeCount)
+ }
+
+ fun unregisterItems(key: String) {
+ itemsRegistry.remove(key)
+ }
+
+ fun getListData(key: String): ListData? {
+ val data = itemsRegistry[key]
+ return data
+ }
+
+ fun cleanupKeys(keys: Collection) {
+ for (key in keys) {
+ itemsRegistry.remove(key)
+ }
+ }
+ }
+
+ override fun onGetViewFactory(intent: Intent): RemoteViewsFactory {
+ val key = intent.getStringExtra(EXTRA_KEY) ?: ""
+ return ListRemoteViewsFactory(applicationContext, key)
+ }
+
+ private class ListRemoteViewsFactory(
+ private val context: Context,
+ private val key: String
+ ) : RemoteViewsService.RemoteViewsFactory {
+
+ private var items: List = emptyList()
+ private var viewTypeCount: Int = 1
+
+ override fun onCreate() {
+ val data = itemsRegistry[key]
+ items = data?.items ?: emptyList()
+ viewTypeCount = data?.viewTypeCount ?: 1
+ }
+
+ override fun onDataSetChanged() {
+ val data = itemsRegistry[key]
+ items = data?.items ?: emptyList()
+ viewTypeCount = data?.viewTypeCount ?: 1
+ }
+
+ override fun onDestroy() {
+ }
+
+ override fun getCount(): Int {
+ return items.size
+ }
+
+ override fun getViewAt(position: Int): android.widget.RemoteViews? {
+ if (position < 0 || position >= items.size) return null
+ return items[position]
+ }
+
+ override fun getLoadingView(): android.widget.RemoteViews? = null
+
+ override fun getViewTypeCount(): Int {
+ return viewTypeCount
+ }
+
+ override fun getItemId(position: Int): Long = position.toLong()
+
+ override fun hasStableIds(): Boolean = true
+ }
+}
diff --git a/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViewsManager.kt b/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViewsManager.kt
new file mode 100644
index 0000000..e7f57ed
--- /dev/null
+++ b/packages/widgets/platforms/android/java/org/nativescript/widgets/RemoteViewsManager.kt
@@ -0,0 +1,327 @@
+package org.nativescript.widgets
+
+import android.app.PendingIntent
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+
+class RemoteViewsManager {
+ companion object {
+ private const val TAG = "RemoteViewsManager"
+ }
+
+ private val nodes = mutableMapOf()
+ private val parents = mutableMapOf()
+ private val children = mutableMapOf>()
+ private val registeredServiceKeys = mutableSetOf()
+ internal val adapterViewIds = mutableListOf()
+
+ // Pre-S: cached platform RemoteViews for immediate compound button updates
+ internal var cachedRootRv: android.widget.RemoteViews? = null
+ internal val compoundButtonCache = mutableMapOf()
+
+ // Pending adapter setups to apply to the root RemoteViews
+ private data class PendingAdapter(
+ val viewId: Int,
+ val items: android.widget.RemoteViews.RemoteCollectionItems?,
+ val serviceIntent: Intent?,
+ val pendingIntentTemplate: PendingIntent?
+ )
+ private val pendingAdapters = mutableListOf()
+
+ fun add(node: RemoteViews, parentId: String? = null) {
+ val id = node.id
+ val oldManager = node.manager
+
+ node.manager = this
+ nodes[id] = node
+ parents[id] = parentId
+ children[id] = mutableListOf()
+
+ // register as child of parent
+ parentId?.let { children[it]?.add(id) }
+
+ // migrate children from old manager when re-parenting across managers
+ if (oldManager != null && oldManager !== this) {
+ migrateChildren(oldManager, id)
+ }
+ }
+
+ private fun migrateChildren(oldManager: RemoteViewsManager, parentId: String) {
+ val oldChildren = oldManager.children[parentId] ?: return
+ for (childId in oldChildren) {
+ val childNode = oldManager.nodes[childId] ?: continue
+ childNode.manager = this
+ nodes[childId] = childNode
+ parents[childId] = parentId
+ children[parentId]?.add(childId)
+ children[childId] = mutableListOf()
+ // recursively migrate grandchildren
+ migrateChildren(oldManager, childId)
+ }
+ }
+
+ fun remove(id: String) {
+ // detach from parent
+ parents[id]?.let { parentId ->
+ children[parentId]?.remove(id)
+ }
+ // reparent children to null or could reparent to grandparent
+ children[id]?.forEach { childId ->
+ parents[childId] = null
+ }
+ nodes[id]?.manager = null
+ nodes.remove(id)
+ parents.remove(id)
+ children.remove(id)
+ }
+
+ fun reparent(id: String, newParentId: String?) {
+ // detach from old parent
+ parents[id]?.let { oldParentId ->
+ children[oldParentId]?.remove(id)
+ }
+ // attach to new parent
+ parents[id] = newParentId
+ newParentId?.let { children[it]?.add(id) }
+ }
+
+ fun getById(id: String): RemoteViews? = nodes[id]
+
+ fun findViewById(parentId: String, targetId: String): RemoteViews? {
+ if (parentId == targetId) return nodes[parentId]
+ children[parentId]?.forEach { childId ->
+ if (childId == targetId) return nodes[childId]
+ val found = findViewById(childId, targetId)
+ if (found != null) return found
+ }
+ return null
+ }
+
+ fun getChildren(id: String): List {
+ return children[id]?.mapNotNull { nodes[it] } ?: emptyList()
+ }
+
+ fun getParent(id: String): RemoteViews? {
+ return parents[id]?.let { nodes[it] }
+ }
+
+ fun resolveRemoteResources() {
+ for (node in nodes.values) {
+ val iterator = node.commands.entries.iterator()
+ val resolved = mutableMapOf()
+ while (iterator.hasNext()) {
+ val entry = iterator.next()
+ val cmd = entry.value
+ if (cmd is RemoteViews.Command.SetImageUrl) {
+ val bitmap = cmd.resolve()
+ if (bitmap != null) {
+ resolved[entry.key] = bitmap
+ } else {
+ iterator.remove()
+ }
+ }
+ }
+ node.commands.putAll(resolved)
+ }
+ }
+
+ private fun preBuild() {
+ cleanupServiceKeys()
+ adapterViewIds.clear()
+ pendingAdapters.clear()
+ compoundButtonCache.clear()
+ }
+
+ private fun postBuild(rv: android.widget.RemoteViews): android.widget.RemoteViews {
+ applyPendingAdapters(rv)
+ cachedRootRv = rv
+ return rv
+ }
+
+ fun build(packageName: String): android.widget.RemoteViews? {
+ val rootId = parents.entries.firstOrNull { it.value == null }?.key ?: return null
+ val root = nodes[rootId] ?: return null
+ preBuild()
+ val rv = buildNode(rootId, packageName, root)
+ return postBuild(rv)
+ }
+
+ fun build(rootId: String, packageName: String): android.widget.RemoteViews? {
+ val root = nodes[rootId] ?: return null
+ preBuild()
+ val rv = buildNode(rootId, packageName, root)
+ return postBuild(rv)
+ }
+
+ fun build(context: Context, providerClass: String): android.widget.RemoteViews? {
+ val rootId = parents.entries.firstOrNull { it.value == null }?.key ?: return null
+ val root = nodes[rootId] ?: return null
+ preBuild()
+ RemoteViews.buildContext = context
+ RemoteViews.buildProviderClass = providerClass
+ try {
+ val rv = buildNode(rootId, context.packageName, root)
+ return postBuild(rv)
+ } finally {
+ RemoteViews.buildContext = null
+ RemoteViews.buildProviderClass = null
+ }
+ }
+
+ fun build(rootId: String, context: Context, providerClass: String): android.widget.RemoteViews? {
+ val root = nodes[rootId] ?: return null
+ preBuild()
+ RemoteViews.buildContext = context
+ RemoteViews.buildProviderClass = providerClass
+ try {
+ val rv = buildNode(rootId, context.packageName, root)
+ return postBuild(rv)
+ } finally {
+ RemoteViews.buildContext = null
+ RemoteViews.buildProviderClass = null
+ }
+ }
+
+ private fun applyPendingAdapters(rootRv: android.widget.RemoteViews) {
+ for (pending in pendingAdapters) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && pending.items != null) {
+ rootRv.setRemoteAdapter(pending.viewId, pending.items)
+ } else if (pending.serviceIntent != null) {
+ @Suppress("DEPRECATION")
+ rootRv.setRemoteAdapter(pending.viewId, pending.serviceIntent)
+ }
+ pending.pendingIntentTemplate?.let { pi ->
+ rootRv.setPendingIntentTemplate(pending.viewId, pi)
+ }
+ }
+ pendingAdapters.clear()
+ }
+
+ fun cleanup() {
+ cleanupServiceKeys()
+ }
+
+ private fun cleanupServiceKeys() {
+ if (registeredServiceKeys.isNotEmpty()) {
+ RemoteViewsListService.cleanupKeys(registeredServiceKeys)
+ registeredServiceKeys.clear()
+ }
+ }
+
+ internal fun buildNode(
+ id: String,
+ packageName: String,
+ node: RemoteViews
+ ): android.widget.RemoteViews {
+
+ if (node is RemoteViews.AdapterLike) {
+ val adapterItems = node.getAdapterItems()
+ val emptyView = node.getEmptyView()
+
+ // If no items and an empty view is provided, render the empty view instead
+ if (adapterItems.isEmpty() && emptyView != null) {
+ return emptyView.build(packageName) ?: emptyView.buildSelf(packageName)
+ }
+
+ val rv = node.buildSelf(packageName)
+
+ if (adapterItems.isNotEmpty()) {
+ // Set flag so all nested buildSelf calls use collection-safe mode
+ RemoteViews.buildForCollection = true
+ val builtItems = try {
+ adapterItems.mapIndexed { index, item ->
+ // Use buildNode directly for items with children (NOT build() which clears pendingAdapters!)
+ val built = when {
+ // Item has its own manager with children - build through that manager
+ item.manager != null && item.manager !== this -> {
+ item.manager!!.buildNode(item.id, packageName, item)
+ }
+ // Item is registered in this manager with children - use this buildNode
+ nodes.containsKey(item.id) && children[item.id]?.isNotEmpty() == true -> {
+ buildNode(item.id, packageName, item)
+ }
+ // Simple item without children - just buildSelf
+ else -> {
+ item.buildSelf(packageName)
+ }
+ }
+ built
+ }
+ } finally {
+ RemoteViews.buildForCollection = false
+ }
+
+ val viewTypeCount = builtItems.map { it.layoutId }.distinct().count().coerceAtLeast(1)
+
+ // Build pending intent template if any item has onItemClick
+ var pendingIntentTemplate: PendingIntent? = null
+ val ctx = RemoteViews.buildContext
+ val providerClass = RemoteViews.buildProviderClass
+ if (ctx != null && providerClass != null) {
+ val hasItemClicks = adapterItems.any { it.commands.containsKey("onItemClick") }
+ if (hasItemClicks) {
+ val templateIntent = Intent(RemoteViews.ACTION_CLICK).apply {
+ component = ComponentName(ctx, providerClass)
+ }
+ val flags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
+ pendingIntentTemplate = PendingIntent.getBroadcast(ctx, node.id.hashCode() and 0x7FFFFFFF, templateIntent, flags)
+ }
+ }
+
+ // Queue adapter setup to be applied to root RemoteViews later
+ // (setRemoteAdapter must be called on the widget root, not on the ListView itself)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ val builder = android.widget.RemoteViews.RemoteCollectionItems.Builder()
+ builtItems.forEachIndexed { index, itemRv ->
+ builder.addItem(index.toLong(), itemRv)
+ }
+ builder.setViewTypeCount(viewTypeCount)
+ builder.setHasStableIds(true)
+ val collectionItems = builder.build()
+ pendingAdapters.add(PendingAdapter(node.stableId!!, collectionItems, null, pendingIntentTemplate))
+ } else {
+ val key = "${packageName}_${node.id}"
+ RemoteViewsListService.registerItems(key, builtItems, viewTypeCount)
+ registeredServiceKeys.add(key)
+
+ val intent = Intent().apply {
+ component = ComponentName(
+ packageName,
+ "org.nativescript.widgets.RemoteViewsListService"
+ )
+ putExtra(RemoteViewsListService.EXTRA_KEY, key)
+ data = Uri.parse("ns://list/${node.id}")
+ }
+ pendingAdapters.add(PendingAdapter(node.stableId!!, null, intent, pendingIntentTemplate))
+ }
+
+ adapterViewIds.add(node.stableId!!)
+ }
+ return rv
+ }
+
+ val rv = node.buildSelf(packageName)
+
+ // Pre-S: cache compound button RVs for immediate checked drawable updates
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S && node is RemoteViews.CompoundButtonLike) {
+ compoundButtonCache[id] = rv
+ }
+
+ val childIds = children[id]
+ if (!childIds.isNullOrEmpty()) {
+ // Clear existing children before adding new ones.
+ // This is essential for collection items where Android reuses views
+ // via reapply(), which would otherwise accumulate stale children.
+ rv.removeAllViews(node.stableId!!)
+ childIds.forEach { childId ->
+ val childNode = nodes[childId] ?: return@forEach
+ val childRv = buildNode(childId, packageName, childNode)
+ rv.addView(node.stableId!!, childRv)
+ }
+ }
+ return rv
+ }
+}
diff --git a/packages/widgets/platforms/android/res/drawable/ns_checkbox_off.xml b/packages/widgets/platforms/android/res/drawable/ns_checkbox_off.xml
new file mode 100644
index 0000000..473f77e
--- /dev/null
+++ b/packages/widgets/platforms/android/res/drawable/ns_checkbox_off.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/drawable/ns_checkbox_on.xml b/packages/widgets/platforms/android/res/drawable/ns_checkbox_on.xml
new file mode 100644
index 0000000..5e07fda
--- /dev/null
+++ b/packages/widgets/platforms/android/res/drawable/ns_checkbox_on.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/drawable/ns_radio_off.xml b/packages/widgets/platforms/android/res/drawable/ns_radio_off.xml
new file mode 100644
index 0000000..93a805d
--- /dev/null
+++ b/packages/widgets/platforms/android/res/drawable/ns_radio_off.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/drawable/ns_radio_on.xml b/packages/widgets/platforms/android/res/drawable/ns_radio_on.xml
new file mode 100644
index 0000000..dc7c543
--- /dev/null
+++ b/packages/widgets/platforms/android/res/drawable/ns_radio_on.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/drawable/ns_switch_off.xml b/packages/widgets/platforms/android/res/drawable/ns_switch_off.xml
new file mode 100644
index 0000000..c1bb9d8
--- /dev/null
+++ b/packages/widgets/platforms/android/res/drawable/ns_switch_off.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/drawable/ns_switch_on.xml b/packages/widgets/platforms/android/res/drawable/ns_switch_on.xml
new file mode 100644
index 0000000..e45bc48
--- /dev/null
+++ b/packages/widgets/platforms/android/res/drawable/ns_switch_on.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_adapter_view_flipper.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_adapter_view_flipper.xml
new file mode 100644
index 0000000..14cf5fb
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_adapter_view_flipper.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_adapter_view_flipper_auto.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_adapter_view_flipper_auto.xml
new file mode 100644
index 0000000..c29e52e
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_adapter_view_flipper_auto.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_button.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_button.xml
new file mode 100644
index 0000000..a8f7d75
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_button.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_checkbox.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_checkbox.xml
new file mode 100644
index 0000000..bc6300a
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_checkbox.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_checkbox_compat.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_checkbox_compat.xml
new file mode 100644
index 0000000..908eb33
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_checkbox_compat.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_chronometer.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_chronometer.xml
new file mode 100644
index 0000000..e97bcee
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_chronometer.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_frame_layout.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_frame_layout.xml
new file mode 100644
index 0000000..5ae55e5
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_frame_layout.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_grid_layout.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_grid_layout.xml
new file mode 100644
index 0000000..5d16223
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_grid_layout.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_grid_view.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_grid_view.xml
new file mode 100644
index 0000000..1931461
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_grid_view.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_h_spacer.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_h_spacer.xml
new file mode 100644
index 0000000..daf777d
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_h_spacer.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_h_spacer_fixed.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_h_spacer_fixed.xml
new file mode 100644
index 0000000..87905c6
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_h_spacer_fixed.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_image_button.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_image_button.xml
new file mode 100644
index 0000000..289de64
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_image_button.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_image_view.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_image_view.xml
new file mode 100644
index 0000000..f169106
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_image_view.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout.xml
new file mode 100644
index 0000000..47b8b94
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_horizontal.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_horizontal.xml
new file mode 100644
index 0000000..4b6f9cd
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_horizontal.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_horizontal_flex.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_horizontal_flex.xml
new file mode 100644
index 0000000..8ec84f1
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_horizontal_flex.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_vertical_flex.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_vertical_flex.xml
new file mode 100644
index 0000000..aeb1d3a
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_linear_layout_vertical_flex.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_list_view.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_list_view.xml
new file mode 100644
index 0000000..6886855
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_list_view.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar.xml
new file mode 100644
index 0000000..bce6e8e
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate.xml
new file mode 100644
index 0000000..ef5854f
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate_flex.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate_flex.xml
new file mode 100644
index 0000000..8a656ec
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate_flex.xml
@@ -0,0 +1,7 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate_full.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate_full.xml
new file mode 100644
index 0000000..0502976
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_progress_bar_determinate_full.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_radio_button.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_radio_button.xml
new file mode 100644
index 0000000..06ef88d
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_radio_button.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_radio_button_compat.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_radio_button_compat.xml
new file mode 100644
index 0000000..7f98530
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_radio_button_compat.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_relative_layout.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_relative_layout.xml
new file mode 100644
index 0000000..1274ffe
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_relative_layout.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_root_layout.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_root_layout.xml
new file mode 100644
index 0000000..74cea74
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_root_layout.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_stack_view.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_stack_view.xml
new file mode 100644
index 0000000..7b90850
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_stack_view.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_switch.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_switch.xml
new file mode 100644
index 0000000..d04e480
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_switch.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_switch_compat.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_switch_compat.xml
new file mode 100644
index 0000000..78dc331
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_switch_compat.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_text_clock.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_text_clock.xml
new file mode 100644
index 0000000..cc5deb7
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_text_clock.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_text_view.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_text_view.xml
new file mode 100644
index 0000000..32e2138
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_text_view.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_v_spacer.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_v_spacer.xml
new file mode 100644
index 0000000..017a602
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_v_spacer.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_v_spacer_fixed.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_v_spacer_fixed.xml
new file mode 100644
index 0000000..44f1063
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_v_spacer_fixed.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/packages/widgets/platforms/android/res/layout/ns_remote_views_view_flipper.xml b/packages/widgets/platforms/android/res/layout/ns_remote_views_view_flipper.xml
new file mode 100644
index 0000000..8769ba4
--- /dev/null
+++ b/packages/widgets/platforms/android/res/layout/ns_remote_views_view_flipper.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/widgets/platforms/android/res/values/ids.xml b/packages/widgets/platforms/android/res/values/ids.xml
new file mode 100644
index 0000000..4299835
--- /dev/null
+++ b/packages/widgets/platforms/android/res/values/ids.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/widgets/project.json b/packages/widgets/project.json
new file mode 100644
index 0000000..62e535a
--- /dev/null
+++ b/packages/widgets/project.json
@@ -0,0 +1,65 @@
+{
+ "name": "widgets",
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "projectType": "library",
+ "sourceRoot": "packages/widgets",
+ "targets": {
+ "build": {
+ "executor": "@nx/js:tsc",
+ "options": {
+ "outputPath": "dist/packages/widgets",
+ "tsConfig": "packages/widgets/tsconfig.json",
+ "packageJson": "packages/widgets/package.json",
+ "main": "packages/widgets/index.d.ts",
+ "assets": [
+ "packages/widgets/*.md",
+ "packages/widgets/index.d.ts",
+ "LICENSE",
+ {
+ "glob": "**/*",
+ "input": "packages/widgets/platforms/",
+ "output": "./platforms/"
+ }
+ ],
+ "dependsOn": [
+ {
+ "target": "build.all",
+ "projects": "dependencies"
+ }
+ ]
+ }
+ },
+ "build.all": {
+ "executor": "nx:run-commands",
+ "options": {
+ "commands": ["node tools/scripts/build-finish.ts widgets"],
+ "parallel": false
+ },
+ "outputs": ["{workspaceRoot}/dist/packages/widgets"],
+ "dependsOn": [
+ {
+ "target": "build.all",
+ "projects": "dependencies"
+ },
+ {
+ "target": "build",
+ "projects": "self"
+ }
+ ]
+ },
+ "focus": {
+ "executor": "nx:run-commands",
+ "options": {
+ "commands": ["nx g @nativescript/plugin-tools:focus-packages widgets"],
+ "parallel": false
+ }
+ },
+ "lint": {
+ "executor": "@nx/eslint:eslint",
+ "options": {
+ "lintFilePatterns": ["packages/widgets/**/*.ts"]
+ }
+ }
+ },
+ "tags": []
+}
diff --git a/packages/widgets/references.d.ts b/packages/widgets/references.d.ts
new file mode 100644
index 0000000..22bac92
--- /dev/null
+++ b/packages/widgets/references.d.ts
@@ -0,0 +1 @@
+///
diff --git a/packages/widgets/tsconfig.json b/packages/widgets/tsconfig.json
new file mode 100644
index 0000000..aed7323
--- /dev/null
+++ b/packages/widgets/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../../dist/out-tsc",
+ "rootDir": "."
+ },
+ "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
+ "include": ["**/*.ts", "references.d.ts"]
+}
diff --git a/packages/widgets/typings/org.nativescript.widgets.d.ts b/packages/widgets/typings/org.nativescript.widgets.d.ts
new file mode 100644
index 0000000..737f6ed
--- /dev/null
+++ b/packages/widgets/typings/org.nativescript.widgets.d.ts
@@ -0,0 +1,892 @@
+declare module org {
+ export module nativescript {
+ export module widgets {
+ export class AppWidgetManager {
+ public static class: java.lang.Class;
+ public static INSTANCE: org.nativescript.widgets.AppWidgetManager;
+ public getManager(provider: string): org.nativescript.widgets.RemoteViewsManager;
+ public register(providerClass: string, listener: org.nativescript.widgets.AppWidgetManager.WidgetListener): void;
+ public unregister(providerClass: string): void;
+ public updateAppWidget(context: globalAndroid.content.Context, provider: string, root: org.nativescript.widgets.RemoteViews): void;
+ public updateAppWidget(context: globalAndroid.content.Context, provider: string, widgetId: number, root: org.nativescript.widgets.RemoteViews): void;
+ public updateAppWidget(context: globalAndroid.content.Context, provider: string, widgetIds: androidNative.Array, root: org.nativescript.widgets.RemoteViews): void;
+
+ public notifyDataChanged(context: globalAndroid.content.Context, provider: string, viewId: number): void;
+ public notifyDataChanged(context: globalAndroid.content.Context, widgetId: number, viewId: number): void;
+ }
+ export module AppWidgetManager {
+ export class WidgetListener {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the org.nativescript.widgets.AppWidgetManager$WidgetListener interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ onEnabled?(provider: string): void;
+ onUpdate?(context: globalAndroid.content.Context, provider: string, appWidgetIds: androidNative.Array, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ onUpdateAsync?(context: globalAndroid.content.Context, provider: string, appWidgetIds: androidNative.Array, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ onDisabled?(provider: string): void;
+ onDeleted?(provider: string, appWidgetIds: androidNative.Array): void;
+ onOptionsChanged?(context: globalAndroid.content.Context, provider: string, appWidgetId: number, newOptions: globalAndroid.os.Bundle, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ onAction?(context: globalAndroid.content.Context, provider: string, action: string, extras: globalAndroid.os.Bundle): void;
+ });
+ public constructor();
+ public onEnabled(provider: string): void;
+ public onUpdate(context: globalAndroid.content.Context, provider: string, appWidgetIds: androidNative.Array, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ public onDisabled(provider: string): void;
+ public onDeleted(provider: string, appWidgetIds: androidNative.Array): void;
+ public onUpdateAsync(context: globalAndroid.content.Context, provider: string, appWidgetIds: androidNative.Array, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ public onAction(context: globalAndroid.content.Context, provider: string, action: string, extras: globalAndroid.os.Bundle): void;
+ public onOptionsChanged(context: globalAndroid.content.Context, provider: string, appWidgetId: number, newOptions: globalAndroid.os.Bundle, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ }
+ export module WidgetListener {
+ export class DefaultImpls {
+ public static class: java.lang.Class;
+ /** @deprecated */
+ public static onOptionsChanged($this: org.nativescript.widgets.AppWidgetManager.WidgetListener, context: globalAndroid.content.Context, provider: string, appWidgetId: number, newOptions: globalAndroid.os.Bundle, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ /** @deprecated */
+ public static onUpdateAsync($this: org.nativescript.widgets.AppWidgetManager.WidgetListener, context: globalAndroid.content.Context, provider: string, appWidgetIds: androidNative.Array, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ /** @deprecated */
+ public static onEnabled($this: org.nativescript.widgets.AppWidgetManager.WidgetListener, provider: string): void;
+ /** @deprecated */
+ public static onDisabled($this: org.nativescript.widgets.AppWidgetManager.WidgetListener, provider: string): void;
+ /** @deprecated */
+ public static onUpdate($this: org.nativescript.widgets.AppWidgetManager.WidgetListener, context: globalAndroid.content.Context, provider: string, appWidgetIds: androidNative.Array, manager: org.nativescript.widgets.RemoteViewsManager, widgetManager: globalAndroid.appwidget.AppWidgetManager): void;
+ /** @deprecated */
+ public static onDeleted($this: org.nativescript.widgets.AppWidgetManager.WidgetListener, provider: string, appWidgetIds: androidNative.Array): void;
+ }
+ }
+ }
+ }
+ }
+}
+
+declare module org {
+ export module nativescript {
+ export module widgets {
+ export class AppWidgetProvider {
+ public static class: java.lang.Class;
+ public onDisabled(context: globalAndroid.content.Context): void;
+ public onEnabled($this$iv: globalAndroid.content.Context): void;
+ public onUpdate(request$iv: globalAndroid.content.Context, this_$iv: globalAndroid.appwidget.AppWidgetManager, context$iv: androidNative.Array): void;
+ public onDeleted(it: globalAndroid.content.Context, this_: androidNative.Array): void;
+ public onAppWidgetOptionsChanged(manager: globalAndroid.content.Context, it: globalAndroid.appwidget.AppWidgetManager, ctx: number, this_: globalAndroid.os.Bundle): void;
+ public constructor();
+ }
+ export module AppWidgetProvider {
+ export class WidgetWorker extends org.nativescript.widgets.AppWidgetWorker {
+ public static class: java.lang.Class;
+ public constructor(context: globalAndroid.content.Context, params: androidx.work.WorkerParameters);
+ public doWork(): androidx.work.ListenableWorker.Result;
+ }
+ }
+ }
+ }
+}
+
+declare module org {
+ export module nativescript {
+ export module widgets {
+ export abstract class AppWidgetWorker {
+ public static class: java.lang.Class;
+ public static KEY_WIDGET_IDS: string = 'widget_ids';
+ public static KEY_PROVIDER: string = 'provider';
+ public getWidgetIds(): androidNative.Array;
+ public static enqueue(context: globalAndroid.content.Context, workerClass: java.lang.Class, provider: string, widgetIds: androidNative.Array): void;
+ public updateWidget(this_: number, widgetId: globalAndroid.widget.RemoteViews): void;
+ public updateWidget(widgetId: number, root: org.nativescript.widgets.RemoteViews): void;
+ public static enqueuePeriodic(context: globalAndroid.content.Context, workerClass: java.lang.Class, provider: string, widgetIds: androidNative.Array, repeatIntervalMinutes: number): void;
+ public updateWidgets(mgr: globalAndroid.widget.RemoteViews): void;
+ public updateWidgets(root: org.nativescript.widgets.RemoteViews): void;
+ public getProvider(): string;
+ public static cancelPeriodic(context: globalAndroid.content.Context, provider: string): void;
+ public static buildData(provider: string, widgetIds: androidNative.Array): androidx.work.Data;
+ public static enqueuePeriodic(context: globalAndroid.content.Context, workerClass: java.lang.Class, provider: string, widgetIds: androidNative.Array): void;
+ public static cancelPeriodic(context: globalAndroid.content.Context, provider: string, uniqueWorkName: string): void;
+ public constructor(context: globalAndroid.content.Context, params: androidx.work.WorkerParameters);
+ public static enqueuePeriodic(context: globalAndroid.content.Context, workerClass: java.lang.Class, provider: string, widgetIds: androidNative.Array, repeatIntervalMinutes: number, uniqueWorkName: string): void;
+ public static isScheduled(context: globalAndroid.content.Context, provider: string): boolean;
+ }
+ export module AppWidgetWorker {
+ export class Companion {
+ public static class: java.lang.Class;
+ public enqueuePeriodic(this_: globalAndroid.content.Context, context: java.lang.Class, workerClass: string, provider: androidNative.Array, widgetIds: number, repeatIntervalMinutes: string): void;
+ public buildData(provider: string, widgetIds: androidNative.Array): androidx.work.Data;
+ public isScheduled(it: globalAndroid.content.Context, element$iv: string): boolean;
+ public enqueuePeriodic(context: globalAndroid.content.Context, workerClass: java.lang.Class, provider: string, widgetIds: androidNative.Array, repeatIntervalMinutes: number): void;
+ public cancelPeriodic(context: globalAndroid.content.Context, provider: string): void;
+ public cancelPeriodic(context: globalAndroid.content.Context, provider: string, uniqueWorkName: string): void;
+ public enqueue(now: globalAndroid.content.Context, last: java.lang.Class, request: string, this_: androidNative.Array): void;
+ public enqueuePeriodic(context: globalAndroid.content.Context, workerClass: java.lang.Class, provider: string, widgetIds: androidNative.Array): void;
+ }
+ }
+ }
+ }
+}
+
+declare module org {
+ export module nativescript {
+ export module widgets {
+ export class RemoteViews {
+ public static class: java.lang.Class;
+ public getId(): string;
+ public setShort(method: string, value: number): org.nativescript.widgets.RemoteViews;
+ public setBoolean(method: string, value: boolean): org.nativescript.widgets.RemoteViews;
+ public setLong(method: string, value: number): org.nativescript.widgets.RemoteViews;
+ public setInt(method: string, value: number): org.nativescript.widgets.RemoteViews;
+ public setOnClickPendingIntent(intent: globalAndroid.app.PendingIntent): org.nativescript.widgets.RemoteViews;
+ public setPendingIntentTemplate(intent: globalAndroid.app.PendingIntent): org.nativescript.widgets.RemoteViews;
+ public setOnClickFillInIntent(intent: globalAndroid.content.Intent): org.nativescript.widgets.RemoteViews;
+ public onClick(action: string, extras: globalAndroid.os.Bundle): org.nativescript.widgets.RemoteViews;
+ public onCheck(action: string, extras: globalAndroid.os.Bundle): org.nativescript.widgets.RemoteViews;
+ public onItemClick(action: string, extras: globalAndroid.os.Bundle): org.nativescript.widgets.RemoteViews;
+ public build(context: globalAndroid.content.Context, providerClass: string): globalAndroid.widget.RemoteViews;
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public getCommands(): java.util.Map;
+ public setBackgroundColor(value: number): org.nativescript.widgets.RemoteViews;
+ public setString(method: string, value: string): org.nativescript.widgets.RemoteViews;
+ public setFloat(method: string, value: number): org.nativescript.widgets.RemoteViews;
+ public setByte(method: string, value: number): org.nativescript.widgets.RemoteViews;
+ public setSize(width: number, widthUnit: number, height: number, heightUnit: number): org.nativescript.widgets.RemoteViews;
+ public findViewById(id: string): org.nativescript.widgets.RemoteViews;
+ public build(packageName: string): globalAndroid.widget.RemoteViews;
+ public getLayout(): org.nativescript.widgets.RemoteViews.Layout;
+ public setHeight(value: number, unit: number): org.nativescript.widgets.RemoteViews;
+ public resolveRemoteResources(): void;
+ public toLayoutId(): number;
+ public setVisibility(visibility: number): org.nativescript.widgets.RemoteViews;
+ public setWidth(value: number, unit: number): org.nativescript.widgets.RemoteViews;
+ public setPadding(value: number): org.nativescript.widgets.RemoteViews;
+ public setPadding(left: number, top: number, right: number, bottom: number): org.nativescript.widgets.RemoteViews;
+ public setMargin(value: number): org.nativescript.widgets.RemoteViews;
+ public setMargin(left: number, top: number, right: number, bottom: number): org.nativescript.widgets.RemoteViews;
+ }
+ export module RemoteViews {
+ export class AdapterViewFlipper extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.AdapterLike {
+ public static class: java.lang.Class;
+ public autoStart: boolean;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public constructor(id: string);
+ public addItem(item: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public setItems(items: java.util.List): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getItemCount(): number;
+ public getAdapterItems(): java.util.List;
+ public setEmptyView(view: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getEmptyView(): org.nativescript.widgets.RemoteViews;
+ public setAutoStart(value: boolean): org.nativescript.widgets.RemoteViews.AdapterViewFlipper;
+ }
+ export class Button extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.TextLike {
+ public static class: java.lang.Class;
+ public getCommands(): java.util.Map;
+ public constructor();
+ public setText(value: string): org.nativescript.widgets.RemoteViews.TextLike;
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public constructor(id: string);
+ public setTextColor(value: number): org.nativescript.widgets.RemoteViews.TextLike;
+ public setTextSize(value: number, unit: number): org.nativescript.widgets.RemoteViews.TextLike;
+ }
+ export class Chronometer extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.TextLike {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public constructor(id: string);
+ public getCommands(): java.util.Map;
+ public setText(value: string): org.nativescript.widgets.RemoteViews.TextLike;
+ public setTextColor(value: number): org.nativescript.widgets.RemoteViews.TextLike;
+ public setTextSize(value: number, unit: number): org.nativescript.widgets.RemoteViews.TextLike;
+ public setBase(base: number): org.nativescript.widgets.RemoteViews.Chronometer;
+ public setTargetTime(targetTime: number): org.nativescript.widgets.RemoteViews.Chronometer;
+ public setFormat(format: string): org.nativescript.widgets.RemoteViews.Chronometer;
+ public setCountDown(countDown: boolean): org.nativescript.widgets.RemoteViews.Chronometer;
+ public start(): org.nativescript.widgets.RemoteViews.Chronometer;
+ public stop(): org.nativescript.widgets.RemoteViews.Chronometer;
+ }
+ export abstract class Command {
+ public static class: java.lang.Class;
+ public applyToWithContext(rv: globalAndroid.widget.RemoteViews, targetId: number, context: globalAndroid.content.Context): void;
+ public applyTo(param0: globalAndroid.widget.RemoteViews, param1: number): void;
+ }
+ export module Command {
+ export class SetBackgroundColor extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public constructor(value: number);
+ public component1(): number;
+ public copy(value: number): org.nativescript.widgets.RemoteViews.Command.SetBackgroundColor;
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetBoolean extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public copy(method: string, value: boolean): org.nativescript.widgets.RemoteViews.Command.SetBoolean;
+ public component2(): boolean;
+ public constructor(method: string, value: boolean);
+ public getValue(): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public hashCode(): number;
+ public getMethod(): string;
+ public toString(): string;
+ }
+ export class SetByte extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component2(): number;
+ public equals(other: any): boolean;
+ public copy(method: string, value: number): org.nativescript.widgets.RemoteViews.Command.SetByte;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public hashCode(): number;
+ public getMethod(): string;
+ public constructor(method: string, value: number);
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetFloat extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component2(): number;
+ public copy(method: string, value: number): org.nativescript.widgets.RemoteViews.Command.SetFloat;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public hashCode(): number;
+ public getMethod(): string;
+ public constructor(method: string, value: number);
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetHeight extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public constructor(value: number, unit: number);
+ public component2(): number;
+ public equals(other: any): boolean;
+ public copy(value: number, unit: number): org.nativescript.widgets.RemoteViews.Command.SetHeight;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public getUnit(): number;
+ public hashCode(): number;
+ public component1(): number;
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetHeightDimen extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component3(): string;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public toString(): string;
+ public constructor(value: number, resource: string, packageName: string);
+ public getPackageName(): string;
+ public component2(): string;
+ public copy(value: number, resource: string, packageName: string): org.nativescript.widgets.RemoteViews.Command.SetHeightDimen;
+ public applyToWithContext(this_: globalAndroid.widget.RemoteViews, rv: number, targetId: globalAndroid.content.Context): void;
+ public component1(): number;
+ public getResource(): string;
+ public getValue(): number;
+ }
+ export class SetImageBitmap extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public constructor(value: globalAndroid.graphics.Bitmap);
+ public equals(other: any): boolean;
+ public getValue(): globalAndroid.graphics.Bitmap;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public copy(value: globalAndroid.graphics.Bitmap): org.nativescript.widgets.RemoteViews.Command.SetImageBitmap;
+ public hashCode(): number;
+ public component1(): globalAndroid.graphics.Bitmap;
+ public toString(): string;
+ }
+ export class SetImageResource extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public constructor(resId: number);
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public getResId(): number;
+ public component1(): number;
+ public copy(resId: number): org.nativescript.widgets.RemoteViews.Command.SetImageResource;
+ public toString(): string;
+ }
+ export class SetImageURI extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public copy(value: globalAndroid.net.Uri): org.nativescript.widgets.RemoteViews.Command.SetImageURI;
+ public equals(other: any): boolean;
+ public constructor(value: globalAndroid.net.Uri);
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public getValue(): globalAndroid.net.Uri;
+ public component1(): globalAndroid.net.Uri;
+ public toString(): string;
+ }
+ export class SetImageUrl extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public copy(url: string): org.nativescript.widgets.RemoteViews.Command.SetImageUrl;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public resolve(): org.nativescript.widgets.RemoteViews.Command.SetImageBitmap;
+ public component1(): string;
+ public hashCode(): number;
+ public constructor(url: string);
+ public getUrl(): string;
+ public toString(): string;
+ }
+ export class SetInt extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component2(): number;
+ public copy(method: string, value: number): org.nativescript.widgets.RemoteViews.Command.SetInt;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public hashCode(): number;
+ public getMethod(): string;
+ public constructor(method: string, value: number);
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetLong extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component2(): number;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public hashCode(): number;
+ public getMethod(): string;
+ public copy(method: string, value: number): org.nativescript.widgets.RemoteViews.Command.SetLong;
+ public constructor(method: string, value: number);
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetOnClickPendingIntent extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public applyToWithContext(rv: globalAndroid.widget.RemoteViews, targetId: number, context: globalAndroid.content.Context): void;
+ public constructor(intent: globalAndroid.app.PendingIntent);
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public getIntent(): globalAndroid.app.PendingIntent;
+ public copy(intent: globalAndroid.app.PendingIntent): org.nativescript.widgets.RemoteViews.Command.SetOnClickPendingIntent;
+ public toString(): string;
+ public component1(): globalAndroid.app.PendingIntent;
+ }
+ export class SetShort extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component2(): number;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public copy(method: string, value: number): org.nativescript.widgets.RemoteViews.Command.SetShort;
+ public hashCode(): number;
+ public getMethod(): string;
+ public constructor(method: string, value: number);
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetSize extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public getWidthUnit(): number;
+ public equals(other: any): boolean;
+ public getHeightUnit(): number;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public copy(width: number, widthUnit: number, height: number, heightUnit: number): org.nativescript.widgets.RemoteViews.Command.SetSize;
+ public getHeight(): number;
+ public component4(): number;
+ public toString(): string;
+ public component2(): number;
+ public constructor(width: number, widthUnit: number, height: number, heightUnit: number);
+ public getWidth(): number;
+ public component1(): number;
+ public component3(): number;
+ }
+ export class SetSizeDimen extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component3(): string;
+ public equals(other: any): boolean;
+ public component5(): string;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public copy(width: number, widthResource: string, widthPackageName: string, height: number, heightResource: string, heightPackageName: string): org.nativescript.widgets.RemoteViews.Command.SetSizeDimen;
+ public getHeight(): number;
+ public applyToWithContext(heightRes: globalAndroid.widget.RemoteViews, this_: number, rv: globalAndroid.content.Context): void;
+ public getWidthResource(): string;
+ public component4(): number;
+ public toString(): string;
+ public getHeightResource(): string;
+ public constructor(width: number, widthResource: string, widthPackageName: string, height: number, heightResource: string, heightPackageName: string);
+ public getWidth(): number;
+ public component2(): string;
+ public getWidthPackageName(): string;
+ public component6(): string;
+ public getHeightPackageName(): string;
+ public component1(): number;
+ }
+ export class SetString extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public constructor(method: string, value: string);
+ public component2(): string;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public hashCode(): number;
+ public getMethod(): string;
+ public copy(method: string, value: string): org.nativescript.widgets.RemoteViews.Command.SetString;
+ public getValue(): string;
+ public toString(): string;
+ }
+ export class SetText extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public copy(value: string): org.nativescript.widgets.RemoteViews.Command.SetText;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public component1(): string;
+ public hashCode(): number;
+ public constructor(value: string);
+ public getValue(): string;
+ public toString(): string;
+ }
+ export class SetTextColor extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public copy(value: number): org.nativescript.widgets.RemoteViews.Command.SetTextColor;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public constructor(value: number);
+ public component1(): number;
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetVisibility extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public equals(other: any): boolean;
+ public getVisibility(): number;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public constructor(visibility: number);
+ public component1(): number;
+ public copy(visibility: number): org.nativescript.widgets.RemoteViews.Command.SetVisibility;
+ public toString(): string;
+ }
+ export class SetWidth extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public constructor(value: number, unit: number);
+ public component2(): number;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public getUnit(): number;
+ public copy(value: number, unit: number): org.nativescript.widgets.RemoteViews.Command.SetWidth;
+ public hashCode(): number;
+ public component1(): number;
+ public toString(): string;
+ public getValue(): number;
+ }
+ export class SetWidthDimen extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public component3(): string;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public copy(value: number, resource: string, packageName: string): org.nativescript.widgets.RemoteViews.Command.SetWidthDimen;
+ public toString(): string;
+ public constructor(value: number, resource: string, packageName: string);
+ public getPackageName(): string;
+ public component2(): string;
+ public applyToWithContext(this_: globalAndroid.widget.RemoteViews, rv: number, targetId: globalAndroid.content.Context): void;
+ public component1(): number;
+ public getResource(): string;
+ public getValue(): number;
+ }
+
+ export class SetChecked extends org.nativescript.widgets.RemoteViews.Command {
+ public static class: java.lang.Class;
+ public copy(value: boolean): org.nativescript.widgets.RemoteViews.Command.SetChecked;
+ public equals(other: any): boolean;
+ public applyTo(rv: globalAndroid.widget.RemoteViews, targetId: number): void;
+ public hashCode(): number;
+ public constructor(value: boolean);
+ public component1(): boolean;
+ public toString(): string;
+ public getValue(): boolean;
+ }
+ }
+ export class Companion {
+ public static class: java.lang.Class;
+ public generateId(): string;
+ }
+ export class FrameLayout extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ }
+ export class GridLayout extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ }
+ export class GridView extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike, org.nativescript.widgets.RemoteViews.AdapterLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ public addItem(item: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public setItems(items: java.util.List): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getItemCount(): number;
+ public getAdapterItems(): java.util.List;
+ public setEmptyView(view: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getEmptyView(): org.nativescript.widgets.RemoteViews;
+ }
+ export class ImageButton extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ImageLike {
+ public static class: java.lang.Class;
+ public getCommands(): java.util.Map;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public setImageUrl(url: string): org.nativescript.widgets.RemoteViews.ImageLike;
+ public setImageResource(value: number): org.nativescript.widgets.RemoteViews.ImageLike;
+ public constructor(id: string);
+ public setImageURI(value: globalAndroid.net.Uri): org.nativescript.widgets.RemoteViews.ImageLike;
+ public setImageBitmap(value: globalAndroid.graphics.Bitmap): org.nativescript.widgets.RemoteViews.ImageLike;
+ }
+ export class ImageLike {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the org.nativescript.widgets.RemoteViews$ImageLike interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: {
+ getCommands(): java.util.Map;
+ setImageResource(value: number): org.nativescript.widgets.RemoteViews.ImageLike;
+ setImageURI(value: globalAndroid.net.Uri): org.nativescript.widgets.RemoteViews.ImageLike;
+ setImageBitmap(value: globalAndroid.graphics.Bitmap): org.nativescript.widgets.RemoteViews.ImageLike;
+ setImageUrl(url: string): org.nativescript.widgets.RemoteViews.ImageLike;
+ access$setImageResource$jd($this: org.nativescript.widgets.RemoteViews.ImageLike, value: number): org.nativescript.widgets.RemoteViews.ImageLike;
+ access$setImageURI$jd($this: org.nativescript.widgets.RemoteViews.ImageLike, value: globalAndroid.net.Uri): org.nativescript.widgets.RemoteViews.ImageLike;
+ access$setImageBitmap$jd($this: org.nativescript.widgets.RemoteViews.ImageLike, value: globalAndroid.graphics.Bitmap): org.nativescript.widgets.RemoteViews.ImageLike;
+ access$setImageUrl$jd($this: org.nativescript.widgets.RemoteViews.ImageLike, url: string): org.nativescript.widgets.RemoteViews.ImageLike;
+ });
+ public constructor();
+ public getCommands(): java.util.Map;
+ public setImageUrl(url: string): org.nativescript.widgets.RemoteViews.ImageLike;
+ public setImageResource(value: number): org.nativescript.widgets.RemoteViews.ImageLike;
+ public setImageURI(value: globalAndroid.net.Uri): org.nativescript.widgets.RemoteViews.ImageLike;
+ public setImageBitmap(value: globalAndroid.graphics.Bitmap): org.nativescript.widgets.RemoteViews.ImageLike;
+ }
+ export module ImageLike {
+ export class DefaultImpls {
+ public static class: java.lang.Class;
+ /** @deprecated */
+ public static setImageBitmap($this: org.nativescript.widgets.RemoteViews.ImageLike, value: globalAndroid.graphics.Bitmap): org.nativescript.widgets.RemoteViews.ImageLike;
+ /** @deprecated */
+ public static setImageUrl($this: org.nativescript.widgets.RemoteViews.ImageLike, url: string): org.nativescript.widgets.RemoteViews.ImageLike;
+ /** @deprecated */
+ public static setImageResource($this: org.nativescript.widgets.RemoteViews.ImageLike, value: number): org.nativescript.widgets.RemoteViews.ImageLike;
+ /** @deprecated */
+ public static setImageURI($this: org.nativescript.widgets.RemoteViews.ImageLike, value: globalAndroid.net.Uri): org.nativescript.widgets.RemoteViews.ImageLike;
+ }
+ }
+ export class ImageView extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ImageLike {
+ public static class: java.lang.Class;
+ public getCommands(): java.util.Map;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public setImageUrl(url: string): org.nativescript.widgets.RemoteViews.ImageLike;
+ public setImageResource(value: number): org.nativescript.widgets.RemoteViews.ImageLike;
+ public constructor(id: string);
+ public setImageURI(value: globalAndroid.net.Uri): org.nativescript.widgets.RemoteViews.ImageLike;
+ public setImageBitmap(value: globalAndroid.graphics.Bitmap): org.nativescript.widgets.RemoteViews.ImageLike;
+ }
+ export class Layout {
+ public static class: java.lang.Class;
+ public static AdapterViewFlipper: org.nativescript.widgets.RemoteViews.Layout;
+ public static Button: org.nativescript.widgets.RemoteViews.Layout;
+ public static CheckBox: org.nativescript.widgets.RemoteViews.Layout;
+ public static Chronometer: org.nativescript.widgets.RemoteViews.Layout;
+ public static FrameLayout: org.nativescript.widgets.RemoteViews.Layout;
+ public static GridLayout: org.nativescript.widgets.RemoteViews.Layout;
+ public static GridView: org.nativescript.widgets.RemoteViews.Layout;
+ public static ImageButton: org.nativescript.widgets.RemoteViews.Layout;
+ public static ImageView: org.nativescript.widgets.RemoteViews.Layout;
+ public static LinearLayout: org.nativescript.widgets.RemoteViews.Layout;
+ public static ListView: org.nativescript.widgets.RemoteViews.Layout;
+ public static ProgressBar: org.nativescript.widgets.RemoteViews.Layout;
+ public static RelativeLayout: org.nativescript.widgets.RemoteViews.Layout;
+ public static StackView: org.nativescript.widgets.RemoteViews.Layout;
+ public static TextView: org.nativescript.widgets.RemoteViews.Layout;
+ public static ViewFlipper: org.nativescript.widgets.RemoteViews.Layout;
+ public static TextClock: org.nativescript.widgets.RemoteViews.Layout;
+ public static getEntries(): any;
+ public static valueOf(value: string): org.nativescript.widgets.RemoteViews.Layout;
+ public static values(): androidNative.Array;
+ }
+ export class LinearLayout extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ public setFlex(value: boolean): org.nativescript.widgets.RemoteViews.LinearLayout;
+ }
+
+ export class HLinearLayout extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ public setFlex(value: boolean): org.nativescript.widgets.RemoteViews.HLinearLayout;
+ }
+
+ export class ListView extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.AdapterLike {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public constructor(id: string);
+ public addItem(item: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public setItems(items: java.util.List): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getItemCount(): number;
+ public getAdapterItems(): java.util.List;
+ public setEmptyView(view: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getEmptyView(): org.nativescript.widgets.RemoteViews;
+ }
+ export class ProgressBar extends org.nativescript.widgets.RemoteViews {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public constructor(id: string);
+ public setProgressBar(max: number, progress: number, indeterminate: boolean): org.nativescript.widgets.RemoteViews.ProgressBar;
+ public setFlex(value: boolean): org.nativescript.widgets.RemoteViews.ProgressBar;
+ public setFullWidth(value: boolean): org.nativescript.widgets.RemoteViews.ProgressBar;
+ }
+ export class RelativeLayout extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ }
+ export class StackView extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike, org.nativescript.widgets.RemoteViews.AdapterLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ public addItem(item: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public setItems(items: java.util.List): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getItemCount(): number;
+ public getAdapterItems(): java.util.List;
+ public setEmptyView(view: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getEmptyView(): org.nativescript.widgets.RemoteViews;
+ }
+ export class TextClock extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.TextLike {
+ public static class: java.lang.Class;
+ public getCommands(): java.util.Map;
+ public constructor();
+ public setText(value: string): org.nativescript.widgets.RemoteViews.TextLike;
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public constructor(id: string);
+ public setTextColor(value: number): org.nativescript.widgets.RemoteViews.TextLike;
+ public setTextSize(value: number, unit: number): org.nativescript.widgets.RemoteViews.TextLike;
+ public setFormat12Hour(format: string): org.nativescript.widgets.RemoteViews.TextClock;
+ public setFormat24Hour(format: string): org.nativescript.widgets.RemoteViews.TextClock;
+ public setTimeZone(timeZone: string): org.nativescript.widgets.RemoteViews.TextClock;
+ }
+ export class TextLike {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the org.nativescript.widgets.RemoteViews$TextLike interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: { getCommands(): java.util.Map; setText(value: string): org.nativescript.widgets.RemoteViews.TextLike; setTextColor(value: number): org.nativescript.widgets.RemoteViews.TextLike; setTextSize(value: number, unit: number): org.nativescript.widgets.RemoteViews.TextLike; access$setText$jd($this: org.nativescript.widgets.RemoteViews.TextLike, value: string): org.nativescript.widgets.RemoteViews.TextLike; access$setTextColor$jd($this: org.nativescript.widgets.RemoteViews.TextLike, value: number): org.nativescript.widgets.RemoteViews.TextLike });
+ public constructor();
+ public getCommands(): java.util.Map;
+ public setText(value: string): org.nativescript.widgets.RemoteViews.TextLike;
+ public setTextColor(value: number): org.nativescript.widgets.RemoteViews.TextLike;
+ public setTextSize(value: number, unit: number): org.nativescript.widgets.RemoteViews.TextLike;
+ }
+ export module TextLike {
+ export class DefaultImpls {
+ public static class: java.lang.Class;
+ /** @deprecated */
+ public static setText($this: org.nativescript.widgets.RemoteViews.TextLike, value: string): org.nativescript.widgets.RemoteViews.TextLike;
+ /** @deprecated */
+ public static setTextColor($this: org.nativescript.widgets.RemoteViews.TextLike, value: number): org.nativescript.widgets.RemoteViews.TextLike;
+ }
+ }
+ export class TextView extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.TextLike {
+ public static class: java.lang.Class;
+ public getCommands(): java.util.Map;
+ public constructor();
+ public setText(value: string): org.nativescript.widgets.RemoteViews.TextLike;
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public constructor(id: string);
+ public setTextColor(value: number): org.nativescript.widgets.RemoteViews.TextLike;
+ public setTextSize(value: number, unit: number): org.nativescript.widgets.RemoteViews.TextLike;
+ }
+ export class ViewFlipper extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ }
+ export class ViewGroupLike {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the org.nativescript.widgets.RemoteViews$ViewGroupLike interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: { addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike; removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike; access$addView$jd($this: org.nativescript.widgets.RemoteViews.ViewGroupLike, child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike; access$removeView$jd($this: org.nativescript.widgets.RemoteViews.ViewGroupLike, child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike });
+ public constructor();
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ }
+ export module ViewGroupLike {
+ export class DefaultImpls {
+ public static class: java.lang.Class;
+ /** @deprecated */
+ public static addView($this: org.nativescript.widgets.RemoteViews.ViewGroupLike, child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ /** @deprecated */
+ public static removeView($this: org.nativescript.widgets.RemoteViews.ViewGroupLike, child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ }
+ }
+ export class AdapterLike {
+ public static class: java.lang.Class;
+ public constructor(implementation: { getAdapterItems(): java.util.List; addItem(item: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike; setItems(items: java.util.List): org.nativescript.widgets.RemoteViews.AdapterLike; getItemCount(): number });
+ public constructor();
+ public getAdapterItems(): java.util.List;
+ public addItem(item: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public setItems(items: java.util.List): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getItemCount(): number;
+ public setEmptyView(view: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ public getEmptyView(): org.nativescript.widgets.RemoteViews;
+ }
+ export module AdapterLike {
+ export class DefaultImpls {
+ public static class: java.lang.Class;
+ /** @deprecated */
+ public static addItem($this: org.nativescript.widgets.RemoteViews.AdapterLike, item: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.AdapterLike;
+ /** @deprecated */
+ public static setItems($this: org.nativescript.widgets.RemoteViews.AdapterLike, items: java.util.List): org.nativescript.widgets.RemoteViews.AdapterLike;
+ /** @deprecated */
+ public static getItemCount($this: org.nativescript.widgets.RemoteViews.AdapterLike): number;
+ /** @deprecated */
+ public static getAdapterItems($this: org.nativescript.widgets.RemoteViews.AdapterLike): java.util.List;
+ }
+ }
+
+ export class CompoundButtonLike {
+ public static class: java.lang.Class;
+ /**
+ * Constructs a new instance of the org.nativescript.widgets.RemoteViews$CompoundButtonLike interface with the provided implementation. An empty constructor exists calling super() when extending the interface class.
+ */
+ public constructor(implementation: { setChecked(value: boolean): org.nativescript.widgets.RemoteViews.CompoundButtonLike });
+ public constructor();
+ public setChecked(value: boolean): org.nativescript.widgets.RemoteViews.CompoundButtonLike;
+ }
+ export module CompoundButtonLike {
+ export class DefaultImpls {
+ public static class: java.lang.Class;
+ /** @deprecated */
+ public static setChecked($this: org.nativescript.widgets.RemoteViews.CompoundButtonLike, value: boolean): org.nativescript.widgets.RemoteViews.CompoundButtonLike;
+ }
+ }
+
+ export class WhenMappings {
+ public static class: java.lang.Class;
+ }
+
+ export class VSpacer extends org.nativescript.widgets.RemoteViews {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(id: string);
+ public setFixed(value: boolean): org.nativescript.widgets.RemoteViews.VSpacer;
+ }
+
+ export class HSpacer extends org.nativescript.widgets.RemoteViews {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(id: string);
+ public setFixed(value: boolean): org.nativescript.widgets.RemoteViews.HSpacer;
+ }
+
+ export class RootLayout extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.ViewGroupLike {
+ public static class: java.lang.Class;
+ public addView(this_: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public addView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public removeView(child: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor();
+ public constructor(layout: org.nativescript.widgets.RemoteViews.Layout, id: string);
+ public removeView(it: org.nativescript.widgets.RemoteViews): org.nativescript.widgets.RemoteViews.ViewGroupLike;
+ public constructor(id: string);
+ }
+
+ export class CheckBox extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.CompoundButtonLike {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(id: string);
+ public setChecked(value: boolean): org.nativescript.widgets.RemoteViews.CheckBox;
+ }
+
+ export class RadioButton extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.CompoundButtonLike {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(id: string);
+ public setChecked(value: boolean): org.nativescript.widgets.RemoteViews.RadioButton;
+ }
+
+ export class Switch extends org.nativescript.widgets.RemoteViews implements org.nativescript.widgets.RemoteViews.CompoundButtonLike {
+ public static class: java.lang.Class;
+ public constructor();
+ public constructor(id: string);
+ public setChecked(value: boolean): org.nativescript.widgets.RemoteViews.Switch;
+ }
+ }
+ }
+ }
+}
+
+declare module org {
+ export module nativescript {
+ export module widgets {
+ export class RemoteViewsManager {
+ public static class: java.lang.Class;
+ public reparent(oldParentId: string, newParentId: string): void;
+ public build(it: string): globalAndroid.widget.RemoteViews;
+ public build(this_: string, rootId: string): globalAndroid.widget.RemoteViews;
+ public findViewById(found: string, childId: string): org.nativescript.widgets.RemoteViews;
+ public resolveRemoteResources(): void;
+ public remove(parentId: string): void;
+ public add(it: org.nativescript.widgets.RemoteViews, id: string): void;
+ public getById(id: string): org.nativescript.widgets.RemoteViews;
+ public getChildren(it: string): java.util.List;
+ public constructor();
+ public getParent(it: string): org.nativescript.widgets.RemoteViews;
+ }
+ }
+ }
+}
diff --git a/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml b/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml
index aa83d52..0f850b3 100644
--- a/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml
+++ b/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml
@@ -49,5 +49,21 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/assets/App_Resources/Android/src/main/java/org/nativescript/plugindemo/PluginDemoWidgetProvider.kt b/tools/assets/App_Resources/Android/src/main/java/org/nativescript/plugindemo/PluginDemoWidgetProvider.kt
new file mode 100644
index 0000000..13903b9
--- /dev/null
+++ b/tools/assets/App_Resources/Android/src/main/java/org/nativescript/plugindemo/PluginDemoWidgetProvider.kt
@@ -0,0 +1,7 @@
+
+ package org.nativescript.plugindemo
+ import org.nativescript.widgets.AppWidgetProvider
+
+ class PluginDemoWidgetProvider : AppWidgetProvider() {
+ override val interval = 900000L
+ }
diff --git a/tools/assets/App_Resources/Android/src/main/res/values/ns_widgets_strings_info.xml b/tools/assets/App_Resources/Android/src/main/res/values/ns_widgets_strings_info.xml
new file mode 100644
index 0000000..a27110c
--- /dev/null
+++ b/tools/assets/App_Resources/Android/src/main/res/values/ns_widgets_strings_info.xml
@@ -0,0 +1,4 @@
+
+
+ NativeScript Plugin Demo Widget
+
diff --git a/tools/assets/App_Resources/Android/src/main/res/xml/ns_plugin_demo_widget_info.xml b/tools/assets/App_Resources/Android/src/main/res/xml/ns_plugin_demo_widget_info.xml
new file mode 100644
index 0000000..77fb3ec
--- /dev/null
+++ b/tools/assets/App_Resources/Android/src/main/res/xml/ns_plugin_demo_widget_info.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/tools/demo/index.ts b/tools/demo/index.ts
index beaf20d..f288d80 100644
--- a/tools/demo/index.ts
+++ b/tools/demo/index.ts
@@ -6,3 +6,4 @@ export * from './morph-modal-kit';
export * from './rive';
export * from './swift-ui';
export * from './ui-charts';
+export * from './widgets';
diff --git a/tools/demo/widgets/index.ts b/tools/demo/widgets/index.ts
new file mode 100644
index 0000000..7fbfafb
--- /dev/null
+++ b/tools/demo/widgets/index.ts
@@ -0,0 +1,8 @@
+import { DemoSharedBase } from '../utils';
+import {} from '@nativescript/widgets';
+
+export class DemoSharedWidgets extends DemoSharedBase {
+ testIt() {
+ console.log('test widgets!');
+ }
+}
diff --git a/tools/workspace-scripts.js b/tools/workspace-scripts.js
index f924156..b3d380f 100644
--- a/tools/workspace-scripts.js
+++ b/tools/workspace-scripts.js
@@ -114,6 +114,13 @@ module.exports = {
description: '@nativescript/morph-modal-kit: Build',
},
},
+ // @nativescript/widgets
+ widgets: {
+ build: {
+ script: 'nx run widgets:build.all',
+ description: '@nativescript/widgets: Build',
+ },
+ },
'build-all': {
script: 'nx run-many --target=build.all --all',
description: 'Build all packages',
@@ -152,6 +159,10 @@ module.exports = {
script: 'nx run morph-modal-kit:focus',
description: 'Focus on @nativescript/morph-modal-kit',
},
+ widgets: {
+ script: 'nx run widgets:focus',
+ description: 'Focus on @nativescript/widgets',
+ },
reset: {
script: 'nx g @nativescript/plugin-tools:focus-packages',
description: 'Reset Focus',
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 10cc1aa..b00a151 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -28,7 +28,8 @@
"@nativescript/rive": ["packages/rive/index.d.ts"],
"@nativescript/swift-ui": ["packages/swift-ui/index.d.ts"],
"@nativescript/ui-charts": ["packages/ui-charts/index.d.ts"],
- "@nativescript/morph-modal-kit": ["packages/morph-modal-kit/index.d.ts"]
+ "@nativescript/morph-modal-kit": ["packages/morph-modal-kit/index.d.ts"],
+ "@nativescript/widgets": ["packages/widgets/index.d.ts"]
}
},
"exclude": ["node_modules", "tmp"]