From 5fce34dfb89f569e97c799df9023929e30cd12e9 Mon Sep 17 00:00:00 2001 From: liosha84 <138026690+liosha84@users.noreply.github.com> Date: Sat, 28 Jun 2025 21:15:08 +0300 Subject: [PATCH 1/6] Refactor project structure and update configurations for improved resource handling --- .gitignore | 1 + build.gradle | 16 +++++++++----- jambotron-ui/angular.json | 21 +++++++++---------- jambotron-ui/package.json | 2 +- jambotron-ui/src/app/app.module.ts | 4 ++-- jambotron-ui/src/app/app.routes.ts | 6 +++++- .../main.component/main.component.html | 2 +- .../jambotron/configuretions/MvcConfig.java | 12 ++++++++--- .../configuretions/NotFoundHandler.java | 1 - .../controllers/RedirectController.java | 12 +++++++++++ .../jambotron/security/WebSecurityConfig.java | 1 + src/main/resources/application.properties | 16 ++++++++------ 12 files changed, 63 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/jambotronGroup/jambotron/controllers/RedirectController.java diff --git a/.gitignore b/.gitignore index 2d8ea4b..ff64658 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ out/ /logs/application.log /logs/ /.idea/ +/src/main/resources/static/ diff --git a/build.gradle b/build.gradle index 0be94ee..a577bb8 100644 --- a/build.gradle +++ b/build.gradle @@ -67,12 +67,12 @@ apply plugin: 'io.spring.dependency-management' apply plugin: 'java' -tasks.register('copyResources', Copy) { +/*tasks.register('copyResources', Copy) { from 'jambotron-ui/dist/jambotron-ui/browser' into 'src/main/resources/public' -} -processResources.dependsOn(copyResources) -compileJava.dependsOn(copyResources) +}*/ +//processResources.dependsOn(copyResources) +//compileJava.dependsOn(copyResources) //bootRun.dependsOn("flywayMigrate") //flyway { @@ -84,12 +84,18 @@ compileJava.dependsOn(copyResources) // locations = ['filesystem:src/main/resources/db.migration/'] //} -sourceSets { +/*sourceSets { main { resources { srcDir 'jambotron-ui/dist/jambotron-ui/browser' } } +}*/ + +tasks.register('copyAngularBuild', Copy) { + //dependsOn buildAngular + from 'jambotron-ui/dist/jambotron-ui' // Path to your Angular dist folder + into "src/main/resources/static" // Path INSIDE the WAR } tasks.named('test') { diff --git a/jambotron-ui/angular.json b/jambotron-ui/angular.json index 70ac9aa..2a6782c 100644 --- a/jambotron-ui/angular.json +++ b/jambotron-ui/angular.json @@ -15,9 +15,12 @@ "prefix": "app", "architect": { "build": { - "builder": "@angular/build:application", + "builder": "@angular-devkit/build-angular:browser", "options": { - "browser": "src/main.ts", + "outputPath": "dist/jambotron-ui", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": [ "zone.js" ], @@ -37,12 +40,8 @@ "styles": [ "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.scss" - ], - "server": "src/main.server.ts", - "outputMode": "server", - "ssr": { - "entry": "src/server.ts" - } + ] + }, "configurations": { "production": { @@ -50,7 +49,7 @@ { "type": "initial", "maximumWarning": "500kB", - "maximumError": "1MB" + "maximumError": "5MB" }, { "type": "anyComponentStyle", @@ -69,7 +68,7 @@ "defaultConfiguration": "production" }, "serve": { - "builder": "@angular/build:dev-server", + "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { "buildTarget": "jambotron-ui:build:production" @@ -81,7 +80,7 @@ "defaultConfiguration": "development" }, "extract-i18n": { - "builder": "@angular/build:extract-i18n" + "builder": "@angular-devkit/build-angular:extract-i18n" }, "test": { "builder": "@angular/build:karma", diff --git a/jambotron-ui/package.json b/jambotron-ui/package.json index 27242fb..b46da5f 100644 --- a/jambotron-ui/package.json +++ b/jambotron-ui/package.json @@ -35,7 +35,7 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@angular/build": "^20.0.2", + "@angular-devkit/build-angular": "^20.0.2", "@angular/cli": "^20.0.2", "@angular/compiler-cli": "^20.0.0", "@types/express": "^5.0.1", diff --git a/jambotron-ui/src/app/app.module.ts b/jambotron-ui/src/app/app.module.ts index 421f0dd..772334d 100644 --- a/jambotron-ui/src/app/app.module.ts +++ b/jambotron-ui/src/app/app.module.ts @@ -13,7 +13,7 @@ import {AdminComponent} from './admin-module/admin.component/admin.component'; import {AdminWelcomeComponent} from './admin-module/admin-welcome.component/admin-welcome.component'; import {SettingsComponent} from './admin-module/settings.component/settings.component'; import {SystemComponent} from './admin-module/system.component/system.component'; -import {appRouting} from './app.routes'; +import {AppRoutingModule} from './app.routes'; import {App} from './app'; @NgModule({ @@ -21,7 +21,7 @@ import {App} from './app'; ], imports: [ - appRouting, + AppRoutingModule, MainComponent, BrowserModule, MatIconModule, diff --git a/jambotron-ui/src/app/app.routes.ts b/jambotron-ui/src/app/app.routes.ts index e97767a..cd547c9 100644 --- a/jambotron-ui/src/app/app.routes.ts +++ b/jambotron-ui/src/app/app.routes.ts @@ -16,5 +16,9 @@ export const routes: Routes = [ } ]; -export const appRouting = RouterModule.forRoot(routes); +@NgModule({ + imports: [RouterModule.forRoot(routes)],//, { useHash: true } + exports: [RouterModule], +}) +export class AppRoutingModule {} diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.html b/jambotron-ui/src/app/main-module/main.component/main.component.html index f60d02d..82e7c14 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.html +++ b/jambotron-ui/src/app/main-module/main.component/main.component.html @@ -22,7 +22,7 @@ } @if (showAdminBoard) { - diff --git a/src/main/java/com/jambotronGroup/jambotron/configuretions/MvcConfig.java b/src/main/java/com/jambotronGroup/jambotron/configuretions/MvcConfig.java index 260f19b..a637531 100644 --- a/src/main/java/com/jambotronGroup/jambotron/configuretions/MvcConfig.java +++ b/src/main/java/com/jambotronGroup/jambotron/configuretions/MvcConfig.java @@ -2,10 +2,13 @@ package com.jambotronGroup.jambotron.configuretions; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - +/* @Configuration + +@EnableWebMvc public class MvcConfig implements WebMvcConfigurer { @Value("${spring.resources.static-locations}") String resourceLocations; @@ -13,7 +16,10 @@ public class MvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //registry.addResourceHandler("/public/**").addResourceLocations(resourceLocations); - // registry.addResourceHandler("/media/**").addResourceLocations("resources/main/public/media/"); + registry.addResourceHandler("/**").addResourceLocations("classpath:/resources/"); + + //registry. + registry.addResourceHandler("/media/**").addResourceLocations("resources/main/public/media/"); } -} +}*/ diff --git a/src/main/java/com/jambotronGroup/jambotron/configuretions/NotFoundHandler.java b/src/main/java/com/jambotronGroup/jambotron/configuretions/NotFoundHandler.java index 101b6d1..df66fd9 100644 --- a/src/main/java/com/jambotronGroup/jambotron/configuretions/NotFoundHandler.java +++ b/src/main/java/com/jambotronGroup/jambotron/configuretions/NotFoundHandler.java @@ -15,7 +15,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.Charset; /* - @ControllerAdvice public class NotFoundHandler { @Value("${spa.default-file}") diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/RedirectController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/RedirectController.java new file mode 100644 index 0000000..db09ee0 --- /dev/null +++ b/src/main/java/com/jambotronGroup/jambotron/controllers/RedirectController.java @@ -0,0 +1,12 @@ +package com.jambotronGroup.jambotron.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +/*@Controller +public class RedirectController { + @RequestMapping(value = "/{path:[^\\.]*}") + public String redirect() { + return "forward:/index.html"; + } +}*/ diff --git a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java index 958da04..6f28a33 100644 --- a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java +++ b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java @@ -106,6 +106,7 @@ public class WebSecurityConfig {// extends WebSecurityConfigurerAdapter { auth.requestMatchers("/api/auth/**").permitAll() .requestMatchers("/*", "/home", "/resources/**").permitAll() .requestMatchers("/resources/public/media/**").permitAll() + .requestMatchers("/resources/public/browser/**").permitAll() .requestMatchers("/media/**").permitAll() .requestMatchers("/api/test/**").permitAll() .requestMatchers("/api/tutorials").permitAll() diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 66f0cf0..f9cbfd8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -29,10 +29,12 @@ spring.mvc.throw-exception-if-no-handler-found=true # Disable the default mappings #spring.resources.add-mappings=false -spring.resources.static-locations=classpath:/public -spring.resources.cache.period=31557600s # 1 year if you want -spa.default-file=classpath:/public/browser/index.html - +# UI(index.html) location +#spring.resources.static-locations=classpath:/public/browser/ +# +#spring.resources.cache.period=31557600s # 1 year if you want +#spa.default-file=classpath:/public/browser/index.html +# spring.docker.compose.file=../Docker/docker-compose.yml @@ -44,5 +46,7 @@ spring.flyway.password=postgrespw spring.flyway.url=jdbc:postgresql://localhost:5432/jambotronDB -spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas/v3 -spring.ai.zhipuai.api-key = 628447c8c65845a48a7226391464a2ea.Dw8ci6TiW0BRF5LI \ No newline at end of file + + +//spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas/v3 +//spring.ai.zhipuai.api-key = 628447c8c65845a48a7226391464a2ea.Dw8ci6TiW0BRF5LI \ No newline at end of file From 0eeb93cd57a9ac21969e4f4137824ce885d4ca0a Mon Sep 17 00:00:00 2001 From: liosha84 <138026690+liosha84@users.noreply.github.com> Date: Mon, 30 Jun 2025 19:14:15 +0300 Subject: [PATCH 2/6] Add data source properties retrieval and update related components --- jambotron-ui/angular.json | 1 + .../public/Firefly_jambo tron 118290.jpg | Bin 0 -> 157277 bytes .../settings.component.html | 26 ++++++++ .../settings.component/settings.component.ts | 57 +++++++++++++++++- .../main.component/main.component.ts | 32 +++++++--- .../src/app/models/name-value-item.ts | 4 ++ .../src/app/services/system.service.ts | 5 ++ jambotron-ui/src/styles.scss | 2 +- .../jambotron/controllers/AuthController.java | 2 +- .../controllers/SystemController.java | 21 +++++++ .../jambotronGroup/jambotron/model/Bean.java | 1 + .../jambotron/model/NameValueItem.java | 40 ++++++++++++ .../jambotron/security/WebSecurityConfig.java | 11 +++- .../jambotron/system/SystemService.java | 3 + .../jambotron/system/SystemServiceImpl.java | 19 +++++- 15 files changed, 209 insertions(+), 15 deletions(-) create mode 100644 jambotron-ui/public/Firefly_jambo tron 118290.jpg create mode 100644 jambotron-ui/src/app/models/name-value-item.ts create mode 100644 src/main/java/com/jambotronGroup/jambotron/model/NameValueItem.java diff --git a/jambotron-ui/angular.json b/jambotron-ui/angular.json index 2a6782c..16a9846 100644 --- a/jambotron-ui/angular.json +++ b/jambotron-ui/angular.json @@ -74,6 +74,7 @@ "buildTarget": "jambotron-ui:build:production" }, "development": { + "disableHostCheck": true, "buildTarget": "jambotron-ui:build:development" } }, diff --git a/jambotron-ui/public/Firefly_jambo tron 118290.jpg b/jambotron-ui/public/Firefly_jambo tron 118290.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6663a0a9648e9fa41ac7ca9ad0ccbc1ef8432311 GIT binary patch literal 157277 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

xjl5pAGQRI{!{#sa8}}X4 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.component works!

+ + + + + + + + + @for (column of displayedColumns; track column) { + + + + + } + + + +
{{column}}{{element[column]}}
+ +
+
+
+
diff --git a/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts b/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts index b7ce784..1209c58 100644 --- a/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts +++ b/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts @@ -1,11 +1,66 @@ import { Component } from '@angular/core'; +import {MatCard, MatCardContent} from '@angular/material/card'; +import {MatDivider} from '@angular/material/divider'; +import {MatTab, MatTabGroup} from '@angular/material/tabs'; +import { + MatCell, + MatCellDef, + MatColumnDef, + MatHeaderCell, MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, MatRowDef, MatTable +} from '@angular/material/table'; +import {MatIconButton} from '@angular/material/button'; +import {MatList, MatListItem} from '@angular/material/list'; +import {Bean} from '../../models/Bean'; +import {SystemService} from '../../services/system.service'; +import {NameValueItem} from '../../models/name-value-item'; @Component({ selector: 'app-settings.component', - imports: [], + imports: [ + MatCard, + MatCardContent, + MatDivider, + MatTab, + MatTabGroup, + MatCell, + MatCellDef, + MatColumnDef, + MatHeaderCell, + + MatTable, + MatHeaderCellDef, + MatHeaderRow, + MatHeaderRowDef, + MatRow, + MatRowDef + ], templateUrl: './settings.component.html', styleUrl: './settings.component.scss' }) export class SettingsComponent { + properties: NameValueItem[] = [] ; + displayedColumns: string[] = ['name', 'value']; + + + constructor(private systemService: SystemService) { + this.retrieveProperties(); + } + + + retrieveProperties(): void { + this.systemService.getDataSourceProperties() + .subscribe( + (data: NameValueItem[]) => { + this.properties = data; + console.log(data); + }, + (error: any) => { + console.log(error); + } + ); + } } diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.ts b/jambotron-ui/src/app/main-module/main.component/main.component.ts index d17f946..5df47b4 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.ts +++ b/jambotron-ui/src/app/main-module/main.component/main.component.ts @@ -1,8 +1,8 @@ -import {Component, CUSTOM_ELEMENTS_SCHEMA, inject} from '@angular/core'; +import {Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit} from '@angular/core'; //import {NavigationComponent} from '../navigation/navigation.component'; import {NgClass} from '@angular/common'; import {NavigationComponent} from '../../layouts/admin-layout/navigation/navigation.component'; -import {RouterLink, RouterOutlet} from '@angular/router'; +import {Router, RouterLink, RouterOutlet} from '@angular/router'; import {BreadcrumbComponent} from '../../components/breadcrumb/breadcrumb.component'; import {NavBarComponent} from '../../layouts/admin-layout/nav-bar/nav-bar.component'; import {MatToolbar} from '@angular/material/toolbar'; @@ -29,7 +29,7 @@ import {DialogComponent} from '../../components/dialog/dialog.component'; templateUrl: './main.component.html', styleUrl: './main.component.scss' }) -export class MainComponent { +export class MainComponent implements OnInit{ // public props navCollapsed: boolean = false; navCollapsedMob: boolean = false; @@ -52,13 +52,24 @@ export class MainComponent { private authService: AuthService = inject(AuthService); private eventBusService: EventBusService = inject(EventBusService); - constructor( + constructor(private router: Router) { - ) {} + } + goToHome() { + this.router.navigate(['main/home']); + } ngOnInit(): void { this.isLoggedIn = this.storageService.isLoggedIn(); + this.refreshToolbar(); + + this.eventBusSub = this.eventBusService.on('logout', () => { + this.logout(); + }); + } + + refreshToolbar() { if (this.isLoggedIn) { const user = this.storageService.getUser(); this.roles = user.roles; @@ -68,10 +79,12 @@ export class MainComponent { this.username = user.username; } + } - this.eventBusSub = this.eventBusService.on('logout', () => { - this.logout(); - }); + ngOnDestroy() { + if (this.eventBusSub) { + this.eventBusSub.unsubscribe(); + } } // public method @@ -142,7 +155,8 @@ export class MainComponent { let user = this.storageService.getUser(); this.roles = user.roles; //this.username = user.username; - this.reloadPage(); + //this.reloadPage(); + this.refreshToolbar(); }, err => { this.errorMessage = err.error.message; diff --git a/jambotron-ui/src/app/models/name-value-item.ts b/jambotron-ui/src/app/models/name-value-item.ts new file mode 100644 index 0000000..c155d43 --- /dev/null +++ b/jambotron-ui/src/app/models/name-value-item.ts @@ -0,0 +1,4 @@ +export class NameValueItem { + name?:string; + value?:string; +} diff --git a/jambotron-ui/src/app/services/system.service.ts b/jambotron-ui/src/app/services/system.service.ts index ffb606a..599ae32 100644 --- a/jambotron-ui/src/app/services/system.service.ts +++ b/jambotron-ui/src/app/services/system.service.ts @@ -3,6 +3,7 @@ import {HttpClient} from '@angular/common/http'; import {Observable} from 'rxjs'; import {Tutorial} from '../models/tutorial.model'; import {Bean} from '../models/Bean'; +import {NameValueItem} from '../models/name-value-item'; @Injectable({ providedIn: 'root' @@ -12,6 +13,10 @@ export class SystemService { baseUrl : string = 'http://localhost:8080/api/system'; constructor(private http: HttpClient) { } + getDataSourceProperties(): Observable{ + return this.http.get(this.baseUrl + "/data-source-properties") + } + getAllBeans(): Observable { return this.http.get(this.baseUrl+"/beans"); } diff --git a/jambotron-ui/src/styles.scss b/jambotron-ui/src/styles.scss index cea92f3..7a0592a 100644 --- a/jambotron-ui/src/styles.scss +++ b/jambotron-ui/src/styles.scss @@ -40,7 +40,7 @@ File: style.css html, body { height: 100%; } body { - background-image: url('../public/Firefly_jambo tron 118290.png'); + background-image: url('../public/Firefly_jambo tron 118290.jpg'); background-attachment:fixed; background-repeat: no-repeat; background-size: cover; diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java index f02005c..c962699 100644 --- a/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java +++ b/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java @@ -30,7 +30,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; //@CrossOrigin(origins = "*", maxAge = 3600) -@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600, allowCredentials="true") +@CrossOrigin(origins = "http://localhost:4200,https://a576-5-248-149-207.ngrok-free.app", maxAge = 3600, allowCredentials="true") @RestController @RequestMapping("/api/auth") public class AuthController { diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java index 8cca937..b7934ae 100644 --- a/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java +++ b/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java @@ -1,9 +1,12 @@ package com.jambotronGroup.jambotron.controllers; import com.jambotronGroup.jambotron.model.Bean; +import com.jambotronGroup.jambotron.model.NameValueItem; import com.jambotronGroup.jambotron.model.Setting; import com.jambotronGroup.jambotron.system.SystemService; +import org.springframework.beans.factory.NamedBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -20,6 +23,24 @@ public class SystemController { + @GetMapping("/data-source-properties") + public ResponseEntity> getDataSourceProperties(@RequestParam(required = false) String title) { + try { + List properties = systemService.getDataSourceProperties(); + //userRepository.findAll().forEach(users::add); + + + if (properties.isEmpty()) { + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + return new ResponseEntity<>(properties, HttpStatus.OK); + } catch (Exception e) { + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/beans") public ResponseEntity> getLoadedBeans(@RequestParam(required = false) String title) { try { diff --git a/src/main/java/com/jambotronGroup/jambotron/model/Bean.java b/src/main/java/com/jambotronGroup/jambotron/model/Bean.java index dd32292..c51da42 100644 --- a/src/main/java/com/jambotronGroup/jambotron/model/Bean.java +++ b/src/main/java/com/jambotronGroup/jambotron/model/Bean.java @@ -32,6 +32,7 @@ public class Bean { @Override public String toString() { + return String.format("name = %s type= %s", this.shortName, this.typeShortName); } diff --git a/src/main/java/com/jambotronGroup/jambotron/model/NameValueItem.java b/src/main/java/com/jambotronGroup/jambotron/model/NameValueItem.java new file mode 100644 index 0000000..b7e66c4 --- /dev/null +++ b/src/main/java/com/jambotronGroup/jambotron/model/NameValueItem.java @@ -0,0 +1,40 @@ +package com.jambotronGroup.jambotron.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Entity +public class NameValueItem { + + public NameValueItem(String name, String value){ + _name = name; + _value = value; + } + + @Id + private String _name; + + private String _value; + + public String getValue() { + return _value; + } + + public void setValue(String _value) { + this._value = _value; + } + + public String getName() { + return _name; + } + + public void setName(String _name) { + this._name = _name; + } + + @Override + public String toString() { + + return String.format("name = %s value= %s", this._name, this._value); + } +} diff --git a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java index 6f28a33..1f334b5 100644 --- a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java +++ b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java @@ -16,6 +16,8 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @EnableMethodSecurity @@ -24,7 +26,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic // securedEnabled = true, // jsr250Enabled = true, //prePostEnabled = true) -public class WebSecurityConfig {// extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig implements WebMvcConfigurer {// extends WebSecurityConfigurerAdapter { @Autowired UserDetailsServiceImpl userDetailsService; @@ -41,6 +43,11 @@ public class WebSecurityConfig {// extends WebSecurityConfigurerAdapter { // authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); // } + @Override + public void addCorsMappings(CorsRegistry registry) { + // Do not add any mappings to enable complete disabling of CORS. + } + @Bean public DaoAuthenticationProvider authenticationProvider() { DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); @@ -108,6 +115,8 @@ public class WebSecurityConfig {// extends WebSecurityConfigurerAdapter { .requestMatchers("/resources/public/media/**").permitAll() .requestMatchers("/resources/public/browser/**").permitAll() .requestMatchers("/media/**").permitAll() + + .requestMatchers("/main/**").permitAll() .requestMatchers("/api/test/**").permitAll() .requestMatchers("/api/tutorials").permitAll() diff --git a/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java b/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java index 76c8036..84d3b1a 100644 --- a/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java +++ b/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java @@ -1,6 +1,7 @@ package com.jambotronGroup.jambotron.system; import com.jambotronGroup.jambotron.model.Bean; +import com.jambotronGroup.jambotron.model.NameValueItem; import java.util.List; @@ -9,4 +10,6 @@ public interface SystemService { List getLodedCustomBeans(); + List getDataSourceProperties(); + } diff --git a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java index d1f757d..6eb88b1 100644 --- a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java +++ b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java @@ -2,16 +2,17 @@ package com.jambotronGroup.jambotron.system; import com.jambotronGroup.jambotron.JambotronApplication; import com.jambotronGroup.jambotron.model.Bean; +import com.jambotronGroup.jambotron.model.NameValueItem; import com.jambotronGroup.jambotron.utils.EntityLoggingConsumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -23,9 +24,23 @@ public class SystemServiceImpl implements SystemService { @Autowired private Environment environment; + @Autowired + DataSourceProperties _dataSourceProperties; + private static final Logger logger = LoggerFactory.getLogger(SystemServiceImpl.class); + public List getDataSourceProperties(){ + List returnValue = new ArrayList(); + + returnValue.add(new NameValueItem("Username", _dataSourceProperties.getUsername())); + returnValue.add(new NameValueItem("Password", _dataSourceProperties.getPassword())); + returnValue.add(new NameValueItem("Url", _dataSourceProperties.getUrl())); + + + return returnValue; + } + @Override public List getLodedBeans() { // Get all bean names from the application context and map them to Bean objects From 51dfb3b24f93da9390f2c3a006d7d4e402a0c9e4 Mon Sep 17 00:00:00 2001 From: liosha84 <138026690+liosha84@users.noreply.github.com> Date: Wed, 2 Jul 2025 13:01:21 +0300 Subject: [PATCH 3/6] Refactor breadcrumb title setting and update icons in navigation components --- .../breadcrumb/breadcrumb.component.ts | 2 +- .../nav-right/nav-right.component.html | 2 +- .../nav-collapse/nav-collapse.component.html | 2 +- .../nav-content/nav-content.component.html | 22 ------------ .../main.component/main.component.html | 5 +-- .../main.component/main.component.scss | 5 +++ .../main.component/main.component.ts | 35 +++++++++++++++++-- .../jambotron/system/SystemServiceImpl.java | 4 +++ .../db/migration/V6__fix_tutorial_id.sql | 6 ++++ 9 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 src/main/resources/db/migration/V6__fix_tutorial_id.sql diff --git a/jambotron-ui/src/app/components/breadcrumb/breadcrumb.component.ts b/jambotron-ui/src/app/components/breadcrumb/breadcrumb.component.ts index d824924..d119640 100644 --- a/jambotron-ui/src/app/components/breadcrumb/breadcrumb.component.ts +++ b/jambotron-ui/src/app/components/breadcrumb/breadcrumb.component.ts @@ -62,7 +62,7 @@ export class BreadcrumbComponent { this.navigationList = breadcrumbList;//breadcrumbList.slice(breadcrumbList.length - 1, breadcrumbList.length); const title = breadcrumbList[breadcrumbList.length - 1]?.title || 'Welcome'; - this.titleService.setTitle(title + ' | Mantis Angular Admin Template'); + this.titleService.setTitle(title ); } }); } diff --git a/jambotron-ui/src/app/layouts/admin-layout/nav-bar/nav-right/nav-right.component.html b/jambotron-ui/src/app/layouts/admin-layout/nav-bar/nav-right/nav-right.component.html index 97bcd93..5d6e4a5 100644 --- a/jambotron-ui/src/app/layouts/admin-layout/nav-bar/nav-right/nav-right.component.html +++ b/jambotron-ui/src/app/layouts/admin-layout/nav-bar/nav-right/nav-right.component.html @@ -104,7 +104,7 @@
JWT User
UI/UX Designer -
+ - diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.html b/jambotron-ui/src/app/main-module/main.component/main.component.html index 82e7c14..e38d048 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.html +++ b/jambotron-ui/src/app/main-module/main.component/main.component.html @@ -39,7 +39,7 @@ } @if (isLoggedIn) { @@ -48,7 +48,8 @@ {{ username }} diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.scss b/jambotron-ui/src/app/main-module/main.component/main.component.scss index 713ba97..91d9aa8 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.scss +++ b/jambotron-ui/src/app/main-module/main.component/main.component.scss @@ -13,3 +13,8 @@ mat-toolbar{ left: 0; z-index: 1000; // Ensure toolbar stays above other content } +.mat-mdc-raised-button:not(:disabled){ + color: rgba(24, 255, 255, 0.96); + background-color: rgba(24,255,255,0.04); +} + diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.ts b/jambotron-ui/src/app/main-module/main.component/main.component.ts index 5df47b4..8274fe7 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.ts +++ b/jambotron-ui/src/app/main-module/main.component/main.component.ts @@ -7,13 +7,21 @@ import {BreadcrumbComponent} from '../../components/breadcrumb/breadcrumb.compon import {NavBarComponent} from '../../layouts/admin-layout/nav-bar/nav-bar.component'; import {MatToolbar} from '@angular/material/toolbar'; import {MatButton} from '@angular/material/button'; -import {IconDirective} from '@ant-design/icons-angular'; +import {IconDirective, IconService} from '@ant-design/icons-angular'; import {MatDialog} from '@angular/material/dialog'; import {Subscription} from 'rxjs'; import {TokenStorageService} from '../../services/token-storage.service'; import {AuthService} from '../../services/auth.service'; import {EventBusService} from '../../_shared/event-bus.service'; import {DialogComponent} from '../../components/dialog/dialog.component'; +import { + ArrowRightOutline, BellOutline, + CheckCircleOutline, CommentOutline, EditOutline, + GiftOutline, GithubOutline, LockOutline, LogoutOutline, + MessageOutline, + PhoneOutline, ProfileOutline, QuestionCircleOutline, + SettingOutline, UnorderedListOutline, UserOutline, WalletOutline +} from '@ant-design/icons-angular/icons'; @Component({ selector: 'app-main.component', @@ -51,9 +59,32 @@ export class MainComponent implements OnInit{ private storageService: TokenStorageService = inject(TokenStorageService); private authService: AuthService = inject(AuthService); private eventBusService: EventBusService = inject(EventBusService); + private iconService = inject(IconService); + + constructor(private router: Router) { - + this.iconService.addIcon( + ...[ + CheckCircleOutline, + GiftOutline, + MessageOutline, + SettingOutline, + PhoneOutline, + LogoutOutline, + UserOutline, + EditOutline, + ProfileOutline, + QuestionCircleOutline, + LockOutline, + CommentOutline, + UnorderedListOutline, + ArrowRightOutline, + BellOutline, + GithubOutline, + WalletOutline + ] + ); } goToHome() { this.router.navigate(['main/home']); diff --git a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java index 6eb88b1..d7cfe68 100644 --- a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java +++ b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java @@ -1,6 +1,7 @@ package com.jambotronGroup.jambotron.system; import com.jambotronGroup.jambotron.JambotronApplication; +import com.jambotronGroup.jambotron.controllers.SystemController; import com.jambotronGroup.jambotron.model.Bean; import com.jambotronGroup.jambotron.model.NameValueItem; import com.jambotronGroup.jambotron.utils.EntityLoggingConsumer; @@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; +import org.springframework.data.web.config.SpringDataWebSettings; import org.springframework.stereotype.Service; import java.util.*; @@ -27,9 +29,11 @@ public class SystemServiceImpl implements SystemService { @Autowired DataSourceProperties _dataSourceProperties; + private static final Logger logger = LoggerFactory.getLogger(SystemServiceImpl.class); + public List getDataSourceProperties(){ List returnValue = new ArrayList(); diff --git a/src/main/resources/db/migration/V6__fix_tutorial_id.sql b/src/main/resources/db/migration/V6__fix_tutorial_id.sql new file mode 100644 index 0000000..108fee1 --- /dev/null +++ b/src/main/resources/db/migration/V6__fix_tutorial_id.sql @@ -0,0 +1,6 @@ +-- Column: public.tutorials. + + ALTER TABLE IF EXISTS public.tutorials DROP COLUMN IF EXISTS id; + +ALTER TABLE IF EXISTS public.tutorials + ADD COLUMN id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ); \ No newline at end of file From afb12a131ed46b13faae4b4cbb8d4fb1edeed24a Mon Sep 17 00:00:00 2001 From: liosha84 <138026690+liosha84@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:57:43 +0300 Subject: [PATCH 4/6] Add jambotron logo SVG and integrate it into the main component --- jambotron-ui/public/jambotron_logo.svg | 9 +++++++++ .../app/main-module/main.component/main.component.html | 1 + .../src/app/main-module/main.component/main.component.ts | 5 +++-- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 jambotron-ui/public/jambotron_logo.svg diff --git a/jambotron-ui/public/jambotron_logo.svg b/jambotron-ui/public/jambotron_logo.svg new file mode 100644 index 0000000..9135899 --- /dev/null +++ b/jambotron-ui/public/jambotron_logo.svg @@ -0,0 +1,9 @@ + + + + Layer 1 + jambotron + + diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.html b/jambotron-ui/src/app/main-module/main.component/main.component.html index e38d048..1b0b943 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.html +++ b/jambotron-ui/src/app/main-module/main.component/main.component.html @@ -2,6 +2,7 @@ diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.ts b/jambotron-ui/src/app/main-module/main.component/main.component.ts index 8274fe7..9d859bd 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.ts +++ b/jambotron-ui/src/app/main-module/main.component/main.component.ts @@ -1,6 +1,6 @@ import {Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit} from '@angular/core'; //import {NavigationComponent} from '../navigation/navigation.component'; -import {NgClass} from '@angular/common'; +import {NgClass, NgOptimizedImage} from '@angular/common'; import {NavigationComponent} from '../../layouts/admin-layout/navigation/navigation.component'; import {Router, RouterLink, RouterOutlet} from '@angular/router'; import {BreadcrumbComponent} from '../../components/breadcrumb/breadcrumb.component'; @@ -31,7 +31,8 @@ import { MatButton, RouterLink, IconDirective, - RouterOutlet + RouterOutlet, + NgOptimizedImage ], schemas: [ CUSTOM_ELEMENTS_SCHEMA ], templateUrl: './main.component.html', From f211a0d14696510e2a8641dc1f3d6f173ee08efe Mon Sep 17 00:00:00 2001 From: liosha84 <138026690+liosha84@users.noreply.github.com> Date: Thu, 3 Jul 2025 20:23:21 +0300 Subject: [PATCH 5/6] Add image generation feature with new component and service integration --- build.gradle | 2 + jambotron-ui/angular.json | 3 + jambotron-ui/package-lock.json | 5683 ++++++++++++++++- jambotron-ui/package.json | 2 + jambotron-ui/src/app/app.config.ts | 2 + jambotron-ui/src/app/app.module.ts | 15 +- jambotron-ui/src/app/app.routes.ts | 2 +- .../generate-image.component.html | 27 + .../generate-image.component.scss | 3 + .../generate-image.component.spec.ts | 23 + .../generate-image.component.ts | 89 + .../home.component/home.component.html | 101 +- .../home.component/home.component.ts | 71 +- .../main.component/main.component.html | 19 +- .../main.component/main.component.ts | 12 +- .../src/app/main-module/main.module.ts | 20 +- .../src/app/main-module/main.routing.ts | 5 + jambotron-ui/src/app/models/image.ts | 5 + .../src/app/services/system.service.ts | 4 + .../services/zhipuai-image.service.spec.ts | 16 + .../src/app/services/zhipuai-image.service.ts | 25 + .../jambotron/ZhiPuAi/ImageController.java | 39 + .../ZhiPuAi/ZhiPuAiImageService.java | 75 +- .../controllers/SystemController.java | 2 + .../controllers/ZhiPuAiController.java | 15 - .../jambotron/security/WebSecurityConfig.java | 2 + .../jambotron/system/SystemService.java | 2 + .../jambotron/system/SystemServiceImpl.java | 29 + src/main/resources/application.properties | 4 +- 29 files changed, 6038 insertions(+), 259 deletions(-) create mode 100644 jambotron-ui/src/app/components/generate-image.component/generate-image.component.html create mode 100644 jambotron-ui/src/app/components/generate-image.component/generate-image.component.scss create mode 100644 jambotron-ui/src/app/components/generate-image.component/generate-image.component.spec.ts create mode 100644 jambotron-ui/src/app/components/generate-image.component/generate-image.component.ts create mode 100644 jambotron-ui/src/app/models/image.ts create mode 100644 jambotron-ui/src/app/services/zhipuai-image.service.spec.ts create mode 100644 jambotron-ui/src/app/services/zhipuai-image.service.ts create mode 100644 src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java delete mode 100644 src/main/java/com/jambotronGroup/jambotron/controllers/ZhiPuAiController.java diff --git a/build.gradle b/build.gradle index a577bb8..f6dc56e 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,8 @@ dependencies { implementation 'org.flywaydb:flyway-core' implementation("org.flywaydb:flyway-database-postgresql:10.4.1") + implementation 'org.springframework.ai:spring-ai-zhipuai-spring-boot-starter:1.0.0-M6' + //implementation 'org.springframework.ai:spring-ai-starter-model-zhipuai' //implementation 'org.springframework.ai:spring-ai-zhipuai-spring-boot-starter' //implementation platform("org.springframework.ai:spring-ai-bom:1.0.0-SNAPSHOT") diff --git a/jambotron-ui/angular.json b/jambotron-ui/angular.json index 16a9846..8624583 100644 --- a/jambotron-ui/angular.json +++ b/jambotron-ui/angular.json @@ -40,6 +40,9 @@ "styles": [ "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.scss" + ], + "scripts": [ + "node_modules/viewerjs/dist/viewer.min.js" ] }, diff --git a/jambotron-ui/package-lock.json b/jambotron-ui/package-lock.json index 4ad1649..9ea6324 100644 --- a/jambotron-ui/package-lock.json +++ b/jambotron-ui/package-lock.json @@ -20,6 +20,7 @@ "@angular/router": "^20.0.0", "@angular/ssr": "^20.0.2", "@ant-design/icons-angular": "19.0.0", + "@hreimer/angular-image-viewer": "^0.14.1", "@ng-bootstrap/ng-bootstrap": "19.0.0", "@popperjs/core": "2.11.8", "@primeng/themes": "^19.1.3", @@ -29,10 +30,11 @@ "primeng": "^19.1.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", + "viewerjs": "^1.11.7", "zone.js": "~0.15.0" }, "devDependencies": { - "@angular/build": "^20.0.2", + "@angular-devkit/build-angular": "^20.0.2", "@angular/cli": "^20.0.2", "@angular/compiler-cli": "^20.0.0", "@types/express": "^5.0.1", @@ -77,6 +79,303 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/build-angular": { + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.0.5.tgz", + "integrity": "sha512-WMpk27O6R0p4t8VKq+z/1R+J/Jc5zpHy7OVsAguwH6bUoLOpLWMW1nHDIXGS9IpfkCmMRILxwKhFYIuEcUAvNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2000.5", + "@angular-devkit/build-webpack": "0.2000.5", + "@angular-devkit/core": "20.0.5", + "@angular/build": "20.0.5", + "@babel/core": "7.27.1", + "@babel/generator": "7.27.1", + "@babel/helper-annotate-as-pure": "7.27.1", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.27.1", + "@babel/plugin-transform-async-to-generator": "7.27.1", + "@babel/plugin-transform-runtime": "7.27.1", + "@babel/preset-env": "7.27.2", + "@babel/runtime": "7.27.1", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "20.0.5", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.21", + "babel-loader": "10.0.0", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "13.0.0", + "css-loader": "7.1.2", + "esbuild-wasm": "0.25.5", + "fast-glob": "3.3.3", + "http-proxy-middleware": "3.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.3.0", + "less-loader": "12.3.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.9.2", + "open": "10.1.2", + "ora": "8.2.0", + "picomatch": "4.0.2", + "piscina": "5.1.1", + "postcss": "8.5.3", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.2", + "sass": "1.88.0", + "sass-loader": "16.0.5", + "semver": "7.7.2", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.39.1", + "tree-kill": "1.2.2", + "tslib": "2.8.1", + "webpack": "5.99.8", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.2.1", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.25.5" + }, + "peerDependencies": { + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.0.5", + "@web/test-runner": "^0.20.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^20.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.8 <5.9" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { + "version": "0.2000.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.5.tgz", + "integrity": "sha512-9aPtMdRiOVP14PkbgxAKh3TivxXTBiOr66xYbxutP0cMBwzRX67ekyEpAxmTEiWnd+qmxV9tddWgGL5sWcEZgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.0.5", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.5.tgz", + "integrity": "sha512-bFaFP984GxqfC1WYlUEFuwkDO657ynxI51cE3J6yfwP92ykyF/MXzV0S9tRBhx5rcLVgCAiohxmzKdxPhoLWSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.2", + "source-map": "0.7.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.2000.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2000.5.tgz", + "integrity": "sha512-tdzw1ieaXWureLWz86fVh2OhHE0XuJGJGYEukjqsxExV/ZZ9Y0avYEIqDaC8RrPE1mHiM7W9in1DgYvPmsWxHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2000.5", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { + "version": "0.2000.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.5.tgz", + "integrity": "sha512-9aPtMdRiOVP14PkbgxAKh3TivxXTBiOr66xYbxutP0cMBwzRX67ekyEpAxmTEiWnd+qmxV9tddWgGL5sWcEZgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.0.5", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.5.tgz", + "integrity": "sha512-bFaFP984GxqfC1WYlUEFuwkDO657ynxI51cE3J6yfwP92ykyF/MXzV0S9tRBhx5rcLVgCAiohxmzKdxPhoLWSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.2", + "source-map": "0.7.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, "node_modules/@angular-devkit/core": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.3.tgz", @@ -141,14 +440,14 @@ } }, "node_modules/@angular/build": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.0.3.tgz", - "integrity": "sha512-xA5eTGop85SI/+hfiOSJR/xI1w1NK3qylpEZ277YRaw8Ikh7r1DKPJOMGBfXNd8QsZYBSWGHA8SXvCmOh/hvLQ==", + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.0.5.tgz", + "integrity": "sha512-HQnKEuBhKURoaXkvTsgNbW8LyxVGYPMR/9e+KpJZv06NgJHXZumLtbkg1f1IF1d4d60SY1g+ienjFOu+Yj1FfQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2000.3", + "@angular-devkit/architect": "0.2000.5", "@babel/core": "7.27.1", "@babel/helper-annotate-as-pure": "7.27.1", "@babel/helper-split-export-declaration": "7.24.7", @@ -165,7 +464,7 @@ "mrmime": "2.0.1", "parse5-html-rewriting-stream": "7.1.0", "picomatch": "4.0.2", - "piscina": "5.0.0", + "piscina": "5.1.1", "rollup": "4.40.2", "sass": "1.88.0", "semver": "7.7.2", @@ -190,7 +489,7 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-server": "^20.0.0", "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.0.3", + "@angular/ssr": "^20.0.5", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^20.0.0", @@ -239,6 +538,50 @@ } } }, + "node_modules/@angular/build/node_modules/@angular-devkit/architect": { + "version": "0.2000.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.5.tgz", + "integrity": "sha512-9aPtMdRiOVP14PkbgxAKh3TivxXTBiOr66xYbxutP0cMBwzRX67ekyEpAxmTEiWnd+qmxV9tddWgGL5sWcEZgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.0.5", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/build/node_modules/@angular-devkit/core": { + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.5.tgz", + "integrity": "sha512-bFaFP984GxqfC1WYlUEFuwkDO657ynxI51cE3J6yfwP92ykyF/MXzV0S9tRBhx5rcLVgCAiohxmzKdxPhoLWSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.2", + "source-map": "0.7.4" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, "node_modules/@angular/cdk": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.0.3.tgz", @@ -650,9 +993,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, "license": "MIT", "engines": { @@ -708,16 +1051,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -764,6 +1107,107 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "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", @@ -796,6 +1240,79 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", @@ -839,6 +1356,21 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helpers": { "version": "7.27.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", @@ -854,13 +1386,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -869,6 +1401,1144 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", + "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", + "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "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/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.0.tgz", + "integrity": "sha512-LOAozRVbqxEVjSKfhGnuLoE4Kz4Oc5UJzuvFUhSsQzdCdaAQu06mG8zDv2GFSerM62nImUZ7K92vxnQcLSDlCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz", + "integrity": "sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/runtime": { "version": "7.27.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", @@ -894,28 +2564,28 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", + "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", "dev": true, "license": "MIT", "dependencies": { @@ -936,6 +2606,16 @@ "node": ">=0.1.90" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", @@ -1361,6 +3041,79 @@ "node": ">=18" } }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==", + "hasInstallScript": true, + "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@hreimer/angular-image-viewer": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@hreimer/angular-image-viewer/-/angular-image-viewer-0.14.1.tgz", + "integrity": "sha512-ZVV2xizunKqqlLewrBgshJJnfJ5IdyngwtNWj8c8tnHCFaR4xh6afL02NQthAYxv2rKMcaE7zkL6ZiR7tc6tCQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "@angular/cdk": "^11.0.0 || ^12.0.0 || ^13.0.0 || ^13.0.0", + "@angular/material": "^11.0.0 || ^12.0.0 || ^13.0.0 || ^13.0.0", + "@fortawesome/fontawesome-free": "^5.15.4" + }, + "peerDependencies": { + "@angular/common": "^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0", + "@angular/core": "^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0" + } + }, + "node_modules/@hreimer/angular-image-viewer/node_modules/@angular/cdk": { + "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.9.tgz", + "integrity": "sha512-XCuCbeuxWFyo3EYrgEYx7eHzwl76vaWcxtWXl00ka8d+WAOtMQ6Tf1D98ybYT5uwF9889fFpXAPw98mVnlo3MA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^5.0.0" + }, + "peerDependencies": { + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@hreimer/angular-image-viewer/node_modules/@angular/material": { + "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.3.9.tgz", + "integrity": "sha512-FU8lcMgo+AL8ckd27B4V097ZPoIZNRHiCe3wpgkImT1qC0YwcyXZVn0MqQTTFSdC9a/aI8wPm3AbTClJEVw5Vw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^13.0.0 || ^14.0.0-0", + "@angular/cdk": "13.3.9", + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "@angular/forms": "^13.0.0 || ^14.0.0-0", + "@angular/platform-browser": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@hreimer/angular-image-viewer/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "license": "MIT", + "optional": true + }, "node_modules/@inquirer/checkbox": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.8.tgz", @@ -1764,18 +3517,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1788,14 +3537,15 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", + "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -1806,9 +3556,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1816,6 +3566,70 @@ "@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/json-pack": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", + "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz", + "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==", + "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", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, "node_modules/@listr2/prompt-adapter-inquirer": { "version": "2.0.22", "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz", @@ -2038,9 +3852,9 @@ ] }, "node_modules/@napi-rs/nice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", - "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.2.tgz", + "integrity": "sha512-nHdi+EhXBX2U/SlKU+Qgo+FErBCxCE1B7wQ+pH5XjvWaxFn4RfB/9jjLhu9VW3EvUwqE3RnDy6hcFeK7Q2meJw==", "dev": true, "license": "MIT", "optional": true, @@ -2052,28 +3866,28 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.1", - "@napi-rs/nice-android-arm64": "1.0.1", - "@napi-rs/nice-darwin-arm64": "1.0.1", - "@napi-rs/nice-darwin-x64": "1.0.1", - "@napi-rs/nice-freebsd-x64": "1.0.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", - "@napi-rs/nice-linux-arm64-gnu": "1.0.1", - "@napi-rs/nice-linux-arm64-musl": "1.0.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", - "@napi-rs/nice-linux-s390x-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-musl": "1.0.1", - "@napi-rs/nice-win32-arm64-msvc": "1.0.1", - "@napi-rs/nice-win32-ia32-msvc": "1.0.1", - "@napi-rs/nice-win32-x64-msvc": "1.0.1" + "@napi-rs/nice-android-arm-eabi": "1.0.2", + "@napi-rs/nice-android-arm64": "1.0.2", + "@napi-rs/nice-darwin-arm64": "1.0.2", + "@napi-rs/nice-darwin-x64": "1.0.2", + "@napi-rs/nice-freebsd-x64": "1.0.2", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.2", + "@napi-rs/nice-linux-arm64-gnu": "1.0.2", + "@napi-rs/nice-linux-arm64-musl": "1.0.2", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.2", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.2", + "@napi-rs/nice-linux-s390x-gnu": "1.0.2", + "@napi-rs/nice-linux-x64-gnu": "1.0.2", + "@napi-rs/nice-linux-x64-musl": "1.0.2", + "@napi-rs/nice-win32-arm64-msvc": "1.0.2", + "@napi-rs/nice-win32-ia32-msvc": "1.0.2", + "@napi-rs/nice-win32-x64-msvc": "1.0.2" } }, "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", - "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.2.tgz", + "integrity": "sha512-15rqDjmQV5q62ynD+HqSA5puWdN6xBqsXLyKiUwuSlSlxn791/cafJ9Z2SWFgsfIt19lx282Yp8xLrM5vM4K1g==", "cpu": [ "arm" ], @@ -2088,9 +3902,9 @@ } }, "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", - "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.2.tgz", + "integrity": "sha512-XoLQ/LVwotssSH59qYbFkWKcDCoE+Kg/qVr2Iuudmgzp7/EplwqFtUU62kSyWOMGf6IaS8YJii6OyMdPCtmnjQ==", "cpu": [ "arm64" ], @@ -2105,9 +3919,9 @@ } }, "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-/MlDzQZokboq5P1r+ixDLDGylUgPcGEZ3gWLVWP+pwHiB8Yp4nmJB8QTHRtVZo9U8AiJVc/F8rusoJEnNTBWBQ==", "cpu": [ "arm64" ], @@ -2122,9 +3936,9 @@ } }, "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", - "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.2.tgz", + "integrity": "sha512-3xJRmU34oMY7tMKpkloAEyBAX7PbnMMwNsuYUWuPnEyrxWtU9M0IfXZSnKaf5hUfz6CX4d6mlZEkdYVCSxEyZw==", "cpu": [ "x64" ], @@ -2139,9 +3953,9 @@ } }, "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", - "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.2.tgz", + "integrity": "sha512-xImTavIYNV47a5dm4SJXDVPtDZvNtKHFAQpiRrOgMENh1vBzg/zU5vI+4M/onrzge7HeczlGtL7q/yI9xMd7zg==", "cpu": [ "x64" ], @@ -2156,9 +3970,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", - "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.2.tgz", + "integrity": "sha512-TpCgEmKkRodB1Vfk0pkIaDdaNIukbKyV3VQ/Goyc/T1s4pMpbBhqNWlfAqol+vODAbtLzq4IProOpnF/mwN5VQ==", "cpu": [ "arm" ], @@ -2173,9 +3987,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz", - "integrity": "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.2.tgz", + "integrity": "sha512-EbZqnLaUdkeOO1c9P0ZmbmEjqgG92YhEunKiKXf/EBSmRNqtv7cEdrkD94Nc7O94QDcD/KHJqDGWnXlKgEV/UQ==", "cpu": [ "arm64" ], @@ -2190,9 +4004,9 @@ } }, "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz", - "integrity": "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.2.tgz", + "integrity": "sha512-aBRUwLmtLN9P+gWY88fCp1eodATsOmJzD/IRfIbRV5LnRrXNfUoD/qSY2tWx+hoy5XmntHIdQX58aeJlILUvZw==", "cpu": [ "arm64" ], @@ -2207,9 +4021,9 @@ } }, "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", - "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.2.tgz", + "integrity": "sha512-Nk56GghKJEeNsW6XfwSYARQdDEjmEmDDDLgDubBjt+20ud7N2z1VdFnIu+dI6dAdGpeRiWSqTzPOETB34lhe4g==", "cpu": [ "ppc64" ], @@ -2224,9 +4038,9 @@ } }, "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", - "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.2.tgz", + "integrity": "sha512-aHFfEcc/antKcTzyHtvr/HQxjam3VJQ0pwx+8rm+KvlvBxUa4t6xsXjy1hScURz34jnpp7t215Lgs3uG7DCKdQ==", "cpu": [ "riscv64" ], @@ -2241,9 +4055,9 @@ } }, "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", - "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.2.tgz", + "integrity": "sha512-pm9e+7qZVPFe/ezjsYNfNDhWkgNcx1gciqr3PrOZIc0PpCD53YAniz5SYAX+3AYUDfpTsiYG9cxlw9nH7CJTCA==", "cpu": [ "s390x" ], @@ -2258,9 +4072,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", - "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.2.tgz", + "integrity": "sha512-RaKzkjOhH+1MKv2CdsdK5SEOQIH86bPPbEbZ4rHPCwpk+KiMnjIJ+gH/X1JzAImVrkdUgB7XjYogEwcqL4TksA==", "cpu": [ "x64" ], @@ -2275,9 +4089,9 @@ } }, "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", - "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.2.tgz", + "integrity": "sha512-zxYjTfTfWP9esEvGt4fdurJqtogDgPQGADFTSEGa0ZVYwKfc0mH4uVLUcBowm/o5TQS4n0pfAYDP9rDgVEV4Aw==", "cpu": [ "x64" ], @@ -2292,9 +4106,9 @@ } }, "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", - "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.2.tgz", + "integrity": "sha512-TkeLbSV1Byfn66XRM2BGcDufZq2RzR7S6n8fJjHSopyYZJ2h8ZNheR6Q7t0nV8dzNsngUCUxDjCkHdP20Gp5tQ==", "cpu": [ "arm64" ], @@ -2309,9 +4123,9 @@ } }, "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", - "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.2.tgz", + "integrity": "sha512-BYCSzGRVEmeNyzQmYdAwTvlHaA/SRwfXlMWUmDwqU1ICctcuj7zo5rGxBkRYuupgl5y73wMN6qLK1Fflodlwgg==", "cpu": [ "ia32" ], @@ -2326,9 +4140,9 @@ } }, "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", - "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.2.tgz", + "integrity": "sha512-w1Tz6BMpoe3+ogDwF6jjBQHhCUQeLY3Ki2oMwNXD6vFVSuGDQ+g3fZCiQZUgJHGgEDBF5g+J+6PYnm0t91OmYA==", "cpu": [ "x64" ], @@ -2359,6 +4173,61 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@ngtools/webpack": { + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.0.5.tgz", + "integrity": "sha512-XH+NTCaOT0gBN7XXmNgMSOsQ0VXwv6E/dKcg1iu4DqYpxklYZ7EdhgVZn5vhwpqff3VRwJ8VFzp4U38AuppXrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^20.0.0", + "typescript": ">=5.8 <5.9", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@npmcli/agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", @@ -3463,6 +5332,16 @@ "@types/node": "*" } }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -3473,6 +5352,17 @@ "@types/node": "*" } }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "node_modules/@types/cors": { "version": "2.8.19", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", @@ -3483,6 +5373,28 @@ "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", @@ -3522,6 +5434,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/jasmine": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.8.tgz", @@ -3529,6 +5451,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -3546,6 +5475,16 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/node-forge": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.12.tgz", + "integrity": "sha512-a0ToKlRVnUw3aXKQq2F+krxZKq7B8LEQijzPn5RdFAMatARD2JX9o8FBpMXOOrjob0uc13aN+V/AXniOXW4d9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -3560,6 +5499,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/send": { "version": "0.17.5", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", @@ -3571,6 +5517,16 @@ "@types/node": "*" } }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/serve-static": { "version": "1.15.8", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", @@ -3583,6 +5539,26 @@ "@types/send": "*" } }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@vitejs/plugin-basic-ssl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.0.0.tgz", @@ -3596,6 +5572,181 @@ "vite": "^6.0.0" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -3626,6 +5777,48 @@ "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==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", @@ -3671,6 +5864,29 @@ } } }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -3687,6 +5903,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, "node_modules/ansi-regex": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", @@ -3740,6 +5969,127 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", + "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5.61.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3757,6 +6107,13 @@ "node": "^4.5.0 || >= 5.9" } }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, "node_modules/beasties": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.4.tgz", @@ -3777,6 +6134,16 @@ "node": ">=14.0.0" } }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3810,6 +6177,17 @@ "node": ">=18" } }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -3900,6 +6278,22 @@ "dev": true, "license": "MIT" }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -4070,6 +6464,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001724", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001724.tgz", @@ -4137,6 +6541,16 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, "node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -4297,6 +6711,34 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4324,6 +6766,72 @@ "dev": true, "license": "MIT" }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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", @@ -4347,6 +6855,16 @@ "node": ">= 0.10.0" } }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4462,6 +6980,77 @@ "node": ">=6.6.0" } }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.0.tgz", + "integrity": "sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.43.0.tgz", + "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -4476,6 +7065,33 @@ "node": ">= 0.10" } }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4507,6 +7123,42 @@ "node": ">= 8" } }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -4537,6 +7189,19 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", @@ -4571,6 +7236,49 @@ } } }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4602,6 +7310,13 @@ "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, "node_modules/di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -4609,6 +7324,19 @@ "dev": true, "license": "MIT" }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -4722,6 +7450,16 @@ "dev": true, "license": "MIT" }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -4838,6 +7576,20 @@ "node": ">= 0.6" } }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/ent": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.2.tgz", @@ -4897,6 +7649,30 @@ "dev": true, "license": "MIT" }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -4915,6 +7691,13 @@ "node": ">= 0.4" } }, + "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/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -4968,6 +7751,19 @@ "@esbuild/win32-x64": "0.25.5" } }, + "node_modules/esbuild-wasm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.5.tgz", + "integrity": "sha512-V/rbdOws2gDcnCAECfPrajhuafI0WY4WumUgc8ZHwOLnvmM0doLQ+dqvVFI2qkVxQsvo6880aC9IjpyDqcwwTw==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -4984,6 +7780,63 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -5000,6 +7853,16 @@ "dev": true, "license": "MIT" }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/exponential-backoff": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", @@ -5091,6 +7954,23 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", @@ -5108,6 +7988,29 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fdir": { "version": "6.4.6", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", @@ -5153,6 +8056,33 @@ "node": ">= 0.8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flatted": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", @@ -5207,6 +8137,20 @@ "node": ">= 0.6" } }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", @@ -5387,16 +8331,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -5416,6 +8350,13 @@ "dev": true, "license": "ISC" }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5486,6 +8427,52 @@ "dev": true, "license": "ISC" }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -5533,6 +8520,13 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -5558,6 +8552,13 @@ "node": ">= 0.8" } }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -5587,6 +8588,24 @@ "node": ">= 14" } }, + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -5601,6 +8620,16 @@ "node": ">= 14" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -5613,6 +8642,19 @@ "node": ">=0.10.0" } }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/ignore-walk": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", @@ -5652,6 +8694,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/immutable": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", @@ -5659,6 +8715,23 @@ "dev": true, "license": "MIT" }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5720,6 +8793,13 @@ "node": ">= 0.10" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -5749,6 +8829,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5785,6 +8881,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", @@ -5798,6 +8913,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -5808,6 +8936,29 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", @@ -5846,6 +8997,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, "node_modules/isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", @@ -5866,6 +9047,16 @@ "dev": true, "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -5970,6 +9161,47 @@ "dev": true, "license": "MIT" }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5977,6 +9209,19 @@ "dev": true, "license": "MIT" }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", @@ -6183,6 +9428,16 @@ "dev": true, "license": "MIT" }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, "node_modules/karma/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6518,6 +9773,157 @@ "node": ">=10" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.3.0.tgz", + "integrity": "sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.0.tgz", + "integrity": "sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, "node_modules/listr2": { "version": "8.3.3", "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", @@ -6589,6 +9995,42 @@ "@lmdb/lmdb-win32-x64": "3.3.0" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -6596,6 +10038,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", @@ -6807,6 +10256,26 @@ "node": ">= 0.8" } }, + "node_modules/memfs": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", + "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, "node_modules/merge-descriptors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", @@ -6819,13 +10288,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -6840,7 +10335,6 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">=8.6" }, @@ -6895,6 +10389,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7134,6 +10656,20 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" } }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, "node_modules/mute-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", @@ -7163,6 +10699,24 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -7172,6 +10726,13 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, "node_modules/ngx-scrollbar": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/ngx-scrollbar/-/ngx-scrollbar-18.0.0.tgz", @@ -7195,6 +10756,16 @@ "license": "MIT", "optional": true }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-gyp": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", @@ -7349,6 +10920,16 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-bundled": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", @@ -7485,6 +11066,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -7497,6 +11085,16 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7522,6 +11120,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ora": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", @@ -7564,6 +11181,38 @@ "node": ">=0.10.0" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-map": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", @@ -7577,6 +11226,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", @@ -7616,6 +11293,55 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -7690,6 +11416,16 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -7770,14 +11506,25 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/piscina": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.0.0.tgz", - "integrity": "sha512-R+arufwL7sZvGjAhSMK3TfH55YdGOqhpKXkcwQJr432AAnJX/xxX19PA4QisrmJ+BTTfZVggaz6HexbkQq1l1Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.1.tgz", + "integrity": "sha512-9rPDIPsCwOivatEZGM8+apgM7AiTDLSnpwMmLaSmdm2PeND8bFJzZLZZxyrJjLH8Xx/MpKoVaKf+vZOWALNHbw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.x" + "node": ">=20.x" }, "optionalDependencies": { "@napi-rs/nice": "^1.0.1" @@ -7812,6 +11559,38 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", @@ -7819,6 +11598,90 @@ "dev": true, "license": "MIT" }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/primeng": { "version": "19.1.3", "resolved": "https://registry.npmjs.org/primeng/-/primeng-19.1.3.tgz", @@ -7850,6 +11713,13 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -7877,6 +11747,14 @@ "node": ">= 0.10" } }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -7909,6 +11787,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -7933,6 +11842,21 @@ "node": ">= 0.8" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -7954,6 +11878,84 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -8002,6 +12004,58 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -8029,6 +12083,17 @@ "node": ">= 4" } }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -8109,6 +12174,43 @@ "node": ">= 18" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -8183,6 +12285,114 @@ "@parcel/watcher": "^2.4.1" } }, + "node_modules/sass-loader": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -8218,6 +12428,149 @@ "node": ">= 18" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "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/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/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/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/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", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", @@ -8239,6 +12592,19 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -8262,6 +12628,19 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -8538,6 +12917,18 @@ "node": ">= 0.6" } }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, "node_modules/socks": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", @@ -8588,6 +12979,27 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -8645,6 +13057,38 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -8702,6 +13146,16 @@ "node": ">=8.0" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -8842,6 +13296,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -8943,6 +13407,80 @@ "dev": true, "license": "ISC" }, + "node_modules/terser": { + "version": "5.39.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.1.tgz", + "integrity": "sha512-Mm6+uad0ZuDtcV8/4uOZQDQ8RuiC5Pu+iZRedJtF7yA/27sPL7d++In/AJKpWZlU3SYMPPkVfwetn6sgZ66pUA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", @@ -8995,6 +13533,33 @@ "node": ">=0.6" } }, + "node_modules/tree-dump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", + "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -9043,6 +13608,13 @@ "node": ">= 0.6" } }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -9091,6 +13663,50 @@ "dev": true, "license": "MIT" }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/unique-filename": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", @@ -9167,6 +13783,13 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -9177,6 +13800,16 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -9207,6 +13840,12 @@ "node": ">= 0.8" } }, + "node_modules/viewerjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/viewerjs/-/viewerjs-1.11.7.tgz", + "integrity": "sha512-0JuVqOmL5v1jmEAlG5EBDR3XquxY8DWFQbFMprOXgaBB0F7Q/X9xWdEaQc59D8xzwkdUgXEMSSknTpriq95igg==", + "license": "MIT" + }, "node_modules/vite": { "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", @@ -9306,6 +13945,16 @@ "node": ">=10.13.0" } }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/weak-lru-cache": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", @@ -9314,6 +13963,756 @@ "license": "MIT", "optional": true }, + "node_modules/webpack": { + "version": "5.99.8", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", + "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@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", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "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", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/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/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz", + "integrity": "sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@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.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.7", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "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" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/webpack-dev-server/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-server/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/webpack-dev-server/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/webpack-dev-server/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/webpack-dev-server/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/webpack-dev-server/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/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/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -9327,6 +14726,13 @@ "which": "bin/which" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -9641,6 +15047,19 @@ "node": ">=8" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yoctocolors-cjs": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", diff --git a/jambotron-ui/package.json b/jambotron-ui/package.json index b46da5f..389e2e8 100644 --- a/jambotron-ui/package.json +++ b/jambotron-ui/package.json @@ -23,6 +23,7 @@ "@angular/router": "^20.0.0", "@angular/ssr": "^20.0.2", "@ant-design/icons-angular": "19.0.0", + "@hreimer/angular-image-viewer": "^0.14.1", "@ng-bootstrap/ng-bootstrap": "19.0.0", "@popperjs/core": "2.11.8", "@primeng/themes": "^19.1.3", @@ -32,6 +33,7 @@ "primeng": "^19.1.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", + "viewerjs": "^1.11.7", "zone.js": "~0.15.0" }, "devDependencies": { diff --git a/jambotron-ui/src/app/app.config.ts b/jambotron-ui/src/app/app.config.ts index c1108fe..8d20721 100644 --- a/jambotron-ui/src/app/app.config.ts +++ b/jambotron-ui/src/app/app.config.ts @@ -11,10 +11,12 @@ import { provideClientHydration, withEventReplay } from '@angular/platform-brows import {AppModule} from './app.module'; import {providePrimeNG} from 'primeng/config'; import Aura from '@primeng/themes/aura'; +import {provideAnimations} from '@angular/platform-browser/animations'; export const appConfig: ApplicationConfig = { providers: [ provideBrowserGlobalErrorListeners(), + provideAnimations(), provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideClientHydration(withEventReplay()), diff --git a/jambotron-ui/src/app/app.module.ts b/jambotron-ui/src/app/app.module.ts index 772334d..191e85c 100644 --- a/jambotron-ui/src/app/app.module.ts +++ b/jambotron-ui/src/app/app.module.ts @@ -5,7 +5,7 @@ import { BrowserModule } import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { MatIconModule } from '@angular/material/icon'; -import {provideHttpClient, withInterceptorsFromDi} from '@angular/common/http'; +import {HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi} from '@angular/common/http'; import {MainComponent} from './main-module/main.component/main.component'; import {authInterceptorProviders} from './helpers/auth.interceptor'; @@ -15,6 +15,10 @@ import {SettingsComponent} from './admin-module/settings.component/settings.comp import {SystemComponent} from './admin-module/system.component/system.component'; import {AppRoutingModule} from './app.routes'; import {App} from './app'; +import {CustomHttpInterceptor} from './helpers/custom-http-interceptor'; +import {AngularImageViewerModule} from '@hreimer/angular-image-viewer'; +import {MainModule} from './main-module/main.module'; +import {CommonModule} from '@angular/common'; @NgModule({ declarations: [ @@ -29,10 +33,15 @@ import {App} from './app'; AdminComponent, AdminWelcomeComponent, SettingsComponent, - SystemComponent + SystemComponent, + ], providers: [ - authInterceptorProviders,provideHttpClient(withInterceptorsFromDi())], + authInterceptorProviders,provideHttpClient(withInterceptorsFromDi()),{ + provide: HTTP_INTERCEPTORS, + useClass: CustomHttpInterceptor, + multi: true + }], bootstrap: [], schemas: [ CUSTOM_ELEMENTS_SCHEMA ] diff --git a/jambotron-ui/src/app/app.routes.ts b/jambotron-ui/src/app/app.routes.ts index cd547c9..a1a9723 100644 --- a/jambotron-ui/src/app/app.routes.ts +++ b/jambotron-ui/src/app/app.routes.ts @@ -6,7 +6,7 @@ import {NgModule} from '@angular/core'; export const routes: Routes = [ { path: '', - redirectTo: 'main/home', + redirectTo: 'main/generate-image', pathMatch: 'full' }, { diff --git a/jambotron-ui/src/app/components/generate-image.component/generate-image.component.html b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.html new file mode 100644 index 0000000..decb2bc --- /dev/null +++ b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.html @@ -0,0 +1,27 @@ +

generate-image.component works!

+ + + + + Generate image + + + + Query + + + + + + @if (spinnerService.visibility | async) { + + } @else { + + } + + + + + + diff --git a/jambotron-ui/src/app/components/generate-image.component/generate-image.component.scss b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.scss new file mode 100644 index 0000000..f58feb6 --- /dev/null +++ b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.scss @@ -0,0 +1,3 @@ +.example-full-width { + width: 100%; +} diff --git a/jambotron-ui/src/app/components/generate-image.component/generate-image.component.spec.ts b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.spec.ts new file mode 100644 index 0000000..255f5e0 --- /dev/null +++ b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GenerateImageComponent } from './generate-image.component'; + +describe('GenerateImageComponent', () => { + let component: GenerateImageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [GenerateImageComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(GenerateImageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/components/generate-image.component/generate-image.component.ts b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.ts new file mode 100644 index 0000000..53e58dc --- /dev/null +++ b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.ts @@ -0,0 +1,89 @@ +import {Component, CUSTOM_ELEMENTS_SCHEMA, Input, OnInit, Renderer2} from '@angular/core'; +import {FormsModule} from '@angular/forms'; +import {MatButton} from '@angular/material/button'; +import {MatCard, MatCardActions, MatCardContent, MatCardHeader} from '@angular/material/card'; +import {MatFormField, MatInput, MatLabel} from '@angular/material/input'; +import {AsyncPipe, NgIf, NgOptimizedImage} from '@angular/common'; +import {Image} from '../../models/image'; +import {ZhipuaiImageService} from '../../services/zhipuai-image.service'; +import {MatProgressSpinner} from '@angular/material/progress-spinner'; +import {SpinnerService} from '../../services/spinner.service'; + +import Viewer from 'viewerjs'; + + +@Component({ + selector: 'app-generate-image.component', + imports: [ + FormsModule, + MatButton, + MatCard, + MatCardActions, + MatCardContent, + MatCardHeader, + MatFormField, + MatInput, + MatLabel, + MatProgressSpinner, + AsyncPipe, + + + ], + templateUrl: './generate-image.component.html', + styleUrl: './generate-image.component.scss', + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class GenerateImageComponent implements OnInit { + + isSpinnerVisible = false; + + query : string = ''; + + images = []; + image: Image = { + url: '' + }; + viewer: any; + + constructor(private zhipuaiImageService: ZhipuaiImageService,public spinnerService: SpinnerService, + private renderer: Renderer2) { + + } + + ngOnInit(): void { + + const img = this.renderer.selectRootElement('img'); + this.viewer = new Viewer(img, { + inline: true, + }); + this.viewer.zoomTo(1); + + } + + generateImage(){ + this.zhipuaiImageService.generate(this.query).subscribe( + data => { + + this.image = data; + // @ts-ignore + this.images = [this.image.url]; + + + console.log(data); + }, + error => { + console.log(error); + } + ).add(() => { + //this.viewer. + this.viewer.update(); + }) + } + + zoomPlus(){ + this.viewer.zoomTo(5); + } + zoomMinus(){ + this.viewer.zoomTo(-5); + } +} diff --git a/jambotron-ui/src/app/components/home.component/home.component.html b/jambotron-ui/src/app/components/home.component/home.component.html index c657553..f3f751c 100644 --- a/jambotron-ui/src/app/components/home.component/home.component.html +++ b/jambotron-ui/src/app/components/home.component/home.component.html @@ -1,51 +1,50 @@ -

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

-

home.component works!

+

dfsdgdsgsdg

+ +

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

+

dfsdgdsgsdg

+ + + + + + + diff --git a/jambotron-ui/src/app/components/home.component/home.component.ts b/jambotron-ui/src/app/components/home.component/home.component.ts index 3565fc4..9b001f7 100644 --- a/jambotron-ui/src/app/components/home.component/home.component.ts +++ b/jambotron-ui/src/app/components/home.component/home.component.ts @@ -1,11 +1,76 @@ -import { Component } from '@angular/core'; +import {Component, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {MatFormField, MatInput, MatLabel} from '@angular/material/input'; +import {AngularImageViewerModule, CustomImageEvent, ImageViewerConfig} from '@hreimer/angular-image-viewer'; + +import {ZhipuaiImageService} from '../../services/zhipuai-image.service'; +import {MatButton} from '@angular/material/button'; + + +import {FormsModule} from '@angular/forms'; +import {CommonModule} from '@angular/common'; +import {BrowserModule} from '@angular/platform-browser'; +import {MatCard, MatCardActions, MatCardContent, MatCardHeader} from '@angular/material/card'; +import {Image} from '../../models/image'; @Component({ selector: 'app-home.component', - imports: [], + imports: [ + + AngularImageViewerModule, + FormsModule + ], templateUrl: './home.component.html', - styleUrl: './home.component.scss' + styleUrl: './home.component.scss', + schemas :[CUSTOM_ELEMENTS_SCHEMA] }) + export class HomeComponent { + query : string = ''; + + images = []; + image: Image = { + url: '' + }; + imageIndexOne = 0; + + config: ImageViewerConfig = { customBtns: [{ name: 'print', icon: { + classes: 'fas fa-paperclip', + text: 'link' + } }, { name: 'link', icon: { + classes: 'fas fa-paperclip', + text: 'link' + } }] }; + + submitted: boolean = false; + + constructor(private zhipuaiImageService: ZhipuaiImageService) { + + } + + handleEvent(event: CustomImageEvent) { + console.log(`${event.name} has been click on img ${event.imageIndex + 1}`); + + switch (event.name) { + case 'print': + console.log('run print logic'); + break; + } + } + generateImage(){ + this.zhipuaiImageService.generate(this.query).subscribe( + data => { + this.image = data; + // @ts-ignore + this.images = [this.image.url]; + + + console.log(data); + }, + error => { + console.log(error); + } + ) + } + } diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.html b/jambotron-ui/src/app/main-module/main.component/main.component.html index 1b0b943..7b740b7 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.html +++ b/jambotron-ui/src/app/main-module/main.component/main.component.html @@ -1,11 +1,14 @@ - + @@ -17,14 +20,14 @@ @if (showAdminBoard) { } @if (showAdminBoard) { } @@ -32,7 +35,7 @@ @if (isLoggedIn) { } @@ -40,17 +43,17 @@ } @if (isLoggedIn) { diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.ts b/jambotron-ui/src/app/main-module/main.component/main.component.ts index 9d859bd..1608610 100644 --- a/jambotron-ui/src/app/main-module/main.component/main.component.ts +++ b/jambotron-ui/src/app/main-module/main.component/main.component.ts @@ -1,10 +1,7 @@ import {Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit} from '@angular/core'; //import {NavigationComponent} from '../navigation/navigation.component'; -import {NgClass, NgOptimizedImage} from '@angular/common'; -import {NavigationComponent} from '../../layouts/admin-layout/navigation/navigation.component'; + import {Router, RouterLink, RouterOutlet} from '@angular/router'; -import {BreadcrumbComponent} from '../../components/breadcrumb/breadcrumb.component'; -import {NavBarComponent} from '../../layouts/admin-layout/nav-bar/nav-bar.component'; import {MatToolbar} from '@angular/material/toolbar'; import {MatButton} from '@angular/material/button'; import {IconDirective, IconService} from '@ant-design/icons-angular'; @@ -22,17 +19,20 @@ import { PhoneOutline, ProfileOutline, QuestionCircleOutline, SettingOutline, UnorderedListOutline, UserOutline, WalletOutline } from '@ant-design/icons-angular/icons'; +import {BrowserModule} from '@angular/platform-browser'; +import {CommonModule} from '@angular/common'; @Component({ selector: 'app-main.component', imports: [ - NavBarComponent, + MatToolbar, MatButton, RouterLink, IconDirective, RouterOutlet, - NgOptimizedImage + CommonModule + ], schemas: [ CUSTOM_ELEMENTS_SCHEMA ], templateUrl: './main.component.html', diff --git a/jambotron-ui/src/app/main-module/main.module.ts b/jambotron-ui/src/app/main-module/main.module.ts index 2685f6a..c5b199f 100644 --- a/jambotron-ui/src/app/main-module/main.module.ts +++ b/jambotron-ui/src/app/main-module/main.module.ts @@ -2,12 +2,30 @@ import {RouterModule} from '@angular/router'; import {MainComponent} from './main.component/main.component'; import {mainRouting} from './main.routing'; import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; + +import {HTTP_INTERCEPTORS} from '@angular/common/http'; +import {CustomHttpInterceptor} from '../helpers/custom-http-interceptor'; +import {AngularImageViewerModule} from '@hreimer/angular-image-viewer'; +import {BrowserModule} from '@angular/platform-browser'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; @NgModule({ declarations: [ ], - imports: [mainRouting, MainComponent], + imports: [ + mainRouting, + MainComponent, + + + + ], exports: [RouterModule], + providers: [{ + provide: HTTP_INTERCEPTORS, + useClass: CustomHttpInterceptor, + multi: true + }], }) export class MainModule {} diff --git a/jambotron-ui/src/app/main-module/main.routing.ts b/jambotron-ui/src/app/main-module/main.routing.ts index 3b921a0..205d592 100644 --- a/jambotron-ui/src/app/main-module/main.routing.ts +++ b/jambotron-ui/src/app/main-module/main.routing.ts @@ -6,6 +6,7 @@ import {TutorialsComponent} from '../components/tutorials.component/tutorials.co import {AddTutorialComponent} from '../components/add-tutorial/add-tutorial.component'; import {RegisterComponent} from '../components/register/register.component'; import {ProfileComponent} from '../components/profile/profile.component'; +import {GenerateImageComponent} from '../components/generate-image.component/generate-image.component'; const MAIN_ROUTES: Routes =[ { @@ -21,6 +22,10 @@ const MAIN_ROUTES: Routes =[ path: 'home', component: HomeComponent }, + { + path: 'generate-image', + component: GenerateImageComponent + }, { path: 'tutorials', component: TutorialsComponent diff --git a/jambotron-ui/src/app/models/image.ts b/jambotron-ui/src/app/models/image.ts new file mode 100644 index 0000000..cf7f79b --- /dev/null +++ b/jambotron-ui/src/app/models/image.ts @@ -0,0 +1,5 @@ +export class Image { + + url?:string; + b64Json?:boolean; +} diff --git a/jambotron-ui/src/app/services/system.service.ts b/jambotron-ui/src/app/services/system.service.ts index 599ae32..8885ca0 100644 --- a/jambotron-ui/src/app/services/system.service.ts +++ b/jambotron-ui/src/app/services/system.service.ts @@ -21,6 +21,10 @@ export class SystemService { return this.http.get(this.baseUrl+"/beans"); } + getImage(): Observable { + return this.http.get(this.baseUrl+"/image", {responseType: 'blob'}); + } + getCustomBeans(): Observable { return this.http.get(this.baseUrl+"/beans/custom"); } diff --git a/jambotron-ui/src/app/services/zhipuai-image.service.spec.ts b/jambotron-ui/src/app/services/zhipuai-image.service.spec.ts new file mode 100644 index 0000000..48275f8 --- /dev/null +++ b/jambotron-ui/src/app/services/zhipuai-image.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ZhipuaiImageService } from './zhipuai-image.service'; + +describe('ZhipuaiImageService', () => { + let service: ZhipuaiImageService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ZhipuaiImageService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/services/zhipuai-image.service.ts b/jambotron-ui/src/app/services/zhipuai-image.service.ts new file mode 100644 index 0000000..ab843e2 --- /dev/null +++ b/jambotron-ui/src/app/services/zhipuai-image.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import {Observable} from 'rxjs'; +import {Tutorial} from '../models/tutorial.model'; +import {HttpClient} from '@angular/common/http'; +import {Image} from '../models/image'; +import {SpinnerService} from './spinner.service'; + + + +@Injectable({ + providedIn: 'root' +}) + + +export class ZhipuaiImageService { + baseUrl : string = 'http://localhost:8080/api/zhipuai'; + + constructor(private http: HttpClient,public spinnerService: SpinnerService) { + + } + + generate(query: String): Observable { + return this.http.get(`${(this.baseUrl)}/image/${query}`); + } +} diff --git a/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java b/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java new file mode 100644 index 0000000..15bb15a --- /dev/null +++ b/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java @@ -0,0 +1,39 @@ +package com.jambotronGroup.jambotron.ZhiPuAi; + +import com.jambotronGroup.jambotron.model.NameValueItem; +import org.springframework.ai.image.Image; +import org.springframework.ai.image.ImagePrompt; +import org.springframework.ai.image.ImageResponse; +import org.springframework.ai.zhipuai.ZhiPuAiImageModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600, allowCredentials="true") +@RestController +@RequestMapping("/api/zhipuai") +public class ImageController { + + @Autowired + ZhiPuAiImageService _zhiPuAiImageService; + + @GetMapping("/image/{query}") + public ResponseEntity getImage(@PathVariable("query") String query) { + try { + Image returnValue = _zhiPuAiImageService.generateImage(query).getResult().getOutput(); + //userRepository.findAll().forEach(users::add); + + + if (returnValue == null) { + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + return new ResponseEntity<>(returnValue, HttpStatus.OK); + } catch (Exception e) { + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ZhiPuAiImageService.java b/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ZhiPuAiImageService.java index 5b34d19..59f5b96 100644 --- a/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ZhiPuAiImageService.java +++ b/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ZhiPuAiImageService.java @@ -1,44 +1,45 @@ package com.jambotronGroup.jambotron.ZhiPuAi; +import org.springframework.ai.image.ImagePrompt; +import org.springframework.ai.image.ImageResponse; +import org.springframework.ai.zhipuai.ZhiPuAiImageModel; +import org.springframework.ai.zhipuai.api.ZhiPuAiImageApi; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; //import org.springframework.web.reactive.function.client.WebClient; // -//@Service -//public class ZhiPuAiImageService { -// -// @Value("${spring.ai.zhipuai.base-url}") -// private String baseUrl; -// -// @Value("${spring.ai.zhipuai.api-key}") -// private String apiKey; -// -// private final WebClient webClient; -// -// public ZhiPuAiImageService(WebClient.Builder webClientBuilder) { -// this.webClient = webClientBuilder.baseUrl(baseUrl).build(); -// } -// -// public String generateImage(String prompt) { -// return webClient.post() -// .uri("/image/generate") -// .header("Authorization", "Bearer " + apiKey) -// .bodyValue(new ImageRequest(prompt)) -// .retrieve() -// .bodyToMono(String.class) -// .block(); -// } -// -// private static class ImageRequest { -// private final String prompt; -// -// public ImageRequest(String prompt) { -// this.prompt = prompt; -// } -// -// public String getPrompt() { -// return prompt; -// } -// } -//} \ No newline at end of file +@Service +public class ZhiPuAiImageService { + + @Value("${spring.ai.zhipuai.base-url}") + private String baseUrl; + + @Value("${spring.ai.zhipuai.api-key}") + private String apiKey; + + + private ZhiPuAiImageApi _zhiPuAiImageApi; + + private ZhiPuAiImageModel _zhiPuAiImageModel; + + public ZhiPuAiImageService() { + + _zhiPuAiImageApi = new ZhiPuAiImageApi("628447c8c65845a48a7226391464a2ea.Dw8ci6TiW0BRF5LI"); + + _zhiPuAiImageModel = new ZhiPuAiImageModel(_zhiPuAiImageApi); + } + + public ImageResponse generateImage(String prompt) { + // Create an ImagePrompt object with the desired prompt + ImagePrompt imagePrompt = new ImagePrompt(prompt); + + // Call the generate method to get the image response + ImageResponse imageResponse = _zhiPuAiImageModel.call(imagePrompt); + + // Return the image response + return imageResponse; + } + + +} \ No newline at end of file diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java index b7934ae..29e15e8 100644 --- a/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java +++ b/src/main/java/com/jambotronGroup/jambotron/controllers/SystemController.java @@ -23,6 +23,8 @@ public class SystemController { + + @GetMapping("/data-source-properties") public ResponseEntity> getDataSourceProperties(@RequestParam(required = false) String title) { try { diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/ZhiPuAiController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/ZhiPuAiController.java deleted file mode 100644 index 9c0f817..0000000 --- a/src/main/java/com/jambotronGroup/jambotron/controllers/ZhiPuAiController.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jambotronGroup.jambotron.controllers; - -public class ZhiPuAiController { - - // This class is a placeholder for the ZhiPuAiController. - // You can implement methods to handle requests related to ZhiPuAi functionality. - // For example, you might want to add methods for generating images or processing text. - - // Example method (to be implemented): - // @GetMapping("/generate-image") - // public ResponseEntity generateImage(@RequestParam String prompt) { - // String imageUrl = zhiPuAiService.generateImage(prompt); - // return new ResponseEntity<>(imageUrl, HttpStatus.OK); - // } -} diff --git a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java index 1f334b5..271c865 100644 --- a/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java +++ b/src/main/java/com/jambotronGroup/jambotron/security/WebSecurityConfig.java @@ -120,6 +120,8 @@ public class WebSecurityConfig implements WebMvcConfigurer {// extends WebSecuri .requestMatchers("/api/test/**").permitAll() .requestMatchers("/api/tutorials").permitAll() + .requestMatchers("/api/zhipuai/image/**").permitAll() + .requestMatchers("/api/users").permitAll() .requestMatchers("/api/users/**").permitAll() diff --git a/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java b/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java index 84d3b1a..180b7dd 100644 --- a/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java +++ b/src/main/java/com/jambotronGroup/jambotron/system/SystemService.java @@ -12,4 +12,6 @@ public interface SystemService { List getDataSourceProperties(); + List getImage(); + } diff --git a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java index d7cfe68..71ceac8 100644 --- a/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java +++ b/src/main/java/com/jambotronGroup/jambotron/system/SystemServiceImpl.java @@ -7,6 +7,10 @@ import com.jambotronGroup.jambotron.model.NameValueItem; import com.jambotronGroup.jambotron.utils.EntityLoggingConsumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.ai.image.ImagePrompt; +import org.springframework.ai.image.ImageResponse; +import org.springframework.ai.zhipuai.ZhiPuAiImageModel; +import org.springframework.ai.zhipuai.api.ZhiPuAiImageApi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.ApplicationContext; @@ -29,11 +33,14 @@ public class SystemServiceImpl implements SystemService { @Autowired DataSourceProperties _dataSourceProperties; + @Autowired + ZhiPuAiImageModel imageClient; private static final Logger logger = LoggerFactory.getLogger(SystemServiceImpl.class); + @Override public List getDataSourceProperties(){ List returnValue = new ArrayList(); @@ -45,6 +52,28 @@ public class SystemServiceImpl implements SystemService { return returnValue; } + @Override + public List getImage(){ + List returnValue = new ArrayList(); + + ZhiPuAiImageApi api = new ZhiPuAiImageApi("628447c8c65845a48a7226391464a2ea.Dw8ci6TiW0BRF5LI"); + + ZhiPuAiImageModel imageClient = new ZhiPuAiImageModel(api); + + //imageClient. + + + //imageClient.getDefaultOptions().setUser("44621746535994937"); + + ImageResponse imageResponse = imageClient.call(new ImagePrompt("Ukr zaliznicya station in the style cubisme")); + + + + returnValue.add(new NameValueItem("response", "imageResponse.")); + + return returnValue; + } + @Override public List getLodedBeans() { // Get all bean names from the application context and map them to Bean objects diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f9cbfd8..fe7b370 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -48,5 +48,5 @@ spring.flyway.url=jdbc:postgresql://localhost:5432/jambotronDB -//spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas/v3 -//spring.ai.zhipuai.api-key = 628447c8c65845a48a7226391464a2ea.Dw8ci6TiW0BRF5LI \ No newline at end of file +spring.ai.zhipuai.base-url=https://open.bigmodel.cn/api/paas/v4/images/generations +spring.ai.zhipuai.api-key = 628447c8c65845a48a7226391464a2ea.Dw8ci6TiW0BRF5LI From 25e54d505094580f80d658bd24dcc6aea9a48a4b Mon Sep 17 00:00:00 2001 From: liosha84 <138026690+liosha84@users.noreply.github.com> Date: Fri, 4 Jul 2025 09:48:42 +0300 Subject: [PATCH 6/6] Add custom HTTP interceptor and spinner service for request handling; update CORS settings --- .../generate-image.component.html | 4 ++-- .../helpers/custom-http-interceptor.spec.ts | 7 ++++++ .../app/helpers/custom-http-interceptor.ts | 24 +++++++++++++++++++ .../src/app/services/spinner.service.spec.ts | 16 +++++++++++++ .../src/app/services/spinner.service.ts | 19 +++++++++++++++ .../jambotron/ZhiPuAi/ImageController.java | 2 +- .../jambotron/controllers/AuthController.java | 2 +- 7 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 jambotron-ui/src/app/helpers/custom-http-interceptor.spec.ts create mode 100644 jambotron-ui/src/app/helpers/custom-http-interceptor.ts create mode 100644 jambotron-ui/src/app/services/spinner.service.spec.ts create mode 100644 jambotron-ui/src/app/services/spinner.service.ts diff --git a/jambotron-ui/src/app/components/generate-image.component/generate-image.component.html b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.html index decb2bc..444860a 100644 --- a/jambotron-ui/src/app/components/generate-image.component/generate-image.component.html +++ b/jambotron-ui/src/app/components/generate-image.component/generate-image.component.html @@ -22,6 +22,6 @@ - - + diff --git a/jambotron-ui/src/app/helpers/custom-http-interceptor.spec.ts b/jambotron-ui/src/app/helpers/custom-http-interceptor.spec.ts new file mode 100644 index 0000000..bdf0c36 --- /dev/null +++ b/jambotron-ui/src/app/helpers/custom-http-interceptor.spec.ts @@ -0,0 +1,7 @@ +import { CustomHttpInterceptor } from './custom-http-interceptor'; + +describe('CustomHttpInterceptor', () => { + it('should create an instance', () => { + expect(new CustomHttpInterceptor()).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/helpers/custom-http-interceptor.ts b/jambotron-ui/src/app/helpers/custom-http-interceptor.ts new file mode 100644 index 0000000..df18c65 --- /dev/null +++ b/jambotron-ui/src/app/helpers/custom-http-interceptor.ts @@ -0,0 +1,24 @@ +import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http'; +import {Observable, tap} from 'rxjs'; +import {SpinnerService} from '../services/spinner.service'; +import {Injectable} from '@angular/core'; + +@Injectable() +export class CustomHttpInterceptor implements HttpInterceptor { + + constructor(private spinnerService: SpinnerService) { } + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + + this.spinnerService.show(); + + return next.handle(req) + .pipe(tap((event: HttpEvent) => { + if (event instanceof HttpResponse) { + this.spinnerService.hide(); + } + }, (error) => { + this.spinnerService.hide(); + })); + } +} diff --git a/jambotron-ui/src/app/services/spinner.service.spec.ts b/jambotron-ui/src/app/services/spinner.service.spec.ts new file mode 100644 index 0000000..222e634 --- /dev/null +++ b/jambotron-ui/src/app/services/spinner.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { SpinnerService } from './spinner.service'; + +describe('SpinnerService', () => { + let service: SpinnerService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SpinnerService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/services/spinner.service.ts b/jambotron-ui/src/app/services/spinner.service.ts new file mode 100644 index 0000000..c4fa063 --- /dev/null +++ b/jambotron-ui/src/app/services/spinner.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import {BehaviorSubject} from 'rxjs'; + +@Injectable({ providedIn: 'root'}) +export class SpinnerService { + visibility: BehaviorSubject; + + constructor() { + this.visibility = new BehaviorSubject(false); + } + + show() { + this.visibility.next(true); + } + + hide() { + this.visibility.next(false); + } +} diff --git a/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java b/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java index 15bb15a..f4effa1 100644 --- a/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java +++ b/src/main/java/com/jambotronGroup/jambotron/ZhiPuAi/ImageController.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; -@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600, allowCredentials="true") +@CrossOrigin(origins = "http://localhost:4200, https://pony-sincere-chimp.ngrok-free.app/", maxAge = 3600, allowCredentials="true") @RestController @RequestMapping("/api/zhipuai") public class ImageController { diff --git a/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java b/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java index c962699..c1b1b97 100644 --- a/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java +++ b/src/main/java/com/jambotronGroup/jambotron/controllers/AuthController.java @@ -30,7 +30,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; //@CrossOrigin(origins = "*", maxAge = 3600) -@CrossOrigin(origins = "http://localhost:4200,https://a576-5-248-149-207.ngrok-free.app", maxAge = 3600, allowCredentials="true") +@CrossOrigin(origins = "http://localhost:4200,https://a576-5-248-149-207.ngrok-free.app, https://pony-sincere-chimp.ngrok-free.app", maxAge = 3600, allowCredentials="true") @RestController @RequestMapping("/api/auth") public class AuthController {