From 9637f4cd30f1bd3f24147cce41607ddb15cf8539 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 4 Aug 2023 11:47:08 -0400 Subject: [PATCH 01/94] add seg mode --- .../Overlays/CustomizableViewportOverlay.tsx | 2 +- modes/segmentation/.gitignore | 104 ++++ modes/segmentation/.prettierrc | 8 + modes/segmentation/.webpack/webpack.prod.js | 62 +++ modes/segmentation/LICENSE | 9 + modes/segmentation/README.md | 7 + modes/segmentation/babel.config.js | 44 ++ modes/segmentation/package.json | 64 +++ modes/segmentation/src/id.js | 5 + modes/segmentation/src/index.tsx | 172 ++++++ platform/app/public/config/default.js | 131 ++++- .../services/ui/customization-service.md | 72 +-- yarn.lock | 493 ++++++++++++++++-- 13 files changed, 1104 insertions(+), 69 deletions(-) create mode 100644 modes/segmentation/.gitignore create mode 100644 modes/segmentation/.prettierrc create mode 100644 modes/segmentation/.webpack/webpack.prod.js create mode 100644 modes/segmentation/LICENSE create mode 100644 modes/segmentation/README.md create mode 100644 modes/segmentation/babel.config.js create mode 100644 modes/segmentation/package.json create mode 100644 modes/segmentation/src/id.js create mode 100644 modes/segmentation/src/index.tsx diff --git a/extensions/cornerstone/src/Viewport/Overlays/CustomizableViewportOverlay.tsx b/extensions/cornerstone/src/Viewport/Overlays/CustomizableViewportOverlay.tsx index 3b92c97efce..06f7a540264 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/CustomizableViewportOverlay.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/CustomizableViewportOverlay.tsx @@ -278,7 +278,7 @@ function CustomizableViewportOverlay({ instanceNumber, }; - if (item.customizationType === 'ohif.overlayItem.windowLevel') { + if (item.customizationType === 'alireza') { return ; } else if (item.customizationType === 'ohif.overlayItem.zoomLevel') { return ; diff --git a/modes/segmentation/.gitignore b/modes/segmentation/.gitignore new file mode 100644 index 00000000000..67045665db2 --- /dev/null +++ b/modes/segmentation/.gitignore @@ -0,0 +1,104 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/modes/segmentation/.prettierrc b/modes/segmentation/.prettierrc new file mode 100644 index 00000000000..b80ec6b3474 --- /dev/null +++ b/modes/segmentation/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "es5", + "printWidth": 80, + "proseWrap": "always", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} diff --git a/modes/segmentation/.webpack/webpack.prod.js b/modes/segmentation/.webpack/webpack.prod.js new file mode 100644 index 00000000000..163392a699a --- /dev/null +++ b/modes/segmentation/.webpack/webpack.prod.js @@ -0,0 +1,62 @@ +const path = require('path'); +const pkg = require('../package.json'); + +const outputFile = 'index.umd.js'; +const rootDir = path.resolve(__dirname, '../'); +const outputFolder = path.join(__dirname, `../dist/umd/${pkg.name}/`); + +// Todo: add ESM build for the mode in addition to umd build +const config = { + mode: 'production', + entry: rootDir + '/' + pkg.module, + devtool: 'source-map', + output: { + path: outputFolder, + filename: outputFile, + library: pkg.name, + libraryTarget: 'umd', + chunkFilename: '[name].chunk.js', + umdNamedDefine: true, + globalObject: "typeof self !== 'undefined' ? self : this", + }, + externals: [ + { + react: { + root: 'React', + commonjs2: 'react', + commonjs: 'react', + amd: 'react', + }, + '@ohif/core': { + commonjs2: '@ohif/core', + commonjs: '@ohif/core', + amd: '@ohif/core', + root: '@ohif/core', + }, + '@ohif/ui': { + commonjs2: '@ohif/ui', + commonjs: '@ohif/ui', + amd: '@ohif/ui', + root: '@ohif/ui', + }, + }, + ], + module: { + rules: [ + { + test: /(\.jsx|\.js|\.tsx|\.ts)$/, + loader: 'babel-loader', + exclude: /(node_modules|bower_components)/, + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + }, + ], + }, + resolve: { + modules: [path.resolve('./node_modules'), path.resolve('./src')], + extensions: ['.json', '.js', '.jsx', '.tsx', '.ts'], + }, +}; + +module.exports = config; diff --git a/modes/segmentation/LICENSE b/modes/segmentation/LICENSE new file mode 100644 index 00000000000..c58f05915f0 --- /dev/null +++ b/modes/segmentation/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2023 @ohif-segmentation-mode (contact@ohif.org) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/modes/segmentation/README.md b/modes/segmentation/README.md new file mode 100644 index 00000000000..5bf905d9270 --- /dev/null +++ b/modes/segmentation/README.md @@ -0,0 +1,7 @@ +# @ohif-segmentation-mode +## Description +OHIF segmentation mode which enables labelmap segmentation read/edit/export +## Author +@ohif +## License +MIT \ No newline at end of file diff --git a/modes/segmentation/babel.config.js b/modes/segmentation/babel.config.js new file mode 100644 index 00000000000..92fbbdeaf95 --- /dev/null +++ b/modes/segmentation/babel.config.js @@ -0,0 +1,44 @@ +module.exports = { + plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + env: { + test: { + presets: [ + [ + // TODO: https://babeljs.io/blog/2019/03/19/7.4.0#migration-from-core-js-2 + '@babel/preset-env', + { + modules: 'commonjs', + debug: false, + }, + "@babel/preset-typescript", + ], + '@babel/preset-react', + ], + plugins: [ + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-syntax-dynamic-import', + '@babel/plugin-transform-regenerator', + '@babel/plugin-transform-runtime', + ], + }, + production: { + presets: [ + // WebPack handles ES6 --> Target Syntax + ['@babel/preset-env', { modules: false }], + '@babel/preset-react', + "@babel/preset-typescript", + ], + ignore: ['**/*.test.jsx', '**/*.test.js', '__snapshots__', '__tests__'], + }, + development: { + presets: [ + // WebPack handles ES6 --> Target Syntax + ['@babel/preset-env', { modules: false }], + '@babel/preset-react', + "@babel/preset-typescript", + ], + plugins: ['react-hot-loader/babel'], + ignore: ['**/*.test.jsx', '**/*.test.js', '__snapshots__', '__tests__'], + }, + }, +}; diff --git a/modes/segmentation/package.json b/modes/segmentation/package.json new file mode 100644 index 00000000000..81624cab818 --- /dev/null +++ b/modes/segmentation/package.json @@ -0,0 +1,64 @@ +{ + "name": "@ohif/mode-segmentation", + "version": "3.7.0-beta.41", + "description": "OHIF segmentation mode which enables labelmap segmentation read/edit/export", + "author": "@ohif", + "license": "MIT", + "main": "dist/umd/@ohif/mode-segmentation/index.umd.js", + "files": [ + "dist/**", + "public/**", + "README.md" + ], + "repository": "OHIF/Viewers", + "keywords": [ + "ohif-mode" + ], + "module": "src/index.tsx", + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1.16.0" + }, + "scripts": { + "dev": "cross-env NODE_ENV=development webpack --config .webpack/webpack.dev.js --watch --output-pathinfo", + "dev:cornerstone": "yarn run dev", + "build": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "start": "yarn run dev", + "test:unit": "jest --watchAll", + "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" + }, + "peerDependencies": { + "@ohif/core": "^3.7.0-beta.41" + }, + "dependencies": { + "@babel/runtime": "^7.20.13" + }, + "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.3", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/plugin-transform-typescript": "^7.13.0", + "@babel/preset-env": "^7.16.11", + "@babel/preset-react": "^7.16.7", + "@babel/preset-typescript": "^7.13.0", + "babel-eslint": "^8.0.3", + "babel-loader": "^8.0.0-beta.4", + "babel-plugin-inline-react-svg": "^2.0.1", + "clean-webpack-plugin": "^4.0.0", + "copy-webpack-plugin": "^10.2.0", + "cross-env": "^7.0.3", + "dotenv": "^14.1.0", + "eslint": "^5.0.1", + "eslint-loader": "^2.0.0", + "webpack": "^5.50.0", + "webpack-merge": "^5.7.3", + "webpack-cli": "^4.7.2" + } +} diff --git a/modes/segmentation/src/id.js b/modes/segmentation/src/id.js new file mode 100644 index 00000000000..ebe5acd98ae --- /dev/null +++ b/modes/segmentation/src/id.js @@ -0,0 +1,5 @@ +import packageJson from '../package.json'; + +const id = packageJson.name; + +export { id }; diff --git a/modes/segmentation/src/index.tsx b/modes/segmentation/src/index.tsx new file mode 100644 index 00000000000..2086aa36b81 --- /dev/null +++ b/modes/segmentation/src/index.tsx @@ -0,0 +1,172 @@ +import { hotkeys } from '@ohif/core'; +import { id } from './id'; +import { initToolGroups, toolbarButtons } from '@ohif/mode-longitudinal'; + +const ohif = { + layout: '@ohif/extension-default.layoutTemplateModule.viewerLayout', + sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack', + hangingProtocol: '@ohif/extension-default.hangingProtocolModule.default', + leftPanel: '@ohif/extension-default.panelModule.seriesList', + rightPanel: '@ohif/extension-default.panelModule.measure', +}; + +const cornerstone = { + viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone', +}; + +/** + * Just two dependencies to be able to render a viewport with panels in order + * to make sure that the mode is working. + */ +const extensionDependencies = { + '@ohif/extension-default': '^3.0.0', + '@ohif/extension-cornerstone': '^3.0.0', +}; + +function modeFactory({ modeConfiguration }) { + return { + /** + * Mode ID, which should be unique among modes used by the viewer. This ID + * is used to identify the mode in the viewer's state. + */ + id, + routeName: 'template', + /** + * Mode name, which is displayed in the viewer's UI in the workList, for the + * user to select the mode. + */ + displayName: 'Template Mode', + /** + * Runs when the Mode Route is mounted to the DOM. Usually used to initialize + * Services and other resources. + */ + onModeEnter: ({ servicesManager, extensionManager, commandsManager }) => { + const { + measurementService, + toolbarService, + toolGroupService, + } = servicesManager.services; + + measurementService.clearMeasurements(); + + // Init Default and SR ToolGroups + initToolGroups(extensionManager, toolGroupService, commandsManager); + + let unsubscribe; + + const activateTool = () => { + toolbarService.recordInteraction({ + groupId: 'WindowLevel', + itemId: 'WindowLevel', + interactionType: 'tool', + commands: [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'WindowLevel', + }, + context: 'CORNERSTONE', + }, + ], + }); + + // We don't need to reset the active tool whenever a viewport is getting + // added to the toolGroup. + unsubscribe(); + }; + + // Since we only have one viewport for the basic cs3d mode and it has + // only one hanging protocol, we can just use the first viewport + ({ unsubscribe } = toolGroupService.subscribe( + toolGroupService.EVENTS.VIEWPORT_ADDED, + activateTool + )); + + toolbarService.init(extensionManager); + toolbarService.addButtons(toolbarButtons); + toolbarService.createButtonSection('primary', [ + 'MeasurementTools', + 'Zoom', + 'WindowLevel', + 'Pan', + 'Capture', + 'Layout', + 'MPR', + 'Crosshairs', + 'MoreTools', + ]); + }, + onModeExit: ({ servicesManager }) => { + const { + toolGroupService, + syncGroupService, + toolbarService, + segmentationService, + cornerstoneViewportService, + } = servicesManager.services; + + toolGroupService.destroy(); + syncGroupService.destroy(); + segmentationService.destroy(); + cornerstoneViewportService.destroy(); + }, + /** */ + validationTags: { + study: [], + series: [], + }, + /** + * A boolean return value that indicates whether the mode is valid for the + * modalities of the selected studies. For instance a PET/CT mode should be + */ + isValidMode: ({ modalities }) => true, + /** + * Mode Routes are used to define the mode's behavior. A list of Mode Route + * that includes the mode's path and the layout to be used. The layout will + * include the components that are used in the layout. For instance, if the + * default layoutTemplate is used (id: '@ohif/extension-default.layoutTemplateModule.viewerLayout') + * it will include the leftPanels, rightPanels, and viewports. However, if + * you define another layoutTemplate that includes a Footer for instance, + * you should provide the Footer component here too. Note: We use Strings + * to reference the component's ID as they are registered in the internal + * ExtensionManager. The template for the string is: + * `${extensionId}.{moduleType}.${componentId}`. + */ + routes: [ + { + path: 'template', + layoutTemplate: ({ location, servicesManager }) => { + return { + id: ohif.layout, + props: { + leftPanels: [ohif.leftPanel], + rightPanels: [ohif.rightPanel], + viewports: [ + { + namespace: cornerstone.viewport, + displaySetsToDisplay: [ohif.sopClassHandler], + }, + ], + }, + }; + }, + }, + ], + /** List of extensions that are used by the mode */ + extensions: extensionDependencies, + /** HangingProtocol used by the mode */ + // hangingProtocol: [''], + /** SopClassHandlers used by the mode */ + sopClassHandlers: [ohif.sopClassHandler], + /** hotkeys for mode */ + hotkeys: [...hotkeys.defaults.hotkeyBindings], + }; +} + +const mode = { + id, + modeFactory, + extensionDependencies, +}; + +export default mode; diff --git a/platform/app/public/config/default.js b/platform/app/public/config/default.js index 97f506e7034..aae3c9afb98 100644 --- a/platform/app/public/config/default.js +++ b/platform/app/public/config/default.js @@ -4,8 +4,135 @@ window.config = { extensions: [], modes: [], customizationService: { - // Shows a custom route -access via http://localhost:3000/custom - // helloPage: '@ohif/extension-default.customizationModule.helloPage', + cornerstoneOverlayTopLeft: { + id: 'cornerstoneOverlayTopLeft', + items: [ + { + id: 'WindowLevel', + customizationType: 'ohif.overlayItem', + }, + { + id: 'PatientName', + customizationType: 'ohif.overlayItem', + label: '', + color: 'green', + background: 'white', + condition: ({ instance }) => + instance && instance.PatientName && instance.PatientName.Alphabetic, + contentF: ({ instance, formatters: { formatPN } }) => + formatPN(instance.PatientName.Alphabetic) + + ' ' + + (instance.PatientSex ? '(' + instance.PatientSex + ')' : ''), + }, + { + id: 'Species', + customizationType: 'ohif.overlayItem', + label: 'Species:', + condition: ({ instance }) => + instance && instance.PatientSpeciesDescription, + contentF: ({ instance }) => + instance.PatientSpeciesDescription + + '/' + + instance.PatientBreedDescription, + }, + { + id: 'PID', + customizationType: 'ohif.overlayItem', + label: 'PID:', + title: 'Patient PID', + condition: ({ instance }) => instance && instance.PatientID, + contentF: ({ instance }) => instance.PatientID, + }, + { + id: 'PatientBirthDate', + customizationType: 'ohif.overlayItem', + label: 'DOB:', + title: "Patient's Date of birth", + condition: ({ instance }) => instance && instance.PatientBirthDate, + contentF: ({ instance }) => instance.PatientBirthDate, + }, + { + id: 'OtherPid', + customizationType: 'ohif.overlayItem', + label: 'Other PID:', + title: 'Other Patient IDs', + condition: ({ instance }) => instance && instance.OtherPatientIDs, + contentF: ({ instance, formatters: { formatPN } }) => + formatPN(instance.OtherPatientIDs), + }, + ], + }, + cornerstoneOverlayTopRight: { + id: 'cornerstoneOverlayTopRight', + + items: [ + { + id: 'InstanceNmber', + customizationType: 'ohif.overlayItem.instanceNumber', + }, + { + id: 'StudyDescription', + customizationType: 'ohif.overlayItem', + label: '', + title: ({ instance }) => + instance && + instance.StudyDescription && + `Study Description: ${instance.StudyDescription}`, + condition: ({ instance }) => instance && instance.StudyDescription, + contentF: ({ instance }) => instance.StudyDescription, + }, + { + id: 'StudyDate', + customizationType: 'ohif.overlayItem', + label: '', + title: 'Study date', + condition: ({ instance }) => instance && instance.StudyDate, + contentF: ({ instance, formatters: { formatDate } }) => + formatDate(instance.StudyDate), + }, + { + id: 'StudyTime', + customizationType: 'ohif.overlayItem', + label: '', + title: 'Study time', + condition: ({ instance }) => instance && instance.StudyTime, + contentF: ({ instance, formatters: { formatTime } }) => + formatTime(instance.StudyTime), + }, + ], + }, + cornerstoneOverlayBottomLeft: { + id: 'cornerstoneOverlayBottomLeft', + + items: [ + { + id: 'SeriesNumber', + customizationType: 'ohif.overlayItem', + label: 'Ser:', + title: 'Series Number', + condition: ({ instance }) => instance && instance.SeriesNumber, + contentF: ({ instance }) => instance.SeriesNumber, + }, + { + id: 'SliceLocation', + customizationType: 'ohif.overlayItem', + label: 'Loc:', + title: 'Slice Location', + condition: ({ instance }) => instance && instance.SliceLocation, + contentF: ({ instance, formatters: { formatNumberPrecision } }) => + formatNumberPrecision(instance.SliceLocation, 2) + ' mm', + }, + { + id: 'SliceThickness', + customizationType: 'ohif.overlayItem', + label: 'Thick:', + title: 'Slice Thickness', + condition: ({ instance }) => instance && instance.SliceThickness, + contentF: ({ instance, formatters: { formatNumberPrecision } }) => + formatNumberPrecision(instance.SliceThickness, 2) + ' mm', + }, + ], + }, }, showStudyList: true, // some windows systems have issues with more than 3 web workers diff --git a/platform/docs/docs/platform/services/ui/customization-service.md b/platform/docs/docs/platform/services/ui/customization-service.md index 171548c20cf..3e87285d63e 100644 --- a/platform/docs/docs/platform/services/ui/customization-service.md +++ b/platform/docs/docs/platform/services/ui/customization-service.md @@ -43,7 +43,7 @@ automatically when the extension or mode is loaded. In the `value` of each customizations, you will define customization prototype(s). These customization prototype(s) can be considered like "Prototype" in Javascript. These can be used to extend the customization definitions from configurations. -Default cutomizations will be often used to define all the customization prototypes, +Default customizations will be often used to define all the customization prototypes, as they will be loaded automatically along with the defining extension or mode. @@ -58,7 +58,6 @@ For example, the `@ohif/extension-default` extension defines, value: [ { id: 'ohif.overlayItem', - uiType: 'uiType', content: function (props) { if (this.condition && !this.condition(props)) return null; @@ -92,8 +91,9 @@ For example, the `@ohif/extension-default` extension defines, ], ``` -And this `ohif.overlayItem` object will be used as a prototype to define items -to be displayed on `CustomizableViewportOverlay`. See the next section. +And this `ohif.overlayItem` object will be used as a prototype (and template) to define items +to be displayed on `CustomizableViewportOverlay`. See how we use the `ohif.overlayItem` in +the example below. ## Configuring customizations @@ -119,13 +119,16 @@ window.config = { customizationService: { cornerstoneOverlayTopRight: { id: 'cornerstoneOverlayTopRight', - customizationType: 'ohif.cornerstoneOverlay', items: [ { id: 'PatientNameOverlay', - // Note the overlayItem as a parent type - this provides the - // rendering functionality to read the attribute and use the label. + // Note below that here we are using the customization prototype of + // `ohif.overlayItem` which was registered to the customization module in + // `ohif/extension-default` extension. customizationType: 'ohif.overlayItem', + // the following props are passed to the `ohif.overlayItem` prototype + // which is used to render the overlay item based on the label, color, + // conditions, etc. attribute: 'PatientName', label: 'PN:', title: 'Patient Name', @@ -157,31 +160,28 @@ The `customizationType` field is simply the id of another customization object. ### Mode Customizations Mode-specific customizations are no different from the global ones, -except that the mode customizations are cleared before the mode `onModeEnter` -is called, and they can have new values registered in the `onModeEnter` +except that the mode customizations are specific to one mode and +are not globally applied. Mode-specific customizations are also cleared +before the mode `onModeEnter` is called, and they can have new values registered in the `onModeEnter` -In the mode customization, the overlay is then further customized -with a bottom-right overlay, which extends the customizationService configuration. +Following on our example above to customize the overlay, we can now add a mode customization +with a bottom-right overlay. ```js // Import the type from the extension itself -import OverlayUICustomization from '@ohif/cornerstone-extension'; - +import OverlayUICustomization from "@ohif/cornerstone-extension"; // In the mode itself, customizations can be registered: -onModeEnter() { - ... +onModeEnter: { // Note how the object can be strongly typed - const bottomRight: OverlayUICustomization = { - id: 'cornerstoneOverlayBottomRight', - // Note the type is the previously registered ohif.cornerstoneOverlay - customizationType: 'ohif.cornerstoneOverlay', - // The cornerstoneOverlay definition requires an items list here. - items: [ - // Custom definitions for hte context menu here. - ], - }; + const bottomRight: OverlayUICustomization = { + id: "cornerstoneOverlayBottomRight", + items: [ + // Custom definitions for hte context menu here. + ], + }; customizationService.addModeCustomizations(bottomRight); +} ``` The mode customizations are retrieved via the `getModeCustomization` function, @@ -198,9 +198,17 @@ can then be used in a way defined by the extension provided that customization point. ```ts - cornerstoneOverlay = uiConfigurationService.getModeCustomization("cornerstoneOverlay", {customizationType: "ohif.cornerstoneOverlay", ...}); - const { component: overlayComponent, props} = uiConfigurationService.getComponent(cornerstoneOverlay); - return (); +const cornerstoneOverlay = customizationService.getModeCustomization( + "cornerstoneOverlay", + { customizationType: "ohif.cornerstoneOverlay" }, +); + +const { component: overlayComponent, props } = + customizationService.getComponent(cornerstoneOverlay); + +return ( + +); ``` This example shows fetching the default component to render this object. The @@ -210,8 +218,11 @@ example (this example comes from the context menu customizations as that one uses commands lists): ```ts - cornerstoneContextMenu = uiConfigurationService.get("cornerstoneContextMenu", defaultMenu); - commandsManager.run(cornerstoneContextMenu, extraProps); +cornerstoneContextMenu = customizationService.get( + "cornerstoneContextMenu", + defaultMenu, +); +commandsManager.run(cornerstoneContextMenu, extraProps); ``` ### Global Customizations @@ -339,7 +350,6 @@ window.config = { customizationService: { cornerstoneOverlayTopLeft: { id: 'cornerstoneOverlayTopLeft', - customizationType: 'ohif.cornerstoneOverlay', items: [ { id: 'WindowLevel', @@ -398,7 +408,6 @@ window.config = { }, cornerstoneOverlayTopRight: { id: 'cornerstoneOverlayTopRight', - customizationType: 'ohif.cornerstoneOverlay', items: [ { @@ -438,7 +447,6 @@ window.config = { }, cornerstoneOverlayBottomLeft: { id: 'cornerstoneOverlayBottomLeft', - customizationType: 'ohif.cornerstoneOverlay', items: [ { diff --git a/yarn.lock b/yarn.lock index 144d51c9cff..16ba47a11f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -167,6 +167,13 @@ dependencies: default-browser-id "3.0.0" +"@babel/code-frame@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== + dependencies: + "@babel/highlight" "7.0.0-beta.44" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -229,6 +236,17 @@ json5 "^2.2.2" semver "^6.3.1" +"@babel/generator@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" + integrity sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== + dependencies: + "@babel/types" "7.0.0-beta.44" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.7", "@babel/generator@^7.22.9", "@babel/generator@^7.7.2": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" @@ -304,6 +322,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== +"@babel/helper-function-name@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" + integrity sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.44" + "@babel/template" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + "@babel/helper-function-name@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" @@ -312,6 +339,13 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helper-get-function-arity@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" + integrity sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== + dependencies: + "@babel/types" "7.0.0-beta.44" + "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" @@ -393,6 +427,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-split-export-declaration@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" + integrity sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== + dependencies: + "@babel/types" "7.0.0-beta.44" + "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -433,6 +474,15 @@ "@babel/traverse" "^7.22.6" "@babel/types" "^7.22.5" +"@babel/highlight@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" @@ -1327,6 +1377,16 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/template@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" + integrity sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + lodash "^4.2.0" + "@babel/template@^7.12.7", "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" @@ -1336,6 +1396,22 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/traverse@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" + integrity sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/generator" "7.0.0-beta.44" + "@babel/helper-function-name" "7.0.0-beta.44" + "@babel/helper-split-export-declaration" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.2.0" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": version "7.22.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" @@ -1352,6 +1428,15 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/types@7.0.0-beta.44": + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" + integrity sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" @@ -5581,7 +5666,7 @@ acorn-import-assertions@^1.9.0: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== -acorn-jsx@^5.0.1, acorn-jsx@^5.3.1: +acorn-jsx@^5.0.0, acorn-jsx@^5.0.1, acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -5605,7 +5690,7 @@ acorn-walk@^8.0.0, acorn-walk@^8.0.2: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^6.1.1: +acorn@^6.0.7, acorn@^6.1.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== @@ -5713,7 +5798,7 @@ ajv@8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@~6.12.6: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1, ajv@~6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -5772,7 +5857,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^3.0.0: +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -5799,7 +5884,7 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== -ansi-regex@^4.0.0: +ansi-regex@^4.0.0, ansi-regex@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== @@ -5962,6 +6047,11 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-union@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975" + integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -6094,6 +6184,11 @@ ast-types@^0.16.1: dependencies: tslib "^2.0.1" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -6218,6 +6313,18 @@ babel-eslint@9.x: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" +babel-eslint@^8.0.3: + version "8.2.6" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" + integrity sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== + dependencies: + "@babel/code-frame" "7.0.0-beta.44" + "@babel/traverse" "7.0.0-beta.44" + "@babel/types" "7.0.0-beta.44" + babylon "7.0.0-beta.44" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + babel-jest@^29.6.1: version "29.6.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.1.tgz#a7141ad1ed5ec50238f3cd36127636823111233a" @@ -6231,7 +6338,7 @@ babel-jest@^29.6.1: graceful-fs "^4.2.9" slash "^3.0.0" -babel-loader@^8.2.4, babel-loader@^8.2.5: +babel-loader@^8.0.0-beta.4, babel-loader@^8.2.4, babel-loader@^8.2.5: version "8.3.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== @@ -6292,7 +6399,7 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-inline-react-svg@^2.0.2: +babel-plugin-inline-react-svg@^2.0.1, babel-plugin-inline-react-svg@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/babel-plugin-inline-react-svg/-/babel-plugin-inline-react-svg-2.0.2.tgz#3a7bc4dc791c2d809a54d43f1a5ac53f3be8acb9" integrity sha512-iM9obPpCcdPE1EJE+UF+tni7CZ4q/OvdDm/TeBBHAYAEOqDcFd7fdnmym6OYAQMYfEpUnRYUYx2KxSUyo4cQxQ== @@ -6413,6 +6520,11 @@ babel-preset-jest@^29.5.0: babel-plugin-jest-hoist "^29.5.0" babel-preset-current-node-syntax "^1.0.0" +babylon@7.0.0-beta.44: + version "7.0.0-beta.44" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" + integrity sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== + bail@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" @@ -7122,6 +7234,13 @@ clean-webpack-plugin@^3.0.0: "@types/webpack" "^4.4.31" del "^4.1.1" +clean-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" + integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== + dependencies: + del "^4.1.1" + cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" @@ -7181,6 +7300,11 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -7640,6 +7764,18 @@ copy-text-to-clipboard@^3.0.1: resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b" integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q== +copy-webpack-plugin@^10.2.0: + version "10.2.4" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz#6c854be3fdaae22025da34b9112ccf81c63308fe" + integrity sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg== + dependencies: + fast-glob "^3.2.7" + glob-parent "^6.0.1" + globby "^12.0.2" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + copy-webpack-plugin@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" @@ -7761,6 +7897,13 @@ cross-env@^5.2.0: dependencies: cross-spawn "^6.0.5" +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + cross-fetch@^3.1.5: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" @@ -7787,7 +7930,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -8317,7 +8460,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@^0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -8851,6 +8994,11 @@ dotenv-webpack@^8.0.1: dependencies: dotenv-defaults "^2.0.2" +dotenv@^14.1.0: + version "14.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-14.3.2.tgz#7c30b3a5f777c79a3429cb2db358eef6751e8369" + integrity sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ== + dotenv@^16.0.0: version "16.3.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" @@ -8931,6 +9079,11 @@ emittery@^0.13.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -9246,6 +9399,17 @@ eslint-import-resolver-node@^0.3.7: is-core-module "^2.11.0" resolve "^1.22.1" +eslint-loader@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" + integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + eslint-module-utils@^2.7.4: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" @@ -9393,6 +9557,21 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -9429,6 +9608,48 @@ eslint-webpack-plugin@^2.5.3: normalize-path "^3.0.0" schema-utils "^3.1.1" +eslint@^5.0.1: + version "5.16.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" + integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.3" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.2.2" + js-yaml "^3.13.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.11" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" + eslint@^7.32.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -9475,6 +9696,15 @@ eslint@^7.32.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== + dependencies: + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" @@ -9489,7 +9719,7 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +esquery@^1.0.1, esquery@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -9866,7 +10096,7 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== @@ -9983,6 +10213,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -10068,6 +10305,15 @@ find-babel-config@^2.0.0: json5 "^2.1.1" path-exists "^4.0.0" +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A== + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + find-cache-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -10107,6 +10353,14 @@ find-up@5.0.0, find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -10137,6 +10391,15 @@ find-up@^6.3.0: locate-path "^7.1.0" path-exists "^5.0.0" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -10150,6 +10413,11 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + flatted@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" @@ -10643,7 +10911,7 @@ glob@^10.0.0, glob@^10.2.2: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -10715,7 +10983,7 @@ global@^4.3.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.12.0: +globals@^11.1.0, globals@^11.12.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -10760,6 +11028,18 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" +globby@^12.0.2: + version "12.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22" + integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA== + dependencies: + array-union "^3.0.1" + dir-glob "^3.0.1" + fast-glob "^3.2.7" + ignore "^5.1.9" + merge2 "^1.4.1" + slash "^4.0.0" + globby@^13.1.1: version "13.2.2" resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" @@ -11391,7 +11671,7 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.0.0, ignore@^5.0.4, ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.0.0, ignore@^5.0.4, ignore@^5.1.1, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -11536,6 +11816,25 @@ inquirer@8.2.4: through "^2.3.6" wrap-ansi "^7.0.0" +inquirer@^6.2.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + inquirer@^8.2.0, inquirer@^8.2.4: version "8.2.5" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" @@ -11581,7 +11880,7 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -invariant@^2.2.4: +invariant@^2.2.0, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -12637,6 +12936,11 @@ joi@^17.6.0, joi@^17.7.0: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" +js-tokens@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -12657,7 +12961,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@^3.10.0, js-yaml@^3.13.1: +js-yaml@^3.10.0, js-yaml@^3.13.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -13031,6 +13335,14 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -13176,12 +13488,20 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +loader-fs-cache@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.4.2" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== @@ -13328,7 +13648,7 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.0.1, lodash@^4.1.1, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5: +lodash@^4.0.1, lodash@^4.1.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.2.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -14431,6 +14751,11 @@ mustache@^4.2.0: resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== + mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -14949,6 +15274,11 @@ object-hash@2.1.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + object-hash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" @@ -15137,6 +15467,18 @@ optimize-css-assets-webpack-plugin@^6.0.1: last-call-webpack-plugin "^3.0.0" postcss "^8.2.1" +optionator@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + optionator@^0.9.1: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -15515,6 +15857,13 @@ path-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -15697,6 +16046,13 @@ pkg-config@^1.1.0: find-root "^1.0.0" xtend "^4.0.1" +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg== + dependencies: + find-up "^1.0.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -16402,6 +16758,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -17575,6 +17936,11 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3, regexp.prototype.f define-properties "^1.2.0" functions-have-names "^1.2.3" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + regexpp@^3.0.0, regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" @@ -17910,6 +18276,13 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== +rimraf@2.6.3, rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -17931,13 +18304,6 @@ rimraf@^4.4.1: dependencies: glob "^9.2.0" -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rollup-plugin-terser@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" @@ -17970,7 +18336,7 @@ rtlcss@^3.5.0: postcss "^8.3.11" strip-json-comments "^3.1.1" -run-async@^2.4.0: +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -17992,7 +18358,7 @@ rw@^1.3.3: resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== -rxjs@^6.3.3: +rxjs@^6.3.3, rxjs@^6.4.0: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -18155,7 +18521,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -18476,6 +18842,15 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" @@ -18882,7 +19257,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.1.1: +string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -18890,6 +19265,15 @@ string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -18984,6 +19368,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^7.0.0, strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -19033,16 +19424,16 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -19176,6 +19567,16 @@ synchronous-promise@^2.0.15: resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032" integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + table@^6.0.9: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -19517,6 +19918,11 @@ trim-newlines@^3.0.0, trim-newlines@^5.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-5.0.0.tgz#fbe350dc9d5fe15e80793b86c09bc7436a3da383" integrity sha512-kstfs+hgwmdsOadN3KgA+C68wPJwnZq4DN6WMDCvZapDWEF34W2TyPKN2v2+BJnZgIz5QOfxFeldLyYvdgRAwg== +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== + trim-trailing-lines@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" @@ -19606,6 +20012,13 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -20735,6 +21148,11 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -21021,6 +21439,13 @@ write-pkg@4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + ws@^6.1.0: version "6.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" From 3c882dc9c0d7dcf7d7b5dc0312d5e2d0aa920de7 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 4 Aug 2023 11:56:58 -0400 Subject: [PATCH 02/94] initial panel --- modes/longitudinal/src/initToolGroups.js | 4 + modes/segmentation/src/index.tsx | 11 +- platform/app/pluginConfig.json | 3 + platform/app/public/config/default.js | 132 +---------------------- 4 files changed, 16 insertions(+), 134 deletions(-) diff --git a/modes/longitudinal/src/initToolGroups.js b/modes/longitudinal/src/initToolGroups.js index b8e88db909a..89c2a724849 100644 --- a/modes/longitudinal/src/initToolGroups.js +++ b/modes/longitudinal/src/initToolGroups.js @@ -72,6 +72,10 @@ function initSRToolGroup(extensionManager, toolGroupService, commandsManager) { '@ohif/extension-cornerstone-dicom-sr.utilityModule.tools' ); + if (!SRUtilityModule) { + return; + } + const CS3DUtilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone.utilityModule.tools' ); diff --git a/modes/segmentation/src/index.tsx b/modes/segmentation/src/index.tsx index 2086aa36b81..9a7baed2e7b 100644 --- a/modes/segmentation/src/index.tsx +++ b/modes/segmentation/src/index.tsx @@ -14,6 +14,10 @@ const cornerstone = { viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone', }; +const segmentation = { + panel: '@ohif/extension-cornerstone-dicom-seg.panelModule.panelSegmentation', +}; + /** * Just two dependencies to be able to render a viewport with panels in order * to make sure that the mode is working. @@ -21,6 +25,7 @@ const cornerstone = { const extensionDependencies = { '@ohif/extension-default': '^3.0.0', '@ohif/extension-cornerstone': '^3.0.0', + '@ohif/extension-cornerstone-dicom-seg': '^3.0.0', }; function modeFactory({ modeConfiguration }) { @@ -30,12 +35,12 @@ function modeFactory({ modeConfiguration }) { * is used to identify the mode in the viewer's state. */ id, - routeName: 'template', + routeName: 'segmentation', /** * Mode name, which is displayed in the viewer's UI in the workList, for the * user to select the mode. */ - displayName: 'Template Mode', + displayName: 'Segmentation', /** * Runs when the Mode Route is mounted to the DOM. Usually used to initialize * Services and other resources. @@ -140,7 +145,7 @@ function modeFactory({ modeConfiguration }) { id: ohif.layout, props: { leftPanels: [ohif.leftPanel], - rightPanels: [ohif.rightPanel], + rightPanels: [segmentation.panel], viewports: [ { namespace: cornerstone.viewport, diff --git a/platform/app/pluginConfig.json b/platform/app/pluginConfig.json index 2f892db6c86..0f4e0a816f2 100644 --- a/platform/app/pluginConfig.json +++ b/platform/app/pluginConfig.json @@ -63,6 +63,9 @@ { "packageName": "@ohif/mode-microscopy" }, + { + "packageName": "@ohif/mode-segmentation" + }, { "packageName": "@ohif/mode-test", "default": false, diff --git a/platform/app/public/config/default.js b/platform/app/public/config/default.js index aae3c9afb98..27ac4e996bc 100644 --- a/platform/app/public/config/default.js +++ b/platform/app/public/config/default.js @@ -3,137 +3,7 @@ window.config = { // whiteLabeling: {}, extensions: [], modes: [], - customizationService: { - cornerstoneOverlayTopLeft: { - id: 'cornerstoneOverlayTopLeft', - items: [ - { - id: 'WindowLevel', - customizationType: 'ohif.overlayItem', - }, - { - id: 'PatientName', - customizationType: 'ohif.overlayItem', - label: '', - color: 'green', - background: 'white', - condition: ({ instance }) => - instance && instance.PatientName && instance.PatientName.Alphabetic, - contentF: ({ instance, formatters: { formatPN } }) => - formatPN(instance.PatientName.Alphabetic) + - ' ' + - (instance.PatientSex ? '(' + instance.PatientSex + ')' : ''), - }, - { - id: 'Species', - customizationType: 'ohif.overlayItem', - label: 'Species:', - condition: ({ instance }) => - instance && instance.PatientSpeciesDescription, - contentF: ({ instance }) => - instance.PatientSpeciesDescription + - '/' + - instance.PatientBreedDescription, - }, - { - id: 'PID', - customizationType: 'ohif.overlayItem', - label: 'PID:', - title: 'Patient PID', - condition: ({ instance }) => instance && instance.PatientID, - contentF: ({ instance }) => instance.PatientID, - }, - { - id: 'PatientBirthDate', - customizationType: 'ohif.overlayItem', - label: 'DOB:', - title: "Patient's Date of birth", - condition: ({ instance }) => instance && instance.PatientBirthDate, - contentF: ({ instance }) => instance.PatientBirthDate, - }, - { - id: 'OtherPid', - customizationType: 'ohif.overlayItem', - label: 'Other PID:', - title: 'Other Patient IDs', - condition: ({ instance }) => instance && instance.OtherPatientIDs, - contentF: ({ instance, formatters: { formatPN } }) => - formatPN(instance.OtherPatientIDs), - }, - ], - }, - cornerstoneOverlayTopRight: { - id: 'cornerstoneOverlayTopRight', - - items: [ - { - id: 'InstanceNmber', - customizationType: 'ohif.overlayItem.instanceNumber', - }, - { - id: 'StudyDescription', - customizationType: 'ohif.overlayItem', - label: '', - title: ({ instance }) => - instance && - instance.StudyDescription && - `Study Description: ${instance.StudyDescription}`, - condition: ({ instance }) => instance && instance.StudyDescription, - contentF: ({ instance }) => instance.StudyDescription, - }, - { - id: 'StudyDate', - customizationType: 'ohif.overlayItem', - label: '', - title: 'Study date', - condition: ({ instance }) => instance && instance.StudyDate, - contentF: ({ instance, formatters: { formatDate } }) => - formatDate(instance.StudyDate), - }, - { - id: 'StudyTime', - customizationType: 'ohif.overlayItem', - label: '', - title: 'Study time', - condition: ({ instance }) => instance && instance.StudyTime, - contentF: ({ instance, formatters: { formatTime } }) => - formatTime(instance.StudyTime), - }, - ], - }, - cornerstoneOverlayBottomLeft: { - id: 'cornerstoneOverlayBottomLeft', - - items: [ - { - id: 'SeriesNumber', - customizationType: 'ohif.overlayItem', - label: 'Ser:', - title: 'Series Number', - condition: ({ instance }) => instance && instance.SeriesNumber, - contentF: ({ instance }) => instance.SeriesNumber, - }, - { - id: 'SliceLocation', - customizationType: 'ohif.overlayItem', - label: 'Loc:', - title: 'Slice Location', - condition: ({ instance }) => instance && instance.SliceLocation, - contentF: ({ instance, formatters: { formatNumberPrecision } }) => - formatNumberPrecision(instance.SliceLocation, 2) + ' mm', - }, - { - id: 'SliceThickness', - customizationType: 'ohif.overlayItem', - label: 'Thick:', - title: 'Slice Thickness', - condition: ({ instance }) => instance && instance.SliceThickness, - contentF: ({ instance, formatters: { formatNumberPrecision } }) => - formatNumberPrecision(instance.SliceThickness, 2) + ' mm', - }, - ], - }, - }, + customizationService: {}, showStudyList: true, // some windows systems have issues with more than 3 web workers maxNumberOfWebWorkers: 3, From 9ef0febef4f0cc2203fde342e1c63072ae11b7b8 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 4 Aug 2023 12:34:41 -0400 Subject: [PATCH 03/94] add segmentation panel --- .../services/SegmentationService/SegmentationService.ts | 9 ++++++++- .../SegmentationGroupTable/SegmentationConfig.tsx | 2 +- .../SegmentationGroupTable/SegmentationGroupTable.tsx | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts b/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts index 26d0147b559..32ecc69a864 100644 --- a/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts +++ b/extensions/cornerstone/src/services/SegmentationService/SegmentationService.ts @@ -1067,7 +1067,8 @@ class SegmentationService extends PubSubService { toolGroupId: string, segmentationId: string, hydrateSegmentation = false, - representationType = csToolsEnums.SegmentationRepresentations.Labelmap + representationType = csToolsEnums.SegmentationRepresentations.Labelmap, + suppressEvents = false ): Promise => { const segmentation = this.getSegmentation(segmentationId); @@ -1163,6 +1164,12 @@ class SegmentationService extends PubSubService { ); } } + + if (!suppressEvents) { + this._broadcastEvent(this.EVENTS.SEGMENTATION_UPDATED, { + segmentation, + }); + } }; public setSegmentRGBAColorForSegmentation = ( diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx index dbd9b06cb08..35ae991f22f 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx @@ -120,7 +120,7 @@ const SegmentationConfig = ({ const { initialConfig } = segmentationConfig; const [isMinimized, setIsMinimized] = useState(true); return ( -
+
{ diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx index 42bb3f2d84c..f0ebaa06081 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx @@ -112,6 +112,8 @@ SegmentationGroupTable.defaultProps = { title: '', segmentations: [], activeSegmentationId: '', + showAddSegmentation: true, + showAddSegment: true, onClick: () => {}, onEdit: () => {}, onDelete: () => {}, From 2b2e566a171863c3c302c32784941d3e72472c20 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 4 Aug 2023 12:34:56 -0400 Subject: [PATCH 04/94] segpanel initial work --- .../src/panels/PanelSegmentation.tsx | 210 ++++++++++++------ 1 file changed, 139 insertions(+), 71 deletions(-) diff --git a/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx b/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx index bc645652a7f..5a045842e26 100644 --- a/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx +++ b/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState, useCallback } from 'react'; import PropTypes from 'prop-types'; -import { SegmentationGroupTable } from '@ohif/ui'; +import { SegmentationGroupTable, useViewportGrid } from '@ohif/ui'; import callInputDialog from './callInputDialog'; import { useTranslation } from 'react-i18next'; @@ -9,7 +9,14 @@ export default function PanelSegmentation({ servicesManager, commandsManager, }) { - const { segmentationService, uiDialogService } = servicesManager.services; + const { + segmentationService, + uiDialogService, + uiNotificationService, + } = servicesManager.services; + const [viewportGrid, viewportGridService] = useViewportGrid(); + + const { layout, activeViewportIndex, viewports } = viewportGrid; const { t } = useTranslation('PanelSegmentation'); const [selectedSegmentationId, setSelectedSegmentationId] = useState(null); @@ -67,6 +74,69 @@ export default function PanelSegmentation({ }; }, []); + const onSegmentationAdd = () => { + const activeViewport = viewports[activeViewportIndex]; + + if (!activeViewport) { + return; + } + + const { displaySetInstanceUIDs } = activeViewport; + + // if more than one show notification that this is not supported + if (displaySetInstanceUIDs.length > 1) { + uiNotificationService.show({ + title: t('Segmentation'), + message: t( + 'Segmentation is not supported for multiple display sets yet' + ), + type: 'error', + }); + return; + } + + const displaySetInstanceUID = displaySetInstanceUIDs[0]; + + // identify if the viewport is a stack viewport then we need to convert + // the viewport to a volume viewport first and mount on the same element + // otherwise we are good + + const { viewportOptions } = activeViewport; + + if (viewportOptions.viewportType === 'stack') { + // Todo: handle finding out other viewports in the grid + // that require to change to volume viewport + + // Todo: add current imageIdIndex to the viewportOptions + // so that we can restore it after changing to volume viewport + viewportGridService.setDisplaySetsForViewports([ + { + viewportIndex: activeViewportIndex, + displaySetInstanceUIDs: [displaySetInstanceUID], + viewportOptions: { + // initialImageOptions: { + // index: + // }, + viewportType: 'volume', + }, + }, + ]); + } + + setTimeout(async () => { + const segmentationId = await segmentationService.createSegmentationForDisplaySet( + displaySetInstanceUID, + { label: 'New Segmentation' } + ); + + await segmentationService.addSegmentationRepresentationToToolGroup( + 'default', + segmentationId, + true // hydrateSegmentation, + ); + }, 1000); + }; + const onSegmentationClick = (segmentationId: string) => { segmentationService.setActiveSegmentationForToolGroup(segmentationId); }; @@ -191,75 +261,73 @@ export default function PanelSegmentation({ return (
{/* show segmentation table */} - {segmentations?.length ? ( - - _setSegmentationConfiguration( - selectedSegmentationId, - 'renderOutline', - value - ) - } - setOutlineOpacityActive={value => - _setSegmentationConfiguration( - selectedSegmentationId, - 'outlineOpacity', - value - ) - } - setRenderFill={value => - _setSegmentationConfiguration( - selectedSegmentationId, - 'renderFill', - value - ) - } - setRenderInactiveSegmentations={value => - _setSegmentationConfiguration( - selectedSegmentationId, - 'renderInactiveSegmentations', - value - ) - } - setOutlineWidthActive={value => - _setSegmentationConfiguration( - selectedSegmentationId, - 'outlineWidthActive', - value - ) - } - setFillAlpha={value => - _setSegmentationConfiguration( - selectedSegmentationId, - 'fillAlpha', - value - ) - } - setFillAlphaInactive={value => - _setSegmentationConfiguration( - selectedSegmentationId, - 'fillAlphaInactive', - value - ) - } - /> - ) : null} + + _setSegmentationConfiguration( + selectedSegmentationId, + 'renderOutline', + value + ) + } + setOutlineOpacityActive={value => + _setSegmentationConfiguration( + selectedSegmentationId, + 'outlineOpacity', + value + ) + } + setRenderFill={value => + _setSegmentationConfiguration( + selectedSegmentationId, + 'renderFill', + value + ) + } + setRenderInactiveSegmentations={value => + _setSegmentationConfiguration( + selectedSegmentationId, + 'renderInactiveSegmentations', + value + ) + } + setOutlineWidthActive={value => + _setSegmentationConfiguration( + selectedSegmentationId, + 'outlineWidthActive', + value + ) + } + setFillAlpha={value => + _setSegmentationConfiguration( + selectedSegmentationId, + 'fillAlpha', + value + ) + } + setFillAlphaInactive={value => + _setSegmentationConfiguration( + selectedSegmentationId, + 'fillAlphaInactive', + value + ) + } + />
); } From acd56760ba757deb68b7ae296d3e57a136ae78f9 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 4 Aug 2023 12:57:25 -0400 Subject: [PATCH 05/94] working seg panel --- .../src/panels/PanelSegmentation.tsx | 17 ++++- extensions/cornerstone/src/index.tsx | 2 +- .../SegmentationService.ts | 67 +++++++++++-------- .../SegmentationGroup.tsx | 2 +- 4 files changed, 56 insertions(+), 32 deletions(-) diff --git a/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx b/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx index 5a045842e26..aa60e3bc260 100644 --- a/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx +++ b/extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx @@ -16,7 +16,7 @@ export default function PanelSegmentation({ } = servicesManager.services; const [viewportGrid, viewportGridService] = useViewportGrid(); - const { layout, activeViewportIndex, viewports } = viewportGrid; + const { activeViewportIndex, viewports } = viewportGrid; const { t } = useTranslation('PanelSegmentation'); const [selectedSegmentationId, setSelectedSegmentationId] = useState(null); @@ -134,6 +134,13 @@ export default function PanelSegmentation({ segmentationId, true // hydrateSegmentation, ); + + // Todo: handle other toolgroups than default + segmentationService.addSegment(segmentationId, { + properties: { + label: 'Segment 1', + }, + }); }, 1000); }; @@ -153,6 +160,10 @@ export default function PanelSegmentation({ return toolGroupIds; }; + const onSegmentAdd = segmentationId => { + segmentationService.addSegment(segmentationId); + }; + const onSegmentClick = (segmentationId, segmentIndex) => { segmentationService.setActiveSegmentForSegmentation( segmentationId, @@ -259,8 +270,7 @@ export default function PanelSegmentation({ ); return ( -
- {/* show segmentation table */} +
{showAddSegment && ( -
onSegmentAdd()}> +
onSegmentAdd(id)}>
Add Segment
From eeef8e81c0603c2f31ba12a87d63cce0625c2d43 Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 10 Aug 2023 09:52:27 -0400 Subject: [PATCH 06/94] added panel secton --- platform/ui/.storybook/main.ts | 14 ++-- platform/ui/package.json | 18 ++--- platform/ui/src/assets/icons/chevron-left.svg | 4 +- .../assets/icons/icon-disclosure-close.svg | 6 ++ .../src/assets/icons/icon-disclosure-open.svg | 6 ++ .../Icon/__stories__/icon.stories.mdx | 4 +- platform/ui/src/components/Icon/getIcon.js | 4 ++ .../components/PanelSection/PanelSection.tsx | 34 ++++++++++ .../__stories__/PanelSection.stories.mdx | 67 +++++++++++++++++++ .../ui/src/components/PanelSection/index.js | 2 + 10 files changed, 141 insertions(+), 18 deletions(-) create mode 100644 platform/ui/src/assets/icons/icon-disclosure-close.svg create mode 100644 platform/ui/src/assets/icons/icon-disclosure-open.svg create mode 100644 platform/ui/src/components/PanelSection/PanelSection.tsx create mode 100644 platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx create mode 100644 platform/ui/src/components/PanelSection/index.js diff --git a/platform/ui/.storybook/main.ts b/platform/ui/.storybook/main.ts index 5bed58d84b1..d2088853c75 100644 --- a/platform/ui/.storybook/main.ts +++ b/platform/ui/.storybook/main.ts @@ -1,12 +1,12 @@ -import path from 'path'; +import path, { dirname, join } from 'path'; import remarkGfm from 'remark-gfm'; import type { StorybookConfig } from '@storybook/react-webpack5'; const config: StorybookConfig = { stories: ['../src/**/*.stories.@(mdx)'], addons: [ - '@storybook/addon-links', - '@storybook/addon-essentials', + getAbsolutePath("@storybook/addon-links"), + getAbsolutePath("@storybook/addon-essentials"), // Other addons go here { name: '@storybook/addon-docs', @@ -19,9 +19,9 @@ const config: StorybookConfig = { }, }, ], - core: { builder: '@storybook/builder-webpack5' }, + core: {}, framework: { - name: '@storybook/react-webpack5', + name: getAbsolutePath("@storybook/react-webpack5"), options: {}, }, docs: { @@ -93,3 +93,7 @@ const config: StorybookConfig = { }; export default config; + +function getAbsolutePath(value: string): any { + return dirname(require.resolve(join(value, "package.json"))); +} diff --git a/platform/ui/package.json b/platform/ui/package.json index 5e0a26470a8..e3853424def 100644 --- a/platform/ui/package.json +++ b/platform/ui/package.json @@ -53,14 +53,14 @@ }, "devDependencies": { "@babel/core": "^7.21.4", - "@storybook/addon-actions": "^7.0.7", - "@storybook/addon-docs": "^7.0.7", - "@storybook/addon-essentials": "^7.0.7", - "@storybook/addon-links": "^7.0.7", - "@storybook/cli": "^7.0.7", - "@storybook/react": "^7.0.7", - "@storybook/react-webpack5": "^7.0.7", - "@storybook/source-loader": "^7.0.7", + "@storybook/addon-actions": "^7.2.2", + "@storybook/addon-docs": "^7.2.2", + "@storybook/addon-essentials": "^7.2.2", + "@storybook/addon-links": "^7.2.2", + "@storybook/cli": "^7.2.2", + "@storybook/react": "^7.2.2", + "@storybook/react-webpack5": "^7.2.2", + "@storybook/source-loader": "^7.2.2", "autoprefixer": "^10.4.14", "babel-loader": "^9.1.2", "dotenv-webpack": "^8.0.1", @@ -68,7 +68,7 @@ "postcss-loader": "^7.2.4", "prop-types": "^15.8.1", "remark-gfm": "^3.0.1", - "storybook": "^7.0.7", + "storybook": "^7.2.2", "tailwindcss": "3.2.4" } } diff --git a/platform/ui/src/assets/icons/chevron-left.svg b/platform/ui/src/assets/icons/chevron-left.svg index 26b5ca33b48..e9951716baa 100644 --- a/platform/ui/src/assets/icons/chevron-left.svg +++ b/platform/ui/src/assets/icons/chevron-left.svg @@ -1,3 +1,3 @@ - - + + diff --git a/platform/ui/src/assets/icons/icon-disclosure-close.svg b/platform/ui/src/assets/icons/icon-disclosure-close.svg new file mode 100644 index 00000000000..b47608ed742 --- /dev/null +++ b/platform/ui/src/assets/icons/icon-disclosure-close.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/platform/ui/src/assets/icons/icon-disclosure-open.svg b/platform/ui/src/assets/icons/icon-disclosure-open.svg new file mode 100644 index 00000000000..11e4d580390 --- /dev/null +++ b/platform/ui/src/assets/icons/icon-disclosure-open.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/platform/ui/src/components/Icon/__stories__/icon.stories.mdx b/platform/ui/src/components/Icon/__stories__/icon.stories.mdx index ab831fd2bd7..90bab9e7ead 100644 --- a/platform/ui/src/components/Icon/__stories__/icon.stories.mdx +++ b/platform/ui/src/components/Icon/__stories__/icon.stories.mdx @@ -58,8 +58,8 @@ icons. {icons .filter(ic => ic !== 'magnifier') .map(icon => ( -
-
+
+
{icon}
diff --git a/platform/ui/src/components/Icon/getIcon.js b/platform/ui/src/components/Icon/getIcon.js index 18a80243527..51017c3ae58 100644 --- a/platform/ui/src/components/Icon/getIcon.js +++ b/platform/ui/src/components/Icon/getIcon.js @@ -123,6 +123,8 @@ import iconMPR from './../../assets/icons/icon-mpr-alt.svg'; import checkboxDefault from './../../assets/icons/checkbox-default.svg'; import checkboxActive from './../../assets/icons/checkbox-active.svg'; import referenceLines from './../../assets/icons/reference-lines.svg'; +import chevronDownNew from './../../assets/icons/icon-disclosure-close.svg'; +import chevronLeftNew from './../../assets/icons/icon-disclosure-open.svg'; /** Old OHIF */ import oldTrash from './../../assets/icons/old-trash.svg'; @@ -255,6 +257,8 @@ const ICONS = { 'checkbox-default': checkboxDefault, 'checkbox-active': checkboxActive, 'tool-referenceLines': referenceLines, + 'chevron-left-new': chevronLeftNew, + 'chevron-down-new': chevronDownNew, /** Old OHIF */ 'old-trash': oldTrash, diff --git a/platform/ui/src/components/PanelSection/PanelSection.tsx b/platform/ui/src/components/PanelSection/PanelSection.tsx new file mode 100644 index 00000000000..31d7b5a8260 --- /dev/null +++ b/platform/ui/src/components/PanelSection/PanelSection.tsx @@ -0,0 +1,34 @@ +import React, { useState } from 'react'; +import { Icon } from '@ohif/ui'; +import PropTypes from 'prop-types'; + +const PanelSection = ({ title, children }) => { + const [isChildrenVisible, setChildrenVisible] = useState(true); + + const handleHeaderClick = () => { + setChildrenVisible(!isChildrenVisible); + }; + + return ( + <> +
+
{title}
+ +
+ {isChildrenVisible && children} + + ); +}; + +PanelSection.defaultProps = {}; + +PanelSection.propTypes = { + title: PropTypes.string, +}; + +export default PanelSection; diff --git a/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx b/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx new file mode 100644 index 00000000000..99e27a773b3 --- /dev/null +++ b/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx @@ -0,0 +1,67 @@ +import PanelSection from '../PanelSection'; +import SidePanel from '../../SidePanel'; + +import { ArgsTable, Story, Canvas, Meta } from '@storybook/addon-docs'; +import { createComponentTemplate } from '../../../storybook/functions/create-component-story'; + +export const argTypes = { + component: PanelSection, + title: 'Components/PanelSection', +}; + + + +export const PanelSectionTemplate = (args) => ( +
+ ( + +
{"this is children"}
+
+ ), + }, + ]} + /> +
+); + + + + +- [Overview](#overview) +- [Props](#props) +- [Contribute](#contribute) + +## Overview + +PanelSection is a component that renders the PanelSections. + + + + {PanelSectionTemplate.bind({})} + + + +## Props + + + +## Usage + +## Contribute + +
diff --git a/platform/ui/src/components/PanelSection/index.js b/platform/ui/src/components/PanelSection/index.js new file mode 100644 index 00000000000..68034ac1412 --- /dev/null +++ b/platform/ui/src/components/PanelSection/index.js @@ -0,0 +1,2 @@ +import SidePanel from './SidePanel'; +export default SidePanel; From 97689191e3408c98d1a578443e31ef04329383e4 Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 10 Aug 2023 12:55:43 -0400 Subject: [PATCH 07/94] add panel section --- platform/ui/src/components/Icon/getIcon.js | 1 - .../components/PanelSection/PanelSection.tsx | 20 +++++++++++++++---- .../__stories__/PanelSection.stories.mdx | 3 +++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/platform/ui/src/components/Icon/getIcon.js b/platform/ui/src/components/Icon/getIcon.js index 51017c3ae58..6bd645c1579 100644 --- a/platform/ui/src/components/Icon/getIcon.js +++ b/platform/ui/src/components/Icon/getIcon.js @@ -235,7 +235,6 @@ const ICONS = { 'tool-create-threshold': toolCreateThreshold, 'tool-calibration': toolCalibration, 'tool-point': toolCircle, - 'tool-circle': toolCircle, 'tool-freehand-line': toolFreehand, 'tool-freehand-polygon': toolFreehandPolygon, 'tool-polygon': toolPolygon, diff --git a/platform/ui/src/components/PanelSection/PanelSection.tsx b/platform/ui/src/components/PanelSection/PanelSection.tsx index 31d7b5a8260..d953c6a437a 100644 --- a/platform/ui/src/components/PanelSection/PanelSection.tsx +++ b/platform/ui/src/components/PanelSection/PanelSection.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { Icon } from '@ohif/ui'; import PropTypes from 'prop-types'; -const PanelSection = ({ title, children }) => { +const PanelSection = ({ title, children, actionIcons = [] }) => { const [isChildrenVisible, setChildrenVisible] = useState(true); const handleHeaderClick = () => { @@ -16,9 +16,21 @@ const PanelSection = ({ title, children }) => { onClick={handleHeaderClick} >
{title}
- +
+ {actionIcons.map((icon, index) => ( + { + e.stopPropagation(); + icon.onClick(); + }} + /> + ))} + +
{isChildrenVisible && children} diff --git a/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx b/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx index 99e27a773b3..414703d8196 100644 --- a/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx +++ b/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx @@ -50,6 +50,9 @@ PanelSection is a component that renders the PanelSections. name="Overview" args={{ title: 'left', + actionIcons: [ + {name: 'row-hide', onClick: ()=> alert('row-hide')}, + ] }} > {PanelSectionTemplate.bind({})} From f50f93a01bf77addfdb2546e8993a0a1311e286b Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 10 Aug 2023 12:56:06 -0400 Subject: [PATCH 08/94] add panel section --- yarn.lock | 1109 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 701 insertions(+), 408 deletions(-) diff --git a/yarn.lock b/yarn.lock index f1e9a444181..2dc0489dbc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1370,7 +1370,7 @@ core-js-pure "^3.30.2" regenerator-runtime "^0.13.11" -"@babel/runtime@7.17.9", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@7.17.9", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.22.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.3.tgz#0a7fce51d43adbf0f7b517a71f4c3aaca92ebcbb" integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ== @@ -2436,6 +2436,33 @@ resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4" integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== +"@floating-ui/core@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" + integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== + dependencies: + "@floating-ui/utils" "^0.1.1" + +"@floating-ui/dom@^1.3.0": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.1.tgz#88b70defd002fe851f17b4a25efb2d3c04d7a8d7" + integrity sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw== + dependencies: + "@floating-ui/core" "^1.4.1" + "@floating-ui/utils" "^0.1.1" + +"@floating-ui/react-dom@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.1.tgz#7972a4fc488a8c746cded3cfe603b6057c308a91" + integrity sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA== + dependencies: + "@floating-ui/dom" "^1.3.0" + +"@floating-ui/utils@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83" + integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== + "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" @@ -3487,6 +3514,234 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@radix-ui/number@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.1.tgz#644161a3557f46ed38a042acf4a770e826021674" + integrity sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/primitive@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.1.tgz#e46f9958b35d10e9f6dc71c497305c22e3e55dbd" + integrity sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-arrow@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz#c24f7968996ed934d57fe6cde5d6ec7266e1d25d" + integrity sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-collection@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.0.3.tgz#9595a66e09026187524a36c6e7e9c7d286469159" + integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== + dependencies: + "@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" + +"@radix-ui/react-compose-refs@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" + integrity sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-context@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.1.tgz#fe46e67c96b240de59187dcb7a1a50ce3e2ec00c" + integrity sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-direction@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.1.tgz#9cb61bf2ccf568f3421422d182637b7f47596c9b" + integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-dismissable-layer@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz#883a48f5f938fa679427aa17fcba70c5494c6978" + integrity sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg== + dependencies: + "@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" + +"@radix-ui/react-focus-guards@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad" + integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-focus-scope@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz#9c2e8d4ed1189a1d419ee61edd5c1828726472f9" + integrity sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ== + dependencies: + "@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" + +"@radix-ui/react-id@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.1.tgz#73cdc181f650e4df24f0b6a5b7aa426b912c88c0" + integrity sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-popper@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.2.tgz#4c0b96fcd188dc1f334e02dba2d538973ad842e9" + integrity sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg== + dependencies: + "@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" + +"@radix-ui/react-portal@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.3.tgz#ffb961244c8ed1b46f039e6c215a6c4d9989bda1" + integrity sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-primitive@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" + integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-select@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-1.2.2.tgz#caa981fa0d672cf3c1b2a5240135524e69b32181" + integrity sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw== + 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" + +"@radix-ui/react-slot@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab" + integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + +"@radix-ui/react-use-callback-ref@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" + integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-controllable-state@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" + integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-escape-keydown@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" + integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-layout-effect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" + integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-previous@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz#b595c087b07317a4f143696c6a01de43b0d0ec66" + integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-rect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2" + integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-use-size@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" + integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-visually-hidden@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" + integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/rect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.0.1.tgz#bf8e7d947671996da2e30f4904ece343bc4a883f" + integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@react-dnd/asap@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-4.0.1.tgz#5291850a6b58ce6f2da25352a64f1b0674871aab" @@ -3621,19 +3876,19 @@ p-map "^4.0.0" webpack-sources "^3.2.2" -"@storybook/addon-actions@7.1.1", "@storybook/addon-actions@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.1.1.tgz#fb7f94b63896d7b395de9ce19c3eb6c35e5c196f" - integrity sha512-IDxBmNnVgLFfQ407MxOUJmqjz0hgiZB9syi4sfp7BKp5MIPUDT1m+z603kGrvx0bk0W0DPqkp/H8ySEGEx0x6g== +"@storybook/addon-actions@7.2.2", "@storybook/addon-actions@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.2.2.tgz#93d38fae3b172dd270cf047f25e9dbcde369f648" + integrity sha512-Ev9oGlpxrt7tCpCmAYA04hsZYKnZIiksaQDCgKAf6I2+yUZBBkZh490yBPkMExpH5bLk7fAgjCMZP9gOyzaq3A== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/theming" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/theming" "7.2.2" + "@storybook/types" "7.2.2" dequal "^2.0.2" lodash "^4.17.21" polished "^4.2.2" @@ -3643,196 +3898,189 @@ ts-dedent "^2.0.0" uuid "^9.0.0" -"@storybook/addon-backgrounds@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-7.1.1.tgz#89a96f6dc3009130ccf24a69b5a7ca7b0d9048e3" - integrity sha512-6YAjF01R/qFxeZc1B5cSxseaGXJzikMPPExSZaKkD0eW3max5Kpk+qb7rOX95m3jP2WD/0zfX6lEQUCbmDcxlg== +"@storybook/addon-backgrounds@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-7.2.2.tgz#3d5f2f644528642f4bb200a030308b6394d0a90f" + integrity sha512-ZqSEw9R+ar9jMW6dxfnAAn7hQn9uC9z0om9dbOHNiulOz1CYa62GAyJXU+uZyCyuThqyEa0W8D2+Jsm/s9AuBw== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/theming" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/theming" "7.2.2" + "@storybook/types" "7.2.2" memoizerific "^1.11.3" ts-dedent "^2.0.0" -"@storybook/addon-controls@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.1.1.tgz#b8b26f820d5b1f1567f9f2bf16d8a7d6b0485c92" - integrity sha512-qi7fxUSovTLFWeejZLagMV+4SedL0DIhZrufuQCnEeO1gbTJJPaL/KLZnilFlI3SgspkzGehhGDR6SVkDuwnZg== - dependencies: - "@storybook/blocks" "7.1.1" - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-common" "7.1.1" - "@storybook/manager-api" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/theming" "7.1.1" - "@storybook/types" "7.1.1" +"@storybook/addon-controls@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.2.2.tgz#21d80ee25f4eb351e3974019cd5e9441ed76bbd5" + integrity sha512-kcFG7RMQJVz3fNvQO+9vjAodKbRrobsdr3WJYN6zmugh+qxEdUvHUUe093t0MpMKp2njY6c9eAbfjN+PrLSCJQ== + dependencies: + "@storybook/blocks" "7.2.2" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-common" "7.2.2" + "@storybook/core-events" "7.2.2" + "@storybook/manager-api" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/theming" "7.2.2" + "@storybook/types" "7.2.2" lodash "^4.17.21" ts-dedent "^2.0.0" -"@storybook/addon-docs@7.1.1", "@storybook/addon-docs@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.1.1.tgz#23abb8c34e310e36611bf3885c014c1ba5cbf49d" - integrity sha512-KfsrqvR6RA0qyCwBpJjeivu/+F+n3jcMMKkBtI56E/pyQCx4+pMTJXJ2l5gJibNWYoR1CVlS9f5n5ZNGz8BzeQ== +"@storybook/addon-docs@7.2.2", "@storybook/addon-docs@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.2.2.tgz#102609718d053d50470f2119fd484a2f9b10f3a5" + integrity sha512-rQZ/LAC1oAQityI/NNwntLellAT2yrT7vQAPhHBpaVi/AOdT87wTkCyxnFJj/y3XYDAs4XgUqgbIKSIcRni/eA== dependencies: "@jest/transform" "^29.3.1" "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.1.1" - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/csf-plugin" "7.1.1" - "@storybook/csf-tools" "7.1.1" + "@storybook/blocks" "7.2.2" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/csf-plugin" "7.2.2" + "@storybook/csf-tools" "7.2.2" "@storybook/global" "^5.0.0" "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.1.1" - "@storybook/postinstall" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/react-dom-shim" "7.1.1" - "@storybook/theming" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/node-logger" "7.2.2" + "@storybook/postinstall" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/react-dom-shim" "7.2.2" + "@storybook/theming" "7.2.2" + "@storybook/types" "7.2.2" fs-extra "^11.1.0" remark-external-links "^8.0.0" remark-slug "^6.0.0" ts-dedent "^2.0.0" -"@storybook/addon-essentials@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.1.1.tgz#f90c42596fd8f13d21b8693c8497f18b0b7ba0d7" - integrity sha512-eCty+Q7zBjkBbaJ0HaM/UaXxJ+77uKBtEc9g+hLZFqga50auPCfCcqjnqNnxkTmewkJomx3N91BJUJJzVPUlJA== - dependencies: - "@storybook/addon-actions" "7.1.1" - "@storybook/addon-backgrounds" "7.1.1" - "@storybook/addon-controls" "7.1.1" - "@storybook/addon-docs" "7.1.1" - "@storybook/addon-highlight" "7.1.1" - "@storybook/addon-measure" "7.1.1" - "@storybook/addon-outline" "7.1.1" - "@storybook/addon-toolbars" "7.1.1" - "@storybook/addon-viewport" "7.1.1" - "@storybook/core-common" "7.1.1" - "@storybook/manager-api" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/preview-api" "7.1.1" +"@storybook/addon-essentials@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.2.2.tgz#22b7402500c6035a02ec666f8ffcc85ace0f947e" + integrity sha512-x99psHZqtHFE7IKnJ3ruZIGe2xkb/xb0IQHya+zmdGHxNkcIeZVCLidPJRjrplJGmykRg+B25q2330CMIUYd9Q== + dependencies: + "@storybook/addon-actions" "7.2.2" + "@storybook/addon-backgrounds" "7.2.2" + "@storybook/addon-controls" "7.2.2" + "@storybook/addon-docs" "7.2.2" + "@storybook/addon-highlight" "7.2.2" + "@storybook/addon-measure" "7.2.2" + "@storybook/addon-outline" "7.2.2" + "@storybook/addon-toolbars" "7.2.2" + "@storybook/addon-viewport" "7.2.2" + "@storybook/core-common" "7.2.2" + "@storybook/manager-api" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/preview-api" "7.2.2" ts-dedent "^2.0.0" -"@storybook/addon-highlight@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-7.1.1.tgz#d2b720af8da4674f43b0d8c5174916dbecccea0b" - integrity sha512-iOLzcv4JK2R2EBcbeDLB5uuYaW96M9Vh+ZrkpKEJvHwrQzzvBo3kJ7bP/AArAEXtR5MN1al3x7mnvRofu3OIdQ== +"@storybook/addon-highlight@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-7.2.2.tgz#dc19730d69ec3ee4bb7b046f4ab1c1b0c6130ceb" + integrity sha512-jyuxPPTg3q021GYBzA+JoBO2ece6B4gt4ZqtWjKbOpTHpUyzkH6IBcBuWGtgGcQgrCGlmb5B8QCLAb8Cmy6VJg== dependencies: - "@storybook/core-events" "7.1.1" + "@storybook/core-events" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.1.1" + "@storybook/preview-api" "7.2.2" -"@storybook/addon-links@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.1.1.tgz#f53b52464b18663355936ad6b4510b2ee2caaf97" - integrity sha512-cdc2OQj1LZkEd2dlaAc3Fp4TAHwLmnHKko/Aet3Dhm6TqH/C6UsSflZJbLXmV06x2f/Tm5UK0QQxPHBmOE7aXw== +"@storybook/addon-links@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.2.2.tgz#b88a4683665051327242f8c1cf3f87fb2ebc118f" + integrity sha512-bRK0B1QLzpCJ80Cdk/SgA5qlT3RxRkouaJU/rcFc3obHng4bUBr164SLKDgWOHawSrBn3dohO0HIz2o8AevgmA== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/csf" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/router" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/router" "7.2.2" + "@storybook/types" "7.2.2" prop-types "^15.7.2" ts-dedent "^2.0.0" -"@storybook/addon-measure@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.1.1.tgz#4b8927e5d7645cdcda361aa9a53af110dc5e6902" - integrity sha512-LKJ9vN0qdFVeqjPeF44R2issR0UMAuL2LzbZNxAfeNX9SxdV7qONBOt8OZNKkmm7mJ+jBZsR9Ok68PCOsXA7Xw== +"@storybook/addon-measure@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.2.2.tgz#0ea860b023c1007f7f60f160dfa3aaa5ab0ff326" + integrity sha512-gzXj28rqmtHyTKorGleP8+wlvvT6RQMsKtdHCJL/yT3Q9+REQ4/5lAgw+jKqSG+Ka6FxUYWlCN9nD5fRwxtXyQ== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/types" "7.2.2" tiny-invariant "^1.3.1" -"@storybook/addon-outline@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-7.1.1.tgz#808174896404f253c1336da6e89be4dabf7f2485" - integrity sha512-zdgOA46n61o/rqvnAn1OxAczl/C99D64e+6EoK8t+Xf9fvykPQCgfBUAPq19qEAaBG4RoPpTvGSJXH2nFqJZDw== +"@storybook/addon-outline@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-7.2.2.tgz#7abeef1cca9f8d5f6126ca28e78171b56d6aef4f" + integrity sha512-Mh6tOiRWVQRgMQlH2GAh2Ov3uf4wmtGXV7MBfKmqxowIp6HGCd4ZJ5tTOgD8ANRFIloH57oSa2/Jf/qiUg0/OQ== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/types" "7.2.2" ts-dedent "^2.0.0" -"@storybook/addon-toolbars@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-7.1.1.tgz#e844b6f85a78c20e8bdc8614367c88f7a8197fd7" - integrity sha512-tHMv1a8hg0kmxwtKf31BZ2Z1ULnxRF/TEoDLJKVvTthhcWLQm0LmqVIG82/bnuWn4vlDrsdGT7sAN+TU7B8p0A== - dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/theming" "7.1.1" - -"@storybook/addon-viewport@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.1.1.tgz#b20682f216c91e0c78438ce966a727d95d9c5f74" - integrity sha512-OAb3+NSQF0zAVdKhZwW0YOC/VMCXDncXp51ufxaz/LkF3qOGuqfmHTOfDDwjx3P6d3kX1aWV+vLVuoRS0JRK5g== - dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-events" "7.1.1" +"@storybook/addon-toolbars@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-7.2.2.tgz#8ed27402338fab35629453e1673c64b934ceda33" + integrity sha512-KQkFwLEqi/Xm9wq6mqaqO6VEW7+Sgbr8BUtVRAB9sSpy2mlhZEzZpcWKjuHmyMb9/eiRvnicM9kXxz0tHAF0jA== + dependencies: + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/theming" "7.2.2" + +"@storybook/addon-viewport@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.2.2.tgz#24e837357c0aae3a5c421dabc1b9048cb9cc7204" + integrity sha512-6qjtkFSV+9Fxw/nS5X7b5xC1kbk+CMGUEZhzmqM+iYtijHZmK0K1+x6AoR/mOul/rLL2YT73U3OYCCKWV9lemQ== + dependencies: + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/theming" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/theming" "7.2.2" memoizerific "^1.11.3" prop-types "^15.7.2" -"@storybook/addons@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.1.1.tgz#b6c9a7079475b1ddfd92583a36193cbe88cecb6f" - integrity sha512-cIjbmMV4+C6VJ7bzfaQWRrw944FCjGidU5pPxQTP8ROqlP2Noqq1GzQ3uqjxH6uiw6Wl3c4OAVU6bUV7F5B1lA== - dependencies: - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/types" "7.1.1" - -"@storybook/api@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-7.1.1.tgz#b40504752198c3a647d34b52e66e7bc91fceba01" - integrity sha512-beZ9NbGOkFqPBVnZLE67Q5b7hBKwm+OINbeN9DC5v8jrJmU/seLFs/itKzW2tEUFadyMjhJv+kcpyPjxK77m4g== +"@storybook/addons@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.2.2.tgz#e0e22894b85074b35ab4dc2a3c736dbab09f9781" + integrity sha512-yWBBpBcRyPP1deAjzWV9OAXrPfeRd/vRpJw09dWHzuD3xtnd3jZ2h+t1r9a5yTSQbP5GO1YdS/WOK5Uf9hcsuw== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/manager-api" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/types" "7.2.2" -"@storybook/blocks@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.1.1.tgz#b92fb6184bee667f3eb6e7879da2060ea700d9bc" - integrity sha512-YIpIJi/+sByZhKrpKbVmXazUP1hj/QXybVOzwz2PT6tphfhrubGLBgu3RJIp6hwJ/lWf9RfghR7P8n+7aN6U9w== +"@storybook/blocks@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.2.2.tgz#5a6738460a669d627a821b192ffaace33aeedfba" + integrity sha512-VgO46E5zA8oo/Cn8kT9o3xiFtnqxlqsRRGp5t8A1YqgN2OvYTtg5/PLS16XH8Qui/m9EvOoT7DlOmcqlp3Z78w== dependencies: - "@storybook/channels" "7.1.1" - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/channels" "7.2.2" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/csf" "^0.1.0" - "@storybook/docs-tools" "7.1.1" + "@storybook/docs-tools" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/theming" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/theming" "7.2.2" + "@storybook/types" "7.2.2" "@types/lodash" "^4.14.167" color-convert "^2.0.1" dequal "^2.0.2" @@ -3846,15 +4094,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-manager@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.1.1.tgz#ebd626f0436c3773fe3bda3dfd8cce10bdbfee71" - integrity sha512-vocO/JjrXPOnkFnwCV2NqKxbTfyYD2qV8PGH8EFNw2+I13GNbZ5CphEZMhI7HmKm0aIYPKdZKbN4KNWkwOxyAQ== +"@storybook/builder-manager@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.2.2.tgz#a02d2a179c2a0d575c05fa26a188d418b90f2cfa" + integrity sha512-19LqtL5/Yos9/wXqTxg+zOOK6M312eHXAdaYt2REGk1iqJzQXoy4wnmE2rbjBMmD5bUTzWm2vkmHGtkzAjwzzA== dependencies: "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.1.1" - "@storybook/manager" "7.1.1" - "@storybook/node-logger" "7.1.1" + "@storybook/core-common" "7.2.2" + "@storybook/manager" "7.2.2" + "@storybook/node-logger" "7.2.2" "@types/ejs" "^3.1.1" "@types/find-cache-dir" "^3.2.1" "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" @@ -3868,30 +4116,28 @@ process "^0.11.10" util "^0.12.4" -"@storybook/builder-webpack5@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-7.1.1.tgz#7448a697a588dcfa56aaac0b0a24fcb24f8182b1" - integrity sha512-is9BIExHJzNH8nbgLn8M/OWqDLu9XM2Ht4NQl1XqoKQNVurNffAtHYZr8Mhuxfx94ifwuJiZ8WSa2b8k16VquA== +"@storybook/builder-webpack5@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-7.2.2.tgz#eb1552096d580e8d7980b127ce7cc942c6aded21" + integrity sha512-+f2H3tXPZfn3q/eruXCmWPVAopd1MMEAAvneZ4iqlSHPC5HK2dcX/zj3yPar6rjfHHvZBXNm5sSi4WuD5Pw9MA== dependencies: "@babel/core" "^7.22.9" - "@storybook/addons" "7.1.1" - "@storybook/api" "7.1.1" - "@storybook/channel-postmessage" "7.1.1" - "@storybook/channels" "7.1.1" - "@storybook/client-api" "7.1.1" - "@storybook/client-logger" "7.1.1" - "@storybook/components" "7.1.1" - "@storybook/core-common" "7.1.1" - "@storybook/core-events" "7.1.1" - "@storybook/core-webpack" "7.1.1" + "@storybook/addons" "7.2.2" + "@storybook/channels" "7.2.2" + "@storybook/client-api" "7.2.2" + "@storybook/client-logger" "7.2.2" + "@storybook/components" "7.2.2" + "@storybook/core-common" "7.2.2" + "@storybook/core-events" "7.2.2" + "@storybook/core-webpack" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/preview" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/router" "7.1.1" - "@storybook/store" "7.1.1" - "@storybook/theming" "7.1.1" + "@storybook/manager-api" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/preview" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/router" "7.2.2" + "@storybook/store" "7.2.2" + "@storybook/theming" "7.2.2" "@swc/core" "^1.3.49" "@types/node" "^16.0.0" "@types/semver" "^7.3.4" @@ -3920,43 +4166,34 @@ webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.5.0" -"@storybook/channel-postmessage@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-7.1.1.tgz#debb9fe630843ec32d94ac78e7e6fb4eb86a8af8" - integrity sha512-Gmjh3feilXKLmZkQdjgkT8BRrfHnrBJJ8CY86MwD4wQlohObeFIXfhueRof4vJEGvIfJwooUrk9CkkXb5YbluQ== +"@storybook/channels@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.2.2.tgz#8b713b420fddfed53e0cf4ca5a0b46f4b9dd0d68" + integrity sha512-FkH5QzKkq7smtPlaKTWalJ+sN13H4dWtxdZ+ePFAXaubsBqGqo3Dw3e/hrbjrMqFjTwiKnmj5K5bjhdJcvzi1A== dependencies: - "@storybook/channels" "7.1.1" - "@storybook/client-logger" "7.1.1" - -"@storybook/channels@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.1.1.tgz#c4a560ba7fe02837ef66d2d4128dbfbcbf1b7805" - integrity sha512-uhkZFtLIeRnbBhyLlvQAZQmsRbftX/YMGQL+9WRzICrCkwl4xfZPAvMxEgCj1iJzNFcaX5ma9XzHb7q/i+wUCw== - dependencies: - "@storybook/channels" "7.1.1" - "@storybook/client-logger" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/global" "^5.0.0" qs "^6.10.0" telejson "^7.0.3" tiny-invariant "^1.3.1" -"@storybook/cli@7.1.1", "@storybook/cli@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.1.1.tgz#ca3d4559be81209cd6e4f1e7eea8f369053c6d31" - integrity sha512-xQU0GBIRQpwlvTnzOvDo05H5aH660DaZ9JlXd8ThPkEicoTvhkH0oQVEMYaWKChp5Ok7Wu8+kB7fzgUSOGzj+Q== +"@storybook/cli@7.2.2", "@storybook/cli@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.2.2.tgz#1fe5c67f75ebb80ea42eea2e92777034afadd3d8" + integrity sha512-YoXRCRICj4NEqUvYvgVRmk5IJadou6feCymI5r94z7XHQiObMoZd3p6QjyEp8ayi8XpxoJM/Hrddu3hddxUvyw== dependencies: "@babel/core" "^7.22.9" "@babel/preset-env" "^7.22.9" "@babel/types" "^7.22.5" "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.1.1" - "@storybook/core-common" "7.1.1" - "@storybook/core-server" "7.1.1" - "@storybook/csf-tools" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/telemetry" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/codemod" "7.2.2" + "@storybook/core-common" "7.2.2" + "@storybook/core-server" "7.2.2" + "@storybook/csf-tools" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/telemetry" "7.2.2" + "@storybook/types" "7.2.2" "@types/semver" "^7.3.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" @@ -3981,39 +4218,39 @@ puppeteer-core "^2.1.1" read-pkg-up "^7.0.1" semver "^7.3.7" - simple-update-notifier "^1.0.0" + simple-update-notifier "^2.0.0" strip-json-comments "^3.0.1" tempy "^1.0.1" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-api@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.1.1.tgz#20984eede12ff997a80077329d240b559665d78f" - integrity sha512-e6dTrgZOfO29EcckvHiBcojPCWhW0UYWREId2aXBwL6W5hP6zejbirc3SEXECehOOrlKnyY816AWtF7xEGFNKw== +"@storybook/client-api@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.2.2.tgz#cb10eb7c2aa4c1d31cc0ab9752c7250133d949d3" + integrity sha512-47WDNZ5FdvtQuSijg3IexxFve2aBrBih6VHdKKcel2SSiS0W01043fNMsP1T+m6kJr4jdnp0J5GVQpTQFi8Kxg== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/preview-api" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/preview-api" "7.2.2" -"@storybook/client-logger@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.1.1.tgz#62b7760ab05977f831f1831d5842ab4a4501c585" - integrity sha512-R0bdVjzJ5CwLNAG3XMyMZ0e9XDteBkFkTTIZJ9m+WMh/+oa2PInCpXDxoYb180UI6abrqh1jEaAsrHMC1pTKnA== +"@storybook/client-logger@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.2.2.tgz#650689fbe266bf550cb552f077219cf7631d285b" + integrity sha512-ULqPNTJsJdlWTQt5V/hEv4CUq7GgrLzLvcjhKB9IYbp4a0gjhinfq7jBFIcXRE8BSOQLui2PDGE3SzElzOp5/g== dependencies: "@storybook/global" "^5.0.0" -"@storybook/codemod@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.1.1.tgz#3fe3c80d44eb967770bf78d3f34a2b2f3da185e9" - integrity sha512-QB4MoeFXA4QsX0LuwjHoTVqsX7krRXmqfwSWIQMB8/qsAfyBp/jiG2xWmwa2agKwtlYvZzkvGdCjAOmK4SUSHQ== +"@storybook/codemod@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.2.2.tgz#fc59603a24cd669a3b07b42693f4cccdabefe2cf" + integrity sha512-i8WY3PJeJalVWTjLChlJREYHp42mGw0GXLqTH/q0hbAwzuVBBTrsMqy+oXOWRCAeCGbK5uP10GOLN23s+zuNTQ== dependencies: "@babel/core" "^7.22.9" "@babel/preset-env" "^7.22.9" "@babel/types" "^7.22.5" "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/csf-tools" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/types" "7.2.2" "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" globby "^11.0.2" @@ -4022,35 +4259,37 @@ prettier "^2.8.0" recast "^0.23.1" -"@storybook/components@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.1.1.tgz#26c88bada3a04bf62a44e9468becd4634cb457af" - integrity sha512-RUSjDj2RDTZsdKfs48oY+3iaL/y3GHU07zuHm/V4kuEHqJscXUt3n5vIX/Z/GtezMrxc0aPDlCSyS/N/EU6bUQ== +"@storybook/components@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.2.2.tgz#8736a1fd8d6ecc8095d4af9b85c06dc2c3bd0096" + integrity sha512-A2SavROGKFK76w4pfMGr0Zf3A2QaQrnJqPZOfVB6dKrXBwgwM3VhdUj6N8cI9X4W7VaEvEyUWXVTCv+bG+yZtQ== dependencies: - "@storybook/client-logger" "7.1.1" + "@radix-ui/react-select" "^1.2.2" + "@storybook/client-logger" "7.2.2" "@storybook/csf" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/theming" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/icons" "^1.1.0" + "@storybook/theming" "7.2.2" + "@storybook/types" "7.2.2" memoizerific "^1.11.3" use-resize-observer "^9.1.0" util-deprecate "^1.0.2" -"@storybook/core-client@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.1.1.tgz#caeb0e740a701ab4401ab4aba508384d9b652843" - integrity sha512-yFd617XKFS+Q5IFmItXR+DdMfpreHHcdy3f67dt8PLnnjNcGMpi7gEcp8t9yBAT+pIgnqSfE/FNUFTg0OEpRpw== +"@storybook/core-client@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.2.2.tgz#42e3ea15c1df4aed754b712a9c7c10440e67b4c8" + integrity sha512-RbtXvSiT7kunM6oz5svbp/IeastWz+40qZpdidkRLZ9QUpttU5NSKNUu+MPlfaMHT3A38VfZakk5cRAEztbu2w== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/preview-api" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/preview-api" "7.2.2" -"@storybook/core-common@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.1.1.tgz#da694694e264c5a82b4a8f590959e6ad3a3694f6" - integrity sha512-DO7ZS6YDITykvqMHeOWSmnsPYk2w7gka9GtO2LPbEm0f6p5kG2nohBO5+nsI3PuXpKiHXOB7vKJjwfQqxvPj5A== +"@storybook/core-common@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.2.2.tgz#4bf19f29a77d976c9795af7b0847ab5ce73f8008" + integrity sha512-evLV0oRLhByHVhrncRXdSmQL5VP8jLXUOBPiM63oCnSWDsw4GMt37JrmCYBNM4E1YiJ7zSllmvcFCBmyChcPFA== dependencies: - "@storybook/node-logger" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/node-logger" "7.2.2" + "@storybook/types" "7.2.2" "@types/find-cache-dir" "^3.2.1" "@types/node" "^16.0.0" "@types/node-fetch" "^2.6.4" @@ -4072,31 +4311,31 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/core-events@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.1.1.tgz#c2c30085bd254a27cdbd266a8e7755876abf9361" - integrity sha512-P5iI4zvCJo85de/sghglEHFK/GGkWAQQKzRFrz9kbVBX5LNaosfD7IYHIz/6ZWNPzxWR+RBOKcrRUfcArL4Njg== +"@storybook/core-events@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.2.2.tgz#e94337c8e6dcd2ba94d0dee19ac4cbfe780d7709" + integrity sha512-0MUsOygFSyYRIWHrVAA7Y7zBoehdILgK2AbnV42qescmPD48YyovkSRiGq0BwSWvuvMRq+094dp7sh2tkfSGHg== -"@storybook/core-server@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.1.1.tgz#5e4d9a274bde32eb483d609fe7005382842633db" - integrity sha512-IfrkdcYwVoP4bltBTx8Yr1e++UAfICV8IYCgW8VFW26Uvl22biCVWwliE35iTYpUmHJgn+U489hCnEdGpr2CWw== +"@storybook/core-server@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.2.2.tgz#947bd37a5c2b2de53a5abb15ae4ae4b88c0e8711" + integrity sha512-djtZIe/dFvjppuUMuTSHq51NW4dgkKAercfHwyyzcvN3m+ZBZdUENCUzBfwsS0+Pn64lVgppg6otm8ckMFilMQ== dependencies: "@aw-web-design/x-default-browser" "1.4.126" "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.1.1" - "@storybook/channels" "7.1.1" - "@storybook/core-common" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/builder-manager" "7.2.2" + "@storybook/channels" "7.2.2" + "@storybook/core-common" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.1.1" + "@storybook/csf-tools" "7.2.2" "@storybook/docs-mdx" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/manager" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/telemetry" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/manager" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/telemetry" "7.2.2" + "@storybook/types" "7.2.2" "@types/detect-port" "^1.3.0" "@types/node" "^16.0.0" "@types/pretty-hrtime" "^1.0.0" @@ -4125,36 +4364,36 @@ watchpack "^2.2.0" ws "^8.2.3" -"@storybook/core-webpack@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-7.1.1.tgz#7ec2db45b5ef077abbfc9a136baf82b126daf6aa" - integrity sha512-1dk5dX0JYM0Xs7dYLl+WVt9ytiFNPqeOZXYYIk/6ZU0Ejm2E91VwDB0KMI6Dl+YjTDDxSlbwmHNYpFLyW9LDUA== +"@storybook/core-webpack@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-7.2.2.tgz#3b8df3b70c22057767f4a451a4a5dd27060b9c27" + integrity sha512-KwdY+mFTWclIJM+qF25u0d4gQ/951uOZkgrsiRheKI5BKwD9omuF2OfLexWKnMEWz+UHzHKoN0QFlxcKs/rddw== dependencies: - "@storybook/core-common" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/core-common" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/types" "7.2.2" "@types/node" "^16.0.0" ts-dedent "^2.0.0" -"@storybook/csf-plugin@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.1.1.tgz#add0c0b86fff4e12e680f4de0072b9750c288d93" - integrity sha512-bokV+HU6rV/wlWIvgAtn1PUot1W71pto/Wft5hCUATDCsXDz4B5aI9d/ZCJhu7G1R4cYtjsxVdBJSHe9dem7Lg== +"@storybook/csf-plugin@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.2.2.tgz#a9d3a4ca9f3f8965d2e9a80d7ce52ed4ec45fd23" + integrity sha512-8iHeK0zfcCIXbcwQm89Bj6Ejqak/dXBwQUMFmgmKzJ4VdyzKdhLgRO3T3EYGsX4AvH0dnuAPONP5uVrGEF8iLw== dependencies: - "@storybook/csf-tools" "7.1.1" + "@storybook/csf-tools" "7.2.2" unplugin "^1.3.1" -"@storybook/csf-tools@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.1.1.tgz#63d03742d13e51bbece46e6af19da1313cfd2315" - integrity sha512-IdDW+NsTIxqv7BjeFaTonvX0Ac5HzzNiKvGkhydXrpaz7kJX4g0T96xpR+RhbEtPfQ0AcpiHnW0kMPx9YLJRew== +"@storybook/csf-tools@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.2.2.tgz#2ec13aa9974be3d00dcf0eeb04711c248080852c" + integrity sha512-uO9AXtc64tpEpnoqHk5eYCUUL6nMwo1xHTXgIst9NKOdNSBL1/wvRgaT+rW+AzyXGsBjMwvDNjX/HIptqsoNgw== dependencies: "@babel/generator" "^7.22.9" "@babel/parser" "^7.22.7" "@babel/traverse" "^7.22.8" "@babel/types" "^7.22.5" "@storybook/csf" "^0.1.0" - "@storybook/types" "7.1.1" + "@storybook/types" "7.2.2" fs-extra "^11.1.0" recast "^0.23.1" ts-dedent "^2.0.0" @@ -4171,14 +4410,14 @@ resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316" integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== -"@storybook/docs-tools@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.1.1.tgz#35e45a99aa376b54f5f684f6c9173699200b78b9" - integrity sha512-noDgogRHum1FuqgXBdlv2+wOdkIJOJqSUSi0ZGiuP1OEOdA9YdbCfbWn/z734UEmhwraoQSXYb2tvrIEjfzYSw== +"@storybook/docs-tools@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.2.2.tgz#c5b391a4baabcb4aa3b68c0a94a9ffbabe26d142" + integrity sha512-57PiramTgJio0J8HyKQI8cjb/5pTFvKxWBji8UdM6WUe1EqLIwZbymUcOQZDQWr3H+6bdrm4pgYxj7XglcUa5A== dependencies: - "@storybook/core-common" "7.1.1" - "@storybook/preview-api" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/core-common" "7.2.2" + "@storybook/preview-api" "7.2.2" + "@storybook/types" "7.2.2" "@types/doctrine" "^0.0.3" doctrine "^3.0.0" lodash "^4.17.21" @@ -4188,19 +4427,24 @@ resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== -"@storybook/manager-api@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.1.1.tgz#5cc575a03972410fb30b3dedb3131c581e9c6d84" - integrity sha512-gk429qAGMW33rAZwFXo7fDoeYGrnSbj4ddHXJYc0nzBcC6emlq5IS5GHgJthQ3Oe8CPbq8bwUkWW6I5E7OePWA== +"@storybook/icons@^1.1.0": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.1.6.tgz#22536cde6dd85fa259608fa8bd7b9eeca2a8e688" + integrity sha512-co5gDCYPojRAc5lRMnWxbjrR1V37/rTmAo9Vok4a1hDpHZIwkGTWesdzvYivSQXYFxZTpxdM1b5K3W87brnahw== + +"@storybook/manager-api@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.2.2.tgz#05dba45fd19d93705115915522780cc29b47fbc4" + integrity sha512-7EI7TABGGB3VOTc4q7byC5dW/9A1xUJyR1gfCPU+7XiSNItnCz+seBJMSaf6Em/9wYxSAL6PQAGhrwTHGzgWAA== dependencies: - "@storybook/channels" "7.1.1" - "@storybook/client-logger" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/channels" "7.2.2" + "@storybook/client-logger" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/csf" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/router" "7.1.1" - "@storybook/theming" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/router" "7.2.2" + "@storybook/theming" "7.2.2" + "@storybook/types" "7.2.2" dequal "^2.0.2" lodash "^4.17.21" memoizerific "^1.11.3" @@ -4209,38 +4453,38 @@ telejson "^7.0.3" ts-dedent "^2.0.0" -"@storybook/manager@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.1.1.tgz#e8f0a56afc3cd6c24e045e1f04c463cefc9c46e2" - integrity sha512-kRW9sPuJWsEi8Swcyt9rYwdfvA0rqKEuPBCCbrmmjyIwZR60IYg2KHXcF7q4qdkvts2xee5YTbgHcdfc0iIPSg== +"@storybook/manager@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.2.2.tgz#7b40132d50ba4422be49c28ce05f79bccfd8e2f1" + integrity sha512-a7pGZMj5r5vk39IfB7Ca32DNkSTM6SEp+BZhqc4jMDHwSEsGKOZ+GZtWJipUlB1fEnHtdA3LH6IKTKbcpYP+Rg== "@storybook/mdx2-csf@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5" integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== -"@storybook/node-logger@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.1.1.tgz#d305960c10fd591bad37b52b429e72caafa0b028" - integrity sha512-gnAuNM+wNoOcGnUM6hLsYV0lwUgRI39Ep/Pp3VF1oXZAthEyrQRm7ImbeAdt93ObPc9DZgqTx9OI8QnErZuJiA== +"@storybook/node-logger@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.2.2.tgz#994f61bc24bf2a7cbeb1be437215a3fb22086359" + integrity sha512-Pn6NJ349S+6tkzaFc1j3qOniDR9DyFPRfZsnAT85APKQaXyzNB3b1xwAhxnVjiCHIfp/a+SLOAdfXa+F8ALFQQ== -"@storybook/postinstall@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.1.1.tgz#150c5dac8ec57b6e620bea53d469f25c829d3a92" - integrity sha512-qpe6BiFLVs9YYFQVGgRT0dJxPOKBtGLIAsnVEpXKUPrltEWQpTxQEqqOSJlut+FLoWB5MTxrwiJ/7891h4a5pw== +"@storybook/postinstall@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.2.2.tgz#42f1af8a3b6ae4a32a5579b9e879c38413af4a96" + integrity sha512-tGFZAFu5QFnuzhmzGMpasETVpzD1CVskok4+Dns/3iBWb8fZsFWaC0ZKazO+vHBtWZYO4uvrUbFSDTX2yPhtTQ== -"@storybook/preset-react-webpack@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-7.1.1.tgz#203f0c4297f8424a27f1f87ca6ef985c060f4c11" - integrity sha512-SuYNaFzPf7FWDKn7+InsOPltAt/wooCOrpgVYYNTyeEOj7TXn+YvGcxb3d0HVzQAzQuYyobt10KQGfgjUUfxgQ== +"@storybook/preset-react-webpack@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-7.2.2.tgz#8c6dde28222004a35bf237eb6abfb7a27ad0d5df" + integrity sha512-com92dj2rAvGG5xrx35kXZDawQr0GwfNJD8xoyZwzd+XjaguBU/DJNdjYwmJLscHx0wg+Vt5oK+hS1ICq82Ujg== dependencies: "@babel/preset-flow" "^7.22.5" "@babel/preset-react" "^7.22.5" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.5" - "@storybook/core-webpack" "7.1.1" - "@storybook/docs-tools" "7.1.1" - "@storybook/node-logger" "7.1.1" - "@storybook/react" "7.1.1" + "@storybook/core-webpack" "7.2.2" + "@storybook/docs-tools" "7.2.2" + "@storybook/node-logger" "7.2.2" + "@storybook/react" "7.2.2" "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0" "@types/node" "^16.0.0" "@types/semver" "^7.3.4" @@ -4251,18 +4495,17 @@ semver "^7.3.7" webpack "5" -"@storybook/preview-api@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.1.1.tgz#5093b5a05ec75394193b05a45358193c0dff5e86" - integrity sha512-uI8TVuoFfg3EBdaKdRVUa17JfGdmK78JI3+byLZLkzl6nR+q846BWHgi8eJmU8MHmO5CFaqT2kts/e8T34JDgw== +"@storybook/preview-api@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.2.2.tgz#b23d1a9024041fea86265931a06ba5b42a395868" + integrity sha512-II0EioQCGS2zTSoHbXNKyI1rwk2X7MBi2/tJerj4w4Qwi2fDQlwM0LKsIWlRjXTxBpOAsOoTelh24wSBoZu4bg== dependencies: - "@storybook/channel-postmessage" "7.1.1" - "@storybook/channels" "7.1.1" - "@storybook/client-logger" "7.1.1" - "@storybook/core-events" "7.1.1" + "@storybook/channels" "7.2.2" + "@storybook/client-logger" "7.2.2" + "@storybook/core-events" "7.2.2" "@storybook/csf" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/types" "7.1.1" + "@storybook/types" "7.2.2" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -4272,10 +4515,10 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.1.1.tgz#56e39b20077e5caa8bba272e18f529dac49addc6" - integrity sha512-F3ikRKzwmT9MlptYXxYOQmaSwmJckPag0k9lM0LvI0xYplLbyWJ5rfs2gLKl++wX+ag2A+1K4gId5Xaz4SKnxQ== +"@storybook/preview@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.2.2.tgz#1baabcbcc57c05260158bcb819d96157553ccba1" + integrity sha512-F3S3yK+RmpriADWnfVZsRN36WRT6LaFjD0sNrUkX8duxdnxNDaLFfJ3Cbxwyv/2lZ48uByIQbX2LC5HieVI0KA== "@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0": version "1.0.6--canary.9.0c3f3b7.0" @@ -4290,33 +4533,33 @@ react-docgen-typescript "^2.2.2" tslib "^2.0.0" -"@storybook/react-dom-shim@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.1.1.tgz#d69e82fbb8c7a70dff2f1f1d12b921ab19b3f43d" - integrity sha512-yfc0tCtg+OEfvOKwCF0+E0ot8XGpubMTpbfChahhzEYyI9zz1rA7OCwRzERMnX/C7TYW3aLab9f5MzWIKQClmQ== +"@storybook/react-dom-shim@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.2.2.tgz#8fa704a6d8ba0daf116229b62ea05f9577064b5d" + integrity sha512-H/yHlWl94vbUv1NNolcB3vCy1S185XKicswljJRC9o/AFCJK+a7d9wDVGTPKF6oy7ujrgpANLQyq02d+OuoO7w== -"@storybook/react-webpack5@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-7.1.1.tgz#8f496ac1b5985270441ce3ce26375f3014d2e5dc" - integrity sha512-iTliWdmqSXw5wz/iHefr7yKhI7rko8oN5JUfkYlZafqk7M3mXy0wamLgFcrOncnBcY2UNPX1oEAiLJBKSy9ulA== +"@storybook/react-webpack5@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-7.2.2.tgz#08028a28f313ab9876c657d35e3d675881d27ac6" + integrity sha512-VBFOO4LUuX/DVqaVBHpSTNT1NcIUlt1RpHX371NM0IcPSAj4EjHu3fLK4GjPMNJSqjnT7i6cthwPPe4hATTldg== dependencies: - "@storybook/builder-webpack5" "7.1.1" - "@storybook/preset-react-webpack" "7.1.1" - "@storybook/react" "7.1.1" + "@storybook/builder-webpack5" "7.2.2" + "@storybook/preset-react-webpack" "7.2.2" + "@storybook/react" "7.2.2" "@types/node" "^16.0.0" -"@storybook/react@7.1.1", "@storybook/react@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.1.1.tgz#74170fbd0b27d565af8e671aa43260b366e62712" - integrity sha512-qgZ/K2KKR+WrIHZEg5UZn0kqlzDk+sP51yosn7Ymt8j85yNgYm4G1q+oGYY+wKSIJEIi31mrQEz8oFHn8jaT2Q== +"@storybook/react@7.2.2", "@storybook/react@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.2.2.tgz#9486c701901d89f578cca6409509771f41d01efd" + integrity sha512-41vOR9mCPGeO4YBVfej+X+Fge+igelqSFCJF/koZDdYxOVehsz3bK++TNrKo2utF69evhwSmIU1iEMEjesmbNg== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/core-client" "7.1.1" - "@storybook/docs-tools" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/core-client" "7.2.2" + "@storybook/docs-tools" "7.2.2" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.1.1" - "@storybook/react-dom-shim" "7.1.1" - "@storybook/types" "7.1.1" + "@storybook/preview-api" "7.2.2" + "@storybook/react-dom-shim" "7.2.2" + "@storybook/types" "7.2.2" "@types/escodegen" "^0.0.6" "@types/estree" "^0.0.51" "@types/node" "^16.0.0" @@ -4329,67 +4572,67 @@ prop-types "^15.7.2" react-element-to-jsx-string "^15.0.0" ts-dedent "^2.0.0" - type-fest "^3.11.0" + type-fest "~2.19" util-deprecate "^1.0.2" -"@storybook/router@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.1.1.tgz#43f9e275d3c0fdbc80b0858b4adf9233abe296d0" - integrity sha512-GRYYWVsqAtDm7DHxnGXuaAmr3PQfj+tonYsP8/L3gC5sOdQNF3yaBmvv1pu+bqezwXVowq0ew+iVYECiaGoB3Q== +"@storybook/router@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.2.2.tgz#a9ee716fb428c89f77a16b816d6e184d60614e8d" + integrity sha512-cnJg43dm3dVifKkRBUsQ4wXC4sJOm46JAS95yRPeGACoHpJTcbCWk1n5GLYA7ozO+KFQSNdxHxPIjNqvnzMFiA== dependencies: - "@storybook/client-logger" "7.1.1" + "@storybook/client-logger" "7.2.2" memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/source-loader@^7.0.7": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.1.1.tgz#0a6d65dcd1446cc6b5e97933452b18cc404fc669" - integrity sha512-KvosoPzpQlHOBi+Rbzi9OZHha2XjMT33hCpBenbEkL4ntZE3FUJFomSLbO0TRYEZCNZ4VJvIfzQG9XEVAE7fGA== +"@storybook/source-loader@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.2.2.tgz#0c3159c23e4536fbf6861d75ceb20ff924f3103d" + integrity sha512-kzUhihfnOWKekEw9eX7BNhjuVj4gvcU3F2Fe/GrtyCOilB8fgTOla47SEbqJ2WIPamp91ZI1VoSjSNy5BhG9Ow== dependencies: "@storybook/csf" "^0.1.0" - "@storybook/types" "7.1.1" + "@storybook/types" "7.2.2" estraverse "^5.2.0" lodash "^4.17.21" prettier "^2.8.0" -"@storybook/store@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/store/-/store-7.1.1.tgz#0f845c698cfe6584b0dde6a1fab125a9eed2eaec" - integrity sha512-gg2DOYZdnhV3l0i1OVJ4Cjd2zH38gWdXhA/K0S8KTpfD/uakpf6U3+K543ADnS+9C8JT9I0Z2RUZmWEkv3fFBQ== +"@storybook/store@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/store/-/store-7.2.2.tgz#63c05cd07a240bf374a71c1ab4a1afbd0ebf7ca6" + integrity sha512-4Z0iFdD6u9u9rDvr0ekLXOx1tIcmS1OU3xhk92RFWbGpAx4+bb1JDWmO7T04l+uPvLvYpWn5NrSV1ZdgyTVxUg== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/preview-api" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/preview-api" "7.2.2" -"@storybook/telemetry@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.1.1.tgz#3061582dceeddeaba3daead5e8f2d4ddcd8f675a" - integrity sha512-7bQBfphEHJA1kHyPVVvrRXRet57JhyRD4uxoWYfp4jkSt2wHzAAdGU8Iz7U+ozv4TG7AA1gb1Uh5BS4nCiijsw== +"@storybook/telemetry@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.2.2.tgz#b8ff828f891f97757ab98f047731ca2380255b1c" + integrity sha512-pJ8oQ++QD7hLezARp+3PR0JAw3FH6cmOrSs4KAB+IhNgACs8gehaEdy7TAikor5tlAUCWvqPetnNXDrrDIZhTQ== dependencies: - "@storybook/client-logger" "7.1.1" - "@storybook/core-common" "7.1.1" - "@storybook/csf-tools" "7.1.1" + "@storybook/client-logger" "7.2.2" + "@storybook/core-common" "7.2.2" + "@storybook/csf-tools" "7.2.2" chalk "^4.1.0" detect-package-manager "^2.0.1" fetch-retry "^5.0.2" fs-extra "^11.1.0" read-pkg-up "^7.0.1" -"@storybook/theming@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.1.1.tgz#5dc1bf43c7522aa6f4d24a01d361f0c2825f109c" - integrity sha512-8ri/BvfgUzBln9EYB8N/xgRaxZIFFTG0IEEekuV2H5uv4q9JW9p3E5zqghmM1OC/vspJJa8e4Eajb1YiTO0W6w== +"@storybook/theming@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.2.2.tgz#135489c47a43c1947683a697fa72d81168aacd5e" + integrity sha512-B4nxcxl4IyVvB1NXwRi4yopAS73zl052f2zJi3kVghJbZ3tgPwgvi3CVpOs2D4pgmxOrKCgiLnzLrGTH+13+0A== dependencies: "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.1.1" + "@storybook/client-logger" "7.2.2" "@storybook/global" "^5.0.0" memoizerific "^1.11.3" -"@storybook/types@7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.1.1.tgz#610ffeae955a2f4e8935b9a1d677430d6374ccea" - integrity sha512-0yxEHxYd/N0XfVCGrEq86QIMC4ljZBspHSDrjdLSCIYmmglMvwKboZBgHlLQmpcLP+of8m1E8Frbslpnt0giBg== +"@storybook/types@7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.2.2.tgz#15fcac80bddd1efa9181e9775034d1fe6785a08c" + integrity sha512-yrL0+KD+dsusQvDmNKQGv36WjvdhoiUxMDEBgsZkP047kRc3b8/zEbD3Tu7iMDsWnpgwip1Frgy29Ro3UtK57Q== dependencies: - "@storybook/channels" "7.1.1" + "@storybook/channels" "7.2.2" "@types/babel__core" "^7.0.0" "@types/express" "^4.7.0" file-system-cache "2.3.0" @@ -5990,6 +6233,13 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-hidden@^1.1.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" + integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== + dependencies: + tslib "^2.0.0" + aria-query@^5.1.3: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" @@ -8655,6 +8905,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -10714,6 +10969,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has-proto "^1.0.1" has-symbols "^1.0.3" +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + get-npm-tarball-url@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz#67dff908d699e9e2182530ae6e939a93e5f8dfdb" @@ -17521,6 +17781,25 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== +react-remove-scroll-bar@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" + integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@2.5.5: + version "2.5.5" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" + integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== + 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" + react-resize-detector@^6.7.6: version "6.7.8" resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-6.7.8.tgz#318c85d1335e50f99d4fb8eb9ec34e066db597d0" @@ -17599,6 +17878,15 @@ react-simple-code-editor@^0.10.0: resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz#73e7ac550a928069715482aeb33ccba36efe2373" integrity sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA== +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + react-textarea-autosize@^8.3.2: version "8.5.2" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz#6421df2b5b50b9ca8c5e96fd31be688ea7fa2f9d" @@ -18553,11 +18841,6 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semve dependencies: lru-cache "^6.0.0" -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -18797,12 +19080,12 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simple-update-notifier@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: - semver "~7.0.0" + semver "^7.5.3" sirv@^1.0.7: version "1.0.19" @@ -19185,12 +19468,12 @@ store2@^2.14.2: resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.2.tgz#56138d200f9fe5f582ad63bc2704dbc0e4a45068" integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== -storybook@^7.0.7: - version "7.1.1" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.1.1.tgz#37218a3ce4a093c92ade7ca2ac3190521f81f49f" - integrity sha512-5/FIgiD574uwwDGtyyMuqXSOw4kzpEiPbMy1jMWmc8lI2g6vynwbyWqqXmVqtKpJa1vVCM4+KjFqZCmyXFJiZQ== +storybook@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.2.2.tgz#632eb139fa28445b0124b14125780696c8d80892" + integrity sha512-JT4CtVagLi7B5CKFUX/ozRpW3X7z4ffdXaXr4g6uBQjPN8NmvQCCftVIntpiXPKIbQa+cqyOTCNiprGvFnQQfg== dependencies: - "@storybook/cli" "7.1.1" + "@storybook/cli" "7.2.2" stream-browserify@3.0.0: version "3.0.0" @@ -20060,16 +20343,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^2.13.0, type-fest@^2.19.0, type-fest@^2.5.0: +type-fest@^2.13.0, type-fest@^2.19.0, type-fest@^2.5.0, type-fest@~2.19: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -type-fest@^3.11.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -20494,6 +20772,13 @@ url@^0.11.0: punycode "^1.4.1" qs "^6.11.0" +use-callback-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" + integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== + dependencies: + tslib "^2.0.0" + use-composed-ref@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" @@ -20518,6 +20803,14 @@ use-resize-observer@^9.1.0: dependencies: "@juggle/resize-observer" "^3.3.1" +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" From 3946285dba1ad822eff53cadcd09a14de36d0dcd Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 10 Aug 2023 13:29:40 -0400 Subject: [PATCH 09/94] wip --- platform/ui/src/assets/icons/icon-add.svg | 15 ++ platform/ui/src/assets/icons/icon-delete.svg | 17 +++ .../assets/icons/icon-disclosure-close.svg | 16 +- .../src/assets/icons/icon-disclosure-open.svg | 16 +- .../assets/icons/icon-display-settings.svg | 21 +++ platform/ui/src/assets/icons/icon-rename.svg | 15 ++ .../icons/icon-toggle-all-visibility.svg | 22 +++ platform/ui/src/components/Icon/getIcon.js | 2 + .../components/InputNumber/InputNumber.tsx | 67 ++++----- .../components/PanelSection/PanelSection.tsx | 5 +- .../__stories__/PanelSection.stories.mdx | 3 +- .../ui/src/components/PanelSection/index.js | 4 +- .../SegmentationConfig.tsx | 75 ++++------ .../SegmentationGroupTable.tsx | 140 ++++++++++-------- .../segmentationGroupTable.stories.mdx | 4 +- platform/ui/src/components/index.js | 2 + platform/ui/src/index.js | 1 + 17 files changed, 265 insertions(+), 160 deletions(-) create mode 100644 platform/ui/src/assets/icons/icon-add.svg create mode 100644 platform/ui/src/assets/icons/icon-delete.svg create mode 100644 platform/ui/src/assets/icons/icon-display-settings.svg create mode 100644 platform/ui/src/assets/icons/icon-rename.svg create mode 100644 platform/ui/src/assets/icons/icon-toggle-all-visibility.svg diff --git a/platform/ui/src/assets/icons/icon-add.svg b/platform/ui/src/assets/icons/icon-add.svg new file mode 100644 index 00000000000..5c63f0acd97 --- /dev/null +++ b/platform/ui/src/assets/icons/icon-add.svg @@ -0,0 +1,15 @@ + + + icon-add + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/ui/src/assets/icons/icon-delete.svg b/platform/ui/src/assets/icons/icon-delete.svg new file mode 100644 index 00000000000..6a306074dc8 --- /dev/null +++ b/platform/ui/src/assets/icons/icon-delete.svg @@ -0,0 +1,17 @@ + + + icon-delete + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/ui/src/assets/icons/icon-disclosure-close.svg b/platform/ui/src/assets/icons/icon-disclosure-close.svg index b47608ed742..ce60bcaac70 100644 --- a/platform/ui/src/assets/icons/icon-disclosure-close.svg +++ b/platform/ui/src/assets/icons/icon-disclosure-close.svg @@ -1,6 +1,12 @@ - - - - + + + icon-disclosure-close + + + + + + + - + \ No newline at end of file diff --git a/platform/ui/src/assets/icons/icon-disclosure-open.svg b/platform/ui/src/assets/icons/icon-disclosure-open.svg index 11e4d580390..e4ce04a6962 100644 --- a/platform/ui/src/assets/icons/icon-disclosure-open.svg +++ b/platform/ui/src/assets/icons/icon-disclosure-open.svg @@ -1,6 +1,12 @@ - - - - + + + icon-disclosure-open + + + + + + + - + \ No newline at end of file diff --git a/platform/ui/src/assets/icons/icon-display-settings.svg b/platform/ui/src/assets/icons/icon-display-settings.svg new file mode 100644 index 00000000000..c78f7462695 --- /dev/null +++ b/platform/ui/src/assets/icons/icon-display-settings.svg @@ -0,0 +1,21 @@ + + + icon-display-settings + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/ui/src/assets/icons/icon-rename.svg b/platform/ui/src/assets/icons/icon-rename.svg new file mode 100644 index 00000000000..76d928e6a73 --- /dev/null +++ b/platform/ui/src/assets/icons/icon-rename.svg @@ -0,0 +1,15 @@ + + + icon-rename + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/ui/src/assets/icons/icon-toggle-all-visibility.svg b/platform/ui/src/assets/icons/icon-toggle-all-visibility.svg new file mode 100644 index 00000000000..20e0a880b17 --- /dev/null +++ b/platform/ui/src/assets/icons/icon-toggle-all-visibility.svg @@ -0,0 +1,22 @@ + + + icon-toggle-all-visibility + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/platform/ui/src/components/Icon/getIcon.js b/platform/ui/src/components/Icon/getIcon.js index 6bd645c1579..ad0675d796d 100644 --- a/platform/ui/src/components/Icon/getIcon.js +++ b/platform/ui/src/components/Icon/getIcon.js @@ -125,6 +125,7 @@ import checkboxActive from './../../assets/icons/checkbox-active.svg'; import referenceLines from './../../assets/icons/reference-lines.svg'; import chevronDownNew from './../../assets/icons/icon-disclosure-close.svg'; import chevronLeftNew from './../../assets/icons/icon-disclosure-open.svg'; +import settingsBars from './../../assets/icons/icon-display-settings.svg'; /** Old OHIF */ import oldTrash from './../../assets/icons/old-trash.svg'; @@ -258,6 +259,7 @@ const ICONS = { 'tool-referenceLines': referenceLines, 'chevron-left-new': chevronLeftNew, 'chevron-down-new': chevronDownNew, + 'settings-bars': settingsBars, /** Old OHIF */ 'old-trash': oldTrash, diff --git a/platform/ui/src/components/InputNumber/InputNumber.tsx b/platform/ui/src/components/InputNumber/InputNumber.tsx index a29792f7f8f..87dcb912c81 100644 --- a/platform/ui/src/components/InputNumber/InputNumber.tsx +++ b/platform/ui/src/components/InputNumber/InputNumber.tsx @@ -82,45 +82,46 @@ const InputNumber: React.FC<{ ); return ( -
+
{label && } -
-
- + > +
+ -
- - - - - - +
+ + + + + + +
-
); }; diff --git a/platform/ui/src/components/PanelSection/PanelSection.tsx b/platform/ui/src/components/PanelSection/PanelSection.tsx index d953c6a437a..78ec24b697d 100644 --- a/platform/ui/src/components/PanelSection/PanelSection.tsx +++ b/platform/ui/src/components/PanelSection/PanelSection.tsx @@ -16,13 +16,16 @@ const PanelSection = ({ title, children, actionIcons = [] }) => { onClick={handleHeaderClick} >
{title}
-
+
{actionIcons.map((icon, index) => ( { e.stopPropagation(); + if (!isChildrenVisible) { + setChildrenVisible(true); + } icon.onClick(); }} /> diff --git a/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx b/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx index 414703d8196..fd43f18eb99 100644 --- a/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx +++ b/platform/ui/src/components/PanelSection/__stories__/PanelSection.stories.mdx @@ -1,5 +1,4 @@ -import PanelSection from '../PanelSection'; -import SidePanel from '../../SidePanel'; +import {PanelSection, SidePanel} from '../../../components'; import { ArgsTable, Story, Canvas, Meta } from '@storybook/addon-docs'; import { createComponentTemplate } from '../../../storybook/functions/create-component-story'; diff --git a/platform/ui/src/components/PanelSection/index.js b/platform/ui/src/components/PanelSection/index.js index 68034ac1412..50777220ae1 100644 --- a/platform/ui/src/components/PanelSection/index.js +++ b/platform/ui/src/components/PanelSection/index.js @@ -1,2 +1,2 @@ -import SidePanel from './SidePanel'; -export default SidePanel; +import PanelSection from './PanelSection'; +export default PanelSection; diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx index 35ae991f22f..5423c37cc71 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx @@ -15,7 +15,7 @@ const ActiveSegmentationConfig = ({ setFillAlpha, }) => { return ( -
+
Active
{ const { initialConfig } = segmentationConfig; - const [isMinimized, setIsMinimized] = useState(true); return (
-
{ - evt.stopPropagation(); - setIsMinimized(!isMinimized); - }} - > - - - {'Segmentation Appearance'} - -
{/* active segmentation */} - {!isMinimized && ( -
- - {/* A small line */} -
- {/* inactive segmentation */} -
setIsMinimized(!isMinimized)} - className="flex items-center cursor-pointer pl-2 pb-[9px]" - > - - {'Inactive Segmentations'} - -
- +
+ + {/* A small line */} +
+ {/* inactive segmentation */} +
setIsMinimized(!isMinimized)} + className="flex items-center cursor-pointer pl-2 pb-[9px]" + > + + {'Inactive Segmentations'} +
- )} + +
); diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx index f0ebaa06081..01f2941a891 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx @@ -1,9 +1,22 @@ -import React from 'react'; +import React, { useState } from 'react'; import PropTypes from 'prop-types'; import Icon from '../Icon'; import SegmentationGroup from './SegmentationGroup'; +import { PanelSection } from '../../components'; import SegmentationConfig from './SegmentationConfig'; +// { +// showAddSegmentation && ( +//
onSegmentationAdd()} +// > +// +//
Add New Segmentation
+//
+// ); +// } + const SegmentationGroupTable = ({ segmentations, onSegmentationAdd, @@ -30,67 +43,74 @@ const SegmentationGroupTable = ({ setRenderInactiveSegmentations, setRenderOutline, }) => { + const [isConfigOpen, setIsConfigOpen] = useState(false); + return ( -
- -
- {!!segmentations.length && - segmentations.map((segmentation, index) => { - const { - id, - label, - displayText = [], - segmentCount, - segments, - isVisible, - isActive, - activeSegmentIndex, - } = segmentation; - return ( - onSegmentationClick(id)} - activeSegmentIndex={activeSegmentIndex} - onToggleMinimizeSegmentation={onToggleMinimizeSegmentation} - onSegmentationEdit={onSegmentationEdit} - onSegmentationDelete={onSegmentationDelete} - onSegmentClick={onSegmentClick} - onSegmentEdit={onSegmentEdit} - onToggleSegmentVisibility={onToggleSegmentVisibility} - onToggleSegmentationVisibility={onToggleSegmentationVisibility} - onSegmentAdd={onSegmentAdd} - showSegmentDelete={false} - /> - ); - })} -
- {showAddSegmentation && ( -
onSegmentationAdd()} - > - -
Add New Segmentation
+
+ setIsConfigOpen(!isConfigOpen), + }, + ]} + > + {isConfigOpen && ( + + )} +
+ {!!segmentations.length && + segmentations.map((segmentation, index) => { + const { + id, + label, + displayText = [], + segmentCount, + segments, + isVisible, + isActive, + activeSegmentIndex, + } = segmentation; + return ( + onSegmentationClick(id)} + activeSegmentIndex={activeSegmentIndex} + onToggleMinimizeSegmentation={onToggleMinimizeSegmentation} + onSegmentationEdit={onSegmentationEdit} + onSegmentationDelete={onSegmentationDelete} + onSegmentClick={onSegmentClick} + onSegmentEdit={onSegmentEdit} + onToggleSegmentVisibility={onToggleSegmentVisibility} + onToggleSegmentationVisibility={ + onToggleSegmentationVisibility + } + onSegmentAdd={onSegmentAdd} + showSegmentDelete={false} + /> + ); + })}
- )} +
); }; diff --git a/platform/ui/src/components/SegmentationGroupTable/__stories__/segmentationGroupTable.stories.mdx b/platform/ui/src/components/SegmentationGroupTable/__stories__/segmentationGroupTable.stories.mdx index c10d382fec7..122e81a21f7 100644 --- a/platform/ui/src/components/SegmentationGroupTable/__stories__/segmentationGroupTable.stories.mdx +++ b/platform/ui/src/components/SegmentationGroupTable/__stories__/segmentationGroupTable.stories.mdx @@ -1,7 +1,5 @@ -import SegmentationGroupTable from '../SegmentationGroupTable'; - import { ArgsTable, Story, Canvas, Meta } from '@storybook/addon-docs'; -import { createComponentTemplate } from '../../../storybook/functions/create-component-story'; +import { SegmentationGroupTable } from '../../../components'; export const argTypes = { component: SegmentationGroupTable, diff --git a/platform/ui/src/components/index.js b/platform/ui/src/components/index.js index ac6fe6a4125..300eb26b43a 100644 --- a/platform/ui/src/components/index.js +++ b/platform/ui/src/components/index.js @@ -73,6 +73,7 @@ import LoadingIndicatorProgress from './LoadingIndicatorProgress'; import LoadingIndicatorTotalPercent from './LoadingIndicatorTotalPercent'; import ViewportActionBar from './ViewportActionBar'; import ProgressLoadingBar from './ProgressLoadingBar'; +import PanelSection from './PanelSection'; export { AboutModal, @@ -116,6 +117,7 @@ export { NavBar, Notification, ProgressLoadingBar, + PanelSection, Select, SegmentationTable, SegmentationGroupTable, diff --git a/platform/ui/src/index.js b/platform/ui/src/index.js index a6595beebf0..fde2550e5a1 100644 --- a/platform/ui/src/index.js +++ b/platform/ui/src/index.js @@ -73,6 +73,7 @@ export { Modal, NavBar, Notification, + PanelSection, ProgressLoadingBar, Select, SegmentationTable, From c212ce6c30f03144f5cbd405d28105ee4f458869 Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 10 Aug 2023 22:16:20 -0400 Subject: [PATCH 10/94] start of new seg row --- .../ui/src/assets/icons/ui-arrow-down.svg | 2 +- .../ui/src/assets/icons/ui-arrow-left.svg | 3 ++ .../ui/src/assets/icons/ui-arrow-right.svg | 3 ++ platform/ui/src/components/Icon/getIcon.js | 10 ++++ .../components/PanelSection/PanelSection.tsx | 8 ++-- .../SegmentationConfig.tsx | 32 ++++++++----- .../SegmentationGroupTable.tsx | 45 ++++++++++++++++-- .../segmentationGroupTable.stories.mdx | 4 +- platform/ui/src/components/Select/Select.css | 20 +++++--- .../Select/__stories__/select.stories.mdx | 47 +++++++++++++++++++ 10 files changed, 147 insertions(+), 27 deletions(-) create mode 100644 platform/ui/src/assets/icons/ui-arrow-left.svg create mode 100644 platform/ui/src/assets/icons/ui-arrow-right.svg create mode 100644 platform/ui/src/components/Select/__stories__/select.stories.mdx diff --git a/platform/ui/src/assets/icons/ui-arrow-down.svg b/platform/ui/src/assets/icons/ui-arrow-down.svg index 69c81aa82d1..de013233ef6 100644 --- a/platform/ui/src/assets/icons/ui-arrow-down.svg +++ b/platform/ui/src/assets/icons/ui-arrow-down.svg @@ -1,3 +1,3 @@ - + diff --git a/platform/ui/src/assets/icons/ui-arrow-left.svg b/platform/ui/src/assets/icons/ui-arrow-left.svg new file mode 100644 index 00000000000..43bd4ace4f7 --- /dev/null +++ b/platform/ui/src/assets/icons/ui-arrow-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/platform/ui/src/assets/icons/ui-arrow-right.svg b/platform/ui/src/assets/icons/ui-arrow-right.svg new file mode 100644 index 00000000000..756a9e2cd76 --- /dev/null +++ b/platform/ui/src/assets/icons/ui-arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/platform/ui/src/components/Icon/getIcon.js b/platform/ui/src/components/Icon/getIcon.js index ad0675d796d..06bb3ccde45 100644 --- a/platform/ui/src/components/Icon/getIcon.js +++ b/platform/ui/src/components/Icon/getIcon.js @@ -72,6 +72,8 @@ import tabROIThreshold from './../../assets/icons/tab-roi-threshold.svg'; import tabSegmentation from './../../assets/icons/tab-segmentation.svg'; import uiArrowDown from './../../assets/icons/ui-arrow-down.svg'; import uiArrowUp from './../../assets/icons/ui-arrow-up.svg'; +import uiArrowLeft from './../../assets/icons/ui-arrow-left.svg'; +import uiArrowRight from './../../assets/icons/ui-arrow-right.svg'; import loadingOHIFMark from './../../assets/icons/loading-ohif-mark.svg'; import notificationsInfo from './../../assets/icons/notifications-info.svg'; import notificationsWarning from './../../assets/icons/notifications-warning.svg'; @@ -126,6 +128,9 @@ import referenceLines from './../../assets/icons/reference-lines.svg'; import chevronDownNew from './../../assets/icons/icon-disclosure-close.svg'; import chevronLeftNew from './../../assets/icons/icon-disclosure-open.svg'; import settingsBars from './../../assets/icons/icon-display-settings.svg'; +import iconAdd from './../../assets/icons/icon-add.svg'; +import iconRename from './../../assets/icons/icon-rename.svg'; +import iconDelete from './../../assets/icons/icon-delete.svg'; /** Old OHIF */ import oldTrash from './../../assets/icons/old-trash.svg'; @@ -254,12 +259,17 @@ const ICONS = { 'tab-segmentation': tabSegmentation, 'ui-arrow-down': uiArrowDown, 'ui-arrow-up': uiArrowUp, + 'ui-arrow-left': uiArrowLeft, + 'ui-arrow-right': uiArrowRight, 'checkbox-default': checkboxDefault, 'checkbox-active': checkboxActive, 'tool-referenceLines': referenceLines, 'chevron-left-new': chevronLeftNew, 'chevron-down-new': chevronDownNew, 'settings-bars': settingsBars, + 'icon-rename': iconRename, + 'icon-add': iconAdd, + 'icon-delete': iconDelete, /** Old OHIF */ 'old-trash': oldTrash, diff --git a/platform/ui/src/components/PanelSection/PanelSection.tsx b/platform/ui/src/components/PanelSection/PanelSection.tsx index 78ec24b697d..11c9a572859 100644 --- a/platform/ui/src/components/PanelSection/PanelSection.tsx +++ b/platform/ui/src/components/PanelSection/PanelSection.tsx @@ -30,9 +30,11 @@ const PanelSection = ({ title, children, actionIcons = [] }) => { }} /> ))} - +
+ +
{isChildrenVisible && children} diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx index 5423c37cc71..cedf61e786e 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationConfig.tsx @@ -1,10 +1,9 @@ import React, { useState } from 'react'; -import classNames from 'classnames'; - import Icon from '../Icon'; import InputRange from '../InputRange'; import CheckBox from '../CheckBox'; import InputNumber from '../InputNumber'; +import classNames from 'classnames'; const ActiveSegmentationConfig = ({ config, @@ -80,11 +79,11 @@ const InactiveSegmentationConfig = ({ setFillAlphaInactive, }) => { return ( -
+
@@ -118,9 +117,9 @@ const SegmentationConfig = ({ setRenderOutline, }) => { const { initialConfig } = segmentationConfig; + const [isMinimized, setIsMinimized] = useState(true); return (
- {/* active segmentation */}
- {/* A small line */}
- {/* inactive segmentation */}
setIsMinimized(!isMinimized)} className="flex items-center cursor-pointer pl-2 pb-[9px]" > + {'Inactive Segmentations'}
- + {!isMinimized && ( + + )}
diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx index 01f2941a891..31da082347f 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; import Icon from '../Icon'; import SegmentationGroup from './SegmentationGroup'; -import { PanelSection } from '../../components'; +import { PanelSection, Select } from '../../components'; import SegmentationConfig from './SegmentationConfig'; // { @@ -44,6 +44,9 @@ const SegmentationGroupTable = ({ setRenderOutline, }) => { const [isConfigOpen, setIsConfigOpen] = useState(false); + const [activeSegmentation, setActiveSegmentation] = useState( + segmentations[0] + ); return (
@@ -68,7 +71,43 @@ const SegmentationGroupTable = ({ segmentationConfig={segmentationConfig} /> )} -
+ {segmentations?.length === 0 ? ( +
{'No Segmentation'}
+ ) : ( +
+ {/* segmentation row add, hover edit etc */} +
+
+ +
+ +
+) + + + +- [Overview](#overview) +- [Props](#props) +- [Contribute](#contribute) + +## Overview + +Select is a component that allows you to select from a list + + + alert(item.label), + options: [{label:'item1', value: 1 }, {label:'item2', value:2}], + value: 2 + }} + > + {SelectTemplate.bind({})} + + + +## Props + + + +## Contribute + +