From 38239e1f83b8cfdb28067ebb0ae4f03b826ef14c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henry=20T=C3=A4schner?= <129834483+HenryT-CG@users.noreply.github.com> Date: Wed, 6 Mar 2024 08:05:21 +0100 Subject: [PATCH 1/2] Add workspace roles and apps (#9) * feat: use observables in app search * feat: use observables in app search * feat: use observables in app search * fix: added missing source files * feat: added role creation * feat: added role detail I * feat: extract role functionality * feat: fix role mgmt * feat: added permission filter for products and app types * feat: exclude permission management * feat: fix filter sorting * feat: code reorg * feat: added assignment management * feat: code cleanup * feat: optimize code * feat: tuning filter length * fix: update bff api, fix create/remove assignments * feat: added new bff api, fight with product names * feat: added new bff api, fight with product names * feat: fix length of filter entries * feat: load app permissions * feat: grant/revoke all * feat: optimize layout * feat: fix layout issues * fix: reduce scss files * fix: code issues * fix: code issues * fix: code issues * fix: code issues --- helm/values.yaml | 12 +- package-lock.json | 5559 +++++++++++------ package.json | 22 +- scripts/load-permissions.sh | 79 + src/_mixins.scss | 201 + .../app-detail/app-detail.component.html | 702 +-- .../app-detail/app-detail.component.scss | 64 +- .../app-detail/app-detail.component.ts | 818 +-- .../app-search/app-search.component.html | 49 +- .../app-search/app-search.component.scss | 32 +- .../app-search/app-search.component.ts | 220 +- src/app/permission/permission.module.ts | 5 +- .../role-detail/role-detail.component.html | 102 + .../role-detail/role-detail.component.ts | 126 + .../shared/generated/.openapi-generator/FILES | 10 + .../generated/api/application.service.ts | 8 +- .../generated/api/assignment.service.ts | 158 +- .../generated/api/permission.service.ts | 8 +- src/app/shared/generated/api/role.service.ts | 20 +- .../shared/generated/api/workspace.service.ts | 102 +- src/app/shared/generated/model/application.ts | 1 + .../model/applicationSearchCriteria.ts | 1 + src/app/shared/generated/model/assignment.ts | 1 + .../model/createProductAssignmentsRequest.ts | 18 + .../generated/model/createRoleRequest.ts | 1 - .../generated/model/createRolesRequest.ts | 18 + .../shared/generated/model/mfeMsAbstract.ts | 18 + .../shared/generated/model/microfrontend.ts | 18 + src/app/shared/generated/model/models.ts | 10 + src/app/shared/generated/model/permission.ts | 1 + .../model/permissionSearchCriteria.ts | 1 + src/app/shared/generated/model/product.ts | 3 +- .../shared/generated/model/productDetails.ts | 21 + .../model/revokeAssignmentRequest.ts | 19 + .../generated/model/workspaceAbstract.ts | 18 + .../generated/model/workspaceDetails.ts | 19 + .../generated/model/workspacePageResult.ts | 25 + .../model/workspaceSearchCriteria.ts | 26 + src/assets/api/openapi-bff.yaml | 273 +- src/assets/i18n/de.json | 74 +- src/assets/i18n/en.json | 73 +- 41 files changed, 5810 insertions(+), 3126 deletions(-) create mode 100755 scripts/load-permissions.sh create mode 100644 src/_mixins.scss create mode 100644 src/app/permission/role-detail/role-detail.component.html create mode 100644 src/app/permission/role-detail/role-detail.component.ts create mode 100644 src/app/shared/generated/model/createProductAssignmentsRequest.ts create mode 100644 src/app/shared/generated/model/createRolesRequest.ts create mode 100644 src/app/shared/generated/model/mfeMsAbstract.ts create mode 100644 src/app/shared/generated/model/microfrontend.ts create mode 100644 src/app/shared/generated/model/productDetails.ts create mode 100644 src/app/shared/generated/model/revokeAssignmentRequest.ts create mode 100644 src/app/shared/generated/model/workspaceAbstract.ts create mode 100644 src/app/shared/generated/model/workspaceDetails.ts create mode 100644 src/app/shared/generated/model/workspacePageResult.ts create mode 100644 src/app/shared/generated/model/workspaceSearchCriteria.ts diff --git a/helm/values.yaml b/helm/values.yaml index 32304ab..296dd14 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -20,12 +20,12 @@ app: spec: permissions: APP: - EDIT: Edit app - SAVE: Update and save app - SEARCH: Search apps - VIEW: View mode for app + EDIT: Edit permission app details + SAVE: Update and save permission app details + SEARCH: Search permission apps + VIEW: View app details PERMISSION: - GRANT: Assign or remove assignment of a permission to a role + GRANT: Assign or remove a permission to a role CREATE: Create permission DELETE: Delete permission EDIT: Edit permission @@ -44,5 +44,3 @@ app: clientId: "onecx-permission-ui" # PIPE Config - - diff --git a/package-lock.json b/package-lock.json index 38d7f9e..4e1ec96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,11 +23,11 @@ "@ngneat/falso": "^6.4.0", "@ngx-translate/core": "^14.0.0", "@ngx-translate/http-loader": "^7.0.0", - "@onecx/accelerator": "^4.5.1", - "@onecx/integration-interface": "^4.5.1", - "@onecx/keycloak-auth": "^4.5.1", - "@onecx/portal-integration-angular": "^4.5.1", - "@onecx/portal-layout-styles": "^4.5.1", + "@onecx/accelerator": "^4.9.0", + "@onecx/integration-interface": "^4.9.0", + "@onecx/keycloak-auth": "^4.9.0", + "@onecx/portal-integration-angular": "^4.9.0", + "@onecx/portal-layout-styles": "^4.9.0", "file-saver": "^2.0.5", "i18n-iso-countries": "^7.6.0", "ngx-color": "^8.0.3", @@ -59,22 +59,22 @@ "@schematics/angular": "15.2.6", "@storybook/addon-essentials": "7.0.4", "@storybook/angular": "7.6.14", - "@storybook/core-server": "7.0.4 ", + "@storybook/core-server": "7.6.17", "@svgr/webpack": "^7.0.0", "@swc-node/register": "^1.6.5", "@swc/cli": "~0.1.63", "@swc/core": "^1.3.56", - "@swc/helpers": "0.5.1", + "@swc/helpers": "0.5.6", "@types/jasmine": "~3.10.0", "@types/node": "18.16.3", "@typescript-eslint/eslint-plugin": "5.48.2", "@typescript-eslint/parser": "5.62.0", "autoprefixer": "10.4.14", "chromatic": "^6.17.4", - "css-loader": "^6.7.3", + "css-loader": "^6.10.0", "cypress": "^12.11.0", - "eslint": "^8.33.0", - "eslint-config-prettier": "8.8.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "9.1.0", "eslint-plugin-cypress": "^2.13.3", "eslint-plugin-import": "2.29.1", "eslint-plugin-jsx-a11y": "6.7.1", @@ -105,7 +105,7 @@ "stylus": "^0.59.0", "stylus-loader": "^7.1.0", "tailwindcss": "3.3.2", - "ts-node": "10.9.1", + "ts-node": "10.9.2", "typescript": "4.9.5", "url-loader": "^4.1.1", "webpack": "^5.82.0", @@ -1453,9 +1453,9 @@ "dev": true }, "node_modules/@aw-web-design/x-default-browser": { - "version": "1.4.88", - "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.88.tgz", - "integrity": "sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==", + "version": "1.4.126", + "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", + "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==", "dev": true, "dependencies": { "default-browser-id": "3.0.0" @@ -6113,9 +6113,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -7493,18 +7493,18 @@ } }, "node_modules/@onecx/accelerator": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@onecx/accelerator/-/accelerator-4.5.1.tgz", - "integrity": "sha512-OM6vYXoi2MJkm4X2JVvYX+zJa5QhRsh9Uu3FV2vOOxQNxcpGGNz4BzYby2zuYig36X0Tw/DTZ2kIhtv4Fkm2gA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@onecx/accelerator/-/accelerator-4.9.0.tgz", + "integrity": "sha512-fZtAPrwW6tH0lFTaLXmgHolf01pf4mnL8nVcYBPJjRU4tQuNR/HVj6msBMcG/1a5aJNDHGfsmuXbrUdbMslvpg==", "peerDependencies": { "rxjs": "7.8.1", "tslib": "^2.3.0" } }, "node_modules/@onecx/integration-interface": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@onecx/integration-interface/-/integration-interface-4.5.1.tgz", - "integrity": "sha512-LafKbAppxaAwVngf2SbBBQsqSkHHb8Twh3Yv7FMvOZLbg0vlF/WnVFj2+v/xM0GlNk7cklrjavpWtKT7bQ4sYw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@onecx/integration-interface/-/integration-interface-4.9.0.tgz", + "integrity": "sha512-PjNph0hn8VlVTLY3b0ZQ/M/yCxvWbQ3XqK/xc7FC+8NNT0uvfLPNShsFvOzkUKH60D68BEoF112tJFoTC5d4uA==", "peerDependencies": { "@onecx/accelerator": "~4", "rxjs": "7.8.1", @@ -7512,9 +7512,9 @@ } }, "node_modules/@onecx/keycloak-auth": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@onecx/keycloak-auth/-/keycloak-auth-4.5.1.tgz", - "integrity": "sha512-8dUuIUhp7dz3OX7d4QJufTzbGu6EexEaKJaqAVVTcSFkHKA0fHz/Y3S2AsuwTZc2rympBOIHnYR2Gqla/2Xu7g==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@onecx/keycloak-auth/-/keycloak-auth-4.9.0.tgz", + "integrity": "sha512-VbhgIahqiwEZwLHBiVCWKgnGt5TCQP+fX5TfotjtvvXYdVeEcoRIIKBy/QBHk7Aj4OqUeWpU1dkoLWWJnOsjqA==", "dependencies": { "tslib": "^2.3.0" }, @@ -7528,9 +7528,9 @@ } }, "node_modules/@onecx/portal-integration-angular": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@onecx/portal-integration-angular/-/portal-integration-angular-4.5.1.tgz", - "integrity": "sha512-/t/LKNZgmOlW7VzG942L+QMI2AMbAv6gSRyC+weq24FB79bNZlAV74xykrV4n7vgeU6f8mMij8YqlDt1Mk0HyA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@onecx/portal-integration-angular/-/portal-integration-angular-4.9.0.tgz", + "integrity": "sha512-wMLfyCOhYy5wbPP1bzEBu56czfz5Meds98lq0I77fLJIQZV2L19dU7MYYH7Fum7EgYbSG4AMTt9Fh6UkKHBMcg==", "dependencies": { "tslib": "^2.3.0" }, @@ -7561,9 +7561,9 @@ } }, "node_modules/@onecx/portal-layout-styles": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@onecx/portal-layout-styles/-/portal-layout-styles-4.5.1.tgz", - "integrity": "sha512-8KMIQ1TySFJh9QXEtdW4GlFRlLpk6E8fNCH38+iuvXsqdcXdWby939xa5mtkb+J0tusCjDr1YJWL0xE+0D6Sow==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@onecx/portal-layout-styles/-/portal-layout-styles-4.9.0.tgz", + "integrity": "sha512-7/KnGiQXb15Q7Y9Lgai5xX1rrvK6tnLAEZ7q5lWDZRgl1Z2UY4f1A00yNrKAUOoF0r+lV+frLSC8bDCKhNplrQ==", "peerDependencies": { "tslib": "^2.5.0" } @@ -8404,18 +8404,6 @@ } } }, - "node_modules/@storybook/angular/node_modules/@aw-web-design/x-default-browser": { - "version": "1.4.126", - "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", - "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==", - "dev": true, - "dependencies": { - "default-browser-id": "3.0.0" - }, - "bin": { - "x-default-browser": "bin/x-default-browser.js" - } - }, "node_modules/@storybook/angular/node_modules/@babel/generator": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", @@ -9105,18 +9093,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/angular/node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "dev": true, - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@storybook/angular/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -9309,21 +9285,21 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.0.4.tgz", - "integrity": "sha512-WR2EmShSp7gJHCv5yhv2jZ41upmbD3cCjfq0QkZZRO5sPESr4Lr7PX9ViKQ/MLBnYAvh+V/sD6CEEN+mY2gC0Q==", + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.17.tgz", + "integrity": "sha512-Sj8hcDYiPCCMfeLzus37czl0zdrAxAz4IyYam2jBjVymrIrcDAFyL1OCZvnq33ft179QYQWhUs9qwzVmlR/ZWg==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.0.4", - "@storybook/manager": "7.0.4", - "@storybook/node-logger": "7.0.4", + "@storybook/core-common": "7.6.17", + "@storybook/manager": "7.6.17", + "@storybook/node-logger": "7.6.17", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", "browser-assert": "^1.2.1", "ejs": "^3.1.8", - "esbuild": "^0.17.0", + "esbuild": "^0.18.0", "esbuild-plugin-alias": "^0.2.1", "express": "^4.17.3", "find-cache-dir": "^3.0.0", @@ -9336,62 +9312,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.14.tgz", - "integrity": "sha512-J5kwNDB/osGiv40hDXKrFNasu8GpXp1tGZa2RLFEeHncrbf+wDpWyr188+bviS2gnw9OtxWI7krFGoUoNdjWDg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.2", - "@storybook/channels": "7.6.14", - "@storybook/client-logger": "7.6.14", - "@storybook/core-common": "7.6.14", - "@storybook/core-events": "7.6.14", - "@storybook/core-webpack": "7.6.14", - "@storybook/node-logger": "7.6.14", - "@storybook/preview": "7.6.14", - "@storybook/preview-api": "7.6.14", - "@swc/core": "^1.3.82", - "@types/node": "^18.0.0", - "@types/semver": "^7.3.4", - "babel-loader": "^9.0.0", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "cjs-module-lexer": "^1.2.3", - "constants-browserify": "^1.0.0", - "css-loader": "^6.7.1", - "es-module-lexer": "^1.4.1", - "express": "^4.17.3", - "fork-ts-checker-webpack-plugin": "^8.0.0", - "fs-extra": "^11.1.0", - "html-webpack-plugin": "^5.5.0", - "magic-string": "^0.30.5", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "semver": "^7.3.7", - "style-loader": "^3.3.1", - "swc-loader": "^0.2.3", - "terser-webpack-plugin": "^5.3.1", - "ts-dedent": "^2.0.0", - "url": "^0.11.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^6.1.1", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/android-arm": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", @@ -9407,7 +9328,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/android-arm64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/android-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", @@ -9423,7 +9344,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/android-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/android-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", @@ -9439,7 +9360,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/darwin-arm64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/darwin-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", @@ -9455,7 +9376,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/darwin-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/darwin-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", @@ -9471,7 +9392,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/freebsd-arm64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/freebsd-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", @@ -9487,7 +9408,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/freebsd-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/freebsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", @@ -9503,7 +9424,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-arm": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", @@ -9519,7 +9440,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-arm64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", @@ -9535,7 +9456,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-ia32": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-ia32": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", @@ -9551,7 +9472,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-loong64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-loong64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", @@ -9567,7 +9488,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-mips64el": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-mips64el": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", @@ -9583,7 +9504,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-ppc64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-ppc64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", @@ -9599,7 +9520,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-riscv64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-riscv64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", @@ -9615,7 +9536,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-s390x": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-s390x": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", @@ -9631,7 +9552,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", @@ -9647,7 +9568,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/netbsd-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/netbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", @@ -9663,7 +9584,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/openbsd-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/openbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", @@ -9679,7 +9600,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/sunos-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/sunos-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", @@ -9695,7 +9616,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/win32-arm64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/win32-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", @@ -9711,7 +9632,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/win32-ia32": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/win32-ia32": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", @@ -9727,7 +9648,7 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/win32-x64": { + "node_modules/@storybook/builder-manager/node_modules/@esbuild/win32-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", @@ -9743,14 +9664,14 @@ "node": ">=12" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/channels": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.14.tgz", - "integrity": "sha512-tyrnnXTh7Ca6HbtzYtZGZmbUkC+eYPdot41+YDERMxXCnejd18BnsH/pyGW66GwgY079Q7uhdDFyM63ynZrt/A==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/channels": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", + "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.14", - "@storybook/core-events": "7.6.14", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -9761,10 +9682,10 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/client-logger": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.14.tgz", - "integrity": "sha512-rHa2hLU+80BN5E58Shf1g09YS6QEEOk5hwMuJ4WJfAypMDYPjnIsOYUboHClkCA9TDCH/iVhyRSPy83NWN2MZg==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/client-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz", + "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -9774,15 +9695,15 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/core-common": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.14.tgz", - "integrity": "sha512-0CIfwdjY5+OO6B+WxeCx3fZou1wk50RU9hFOMGwJ2yj/5ilV06xVHt0HNrA2x37zaK7r370PjOuny0Xudba03g==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/core-common": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.17.tgz", + "integrity": "sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.14", - "@storybook/node-logger": "7.6.14", - "@storybook/types": "7.6.14", + "@storybook/core-events": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/types": "7.6.17", "@types/find-cache-dir": "^3.2.1", "@types/node": "^18.0.0", "@types/node-fetch": "^2.6.4", @@ -9809,10 +9730,10 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/core-events": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.14.tgz", - "integrity": "sha512-zuSMjOgju7WLFL+okTXVvOKKNzwqVGRVp5UhXeSikT4aXuVdpfepCfikkjntn12G1ybL7mfFCsBU2DV1lwwp6Q==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/core-events": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz", + "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -9822,49 +9743,23 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/node-logger": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.14.tgz", - "integrity": "sha512-prKUMGxGzeX3epdlin1UU6M1//CoAJM1GrffrFeNntnPr3h6GMTgxNzl85flUhWd4ky/wjC/36dGOI8QRYVtoA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/preview-api": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.14.tgz", - "integrity": "sha512-CnUEkTUK3ei3vw4Ypa9EOxEO9lCKc3HvVHxXu4z6Caoe/hRUc10Q6Nj1A7brqok1QLZ304qc715XdYFMahDhyA==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/node-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.17.tgz", + "integrity": "sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA==", "dev": true, - "dependencies": { - "@storybook/channels": "7.6.14", - "@storybook/client-logger": "7.6.14", - "@storybook/core-events": "7.6.14", - "@storybook/csf": "^0.1.2", - "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.14", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/@storybook/types": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.14.tgz", - "integrity": "sha512-sJ3qn45M2XLXlOi+wkhXK5xsXbSVzi8YGrusux//DttI3s8wCP3BQSnEgZkBiEktloxPferINHT1er8/9UK7Xw==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/types": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", + "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.14", + "@storybook/channels": "7.6.17", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -9874,7 +9769,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/ansi-styles": { + "node_modules/@storybook/builder-manager/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -9889,7 +9784,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/builder-webpack5/node_modules/brace-expansion": { + "node_modules/@storybook/builder-manager/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -9898,7 +9793,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/chalk": { + "node_modules/@storybook/builder-manager/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -9914,7 +9809,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/builder-webpack5/node_modules/esbuild": { + "node_modules/@storybook/builder-manager/node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", @@ -9951,7 +9846,7 @@ "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/@storybook/builder-webpack5/node_modules/file-system-cache": { + "node_modules/@storybook/builder-manager/node_modules/file-system-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", @@ -9961,7 +9856,7 @@ "ramda": "0.29.0" } }, - "node_modules/@storybook/builder-webpack5/node_modules/fs-extra": { + "node_modules/@storybook/builder-manager/node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", @@ -9975,7 +9870,7 @@ "node": ">=14.14" } }, - "node_modules/@storybook/builder-webpack5/node_modules/glob": { + "node_modules/@storybook/builder-manager/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", @@ -9997,7 +9892,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/builder-webpack5/node_modules/has-flag": { + "node_modules/@storybook/builder-manager/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==", @@ -10006,19 +9901,7 @@ "node": ">=8" } }, - "node_modules/@storybook/builder-webpack5/node_modules/magic-string": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", - "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/builder-webpack5/node_modules/minimatch": { + "node_modules/@storybook/builder-manager/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", @@ -10033,7 +9916,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/builder-webpack5/node_modules/minipass": { + "node_modules/@storybook/builder-manager/node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", @@ -10042,7 +9925,7 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/@storybook/builder-webpack5/node_modules/supports-color": { + "node_modules/@storybook/builder-manager/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -10054,464 +9937,212 @@ "node": ">=8" } }, - "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "node_modules/@storybook/builder-webpack5": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.14.tgz", + "integrity": "sha512-J5kwNDB/osGiv40hDXKrFNasu8GpXp1tGZa2RLFEeHncrbf+wDpWyr188+bviS2gnw9OtxWI7krFGoUoNdjWDg==", "dev": true, "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" + "@babel/core": "^7.23.2", + "@storybook/channels": "7.6.14", + "@storybook/client-logger": "7.6.14", + "@storybook/core-common": "7.6.14", + "@storybook/core-events": "7.6.14", + "@storybook/core-webpack": "7.6.14", + "@storybook/node-logger": "7.6.14", + "@storybook/preview": "7.6.14", + "@storybook/preview-api": "7.6.14", + "@swc/core": "^1.3.82", + "@types/node": "^18.0.0", + "@types/semver": "^7.3.4", + "babel-loader": "^9.0.0", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "cjs-module-lexer": "^1.2.3", + "constants-browserify": "^1.0.0", + "css-loader": "^6.7.1", + "es-module-lexer": "^1.4.1", + "express": "^4.17.3", + "fork-ts-checker-webpack-plugin": "^8.0.0", + "fs-extra": "^11.1.0", + "html-webpack-plugin": "^5.5.0", + "magic-string": "^0.30.5", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "semver": "^7.3.7", + "style-loader": "^3.3.1", + "swc-loader": "^0.2.3", + "terser-webpack-plugin": "^5.3.1", + "ts-dedent": "^2.0.0", + "url": "^0.11.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "webpack": "5", + "webpack-dev-middleware": "^6.1.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.5.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://opencollective.com/storybook" }, "peerDependenciesMeta": { - "webpack": { + "typescript": { "optional": true } } }, - "node_modules/@storybook/builder-webpack5/node_modules/webpack-virtual-modules": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", - "dev": true + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@storybook/channel-postmessage": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-7.0.4.tgz", - "integrity": "sha512-KInHB3iSBgMxGkDmOMBu+B+ohxi2NzDpcl9yA5+xVuqG8Q6gJBurDYBsinq2zEZ1ceZYSoCseqJaH2jQFh/Oeg==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@storybook/channels": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/channels": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.0.4.tgz", - "integrity": "sha512-1HT8VM8G72XQ88wGcXVYl2g6OFsglUBW8L7uWWZoh96xWpNViaptaN/4OKwiUrThrc0DbEkAKmhPT3zQ7McoyA==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/cli": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.14.tgz", - "integrity": "sha512-2xqcGRPtj/OE+9ro92C5MFCT8VHdMCDDuZZRnmgPi83iqSZtYbO8xHZwz78j4TvmouHstOV1SedeWv0IsFIxLw==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/types": "^7.23.0", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.6.14", - "@storybook/core-common": "7.6.14", - "@storybook/core-events": "7.6.14", - "@storybook/core-server": "7.6.14", - "@storybook/csf-tools": "7.6.14", - "@storybook/node-logger": "7.6.14", - "@storybook/telemetry": "7.6.14", - "@storybook/types": "7.6.14", - "@types/semver": "^7.3.4", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "commander": "^6.2.1", - "cross-spawn": "^7.0.3", - "detect-indent": "^6.1.0", - "envinfo": "^7.7.3", - "execa": "^5.0.0", - "express": "^4.17.3", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "get-npm-tarball-url": "^2.0.3", - "get-port": "^5.1.1", - "giget": "^1.0.0", - "globby": "^11.0.2", - "jscodeshift": "^0.15.1", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^2.8.0", - "prompts": "^2.4.0", - "puppeteer-core": "^2.1.1", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "strip-json-comments": "^3.0.1", - "tempy": "^1.0.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "bin": { - "getstorybook": "bin/index.js", - "sb": "bin/index.js" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@aw-web-design/x-default-browser": { - "version": "1.4.126", - "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", - "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "default-browser-id": "3.0.0" - }, - "bin": { - "x-default-browser": "bin/x-default-browser.js" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@babel/preset-env": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", - "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@storybook/cli/node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@storybook/cli/node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], "dev": true, "optional": true, "os": [ @@ -10521,7 +10152,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-loong64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-loong64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", @@ -10537,7 +10168,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-mips64el": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-mips64el": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", @@ -10553,7 +10184,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-ppc64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-ppc64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", @@ -10569,7 +10200,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-riscv64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-riscv64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", @@ -10585,7 +10216,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-s390x": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-s390x": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", @@ -10601,7 +10232,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/linux-x64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", @@ -10617,7 +10248,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/netbsd-x64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/netbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", @@ -10633,7 +10264,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/openbsd-x64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/openbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", @@ -10649,7 +10280,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/sunos-x64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/sunos-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", @@ -10665,7 +10296,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/win32-arm64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/win32-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", @@ -10681,7 +10312,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/win32-ia32": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/win32-ia32": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", @@ -10697,7 +10328,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@esbuild/win32-x64": { + "node_modules/@storybook/builder-webpack5/node_modules/@esbuild/win32-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", @@ -10713,49 +10344,7 @@ "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@storybook/cli/node_modules/@storybook/builder-manager": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.14.tgz", - "integrity": "sha512-pID/g2Bnr3tjmkh8c+O6TZei3f1TWHW/UWi/skNQ3wGJ+9dqJIK2vQY5SwnXBWkmJdUqGVXaW5BvzR8jjfpTxQ==", - "dev": true, - "dependencies": { - "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.6.14", - "@storybook/manager": "7.6.14", - "@storybook/node-logger": "7.6.14", - "@types/ejs": "^3.1.1", - "@types/find-cache-dir": "^3.2.1", - "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", - "browser-assert": "^1.2.1", - "ejs": "^3.1.8", - "esbuild": "^0.18.0", - "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", - "find-cache-dir": "^3.0.0", - "fs-extra": "^11.1.0", - "process": "^0.11.10", - "util": "^0.12.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/cli/node_modules/@storybook/channels": { + "node_modules/@storybook/builder-webpack5/node_modules/@storybook/channels": { "version": "7.6.14", "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.14.tgz", "integrity": "sha512-tyrnnXTh7Ca6HbtzYtZGZmbUkC+eYPdot41+YDERMxXCnejd18BnsH/pyGW66GwgY079Q7uhdDFyM63ynZrt/A==", @@ -10773,7 +10362,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/client-logger": { + "node_modules/@storybook/builder-webpack5/node_modules/@storybook/client-logger": { "version": "7.6.14", "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.14.tgz", "integrity": "sha512-rHa2hLU+80BN5E58Shf1g09YS6QEEOk5hwMuJ4WJfAypMDYPjnIsOYUboHClkCA9TDCH/iVhyRSPy83NWN2MZg==", @@ -10786,7 +10375,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/core-common": { + "node_modules/@storybook/builder-webpack5/node_modules/@storybook/core-common": { "version": "7.6.14", "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.14.tgz", "integrity": "sha512-0CIfwdjY5+OO6B+WxeCx3fZou1wk50RU9hFOMGwJ2yj/5ilV06xVHt0HNrA2x37zaK7r370PjOuny0Xudba03g==", @@ -10821,7 +10410,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/core-events": { + "node_modules/@storybook/builder-webpack5/node_modules/@storybook/core-events": { "version": "7.6.14", "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.14.tgz", "integrity": "sha512-zuSMjOgju7WLFL+okTXVvOKKNzwqVGRVp5UhXeSikT4aXuVdpfepCfikkjntn12G1ybL7mfFCsBU2DV1lwwp6Q==", @@ -10834,91 +10423,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/core-server": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.14.tgz", - "integrity": "sha512-OSUunvjXyUiyfGet8ZBz7/Lka6dSgbbVMH7lU6wELIYCd2ZUxU5HQMl9JPesl61wWB4L3JaWFAoMRaCVI7q0xQ==", - "dev": true, - "dependencies": { - "@aw-web-design/x-default-browser": "1.4.126", - "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.6.14", - "@storybook/channels": "7.6.14", - "@storybook/core-common": "7.6.14", - "@storybook/core-events": "7.6.14", - "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.14", - "@storybook/docs-mdx": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/manager": "7.6.14", - "@storybook/node-logger": "7.6.14", - "@storybook/preview-api": "7.6.14", - "@storybook/telemetry": "7.6.14", - "@storybook/types": "7.6.14", - "@types/detect-port": "^1.3.0", - "@types/node": "^18.0.0", - "@types/pretty-hrtime": "^1.0.0", - "@types/semver": "^7.3.4", - "better-opn": "^3.0.2", - "chalk": "^4.1.0", - "cli-table3": "^0.6.1", - "compression": "^1.7.4", - "detect-port": "^1.3.0", - "express": "^4.17.3", - "fs-extra": "^11.1.0", - "globby": "^11.0.2", - "ip": "^2.0.0", - "lodash": "^4.17.21", - "open": "^8.4.0", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "watchpack": "^2.2.0", - "ws": "^8.2.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/cli/node_modules/@storybook/csf-tools": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.14.tgz", - "integrity": "sha512-s7XFIi823HhcKxTqHY/uU1QZCujLBjFt6OJa5y3XvwIMoLJWZtuT1PF/QPR0K7iYb9gQnGHwO9lZBfMraUywrQ==", - "dev": true, - "dependencies": { - "@babel/generator": "^7.23.0", - "@babel/parser": "^7.23.0", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", - "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.14", - "fs-extra": "^11.1.0", - "recast": "^0.23.1", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/cli/node_modules/@storybook/manager": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.14.tgz", - "integrity": "sha512-lgowunC/pm2y6d+3j7UJ/CkHpWC0o+nZ9b7mDbkJ6PmezW5Hpy83kbeCxbwRGosYoPQ0izBzVB5ZqGgKrNNDjA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/cli/node_modules/@storybook/node-logger": { + "node_modules/@storybook/builder-webpack5/node_modules/@storybook/node-logger": { "version": "7.6.14", "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.14.tgz", "integrity": "sha512-prKUMGxGzeX3epdlin1UU6M1//CoAJM1GrffrFeNntnPr3h6GMTgxNzl85flUhWd4ky/wjC/36dGOI8QRYVtoA==", @@ -10928,7 +10433,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/preview-api": { + "node_modules/@storybook/builder-webpack5/node_modules/@storybook/preview-api": { "version": "7.6.14", "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.14.tgz", "integrity": "sha512-CnUEkTUK3ei3vw4Ypa9EOxEO9lCKc3HvVHxXu4z6Caoe/hRUc10Q6Nj1A7brqok1QLZ304qc715XdYFMahDhyA==", @@ -10954,27 +10459,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/@storybook/telemetry": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.14.tgz", - "integrity": "sha512-F+a9Q4dHCpuBLQmB05DOLosU8p1Otj3Vd+/5EF9QUFSn4C64z1gmMc3jzF3iUgktY53HdoUqR871w3GoOJ7g9A==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.6.14", - "@storybook/core-common": "7.6.14", - "@storybook/csf-tools": "7.6.14", - "chalk": "^4.1.0", - "detect-package-manager": "^2.0.1", - "fetch-retry": "^5.0.2", - "fs-extra": "^11.1.0", - "read-pkg-up": "^7.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/cli/node_modules/@storybook/types": { + "node_modules/@storybook/builder-webpack5/node_modules/@storybook/types": { "version": "7.6.14", "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.14.tgz", "integrity": "sha512-sJ3qn45M2XLXlOi+wkhXK5xsXbSVzi8YGrusux//DttI3s8wCP3BQSnEgZkBiEktloxPferINHT1er8/9UK7Xw==", @@ -10990,7 +10475,7 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/ansi-styles": { + "node_modules/@storybook/builder-webpack5/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -11005,67 +10490,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@storybook/cli/node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "dev": true, - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@storybook/cli/node_modules/brace-expansion": { + "node_modules/@storybook/builder-webpack5/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -11074,7 +10499,7 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@storybook/cli/node_modules/chalk": { + "node_modules/@storybook/builder-webpack5/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -11090,16 +10515,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/cli/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@storybook/cli/node_modules/esbuild": { + "node_modules/@storybook/builder-webpack5/node_modules/esbuild": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", @@ -11136,7 +10552,7 @@ "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/@storybook/cli/node_modules/file-system-cache": { + "node_modules/@storybook/builder-webpack5/node_modules/file-system-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", @@ -11146,7 +10562,7 @@ "ramda": "0.29.0" } }, - "node_modules/@storybook/cli/node_modules/fs-extra": { + "node_modules/@storybook/builder-webpack5/node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", @@ -11160,7 +10576,7 @@ "node": ">=14.14" } }, - "node_modules/@storybook/cli/node_modules/glob": { + "node_modules/@storybook/builder-webpack5/node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", @@ -11182,7 +10598,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/cli/node_modules/has-flag": { + "node_modules/@storybook/builder-webpack5/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==", @@ -11191,7 +10607,19 @@ "node": ">=8" } }, - "node_modules/@storybook/cli/node_modules/minimatch": { + "node_modules/@storybook/builder-webpack5/node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", @@ -11206,7 +10634,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/cli/node_modules/minipass": { + "node_modules/@storybook/builder-webpack5/node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", @@ -11215,7 +10643,7 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/@storybook/cli/node_modules/supports-color": { + "node_modules/@storybook/builder-webpack5/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -11227,46 +10655,125 @@ "node": ">=8" } }, - "node_modules/@storybook/client-logger": { + "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/webpack-virtual-modules": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", + "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", + "dev": true + }, + "node_modules/@storybook/channel-postmessage": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.0.4.tgz", - "integrity": "sha512-3sEUIt6/ry+RdTpP+6Ic1QqoQh6Pn9ugCaP54Bc0z4wDI+NIJtJ5E2j4bcml/1/l9h9zNlmAAMgpZizm8KtIdA==", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-7.0.4.tgz", + "integrity": "sha512-KInHB3iSBgMxGkDmOMBu+B+ohxi2NzDpcl9yA5+xVuqG8Q6gJBurDYBsinq2zEZ1ceZYSoCseqJaH2jQFh/Oeg==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@storybook/channels": "7.0.4", + "@storybook/client-logger": "7.0.4", + "@storybook/core-events": "7.0.4", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.0.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod": { + "node_modules/@storybook/channels": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.0.4.tgz", + "integrity": "sha512-1HT8VM8G72XQ88wGcXVYl2g6OFsglUBW8L7uWWZoh96xWpNViaptaN/4OKwiUrThrc0DbEkAKmhPT3zQ7McoyA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli": { "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.14.tgz", - "integrity": "sha512-Sq/Q12KmvzaSUtmbtD26cEEGVmZLUA+iiNHbl0n65MMka6QBGG/VgSPvSgu+GEpKowbVoqfMpH4Ic16A6XsNFg==", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.14.tgz", + "integrity": "sha512-2xqcGRPtj/OE+9ro92C5MFCT8VHdMCDDuZZRnmgPi83iqSZtYbO8xHZwz78j4TvmouHstOV1SedeWv0IsFIxLw==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", - "@storybook/csf": "^0.1.2", + "@ndelangen/get-tarball": "^3.0.7", + "@storybook/codemod": "7.6.14", + "@storybook/core-common": "7.6.14", + "@storybook/core-events": "7.6.14", + "@storybook/core-server": "7.6.14", "@storybook/csf-tools": "7.6.14", "@storybook/node-logger": "7.6.14", + "@storybook/telemetry": "7.6.14", "@storybook/types": "7.6.14", - "@types/cross-spawn": "^6.0.2", + "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "commander": "^6.2.1", "cross-spawn": "^7.0.3", + "detect-indent": "^6.1.0", + "envinfo": "^7.7.3", + "execa": "^5.0.0", + "express": "^4.17.3", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "get-npm-tarball-url": "^2.0.3", + "get-port": "^5.1.1", + "giget": "^1.0.0", "globby": "^11.0.2", "jscodeshift": "^0.15.1", - "lodash": "^4.17.21", + "leven": "^3.1.0", + "ora": "^5.4.1", "prettier": "^2.8.0", - "recast": "^0.23.1" + "prompts": "^2.4.0", + "puppeteer-core": "^2.1.1", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "strip-json-comments": "^3.0.1", + "tempy": "^1.0.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "bin": { + "getstorybook": "bin/index.js", + "sb": "bin/index.js" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/@babel/generator": { + "node_modules/@storybook/cli/node_modules/@babel/generator": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", @@ -11281,7 +10788,7 @@ "node": ">=6.9.0" } }, - "node_modules/@storybook/codemod/node_modules/@babel/helper-define-polyfill-provider": { + "node_modules/@storybook/cli/node_modules/@babel/helper-define-polyfill-provider": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", @@ -11297,7 +10804,7 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@storybook/codemod/node_modules/@babel/plugin-proposal-private-property-in-object": { + "node_modules/@storybook/cli/node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", @@ -11309,7 +10816,7 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@storybook/codemod/node_modules/@babel/plugin-transform-async-to-generator": { + "node_modules/@storybook/cli/node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", @@ -11326,7 +10833,7 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@storybook/codemod/node_modules/@babel/preset-env": { + "node_modules/@storybook/cli/node_modules/@babel/preset-env": { "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", @@ -11420,7 +10927,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@storybook/codemod/node_modules/@babel/preset-modules": { + "node_modules/@storybook/cli/node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/cli/node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", @@ -11434,227 +10950,2545 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@storybook/codemod/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@storybook/cli/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/@storybook/channels": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.14.tgz", - "integrity": "sha512-tyrnnXTh7Ca6HbtzYtZGZmbUkC+eYPdot41+YDERMxXCnejd18BnsH/pyGW66GwgY079Q7uhdDFyM63ynZrt/A==", + "node_modules/@storybook/cli/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@storybook/client-logger": "7.6.14", - "@storybook/core-events": "7.6.14", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/@storybook/client-logger": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.14.tgz", - "integrity": "sha512-rHa2hLU+80BN5E58Shf1g09YS6QEEOk5hwMuJ4WJfAypMDYPjnIsOYUboHClkCA9TDCH/iVhyRSPy83NWN2MZg==", + "node_modules/@storybook/cli/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/@storybook/core-events": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.14.tgz", - "integrity": "sha512-zuSMjOgju7WLFL+okTXVvOKKNzwqVGRVp5UhXeSikT4aXuVdpfepCfikkjntn12G1ybL7mfFCsBU2DV1lwwp6Q==", + "node_modules/@storybook/cli/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/@storybook/csf-tools": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.14.tgz", - "integrity": "sha512-s7XFIi823HhcKxTqHY/uU1QZCujLBjFt6OJa5y3XvwIMoLJWZtuT1PF/QPR0K7iYb9gQnGHwO9lZBfMraUywrQ==", + "node_modules/@storybook/cli/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/generator": "^7.23.0", - "@babel/parser": "^7.23.0", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", - "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.14", - "fs-extra": "^11.1.0", - "recast": "^0.23.1", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/@storybook/node-logger": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.14.tgz", - "integrity": "sha512-prKUMGxGzeX3epdlin1UU6M1//CoAJM1GrffrFeNntnPr3h6GMTgxNzl85flUhWd4ky/wjC/36dGOI8QRYVtoA==", + "node_modules/@storybook/cli/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/@storybook/types": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.14.tgz", - "integrity": "sha512-sJ3qn45M2XLXlOi+wkhXK5xsXbSVzi8YGrusux//DttI3s8wCP3BQSnEgZkBiEktloxPferINHT1er8/9UK7Xw==", + "node_modules/@storybook/cli/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@storybook/channels": "7.6.14", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/file-system-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", - "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "fs-extra": "11.1.1", - "ramda": "0.29.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.14" + "node": ">=12" } }, - "node_modules/@storybook/codemod/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/components": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.0.4.tgz", - "integrity": "sha512-yBw+1NkGlaHo6U7crIlz8g5LFqXugmnS1t4xsxEUQO6b5BdQuQPggwjlkEkHoLW3sg04Sacgb7CvfDWInieuug==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", - "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/core-common": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.0.4.tgz", - "integrity": "sha512-3+U8LmMXjHDb2dO7x7rCsYIWVYekr1MxQ+fiUH5fNqLAeE+Fs9VzUTRlNbzo875bQRKkgeLraIyIM/XhhUzVnQ==", + "node_modules/@storybook/cli/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@storybook/node-logger": "7.0.4", - "@storybook/types": "7.0.4", - "@types/node": "^16.0.0", - "@types/pretty-hrtime": "^1.0.0", - "chalk": "^4.1.0", - "esbuild": "^0.17.0", - "esbuild-register": "^3.4.0", - "file-system-cache": "^2.0.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/cli/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/builder-manager": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.14.tgz", + "integrity": "sha512-pID/g2Bnr3tjmkh8c+O6TZei3f1TWHW/UWi/skNQ3wGJ+9dqJIK2vQY5SwnXBWkmJdUqGVXaW5BvzR8jjfpTxQ==", + "dev": true, + "dependencies": { + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "7.6.14", + "@storybook/manager": "7.6.14", + "@storybook/node-logger": "7.6.14", + "@types/ejs": "^3.1.1", + "@types/find-cache-dir": "^3.2.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.8", + "esbuild": "^0.18.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "find-cache-dir": "^3.0.0", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/channels": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.14.tgz", + "integrity": "sha512-tyrnnXTh7Ca6HbtzYtZGZmbUkC+eYPdot41+YDERMxXCnejd18BnsH/pyGW66GwgY079Q7uhdDFyM63ynZrt/A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.14", + "@storybook/core-events": "7.6.14", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/client-logger": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.14.tgz", + "integrity": "sha512-rHa2hLU+80BN5E58Shf1g09YS6QEEOk5hwMuJ4WJfAypMDYPjnIsOYUboHClkCA9TDCH/iVhyRSPy83NWN2MZg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/core-common": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.14.tgz", + "integrity": "sha512-0CIfwdjY5+OO6B+WxeCx3fZou1wk50RU9hFOMGwJ2yj/5ilV06xVHt0HNrA2x37zaK7r370PjOuny0Xudba03g==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.6.14", + "@storybook/node-logger": "7.6.14", + "@storybook/types": "7.6.14", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/core-events": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.14.tgz", + "integrity": "sha512-zuSMjOgju7WLFL+okTXVvOKKNzwqVGRVp5UhXeSikT4aXuVdpfepCfikkjntn12G1ybL7mfFCsBU2DV1lwwp6Q==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/core-server": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.14.tgz", + "integrity": "sha512-OSUunvjXyUiyfGet8ZBz7/Lka6dSgbbVMH7lU6wELIYCd2ZUxU5HQMl9JPesl61wWB4L3JaWFAoMRaCVI7q0xQ==", + "dev": true, + "dependencies": { + "@aw-web-design/x-default-browser": "1.4.126", + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-manager": "7.6.14", + "@storybook/channels": "7.6.14", + "@storybook/core-common": "7.6.14", + "@storybook/core-events": "7.6.14", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.14", + "@storybook/docs-mdx": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager": "7.6.14", + "@storybook/node-logger": "7.6.14", + "@storybook/preview-api": "7.6.14", + "@storybook/telemetry": "7.6.14", + "@storybook/types": "7.6.14", + "@types/detect-port": "^1.3.0", + "@types/node": "^18.0.0", + "@types/pretty-hrtime": "^1.0.0", + "@types/semver": "^7.3.4", + "better-opn": "^3.0.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "compression": "^1.7.4", + "detect-port": "^1.3.0", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/csf-tools": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.14.tgz", + "integrity": "sha512-s7XFIi823HhcKxTqHY/uU1QZCujLBjFt6OJa5y3XvwIMoLJWZtuT1PF/QPR0K7iYb9gQnGHwO9lZBfMraUywrQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.14", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/manager": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.14.tgz", + "integrity": "sha512-lgowunC/pm2y6d+3j7UJ/CkHpWC0o+nZ9b7mDbkJ6PmezW5Hpy83kbeCxbwRGosYoPQ0izBzVB5ZqGgKrNNDjA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/node-logger": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.14.tgz", + "integrity": "sha512-prKUMGxGzeX3epdlin1UU6M1//CoAJM1GrffrFeNntnPr3h6GMTgxNzl85flUhWd4ky/wjC/36dGOI8QRYVtoA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/preview-api": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.14.tgz", + "integrity": "sha512-CnUEkTUK3ei3vw4Ypa9EOxEO9lCKc3HvVHxXu4z6Caoe/hRUc10Q6Nj1A7brqok1QLZ304qc715XdYFMahDhyA==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.14", + "@storybook/client-logger": "7.6.14", + "@storybook/core-events": "7.6.14", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.14", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/telemetry": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.14.tgz", + "integrity": "sha512-F+a9Q4dHCpuBLQmB05DOLosU8p1Otj3Vd+/5EF9QUFSn4C64z1gmMc3jzF3iUgktY53HdoUqR871w3GoOJ7g9A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.14", + "@storybook/core-common": "7.6.14", + "@storybook/csf-tools": "7.6.14", + "chalk": "^4.1.0", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^11.1.0", + "read-pkg-up": "^7.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/@storybook/types": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.14.tgz", + "integrity": "sha512-sJ3qn45M2XLXlOi+wkhXK5xsXbSVzi8YGrusux//DttI3s8wCP3BQSnEgZkBiEktloxPferINHT1er8/9UK7Xw==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.14", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/cli/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/cli/node_modules/file-system-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", + "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, + "dependencies": { + "fs-extra": "11.1.1", + "ramda": "0.29.0" + } + }, + "node_modules/@storybook/cli/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@storybook/cli/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/cli/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/cli/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@storybook/cli/node_modules/supports-color": { + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/client-logger": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.0.4.tgz", + "integrity": "sha512-3sEUIt6/ry+RdTpP+6Ic1QqoQh6Pn9ugCaP54Bc0z4wDI+NIJtJ5E2j4bcml/1/l9h9zNlmAAMgpZizm8KtIdA==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.14.tgz", + "integrity": "sha512-Sq/Q12KmvzaSUtmbtD26cEEGVmZLUA+iiNHbl0n65MMka6QBGG/VgSPvSgu+GEpKowbVoqfMpH4Ic16A6XsNFg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.14", + "@storybook/node-logger": "7.6.14", + "@storybook/types": "7.6.14", + "@types/cross-spawn": "^6.0.2", + "cross-spawn": "^7.0.3", + "globby": "^11.0.2", + "jscodeshift": "^0.15.1", + "lodash": "^4.17.21", + "prettier": "^2.8.0", + "recast": "^0.23.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/codemod/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/codemod/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/codemod/node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/codemod/node_modules/@babel/preset-env": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/codemod/node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/codemod/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/channels": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.14.tgz", + "integrity": "sha512-tyrnnXTh7Ca6HbtzYtZGZmbUkC+eYPdot41+YDERMxXCnejd18BnsH/pyGW66GwgY079Q7uhdDFyM63ynZrt/A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.14", + "@storybook/core-events": "7.6.14", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/client-logger": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.14.tgz", + "integrity": "sha512-rHa2hLU+80BN5E58Shf1g09YS6QEEOk5hwMuJ4WJfAypMDYPjnIsOYUboHClkCA9TDCH/iVhyRSPy83NWN2MZg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/core-events": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.14.tgz", + "integrity": "sha512-zuSMjOgju7WLFL+okTXVvOKKNzwqVGRVp5UhXeSikT4aXuVdpfepCfikkjntn12G1ybL7mfFCsBU2DV1lwwp6Q==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/csf-tools": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.14.tgz", + "integrity": "sha512-s7XFIi823HhcKxTqHY/uU1QZCujLBjFt6OJa5y3XvwIMoLJWZtuT1PF/QPR0K7iYb9gQnGHwO9lZBfMraUywrQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.14", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/node-logger": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.14.tgz", + "integrity": "sha512-prKUMGxGzeX3epdlin1UU6M1//CoAJM1GrffrFeNntnPr3h6GMTgxNzl85flUhWd4ky/wjC/36dGOI8QRYVtoA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/@storybook/types": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.14.tgz", + "integrity": "sha512-sJ3qn45M2XLXlOi+wkhXK5xsXbSVzi8YGrusux//DttI3s8wCP3BQSnEgZkBiEktloxPferINHT1er8/9UK7Xw==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.14", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@storybook/codemod/node_modules/file-system-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", + "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, + "dependencies": { + "fs-extra": "11.1.1", + "ramda": "0.29.0" + } + }, + "node_modules/@storybook/codemod/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@storybook/codemod/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@storybook/components": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.0.4.tgz", + "integrity": "sha512-yBw+1NkGlaHo6U7crIlz8g5LFqXugmnS1t4xsxEUQO6b5BdQuQPggwjlkEkHoLW3sg04Sacgb7CvfDWInieuug==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.0.4", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.0.4", + "@storybook/types": "7.0.4", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/core-common": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.0.4.tgz", + "integrity": "sha512-3+U8LmMXjHDb2dO7x7rCsYIWVYekr1MxQ+fiUH5fNqLAeE+Fs9VzUTRlNbzo875bQRKkgeLraIyIM/XhhUzVnQ==", + "dev": true, + "dependencies": { + "@storybook/node-logger": "7.0.4", + "@storybook/types": "7.0.4", + "@types/node": "^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.17.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "^2.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^8.1.0", + "glob-promise": "^6.0.2", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "16.18.71", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.71.tgz", + "integrity": "sha512-ARO+458bNJQeNEFuPyT6W+q9ULotmsQzhV3XABsFSxEvRMUYENcBsNAHWYPlahU+UHa5gCVwyKT1Z3f1Wwr26Q==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-common/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/core-common/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/supports-color": { + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-events": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.0.4.tgz", + "integrity": "sha512-3gYyJZdHrf69tGueN7SQCgPxnLYYow8n5BeBcBlehYAutfLOafpd36HPIXSHIvJaLDNUzGqLcFiGub04ts1pJA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.17.tgz", + "integrity": "sha512-KWGhTTaL1Q14FolcoKKZgytlPJUbH6sbJ1Ptj/84EYWFewcnEgVs0Zlnh1VStRZg+Rd1WC1V4yVd/bbDzxrvQA==", + "dev": true, + "dependencies": { + "@aw-web-design/x-default-browser": "1.4.126", + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-manager": "7.6.17", + "@storybook/channels": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.17", + "@storybook/docs-mdx": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/preview-api": "7.6.17", + "@storybook/telemetry": "7.6.17", + "@storybook/types": "7.6.17", + "@types/detect-port": "^1.3.0", + "@types/node": "^18.0.0", + "@types/pretty-hrtime": "^1.0.0", + "@types/semver": "^7.3.4", + "better-opn": "^3.0.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "compression": "^1.7.4", + "detect-port": "^1.3.0", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "globby": "^11.0.2", + "ip": "^2.0.1", + "lodash": "^4.17.21", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-server/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/channels": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", + "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/client-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz", + "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/core-common": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.17.tgz", + "integrity": "sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/types": "7.6.17", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/core-events": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz", + "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/csf-tools": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.17.tgz", + "integrity": "sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.17", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/node-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.17.tgz", + "integrity": "sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/preview-api": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.17.tgz", + "integrity": "sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.6.17", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/types": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", + "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.17", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-server/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/core-server/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/core-server/node_modules/file-system-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", + "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, + "dependencies": { + "fs-extra": "11.1.1", + "ramda": "0.29.0" + } + }, + "node_modules/@storybook/core-server/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@storybook/core-server/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-server/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-server/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@storybook/core-server/node_modules/supports-color": { + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-webpack": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.14.tgz", + "integrity": "sha512-aKykzFPHai9Tq9625PTftmg0sgdqU5VcY0ezBiT/MSrNr9aLORIXwIh7q4Xrx0ItwtnLBxvO9UZLy55CXeQkfg==", + "dev": true, + "dependencies": { + "@storybook/core-common": "7.6.14", + "@storybook/node-logger": "7.6.14", + "@storybook/types": "7.6.14", + "@types/node": "^18.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@storybook/channels": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.14.tgz", + "integrity": "sha512-tyrnnXTh7Ca6HbtzYtZGZmbUkC+eYPdot41+YDERMxXCnejd18BnsH/pyGW66GwgY079Q7uhdDFyM63ynZrt/A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.14", + "@storybook/core-events": "7.6.14", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@storybook/client-logger": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.14.tgz", + "integrity": "sha512-rHa2hLU+80BN5E58Shf1g09YS6QEEOk5hwMuJ4WJfAypMDYPjnIsOYUboHClkCA9TDCH/iVhyRSPy83NWN2MZg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@storybook/core-common": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.14.tgz", + "integrity": "sha512-0CIfwdjY5+OO6B+WxeCx3fZou1wk50RU9hFOMGwJ2yj/5ilV06xVHt0HNrA2x37zaK7r370PjOuny0Xudba03g==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.6.14", + "@storybook/node-logger": "7.6.14", + "@storybook/types": "7.6.14", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", "find-up": "^5.0.0", "fs-extra": "^11.1.0", - "glob": "^8.1.0", - "glob-promise": "^6.0.2", + "glob": "^10.0.0", "handlebars": "^4.7.7", "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", "picomatch": "^2.3.0", "pkg-dir": "^5.0.0", "pretty-hrtime": "^1.0.3", @@ -11666,13 +13500,46 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "16.18.71", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.71.tgz", - "integrity": "sha512-ARO+458bNJQeNEFuPyT6W+q9ULotmsQzhV3XABsFSxEvRMUYENcBsNAHWYPlahU+UHa5gCVwyKT1Z3f1Wwr26Q==", - "dev": true + "node_modules/@storybook/core-webpack/node_modules/@storybook/core-events": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.14.tgz", + "integrity": "sha512-zuSMjOgju7WLFL+okTXVvOKKNzwqVGRVp5UhXeSikT4aXuVdpfepCfikkjntn12G1ybL7mfFCsBU2DV1lwwp6Q==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } }, - "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "node_modules/@storybook/core-webpack/node_modules/@storybook/node-logger": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.14.tgz", + "integrity": "sha512-prKUMGxGzeX3epdlin1UU6M1//CoAJM1GrffrFeNntnPr3h6GMTgxNzl85flUhWd4ky/wjC/36dGOI8QRYVtoA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@storybook/types": { + "version": "7.6.14", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.14.tgz", + "integrity": "sha512-sJ3qn45M2XLXlOi+wkhXK5xsXbSVzi8YGrusux//DttI3s8wCP3BQSnEgZkBiEktloxPferINHT1er8/9UK7Xw==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.14", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-webpack/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -11687,7 +13554,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/core-common/node_modules/chalk": { + "node_modules/@storybook/core-webpack/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/core-webpack/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -11703,7 +13579,90 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/core-common/node_modules/has-flag": { + "node_modules/@storybook/core-webpack/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/core-webpack/node_modules/file-system-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", + "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, + "dependencies": { + "fs-extra": "11.1.1", + "ramda": "0.29.0" + } + }, + "node_modules/@storybook/core-webpack/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@storybook/core-webpack/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-webpack/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==", @@ -11712,7 +13671,31 @@ "node": ">=8" } }, - "node_modules/@storybook/core-common/node_modules/supports-color": { + "node_modules/@storybook/core-webpack/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-webpack/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@storybook/core-webpack/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -11724,77 +13707,221 @@ "node": ">=8" } }, - "node_modules/@storybook/core-events": { + "node_modules/@storybook/csf": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz", + "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==", + "dev": true, + "dependencies": { + "type-fest": "^2.19.0" + } + }, + "node_modules/@storybook/csf-plugin": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.0.4.tgz", - "integrity": "sha512-3gYyJZdHrf69tGueN7SQCgPxnLYYow8n5BeBcBlehYAutfLOafpd36HPIXSHIvJaLDNUzGqLcFiGub04ts1pJA==", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.0.4.tgz", + "integrity": "sha512-munQ9lC8dYRXsQlEIeAfUGOyv/alihEzunIHJR8VVKxfVVEuoeuwIUHomytRSyX9OWGtqfwjkDqHb271l9QqTA==", "dev": true, + "dependencies": { + "@storybook/csf-tools": "7.0.4", + "unplugin": "^0.10.2" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server": { + "node_modules/@storybook/csf-tools": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.0.4.tgz", - "integrity": "sha512-4yYvrUoLrrNg10IjGCEnsZYRo8NNgpzb28qSAerbJCz1lcGGemzkKayDGLj+k2B2Jif/cc18nwuWnux9Q7R/ow==", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.0.4.tgz", + "integrity": "sha512-QcI+ldwrgDMYwmsE6+zVGWVp0Zus5EJbcRJiX+luNICXF9If7JYQXuFUK/8N9qDyraScmHY/JQShbCiR6s/l6Q==", "dev": true, "dependencies": { - "@aw-web-design/x-default-browser": "1.4.88", - "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.0.4", + "@babel/generator": "~7.21.1", + "@babel/parser": "~7.21.2", + "@babel/traverse": "~7.21.2", + "@babel/types": "~7.21.2", + "@storybook/csf": "^0.1.0", + "@storybook/types": "7.0.4", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-tools/node_modules/@babel/generator": { + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/csf-tools/node_modules/@babel/parser": { + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/csf-tools/node_modules/@babel/traverse": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", + "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.5", + "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.5", + "@babel/types": "^7.21.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/csf-tools/node_modules/@babel/types": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", + "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/csf-tools/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@storybook/docs-mdx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", + "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", + "dev": true + }, + "node_modules/@storybook/docs-tools": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.0.4.tgz", + "integrity": "sha512-X4hci6NWcOLAqBszqsHi1liqgCwc7gCqqnX4OXJ0uCkb9OD/aY+dDTeShPXhNxKNLt98o/OyEv+Qr7ngP5la2A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.10", "@storybook/core-common": "7.0.4", + "@storybook/preview-api": "7.0.4", + "@storybook/types": "7.0.4", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/global": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", + "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", + "dev": true + }, + "node_modules/@storybook/manager": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.17.tgz", + "integrity": "sha512-A1LDDIqMpwRzq/dqkbbiza0QI04o4ZHCl2a3UMDZUV/+QLc2nsr2DAaLk4CVL4/cIc5zGqmIcaOTvprx2YKVBw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager-api": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.0.4.tgz", + "integrity": "sha512-kydmycU7EdlngXRL+9rmNQ6WE4VsbW9TvSeuzfmZ1RVbbl1yF3jpwU/9xK23I4ci4jWk6xilAJgs7FkPBVCeJQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.0.4", + "@storybook/client-logger": "7.0.4", "@storybook/core-events": "7.0.4", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.4", - "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/telemetry": "7.0.4", + "@storybook/router": "7.0.4", + "@storybook/theming": "7.0.4", "@storybook/types": "7.0.4", - "@types/detect-port": "^1.3.0", - "@types/node": "^16.0.0", - "@types/node-fetch": "^2.5.7", - "@types/pretty-hrtime": "^1.0.0", - "@types/semver": "^7.3.4", - "better-opn": "^2.1.1", - "boxen": "^5.1.2", - "chalk": "^4.1.0", - "cli-table3": "^0.6.1", - "compression": "^1.7.4", - "detect-port": "^1.3.0", - "express": "^4.17.3", - "fs-extra": "^11.1.0", - "globby": "^11.0.2", - "ip": "^2.0.0", + "dequal": "^2.0.2", "lodash": "^4.17.21", - "node-fetch": "^2.6.7", - "open": "^8.4.0", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", + "memoizerific": "^1.11.3", "semver": "^7.3.7", - "serve-favicon": "^2.5.0", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "watchpack": "^2.2.0", - "ws": "^8.2.3" + "store2": "^2.14.2", + "telejson": "^7.0.3", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "16.18.71", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.71.tgz", - "integrity": "sha512-ARO+458bNJQeNEFuPyT6W+q9ULotmsQzhV3XABsFSxEvRMUYENcBsNAHWYPlahU+UHa5gCVwyKT1Z3f1Wwr26Q==", + "node_modules/@storybook/mdx2-csf": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", + "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", "dev": true }, - "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "node_modules/@storybook/node-logger": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.0.4.tgz", + "integrity": "sha512-kXDSzih/ipKGa2sB6rYxLUIE7ADs/v+s7ZITmb2vBSq5GQNbPVXg2z2dz3S+goGfcHglHXkBUuIVn/Mhl/Xw+A==", + "dev": true, + "dependencies": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/node-logger/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -11809,7 +13936,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/core-server/node_modules/chalk": { + "node_modules/@storybook/node-logger/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -11825,7 +13952,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/core-server/node_modules/has-flag": { + "node_modules/@storybook/node-logger/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==", @@ -11834,7 +13961,7 @@ "node": ">=8" } }, - "node_modules/@storybook/core-server/node_modules/supports-color": { + "node_modules/@storybook/node-logger/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -11846,24 +13973,122 @@ "node": ">=8" } }, - "node_modules/@storybook/core-webpack": { + "node_modules/@storybook/postinstall": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.0.4.tgz", + "integrity": "sha512-Fl6aUg1KeIlLTsJoODSUAWzvS8QmkSuwQZClz644f++oFn8fDoM+h4S4LO2YMidWM1INHsJvdhrMu26m/CFDLA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview": { "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.14.tgz", - "integrity": "sha512-aKykzFPHai9Tq9625PTftmg0sgdqU5VcY0ezBiT/MSrNr9aLORIXwIh7q4Xrx0ItwtnLBxvO9UZLy55CXeQkfg==", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.14.tgz", + "integrity": "sha512-6Y873pNsJBQuCeR3YDMlRgRW+4Tf+Rj4VdujjvRw/H7ES1+pO8qgcI3VJCcoxqDY9ZNPT/riLh8YOddpLNCgNg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview-api": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.0.4.tgz", + "integrity": "sha512-v1DDhJ2gPUqKhidHPDs/bjbBGEuFIBEZy5ZPA/cZHCZjH3vK70p+ZuihEiD2dl64M/7FtEF4tb6e0ZlRCcLKQA==", "dev": true, "dependencies": { - "@storybook/core-common": "7.6.14", - "@storybook/node-logger": "7.6.14", - "@storybook/types": "7.6.14", - "@types/node": "^18.0.0", - "ts-dedent": "^2.0.0" + "@storybook/channel-postmessage": "7.0.4", + "@storybook/channels": "7.0.4", + "@storybook/client-logger": "7.0.4", + "@storybook/core-events": "7.0.4", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.0.4", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/android-arm": { + "node_modules/@storybook/react-dom-shim": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.4.tgz", + "integrity": "sha512-h1pgJdAKRhnQxeAyqX2TftCUvpdBKhQ/2CpOcv+YptONOEWgIWfjatTTIkqNeIQu2XzzKuWwLZyfZrtZcY+1qg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/router": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.0.4.tgz", + "integrity": "sha512-pVUSYBYbf+eIiWpO0i3kOZwvETM26txd7Q4IZqFcORX+BhWgPgcDZk9uebxii2SmwZ1VqdMKbhgeXsNcQxtnrw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.0.4", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/telemetry": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.17.tgz", + "integrity": "sha512-WOcOAmmengYnGInH98Px44F47DSpLyk20BM+Z/IIQDzfttGOLlxNqBBG1XTEhNRn+AYuk4aZ2JEed2lCjVIxcA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.17", + "@storybook/core-common": "7.6.17", + "@storybook/csf-tools": "7.6.17", + "chalk": "^4.1.0", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^11.1.0", + "read-pkg-up": "^7.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry/node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@storybook/telemetry/node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", @@ -11879,7 +14104,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/android-arm64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/android-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", @@ -11895,7 +14120,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/android-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/android-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", @@ -11911,7 +14136,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/darwin-arm64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/darwin-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", @@ -11927,7 +14152,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/darwin-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/darwin-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", @@ -11943,7 +14168,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/freebsd-arm64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/freebsd-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", @@ -11959,7 +14184,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/freebsd-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/freebsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", @@ -11975,7 +14200,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-arm": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", @@ -11991,7 +14216,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-arm64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", @@ -12007,7 +14232,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-ia32": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-ia32": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", @@ -12023,7 +14248,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-loong64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-loong64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", @@ -12039,7 +14264,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-mips64el": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-mips64el": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", @@ -12055,7 +14280,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-ppc64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-ppc64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", @@ -12071,7 +14296,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-riscv64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-riscv64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", @@ -12087,7 +14312,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-s390x": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-s390x": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", @@ -12103,7 +14328,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/linux-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", @@ -12119,7 +14344,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/netbsd-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/netbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", @@ -12135,7 +14360,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/openbsd-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/openbsd-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", @@ -12151,7 +14376,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/sunos-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/sunos-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", @@ -12167,7 +14392,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/win32-arm64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/win32-arm64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", @@ -12183,7 +14408,7 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/win32-ia32": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/win32-ia32": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", @@ -12199,510 +14424,163 @@ "node": ">=12" } }, - "node_modules/@storybook/core-webpack/node_modules/@esbuild/win32-x64": { + "node_modules/@storybook/telemetry/node_modules/@esbuild/win32-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "cpu": [ "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@storybook/channels": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.14.tgz", - "integrity": "sha512-tyrnnXTh7Ca6HbtzYtZGZmbUkC+eYPdot41+YDERMxXCnejd18BnsH/pyGW66GwgY079Q7uhdDFyM63ynZrt/A==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.6.14", - "@storybook/core-events": "7.6.14", - "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.2.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@storybook/client-logger": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.14.tgz", - "integrity": "sha512-rHa2hLU+80BN5E58Shf1g09YS6QEEOk5hwMuJ4WJfAypMDYPjnIsOYUboHClkCA9TDCH/iVhyRSPy83NWN2MZg==", - "dev": true, - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@storybook/core-common": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.14.tgz", - "integrity": "sha512-0CIfwdjY5+OO6B+WxeCx3fZou1wk50RU9hFOMGwJ2yj/5ilV06xVHt0HNrA2x37zaK7r370PjOuny0Xudba03g==", - "dev": true, - "dependencies": { - "@storybook/core-events": "7.6.14", - "@storybook/node-logger": "7.6.14", - "@storybook/types": "7.6.14", - "@types/find-cache-dir": "^3.2.1", - "@types/node": "^18.0.0", - "@types/node-fetch": "^2.6.4", - "@types/pretty-hrtime": "^1.0.0", - "chalk": "^4.1.0", - "esbuild": "^0.18.0", - "esbuild-register": "^3.5.0", - "file-system-cache": "2.3.0", - "find-cache-dir": "^3.0.0", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "glob": "^10.0.0", - "handlebars": "^4.7.7", - "lazy-universal-dotenv": "^4.0.0", - "node-fetch": "^2.0.0", - "picomatch": "^2.3.0", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@storybook/core-events": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.14.tgz", - "integrity": "sha512-zuSMjOgju7WLFL+okTXVvOKKNzwqVGRVp5UhXeSikT4aXuVdpfepCfikkjntn12G1ybL7mfFCsBU2DV1lwwp6Q==", - "dev": true, - "dependencies": { - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@storybook/node-logger": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.14.tgz", - "integrity": "sha512-prKUMGxGzeX3epdlin1UU6M1//CoAJM1GrffrFeNntnPr3h6GMTgxNzl85flUhWd4ky/wjC/36dGOI8QRYVtoA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-webpack/node_modules/@storybook/types": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.14.tgz", - "integrity": "sha512-sJ3qn45M2XLXlOi+wkhXK5xsXbSVzi8YGrusux//DttI3s8wCP3BQSnEgZkBiEktloxPferINHT1er8/9UK7Xw==", - "dev": true, - "dependencies": { - "@storybook/channels": "7.6.14", - "@types/babel__core": "^7.0.0", - "@types/express": "^4.7.0", - "file-system-cache": "2.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-webpack/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/core-webpack/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@storybook/core-webpack/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/core-webpack/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "node_modules/@storybook/core-webpack/node_modules/file-system-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", - "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", - "dev": true, - "dependencies": { - "fs-extra": "11.1.1", - "ramda": "0.29.0" - } - }, - "node_modules/@storybook/core-webpack/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@storybook/core-webpack/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@storybook/core-webpack/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/core-webpack/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@storybook/core-webpack/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@storybook/core-webpack/node_modules/supports-color": { - "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/csf": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz", - "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==", - "dev": true, - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/csf-plugin": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.0.4.tgz", - "integrity": "sha512-munQ9lC8dYRXsQlEIeAfUGOyv/alihEzunIHJR8VVKxfVVEuoeuwIUHomytRSyX9OWGtqfwjkDqHb271l9QqTA==", - "dev": true, - "dependencies": { - "@storybook/csf-tools": "7.0.4", - "unplugin": "^0.10.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/csf-tools": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.0.4.tgz", - "integrity": "sha512-QcI+ldwrgDMYwmsE6+zVGWVp0Zus5EJbcRJiX+luNICXF9If7JYQXuFUK/8N9qDyraScmHY/JQShbCiR6s/l6Q==", - "dev": true, - "dependencies": { - "@babel/generator": "~7.21.1", - "@babel/parser": "~7.21.2", - "@babel/traverse": "~7.21.2", - "@babel/types": "~7.21.2", - "@storybook/csf": "^0.1.0", - "@storybook/types": "7.0.4", - "fs-extra": "^11.1.0", - "recast": "^0.23.1", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/csf-tools/node_modules/@babel/generator": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", - "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@storybook/csf-tools/node_modules/@babel/parser": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", - "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", + ], "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@storybook/csf-tools/node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "node_modules/@storybook/telemetry/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@storybook/csf-tools/node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "node_modules/@storybook/telemetry/node_modules/@storybook/channels": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.17.tgz", + "integrity": "sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@storybook/client-logger": "7.6.17", + "@storybook/core-events": "7.6.17", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/csf-tools/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.17.tgz", + "integrity": "sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@storybook/global": "^5.0.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/docs-mdx": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", - "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", - "dev": true - }, - "node_modules/@storybook/docs-tools": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.0.4.tgz", - "integrity": "sha512-X4hci6NWcOLAqBszqsHi1liqgCwc7gCqqnX4OXJ0uCkb9OD/aY+dDTeShPXhNxKNLt98o/OyEv+Qr7ngP5la2A==", + "node_modules/@storybook/telemetry/node_modules/@storybook/core-common": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.17.tgz", + "integrity": "sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g==", "dev": true, "dependencies": { - "@babel/core": "^7.12.10", - "@storybook/core-common": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/types": "7.0.4", - "@types/doctrine": "^0.0.3", - "doctrine": "^3.0.0", - "lodash": "^4.17.21" + "@storybook/core-events": "7.6.17", + "@storybook/node-logger": "7.6.17", + "@storybook/types": "7.6.17", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/global": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", - "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", - "dev": true - }, - "node_modules/@storybook/manager": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.0.4.tgz", - "integrity": "sha512-+H3d7R3CkbqrLAuB1H7XPxoH4G4ayinc3Cbs6tbvyL0n6FovdKZsiGHWPB3Ibms4VcYXJswpB0kzkOSOLavlWw==", + "node_modules/@storybook/telemetry/node_modules/@storybook/core-events": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.17.tgz", + "integrity": "sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==", "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/manager-api": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.0.4.tgz", - "integrity": "sha512-kydmycU7EdlngXRL+9rmNQ6WE4VsbW9TvSeuzfmZ1RVbbl1yF3jpwU/9xK23I4ci4jWk6xilAJgs7FkPBVCeJQ==", + "node_modules/@storybook/telemetry/node_modules/@storybook/csf-tools": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.17.tgz", + "integrity": "sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/router": "7.0.4", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "semver": "^7.3.7", - "store2": "^2.14.2", - "telejson": "^7.0.3", + "@babel/generator": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "@storybook/csf": "^0.1.2", + "@storybook/types": "7.6.17", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/mdx2-csf": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", - "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", - "dev": true + "node_modules/@storybook/telemetry/node_modules/@storybook/node-logger": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.17.tgz", + "integrity": "sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } }, - "node_modules/@storybook/node-logger": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.0.4.tgz", - "integrity": "sha512-kXDSzih/ipKGa2sB6rYxLUIE7ADs/v+s7ZITmb2vBSq5GQNbPVXg2z2dz3S+goGfcHglHXkBUuIVn/Mhl/Xw+A==", + "node_modules/@storybook/telemetry/node_modules/@storybook/types": { + "version": "7.6.17", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.17.tgz", + "integrity": "sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==", "dev": true, "dependencies": { - "@types/npmlog": "^4.1.2", - "chalk": "^4.1.0", - "npmlog": "^5.0.1", - "pretty-hrtime": "^1.0.3" + "@storybook/channels": "7.6.17", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/node-logger/node_modules/ansi-styles": { + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -12717,7 +14595,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/node-logger/node_modules/chalk": { + "node_modules/@storybook/telemetry/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/telemetry/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -12733,166 +14620,120 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/node-logger/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/node-logger/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/telemetry/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/postinstall": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.0.4.tgz", - "integrity": "sha512-Fl6aUg1KeIlLTsJoODSUAWzvS8QmkSuwQZClz644f++oFn8fDoM+h4S4LO2YMidWM1INHsJvdhrMu26m/CFDLA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/preview": { - "version": "7.6.14", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.14.tgz", - "integrity": "sha512-6Y873pNsJBQuCeR3YDMlRgRW+4Tf+Rj4VdujjvRw/H7ES1+pO8qgcI3VJCcoxqDY9ZNPT/riLh8YOddpLNCgNg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/@storybook/preview-api": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.0.4.tgz", - "integrity": "sha512-v1DDhJ2gPUqKhidHPDs/bjbBGEuFIBEZy5ZPA/cZHCZjH3vK70p+ZuihEiD2dl64M/7FtEF4tb6e0ZlRCcLKQA==", + "node_modules/@storybook/telemetry/node_modules/file-system-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", + "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", "dev": true, "dependencies": { - "@storybook/channel-postmessage": "7.0.4", - "@storybook/channels": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/types": "7.0.4", - "@types/qs": "^6.9.5", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "synchronous-promise": "^2.0.15", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "fs-extra": "11.1.1", + "ramda": "0.29.0" } }, - "node_modules/@storybook/react-dom-shim": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.4.tgz", - "integrity": "sha512-h1pgJdAKRhnQxeAyqX2TftCUvpdBKhQ/2CpOcv+YptONOEWgIWfjatTTIkqNeIQu2XzzKuWwLZyfZrtZcY+1qg==", + "node_modules/@storybook/telemetry/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=14.14" } }, - "node_modules/@storybook/router": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.0.4.tgz", - "integrity": "sha512-pVUSYBYbf+eIiWpO0i3kOZwvETM26txd7Q4IZqFcORX+BhWgPgcDZk9uebxii2SmwZ1VqdMKbhgeXsNcQxtnrw==", + "node_modules/@storybook/telemetry/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "memoizerific": "^1.11.3", - "qs": "^6.10.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "bin": { + "glob": "dist/esm/bin.mjs" }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/telemetry": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.0.4.tgz", - "integrity": "sha512-J05HkLsRTgHyXlOKqlxiAdr1VWNvvWBGOpemSWPDk9IJEHTCBEQeJT3ewRMfy3IVHp6jt++oCPeO5gRZjbir8Q==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/core-common": "7.0.4", - "chalk": "^4.1.0", - "detect-package-manager": "^2.0.1", - "fetch-retry": "^5.0.2", - "fs-extra": "^11.1.0", - "isomorphic-unfetch": "^3.1.0", - "nanoid": "^3.3.1", - "read-pkg-up": "^7.0.1" + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/telemetry/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@storybook/telemetry/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, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/telemetry/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/telemetry/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/telemetry/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==", + "node_modules/@storybook/telemetry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/@storybook/telemetry/node_modules/supports-color": { @@ -13489,9 +15330,9 @@ "dev": true }, "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.6.tgz", + "integrity": "sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==", "dev": true, "dependencies": { "tslib": "^2.4.0" @@ -15016,15 +16857,6 @@ "ajv": "^8.8.2" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -15650,31 +17482,15 @@ } }, "node_modules/better-opn": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", - "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", - "dev": true, - "dependencies": { - "open": "^7.0.3" - }, - "engines": { - "node": ">8.0.0" - } - }, - "node_modules/better-opn/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", "dev": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "open": "^8.0.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.0.0" } }, "node_modules/big-integer": { @@ -15967,92 +17783,6 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/supports-color": { - "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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bplist-parser": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", @@ -16585,18 +18315,6 @@ "node": ">=6" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -17967,16 +19685,16 @@ } }, "node_modules/css-loader": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.9.0.tgz", - "integrity": "sha512-3I5Nu4ytWlHvOP6zItjiHlefBNtrH+oehq8tnQa2kO305qpVyx9XNIT1CXIj5bgCJs7qICBCkgCYxQLKPANoLA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.31", + "postcss": "^8.4.33", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" @@ -17989,7 +19707,16 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/css-loader/node_modules/postcss": { @@ -19544,16 +21271,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -19599,9 +21326,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -22630,9 +24357,9 @@ } }, "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, "node_modules/ipaddr.js": { @@ -23219,16 +24946,6 @@ "node": ">=0.10.0" } }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -28269,9 +29986,9 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", @@ -28286,9 +30003,9 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz", - "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" @@ -30518,34 +32235,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", - "dev": true, - "dependencies": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-favicon/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serve-favicon/node_modules/safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", @@ -32723,9 +34412,9 @@ "dev": true }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -33213,12 +34902,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -34113,18 +35796,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", diff --git a/package.json b/package.json index 2e60a26..5e213fe 100644 --- a/package.json +++ b/package.json @@ -49,11 +49,11 @@ "@ngneat/falso": "^6.4.0", "@ngx-translate/core": "^14.0.0", "@ngx-translate/http-loader": "^7.0.0", - "@onecx/accelerator": "^4.5.1", - "@onecx/integration-interface": "^4.5.1", - "@onecx/keycloak-auth": "^4.5.1", - "@onecx/portal-integration-angular": "^4.5.1", - "@onecx/portal-layout-styles": "^4.5.1", + "@onecx/accelerator": "^4.9.0", + "@onecx/integration-interface": "^4.9.0", + "@onecx/keycloak-auth": "^4.9.0", + "@onecx/portal-integration-angular": "^4.9.0", + "@onecx/portal-layout-styles": "^4.9.0", "file-saver": "^2.0.5", "i18n-iso-countries": "^7.6.0", "ngx-color": "^8.0.3", @@ -85,22 +85,22 @@ "@schematics/angular": "15.2.6", "@storybook/addon-essentials": "7.0.4", "@storybook/angular": "7.6.14", - "@storybook/core-server": "7.0.4 ", + "@storybook/core-server": "7.6.17", "@svgr/webpack": "^7.0.0", "@swc-node/register": "^1.6.5", "@swc/cli": "~0.1.63", "@swc/core": "^1.3.56", - "@swc/helpers": "0.5.1", + "@swc/helpers": "0.5.6", "@types/jasmine": "~3.10.0", "@types/node": "18.16.3", "@typescript-eslint/eslint-plugin": "5.48.2", "@typescript-eslint/parser": "5.62.0", "autoprefixer": "10.4.14", "chromatic": "^6.17.4", - "css-loader": "^6.7.3", + "css-loader": "^6.10.0", "cypress": "^12.11.0", - "eslint": "^8.33.0", - "eslint-config-prettier": "8.8.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "9.1.0", "eslint-plugin-cypress": "^2.13.3", "eslint-plugin-import": "2.29.1", "eslint-plugin-jsx-a11y": "6.7.1", @@ -131,7 +131,7 @@ "stylus": "^0.59.0", "stylus-loader": "^7.1.0", "tailwindcss": "3.3.2", - "ts-node": "10.9.1", + "ts-node": "10.9.2", "typescript": "4.9.5", "url-loader": "^4.1.1", "webpack": "^5.82.0", diff --git a/scripts/load-permissions.sh b/scripts/load-permissions.sh new file mode 100755 index 0000000..d2ddc48 --- /dev/null +++ b/scripts/load-permissions.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +# relative paths to values.yaml and Chart.yaml +values_file="helm/values.yaml" +chart_file="helm/Chart.yaml" + +array=() + +if [ ! -f "$values_file" ]; then + echo "\"$values_file\" cannot be found - execute this script from product root directory" + exit 1 +fi +if [ ! -f "$chart_file" ]; then + echo "\"$chart_file\" cannot be found - execute this script from product root directory" + exit 1 +fi + +extract_app_id_and_product_name() { + app_id=$(sed -n '2 s/^name: \([^ ]*\).*/\1/p' "$chart_file") + app_name=$(sed -n '4 s/description: //p' "$chart_file") + product_name=$(echo "$app_id" | sed 's/-ui$//') + echo "=> app id: $app_id" + echo "=> app name: $app_name" + echo "=> product name: $product_name" +} + +find_permissions() { + while IFS= read -r line; do + if [[ "$line" == *"permissions:"* ]]; then + permissions_spaces=$(echo "$line" | grep -oE '^[[:space:]]*' | wc -c) + + while IFS= read -r next_line; do + next_spaces=$(echo "$next_line" | grep -oE '^[[:space:]]*' | wc -c) + + if (( next_spaces <= permissions_spaces )); then + break + fi + if (( next_spaces == permissions_spaces + 2 )); then + current_key=$(echo "$next_line" | tr -d ':' | tr -d ' ') + elif (( next_spaces == permissions_spaces + 4 )); then + value=$(echo "$next_line" | awk -F ':' '{print $1}' | tr -d ' ') + description=$(echo "$next_line" | awk -F ':' '{$1=""; print $0}' | sed 's/^ *//') + echo -e "Key: $current_key \t Value: $value \t Description: $description" + array+=( "{\"resource\":\"$current_key\",\"action\":\"$value\",\"description\":\"$description\"}" ) + fi + done < <(sed -n "/permissions:/,/^$/p" "$values_file" | tail -n +2) + break + fi + done < "$values_file" +} + +create_json() { + permissions_json="{" + permissions_json+="\"name\": \"$app_name\"," + permissions_json+="\"description\": \"local permission import\"," + permissions_json+="\"permissions\":[" + + for ((i = 0; i < ${#array[@]}; i++)); do + permissions_json+="${array[i]}" + if ((i < ${#array[@]} - 1)); then + permissions_json+="," + fi + done + + permissions_json+="]" + permissions_json+="}" +} + +send_permission_to_svc() { + echo "=> send permissions to service" + curl -v -X PUT -H "Content-Type: application/json" -d "$permissions_json" \ + http://onecx-permission-svc/operator/v1/$product_name/$app_id +} + +extract_app_id_and_product_name +find_permissions +create_json +send_permission_to_svc +exit 0 \ No newline at end of file diff --git a/src/_mixins.scss b/src/_mixins.scss new file mode 100644 index 0000000..30a6383 --- /dev/null +++ b/src/_mixins.scss @@ -0,0 +1,201 @@ +// disable preset of opacity in form: not readable +@mixin make-disabled-form-readable-input { + :host ::ng-deep { + .p-inputtext.p-component:disabled { + opacity: unset; + } + } +} + +@mixin make-disabled-form-readable-dropdown { + :host ::ng-deep { + .p-dropdown.p-component.p-disabled { + opacity: unset; + } + } +} + +@mixin prepare-inputgroup { + :host ::ng-deep { + .inputgroup-dropdown-with-link { + border-right: none; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .input-field-correction .p-inputtext { + padding-top: 1rem !important; + padding-bottom: 0.5rem !important; + } + .pseudo-button:hover { + background: var(--button-hover-bg) !important; + cursor: pointer; + * { + background: var(--button-hover-bg) !important; + } + } + } +} + +@mixin card-badges { + :host ::ng-deep { + .card-badge-right { + display: inline-block; + position: absolute; + right: 3px; + &.badge-1 { + top: 3px; + } + &.badge-2 { + top: 35px; + } + } + .card-badge-left { + display: inline-block; + position: absolute; + left: 3px; + &.badge-1 { + top: 3px; + } + &.badge-2 { + top: 35px; + } + } + .pseudo-button-link { + border-radius: var(--border-radius); + &:hover { + color: var(--primary-color-text); + background: var(--button-hover-bg); + cursor: pointer; + padding: 5px !important; + } + } + } +} + +@mixin correct-data-view-control { + :host ::ng-deep { + .data-view-control, + .data-view-control * { + color: var(--emphasis-medium); + } + // correction for data-view-control component + .data-view-control-border { + border: var(--toggle-button-border); + &.p-dropdown { + .p-inputtext { + color: var(--emphasis-medium); + opacity: 0.9; + } + &:last-of-type { + border-top-left-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius); + } + } + &.p-inputtext:hover, + &.p-dropdown:hover { + border-color: rgb(0 0 0 / 30%) !important; + } + } + } +} + +@mixin correct-search-criteria { + :host ::ng-deep { + .search-criteria-container > div { + display: flex; + flex-wrap: wrap; + align-content: center; + row-gap: 0.5rem; + column-gap: 3rem; + .search-criteria-buttons { + flex-wrap: wrap; + align-content: center; + margin-left: 0.5rem; + margin-top: unset; + } + } + } +} + +@mixin search-criteria-select-button-slim { + :host ::ng-deep { + .slim-selectbutton { + display: flex; + flex-wrap: wrap; + flex-direction: column; + row-gap: 0.1rem; + align-items: center; + + .p-selectbutton .p-button { + text-align: center; + display: inline-block; + color: var(--emphasis-medium); + font-weight: var(--font-weight); + padding: 0.3rem 0.8rem; + border: var(--input-border); + } + .p-selectbutton-subtitle { + color: var(--emphasis-medium); + font-size: 0.8rem; + } + } + } +} +@mixin search-criteria-select-button-filter { + :host ::ng-deep { + .filter-selectbutton { + .p-selectbutton .p-button { + opacity: 0.9 !important; + border: var(--toggle-button-border); + &.p-highlight { + background: var(--toggle-button-active-bg); + border-color: var(--toggle-button-active-border-color); + } + &:not(.p-disabled):not(.p-highlight):hover { + color: var(--text-color); + border-color: var(--toggle-button-hover-border-color); + background-color: var(--toggle-button-hover-bg); + } + } + } + } +} +@mixin search-criteria-select-button { + :host ::ng-deep { + .p-selectbutton-title { + width: 2rem; + text-align: right; + } + .search-criteria-selectbutton { + .p-selectbutton .p-button { + &.p-highlight { + color: var(--primary-text-color); + border-color: var(--toggle-button-hover-border-color); + background-color: var(--primary-color); + } + &:not(.p-disabled):not(.p-highlight):hover { + color: var(--primary-text-color); + border-color: var(--toggle-button-hover-border-color); + background-color: var(--button-hover-bg); + } + } + } + } +} +@mixin table-inline-buttons { + :host ::ng-deep { + // reduce the size of buttons used inside a table row + th button.p-button, + td button.p-button { + &.p-button-icon-only { + width: unset !important; + } + &.p-button-rounded { + height: unset !important; + } + &:disabled { + opacity: 0.38 !important; + } + } + } +} diff --git a/src/app/permission/app-detail/app-detail.component.html b/src/app/permission/app-detail/app-detail.component.html index 8b8e7bd..98f8d96 100644 --- a/src/app/permission/app-detail/app-detail.component.html +++ b/src/app/permission/app-detail/app-detail.component.html @@ -1,13 +1,13 @@ @@ -97,9 +97,9 @@ - +
{{ 'PERMISSION.LABEL' | translate }} -
- {{ 'ROLE.LABEL.' + urlParamAppType | translate }} + {{ 'ROLE.LABEL' | translate }} + +
+ +
- + - {{ 'PERMISSION.ACTIONS' | translate }} + {{ 'PERMISSION.KEY' | translate }} + - {{ 'PERMISSION.PERMISSION' | translate }} - +
{{ 'PERMISSION.SEARCH.FILTER.PRODUCT' | translate }}
+
+ + + + + +
+ {{ 'PERMISSION.SEARCH.FILTER.APPS' | translate }} + +
- + -
- - - -
-
- - - - -
-
{{ role.name }}
-
- -
- -
- - - - - - - - + - {{ rowData.resource }} # - {{ rowData.action }} -
{{ limitText(rowData.description, 60) }}
- - - {{ rowData.appId }} - - - - -
- +
+ +
- -
- + + - -
- - +
+ {{ role.name + (role.isWorkspaceRole ? ' (w)' : '') }} +
+
+
- - - - - -
-
-
- - - + + - -
- -
- - - {{ rowData.resource }} # + {{ rowData.action }} +
{{ limitText(rowData.description, 60) }}
+ + +
{{ rowData.productName }}
+
{{ rowData.productDisplayName }}
+
{{ rowData.productName }}
+ + +
{{ rowData.appDisplayName }}
+
{{ rowData.appId }}
+ + + -
-
-
- - - - -
-
- - - - -
-
-
- -
- - -
-
-
- - - -
-
-
-
{{ ('ACTIONS.DELETE.MESSAGE.TEXT' | translate).replace('{{ITEM}}', permissionRow?.key) }}
-
{{ 'ACTIONS.DELETE.MESSAGE.INFO' | translate }}
-
-
- -
- - -
-
-
- - - -
-
-
- - - - -
-
- - - - -
-
-
- -
- - -
-
-
+ +
+ + + + +
- - -
-
-
-
{{ ('ACTIONS.DELETE.MESSAGE.TEXT' | translate).replace('{{ITEM}}', role?.name) }}
-
{{ 'ACTIONS.DELETE.MESSAGE.INFO' | translate }}
-
-
- -
- - -
-
-
+
+ + - - -
-
-
-
{{ ('ACTIONS.DELETE.MESSAGE.TEXT' | translate).replace('{{ITEM}}', urlParamAppId) }}
-
{{ 'ACTIONS.DELETE.MESSAGE.INFO' | translate }}
-
-
- -
- - -
-
-
+ + +
+ + + + + +
+ + diff --git a/src/app/permission/app-detail/app-detail.component.scss b/src/app/permission/app-detail/app-detail.component.scss index d447257..68785be 100644 --- a/src/app/permission/app-detail/app-detail.component.scss +++ b/src/app/permission/app-detail/app-detail.component.scss @@ -1,60 +1,41 @@ +@import '/src/_mixins.scss'; + +@include correct-data-view-control; +@include table-inline-buttons; + :host ::ng-deep { .p-datatable .p-datatable-header { padding-left: 0; padding-right: 0; border: unset; } - .p-datatable .p-sortable-column:not(.p-highlight):hover .p-sortable-column-icon, - .p-datatable .p-sortable-column .p-sortable-column-icon { - color: unset; + .button-letter-icon { + padding: 1px 4px !important; } .border-right-primary { border-right-color: var(--primary-color) !important; - border-right-width: 2px !important; + border-right-width: 4px !important; + border-right-style: double !important; } .border-bottom-primary { border-bottom-color: var(--primary-color) !important; border-bottom-width: 2px !important; } - // reduce the size of buttons used inside a table row - th button.p-button, - td button.p-button { - &.p-button-icon-only { - width: unset !important; - } - &.p-button-rounded { - height: unset !important; - } - &:disabled { - opacity: 0.38 !important; - } - } - .p-datatable .p-sortable-column .p-sortable-column-icon { - margin-left: unset; - } .p-inputtext.middle-of-inputgroup { border-left: 0; border-right: 0; } - .data-view-control-border { - border: var(--toggle-button-border); - &:last-of-type { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - } - .p-inputtext.data-view-control-border, - .p-dropdown.data-view-control-border { - &:hover { - border-color: rgb(0 0 0 / 30%) !important; - } - } .p-dropdown-panel .p-dropdown-items .p-dropdown-item { padding-top: 0.5rem; padding-bottom: 0.5rem; } - .p-dropdown .p-inputtext { - padding: 0.6rem; + .p-dropdown { + &.clear-icon-used .p-inputtext { + padding-right: 2rem; + } + .p-inputtext { + padding: 0.6rem; + } } .pseudo-button:hover { background: var(--button-hover-bg) !important; @@ -73,17 +54,4 @@ } } } - .p-selectbutton .p-button { - min-width: unset !important; - } - .data-view-control, - .data-view-control * { - color: var(--emphasis-medium); - } - .danger-action-text { - color: var(--danger-button-bg); - } - .invisible { - visibility: hidden; - } } diff --git a/src/app/permission/app-detail/app-detail.component.ts b/src/app/permission/app-detail/app-detail.component.ts index d5cf0af..6688cbb 100644 --- a/src/app/permission/app-detail/app-detail.component.ts +++ b/src/app/permission/app-detail/app-detail.component.ts @@ -1,10 +1,10 @@ import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core' -import { ActivatedRoute, Router } from '@angular/router' +import { ActivatedRoute } from '@angular/router' import { Location } from '@angular/common' import { HttpErrorResponse } from '@angular/common/http' import { FormGroup, FormControl, Validators } from '@angular/forms' -import { Subject, catchError, map, of, Observable } from 'rxjs' import { TranslateService } from '@ngx-translate/core' +import { Subject, catchError, combineLatest, finalize, map, of, Observable } from 'rxjs' import { FilterMatchMode, SelectItem } from 'primeng/api' import { Table } from 'primeng/table' @@ -13,34 +13,42 @@ import { Action, PortalMessageService, UserService } from '@onecx/portal-integra import { Role, CreateRoleRequest, - UpdateRoleRequest, + RolePageResult, + PermissionPageResult, Permission, Assignment, - /* - AssignmentSearchCriteria, - AssignmentPageResult, - CreateAssignmentRequest, */ + RevokeAssignmentRequest, + CreateAssignmentRequestParams, + CreateProductAssignmentsRequest, + DeleteAssignmentRequestParams, Application, - Product, - // ApplicationSearchCriteria, - // ApplicationPageResult, ApplicationAPIService, AssignmentAPIService, PermissionAPIService, RoleAPIService, - WorkspaceAPIService + WorkspaceAPIService, + WorkspaceDetails } from 'src/app/shared/generated' -//import { dropDownSortItemsByLabel, limitText } from 'src/app/shared/utils' -import { limitText } from 'src/app/shared/utils' +import { dropDownSortItemsByLabel, limitText } from 'src/app/shared/utils' -type App = Application & { isApp: boolean; type: AppType } -type AppType = 'WORKSPACE' | 'APP' -type AppRole = Role & { appId: string } -type RoleAssignments = { [key: string]: boolean } -type PermissionViewRow = Permission & { +export type App = Application & { + isApp: boolean + isMfe: boolean + appType: PermissionAppType + workspaceDetails?: WorkspaceDetails +} +export type PermissionAppType = 'WORKSPACE' | 'APP' +export type ServiceAppType = 'MFE' | 'MS' +export type RoleAssignments = { [key: string]: string | undefined } // assignment id or undefined +export type ChangeMode = 'VIEW' | 'CREATE' | 'EDIT' | 'COPY' | 'DELETE' +export type PermissionViewRow = Permission & { key: string // combined resource and action => resource#action roles: RoleAssignments + appType: ServiceAppType + appDisplayName: string + productDisplayName: string } +export type PermissionRole = Role & { isWorkspaceRole: boolean | undefined } @Component({ templateUrl: './app-detail.component.html', @@ -55,6 +63,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { public loadingExceptionKey = '' public loadingServerIssue = false public actions$: Observable | undefined + // filter row public filterBy = ['action', 'resource'] public filterNot = false public filterValue: string | undefined @@ -64,35 +73,40 @@ export class AppDetailComponent implements OnInit, OnDestroy { @ViewChild('permissionTable') permissionTable: Table | undefined @ViewChild('permissionTableFilterInput') permissionTableFilterInput: ElementRef | undefined - @ViewChild('workspaceAppFilter') workspaceAppFilter: ElementRef | undefined - @ViewChild('appSortIcon') appSortIcon: ElementRef | undefined + @ViewChild('filterProduct') filterProduct: ElementRef | undefined + @ViewChild('filterApp') filterApp: ElementRef | undefined + @ViewChild('sortIconAppId') sortIconAppId: ElementRef | undefined + @ViewChild('sortIconProduct') sortIconProduct: ElementRef | undefined // data + private pageSize = 1000 public urlParamAppId = '' public urlParamAppType = '' - public currentApp: App = { appId: 'dummy', type: 'APP' } as App + public currentApp: App = { appId: 'dummy', appType: 'APP', isApp: true } as App public dateFormat = 'medium' - public changeMode = 'CREATE' || 'EDIT' - private workspaceApps: Product[] = [] - public workspaceAppFilterItems: SelectItem[] = new Array() - public workspaceAppFilterValue: string | undefined = undefined - public workspaceAppFilterValueLength = 10 - // app management - public showAppDeleteDialog = false + public changeMode: ChangeMode = 'VIEW' + public myPermissions = new Array() // permissions of the user + // permission filter + public filterProductItems!: SelectItem[] + public filterProductValue: string | undefined = undefined + public filterAppItems: SelectItem[] = new Array() + public filterAppValue: string | undefined = undefined + private workspaceApps: App[] = [] + // permission management - public permissionRows: PermissionViewRow[] = new Array() + private permissions$!: Observable + public permissions!: Permission[] + public permissionRows!: PermissionViewRow[] public permissionRow: PermissionViewRow | undefined // working row public permissionDefaultRoles: RoleAssignments = {} // used initially on row creation - public myPermissions = new Array() // permissions of the user - public showPermissionDetailDialog = false - public showPermissionDeleteDialog = false - public formGroupPermission: FormGroup // role management - public roles: Role[] = new Array() + private roles$!: Observable + public roles!: PermissionRole[] public role: Role | undefined + public missingWorkspaceRoles = false + public formGroupRole: FormGroup public showRoleDetailDialog = false public showRoleDeleteDialog = false - public formGroupRole: FormGroup constructor( private appApi: ApplicationAPIService, @@ -101,27 +115,19 @@ export class AppDetailComponent implements OnInit, OnDestroy { private roleApi: RoleAPIService, private workspaceApi: WorkspaceAPIService, private route: ActivatedRoute, - private router: Router, private location: Location, private translate: TranslateService, private msgService: PortalMessageService, private userService: UserService ) { this.urlParamAppId = this.route.snapshot.paramMap.get('appId') || '' - this.urlParamAppType = this.route.snapshot.paramMap.get('type')?.toUpperCase() || '' + this.urlParamAppType = this.route.snapshot.paramMap.get('appType')?.toUpperCase() || '' this.dateFormat = this.userService.lang$.getValue() === 'de' ? 'dd.MM.yyyy HH:mm' : 'medium' // simplify permission checks if (userService.hasPermission('ROLE#EDIT')) this.myPermissions.push('ROLE#EDIT') if (userService.hasPermission('ROLE#DELETE')) this.myPermissions.push('ROLE#DELETE') - if (userService.hasPermission('PERMISSION#EDIT')) this.myPermissions.push('PERMISSION#EDIT') - if (userService.hasPermission('PERMISSION#DELETE')) this.myPermissions.push('PERMISSION#DELETE') + if (userService.hasPermission('PERMISSION#GRANT')) this.myPermissions.push('PERMISSION#GRANT') - this.formGroupPermission = new FormGroup({ - appId: new FormControl({ value: null, disabled: true }, [Validators.required]), - resource: new FormControl(null, [Validators.required, Validators.minLength(2), Validators.maxLength(50)]), - action: new FormControl(null, [Validators.required, Validators.minLength(2), Validators.maxLength(50)]), - description: new FormControl(null) - }) this.formGroupRole = new FormGroup({ id: new FormControl(null), name: new FormControl(null, [Validators.required, Validators.minLength(2), Validators.maxLength(50)]), @@ -133,7 +139,6 @@ export class AppDetailComponent implements OnInit, OnDestroy { { label: 'PERMISSION.SEARCH.FILTER.DELETE', value: 'DELETE' }, { label: 'PERMISSION.SEARCH.FILTER.EDIT', value: 'EDIT' }, { label: 'PERMISSION.SEARCH.FILTER.VIEW', value: 'VIEW' } - // { label: 'PERMISSION.SEARCH.FILTER.OTHERS', value: 'OTHERS' }, ] } @@ -145,6 +150,12 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.destroy$.next(undefined) this.destroy$.complete() } + private log(text: string, obj?: object): void { + if (this.debug) { + if (obj) console.log('app detail: ' + text, obj) + else console.log('app detail: ' + text) + } + } private prepareActionButtons(): void { this.actions$ = this.translate @@ -169,14 +180,6 @@ export class AppDetailComponent implements OnInit, OnDestroy { icon: 'pi pi-arrow-left', show: 'always' }, - { - label: data['ACTIONS.CREATE.PERMISSION'], - title: data['ACTIONS.CREATE.PERMISSION.TOOLTIP'], - actionCallback: () => this.onCreatePermission(), - icon: 'pi pi-plus', - show: 'asOverflow', - permission: 'PERMISSION#EDIT' - }, { label: data['ACTIONS.CREATE.ROLE'], title: data['ACTIONS.CREATE.ROLE.TOOLTIP'], @@ -185,19 +188,7 @@ export class AppDetailComponent implements OnInit, OnDestroy { show: 'asOverflow', permission: 'ROLE#EDIT', conditional: true, - showCondition: this.currentApp.type === 'WORKSPACE' - }, - { - label: data['ACTIONS.DELETE.LABEL'], - title: data['ACTIONS.DELETE.APP'], - actionCallback: () => { - this.showAppDeleteDialog = true - }, - icon: 'pi pi-trash', - show: 'asOverflow', - permission: 'APPLICATION#DELETE', - conditional: true, - showCondition: this.currentApp.type === 'APP' + showCondition: !this.currentApp.isApp } ] }) @@ -210,39 +201,23 @@ export class AppDetailComponent implements OnInit, OnDestroy { public onReload(): void { this.loadApp() } - private log(text: string, obj?: object): void { - if (this.debug) { - if (obj) console.log('app detail: ' + text, obj) - else console.log('app detail: ' + text) - } - } private loadApp(): void { this.loading = true this.loadingServerIssue = false this.loadingExceptionKey = '' - // check parameter - if (!this.urlParamAppId || this.urlParamAppId === '') { - this.msgService.error({ summaryKey: 'TODO_MISSING_URL_PARAMETER_APP_ID' }) - return - } - if (!this.urlParamAppType || !',APP,WORKSPACE,'.includes(this.urlParamAppType)) { - this.msgService.error({ summaryKey: 'TODO_MISSING_URL_PARAMETER_APP_TYPE' }) - return - } // on workspace: create a dummy app if (this.urlParamAppType === 'WORKSPACE') { this.currentApp = { id: this.urlParamAppId, - appId: this.urlParamAppId, name: this.urlParamAppId, - type: this.urlParamAppType + appId: this.urlParamAppId, + appType: this.urlParamAppType, + isApp: false, + isMfe: false } as App this.log('loadApp => Workspace:', this.currentApp) - this.prepareActionButtons() - this.loadRoles() - this.loadWorkspaceApps() - this.loading = false + this.loadWorkspaceDetails() } else { this.appApi .searchApplications({ applicationSearchCriteria: { appId: this.urlParamAppId } }) @@ -253,150 +228,279 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + result.status + '.APP' console.error('searchApplications() result:', result) } else if (result instanceof Object) { - this.currentApp = { ...result.stream[0], type: 'APP' } as App + this.currentApp = { ...result.stream[0], appType: 'APP', isApp: true } as App this.log('loadApp => App:', this.currentApp) - this.prepareActionButtons() - this.permissionRows = [] - this.preparePermissionTable(this.currentApp) + this.loadAppDetails() } else { this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.APPS' + this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.APP' console.error('getApplicationById() => unknown response:', result) } this.loading = false }) } } - private loadWorkspaceApps() { - this.workspaceApps = [] + private loadWorkspaceDetails() { this.workspaceApi - .getAllProductsByWorkspaceName({ workspaceName: this.currentApp.appId ?? '' }) + .getDetailsByWorkspaceName({ workspaceName: this.currentApp.appId ?? '' }) .pipe(catchError((error) => of(error))) .subscribe((result) => { if (result instanceof HttpErrorResponse) { this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + result.status + '.ROLES' - console.error('loadWorkspaceApps() result:', result) - } else if (result instanceof Array) { - for (const app of result) { - this.workspaceApps.push({ ...app }) - } - //this.workspaceApps.sort(this.sortRoleByName) - this.log('loadWorkspaceApps:', this.workspaceApps) + this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + result.status + '.WORKSPACE' + console.error('getDetailsByWorkspaceName() result:', result) + } else if (result instanceof Object) { + this.currentApp.workspaceDetails = { ...result } + this.log('getDetailsByWorkspaceName => App:', this.currentApp) + this.prepareActionButtons() + this.loadRolesAndPermissions() } else { - this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.ROLES' - console.error('loadWorkspaceApps() => unknown response:', result) + this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.WORKSPACE' + console.error('getDetailsByWorkspaceName() => unknown response:', result) } }) } + /** - * COLUMNS => Roles + * COLUMNS => Roles, ROWS => Permissions */ - // TODO: load workspace roles and/or keycloak roles - private loadRoles(): void { - this.roles = [] - this.permissionDefaultRoles = {} - this.roleApi - .searchRoles({ roleSearchCriteria: {} }) - .pipe(catchError((error) => of(error))) - .subscribe((result) => { - if (result instanceof HttpErrorResponse) { - this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + result.status + '.ROLES' - console.error('searchRoles() result:', result) - } else if (result instanceof Object) { - for (const role of result.stream) { - this.roles.push({ ...role }) - this.permissionDefaultRoles[role.name] = false - } - this.roles.sort(this.sortRoleByName) - this.log('loadRoles:', this.roles) - } else { - this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.ROLES' - console.error('searchRoles() => unknown response:', result) + private declareRoleObservable(): void { + this.roles$ = this.roleApi.searchRoles({ roleSearchCriteria: {} }).pipe( + catchError((err) => { + this.loadingServerIssue = true + this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + err.status + '.ROLES' + console.error('searchRoles():', err) + return of({} as RolePageResult) + }), + finalize(() => (this.loading = false)) + ) + } + private declarePermissionObservable(appIds?: string): void { + const productNames: string[] = [] + if (this.currentApp.isApp) productNames.push(this.currentApp.productName ?? '') + else + this.currentApp.workspaceDetails?.products?.map((p) => { + productNames.push(p.productName ?? '') + }) + this.permissions$ = this.permApi + .searchPermissions({ + permissionSearchCriteria: { + productNames: productNames, + appId: appIds, + pageSize: this.pageSize } }) + .pipe( + catchError((err) => { + this.loadingServerIssue = true + this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + err.status + '.PERMISSIONS' + console.error('searchPermissions():', err) + return of({} as PermissionPageResult) + }) + ) + } + private searchRoles(): Observable { + return this.roles$.pipe( + map((result) => { + return result.stream + ? result.stream?.map((role) => { + this.roles.push(role as PermissionRole) + return role + }) + : [] + }) + ) + } + private searchPermissions(): Observable { + return this.permissions$.pipe( + map((result) => { + return result.stream + ? result.stream?.map((permission) => { + this.permissions.push(permission) + return permission + }) + : [] + }) + ) + } + private loadRolesAndPermissions(): void { + this.declareRoleObservable() + this.declarePermissionObservable() + this.roles = [] + this.permissions = [] + combineLatest([this.searchRoles(), this.searchPermissions()]).subscribe( + () => {}, // next + () => {}, // error + () => { + this.log('loadRolesAndPermissions completed') + this.checkWorkspaceRoles() + this.roles.sort(this.sortRoleByName) + this.log('roles', this.roles) + this.log('permissions', this.permissions) + this.prepareFilterProducts() + this.prepareFilterApps() + this.preparePermissionTable() + } + ) + } + private checkWorkspaceRoles() { + if (this.currentApp.workspaceDetails?.workspaceRoles) { + this.roles.forEach( + (r) => (r.isWorkspaceRole = this.currentApp.workspaceDetails?.workspaceRoles?.includes(r.name ?? '')) + ) + this.missingWorkspaceRoles = + this.roles.filter((r) => r.isWorkspaceRole === true).length != + this.currentApp.workspaceDetails?.workspaceRoles.length + } + } + + public onCreateIDMRoles(ev: MouseEvent) { + console.log('TODO: select IDM roles to take over into permissions') + } + + public onCreateWorkspaceRoles(ev: MouseEvent) { + ev.stopPropagation() + if (!this.missingWorkspaceRoles) return + // get workspace roles which are not exists within permission product + const mwr: CreateRoleRequest[] = [] + this.currentApp.workspaceDetails?.workspaceRoles?.map((r) => { + mwr.push({ name: r } as CreateRoleRequest) + }) + this.roleApi.createRole({ createRolesRequest: { roles: mwr } }).subscribe({ + next: () => { + this.msgService.success({ summaryKey: 'ACTIONS.ROLE.MESSAGE.WORKSPACE_ROLES_OK' }) + this.loadRolesAndPermissions() + }, + error: (err) => { + this.msgService.error({ summaryKey: 'ACTIONS.ROLE.MESSAGE.WORKSPACE_ROLES_NOK' }) + console.error(err) + } + }) } + /** + * FILTER + */ + private prepareFilterProducts() { + if (this.currentApp.isApp) return + this.filterProductItems = [{ label: '', value: null } as SelectItem] + if (this.currentApp.workspaceDetails?.products) { + this.currentApp.workspaceDetails?.products.map((product) => { + this.filterProductItems.push({ label: product.displayName, value: product.productName } as SelectItem) + }) + this.filterProductItems.sort(dropDownSortItemsByLabel) + } + this.log('filterProductItems: ', this.filterProductItems) + } + + private prepareFilterApps() { + if (this.currentApp.isApp) return + // 1. collect apps registered in workspace + this.workspaceApps = [] + if (this.currentApp.workspaceDetails?.products) { + this.currentApp.workspaceDetails?.products.map((product) => { + if (product.mfe) + product.mfe.map((a) => { + this.workspaceApps.push({ appId: a.appId, name: a.appName, productName: product.productName } as App) + }) + if (product.ms) + product.ms.map((a) => { + this.workspaceApps.push({ appId: a.appId, name: a.appName, productName: product.productName } as App) + }) + }) + } + this.log('this.workspaceApps: ', this.workspaceApps) + + // 2. fill app filter with apps which have permissions + this.filterAppItems = [{ label: '', value: null } as SelectItem] + this.permissions.map((p) => { + // get the app name from workspace apps - needed for label + const app = this.workspaceApps.filter((a) => a.productName === p.productName && a.appId === p.appId) + if ( + app.length === 1 && + this.filterAppItems.filter((item) => item.label === app[0].name && item.value === app[0].appId).length === 0 + ) { + this.filterAppItems.push({ label: app[0].name, value: app[0].appId } as SelectItem) + } + }) + this.log('filterAppItems', this.filterAppItems) + } + + private loadAppDetails() { + this.permissions = [] + this.declarePermissionObservable(this.currentApp.appId) + this.searchPermissions().subscribe( + () => {}, // next + () => {}, // error + () => { + this.prepareActionButtons() + this.loadRolesAndPermissions() + } + ) + } /* 1. Prepare rows of the table: permissions of the as Map * key (resource#action): 'PERMISSION#READ' * value: {resource: 'PERMISSION', action: 'READ', key: 'PERMISSION#READ', name: 'View permission matrix' */ - private preparePermissionTable(app: App): void { - const permissionRows: Map = new Map() - // get permissions for the app - this.permApi - .searchPermissions({ permissionSearchCriteria: { appId: this.currentApp.appId } }) - .pipe(catchError((error) => of(error))) - .subscribe((result) => { - if (result instanceof HttpErrorResponse) { - this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + result.status + '.PERMISSIONS' - console.error('searchPermissions() result:', result) - } else if (result instanceof Object) { - for (const permission of result.stream) { - permissionRows.set(permission.resource + '#' + permission.action, { - ...permission, - key: permission.resource + '#' + permission.action, - roles: {} - }) - } - // add permission rows of this app to permission table - this.permissionRows = this.permissionRows.concat( - Array.from(permissionRows.values()).sort(this.sortPermissionRowByKey) - ) - this.log('loadPermissions:', this.permissionRows) - //this.prepareWorkspaceAppFilter() - this.loadAssignments() - this.loading = false // TODO - } else { - this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.ROLES' - console.error('searchPermissions() => unknown response:', result) - } - }) + private preparePermissionTable(): void { + if (this.permissions.length === 0) { + console.warn('No permissions found for the apps - stop processing') + return + } + // go on + this.permissionRows = [] + for (const permission of this.permissions) { + this.permissionRows.push({ + ...permission, + key: permission.resource + '#' + permission.action, + productDisplayName: this.currentApp.isApp + ? permission.productName + : this.filterProductItems.filter((p) => p.value === permission.productName)[0].label, + appDisplayName: this.currentApp.isApp + ? permission.appId + : this.filterAppItems.filter((p) => p.value === permission.appId)[0].label, + roles: {} + } as PermissionViewRow) + } + this.permissionRows.sort(this.currentApp.isApp ? this.sortPermissionRowByKey : this.sortPermissionRowByProductAsc) + this.log('permissionRows:', this.permissionRows) + this.loadRoleAssignments() } - private loadAssignments() { - /* - // Fill permission rows with role assignments of the current application - permissionRows.forEach((row) => { - this.currentApp?.assignments?.forEach((ra) => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - row.roles[ra.role!] = ra.permissionKeys?.includes(row.key) || false + + private loadRoleAssignments() { + const appList: string[] = [] + if (this.currentApp.isApp) appList.push(this.currentApp.appId ?? '') + else if (this.workspaceApps.length === 0) { + console.warn('No workspace apps found - stop processing') + return + } else + this.workspaceApps.map((app) => { + appList.push(app.appId ?? '') }) - }) -*/ + this.assApi - .searchAssignments({ assignmentSearchCriteria: { appIds: [this.currentApp.appId ?? ''] } }) + .searchAssignments({ assignmentSearchCriteria: { appIds: appList, pageSize: this.pageSize } }) .pipe(catchError((error) => of(error))) .subscribe((result) => { if (result instanceof HttpErrorResponse) { this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + result.status + '.PERMISSIONS' + this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + result.status + '.ASSIGNMENTS' console.error('searchAssignments() result:', result) } else if (result instanceof Object) { - this.log('loadAssignments result.stream:', result.stream) // result.stream => assignments => roleId, permissionId, appId // this.permissionRows => Permission + key, roles - // Permission: id, appId, resource, action - // Fill permission rows with role assignments of the current application - // TODO - this.permissionRows - .filter((permission) => permission.appId === this.currentApp.appId) - .forEach((row) => { - result.stream?.forEach((assignment: Assignment) => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - row.roles[assignment.roleId!] = assignment.permissionId === row.id - }) + // Permission (row): id, appId, resource, action + result.stream?.forEach((assignment: Assignment) => { + const permissions = this.permissionRows.filter((p) => p.id === assignment.permissionId) + permissions.map((permission) => { + permission.roles[assignment.roleId!] = assignment.id }) - this.log('loadAssignments permission rows:', this.permissionRows) - //this.prepareWorkspaceAppFilter() + }) + this.log('loadRoleAssignments permission rows:', this.permissionRows) this.loading = false // TODO } else { this.loadingServerIssue = true - this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.ROLES' + this.loadingExceptionKey = 'EXCEPTIONS.HTTP_STATUS_0.ASSIGNMENTS' console.error('searchAssignments() => unknown response:', result) } }) @@ -440,245 +544,189 @@ export class AppDetailComponent implements OnInit, OnDestroy { this.permissionTableFilterInput.nativeElement.value = '' this.quickFilterValue = 'ALL' } - this.workspaceAppFilterValue = undefined + this.filterAppValue = undefined this.onSortPermissionTable() this.permissionTable?.clear() } public onSortPermissionTable() { - if (this.appSortIcon) this.appSortIcon.nativeElement.className = 'pi pi-fw pi-sort-alt' // reset icon - } - public onWorkspaceAppFilterItemSort(ev: any, icon: HTMLSpanElement) { - ev.stopPropagation - icon.className = - 'pi pi-fw ' + - (icon.className.match('pi-sort-alt') - ? 'pi-sort-amount-down' - : icon.className.match('pi-sort-amount-up-alt') - ? 'pi-sort-amount-down' - : 'pi-sort-amount-up-alt') - this.permissionTable?.clear() - // sort table data directly - this.permissionTable?._value.sort( - icon.className.match('pi-sort-amount-up-alt') - ? this.sortPermissionRowByAppIdAsc - : this.sortPermissionRowByAppIdDesc - ) + // reset icons + if (this.sortIconAppId) this.sortIconAppId.nativeElement.className = 'pi pi-fw pi-sort-alt' + if (this.sortIconProduct) this.sortIconProduct.nativeElement.className = 'pi pi-fw pi-sort-alt' } - public onFilterWorkspaceApps() { - this.workspaceAppFilterValue = this.currentApp.appId - if (this.permissionTable) { - this.permissionTable?.filter(this.workspaceAppFilterValue, 'appId', 'notEquals') + /** + * Filter: Product, AppId + */ + public onFilterItemSortIcon(ev: MouseEvent, icon: HTMLSpanElement, field: string) { + ev.stopPropagation() + this.permissionTable?.clear() + switch (icon.className) { + case 'pi pi-fw pi-sort-alt': // init + icon.className = 'pi pi-fw pi-sort-amount-down' + break + case 'pi pi-fw pi-sort-amount-down': + icon.className = 'pi pi-fw pi-sort-amount-up-alt' + this.permissionTable?._value.sort( + field === 'appId' ? this.sortPermissionRowByAppIdAsc : this.sortPermissionRowByProductAsc + ) + break + case 'pi pi-fw pi-sort-amount-up-alt': + icon.className = 'pi pi-fw pi-sort-amount-down' + this.permissionTable?._value.sort( + field === 'appId' ? this.sortPermissionRowByAppIdDesc : this.sortPermissionRowByProductDesc + ) + break } } - // managing the app filter - private prepareWorkspaceAppFilter(): void { - if (this.currentApp.type === 'WORKSPACE') { - this.workspaceAppFilterItems = this.workspaceAppFilterItems.filter((a) => a.value !== this.currentApp.appId) - this.onFilterWorkspaceApps() - } else { - this.workspaceAppFilterValue = undefined - this.workspaceAppFilterValueLength = 10 + public onFilterItemClearAppId() { + this.filterAppValue = this.currentApp.appId + if (this.permissionTable) { + this.permissionTable?.filter(this.filterAppValue, 'appId', 'notEquals') } - if (this.workspaceAppFilter) - this.workspaceAppFilter.nativeElement.className = - 'p-float-label inline-block w-' + - (this.workspaceAppFilterValueLength <= 10 - ? 10 - : this.workspaceAppFilterValueLength <= 20 - ? this.workspaceAppFilterValueLength - : 22) + - 'rem' } /**************************************************************************** - * 1. Load current app - * 2. Identify app type => use default APP - * 3. If WORKSPACE then load apps + * ROLE => if currentApp is workspace + **************************************************************************** */ - - /**************************************************************************** - * Delete an APP - */ - public onDeleteApplication() { - this.log('onDeleteApplication()') - } - - /**************************************************************************** - * Create a new PERMISSION - */ - public onCopyPermission(ev: MouseEvent, permRow: PermissionViewRow): void { - this.onEditPermission(ev, permRow) - this.changeMode = 'CREATE' - } - public onCreatePermission(): void { - this.formGroupPermission.reset() - this.formGroupPermission.controls['appId'].patchValue(this.currentApp.appId) + public onCreateRole(ev?: MouseEvent): void { + ev?.stopPropagation() + this.role = undefined this.changeMode = 'CREATE' - this.permissionRow = { key: '' } as PermissionViewRow - this.showPermissionDetailDialog = true + this.showRoleDetailDialog = true } - /** - * View and Edit a PERMISSION - */ - public onEditPermission(ev: MouseEvent, permRow: PermissionViewRow): void { - this.formGroupPermission.controls['appId'].patchValue(this.currentApp.appId) - this.formGroupPermission.controls['resource'].patchValue(permRow.resource) - this.formGroupPermission.controls['action'].patchValue(permRow.action) - this.formGroupPermission.controls['description'].patchValue(permRow.description) + public onEditRole(ev: MouseEvent, role: Role): void { + ev.stopPropagation() + this.role = role this.changeMode = 'EDIT' - this.permissionRow = permRow - this.showPermissionDetailDialog = true - } - /** - * Save a PERMISSION - * check existence of (new) key value first to be unique - */ - public onSavePermission(): void { - this.log('savePermission ' + this.changeMode + ' valid:' + this.formGroupPermission.valid, this.permissionRow) - } - public onDeletePermission(ev: MouseEvent, permRow: PermissionViewRow): void { - this.permissionRow = permRow - this.showPermissionDeleteDialog = true - } - public onDeletePermissionExecute() { - this.log('onDeletePermissionExecute()') - } - - /**************************************************************************** - * Create a ROLE only if currentApp is portal - */ - public onCreateRole(): void { - this.formGroupRole.reset() - this.changeMode = 'CREATE' - this.role = undefined this.showRoleDetailDialog = true } - /** - * View and Edit a ROLE - */ - public onEditRole(ev: MouseEvent, role: AppRole): void { - this.formGroupRole.controls['name'].patchValue(role.name) - this.formGroupRole.controls['description'].patchValue(role.description) - this.changeMode = 'EDIT' + public onDeleteRole(ev: MouseEvent, role: Role): void { + ev.stopPropagation() this.role = role - this.showRoleDetailDialog = true + this.changeMode = 'DELETE' + this.showRoleDeleteDialog = true } - /** - * Save a ROLE - */ - public onSaveRole(): void { - this.log('onSaveRole()') - if (this.formGroupRole.valid) { - const roleExists = - this.roles.filter( - (r) => - r.name === this.formGroupRole.controls['name'].value && - (this.changeMode === 'CREATE' ? true : r.id ? r.id !== this.role?.id : true) - ).length > 0 - if (roleExists) { - this.msgService.error({ - summaryKey: 'ROLE.' + this.changeMode + '_HEADER', - detailKey: 'VALIDATION.ERRORS.ROLE.' + this.changeMode + '_ALREADY_EXISTS' - }) - return - } - if (this.changeMode === 'CREATE') { - const role = { - name: this.formGroupRole.controls['name'].value, - description: this.formGroupRole.controls['description'].value - } as CreateRoleRequest - this.roleApi - .createRole({ - createRoleRequest: role - }) - .subscribe({ - next: () => { - this.msgService.success({ summaryKey: 'ACTIONS.' + this.changeMode + '.MESSAGE.ROLE_OK' }) - this.loadApp() - }, - error: (err) => { - this.msgService.error({ summaryKey: 'ACTIONS.' + this.changeMode + '.MESSAGE.ROLE_NOK' }) - console.error(err) - } - }) - } else { - const roleNameChanged = this.formGroupRole.controls['name'].value !== this.role?.name - const role = { - modificationCount: this.role?.modificationCount, - name: this.formGroupRole.controls['name'].value, - description: this.formGroupRole.controls['description'].value - } as UpdateRoleRequest - this.roleApi.updateRole({ id: this.role?.id ?? '', updateRoleRequest: role }).subscribe({ - next: () => { - this.msgService.success({ summaryKey: 'ACTIONS.EDIT.MESSAGE.ROLE_OK' }) - if (roleNameChanged) this.loadApp() // reload all to avoid any mistakes - else { - this.roles.forEach((r) => { - if (r.id === this.role?.id) r.description = role.description - }) - } - }, - error: (err) => { - this.msgService.error({ summaryKey: 'ACTIONS.EDIT.MESSAGE.ROLE_NOK' }) - console.error(err) - } - }) - } - this.showRoleDetailDialog = false - } + public onRoleChanged(changed: boolean) { + this.role = undefined + this.changeMode = 'VIEW' + this.showRoleDetailDialog = false + this.showRoleDeleteDialog = false + if (changed) this.loadApp() } - public onDeleteRole(ev: MouseEvent, role: AppRole): void { - this.role = role - this.showRoleDeleteDialog = true + /**************************************************************************** + * ASSIGNMENTS => grant + revoke permissions + **************************************************************************** + */ + public onAssignPermission(ev: MouseEvent, permRow: PermissionViewRow, role: Role): void { + this.log('onAssignPermission()') + this.assApi + .createAssignment({ + createAssignmentRequest: { + roleId: role.id, + permissionId: permRow.id + } + } as CreateAssignmentRequestParams) + .subscribe({ + next: (data) => { + this.msgService.success({ summaryKey: 'PERMISSION.ASSIGNMENTS.GRANT_SUCCESS' }) + permRow.roles[role.id!] = data.id + }, + error: (err) => { + this.msgService.error({ summaryKey: 'PERMISSION.ASSIGNMENTS.GRANT_ERROR' }) + console.error(err) + } + }) } - public onDeleteRoleExecute() { - this.log('onDeleteRoleExecute()') - this.roleApi.deleteRole({ id: this.role?.id ?? '' }).subscribe({ + public onRemovePermission(ev: MouseEvent, permRow: PermissionViewRow, role: Role): void { + this.log('onRemovePermission()') + this.assApi.deleteAssignment({ id: permRow.roles[role.id!] } as DeleteAssignmentRequestParams).subscribe({ next: () => { - this.msgService.success({ summaryKey: 'ACTIONS.DELETE.MESSAGE.ROLE_OK' }) - this.loadApp() + this.msgService.success({ summaryKey: 'PERMISSION.ASSIGNMENTS.REVOKE_SUCCESS' }) + permRow.roles[role.id!] = undefined }, error: (err) => { - this.msgService.error({ summaryKey: 'ACTIONS.DELETE.MESSAGE.ROLE_NOK' }) - console.error(err.error) + this.msgService.error({ summaryKey: 'PERMISSION.ASSIGNMENTS.REVOKE_ERROR' }) + console.error(err) } }) - this.showRoleDeleteDialog = false } - - public onAssignPermission(ev: MouseEvent, permRow: PermissionViewRow, role: AppRole, silent?: boolean): void { - this.log('onAssignPermission()') - } - public onRemovePermission(ev: MouseEvent, permRow: PermissionViewRow, role: AppRole, silent?: boolean): void { - this.log('onRemovePermission()') + private prepareProductList(): string[] { + const pList: string[] = [] + // => case 1 + if (this.currentApp.isApp) pList.push(this.currentApp.productName ?? '') + // => case 2 + else if (this.filterProductValue) pList.push(this.filterProductValue) + else if (this.filterProductItems.length > 1) + this.filterProductItems.map((p) => { + if (p.value) pList.push(p.value ?? '') // ignore empty entry + }) + return pList } - public onGrantAllPermissions(ev: MouseEvent, role: AppRole): void { + // 1. Permission App => the own product + // 2. Workspace App => a) selected product b) all products + public onGrantAllPermissions(ev: MouseEvent, role: Role): void { this.log('onGrantAllPermissions()') + const pList = this.prepareProductList() + if (pList.length === 0) return // products are required + this.assApi + .createProductAssignments({ + createProductAssignmentsRequest: { roleId: role.id, productNames: pList } as CreateProductAssignmentsRequest + }) + .subscribe({ + next: () => { + this.msgService.success({ summaryKey: 'PERMISSION.ASSIGNMENTS.GRANT_SUCCESS' }) + this.loadRolesAndPermissions() + }, + error: (err) => { + this.msgService.error({ summaryKey: 'PERMISSION.ASSIGNMENTS.GRANT_ERROR' }) + console.error(err) + } + }) } - public onRevokeAllPermissions(ev: MouseEvent, role: AppRole): void { + public onRevokeAllPermissions(ev: MouseEvent, role: Role): void { this.log('onRevokeAllPermissions()') + const pList = this.prepareProductList() + if (pList.length === 0) return // products are required + this.assApi + .revokeAssignments({ + revokeAssignmentRequest: { roleId: role.id, productNames: pList } as RevokeAssignmentRequest + }) + .subscribe({ + next: () => { + this.msgService.success({ summaryKey: 'PERMISSION.ASSIGNMENTS.REVOKE_SUCCESS' }) + this.loadRolesAndPermissions() + }, + error: (err) => { + this.msgService.error({ summaryKey: 'PERMISSION.ASSIGNMENTS.REVOKE_ERROR' }) + console.error(err) + } + }) } /**************************************************************************** * SORT */ private sortPermissionRowByKey(a: PermissionViewRow, b: PermissionViewRow): number { - return (a.key ? (a.key as string).toUpperCase() : '').localeCompare(b.key ? (b.key as string).toUpperCase() : '') + return (a.key ? a.key.toUpperCase() : '').localeCompare(b.key ? b.key.toUpperCase() : '') } + private sortPermissionRowByAppIdAsc(a: PermissionViewRow, b: PermissionViewRow): number { - return (a.appId ? (a.appId as string).toUpperCase() : '').localeCompare( - b.appId ? (b.appId as string).toUpperCase() : '' - ) + return (a.appId ? a.appId.toUpperCase() : '').localeCompare(b.appId ? b.appId.toUpperCase() : '') + } + private sortPermissionRowByAppIdDesc(a: PermissionViewRow, b: PermissionViewRow): number { + return (b.appId ? b.appId.toUpperCase() : '').localeCompare(a.appId ? a.appId.toUpperCase() : '') } - private sortPermissionRowByAppIdDesc(b: PermissionViewRow, a: PermissionViewRow): number { - return (a.appId ? (a.appId as string).toUpperCase() : '').localeCompare( - b.appId ? (b.appId as string).toUpperCase() : '' + private sortPermissionRowByProductAsc(a: PermissionViewRow, b: PermissionViewRow): number { + return (a.productName ? a.productName.toUpperCase() : '').localeCompare( + b.productName ? b.productName.toUpperCase() : '' ) } + private sortPermissionRowByProductDesc(b: PermissionViewRow, a: PermissionViewRow): number { + return this.sortPermissionRowByProductAsc(a, b) + } + private sortRoleByName(a: Role, b: Role): number { - return (a.name ? (a.name as string).toUpperCase() : '').localeCompare( - b.name ? (b.name as string).toUpperCase() : '' - ) + return (a.name ? a.name.toUpperCase() : '').localeCompare(b.name ? b.name.toUpperCase() : '') } } diff --git a/src/app/permission/app-search/app-search.component.html b/src/app/permission/app-search/app-search.component.html index 9dae4a5..aad3678 100644 --- a/src/app/permission/app-search/app-search.component.html +++ b/src/app/permission/app-search/app-search.component.html @@ -1,11 +1,29 @@ - - +
+
+
+ {{ 'APP.SEARCH.FILTER.LABEL' | translate }} +
+
+ + {{ item.label | translate }} + +
+
+
+
@@ -13,7 +31,7 @@
@@ -21,13 +39,13 @@ @@ -50,17 +68,16 @@ class="flex-grow-1" [supportedViews]="['grid']" [initialViewMode]="viewMode" - [filterValue]="filterValue" [enableFiltering]="true" (filterChange)="onFilterChange($event)" - [filterColumns]="['APP.NAME' | translate, 'APP.TYPE' | translate]" + [filterColumns]="['APP.ID' | translate, 'APP.TYPE' | translate]" [enableSorting]="true" - [sortingOptions]="[ - { label: 'APP.NAME' | translate, value: 'name' }, - { label: 'APP.TYPE' | translate, value: 'type' } - ]" [defaultSortOption]="sortField" [defaultSortDirection]="sortOrder === 1" + [sortingOptions]="[ + { label: 'APP.ID' | translate, value: 'appId' }, + { label: 'APP.TYPE' | translate, value: 'appType' } + ]" (sortChange)="onSortChange($event)" (sortDirectionChange)="onSortDirChange($event)" [translations]="dataViewControlsTranslations" @@ -73,14 +90,14 @@
-
{{ limitText(app.name ? app.name : app.id, 17) }}
-
{{ 'APP.TYPE_'.concat(app.type) | translate }}
+
{{ limitText(app.appId, 20) }}
+
{{ 'APP.TYPE_'.concat(app.appType) | translate }}
diff --git a/src/app/permission/app-search/app-search.component.scss b/src/app/permission/app-search/app-search.component.scss index 7afe21e..9653f6f 100644 --- a/src/app/permission/app-search/app-search.component.scss +++ b/src/app/permission/app-search/app-search.component.scss @@ -1,27 +1,5 @@ -:host ::ng-deep { - .card-badge-right { - display: inline-block; - position: absolute; - right: 5px; - &.badge-1 { - top: 5px; - } - &.badge-2 { - top: 5px; - } - } - .p-selectbutton .p-button { - min-width: unset !important; - } - .pseudo-button-link { - border-radius: 50%; - &:hover { - background: var(--button-hover-bg) !important; - cursor: pointer; - } - } - .data-view-control, - .data-view-control * { - color: var(--emphasis-medium); - } -} +@import '/src/_mixins.scss'; + +@include correct-data-view-control; +@include correct-search-criteria; +@include search-criteria-select-button; diff --git a/src/app/permission/app-search/app-search.component.ts b/src/app/permission/app-search/app-search.component.ts index 2db9aa7..f8727d3 100644 --- a/src/app/permission/app-search/app-search.component.ts +++ b/src/app/permission/app-search/app-search.component.ts @@ -1,27 +1,29 @@ import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core' -import { HttpErrorResponse } from '@angular/common/http' import { ActivatedRoute, Router } from '@angular/router' -import { Observable, Subject, catchError, forkJoin, map, of, takeUntil } from 'rxjs' +import { FormControl, FormGroup } from '@angular/forms' +import { combineLatest, finalize, map, of, Observable, Subject, catchError } from 'rxjs' import { TranslateService } from '@ngx-translate/core' import { SelectItem } from 'primeng/api' import { DataView } from 'primeng/dataview' -import { DataViewControlTranslations, PortalMessageService } from '@onecx/portal-integration-angular' +import { DataViewControlTranslations } from '@onecx/portal-integration-angular' import { limitText } from 'src/app/shared/utils' import { Application, ApplicationAPIService, - AssignmentAPIService, - PermissionAPIService, - RoleAPIService, WorkspaceAPIService, + WorkspacePageResult, ApplicationPageResult } from 'src/app/shared/generated' -export type App = Application & { isApp: boolean; type: AppType } +export interface AppSearchCriteria { + appId: FormControl + appType: FormControl +} +export type App = Application & { isApp: boolean; appType: AppType } export type AppType = 'WORKSPACE' | 'APP' -export type AppFilterType = 'ALL' | 'WORKSPACE' | 'APP' +export type AppFilterType = 'ALL' | AppType @Component({ templateUrl: './app-search.component.html', @@ -29,111 +31,144 @@ export type AppFilterType = 'ALL' | 'WORKSPACE' | 'APP' }) export class AppSearchComponent implements OnInit, OnDestroy { private readonly destroy$ = new Subject() - private readonly debug = true // to be removed after finalization + // data + public apps$!: Observable + private papps$!: Observable + private workspaces$!: Observable + public appSearchCriteriaGroup!: FormGroup // dialog control - public loading = true - public breadcrumbItems = [{}] - public dataAccessIssue = false public exceptionKey = '' - - // data - public dataViewControlsTranslations: DataViewControlTranslations = {} - @ViewChild(DataView) dv: DataView | undefined - private apps$!: Observable - private papps$!: Observable - private workspaces$!: Observable - public apps: App[] = [] + public dataAccessIssue = false + public loading = true public viewMode = 'grid' + public appTypeItems: SelectItem[] public quickFilterValue: AppFilterType = 'ALL' public quickFilterItems: SelectItem[] public filterValue: string | undefined - public filterBy = 'name,type' || 'type' - public sortField = 'name' || 'type' + public filterValueDefault = 'appId,appType' + public filterBy = this.filterValueDefault || 'appType' + public filter: string | undefined + public sortField = 'appId' || 'appType' public sortOrder = 1 + public searchInProgress = false public limitText = limitText + public dataViewControlsTranslations: DataViewControlTranslations = {} + @ViewChild(DataView) dv: DataView | undefined + constructor( private appApi: ApplicationAPIService, - private assApi: AssignmentAPIService, - private permApi: PermissionAPIService, - private roleApi: RoleAPIService, private workspaceApi: WorkspaceAPIService, private route: ActivatedRoute, private router: Router, - private translate: TranslateService, - private msgService: PortalMessageService + private translate: TranslateService ) { + // search criteria + this.appSearchCriteriaGroup = new FormGroup({ + appId: new FormControl(null), + appType: new FormControl('WORKSPACE') + }) + this.appSearchCriteriaGroup.controls['appType'].setValue('ALL') // default: all app types + this.appTypeItems = [ + { label: 'APP.SEARCH.FILTER.ALL', value: 'ALL' }, + { label: 'APP.SEARCH.FILTER.WORKSPACE', value: 'WORKSPACE' }, + { label: 'APP.SEARCH.FILTER.APP', value: 'APP' } + ] this.quickFilterItems = [ { label: 'APP.SEARCH.QUICK_FILTER.ALL', value: 'ALL' }, - { label: 'APP.SEARCH.QUICK_FILTER.APP', value: 'APP' }, - { label: 'APP.SEARCH.QUICK_FILTER.WORKSPACE', value: 'WORKSPACE' } + { label: 'APP.SEARCH.QUICK_FILTER.WORKSPACE', value: 'WORKSPACE' }, + { label: 'APP.SEARCH.QUICK_FILTER.APP', value: 'APP' } ] } ngOnInit(): void { - this.prepareTranslations() - this.loadData() + this.prepareDialogTranslations() + this.declarePermissionAppObservable() + this.searchApps() } public ngOnDestroy(): void { this.destroy$.next(undefined) this.destroy$.complete() } - private log(text: string, obj?: object): void { - if (this.debug) { - if (obj) console.log('app detail: ' + text, obj) - else console.log('app detail: ' + text) - } - } /** - * Getting all the data at once + * DECLARE Observables */ - public loadData(): void { - this.apps = [] - this.loading = true - this.dataAccessIssue = false - this.exceptionKey = '' - // prepare requests and catching errors - this.workspaces$ = this.workspaceApi.getAllWorkspaceNames().pipe(catchError((error) => of(error))) - this.apps$ = this.appApi + private declareWorkspaceObservable(): void { + this.workspaces$ = this.workspaceApi.searchWorkspaces({ workspaceSearchCriteria: {} }).pipe( + catchError((err) => { + this.dataAccessIssue = true + this.exceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + err.status + '.WORKSPACES' + console.error('getAllWorkspaceNames():', err) + return of({} as WorkspacePageResult) + }), + finalize(() => (this.searchInProgress = false)) + ) + } + private declarePermissionAppObservable(): void { + this.papps$ = this.appApi .searchApplications({ - applicationSearchCriteria: { pageSize: 1000 } + applicationSearchCriteria: { + appId: this.appSearchCriteriaGroup.controls['appId'].value ?? '', + pageSize: 100 + } }) - .pipe(catchError((error) => of(error))) - // get data and combine - forkJoin([this.workspaces$, this.apps$]) - .pipe(takeUntil(this.destroy$)) - .subscribe(([workspaces, apps]) => { - // workspaces - if (workspaces instanceof HttpErrorResponse) { + .pipe( + catchError((err) => { this.dataAccessIssue = true - this.exceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + workspaces.status + '.WORKSPACES' - console.error('getAllWorkspaceNames():', workspaces) - } else if (workspaces instanceof Array) { - for (let w of workspaces) { - this.apps.push({ appId: w, name: w, isApp: false, type: 'WORKSPACE' } as App) - } - this.apps.sort(this.sortAppsByAppId) - this.log('loadData() workspaces:', this.apps) - } else console.error('getAllWorkspaceNames() => unknown response:', workspaces) + this.exceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + err.status + '.APPS' + console.error('searchMicrofrontends():', err) + return of({} as ApplicationPageResult) + }), + finalize(() => (this.searchInProgress = false)) + ) + } - // apps - if (!this.dataAccessIssue) { - if (apps instanceof HttpErrorResponse) { - this.dataAccessIssue = true - this.exceptionKey = 'EXCEPTIONS.HTTP_STATUS_' + apps.status + '.APPS' - console.error('searchApplications():', apps) - } else if (apps.stream instanceof Array) { - for (const app of apps.stream) { - this.apps.push({ ...app, isApp: true, type: 'APP' } as App) - } - this.apps.sort(this.sortAppsByAppId) - this.log('loadData() apps:', this.apps) - //this.prepareTranslations() - } else console.error('searchApplications() => unknown response:', apps) - } - this.loading = false + /** + * SEARCH + */ + private searchWorkspaces(): Observable { + this.declareWorkspaceObservable() + return this.workspaces$.pipe( + map((result) => { + return result.stream + ? result.stream + ?.map((w) => { + return { appId: w.name, appType: 'WORKSPACE', description: w.description } as App + }) + .sort(this.sortAppsByAppId) + : [] + }) + ) + } + private searchPermissionApps(): Observable { + return this.papps$.pipe( + map((result) => { + return result.stream + ? result.stream + ?.map((app) => { + return { ...app, appType: 'APP' } as App + }) + .sort(this.sortAppsByAppId) + : [] }) + ) + } + public searchApps(): void { + this.searchInProgress = true + switch (this.appSearchCriteriaGroup.controls['appType'].value) { + case 'ALL': + this.apps$ = combineLatest([this.searchWorkspaces(), this.searchPermissionApps()]).pipe( + map(([w, a]) => w.concat(a).sort(this.sortAppsByAppId)) + ) + break + case 'WORKSPACE': + this.apps$ = this.searchWorkspaces() + break + case 'APP': + this.apps$ = this.searchPermissionApps() + break + } } private sortAppsByAppId(a: App, b: App): number { return (a.appId ? (a.appId as string).toUpperCase() : '').localeCompare( @@ -144,10 +179,10 @@ export class AppSearchComponent implements OnInit, OnDestroy { /** * Dialog preparation */ - private prepareTranslations(): void { + private prepareDialogTranslations(): void { this.translate .get([ - 'APP.NAME', + 'APP.ID', 'APP.TYPE', 'ACTIONS.SEARCH.SORT_BY', 'ACTIONS.SEARCH.FILTER.LABEL', @@ -160,7 +195,7 @@ export class AppSearchComponent implements OnInit, OnDestroy { this.dataViewControlsTranslations = { sortDropdownPlaceholder: data['ACTIONS.SEARCH.SORT_BY'], filterInputPlaceholder: data['ACTIONS.SEARCH.FILTER.LABEL'], - filterInputTooltip: data['ACTIONS.SEARCH.FILTER.OF'] + data['APP.NAME'] + ', ' + data['APP.TYPE'], + filterInputTooltip: data['ACTIONS.SEARCH.FILTER.OF'] + data['APP.ID'] + ', ' + data['APP.TYPE'], sortOrderTooltips: { ascending: data['ACTIONS.SEARCH.SORT_DIRECTION_ASC'], descending: data['ACTIONS.SEARCH.SORT_DIRECTION_DESC'] @@ -175,16 +210,15 @@ export class AppSearchComponent implements OnInit, OnDestroy { * UI Events */ public onAppClick(ev: any, app: App): void { - this.router.navigate(['./', app.type.toLowerCase(), app.appId], { relativeTo: this.route }) + this.router.navigate(['./', app.appType.toLowerCase(), app.appId], { relativeTo: this.route }) } public onQuickFilterChange(ev: any): void { - this.log('onQuickFilterChange ') if (ev.value === 'ALL') { - this.filterBy = 'id,type' + this.filterBy = this.filterValueDefault this.filterValue = '' this.dv?.filter(this.filterValue, 'contains') } else { - this.filterBy = 'type' + this.filterBy = 'appType' if (ev.value) { this.filterValue = ev.value this.dv?.filter(ev.value, 'equals') @@ -192,18 +226,20 @@ export class AppSearchComponent implements OnInit, OnDestroy { } } public onFilterChange(filter: string): void { - this.log('onFilterChange') - if (filter === '') { - this.filterBy = 'id,type' - this.quickFilterValue = 'ALL' - } + this.filter = filter this.dv?.filter(filter, 'contains') } - public onSortChange(field: string): void { this.sortField = field } public onSortDirChange(asc: boolean): void { this.sortOrder = asc ? -1 : 1 } + public onSearch() { + this.searchApps() + } + public onSearchReset() { + this.appSearchCriteriaGroup.reset({ appType: 'ALL' }) + this.apps$ = of([] as App[]) + } } diff --git a/src/app/permission/permission.module.ts b/src/app/permission/permission.module.ts index 7db5b4a..9a6720e 100644 --- a/src/app/permission/permission.module.ts +++ b/src/app/permission/permission.module.ts @@ -9,6 +9,7 @@ import { LabelResolver } from 'src/app/shared/label.resolver' import { AppSearchComponent } from './app-search/app-search.component' import { AppDetailComponent } from './app-detail/app-detail.component' +import { RoleDetailComponent } from './role-detail/role-detail.component' const routes: Routes = [ { @@ -17,7 +18,7 @@ const routes: Routes = [ pathMatch: 'full' }, { - path: ':type/:appId', + path: ':appType/:appId', component: AppDetailComponent, data: { breadcrumb: 'BREADCRUMBS.DETAIL', @@ -29,7 +30,7 @@ const routes: Routes = [ } ] @NgModule({ - declarations: [AppSearchComponent, AppDetailComponent], + declarations: [AppSearchComponent, AppDetailComponent, RoleDetailComponent], imports: [ CommonModule, FormsModule, diff --git a/src/app/permission/role-detail/role-detail.component.html b/src/app/permission/role-detail/role-detail.component.html new file mode 100644 index 0000000..a8785e4 --- /dev/null +++ b/src/app/permission/role-detail/role-detail.component.html @@ -0,0 +1,102 @@ + +
+
+
+ + + + +
+
+ + + + +
+
+
+ +
+ + +
+
+
+ + + +
+
+
+
{{ ('ACTIONS.DELETE.MESSAGE.TEXT' | translate).replace('{{ITEM}}', role?.name) }}
+
{{ 'ACTIONS.DELETE.MESSAGE.INFO' | translate }}
+
+
+ +
+ + +
+
+
diff --git a/src/app/permission/role-detail/role-detail.component.ts b/src/app/permission/role-detail/role-detail.component.ts new file mode 100644 index 0000000..cabdd75 --- /dev/null +++ b/src/app/permission/role-detail/role-detail.component.ts @@ -0,0 +1,126 @@ +import { Component, EventEmitter, Input, Output, OnChanges } from '@angular/core' +import { FormGroup, FormControl, Validators } from '@angular/forms' +import { TranslateService } from '@ngx-translate/core' + +import { PortalMessageService, UserService } from '@onecx/portal-integration-angular' + +import { Role, CreateRoleRequest, UpdateRoleRequest, RoleAPIService } from 'src/app/shared/generated' +import { App, ChangeMode } from 'src/app/permission/app-detail/app-detail.component' + +@Component({ + selector: 'app-role-detail', + templateUrl: './role-detail.component.html' +}) +export class RoleDetailComponent implements OnChanges { + @Input() currentApp!: App + @Input() role: Role | undefined + @Input() roles: Role[] = [] + @Input() changeMode: ChangeMode = 'VIEW' + @Input() displayDetailDialog = false + @Input() displayDeleteDialog = false + @Output() dataChanged: EventEmitter = new EventEmitter() + + public myPermissions = new Array() // permissions of the user + public formGroupRole: FormGroup + + constructor( + private roleApi: RoleAPIService, + private translate: TranslateService, + private msgService: PortalMessageService, + private userService: UserService + ) { + if (userService.hasPermission('ROLE#EDIT')) this.myPermissions.push('ROLE#EDIT') + if (userService.hasPermission('ROLE#DELETE')) this.myPermissions.push('ROLE#DELETE') + this.formGroupRole = new FormGroup({ + id: new FormControl(null), + name: new FormControl(null, [Validators.required, Validators.minLength(2), Validators.maxLength(50)]), + description: new FormControl(null) + }) + } + + public ngOnChanges(): void { + this.formGroupRole.reset() + if (this.changeMode === 'EDIT' && this.role) { + this.formGroupRole.controls['name'].patchValue(this.role.name) + this.formGroupRole.controls['description'].patchValue(this.role.description) + } + } + + public onClose(): void { + this.dataChanged.emit(false) + } + + /** + * Save a ROLE + */ + public onSaveRole(): void { + if (!this.formGroupRole.valid) { + console.info('form not valid') + return + } + let roleExists = false + if (this.roles.length > 0) { + let roles = this.roles.filter((r) => r.name === this.formGroupRole.controls['name'].value) + if (this.changeMode !== 'CREATE') roles = roles.filter((r) => r.id !== this.role?.id) + roleExists = roles.length > 0 + } + if (roleExists) { + this.msgService.error({ + summaryKey: 'ACTIONS.' + this.changeMode + '.ROLE', + detailKey: 'VALIDATION.ERRORS.ROLE.' + this.changeMode + '_ALREADY_EXISTS' + }) + return + } + if (this.changeMode === 'CREATE') { + console.info('form valid ' + this.changeMode) + const role = { + name: this.formGroupRole.controls['name'].value, + description: this.formGroupRole.controls['description'].value + } as CreateRoleRequest + this.roleApi + .createRole({ + createRolesRequest: { roles: [role] } + }) + .subscribe({ + next: () => { + this.msgService.success({ summaryKey: 'ACTIONS.' + this.changeMode + '.MESSAGE.ROLE_OK' }) + this.dataChanged.emit(true) + }, + error: (err) => { + this.msgService.error({ summaryKey: 'ACTIONS.' + this.changeMode + '.MESSAGE.ROLE_NOK' }) + console.error(err) + } + }) + } else { + const roleNameChanged = this.formGroupRole.controls['name'].value !== this.role?.name + const role = { + modificationCount: this.role?.modificationCount, + name: this.formGroupRole.controls['name'].value, + description: this.formGroupRole.controls['description'].value + } as UpdateRoleRequest + this.roleApi.updateRole({ id: this.role?.id ?? '', updateRoleRequest: role }).subscribe({ + next: () => { + this.msgService.success({ summaryKey: 'ACTIONS.EDIT.MESSAGE.ROLE_OK' }) + this.dataChanged.emit(roleNameChanged) + }, + error: (err) => { + this.msgService.error({ summaryKey: 'ACTIONS.EDIT.MESSAGE.ROLE_NOK' }) + console.error(err) + } + }) + } + } + + public onDeleteRoleConfirmation() { + this.roleApi.deleteRole({ id: this.role?.id ?? '' }).subscribe({ + next: () => { + this.msgService.success({ summaryKey: 'ACTIONS.DELETE.MESSAGE.ROLE_OK' }) + this.dataChanged.emit(true) + }, + error: (err) => { + this.msgService.error({ summaryKey: 'ACTIONS.DELETE.MESSAGE.ROLE_NOK' }) + console.error(err.error) + } + }) + } +} diff --git a/src/app/shared/generated/.openapi-generator/FILES b/src/app/shared/generated/.openapi-generator/FILES index 00450eb..5b68228 100644 --- a/src/app/shared/generated/.openapi-generator/FILES +++ b/src/app/shared/generated/.openapi-generator/FILES @@ -19,7 +19,11 @@ model/assignment.ts model/assignmentPageResult.ts model/assignmentSearchCriteria.ts model/createAssignmentRequest.ts +model/createProductAssignmentsRequest.ts model/createRoleRequest.ts +model/createRolesRequest.ts +model/mfeMsAbstract.ts +model/microfrontend.ts model/models.ts model/permission.ts model/permissionPageResult.ts @@ -28,9 +32,15 @@ model/problemDetailInvalidParam.ts model/problemDetailParam.ts model/problemDetailResponse.ts model/product.ts +model/productDetails.ts +model/revokeAssignmentRequest.ts model/role.ts model/rolePageResult.ts model/roleSearchCriteria.ts model/updateRoleRequest.ts +model/workspaceAbstract.ts +model/workspaceDetails.ts +model/workspacePageResult.ts +model/workspaceSearchCriteria.ts param.ts variables.ts diff --git a/src/app/shared/generated/api/application.service.ts b/src/app/shared/generated/api/application.service.ts index 1514fa0..923dff3 100644 --- a/src/app/shared/generated/api/application.service.ts +++ b/src/app/shared/generated/api/application.service.ts @@ -105,9 +105,9 @@ export class ApplicationAPIService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public searchApplications(requestParameters: SearchApplicationsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; - public searchApplications(requestParameters: SearchApplicationsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; - public searchApplications(requestParameters: SearchApplicationsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; + public searchApplications(requestParameters: SearchApplicationsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public searchApplications(requestParameters: SearchApplicationsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchApplications(requestParameters: SearchApplicationsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; public searchApplications(requestParameters: SearchApplicationsRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { const applicationSearchCriteria = requestParameters.applicationSearchCriteria; if (applicationSearchCriteria === null || applicationSearchCriteria === undefined) { @@ -155,7 +155,7 @@ export class ApplicationAPIService { } let localVarPath = `/applications/search`; - return this.httpClient.request>('post', `${this.configuration.basePath}${localVarPath}`, + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, { context: localVarHttpContext, body: applicationSearchCriteria, diff --git a/src/app/shared/generated/api/assignment.service.ts b/src/app/shared/generated/api/assignment.service.ts index c3de03a..22a7cc3 100644 --- a/src/app/shared/generated/api/assignment.service.ts +++ b/src/app/shared/generated/api/assignment.service.ts @@ -27,7 +27,11 @@ import { AssignmentSearchCriteria } from '../model/assignmentSearchCriteria'; // @ts-ignore import { CreateAssignmentRequest } from '../model/createAssignmentRequest'; // @ts-ignore +import { CreateProductAssignmentsRequest } from '../model/createProductAssignmentsRequest'; +// @ts-ignore import { ProblemDetailResponse } from '../model/problemDetailResponse'; +// @ts-ignore +import { RevokeAssignmentRequest } from '../model/revokeAssignmentRequest'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; @@ -38,6 +42,10 @@ export interface CreateAssignmentRequestParams { createAssignmentRequest: CreateAssignmentRequest; } +export interface CreateProductAssignmentsRequestParams { + createProductAssignmentsRequest: CreateProductAssignmentsRequest; +} + export interface DeleteAssignmentRequestParams { id: string; } @@ -46,6 +54,10 @@ export interface GetAssignmentRequestParams { id: string; } +export interface RevokeAssignmentsRequestParams { + revokeAssignmentRequest: RevokeAssignmentRequest; +} + export interface SearchAssignmentsRequestParams { assignmentSearchCriteria: AssignmentSearchCriteria; } @@ -184,6 +196,75 @@ export class AssignmentAPIService { ); } + /** + * Create new assignments for products + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public createProductAssignments(requestParameters: CreateProductAssignmentsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public createProductAssignments(requestParameters: CreateProductAssignmentsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public createProductAssignments(requestParameters: CreateProductAssignmentsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public createProductAssignments(requestParameters: CreateProductAssignmentsRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const createProductAssignmentsRequest = requestParameters.createProductAssignmentsRequest; + if (createProductAssignmentsRequest === null || createProductAssignmentsRequest === undefined) { + throw new Error('Required parameter createProductAssignmentsRequest was null or undefined when calling createProductAssignments.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/assignments/product`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: createProductAssignmentsRequest, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + /** * Delete assignment * @param requestParameters @@ -301,15 +382,84 @@ export class AssignmentAPIService { ); } + /** + * delete assignments by criteria + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public revokeAssignments(requestParameters: RevokeAssignmentsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public revokeAssignments(requestParameters: RevokeAssignmentsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public revokeAssignments(requestParameters: RevokeAssignmentsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public revokeAssignments(requestParameters: RevokeAssignmentsRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const revokeAssignmentRequest = requestParameters.revokeAssignmentRequest; + if (revokeAssignmentRequest === null || revokeAssignmentRequest === undefined) { + throw new Error('Required parameter revokeAssignmentRequest was null or undefined when calling revokeAssignments.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/assignments/revoke`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: revokeAssignmentRequest, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + /** * Search for assignments * @param requestParameters * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public searchAssignments(requestParameters: SearchAssignmentsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; - public searchAssignments(requestParameters: SearchAssignmentsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; - public searchAssignments(requestParameters: SearchAssignmentsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; + public searchAssignments(requestParameters: SearchAssignmentsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public searchAssignments(requestParameters: SearchAssignmentsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchAssignments(requestParameters: SearchAssignmentsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; public searchAssignments(requestParameters: SearchAssignmentsRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { const assignmentSearchCriteria = requestParameters.assignmentSearchCriteria; if (assignmentSearchCriteria === null || assignmentSearchCriteria === undefined) { @@ -357,7 +507,7 @@ export class AssignmentAPIService { } let localVarPath = `/assignments/search`; - return this.httpClient.request>('post', `${this.configuration.basePath}${localVarPath}`, + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, { context: localVarHttpContext, body: assignmentSearchCriteria, diff --git a/src/app/shared/generated/api/permission.service.ts b/src/app/shared/generated/api/permission.service.ts index 746ffd3..a783106 100644 --- a/src/app/shared/generated/api/permission.service.ts +++ b/src/app/shared/generated/api/permission.service.ts @@ -105,9 +105,9 @@ export class PermissionAPIService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public searchPermissions(requestParameters: SearchPermissionsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; - public searchPermissions(requestParameters: SearchPermissionsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; - public searchPermissions(requestParameters: SearchPermissionsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; + public searchPermissions(requestParameters: SearchPermissionsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public searchPermissions(requestParameters: SearchPermissionsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchPermissions(requestParameters: SearchPermissionsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; public searchPermissions(requestParameters: SearchPermissionsRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { const permissionSearchCriteria = requestParameters.permissionSearchCriteria; if (permissionSearchCriteria === null || permissionSearchCriteria === undefined) { @@ -155,7 +155,7 @@ export class PermissionAPIService { } let localVarPath = `/permissions/search`; - return this.httpClient.request>('post', `${this.configuration.basePath}${localVarPath}`, + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, { context: localVarHttpContext, body: permissionSearchCriteria, diff --git a/src/app/shared/generated/api/role.service.ts b/src/app/shared/generated/api/role.service.ts index 48a83ff..8815114 100644 --- a/src/app/shared/generated/api/role.service.ts +++ b/src/app/shared/generated/api/role.service.ts @@ -19,7 +19,7 @@ import { CustomHttpParameterCodec } from '../encoder'; import { Observable } from 'rxjs'; // @ts-ignore -import { CreateRoleRequest } from '../model/createRoleRequest'; +import { CreateRolesRequest } from '../model/createRolesRequest'; // @ts-ignore import { ProblemDetailResponse } from '../model/problemDetailResponse'; // @ts-ignore @@ -37,7 +37,7 @@ import { Configuration } from '../configurat export interface CreateRoleRequestParams { - createRoleRequest: CreateRoleRequest; + createRolesRequest: CreateRolesRequest; } export interface DeleteRoleRequestParams { @@ -132,9 +132,9 @@ export class RoleAPIService { public createRole(requestParameters: CreateRoleRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; public createRole(requestParameters: CreateRoleRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; public createRole(requestParameters: CreateRoleRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { - const createRoleRequest = requestParameters.createRoleRequest; - if (createRoleRequest === null || createRoleRequest === undefined) { - throw new Error('Required parameter createRoleRequest was null or undefined when calling createRole.'); + const createRolesRequest = requestParameters.createRolesRequest; + if (createRolesRequest === null || createRolesRequest === undefined) { + throw new Error('Required parameter createRolesRequest was null or undefined when calling createRole.'); } let localVarHeaders = this.defaultHeaders; @@ -181,7 +181,7 @@ export class RoleAPIService { return this.httpClient.request>('post', `${this.configuration.basePath}${localVarPath}`, { context: localVarHttpContext, - body: createRoleRequest, + body: createRolesRequest, responseType: responseType_, withCredentials: this.configuration.withCredentials, headers: localVarHeaders, @@ -314,9 +314,9 @@ export class RoleAPIService { * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public searchRoles(requestParameters: SearchRolesRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; - public searchRoles(requestParameters: SearchRolesRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; - public searchRoles(requestParameters: SearchRolesRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; + public searchRoles(requestParameters: SearchRolesRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public searchRoles(requestParameters: SearchRolesRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchRoles(requestParameters: SearchRolesRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; public searchRoles(requestParameters: SearchRolesRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { const roleSearchCriteria = requestParameters.roleSearchCriteria; if (roleSearchCriteria === null || roleSearchCriteria === undefined) { @@ -364,7 +364,7 @@ export class RoleAPIService { } let localVarPath = `/roles/search`; - return this.httpClient.request>('post', `${this.configuration.basePath}${localVarPath}`, + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, { context: localVarHttpContext, body: roleSearchCriteria, diff --git a/src/app/shared/generated/api/workspace.service.ts b/src/app/shared/generated/api/workspace.service.ts index 4835c27..9295aed 100644 --- a/src/app/shared/generated/api/workspace.service.ts +++ b/src/app/shared/generated/api/workspace.service.ts @@ -20,6 +20,12 @@ import { Observable } from 'rxjs'; // @ts-ignore import { Product } from '../model/product'; +// @ts-ignore +import { WorkspaceDetails } from '../model/workspaceDetails'; +// @ts-ignore +import { WorkspacePageResult } from '../model/workspacePageResult'; +// @ts-ignore +import { WorkspaceSearchCriteria } from '../model/workspaceSearchCriteria'; // @ts-ignore import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; @@ -30,6 +36,14 @@ export interface GetAllProductsByWorkspaceNameRequestParams { workspaceName: string; } +export interface GetDetailsByWorkspaceNameRequestParams { + workspaceName: string; +} + +export interface SearchWorkspacesRequestParams { + workspaceSearchCriteria: WorkspaceSearchCriteria; +} + @Injectable({ providedIn: 'any' @@ -155,14 +169,19 @@ export class WorkspaceAPIService { } /** - * get all workspace names + * get detailed information to all workspace related products and roles + * @param requestParameters * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. * @param reportProgress flag to report request and response progress. */ - public getAllWorkspaceNames(observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; - public getAllWorkspaceNames(observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; - public getAllWorkspaceNames(observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>>; - public getAllWorkspaceNames(observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + public getDetailsByWorkspaceName(requestParameters: GetDetailsByWorkspaceNameRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public getDetailsByWorkspaceName(requestParameters: GetDetailsByWorkspaceNameRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public getDetailsByWorkspaceName(requestParameters: GetDetailsByWorkspaceNameRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public getDetailsByWorkspaceName(requestParameters: GetDetailsByWorkspaceNameRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const workspaceName = requestParameters.workspaceName; + if (workspaceName === null || workspaceName === undefined) { + throw new Error('Required parameter workspaceName was null or undefined when calling getDetailsByWorkspaceName.'); + } let localVarHeaders = this.defaultHeaders; @@ -195,10 +214,79 @@ export class WorkspaceAPIService { } } - let localVarPath = `/workspaces`; - return this.httpClient.request>('get', `${this.configuration.basePath}${localVarPath}`, + let localVarPath = `/workspaces/${this.configuration.encodeParam({name: "workspaceName", value: workspaceName, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}/details`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + reportProgress: reportProgress + } + ); + } + + /** + * search workspaces by criteria + * @param requestParameters + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public searchWorkspaces(requestParameters: SearchWorkspacesRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public searchWorkspaces(requestParameters: SearchWorkspacesRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchWorkspaces(requestParameters: SearchWorkspacesRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public searchWorkspaces(requestParameters: SearchWorkspacesRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { + const workspaceSearchCriteria = requestParameters.workspaceSearchCriteria; + if (workspaceSearchCriteria === null || workspaceSearchCriteria === undefined) { + throw new Error('Required parameter workspaceSearchCriteria was null or undefined when calling searchWorkspaces.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/workspaces/search`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, { context: localVarHttpContext, + body: workspaceSearchCriteria, responseType: responseType_, withCredentials: this.configuration.withCredentials, headers: localVarHeaders, diff --git a/src/app/shared/generated/model/application.ts b/src/app/shared/generated/model/application.ts index 1cda200..d30e89e 100644 --- a/src/app/shared/generated/model/application.ts +++ b/src/app/shared/generated/model/application.ts @@ -19,6 +19,7 @@ export interface Application { modificationUser?: string; id?: string; appId?: string; + productName?: string; name?: string; description?: string; } diff --git a/src/app/shared/generated/model/applicationSearchCriteria.ts b/src/app/shared/generated/model/applicationSearchCriteria.ts index 391c865..fd3ab17 100644 --- a/src/app/shared/generated/model/applicationSearchCriteria.ts +++ b/src/app/shared/generated/model/applicationSearchCriteria.ts @@ -13,6 +13,7 @@ export interface ApplicationSearchCriteria { appId?: string; + productName?: string; name?: string; /** * The number of page. diff --git a/src/app/shared/generated/model/assignment.ts b/src/app/shared/generated/model/assignment.ts index 5eb7fda..622b861 100644 --- a/src/app/shared/generated/model/assignment.ts +++ b/src/app/shared/generated/model/assignment.ts @@ -20,5 +20,6 @@ export interface Assignment { roleId?: string; permissionId?: string; appId?: string; + id?: string; } diff --git a/src/app/shared/generated/model/createProductAssignmentsRequest.ts b/src/app/shared/generated/model/createProductAssignmentsRequest.ts new file mode 100644 index 0000000..ff3cb1f --- /dev/null +++ b/src/app/shared/generated/model/createProductAssignmentsRequest.ts @@ -0,0 +1,18 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface CreateProductAssignmentsRequest { + roleId: string; + productNames: Array; +} + diff --git a/src/app/shared/generated/model/createRoleRequest.ts b/src/app/shared/generated/model/createRoleRequest.ts index 5692c49..892dcce 100644 --- a/src/app/shared/generated/model/createRoleRequest.ts +++ b/src/app/shared/generated/model/createRoleRequest.ts @@ -13,7 +13,6 @@ export interface CreateRoleRequest { name?: string; - shortDescription?: string; description?: string; } diff --git a/src/app/shared/generated/model/createRolesRequest.ts b/src/app/shared/generated/model/createRolesRequest.ts new file mode 100644 index 0000000..c3da76b --- /dev/null +++ b/src/app/shared/generated/model/createRolesRequest.ts @@ -0,0 +1,18 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { CreateRoleRequest } from './createRoleRequest'; + + +export interface CreateRolesRequest { + roles?: Array; +} + diff --git a/src/app/shared/generated/model/mfeMsAbstract.ts b/src/app/shared/generated/model/mfeMsAbstract.ts new file mode 100644 index 0000000..5d81700 --- /dev/null +++ b/src/app/shared/generated/model/mfeMsAbstract.ts @@ -0,0 +1,18 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface MfeMsAbstract { + appName?: string; + appId?: string; +} + diff --git a/src/app/shared/generated/model/microfrontend.ts b/src/app/shared/generated/model/microfrontend.ts new file mode 100644 index 0000000..5dd8391 --- /dev/null +++ b/src/app/shared/generated/model/microfrontend.ts @@ -0,0 +1,18 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface Microfrontend { + mfeId?: string; + basePath?: string; +} + diff --git a/src/app/shared/generated/model/models.ts b/src/app/shared/generated/model/models.ts index 5cad954..bb362ab 100644 --- a/src/app/shared/generated/model/models.ts +++ b/src/app/shared/generated/model/models.ts @@ -5,7 +5,11 @@ export * from './assignment'; export * from './assignmentPageResult'; export * from './assignmentSearchCriteria'; export * from './createAssignmentRequest'; +export * from './createProductAssignmentsRequest'; export * from './createRoleRequest'; +export * from './createRolesRequest'; +export * from './mfeMsAbstract'; +export * from './microfrontend'; export * from './permission'; export * from './permissionPageResult'; export * from './permissionSearchCriteria'; @@ -13,7 +17,13 @@ export * from './problemDetailInvalidParam'; export * from './problemDetailParam'; export * from './problemDetailResponse'; export * from './product'; +export * from './productDetails'; +export * from './revokeAssignmentRequest'; export * from './role'; export * from './rolePageResult'; export * from './roleSearchCriteria'; export * from './updateRoleRequest'; +export * from './workspaceAbstract'; +export * from './workspaceDetails'; +export * from './workspacePageResult'; +export * from './workspaceSearchCriteria'; diff --git a/src/app/shared/generated/model/permission.ts b/src/app/shared/generated/model/permission.ts index 85ad563..eda3954 100644 --- a/src/app/shared/generated/model/permission.ts +++ b/src/app/shared/generated/model/permission.ts @@ -19,6 +19,7 @@ export interface Permission { modificationUser?: string; id?: string; appId?: string; + productName?: string; resource?: string; action?: string; description?: string; diff --git a/src/app/shared/generated/model/permissionSearchCriteria.ts b/src/app/shared/generated/model/permissionSearchCriteria.ts index db16c32..1811f4d 100644 --- a/src/app/shared/generated/model/permissionSearchCriteria.ts +++ b/src/app/shared/generated/model/permissionSearchCriteria.ts @@ -13,6 +13,7 @@ export interface PermissionSearchCriteria { appId?: string; + productNames?: Array; /** * The number of page. */ diff --git a/src/app/shared/generated/model/product.ts b/src/app/shared/generated/model/product.ts index 0ee0aec..f3a8a2e 100644 --- a/src/app/shared/generated/model/product.ts +++ b/src/app/shared/generated/model/product.ts @@ -9,10 +9,11 @@ * https://openapi-generator.tech * Do not edit the class manually. */ +import { Microfrontend } from './microfrontend'; export interface Product { - id?: string; + microfrontends?: Array; productName?: string; baseUrl?: string; } diff --git a/src/app/shared/generated/model/productDetails.ts b/src/app/shared/generated/model/productDetails.ts new file mode 100644 index 0000000..f71ce54 --- /dev/null +++ b/src/app/shared/generated/model/productDetails.ts @@ -0,0 +1,21 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { MfeMsAbstract } from './mfeMsAbstract'; + + +export interface ProductDetails { + productName?: string; + displayName?: string; + mfe?: Array; + ms?: Array; +} + diff --git a/src/app/shared/generated/model/revokeAssignmentRequest.ts b/src/app/shared/generated/model/revokeAssignmentRequest.ts new file mode 100644 index 0000000..2d4b189 --- /dev/null +++ b/src/app/shared/generated/model/revokeAssignmentRequest.ts @@ -0,0 +1,19 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface RevokeAssignmentRequest { + roleId: string; + permissionId?: string; + productNames?: Array; +} + diff --git a/src/app/shared/generated/model/workspaceAbstract.ts b/src/app/shared/generated/model/workspaceAbstract.ts new file mode 100644 index 0000000..bb702c4 --- /dev/null +++ b/src/app/shared/generated/model/workspaceAbstract.ts @@ -0,0 +1,18 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface WorkspaceAbstract { + name?: string; + description?: string; +} + diff --git a/src/app/shared/generated/model/workspaceDetails.ts b/src/app/shared/generated/model/workspaceDetails.ts new file mode 100644 index 0000000..36d93e3 --- /dev/null +++ b/src/app/shared/generated/model/workspaceDetails.ts @@ -0,0 +1,19 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ProductDetails } from './productDetails'; + + +export interface WorkspaceDetails { + workspaceRoles?: Array; + products?: Array; +} + diff --git a/src/app/shared/generated/model/workspacePageResult.ts b/src/app/shared/generated/model/workspacePageResult.ts new file mode 100644 index 0000000..2dbbba0 --- /dev/null +++ b/src/app/shared/generated/model/workspacePageResult.ts @@ -0,0 +1,25 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { WorkspaceAbstract } from './workspaceAbstract'; + + +export interface WorkspacePageResult { + /** + * The total elements in the resource. + */ + totalElements?: number; + number?: number; + size?: number; + totalPages?: number; + stream?: Array; +} + diff --git a/src/app/shared/generated/model/workspaceSearchCriteria.ts b/src/app/shared/generated/model/workspaceSearchCriteria.ts new file mode 100644 index 0000000..2b45829 --- /dev/null +++ b/src/app/shared/generated/model/workspaceSearchCriteria.ts @@ -0,0 +1,26 @@ +/** + * onecx-permission-bff + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface WorkspaceSearchCriteria { + themeName?: string; + productName?: string; + /** + * The number of page. + */ + pageNumber?: number; + /** + * The size of page + */ + pageSize?: number; +} + diff --git a/src/assets/api/openapi-bff.yaml b/src/assets/api/openapi-bff.yaml index fac73ed..f6c07f4 100644 --- a/src/assets/api/openapi-bff.yaml +++ b/src/assets/api/openapi-bff.yaml @@ -15,7 +15,7 @@ paths: post: x-onecx: permissions: - permission: + role: - write tags: - role @@ -26,9 +26,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/CreateRoleRequest' + $ref: '#/components/schemas/CreateRolesRequest' responses: - 200: + 201: description: OK content: application/json: @@ -46,7 +46,7 @@ paths: get: x-onecx: permissions: - permission: + role: - read tags: - role @@ -70,7 +70,7 @@ paths: put: x-onecx: permissions: - permission: + role: - write tags: - role @@ -106,7 +106,7 @@ paths: delete: x-onecx: permissions: - permission: + role: - delete tags: - role @@ -125,7 +125,7 @@ paths: post: x-onecx: permissions: - permission: + role: - read tags: - role @@ -143,9 +143,7 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/RolePageResult' + $ref: '#/components/schemas/RolePageResult' 400: description: Bad request content: @@ -174,9 +172,7 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/PermissionPageResult' + $ref: '#/components/schemas/PermissionPageResult' 400: description: Bad request content: @@ -187,7 +183,7 @@ paths: post: x-onecx: permissions: - permission: + assignment: - read tags: - assignment @@ -205,9 +201,7 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/AssignmentPageResult' + $ref: '#/components/schemas/AssignmentPageResult' 400: description: Bad request content: @@ -218,7 +212,7 @@ paths: post: x-onecx: permissions: - permission: + assignment: - write tags: - assignment @@ -251,11 +245,61 @@ paths: application/json: schema: $ref: '#/components/schemas/ProblemDetailResponse' + /assignments/product: + post: + x-onecx: + permissions: + assignment: + - write + tags: + - assignment + description: Create new assignments for products + operationId: createProductAssignments + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CreateProductAssignmentsRequest' + responses: + 201: + description: New assignment created + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' + /assignments/revoke: + post: + x-onecx: + permissions: + assignment: + - delete + tags: + - assignment + description: delete assignments by criteria + operationId: revokeAssignments + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RevokeAssignmentRequest' + responses: + 204: + description: revoked assignments + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetailResponse' /assignments/{id}: get: x-onecx: permissions: - permission: + assignment: - read tags: - assignment @@ -279,7 +323,7 @@ paths: delete: x-onecx: permissions: - permission: + assignment: - delete tags: - assignment @@ -298,7 +342,7 @@ paths: post: x-onecx: permissions: - permission: + application: - read tags: - application @@ -316,37 +360,41 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/ApplicationPageResult' + $ref: '#/components/schemas/ApplicationPageResult' 400: description: Bad request content: application/json: schema: $ref: '#/components/schemas/ProblemDetailResponse' - /workspaces: - get: + /workspaces/search: + post: x-onecx: permissions: - permission: + workspace: - read tags: - workspace - description: get all workspace names - operationId: getAllWorkspaceNames + description: search workspaces by criteria + operationId: searchWorkspaces + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/WorkspaceSearchCriteria' responses: '200': description: OK content: application/json: schema: - $ref: '#/components/schemas/WorkspaceNameList' + $ref: '#/components/schemas/WorkspacePageResult' /workspaces/{workspaceName}/products: get: x-onecx: permissions: - permission: + workspace: - read tags: - workspace @@ -367,15 +415,43 @@ paths: type: array items: $ref: '#/components/schemas/Product' + /workspaces/{workspaceName}/details: + get: + x-onecx: + permissions: + workspace: + - read + tags: + - workspace + description: get detailed information to all workspace related products and roles + operationId: getDetailsByWorkspaceName + parameters: + - name: workspaceName + in: path + required: true + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/WorkspaceDetails' components: schemas: + CreateRolesRequest: + type: object + properties: + roles: + type: array + items: + $ref: '#/components/schemas/CreateRoleRequest' CreateRoleRequest: type: object properties: name: type: string - shortDescription: - type: string description: type: string Role: @@ -434,6 +510,10 @@ components: properties: appId: type: string + productNames: + type: array + items: + type: string pageNumber: format: int32 description: The number of page. @@ -502,6 +582,8 @@ components: type: string appId: type: string + productName: + type: string resource: type: string action: @@ -555,6 +637,31 @@ components: type: string permissionId: type: string + CreateProductAssignmentsRequest: + type: object + required: + - roleId + - productNames + properties: + roleId: + type: string + productNames: + type: array + items: + type: string + RevokeAssignmentRequest: + type: object + required: + - roleId + properties: + roleId: + type: string + permissionId: + type: string + productNames: + type: array + items: + type: string Assignment: type: object properties: @@ -575,11 +682,15 @@ components: type: string appId: type: string + id: + type: string ApplicationSearchCriteria: type: object properties: appId: type: string + productName: + type: string name: type: string pageNumber: @@ -630,23 +741,107 @@ components: type: string appId: type: string + productName: + type: string name: type: string description: type: string - WorkspaceNameList: - type: array - items: - type: string - Product: + WorkspacePageResult: type: object properties: - id: + totalElements: + format: int64 + description: The total elements in the resource. + type: integer + number: + format: int32 + type: integer + size: + format: int32 + type: integer + totalPages: + format: int64 + type: integer + stream: + type: array + items: + $ref: '#/components/schemas/WorkspaceAbstract' + WorkspaceAbstract: + type: object + properties: + name: type: string + description: + type: string + WorkspaceSearchCriteria: + type: object + properties: + themeName: + type: string + productName: + type: string + pageNumber: + format: int32 + description: The number of page. + default: 0 + type: integer + pageSize: + format: int32 + description: The size of page + default: 100 + type: integer + Product: + type: object + properties: + microfrontends: + type: array + items: + $ref: '#/components/schemas/Microfrontend' productName: type: string baseUrl: type: string + Microfrontend: + type: object + properties: + mfeId: + type: string + basePath: + type: string + WorkspaceDetails: + type: object + properties: + workspaceRoles: + type: array + items: + type: string + products: + type: array + items: + $ref: '#/components/schemas/ProductDetails' + ProductDetails: + type: object + properties: + productName: + type: string + displayName: + type: string + mfe: + type: array + items: + $ref: '#/components/schemas/MfeMsAbstract' + ms: + type: array + items: + $ref: '#/components/schemas/MfeMsAbstract' + MfeMsAbstract: + type: object + properties: + appName: + type: string + appId: + type: string OffsetDateTime: format: date-time type: string diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 8faa7dc..94ccaa2 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -17,13 +17,17 @@ "PERMISSION.TOOLTIP": "Eine neue Berechtigung erstellen", "ROLE": "Rolle erstellen", "ROLE.TOOLTIP": "Eine neue Rolle erstellen", + "IDM_ROLES.TOOLTIP": "IDM Rollen erstellen", + "WORKSPACE_ROLES.TOOLTIP": "Workspace Rollen erstellen", "MESSAGE": { "APPLICATION_OK": "Die App wurde erfolgreich erstellt", "APPLICATION_NOK": "Ein Fehler ist aufgetreten. Die App wurde nicht erstellt.", "PERMISSION_OK": "Die Berechtigung wurde erfolgreich erstellt", "PERMISSION_NOK": "Ein Fehler ist aufgetreten. Die Berechtigung wurde nicht erstellt.", "ROLE_OK": "Die Rolle wurde erfolgreich erstellt", - "ROLE_NOK": "Ein Fehler ist aufgetreten. Die Rolle wurde nicht erstellt." + "ROLE_NOK": "Ein Fehler ist aufgetreten. Die Rolle wurde nicht erstellt.", + "WORKSPACE_ROLES_OK": "Die Workspace Rollen wurden erfolgreich erstellt.", + "WORKSPACE_ROLES_NOK": "Ein Fehler ist aufgetreten. Die Workspace-Rollen konnten nicht erstellt werden." } }, "DELETE": { @@ -86,6 +90,10 @@ "MODE_CONTAINS": "Filterwert enthalten" } }, + "VIEW": { + "ROLE": "Rollendetails", + "PERMISSION": "Berechtigungsdetails" + }, "CANCEL": "Abbrechen", "CHOOSE": "Auswählen", "CLEAR_CACHE": "Cache entfernen", @@ -118,10 +126,11 @@ "HEADER_WORKSPACE": "Workspace: ", "HEADER_APP": "App: ", "SUBHEADER_WORKSPACE": "Verwalten von Berechtigungen für den Workspace und den Apps der registrierten Produkte", - "SUBHEADER_APP": "Rollen und Berechtigungen verwalten" + "SUBHEADER_APP": "Verwalten von Berechtigungen für die App" } }, "APP": { + "ID": "App ID", "NAME": "Name", "TYPE": "Typ", "TYPE_WORKSPACE": "Workspace", @@ -131,11 +140,18 @@ "EDIT": "App ändern", "EDIT_HEADER": "App ändern", "SEARCH": { + "FILTER": { + "LABEL": "App Typ", + "TOOLTIP": "Filter für App-Typ", + "ALL": "Alle", + "APP": "Apps", + "WORKSPACE": "Workspaces" + }, "QUICK_FILTER": { - "TOOLTIP": "Filterwert", + "TOOLTIP": "Quickfilter für App Typ", "ALL": "Alle", - "WORKSPACE": "Workspaces", - "APP": "Apps" + "APP": "Apps", + "WORKSPACE": "Workspaces" } } }, @@ -145,26 +161,31 @@ "DESCRIPTION": "Beschreibung", "RESOURCE": "Ressource", "ACTION": "Aktion", - "PERMISSION": "Ressource # Aktion", + "KEY": "Ressource # Aktion", "LABEL": "Berechtigungen", "ACTIONS": "Aktionen", "ASSIGNMENTS": { "ROLE_IS_ASSIGNED_0": "Keine Berechtigung", "ROLE_IS_ASSIGNED_1": "Berechtigung erteilt", - "ROLE_ASSIGNEMENT_CHANGEABLE": "Klick für Änderung", - "GRANT_ALL_FOR_ROLE": "Alle Berechtigungen erteilen", - "REVOKE_ALL_FOR_ROLE": "Alle Berechtigungen entziehen", + "ROLE_ASSIGNEMENT_CHANGEABLE": "Berechtigung ändern", + "GRANT_ALL_FOR_ROLE": "Alle Berechtigungen für das ausgewählte oder alle Produkte erteilen", + "REVOKE_ALL_FOR_ROLE": "Alle Berechtigungen für das ausgewählte oder alle Produkte entziehen", "GRANT_ERROR": "Berechtigung konnte nicht erteilt werden", "GRANT_SUCCESS": "Berechtigung erteilt", "REVOKE_ERROR": "Berechtigung konnte nicht entzogen werden", "REVOKE_SUCCESS": "Berechtigung entzogen" }, "SORT": { - "APP_ID": "Sortierung nach Apps" + "APP_ID": "Sortierung nach App IDs", + "PRODUCT": "Sortierung nach Produkt und App IDs" }, "SEARCH": { "FILTER": { "APPS": "App", + "APP_TYPE": "Typ", + "APP_TYPE.TOOLTIP": "App-Typ: MFE = Microfrontend, MS = Microservice", + "PRODUCT": "Produkt", + "PRODUCT.TOOLTIP": "Die beim Workspace registrierten Produkte", "WORKSPACE": "Workspace", "TOOLTIP": "Filterwert", "ALL": "Alle", @@ -176,8 +197,8 @@ } }, "ROLE": { - "LABEL.WORKSPACE": "Workspace Rollen", - "TOOLTIP": "Für den Workspace erstellte Rollen, als Auswahl der für den Mandaten definierten Rollen, die dem Benutzer zugeordnet werden können.", + "LABEL": "Rollen", + "TOOLTIP": "Liste der Rollen zu denen Berechtigungen erteilt werden können. Wirksam werden Berechtigungen für einen Benutzer erst dann, wenn der Benutzer der Rolle zugeordnet wird.", "NAME": "Name", "DESCRIPTION": "Beschreibung" }, @@ -199,16 +220,22 @@ }, "EXCEPTIONS": { "HTTP_STATUS_0": { - "APPS": "Unbekanntes Problem beim Abrufen von Apps - Bitte versuchen sie es noch einmal.", + "APP": "Unbekanntes Problem beim Abrufen von Apps - Bitte versuchen sie es noch einmal.", "ROLES": "Unbekanntes Problem beim Abrufen von Rollen - Bitte versuchen sie es noch einmal.", "PERMISSIONS": "Unbekanntes Problem beim Abrufen von Berechtigungen - Bitte versuchen sie es noch einmal.", - "WORKSPACES": "Unbekanntes Problem beim Abrufen von Workspace Daten - Bitte versuchen sie es noch einmal." + "ASSIGNMENTS": "Unbekanntes Problem beim Abrufen von Berechtigungen - Bitte versuchen sie es noch einmal.", + "WORKSPACE": "Unbekanntes Problem beim Abrufen von Workspace Daten - Bitte versuchen sie es noch einmal." + }, + "HTTP_STATUS_400": { + "ROLES": "Die Rolle konnte nicht verarbeitet werden.", + "PERMISSIONS": "Die Berechtigung konnte nicht verarbeitet werden." }, "HTTP_STATUS_403": { - "APPS": "Sie haben keine Rechte um Apps zu sehen.", + "APP": "Sie haben keine Rechte um Apps zu sehen.", "ROLES": "Sie haben keine Rechte um Rollen zu sehen.", "PERMISSIONS": "Sie haben keine Rechte um Berechtigungen zu sehen.", - "WORKSPACES": "Sie haben keine Rechte um Workspaces zu sehen." + "ASSIGNMENTS": "Sie haben keine Rechte um Berechtigungen zu sehen.", + "WORKSPACE": "Sie haben keine Rechte um Workspace Daten zu sehen." }, "HTTP_STATUS_404": { "APP": "Die App konnte nicht gefunden werden.", @@ -216,14 +243,17 @@ "ROLE": "Die Rolle konnte nicht gefunden werden.", "ROLES": "Es konnten keine Rollen gefunden werden.", "PERMISSIONS": "Es konnten keine Berechtigungen gefunden werden.", - "WORKSPACE": "Der Workspace konnte nicht gefunden werden.", - "WORKSPACES": "Es konnten keine Workspaces gefunden werden." + "ASSIGNMENTS": "Es konnten keine Berechtigungen gefunden werden.", + "WORKSPACE": "Der Workspace konnte nicht gefunden werden." }, "HTTP_STATUS_500": { - "APPS": "Unbekanntes Server-Problem beim Abrufen von Apps - Bitte versuchen sie es noch einmal.", - "ROLES": "Unbekanntes Server-Problem beim Abrufen von Rollen - Bitte versuchen sie es noch einmal.", - "PERMISSIONS": "Unbekanntes Server-Problem beim Abrufen von Berechtigungen - Bitte versuchen sie es noch einmal.", - "WORKSPACES": "Unbekanntes Server-Problem beim Abrufen von Workspace Daten - Bitte versuchen sie es noch einmal." + "APP": "Unbekanntes Problem beim Abrufen von Apps - Bitte versuchen sie es erneut.", + "APPS": "Unbekanntes Problem beim Abrufen von Apps - Bitte versuchen sie es erneut.", + "ROLES": "Unbekanntes Problem beim Abrufen von Rollen - Bitte versuchen sie es erneut.", + "PERMISSIONS": "Unbekanntes Problem beim Abrufen von Berechtigungen - Bitte versuchen sie es erneut.", + "ASSIGNMENTS": "Unbekanntes Problem beim Abrufen von Berechtigungen - Bitte versuchen sie es erneut.", + "WORKSPACE": "Unbekanntes Problem beim Abrufen der Workspace Daten - Bitte versuchen sie es erneut.", + "WORKSPACES": "Unbekanntes Problem beim Abrufen von Workspaces - Bitte versuchen sie es erneut." } } } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index b54a89c..1593a9f 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -17,13 +17,17 @@ "PERMISSION.TOOLTIP": "Create a new Permission", "ROLE": "Create Role", "ROLE.TOOLTIP": "Create a new Role", + "IDM_ROLES.TOOLTIP": "Create IDM Roles", + "WORKSPACE_ROLES.TOOLTIP": "Create Workspace Roles", "MESSAGE": { "APPLICATION_OK": "The App was created successfully", "APPLICATION_NOK": "An error has occurred. The App was not created.", "PERMISSION_OK": "The permission was created successfully", "PERMISSION_NOK": "An error has occurred. The permission was not created.", "ROLE_OK": "The role was created successfully", - "ROLE_NOK": "An error has occurred. The role was not created." + "ROLE_NOK": "An error has occurred. The role was not created.", + "WORKSPACE_ROLES_OK": "The workspace roles were created successfully", + "WORKSPACE_ROLES_NOK": "An error has occurred. The workspace roles could not be created." } }, "DELETE": { @@ -86,6 +90,10 @@ "MODE_NOT_CONTAINS": "Filter value is NOT contained" } }, + "VIEW": { + "ROLE": "Role Details", + "PERMISSION": "Permission Details" + }, "CANCEL": "Cancel", "CHOOSE": "Choose", "CLEAR_CACHE": "Clear Cache", @@ -119,10 +127,11 @@ "HEADER_WORKSPACE": "Workspace: ", "HEADER_APP": "App: ", "SUBHEADER_WORKSPACE": "Managing Business Roles and Permissions of Workspace and all Apps of the registered Products", - "SUBHEADER_APP": "Managing Roles and Permissions" + "SUBHEADER_APP": "Managing Business Roles and Permissions of the App" } }, "APP": { + "ID": "App ID", "NAME": "Name", "TYPE": "Type", "TYPE_WORKSPACE": "Workspace", @@ -132,11 +141,18 @@ "EDIT": "Edit App", "EDIT_HEADER": "Edit App", "SEARCH": { + "FILTER": { + "LABEL": "Filter of App Type", + "TOOLTIP": "App Type", + "ALL": "All", + "APP": "Apps", + "WORKSPACE": "Workspaces" + }, "QUICK_FILTER": { - "TOOLTIP": "Set filter value", + "TOOLTIP": "Quick Filter for App type", "ALL": "All", - "WORKSPACE": "Workspaces", - "APP": "Apps" + "APP": "Apps", + "WORKSPACE": "Workspaces" } } }, @@ -146,26 +162,31 @@ "DESCRIPTION": "Description", "RESOURCE": "Resource", "ACTION": "Action", - "PERMISSION": "Resource # Action", + "KEY": "Resource # Action", "LABEL": "Permissions", "ACTIONS": "Actions", "ASSIGNMENTS": { "ROLE_IS_ASSIGNED_0": "No permission", "ROLE_IS_ASSIGNED_1": "Permission granted", - "ROLE_ASSIGNEMENT_CHANGEABLE": "Click for change", - "GRANT_ALL_FOR_ROLE": "Grant all Permissions", - "REVOKE_ALL_FOR_ROLE": "Revoke all Permissions", + "ROLE_ASSIGNEMENT_CHANGEABLE": "Change Permission", + "GRANT_ALL_FOR_ROLE": "Grant all Permissions for the selected or all products", + "REVOKE_ALL_FOR_ROLE": "Revoke all Permissions for the selected or all products", "GRANT_ERROR": "Permission could not be granted", "GRANT_SUCCESS": "Permission granted", "REVOKE_ERROR": "Permission could not be revoked", "REVOKE_SUCCESS": "Permission revoked" }, "SORT": { - "APP_ID": "Sorting by apps" + "APP_ID": "Sorting by App IDs", + "PRODUCT": "Sorting by Product und App IDs" }, "SEARCH": { "FILTER": { "APPS": "App", + "APP_TYPE": "Type", + "APP_TYPE.TOOLTIP": "App type: MFE = Microfrontend, MS = Microservice", + "PRODUCT": "Product", + "PRODUCT.TOOLTIP": "The products registered in the workspace", "WORKSPACE": "Workspace", "TOOLTIP": "Set filter value", "ALL": "All", @@ -177,8 +198,8 @@ } }, "ROLE": { - "LABEL.WORKSPACE": "Workspace Roles", - "TOOLTIP": "Roles created for the workspace, as a selection of the roles defined for the tenant that can be assigned to the user.", + "LABEL": "Roles", + "TOOLTIP": "List of roles to which permissions can be granted. Permissions for a user only become effective when the user is assigned to the role.", "NAME": "Name", "DESCRIPTION": "Description" }, @@ -200,16 +221,22 @@ }, "EXCEPTIONS": { "HTTP_STATUS_0": { - "APPS": "Unknown problem retrieving App data - please try again.", + "APP": "Unknown problem retrieving App data - please try again.", "ROLES": "Unknown problem retrieving Role data - please try again.", "PERMISSIONS": "Unknown problem retrieving Permission data - please try again.", - "WORKSPACES": "Unknown problem retrieving Workspace data - please try again." + "ASSIGNMENTS": "Unknown problem retrieving Assignment data - please try again.", + "WORKSPACE": "Unknown problem retrieving Workspace data - please try again." + }, + "HTTP_STATUS_400": { + "ROLES": "The Role could not be processed.", + "PERMISSIONS": "The permission could not be processed." }, "HTTP_STATUS_403": { - "APPS": "You have no permissions to see Apps.", + "APP": "You have no permissions to see App data.", "ROLES": "You have no permissions to see Roles.", "PERMISSIONS": "You have no permissions to see Permissions.", - "WORKSPACES": "You have no permissions to see Workspaces." + "ASSIGNMENTS": "You have no permissions to see Assignments.", + "WORKSPACE": "You have no permissions to see Workspace Data." }, "HTTP_STATUS_404": { "APP": "App could not be found.", @@ -217,14 +244,16 @@ "ROLE": "Role could not be found.", "ROLES": "No Roles could be found.", "PERMISSIONS": "No Permissions could be found.", - "WORKSPACE": "Workspace could not be found.", - "WORKSPACES": "No Workspaces could be found." + "WORKSPACE": "Workspace could not be found." }, "HTTP_STATUS_500": { - "APPS": "Unknown server problem retrieving App data - please try again.", - "ROLES": "Unknown server problem retrieving Role data - please try again.", - "PERMISSIONS": "Unknown server problem retrieving Permission data - please try again.", - "WORKSPACES": "Unknown server problem retrieving Workspace data - please try again." + "APP": "Unknown problem retrieving App data - please try again.", + "APPS": "Unknown problem retrieving App data - please try again.", + "ROLES": "Unknown problem retrieving Role data - please try again.", + "PERMISSIONS": "Unknown problem retrieving Permission data - please try again.", + "ASSIGNMENTS": "Unknown problem retrieving Assignment data - please try again.", + "WORKSPACE": "Unknown problem retrieving Workspace data - please try again.", + "WORKSPACES": "Unknown problem retrieving Workspaces - please try again." } } } From d645426f0c70cc173738281d4a325fcdd391f465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henry=20T=C3=A4schner?= <129834483+HenryT-CG@users.noreply.github.com> Date: Wed, 6 Mar 2024 13:39:34 +0100 Subject: [PATCH 2/2] Fix translations (#28) * fix: translations * fix: translations * fix: build.yml --- .github/workflows/build.yml | 2 +- src/assets/i18n/de.json | 4 +++- src/assets/i18n/en.json | 8 +++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 86a3fe5..6b134ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,4 +12,4 @@ jobs: uses: onecx/ci-angular/.github/workflows/build.yml@v1 secrets: inherit with: - helmEventTargetRepository: onecx/onecx-announcement \ No newline at end of file + helmEventTargetRepository: onecx/onecx-permission \ No newline at end of file diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 94ccaa2..3ad0052 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -109,6 +109,7 @@ "CANCEL_EDIT": "Den Änderungsmodus verlassen", "CANCEL_AND_CLOSE": "Abbrechen und Dialog schließen", "CANCEL_WITHOUT_SAVE": "Die Aktion ohne Speichern abbrechen", + "IMPORT": "Import Berechtigungen im JSON Format", "SAVE": "Die Änderungen speichern" } }, @@ -231,7 +232,8 @@ "PERMISSIONS": "Die Berechtigung konnte nicht verarbeitet werden." }, "HTTP_STATUS_403": { - "APP": "Sie haben keine Rechte um Apps zu sehen.", + "APP": "Sie haben keine Rechte um App Daten zu sehen.", + "APPS": "Sie haben keine Rechte um Apps zu sehen.", "ROLES": "Sie haben keine Rechte um Rollen zu sehen.", "PERMISSIONS": "Sie haben keine Rechte um Berechtigungen zu sehen.", "ASSIGNMENTS": "Sie haben keine Rechte um Berechtigungen zu sehen.", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 1593a9f..886cae5 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -109,7 +109,7 @@ "CANCEL_EDIT": "Cancel edit mode", "CANCEL_AND_CLOSE": "Cancel and close dialog", "CANCEL_WITHOUT_SAVE": "Cancel action without saving", - "IMPORT": "Import a definition in JSON format", + "IMPORT": "Import permissions in JSON format", "SAVE": "Save changes" } }, @@ -142,8 +142,8 @@ "EDIT_HEADER": "Edit App", "SEARCH": { "FILTER": { - "LABEL": "Filter of App Type", - "TOOLTIP": "App Type", + "LABEL": "App Type", + "TOOLTIP": "Filter for App Type", "ALL": "All", "APP": "Apps", "WORKSPACE": "Workspaces" @@ -233,6 +233,7 @@ }, "HTTP_STATUS_403": { "APP": "You have no permissions to see App data.", + "APPS": "You have no permissions to see Apps.", "ROLES": "You have no permissions to see Roles.", "PERMISSIONS": "You have no permissions to see Permissions.", "ASSIGNMENTS": "You have no permissions to see Assignments.", @@ -244,6 +245,7 @@ "ROLE": "Role could not be found.", "ROLES": "No Roles could be found.", "PERMISSIONS": "No Permissions could be found.", + "ASSIGNMENTS": "No Permissions could be found.", "WORKSPACE": "Workspace could not be found." }, "HTTP_STATUS_500": {