From d62cd26245ea380a0aaebcdb8917c1caaf79f63d Mon Sep 17 00:00:00 2001 From: "Gregg B. Jensen" Date: Thu, 22 Aug 2024 13:27:01 -0600 Subject: [PATCH] Replace DevExtreme with Angular and add services (#66) * Accordion replace with material complete * Clean up security output and finish deployments * Fix auth and header as material * Change user panel to material and fix elevation * Got typography working * Replaced environment grid with table * Update lock icon color * Deploy force dialog done * Completed first reactive form * Remove uncessary destroyRef * Move all takeUntilDestroyet into constructors * Fix required issue * Finished deploy rollback * Replaced popover and added mtx extended components * Drage and dro for queue list done in material * Removed label for pull request * Add arrow to autocomplete * Add alert panel and select list for pull requests * Finished add repo dialog * Completed add repo dialog * Completed all dialogs * Fixed loading errors * Environments page finished * Repositories page complete * Settings tabs and left nav converted to material * Started environment form * Fixed settings loading issues * Environment fields complete * Add 2x form field * Switch automation input to table * Update exclude from rollback and finish environment form conversion * Replace accordion on settings form with material * Fix initial environment not open * Expand first queue by default * Migrated slack form added reveal password * Email alias grid in material * Email alias grid migrated to Material * JIRA form converted to Material * Fix settings save and cancel * Completed deploy form to Material * Convert Badge Form to material * Add color preview for badges * Replaced toast with styled snackbar * Move side nav to material * Menu toggle with animations * Backdrop and hide on mobile * Convert side-nav to material * Styled side nav * Add services working * Settings saving * Services saving and loading correctly * Removed all devextreme dependencies * Fixed unauthorized page showing side nav and add reboot * Lowered side of settings --- .../Clients/GitHubAuthClient.cs | 2 +- .../Security/GitHubSecurity.cs | 6 +- .../Services/DeployEnvironmentService.cs | 11 +- .../DeployEnvironments/DeployState.cs | 2 +- .../Auth/AuthenticationExtensions.cs | 2 +- .../IServiceCollectionExtensions.cs | 3 +- .../PrDeploy.Api/appsettings.Development.json | 5 + prdeploy-app/angular.json | 12 - prdeploy-app/devextreme.json | 35 - prdeploy-app/package-lock.json | 1313 +- prdeploy-app/package.json | 12 +- prdeploy-app/src/app/app-navigation.ts | 53 +- prdeploy-app/src/app/app.component.html | 24 +- prdeploy-app/src/app/app.component.scss | 55 +- prdeploy-app/src/app/app.component.ts | 74 +- prdeploy-app/src/app/app.config.ts | 27 +- .../login-callback.component.html | 3 +- .../login-callback.component.ts | 4 +- .../auth/login-error/login-error.component.ts | 4 +- .../src/app/auth/login/login.component.html | 2 +- .../src/app/auth/login/login.component.scss | 2 +- .../src/app/auth/login/login.component.ts | 3 +- .../add-pr-service-dialog.component.html | 74 +- .../add-pr-service-dialog.component.scss | 15 + .../add-pr-service-dialog.component.ts | 121 +- .../deployments/deployments.component.html | 64 +- .../deployments/deployments.component.scss | 10 +- .../app/deployments/deployments.component.ts | 55 +- .../deploy-force-dialog.component.html | 55 +- .../deploy-force-dialog.component.scss | 8 + .../deploy-force-dialog.component.ts | 100 +- .../deploy-rollback-dialog.component.html | 14 +- .../deploy-rollback-dialog.component.ts | 30 +- .../environment-list.component.html | 217 +- .../environment-list.component.scss | 40 +- .../environment-list.component.ts | 32 +- .../pull-request-popover.component.html | 19 - .../pull-request-popover.component.scss | 10 - .../pull-request-popover.component.ts | 45 - .../queue-list/queue-list.component.html | 109 +- .../queue-list/queue-list.component.scss | 34 +- .../queue-list/queue-list.component.ts | 123 +- .../environments-grid.component.html | 94 +- .../environments-grid.component.scss | 4 + .../environments-grid.component.ts | 32 +- .../environments/environments.component.html | 48 +- .../environments/environments.component.scss | 24 +- .../environments/environments.component.ts | 52 +- .../add-repo-dialog.component.html | 29 +- .../add-repo-dialog.component.scss | 11 - .../add-repo-dialog.component.ts | 45 +- .../repositories-grid.component.html | 40 +- .../repositories-grid.component.scss | 22 +- .../repositories-grid.component.ts | 10 +- .../repositories/repositories.component.html | 4 +- .../repositories/repositories.component.scss | 6 +- .../repositories/repositories.component.ts | 50 +- .../badge-form/badge-form.component.html | 117 +- .../badge-form/badge-form.component.scss | 13 + .../badge-form/badge-form.component.ts | 19 +- .../deploy-form/deploy-form.component.html | 126 +- .../deploy-form/deploy-form.component.scss | 2 +- .../deploy-form/deploy-form.component.ts | 7 +- ...add-automation-input-dialog.component.html | 16 +- ...add-automation-input-dialog.component.scss | 11 - .../add-automation-input-dialog.component.ts | 38 +- ...ude-rollback-service-dialog.component.html | 14 +- ...ude-rollback-service-dialog.component.scss | 11 - ...clude-rollback-service-dialog.component.ts | 38 +- .../environment-form.component.html | 204 +- .../environment-form.component.scss | 37 +- .../environment-form.component.ts | 29 +- .../jira-form/jira-form.component.html | 74 +- .../jira-form/jira-form.component.scss | 2 +- .../settings/jira-form/jira-form.component.ts | 29 +- .../add-service-dialog.component.html | 13 + .../add-service-dialog.component.scss | 0 .../add-service-dialog.component.ts | 58 + .../services-form.component.html | 44 + .../services-form.component.scss | 39 + .../services-form/services-form.component.ts | 107 + .../add-environment-dialog.component.html | 16 +- .../add-environment-dialog.component.scss | 15 - .../add-environment-dialog.component.ts | 38 +- .../settings-form.component.html | 94 +- .../settings-form.component.scss | 50 +- .../settings-form/settings-form.component.ts | 114 +- .../src/app/settings/settings.component.html | 44 +- .../src/app/settings/settings.component.scss | 86 +- .../src/app/settings/settings.component.ts | 22 +- ...dd-slack-email-alias-dialog.component.html | 16 +- ...dd-slack-email-alias-dialog.component.scss | 11 - .../add-slack-email-alias-dialog.component.ts | 36 +- .../slack-email-aliases-grid.component.html | 67 +- .../slack-email-aliases-grid.component.scss | 17 +- .../slack-email-aliases-grid.component.ts | 25 +- .../slack-form/slack-form.component.html | 98 +- .../slack-form/slack-form.component.ts | 28 +- .../alert-panel/alert-panel.component.html | 4 + .../alert-panel/alert-panel.component.scss | 47 + .../alert-panel/alert-panel.component.ts | 31 + .../components/alert-panel/alert-type.ts | 1 + .../components/footer/footer.component.html | 5 - .../components/footer/footer.component.ts | 9 +- .../components/header/header.component.html | 71 +- .../components/header/header.component.scss | 68 +- .../components/header/header.component.ts | 51 +- .../src/app/shared/components/index.ts | 4 +- .../notification-bar.component.html | 4 + .../notification-bar.component.scss | 7 + .../notification-bar.component.ts | 25 + .../side-nav-inner-toolbar.component.html | 47 - .../side-nav-inner-toolbar.component.scss | 24 - .../side-nav-inner-toolbar.component.ts | 121 - .../side-nav-outer-toolbar.component.html | 35 - .../side-nav-outer-toolbar.component.scss | 27 - .../side-nav-outer-toolbar.component.ts | 113 - .../side-navigation-menu/side-nav-mode.ts | 1 + .../side-navigation-menu.component.html | 19 +- .../side-navigation-menu.component.scss | 132 +- .../side-navigation-menu.component.ts | 82 +- .../single-card/single-card.component.html | 9 - .../single-card/single-card.component.scss | 41 - .../single-card/single-card.component.ts | 19 - .../user-panel/user-panel.component.html | 37 +- .../user-panel/user-panel.component.scss | 43 +- .../user-panel/user-panel.component.ts | 26 +- .../src/app/shared/directives/index.ts | 1 + .../directives/reveal-password.directive.ts | 27 + prdeploy-app/src/app/shared/managers/index.ts | 1 + .../managers/models/notification-data.ts | 4 +- .../managers/models/notification-type.ts | 1 + .../shared/managers/notification.manager.ts | 23 +- .../src/app/shared/managers/route.manager.ts | 11 +- prdeploy-app/src/app/shared/models/tab.ts | 1 + .../app/shared/services/auth/auth.service.ts | 10 - .../services/errors/global-error.handler.ts | 2 +- prdeploy-app/src/app/shared/services/index.ts | 1 - prdeploy-app/src/dx-styles.scss | 75 - prdeploy-app/src/index.html | 4 +- prdeploy-app/src/main.ts | 5 +- prdeploy-app/src/sass/_reboot.scss | 624 + prdeploy-app/src/sass/_rfs.scss | 348 + prdeploy-app/src/sass/_variables.scss | 23 +- prdeploy-app/src/styles.scss | 164 +- .../themes/dx.generic.prdeploy-scheme.json | 14 - .../src/themes/generated/icons/dxicons.ttf | Bin 34548 -> 0 bytes .../src/themes/generated/icons/dxicons.woff | Bin 34624 -> 0 bytes .../src/themes/generated/icons/dxicons.woff2 | Bin 14372 -> 0 bytes .../src/themes/generated/theme.prdeploy.scss | 20128 ---------------- .../themes/generated/variables.prdeploy.scss | 207 - prdeploy-app/src/themes/m3-theme.scss | 59 +- 152 files changed, 4068 insertions(+), 23893 deletions(-) delete mode 100644 prdeploy-app/devextreme.json delete mode 100644 prdeploy-app/src/app/deployments/pull-request-popover/pull-request-popover.component.html delete mode 100644 prdeploy-app/src/app/deployments/pull-request-popover/pull-request-popover.component.scss delete mode 100644 prdeploy-app/src/app/deployments/pull-request-popover/pull-request-popover.component.ts create mode 100644 prdeploy-app/src/app/settings/services-form/add-service-dialog/add-service-dialog.component.html create mode 100644 prdeploy-app/src/app/settings/services-form/add-service-dialog/add-service-dialog.component.scss create mode 100644 prdeploy-app/src/app/settings/services-form/add-service-dialog/add-service-dialog.component.ts create mode 100644 prdeploy-app/src/app/settings/services-form/services-form.component.html create mode 100644 prdeploy-app/src/app/settings/services-form/services-form.component.scss create mode 100644 prdeploy-app/src/app/settings/services-form/services-form.component.ts create mode 100644 prdeploy-app/src/app/shared/components/alert-panel/alert-panel.component.html create mode 100644 prdeploy-app/src/app/shared/components/alert-panel/alert-panel.component.scss create mode 100644 prdeploy-app/src/app/shared/components/alert-panel/alert-panel.component.ts create mode 100644 prdeploy-app/src/app/shared/components/alert-panel/alert-type.ts create mode 100644 prdeploy-app/src/app/shared/components/notification-bar/notification-bar.component.html create mode 100644 prdeploy-app/src/app/shared/components/notification-bar/notification-bar.component.scss create mode 100644 prdeploy-app/src/app/shared/components/notification-bar/notification-bar.component.ts delete mode 100644 prdeploy-app/src/app/shared/components/side-nav-inner-toolbar/side-nav-inner-toolbar.component.html delete mode 100644 prdeploy-app/src/app/shared/components/side-nav-inner-toolbar/side-nav-inner-toolbar.component.scss delete mode 100644 prdeploy-app/src/app/shared/components/side-nav-inner-toolbar/side-nav-inner-toolbar.component.ts delete mode 100644 prdeploy-app/src/app/shared/components/side-nav-outer-toolbar/side-nav-outer-toolbar.component.html delete mode 100644 prdeploy-app/src/app/shared/components/side-nav-outer-toolbar/side-nav-outer-toolbar.component.scss delete mode 100644 prdeploy-app/src/app/shared/components/side-nav-outer-toolbar/side-nav-outer-toolbar.component.ts create mode 100644 prdeploy-app/src/app/shared/components/side-navigation-menu/side-nav-mode.ts delete mode 100644 prdeploy-app/src/app/shared/components/single-card/single-card.component.html delete mode 100644 prdeploy-app/src/app/shared/components/single-card/single-card.component.scss delete mode 100644 prdeploy-app/src/app/shared/components/single-card/single-card.component.ts create mode 100644 prdeploy-app/src/app/shared/directives/index.ts create mode 100644 prdeploy-app/src/app/shared/directives/reveal-password.directive.ts create mode 100644 prdeploy-app/src/app/shared/managers/models/notification-type.ts delete mode 100644 prdeploy-app/src/dx-styles.scss create mode 100644 prdeploy-app/src/sass/_reboot.scss create mode 100644 prdeploy-app/src/sass/_rfs.scss delete mode 100644 prdeploy-app/src/themes/dx.generic.prdeploy-scheme.json delete mode 100644 prdeploy-app/src/themes/generated/icons/dxicons.ttf delete mode 100644 prdeploy-app/src/themes/generated/icons/dxicons.woff delete mode 100644 prdeploy-app/src/themes/generated/icons/dxicons.woff2 delete mode 100644 prdeploy-app/src/themes/generated/theme.prdeploy.scss delete mode 100644 prdeploy-app/src/themes/generated/variables.prdeploy.scss diff --git a/prdeploy-api/src/PrDeploy.Api.Business/Clients/GitHubAuthClient.cs b/prdeploy-api/src/PrDeploy.Api.Business/Clients/GitHubAuthClient.cs index 9d38127..ef99bdc 100644 --- a/prdeploy-api/src/PrDeploy.Api.Business/Clients/GitHubAuthClient.cs +++ b/prdeploy-api/src/PrDeploy.Api.Business/Clients/GitHubAuthClient.cs @@ -84,7 +84,7 @@ private string CreateJwt(string gitHubToken) new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) }), - Expires = DateTime.UtcNow.AddMinutes(5), + Expires = DateTime.UtcNow.AddHours(8), // Same time as GitHub token expiration. Issuer = _jwtOptions.Issuer, Audience = _jwtOptions.Audience, SigningCredentials = new SigningCredentials( diff --git a/prdeploy-api/src/PrDeploy.Api.Business/Security/GitHubSecurity.cs b/prdeploy-api/src/PrDeploy.Api.Business/Security/GitHubSecurity.cs index 767fbe7..1db32b0 100644 --- a/prdeploy-api/src/PrDeploy.Api.Business/Security/GitHubSecurity.cs +++ b/prdeploy-api/src/PrDeploy.Api.Business/Security/GitHubSecurity.cs @@ -99,7 +99,7 @@ public async Task HasOwnerAccessAsync(string owner) } catch (Exception ex) { - _logger.LogWarning(ex, $"User did not have access to {owner}, trying user account"); + _logger.LogWarning($"User did not have access to {owner}, trying user account.\n{ex.Message}"); } if (!hasAccess) @@ -109,9 +109,9 @@ public async Task HasOwnerAccessAsync(string owner) var user = await _client.User.Current(); hasAccess = string.Equals(owner, user.Login, StringComparison.OrdinalIgnoreCase); } - catch (Exception e) + catch (Exception ex) { - _logger.LogWarning(e, $"User did not have access {owner} user account"); + _logger.LogWarning($"User did not have access {owner} user account.\n {ex.Message}"); } } diff --git a/prdeploy-api/src/PrDeploy.Api.Business/Services/DeployEnvironmentService.cs b/prdeploy-api/src/PrDeploy.Api.Business/Services/DeployEnvironmentService.cs index 1f2418b..2200a10 100644 --- a/prdeploy-api/src/PrDeploy.Api.Business/Services/DeployEnvironmentService.cs +++ b/prdeploy-api/src/PrDeploy.Api.Business/Services/DeployEnvironmentService.cs @@ -131,10 +131,10 @@ public async Task CompareDeployStateAsync(DeployStateComp var sourceState = await GetOrCreateDeployState(input.Owner, input.Repo, sourceStateName); var targetState = await GetOrCreateDeployState(input.Owner, input.Repo, targetStateName); - var targetServiceLookUp = targetState.Services.ToDictionary(s => s.Name, s => s, + var targetServiceLookUp = targetState.Services!.ToDictionary(s => s.Name, s => s, StringComparer.OrdinalIgnoreCase); - var remainingServices = new List(targetState.Services); - var serviceComparisons = new List(sourceState.Services.Count); + var remainingServices = new List(targetState.Services!); + var serviceComparisons = new List(sourceState.Services!.Count); foreach (var sourceService in sourceState.Services) { var serviceComparison = new ServiceComparison @@ -191,6 +191,11 @@ private async Task GetOrCreateDeployState(string owner, string repo await _parameterStore.SetAsync(owner, repo, name, state); } + if (state.Services == null) + { + state.Services = new List(); + } + return state; } } diff --git a/prdeploy-api/src/PrDeploy.Api.Models/DeployEnvironments/DeployState.cs b/prdeploy-api/src/PrDeploy.Api.Models/DeployEnvironments/DeployState.cs index 0ce6c01..1434f8c 100644 --- a/prdeploy-api/src/PrDeploy.Api.Models/DeployEnvironments/DeployState.cs +++ b/prdeploy-api/src/PrDeploy.Api.Models/DeployEnvironments/DeployState.cs @@ -3,6 +3,6 @@ public class DeployState { public int PullNumber { get; set; } - public List Services { get; set; } = null!; + public List? Services { get; set; } = null!; } } diff --git a/prdeploy-api/src/PrDeploy.Api/Auth/AuthenticationExtensions.cs b/prdeploy-api/src/PrDeploy.Api/Auth/AuthenticationExtensions.cs index 0542f09..0586ce1 100644 --- a/prdeploy-api/src/PrDeploy.Api/Auth/AuthenticationExtensions.cs +++ b/prdeploy-api/src/PrDeploy.Api/Auth/AuthenticationExtensions.cs @@ -37,7 +37,7 @@ public static IServiceCollection AddGitHubAuthentication(this IServiceCollection IssuerSigningKey = securityKey, ValidateIssuer = true, ValidateAudience = true, - ValidateLifetime = false, + ValidateLifetime = true, ValidateIssuerSigningKey = true, NameClaimType = JwtRegisteredClaimNames.Sub }; diff --git a/prdeploy-api/src/PrDeploy.Api/IServiceCollectionExtensions.cs b/prdeploy-api/src/PrDeploy.Api/IServiceCollectionExtensions.cs index a4c55e2..1844b05 100644 --- a/prdeploy-api/src/PrDeploy.Api/IServiceCollectionExtensions.cs +++ b/prdeploy-api/src/PrDeploy.Api/IServiceCollectionExtensions.cs @@ -1,3 +1,4 @@ +using System.Net; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption; @@ -52,7 +53,7 @@ public static IServiceCollection AddPrDeployApi(this IServiceCollection services var userToken = s.GetRequiredService().UserToken; if (string.IsNullOrEmpty(userToken)) { - throw new BadHttpRequestException("No token in security context."); + throw new HttpRequestException("No token in security context.", null, HttpStatusCode.Unauthorized); } var credentials = new Credentials(userToken); diff --git a/prdeploy-api/src/PrDeploy.Api/appsettings.Development.json b/prdeploy-api/src/PrDeploy.Api/appsettings.Development.json index ccf49b6..f20f880 100644 --- a/prdeploy-api/src/PrDeploy.Api/appsettings.Development.json +++ b/prdeploy-api/src/PrDeploy.Api/appsettings.Development.json @@ -1,4 +1,9 @@ { + "Aws": { + "Region": "us-west-2", + "Profile": "prdeploy", + "SecretPathPrefix": "/prdeploy" + }, "Serilog": { "MinimumLevel": { "Default": "Debug" diff --git a/prdeploy-app/angular.json b/prdeploy-app/angular.json index cb27ba3..9d25de9 100644 --- a/prdeploy-app/angular.json +++ b/prdeploy-app/angular.json @@ -47,24 +47,12 @@ "inlineStyleLanguage": "scss", "assets": ["src/favicon.ico", "src/assets"], "styles": [ - "node_modules/devextreme/dist/css/dx.common.css", - "node_modules/bootstrap-icons/font/bootstrap-icons.css", - "src/themes/generated/theme.prdeploy.scss", "src/themes/m3-theme.scss", - "src/dx-styles.scss", "src/styles.scss" ], "stylePreprocessorOptions": { "includePaths": ["src/sass"] }, - "allowedCommonJsDependencies": [ - "jszip", - "devexpress-diagram", - "devexpress-gantt", - "devextreme-quill", - "devextreme-showdown", - "country-state-city-slim" - ], "scripts": ["node_modules/marked/marked.min.js", "node_modules/emoji-toolkit/lib/js/joypixels.min.js"] }, "configurations": { diff --git a/prdeploy-app/devextreme.json b/prdeploy-app/devextreme.json deleted file mode 100644 index 1f72233..0000000 --- a/prdeploy-app/devextreme.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "applicationEngine": "angular", - "build": { - "commands": [ - { - "command": "build-theme", - "options": { - "inputFile": "src/themes/metadata.base.json", - "outputFile": "src/themes/generated/theme.base.css" - } - }, - { - "command": "build-theme", - "options": { - "inputFile": "src/themes/metadata.additional.json", - "outputFile": "src/themes/generated/theme.additional.css" - } - }, - { - "command": "export-theme-vars", - "options": { - "inputFile": "src/themes/metadata.base.json", - "outputFile": "src/sass/variables" - } - }, - { - "command": "export-theme-vars", - "options": { - "inputFile": "src/themes/metadata.additional.json", - "outputFile": "src/sass/variables" - } - } - ] - } -} diff --git a/prdeploy-app/package-lock.json b/prdeploy-app/package-lock.json index 1449201..4391f81 100644 --- a/prdeploy-app/package-lock.json +++ b/prdeploy-app/package-lock.json @@ -7,7 +7,6 @@ "": { "name": "prdeploy-app", "version": "0.0.0", - "hasInstallScript": true, "dependencies": { "@angular/animations": "^18.2.0", "@angular/cdk": "~18.2.0", @@ -20,12 +19,10 @@ "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", "@apollo/client": "^3.11.4", + "@ng-matero/extensions": "^18.2.0", "angular-oauth2-oidc": "^17.0.2", "apollo-angular": "^7.1.1", "bootstrap-icons": "^1.11.3", - "devextreme": "24.1.5", - "devextreme-angular": "24.1.5", - "devextreme-schematics": "1.7.1", "emoji-toolkit": "^9.0.1", "graphql": "^16.9.0", "lodash": "^4.17.21", @@ -55,8 +52,6 @@ "@typescript-eslint/eslint-plugin": "6.19.0", "@typescript-eslint/parser": "6.19.0", "cross-env": "^7.0.3", - "devextreme-cli": "latest", - "devextreme-themebuilder": "23.2.7", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -2913,6 +2908,7 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2982,32 +2978,17 @@ "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", "dev": true, - "license": "(Apache-2.0 AND BSD-3-Clause)" - }, - "node_modules/@devexpress/utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@devexpress/utils/-/utils-1.4.3.tgz", - "integrity": "sha512-UmmIwVRGQ6u6itE/zJ1xNmMuugXo/t1fWBtjROb7mhq2nY4ecDBdnRIqogKWAasGbMbhCxW9+ijkgRaNBVCIzQ==", - "license": "SEE LICENSE IN README.md", - "dependencies": { - "tslib": "2.3.1" - } - }, - "node_modules/@devexpress/utils/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "license": "0BSD" + "license": "(Apache-2.0 AND BSD-3-Clause)", + "optional": true, + "peer": true }, - "node_modules/@devextreme/runtime": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@devextreme/runtime/-/runtime-3.0.13.tgz", - "integrity": "sha512-//24I6vo5a+XG/Ul3+vOGqU4M22IWyldpECxLY8iyGJWA5fiNaYzAedrMV2Ixo5oRj8DawiHTZKy5iKKF9ks5g==", - "license": "SEE LICENSE IN LICENSE", - "dependencies": { - "inferno": "^7.4.6", - "inferno-create-element": "^7.4.6", - "inferno-hydrate": "^7.4.6" + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" } }, "node_modules/@discoveryjs/json-ext": { @@ -5434,6 +5415,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -5714,6 +5696,43 @@ "@tybys/wasm-util": "^0.9.0" } }, + "node_modules/@ng-matero/extensions": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/@ng-matero/extensions/-/extensions-18.2.0.tgz", + "integrity": "sha512-f7ZOOSCh7F+uzNR4wuoiLIDwnm9QsS+bhCZ8jXVqG2JRT+oyHtf/JjrRLM2Mc5LCFhyO7fGaOl56qHTWu7e12g==", + "license": "MIT", + "dependencies": { + "@ng-select/ng-select": "^13.7.0", + "ngx-color": "^9.0.0", + "photoviewer": "^3.10.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@angular/animations": ">=18.2.0", + "@angular/cdk": ">=18.2.0", + "@angular/common": ">=18.2.0", + "@angular/core": ">=18.2.0", + "@angular/material": ">=18.2.0" + } + }, + "node_modules/@ng-select/ng-select": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-13.7.0.tgz", + "integrity": "sha512-GMNu3bLYxWAbgy9pXZ4RgnWp/cxRcrWRQdxLLyg8p9gMCLpim1p4TXR8laXJKK25MKG/LEaWgs+90yCVOoWgZA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.1" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8" + }, + "peerDependencies": { + "@angular/common": "^18.0.0", + "@angular/core": "^18.0.0", + "@angular/forms": "^18.0.0" + } + }, "node_modules/@ngtools/webpack": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.0.tgz", @@ -6317,18 +6336,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, "node_modules/@repeaterjs/repeater": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", @@ -7270,17 +7277,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz", - "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz", + "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.1.0", - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/typescript-estree": "8.1.0" + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/typescript-estree": "8.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7294,15 +7301,15 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz", - "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", + "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/visitor-keys": "8.1.0" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7313,9 +7320,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", - "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", "dev": true, "license": "MIT", "peer": true, @@ -7328,15 +7335,15 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz", - "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", + "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", "dev": true, "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", - "@typescript-eslint/visitor-keys": "8.1.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7358,14 +7365,14 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", - "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/types": "8.2.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -7971,6 +7978,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7993,7 +8001,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -8007,7 +8015,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -8314,6 +8322,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -8351,7 +8360,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8364,6 +8373,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -8375,6 +8385,7 @@ "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", @@ -8471,49 +8482,6 @@ ], "license": "MIT" }, - "node_modules/bootstrap4": { - "name": "bootstrap", - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", - "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/twbs" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - } - ], - "license": "MIT", - "peerDependencies": { - "jquery": "1.9.1 - 3", - "popper.js": "^1.16.1" - } - }, - "node_modules/bootstrap5": { - "name": "bootstrap", - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", - "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/twbs" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - } - ], - "license": "MIT", - "peerDependencies": { - "@popperjs/core": "^2.11.8" - } - }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -8528,7 +8496,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -8584,6 +8552,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -8609,7 +8578,9 @@ "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", "dev": true, - "license": "MIT/X11" + "license": "MIT/X11", + "optional": true, + "peer": true }, "node_modules/buffer-from": { "version": "1.1.2", @@ -8885,7 +8856,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -8926,29 +8897,6 @@ "node": ">=6.0" } }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/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/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -8963,6 +8911,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -8975,6 +8924,7 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9149,6 +9099,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -9477,17 +9428,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-js": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz", - "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-js-compat": { "version": "3.38.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", @@ -9506,6 +9446,7 @@ "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/cose-base": { @@ -10431,6 +10372,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, "license": "MIT", "dependencies": { "clone": "^1.0.2" @@ -10565,573 +10507,108 @@ "dev": true, "license": "MIT" }, - "node_modules/devexpress-diagram": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/devexpress-diagram/-/devexpress-diagram-2.2.10.tgz", - "integrity": "sha512-UkukX+bwAqA1wYTCtjytKItMP0Yn3bvbxN1gPV8Hd+cfv0AOdyPNJKNin2ZiMEM76REcRguuYbIEujRX0q6duA==", - "license": "SEE LICENSE IN README.md", - "dependencies": { - "@devexpress/utils": "^1.4.3", - "es6-object-assign": "^1.1.0" - } - }, - "node_modules/devexpress-gantt": { - "version": "4.1.56", - "resolved": "https://registry.npmjs.org/devexpress-gantt/-/devexpress-gantt-4.1.56.tgz", - "integrity": "sha512-jnnvDYDDzjqr8pnWYsAM96mug6yXEQ1H26QLLBRbwLC72ckb1yv0Rk6DUae9ZwewIFNzIKHt1klQMF/KD9Mb8A==", - "license": "SEE LICENSE IN README.md", - "dependencies": { - "@devexpress/utils": "^1.4.3", - "tslib": "2.3.1" + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.3.1" } }, - "node_modules/devexpress-gantt/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "license": "0BSD" - }, - "node_modules/devextreme": { - "version": "24.1.5", - "resolved": "https://registry.npmjs.org/devextreme/-/devextreme-24.1.5.tgz", - "integrity": "sha512-pkIrgCxa2hlwDef7RYSbD74VSb2oCVnC31RhVOQvsSvhft+fR0JAJpD9V0U5z4rigekoQUWYwhM3y9N7hXGhWw==", - "license": "SEE LICENSE IN README.md", - "dependencies": { - "@babel/runtime": "^7.12.1", - "@devextreme/runtime": "3.0.13", - "devexpress-diagram": "2.2.10", - "devexpress-gantt": "4.1.56", - "devextreme-quill": "1.7.1", - "inferno": "^7.4.9", - "inferno-hydrate": "^7.4.9", - "jszip": "^3.10.1", - "rrule": "^2.7.1", - "showdown": "^2.1.0", - "turndown": "~7.1.0" - }, - "bin": { - "devextreme-bundler": "bin/bundler.js", - "devextreme-bundler-init": "bin/bundler-init.js" + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/devextreme-angular": { - "version": "24.1.5", - "resolved": "https://registry.npmjs.org/devextreme-angular/-/devextreme-angular-24.1.5.tgz", - "integrity": "sha512-vJAaZWzb8tuYuUG9vqnbB+1kjeRJY8B7JH3hae/s0R78O7JaXSPNPx+DsxhhN4bp88SwRGWRFMjsBflap0UMwg==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/schematics": "16.2.14", - "devextreme-schematics": "*", - "inferno-server": "7.4.11", - "tslib": "^2.3.0" + "path-type": "^4.0.0" }, - "peerDependencies": { - "@angular/common": ">=16.0.0", - "@angular/core": ">=16.0.0", - "@angular/forms": ">=16.0.0", - "devextreme": "~24.1.5" + "engines": { + "node": ">=8" } }, - "node_modules/devextreme-angular/node_modules/@angular-devkit/core": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.14.tgz", - "integrity": "sha512-Ui14/d2+p7lnmXlK/AX2ieQEGInBV75lonNtPQgwrYgskF8ufCuN0DyVZQUy9fJDkC+xQxbJyYrby/BS0R0e7w==", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "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": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } + "node": ">=6" } }, - "node_modules/devextreme-angular/node_modules/@angular-devkit/schematics": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.14.tgz", - "integrity": "sha512-B6LQKInCT8w5zx5Pbroext5eFFRTCJdTwHN8GhcVS8IeKCnkeqVTQLjB4lBUg7LEm8Y7UHXwzrVxmk+f+MBXhw==", - "license": "MIT", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@angular-devkit/core": "16.2.14", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.1", - "ora": "5.4.1", - "rxjs": "7.8.1" + "esutils": "^2.0.2" }, "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "node": ">=6.0.0" } }, - "node_modules/devextreme-angular/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/devextreme-angular/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==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } - } - }, - "node_modules/devextreme-angular/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" + ], + "license": "BSD-2-Clause" }, - "node_modules/devextreme-angular/node_modules/magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", - "license": "MIT", + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/devextreme-angular/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/devextreme-cli": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/devextreme-cli/-/devextreme-cli-1.7.1.tgz", - "integrity": "sha512-Rs+WPq3WWtmtzgOSz1rcN1LaC0ZEozr0szhVKRgrJOHDJRoUAYoeo25YgP21LaBjAxd+0TJ3pb8rLe8ZEq40zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "import-cwd": "^3.0.0", - "less": "3.13.1", - "minimist": "^1.2.8", - "mustache": "^3.2.1", - "prompts": "^2.4.2", - "sass": "^1.77.6", - "semver": "^5.7.2", - "strip-bom": "^4.0.0" - }, - "bin": { - "devextreme": "index.js" - }, - "engines": { - "node": ">12.6.0", - "npm": ">6.2.0", - "yarn": ">1.21" - } - }, - "node_modules/devextreme-cli/node_modules/less": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", - "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "tslib": "^1.10.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "native-request": "^1.0.5", - "source-map": "~0.6.0" - } - }, - "node_modules/devextreme-cli/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", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/devextreme-cli/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/devextreme-cli/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/devextreme-quill": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/devextreme-quill/-/devextreme-quill-1.7.1.tgz", - "integrity": "sha512-0smNE/Br+m9gQDxSPaJxwmrX5ZFubnBHWdbBtY8p6L3ATrF00mFqNQIflVi1tUAr8ndYeHY6Oih46Z1EWDGSQA==", - "license": "BSD-3-Clause", - "dependencies": { - "core-js": "^3.34.0", - "eventemitter3": "^4.0.7", - "lodash.clonedeep": "^4.5.0", - "lodash.isequal": "^4.5.0", - "lodash.merge": "^4.6.2", - "parchment": "^2.0.1", - "quill-delta": "^5.0.0" - } - }, - "node_modules/devextreme-schematics": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/devextreme-schematics/-/devextreme-schematics-1.7.1.tgz", - "integrity": "sha512-K+FNrji2/G7QPkfWYhWiNNaXcmxdlXDTOVpIiISoMr6fumRhz5PindoIYlOx0HXtnpvcBWzb2Fqadujr8qop2g==", - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "^16.2.10", - "@angular-devkit/schematics": "^16.2.10", - "@schematics/angular": "^16.2.10" - } - }, - "node_modules/devextreme-schematics/node_modules/@angular-devkit/core": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.14.tgz", - "integrity": "sha512-Ui14/d2+p7lnmXlK/AX2ieQEGInBV75lonNtPQgwrYgskF8ufCuN0DyVZQUy9fJDkC+xQxbJyYrby/BS0R0e7w==", - "license": "MIT", - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/devextreme-schematics/node_modules/@angular-devkit/schematics": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.14.tgz", - "integrity": "sha512-B6LQKInCT8w5zx5Pbroext5eFFRTCJdTwHN8GhcVS8IeKCnkeqVTQLjB4lBUg7LEm8Y7UHXwzrVxmk+f+MBXhw==", - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "16.2.14", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.1", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/devextreme-schematics/node_modules/@schematics/angular": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.14.tgz", - "integrity": "sha512-YqIv727l9Qze8/OL6H9mBHc2jVXzAGRNBYnxYWqWhLbfvuVbbldo6NNIIjgv6lrl2LJSdPAAMNOD5m/f6210ug==", - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "16.2.14", - "@angular-devkit/schematics": "16.2.14", - "jsonc-parser": "3.2.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/devextreme-schematics/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/devextreme-schematics/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==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/devextreme-schematics/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" - }, - "node_modules/devextreme-schematics/node_modules/magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/devextreme-schematics/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/devextreme-themebuilder": { - "version": "23.2.7", - "resolved": "https://registry.npmjs.org/devextreme-themebuilder/-/devextreme-themebuilder-23.2.7.tgz", - "integrity": "sha512-m6kkxSwe+3OM7L8rc27Z1n/Y/HZ67F8N5ho0uD+hvWy0zpKFO5xVat169FZEfooj45rI/yFgoS+D0NErbW6ceA==", - "dev": true, - "license": "SEE LICENSE IN README.md", - "dependencies": { - "autoprefixer": "^10.4.7", - "bootstrap4": "npm:bootstrap@^4.6.0", - "bootstrap5": "npm:bootstrap@^5.3.0", - "clean-css": "^5.3.0", - "less": "^3.13.1", - "postcss": "^8.2.6", - "sass-embedded": "1.66.0" - } - }, - "node_modules/devextreme-themebuilder/node_modules/less": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", - "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "tslib": "^1.10.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "native-request": "^1.0.5", - "source-map": "~0.6.0" - } - }, - "node_modules/devextreme-themebuilder/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/devextreme-themebuilder/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "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/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -11140,12 +10617,6 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/domino": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", - "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==", - "license": "BSD-2-Clause" - }, "node_modules/dompurify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", @@ -11153,6 +10624,12 @@ "license": "(MPL-2.0 OR Apache-2.0)", "optional": true }, + "node_modules/domq.js": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/domq.js/-/domq.js-0.7.1.tgz", + "integrity": "sha512-SQjubdV+FsTa8pRPrhygohvraS6NS5XdH2wK0V8nzg3vQW5+h2+LDn5XCE5RYejbtZE4aAUz2UTxE1B9oSl55w==", + "license": "MIT" + }, "node_modules/domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", @@ -11461,12 +10938,6 @@ "dev": true, "license": "MIT" }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "license": "MIT" - }, "node_modules/esbuild": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", @@ -11965,6 +11436,7 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, "license": "MIT" }, "node_modules/events": { @@ -12148,12 +11620,14 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, "license": "Apache-2.0" }, "node_modules/fast-glob": { @@ -12326,7 +11800,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -12724,7 +12198,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -12842,9 +12316,9 @@ } }, "node_modules/graphql-config": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.1.0.tgz", - "integrity": "sha512-g4mNs1OZmZI+LHwRly3BbHO3mRZryyRCbmFKDGsFGde3U0F7TlIwJ0mhX1KTJlQzGQVDZDexZWnvIwodFERPvg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.1.2.tgz", + "integrity": "sha512-kVwUuFz1h9u7B0nDPtnLFWN+x018niaH3zi1ChFCNfbunhDVJ911Z3YcglK5EfDfySeeH+zCa1aGxd1wMgNd7g==", "dev": true, "license": "MIT", "dependencies": { @@ -12854,9 +12328,9 @@ "@graphql-tools/merge": "^9.0.0", "@graphql-tools/url-loader": "^8.0.0", "@graphql-tools/utils": "^10.0.0", - "cosmiconfig": "^8.1.0", + "cosmiconfig": "^9.0.0", "jiti": "^1.18.2", - "minimatch": "^4.2.3", + "minimatch": "^9.0.5", "string-env-interpolation": "^1.0.1", "tslib": "^2.4.0" }, @@ -12873,28 +12347,47 @@ } } }, - "node_modules/graphql-config/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/graphql-config/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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "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/graphql-config/node_modules/minimatch": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", - "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/graphql-request": { @@ -13273,6 +12766,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -13326,12 +12820,6 @@ "node": ">=0.10.0" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, "node_modules/immutable": { "version": "3.7.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", @@ -13342,32 +12830,6 @@ "node": ">=0.8.0" } }, - "node_modules/import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-from": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-cwd/node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -13428,60 +12890,6 @@ "node": ">=8" } }, - "node_modules/inferno": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/inferno/-/inferno-7.4.11.tgz", - "integrity": "sha512-N+cs33ESWI8fdToCd98yMRYl7jkLnCkJskxov3FKKlaKOvk3PRlAttbhmUaYdWXlRvt2WeXi+J4MbzNj3V6G0w==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "inferno-shared": "7.4.11", - "inferno-vnode-flags": "7.4.11", - "opencollective-postinstall": "^2.0.3" - } - }, - "node_modules/inferno-create-element": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/inferno-create-element/-/inferno-create-element-7.4.11.tgz", - "integrity": "sha512-kE6XIx2hPAd5qpDli2iGjNXgubvuyxdLvoiW71WnSzIIxA+Uxa/s8lY8m03VyHHVypFV3n329ZY5dFvKc7UQMg==", - "license": "MIT", - "dependencies": { - "inferno": "7.4.11" - } - }, - "node_modules/inferno-hydrate": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/inferno-hydrate/-/inferno-hydrate-7.4.11.tgz", - "integrity": "sha512-hF9Ke4GHAkj8GQrMXBZPfsUqhq6WjkoDCAfXhPBuF1Wiceqyy8KerOOXEnuocHky77fuEXq0AzVnQcC064Bkfw==", - "license": "MIT", - "dependencies": { - "inferno": "7.4.11" - } - }, - "node_modules/inferno-server": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/inferno-server/-/inferno-server-7.4.11.tgz", - "integrity": "sha512-SUnkCqZNWOIrjRVoVk/E1/70O1f1ImkCX9H2gDPbS0uc3GDxuzIeCgn0rpcc0XV9KzZJ2LTGxuBtEoQQOjUn2Q==", - "license": "MIT", - "dependencies": { - "inferno": "7.4.11" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inferno-shared": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/inferno-shared/-/inferno-shared-7.4.11.tgz", - "integrity": "sha512-pN725bDSTxkQmRS3e/3H02/xAqgHl+xgddCMjPm8M0etRdRcVCisi3NGPhzSbDDmiftrxhY31exs7+dwsngcDA==", - "license": "MIT" - }, - "node_modules/inferno-vnode-flags": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/inferno-vnode-flags/-/inferno-vnode-flags-7.4.11.tgz", - "integrity": "sha512-L7lslEQCq3IfwgT/b9zhuMf8fv6KXCNXXHZevk/WYxnqJsOWGDcKpJn0zkzXfvmj0otbB149iLUQVBq3oe2sfA==", - "license": "MIT" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -13498,6 +12906,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -13699,7 +13108,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -13744,7 +13153,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13767,7 +13176,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -13799,6 +13208,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13838,7 +13248,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -13923,6 +13333,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -13978,6 +13389,7 @@ "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/isexe": { @@ -14332,14 +13744,6 @@ "url": "https://github.com/sponsors/panva" } }, - "node_modules/jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -14400,6 +13804,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -14466,18 +13871,6 @@ ], "license": "MIT" }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, "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", @@ -14531,16 +13924,6 @@ "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/launch-editor": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", @@ -14656,15 +14039,6 @@ } } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/lines-and-columns": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", @@ -14860,12 +14234,6 @@ "license": "MIT", "optional": true }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "license": "MIT" - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -14873,16 +14241,11 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, "license": "MIT" }, "node_modules/lodash.sortby": { @@ -14896,6 +14259,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -14912,6 +14276,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -14927,6 +14292,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -14943,6 +14309,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -14955,12 +14322,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -14970,6 +14339,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -15390,6 +14760,12 @@ "node": ">= 18" } }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" + }, "node_modules/mdast-util-from-markdown": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", @@ -16070,6 +15446,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -16403,19 +15780,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/mustache": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz", - "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==", - "dev": true, - "license": "MIT", - "bin": { - "mustache": "bin/mustache" - }, - "engines": { - "npm": ">=1.4.0" - } - }, "node_modules/mute-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", @@ -16445,14 +15809,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/native-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz", - "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -16509,6 +15865,21 @@ "dev": true, "license": "MIT" }, + "node_modules/ngx-color": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-9.0.0.tgz", + "integrity": "sha512-zyAFux+FRI4cACZ7g8DQQsBbNMhqmFkhtUPaxhkiVHhPzWU1iqXP8MqWH6By3guNOCch5oYrYNBWlHToklbdDg==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.6.0", + "material-colors": "^1.2.6", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0-0", + "@angular/core": ">=16.0.0-0" + } + }, "node_modules/ngx-markdown": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-18.0.0.tgz", @@ -16792,7 +16163,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -17257,6 +16628,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -17287,15 +16659,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "license": "MIT", - "bin": { - "opencollective-postinstall": "index.js" - } - }, "node_modules/optimism": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.0.tgz", @@ -17342,6 +16705,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, "license": "MIT", "dependencies": { "bl": "^4.1.0", @@ -17365,6 +16729,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -17380,6 +16745,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -17396,6 +16762,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -17408,12 +16775,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -17423,6 +16792,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -17573,12 +16943,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -17590,12 +16954,6 @@ "tslib": "^2.0.3" } }, - "node_modules/parchment": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-2.0.1.tgz", - "integrity": "sha512-VBKrlEoZCBD+iwoeag0QTtY1Cti+Ma4nLpVYcc/uus/wHhMsPOi5InH3RL1s4aekahPZpabcS2ToKyGf7RMH/g==", - "license": "BSD-3-Clause" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -17841,6 +17199,15 @@ "node": ">=8" } }, + "node_modules/photoviewer": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/photoviewer/-/photoviewer-3.10.2.tgz", + "integrity": "sha512-liikwlwe3jsqgQPeaNR4FkM/9siAmxA9+DQB3iwO56Idg+Rxu1/t8fJDsLSza6mXZuyA6eBl/jtaCOeGlQSupg==", + "license": "MIT", + "dependencies": { + "domq.js": "^0.7.0" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -17986,19 +17353,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, "node_modules/postcss": { "version": "8.4.41", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", @@ -18316,6 +17670,7 @@ "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": { @@ -18349,20 +17704,6 @@ "node": ">=10" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -18477,20 +17818,6 @@ ], "license": "MIT" }, - "node_modules/quill-delta": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", - "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", - "license": "MIT", - "dependencies": { - "fast-diff": "^1.3.0", - "lodash.clonedeep": "^4.5.0", - "lodash.isequal": "^4.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -18547,6 +17874,7 @@ "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", @@ -18562,7 +17890,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -18575,7 +17903,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -18615,6 +17943,7 @@ "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, "license": "MIT" }, "node_modules/regenerator-transform": { @@ -18742,6 +18071,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -18851,6 +18181,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -18864,6 +18195,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, "license": "ISC" }, "node_modules/retry": { @@ -18954,15 +18286,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rrule": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/rrule/-/rrule-2.8.1.tgz", - "integrity": "sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==", - "license": "BSD-3-Clause", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", @@ -19043,6 +18366,7 @@ "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/safer-buffer": { @@ -19076,6 +18400,8 @@ "integrity": "sha512-7PqQW3bNIGadntvPsBy3gwjAVdPf9iG+WmdoN3VcWXLbYtHn/Tl5YqRRhqfTxW2ue9xw1QIlEsxYAQ71zKgfHQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@bufbuild/protobuf": "^1.0.0", "buffer-builder": "^0.2.0", @@ -19111,6 +18437,7 @@ "os": [ "darwin" ], + "peer": true, "bin": { "sass": "dart-sass/sass" }, @@ -19131,6 +18458,7 @@ "os": [ "darwin" ], + "peer": true, "bin": { "sass": "dart-sass/sass" }, @@ -19151,6 +18479,7 @@ "os": [ "linux" ], + "peer": true, "bin": { "sass": "dart-sass/sass" }, @@ -19171,6 +18500,7 @@ "os": [ "linux" ], + "peer": true, "bin": { "sass": "dart-sass/sass" }, @@ -19191,6 +18521,7 @@ "os": [ "linux" ], + "peer": true, "bin": { "sass": "dart-sass/sass" }, @@ -19211,6 +18542,7 @@ "os": [ "linux" ], + "peer": true, "bin": { "sass": "dart-sass/sass" }, @@ -19231,6 +18563,7 @@ "os": [ "win32" ], + "peer": true, "bin": { "sass": "dart-sass/sass.bat" }, @@ -19251,6 +18584,7 @@ "os": [ "win32" ], + "peer": true, "bin": { "sass": "dart-sass/sass.bat" }, @@ -19264,6 +18598,8 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } @@ -19273,7 +18609,9 @@ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/sass-embedded/node_modules/supports-color": { "version": "8.1.1", @@ -19281,6 +18619,8 @@ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -19635,6 +18975,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, "license": "MIT" }, "node_modules/setprototypeof": { @@ -19690,31 +19031,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/showdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", - "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", - "license": "MIT", - "dependencies": { - "commander": "^9.0.0" - }, - "bin": { - "showdown": "bin/showdown.js" - }, - "funding": { - "type": "individual", - "url": "https://www.paypal.me/tiviesantos" - } - }, - "node_modules/showdown/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -19772,13 +19088,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -19897,6 +19206,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">= 8" @@ -20103,6 +19413,7 @@ "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" @@ -20170,6 +19481,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -20192,16 +19504,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -20604,7 +19906,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -20745,15 +20047,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/turndown": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.1.3.tgz", - "integrity": "sha512-Z3/iJ6IWh8VBiACWQJaA5ulPQE5E1QwvBHj00uGzdQxdRnd8fh1DPqNOJqzQDu6DkOstORrtXzf/9adB+vMtEA==", - "license": "MIT", - "dependencies": { - "domino": "^2.1.6" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -21054,6 +20347,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -21063,6 +20357,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -21079,6 +20374,7 @@ "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": { @@ -21170,7 +20466,9 @@ "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/vary": { "version": "1.1.2", @@ -21742,6 +21040,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" diff --git a/prdeploy-app/package.json b/prdeploy-app/package.json index 4413177..2967456 100644 --- a/prdeploy-app/package.json +++ b/prdeploy-app/package.json @@ -11,10 +11,6 @@ "lint": "ng lint", "lint:fix": "ng lint --fix", "format": "prettier --write .", - "build-theme-variables": "devextreme export-theme-vars --input-file ./src/themes/dx.generic.prdeploy-scheme.json --output-format scss --version 23.2.7 --output-file ./src/themes/generated/variables.prdeploy.scss", - "build-theme-scss": "devextreme build-theme --input-file ./src/themes/dx.generic.prdeploy-scheme.json --output-format scss --version 23.2.7 --output-file ./src/themes/generated/theme.prdeploy.scss", - "build-theme": "npm run build-theme-scss && npm run build-theme-variables", - "postinstall": "npm run build-theme", "graphql-codegen": "graphql-codegen --config ./src/app/shared/graphql/prdeploy-api/prdeploy-api-codegen.ts" }, "private": true, @@ -30,12 +26,10 @@ "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", "@apollo/client": "^3.11.4", + "@ng-matero/extensions": "^18.2.0", "angular-oauth2-oidc": "^17.0.2", "apollo-angular": "^7.1.1", "bootstrap-icons": "^1.11.3", - "devextreme": "24.1.5", - "devextreme-angular": "24.1.5", - "devextreme-schematics": "1.7.1", "emoji-toolkit": "^9.0.1", "graphql": "^16.9.0", "lodash": "^4.17.21", @@ -65,8 +59,6 @@ "@typescript-eslint/eslint-plugin": "6.19.0", "@typescript-eslint/parser": "6.19.0", "cross-env": "^7.0.3", - "devextreme-cli": "latest", - "devextreme-themebuilder": "23.2.7", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", @@ -74,4 +66,4 @@ "prettier-eslint": "^16.3.0", "typescript": "~5.5.4" } -} \ No newline at end of file +} diff --git a/prdeploy-app/src/app/app-navigation.ts b/prdeploy-app/src/app/app-navigation.ts index 3fff213..cddc62e 100644 --- a/prdeploy-app/src/app/app-navigation.ts +++ b/prdeploy-app/src/app/app-navigation.ts @@ -1,22 +1,31 @@ -export const navigation = () => [ - { - text: 'Deployments', - path: '/deployments', - icon: 'bi bi-cloud-upload' - }, - { - text: 'Environments', - path: '/environments', - icon: 'bi bi-card-list' - }, - { - text: 'Repositories', - path: '/repositories', - icon: 'bi bi-database' - }, - { - text: 'Settings', - path: '/settings', - icon: 'bi bi-gear' - } -]; +export interface NavItem { + text: string; + path: string; + icon: string; + expanded?: boolean; + children?: NavItem[]; +} + +export const navigation = () => + [ + { + text: 'Deployments', + path: '/deployments', + icon: 'cloud_upload' + }, + { + text: 'Environments', + path: '/environments', + icon: 'list_alt' + }, + { + text: 'Repositories', + path: '/repositories', + icon: 'folder_open' + }, + { + text: 'Settings', + path: '/settings', + icon: 'settings' + } + ] as NavItem[]; diff --git a/prdeploy-app/src/app/app.component.html b/prdeploy-app/src/app/app.component.html index c79deee..0b2a86b 100644 --- a/prdeploy-app/src/app/app.component.html +++ b/prdeploy-app/src/app/app.component.html @@ -1,6 +1,20 @@ - - +@if (isAuthenticated) { + +} + + @if (isAuthenticated) { + + + + } @else { + + } + +
- - - +
+ +
diff --git a/prdeploy-app/src/app/app.component.scss b/prdeploy-app/src/app/app.component.scss index 49632f6..79eb009 100644 --- a/prdeploy-app/src/app/app.component.scss +++ b/prdeploy-app/src/app/app.component.scss @@ -1,7 +1,60 @@ +@import '../sass/variables'; + :host { - @import '../sass/variables'; background-color: $gray-100; display: flex; + flex-direction: column; height: 100%; width: 100%; } + +$side-nav-animation-speed: 0.3s; +$side-nav-large: 190px; +$side-nav-small: 60px; + +::ng-deep .sidenav-full { + + .app-sidenav { + width: $side-nav-large; + transition: all $side-nav-animation-speed; + } + + .mat-drawer-content { + margin-left: $side-nav-large !important; + transition: all $side-nav-animation-speed; + } +} + +::ng-deep .sidenav-icons { + .app-sidenav { + width: $side-nav-small; + transition: all $side-nav-animation-speed; + } + + .mat-drawer-content { + margin-left: $side-nav-small !important; + transition: all $side-nav-animation-speed; + } +} + +::ng-deep .sidenav-hidden { + .app-sidenav { + width: 0; + } + + .mat-drawer-content { + margin-left: 0 !important; + } +} + +::ng-deep .app-container { + flex: 1 1 auto; + + &.sidenav-mobile.sidenav-icons .app-sidenav { + width: 0; + } + + &.sidenav-mobile .mat-drawer-content { + margin-left: 0 !important; + } +} diff --git a/prdeploy-app/src/app/app.component.ts b/prdeploy-app/src/app/app.component.ts index 1a33ff1..887b103 100644 --- a/prdeploy-app/src/app/app.component.ts +++ b/prdeploy-app/src/app/app.component.ts @@ -1,24 +1,76 @@ -import { Component, HostBinding } from '@angular/core'; -import { ScreenService, AppInfoService } from './shared/services'; +import { Component, HostListener } from '@angular/core'; +import { AppInfoService, AuthService } from './shared/services'; import { RouterOutlet } from '@angular/router'; -import { SideNavOuterToolbarComponent, FooterComponent } from './shared/components'; +import { FooterComponent, SideNavigationMenuComponent, HeaderComponent } from './shared/components'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatSidenavModule, MatDrawerMode } from '@angular/material/sidenav'; +import { SideNavMode } from './shared/components/side-navigation-menu/side-nav-mode'; +import { BreakpointObserver } from '@angular/cdk/layout'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { NgClass } from '@angular/common'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], standalone: true, - imports: [RouterOutlet, SideNavOuterToolbarComponent, FooterComponent] + imports: [ + RouterOutlet, + FooterComponent, + MatSnackBarModule, + MatSidenavModule, + SideNavigationMenuComponent, + HeaderComponent, + NgClass + ] }) export class AppComponent { - @HostBinding('class') get getClass() { - return Object.keys(this.screen.sizes) - .filter(cl => this.screen.sizes[cl]) - .join(' '); + @HostListener('window:resize') + onResize() { + this.updateBackdrop(); } + drawerMode: MatDrawerMode = 'side'; + sideNavMode: SideNavMode = 'full'; + sideNavHidden = true; + hasBackdrop = false; + isMobile = false; + isAuthenticated = false; + constructor( - private screen: ScreenService, - public appInfo: AppInfoService - ) {} + public appInfo: AppInfoService, + private _breakpointObserver: BreakpointObserver, + private _authService: AuthService + ) { + this.updateBackdrop(); + + this._breakpointObserver + .observe('(max-width: 768px)') + .pipe(takeUntilDestroyed()) + .subscribe(state => { + this.isMobile = state.matches; + }); + + this._authService.isAuthenticated$.pipe(takeUntilDestroyed()).subscribe((isAuthenticated: boolean) => { + this.isAuthenticated = isAuthenticated; + this.updateBackdrop(); + }); + } + + updateBackdrop() { + if (this.isAuthenticated) { + this.sideNavHidden = false; + this.hasBackdrop = this.isMobile && this.sideNavMode === 'full'; + this.drawerMode = this.hasBackdrop ? 'over' : 'side'; + } else { + this.sideNavHidden = true; + this.hasBackdrop = false; + this.drawerMode = 'side'; + } + } + + toggleMenu() { + this.sideNavMode = this.sideNavMode == 'full' ? 'icons' : 'full'; + this.updateBackdrop(); + } } diff --git a/prdeploy-app/src/app/app.config.ts b/prdeploy-app/src/app/app.config.ts index a6b7d3e..9fcb53e 100644 --- a/prdeploy-app/src/app/app.config.ts +++ b/prdeploy-app/src/app/app.config.ts @@ -21,6 +21,8 @@ import { ApolloClientOptions, InMemoryCache } from '@apollo/client/core'; import { OAuthModule, OAuthModuleConfig, OAuthStorage } from 'angular-oauth2-oidc'; import { DOCUMENT } from '@angular/common'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field'; +import { MatIconRegistry } from '@angular/material/icon'; export function storageFactory(): OAuthStorage { return localStorage; @@ -43,19 +45,23 @@ export const appConfig: ApplicationConfig = { provideRouter(routes), provideHttpClient(withInterceptorsFromDi()), importProvidersFrom(BrowserModule, MarkdownModule.forRoot(), OAuthModule.forRoot(), RouterModule.forRoot([])), + { provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'always' } }, AppConfigService, { provide: APP_INITIALIZER, - useFactory: (appConfigService: AppConfigService, injector: Injector, document: Document) => async () => { - await appConfigService.load(); - const options = injector.get(OAuthOptions); - const config = authConfig(options, document); - const authService = injector.get(AuthService); - authService.initialize(config); - authService.runInitialLoginSequence(); - }, + useFactory: + (appConfigService: AppConfigService, injector: Injector, document: Document, iconRegistry: MatIconRegistry) => + async () => { + iconRegistry.setDefaultFontSetClass('material-icons-outlined'); + await appConfigService.load(); + const options = injector.get(OAuthOptions); + const config = authConfig(options, document); + const authService = injector.get(AuthService); + authService.initialize(config); + authService.runInitialLoginSequence(); + }, multi: true, - deps: [AppConfigService, Injector, DOCUMENT] + deps: [AppConfigService, Injector, DOCUMENT, MatIconRegistry] }, { provide: ErrorHandler, useClass: GlobalErrorHandler }, { provide: OAuthModuleConfig, useValue: authModuleConfig }, @@ -77,6 +83,7 @@ export const appConfig: ApplicationConfig = { deps: [HttpLink] }, // Interceptors. - { provide: HTTP_INTERCEPTORS, useClass: HttpErrorInterceptor, multi: true }, provideAnimationsAsync() + { provide: HTTP_INTERCEPTORS, useClass: HttpErrorInterceptor, multi: true }, + provideAnimationsAsync() ] }; diff --git a/prdeploy-app/src/app/auth/login-callback/login-callback.component.html b/prdeploy-app/src/app/auth/login-callback/login-callback.component.html index 82e4c8d..a526ed3 100644 --- a/prdeploy-app/src/app/auth/login-callback/login-callback.component.html +++ b/prdeploy-app/src/app/auth/login-callback/login-callback.component.html @@ -1,6 +1,5 @@
- - Authenticating... +
diff --git a/prdeploy-app/src/app/auth/login-callback/login-callback.component.ts b/prdeploy-app/src/app/auth/login-callback/login-callback.component.ts index e2a297a..3cf51fc 100644 --- a/prdeploy-app/src/app/auth/login-callback/login-callback.component.ts +++ b/prdeploy-app/src/app/auth/login-callback/login-callback.component.ts @@ -1,11 +1,11 @@ import { Component } from '@angular/core'; -import { DxLoadIndicatorModule } from 'devextreme-angular'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; @Component({ selector: 'login-callback', templateUrl: './login-callback.component.html', styleUrls: ['./login-callback.component.scss'], standalone: true, - imports: [DxLoadIndicatorModule] + imports: [MatProgressSpinnerModule] }) export class LoginCallbackComponent {} diff --git a/prdeploy-app/src/app/auth/login-error/login-error.component.ts b/prdeploy-app/src/app/auth/login-error/login-error.component.ts index b33dc9c..b908aa0 100644 --- a/prdeploy-app/src/app/auth/login-error/login-error.component.ts +++ b/prdeploy-app/src/app/auth/login-error/login-error.component.ts @@ -1,13 +1,11 @@ import { Component } from '@angular/core'; -import { DxButtonModule } from 'devextreme-angular'; import { AuthService } from 'src/app/shared/services'; @Component({ selector: 'login-error', templateUrl: './login-error.component.html', styleUrls: ['./login-error.component.scss'], - standalone: true, - imports: [DxButtonModule] + standalone: true }) export class LoginErrorComponent { loggingOut = false; diff --git a/prdeploy-app/src/app/auth/login/login.component.html b/prdeploy-app/src/app/auth/login/login.component.html index 39d1d81..d0a6701 100644 --- a/prdeploy-app/src/app/auth/login/login.component.html +++ b/prdeploy-app/src/app/auth/login/login.component.html @@ -2,7 +2,7 @@