diff --git a/package-lock.json b/package-lock.json index 4f7a859c..1ea7689d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,24 +57,24 @@ "@jscutlery/semver": "^2.30.1", "@openapitools/openapi-generator-cli": "^2.9.0", "@schematics/angular": "15.2.6", - "@storybook/addon-essentials": "7.0.4", - "@storybook/angular": "7.0.4", - "@storybook/core-server": "7.0.4 ", + "@storybook/addon-essentials": "7.6.16", + "@storybook/angular": "7.6.16", + "@storybook/core-server": "7.6.16", "@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.48.2", "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-config-prettier": "9.1.0", "eslint-plugin-cypress": "^2.13.3", "eslint-plugin-import": "2.29.1", "eslint-plugin-jsx-a11y": "6.7.1", @@ -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" @@ -2150,6 +2150,22 @@ "@babel/core": "^7.13.0" } }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", @@ -2507,6 +2523,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -2663,6 +2694,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", @@ -2678,6 +2725,24 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", @@ -2725,6 +2790,39 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, "node_modules/@babel/plugin-transform-classes": { "version": "7.23.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", @@ -2847,6 +2945,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", @@ -2863,6 +2977,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-flow-strip-types": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", @@ -2912,6 +3042,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", @@ -2927,6 +3073,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", @@ -3040,6 +3202,57 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", @@ -3056,6 +3269,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", @@ -3088,6 +3317,52 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", @@ -3388,6 +3663,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", @@ -3404,6 +3695,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/preset-env": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", @@ -5875,14 +6182,52 @@ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", "dev": true }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dev": true, + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==", + "dev": true + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", "dev": true @@ -7607,1328 +7952,2728 @@ "node": ">=14" } }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, - "engines": { - "node": ">=14.0.0" + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "rollup": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { "optional": true } } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "rollup": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { "optional": true } } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "rollup": { + "@types/react": { "optional": true } } }, - "node_modules/@schematics/angular": { - "version": "15.2.6", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.6.tgz", - "integrity": "sha512-OcBUvVAxZEMBX+fi0ytybeAdmStra+GwtlvipS70yOxcAgJ84ZrnZGN7a072cCVQcq7AgqUfssnyqCx1wu+yCg==", + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", "dev": true, "dependencies": { - "@angular-devkit/core": "15.2.6", - "@angular-devkit/schematics": "15.2.6", - "jsonc-parser": "3.2.0" + "@babel/runtime": "^7.13.10" }, - "engines": { - "node": "^14.20.0 || ^16.13.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", "dev": true, "dependencies": { - "@hapi/hoek": "^9.0.0" + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "node_modules/@sigstore/bundle": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", - "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", + "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", "dev": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", - "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@sigstore/sign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", - "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", + "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", "dev": true, "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "make-fetch-happen": "^11.0.1" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@sigstore/sign/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "node_modules/@radix-ui/react-popper": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", + "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", "dev": true, "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@sigstore/sign/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/@radix-ui/react-portal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", + "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", "dev": true, "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch/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/@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "node_modules/@storybook/addon-actions": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.0.4.tgz", - "integrity": "sha512-fYnYYU2QW1FWJbKchhH4fFHM9V2CFGqYNQ+T65+fBGrR6vtE/+yPqozCOHcmeZ6f5i6xeHuQfKiFInDNZC4AzA==", + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "polished": "^4.2.2", - "prop-types": "^15.7.2", - "react-inspector": "^6.0.0", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "uuid-browser": "^3.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-backgrounds": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.0.4.tgz", - "integrity": "sha512-u81oGrhgoOAV2+TMB1kjsO9T57LJsF1Dhex8QGOnapiLW2dRbaPNpYLUNnLvLaVmr2XAi13k5tSJUgRRG0/Mpw==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "node_modules/@radix-ui/react-select": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz", + "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.2", + "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-controls": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.0.4.tgz", - "integrity": "sha512-Q3AHEo+eWs+FfJPZ2p6KEUoB7oi6YeTdTR6jNiq1tkLCNebkKz7bv/EalOuR2aPdOuQclplC0awQMAl0ZOBXnA==", - "dev": true, - "dependencies": { - "@storybook/blocks": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-common": "7.0.4", - "@storybook/manager-api": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", - "lodash": "^4.17.21", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "node_modules/@radix-ui/react-separator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz", + "integrity": "sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-docs": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.0.4.tgz", - "integrity": "sha512-wiRWabOJXytiVxwqkWcHloUyUV7o+pDs6VPvlszc2/UQNu4aSGBZ1rARYtlXEASoOgDuBdhpnWK8LeCxUcmRZg==", + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", "dev": true, "dependencies": { - "@babel/core": "^7.20.2", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@jest/transform": "^29.3.1", - "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/csf-plugin": "7.0.4", - "@storybook/csf-tools": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.0.4", - "@storybook/postinstall": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/react-dom-shim": "7.0.4", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", - "fs-extra": "^11.1.0", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "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/addon-essentials": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.0.4.tgz", - "integrity": "sha512-Iy3DihiiNUvvI3viVhAEzwCnMJTMp3oJaJOEk8i2j1eAFjXU+ED+N4lY3DwmPeVJ2UoqKyUAPTfnovvuSlJXsQ==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.0.4", - "@storybook/addon-backgrounds": "7.0.4", - "@storybook/addon-controls": "7.0.4", - "@storybook/addon-docs": "7.0.4", - "@storybook/addon-highlight": "7.0.4", - "@storybook/addon-measure": "7.0.4", - "@storybook/addon-outline": "7.0.4", - "@storybook/addon-toolbars": "7.0.4", - "@storybook/addon-viewport": "7.0.4", - "@storybook/core-common": "7.0.4", - "@storybook/manager-api": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/preview-api": "7.0.4", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" }, "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/addon-highlight": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.0.4.tgz", - "integrity": "sha512-yRNF6JozLpkMGQCtT+yXwB0jj3X97LNpJAQn2BmsmeOYX0dfLz4HT0J1OQH9UHD+aRmJnTsFXp+Cmdq7ncHFRg==", - "dev": true, - "dependencies": { - "@storybook/core-events": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.0.4" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/addon-measure": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.0.4.tgz", - "integrity": "sha512-rr/1K0WFN0+4pCdVhz56HnBSTeMlZoLw7ToVrG4C3GLew5TrEYjDYu1rU4q1svcAux3Yu+kt/b4FMsDhhoWCoQ==", + "node_modules/@radix-ui/react-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz", + "integrity": "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/types": "7.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-outline": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.0.4.tgz", - "integrity": "sha512-ifguV90UkE2hvjBhr4s1f54O5FvNOngaMwU3Bz/wpqkmZwD/O2o3y/9BNN67paIVNWYO8KGv3l76CK8ZZpm0Xw==", + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz", + "integrity": "sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/types": "7.0.4", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-toggle": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-toolbars": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.0.4.tgz", - "integrity": "sha512-kh476eA0smzC7phD5JQW4P4odV54S4Z76+XiPXsn1yrWszu5B7EdSrN8f+v2G0x6vBbodpiutvbHN225nir9eg==", + "node_modules/@radix-ui/react-toolbar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz", + "integrity": "sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/theming": "7.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-separator": "1.0.3", + "@radix-ui/react-toggle-group": "1.0.4" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-viewport": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.0.4.tgz", - "integrity": "sha512-8JqDobUuAoWNHxAGDMfbjqdy1ohaQd/LMPnsQUtEqkIqVnbG40KBwCkoCv17Tgz3TQBnPyDDBn2mdb/6yxX9hQ==", + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/theming": "7.0.4", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { + "@types/react": { "optional": true } } }, - "node_modules/@storybook/addons": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.0.4.tgz", - "integrity": "sha512-dkpyKNwAY+Ev9ZbgiLB0ki7H6AbAMqYcBx1qYvyFR2hv3k1Ta2OQIMTkODWdkYsgffH00SSpgaBwb2lBUrMZkw==", + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", "dev": true, "dependencies": { - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/types": "7.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/angular": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-7.0.4.tgz", - "integrity": "sha512-WPAOyLYJScjG4t13XF490Eo1IhLI5C6xrFHYIUIpp/WMnN/uiaP0FjuD6Rg9gz44Jrro51BJFkgD8npEML9Jbw==", - "dev": true, - "dependencies": { - "@storybook/builder-webpack5": "7.0.4", - "@storybook/cli": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/core-client": "7.0.4", - "@storybook/core-common": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/core-server": "7.0.4", - "@storybook/core-webpack": "7.0.4", - "@storybook/docs-tools": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/telemetry": "7.0.4", - "@storybook/types": "7.0.4", - "@types/node": "^16.0.0", - "@types/react": "^16.14.34", - "@types/react-dom": "^16.9.14", - "@types/semver": "^7.3.4", - "@types/webpack-env": "^1.18.0", - "find-up": "^5.0.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "tsconfig-paths-webpack-plugin": "^3.5.2", - "util-deprecate": "^1.0.2", - "webpack": "5" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { - "@angular-devkit/architect": ">=0.1400.0 < 0.1600.0", - "@angular-devkit/build-angular": ">=14.1.0 < 16.0.0", - "@angular-devkit/core": ">=14.1.0 < 16.0.0", - "@angular/cli": ">=14.1.0 < 16.0.0", - "@angular/common": ">=14.1.0 < 16.0.0", - "@angular/compiler": ">=14.1.0 < 16.0.0", - "@angular/compiler-cli": ">=14.1.0 < 16.0.0", - "@angular/core": ">=14.1.0 < 16.0.0", - "@angular/forms": ">=14.1.0 < 16.0.0", - "@angular/platform-browser": ">=14.1.0 < 16.0.0", - "@angular/platform-browser-dynamic": ">=14.1.0 < 16.0.0", - "@babel/core": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "rxjs": "^6.0.0 || ^7.4.0", - "typescript": "^4.0.0", - "zone.js": "^0.8.29 || >= 0.9.0 < 1.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "@angular/cli": { + "@types/react": { "optional": true } } }, - "node_modules/@storybook/angular/node_modules/@types/node": { - "version": "16.18.80", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.80.tgz", - "integrity": "sha512-vFxJ1Iyl7A0+xB0uW1r1v504yItKZLdqg/VZELUZ4H02U0bXAgBisSQ8Erf0DMruNFz9ggoiEv6T8Ll9bTg8Jw==", - "dev": true - }, - "node_modules/@storybook/angular/node_modules/@types/react": { - "version": "16.14.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.56.tgz", - "integrity": "sha512-MxuHB7dvVm5yOxRr7hJoonLG0JY8YvqZtaQ9Quirp3Oe4FLFjAgxkxsKE6IspdHPpRVZKo2ZoDEravWO81EeYA==", + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", "dev": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/api": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.0.4.tgz", - "integrity": "sha512-6Zd83ByPhEeDlNmtVOvlurw5AmjELjun4hUYdy6awy6WGgroAPGO1639LLZTToCa0YxIuf7ZAWa6p3dMZOluMA==", + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/manager-api": "7.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { + "@types/react": { "optional": true } } }, - "node_modules/@storybook/blocks": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.0.4.tgz", - "integrity": "sha512-ybFuFMW1l/12dDqfOfO37cLS6m3A4/3Z7MbaN743SsBzuVOfThCd7V7ErWpKDDHpoIk+3osWkg0QuqZoO5Irkw==", + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", - "@types/lodash": "^4.14.167", - "color-convert": "^2.0.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "markdown-to-jsx": "^7.1.8", - "memoizerific": "^1.11.3", - "polished": "^4.2.2", - "react-colorful": "^5.1.2", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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==", + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", "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", - "@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-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/builder-webpack5": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.0.4.tgz", - "integrity": "sha512-YUQ5FYWURiT9ILIVA25ph5EP6q4i/46iawi5bUxrmFTxEUEf6DzeEzZyxH74MVMrE0zZ4ur/l59qw+x05rPX4A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.10", - "@storybook/addons": "7.0.4", - "@storybook/api": "7.0.4", - "@storybook/channel-postmessage": "7.0.4", - "@storybook/channel-websocket": "7.0.4", - "@storybook/channels": "7.0.4", - "@storybook/client-api": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/components": "7.0.4", - "@storybook/core-common": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/core-webpack": "7.0.4", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/preview": "7.0.4", - "@storybook/preview-api": "7.0.4", - "@storybook/router": "7.0.4", - "@storybook/store": "7.0.4", - "@storybook/theming": "7.0.4", - "@types/node": "^16.0.0", - "@types/semver": "^7.3.4", - "babel-loader": "^9.0.0", - "babel-plugin-named-exports-order": "^0.0.2", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.7.1", - "express": "^4.17.3", - "fork-ts-checker-webpack-plugin": "^7.2.8", - "fs-extra": "^11.1.0", - "html-webpack-plugin": "^5.5.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "semver": "^7.3.7", - "style-loader": "^3.3.1", - "terser-webpack-plugin": "^5.3.1", - "ts-dedent": "^2.0.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^5.3.1", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.4.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "typescript": { + "@types/react": { "optional": true } } }, - "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "16.18.80", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.80.tgz", - "integrity": "sha512-vFxJ1Iyl7A0+xB0uW1r1v504yItKZLdqg/VZELUZ4H02U0bXAgBisSQ8Erf0DMruNFz9ggoiEv6T8Ll9bTg8Jw==", - "dev": true - }, - "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", "dev": true, "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "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==", - "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" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@storybook/channel-websocket": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-7.0.4.tgz", - "integrity": "sha512-D5Dz4uu3XCkN5lcNz6kqgWXm0GFuJjwq+xRoK1umPzt6l0+VpG2UReQrnR/+fy6yYEJsBj0mUacG3C+ID0e+MQ==", + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.4", - "@storybook/client-logger": "7.0.4", - "@storybook/global": "^5.0.0", - "telejson": "^7.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "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" + "@babel/runtime": "^7.13.10" } }, - "node_modules/@storybook/cli": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.0.4.tgz", - "integrity": "sha512-cSu87IKZ+5Wk1aA7GRf4+Ou6EhcBsB/Rvhuecp/AI0cEX/UIVPHLyt+ZeUuqNHx5OEhdRT7Qbm+NOVcM4qyz7w==", + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, "dependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.0.4", - "@storybook/core-common": "7.0.4", - "@storybook/core-server": "7.0.4", - "@storybook/csf-tools": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/telemetry": "7.0.4", - "@storybook/types": "7.0.4", - "@types/semver": "^7.3.4", - "boxen": "^5.1.2", - "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.14.0", - "leven": "^3.1.0", - "prettier": "^2.8.0", - "prompts": "^2.4.0", - "puppeteer-core": "^2.1.1", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "shelljs": "^0.8.5", - "simple-update-notifier": "^1.0.0", - "strip-json-comments": "^3.0.1", - "tempy": "^1.0.1", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" + "@rollup/pluginutils": "^5.1.0" }, - "bin": { - "getstorybook": "bin/index.js", - "sb": "bin/index.js" + "engines": { + "node": ">=14.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "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==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" }, "engines": { - "node": ">=8" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "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==", + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "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==", + "node_modules/@schematics/angular": { + "version": "15.2.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.6.tgz", + "integrity": "sha512-OcBUvVAxZEMBX+fi0ytybeAdmStra+GwtlvipS70yOxcAgJ84ZrnZGN7a072cCVQcq7AgqUfssnyqCx1wu+yCg==", "dev": true, + "dependencies": { + "@angular-devkit/core": "15.2.6", + "@angular-devkit/schematics": "15.2.6", + "jsonc-parser": "3.2.0" + }, "engines": { - "node": ">= 6" + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "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==", + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@hapi/hoek": "^9.0.0" } }, - "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==", + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@storybook/client-api": { + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-7.0.4.tgz", - "integrity": "sha512-Z78Hma/Um7/i/gJXHZ81gbp2cel3Z83cOQY+L+cG2r4KdIojYeghSY0ym2Zj7SJkn4eqwKOiXD2nfk4bydgK5w==", + "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/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@storybook/addon-actions": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.16.tgz", + "integrity": "sha512-wCpZljLXnu08TZzp+qL5AXousfUBzY6TgHVwn4yoZkMhPg3WLxZTceKYnc+XAxoMmdTrDjwanEF7v/uQ9eu64Q==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/preview-api": "7.0.4" + "@storybook/core-events": "7.6.16", + "@storybook/global": "^5.0.0", + "@types/uuid": "^9.0.1", + "dequal": "^2.0.2", + "polished": "^4.2.2", + "uuid": "^9.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "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==", + "node_modules/@storybook/addon-actions/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@storybook/addon-backgrounds": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.16.tgz", + "integrity": "sha512-q9985hjtoX3ytvReV2YC4UY0FVASXFq2fW6RNOrrivw81UbW2SWxVG01vh7ZXjMrWbQ6r3yC05X9vVAmCa7TdQ==", "dev": true, "dependencies": { - "@storybook/global": "^5.0.0" + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.0.4.tgz", - "integrity": "sha512-EeR0zMIC4mohm7rU6/qY0Q91g1Fx2oZiB/ZCDdp8EERzAi84a+aM9ce9zflRIk1ZH/WzjzJtA72Qec9O5UJxBA==", + "node_modules/@storybook/addon-controls": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.16.tgz", + "integrity": "sha512-WeIuwyGxaMMClWSHhSH0ibwPSarEFtxE6SPQxCTmGIeD11bn5vQ6UUrmm9A2xbFqHOJBoB60TJhw69alnI0AHA==", "dev": true, "dependencies": { - "@babel/core": "~7.21.0", - "@babel/preset-env": "~7.21.0", - "@babel/types": "~7.21.2", - "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/types": "7.0.4", - "cross-spawn": "^7.0.3", - "globby": "^11.0.2", - "jscodeshift": "^0.14.0", + "@storybook/blocks": "7.6.16", "lodash": "^4.17.21", - "prettier": "^2.8.0", - "recast": "^0.23.1" + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "node_modules/@storybook/addon-docs": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.16.tgz", + "integrity": "sha512-X4WLAwwxGq9ki49FtERT5VHstGeZYca+l+8lxVXW6NQYuQ1xCeSy5puwknDv5p5u4thIVW2Fa4Uvma7wCfddtg==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.6.16", + "@storybook/client-logger": "7.6.16", + "@storybook/components": "7.6.16", + "@storybook/csf-plugin": "7.6.16", + "@storybook/csf-tools": "7.6.16", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.6.16", + "@storybook/postinstall": "7.6.16", + "@storybook/preview-api": "7.6.16", + "@storybook/react-dom-shim": "7.6.16", + "@storybook/theming": "7.6.16", + "@storybook/types": "7.6.16", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=6.9.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/addon-essentials": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.16.tgz", + "integrity": "sha512-LTrsud7yphxA7dpbk8TvIsHXqk5Wkq3JAwby3yQDEOFakpgNeXj8b6rlr9CHJja2p13pB4LuXokLk8t+qJGnQQ==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.6.16", + "@storybook/addon-backgrounds": "7.6.16", + "@storybook/addon-controls": "7.6.16", + "@storybook/addon-docs": "7.6.16", + "@storybook/addon-highlight": "7.6.16", + "@storybook/addon-measure": "7.6.16", + "@storybook/addon-outline": "7.6.16", + "@storybook/addon-toolbars": "7.6.16", + "@storybook/addon-viewport": "7.6.16", + "@storybook/core-common": "7.6.16", + "@storybook/manager-api": "7.6.16", + "@storybook/node-logger": "7.6.16", + "@storybook/preview-api": "7.6.16", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "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/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==", + "node_modules/@storybook/addon-highlight": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.16.tgz", + "integrity": "sha512-DJtUBiButx6cz55eaRe5JFVBORVtp3Htr9PnxWVGEy4Ki5aoYCYWxMcPOuXVFvtWgBmh6d3HO0pEd888qPr60g==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@storybook/global": "^5.0.0" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/@babel/generator/node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "node_modules/@storybook/addon-measure": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.16.tgz", + "integrity": "sha512-lQw7WXEeLuvDe3bfi7699WnHMryLIRnoT/w7oHqvS19UHp2HR0TKqYiPPppI6Yy4RoWHx+qFhKZJlajFyKDGfg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@storybook/global": "^5.0.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/@babel/preset-env": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", - "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", + "node_modules/@storybook/addon-outline": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.16.tgz", + "integrity": "sha512-bG9KN10ANLUDIsm4e6RXRsCZ++b8pyfYTyu0MlSNXf6KdYcuDvdTY59gj6RIeVGKqWeX5yYCYUm2oPLtkms1NQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@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.20.0", - "@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-transform-arrow-functions": "^7.21.5", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.21.5", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.5", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.21.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.21.5", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.5", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.16.tgz", + "integrity": "sha512-6wSNXe50auEVwHCcupYPrJkpzQFugumEBfgYuQ6ICW9k2xJtGtahy7TyM9sZbYgnDkoTm2ba7UhML6Noy3JuUg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-viewport": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.16.tgz", + "integrity": "sha512-WkvixYHncLXpAeEnktjfYIffJ3b6poymB+wDbHKK/tg7m3N8llLlys64nvyeb7DbZ/+1yJls3K1DVbk1AIEHrQ==", + "dev": true, + "dependencies": { + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/angular": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/angular/-/angular-7.6.16.tgz", + "integrity": "sha512-03WWzIAKUerkq2UsSh+ErNJodFx3XxI4aGn4vKja7EkD/uJzjC3nB2IEjbZxP0RbwcStn5eh9b/Dv+cEyoyDZg==", + "dev": true, + "dependencies": { + "@storybook/builder-webpack5": "7.6.16", + "@storybook/cli": "7.6.16", + "@storybook/client-logger": "7.6.16", + "@storybook/core-common": "7.6.16", + "@storybook/core-events": "7.6.16", + "@storybook/core-server": "7.6.16", + "@storybook/core-webpack": "7.6.16", + "@storybook/docs-tools": "7.6.16", + "@storybook/global": "^5.0.0", + "@storybook/node-logger": "7.6.16", + "@storybook/preview-api": "7.6.16", + "@storybook/telemetry": "7.6.16", + "@storybook/types": "7.6.16", + "@types/node": "^18.0.0", + "@types/react": "^16.14.34", + "@types/react-dom": "^16.9.14", + "@types/semver": "^7.3.4", + "@types/webpack-env": "^1.18.0", + "find-up": "^5.0.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0", + "tsconfig-paths-webpack-plugin": "^4.0.1", + "util-deprecate": "^1.0.2", + "webpack": "5" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@angular-devkit/architect": ">=0.1400.0 < 0.1800.0", + "@angular-devkit/build-angular": ">=14.1.0 < 18.0.0", + "@angular-devkit/core": ">=14.1.0 < 18.0.0", + "@angular/cli": ">=14.1.0 < 18.0.0", + "@angular/common": ">=14.1.0 < 18.0.0", + "@angular/compiler": ">=14.1.0 < 18.0.0", + "@angular/compiler-cli": ">=14.1.0 < 18.0.0", + "@angular/core": ">=14.1.0 < 18.0.0", + "@angular/forms": ">=14.1.0 < 18.0.0", + "@angular/platform-browser": ">=14.1.0 < 18.0.0", + "@angular/platform-browser-dynamic": ">=14.1.0 < 18.0.0", + "@babel/core": "*", + "rxjs": "^6.0.0 || ^7.4.0", + "typescript": "^4.0.0 || ^5.0.0", + "zone.js": ">= 0.11.1 < 1.0.0" + }, + "peerDependenciesMeta": { + "@angular/cli": { + "optional": true + } } }, - "node_modules/@storybook/codemod/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/angular/node_modules/@types/react": { + "version": "16.14.56", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.56.tgz", + "integrity": "sha512-MxuHB7dvVm5yOxRr7hJoonLG0JY8YvqZtaQ9Quirp3Oe4FLFjAgxkxsKE6IspdHPpRVZKo2ZoDEravWO81EeYA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@storybook/blocks": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.16.tgz", + "integrity": "sha512-rWG9a7BbK0qYvge1oJTIpAbcQ4eOSxetKqgeZc7jxQGeJw0Xvq7C/CmkBY4ZrdP8nj7M7R1Yw49u6OV4aXlyOg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.6.16", + "@storybook/client-logger": "7.6.16", + "@storybook/components": "7.6.16", + "@storybook/core-events": "7.6.16", + "@storybook/csf": "^0.1.2", + "@storybook/docs-tools": "7.6.16", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.6.16", + "@storybook/preview-api": "7.6.16", + "@storybook/theming": "7.6.16", + "@storybook/types": "7.6.16", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.8", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "engines": { - "node": ">=6.9.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/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/builder-manager": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.16.tgz", + "integrity": "sha512-QTmvjmk49tpPe5IFM3SwHvRb1P6G0PTip4mCO7ab/zKiWaXlg9QZF5su+2e3KSil4ATssr3ybUlKlkqSubaCyQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "7.6.16", + "@storybook/manager": "7.6.16", + "@storybook/node-logger": "7.6.16", + "@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/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==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0.0" + "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/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==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "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/builder-webpack5": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.16.tgz", + "integrity": "sha512-KBUwFXlG+BBp3W7eyZMdTpWqiGsI6bsKcbyEtzbX4pSPWDRVWaJB2wito+Y1VhOAo/pPukzV/3GLVUlyq4wdsw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.2", + "@storybook/channels": "7.6.16", + "@storybook/client-logger": "7.6.16", + "@storybook/core-common": "7.6.16", + "@storybook/core-events": "7.6.16", + "@storybook/core-webpack": "7.6.16", + "@storybook/node-logger": "7.6.16", + "@storybook/preview": "7.6.16", + "@storybook/preview-api": "7.6.16", + "@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/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/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/channels": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.16.tgz", + "integrity": "sha512-LKB0t4OGISez1O4TRJ/CDPxlb2wAW7gg8YRL91VVUHeffVyr4bnpklvMbLbuEcYrysM82Q2UMB9ipQdyK6Issg==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.6.16", + "@storybook/core-events": "7.6.16", + "@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": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.16.tgz", + "integrity": "sha512-bFEiAXv69ZLqFnxAMCEBTxZqLnPG0GAEpGqwpPbt2lk6lLtro8g+//OR9RiztZt0YFHpp0YK5WCy6Xq0gwXcPw==", + "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.16", + "@storybook/core-common": "7.6.16", + "@storybook/core-events": "7.6.16", + "@storybook/core-server": "7.6.16", + "@storybook/csf-tools": "7.6.16", + "@storybook/node-logger": "7.6.16", + "@storybook/telemetry": "7.6.16", + "@storybook/types": "7.6.16", + "@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" + } + }, + "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==", + "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/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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "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/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/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/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/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/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.6.16", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.16.tgz", + "integrity": "sha512-Vquhmgk/SO0VeAkojcA1juuicBHoTST+f4XwBvyUNiebOSOdGIkxHVxpDFXu2kS0aKflFBEutX2IgoysDup+fQ==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod": { + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.16.tgz", + "integrity": "sha512-RlL2I7UV+ef3j+6NaFa1Y6j/hU9KDKssync1GfKypUKlFAP76ozfpRWdDVEkc/29JruEEkbvMiUxQdP7CE3PMQ==", + "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.16", + "@storybook/node-logger": "7.6.16", + "@storybook/types": "7.6.16", + "@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/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/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/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.6.16", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.16.tgz", + "integrity": "sha512-5KZQqxFiVEGM485ceF/7PmiNEkHgouEa8ZUJvDGrW9Ap5MfN0xqAuyTTveHvZzGrKp0YlOcOnpqwu/cSk0HQKA==", + "dev": true, + "dependencies": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.6.16", + "@storybook/csf": "^0.1.2", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.6.16", + "@storybook/types": "7.6.16", + "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.6.16", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.16.tgz", + "integrity": "sha512-Xn3Fbo4k9RRKgYzOBx9CeJFpWgS9gkcdo3J9XMMzmUqdZ+MUGT74kl2sMmzSypcH5aI1AUl5vZIKvLwloliejw==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.6.16", + "@storybook/node-logger": "7.6.16", + "@storybook/types": "7.6.16", + "@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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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-common/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, - "bin": { - "semver": "bin/semver.js" + "optional": true, + "os": [ + "sunos" + ], + "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/core-common/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, - "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": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/core-client": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.0.4.tgz", - "integrity": "sha512-BzTKIrPl8wPRh6KrlcVdGyIrRaFGlL1Ygg0j2OgF5KvRoU/WXKN8cw3sV7hHgHsK35wXRV9IfKfu7Qo02rFOLg==", + "node_modules/@storybook/core-common/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, - "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/preview-api": "7.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "optional": true, + "os": [ + "win32" + ], + "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/core-common/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, - "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" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "16.18.80", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.80.tgz", - "integrity": "sha512-vFxJ1Iyl7A0+xB0uW1r1v504yItKZLdqg/VZELUZ4H02U0bXAgBisSQ8Erf0DMruNFz9ggoiEv6T8Ll9bTg8Jw==", - "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", @@ -8960,6 +10705,65 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/@storybook/core-common/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-common/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-common/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8969,6 +10773,15 @@ "node": ">=8" } }, + "node_modules/@storybook/core-common/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-common/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8982,42 +10795,44 @@ } }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.16.tgz", + "integrity": "sha512-mkBqzrbp6vmdjo0fBZGrFQQ4YdvMFxF6AesdKTf8EzPa69FoxnhQLrmQ4aXF+9vXkxfXVJF2HfpoTEdfqqAo+w==", "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, "node_modules/@storybook/core-server": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.0.4.tgz", - "integrity": "sha512-4yYvrUoLrrNg10IjGCEnsZYRo8NNgpzb28qSAerbJCz1lcGGemzkKayDGLj+k2B2Jif/cc18nwuWnux9Q7R/ow==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.16.tgz", + "integrity": "sha512-Sj8j45XMg1bI7ktMqj9gxXHsZ4d1KgR+2A2eaxR7Heho7253WkUltLYxhu3hdH01rRJXYFxn/zZBxYfEib94Vg==", "dev": true, "dependencies": { - "@aw-web-design/x-default-browser": "1.4.88", + "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.0.4", - "@storybook/core-common": "7.0.4", - "@storybook/core-events": "7.0.4", - "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.4", + "@storybook/builder-manager": "7.6.16", + "@storybook/channels": "7.6.16", + "@storybook/core-common": "7.6.16", + "@storybook/core-events": "7.6.16", + "@storybook/csf": "^0.1.2", + "@storybook/csf-tools": "7.6.16", "@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/types": "7.0.4", + "@storybook/manager": "7.6.16", + "@storybook/node-logger": "7.6.16", + "@storybook/preview-api": "7.6.16", + "@storybook/telemetry": "7.6.16", + "@storybook/types": "7.6.16", "@types/detect-port": "^1.3.0", - "@types/node": "^16.0.0", - "@types/node-fetch": "^2.5.7", + "@types/node": "^18.0.0", "@types/pretty-hrtime": "^1.0.0", "@types/semver": "^7.3.4", - "better-opn": "^2.1.1", - "boxen": "^5.1.2", + "better-opn": "^3.0.2", "chalk": "^4.1.0", "cli-table3": "^0.6.1", "compression": "^1.7.4", @@ -9027,15 +10842,15 @@ "globby": "^11.0.2", "ip": "^2.0.0", "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", "semver": "^7.3.7", - "serve-favicon": "^2.5.0", - "telejson": "^7.0.3", + "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" @@ -9045,12 +10860,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "16.18.80", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.80.tgz", - "integrity": "sha512-vFxJ1Iyl7A0+xB0uW1r1v504yItKZLdqg/VZELUZ4H02U0bXAgBisSQ8Erf0DMruNFz9ggoiEv6T8Ll9bTg8Jw==", - "dev": true - }, "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", @@ -9104,15 +10913,15 @@ } }, "node_modules/@storybook/core-webpack": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.0.4.tgz", - "integrity": "sha512-6lynhClH2q2PvfuJC4kHiYidCRTy4X6Xg3DN9SVW3lTq7gX8x3oCg9QTtXmDMx5Nmq1zW9E1LAUq7gAHcBujWA==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.16.tgz", + "integrity": "sha512-Ol/FD6jHcCspw0GK5o9uT6Pjk5HuDD9bxU+03bEyCpGPodk0BE9qaoahs1+WO4wG8A1m5QYdfy5zRq6VeI1WHg==", "dev": true, "dependencies": { - "@storybook/core-common": "7.0.4", - "@storybook/node-logger": "7.0.4", - "@storybook/types": "7.0.4", - "@types/node": "^16.0.0", + "@storybook/core-common": "7.6.16", + "@storybook/node-logger": "7.6.16", + "@storybook/types": "7.6.16", + "@types/node": "^18.0.0", "ts-dedent": "^2.0.0" }, "funding": { @@ -9120,12 +10929,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "16.18.80", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.80.tgz", - "integrity": "sha512-vFxJ1Iyl7A0+xB0uW1r1v504yItKZLdqg/VZELUZ4H02U0bXAgBisSQ8Erf0DMruNFz9ggoiEv6T8Ll9bTg8Jw==", - "dev": true - }, "node_modules/@storybook/csf": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz", @@ -9136,13 +10939,13 @@ } }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.16.tgz", + "integrity": "sha512-hslhGtnijMpL7HAcYYgIuo6acVLP7BDptflMwIyGFWKK3MHjMxqWTZ3Sj+BV1yg/pYZdqC2NYyUypeuuSpivSA==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.0.4", - "unplugin": "^0.10.2" + "@storybook/csf-tools": "7.6.16", + "unplugin": "^1.3.1" }, "funding": { "type": "opencollective", @@ -9150,17 +10953,17 @@ } }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.16.tgz", + "integrity": "sha512-8kVBq3UKDrEQq7rTHlNMoe1TDOTdO8iL8Jtv/FMDu/Qzj6AoT8/bjrtPsGjGMfVjP7QwBDeiLn6rStT4TlVGog==", "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", + "@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.16", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -9171,12 +10974,12 @@ } }, "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==", + "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.21.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -9185,53 +10988,6 @@ "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", @@ -9253,16 +11009,16 @@ "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.16.tgz", + "integrity": "sha512-meuq5uLGBLOSJXKeCt9iEH0uVKgGqwfEBi2T4E2w3BcubC/6oQ3VeZl25/KO+l1XcLmOg9LkN2ZOtLV9TEiVLQ==", "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", + "@storybook/core-common": "7.6.16", + "@storybook/preview-api": "7.6.16", + "@storybook/types": "7.6.16", "@types/doctrine": "^0.0.3", + "assert": "^2.1.0", "doctrine": "^3.0.0", "lodash": "^4.17.21" }, @@ -9278,9 +11034,9 @@ "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.16.tgz", + "integrity": "sha512-CPDhgT4jjF0CDgLDxT/R+amMJXpXxSsVp+XzahPbEB9Yu4v0W0HW3f2vSuNJXwpfofrPSkbJweO/oC4ioOtavw==", "dev": true, "funding": { "type": "opencollective", @@ -9288,34 +11044,29 @@ } }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.16.tgz", + "integrity": "sha512-pX3xw4DsPhYTWEDspsnJiZSoakn0z3Rdt9YmHU0/NaFBLn64EClzd9XMDnGXnZzW1DtdG6T6l2CwDNDCNIVkWg==", "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/channels": "7.6.16", + "@storybook/client-logger": "7.6.16", + "@storybook/core-events": "7.6.16", + "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/router": "7.0.4", - "@storybook/theming": "7.0.4", - "@storybook/types": "7.0.4", + "@storybook/router": "7.6.16", + "@storybook/theming": "7.6.16", + "@storybook/types": "7.6.16", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", - "semver": "^7.3.7", "store2": "^2.14.2", - "telejson": "^7.0.3", + "telejson": "^7.2.0", "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": { @@ -9325,77 +11076,19 @@ "dev": true }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.16.tgz", + "integrity": "sha512-s18wgtLynLWnunz47lkVIpjk8J6LxT/OmfzkggieU8cG2XYRbf//t7/EOUpOqK77+Xqm3epSwgDAxOXGfjOjAA==", "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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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==", - "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/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.16.tgz", + "integrity": "sha512-axWxj8e90+iLUZPGU9Zvn2Jc/GQrWspu8DpwRCS7N23epTVW6n6OWp31GAShdSx8Oh5lmCMXGegTd1v2Mwc61A==", "dev": true, "funding": { "type": "opencollective", @@ -9403,9 +11096,9 @@ } }, "node_modules/@storybook/preview": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.0.4.tgz", - "integrity": "sha512-4KQudrOxX7wylMLv0fDMI8RzPI6oSxbFsiR2ilufjyziMCkjxo48Pe1NBCPWeEedY6pUdfh8+iJ7P2Bcvi1nTQ==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.16.tgz", + "integrity": "sha512-q4DbLn9kEK8JM9s+2oIjXBPHQhY0tQzsZ5hFeq833vNFcmuHnXS+WYk20b+UkmzL6j+E8pLm8WpI7rdbi0ZUVA==", "dev": true, "funding": { "type": "opencollective", @@ -9413,18 +11106,17 @@ } }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.16.tgz", + "integrity": "sha512-V9x9HOhi4CJuiX+0a7GU0JlfRAp6txStGMkV0DrCATbxSWpK+6d5x2Te521z16V3RIMMmYn33aEyarOp5WjTqw==", "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/channels": "7.6.16", + "@storybook/client-logger": "7.6.16", + "@storybook/core-events": "7.6.16", + "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.0.4", + "@storybook/types": "7.6.16", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -9440,9 +11132,9 @@ } }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.16.tgz", + "integrity": "sha512-F6pGgL2pWy5utn6m2YAVz1PYZO3pdlNHfT85g5Om3q7CR4msWpMQ1O/oEVYgqfJ9UfOqCV/mHeDWICzUa7pv6g==", "dev": true, "funding": { "type": "opencollective", @@ -9454,52 +11146,33 @@ } }, "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==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.16.tgz", + "integrity": "sha512-PgVuzs83g4dq2r1qdcc0wvS1Pe1UpKdq54uy4TkBrrei7hBzB/+POztPXs0rVXXBXdCQT/jomLmRo/yC45bsGg==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", + "@storybook/client-logger": "7.6.16", "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/store": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-7.0.4.tgz", - "integrity": "sha512-ghmV/I4O0Kz/3/JBO22j1DESuqfwNA+5bFifeatAT344mtSwjCz9lwC/WvhWgoo2bZKL2CcrKPTt9iSQWfNo8w==", - "dev": true, - "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/preview-api": "7.0.4" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, "node_modules/@storybook/telemetry": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.0.4.tgz", - "integrity": "sha512-J05HkLsRTgHyXlOKqlxiAdr1VWNvvWBGOpemSWPDk9IJEHTCBEQeJT3ewRMfy3IVHp6jt++oCPeO5gRZjbir8Q==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.16.tgz", + "integrity": "sha512-5Uaz6zSRBEio89ScrAN7KKz+mBTJ5Jc/8Uf0uUHIhAxiHprs16PhIBo6MtBeWPQoiNwytN884sAtiUFAP4zFQQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.0.4", - "@storybook/core-common": "7.0.4", + "@storybook/client-logger": "7.6.16", + "@storybook/core-common": "7.6.16", + "@storybook/csf-tools": "7.6.16", "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" }, "funding": { @@ -9560,13 +11233,13 @@ } }, "node_modules/@storybook/theming": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.4.tgz", - "integrity": "sha512-BahlmB86Q9wlvUT9Otx7vmJ7IAiytCBYyx5uLY3Ypt4JHyh5dT8UI8u4uowor9QW20YdfwPSIdaJwF1qzVuWNg==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.16.tgz", + "integrity": "sha512-ZiUyakApTzAiAR28JwqbqY426U1OlJPG/Y7ddQgYgTsdoRFR1iMewAxWW1LId1q3B1dtiIHAccqhocEMNcYkLA==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.0.4", + "@storybook/client-logger": "7.6.16", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -9580,15 +11253,15 @@ } }, "node_modules/@storybook/types": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.0.4.tgz", - "integrity": "sha512-CRGugXpTJ3K3IGuSyHA+/r2nmZluWkgRBGpbl1OQlGY/vAI7YlrJhLg1Lwf5dp66etUsjZN6d/vJeivNcyD68g==", + "version": "7.6.16", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.16.tgz", + "integrity": "sha512-Ld4dKbgSbvqThdBNwNlOxQu5AiS6U9DXI5evf/j83eWs6skO3OBdQp+GWa6sUCI9eRqH8tFsw/YmMcIZ4uZrBQ==", "dev": true, "dependencies": { - "@storybook/channels": "7.0.4", + "@storybook/channels": "7.6.16", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", - "file-system-cache": "^2.0.0" + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", @@ -10143,9 +11816,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" @@ -10344,6 +12017,15 @@ "@types/node": "*" } }, + "node_modules/@types/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -10370,6 +12052,12 @@ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", "dev": true }, + "node_modules/@types/emscripten": { + "version": "1.39.10", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz", + "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.56.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", @@ -10426,26 +12114,6 @@ "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", "dev": true }, - "node_modules/@types/fs-extra": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", - "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", - "dev": true, - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dev": true, - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -10535,15 +12203,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/jsonfile": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -10577,12 +12236,6 @@ "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", "dev": true }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -10624,15 +12277,6 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "node_modules/@types/npmlog": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.6.tgz", - "integrity": "sha512-0l3z16vnlJGl2Mi/rgJFrdwfLZ4jfNYgE6ZShEpjqhHuGTqdEzNles03NpYHwUMVYZa+Tj46UxKIEpE78lQ3DQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -10657,15 +12301,6 @@ "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", "dev": true }, - "node_modules/@types/ramda": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.3.tgz", - "integrity": "sha512-Yh/RHkjN0ru6LVhSQtTkCRo6HXkfL9trot/2elzM/yXLJmbLm2v6kJc8yftTnwv1zvUob6TEtqI2cYjdqG3U0Q==", - "dev": true, - "dependencies": { - "types-ramda": "^0.29.4" - } - }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", @@ -10839,6 +12474,12 @@ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dev": true }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, "node_modules/@types/webpack-env": { "version": "1.18.4", "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.4.tgz", @@ -11275,6 +12916,44 @@ "esbuild": ">=0.10.0" } }, + "node_modules/@yarnpkg/fslib": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", + "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "dev": true, + "dependencies": { + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", + "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "dev": true, + "dependencies": { + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", @@ -11519,15 +13198,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", @@ -11659,19 +13329,6 @@ } ] }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -11687,6 +13344,18 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/aria-query": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", @@ -12072,12 +13741,6 @@ "node": ">=8" } }, - "node_modules/babel-plugin-named-exports-order": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", - "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", - "dev": true - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -12176,31 +13839,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": { @@ -12493,92 +14140,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", @@ -13062,9 +14623,9 @@ } }, "node_modules/citty": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.5.tgz", - "integrity": "sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dev": true, "dependencies": { "consola": "^3.2.3" @@ -13079,6 +14640,12 @@ "node": "^14.18.0 || >=16.10.0" } }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -13109,18 +14676,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", @@ -13670,6 +15225,12 @@ "node": "> 0.10" } }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -15325,6 +16886,12 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "dev": true + }, "node_modules/detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -15537,9 +17104,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, "engines": { "node": ">=12" @@ -16168,9 +17735,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" @@ -17184,13 +18751,11 @@ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "node_modules/file-system-cache": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.4.4.tgz", - "integrity": "sha512-vCYhn8pb5nlC3Gs2FFCOkmf4NEg2Ym3ulJwkmS9o6p9oRShGj6CwTMFvpgZihBlsh373NaM0XgAgDHXQIlS4LQ==", + "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": { - "@types/fs-extra": "11.0.1", - "@types/ramda": "0.29.3", "fs-extra": "11.1.1", "ramda": "0.29.0" } @@ -17462,9 +19027,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.228.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.228.0.tgz", - "integrity": "sha512-xPWkzCO07AnS8X+fQFpWm+tJ+C7aeaiVzJ+rSepbkCXUvUJ6l6squEl63axoMcixyH4wLjmypOzq/+zTD0O93w==", + "version": "0.229.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.229.0.tgz", + "integrity": "sha512-mOYmMuvJwAo/CvnMFEq4SHftq7E5188hYMTTxJyQOXk2nh+sgslRdYMw3wTthH+FMcFaZLtmBPuMu6IwztdoUQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -17542,9 +19107,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.3.0.tgz", - "integrity": "sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", + "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", @@ -17566,13 +19131,7 @@ }, "peerDependencies": { "typescript": ">3.6.0", - "vue-template-compiler": "*", "webpack": "^5.11.0" - }, - "peerDependenciesMeta": { - "vue-template-compiler": { - "optional": true - } } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { @@ -17883,26 +19442,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -17938,6 +19477,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/get-npm-tarball-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz", @@ -18238,25 +19786,6 @@ "node": ">= 6" } }, - "node_modules/glob-promise": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-6.0.5.tgz", - "integrity": "sha512-uUzvxo60yo/vMLXZHCNAlfdM5U5A07jCnUO8xTK44Z0Vc58poGDXhDx8ju1DmPdprOORh+4Lpog64hl+AJ5piA==", - "dev": true, - "dependencies": { - "@types/glob": "^8.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/ahmadnassri" - }, - "peerDependencies": { - "glob": "^8.0.3" - } - }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -19246,15 +20775,6 @@ "node": ">= 0.4" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -19265,9 +20785,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/ip-address": { @@ -19875,16 +21395,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", @@ -20443,20 +21953,21 @@ "dev": true }, "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.1.tgz", + "integrity": "sha512-hIJfxUy8Rt4HkJn/zZPU9ChKfKZM1342waJ1QC2e2YsPcWhM+3BJ4dcfQCzArTrk1jJeNLB341H+qOcEHRxJZg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/parser": "^7.23.0", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/preset-flow": "^7.22.15", + "@babel/preset-typescript": "^7.23.0", + "@babel/register": "^7.22.15", "babel-core": "^7.0.0-bridge.0", "chalk": "^4.1.2", "flow-parser": "0.*", @@ -20464,7 +21975,7 @@ "micromatch": "^4.0.4", "neo-async": "^2.5.0", "node-dir": "^0.1.17", - "recast": "^0.21.0", + "recast": "^0.23.3", "temp": "^0.8.4", "write-file-atomic": "^2.3.0" }, @@ -20473,6 +21984,11 @@ }, "peerDependencies": { "@babel/preset-env": "^7.1.6" + }, + "peerDependenciesMeta": { + "@babel/preset-env": { + "optional": true + } } }, "node_modules/jscodeshift/node_modules/ansi-styles": { @@ -20481,25 +21997,13 @@ "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/jscodeshift/node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jscodeshift/node_modules/chalk": { @@ -20527,30 +22031,6 @@ "node": ">=8" } }, - "node_modules/jscodeshift/node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dev": true, - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jscodeshift/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jscodeshift/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23223,18 +24703,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -26179,15 +27647,6 @@ "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/react-inspector": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", - "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", - "dev": true, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -26209,6 +27668,76 @@ "react": "*" } }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dev": true, + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.5.tgz", + "integrity": "sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==", + "dev": true, + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dev": true, + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -26587,18 +28116,6 @@ "node": ">=0.10.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -27376,34 +28893,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", @@ -27592,65 +29081,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shelljs/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/shelljs/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/side-channel": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", @@ -27778,27 +29208,6 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "dev": true }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -28307,9 +29716,9 @@ } }, "node_modules/store2": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", - "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", + "version": "2.14.3", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz", + "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==", "dev": true }, "node_modules/stream-shift": { @@ -28914,6 +30323,19 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/swc-loader": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz", + "integrity": "sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==", + "dev": true, + "dependencies": { + "@swc/counter": "^0.1.3" + }, + "peerDependencies": { + "@swc/core": "^1.2.147", + "webpack": ">=2" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -29535,6 +30957,12 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "dev": true + }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -29573,6 +31001,12 @@ "node": ">=8.0" } }, + "node_modules/tocbot": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.25.0.tgz", + "integrity": "sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==", + "dev": true + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -29743,12 +31177,6 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "node_modules/ts-toolbelt": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "dev": true - }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -29762,14 +31190,17 @@ } }, "node_modules/tsconfig-paths-webpack-plugin": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", - "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", "dev": true, "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^3.9.0" + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { @@ -29824,6 +31255,20 @@ "node": ">=8" } }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -30077,15 +31522,6 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "node_modules/types-ramda": { - "version": "0.29.7", - "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.7.tgz", - "integrity": "sha512-8KBxZGJwUF3MpRkkJauSpvfHXk8Ssq15QXGuCBTDGeKd9PfheokkC3wAKRV3djej9O31Qa5M7Owsg8hF0GjtAw==", - "dev": true, - "dependencies": { - "ts-toolbelt": "^9.6.0" - } - }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -30168,12 +31604,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", @@ -30308,17 +31738,23 @@ } }, "node_modules/unplugin": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-0.10.2.tgz", - "integrity": "sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.7.1.tgz", + "integrity": "sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.11.3", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.4.5" + "webpack-virtual-modules": "^0.6.1" } }, + "node_modules/unplugin/node_modules/webpack-virtual-modules": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", + "dev": true + }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -30367,6 +31803,16 @@ "punycode": "^2.1.0" } }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -30467,6 +31913,33 @@ "requires-port": "^1.0.0" } }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/use-callback-ref": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz", + "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-resize-observer": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", @@ -30480,6 +31953,28 @@ "react-dom": "16.8.0 - 18" } }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dev": true, + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -30529,13 +32024,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/uuid-browser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz", - "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==", - "deprecated": "Package no longer supported and required. Use the uuid package or crypto.randomUUID instead", - "dev": true - }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -30871,9 +32359,9 @@ } }, "node_modules/webpack-virtual-modules": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", - "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "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/webpack/node_modules/ajv": { @@ -31084,18 +32572,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/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 6f40566d..1145fad7 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -1,8 +1,9 @@ import { NO_ERRORS_SCHEMA } from '@angular/core' import { TestBed } from '@angular/core/testing' -import { AppComponent } from './app.component' import { RouterTestingModule } from '@angular/router/testing' +import { AppComponent } from 'src/app/app.component' + describe('AppComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ diff --git a/src/app/services/menu-state.service.spec.ts b/src/app/services/menu-state.service.spec.ts index 88066b38..39a4b1d1 100644 --- a/src/app/services/menu-state.service.spec.ts +++ b/src/app/services/menu-state.service.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing' import { HttpClientTestingModule } from '@angular/common/http/testing' -import { MenuStateService } from './menu-state.service' +import { MenuStateService } from 'src/app/services/menu-state.service' describe('MenuStateService', () => { let service: MenuStateService diff --git a/src/app/services/menu-state.service.ts b/src/app/services/menu-state.service.ts index 4fc59596..fd7d7c04 100644 --- a/src/app/services/menu-state.service.ts +++ b/src/app/services/menu-state.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core' -import { MenuItem } from '../shared/generated' +import { MenuItem } from 'src/app/shared/generated' export interface MenuState { selectedPortal?: string diff --git a/src/app/services/menu-tree.service.spec.ts b/src/app/services/menu-tree.service.spec.ts index 8340670c..e8000876 100644 --- a/src/app/services/menu-tree.service.spec.ts +++ b/src/app/services/menu-tree.service.spec.ts @@ -2,8 +2,8 @@ import { TestBed } from '@angular/core/testing' import { HttpClientTestingModule } from '@angular/common/http/testing' import { TreeNode } from 'primeng/api' -import { MenuTreeService } from './menu-tree.service' -import { /* MenuItemDetailsDTO, MenuItemStructureDTO, */ MenuItem } from '../shared/generated' +import { MenuTreeService } from 'src/app/services/menu-tree.service' +import { MenuItem } from 'src/app/shared/generated' describe('MenuTreeService', () => { let service: MenuTreeService diff --git a/src/app/services/menu-tree.service.ts b/src/app/services/menu-tree.service.ts index b313ab5a..4b25503a 100644 --- a/src/app/services/menu-tree.service.ts +++ b/src/app/services/menu-tree.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core' import { TreeNode } from 'primeng/api' -import { MenuItem } from '../shared/generated' +import { MenuItem } from 'src/app/shared/generated' export interface NewPosition { id: string | undefined diff --git a/src/app/shared/generated/.openapi-generator/FILES b/src/app/shared/generated/.openapi-generator/FILES index 3a6fe4bc..9d16fe47 100644 --- a/src/app/shared/generated/.openapi-generator/FILES +++ b/src/app/shared/generated/.openapi-generator/FILES @@ -16,7 +16,7 @@ model/createProductRequest.ts model/createUpdateMenuItem.ts model/createUpdateMicrofrontend.ts model/createUpdateProductResponse.ts -model/createWorkspaceMenuItemStructrueRequest.ts +model/createWorkspaceMenuItemStructureRequest.ts model/createWorkspaceRequest.ts model/createWorkspaceResponse.ts model/eximMenuStructure.ts diff --git a/src/app/shared/generated/api/workspace.service.ts b/src/app/shared/generated/api/workspace.service.ts index 159a6d12..1d13b6f6 100644 --- a/src/app/shared/generated/api/workspace.service.ts +++ b/src/app/shared/generated/api/workspace.service.ts @@ -37,6 +37,8 @@ import { SearchWorkspacesResponse } from '../model/searchWorkspacesResponse'; // @ts-ignore import { UpdateWorkspaceRequest } from '../model/updateWorkspaceRequest'; // @ts-ignore +import { Workspace } from '../model/workspace'; +// @ts-ignore import { WorkspaceSnapshot } from '../model/workspaceSnapshot'; // @ts-ignore @@ -655,9 +657,9 @@ export class WorkspaceAPIService { * @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 updateWorkspace(requestParameters: UpdateWorkspaceRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; - public updateWorkspace(requestParameters: UpdateWorkspaceRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; - public updateWorkspace(requestParameters: UpdateWorkspaceRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public updateWorkspace(requestParameters: UpdateWorkspaceRequestParams, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable; + public updateWorkspace(requestParameters: UpdateWorkspaceRequestParams, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; + public updateWorkspace(requestParameters: UpdateWorkspaceRequestParams, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable>; public updateWorkspace(requestParameters: UpdateWorkspaceRequestParams, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext}): Observable { const id = requestParameters.id; if (id === null || id === undefined) { @@ -706,7 +708,7 @@ export class WorkspaceAPIService { } let localVarPath = `/workspaces/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; - return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, + return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, { context: localVarHttpContext, body: updateWorkspaceRequest, diff --git a/src/app/shared/generated/model/createWorkspaceMenuItemStructrueRequest.ts b/src/app/shared/generated/model/createWorkspaceMenuItemStructrueRequest.ts deleted file mode 100644 index 429e3a05..00000000 --- a/src/app/shared/generated/model/createWorkspaceMenuItemStructrueRequest.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * onecx-workspace-bff - * OneCx workspace Bff - * - * The version of the OpenAPI document: 1.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 { MenuItem } from './menuItem'; - - -export interface CreateWorkspaceMenuItemStructrueRequest { - menuItems?: Array; -} - diff --git a/src/app/shared/image-container/image-container.component.ts b/src/app/shared/image-container/image-container.component.ts index 3b963311..da30c3ef 100644 --- a/src/app/shared/image-container/image-container.component.ts +++ b/src/app/shared/image-container/image-container.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges, SimpleChanges } from '@angular/core' -import { environment } from '../../../environments/environment' +import { environment } from 'src/environments/environment' @Component({ selector: 'app-image-container', diff --git a/src/app/shared/label.resolver.spec.ts b/src/app/shared/label.resolver.spec.ts index e629df1b..da9687fa 100644 --- a/src/app/shared/label.resolver.spec.ts +++ b/src/app/shared/label.resolver.spec.ts @@ -1,5 +1,5 @@ import { Observable, of } from 'rxjs' -import { LabelResolver } from './label.resolver' +import { LabelResolver } from 'src/app/shared/label.resolver' let labelResolver: LabelResolver diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 38eedd54..dd668e70 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -41,7 +41,7 @@ import { import { Configuration } from 'src/app/shared/generated' import { environment } from 'src/environments/environment' -import { LabelResolver } from './label.resolver' +import { LabelResolver } from 'src/app/shared/label.resolver' import { ImageContainerComponent } from './image-container/image-container.component' import { ThemeColorBoxComponent } from './theme-color-box/theme-color-box.component' diff --git a/src/app/shared/theme-color-box/theme-color-box.component.spec.ts b/src/app/shared/theme-color-box/theme-color-box.component.spec.ts index 007e5607..f4188f85 100644 --- a/src/app/shared/theme-color-box/theme-color-box.component.spec.ts +++ b/src/app/shared/theme-color-box/theme-color-box.component.spec.ts @@ -1,39 +1,39 @@ -// import { NO_ERRORS_SCHEMA } from '@angular/core' -// import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' -// // import { HttpClient } from '@angular/common/http' -// import { HttpClientTestingModule } from '@angular/common/http/testing' -// // import { TranslateLoader, TranslateModule } from '@ngx-translate/core' +import { NO_ERRORS_SCHEMA } from '@angular/core' +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' +// import { HttpClient } from '@angular/common/http' +import { HttpClientTestingModule } from '@angular/common/http/testing' +// import { TranslateLoader, TranslateModule } from '@ngx-translate/core' -// import { ThemeColorBoxComponent } from './theme-color-box.component' +import { ThemeColorBoxComponent } from './theme-color-box.component' -// describe('ThemeColorBoxComponent', () => { -// let component: ThemeColorBoxComponent -// let fixture: ComponentFixture +describe('ThemeColorBoxComponent', () => { + let component: ThemeColorBoxComponent + let fixture: ComponentFixture -// beforeEach(waitForAsync(() => { -// TestBed.configureTestingModule({ -// declarations: [ThemeColorBoxComponent], -// imports: [ -// HttpClientTestingModule -// /* TranslateModule.forRoot({ -// loader: { -// provide: TranslateLoader, -// useFactory: HttpLoaderFactory, -// deps: [HttpClient] -// } -// }) */ -// ], -// schemas: [NO_ERRORS_SCHEMA] -// }).compileComponents() -// })) + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ThemeColorBoxComponent], + imports: [ + HttpClientTestingModule + /* TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }) */ + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents() + })) -// beforeEach(() => { -// fixture = TestBed.createComponent(ThemeColorBoxComponent) -// component = fixture.componentInstance -// fixture.detectChanges() -// }) + beforeEach(() => { + fixture = TestBed.createComponent(ThemeColorBoxComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) -// it('should create', () => { -// expect(component).toBeTruthy() -// }) -// }) + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/shared/utils.ts b/src/app/shared/utils.ts index 9e62804b..43c2ad54 100644 --- a/src/app/shared/utils.ts +++ b/src/app/shared/utils.ts @@ -1,7 +1,8 @@ // import { MicrofrontendDTO } from '@onecx/portal-integration-angular' import { AbstractControl, FormArray, FormGroup } from '@angular/forms' import { SelectItem } from 'primeng/api' -import { Workspace /* , ThemeDTO */ } from './generated' + +import { Workspace /* , ThemeDTO */ } from 'src/app/shared/generated' export function limitText(text: string, limit: number): string { if (text) { diff --git a/src/app/workspace/workspace-create/workspace-create.component.spec.ts b/src/app/workspace/workspace-create/workspace-create.component.spec.ts index 7439dabb..1fd1a277 100644 --- a/src/app/workspace/workspace-create/workspace-create.component.spec.ts +++ b/src/app/workspace/workspace-create/workspace-create.component.spec.ts @@ -1,19 +1,18 @@ -/* import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' import { WorkspaceCreateComponent } from './workspace-create.component' import { TranslateModule, TranslateLoader } from '@ngx-translate/core' - import { HttpClient } from '@angular/common/http' import { HttpClientTestingModule } from '@angular/common/http/testing' import { ReactiveFormsModule } from '@angular/forms' import { RouterTestingModule } from '@angular/router/testing' import { NO_ERRORS_SCHEMA } from '@angular/core' -import { PortalFormComponent } from '../portal-form/portal-form.component' -import { By } from '@angular/platform-browser' +// import { By } from '@angular/platform-browser' import { ConfirmationService, MessageService } from 'primeng/api' import { DropdownModule } from 'primeng/dropdown' -import { environment } from '../../../environments/environment' -import { APP_CONFIG, AUTH_SERVICE } from '@onecx/portal-integration-angular' -import { PortalInternalAPIService } from '../../generated' + +import { environment } from 'src/environments/environment' +import { APP_CONFIG, AppStateService, createTranslateLoader } from '@onecx/portal-integration-angular' +// import { PortalInternalAPIService } from 'src/app/generated' describe('WorkspaceCreateComponent', () => { let component: WorkspaceCreateComponent @@ -21,24 +20,24 @@ describe('WorkspaceCreateComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [WorkspaceCreateComponent, PortalFormComponent], + declarations: [WorkspaceCreateComponent], imports: [ HttpClientTestingModule, RouterTestingModule, ReactiveFormsModule, DropdownModule, TranslateModule.forRoot({ + isolate: true, loader: { provide: TranslateLoader, - useFactory: HttpLoaderFactory2, - deps: [HttpClient] + useFactory: createTranslateLoader, + deps: [HttpClient, AppStateService] } }) ], providers: [ { provide: APP_CONFIG, useValue: environment }, - { provide: AUTH_SERVICE, useClass: IAuthMockService }, - PortalInternalAPIService, + // PortalInternalAPIService, MessageService, ConfirmationService ], @@ -56,19 +55,18 @@ describe('WorkspaceCreateComponent', () => { expect(component).toBeTruthy() }) - it('should start with values', () => { - expect(component.isIdEmpty).toBe(false, 'off at first') - expect(component.isLoading).toBe(true, 'on at first') - }) + // it('should start with values', () => { + // expect(component.isIdEmpty).toBe(false, 'off at first') + // expect(component.isLoading).toBe(true, 'on at first') + // }) - it('should display portal page', () => { - const item = fixture.debugElement.query(By.directive(PortalPageComponent)) - expect(item).toBeDefined() - }) + // it('should display portal page', () => { + // const item = fixture.debugElement.query(By.directive(PortalPageComponent)) + // expect(item).toBeDefined() + // }) - it('should display portal mgmt form', () => { - const items = fixture.debugElement.queryAll(By.directive(PortalFormComponent)) - expect(items[0]).toBeDefined() - }) + // it('should display portal mgmt form', () => { + // const items = fixture.debugElement.queryAll(By.directive(PortalFormComponent)) + // expect(items[0]).toBeDefined() + // }) }) - */ diff --git a/src/app/workspace/workspace-create/workspace-create.component.ts b/src/app/workspace/workspace-create/workspace-create.component.ts index d0ae3884..976e5f17 100644 --- a/src/app/workspace/workspace-create/workspace-create.component.ts +++ b/src/app/workspace/workspace-create/workspace-create.component.ts @@ -8,7 +8,7 @@ import { FileUpload } from 'primeng/fileupload' import { PortalMessageService, UserService } from '@onecx/portal-integration-angular' -import { LogoState } from './logo-state' +import { LogoState } from 'src/app/workspace/workspace-create/logo-state' // import { setFetchUrls , sortThemeByName } from '../../shared/utils' import { /* ImageV1APIService, */ diff --git a/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.spec.ts b/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.spec.ts index 556cb4b8..05ef85b6 100644 --- a/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.spec.ts +++ b/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.spec.ts @@ -1,190 +1,190 @@ -// import { NO_ERRORS_SCHEMA, SimpleChanges, SimpleChange } from '@angular/core' -// import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' -// // import { HttpClient } from '@angular/common/http' -// import { HttpClientTestingModule } from '@angular/common/http/testing' -// // import { TranslateLoader, TranslateModule } from '@ngx-translate/core' - -// // import { HttpLoaderFactory } from 'src/app/shared/shared.module' -// import { MenuTreeComponent } from './menu-tree.component' -// import { MenuTreeService } from 'src/app/services/menu-tree.service' -// import { MenuStateService, MenuState } from 'src/app/services/menu-state.service' - -// const state: MenuState = { -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true, -// treeExpansionState: new Map() -// } - -// const items = [ -// { key: 'key', id: 'id', i18n: { ['lang']: 'en' }, children: [{ key: 'key', id: 'id' }], disabled: true }, -// { key: 'key2', badge: 'angle-double-down', id: 'id' } -// ] - -// describe('MenuTreeComponent', () => { -// let component: MenuTreeComponent -// let fixture: ComponentFixture - -// const treeServiceSpy = jasmine.createSpyObj('MenuTreeService', ['calculateNewNodesPositions']) -// const stateServiceSpy = jasmine.createSpyObj('MenuStateService', ['getState']) - -// beforeEach(waitForAsync(() => { -// TestBed.configureTestingModule({ -// declarations: [MenuTreeComponent], -// imports: [ -// HttpClientTestingModule -// /* TranslateModule.forRoot({ -// loader: { -// provide: TranslateLoader, -// useFactory: HttpLoaderFactory, -// deps: [HttpClient] -// } -// }) */ -// ], -// schemas: [NO_ERRORS_SCHEMA], -// providers: [ -// { provide: MenuTreeService, useValue: treeServiceSpy }, -// { provide: MenuStateService, useValue: stateServiceSpy } -// ] -// }).compileComponents() -// treeServiceSpy.calculateNewNodesPositions.calls.reset() -// stateServiceSpy.getState.calls.reset() -// })) - -// beforeEach(() => { -// fixture = TestBed.createComponent(MenuTreeComponent) -// component = fixture.componentInstance -// fixture.detectChanges() -// }) - -// it('should create', () => { -// expect(component).toBeTruthy() -// }) - -// it('should set menuTreeNodes onChanges if portalDetail & changes correct: langExists false', () => { -// stateServiceSpy.getState.and.returnValue(state) -// const changes: SimpleChanges = { -// updateTree: new SimpleChange(null, component.updateTree, true) -// } -// component.portalMenuItems = items - -// component.ngOnChanges(changes) - -// expect(component.treeExpanded).toBeTrue() -// }) - -// it('should expand tree nodes on expandAll', () => { -// const mockExpansionState: Map = new Map() -// stateServiceSpy.getState.and.returnValue({ -// treeExpansionState: mockExpansionState, -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true -// }) -// component.menuTreeNodes = [ -// { key: '1', expanded: false, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, -// { key: '2' } -// ] - -// component.expandAll() - -// expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeTrue() -// }) - -// it('should collapse tree nodes on collapseAll', () => { -// const mockExpansionState: Map = new Map() -// stateServiceSpy.getState.and.returnValue({ -// treeExpansionState: mockExpansionState, -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true -// }) -// component.menuTreeNodes = [ -// { key: '1', expanded: true, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, -// { key: '2' } -// ] - -// component.collapseAll() - -// expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeFalse() -// }) - -// it('should update menu items onDrop: return before pushing items', () => { -// const event = { -// dragNode: { key: 'draggedNodeId', parent: { key: 'oldParentNodeId' } }, -// dropNode: { key: 'newParentNodeId', children: [{ key: 'draggedNodeId' }], parent: { key: 'parent key' } } -// } -// treeServiceSpy.calculateNewNodesPositions.and.returnValue([{ id: 'id', position: 1 }]) -// component.portalMenuItems = items - -// component.onDrop(event) - -// expect(treeServiceSpy.calculateNewNodesPositions).toHaveBeenCalledWith( -// 'oldParentNodeId', -// 'newParentNodeId', -// component.menuTreeNodes -// ) -// }) - -// it('should update menu items onDrop: other branches: complete updating the structure', () => { -// const event = { -// dragNode: { key: 'draggedNodeId', parent: { key: 'oldParentNodeId' } }, -// dropNode: { key: 'newParentNodeId', children: [{ key: 'otherdraggedNodeId' }], parent: { key: 'parent key' } } -// } -// treeServiceSpy.calculateNewNodesPositions.and.returnValue([{ id: 'id', position: 1 }]) -// spyOn(component.updateMenuStructureEmitter, 'emit') -// component.portalMenuItems = items -// const expectedItems = [ -// { -// key: 'key', -// id: 'id', -// parentItemId: undefined, -// i18n: { lang: 'en' }, -// position: 1, -// disabled: true, -// portalExit: undefined -// } -// ] - -// component.onDrop(event) - -// expect(component.updateMenuStructureEmitter.emit).toHaveBeenCalledWith(expectedItems) -// }) - -// it('should set treeExpansionState onHierarchyViewChange', () => { -// const mockExpansionState: Map = new Map() -// stateServiceSpy.getState.and.returnValue({ -// treeExpansionState: mockExpansionState, -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true -// }) -// const event = { node: { key: 'node', expanded: true } } -// spyOn(mockExpansionState, 'set').and.callThrough() - -// component.onHierarchyViewChange(event) - -// expect(stateServiceSpy.getState().treeExpansionState.set).toHaveBeenCalledWith(event.node.key, event.node.expanded) -// }) - -// it('should set languagePreviewValue and mapToTree onLanguagePreviewChange', () => { -// const lang = 'de' -// component.portalMenuItems = items -// const mockExpansionState: Map = new Map() -// stateServiceSpy.getState.and.returnValue({ -// treeExpansionState: mockExpansionState, -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true -// }) - -// component.onLanguagesPreviewChange(lang) - -// expect(component.languagesPreviewValue).toEqual(lang) -// }) -// }) +import { NO_ERRORS_SCHEMA, SimpleChanges, SimpleChange } from '@angular/core' +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' +// import { HttpClient } from '@angular/common/http' +import { HttpClientTestingModule } from '@angular/common/http/testing' +// import { TranslateLoader, TranslateModule } from '@ngx-translate/core' + +// import { HttpLoaderFactory } from 'src/app/shared/shared.module' +import { MenuTreeComponent } from 'src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component' +import { MenuTreeService } from 'src/app/services/menu-tree.service' +import { MenuStateService, MenuState } from 'src/app/services/menu-state.service' + +const state: MenuState = { + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true, + treeExpansionState: new Map() +} + +const items = [ + { key: 'key', id: 'id', i18n: { ['lang']: 'en' }, children: [{ key: 'key', id: 'id' }], disabled: true }, + { key: 'key2', badge: 'angle-double-down', id: 'id' } +] + +describe('MenuTreeComponent', () => { + let component: MenuTreeComponent + let fixture: ComponentFixture + + const treeServiceSpy = jasmine.createSpyObj('MenuTreeService', ['calculateNewNodesPositions']) + const stateServiceSpy = jasmine.createSpyObj('MenuStateService', ['getState']) + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [MenuTreeComponent], + imports: [ + HttpClientTestingModule + /* TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }) */ + ], + schemas: [NO_ERRORS_SCHEMA], + providers: [ + { provide: MenuTreeService, useValue: treeServiceSpy }, + { provide: MenuStateService, useValue: stateServiceSpy } + ] + }).compileComponents() + treeServiceSpy.calculateNewNodesPositions.calls.reset() + stateServiceSpy.getState.calls.reset() + })) + + beforeEach(() => { + fixture = TestBed.createComponent(MenuTreeComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) + + it('should set menuTreeNodes onChanges if workspaceDetail & changes correct: langExists false', () => { + stateServiceSpy.getState.and.returnValue(state) + const changes: SimpleChanges = { + updateTree: new SimpleChange(null, component.updateTree, true) + } + component.workspaceMenuItems = items + + component.ngOnChanges(changes) + + expect(component.treeExpanded).toBeTrue() + }) + + it('should expand tree nodes on expandAll', () => { + const mockExpansionState: Map = new Map() + stateServiceSpy.getState.and.returnValue({ + treeExpansionState: mockExpansionState, + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true + }) + component.menuTreeNodes = [ + { key: '1', expanded: false, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, + { key: '2' } + ] + + component.expandAll() + + expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeTrue() + }) + + it('should collapse tree nodes on collapseAll', () => { + const mockExpansionState: Map = new Map() + stateServiceSpy.getState.and.returnValue({ + treeExpansionState: mockExpansionState, + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true + }) + component.menuTreeNodes = [ + { key: '1', expanded: true, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, + { key: '2' } + ] + + component.collapseAll() + + expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeFalse() + }) + + it('should update menu items onDrop: return before pushing items', () => { + const event = { + dragNode: { key: 'draggedNodeId', parent: { key: 'oldParentNodeId' } }, + dropNode: { key: 'newParentNodeId', children: [{ key: 'draggedNodeId' }], parent: { key: 'parent key' } } + } + treeServiceSpy.calculateNewNodesPositions.and.returnValue([{ id: 'id', position: 1 }]) + component.workspaceMenuItems = items + + component.onDrop(event) + + expect(treeServiceSpy.calculateNewNodesPositions).toHaveBeenCalledWith( + 'oldParentNodeId', + 'newParentNodeId', + component.menuTreeNodes + ) + }) + + it('should update menu items onDrop: other branches: complete updating the structure', () => { + const event = { + dragNode: { key: 'draggedNodeId', parent: { key: 'oldParentNodeId' } }, + dropNode: { key: 'newParentNodeId', children: [{ key: 'otherdraggedNodeId' }], parent: { key: 'parent key' } } + } + treeServiceSpy.calculateNewNodesPositions.and.returnValue([{ id: 'id', position: 1 }]) + spyOn(component.updateMenuStructureEmitter, 'emit') + component.workspaceMenuItems = items + const expectedItems = [ + { + key: 'key', + id: 'id', + parentItemId: undefined, + i18n: { lang: 'en' }, + position: 1, + disabled: true, + portalExit: undefined + } + ] + + component.onDrop(event) + + expect(component.updateMenuStructureEmitter.emit).toHaveBeenCalledWith(expectedItems) + }) + + it('should set treeExpansionState onHierarchyViewChange', () => { + const mockExpansionState: Map = new Map() + stateServiceSpy.getState.and.returnValue({ + treeExpansionState: mockExpansionState, + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true + }) + const event = { node: { key: 'node', expanded: true } } + spyOn(mockExpansionState, 'set').and.callThrough() + + component.onHierarchyViewChange(event) + + expect(stateServiceSpy.getState().treeExpansionState.set).toHaveBeenCalledWith(event.node.key, event.node.expanded) + }) + + it('should set languagePreviewValue and mapToTree onLanguagePreviewChange', () => { + const lang = 'de' + component.workspaceMenuItems = items + const mockExpansionState: Map = new Map() + stateServiceSpy.getState.and.returnValue({ + treeExpansionState: mockExpansionState, + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true + }) + + component.onLanguagesPreviewChange(lang) + + expect(component.languagesPreviewValue).toEqual(lang) + }) +}) diff --git a/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.ts b/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.ts index cad9ff6b..b8688d82 100644 --- a/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.ts +++ b/src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component.ts @@ -1,9 +1,9 @@ import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core' import { SelectItem, TreeNode } from 'primeng/api' -import { MenuItem } from '../../../../shared/generated' -import { MenuTreeService } from '../../../../services/menu-tree.service' -import { MenuStateService } from '../../../../services/menu-state.service' +import { MenuItem } from 'src/app/shared/generated' +import { MenuTreeService } from 'src/app/services/menu-tree.service' +import { MenuStateService } from 'src/app/services/menu-state.service' @Component({ selector: 'app-menu-tree', diff --git a/src/app/workspace/workspace-detail/menu/menu.component.spec.ts b/src/app/workspace/workspace-detail/menu/menu.component.spec.ts index 1fda8cb9..846b8570 100644 --- a/src/app/workspace/workspace-detail/menu/menu.component.spec.ts +++ b/src/app/workspace/workspace-detail/menu/menu.component.spec.ts @@ -1,836 +1,842 @@ -// import { NO_ERRORS_SCHEMA, Component } from '@angular/core' -// import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' -// import { /* HttpClient, */ HttpErrorResponse } from '@angular/common/http' -// import { FormsModule, FormControl, FormGroup } from '@angular/forms' -// import { Location } from '@angular/common' -// import { HttpClientTestingModule } from '@angular/common/http/testing' -// import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router' -// // import { TranslateLoader, TranslateModule } from '@ngx-translate/core' -// import { of, throwError } from 'rxjs' - -// import { PortalMessageService, ConfigurationService, AUTH_SERVICE } from '@onecx/portal-integration-angular' -// // import { HttpLoaderFactory } from 'src/app/shared/shared.module' -// import { MenuComponent } from './menu.component' -// import { MenuStateService, MenuState } from 'src/app/services/menu-state.service' - -// import { Workspace, MenuItem, WorkspaceAPIService, Scope, MenuItemAPIService } from '../../../shared/generated' -// import FileSaver from 'file-saver' - -// const portal: Workspace = { -// name: 'name', -// theme: 'theme', -// baseUrl: '/some/base/url', -// id: 'id' -// } - -// const mockMenuItems: MenuItem[] = [ -// { -// name: 'menu name', -// id: 'id', -// key: 'key', -// i18n: { ['en']: 'en' }, -// children: [{ name: 'child name', key: 'key', id: 'id' }] -// }, -// { -// name: 'menu2 name', -// id: 'id', -// key: 'key', -// i18n: { ['en']: 'en' } -// } -// ] - -// const mockItem = { -// key: '1-1', -// id: 'id1', -// positionPath: '1-1', -// regMfeAligned: true, -// parentItemName: '1', -// first: true, -// last: false, -// prevId: undefined, -// disabled: true, -// parentItemId: 'some parent id', -// name: 'name', -// position: 1, -// portalExit: true, -// url: 'url', -// badge: 'badge', -// scope: Scope.Workspace, -// description: 'description' -// } - -// const state: MenuState = { -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true, -// treeExpansionState: new Map(), -// portalMenuItems: [] -// } - -// const form = new FormGroup({ -// parentItemId: new FormControl('some parent id'), -// key: new FormControl('key'), -// name: new FormControl('name'), -// position: new FormControl('1'), -// disabled: new FormControl(false), -// portalExit: new FormControl(false), -// url: new FormControl('url'), -// badge: new FormControl('badge'), -// scope: new FormControl('scope'), -// description: new FormControl('description') -// }) - -// describe('MenuComponent', () => { -// let component: MenuComponent -// let fixture: ComponentFixture -// let mockActivatedRoute: Partial -// const mockAuthService = jasmine.createSpyObj('IAuthService', ['hasPermission']) - -// const msgServiceSpy = jasmine.createSpyObj('PortalMessageService', ['success', 'error']) -// const apiServiceSpy = { -// getPortalByPortalId: jasmine.createSpy('getPortalByPortalId').and.returnValue(of({})) -// } -// const menuApiServiceSpy = { -// getMenuStructureForPortalId: jasmine.createSpy('getMenuStructureForPortalId').and.returnValue(of(mockMenuItems)), -// getMenuItemById: jasmine.createSpy('getMenuItemById').and.returnValue(of(mockMenuItems)), -// patchMenuItem: jasmine.createSpy('patchMenuItem').and.returnValue(of(mockMenuItems)), -// bulkPatchMenuItems: jasmine.createSpy('bulkPatchMenuItems').and.returnValue(of(mockMenuItems)), -// addMenuItemForPortal: jasmine.createSpy('addMenuItemForPortal').and.returnValue(of(mockMenuItems)), -// deleteMenuItemById: jasmine.createSpy('deleteMenuItemById').and.returnValue(of({})), -// uploadMenuStructure: jasmine.createSpy('uploadMenuStructure').and.returnValue(of({})) -// } -// const configServiceSpy = { -// getProperty: jasmine.createSpy('getProperty').and.returnValue('123'), -// getPortal: jasmine.createSpy('getPortal').and.returnValue({ -// themeId: '1234', -// portalName: 'test', -// baseUrl: '/', -// microfrontendRegistrations: [] -// }), -// lang: 'en' -// } -// const translateServiceSpy = jasmine.createSpyObj('TranslateService', ['get']) -// const stateServiceSpy = jasmine.createSpyObj('MenuStateService', ['getState', 'updateState']) -// const locationSpy = jasmine.createSpyObj('Location', ['back']) - -// const mockActivatedRouteSnapshot: Partial = { -// params: { -// id: 'mockId' -// } -// } -// mockActivatedRoute = { -// snapshot: mockActivatedRouteSnapshot as ActivatedRouteSnapshot -// } - -// beforeEach(waitForAsync(() => { -// TestBed.configureTestingModule({ -// declarations: [MenuComponent], -// imports: [ -// HttpClientTestingModule -// /* TranslateModule.forRoot({ -// loader: { -// provide: TranslateLoader, -// useFactory: HttpLoaderFactory, -// deps: [HttpClient] -// } -// }) */ -// ], -// schemas: [NO_ERRORS_SCHEMA], -// providers: [ -// { provide: ActivatedRoute, useValue: mockActivatedRoute }, -// { provide: PortalMessageService, useValue: msgServiceSpy }, -// { provide: WorkspaceAPIService, useValue: apiServiceSpy }, -// { provide: ConfigurationService, useValue: configServiceSpy }, -// { provide: MenuItemAPIService, useValue: menuApiServiceSpy }, -// { provide: AUTH_SERVICE, useValue: mockAuthService }, -// { provide: MenuStateService, useValue: stateServiceSpy }, -// { provide: Location, useValue: locationSpy } -// ] -// }).compileComponents() -// msgServiceSpy.success.calls.reset() -// msgServiceSpy.error.calls.reset() -// apiServiceSpy.getPortalByPortalId.calls.reset() -// menuApiServiceSpy.getMenuItemById.calls.reset() -// menuApiServiceSpy.getMenuStructureForPortalId.calls.reset() -// menuApiServiceSpy.patchMenuItem.calls.reset() -// menuApiServiceSpy.bulkPatchMenuItems.calls.reset() -// menuApiServiceSpy.addMenuItemForPortal.calls.reset() -// menuApiServiceSpy.deleteMenuItemById.calls.reset() -// menuApiServiceSpy.uploadMenuStructure.calls.reset() -// translateServiceSpy.get.calls.reset() -// stateServiceSpy.getState.calls.reset() -// })) - -// beforeEach(() => { -// stateServiceSpy.getState.and.returnValue(state) - -// fixture = TestBed.createComponent(MenuComponent) -// component = fixture.componentInstance -// // component.menuItems = state.portalMenuItems -// fixture.detectChanges() -// }) - -// it('should create', () => { -// expect(component).toBeTruthy() -// }) - -// it('should have prepared action buttons onInit: onClose, and called it', () => { -// component.ngOnInit() -// const action = component.actions[0] -// action.actionCallback() - -// expect(locationSpy.back).toHaveBeenCalled() -// }) - -// it('should have prepared action buttons onInit: onExportMenu', () => { -// spyOn(component, 'onExportMenu') - -// component.ngOnInit() -// const action = component.actions[1] -// action.actionCallback() - -// expect(component.onExportMenu).toHaveBeenCalled() -// }) - -// it('should have prepared action buttons onInit: onImportMenu', () => { -// spyOn(component, 'onImportMenu') - -// component.ngOnInit() -// const action = component.actions[2] -// action.actionCallback() - -// expect(component.onImportMenu).toHaveBeenCalled() -// }) - -// it('should call loadMenu onReload', () => { -// spyOn(component, 'loadMenu') - -// component.onReload() - -// expect(component.loadMenu).toHaveBeenCalledWith(true) -// }) - -// it('should call loadMenu onReloadMenu', () => { -// spyOn(component, 'loadMenu') - -// component.onReloadMenu() - -// expect(component.loadMenu).toHaveBeenCalledWith(true) -// }) - -// it('should empty menuTreeFiler and reset filter onClearFilterMenuTable', () => { -// const mockMenuTreeFilter = { -// nativeElement: jasmine.createSpyObj('nativeElement', ['value']) -// } -// const mockMenuTree = jasmine.createSpyObj('menuTree', ['filterGlobal']) -// component.menuTreeFilter = mockMenuTreeFilter -// component.menuTree = mockMenuTree - -// component.onClearFilterMenuTable() - -// expect(mockMenuTreeFilter.nativeElement.value).toBe('') -// expect(mockMenuTree.filterGlobal).toHaveBeenCalledWith('', 'contains') -// }) - -// it('should recursively expand all menu nodes onExpandAll', () => { -// component.menuNodes = [ -// { key: '1', expanded: false, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, -// { key: '2' } -// ] -// const mockExpansionState: Map = new Map() -// stateServiceSpy.getState.and.returnValue({ -// treeExpansionState: mockExpansionState, -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true -// }) - -// component.onExpandAll() - -// expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeTrue() -// }) - -// it('should recursively collapse all menu nodes onCollapseAll', () => { -// component.menuNodes = [ -// { key: '1', expanded: true, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, -// { key: '2' } -// ] -// const mockExpansionState: Map = new Map() -// stateServiceSpy.getState.and.returnValue({ -// treeExpansionState: mockExpansionState, -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true -// }) - -// component.onCollapseAll() - -// expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeFalse() -// }) +import { NO_ERRORS_SCHEMA, Component } from '@angular/core' +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' +import { /* HttpClient, */ HttpErrorResponse } from '@angular/common/http' +import { FormsModule, FormControl, FormGroup } from '@angular/forms' +import { Location } from '@angular/common' +import { HttpClientTestingModule } from '@angular/common/http/testing' +import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router' +// import { TranslateLoader, TranslateModule } from '@ngx-translate/core' +import { of, throwError } from 'rxjs' + +import { PortalMessageService, ConfigurationService, AUTH_SERVICE } from '@onecx/portal-integration-angular' + +import { MenuComponent } from 'src/app/workspace/workspace-detail/menu/menu.component' +import { MenuStateService, MenuState } from 'src/app/services/menu-state.service' + +import { Workspace, MenuItem, WorkspaceAPIService, Scope, MenuItemAPIService } from 'src/app/shared/generated' +import FileSaver from 'file-saver' + +const workspace: Workspace = { + name: 'name', + theme: 'theme', + baseUrl: '/some/base/url', + id: 'id' +} + +const mockMenuItems: MenuItem[] = [ + { + name: 'menu name', + id: 'id', + key: 'key', + i18n: { ['en']: 'en' }, + children: [{ name: 'child name', key: 'key', id: 'id' }] + }, + { + name: 'menu2 name', + id: 'id', + key: 'key', + i18n: { ['en']: 'en' } + } +] + +const mockItem = { + key: '1-1', + id: 'id1', + positionPath: '1-1', + regMfeAligned: true, + parentItemName: '1', + first: true, + last: false, + prevId: undefined, + disabled: true, + parentItemId: 'some parent id', + name: 'name', + position: 1, + workspaceExit: true, + url: 'url', + badge: 'badge', + scope: Scope.Workspace, + description: 'description' +} + +const state: MenuState = { + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true, + treeExpansionState: new Map(), + workspaceMenuItems: [] +} + +const form = new FormGroup({ + parentItemId: new FormControl('some parent id'), + key: new FormControl('key'), + name: new FormControl('name'), + position: new FormControl('1'), + disabled: new FormControl(false), + workspaceExit: new FormControl(false), + url: new FormControl('url'), + badge: new FormControl('badge'), + scope: new FormControl('scope'), + description: new FormControl('description') +}) + +describe('MenuComponent', () => { + let component: MenuComponent + let fixture: ComponentFixture + let mockActivatedRoute: Partial + const mockAuthService = jasmine.createSpyObj('IAuthService', ['hasPermission']) + + const msgServiceSpy = jasmine.createSpyObj('PortalMessageService', ['success', 'error']) + const apiServiceSpy = { + getPortalByPortalId: jasmine.createSpy('getPortalByPortalId').and.returnValue(of({})) + } + const menuApiServiceSpy = { + getMenuStructureForPortalId: jasmine.createSpy('getMenuStructureForPortalId').and.returnValue(of(mockMenuItems)), + getMenuItemById: jasmine.createSpy('getMenuItemById').and.returnValue(of(mockMenuItems)), + patchMenuItem: jasmine.createSpy('patchMenuItem').and.returnValue(of(mockMenuItems)), + bulkPatchMenuItems: jasmine.createSpy('bulkPatchMenuItems').and.returnValue(of(mockMenuItems)), + addMenuItemForPortal: jasmine.createSpy('addMenuItemForPortal').and.returnValue(of(mockMenuItems)), + deleteMenuItemById: jasmine.createSpy('deleteMenuItemById').and.returnValue(of({})), + uploadMenuStructure: jasmine.createSpy('uploadMenuStructure').and.returnValue(of({})) + } + const configServiceSpy = { + getProperty: jasmine.createSpy('getProperty').and.returnValue('123'), + getPortal: jasmine.createSpy('getPortal').and.returnValue({ + themeId: '1234', + portalName: 'test', + baseUrl: '/', + microfrontendRegistrations: [] + }), + lang: 'en' + } + const translateServiceSpy = jasmine.createSpyObj('TranslateService', ['get']) + const stateServiceSpy = jasmine.createSpyObj('MenuStateService', ['getState', 'updateState']) + const locationSpy = jasmine.createSpyObj('Location', ['back']) + + const mockActivatedRouteSnapshot: Partial = { + params: { + id: 'mockId' + } + } + mockActivatedRoute = { + snapshot: mockActivatedRouteSnapshot as ActivatedRouteSnapshot + } + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [MenuComponent], + imports: [ + HttpClientTestingModule + /* TranslateModule.forRoot({ + HttpClientTestingModule + /* TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }) */ + ], + schemas: [NO_ERRORS_SCHEMA], + providers: [ + { provide: ActivatedRoute, useValue: mockActivatedRoute }, + { provide: PortalMessageService, useValue: msgServiceSpy }, + { provide: WorkspaceAPIService, useValue: apiServiceSpy }, + { provide: WorkspaceAPIService, useValue: apiServiceSpy }, + { provide: ConfigurationService, useValue: configServiceSpy }, + { provide: MenuItemAPIService, useValue: menuApiServiceSpy }, + { provide: MenuItemAPIService, useValue: menuApiServiceSpy }, + { provide: AUTH_SERVICE, useValue: mockAuthService }, + { provide: MenuStateService, useValue: stateServiceSpy }, + { provide: Location, useValue: locationSpy } + ] + }).compileComponents() + msgServiceSpy.success.calls.reset() + msgServiceSpy.error.calls.reset() + apiServiceSpy.getPortalByPortalId.calls.reset() + menuApiServiceSpy.getMenuItemById.calls.reset() + menuApiServiceSpy.getMenuStructureForPortalId.calls.reset() + menuApiServiceSpy.patchMenuItem.calls.reset() + menuApiServiceSpy.bulkPatchMenuItems.calls.reset() + menuApiServiceSpy.addMenuItemForPortal.calls.reset() + menuApiServiceSpy.deleteMenuItemById.calls.reset() + menuApiServiceSpy.uploadMenuStructure.calls.reset() + translateServiceSpy.get.calls.reset() + stateServiceSpy.getState.calls.reset() + })) + + beforeEach(() => { + stateServiceSpy.getState.and.returnValue(state) + + fixture = TestBed.createComponent(MenuComponent) + component = fixture.componentInstance + // component.menuItems = state.workspaceMenuItems + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) + + it('should have prepared action buttons onInit: onClose, and called it', () => { + component.ngOnInit() + const action = component.actions[0] + action.actionCallback() + + expect(locationSpy.back).toHaveBeenCalled() + }) + + it('should have prepared action buttons onInit: onExportMenu', () => { + spyOn(component, 'onExportMenu') + + component.ngOnInit() + const action = component.actions[1] + action.actionCallback() + + expect(component.onExportMenu).toHaveBeenCalled() + }) + + it('should have prepared action buttons onInit: onImportMenu', () => { + spyOn(component, 'onImportMenu') + + component.ngOnInit() + const action = component.actions[2] + action.actionCallback() + + expect(component.onImportMenu).toHaveBeenCalled() + }) + + it('should call loadMenu onReload', () => { + spyOn(component, 'loadMenu') + + component.onReload() + + expect(component.loadMenu).toHaveBeenCalledWith(true) + }) + + it('should call loadMenu onReloadMenu', () => { + spyOn(component, 'loadMenu') + + component.onReloadMenu() + + expect(component.loadMenu).toHaveBeenCalledWith(true) + }) + + it('should empty menuTreeFiler and reset filter onClearFilterMenuTable', () => { + const mockMenuTreeFilter = { + nativeElement: jasmine.createSpyObj('nativeElement', ['value']) + } + const mockMenuTree = jasmine.createSpyObj('menuTree', ['filterGlobal']) + component.menuTreeFilter = mockMenuTreeFilter + component.menuTree = mockMenuTree + + component.onClearFilterMenuTable() + + expect(mockMenuTreeFilter.nativeElement.value).toBe('') + expect(mockMenuTree.filterGlobal).toHaveBeenCalledWith('', 'contains') + }) + + it('should recursively expand all menu nodes onExpandAll', () => { + component.menuNodes = [ + { key: '1', expanded: false, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, + { key: '2' } + ] + const mockExpansionState: Map = new Map() + stateServiceSpy.getState.and.returnValue({ + treeExpansionState: mockExpansionState, + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true + }) + + component.onExpandAll() + + expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeTrue() + }) + + it('should recursively collapse all menu nodes onCollapseAll', () => { + component.menuNodes = [ + { key: '1', expanded: true, children: [{ key: '1-1', children: [{ key: '1-1-1' }] }] }, + { key: '2' } + ] + const mockExpansionState: Map = new Map() + stateServiceSpy.getState.and.returnValue({ + treeExpansionState: mockExpansionState, + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true + }) + + component.onCollapseAll() + + expect(stateServiceSpy.getState().treeExpansionState.get('1')).toBeFalse() + }) -// it('should loadData', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of(portal)) + it('should loadData', () => { + apiServiceSpy.getPortalByPortalId.and.returnValue(of(workspace)) -// component.loadData() + component.loadData() -// expect(component.portal).toBe(portal) -// }) + expect(component.workspace).toBe(workspace) + }) -// it('it should handle error response on loadData', () => { -// const errorResponse = new HttpErrorResponse({ -// error: 'test error', -// status: 404, -// statusText: 'Not Found' -// }) -// apiServiceSpy.getPortalByPortalId.and.returnValue(throwError(() => errorResponse)) + it('it should handle error response on loadData', () => { + const errorResponse = new HttpErrorResponse({ + error: 'test error', + status: 404, + statusText: 'Not Found' + }) + apiServiceSpy.getPortalByPortalId.and.returnValue(throwError(() => errorResponse)) -// component.loadData() + component.loadData() -// expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_404.PORTALS') -// }) - -// it('it should handle exception on loadData', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of(null)) - -// component.loadData() - -// expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_0.PORTALS') -// }) - -// it('should loadMenu', () => { -// menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) - -// component.loadMenu(true) - -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.SEARCH.RELOAD.OK' }) -// }) - -// xit('should call prepareParentNodes with a node array containing children', () => { -// menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue( -// of([{ key: '1', data: { id: 'id1' }, children: [{ key: '1-1', data: { id: 'id1-1' } }] }]) -// ) - -// component.loadMenu(true) - -// expect(component.parentItems).toContain({ label: '1', value: 'id1' }) -// }) - -// it('should handle error response on loadMenu', () => { -// const errorResponse = new HttpErrorResponse({ -// error: 'test error', -// status: 404, -// statusText: 'Not Found' -// }) -// menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(throwError(() => errorResponse)) - -// component.loadMenu(true) - -// expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_0.PORTALS') -// }) - -// it('should handle exception on loadMenu', () => { -// menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(null)) - -// component.loadMenu(true) - -// expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_404.MENUS') -// }) - -// it('should set item onDeleteMenuItem', () => { -// const event: MouseEvent = new MouseEvent('type') -// const item = { -// key: '1-1', -// id: 'id1', -// positionPath: '1-1', -// regMfeAligned: true, -// parentItemName: '1', -// first: true, -// last: false, -// prevId: undefined -// } -// spyOn(event, 'stopPropagation') - -// component.onDeleteMenuItem(event, item) - -// expect(event.stopPropagation).toHaveBeenCalled() -// expect(component.menuItem).toEqual(item) -// expect(component.displayDeleteConfirmation).toBeTrue() -// }) - -// it('should delete menu item', () => { -// menuApiServiceSpy.deleteMenuItemById({ portalId: 'id', menuItemId: 'menu id' }) -// component.menuNodes = [{ key: '1', data: { id: 'id1' }, children: [{ key: '1-1', data: { id: 'id1-1' } }] }] -// component.menuItem = { -// key: '1-1', -// id: 'id1', -// position: 1.1, -// parentItemId: '1' -// } - -// component.onMenuDelete() - -// expect(component.menuNodes.length).toBe(1) -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.DELETE.MENU_DELETE_OK' }) -// }) - -// it('should display error message on delete menu item', () => { -// menuApiServiceSpy.deleteMenuItemById.and.returnValue(throwError(() => new Error())) - -// component.onMenuDelete() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.DELETE.MENU_DELETE_NOK' }) -// }) - -// xit('should get menu item onGoToDetails', () => { -// const mockMenuItem = { -// key: 'key', -// parentItemId: 'parent id', -// name: 'some name', -// position: 1 -// } -// menuApiServiceSpy.getMenuItemById.and.returnValue(of({ mockMenuItem })) -// const event: MouseEvent = new MouseEvent('type') -// const item = { -// key: '1-1', -// id: 'id1', -// positionPath: '1-1', -// regMfeAligned: true, -// parentItemName: '1', -// first: true, -// last: false, -// prevId: undefined, -// disabled: true, -// parentItemId: 'some parent id', -// name: 'name', -// position: 1, -// portalExit: true, -// url: 'url', -// badge: 'badge', -// scope: Scope.Workspace, -// description: 'description' -// } -// component.formGroup = form - -// component.onGotoDetails(event, item) - -// expect(component.displayMenuDetail).toBeTrue() -// }) - -// it('should toggle disable state and initiate save', () => { -// menuApiServiceSpy.patchMenuItem.and.returnValue(of({})) -// const item = { -// key: '1-1', -// id: 'id1', -// positionPath: '1-1', -// regMfeAligned: true, -// parentItemName: '1', -// first: true, -// last: false, -// prevId: undefined, -// disabled: true, -// parentItemId: 'some parent id', -// name: 'name', -// position: 1, -// portalExit: true, -// url: 'url', -// badge: 'badge', -// scope: Scope.Workspace, -// description: 'description' -// } -// const mockEvent = {} -// component.formGroup = form -// spyOn(component, 'onMenuSave') - -// component.onToggleDisable(mockEvent, item) - -// expect(component.changeMode).toBe('EDIT') -// expect(component.onMenuSave).toHaveBeenCalled() -// }) - -// it('should getState onHierarchyViewChange', () => { -// const mockExpansionState: Map = new Map() -// stateServiceSpy.getState.and.returnValue({ -// treeExpansionState: mockExpansionState, -// pageSize: 0, -// showDetails: false, -// rootFilter: true, -// treeMode: true -// }) -// const event = { node: { key: 'node', expanded: true } } -// spyOn(mockExpansionState, 'set').and.callThrough() - -// component.onHierarchyViewChange(event) - -// expect(stateServiceSpy.getState().treeExpansionState.set).toHaveBeenCalledWith(event.node.key, event.node.expanded) - -// component.onHierarchyViewChange -// }) - -// it('should update properties onCloseDetailDialog', () => { -// component.onCloseDetailDialog() - -// expect(component.menuItem).toBeUndefined() -// expect(component.displayMenuDetail).toBeFalse() -// }) - -// it('should update tabIndex onTabPanelChange', () => { -// let mockEvent = { index: 3 } - -// component.onTabPanelChange(mockEvent) - -// expect(component.tabIndex).toBe(mockEvent.index) -// }) - -// it('should set overlayVisible to true onFocusFieldUrl', () => { -// let field = { overlayVisible: false } - -// component.onFocusFieldUrl(field) - -// expect(field.overlayVisible).toBeTrue() -// }) - -// it('should remove language from languagesDisplayed, add it to languagesAvailable', () => { -// component.languagesDisplayed = [{ label: 'English', value: 'en', data: 'Data' }] -// component.languagesAvailable = [{ label: 'German', value: 'de', data: '' }] - -// component.onRemoveLanguage('en') - -// expect(component.languagesDisplayed.length).toBe(0) -// expect(component.languagesAvailable).toEqual(jasmine.arrayContaining([{ label: 'English', value: 'en', data: '' }])) -// }) - -// it('should add language to languagesDisplayed from languagesAvailable', () => { -// component.languagesDisplayed = [] -// component.languagesAvailable = [{ label: 'English', value: 'en', data: '' }] - -// component.onAddLanguage2({ option: { value: 'en' } }) - -// expect(component.languagesDisplayed).toEqual(jasmine.arrayContaining([{ label: 'English', value: 'en', data: '' }])) -// expect(component.languagesAvailable.length).toBe(0) -// }) - -// it('should add language to languagesDisplayed from languagesAvailable using string value', () => { -// component.languagesDisplayed = [] -// component.languagesAvailable = [{ label: 'English', value: 'en', data: '' }] - -// component.onAddLanguage('en') - -// expect(component.languagesDisplayed).toEqual(jasmine.arrayContaining([{ label: 'English', value: 'en', data: '' }])) -// expect(component.languagesAvailable.length).toBe(0) -// }) - -// it('should return label of language if in languagesDisplayed', () => { -// component.languagesDisplayed = [{ label: 'English', value: 'en', data: '' }] - -// const label = component.getLanguageLabel('en') - -// expect(label).toBe('English') -// }) - -// it('if not in languagesDisplayed: return undefined on getLanguageLabel', () => { -// component.languagesDisplayed = [] - -// const label = component.getLanguageLabel('en') - -// expect(label).toBeUndefined() -// }) - -// it('should return true if language not in languagesDisplayed', () => { -// component.languagesDisplayed = [{ label: 'English', value: 'en', data: '' }] - -// expect(component.displayLanguageField('de')).toBeTrue() -// expect(component.displayLanguageField('en')).toBeFalse() -// }) - -// it('should return true if an object is empty', () => { -// expect(component.isObjectEmpty({})).toBeFalse() -// expect(component.isObjectEmpty({ key: 'value' })).toBeTrue() -// }) - -// it('should handle onCreateMenu correctly', () => { -// const mockEvent = jasmine.createSpyObj('MouseEvent', ['stopPropagation']) -// const mockParent = { -// key: '1-1', -// id: 'id1', -// positionPath: '1-1', -// regMfeAligned: true, -// parentItemName: '1', -// first: true, -// last: false, -// prevId: undefined, -// name: 'name' -// } -// component.onCreateMenu(mockEvent, mockParent) - -// expect(mockEvent.stopPropagation).toHaveBeenCalled() -// expect(component.changeMode).toEqual('CREATE') -// expect(component.menuItem).toEqual(mockParent) -// expect(component.formGroup.value).toEqual({ -// parentItemId: mockParent.id, -// position: 0, -// portalExit: false, -// disabled: false, -// key: null, -// name: null, -// url: null, -// badge: null, -// scope: null, -// description: null -// }) -// expect(component.displayMenuDetail).toBeTrue() -// }) - -// it('should save a menu: create', () => { -// menuApiServiceSpy.addMenuItemForPortal.and.returnValue(of({})) -// component.formGroup = form -// component.menuItem = mockItem -// component.changeMode = 'CREATE' -// component.languagesDisplayed = [{ label: 'English', value: 'en', data: 'data' }] - -// component.onMenuSave() - -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.CREATE.MESSAGE.MENU_CREATE_OK' }) -// }) - -// it('should display error message on save menu: create', () => { -// menuApiServiceSpy.addMenuItemForPortal.and.returnValue(throwError(() => new Error())) -// component.formGroup = form -// component.menuItem = mockItem -// component.changeMode = 'CREATE' - -// component.onMenuSave() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.CREATE.MESSAGE.MENU_CREATE_NOK' }) -// }) - -// it('should save a menu: edit', () => { -// menuApiServiceSpy.patchMenuItem.and.returnValue(of(mockItem)) -// component.formGroup = form -// component.menuItem = { -// key: '1-1', -// id: 'id1', -// parentItemId: '1', -// disabled: true, -// name: 'name', -// position: 1, -// url: 'url', -// badge: 'badge', -// scope: Scope.Workspace, -// description: 'description' -// } -// component.menuItems = mockMenuItems -// component.menuNodes = [ -// { key: 'key', children: [{ key: 'key', data: { i18n: { en: 'en' } } }], data: { i18n: { en: 'en' } } } -// ] -// component.changeMode = 'EDIT' -// component.displayMenuDetail = true - -// component.onMenuSave() - -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.EDIT.MESSAGE.MENU_CHANGE_OK' }) -// }) - -// it('should display error message on save menu: edit', () => { -// menuApiServiceSpy.patchMenuItem.and.returnValue(throwError(() => new Error())) -// component.formGroup = form -// component.menuItem = { -// key: '1-1', -// id: 'id1', -// parentItemId: '1', -// disabled: true, -// name: 'name', -// position: 1, -// url: 'url', -// badge: 'badge', -// scope: Scope.Workspace, -// description: 'description' -// } -// component.changeMode = 'EDIT' - -// component.onMenuSave() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.EDIT.MESSAGE.MENU_CHANGE_NOK' }) -// }) - -// it('should export a menu', () => { -// menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) -// component.workspaceName = 'name' -// component.portal = portal -// spyOn(FileSaver, 'saveAs') - -// component.onExportMenu() - -// expect(FileSaver.saveAs).toHaveBeenCalledWith( -// new Blob([], { type: 'text/json' }), -// 'workspace_' + component.portal?.name + '_menu.json' -// ) -// }) - -// it('should enable menu import onImportMenu', () => { -// component.onImportMenu() - -// expect(component.displayMenuImport).toBeTrue() -// expect(component.menuImportError).toBeFalse() -// }) - -// it('should hide menu import onImportMenuHide', () => { -// component.onImportMenuHide() - -// expect(component.displayMenuImport).toBeFalse() -// }) - -// it('should clear menu import onImportMenuClear', () => { -// component.onImportMenuClear() - -// expect(component.menuImportError).toBeFalse() -// }) - -// it('should import menu from a valid file onImportMenuSelect: success', () => { -// const validJson = JSON.stringify(mockMenuItems) -// const mockFile = new File([validJson], 'test.json', { type: 'application/json' }) -// spyOn(mockFile, 'text').and.returnValue(Promise.resolve(validJson)) -// const fileList = { 0: mockFile, length: 1, item: () => mockFile } - -// component.onImportMenuSelect({ files: fileList }) - -// expect(component.menuImportError).toBeFalse() -// }) - -// it('should import menu from a valid file onImportMenuSelect: invalid data', (done) => { -// const validJson = JSON.stringify({ invalid: 'data' }) -// const mockFile = new File([validJson], 'test.json', { type: 'application/json' }) -// spyOn(mockFile, 'text').and.returnValue(Promise.resolve(validJson)) -// const fileList = { 0: mockFile, length: 1, item: () => mockFile } -// spyOn(console, 'error') - -// component.onImportMenuSelect({ files: fileList }) - -// setTimeout(() => { -// expect(component.menuImportError).toBeTrue() -// expect(console.error).toHaveBeenCalledWith('Menu Import Error: Data not valid', jasmine.anything()) -// done() -// }, 0) -// }) - -// it('should import menu from a valid file onImportMenuSelect: parse error', (done) => { -// const invalidJson = 'not json' -// const mockFile = new File([invalidJson], 'test.json', { type: 'application/json' }) -// spyOn(mockFile, 'text').and.returnValue(Promise.resolve(invalidJson)) -// const fileList = { 0: mockFile, length: 1, item: () => mockFile } -// spyOn(console, 'error') - -// component.onImportMenuSelect({ files: fileList }) - -// setTimeout(() => { -// expect(component.menuImportError).toBeTrue() -// /* expect(console.error).toHaveBeenCalledWith( -// 'Menu Import Parse Error', -// new SyntaxError('Unexpected token \'o\', "not json" is not valid JSON') -// ) */ -// done() -// }, 0) -// }) - -// it('should handle menu import', () => { -// component.workspaceName = 'name' -// spyOn(component, 'ngOnInit') -// menuApiServiceSpy.uploadMenuStructure.and.returnValue(of({})) - -// component.onMenuImport() + expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_404.PORTALS') + }) + + it('it should handle exception on loadData', () => { + apiServiceSpy.getPortalByPortalId.and.returnValue(of(null)) + + component.loadData() + + expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_0.PORTALS') + }) + + it('should loadMenu', () => { + menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) + + component.loadMenu(true) + + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.SEARCH.RELOAD.OK' }) + }) + + xit('should call prepareParentNodes with a node array containing children', () => { + menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue( + of([{ key: '1', data: { id: 'id1' }, children: [{ key: '1-1', data: { id: 'id1-1' } }] }]) + ) + + component.loadMenu(true) + + expect(component.parentItems).toContain({ label: '1', value: 'id1' }) + }) + + it('should handle error response on loadMenu', () => { + const errorResponse = new HttpErrorResponse({ + error: 'test error', + status: 404, + statusText: 'Not Found' + }) + menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(throwError(() => errorResponse)) + + component.loadMenu(true) + + expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_0.PORTALS') + }) + + it('should handle exception on loadMenu', () => { + menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(null)) + + component.loadMenu(true) + + expect(component.exceptionKey).toBe('EXCEPTIONS.HTTP_STATUS_404.MENUS') + }) + + it('should set item onDeleteMenuItem', () => { + const event: MouseEvent = new MouseEvent('type') + const item = { + key: '1-1', + id: 'id1', + positionPath: '1-1', + regMfeAligned: true, + parentItemName: '1', + first: true, + last: false, + prevId: undefined + } + spyOn(event, 'stopPropagation') + + component.onDeleteMenuItem(event, item) + + expect(event.stopPropagation).toHaveBeenCalled() + expect(component.menuItem).toEqual(item) + expect(component.displayDeleteConfirmation).toBeTrue() + }) + + it('should delete menu item', () => { + menuApiServiceSpy.deleteMenuItemById({ portalId: 'id', menuItemId: 'menu id' }) + component.menuNodes = [{ key: '1', data: { id: 'id1' }, children: [{ key: '1-1', data: { id: 'id1-1' } }] }] + component.menuItem = { + key: '1-1', + id: 'id1', + position: 1.1, + parentItemId: '1' + } + + component.onMenuDelete() + + expect(component.menuNodes.length).toBe(1) + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.DELETE.MENU_DELETE_OK' }) + }) + + it('should display error message on delete menu item', () => { + menuApiServiceSpy.deleteMenuItemById.and.returnValue(throwError(() => new Error())) + + component.onMenuDelete() + + expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.DELETE.MENU_DELETE_NOK' }) + }) + + xit('should get menu item onGoToDetails', () => { + const mockMenuItem = { + key: 'key', + parentItemId: 'parent id', + name: 'some name', + position: 1 + } + menuApiServiceSpy.getMenuItemById.and.returnValue(of({ mockMenuItem })) + const event: MouseEvent = new MouseEvent('type') + const item = { + key: '1-1', + id: 'id1', + positionPath: '1-1', + regMfeAligned: true, + parentItemName: '1', + first: true, + last: false, + prevId: undefined, + disabled: true, + parentItemId: 'some parent id', + name: 'name', + position: 1, + portalExit: true, + url: 'url', + badge: 'badge', + scope: Scope.Workspace, + description: 'description' + } + component.formGroup = form + + component.onGotoDetails(event, item) + + expect(component.displayMenuDetail).toBeTrue() + }) + + it('should toggle disable state and initiate save', () => { + menuApiServiceSpy.patchMenuItem.and.returnValue(of({})) + const item = { + key: '1-1', + id: 'id1', + positionPath: '1-1', + regMfeAligned: true, + parentItemName: '1', + first: true, + last: false, + prevId: undefined, + disabled: true, + parentItemId: 'some parent id', + name: 'name', + position: 1, + portalExit: true, + url: 'url', + badge: 'badge', + scope: Scope.Workspace, + description: 'description' + } + const mockEvent = {} + component.formGroup = form + spyOn(component, 'onMenuSave') + + component.onToggleDisable(mockEvent, item) + + expect(component.changeMode).toBe('EDIT') + expect(component.onMenuSave).toHaveBeenCalled() + }) + + it('should getState onHierarchyViewChange', () => { + const mockExpansionState: Map = new Map() + stateServiceSpy.getState.and.returnValue({ + treeExpansionState: mockExpansionState, + pageSize: 0, + showDetails: false, + rootFilter: true, + treeMode: true + }) + const event = { node: { key: 'node', expanded: true } } + spyOn(mockExpansionState, 'set').and.callThrough() + + component.onHierarchyViewChange(event) + + expect(stateServiceSpy.getState().treeExpansionState.set).toHaveBeenCalledWith(event.node.key, event.node.expanded) + + component.onHierarchyViewChange + }) + + it('should update properties onCloseDetailDialog', () => { + component.onCloseDetailDialog() + + expect(component.menuItem).toBeUndefined() + expect(component.displayMenuDetail).toBeFalse() + }) + + it('should update tabIndex onTabPanelChange', () => { + let mockEvent = { index: 3 } + + component.onTabPanelChange(mockEvent) + + expect(component.tabIndex).toBe(mockEvent.index) + }) + + it('should set overlayVisible to true onFocusFieldUrl', () => { + let field = { overlayVisible: false } + + component.onFocusFieldUrl(field) + + expect(field.overlayVisible).toBeTrue() + }) + + it('should remove language from languagesDisplayed, add it to languagesAvailable', () => { + component.languagesDisplayed = [{ label: 'English', value: 'en', data: 'Data' }] + component.languagesAvailable = [{ label: 'German', value: 'de', data: '' }] + + component.onRemoveLanguage('en') + + expect(component.languagesDisplayed.length).toBe(0) + expect(component.languagesAvailable).toEqual(jasmine.arrayContaining([{ label: 'English', value: 'en', data: '' }])) + }) + + it('should add language to languagesDisplayed from languagesAvailable', () => { + component.languagesDisplayed = [] + component.languagesAvailable = [{ label: 'English', value: 'en', data: '' }] + + component.onAddLanguage2({ option: { value: 'en' } }) + + expect(component.languagesDisplayed).toEqual(jasmine.arrayContaining([{ label: 'English', value: 'en', data: '' }])) + expect(component.languagesAvailable.length).toBe(0) + }) + + it('should add language to languagesDisplayed from languagesAvailable using string value', () => { + component.languagesDisplayed = [] + component.languagesAvailable = [{ label: 'English', value: 'en', data: '' }] + + component.onAddLanguage('en') + + expect(component.languagesDisplayed).toEqual(jasmine.arrayContaining([{ label: 'English', value: 'en', data: '' }])) + expect(component.languagesAvailable.length).toBe(0) + }) + + it('should return label of language if in languagesDisplayed', () => { + component.languagesDisplayed = [{ label: 'English', value: 'en', data: '' }] + + const label = component.getLanguageLabel('en') + + expect(label).toBe('English') + }) + + it('if not in languagesDisplayed: return undefined on getLanguageLabel', () => { + component.languagesDisplayed = [] + + const label = component.getLanguageLabel('en') + + expect(label).toBeUndefined() + }) + + it('should return true if language not in languagesDisplayed', () => { + component.languagesDisplayed = [{ label: 'English', value: 'en', data: '' }] + + expect(component.displayLanguageField('de')).toBeTrue() + expect(component.displayLanguageField('en')).toBeFalse() + }) + + it('should return true if an object is empty', () => { + expect(component.isObjectEmpty({})).toBeFalse() + expect(component.isObjectEmpty({ key: 'value' })).toBeTrue() + }) + + it('should handle onCreateMenu correctly', () => { + const mockEvent = jasmine.createSpyObj('MouseEvent', ['stopPropagation']) + const mockParent = { + key: '1-1', + id: 'id1', + positionPath: '1-1', + regMfeAligned: true, + parentItemName: '1', + first: true, + last: false, + prevId: undefined, + name: 'name' + } + component.onCreateMenu(mockEvent, mockParent) + + expect(mockEvent.stopPropagation).toHaveBeenCalled() + expect(component.changeMode).toEqual('CREATE') + expect(component.menuItem).toEqual(mockParent) + expect(component.formGroup.value).toEqual({ + parentItemId: mockParent.id, + position: 0, + portalExit: false, + disabled: false, + key: null, + name: null, + url: null, + badge: null, + scope: null, + description: null + }) + expect(component.displayMenuDetail).toBeTrue() + }) + + it('should save a menu: create', () => { + menuApiServiceSpy.addMenuItemForPortal.and.returnValue(of({})) + component.formGroup = form + component.menuItem = mockItem + component.changeMode = 'CREATE' + component.languagesDisplayed = [{ label: 'English', value: 'en', data: 'data' }] + + component.onMenuSave() + + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.CREATE.MESSAGE.MENU_CREATE_OK' }) + }) + + it('should display error message on save menu: create', () => { + menuApiServiceSpy.addMenuItemForPortal.and.returnValue(throwError(() => new Error())) + component.formGroup = form + component.menuItem = mockItem + component.changeMode = 'CREATE' + + component.onMenuSave() + + expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.CREATE.MESSAGE.MENU_CREATE_NOK' }) + }) + + it('should save a menu: edit', () => { + menuApiServiceSpy.patchMenuItem.and.returnValue(of(mockItem)) + component.formGroup = form + component.menuItem = { + key: '1-1', + id: 'id1', + parentItemId: '1', + disabled: true, + name: 'name', + position: 1, + url: 'url', + badge: 'badge', + scope: Scope.Workspace, + description: 'description' + } + component.menuItems = mockMenuItems + component.menuNodes = [ + { key: 'key', children: [{ key: 'key', data: { i18n: { en: 'en' } } }], data: { i18n: { en: 'en' } } } + ] + component.changeMode = 'EDIT' + component.displayMenuDetail = true + + component.onMenuSave() + + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.EDIT.MESSAGE.MENU_CHANGE_OK' }) + }) + + it('should display error message on save menu: edit', () => { + menuApiServiceSpy.patchMenuItem.and.returnValue(throwError(() => new Error())) + component.formGroup = form + component.menuItem = { + key: '1-1', + id: 'id1', + parentItemId: '1', + disabled: true, + name: 'name', + position: 1, + url: 'url', + badge: 'badge', + scope: Scope.Workspace, + description: 'description' + } + component.changeMode = 'EDIT' + + component.onMenuSave() + + expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.EDIT.MESSAGE.MENU_CHANGE_NOK' }) + }) + + it('should export a menu', () => { + menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) + component.workspaceName = 'name' + component.workspace = workspace + spyOn(FileSaver, 'saveAs') + + component.onExportMenu() + + expect(FileSaver.saveAs).toHaveBeenCalledWith( + new Blob([], { type: 'text/json' }), + 'workspace_' + component.workspace?.name + '_menu.json' + ) + }) + + it('should enable menu import onImportMenu', () => { + component.onImportMenu() + + expect(component.displayMenuImport).toBeTrue() + expect(component.menuImportError).toBeFalse() + }) + + it('should hide menu import onImportMenuHide', () => { + component.onImportMenuHide() + + expect(component.displayMenuImport).toBeFalse() + }) + + it('should clear menu import onImportMenuClear', () => { + component.onImportMenuClear() + + expect(component.menuImportError).toBeFalse() + }) + + it('should import menu from a valid file onImportMenuSelect: success', () => { + const validJson = JSON.stringify(mockMenuItems) + const mockFile = new File([validJson], 'test.json', { type: 'application/json' }) + spyOn(mockFile, 'text').and.returnValue(Promise.resolve(validJson)) + const fileList = { 0: mockFile, length: 1, item: () => mockFile } + + component.onImportMenuSelect({ files: fileList }) + + expect(component.menuImportError).toBeFalse() + }) + + it('should import menu from a valid file onImportMenuSelect: invalid data', (done) => { + const validJson = JSON.stringify({ invalid: 'data' }) + const mockFile = new File([validJson], 'test.json', { type: 'application/json' }) + spyOn(mockFile, 'text').and.returnValue(Promise.resolve(validJson)) + const fileList = { 0: mockFile, length: 1, item: () => mockFile } + spyOn(console, 'error') + + component.onImportMenuSelect({ files: fileList }) + + setTimeout(() => { + expect(component.menuImportError).toBeTrue() + expect(console.error).toHaveBeenCalledWith('Menu Import Error: Data not valid', jasmine.anything()) + done() + }, 0) + }) + + it('should import menu from a valid file onImportMenuSelect: parse error', (done) => { + const invalidJson = 'not json' + const mockFile = new File([invalidJson], 'test.json', { type: 'application/json' }) + spyOn(mockFile, 'text').and.returnValue(Promise.resolve(invalidJson)) + const fileList = { 0: mockFile, length: 1, item: () => mockFile } + spyOn(console, 'error') + + component.onImportMenuSelect({ files: fileList }) + + setTimeout(() => { + expect(component.menuImportError).toBeTrue() + /* expect(console.error).toHaveBeenCalledWith( + 'Menu Import Parse Error', + new SyntaxError('Unexpected token \'o\', "not json" is not valid JSON') + ) */ + done() + }, 0) + }) + + it('should handle menu import', () => { + component.workspaceName = 'name' + component.workspaceName = 'name' + spyOn(component, 'ngOnInit') + menuApiServiceSpy.uploadMenuStructure.and.returnValue(of({})) + + component.onMenuImport() -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'TREE.STRUCTURE_UPLOAD_SUCCESS' }) -// expect(component.ngOnInit).toHaveBeenCalled() -// }) + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'TREE.STRUCTURE_UPLOAD_SUCCESS' }) + expect(component.ngOnInit).toHaveBeenCalled() + }) -// it('should handle menu import error', () => { -// component.workspaceName = 'name' -// menuApiServiceSpy.uploadMenuStructure.and.returnValue(throwError(() => new Error())) + it('should handle menu import error', () => { + component.workspaceName = 'name' + component.workspaceName = 'name' + menuApiServiceSpy.uploadMenuStructure.and.returnValue(throwError(() => new Error())) -// component.onMenuImport() + component.onMenuImport() -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'TREE.STRUCTURE_UPLOAD_ERROR' }) -// }) + expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'TREE.STRUCTURE_UPLOAD_ERROR' }) + }) -// it('should set displayTreeModal to true onDisplayTreeModal', () => { -// component.onDisplayTreeModal() + it('should set displayTreeModal to true onDisplayTreeModal', () => { + component.onDisplayTreeModal() -// expect(component.displayTreeModal).toBeTrue() -// }) + expect(component.displayTreeModal).toBeTrue() + }) -// it('should set displayTreeModal to false onHideTreeModal', () => { -// component.onHideTreeModal() + it('should set displayTreeModal to false onHideTreeModal', () => { + component.onHideTreeModal() -// expect(component.displayTreeModal).toBeFalse() -// }) + expect(component.displayTreeModal).toBeFalse() + }) -// it('should handle successful menu item update', () => { -// menuApiServiceSpy.bulkPatchMenuItems.and.returnValue(of({})) -// spyOn(component, 'onReloadMenu') + it('should handle successful menu item update', () => { + menuApiServiceSpy.bulkPatchMenuItems.and.returnValue(of({})) + spyOn(component, 'onReloadMenu') -// component.updateMenuItems(mockMenuItems) + component.updateMenuItems(mockMenuItems) -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'TREE.EDIT_SUCCESS' }) -// expect(component.onReloadMenu).toHaveBeenCalled() -// }) + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'TREE.EDIT_SUCCESS' }) + expect(component.onReloadMenu).toHaveBeenCalled() + }) -// it('should handle menu item update error', () => { -// menuApiServiceSpy.bulkPatchMenuItems.and.returnValue(throwError(() => new Error())) + it('should handle menu item update error', () => { + menuApiServiceSpy.bulkPatchMenuItems.and.returnValue(throwError(() => new Error())) -// component.updateMenuItems(mockMenuItems) + component.updateMenuItems(mockMenuItems) -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'TREE.EDIT_ERROR' }) -// }) + expect(msgServiceSpy.error).toHaveBeenCalledWith({ summaryKey: 'TREE.EDIT_ERROR' }) + }) -// it('should call onStartResizeTree without errors', () => { -// const mockEvent = new MouseEvent('click') + it('should call onStartResizeTree without errors', () => { + const mockEvent = new MouseEvent('click') + + expect(() => component.onStartResizeTree(mockEvent)).not.toThrow() + }) -// expect(() => component.onStartResizeTree(mockEvent)).not.toThrow() -// }) + it('should set treeHeight on onEndResizeTree call', () => { + const mockClientY = 300 + const mockEvent = { clientY: mockClientY } as MouseEvent -// it('should set treeHeight on onEndResizeTree call', () => { -// const mockClientY = 300 -// const mockEvent = { clientY: mockClientY } as MouseEvent + component.onEndResizeTree(mockEvent) -// component.onEndResizeTree(mockEvent) + expect(component['treeHeight']).toEqual(mockClientY) + }) +}) -// expect(component['treeHeight']).toEqual(mockClientY) -// }) -// }) +/* Test modification of built-in Angular class registerOnChange at top of the file */ +@Component({ + template: `` +}) +class TestComponent { + value = '' +} -// /* Test modification of built-in Angular class registerOnChange at top of the file */ -// @Component({ -// template: `` -// }) -// class TestComponent { -// value = '' -// } +describe('DefaultValueAccessor prototype modification', () => { + let component: TestComponent + let fixture: ComponentFixture + let inputElement: HTMLInputElement -// describe('DefaultValueAccessor prototype modification', () => { -// let component: TestComponent -// let fixture: ComponentFixture -// let inputElement: HTMLInputElement + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TestComponent], + imports: [FormsModule] + }).compileComponents() -// beforeEach(async () => { -// await TestBed.configureTestingModule({ -// declarations: [TestComponent], -// imports: [FormsModule] -// }).compileComponents() + fixture = TestBed.createComponent(TestComponent) + component = fixture.componentInstance + fixture.detectChanges() -// fixture = TestBed.createComponent(TestComponent) -// component = fixture.componentInstance -// fixture.detectChanges() + inputElement = fixture.nativeElement.querySelector('input') + }) -// inputElement = fixture.nativeElement.querySelector('input') -// }) + it('should trim the value on model change', () => { + inputElement.value = ' test ' + inputElement.dispatchEvent(new Event('input')) + fixture.detectChanges() -// it('should trim the value on model change', () => { -// inputElement.value = ' test ' -// inputElement.dispatchEvent(new Event('input')) -// fixture.detectChanges() - -// expect(component.value).toBe('test') -// }) -// }) + expect(component.value).toBe('test') + }) +}) diff --git a/src/app/workspace/workspace-detail/menu/menu.component.ts b/src/app/workspace/workspace-detail/menu/menu.component.ts index 41c9536a..a428320f 100644 --- a/src/app/workspace/workspace-detail/menu/menu.component.ts +++ b/src/app/workspace/workspace-detail/menu/menu.component.ts @@ -23,11 +23,11 @@ import { CreateUpdateMenuItem, MenuSnapshot, PatchMenuItemsRequest -} from '../../../shared/generated' -import { limitText, dropDownSortItemsByLabel } from '../../../shared/utils' -import { MenuStringConst } from '../../..//model/menu-string-const' -import { MenuStateService } from '../../../services/menu-state.service' -import { IconService } from './iconservice' +} from 'src/app/shared/generated' +import { limitText, dropDownSortItemsByLabel } from 'src/app/shared/utils' +import { MenuStringConst } from 'src/app//model/menu-string-const' +import { MenuStateService } from 'src/app/services/menu-state.service' +import { IconService } from 'src/app/workspace/workspace-detail/menu/iconservice' type LanguageItem = SelectItem & { data: string } type I18N = { [key: string]: string } diff --git a/src/app/workspace/workspace-detail/menu/menu.module.ts b/src/app/workspace/workspace-detail/menu/menu.module.ts index b2568f91..f90b6ccb 100644 --- a/src/app/workspace/workspace-detail/menu/menu.module.ts +++ b/src/app/workspace/workspace-detail/menu/menu.module.ts @@ -5,11 +5,11 @@ import { RouterModule, Routes } from '@angular/router' import { TreeDragDropService } from 'primeng/api' import { addInitializeModuleGuard, InitializeModuleGuard, PortalCoreModule } from '@onecx/portal-integration-angular' -import { SharedModule } from '../../../shared/shared.module' +import { SharedModule } from 'src/app/shared/shared.module' -import { MenuTreeService } from '../../../services/menu-tree.service' -import { MenuTreeComponent } from './menu-tree/menu-tree.component' -import { MenuComponent } from './menu.component' +import { MenuTreeService } from 'src/app/services/menu-tree.service' +import { MenuTreeComponent } from 'src/app/workspace/workspace-detail/menu/menu-tree/menu-tree.component' +import { MenuComponent } from 'src/app/workspace/workspace-detail/menu/menu.component' const routes: Routes = [ { diff --git a/src/app/workspace/workspace-detail/products/products.component.spec.ts b/src/app/workspace/workspace-detail/products/products.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.html b/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.html index 12b7afd2..5585da31 100644 --- a/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.html +++ b/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.html @@ -6,42 +6,42 @@ - + - + - + @@ -49,14 +49,14 @@ - + @@ -64,14 +64,14 @@ - + @@ -79,14 +79,14 @@ - + @@ -94,14 +94,14 @@ - + diff --git a/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.spec.ts b/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.spec.ts index 6d1b05d9..77c17250 100644 --- a/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.spec.ts +++ b/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.spec.ts @@ -1,191 +1,180 @@ -// import { NO_ERRORS_SCHEMA } from '@angular/core' -// import { ComponentFixture, TestBed, fakeAsync, waitForAsync } from '@angular/core/testing' -// // import { HttpClient } from '@angular/common/http' -// import { HttpClientTestingModule } from '@angular/common/http/testing' -// // import { TranslateLoader, TranslateModule } from '@ngx-translate/core' -// import { FormControl, FormGroup } from '@angular/forms' -// import { of, throwError } from 'rxjs' - -// import { PortalMessageService } from '@onecx/portal-integration-angular' -// // import { HttpLoaderFactory } from 'src/app/shared/shared.module' -// import { WorkspaceContactComponent } from './workspace-contact.component' -// import { Workspace, WorkspaceAPIService } from '../../../shared/generated' - -// const portal: Workspace = { -// name: 'name', -// theme: 'theme', -// baseUrl: '/some/base/url', -// id: 'id' -// } - -// const formGroup = new FormGroup({ -// country: new FormControl('country'), -// city: new FormControl('city'), -// postalCode: new FormControl('postalCode'), -// street: new FormControl('street'), -// streetNo: new FormControl('streetNo') -// }) - -// describe('WorkspaceContactComponent', () => { -// let component: WorkspaceContactComponent -// let fixture: ComponentFixture - -// const msgServiceSpy = jasmine.createSpyObj('PortalMessageService', ['success', 'error']) -// const apiServiceSpy = { -// updatePortal: jasmine.createSpy('updatePortal').and.returnValue(of({})) -// } - -// beforeEach(waitForAsync(() => { -// TestBed.configureTestingModule({ -// declarations: [WorkspaceContactComponent], -// imports: [ -// HttpClientTestingModule -// // TranslateModule.forRoot({ -// // loader: { -// // provide: TranslateLoader, -// // useFactory: HttpLoaderFactory, -// // deps: [HttpClient] -// // } -// // }) -// ], -// schemas: [NO_ERRORS_SCHEMA], -// providers: [ -// { provide: PortalMessageService, useValue: msgServiceSpy }, -// { provide: WorkspaceAPIService, useValue: apiServiceSpy } -// ] -// }).compileComponents() -// msgServiceSpy.success.calls.reset() -// msgServiceSpy.error.calls.reset() -// apiServiceSpy.updatePortal.calls.reset() -// })) - -// beforeEach(() => { -// fixture = TestBed.createComponent(WorkspaceContactComponent) -// component = fixture.componentInstance -// fixture.detectChanges() -// }) - -// it('should create', () => { -// expect(component).toBeTruthy() -// }) - -// it('should disable formGroup if editMode false', () => { -// component.editMode = false -// component.formGroup = formGroup -// component.portalDetail = portal -// component.portalDetail.address = { -// country: 'detail country', -// city: 'detail city', -// postalCode: 'detail postalCode', -// street: 'detail street', -// streetNo: 'detail streetNo' -// } - -// component.ngOnChanges() - -// expect(component.formGroup.disabled).toBeTrue() -// }) - -// it('should setFormData onChanges: no address', () => { -// component.editMode = true -// component.formGroup = formGroup -// component.portalDetail = portal -// component.portalDetail.address = undefined - -// component.ngOnChanges() - -// expect(component.formGroup.controls['street'].value).toEqual(undefined) -// }) - -// it('should setFormData onChanges: address', () => { -// component.formGroup = formGroup -// component.portalDetail = portal -// component.portalDetail.address = { -// country: 'detail country', -// city: 'detail city', -// postalCode: 'detail postalCode', -// street: 'detail street', -// streetNo: 'detail streetNo' -// } - -// component.ngOnChanges() - -// expect(component.formGroup.controls['street'].value).toEqual('detail street') -// }) - -// it('should update portal onSubmit', () => { -// apiServiceSpy.updatePortal.and.returnValue(of({})) -// component.formGroup = new FormGroup({ -// phoneNumber: new FormControl('123456789'), -// country: new FormControl('Some country'), -// city: new FormControl('Some city'), -// postalCode: new FormControl('12345'), -// street: new FormControl('Some street'), -// streetNo: new FormControl('123') -// }) -// component.portalDetail = portal -// component.portalDetail.address = { -// country: 'detail country', -// city: 'detail city', -// postalCode: 'detail postalCode', -// street: 'detail street', -// streetNo: 'detail streetNo' -// } - -// component.onSubmit() - -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_OK' }) -// }) - -// it('should display error msg if update api call fails', fakeAsync(() => { -// apiServiceSpy.updatePortal.and.returnValue(throwError(() => new Error())) -// component.formGroup = new FormGroup({ -// phoneNumber: new FormControl('123456789'), -// country: new FormControl('Some country'), -// city: new FormControl('Some city'), -// postalCode: new FormControl('12345'), -// street: new FormControl('Some street'), -// streetNo: new FormControl('123') -// }) -// component.portalDetail = portal -// component.portalDetail.address = { -// country: 'detail country', -// city: 'detail city', -// postalCode: 'detail postalCode', -// street: 'detail street', -// streetNo: 'detail streetNo' -// } - -// component.onSubmit() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ -// summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_NOK' -// }) -// })) - -// xit('should display error msg if formGroup invalid', () => { -// const address = {} -// component.portalDetail = { ...portal, address: address } - -// component.onSubmit() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ -// summaryKey: 'GENERAL.FORM_VALIDATION' -// }) -// }) - -// it('should update portal onSubmit: no address', () => { -// apiServiceSpy.updatePortal.and.returnValue(of({})) -// const newPortal: Workspace = { -// name: 'name', -// theme: 'theme', -// baseUrl: '/some/base/url', -// id: 'id' -// } -// component.portalDetail = { ...newPortal, address: undefined } - -// component.onSubmit() - -// expect(component.portalDetail.address).toBeDefined() -// }) -// }) +import { NO_ERRORS_SCHEMA } from '@angular/core' +import { ComponentFixture, TestBed, fakeAsync, waitForAsync } from '@angular/core/testing' +import { HttpClient } from '@angular/common/http' +import { HttpClientTestingModule } from '@angular/common/http/testing' +import { TranslateLoader, TranslateModule } from '@ngx-translate/core' +import { FormControl, FormGroup } from '@angular/forms' + +import { AppStateService, createTranslateLoader, PortalMessageService } from '@onecx/portal-integration-angular' +import { WorkspaceContactComponent } from 'src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component' +import { Workspace } from 'src/app/shared/generated' + +const portal: Workspace = { + name: 'name', + theme: 'theme', + baseUrl: '/some/base/url', + id: 'id' +} + +const formGroup = new FormGroup({ + country: new FormControl('country'), + city: new FormControl('city'), + postalCode: new FormControl('postalCode'), + street: new FormControl('street'), + streetNo: new FormControl('streetNo') +}) + +describe('WorkspaceContactComponent', () => { + let component: WorkspaceContactComponent + let fixture: ComponentFixture + + const msgServiceSpy = jasmine.createSpyObj('PortalMessageService', ['success', 'error']) + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [WorkspaceContactComponent], + imports: [ + HttpClientTestingModule, + TranslateModule.forRoot({ + isolate: true, + loader: { + provide: TranslateLoader, + useFactory: createTranslateLoader, + deps: [AppStateService, HttpClient] + } + }) + ], + schemas: [NO_ERRORS_SCHEMA], + providers: [{ provide: PortalMessageService, useValue: msgServiceSpy }] + }).compileComponents() + msgServiceSpy.success.calls.reset() + msgServiceSpy.error.calls.reset() + })) + + beforeEach(() => { + fixture = TestBed.createComponent(WorkspaceContactComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) + + it('should disable formGroup if editMode false', () => { + component.editMode = false + component.formGroup = formGroup + component.workspaceDetail = portal + component.workspaceDetail.address = { + country: 'detail country', + city: 'detail city', + postalCode: 'detail postalCode', + street: 'detail street', + streetNo: 'detail streetNo' + } + + component.ngOnChanges() + + expect(component.formGroup.disabled).toBeTrue() + }) + + it('should setFormData onChanges: no address', () => { + component.editMode = true + component.formGroup = formGroup + component.workspaceDetail = portal + component.workspaceDetail.address = undefined + + component.ngOnChanges() + + expect(component.formGroup.controls['street'].value).toEqual(undefined) + }) + + it('should setFormData onChanges: address', () => { + component.formGroup = formGroup + component.workspaceDetail = portal + component.workspaceDetail.address = { + country: 'detail country', + city: 'detail city', + postalCode: 'detail postalCode', + street: 'detail street', + streetNo: 'detail streetNo' + } + + component.ngOnChanges() + + expect(component.formGroup.controls['street'].value).toEqual('detail street') + }) + + it('should update portal onSubmit', () => { + component.formGroup = new FormGroup({ + phoneNumber: new FormControl('123456789'), + country: new FormControl('Some country'), + city: new FormControl('Some city'), + postalCode: new FormControl('12345'), + street: new FormControl('Some street'), + streetNo: new FormControl('123') + }) + component.workspaceDetail = portal + component.workspaceDetail.address = { + country: 'detail country', + city: 'detail city', + postalCode: 'detail postalCode', + street: 'detail street', + streetNo: 'detail streetNo' + } + + component.onSubmit() + + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_OK' }) + }) + + it('should display error msg if update api call fails', fakeAsync(() => { + component.formGroup = new FormGroup({ + phoneNumber: new FormControl('123456789'), + country: new FormControl('Some country'), + city: new FormControl('Some city'), + postalCode: new FormControl('12345'), + street: new FormControl('Some street'), + streetNo: new FormControl('123') + }) + component.workspaceDetail = portal + component.workspaceDetail.address = { + country: 'detail country', + city: 'detail city', + postalCode: 'detail postalCode', + street: 'detail street', + streetNo: 'detail streetNo' + } + + component.onSubmit() + + expect(msgServiceSpy.error).toHaveBeenCalledWith({ + summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_NOK' + }) + })) + + xit('should display error msg if formGroup invalid', () => { + const address = {} + component.workspaceDetail = { ...portal, address: address } + + component.onSubmit() + + expect(msgServiceSpy.error).toHaveBeenCalledWith({ + summaryKey: 'GENERAL.FORM_VALIDATION' + }) + }) + + it('should update portal onSubmit: no address', () => { + const newPortal: Workspace = { + name: 'name', + theme: 'theme', + baseUrl: '/some/base/url', + id: 'id' + } + component.workspaceDetail = { ...newPortal, address: undefined } + + component.onSubmit() + + expect(component.workspaceDetail.address).toBeDefined() + }) +}) diff --git a/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.ts b/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.ts index c1984d14..e427013d 100644 --- a/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.ts +++ b/src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component.ts @@ -1,8 +1,7 @@ import { Component, Input, OnChanges } from '@angular/core' import { FormControl, FormGroup } from '@angular/forms' -import { Workspace, WorkspaceAPIService } from 'src/app/shared/generated' -import { cloneWorkspaceWithMicrofrontendsArray } from '../../../shared/utils' +import { Workspace } from 'src/app/shared/generated' import { PortalMessageService } from '@onecx/portal-integration-angular' @Component({ @@ -11,12 +10,12 @@ import { PortalMessageService } from '@onecx/portal-integration-angular' styleUrls: ['./workspace-contact.component.scss'] }) export class WorkspaceContactComponent implements OnChanges { - @Input() portalDetail!: Workspace + @Input() workspaceDetail!: Workspace @Input() editMode = false public formGroup: FormGroup - constructor(private api: WorkspaceAPIService, private msgService: PortalMessageService) { + constructor(private msgService: PortalMessageService) { this.formGroup = new FormGroup({ companyName: new FormControl(null), phoneNumber: new FormControl(null), @@ -35,33 +34,17 @@ export class WorkspaceContactComponent implements OnChanges { setFormData(): void { Object.keys(this.formGroup.controls).forEach((element) => { - if (['street', 'streetNo', 'city', 'postalCode', 'country'].includes(element) && this.portalDetail.address) { - this.formGroup.controls[element].setValue((this.portalDetail.address as any)[element]) + if (['street', 'streetNo', 'city', 'postalCode', 'country'].includes(element) && this.workspaceDetail.address) { + this.formGroup.controls[element].setValue((this.workspaceDetail.address as any)[element]) } else { - this.formGroup.controls[element].setValue((this.portalDetail as any)[element]) + this.formGroup.controls[element].setValue((this.workspaceDetail as any)[element]) } }) } onSubmit(): void { if (this.formGroup.valid) { - Object.assign(this.portalDetail, this.getPortalChangesFromForm()) - this.api - .updateWorkspace({ - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - id: this.portalDetail.id!, - updateWorkspaceRequest: { resource: cloneWorkspaceWithMicrofrontendsArray(this.portalDetail) } - }) - .subscribe({ - next: () => { - this.msgService.success({ summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_OK' }) - }, - error: () => { - this.msgService.error({ - summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_NOK' /* , detailKey: err.error.message */ - }) - } - }) + Object.assign(this.workspaceDetail, this.getPortalChangesFromForm()) this.editMode = false } else { this.msgService.error({ summaryKey: 'GENERAL.FORM_VALIDATION' }) @@ -69,7 +52,7 @@ export class WorkspaceContactComponent implements OnChanges { } } - //return the values that are different in form than in PortalDTO + //return the values that are different in form than in Workspace private getPortalChangesFromForm(): any[] { const changes: any = { address: {} @@ -77,8 +60,8 @@ export class WorkspaceContactComponent implements OnChanges { Object.keys(this.formGroup.controls).forEach((key) => { if (['street', 'streetNo', 'city', 'postalCode', 'country'].includes(key)) { - if (!this.portalDetail.address) { - this.portalDetail.address = {} + if (!this.workspaceDetail.address) { + this.workspaceDetail.address = {} } if (this.formGroup.value[key] !== undefined) { changes['address'][key] = this.formGroup.value[key] diff --git a/src/app/workspace/workspace-detail/workspace-detail.component.html b/src/app/workspace/workspace-detail/workspace-detail.component.html index b5780d95..1a4c1256 100644 --- a/src/app/workspace/workspace-detail/workspace-detail.component.html +++ b/src/app/workspace/workspace-detail/workspace-detail.component.html @@ -14,23 +14,19 @@
- +
- +
- +
@@ -42,7 +38,11 @@
- +
diff --git a/src/app/workspace/workspace-detail/workspace-detail.component.spec.ts b/src/app/workspace/workspace-detail/workspace-detail.component.spec.ts index 318ee16d..100af549 100644 --- a/src/app/workspace/workspace-detail/workspace-detail.component.spec.ts +++ b/src/app/workspace/workspace-detail/workspace-detail.component.spec.ts @@ -1,403 +1,428 @@ -// import { NO_ERRORS_SCHEMA, Component } from '@angular/core' -// import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' -// import { Location } from '@angular/common' -// import { /* HttpClient, */ HttpEventType, HttpHeaders, HttpResponse } from '@angular/common/http' -// import { HttpClientTestingModule } from '@angular/common/http/testing' -// import { Router } from '@angular/router' -// import { RouterTestingModule } from '@angular/router/testing' -// import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router' -// // import { TranslateLoader, TranslateModule } from '@ngx-translate/core' -// import { of, throwError } from 'rxjs' - -// import { PortalMessageService, ConfigurationService, AUTH_SERVICE } from '@onecx/portal-integration-angular' -// // import { HttpLoaderFactory } from 'src/app/shared/shared.module' -// import { WorkspaceDetailComponent } from './workspace-detail.component' -// import { WorkspacePropsComponent } from './workspace-props/workspace-props.component' -// import { WorkspaceContactComponent } from './workspace-contact/workspace-contact.component' -// import { WorkspaceRolesComponent } from './workspace-roles/workspace-roles.component' +import { NO_ERRORS_SCHEMA, Component } from '@angular/core' +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' +import { Location } from '@angular/common' +import { HttpClient, HttpEventType, HttpHeaders, HttpResponse } from '@angular/common/http' +import { HttpClientTestingModule } from '@angular/common/http/testing' +import { Router } from '@angular/router' +import { RouterTestingModule } from '@angular/router/testing' +import { ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router' +import { TranslateService } from '@ngx-translate/core' +import { TranslateLoader, TranslateModule } from '@ngx-translate/core' +import { of, throwError } from 'rxjs' + +import { + AppStateService, + AUTH_SERVICE, + ConfigurationService, + createTranslateLoader, + PortalMessageService +} from '@onecx/portal-integration-angular' +import { WorkspaceDetailComponent } from 'src/app/workspace/workspace-detail/workspace-detail.component' +import { WorkspaceContactComponent } from 'src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component' +import { WorkspacePropsComponent } from 'src/app/workspace/workspace-detail/workspace-props/workspace-props.component' +import { WorkspaceRolesComponent } from 'src/app/workspace/workspace-detail/workspace-roles/workspace-roles.component' // import { WorkspaceImagesComponent } from './workspace-images/workspace-images.component' -// import { Workspace, MenuItem, WorkspaceAPIService, MenuItemAPIService } from '../../shared/generated' - -// class MockRouter { -// navigate = jasmine.createSpy('navigate') -// } - -// const portal: Workspace = { -// name: 'name', -// theme: 'theme', -// baseUrl: '/some/base/url', -// id: 'id' -// } - -// const mockMenuItems: MenuItem[] = [ -// { -// name: 'menu name', -// id: 'id', -// key: 'key', -// i18n: { ['en']: 'en' }, -// children: [{ name: 'child name', key: 'key', id: 'id' }] -// }, -// { -// name: 'menu2 name', -// id: 'id', -// key: 'key', -// i18n: { ['en']: 'en' } -// } -// ] - -// const menuHttpResponse: HttpResponse = { -// body: mockMenuItems, +import { Workspace, MenuItem, WorkspaceAPIService, MenuItemAPIService } from 'src/app/shared/generated' + +class MockRouter { + navigate = jasmine.createSpy('navigate') +} + +const workspace: Workspace = { + name: 'name', + theme: 'theme', + baseUrl: '/some/base/url', + id: 'id' +} + +const mockMenuItems: MenuItem[] = [ + { + name: 'menu name', + id: 'id', + key: 'key', + i18n: { ['en']: 'en' }, + children: [{ name: 'child name', key: 'key', id: 'id' }] + }, + { + name: 'menu2 name', + id: 'id', + key: 'key', + i18n: { ['en']: 'en' }, + children: [{ name: 'child name', key: 'key', id: 'id' }] + }, + { + name: 'menu2 name', + id: 'id', + key: 'key', + i18n: { ['en']: 'en' } + } +] + +const menuHttpResponse: HttpResponse = { + body: mockMenuItems, + status: 200, + statusText: 'OK', + headers: new HttpHeaders(), + url: 'mock-url', + ok: true, + type: HttpEventType.Response, + clone: () => menuHttpResponse +} + +// const themeHttpResponse: HttpResponse = { +// body: { name: 'theme' }, // status: 200, // statusText: 'OK', // headers: new HttpHeaders(), // url: 'mock-url', // ok: true, // type: HttpEventType.Response, -// clone: () => menuHttpResponse +// clone: () => themeHttpResponse // } -// // const themeHttpResponse: HttpResponse = { -// // body: { name: 'theme' }, -// // status: 200, -// // statusText: 'OK', -// // headers: new HttpHeaders(), -// // url: 'mock-url', -// // ok: true, -// // type: HttpEventType.Response, -// // clone: () => themeHttpResponse -// // } - -// @Component({ template: '' }) -// class MockMenuComponent {} - -// class MockWorkspacePropsComponent { -// public onSubmit(): void {} -// } +@Component({ template: '' }) +class MockMenuComponent {} -// class MockWorkspaceContactComponent { -// public onSubmit(): void {} -// } +class MockWorkspacePropsComponent { + public onSubmit(): void {} +} -// class MockWorkspaceRolesComponent { -// public onSubmit(): void {} -// } +class MockWorkspaceContactComponent { + public onSubmit(): void {} +} + +class MockWorkspaceRolesComponent { + public onSubmit(): void {} +} // class MockWorkspaceImagesComponent { // public onSubmit(): void {} // } -// describe('WorkspaceDetailComponent', () => { -// let component: WorkspaceDetailComponent -// let fixture: ComponentFixture -// let mockActivatedRoute: Partial -// let mockRouter = new MockRouter() -// const mockAuthService = jasmine.createSpyObj('IAuthService', ['hasPermission']) - -// const msgServiceSpy = jasmine.createSpyObj('PortalMessageService', ['success', 'error']) -// const apiServiceSpy = { -// getPortalByPortalId: jasmine.createSpy('getPortalByPortalId').and.returnValue(of({})), -// deletePortal: jasmine.createSpy('deletePortal').and.returnValue(of({})) -// } -// const menuApiServiceSpy = { -// getMenuStructureForPortalId: jasmine.createSpy('getMenuStructureForPortalId').and.returnValue(of(mockMenuItems)) -// } -// // const themeApiServiceSpy = jasmine.createSpyObj('ThemesAPIService', ['getThemeById']) -// const configServiceSpy = { -// getProperty: jasmine.createSpy('getProperty').and.returnValue('123'), -// getPortal: jasmine.createSpy('getPortal').and.returnValue({ -// themeId: '1234', -// name: 'test', -// baseUrl: '/', -// microfrontendRegistrations: [] -// }), -// lang: 'en' -// } -// const translateServiceSpy = jasmine.createSpyObj('TranslateService', ['get']) -// const locationSpy = jasmine.createSpyObj('Location', ['back']) - -// const mockActivatedRouteSnapshot: Partial = { -// params: { -// id: 'mockId' -// } -// } -// mockActivatedRoute = { -// snapshot: mockActivatedRouteSnapshot as ActivatedRouteSnapshot -// } - -// beforeEach(waitForAsync(() => { -// TestBed.configureTestingModule({ -// declarations: [WorkspaceDetailComponent], -// imports: [ -// HttpClientTestingModule, -// // TranslateModule.forRoot({ -// // loader: { -// // provide: TranslateLoader, -// // useFactory: HttpLoaderFactory, -// // deps: [HttpClient] -// // } -// // }), -// RouterTestingModule.withRoutes([{ path: 'menu', component: MockMenuComponent }]) -// ], -// schemas: [NO_ERRORS_SCHEMA], -// providers: [ -// { provide: ActivatedRoute, useValue: mockActivatedRoute }, -// { provide: Router, useValue: mockRouter }, -// { provide: PortalMessageService, useValue: msgServiceSpy }, -// { provide: WorkspaceAPIService, useValue: apiServiceSpy }, -// { provide: ConfigurationService, useValue: configServiceSpy }, -// { provide: MenuItemAPIService, useValue: menuApiServiceSpy }, -// // { provide: ThemesAPIService, useValue: themeApiServiceSpy }, -// { provide: AUTH_SERVICE, useValue: mockAuthService }, -// { provide: Location, useValue: locationSpy } -// ] -// }).compileComponents() -// msgServiceSpy.success.calls.reset() -// msgServiceSpy.error.calls.reset() -// apiServiceSpy.getPortalByPortalId.calls.reset() -// apiServiceSpy.deletePortal.calls.reset() -// menuApiServiceSpy.getMenuStructureForPortalId.calls.reset() -// // themeApiServiceSpy.getThemeById.calls.reset() -// translateServiceSpy.get.calls.reset() -// locationSpy.back.calls.reset() -// })) - -// beforeEach(() => { -// fixture = TestBed.createComponent(WorkspaceDetailComponent) -// component = fixture.componentInstance -// fixture.detectChanges() -// }) - -// function initializeComponent(): void { -// fixture = TestBed.createComponent(WorkspaceDetailComponent) -// component = fixture.componentInstance -// fixture.detectChanges() -// } - -// it('should create', () => { -// expect(component).toBeTruthy() -// }) - -// it('should set German date format', () => { -// configServiceSpy.lang = 'de' - -// initializeComponent() - -// expect(component.dateFormat).toEqual('dd.MM.yyyy HH:mm') -// }) - -// it('should set selectedIndex onChange', () => { -// const event = { -// index: 1 -// } - -// component.onChange(event) - -// expect(component.selectedIndex).toEqual(1) -// }) - -// it('should getPortalData onInit', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// spyOn(component, 'onPortalData') - -// component.ngOnInit() - -// expect(component.onPortalData).toHaveBeenCalled() -// }) - -// it('should display error msg if get api call fails', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(throwError(() => new Error())) - -// component.ngOnInit() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ -// summaryKey: 'SEARCH.ERROR', -// detailKey: 'PORTAL.NOT_EXIST_MESSAGE' -// }) -// }) - -// it('should delete portal on confirmDeletePortal', () => { -// apiServiceSpy.deletePortal.and.returnValue(of({})) -// component.portalDownloadVisible = true - -// component.confirmDeletePortal() - -// expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.DELETE.MESSAGE_OK' }) -// expect(component.portalDownloadVisible).toBeFalse() -// }) - -// it('should display error msg if delete api call fails', () => { -// apiServiceSpy.deletePortal.and.returnValue(throwError(() => new Error())) - -// component.confirmDeletePortal() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ -// summaryKey: 'ACTIONS.DELETE.MESSAGE_NOK' -// }) -// }) - -// it('should export a portal', () => { -// component.portalDetail = portal -// component.importThemeCheckbox = true -// menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) -// // themeApiServiceSpy.getThemeById.and.returnValue(of(themeHttpResponse)) - -// component.onExportWorkspace() - -// expect(component.portalDownloadVisible).toBeFalse() -// }) - -// it('should display error if themeNotSpecified on export', () => { -// component.portalDetail = portal -// if (component.portalDetail) { -// component.portalDetail.theme = '' -// } -// component.importThemeCheckbox = true -// menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) -// // themeApiServiceSpy.getThemeById.and.returnValue(throwError(() => new Error())) - -// component.onExportWorkspace() - -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ -// summaryKey: 'DETAIL.THEME_NOT_SPECIFIED_MESSAGE' -// }) -// }) +describe('WorkspaceDetailComponent', () => { + let component: WorkspaceDetailComponent + let fixture: ComponentFixture + let mockActivatedRoute: Partial + let mockRouter = new MockRouter() + const mockAuthService = jasmine.createSpyObj('IAuthService', ['hasPermission']) + + const translateServiceSpy = jasmine.createSpyObj('TranslateService', ['get']) + const msgServiceSpy = jasmine.createSpyObj('PortalMessageService', ['success', 'error']) + const apiServiceSpy = { + getWorkspaceByName: jasmine.createSpy('getWorkspaceByName').and.returnValue(of({})), + deletePortal: jasmine.createSpy('deletePortal').and.returnValue(of({})) + } + const menuApiServiceSpy = { + getMenuStructureForPortalId: jasmine.createSpy('getMenuStructureForPortalId').and.returnValue(of(mockMenuItems)) + } + // const themeApiServiceSpy = jasmine.createSpyObj('ThemesAPIService', ['getThemeById']) + const configServiceSpy = { + getProperty: jasmine.createSpy('getProperty').and.returnValue('123'), + getPortal: jasmine.createSpy('getPortal').and.returnValue({ + themeId: '1234', + name: 'test', + baseUrl: '/', + microfrontendRegistrations: [] + }), + lang: 'en' + } + const locationSpy = jasmine.createSpyObj('Location', ['back']) + + const mockActivatedRouteSnapshot: Partial = { + params: { + id: 'mockId' + } + } + mockActivatedRoute = { + snapshot: mockActivatedRouteSnapshot as ActivatedRouteSnapshot + } + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [WorkspaceDetailComponent], + imports: [ + HttpClientTestingModule, + TranslateModule.forRoot({ + isolate: true, + loader: { + provide: TranslateLoader, + useFactory: createTranslateLoader, + deps: [HttpClient, AppStateService] + } + }), + RouterTestingModule.withRoutes([{ path: 'menu', component: MockMenuComponent }]) + ], + schemas: [NO_ERRORS_SCHEMA], + providers: [ + { provide: ActivatedRoute, useValue: mockActivatedRoute }, + { provide: Router, useValue: mockRouter }, + { provide: PortalMessageService, useValue: msgServiceSpy }, + { provide: WorkspaceAPIService, useValue: apiServiceSpy }, + { provide: ConfigurationService, useValue: configServiceSpy }, + { provide: MenuItemAPIService, useValue: menuApiServiceSpy }, + { provide: TranslateService, useValue: translateServiceSpy }, + // { provide: ThemesAPIService, useValue: themeApiServiceSpy }, + { provide: AUTH_SERVICE, useValue: mockAuthService }, + { provide: Location, useValue: locationSpy } + ] + }).compileComponents() + msgServiceSpy.success.calls.reset() + msgServiceSpy.error.calls.reset() + apiServiceSpy.getWorkspaceByName.calls.reset() + apiServiceSpy.deletePortal.calls.reset() + menuApiServiceSpy.getMenuStructureForPortalId.calls.reset() + // themeApiServiceSpy.getThemeById.calls.reset() + translateServiceSpy.get.calls.reset() + locationSpy.back.calls.reset() + })) + + beforeEach(() => { + fixture = TestBed.createComponent(WorkspaceDetailComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + function initializeComponent(): void { + fixture = TestBed.createComponent(WorkspaceDetailComponent) + component = fixture.componentInstance + fixture.detectChanges() + } + + it('should create', () => { + expect(component).toBeTruthy() + }) + + it('should set German date format', () => { + configServiceSpy.lang = 'de' + + initializeComponent() + + expect(component.dateFormat).toEqual('dd.MM.yyyy HH:mm:ss') + }) + + it('should set selectedTabIndex onChange', () => { + const event = { + index: 1 + } + + component.onTabChange(event) + + expect(component.selectedTabIndex).toEqual(1) + }) + + it('should getWorkspaceData onInit', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + spyOn(component, 'onWorkspaceData') + + component.ngOnInit() + + expect(component.onWorkspaceData).toHaveBeenCalled() + }) + + it('should display error msg if get api call fails', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(throwError(() => new Error())) + + component.ngOnInit() + + expect(msgServiceSpy.error).toHaveBeenCalledWith({ + summaryKey: 'SEARCH.ERROR', + detailKey: 'PORTAL.NOT_EXIST_MESSAGE' + }) + }) + + it('should delete portal on confirmDeleteWorkspace', () => { + apiServiceSpy.deletePortal.and.returnValue(of({})) + component.workspaceDownloadVisible = true + + component.confirmDeleteWorkspace() + + expect(msgServiceSpy.success).toHaveBeenCalledWith({ summaryKey: 'ACTIONS.DELETE.MESSAGE_OK' }) + expect(component.workspaceDownloadVisible).toBeFalse() + }) + + it('should display error msg if delete api call fails', () => { + apiServiceSpy.deletePortal.and.returnValue(throwError(() => new Error())) + + component.confirmDeleteWorkspace() + + expect(msgServiceSpy.error).toHaveBeenCalledWith({ + summaryKey: 'ACTIONS.DELETE.MESSAGE_NOK' + }) + }) + + it('should export a portal', () => { + component.workspaceDetail = workspace + component.importThemeCheckbox = true + menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) + // themeApiServiceSpy.getThemeById.and.returnValue(of(themeHttpResponse)) + + component.onExportWorkspace() + + expect(component.workspaceDownloadVisible).toBeFalse() + }) + + it('should display error if themeNotSpecified on export', () => { + component.workspaceDetail = workspace + if (component.workspaceDetail) { + component.workspaceDetail.theme = '' + } + component.importThemeCheckbox = true + menuApiServiceSpy.getMenuStructureForPortalId.and.returnValue(of(mockMenuItems)) + // themeApiServiceSpy.getThemeById.and.returnValue(throwError(() => new Error())) -// it('should display error if portalNotFound on export', () => { -// component.portalDetail = undefined + component.onExportWorkspace() -// component.onExportWorkspace() + expect(msgServiceSpy.error).toHaveBeenCalledWith({ + summaryKey: 'DETAIL.THEME_NOT_SPECIFIED_MESSAGE' + }) + }) -// expect(msgServiceSpy.error).toHaveBeenCalledWith({ -// summaryKey: 'DETAIL.PORTAL_NOT_FOUND' -// }) -// }) + it('should display error if portalNotFound on export', () => { + component.workspaceDetail = undefined -// it('should have prepared action buttons onInit: close', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) + component.onExportWorkspace() -// component.ngOnInit() -// const action = component.actions[0] -// action.actionCallback() + expect(msgServiceSpy.error).toHaveBeenCalledWith({ + summaryKey: 'DETAIL.PORTAL_NOT_FOUND' + }) + }) -// expect(locationSpy.back).toHaveBeenCalled() -// }) + it('should have prepared action buttons onInit: close', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// it('should have prepared action buttons onInit: manageMenu', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// spyOn(component, 'manageMenu') + actions[0].actionCallback() -// component.ngOnInit() -// const action = component.actions[1] -// action.actionCallback() + expect(locationSpy.back).toHaveBeenCalled() + }) -// expect(component.manageMenu).toHaveBeenCalled() -// }) + it('should have prepared action buttons onInit: manageMenu', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + spyOn(component, 'manageMenu') + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// it('should have prepared action buttons onInit: toggleEditMode', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) + actions[1].actionCallback() -// component.editMode = false -// component.ngOnInit() -// const action = component.actions[2] -// action.actionCallback() + expect(component.manageMenu).toHaveBeenCalled() + }) -// expect(component.editMode).toBeTrue() -// }) + it('should have prepared action buttons onInit: toggleEditMode', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.editMode = false + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// it('should have prepared action buttons onInit: updatePortal props', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// component.portalPropsComponent = new MockWorkspacePropsComponent() as unknown as WorkspacePropsComponent -// component.selectedIndex = 0 + actions[2].actionCallback() -// component.ngOnInit() -// const action = component.actions[3] -// action.actionCallback() + expect(component.editMode).toBeTrue() + }) -// expect(component.editMode).toBeFalse() -// }) + it('should have prepared action buttons onInit: updatePortal props', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.workspacePropsComponent = new MockWorkspacePropsComponent() as unknown as WorkspacePropsComponent + component.selectedTabIndex = 0 + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// it('should have prepared action buttons onInit: updatePortal contact', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// component.portalContactComponent = new MockWorkspaceContactComponent() as unknown as WorkspaceContactComponent -// component.selectedIndex = 1 + actions[3].actionCallback() -// component.ngOnInit() -// const action = component.actions[3] -// action.actionCallback() + expect(component.editMode).toBeFalse() + }) -// expect(component.editMode).toBeFalse() -// }) + it('should have prepared action buttons onInit: updatePortal contact', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.workspaceContactComponent = new MockWorkspaceContactComponent() as unknown as WorkspaceContactComponent + component.selectedTabIndex = 1 + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// it('should have prepared action buttons onInit: updatePortal roles', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// component.portalRolesComponent = new MockWorkspaceRolesComponent() as unknown as WorkspaceRolesComponent -// component.selectedIndex = 4 + actions[3].actionCallback() -// component.ngOnInit() -// const action = component.actions[3] -// action.actionCallback() + expect(component.editMode).toBeFalse() + }) -// expect(component.editMode).toBeFalse() -// }) + it('should have prepared action buttons onInit: updateworkspace roles', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.workspaceRolesComponent = new MockWorkspaceRolesComponent() as unknown as WorkspaceRolesComponent + component.selectedTabIndex = 4 + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// it('should have prepared action buttons onInit: updatePortal images', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// component.portalImagesComponent = new MockWorkspaceImagesComponent() as unknown as WorkspaceImagesComponent -// component.selectedIndex = 5 + actions[3].actionCallback() -// component.ngOnInit() -// const action = component.actions[3] -// action.actionCallback() + expect(component.editMode).toBeFalse() + }) -// expect(component.editMode).toBeFalse() -// }) + // it('should have prepared action buttons onInit: updateworkspace images', () => { + // apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + // component.workspaceImagesComponent = new MockWorkspaceImagesComponent() as unknown as WorkspaceImagesComponent + // component.selectedTabIndex = 5 -// it('should have prepared action buttons onInit: updatePortal: default', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// component.selectedIndex = 99 -// spyOn(console, 'error') + // component.ngOnInit() + // const action = component.actions[3] + // action.actionCallback() -// component.ngOnInit() -// const action = component.actions[3] -// action.actionCallback() + // expect(component.editMode).toBeFalse() + // }) -// expect(console.error).toHaveBeenCalledWith("Couldn't assign tab to component") -// }) + it('should have prepared action buttons onInit: updateworkspace: default', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.selectedTabIndex = 99 + spyOn(console, 'error') + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// it('should have prepared action buttons onInit: portalDownloadVisible', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) + actions[3].actionCallback() + + expect(console.error).toHaveBeenCalledWith("Couldn't assign tab to component") + }) -// component.ngOnInit() -// const action = component.actions[4] -// action.actionCallback() + it('should have prepared action buttons onInit: workspaceDownloadVisible', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// expect(component.portalDownloadVisible).toBeTrue() -// }) + actions[4].actionCallback() -// it('should have prepared action buttons onInit: toggleEditMode', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) -// const toggleEditModeSpy = spyOn(component, 'toggleEditMode').and.callThrough() + expect(component.workspaceDownloadVisible).toBeTrue() + }) -// component.ngOnInit() -// const action = component.actions[5] -// action.actionCallback() + it('should have prepared action buttons onInit: toggleEditMode', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + const toggleEditModeSpy = spyOn(component, 'toggleEditMode').and.callThrough() + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// expect(toggleEditModeSpy).toHaveBeenCalled() -// }) + actions[5].actionCallback() -// it('should have prepared action buttons onInit: portalDeleteVisible', () => { -// apiServiceSpy.getPortalByPortalId.and.returnValue(of([portal])) + expect(toggleEditModeSpy).toHaveBeenCalled() + }) -// component.ngOnInit() -// const action = component.actions[6] -// action.actionCallback() + it('should have prepared action buttons onInit: workspaceDeleteVisible', () => { + apiServiceSpy.getWorkspaceByName.and.returnValue(of([workspace])) + component.ngOnInit() + let actions: any = [] + component.actions$!.subscribe((act) => (actions = act)) -// expect(component.portalDeleteVisible).toBeTrue() -// }) + actions[6].actionCallback() -// it('should correctly navigate on manageMenu', () => { -// component.manageMenu() + expect(component.workspaceDeleteVisible).toBeTrue() + }) -// expect(mockRouter.navigate).toHaveBeenCalledWith(['./menu'], { relativeTo: mockActivatedRoute }) -// }) -// }) + it('should correctly navigate on manageMenu', () => { + component.manageMenu() + + expect(mockRouter.navigate).toHaveBeenCalledWith(['./menu'], { relativeTo: mockActivatedRoute }) + }) +}) diff --git a/src/app/workspace/workspace-detail/workspace-detail.component.ts b/src/app/workspace/workspace-detail/workspace-detail.component.ts index 645d9e03..dc2fbee5 100644 --- a/src/app/workspace/workspace-detail/workspace-detail.component.ts +++ b/src/app/workspace/workspace-detail/workspace-detail.component.ts @@ -2,17 +2,17 @@ import { Component, OnInit, ViewChild } from '@angular/core' import { DatePipe, Location } from '@angular/common' import { ActivatedRoute, Router } from '@angular/router' import { TranslateService } from '@ngx-translate/core' -import FileSaver from 'file-saver' +import { FileSaver } from 'file-saver' import { Observable, map } from 'rxjs' import { Action, ObjectDetailItem, PortalMessageService, UserService } from '@onecx/portal-integration-angular' -import { WorkspaceSnapshot, Workspace, WorkspaceAPIService } from '../../shared/generated' -import { environment } from '../../../environments/environment' +import { WorkspaceSnapshot, Workspace, WorkspaceAPIService } from 'src/app/shared/generated' +import { environment } from 'src/environments/environment' -import { WorkspacePropsComponent } from './workspace-props/workspace-props.component' -import { WorkspaceRolesComponent } from './workspace-roles/workspace-roles.component' -import { WorkspaceInternComponent } from './workspace-intern/workspace-intern.component' -import { WorkspaceContactComponent } from './workspace-contact/workspace-contact.component' +import { WorkspacePropsComponent } from 'src/app/workspace/workspace-detail/workspace-props/workspace-props.component' +import { WorkspaceRolesComponent } from 'src/app/workspace/workspace-detail/workspace-roles/workspace-roles.component' +import { WorkspaceInternComponent } from 'src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component' +import { WorkspaceContactComponent } from 'src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component' @Component({ selector: 'app-workspace-detail', @@ -204,14 +204,12 @@ export class WorkspaceDetailComponent implements OnInit { switch (this.selectedTabIndex) { case 0: { this.workspacePropsComponent.onSubmit() + this.workspaceDetail = this.workspacePropsComponent.workspaceDetail break } case 1: { this.workspaceContactComponent.onSubmit() - break - } - case 4: { - this.workspaceRolesComponent.onSubmit() + this.workspaceDetail = this.workspaceContactComponent.workspaceDetail break } default: { @@ -220,6 +218,34 @@ export class WorkspaceDetailComponent implements OnInit { } } this.toggleEditMode('view') + this.workspaceApi + .updateWorkspace({ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + id: this.workspaceDetail?.id!, + updateWorkspaceRequest: { resource: this.workspaceDetail! } + }) + .subscribe({ + next: (workspace) => { + this.workspaceId = workspace.id || '' + this.onWorkspaceData(workspace) + this.msgService.success({ summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_OK' }) + }, + error: () => { + // console.error('ERR', err) + // const duplicate = err.error.message.indexOf('contains duplicated roles') > 0 + this.msgService.error({ + summaryKey: 'ACTIONS.EDIT.MESSAGE.CHANGE_NOK' + // detailKey: duplicate ? 'DETAIL.NEW_ROLE_DUPLICATED' : err.error.message + }) + } + }) + } + + public onRoleSave(roles: string[]) { + if (this.workspaceDetail) { + this.workspaceDetail.workspaceRoles = roles + } + this.updateWorkspace() } confirmDeleteWorkspace() { diff --git a/src/app/workspace/workspace-detail/workspace-detail.module.ts b/src/app/workspace/workspace-detail/workspace-detail.module.ts index 61cc2faa..b3e9c21d 100644 --- a/src/app/workspace/workspace-detail/workspace-detail.module.ts +++ b/src/app/workspace/workspace-detail/workspace-detail.module.ts @@ -4,17 +4,17 @@ import { FormsModule } from '@angular/forms' import { RouterModule, Routes } from '@angular/router' import { addInitializeModuleGuard, InitializeModuleGuard, PortalCoreModule } from '@onecx/portal-integration-angular' -import { SharedModule } from '../../shared/shared.module' -import { LabelResolver } from '../../shared/label.resolver' +import { SharedModule } from 'src/app/shared/shared.module' +import { LabelResolver } from 'src/app/shared/label.resolver' -import { WorkspaceDetailComponent } from './workspace-detail.component' -import { WorkspacePropsComponent } from './workspace-props/workspace-props.component' -import { WorkspaceRolesComponent } from './workspace-roles/workspace-roles.component' -import { WorkspaceInternComponent } from './workspace-intern/workspace-intern.component' -import { WorkspaceImagesComponent } from './workspace-images/workspace-images.component' -import { WorkspaceContactComponent } from './workspace-contact/workspace-contact.component' -import { ProductComponent } from './products/products.component' -import { LogoComponent } from './workspace-images/logo/logo.component' +import { WorkspaceDetailComponent } from 'src/app/workspace/workspace-detail/workspace-detail.component' +import { WorkspacePropsComponent } from 'src/app/workspace/workspace-detail/workspace-props/workspace-props.component' +import { WorkspaceRolesComponent } from 'src/app/workspace/workspace-detail/workspace-roles/workspace-roles.component' +import { WorkspaceInternComponent } from 'src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component' +import { WorkspaceImagesComponent } from 'src/app/workspace/workspace-detail/workspace-images/workspace-images.component' +import { WorkspaceContactComponent } from 'src/app/workspace/workspace-detail/workspace-contact/workspace-contact.component' +import { ProductComponent } from 'src/app/workspace/workspace-detail/products/products.component' +import { LogoComponent } from 'src/app/workspace/workspace-detail/workspace-images/logo/logo.component' const routes: Routes = [ { diff --git a/src/app/workspace/workspace-detail/workspace-images/logo/logo.component.spec.ts b/src/app/workspace/workspace-detail/workspace-images/logo/logo.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/app/workspace/workspace-detail/workspace-images/logo/logo.component.ts b/src/app/workspace/workspace-detail/workspace-images/logo/logo.component.ts index 61426bdc..3bbdc4e5 100644 --- a/src/app/workspace/workspace-detail/workspace-images/logo/logo.component.ts +++ b/src/app/workspace/workspace-detail/workspace-images/logo/logo.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges, SimpleChanges } from '@angular/core' -import { environment } from '../../../../../environments/environment' +import { environment } from 'src/environments/environment' @Component({ selector: 'app-logo', diff --git a/src/app/workspace/workspace-detail/workspace-images/workspace-images.component.ts b/src/app/workspace/workspace-detail/workspace-images/workspace-images.component.ts index f99ce00f..b5be0aab 100644 --- a/src/app/workspace/workspace-detail/workspace-images/workspace-images.component.ts +++ b/src/app/workspace/workspace-detail/workspace-images/workspace-images.component.ts @@ -3,9 +3,9 @@ import { FormArray, FormBuilder, FormControl, FormControlState, FormGroup } from import { TranslateService } from '@ngx-translate/core' import { PortalMessageService } from '@onecx/portal-integration-angular' -import { /* ImageV1APIService, */ WorkspaceAPIService, Workspace } from '../../../shared/generated' -import { cloneWorkspaceWithMicrofrontendsArray } from '../../../shared/utils' -import { LogoState } from '../../workspace-create/logo-state' +import { /* ImageV1APIService, */ WorkspaceAPIService, Workspace } from 'src/app/shared/generated' +import { cloneWorkspaceWithMicrofrontendsArray } from 'src/app/shared/utils' +import { LogoState } from 'src/app/workspace/workspace-create/logo-state' export interface PortalImageForm { url: FormControl diff --git a/src/app/workspace/workspace-detail/workspace-images/workspace-images.spec.ts b/src/app/workspace/workspace-detail/workspace-images/workspace-images.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.html b/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.html index 0d486a06..1043e34e 100644 --- a/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.html +++ b/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.html @@ -6,14 +6,14 @@ pInputText type="text" readonly - id="portal_detail_item_creationDate" + id="workspace_detail_item_creationDate" class="w-full pt-3 pb-2" - [value]="portalDetail.creationDate | date : dateFormat" + [value]="workspaceDetail.creationDate | date : dateFormat" [pTooltip]="'DETAIL.TOOLTIPS.CREATION_DATE' | translate" tooltipPosition="top" tooltipEvent="focus" /> - + @@ -21,14 +21,14 @@ pInputText type="text" readonly - id="portal_detail_item_creationUser" + id="workspace_detail_item_creationUser" class="w-full pt-3 pb-2" - [value]="portalDetail.creationUser" + [value]="workspaceDetail.creationUser" [pTooltip]="'DETAIL.TOOLTIPS.CREATION_USER' | translate" tooltipPosition="top" tooltipEvent="focus" /> - + @@ -36,14 +36,14 @@ pInputText type="text" readonly - id="portal_detail_item_modificationDate" + id="workspace_detail_item_modificationDate" class="w-full pt-3 pb-2" - [value]="portalDetail.modificationDate | date : dateFormat" + [value]="workspaceDetail.modificationDate | date : dateFormat" [pTooltip]="'DETAIL.TOOLTIPS.MODIFICATION_DATE' | translate" tooltipPosition="top" tooltipEvent="focus" /> - + @@ -51,14 +51,14 @@ pInputText type="text" readonly - id="portal_detail_item_modificationUser" + id="workspace_detail_item_modificationUser" class="w-full pt-3 pb-2" - [value]="portalDetail.modificationUser" + [value]="workspaceDetail.modificationUser" [pTooltip]="'DETAIL.TOOLTIPS.MODIFICATION_USER' | translate" tooltipPosition="top" tooltipEvent="focus" /> - + diff --git a/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.spec.ts b/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.spec.ts index e3f7a4bb..59fdb5e7 100644 --- a/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.spec.ts +++ b/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.spec.ts @@ -1,47 +1,47 @@ -// import { NO_ERRORS_SCHEMA } from '@angular/core' -// import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' -// // import { HttpClient } from '@angular/common/http' -// import { HttpClientTestingModule } from '@angular/common/http/testing' -// // import { TranslateLoader, TranslateModule } from '@ngx-translate/core' +import { NO_ERRORS_SCHEMA } from '@angular/core' +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing' +import { HttpClient } from '@angular/common/http' +import { HttpClientTestingModule } from '@angular/common/http/testing' +import { TranslateLoader, TranslateModule } from '@ngx-translate/core' -// // import { HttpLoaderFactory } from 'src/app/shared/shared.module' -// import { WorkspaceInternComponent } from './workspace-intern.component' +import { AppStateService, createTranslateLoader } from '@onecx/portal-integration-angular' +import { WorkspaceInternComponent } from 'src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component' -// describe('WorkspaceInternComponent', () => { -// let component: WorkspaceInternComponent -// let fixture: ComponentFixture +describe('WorkspaceInternComponent', () => { + let component: WorkspaceInternComponent + let fixture: ComponentFixture -// beforeEach(waitForAsync(() => { -// TestBed.configureTestingModule({ -// declarations: [WorkspaceInternComponent], -// imports: [ -// HttpClientTestingModule -// // TranslateModule.forRoot({ -// // loader: { -// // provide: TranslateLoader, -// // useFactory: HttpLoaderFactory, -// // deps: [HttpClient] -// // } -// // }) -// ], -// schemas: [NO_ERRORS_SCHEMA] -// }).compileComponents() -// })) + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [WorkspaceInternComponent], + imports: [ + HttpClientTestingModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: createTranslateLoader, + deps: [HttpClient, AppStateService] + } + }) + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents() + })) -// beforeEach(() => { -// fixture = TestBed.createComponent(WorkspaceInternComponent) -// component = fixture.componentInstance + beforeEach(() => { + fixture = TestBed.createComponent(WorkspaceInternComponent) + component = fixture.componentInstance -// component.portalDetail = { -// name: 'name', -// theme: 'theme', -// baseUrl: '/some/base/url', -// id: 'id' -// } -// fixture.detectChanges() -// }) + component.workspaceDetail = { + name: 'name', + theme: 'theme', + baseUrl: '/some/base/url', + id: 'id' + } + fixture.detectChanges() + }) -// it('should create', () => { -// expect(component).toBeTruthy() -// }) -// }) + fit('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.ts b/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.ts index 3215027a..ebf21c29 100644 --- a/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.ts +++ b/src/app/workspace/workspace-detail/workspace-intern/workspace-intern.component.ts @@ -8,7 +8,7 @@ import { Workspace } from 'src/app/shared/generated' templateUrl: './workspace-intern.component.html' }) export class WorkspaceInternComponent { - @Input() portalDetail!: Workspace + @Input() workspaceDetail!: Workspace @Input() dateFormat = 'medium' constructor(private translate: TranslateService) {} diff --git a/src/app/workspace/workspace-detail/workspace-props/workspace-props.component.html b/src/app/workspace/workspace-detail/workspace-props/workspace-props.component.html index 93809a9e..a47dfcfc 100644 --- a/src/app/workspace/workspace-detail/workspace-props/workspace-props.component.html +++ b/src/app/workspace/workspace-detail/workspace-props/workspace-props.component.html @@ -7,14 +7,14 @@ -