From 918409c0c52e40f02e876c51706e693c970de751 Mon Sep 17 00:00:00 2001 From: Alireza Date: Wed, 22 May 2024 17:49:28 -0400 Subject: [PATCH 01/28] chore: Add UI components Button, Toaster, and ThemeWrapper --- platform/app/package.json | 1 + platform/app/src/App.tsx | 3 + platform/app/tailwind.config.js | 747 +----------------- platform/ui-next/components.json | 17 + platform/ui-next/package.json | 31 + .../ui-next/src/components/Button/Button.tsx | 54 ++ .../ui-next/src/components/Button/index.ts | 1 + .../components/ThemeWrapper/ThemeWrapper.tsx | 4 + .../src/components/ThemeWrapper/index.ts | 1 + .../src/components/Toaster/Toaster.tsx | 29 + .../ui-next/src/components/Toaster/index.ts | 1 + platform/ui-next/src/components/index.ts | 5 + platform/ui-next/src/index.ts | 3 + platform/ui-next/src/lib/utils.ts | 6 + platform/ui-next/src/tailwind.css | 6 + platform/ui-next/tailwind.config.js | 35 + platform/ui-next/tsconfig.json | 11 + platform/ui/tailwind.config.js | 5 +- tsconfig.json | 1 + yarn.lock | 312 ++++++-- 20 files changed, 482 insertions(+), 791 deletions(-) create mode 100644 platform/ui-next/components.json create mode 100644 platform/ui-next/package.json create mode 100644 platform/ui-next/src/components/Button/Button.tsx create mode 100644 platform/ui-next/src/components/Button/index.ts create mode 100644 platform/ui-next/src/components/ThemeWrapper/ThemeWrapper.tsx create mode 100644 platform/ui-next/src/components/ThemeWrapper/index.ts create mode 100644 platform/ui-next/src/components/Toaster/Toaster.tsx create mode 100644 platform/ui-next/src/components/Toaster/index.ts create mode 100644 platform/ui-next/src/components/index.ts create mode 100644 platform/ui-next/src/index.ts create mode 100644 platform/ui-next/src/lib/utils.ts create mode 100644 platform/ui-next/src/tailwind.css create mode 100644 platform/ui-next/tailwind.config.js create mode 100644 platform/ui-next/tsconfig.json diff --git a/platform/app/package.json b/platform/app/package.json index b671e36111d..107c17406e6 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -71,6 +71,7 @@ "@ohif/mode-microscopy": "3.9.0-beta.14", "@ohif/mode-test": "3.9.0-beta.14", "@ohif/ui": "3.9.0-beta.14", + "@ohif/ui-next": "3.9.0-beta.14", "@types/react": "^17.0.38", "classnames": "^2.3.2", "core-js": "^3.16.1", diff --git a/platform/app/src/App.tsx b/platform/app/src/App.tsx index 0d06d22eeb9..fde953c8362 100644 --- a/platform/app/src/App.tsx +++ b/platform/app/src/App.tsx @@ -1,4 +1,5 @@ // External + import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import i18n from '@ohif/i18n'; @@ -23,6 +24,7 @@ import { UserAuthenticationProvider, ToolboxProvider, } from '@ohif/ui'; +import { ThemeWrapper as ThemeWrapperNext } from '@ohif/ui-next'; // Viewer Project // TODO: Should this influence study list? import { AppConfigProvider } from '@state'; @@ -83,6 +85,7 @@ function App({ config, defaultExtensions, defaultModes }) { [AppConfigProvider, { value: appConfigState }], [UserAuthenticationProvider, { service: userAuthenticationService }], [I18nextProvider, { i18n }], + [ThemeWrapperNext], [ThemeWrapper], [ToolboxProvider], [ViewportGridProvider, { service: viewportGridService }], diff --git a/platform/app/tailwind.config.js b/platform/app/tailwind.config.js index bc354e5a1a6..8c40c371f55 100644 --- a/platform/app/tailwind.config.js +++ b/platform/app/tailwind.config.js @@ -1,5 +1,4 @@ -// Todo: we probably should add external installed extensions/modes here as well. - +/** @type {import('tailwindcss').Config} */ module.exports = { // Note: in Tailwind 3.0, JIT will purge unused styles by default // but in development, it is often useful to disable this to see @@ -7,6 +6,7 @@ module.exports = { // ...(process.env.NODE_ENV === 'development' && { // safelist: [{ pattern: /.*/ }], // }), + presets: [require('../ui/tailwind.config.js'), require('../ui-next/tailwind.config.js')], content: [ './src/**/*.{jsx,js,ts,tsx, css}', '../../extensions/**/*.{jsx,js,ts,tsx, css}', @@ -14,256 +14,10 @@ module.exports = { '../../modes/**/*.{jsx,js,ts,tsx, css}', './node_modules/@ohif/ui/src/**/*.{js,jsx,ts,tsx, css}', '../../node_modules/@ohif/ui/src/**/*.{js,jsx,ts,tsx,css}', - '../../node_modules/@ohif/ui/src/**/*.{js,jsx,ts,tsx,css}', + '../../node_modules/@ohif/ui-next/src/**/*.{js,jsx,ts,tsx,css}', '../../node_modules/@ohif/extension-*/src/**/*.{js,jsx,css, ts,tsx}', ], theme: { - screens: { - sm: '640px', - md: '768px', - lg: '1024px', - xl: '1280px', - }, - colors: { - overlay: 'rgba(0, 0, 0, 0.8)', - transparent: 'transparent', - black: '#000', - white: '#fff', - initial: 'initial', - inherit: 'inherit', - - indigo: { - dark: '#0b1a42', - }, - aqua: { - pale: '#7bb2ce', - }, - - primary: { - light: '#5acce6', - main: '#0944b3', - dark: '#090c29', - active: '#348cfd', - }, - - inputfield: { - main: '#3a3f99', - disabled: '#2b166b', - focus: '#5acce6', - placeholder: '#39383f', - }, - - secondary: { - light: '#3a3f99', - main: '#2b166b', - dark: '#041c4a', - active: '#1f1f27', - }, - - common: { - bright: '#e1e1e1', - light: '#a19fad', - main: '#fff', - dark: '#726f7e', - active: '#2c3074', - }, - - customgreen: { - 100: '#05D97C', - 200: '#0FD97C', - }, - - customblue: { - 10: '#0A163F', - 20: '#0B1F54', - 30: '#09286e', - 40: '#0E307F', - 50: '#0F3A94', - 80: '#1454D4', - 100: '#c4fdff', - 200: '#38daff', - 300: '#1D204D', - 400: '#90A0C1', - }, - - customgray: { - 100: '#262943', - }, - - gray: { - 100: '#f7fafc', - 200: '#edf2f7', - 300: '#e2e8f0', - 400: '#cbd5e0', - 500: '#a0aec0', - 600: '#718096', - 700: '#4a5568', - 800: '#2d3748', - 900: '#1a202c', - }, - red: { - 100: '#fff5f5', - 200: '#fed7d7', - 300: '#feb2b2', - 400: '#fc8181', - 500: '#f56565', - 600: '#e53e3e', - 700: '#c53030', - 800: '#9b2c2c', - 900: '#742a2a', - }, - orange: { - 100: '#fffaf0', - 200: '#feebc8', - 300: '#fbd38d', - 400: '#f6ad55', - 500: '#ed8936', - 600: '#dd6b20', - 700: '#c05621', - 800: '#9c4221', - 900: '#7b341e', - }, - yellow: { - 100: '#fffff0', - 200: '#fefcbf', - 300: '#faf089', - 400: '#f6e05e', - 500: '#ecc94b', - 600: '#d69e2e', - 700: '#b7791f', - 800: '#975a16', - 900: '#744210', - }, - green: { - 100: '#f0fff4', - 200: '#c6f6d5', - 300: '#9ae6b4', - 400: '#68d391', - 500: '#48bb78', - 600: '#38a169', - 700: '#2f855a', - 800: '#276749', - 900: '#22543d', - }, - teal: { - 100: '#e6fffa', - 200: '#b2f5ea', - 300: '#81e6d9', - 400: '#4fd1c5', - 500: '#38b2ac', - 600: '#319795', - 700: '#2c7a7b', - 800: '#285e61', - 900: '#234e52', - }, - blue: { - 100: '#ebf8ff', - 200: '#bee3f8', - 300: '#90cdf4', - 400: '#63b3ed', - 500: '#4299e1', - 600: '#3182ce', - 700: '#2b6cb0', - 800: '#2c5282', - 900: '#2a4365', - }, - indigo: { - 100: '#ebf4ff', - 200: '#c3dafe', - 300: '#a3bffa', - 400: '#7f9cf5', - 500: '#667eea', - 600: '#5a67d8', - 700: '#4c51bf', - 800: '#434190', - 900: '#3c366b', - }, - purple: { - 100: '#faf5ff', - 200: '#e9d8fd', - 300: '#d6bcfa', - 400: '#b794f4', - 500: '#9f7aea', - 600: '#805ad5', - 700: '#6b46c1', - 800: '#553c9a', - 900: '#44337a', - }, - pink: { - 100: '#fff5f7', - 200: '#fed7e2', - 300: '#fbb6ce', - 400: '#f687b3', - 500: '#ed64a6', - 600: '#d53f8c', - 700: '#b83280', - 800: '#97266d', - 900: '#702459', - }, - }, - backgroundColor: theme => theme('colors'), - backgroundPosition: { - bottom: 'bottom', - center: 'center', - left: 'left', - 'left-bottom': 'left bottom', - 'left-top': 'left top', - right: 'right', - 'right-bottom': 'right bottom', - 'right-top': 'right top', - top: 'top', - }, - backgroundSize: { - auto: 'auto', - cover: 'cover', - contain: 'contain', - }, - borderColor: theme => ({ - ...theme('colors'), - DEFAULT: theme('colors.gray.300', 'currentColor'), - }), - boxShadow: { - xs: '0 0 0 1px rgba(0, 0, 0, 0.05)', - sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)', - DEFAULT: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)', - md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)', - lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', - xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)', - '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)', - inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)', - outline: '0 0 0 3px rgba(66, 153, 225, 0.5)', - none: 'none', - }, - container: {}, - cursor: { - auto: 'auto', - default: 'default', - pointer: 'pointer', - wait: 'wait', - text: 'text', - move: 'move', - 'not-allowed': 'not-allowed', - }, - fill: { - current: 'currentColor', - }, - flex: { - 1: '1 1 0%', - 0.3: '0.3 0.3 0%', - 0.5: '0.5 0.5 0%', - auto: '1 1 auto', - initial: '0 1 auto', - none: 'none', - static: '0 0 auto', - }, - flexGrow: { - 0: '0', - DEFAULT: '1', - }, - flexShrink: { - 0: '0', - DEFAULT: '1', - }, fontFamily: { sans: [ 'Inter', @@ -296,500 +50,5 @@ module.exports = { '5xl': '3rem', '6xl': '4rem', }, - fontWeight: { - hairline: '100', - thin: '200', - light: '300', - normal: '300', - medium: '500', - semibold: '600', - bold: '700', - extrabold: '800', - black: '900', - }, - height: theme => ({ - auto: 'auto', - ...theme('spacing'), - full: '100%', - screen: '100vh', - inherit: 'inherit', - }), - inset: theme => ({ - ...theme('spacing'), - 0: '0', - auto: 'auto', - full: '100%', - viewport: '0.5rem', - '1/2': '50%', - 'viewport-scrollbar': '1.3rem', - }), - minHeight: theme => ({ - ...theme('spacing'), - 0: '0', - full: '100%', - screen: '100vh', - }), - letterSpacing: { - tighter: '-0.05em', - tight: '-0.025em', - normal: '0', - wide: '0.025em', - wider: '0.05em', - widest: '0.1em', - }, - lineHeight: { - none: '1', - tight: '1.25', - snug: '1.375', - normal: '1.5', - relaxed: '1.625', - loose: '2', - 3: '.75rem', - 4: '1rem', - 5: '1.25rem', - 6: '1.5rem', - 7: '1.75rem', - 8: '2rem', - 9: '2.25rem', - 10: '2.5rem', - }, - listStyleType: { - none: 'none', - disc: 'disc', - decimal: 'decimal', - }, - margin: (theme, { negative }) => ({ - auto: 'auto', - ...theme('spacing'), - ...negative(theme('spacing')), - }), - maxHeight: theme => ({ - full: '100%', - screen: '100vh', - ...theme('spacing'), - }), - maxWidth: (theme, { breakpoints }) => ({ - none: 'none', - xs: '20rem', - sm: '24rem', - md: '28rem', - lg: '32rem', - xl: '36rem', - '2xl': '42rem', - '3xl': '48rem', - '4xl': '56rem', - '5xl': '64rem', - '6xl': '72rem', - full: '100%', - ...breakpoints(theme('screens')), - ...theme('spacing'), - }), - minWidth: theme => ({ - ...theme('spacing'), - 0: '0', - xs: '2rem', - sm: '4rem', - md: '6rem', - lg: '8rem', - xl: '10rem', - full: '100%', - }), - objectPosition: { - bottom: 'bottom', - center: 'center', - left: 'left', - 'left-bottom': 'left bottom', - 'left-top': 'left top', - right: 'right', - 'right-bottom': 'right bottom', - 'right-top': 'right top', - top: 'top', - }, - opacity: { - 0: '0', - 5: '.5', - 10: '.10', - 15: '.15', - 20: '.20', - 25: '.25', - 30: '.30', - 35: '.35', - 40: '.40', - 45: '.45', - 50: '.50', - 55: '.55', - 60: '.60', - 65: '.65', - 70: '.70', - 75: '.75', - 80: '.80', - 85: '.85', - 90: '.90', - 95: '.95', - 100: '1', - }, - order: { - first: '-9999', - last: '9999', - none: '0', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - }, - padding: theme => theme('spacing'), - placeholderColor: theme => theme('colors'), - stroke: theme => ({ - ...theme('colors'), - current: 'currentColor', - }), - strokeWidth: { - 0: '0', - 1: '1', - 2: '2', - }, - textColor: theme => theme('colors'), - width: theme => ({ - auto: 'auto', - ...theme('spacing'), - '1/2': '50%', - '1/3': '33.333333%', - '2/3': '66.666667%', - '1/4': '25%', - '2/4': '50%', - '3/4': '75%', - '1/5': '20%', - '2/5': '40%', - '3/5': '60%', - '4/5': '80%', - '1/6': '16.666667%', - '2/6': '33.333333%', - '3/6': '50%', - '4/6': '66.666667%', - '5/6': '83.333333%', - '1/12': '8.333333%', - '2/12': '16.666667%', - '3/12': '25%', - '4/12': '33.333333%', - '5/12': '41.666667%', - '6/12': '50%', - '7/12': '58.333333%', - '8/12': '66.666667%', - '9/12': '75%', - '10/12': '83.333333%', - '11/12': '91.666667%', - '1/24': '4.166666667%', - '2/24': '8.333333333%', - '3/24': '12.5%', - '4/24': '16.66666667%', - '5/24': '20.83333333%', - '6/24': '25%', - '7/24': '29.16666667%', - '8/24': '33.33333333%', - '9/24': '37.5%', - '10/24': '41.66666667%', - '11/24': '45.83333333%', - '12/24': '50%', - '13/24': '54.16666667%', - '14/24': '58.33333333%', - '15/24': '62.5%', - '16/24': '66.66666667%', - '17/24': '70.83333333%', - '18/24': '75%', - '19/24': '79.16666667%', - '20/24': '83.33333333%', - '21/24': '87.5%', - '22/24': '91.66666667%', - '23/24': '95.83333333%', - full: '100%', - screen: '100vw', - 'max-content': 'max-content', - }), - zIndex: { - auto: 'auto', - 0: '0', - 10: '10', - 20: '20', - 30: '30', - 40: '40', - 50: '50', - }, - gap: theme => theme('spacing'), - gridTemplateColumns: { - none: 'none', - 1: 'repeat(1, minmax(0, 1fr))', - 2: 'repeat(2, minmax(0, 1fr))', - 3: 'repeat(3, minmax(0, 1fr))', - 4: 'repeat(4, minmax(0, 1fr))', - 5: 'repeat(5, minmax(0, 1fr))', - 6: 'repeat(6, minmax(0, 1fr))', - 7: 'repeat(7, minmax(0, 1fr))', - 8: 'repeat(8, minmax(0, 1fr))', - 9: 'repeat(9, minmax(0, 1fr))', - 10: 'repeat(10, minmax(0, 1fr))', - 11: 'repeat(11, minmax(0, 1fr))', - 12: 'repeat(12, minmax(0, 1fr))', - }, - gridColumn: { - auto: 'auto', - 'span-1': 'span 1 / span 1', - 'span-2': 'span 2 / span 2', - 'span-3': 'span 3 / span 3', - 'span-4': 'span 4 / span 4', - 'span-5': 'span 5 / span 5', - 'span-6': 'span 6 / span 6', - 'span-7': 'span 7 / span 7', - 'span-8': 'span 8 / span 8', - 'span-9': 'span 9 / span 9', - 'span-10': 'span 10 / span 10', - 'span-11': 'span 11 / span 11', - 'span-12': 'span 12 / span 12', - }, - gridColumnStart: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - 13: '13', - }, - gridColumnEnd: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - 8: '8', - 9: '9', - 10: '10', - 11: '11', - 12: '12', - 13: '13', - }, - gridTemplateRows: { - none: 'none', - 1: 'repeat(1, minmax(0, 1fr))', - 2: 'repeat(2, minmax(0, 1fr))', - 3: 'repeat(3, minmax(0, 1fr))', - 4: 'repeat(4, minmax(0, 1fr))', - 5: 'repeat(5, minmax(0, 1fr))', - 6: 'repeat(6, minmax(0, 1fr))', - }, - gridRow: { - auto: 'auto', - 'span-1': 'span 1 / span 1', - 'span-2': 'span 2 / span 2', - 'span-3': 'span 3 / span 3', - 'span-4': 'span 4 / span 4', - 'span-5': 'span 5 / span 5', - 'span-6': 'span 6 / span 6', - }, - gridRowStart: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - }, - gridRowEnd: { - auto: 'auto', - 1: '1', - 2: '2', - 3: '3', - 4: '4', - 5: '5', - 6: '6', - 7: '7', - }, - transformOrigin: { - center: 'center', - top: 'top', - 'top-right': 'top right', - right: 'right', - 'bottom-right': 'bottom right', - bottom: 'bottom', - 'bottom-left': 'bottom left', - left: 'left', - 'top-left': 'top left', - }, - scale: { - 0: '0', - 50: '.5', - 75: '.75', - 90: '.9', - 95: '.95', - 100: '1', - 105: '1.05', - 110: '1.1', - 125: '1.25', - 150: '1.5', - }, - rotate: { - '-180': '-180deg', - '-90': '-90deg', - '-45': '-45deg', - 0: '0', - 45: '45deg', - 90: '90deg', - 180: '180deg', - }, - translate: (theme, { negative }) => ({ - ...theme('spacing'), - ...negative(theme('spacing')), - '-full': '-100%', - '-1/2': '-50%', - '1/2': '50%', - full: '100%', - }), - skew: { - '-12': '-12deg', - '-6': '-6deg', - '-3': '-3deg', - 0: '0', - 3: '3deg', - 6: '6deg', - 12: '12deg', - }, - transitionProperty: { - none: 'none', - all: 'all', - height: 'height', - DEFAULT: - 'background-color, border-color, color, fill, stroke, opacity, box-shadow, transform', - colors: 'background-color, border-color, color, fill, stroke', - opacity: 'opacity', - shadow: 'box-shadow', - transform: 'transform', - }, - transitionTimingFunction: { - linear: 'linear', - in: 'cubic-bezier(0.4, 0, 1, 1)', - out: 'cubic-bezier(0, 0, 0.2, 1)', - 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)', - }, - transitionDuration: { - 75: '75ms', - 100: '100ms', - 150: '150ms', - 200: '200ms', - 300: '300ms', - 500: '500ms', - 700: '700ms', - 1000: '1000ms', - }, - }, - variants: { - accessibility: ['responsive', 'focus'], - alignContent: ['responsive'], - alignItems: ['responsive'], - alignSelf: ['responsive'], - appearance: ['responsive'], - backgroundAttachment: ['responsive'], - backgroundColor: ['responsive', 'hover', 'focus', 'active', 'group-focus', 'group-hover'], - backgroundPosition: ['responsive'], - backgroundRepeat: ['responsive'], - backgroundSize: ['responsive'], - borderCollapse: ['responsive'], - borderColor: ['responsive', 'hover', 'focus', 'active', 'group-focus', 'group-hover'], - borderRadius: ['responsive', 'focus', 'first', 'last'], - borderStyle: ['responsive', 'focus'], - borderWidth: ['responsive', 'focus', 'first', 'last'], - boxShadow: ['responsive', 'hover', 'focus'], - boxSizing: ['responsive'], - cursor: ['responsive'], - display: ['responsive'], - fill: ['responsive'], - flex: ['responsive'], - flexDirection: ['responsive'], - flexGrow: ['responsive'], - flexShrink: ['responsive'], - flexWrap: ['responsive'], - float: ['responsive'], - clear: ['responsive'], - fontFamily: ['responsive'], - fontSize: ['responsive'], - fontSmoothing: ['responsive'], - fontStyle: ['responsive'], - fontWeight: ['responsive', 'hover', 'focus'], - height: ['responsive'], - inset: ['responsive'], - justifyContent: ['responsive'], - letterSpacing: ['responsive'], - lineHeight: ['responsive'], - listStylePosition: ['responsive'], - listStyleType: ['responsive'], - margin: ['responsive'], - maxHeight: ['responsive'], - maxWidth: ['responsive'], - minHeight: ['responsive'], - minWidth: ['responsive'], - objectFit: ['responsive'], - objectPosition: ['responsive'], - opacity: ['responsive', 'hover', 'focus', 'active'], - order: ['responsive'], - outline: ['responsive', 'focus'], - overflow: ['responsive'], - padding: ['responsive', 'first'], - placeholderColor: ['responsive', 'focus'], - pointerEvents: ['responsive'], - position: ['responsive'], - resize: ['responsive'], - stroke: ['responsive'], - strokeWidth: ['responsive'], - tableLayout: ['responsive'], - textAlign: ['responsive'], - textColor: ['responsive', 'hover', 'focus', 'active', 'group-hover'], - textDecoration: ['responsive', 'hover', 'focus'], - textTransform: ['responsive'], - userSelect: ['responsive'], - verticalAlign: ['responsive'], - visibility: ['responsive'], - whitespace: ['responsive'], - width: ['responsive'], - wordBreak: ['responsive'], - zIndex: ['responsive'], - gap: ['responsive'], - gridAutoFlow: ['responsive'], - gridTemplateColumns: ['responsive'], - gridColumn: ['responsive'], - gridColumnStart: ['responsive'], - gridColumnEnd: ['responsive'], - gridTemplateRows: ['responsive'], - gridRow: ['responsive'], - gridRowStart: ['responsive'], - gridRowEnd: ['responsive'], - transform: ['responsive'], - transformOrigin: ['responsive'], - scale: ['responsive', 'hover', 'focus'], - rotate: ['responsive', 'hover', 'focus'], - translate: ['responsive', 'hover', 'focus'], - skew: ['responsive', 'hover', 'focus'], - transitionProperty: ['responsive'], - transitionTimingFunction: ['responsive'], - transitionDuration: ['responsive'], }, - corePlugins: {}, - plugins: [], }; diff --git a/platform/ui-next/components.json b/platform/ui-next/components.json new file mode 100644 index 00000000000..e6cd0c36f24 --- /dev/null +++ b/platform/ui-next/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/tailwind.css", + "baseColor": "slate", + "cssVariables": false, + "prefix": "" + }, + "aliases": { + "components": "src/components", + "utils": "src/lib/utils" + } +} diff --git a/platform/ui-next/package.json b/platform/ui-next/package.json new file mode 100644 index 00000000000..f58f4b4b8b0 --- /dev/null +++ b/platform/ui-next/package.json @@ -0,0 +1,31 @@ +{ + "name": "@ohif/ui-next", + "version": "3.9.0-beta.14", + "description": "Next version of OHIF Viewers UI, more customizable using shadcn/UI", + "main": "index.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "exports": { + "./tailwind.config": "./tailwind.config.ts", + "./lib/*": "./src/lib/*.ts", + "./components/*": "./src/components/*.tsx", + ".": "./src/index.ts" + }, + "dependencies": { + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-slot": "^1.0.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "next-themes": "^0.3.0", + "react": "^17.0.2", + "sonner": "^1.4.41", + "tailwind-merge": "^2.3.0", + "tailwindcss": "^3.4.3", + "tailwindcss-animate": "^1.0.7" + }, + "keywords": [], + "author": "OHIF", + "license": "MIT" +} diff --git a/platform/ui-next/src/components/Button/Button.tsx b/platform/ui-next/src/components/Button/Button.tsx new file mode 100644 index 00000000000..55680ce776b --- /dev/null +++ b/platform/ui-next/src/components/Button/Button.tsx @@ -0,0 +1,54 @@ +import * as React from 'react'; +import { Slot } from '@radix-ui/react-slot'; +import { cva, type VariantProps } from 'class-variance-authority'; + +import { cn } from '../../lib/utils'; + +const buttonVariants = cva( + 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50', + { + variants: { + variant: { + default: 'bg-primary-light text-primary-foreground shadow hover:bg-primary/90', + destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', + outline: + 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2', + sm: 'h-8 rounded-md px-3 text-xs', + lg: 'h-10 rounded-md px-8', + icon: 'h-9 w-9', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + } +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : 'button'; + return ( + + ); + } +); +Button.displayName = 'Button'; + +export { Button, buttonVariants }; diff --git a/platform/ui-next/src/components/Button/index.ts b/platform/ui-next/src/components/Button/index.ts new file mode 100644 index 00000000000..fe9c53c5118 --- /dev/null +++ b/platform/ui-next/src/components/Button/index.ts @@ -0,0 +1 @@ +export { Button } from './Button'; diff --git a/platform/ui-next/src/components/ThemeWrapper/ThemeWrapper.tsx b/platform/ui-next/src/components/ThemeWrapper/ThemeWrapper.tsx new file mode 100644 index 00000000000..561fcaacc1f --- /dev/null +++ b/platform/ui-next/src/components/ThemeWrapper/ThemeWrapper.tsx @@ -0,0 +1,4 @@ +import React from 'react'; +import '../../tailwind.css'; + +export const ThemeWrapper = ({ children }) => {children}; diff --git a/platform/ui-next/src/components/ThemeWrapper/index.ts b/platform/ui-next/src/components/ThemeWrapper/index.ts new file mode 100644 index 00000000000..69f5248ba78 --- /dev/null +++ b/platform/ui-next/src/components/ThemeWrapper/index.ts @@ -0,0 +1 @@ +export { ThemeWrapper } from './ThemeWrapper'; diff --git a/platform/ui-next/src/components/Toaster/Toaster.tsx b/platform/ui-next/src/components/Toaster/Toaster.tsx new file mode 100644 index 00000000000..404c8c817d5 --- /dev/null +++ b/platform/ui-next/src/components/Toaster/Toaster.tsx @@ -0,0 +1,29 @@ +import { useTheme } from 'next-themes'; +import { Toaster as Sonner } from 'sonner'; + +type ToasterProps = React.ComponentProps; + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = 'system' } = useTheme(); + + return ( + + ); +}; + +export { Toaster }; diff --git a/platform/ui-next/src/components/Toaster/index.ts b/platform/ui-next/src/components/Toaster/index.ts new file mode 100644 index 00000000000..94c2ba72ece --- /dev/null +++ b/platform/ui-next/src/components/Toaster/index.ts @@ -0,0 +1 @@ +export { Toaster } from './Toaster'; diff --git a/platform/ui-next/src/components/index.ts b/platform/ui-next/src/components/index.ts new file mode 100644 index 00000000000..1b8fdce2cbb --- /dev/null +++ b/platform/ui-next/src/components/index.ts @@ -0,0 +1,5 @@ +import { Toaster } from './Toaster'; +import { Button } from './Button'; +import { ThemeWrapper } from './ThemeWrapper'; + +export { Toaster, Button, ThemeWrapper }; diff --git a/platform/ui-next/src/index.ts b/platform/ui-next/src/index.ts new file mode 100644 index 00000000000..00192205772 --- /dev/null +++ b/platform/ui-next/src/index.ts @@ -0,0 +1,3 @@ +import { Toaster, Button, ThemeWrapper } from './components'; + +export { Toaster, Button, ThemeWrapper }; diff --git a/platform/ui-next/src/lib/utils.ts b/platform/ui-next/src/lib/utils.ts new file mode 100644 index 00000000000..2819a830d24 --- /dev/null +++ b/platform/ui-next/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/platform/ui-next/src/tailwind.css b/platform/ui-next/src/tailwind.css new file mode 100644 index 00000000000..acb4cc9b8a7 --- /dev/null +++ b/platform/ui-next/src/tailwind.css @@ -0,0 +1,6 @@ +/* IMPORT CUSTOM FONT */ +@import url('https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap'); + +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/platform/ui-next/tailwind.config.js b/platform/ui-next/tailwind.config.js new file mode 100644 index 00000000000..fa55850ca4d --- /dev/null +++ b/platform/ui-next/tailwind.config.js @@ -0,0 +1,35 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + presets: [require('../ui/tailwind.config.js')], + content: [ + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], + prefix: 'next-', + theme: { + colors: { + primary: { + light: '#ffffff', + }, + }, + extend: { + keyframes: { + 'accordion-down': { + from: { height: '0' }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: '0' }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, + }, + }, + plugins: [require('tailwindcss-animate')], +}; diff --git a/platform/ui-next/tsconfig.json b/platform/ui-next/tsconfig.json new file mode 100644 index 00000000000..640c1fb0f40 --- /dev/null +++ b/platform/ui-next/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@ui/*": ["./src/*"] + } + }, + "include": ["src",], + "exclude": ["node_modules"] +} diff --git a/platform/ui/tailwind.config.js b/platform/ui/tailwind.config.js index fed8ac10a95..29e859d8f0e 100644 --- a/platform/ui/tailwind.config.js +++ b/platform/ui/tailwind.config.js @@ -34,7 +34,6 @@ module.exports = { dark: '#090c29', active: '#348cfd', }, - inputfield: { main: '#3a3f99', disabled: '#2b166b', @@ -49,6 +48,10 @@ module.exports = { active: '#1f1f27', }, + indigo: { + dark: '#0b1a42', + }, + common: { bright: '#e1e1e1', light: '#a19fad', diff --git a/tsconfig.json b/tsconfig.json index 44e34356da7..2c6577bf7f1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ "paths": { "@ohif/core": ["platform/core/src"], "@ohif/ui": ["platform/ui/src"], + "@ohif/ui-next": ["platform/ui-next/src"], "@ohif/i18n": ["platform/i18n/src"], "@ohif/app": ["platform/app/src"] } diff --git a/yarn.lock b/yarn.lock index 4adf0573cbd..6126fa8756e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -165,6 +165,11 @@ "@algolia/logger-common" "4.23.3" "@algolia/requester-common" "4.23.3" +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -1441,7 +1446,7 @@ core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/runtime@7.22.11", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@7.22.11", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== @@ -2086,7 +2091,7 @@ "@docusaurus/theme-search-algolia" "2.4.3" "@docusaurus/types" "2.4.3" -"@docusaurus/react-loadable@5.5.2": +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== @@ -2799,7 +2804,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -3504,6 +3509,27 @@ dependencies: "@babel/runtime" "^7.13.10" +"@radix-ui/react-dialog@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz#71657b1b116de6c7a0b03242d7d43e01062c7300" + integrity sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-controllable-state" "1.0.1" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + "@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" @@ -3523,6 +3549,18 @@ "@radix-ui/react-use-callback-ref" "1.0.1" "@radix-ui/react-use-escape-keydown" "1.0.3" +"@radix-ui/react-dismissable-layer@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz#3f98425b82b9068dfbab5db5fff3df6ebf48b9d4" + integrity sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g== + 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" @@ -3540,6 +3578,21 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-use-callback-ref" "1.0.1" +"@radix-ui/react-focus-scope@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz#2ac45fce8c5bb33eb18419cdc1905ef4f1906525" + integrity sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA== + 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-icons@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-icons/-/react-icons-1.3.0.tgz#c61af8f323d87682c5ca76b856d60c2312dbcb69" + integrity sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw== + "@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" @@ -3573,6 +3626,23 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" +"@radix-ui/react-portal@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.4.tgz#df4bfd353db3b1e84e639e9c63a5f2565fb00e15" + integrity sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-presence@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.0.1.tgz#491990ba913b8e2a5db1b06b203cb24b5cdef9ba" + integrity sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@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" @@ -3633,7 +3703,7 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@radix-ui/react-slot@1.0.2": +"@radix-ui/react-slot@1.0.2", "@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== @@ -6166,6 +6236,11 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -7463,6 +7538,13 @@ cjs-module-lexer@^1.0.0, cjs-module-lexer@^1.2.3: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== +class-variance-authority@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz#1c3134d634d80271b1837452b06d821915954522" + integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A== + dependencies: + clsx "2.0.0" + classnames@^2.2.5, classnames@^2.3.2: version "2.5.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" @@ -7605,11 +7687,21 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== +clsx@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + clsx@^1.1.1, clsx@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + cmd-shim@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" @@ -7736,7 +7828,7 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@8.3.0, commander@9.2.0, commander@^2.20.0, commander@^5.1.0, commander@^6.2.1, commander@^7.0.0, commander@^7.2.0, commander@^8.3.0: +commander@8.3.0, commander@9.2.0, commander@^2.20.0, commander@^4.0.0, commander@^5.1.0, commander@^6.2.1, commander@^7.0.0, commander@^7.2.0, commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -11278,6 +11370,17 @@ glob@^10.0.0, glob@^10.2.2: minipass "^7.0.4" path-scurry "^1.10.2" +glob@^10.3.10: + version "10.3.16" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.16.tgz#bf6679d5d51279c8cfae4febe0d051d2a4bf4c6f" + integrity sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.11.0" + 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" @@ -12864,6 +12967,15 @@ jackspeak@^2.3.6: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jackspeak@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" + integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jake@^10.8.5: version "10.8.7" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" @@ -13329,7 +13441,7 @@ jest@^29.5.0: import-local "^3.0.2" jest-cli "^29.7.0" -jiti@^1.20.0: +jiti@^1.20.0, jiti@^1.21.0: version "1.21.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== @@ -13772,11 +13884,16 @@ libnpmpublish@7.3.0: sigstore "^1.4.0" ssri "^10.0.1" -lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6: +lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6, lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -15167,6 +15284,15 @@ mute-stream@^1.0.0, mute-stream@~1.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -15205,6 +15331,11 @@ neo-async@^2.5.0, neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-themes@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.3.0.tgz#b4d2a866137a67d42564b07f3a3e720e2ff3871a" + integrity sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -16270,6 +16401,14 @@ path-scurry@^1.10.2, path-scurry@^1.6.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-scurry@^1.11.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -16380,7 +16519,7 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.4, pirates@^4.0.6: +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== @@ -16658,12 +16797,21 @@ postcss-import@^14.0.2, postcss-import@^14.1.0: read-cache "^1.0.0" resolve "^1.1.7" +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + postcss-initial@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== -postcss-js@^4.0.0: +postcss-js@^4.0.0, postcss-js@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== @@ -16686,6 +16834,14 @@ postcss-load-config@^3.1.4: lilconfig "^2.0.5" yaml "^1.10.2" +postcss-load-config@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + postcss-loader@^6.1.1: version "6.2.1" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" @@ -16807,6 +16963,13 @@ postcss-nested@6.0.0: dependencies: postcss-selector-parser "^6.0.10" +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + postcss-nesting@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" @@ -17014,6 +17177,14 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selecto cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.0.11: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-sort-media-queries@^4.2.1: version "4.4.1" resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz#04a5a78db3921eb78f28a1a781a2e68e65258128" @@ -17783,14 +17954,6 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" -"react-loadable@npm:@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== - dependencies: - "@types/react" "*" - prop-types "^15.6.2" - react-modal@3.11.2: version "3.11.2" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.11.2.tgz#bad911976d4add31aa30dba8a41d11e21c4ac8a4" @@ -18524,7 +18687,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4, resolve@^1.3.2, resolve@^1.9.0: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -19228,6 +19391,11 @@ socks@^2.6.2: ip-address "^9.0.5" smart-buffer "^4.2.0" +sonner@^1.4.41: + version "1.4.41" + resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.4.41.tgz#ff085ae4f4244713daf294959beaa3e90f842d2c" + integrity sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ== + sort-asc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/sort-asc/-/sort-asc-0.1.0.tgz#ab799df61fc73ea0956c79c4b531ed1e9e7727e9" @@ -19581,7 +19749,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -19599,15 +19767,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.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" @@ -19703,7 +19862,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -19731,13 +19890,6 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - 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" @@ -19865,6 +20017,19 @@ stylus@^0.59.0: sax "~1.2.4" source-map "^0.7.3" +sucrase@^3.32.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -19992,6 +20157,18 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" +tailwind-merge@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.3.0.tgz#27d2134fd00a1f77eca22bcaafdd67055917d286" + integrity sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA== + dependencies: + "@babel/runtime" "^7.24.1" + +tailwindcss-animate@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" + integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== + tailwindcss@3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250" @@ -20021,6 +20198,34 @@ tailwindcss@3.2.4: quick-lru "^5.1.1" resolve "^1.22.1" +tailwindcss@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519" + integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.0" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.0" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -20188,6 +20393,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + throttleit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" @@ -20339,6 +20558,11 @@ ts-dedent@^2.0.0: resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -21781,7 +22005,7 @@ worker-loader@3.0.8, worker-loader@^3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -21807,15 +22031,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -21988,6 +22203,11 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.3.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.2.tgz#7a2b30f2243a5fc299e1f14ca58d475ed4bc5362" + integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" From 2cc9158cd873f3186f8f04c7560cde94ee649f2f Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 23 May 2024 17:23:21 -0400 Subject: [PATCH 02/28] chore: Update tailwindcss version to 3.2.4 and button default variant in Button component --- platform/ui-next/package.json | 2 +- platform/ui-next/src/components/Button/Button.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/ui-next/package.json b/platform/ui-next/package.json index f58f4b4b8b0..88f36e7aa7a 100644 --- a/platform/ui-next/package.json +++ b/platform/ui-next/package.json @@ -22,7 +22,7 @@ "react": "^17.0.2", "sonner": "^1.4.41", "tailwind-merge": "^2.3.0", - "tailwindcss": "^3.4.3", + "tailwindcss": "3.2.4", "tailwindcss-animate": "^1.0.7" }, "keywords": [], diff --git a/platform/ui-next/src/components/Button/Button.tsx b/platform/ui-next/src/components/Button/Button.tsx index 55680ce776b..6a46b81d6cc 100644 --- a/platform/ui-next/src/components/Button/Button.tsx +++ b/platform/ui-next/src/components/Button/Button.tsx @@ -9,7 +9,7 @@ const buttonVariants = cva( { variants: { variant: { - default: 'bg-primary-light text-primary-foreground shadow hover:bg-primary/90', + default: 'bg-next-primary-light text-primary-foreground shadow hover:bg-primary/90', destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90', outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground', From d2aace17f06d35e4e9080f69d938247b69e1993b Mon Sep 17 00:00:00 2001 From: Alireza Date: Thu, 23 May 2024 17:58:18 -0400 Subject: [PATCH 03/28] chore: Remove Toaster component and update imports in index files --- platform/app/src/App.tsx | 3 +- .../src/components/Toaster/Toaster.tsx | 29 ---- .../ui-next/src/components/Toaster/index.ts | 1 - platform/ui-next/src/components/index.ts | 3 +- .../contextProviders/NotificationProvider.tsx | 85 +++++++++ .../ui-next/src/contextProviders/index.ts | 3 + platform/ui-next/src/index.ts | 12 +- platform/ui-next/tailwind.config.js | 12 +- yarn.lock | 163 +----------------- 9 files changed, 114 insertions(+), 197 deletions(-) delete mode 100644 platform/ui-next/src/components/Toaster/Toaster.tsx delete mode 100644 platform/ui-next/src/components/Toaster/index.ts create mode 100644 platform/ui-next/src/contextProviders/NotificationProvider.tsx create mode 100644 platform/ui-next/src/contextProviders/index.ts diff --git a/platform/app/src/App.tsx b/platform/app/src/App.tsx index fde953c8362..432b1bd0f04 100644 --- a/platform/app/src/App.tsx +++ b/platform/app/src/App.tsx @@ -24,7 +24,7 @@ import { UserAuthenticationProvider, ToolboxProvider, } from '@ohif/ui'; -import { ThemeWrapper as ThemeWrapperNext } from '@ohif/ui-next'; +import { ThemeWrapper as ThemeWrapperNext, NotificationProvider } from '@ohif/ui-next'; // Viewer Project // TODO: Should this influence study list? import { AppConfigProvider } from '@state'; @@ -91,6 +91,7 @@ function App({ config, defaultExtensions, defaultModes }) { [ViewportGridProvider, { service: viewportGridService }], [ViewportDialogProvider, { service: uiViewportDialogService }], [CineProvider, { service: cineService }], + [NotificationProvider, { service: uiNotificationService }], [SnackbarProvider, { service: uiNotificationService }], [DialogProvider, { service: uiDialogService }], [ModalProvider, { service: uiModalService, modal: Modal }], diff --git a/platform/ui-next/src/components/Toaster/Toaster.tsx b/platform/ui-next/src/components/Toaster/Toaster.tsx deleted file mode 100644 index 404c8c817d5..00000000000 --- a/platform/ui-next/src/components/Toaster/Toaster.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useTheme } from 'next-themes'; -import { Toaster as Sonner } from 'sonner'; - -type ToasterProps = React.ComponentProps; - -const Toaster = ({ ...props }: ToasterProps) => { - const { theme = 'system' } = useTheme(); - - return ( - - ); -}; - -export { Toaster }; diff --git a/platform/ui-next/src/components/Toaster/index.ts b/platform/ui-next/src/components/Toaster/index.ts deleted file mode 100644 index 94c2ba72ece..00000000000 --- a/platform/ui-next/src/components/Toaster/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Toaster } from './Toaster'; diff --git a/platform/ui-next/src/components/index.ts b/platform/ui-next/src/components/index.ts index 1b8fdce2cbb..f9e526dae26 100644 --- a/platform/ui-next/src/components/index.ts +++ b/platform/ui-next/src/components/index.ts @@ -1,5 +1,4 @@ -import { Toaster } from './Toaster'; import { Button } from './Button'; import { ThemeWrapper } from './ThemeWrapper'; -export { Toaster, Button, ThemeWrapper }; +export { Button, ThemeWrapper }; diff --git a/platform/ui-next/src/contextProviders/NotificationProvider.tsx b/platform/ui-next/src/contextProviders/NotificationProvider.tsx new file mode 100644 index 00000000000..6cabfa317ae --- /dev/null +++ b/platform/ui-next/src/contextProviders/NotificationProvider.tsx @@ -0,0 +1,85 @@ +import React, { useState, createContext, useContext, useCallback, useEffect } from 'react'; +import PropTypes from 'prop-types'; +import { Toaster, toast } from 'sonner'; + +const NotificationContext = createContext(null); + +export const useNotification = () => useContext(NotificationContext); + +const NotificationProvider = ({ children, service }) => { + const DEFAULT_OPTIONS = { + title: '', + message: '', + duration: 5000, + position: 'bottom-right', // Aligning to Sonner's positioning system + type: 'info', // info, success, error + }; + + const [notificationItems, setNotificationItems] = useState([]); + + const show = useCallback(options => { + const { title, message, duration, position, type } = { ...DEFAULT_OPTIONS, ...options }; + const id = toast[type](message, { + duration, + position, + render: () => ( +
+ {title} +

{message}

+
+ ), + }); + + setNotificationItems(state => [...state, { id, ...options }]); + }, []); + + const hide = useCallback(id => { + toast.dismiss(id); + setNotificationItems(state => state.filter(item => item.id !== id)); + }, []); + + const hideAll = useCallback(() => { + toast.dismiss(); + setNotificationItems([]); + }, []); + + useEffect(() => { + window.notification = { show, hide, hideAll }; + }, [show, hide, hideAll]); + + /** + * Sets the implementation of a notification service that can be used by extensions. + * + * @returns void + */ + useEffect(() => { + if (service) { + service.setServiceImplementation({ hide, show }); + } + }, [service, hide, show]); + + return ( + + + {children} + + ); +}; + +NotificationProvider.propTypes = { + children: PropTypes.node.isRequired, +}; + +export const withNotification = Component => { + return function WrappedComponent(props) { + const notificationContext = useNotification(); + return ( + + ); + }; +}; + +export default NotificationProvider; diff --git a/platform/ui-next/src/contextProviders/index.ts b/platform/ui-next/src/contextProviders/index.ts new file mode 100644 index 00000000000..57d3d90ecd8 --- /dev/null +++ b/platform/ui-next/src/contextProviders/index.ts @@ -0,0 +1,3 @@ +import NotificationProvider, { useNotification } from './NotificationProvider'; + +export { useNotification, NotificationProvider }; diff --git a/platform/ui-next/src/index.ts b/platform/ui-next/src/index.ts index 00192205772..e278dbd1e7f 100644 --- a/platform/ui-next/src/index.ts +++ b/platform/ui-next/src/index.ts @@ -1,3 +1,11 @@ -import { Toaster, Button, ThemeWrapper } from './components'; +import { Button, ThemeWrapper } from './components'; +import { useNotification, NotificationProvider } from './contextProviders'; -export { Toaster, Button, ThemeWrapper }; +export { + // components + Button, + ThemeWrapper, + // contextProviders + NotificationProvider, + useNotification, +}; diff --git a/platform/ui-next/tailwind.config.js b/platform/ui-next/tailwind.config.js index fa55850ca4d..75094fd88b9 100644 --- a/platform/ui-next/tailwind.config.js +++ b/platform/ui-next/tailwind.config.js @@ -7,14 +7,14 @@ module.exports = { './app/**/*.{ts,tsx}', './src/**/*.{ts,tsx}', ], - prefix: 'next-', + prefix: '', theme: { - colors: { - primary: { - light: '#ffffff', - }, - }, extend: { + colors: { + 'next-primary': { + light: '#ffffff', + }, + }, keyframes: { 'accordion-down': { from: { height: '0' }, diff --git a/yarn.lock b/yarn.lock index 6126fa8756e..42e67725d1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -165,11 +165,6 @@ "@algolia/logger-common" "4.23.3" "@algolia/requester-common" "4.23.3" -"@alloc/quick-lru@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" - integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== - "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -2804,7 +2799,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -6236,11 +6231,6 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -7828,7 +7818,7 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@8.3.0, commander@9.2.0, commander@^2.20.0, commander@^4.0.0, commander@^5.1.0, commander@^6.2.1, commander@^7.0.0, commander@^7.2.0, commander@^8.3.0: +commander@8.3.0, commander@9.2.0, commander@^2.20.0, commander@^5.1.0, commander@^6.2.1, commander@^7.0.0, commander@^7.2.0, commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -11370,17 +11360,6 @@ glob@^10.0.0, glob@^10.2.2: minipass "^7.0.4" path-scurry "^1.10.2" -glob@^10.3.10: - version "10.3.16" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.16.tgz#bf6679d5d51279c8cfae4febe0d051d2a4bf4c6f" - integrity sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.1" - minipass "^7.0.4" - path-scurry "^1.11.0" - 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" @@ -12967,15 +12946,6 @@ jackspeak@^2.3.6: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jackspeak@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" - integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jake@^10.8.5: version "10.8.7" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" @@ -13441,7 +13411,7 @@ jest@^29.5.0: import-local "^3.0.2" jest-cli "^29.7.0" -jiti@^1.20.0, jiti@^1.21.0: +jiti@^1.20.0: version "1.21.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== @@ -13884,16 +13854,11 @@ libnpmpublish@7.3.0: sigstore "^1.4.0" ssri "^10.0.1" -lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6, lilconfig@^2.1.0: +lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.0.6: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lilconfig@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" - integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== - lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -15284,15 +15249,6 @@ mute-stream@^1.0.0, mute-stream@~1.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -16401,14 +16357,6 @@ path-scurry@^1.10.2, path-scurry@^1.6.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-scurry@^1.11.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -16519,7 +16467,7 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== -pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: +pirates@^4.0.4, pirates@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== @@ -16797,21 +16745,12 @@ postcss-import@^14.0.2, postcss-import@^14.1.0: read-cache "^1.0.0" resolve "^1.1.7" -postcss-import@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" - integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - postcss-initial@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== -postcss-js@^4.0.0, postcss-js@^4.0.1: +postcss-js@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== @@ -16834,14 +16773,6 @@ postcss-load-config@^3.1.4: lilconfig "^2.0.5" yaml "^1.10.2" -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== - dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" - postcss-loader@^6.1.1: version "6.2.1" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" @@ -16963,13 +16894,6 @@ postcss-nested@6.0.0: dependencies: postcss-selector-parser "^6.0.10" -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-nesting@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" @@ -17177,14 +17101,6 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selecto cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.11: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" - integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - postcss-sort-media-queries@^4.2.1: version "4.4.1" resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz#04a5a78db3921eb78f28a1a781a2e68e65258128" @@ -18687,7 +18603,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.3.2, resolve@^1.9.0: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -20017,19 +19933,6 @@ stylus@^0.59.0: sax "~1.2.4" source-map "^0.7.3" -sucrase@^3.32.0: - version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -20198,34 +20101,6 @@ tailwindcss@3.2.4: quick-lru "^5.1.1" resolve "^1.22.1" -tailwindcss@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519" - integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== - dependencies: - "@alloc/quick-lru" "^5.2.0" - arg "^5.0.2" - chokidar "^3.5.3" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.3.0" - glob-parent "^6.0.2" - is-glob "^4.0.3" - jiti "^1.21.0" - lilconfig "^2.1.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" - postcss-import "^15.1.0" - postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" - tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -20393,20 +20268,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - throttleit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" @@ -20558,11 +20419,6 @@ ts-dedent@^2.0.0: resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -22203,11 +22059,6 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.3.4: - version "2.4.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.2.tgz#7a2b30f2243a5fc299e1f14ca58d475ed4bc5362" - integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA== - yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" From dd472b2745b17756a803e448f19dcdb4c3f6d81e Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 24 May 2024 11:54:30 -0400 Subject: [PATCH 04/28] chore: Update Button component imports and tailwind.css --- platform/ui-next/src/components/index.ts | 4 +- platform/ui-next/src/index.ts | 3 +- platform/ui-next/src/tailwind.css | 80 ++++++++++++++++++++++-- yarn.lock | 6 +- 4 files changed, 82 insertions(+), 11 deletions(-) diff --git a/platform/ui-next/src/components/index.ts b/platform/ui-next/src/components/index.ts index f9e526dae26..d502dd72dbb 100644 --- a/platform/ui-next/src/components/index.ts +++ b/platform/ui-next/src/components/index.ts @@ -1,4 +1,4 @@ -import { Button } from './Button'; +import { Button, buttonVariants } from './Button'; import { ThemeWrapper } from './ThemeWrapper'; -export { Button, ThemeWrapper }; +export { Button, buttonVariants, ThemeWrapper }; diff --git a/platform/ui-next/src/index.ts b/platform/ui-next/src/index.ts index e278dbd1e7f..ac486d0c504 100644 --- a/platform/ui-next/src/index.ts +++ b/platform/ui-next/src/index.ts @@ -1,9 +1,10 @@ -import { Button, ThemeWrapper } from './components'; +import { Button, buttonVariants, ThemeWrapper } from './components'; import { useNotification, NotificationProvider } from './contextProviders'; export { // components Button, + buttonVariants, ThemeWrapper, // contextProviders NotificationProvider, diff --git a/platform/ui-next/src/tailwind.css b/platform/ui-next/src/tailwind.css index acb4cc9b8a7..b0e6fff5960 100644 --- a/platform/ui-next/src/tailwind.css +++ b/platform/ui-next/src/tailwind.css @@ -1,6 +1,76 @@ -/* IMPORT CUSTOM FONT */ -@import url('https://fonts.googleapis.com/css?family=Inter:100,300,400,500,700&display=swap'); - @tailwind base; -@tailwind components; -@tailwind utilities; + @tailwind components; + @tailwind utilities; + + @layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; + + --radius: 0.5rem; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; + + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; + + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; + } + } + + @layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } + } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 42e67725d1f..ce4646ab2c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6866,9 +6866,9 @@ bare-os@^2.1.0: integrity sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg== bare-path@^2.0.0, bare-path@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.2.tgz#7a0940d34ebe65f7e179fa61ed8d49d9dc151d67" - integrity sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig== + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== dependencies: bare-os "^2.1.0" From 9d8267fec0054e2abaf54186ad3e22de6956035b Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 24 May 2024 11:54:42 -0400 Subject: [PATCH 05/28] chore: Update Button component imports and button variants in Button component --- platform/ui-next/src/components/Button/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/ui-next/src/components/Button/index.ts b/platform/ui-next/src/components/Button/index.ts index fe9c53c5118..437eddc1f87 100644 --- a/platform/ui-next/src/components/Button/index.ts +++ b/platform/ui-next/src/components/Button/index.ts @@ -1 +1 @@ -export { Button } from './Button'; +export { Button , buttonVariants} from "./Button" From f2cf1a84d0bb332231c746c6238190e5a3ae0c54 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 24 May 2024 13:02:07 -0400 Subject: [PATCH 06/28] chore: Update Button component imports and button variants in Button component --- .../PanelStudyBrowserTracking.tsx | 5 + platform/ui-next/components.json | 2 +- platform/ui-next/package.json | 4 +- .../ui-next/src/components/Button/Button.tsx | 2 +- .../src/components/Command/Command.tsx | 150 ++++++++++++++++++ .../ui-next/src/components/Command/index.ts | 3 + .../ui-next/src/components/Dialog/Dialog.tsx | 105 ++++++++++++ .../ui-next/src/components/Dialog/index.ts | 3 + platform/ui-next/src/components/index.ts | 4 +- platform/ui-next/src/index.ts | 2 +- platform/ui-next/src/lib/utils.ts | 2 +- platform/ui-next/src/tailwind.css | 101 ++++++------ platform/ui-next/tailwind.config.js | 39 ++++- platform/ui-next/tsconfig.json | 2 +- yarn.lock | 65 +++++++- 15 files changed, 424 insertions(+), 65 deletions(-) create mode 100644 platform/ui-next/src/components/Command/Command.tsx create mode 100644 platform/ui-next/src/components/Command/index.ts create mode 100644 platform/ui-next/src/components/Dialog/Dialog.tsx create mode 100644 platform/ui-next/src/components/Dialog/index.ts diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx index d6f6e084488..3018bb9b41f 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx @@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import { utils } from '@ohif/core'; import { StudyBrowser, useImageViewer, useViewportGrid, Dialog, ButtonEnums } from '@ohif/ui'; +import {Button, buttonVariants} from '@ohif/ui-next'; import { useTrackedMeasurements } from '../../getContextModule'; const { formatDate } = utils; @@ -390,6 +391,10 @@ function PanelStudyBrowserTracking({ }); }; + return ( + + ) + return ( , + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Command.displayName = CommandPrimitive.displayName; + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ); +}; + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)); + +CommandInput.displayName = CommandPrimitive.Input.displayName; + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandList.displayName = CommandPrimitive.List.displayName; + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)); + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandGroup.displayName = CommandPrimitive.Group.displayName; + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandItem.displayName = CommandPrimitive.Item.displayName; + +const CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return ( + + ); +}; +CommandShortcut.displayName = 'CommandShortcut'; + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +}; diff --git a/platform/ui-next/src/components/Command/index.ts b/platform/ui-next/src/components/Command/index.ts new file mode 100644 index 00000000000..2f7ec14d2e2 --- /dev/null +++ b/platform/ui-next/src/components/Command/index.ts @@ -0,0 +1,3 @@ +import * as CommandComponents from './Command'; + +export default CommandComponents; diff --git a/platform/ui-next/src/components/Dialog/Dialog.tsx b/platform/ui-next/src/components/Dialog/Dialog.tsx new file mode 100644 index 00000000000..0b67911aa16 --- /dev/null +++ b/platform/ui-next/src/components/Dialog/Dialog.tsx @@ -0,0 +1,105 @@ +import * as React from 'react'; +import * as DialogPrimitive from '@radix-ui/react-dialog'; +import { Cross2Icon } from '@radix-ui/react-icons'; + +import { cn } from '../../lib/utils'; + +const Dialog = DialogPrimitive.Root; + +const DialogTrigger = DialogPrimitive.Trigger; + +const DialogPortal = DialogPrimitive.Portal; + +const DialogClose = DialogPrimitive.Close; + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)); +DialogContent.displayName = DialogPrimitive.Content.displayName; + +const DialogHeader = ({ className, ...props }: React.HTMLAttributes) => ( +
+); +DialogHeader.displayName = 'DialogHeader'; + +const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
+); +DialogFooter.displayName = 'DialogFooter'; + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogTrigger, + DialogClose, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +}; diff --git a/platform/ui-next/src/components/Dialog/index.ts b/platform/ui-next/src/components/Dialog/index.ts new file mode 100644 index 00000000000..92f1d6d428b --- /dev/null +++ b/platform/ui-next/src/components/Dialog/index.ts @@ -0,0 +1,3 @@ +import * as DialogComponents from './Dialog'; + +export default DialogComponents; diff --git a/platform/ui-next/src/components/index.ts b/platform/ui-next/src/components/index.ts index d502dd72dbb..9f14e0c249e 100644 --- a/platform/ui-next/src/components/index.ts +++ b/platform/ui-next/src/components/index.ts @@ -1,4 +1,6 @@ import { Button, buttonVariants } from './Button'; import { ThemeWrapper } from './ThemeWrapper'; +import Command from './Command'; +import Dialog from './Dialog'; -export { Button, buttonVariants, ThemeWrapper }; +export { Button, buttonVariants, ThemeWrapper, Command, Dialog }; diff --git a/platform/ui-next/src/index.ts b/platform/ui-next/src/index.ts index ac486d0c504..8502ec84227 100644 --- a/platform/ui-next/src/index.ts +++ b/platform/ui-next/src/index.ts @@ -1,4 +1,4 @@ -import { Button, buttonVariants, ThemeWrapper } from './components'; +import { Button, buttonVariants, ThemeWrapper } from './components'; import { useNotification, NotificationProvider } from './contextProviders'; export { diff --git a/platform/ui-next/src/lib/utils.ts b/platform/ui-next/src/lib/utils.ts index 2819a830d24..9ad0df4269e 100644 --- a/platform/ui-next/src/lib/utils.ts +++ b/platform/ui-next/src/lib/utils.ts @@ -1,4 +1,4 @@ -import { clsx, type ClassValue } from 'clsx'; +import { type ClassValue, clsx } from 'clsx'; import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { diff --git a/platform/ui-next/src/tailwind.css b/platform/ui-next/src/tailwind.css index b0e6fff5960..66b78c939a5 100644 --- a/platform/ui-next/src/tailwind.css +++ b/platform/ui-next/src/tailwind.css @@ -1,76 +1,67 @@ @tailwind base; - @tailwind components; - @tailwind utilities; +@tailwind components; +@tailwind utilities; - @layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 222.2 84% 4.9%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --ring: 222.2 84% 4.9%; - --radius: 0.5rem; - } + --radius: 0.5rem; + } - .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; + --card: 222.2 84% 4.9%; + --card-foreground: 210 40% 98%; - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 11.2%; + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 11.2%; - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 212.7 26.8% 83.9%; - } + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --ring: 212.7 26.8% 83.9%; } - - @layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } - } \ No newline at end of file +} diff --git a/platform/ui-next/tailwind.config.js b/platform/ui-next/tailwind.config.js index 75094fd88b9..bf9812f1ed2 100644 --- a/platform/ui-next/tailwind.config.js +++ b/platform/ui-next/tailwind.config.js @@ -11,9 +11,44 @@ module.exports = { theme: { extend: { colors: { - 'next-primary': { - light: '#ffffff', + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))', + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))', + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))', + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', + }, + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)', }, keyframes: { 'accordion-down': { diff --git a/platform/ui-next/tsconfig.json b/platform/ui-next/tsconfig.json index 640c1fb0f40..e63e92ef486 100644 --- a/platform/ui-next/tsconfig.json +++ b/platform/ui-next/tsconfig.json @@ -6,6 +6,6 @@ "@ui/*": ["./src/*"] } }, - "include": ["src",], + "include": ["src"], "exclude": ["node_modules"] } diff --git a/yarn.lock b/yarn.lock index ce4646ab2c5..29e71ada5f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2295,6 +2295,18 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== +"@emotion/is-prop-valid@^0.8.2": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + "@emotion/memoize@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" @@ -3504,7 +3516,7 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-dialog@^1.0.5": +"@radix-ui/react-dialog@1.0.5", "@radix-ui/react-dialog@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz#71657b1b116de6c7a0b03242d7d43e01062c7300" integrity sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q== @@ -7697,6 +7709,14 @@ cmd-shim@6.0.1: resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== +cmdk@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cmdk/-/cmdk-1.0.0.tgz#0a095fdafca3dfabed82d1db78a6262fb163ded9" + integrity sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q== + dependencies: + "@radix-ui/react-dialog" "1.0.5" + "@radix-ui/react-primitive" "1.0.3" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -10992,6 +11012,26 @@ fraction.js@^4.3.7: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== +framer-motion@6.2.4: + version "6.2.4" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.2.4.tgz#3d9c61be3fb8381a770efccdb56cc421de662979" + integrity sha512-1UfnSG4c4CefKft6QMYGx8AWt3TtaFoR/Ax4dkuDDD5BDDeIuUm7gesmJrF8GzxeX/i6fMm8+MEdPngUyPVdLA== + dependencies: + framesync "6.0.1" + hey-listen "^1.0.8" + popmotion "11.0.3" + style-value-types "5.0.0" + tslib "^2.1.0" + optionalDependencies: + "@emotion/is-prop-valid" "^0.8.2" + +framesync@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20" + integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA== + dependencies: + tslib "^2.1.0" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -11752,6 +11792,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hey-listen@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" + integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== + history@^4.9.0: version "4.10.1" resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" @@ -16560,6 +16605,16 @@ polished@^4.2.2: dependencies: "@babel/runtime" "^7.17.8" +popmotion@11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9" + integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA== + dependencies: + framesync "6.0.1" + hey-listen "^1.0.8" + style-value-types "5.0.0" + tslib "^2.1.0" + portfinder@^1.0.28: version "1.0.32" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" @@ -19901,6 +19956,14 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" +style-value-types@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad" + integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA== + dependencies: + hey-listen "^1.0.8" + tslib "^2.1.0" + stylehacks@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" From 9c87fa544c9dec7ba5ed27c44978d83929ede2af Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 24 May 2024 13:23:54 -0400 Subject: [PATCH 07/28] chore: Update React version to "^18.3.1" in package.json files --- extensions/cornerstone-dicom-rt/package.json | 4 +- extensions/cornerstone-dicom-seg/package.json | 4 +- extensions/cornerstone-dicom-sr/package.json | 2 +- .../cornerstone-dynamic-volume/package.json | 2 +- extensions/cornerstone/package.json | 4 +- extensions/default/package.json | 4 +- extensions/dicom-microscopy/package.json | 4 +- extensions/dicom-pdf/package.json | 2 +- extensions/dicom-video/package.json | 2 +- extensions/measurement-tracking/package.json | 4 +- extensions/test-extension/package.json | 2 +- extensions/tmtv/package.json | 2 +- package.json | 4 +- platform/app/package.json | 6 +-- platform/app/src/index.js | 9 ++-- .../cli/templates/extension/dependencies.json | 4 +- platform/docs/package.json | 4 +- platform/i18n/package.json | 8 ++-- platform/ui-next/package.json | 2 +- platform/ui/package.json | 8 ++-- .../src/components/Tooltip/PortalTooltip.tsx | 9 ++-- yarn.lock | 43 ++++++++----------- 22 files changed, 63 insertions(+), 70 deletions(-) diff --git a/extensions/cornerstone-dicom-rt/package.json b/extensions/cornerstone-dicom-rt/package.json index dad894abdcc..520b2254a8f 100644 --- a/extensions/cornerstone-dicom-rt/package.json +++ b/extensions/cornerstone-dicom-rt/package.json @@ -38,8 +38,8 @@ "@ohif/extension-default": "3.9.0-beta.14", "@ohif/i18n": "3.9.0-beta.14", "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-i18next": "^10.11.0", "react-router": "^6.3.0", "react-router-dom": "^6.3.0" diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index 6d469a0208e..4408db5a17b 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -38,8 +38,8 @@ "@ohif/extension-default": "3.9.0-beta.14", "@ohif/i18n": "3.9.0-beta.14", "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-i18next": "^12.2.2", "react-router": "^6.8.1", "react-router-dom": "^6.8.1" diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index fd114521b0d..ee5f23439ca 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -42,7 +42,7 @@ "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", - "react": "^17.0.2" + "react": "^18.3.1" }, "dependencies": { "@babel/runtime": "^7.20.13", diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 904f835b7e2..fa90ef7edae 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -38,7 +38,7 @@ "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", - "react": "^17.0.2" + "react": "^18.3.1" }, "dependencies": { "@babel/runtime": "^7.20.13", diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 292f2ecce82..e9e25ecd59d 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -46,8 +46,8 @@ "dicom-parser": "^1.8.21", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-resize-detector": "^6.7.6" }, "devDependencies": { diff --git a/extensions/default/package.json b/extensions/default/package.json index b6f70f8d552..176774d3f1a 100644 --- a/extensions/default/package.json +++ b/extensions/default/package.json @@ -37,8 +37,8 @@ "dcmjs": "^0.29.12", "dicomweb-client": "^0.10.4", "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-i18next": "^12.2.2", "react-window": "^1.8.9", "webpack": "^5.50.0", diff --git a/extensions/dicom-microscopy/package.json b/extensions/dicom-microscopy/package.json index 1aac4fd65ed..3065c471b51 100644 --- a/extensions/dicom-microscopy/package.json +++ b/extensions/dicom-microscopy/package.json @@ -35,8 +35,8 @@ "@ohif/i18n": "3.9.0-beta.14", "@ohif/ui": "3.9.0-beta.14", "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-i18next": "^10.11.0", "react-router": "^6.8.1", "react-router-dom": "^6.8.1" diff --git a/extensions/dicom-pdf/package.json b/extensions/dicom-pdf/package.json index ebce1cd597d..643d43918ae 100644 --- a/extensions/dicom-pdf/package.json +++ b/extensions/dicom-pdf/package.json @@ -36,7 +36,7 @@ "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", - "react": "^17.0.2" + "react": "^18.3.1" }, "dependencies": { "@babel/runtime": "^7.20.13", diff --git a/extensions/dicom-video/package.json b/extensions/dicom-video/package.json index 993445e695e..d4a60f29819 100644 --- a/extensions/dicom-video/package.json +++ b/extensions/dicom-video/package.json @@ -36,7 +36,7 @@ "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", - "react": "^17.0.2" + "react": "^18.3.1" }, "dependencies": { "@babel/runtime": "^7.20.13", diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 2260065008d..64f04fb8b8e 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -41,8 +41,8 @@ "dcmjs": "^0.29.12", "lodash.debounce": "^4.17.21", "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "webpack": "^5.50.0", "webpack-merge": "^5.7.3" }, diff --git a/extensions/test-extension/package.json b/extensions/test-extension/package.json index 6ad85f16d76..47ce7e5663d 100644 --- a/extensions/test-extension/package.json +++ b/extensions/test-extension/package.json @@ -36,7 +36,7 @@ "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", - "react": "^17.0.2" + "react": "^18.3.1" }, "dependencies": { "@babel/runtime": "^7.20.13", diff --git a/extensions/tmtv/package.json b/extensions/tmtv/package.json index 93235f2ce7e..bb2ce73c3ee 100644 --- a/extensions/tmtv/package.json +++ b/extensions/tmtv/package.json @@ -36,7 +36,7 @@ "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", - "react": "^17.0.2" + "react": "^18.3.1" }, "dependencies": { "@babel/runtime": "^7.20.13", diff --git a/package.json b/package.json index ea80151568b..0489c3de1d6 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,8 @@ "core-js": "^3.2.1" }, "peerDependencies": { - "react": "17.0.2", - "react-dom": "17.0.2" + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "devDependencies": { "@babel/core": "^7.23.2", diff --git a/platform/app/package.json b/platform/app/package.json index 107c17406e6..e488f46cdaa 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -72,7 +72,7 @@ "@ohif/mode-test": "3.9.0-beta.14", "@ohif/ui": "3.9.0-beta.14", "@ohif/ui-next": "3.9.0-beta.14", - "@types/react": "^17.0.38", + "@types/react": "^18.3.3", "classnames": "^2.3.2", "core-js": "^3.16.1", "cornerstone-math": "^0.1.9", @@ -88,8 +88,8 @@ "oidc-client": "1.11.5", "prop-types": "^15.7.2", "query-string": "^6.12.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-dropzone": "^10.1.7", "react-i18next": "^12.2.2", "react-resize-detector": "^9.1.0", diff --git a/platform/app/src/index.js b/platform/app/src/index.js index 7b8d63324da..ba1beb05935 100644 --- a/platform/app/src/index.js +++ b/platform/app/src/index.js @@ -2,6 +2,7 @@ * Entry point for development and production PWA builds. */ import 'regenerator-runtime/runtime'; +import { createRoot } from 'react-dom/client'; import App from './App'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -35,10 +36,10 @@ loadDynamicConfig(window.config).then(config_json => { defaultModes, }; - /** Create App */ - const app = React.createElement(App, appProps, null); - /** Render */ - ReactDOM.render(app, document.getElementById('root')); + const container = document.getElementById('root'); + + const root = createRoot(container); + root.render(React.createElement(App, appProps)); }); export { history }; diff --git a/platform/cli/templates/extension/dependencies.json b/platform/cli/templates/extension/dependencies.json index 661ccf7d770..2fe29b8ab13 100644 --- a/platform/cli/templates/extension/dependencies.json +++ b/platform/cli/templates/extension/dependencies.json @@ -20,8 +20,8 @@ "@ohif/extension-cornerstone": "^3.0.0", "@ohif/i18n": "^1.0.0", "prop-types": "^15.6.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-i18next": "^12.2.2", "react-router": "^6.8.1", "react-router-dom": "^6.8.1", diff --git a/platform/docs/package.json b/platform/docs/package.json index ad65e8de37f..bf9fa3e361c 100644 --- a/platform/docs/package.json +++ b/platform/docs/package.json @@ -47,8 +47,8 @@ "url-loader": "^4.1.1" }, "peerDependencies": { - "react": "^17.0.2", - "react-dom": "^17.0.2" + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "browserslist": { "production": [ diff --git a/platform/i18n/package.json b/platform/i18n/package.json index 34b3ec23d6e..5380d6e4e69 100644 --- a/platform/i18n/package.json +++ b/platform/i18n/package.json @@ -33,8 +33,8 @@ "peerDependencies": { "i18next": "^17.0.3", "i18next-browser-languagedetector": "^3.0.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-i18next": "^12.2.2" }, "dependencies": { @@ -46,8 +46,8 @@ "devDependencies": { "i18next": "^17.0.3", "i18next-browser-languagedetector": "^3.0.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-i18next": "^12.2.2", "webpack-merge": "^5.7.3" } diff --git a/platform/ui-next/package.json b/platform/ui-next/package.json index 83dfc92f9fd..23f18d1c982 100644 --- a/platform/ui-next/package.json +++ b/platform/ui-next/package.json @@ -21,7 +21,7 @@ "cmdk": "^1.0.0", "framer-motion": "6.2.4", "next-themes": "^0.3.0", - "react": "^17.0.2", + "react": "^18.3.1", "sonner": "^1.4.41", "tailwind-merge": "^2.3.0", "tailwindcss": "3.2.4", diff --git a/platform/ui/package.json b/platform/ui/package.json index 567e70ba007..d4875662f82 100644 --- a/platform/ui/package.json +++ b/platform/ui/package.json @@ -29,8 +29,8 @@ "build-storybook": "storybook build" }, "peerDependencies": { - "react": "17.0.2", - "react-dom": "17.0.2" + "react": "^18.3.1", + "react-dom": "^18.3.1" }, "dependencies": { "@testing-library/react-hooks": "^3.2.1", @@ -46,11 +46,11 @@ "lodash.debounce": "4.0.8", "moment": "2.29.4", "mousetrap": "^1.6.5", - "react": "^17.0.2", + "react": "^18.3.1", "react-dates": "^21.8.0", "react-dnd": "14.0.2", "react-dnd-html5-backend": "14.0.0", - "react-dom": "^17.0.2", + "react-dom": "^18.3.1", "react-draggable": "4.4.3", "react-error-boundary": "^3.1.3", "react-modal": "3.11.2", diff --git a/platform/ui/src/components/Tooltip/PortalTooltip.tsx b/platform/ui/src/components/Tooltip/PortalTooltip.tsx index cf20549721a..225bf2c360e 100644 --- a/platform/ui/src/components/Tooltip/PortalTooltip.tsx +++ b/platform/ui/src/components/Tooltip/PortalTooltip.tsx @@ -39,8 +39,8 @@ export default class PortalTooltip extends React.Component { if (!portalNodes[this.props.group]) { this.createPortal(); } - let { parent, ...other } = props; - let parentEl = typeof parent === 'string' ? document.querySelector(parent) : parent; + const { parent, ...other } = props; + const parentEl = typeof parent === 'string' ? document.querySelector(parent) : parent; ReactDOM.render( Date: Fri, 24 May 2024 14:10:33 -0400 Subject: [PATCH 08/28] move away from deafult props --- .../viewports/OHIFCornerstoneRTViewport.tsx | 5 -- .../viewports/OHIFCornerstoneSEGViewport.tsx | 5 -- .../viewports/OHIFCornerstoneSRViewport.tsx | 5 -- .../src/Viewport/OHIFCornerstoneViewport.tsx | 6 +- .../ViewportImageSliceLoadingIndicator.tsx | 6 -- .../Overlays/ViewportOrientationMarkers.tsx | 10 --- .../src/Toolbar/LegacyLayoutSelector.tsx | 14 +-- .../src/Toolbar/ToolbarLayoutSelector.tsx | 11 +-- .../ToolbarSplitButtonWithServices.tsx | 6 -- .../ViewerLayout/ToolbarButtonNestedMenu.tsx | 7 +- .../viewports/TrackedCornerstoneViewport.tsx | 5 -- platform/app/src/App.tsx | 46 +++++----- platform/app/src/components/ViewportGrid.tsx | 6 +- .../ActionButtons/ActionButtons.tsx | 6 +- platform/ui/src/components/Button/Button.tsx | 12 +-- .../src/components/CinePlayer/CinePlayer.tsx | 31 ++----- .../ui/src/components/DateRange/DateRange.tsx | 8 +- platform/ui/src/components/Dialog/Dialog.tsx | 16 ++-- platform/ui/src/components/Dialog/Footer.tsx | 7 +- platform/ui/src/components/Dialog/Header.tsx | 6 +- .../ui/src/components/Dropdown/Dropdown.tsx | 11 +-- .../components/EmptyStudies/EmptyStudies.tsx | 6 +- .../ErrorBoundary/ErrorBoundary.tsx | 26 ++---- .../ExpandableToolbarButton.tsx | 23 ++--- platform/ui/src/components/Header/Header.tsx | 9 +- .../components/HotkeyField/HotkeyField.tsx | 6 +- .../HotkeysPreferences/HotkeysPreferences.tsx | 11 +-- platform/ui/src/components/Icon/getIcon.js | 1 - .../src/components/IconButton/IconButton.tsx | 27 ++---- .../ImageScrollbar/ImageScrollbar.tsx | 8 +- .../InputDateRange/InputDateRange.tsx | 11 +-- .../InputDoubleRange/InputDoubleRange.tsx | 42 +++------ .../InputLabelWrapper/InputLabelWrapper.tsx | 6 +- .../InputMultiSelect/InputMultiSelect.tsx | 12 +-- .../ui/src/components/InputText/InputText.tsx | 17 ++-- .../InvestigationalUseDialog.tsx | 14 ++- .../components/LayoutPreset/LayoutPreset.tsx | 6 +- .../LayoutSelector/LayoutSelector.tsx | 8 +- .../components/LegacyButton/LegacyButton.tsx | 11 +-- .../LegacyCinePlayer/LegacyCinePlayer.tsx | 27 ++---- .../LegacySidePanel/LegacySidePanel.tsx | 4 - .../LegacySplitButton/LegacySplitButton.tsx | 14 +-- .../LegacyViewportActionBar.tsx | 20 ++--- .../ui/src/components/LineChart/LineChart.tsx | 18 ++-- .../ui/src/components/ListMenu/ListMenu.tsx | 8 +- .../MeasurementTable/MeasurementItem.tsx | 6 +- .../MeasurementTable/MeasurementTable.tsx | 12 +-- platform/ui/src/components/Modal/Modal.tsx | 12 +-- .../components/Notification/Notification.tsx | 15 ++-- .../components/PanelSection/PanelSection.tsx | 2 - .../SegmentationDropDownRow.tsx | 7 +- .../SegmentationGroupSegment.tsx | 6 +- .../SegmentationGroupTable.tsx | 88 ++++++------------- .../SegmentationGroupTableExpanded.tsx | 88 ++++++------------- .../SegmentationItem.tsx | 9 +- .../SegmentationTable/SegmentationItem.tsx | 9 +- .../SegmentationTable/SegmentationTable.tsx | 26 ++---- platform/ui/src/components/Select/Select.tsx | 44 +++------- .../ui/src/components/SidePanel/SidePanel.tsx | 7 +- .../components/SplitButton/SplitButton.tsx | 12 +-- .../components/StudyBrowser/StudyBrowser.tsx | 22 ++--- platform/ui/src/components/Table/Table.tsx | 8 +- .../ui/src/components/TableBody/TableBody.tsx | 7 +- .../ui/src/components/TableCell/TableCell.tsx | 18 ++-- .../ui/src/components/TableHead/TableHead.tsx | 7 +- .../ui/src/components/TableRow/TableRow.tsx | 8 +- .../ui/src/components/Thumbnail/Thumbnail.tsx | 6 +- .../ToolbarButton/ToolbarButton.tsx | 6 +- .../ui/src/components/Tooltip/Tooltip.tsx | 18 ++-- .../TooltipClipboard/TooltipClipboard.tsx | 6 +- .../UserPreferences/UserPreferences.tsx | 25 +----- .../components/ViewportPane/ViewportPane.tsx | 8 +- .../components/WindowLevel/WindowLevel.tsx | 26 ++---- .../WindowLevel/WindowLevelHistogram.tsx | 15 +--- .../src/contextProviders/DialogProvider.tsx | 6 +- .../src/contextProviders/ModalComponent.tsx | 24 ++--- .../ui/src/contextProviders/ModalProvider.tsx | 6 +- .../src/contextProviders/SnackbarProvider.tsx | 6 +- tsconfig.json | 2 +- 79 files changed, 301 insertions(+), 830 deletions(-) diff --git a/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx b/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx index b8e6aa1a59b..a3bf48e8eca 100644 --- a/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx +++ b/extensions/cornerstone-dicom-rt/src/viewports/OHIFCornerstoneRTViewport.tsx @@ -358,11 +358,6 @@ OHIFCornerstoneRTViewport.propTypes = { viewportId: PropTypes.string.isRequired, dataSource: PropTypes.object, children: PropTypes.node, - customProps: PropTypes.object, -}; - -OHIFCornerstoneRTViewport.defaultProps = { - customProps: {}, }; function _getReferencedDisplaySetMetadata(referencedDisplaySet) { diff --git a/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx b/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx index da2cc18a753..c78017edcb0 100644 --- a/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx +++ b/extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx @@ -367,11 +367,6 @@ OHIFCornerstoneSEGViewport.propTypes = { viewportId: PropTypes.string.isRequired, dataSource: PropTypes.object, children: PropTypes.node, - customProps: PropTypes.object, -}; - -OHIFCornerstoneSEGViewport.defaultProps = { - customProps: {}, }; function _getReferencedDisplaySetMetadata(referencedDisplaySet, segDisplaySet) { diff --git a/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx b/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx index b59853c7ef8..b4d44f4a450 100644 --- a/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx +++ b/extensions/cornerstone-dicom-sr/src/viewports/OHIFCornerstoneSRViewport.tsx @@ -367,16 +367,11 @@ OHIFCornerstoneSRViewport.propTypes = { dataSource: PropTypes.object, children: PropTypes.node, viewportLabel: PropTypes.string, - customProps: PropTypes.object, viewportOptions: PropTypes.object, servicesManager: PropTypes.object.isRequired, extensionManager: PropTypes.instanceOf(ExtensionManager).isRequired, }; -OHIFCornerstoneSRViewport.defaultProps = { - customProps: {}, -}; - async function _getViewportReferencedDisplaySetData( displaySet, measurementSelected, diff --git a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx index e5ad2c3ef70..e2c05999ad7 100644 --- a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx +++ b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx @@ -109,7 +109,7 @@ const OHIFCornerstoneViewport = React.memo((props: withAppTypes) => { onElementEnabled, // eslint-disable-next-line react/prop-types onElementDisabled, - isJumpToMeasurementDisabled, + isJumpToMeasurementDisabled = false, // Note: you SHOULD NOT use the initialImageIdOrIndex for manipulation // of the imageData in the OHIFCornerstoneViewport. This prop is used // to set the initial state of the viewport's first image to render @@ -683,10 +683,6 @@ function _rehydrateSynchronizers( // Component displayName OHIFCornerstoneViewport.displayName = 'OHIFCornerstoneViewport'; -OHIFCornerstoneViewport.defaultProps = { - isJumpToMeasurementDisabled: false, -}; - OHIFCornerstoneViewport.propTypes = { displaySets: PropTypes.array.isRequired, dataSource: PropTypes.object.isRequired, diff --git a/extensions/cornerstone/src/Viewport/Overlays/ViewportImageSliceLoadingIndicator.tsx b/extensions/cornerstone/src/Viewport/Overlays/ViewportImageSliceLoadingIndicator.tsx index 70e03e534cb..429fea2cb63 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/ViewportImageSliceLoadingIndicator.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/ViewportImageSliceLoadingIndicator.tsx @@ -78,14 +78,8 @@ function ViewportImageSliceLoadingIndicator({ viewportData, element }) { } ViewportImageSliceLoadingIndicator.propTypes = { - percentComplete: PropTypes.number, error: PropTypes.object, element: PropTypes.object, }; -ViewportImageSliceLoadingIndicator.defaultProps = { - percentComplete: 0, - error: null, -}; - export default ViewportImageSliceLoadingIndicator; diff --git a/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx b/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx index eb1dd8200ea..b2df7429adf 100644 --- a/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx +++ b/extensions/cornerstone/src/Viewport/Overlays/ViewportOrientationMarkers.tsx @@ -136,16 +136,6 @@ function ViewportOrientationMarkers({ return
{markers}
; } -ViewportOrientationMarkers.propTypes = { - percentComplete: PropTypes.number, - error: PropTypes.object, -}; - -ViewportOrientationMarkers.defaultProps = { - percentComplete: 0, - error: null, -}; - /** * * Computes the orientation labels on a Cornerstone-enabled Viewport element diff --git a/extensions/default/src/Toolbar/LegacyLayoutSelector.tsx b/extensions/default/src/Toolbar/LegacyLayoutSelector.tsx index 9847d94e0f5..e87b2e4de13 100644 --- a/extensions/default/src/Toolbar/LegacyLayoutSelector.tsx +++ b/extensions/default/src/Toolbar/LegacyLayoutSelector.tsx @@ -2,7 +2,13 @@ import React, { useEffect, useState, useCallback } from 'react'; import PropTypes from 'prop-types'; import { LayoutSelector as OHIFLayoutSelector, ToolbarButton } from '@ohif/ui'; -function LegacyLayoutSelectorWithServices({ servicesManager, ...props }: withAppTypes) { +function LegacyLayoutSelectorWithServices({ + servicesManager, + rows = 3, + columns = 3, + onLayoutChange = () => {}, + ...props +}) { const { toolbarService } = servicesManager.services; const onSelection = useCallback( @@ -78,10 +84,4 @@ LayoutSelector.propTypes = { servicesManager: PropTypes.object.isRequired, }; -LayoutSelector.defaultProps = { - rows: 3, - columns: 3, - onLayoutChange: () => {}, -}; - export default LegacyLayoutSelectorWithServices; diff --git a/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx b/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx index 771b7d6b9bc..cda61c36884 100644 --- a/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx +++ b/extensions/default/src/Toolbar/ToolbarLayoutSelector.tsx @@ -124,8 +124,9 @@ function ToolbarLayoutSelectorWithServices({ } function LayoutSelector({ - rows, - columns, + rows = 3, + columns = 4, + onLayoutChange = () => {}, className, onSelection, onSelectionPreset, @@ -231,10 +232,4 @@ LayoutSelector.propTypes = { servicesManager: PropTypes.object.isRequired, }; -LayoutSelector.defaultProps = { - columns: 4, - rows: 3, - onLayoutChange: () => {}, -}; - export default ToolbarLayoutSelectorWithServices; diff --git a/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx b/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx index 3bbc14b6e5f..f23bfb64124 100644 --- a/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx +++ b/extensions/default/src/Toolbar/ToolbarSplitButtonWithServices.tsx @@ -54,7 +54,6 @@ function ToolbarSplitButtonWithServices({ } ToolbarSplitButtonWithServices.propTypes = { - isRadio: PropTypes.bool, groupId: PropTypes.string, primary: PropTypes.shape({ id: PropTypes.string.isRequired, @@ -87,9 +86,4 @@ ToolbarSplitButtonWithServices.propTypes = { }), }; -ToolbarSplitButtonWithServices.defaultProps = { - isRadio: false, - isAction: false, -}; - export default ToolbarSplitButtonWithServices; diff --git a/extensions/default/src/ViewerLayout/ToolbarButtonNestedMenu.tsx b/extensions/default/src/ViewerLayout/ToolbarButtonNestedMenu.tsx index 47e6a3a9b47..40ef8195daa 100644 --- a/extensions/default/src/ViewerLayout/ToolbarButtonNestedMenu.tsx +++ b/extensions/default/src/ViewerLayout/ToolbarButtonNestedMenu.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { ToolbarButton } from '@ohif/ui'; -function NestedMenu({ children, label, icon, isActive }) { +function NestedMenu({ children, label = 'More', icon = 'tool-more-menu', isActive }) { const [isOpen, setIsOpen] = useState(false); const toggleNestedMenu = () => setIsOpen(!isOpen); @@ -39,9 +39,4 @@ NestedMenu.propTypes = { label: PropTypes.string, }; -NestedMenu.defaultProps = { - icon: 'tool-more-menu', - label: 'More', -}; - export default NestedMenu; diff --git a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx index a805630ecad..f0c7cdac0da 100644 --- a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx +++ b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.tsx @@ -242,11 +242,6 @@ TrackedCornerstoneViewport.propTypes = { viewportId: PropTypes.string.isRequired, dataSource: PropTypes.object, children: PropTypes.node, - customProps: PropTypes.object, -}; - -TrackedCornerstoneViewport.defaultProps = { - customProps: {}, }; function _getNextMeasurementUID( diff --git a/platform/app/src/App.tsx b/platform/app/src/App.tsx index 432b1bd0f04..2f512d9474f 100644 --- a/platform/app/src/App.tsx +++ b/platform/app/src/App.tsx @@ -38,7 +38,27 @@ let commandsManager: CommandsManager, serviceProvidersManager: ServiceProvidersManager, hotkeysManager: HotkeysManager; -function App({ config, defaultExtensions, defaultModes }) { +function App({ + config = { + /** + * Relative route from domain root that OHIF instance is installed at. + * For example: + * + * Hosted at: https://ohif.org/where-i-host-the/viewer/ + * Value: `/where-i-host-the/viewer/` + * */ + routerBaseName: '/', + /** + * + */ + showLoadingIndicator: true, + showStudyList: true, + oidc: [], + extensions: [], + }, + defaultExtensions = [], + defaultModes = [], +}) { const [init, setInit] = useState(null); useEffect(() => { const run = async () => { @@ -157,27 +177,9 @@ App.propTypes = { /* Extensions that are "bundled" or "baked-in" to the application. * These would be provided at build time as part of they entry point. */ defaultExtensions: PropTypes.array, -}; - -App.defaultProps = { - config: { - /** - * Relative route from domain root that OHIF instance is installed at. - * For example: - * - * Hosted at: https://ohif.org/where-i-host-the/viewer/ - * Value: `/where-i-host-the/viewer/` - * */ - routerBaseName: '/', - /** - * - */ - showLoadingIndicator: true, - showStudyList: true, - oidc: [], - extensions: [], - }, - defaultExtensions: [], + /* Modes that are "bundled" or "baked-in" to the application. + * These would be provided at build time as part of they entry point. */ + defaultModes: PropTypes.array, }; export default App; diff --git a/platform/app/src/components/ViewportGrid.tsx b/platform/app/src/components/ViewportGrid.tsx index 427887b9c80..0556544c54b 100644 --- a/platform/app/src/components/ViewportGrid.tsx +++ b/platform/app/src/components/ViewportGrid.tsx @@ -8,7 +8,7 @@ import classNames from 'classnames'; import { useAppConfig } from '@state'; function ViewerViewportGrid(props: withAppTypes) { - const { servicesManager, viewportComponents, dataSource } = props; + const { servicesManager, viewportComponents = [], dataSource } = props; const [viewportGrid, viewportGridService] = useViewportGrid(); const [appConfig] = useAppConfig(); @@ -389,10 +389,6 @@ ViewerViewportGrid.propTypes = { servicesManager: PropTypes.instanceOf(Object).isRequired, }; -ViewerViewportGrid.defaultProps = { - viewportComponents: [], -}; - function _getViewportComponent(displaySets, viewportComponents, uiNotificationService) { if (!displaySets || !displaySets.length) { return EmptyViewport; diff --git a/platform/ui/src/components/ActionButtons/ActionButtons.tsx b/platform/ui/src/components/ActionButtons/ActionButtons.tsx index ae58b985b87..0e7bd33b5e9 100644 --- a/platform/ui/src/components/ActionButtons/ActionButtons.tsx +++ b/platform/ui/src/components/ActionButtons/ActionButtons.tsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Button, ButtonEnums } from '../../components'; -function ActionButtons({ actions, disabled, t }) { +function ActionButtons({ actions, disabled = false, t }) { return ( {actions.map((action, index) => ( @@ -33,8 +33,4 @@ ActionButtons.propTypes = { disabled: PropTypes.bool, }; -ActionButtons.defaultProps = { - disabled: false, -}; - export default ActionButtons; diff --git a/platform/ui/src/components/Button/Button.tsx b/platform/ui/src/components/Button/Button.tsx index 788eb4a505e..f3ba159de7e 100644 --- a/platform/ui/src/components/Button/Button.tsx +++ b/platform/ui/src/components/Button/Button.tsx @@ -58,7 +58,7 @@ const defaults = { }; const Button = ({ - children, + children = '', size = defaults.size, disabled = defaults.disabled, type = defaults.type, @@ -66,7 +66,7 @@ const Button = ({ endIcon: endIconProp, name, className, - onClick, + onClick = () => {}, dataCY, startIconTooltip = null, endIconTooltip = null, @@ -121,14 +121,6 @@ const Button = ({ ); }; -Button.defaultProps = { - disabled: false, - children: '', - onClick: () => {}, - type: defaults.type, - size: defaults.size, -}; - Button.propTypes = { /** What is inside the button, can be text or react component */ children: PropTypes.node, diff --git a/platform/ui/src/components/CinePlayer/CinePlayer.tsx b/platform/ui/src/components/CinePlayer/CinePlayer.tsx index a628754ccdb..1a4024e9dfe 100644 --- a/platform/ui/src/components/CinePlayer/CinePlayer.tsx +++ b/platform/ui/src/components/CinePlayer/CinePlayer.tsx @@ -31,15 +31,15 @@ const fpsButtonClassNames = const CinePlayer: React.FC = ({ className, - isPlaying, - minFrameRate, - maxFrameRate, - stepFrameRate, - frameRate: defaultFrameRate, + isPlaying = false, + minFrameRate = 1, + maxFrameRate = 90, + stepFrameRate = 1, + frameRate: defaultFrameRate = 24, + onFrameRateChange = () => {}, + onPlayPauseChange = () => {}, + onClose = () => {}, dynamicInfo = {}, - onFrameRateChange, - onPlayPauseChange, - onClose, updateDynamicInfo, }) => { const isDynamic = !!dynamicInfo?.numTimePoints; @@ -163,21 +163,6 @@ const CinePlayer: React.FC = ({ ); }; -const noop = () => {}; - -CinePlayer.defaultProps = { - isPlaying: false, - minFrameRate: 1, - maxFrameRate: 90, - stepFrameRate: 1, - frameRate: 24, - onPlayPauseChange: noop, - onFrameRateChange: noop, - onClose: noop, - isDynamic: false, - dynamicInfo: {}, -}; - CinePlayer.propTypes = { /** Minimum value for range slider */ minFrameRate: PropTypes.number, diff --git a/platform/ui/src/components/DateRange/DateRange.tsx b/platform/ui/src/components/DateRange/DateRange.tsx index b93016731d3..bfca06ac303 100644 --- a/platform/ui/src/components/DateRange/DateRange.tsx +++ b/platform/ui/src/components/DateRange/DateRange.tsx @@ -29,7 +29,7 @@ const renderYearsOptions = () => { }; const DateRange = props => { - const { id, onChange, startDate, endDate } = props; + const { id = '', onChange, startDate = null, endDate = null } = props; const [focusedInput, setFocusedInput] = useState(null); const renderYearsOptionsCallback = useCallback(renderYearsOptions, []); const { t } = useTranslation('DatePicker'); @@ -165,12 +165,6 @@ const DateRange = props => { ); }; -DateRange.defaultProps = { - id: '', - startDate: null, - endDate: null, -}; - DateRange.propTypes = { id: PropTypes.string, /** YYYYMMDD (19921022) */ diff --git a/platform/ui/src/components/Dialog/Dialog.tsx b/platform/ui/src/components/Dialog/Dialog.tsx index 8de63a1a2ce..faa2bd504bd 100644 --- a/platform/ui/src/components/Dialog/Dialog.tsx +++ b/platform/ui/src/components/Dialog/Dialog.tsx @@ -15,10 +15,10 @@ const Dialog = ({ actions, onShow, onSubmit, - header: HeaderComponent, - body: BodyComponent, - footer: FooterComponent, - value: defaultValue, + header: HeaderComponent = Header, + body: BodyComponent = Body, + footer: FooterComponent = Footer, + value: defaultValue = {}, }) => { const [value, setValue] = useState(defaultValue); @@ -78,13 +78,7 @@ Dialog.propTypes = { type: PropTypes.oneOf(['primary', 'secondary', 'cancel']).isRequired, }) ).isRequired, -}; - -Dialog.defaultProps = { - header: Header, - footer: Footer, - body: Body, - value: {}, + onShow: PropTypes.func, }; export default Dialog; diff --git a/platform/ui/src/components/Dialog/Footer.tsx b/platform/ui/src/components/Dialog/Footer.tsx index e67a1448497..c369df95b30 100644 --- a/platform/ui/src/components/Dialog/Footer.tsx +++ b/platform/ui/src/components/Dialog/Footer.tsx @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import Button, { ButtonEnums } from '../Button'; -const Footer = ({ actions, className, onSubmit, value }) => { +const Footer = ({ actions = [], className, onSubmit = () => {}, value }) => { const flex = 'flex items-center justify-end'; const padding = 'pt-[20px]'; @@ -47,9 +47,4 @@ Footer.propTypes = { ).isRequired, }; -Footer.defaultProps = { - onSubmit: noop, - actions: [], -}; - export default Footer; diff --git a/platform/ui/src/components/Dialog/Header.tsx b/platform/ui/src/components/Dialog/Header.tsx index d3bfb906ea4..24831c92a96 100644 --- a/platform/ui/src/components/Dialog/Header.tsx +++ b/platform/ui/src/components/Dialog/Header.tsx @@ -20,7 +20,7 @@ CloseButton.propTypes = { onClick: PropTypes.func, }; -const Header = ({ title, noCloseButton, onClose }) => { +const Header = ({ title, noCloseButton = false, onClose }) => { const theme = 'bg-primary-dark'; const flex = 'flex items-center justify-between'; const padding = 'pb-[20px]'; @@ -46,8 +46,4 @@ Header.propTypes = { onClose: PropTypes.func, }; -Header.defaultProps = { - noCloseButton: false, -}; - export default Header; diff --git a/platform/ui/src/components/Dropdown/Dropdown.tsx b/platform/ui/src/components/Dropdown/Dropdown.tsx index 2e9a441445d..c183ddc9346 100644 --- a/platform/ui/src/components/Dropdown/Dropdown.tsx +++ b/platform/ui/src/components/Dropdown/Dropdown.tsx @@ -11,15 +11,15 @@ const borderStyle = 'border-b last:border-b-0 border-secondary-main'; const Dropdown = ({ id, children, - showDropdownIcon, + showDropdownIcon = true, list, itemsClassName, titleClassName, - showBorders, + showBorders = true, alignment, // By default the max characters per line is the longest title // if you wish to override this, you can pass in a number - maxCharactersPerLine, + maxCharactersPerLine = 20, }) => { const [open, setOpen] = useState(false); const elementRef = useRef(null); @@ -199,11 +199,6 @@ const Dropdown = ({
); }; -Dropdown.defaultProps = { - showDropdownIcon: true, - maxCharactersPerLine: 20, - showBorders: true, -}; Dropdown.propTypes = { id: PropTypes.string, diff --git a/platform/ui/src/components/EmptyStudies/EmptyStudies.tsx b/platform/ui/src/components/EmptyStudies/EmptyStudies.tsx index 091d98e4431..5ea1ea24b41 100644 --- a/platform/ui/src/components/EmptyStudies/EmptyStudies.tsx +++ b/platform/ui/src/components/EmptyStudies/EmptyStudies.tsx @@ -7,7 +7,7 @@ import Icon from '../Icon'; import Typography from '../Typography'; // TODO: Add loading spinner to OHIF + use it here. -const EmptyStudies = ({ className }) => { +const EmptyStudies = ({ className = '' }) => { const { t } = useTranslation('StudyList'); return (
@@ -25,10 +25,6 @@ const EmptyStudies = ({ className }) => { ); }; -EmptyStudies.defaultProps = { - className: '', -}; - EmptyStudies.propTypes = { className: PropTypes.string, }; diff --git a/platform/ui/src/components/ErrorBoundary/ErrorBoundary.tsx b/platform/ui/src/components/ErrorBoundary/ErrorBoundary.tsx index df87cce97c9..6fccb97b9f5 100644 --- a/platform/ui/src/components/ErrorBoundary/ErrorBoundary.tsx +++ b/platform/ui/src/components/ErrorBoundary/ErrorBoundary.tsx @@ -10,7 +10,7 @@ import IconButton from '../IconButton'; const isProduction = process.env.NODE_ENV === 'production'; -const DefaultFallback = ({ error, context, resetErrorBoundary, fallbackRoute }) => { +const DefaultFallback = ({ error, context, resetErrorBoundary = () => {}, fallbackRoute }) => { const { t } = useTranslation('ErrorBoundary'); const [showDetails, setShowDetails] = useState(false); const title = `${t('Something went wrong')}${!isProduction && ` ${t('in')} ${context}`}.`; @@ -57,25 +57,19 @@ const DefaultFallback = ({ error, context, resetErrorBoundary, fallbackRoute }) ); }; -const noop = () => {}; - DefaultFallback.propTypes = { error: PropTypes.object.isRequired, resetErrorBoundary: PropTypes.func, componentStack: PropTypes.string, }; -DefaultFallback.defaultProps = { - resetErrorBoundary: noop, -}; - const ErrorBoundary = ({ - context, - onReset, - onError, - fallbackComponent: FallbackComponent, + context = 'OHIF', + onReset = () => {}, + onError = () => {}, + fallbackComponent: FallbackComponent = DefaultFallback, children, - fallbackRoute, + fallbackRoute = null, isPage, }) => { const [isOpen, setIsOpen] = useState(true); @@ -132,12 +126,4 @@ ErrorBoundary.propTypes = { fallbackRoute: PropTypes.string, }; -ErrorBoundary.defaultProps = { - context: 'OHIF', - onReset: noop, - onError: noop, - fallbackComponent: DefaultFallback, - fallbackRoute: null, -}; - export default ErrorBoundary; diff --git a/platform/ui/src/components/ExpandableToolbarButton/ExpandableToolbarButton.tsx b/platform/ui/src/components/ExpandableToolbarButton/ExpandableToolbarButton.tsx index ece62562878..320b70074f1 100644 --- a/platform/ui/src/components/ExpandableToolbarButton/ExpandableToolbarButton.tsx +++ b/platform/ui/src/components/ExpandableToolbarButton/ExpandableToolbarButton.tsx @@ -8,14 +8,14 @@ import Icon from '../Icon'; import './ExpandableToolbarButton.css'; const ExpandableToolbarButton = ({ - type, - id, - isActive, - onClick, - icon, + type = 'primary', + id = '', + isActive = false, + onClick = () => {}, + icon = 'clipboard', className, - content: Content, - contentProps, + content: Content = null, + contentProps = {}, }) => { const classes = { type: { @@ -71,15 +71,6 @@ const ExpandableToolbarButton = ({ const noop = () => {}; -ExpandableToolbarButton.defaultProps = { - id: '', - icon: 'clipboard', - isActive: false, - type: 'primary', - content: null, - onClick: noop, -}; - ExpandableToolbarButton.propTypes = { /* Influences background/hover styling */ type: PropTypes.oneOf(['primary', 'secondary']), diff --git a/platform/ui/src/components/Header/Header.tsx b/platform/ui/src/components/Header/Header.tsx index 94fbb3fdaf1..7472d652ce5 100644 --- a/platform/ui/src/components/Header/Header.tsx +++ b/platform/ui/src/components/Header/Header.tsx @@ -14,9 +14,9 @@ import { PatientInfoVisibility } from '../../types/PatientInfoVisibility'; function Header({ children, menuOptions, - isReturnEnabled, + isReturnEnabled = true, onClickReturnButton, - isSticky, + isSticky = false, WhiteLabeling, showPatientInfo = PatientInfoVisibility.VISIBLE_COLLAPSED, servicesManager, @@ -113,9 +113,4 @@ Header.propTypes = { servicesManager: PropTypes.object, }; -Header.defaultProps = { - isReturnEnabled: true, - isSticky: false, -}; - export default Header; diff --git a/platform/ui/src/components/HotkeyField/HotkeyField.tsx b/platform/ui/src/components/HotkeyField/HotkeyField.tsx index 81e0b8824bc..4283dcf3288 100644 --- a/platform/ui/src/components/HotkeyField/HotkeyField.tsx +++ b/platform/ui/src/components/HotkeyField/HotkeyField.tsx @@ -15,7 +15,7 @@ import { getKeys, formatKeysForInput } from './utils'; * @param {string} props.className input classes * @param {Array[]} props.modifierKeys */ -const HotkeyField = ({ disabled, keys, onChange, className, modifierKeys, hotkeys }) => { +const HotkeyField = ({ disabled = false, keys, onChange, className, modifierKeys, hotkeys }) => { const inputValue = formatKeysForInput(keys); const onInputKeyDown = event => { @@ -58,8 +58,4 @@ HotkeyField.propTypes = { }).isRequired, }; -HotkeyField.defaultProps = { - disabled: false, -}; - export default HotkeyField; diff --git a/platform/ui/src/components/HotkeysPreferences/HotkeysPreferences.tsx b/platform/ui/src/components/HotkeysPreferences/HotkeysPreferences.tsx index 2b9b1eb02d4..7758546e764 100644 --- a/platform/ui/src/components/HotkeysPreferences/HotkeysPreferences.tsx +++ b/platform/ui/src/components/HotkeysPreferences/HotkeysPreferences.tsx @@ -11,10 +11,10 @@ import { MODIFIER_KEYS } from './hotkeysConfig'; import { validate, splitHotkeyDefinitionsAndCreateTuples } from './utils'; const HotkeysPreferences = ({ - disabled, + disabled = false, hotkeyDefinitions, errors: controlledErrors, - onChange, + onChange = () => {}, hotkeysModule, }) => { const { t } = useTranslation('UserPreferencesModal'); @@ -127,8 +127,6 @@ const HotkeysPreferences = ({ ); }; -const noop = () => {}; - HotkeysPreferences.propTypes = { onChange: PropTypes.func, disabled: PropTypes.bool, @@ -142,9 +140,4 @@ HotkeysPreferences.propTypes = { }).isRequired, }; -HotkeysPreferences.defaultProps = { - onChange: noop, - disabled: false, -}; - export default HotkeysPreferences; diff --git a/platform/ui/src/components/Icon/getIcon.js b/platform/ui/src/components/Icon/getIcon.js index a6545d9f29f..b7c8247d918 100644 --- a/platform/ui/src/components/Icon/getIcon.js +++ b/platform/ui/src/components/Icon/getIcon.js @@ -1,5 +1,4 @@ import React from 'react'; -// Icons import arrowDown from './../../assets/icons/arrow-down.svg'; import arrowLeft from './../../assets/icons/arrow-left.svg'; diff --git a/platform/ui/src/components/IconButton/IconButton.tsx b/platform/ui/src/components/IconButton/IconButton.tsx index fff9d168f7b..e6d74594b11 100644 --- a/platform/ui/src/components/IconButton/IconButton.tsx +++ b/platform/ui/src/components/IconButton/IconButton.tsx @@ -74,14 +74,14 @@ const fullWidthClasses = { const IconButton = ({ children, - variant, - color, - size, - rounded, - disabled, - type, - fullWidth, - onClick, + variant = 'contained', + color = 'default', + size = 'medium', + rounded = 'medium', + disabled = false, + type = 'button', + fullWidth = false, + onClick = () => {}, className, id, ...rest @@ -122,17 +122,6 @@ const IconButton = ({ ); }; -IconButton.defaultProps = { - onClick: () => {}, - color: 'default', - disabled: false, - fullWidth: false, - rounded: 'medium', - size: 'medium', - type: 'button', - variant: 'contained', -}; - IconButton.propTypes = { children: PropTypes.node.isRequired, size: PropTypes.oneOf(['small', 'medium', 'large', 'initial', 'toolbar', 'toolbox']), diff --git a/platform/ui/src/components/ImageScrollbar/ImageScrollbar.tsx b/platform/ui/src/components/ImageScrollbar/ImageScrollbar.tsx index 1128680a1c5..cfa5fcac4a6 100644 --- a/platform/ui/src/components/ImageScrollbar/ImageScrollbar.tsx +++ b/platform/ui/src/components/ImageScrollbar/ImageScrollbar.tsx @@ -20,10 +20,12 @@ class ImageScrollbar extends PureComponent { width: `${this.props.height}`, }; + const { onContextMenu = e => e.preventDefault() } = this.props; + return (
e.preventDefault(), -}; - export default ImageScrollbar; diff --git a/platform/ui/src/components/InputDateRange/InputDateRange.tsx b/platform/ui/src/components/InputDateRange/InputDateRange.tsx index 88dafbb1a23..212b6f48ead 100644 --- a/platform/ui/src/components/InputDateRange/InputDateRange.tsx +++ b/platform/ui/src/components/InputDateRange/InputDateRange.tsx @@ -9,8 +9,8 @@ const InputDateRange = ({ label, isSortable, sortDirection, - onLabelClick, - value, + onLabelClick = () => {}, + value = {}, onChange, }) => { const { startDate, endDate } = value; @@ -39,13 +39,6 @@ const InputDateRange = ({ ); }; -const noop = () => {}; - -InputDateRange.defaultProps = { - value: {}, - onLabelClick: noop, -}; - InputDateRange.propTypes = { id: PropTypes.string, label: PropTypes.string.isRequired, diff --git a/platform/ui/src/components/InputDoubleRange/InputDoubleRange.tsx b/platform/ui/src/components/InputDoubleRange/InputDoubleRange.tsx index d5ea681657f..19367d0bcfd 100644 --- a/platform/ui/src/components/InputDoubleRange/InputDoubleRange.tsx +++ b/platform/ui/src/components/InputDoubleRange/InputDoubleRange.tsx @@ -25,20 +25,20 @@ type InputDoubleRangeProps = { const InputDoubleRange: React.FC = ({ values, onChange, - minValue, - maxValue, - step, - unit, - containerClassName, - inputClassName, - labelClassName, - labelVariant, - showLabel, - labelPosition, - trackColor, - allowNumberEdit, + minValue = 0, + maxValue = 100, + step = 1, + unit = '', + containerClassName = '', + inputClassName = '', + labelClassName = '', + labelVariant = 'body1', + showLabel = false, + labelPosition = 'left', + trackColor = 'primary', + allowNumberEdit = false, allowOutOfRange = false, - showAdjustmentArrows, + showAdjustmentArrows = false, }) => { // Set initial thumb positions as percentages const initialPercentageStart = Math.round(((values[0] - minValue) / (maxValue - minValue)) * 100); @@ -235,20 +235,4 @@ const InputDoubleRange: React.FC = ({ ); }; -InputDoubleRange.defaultProps = { - minValue: 0, - maxValue: 100, - step: 1, - unit: '', - containerClassName: '', - inputClassName: '', - labelClassName: '', - labelVariant: 'body1', - showLabel: false, - labelPosition: 'left', - trackColor: 'primary', - allowNumberEdit: false, - showAdjustmentArrows: false, -}; - export default InputDoubleRange; diff --git a/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.tsx b/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.tsx index 904b06904e0..fcd21778224 100644 --- a/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.tsx +++ b/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.tsx @@ -17,7 +17,7 @@ const InputLabelWrapper = ({ isSortable, sortDirection, onLabelClick, - className, + className = '', children, }) => { const onClickHandler = e => { @@ -53,10 +53,6 @@ const InputLabelWrapper = ({ ); }; -InputLabelWrapper.defaultProps = { - className: '', -}; - InputLabelWrapper.propTypes = { label: PropTypes.string.isRequired, isSortable: PropTypes.bool.isRequired, diff --git a/platform/ui/src/components/InputMultiSelect/InputMultiSelect.tsx b/platform/ui/src/components/InputMultiSelect/InputMultiSelect.tsx index 6a0c3974566..7a5ee8d42a4 100644 --- a/platform/ui/src/components/InputMultiSelect/InputMultiSelect.tsx +++ b/platform/ui/src/components/InputMultiSelect/InputMultiSelect.tsx @@ -10,9 +10,9 @@ const InputMultiSelect = ({ isSortable, sortDirection, onLabelClick, - value, - placeholder, - options, + value = [], + placeholder = '', + options = [], onChange, }) => { return ( @@ -50,12 +50,6 @@ const InputMultiSelect = ({ ); }; -InputMultiSelect.defaultProps = { - value: [], - placeholder: '', - options: [], -}; - InputMultiSelect.propTypes = { id: PropTypes.string, label: PropTypes.string.isRequired, diff --git a/platform/ui/src/components/InputText/InputText.tsx b/platform/ui/src/components/InputText/InputText.tsx index 532b6282b64..290e2a0fff2 100644 --- a/platform/ui/src/components/InputText/InputText.tsx +++ b/platform/ui/src/components/InputText/InputText.tsx @@ -4,7 +4,15 @@ import PropTypes from 'prop-types'; import Input from '../Input'; import InputLabelWrapper from '../InputLabelWrapper'; -const InputText = ({ id, label, isSortable, sortDirection, onLabelClick, value, onChange }) => { +const InputText = ({ + id, + label, + isSortable = false, + sortDirection = 'none', + onLabelClick = () => {}, + value = '', + onChange, +}) => { return ( {}, - sortDirection: 'none', -}; - InputText.propTypes = { id: PropTypes.string, label: PropTypes.string.isRequired, diff --git a/platform/ui/src/components/InvestigationalUseDialog/InvestigationalUseDialog.tsx b/platform/ui/src/components/InvestigationalUseDialog/InvestigationalUseDialog.tsx index f2d4cb40456..3f29de6873a 100644 --- a/platform/ui/src/components/InvestigationalUseDialog/InvestigationalUseDialog.tsx +++ b/platform/ui/src/components/InvestigationalUseDialog/InvestigationalUseDialog.tsx @@ -9,7 +9,11 @@ export enum showDialogOption { ShowOnceAndConfigure = 'configure', } -const InvestigationalUseDialog = ({ dialogConfiguration }) => { +const InvestigationalUseDialog = ({ + dialogConfiguration = { + option: showDialogOption.AlwaysShowDialog, + }, +}) => { const { option, days } = dialogConfiguration; const [isHidden, setIsHidden] = useState(true); @@ -97,13 +101,7 @@ InvestigationalUseDialog.propTypes = { dialogConfiguration: PropTypes.shape({ option: PropTypes.oneOf(Object.values(showDialogOption)).isRequired, days: PropTypes.number, - }).isRequired, -}; - -InvestigationalUseDialog.defaultProps = { - dialogConfiguration: { - option: showDialogOption.AlwaysShowDialog, - }, + }), }; export default InvestigationalUseDialog; diff --git a/platform/ui/src/components/LayoutPreset/LayoutPreset.tsx b/platform/ui/src/components/LayoutPreset/LayoutPreset.tsx index 9113cc0ea3d..d8d0a7272e4 100644 --- a/platform/ui/src/components/LayoutPreset/LayoutPreset.tsx +++ b/platform/ui/src/components/LayoutPreset/LayoutPreset.tsx @@ -4,7 +4,7 @@ import classNames from 'classnames'; import Icon from '../Icon/Icon'; function LayoutPreset({ - onSelection, + onSelection = () => {}, title, icon, commandOptions, @@ -27,10 +27,6 @@ function LayoutPreset({ ); } -LayoutPreset.defaultProps = { - onSelection: () => {}, -}; - LayoutPreset.propTypes = { onSelection: PropTypes.func.isRequired, title: PropTypes.string, diff --git a/platform/ui/src/components/LayoutSelector/LayoutSelector.tsx b/platform/ui/src/components/LayoutSelector/LayoutSelector.tsx index 2271069edf8..de8512abcc5 100644 --- a/platform/ui/src/components/LayoutSelector/LayoutSelector.tsx +++ b/platform/ui/src/components/LayoutSelector/LayoutSelector.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; -function LayoutSelector({ onSelection, rows, columns }) { +function LayoutSelector({ onSelection = () => {}, rows = 3, columns = 4 }) { const [hoveredIndex, setHoveredIndex] = useState(); const hoverX = hoveredIndex % columns; const hoverY = Math.floor(hoveredIndex / columns); @@ -48,12 +48,6 @@ function LayoutSelector({ onSelection, rows, columns }) { ); } -LayoutSelector.defaultProps = { - onSelection: () => {}, - columns: 4, - rows: 3, -}; - LayoutSelector.propTypes = { onSelection: PropTypes.func.isRequired, columns: PropTypes.number.isRequired, diff --git a/platform/ui/src/components/LegacyButton/LegacyButton.tsx b/platform/ui/src/components/LegacyButton/LegacyButton.tsx index dea53f92716..0ec63cae4f7 100644 --- a/platform/ui/src/components/LegacyButton/LegacyButton.tsx +++ b/platform/ui/src/components/LegacyButton/LegacyButton.tsx @@ -137,7 +137,7 @@ const fullWidthClasses = { }; const LegacyButton = ({ - children, + children = '', variant = defaults.variant, color = defaults.color, border = defaults.border, @@ -151,7 +151,7 @@ const LegacyButton = ({ endIcon: endIconProp, name, className, - onClick, + onClick = () => {}, /** TODO: All possible props should be explicitly defined -- avoid spreading props */ ...rest }) => { @@ -206,13 +206,6 @@ const LegacyButton = ({ ); }; -LegacyButton.defaultProps = { - color: defaults.color, - disabled: false, - children: '', - onClick: () => {}, -}; - LegacyButton.propTypes = { /** What is inside the button, can be text or react component */ children: PropTypes.node, diff --git a/platform/ui/src/components/LegacyCinePlayer/LegacyCinePlayer.tsx b/platform/ui/src/components/LegacyCinePlayer/LegacyCinePlayer.tsx index fff5154f12c..9824b30f9be 100644 --- a/platform/ui/src/components/LegacyCinePlayer/LegacyCinePlayer.tsx +++ b/platform/ui/src/components/LegacyCinePlayer/LegacyCinePlayer.tsx @@ -8,14 +8,14 @@ import Icon from '../Icon'; import './LegacyCinePlayerCustomInputRange.css'; const LegacyCinePlayer = ({ - isPlaying, - minFrameRate, - maxFrameRate, - stepFrameRate, - frameRate: defaultFrameRate, - onFrameRateChange, - onPlayPauseChange, - onClose, + isPlaying = false, + minFrameRate = 1, + maxFrameRate = 90, + stepFrameRate = 1, + frameRate: defaultFrameRate = 24, + onFrameRateChange = () => {}, + onPlayPauseChange = () => {}, + onClose = () => {}, }) => { const [frameRate, setFrameRate] = useState(defaultFrameRate); const debouncedSetFrameRate = debounce(onFrameRateChange, 300); @@ -74,17 +74,6 @@ const LegacyCinePlayer = ({ const noop = () => {}; -LegacyCinePlayer.defaultProps = { - isPlaying: false, - minFrameRate: 1, - maxFrameRate: 90, - stepFrameRate: 1, - frameRate: 24, - onPlayPauseChange: noop, - onFrameRateChange: noop, - onClose: noop, -}; - LegacyCinePlayer.propTypes = { /** Minimum value for range slider */ minFrameRate: PropTypes.number.isRequired, diff --git a/platform/ui/src/components/LegacySidePanel/LegacySidePanel.tsx b/platform/ui/src/components/LegacySidePanel/LegacySidePanel.tsx index 402d0bf14d4..466b59a2bcc 100644 --- a/platform/ui/src/components/LegacySidePanel/LegacySidePanel.tsx +++ b/platform/ui/src/components/LegacySidePanel/LegacySidePanel.tsx @@ -283,10 +283,6 @@ const LegacySidePanel = ({ ); }; -LegacySidePanel.defaultProps = { - defaultComponentOpen: null, -}; - LegacySidePanel.propTypes = { servicesManager: PropTypes.object.isRequired, side: PropTypes.oneOf(['left', 'right']).isRequired, diff --git a/platform/ui/src/components/LegacySplitButton/LegacySplitButton.tsx b/platform/ui/src/components/LegacySplitButton/LegacySplitButton.tsx index 856d26dcbd7..4dae06b43d6 100644 --- a/platform/ui/src/components/LegacySplitButton/LegacySplitButton.tsx +++ b/platform/ui/src/components/LegacySplitButton/LegacySplitButton.tsx @@ -72,10 +72,10 @@ const LegacySplitButton = ({ primary, secondary, items, - renderer, + renderer = null, onInteraction, - Component, - isActive, + Component = null, + isActive = false, }) => { const { t } = useTranslation('Buttons'); const [state, setState] = useState({ isHovering: false, isExpanded: false }); @@ -149,7 +149,6 @@ const LegacySplitButton = ({ }; LegacySplitButton.propTypes = { - isToggle: PropTypes.bool, groupId: PropTypes.string.isRequired, primary: PropTypes.object.isRequired, secondary: PropTypes.object.isRequired, @@ -160,11 +159,4 @@ LegacySplitButton.propTypes = { Component: PropTypes.elementType, }; -LegacySplitButton.defaultProps = { - isToggle: false, - renderer: null, - isActive: false, - Component: null, -}; - export default LegacySplitButton; diff --git a/platform/ui/src/components/LegacyViewportActionBar/LegacyViewportActionBar.tsx b/platform/ui/src/components/LegacyViewportActionBar/LegacyViewportActionBar.tsx index 4f7d40dd0b6..00857662fd8 100644 --- a/platform/ui/src/components/LegacyViewportActionBar/LegacyViewportActionBar.tsx +++ b/platform/ui/src/components/LegacyViewportActionBar/LegacyViewportActionBar.tsx @@ -11,11 +11,11 @@ import LegacyCinePlayer from '../LegacyCinePlayer'; const LegacyViewportActionBar = ({ studyData, - showNavArrows, - showStatus, - showCine, - cineProps, - showPatientInfo: patientInfoVisibility, + showNavArrows = true, + showStatus = true, + showCine = false, + cineProps = {}, + showPatientInfo: patientInfoVisibility = false, onArrowsClick, onDoubleClick, getStatusComponent, @@ -166,14 +166,8 @@ LegacyViewportActionBar.propTypes = { }), }).isRequired, getStatusComponent: PropTypes.func.isRequired, -}; - -LegacyViewportActionBar.defaultProps = { - cineProps: {}, - showCine: false, - showStatus: true, - showNavArrows: true, - showPatientInfo: false, + onDoubleClick: PropTypes.func.isRequired, + showStatus: PropTypes.bool, }; export default LegacyViewportActionBar; diff --git a/platform/ui/src/components/LineChart/LineChart.tsx b/platform/ui/src/components/LineChart/LineChart.tsx index 472fa7a5bdc..08fe3cfe0a0 100644 --- a/platform/ui/src/components/LineChart/LineChart.tsx +++ b/platform/ui/src/components/LineChart/LineChart.tsx @@ -10,11 +10,11 @@ const LineChart = ({ height: heightProp, axis, series, - showAxisLabels, - showAxisGrid, - showLegend, - legendWidth, - transparentChartBackground, + showAxisLabels = true, + showAxisGrid = true, + showLegend = false, + legendWidth = 120, + transparentChartBackground = false, containerClassName, chartContainerClassName, }: { @@ -105,14 +105,6 @@ const LineChart = ({ ); }; -LineChart.defaultProps = { - showAxisLabels: true, - showAxisGrid: true, - showLegend: false, - legendWidth: 120, - transparentChartBackground: false, -}; - LineChart.propTypes = { title: PropTypes.string, width: PropTypes.number, diff --git a/platform/ui/src/components/ListMenu/ListMenu.tsx b/platform/ui/src/components/ListMenu/ListMenu.tsx index cae058d2d37..f5b1a1591d5 100644 --- a/platform/ui/src/components/ListMenu/ListMenu.tsx +++ b/platform/ui/src/components/ListMenu/ListMenu.tsx @@ -5,7 +5,7 @@ import PropTypes from 'prop-types'; const flex = 'flex flex-row justify-between items-center'; const theme = 'bg-indigo-dark text-white'; -const ListMenu = ({ items = [], renderer, onClick }) => { +const ListMenu = ({ items = [], renderer, onClick = () => {} }) => { const [selectedIndex, setSelectedIndex] = useState(null); const ListItem = ({ item, index, isSelected }) => { @@ -48,16 +48,10 @@ const ListMenu = ({ items = [], renderer, onClick }) => { ); }; -const noop = () => {}; - ListMenu.propTypes = { items: PropTypes.array.isRequired, renderer: PropTypes.func.isRequired, onClick: PropTypes.func, }; -ListMenu.defaultProps = { - onClick: noop, -}; - export default ListMenu; diff --git a/platform/ui/src/components/MeasurementTable/MeasurementItem.tsx b/platform/ui/src/components/MeasurementTable/MeasurementItem.tsx index 6126db1b7f9..70c20d6a9fa 100644 --- a/platform/ui/src/components/MeasurementTable/MeasurementItem.tsx +++ b/platform/ui/src/components/MeasurementTable/MeasurementItem.tsx @@ -9,7 +9,7 @@ const MeasurementItem = ({ index, label, displayText, - isActive, + isActive = false, onClick, onEdit, onDelete, @@ -110,8 +110,4 @@ MeasurementItem.propTypes = { onDelete: PropTypes.func, }; -MeasurementItem.defaultProps = { - isActive: false, -}; - export default MeasurementItem; diff --git a/platform/ui/src/components/MeasurementTable/MeasurementTable.tsx b/platform/ui/src/components/MeasurementTable/MeasurementTable.tsx index 210bcde5a04..226c41f0d10 100644 --- a/platform/ui/src/components/MeasurementTable/MeasurementTable.tsx +++ b/platform/ui/src/components/MeasurementTable/MeasurementTable.tsx @@ -5,10 +5,10 @@ import { useTranslation } from 'react-i18next'; import MeasurementItem from './MeasurementItem'; const MeasurementTable = ({ - data, + data = [], title, - onClick, - onEdit, + onClick = () => {}, + onEdit = () => {}, onDelete, servicesManager, }: withAppTypes) => { @@ -71,12 +71,6 @@ const MeasurementTable = ({ ); }; -MeasurementTable.defaultProps = { - data: [], - onClick: () => {}, - onEdit: () => {}, -}; - MeasurementTable.propTypes = { title: PropTypes.string.isRequired, data: PropTypes.arrayOf( diff --git a/platform/ui/src/components/Modal/Modal.tsx b/platform/ui/src/components/Modal/Modal.tsx index 1a717dc103c..8730b5604ac 100644 --- a/platform/ui/src/components/Modal/Modal.tsx +++ b/platform/ui/src/components/Modal/Modal.tsx @@ -15,12 +15,12 @@ if (typeof document !== 'undefined') { const Modal = ({ closeButton, - shouldCloseOnEsc, + shouldCloseOnEsc = true, isOpen, title, onClose, children, - shouldCloseOnOverlayClick, + shouldCloseOnOverlayClick = true, movable = false, containerDimensions = null, contentDimensions = null, @@ -99,14 +99,6 @@ const Modal = ({ ); }; -Modal.defaultProps = { - shouldCloseOnEsc: true, - shouldCloseOnOverlayClick: true, - movable: false, - containerDimensions: null, - contentDimensions: null, -}; - Modal.propTypes = { closeButton: PropTypes.bool, shouldCloseOnEsc: PropTypes.bool, diff --git a/platform/ui/src/components/Notification/Notification.tsx b/platform/ui/src/components/Notification/Notification.tsx index 5d1c82f5b55..816a06e3049 100644 --- a/platform/ui/src/components/Notification/Notification.tsx +++ b/platform/ui/src/components/Notification/Notification.tsx @@ -5,7 +5,15 @@ import PropTypes from 'prop-types'; import Button, { ButtonEnums } from '../Button'; import Icon from '../Icon'; -const Notification = ({ id, type, message, actions, onSubmit, onOutsideClick, onKeyPress }) => { +const Notification = ({ + id, + type = 'info', + message, + actions, + onSubmit, + onOutsideClick = () => {}, + onKeyPress, +}) => { const notificationRef = useRef(null); useEffect(() => { @@ -99,11 +107,6 @@ const Notification = ({ id, type, message, actions, onSubmit, onOutsideClick, on ); }; -Notification.defaultProps = { - type: 'info', - onOutsideClick: () => {}, -}; - Notification.propTypes = { type: PropTypes.oneOf(['error', 'warning', 'info', 'success']), message: PropTypes.string.isRequired, diff --git a/platform/ui/src/components/PanelSection/PanelSection.tsx b/platform/ui/src/components/PanelSection/PanelSection.tsx index 6dd79fefdc1..06aea7f4ec6 100644 --- a/platform/ui/src/components/PanelSection/PanelSection.tsx +++ b/platform/ui/src/components/PanelSection/PanelSection.tsx @@ -49,8 +49,6 @@ const PanelSection = ({ title, children, actionIcons = [], childrenClassName }) ); }; -PanelSection.defaultProps = {}; - PanelSection.propTypes = { title: PropTypes.string, children: PropTypes.node, diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationDropDownRow.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationDropDownRow.tsx index ff909483a10..20d001408de 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationDropDownRow.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationDropDownRow.tsx @@ -7,7 +7,7 @@ function SegmentationDropDownRow({ segmentations = [], activeSegmentation, onActiveSegmentationChange, - disableEditing, + disableEditing = false, onToggleSegmentationVisibility, onSegmentationEdit, onSegmentationDownload, @@ -180,9 +180,4 @@ SegmentationDropDownRow.propTypes = { onSegmentationAdd: PropTypes.func, }; -SegmentationDropDownRow.defaultProps = { - segmentations: [], - disableEditing: false, -}; - export default SegmentationDropDownRow; diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupSegment.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupSegment.tsx index 0e9e0b0a26e..e197fa02f70 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupSegment.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupSegment.tsx @@ -8,7 +8,7 @@ const SegmentItem = ({ segmentIndex, segmentationId, label, - isActive, + isActive = false, isVisible, color, showDelete, @@ -236,8 +236,4 @@ SegmentItem.propTypes = { displayText: PropTypes.string, }; -SegmentItem.defaultProps = { - isActive: false, -}; - export default SegmentItem; diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx index 73262d69f11..e92c05bcfff 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTable.tsx @@ -9,39 +9,34 @@ import SegmentationGroupSegment from './SegmentationGroupSegment'; import { useTranslation } from 'react-i18next'; const SegmentationGroupTable = ({ - segmentations, - // segmentation initial config + segmentations = [], segmentationConfig, - // UI show/hide - disableEditing, - showAddSegmentation, - showAddSegment, - showDeleteSegment, - // segmentation/segment handlers - onSegmentationAdd, - onSegmentationEdit, - onSegmentationClick, - onSegmentationDelete, - onSegmentationDownload, - onSegmentationDownloadRTSS, - storeSegmentation, - // segment handlers - onSegmentClick, - onSegmentAdd, - onSegmentDelete, - onSegmentEdit, - onToggleSegmentationVisibility, - onToggleSegmentVisibility, - onToggleSegmentLock, - onSegmentColorClick, - // segmentation config handlers - setFillAlpha, - setFillAlphaInactive, - setOutlineWidthActive, - setOutlineOpacityActive, - setRenderFill, - setRenderInactiveSegmentations, - setRenderOutline, + disableEditing = false, + showAddSegmentation = true, + showAddSegment = true, + showDeleteSegment = true, + onSegmentationAdd = () => {}, + onSegmentationEdit = () => {}, + onSegmentationClick = () => {}, + onSegmentationDelete = () => {}, + onSegmentationDownload = () => {}, + onSegmentationDownloadRTSS = () => {}, + storeSegmentation = () => {}, + onSegmentClick = () => {}, + onSegmentAdd = () => {}, + onSegmentDelete = () => {}, + onSegmentEdit = () => {}, + onToggleSegmentationVisibility = () => {}, + onToggleSegmentVisibility = () => {}, + onToggleSegmentLock = () => {}, + onSegmentColorClick = () => {}, + setFillAlpha = () => {}, + setFillAlphaInactive = () => {}, + setOutlineWidthActive = () => {}, + setOutlineOpacityActive = () => {}, + setRenderFill = () => {}, + setRenderInactiveSegmentations = () => {}, + setRenderOutline = () => {}, addSegmentationClassName, }) => { const [isConfigOpen, setIsConfigOpen] = useState(false); @@ -216,33 +211,4 @@ SegmentationGroupTable.propTypes = { setRenderOutline: PropTypes.func.isRequired, }; -SegmentationGroupTable.defaultProps = { - segmentations: [], - disableEditing: false, - showAddSegmentation: true, - showAddSegment: true, - showDeleteSegment: true, - onSegmentationAdd: () => {}, - onSegmentationEdit: () => {}, - onSegmentationClick: () => {}, - onSegmentationDelete: () => {}, - onSegmentationDownload: () => {}, - onSemgnetationDownloadRTSS: () => {}, - storeSegmentation: () => {}, - onSegmentClick: () => {}, - onSegmentAdd: () => {}, - onSegmentDelete: () => {}, - onSegmentEdit: () => {}, - onToggleSegmentationVisibility: () => {}, - onToggleSegmentVisibility: () => {}, - onToggleSegmentLock: () => {}, - onSegmentColorClick: () => {}, - setFillAlpha: () => {}, - setFillAlphaInactive: () => {}, - setOutlineWidthActive: () => {}, - setOutlineOpacityActive: () => {}, - setRenderFill: () => {}, - setRenderInactiveSegmentations: () => {}, - setRenderOutline: () => {}, -}; export default SegmentationGroupTable; diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTableExpanded.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTableExpanded.tsx index e2ae334bb76..543285f730c 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTableExpanded.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationGroupTableExpanded.tsx @@ -7,39 +7,34 @@ import { useTranslation } from 'react-i18next'; import SegmentationItem from './SegmentationItem'; const SegmentationGroupTableExpanded = ({ - segmentations, - // segmentation initial config + segmentations = [], segmentationConfig, - // UI show/hide - disableEditing, - showAddSegmentation, - showAddSegment, - showDeleteSegment, - // segmentation/segment handlers - onSegmentationAdd, - onSegmentationEdit, - onSegmentationClick, - onSegmentationDelete, - onSegmentationDownload, - onSegmentationDownloadRTSS, - storeSegmentation, - // segment handlers - onSegmentClick, - onSegmentAdd, - onSegmentDelete, - onSegmentEdit, - onToggleSegmentationVisibility, - onToggleSegmentVisibility, - onToggleSegmentLock, - onSegmentColorClick, - // segmentation config handlers - setFillAlpha, - setFillAlphaInactive, - setOutlineWidthActive, - setOutlineOpacityActive, - setRenderFill, - setRenderInactiveSegmentations, - setRenderOutline, + disableEditing = false, + showAddSegmentation = true, + showAddSegment = true, + showDeleteSegment = true, + onSegmentationAdd = () => {}, + onSegmentationEdit = () => {}, + onSegmentationClick = () => {}, + onSegmentationDelete = () => {}, + onSegmentationDownload = () => {}, + onSegmentationDownloadRTSS = () => {}, + storeSegmentation = () => {}, + onSegmentClick = () => {}, + onSegmentAdd = () => {}, + onSegmentDelete = () => {}, + onSegmentEdit = () => {}, + onToggleSegmentationVisibility = () => {}, + onToggleSegmentVisibility = () => {}, + onToggleSegmentLock = () => {}, + onSegmentColorClick = () => {}, + setFillAlpha = () => {}, + setFillAlphaInactive = () => {}, + setOutlineWidthActive = () => {}, + setOutlineOpacityActive = () => {}, + setRenderFill = () => {}, + setRenderInactiveSegmentations = () => {}, + setRenderOutline = () => {}, }) => { const [isConfigOpen, setIsConfigOpen] = useState(false); const [activeSegmentationId, setActiveSegmentationId] = useState(null); @@ -179,33 +174,4 @@ SegmentationGroupTableExpanded.propTypes = { setRenderOutline: PropTypes.func.isRequired, }; -SegmentationGroupTableExpanded.defaultProps = { - segmentations: [], - disableEditing: false, - showAddSegmentation: true, - showAddSegment: true, - showDeleteSegment: true, - onSegmentationAdd: () => {}, - onSegmentationEdit: () => {}, - onSegmentationClick: () => {}, - onSegmentationDelete: () => {}, - onSegmentationDownload: () => {}, - onSemgnetationDownloadRTSS: () => {}, - storeSegmentation: () => {}, - onSegmentClick: () => {}, - onSegmentAdd: () => {}, - onSegmentDelete: () => {}, - onSegmentEdit: () => {}, - onToggleSegmentationVisibility: () => {}, - onToggleSegmentVisibility: () => {}, - onToggleSegmentLock: () => {}, - onSegmentColorClick: () => {}, - setFillAlpha: () => {}, - setFillAlphaInactive: () => {}, - setOutlineWidthActive: () => {}, - setOutlineOpacityActive: () => {}, - setRenderFill: () => {}, - setRenderInactiveSegmentations: () => {}, - setRenderOutline: () => {}, -}; export default SegmentationGroupTableExpanded; diff --git a/platform/ui/src/components/SegmentationGroupTable/SegmentationItem.tsx b/platform/ui/src/components/SegmentationGroupTable/SegmentationItem.tsx index 8741c338f51..866ab64b343 100644 --- a/platform/ui/src/components/SegmentationGroupTable/SegmentationItem.tsx +++ b/platform/ui/src/components/SegmentationGroupTable/SegmentationItem.tsx @@ -8,8 +8,8 @@ import SegmentationGroupSegment from './SegmentationGroupSegment'; import { Tooltip } from '../../components'; function SegmentationItem({ - segmentation, - disableEditing, + segmentation = {}, + disableEditing = false, onSegmentationEdit, onSegmentationDownload, onSegmentationDownloadRTSS, @@ -203,9 +203,4 @@ SegmentationItem.propTypes = { activeSegmentationId: PropTypes.string, }; -SegmentationItem.defaultProps = { - segmentation: null, - disableEditing: false, -}; - export default SegmentationItem; diff --git a/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx b/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx index a7f3e966d7f..83c91428ffa 100644 --- a/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx +++ b/platform/ui/src/components/SegmentationTable/SegmentationItem.tsx @@ -8,8 +8,8 @@ const SegmentationItem = ({ id, index, label, - displayText, - isActive, + displayText = [], + isActive = false, isVisible, onClick, onEdit, @@ -138,9 +138,4 @@ SegmentationItem.propTypes = { toggleVisibility: PropTypes.func, }; -SegmentationItem.defaultProps = { - isActive: false, - displayText: [], -}; - export default SegmentationItem; diff --git a/platform/ui/src/components/SegmentationTable/SegmentationTable.tsx b/platform/ui/src/components/SegmentationTable/SegmentationTable.tsx index 1d683baf4ce..97aa985d6c6 100644 --- a/platform/ui/src/components/SegmentationTable/SegmentationTable.tsx +++ b/platform/ui/src/components/SegmentationTable/SegmentationTable.tsx @@ -5,14 +5,14 @@ import SegmentationItem from './SegmentationItem'; import Icon from '../Icon'; const SegmentationTable = ({ - title, - segmentations, - activeSegmentationId, - onClick, - onEdit, - onDelete, - onToggleVisibility, - onToggleVisibilityAll, + title = '', + segmentations = [], + activeSegmentationId = '', + onClick = () => {}, + onEdit = () => {}, + onDelete = () => {}, + onToggleVisibility = () => {}, + onToggleVisibilityAll = () => {}, }) => { const [hiddenSegmentationIds, setHiddenSegmentationIds] = useState([]); const amount = segmentations.length; @@ -112,14 +112,4 @@ SegmentationTable.propTypes = { onToggleVisibilityAll: PropTypes.func.isRequired, }; -SegmentationTable.defaultProps = { - title: '', - segmentations: [], - activeSegmentationId: '', - onClick: () => {}, - onEdit: () => {}, - onToggleVisibility: () => {}, - onToggleVisibilityAll: () => {}, -}; - export default SegmentationTable; diff --git a/platform/ui/src/components/Select/Select.tsx b/platform/ui/src/components/Select/Select.tsx index 256b5f26a59..474edc23e71 100644 --- a/platform/ui/src/components/Select/Select.tsx +++ b/platform/ui/src/components/Select/Select.tsx @@ -42,20 +42,20 @@ const Option = props => { const Select = ({ id, - className, - closeMenuOnSelect, - hideSelectedOptions, - isClearable, - isDisabled, - isMulti, - isSearchable, + className = '', + closeMenuOnSelect = true, + hideSelectedOptions = false, + isClearable = true, + isDisabled = false, + isMulti = false, + isSearchable = true, onChange, options, placeholder, - noIcons, - menuPlacement, - components, - value, + noIcons = false, + menuPlacement = 'auto', + components = {}, + value = [], }) => { const _noIconComponents = { DropdownIndicator: () => null, @@ -96,11 +96,9 @@ const Select = ({ options={options} blurInputOnSelect={true} menuPortalTarget={document.body} - styles={ - { - menuPortal: base => ({ ...base, zIndex: 9999 }), - } - } + styles={{ + menuPortal: base => ({ ...base, zIndex: 9999 }), + }} value={value && Array.isArray(value) ? selectedOptions : value} onChange={(selectedOptions, { action }) => { const newSelection = !selectedOptions.length @@ -112,20 +110,6 @@ const Select = ({ ); }; -Select.defaultProps = { - className: '', - closeMenuOnSelect: true, - hideSelectedOptions: false, - isClearable: true, - components: {}, - isDisabled: false, - isMulti: false, - isSearchable: true, - noIcons: false, - menuPlacement: 'auto', - value: [], -}; - Select.propTypes = { className: PropTypes.string, closeMenuOnSelect: PropTypes.bool, diff --git a/platform/ui/src/components/SidePanel/SidePanel.tsx b/platform/ui/src/components/SidePanel/SidePanel.tsx index bdfef63c4f7..c606cfdd1aa 100644 --- a/platform/ui/src/components/SidePanel/SidePanel.tsx +++ b/platform/ui/src/components/SidePanel/SidePanel.tsx @@ -161,7 +161,7 @@ const createBaseStyle = (expandedWidth: number) => { const SidePanel = ({ side, className, - activeTabIndex: activeTabIndexProp, + activeTabIndex: activeTabIndexProp = null, tabs, onOpen, expandedWidth = 248, @@ -400,11 +400,6 @@ const SidePanel = ({ ); }; -SidePanel.defaultProps = { - defaultComponentOpen: null, - activeTabIndex: null, // the default is to close the side panel -}; - SidePanel.propTypes = { side: PropTypes.oneOf(['left', 'right']).isRequired, className: PropTypes.string, diff --git a/platform/ui/src/components/SplitButton/SplitButton.tsx b/platform/ui/src/components/SplitButton/SplitButton.tsx index 6fb7ec5b9c0..fd44f404163 100644 --- a/platform/ui/src/components/SplitButton/SplitButton.tsx +++ b/platform/ui/src/components/SplitButton/SplitButton.tsx @@ -91,9 +91,9 @@ const SplitButton = ({ primary, secondary, items, - renderer, + renderer = null, onInteraction, - Component, + Component = Icon, }) => { const { t } = useTranslation('Buttons'); const [state, setState] = useState({ isHovering: false, isExpanded: false }); @@ -172,7 +172,6 @@ const SplitButton = ({ }; SplitButton.propTypes = { - isToggle: PropTypes.bool, groupId: PropTypes.string.isRequired, primary: PropTypes.object.isRequired, secondary: PropTypes.object.isRequired, @@ -184,11 +183,4 @@ SplitButton.propTypes = { interactionType: PropTypes.oneOf(['action', 'tool', 'toggle']), }; -SplitButton.defaultProps = { - isToggle: false, - renderer: null, - isActive: false, - Component: null, -}; - export default SplitButton; diff --git a/platform/ui/src/components/StudyBrowser/StudyBrowser.tsx b/platform/ui/src/components/StudyBrowser/StudyBrowser.tsx index 89175ccbbad..ddf4478ea39 100644 --- a/platform/ui/src/components/StudyBrowser/StudyBrowser.tsx +++ b/platform/ui/src/components/StudyBrowser/StudyBrowser.tsx @@ -19,15 +19,17 @@ const getTrackedSeries = displaySets => { return trackedSeries; }; +const noop = () => {}; + const StudyBrowser = ({ tabs, activeTabName, expandedStudyInstanceUIDs, - onClickTab, - onClickStudy, - onClickThumbnail, - onDoubleClickThumbnail, - onClickUntrack, + onClickTab = noop, + onClickStudy = noop, + onClickThumbnail = noop, + onDoubleClickThumbnail = noop, + onClickUntrack = noop, activeDisplaySetInstanceUIDs, servicesManager, }: withAppTypes) => { @@ -168,14 +170,4 @@ StudyBrowser.propTypes = { ), }; -const noop = () => {}; - -StudyBrowser.defaultProps = { - onClickTab: noop, - onClickStudy: noop, - onClickThumbnail: noop, - onDoubleClickThumbnail: noop, - onClickUntrack: noop, -}; - export default StudyBrowser; diff --git a/platform/ui/src/components/Table/Table.tsx b/platform/ui/src/components/Table/Table.tsx index ab699f708c5..ecb6bc64e30 100644 --- a/platform/ui/src/components/Table/Table.tsx +++ b/platform/ui/src/components/Table/Table.tsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; -const Table = ({ children, className, fullWidth, style }) => { +const Table = ({ children, className = '', fullWidth = true, style = {} }) => { const classes = { base: 'text-lg text-white', fullWidth: { @@ -21,12 +21,6 @@ const Table = ({ children, className, fullWidth, style }) => { ); }; -Table.defaultProps = { - className: '', - fullWidth: true, - style: {}, -}; - Table.propTypes = { fullWidth: PropTypes.bool, children: PropTypes.node.isRequired, diff --git a/platform/ui/src/components/TableBody/TableBody.tsx b/platform/ui/src/components/TableBody/TableBody.tsx index 95f4fdf1345..e22b27abde3 100644 --- a/platform/ui/src/components/TableBody/TableBody.tsx +++ b/platform/ui/src/components/TableBody/TableBody.tsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; -const TableBody = ({ children, className, style }) => { +const TableBody = ({ children, className = '', style = {} }) => { return (
{ ); }; -TableBody.defaultProps = { - className: '', - style: {}, -}; - TableBody.propTypes = { children: function (props, propName, componentName) { const elements = React.Children.toArray(props.children); diff --git a/platform/ui/src/components/TableCell/TableCell.tsx b/platform/ui/src/components/TableCell/TableCell.tsx index a107eea4661..9a5b5888158 100644 --- a/platform/ui/src/components/TableCell/TableCell.tsx +++ b/platform/ui/src/components/TableCell/TableCell.tsx @@ -4,14 +4,14 @@ import classnames from 'classnames'; const TableCell = ({ children, - className, - colSpan, + className = '', + colSpan = 1, // ignored because we don't want to expose this prop // eslint-disable-next-line react/prop-types cellsNum, - isTableHead, - align, - style, + isTableHead = false, + align = 'left', + style = {}, }) => { const classes = { align: { @@ -42,14 +42,6 @@ const TableCell = ({ ); }; -TableCell.defaultProps = { - align: 'left', - className: '', - colSpan: 1, - isTableHead: false, - style: {}, -}; - TableCell.propTypes = { align: PropTypes.oneOf(['left', 'center', 'right', 'justify']), children: PropTypes.node.isRequired, diff --git a/platform/ui/src/components/TableHead/TableHead.tsx b/platform/ui/src/components/TableHead/TableHead.tsx index b23cbf0a8ce..526c355affe 100644 --- a/platform/ui/src/components/TableHead/TableHead.tsx +++ b/platform/ui/src/components/TableHead/TableHead.tsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; -const TableHead = ({ children, className, style }) => { +const TableHead = ({ children, className = '', style = {} }) => { return (
{ ); }; -TableHead.defaultProps = { - className: '', - style: {}, -}; - TableHead.propTypes = { children: function (props, propName, componentName) { const elements = React.Children.toArray(props.children); diff --git a/platform/ui/src/components/TableRow/TableRow.tsx b/platform/ui/src/components/TableRow/TableRow.tsx index e786b055060..ea66854a80b 100644 --- a/platform/ui/src/components/TableRow/TableRow.tsx +++ b/platform/ui/src/components/TableRow/TableRow.tsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; -const TableRow = ({ children, className, isTableHead, style }) => { +const TableRow = ({ children, className = '', isTableHead = false, style = {} }) => { const childrens = React.Children.map(children, child => { const isValidReactElement = React.isValidElement(child); @@ -21,12 +21,6 @@ const TableRow = ({ children, className, isTableHead, style }) => { ); }; -TableRow.defaultProps = { - isTableHead: false, - className: '', - style: {}, -}; - TableRow.propTypes = { isTableHead: PropTypes.bool, children: function (props, propName, componentName) { diff --git a/platform/ui/src/components/Thumbnail/Thumbnail.tsx b/platform/ui/src/components/Thumbnail/Thumbnail.tsx index c527102d199..3707d1e9911 100644 --- a/platform/ui/src/components/Thumbnail/Thumbnail.tsx +++ b/platform/ui/src/components/Thumbnail/Thumbnail.tsx @@ -19,7 +19,7 @@ const Thumbnail = ({ numInstances, countIcon, messages, - dragData, + dragData = {}, isActive, onClick, onDoubleClick, @@ -130,8 +130,4 @@ Thumbnail.propTypes = { onDoubleClick: PropTypes.func.isRequired, }; -Thumbnail.defaultProps = { - dragData: {}, -}; - export default Thumbnail; diff --git a/platform/ui/src/components/ToolbarButton/ToolbarButton.tsx b/platform/ui/src/components/ToolbarButton/ToolbarButton.tsx index e68f01cf38b..c741c0c7810 100644 --- a/platform/ui/src/components/ToolbarButton/ToolbarButton.tsx +++ b/platform/ui/src/components/ToolbarButton/ToolbarButton.tsx @@ -12,7 +12,7 @@ const ToolbarButton = ({ label, commands, onInteraction, - dropdownContent, + dropdownContent = null, // className, disabled, @@ -65,10 +65,6 @@ const ToolbarButton = ({ ); }; -ToolbarButton.defaultProps = { - dropdownContent: null, -}; - ToolbarButton.propTypes = { /* Influences background/hover styling */ id: PropTypes.string.isRequired, diff --git a/platform/ui/src/components/Tooltip/Tooltip.tsx b/platform/ui/src/components/Tooltip/Tooltip.tsx index 630814cdcc5..5023cca281d 100644 --- a/platform/ui/src/components/Tooltip/Tooltip.tsx +++ b/platform/ui/src/components/Tooltip/Tooltip.tsx @@ -36,15 +36,15 @@ const arrowPositionStyle = { const Tooltip = ({ content, secondaryContent = null, - isSticky, - position, + isSticky = false, + position = 'bottom', className, - tight, + tight = false, children, - isDisabled, + isDisabled = false, tooltipBoxClassName, // time to show/hide the tooltip on mouse over and mouse out events (default: 300ms) - showHideDelay, + showHideDelay = 300, onHide, }) => { const [isActive, setIsActive] = useState(false); @@ -189,14 +189,6 @@ const Tooltip = ({ ); }; -Tooltip.defaultProps = { - tight: false, - isSticky: false, - position: 'bottom', - isDisabled: false, - showHideDelay: 300, -}; - Tooltip.propTypes = { isDisabled: PropTypes.bool, content: PropTypes.oneOfType([PropTypes.node, PropTypes.func]), diff --git a/platform/ui/src/components/TooltipClipboard/TooltipClipboard.tsx b/platform/ui/src/components/TooltipClipboard/TooltipClipboard.tsx index c48755363ed..aea55941aed 100644 --- a/platform/ui/src/components/TooltipClipboard/TooltipClipboard.tsx +++ b/platform/ui/src/components/TooltipClipboard/TooltipClipboard.tsx @@ -9,7 +9,7 @@ const DELAY_TO_SHOW = 1000; const DELAY_TO_HIDE = 10; // it needs at least a little delay to prevent tooltip to suddenly hide const DELAY_TO_HIDE_AFTER_COPYING = 1000; -const TooltipClipboard = ({ children, text }) => { +const TooltipClipboard = ({ children, text = '' }) => { const { t } = useTranslation('TooltipClipboard'); const [isActive, setIsActive] = useState(false); @@ -158,10 +158,6 @@ const TooltipClipboard = ({ children, text }) => { ); }; -TooltipClipboard.defaultProps = { - text: '', -}; - TooltipClipboard.propTypes = { text: PropTypes.string, children: PropTypes.node.isRequired, diff --git a/platform/ui/src/components/UserPreferences/UserPreferences.tsx b/platform/ui/src/components/UserPreferences/UserPreferences.tsx index 923838f4feb..5e61210c8e6 100644 --- a/platform/ui/src/components/UserPreferences/UserPreferences.tsx +++ b/platform/ui/src/components/UserPreferences/UserPreferences.tsx @@ -12,12 +12,12 @@ const UserPreferences = ({ availableLanguages, defaultLanguage, currentLanguage, - disabled, + disabled = false, hotkeyDefinitions, hotkeyDefaults, - onCancel, - onSubmit, - onReset, + onCancel = () => {}, + onSubmit = () => {}, + onReset = () => {}, hotkeysModule, }) => { const { t } = useTranslation('UserPreferencesModal'); @@ -140,12 +140,6 @@ UserPreferences.propTypes = { disabled: PropTypes.bool, hotkeyDefaults: PropTypes.object.isRequired, hotkeyDefinitions: PropTypes.object.isRequired, - languageOptions: PropTypes.arrayOf( - PropTypes.shape({ - label: PropTypes.string.isRequired, - value: PropTypes.any.isRequired, - }) - ), onCancel: PropTypes.func, onSubmit: PropTypes.func, onReset: PropTypes.func, @@ -158,15 +152,4 @@ UserPreferences.propTypes = { }).isRequired, }; -UserPreferences.defaultProps = { - languageOptions: [ - { value: 'ONE', label: 'ONE' }, - { value: 'TWO', label: 'TWO' }, - ], - onCancel: noop, - onSubmit: noop, - onReset: noop, - disabled: false, -}; - export default UserPreferences; diff --git a/platform/ui/src/components/ViewportPane/ViewportPane.tsx b/platform/ui/src/components/ViewportPane/ViewportPane.tsx index ada09c871d4..33fd2174b4c 100644 --- a/platform/ui/src/components/ViewportPane/ViewportPane.tsx +++ b/platform/ui/src/components/ViewportPane/ViewportPane.tsx @@ -13,7 +13,7 @@ function ViewportPane({ isActive, onDrop, onDoubleClick, - onInteraction, + onInteraction = () => {}, acceptDropsFor, }) { let dropElement = null; @@ -108,10 +108,4 @@ ViewportPane.propTypes = { onDoubleClick: PropTypes.func, }; -const noop = () => {}; - -ViewportPane.defaultProps = { - onInteraction: noop, -}; - export default ViewportPane; diff --git a/platform/ui/src/components/WindowLevel/WindowLevel.tsx b/platform/ui/src/components/WindowLevel/WindowLevel.tsx index 7fd1c390f80..53a7258e573 100644 --- a/platform/ui/src/components/WindowLevel/WindowLevel.tsx +++ b/platform/ui/src/components/WindowLevel/WindowLevel.tsx @@ -12,7 +12,6 @@ import { histogramPropType, colormapPropType, } from './types'; -import PanelSection from '../PanelSection'; const convertVOItoVOIRange = voi => { return { @@ -22,21 +21,19 @@ const convertVOItoVOIRange = voi => { }; const WindowLevel = ({ - title, - step, + step = 1, histogram, voi: voiProp, - opacity: opacityProp, - showOpacitySlider, + opacity: opacityProp = 1, + showOpacitySlider = false, colormap, - style, - fillColor, - lineColor, + style = 'polygon', + fillColor = '#3f3f3f', + lineColor = '#707070', containerClassName, onVOIChange, onOpacityChange, }: { - title: string; step: number; histogram: Histogram; voi: VOI; @@ -105,7 +102,6 @@ const WindowLevel = ({ return (
- {/* {title} */}
{range.min} @@ -161,17 +157,7 @@ const WindowLevel = ({ ); }; -WindowLevel.defaultProps = { - step: 1, - opacity: 1, - showOpacitySlider: false, - style: 'polygon', - fillColor: '#3f3f3f', - lineColor: '#707070', -}; - WindowLevel.propTypes = { - title: PropTypes.string, step: PropTypes.number, histogram: histogramPropType.isRequired, voi: voiPropType, diff --git a/platform/ui/src/components/WindowLevel/WindowLevelHistogram.tsx b/platform/ui/src/components/WindowLevel/WindowLevelHistogram.tsx index 987263a96dc..9e116d3583d 100644 --- a/platform/ui/src/components/WindowLevel/WindowLevelHistogram.tsx +++ b/platform/ui/src/components/WindowLevel/WindowLevelHistogram.tsx @@ -154,10 +154,10 @@ const WindowLevelHistogram = ({ range, voiRange, histogram, - colormap, - style, - fillColor, - lineColor, + colormap = DEFAULT_COLORMAP, + style = 'polygon', + fillColor = '#3f3f3f', + lineColor = '#707070', }: { range: Range; voiRange: VOIRange; @@ -216,13 +216,6 @@ const WindowLevelHistogram = ({ ); }; -WindowLevelHistogram.defaultProps = { - colormap: DEFAULT_COLORMAP, - style: 'polygon', - fillColor: '#3f3f3f', - lineColor: '#707070', -}; - WindowLevelHistogram.propTypes = { range: rangePropType.isRequired, voiRange: voiRangePropType.isRequired, diff --git a/platform/ui/src/contextProviders/DialogProvider.tsx b/platform/ui/src/contextProviders/DialogProvider.tsx index b1cef23fe73..9e0667ae703 100644 --- a/platform/ui/src/contextProviders/DialogProvider.tsx +++ b/platform/ui/src/contextProviders/DialogProvider.tsx @@ -17,7 +17,7 @@ const DialogContext = createContext(null); export const useDialog = () => useContext(DialogContext); -const DialogProvider = ({ children, service }) => { +const DialogProvider = ({ children, service = null }) => { const [isDragging, setIsDragging] = useState(false); const [dialogs, setDialogs] = useState([]); const [lastDialogId, setLastDialogId] = useState(null); @@ -300,10 +300,6 @@ export const withDialog = Component => { }; }; -DialogProvider.defaultProps = { - service: null, -}; - DialogProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node, PropTypes.func]) .isRequired, diff --git a/platform/ui/src/contextProviders/ModalComponent.tsx b/platform/ui/src/contextProviders/ModalComponent.tsx index ad7e56d330a..3de9dce3e23 100644 --- a/platform/ui/src/contextProviders/ModalComponent.tsx +++ b/platform/ui/src/contextProviders/ModalComponent.tsx @@ -2,27 +2,17 @@ import PropTypes from 'prop-types'; import React from 'react'; export const ModalComponent = ({ - content, - contentProps, - shouldCloseOnEsc, - isOpen, - closeButton, - title, - customClassName, + content = null, + contentProps = null, + shouldCloseOnEsc = true, + isOpen = true, + closeButton = true, + title = null, + customClassName = '', }) => { return <>; }; -ModalComponent.defaultProps = { - content: null, - contentProps: null, - shouldCloseOnEsc: true, - isOpen: true, - closeButton: true, - title: null, - customClassName: '', -}; - ModalComponent.propTypes = { content: PropTypes.node, contentProps: PropTypes.object, diff --git a/platform/ui/src/contextProviders/ModalProvider.tsx b/platform/ui/src/contextProviders/ModalProvider.tsx index edda2eccc92..19f31982d6c 100644 --- a/platform/ui/src/contextProviders/ModalProvider.tsx +++ b/platform/ui/src/contextProviders/ModalProvider.tsx @@ -21,7 +21,7 @@ export const useModal = () => useContext(ModalContext); * @property {string} [customClassName=null] The custom class to style the modal. */ -const ModalProvider = ({ children, modal: Modal, service }) => { +const ModalProvider = ({ children, modal: Modal, service = null }) => { const DEFAULT_OPTIONS = { content: null, contentProps: null, @@ -125,10 +125,6 @@ export const withModal = Component => { }; }; -ModalProvider.defaultProps = { - service: null, -}; - ModalProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired, modal: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node, PropTypes.func]) diff --git a/platform/ui/src/contextProviders/SnackbarProvider.tsx b/platform/ui/src/contextProviders/SnackbarProvider.tsx index edc6b43a0ea..05ef35042b4 100644 --- a/platform/ui/src/contextProviders/SnackbarProvider.tsx +++ b/platform/ui/src/contextProviders/SnackbarProvider.tsx @@ -8,7 +8,7 @@ const SnackbarContext = createContext(null); export const useSnackbar = () => useContext(SnackbarContext); -const SnackbarProvider = ({ children, service }) => { +const SnackbarProvider = ({ children, service = null }) => { const DEFAULT_OPTIONS = { title: '', message: '', @@ -104,10 +104,6 @@ const SnackbarProvider = ({ children, service }) => { ); }; -SnackbarProvider.defaultProps = { - service: null, -}; - SnackbarProvider.propTypes = { children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node, PropTypes.func]) .isRequired, diff --git a/tsconfig.json b/tsconfig.json index 2c6577bf7f1..33f59b949a4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,6 +20,6 @@ "@ohif/app": ["platform/app/src"] } }, - "include": ["platform/**/src/**/*", "extensions/**/src/**/*", "modes/**/src/**/*"], + "include": ["platform/**/src/**/*", "extensions/**/src/**/*", "modes/**/src/**/*", "custom.d.ts"], "exclude": ["node_modules", "dist"] } From 84eee12403bcf2d913610b38f8c6ef9113286f94 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 24 May 2024 14:36:06 -0400 Subject: [PATCH 09/28] feat: Add Popover and Combobox components --- custom.d.ts | 10 ++ .../PanelStudyBrowserTracking.tsx | 131 +++++++++++------- platform/ui-next/package.json | 2 + .../src/components/Combobox/Combobox.tsx | 56 ++++++++ .../ui-next/src/components/Combobox/index.ts | 3 + .../src/components/Popover/Popover.tsx | 31 +++++ .../ui-next/src/components/Popover/index.ts | 3 + platform/ui-next/src/components/index.ts | 4 +- platform/ui-next/src/index.ts | 14 +- yarn.lock | 44 ++++++ 10 files changed, 249 insertions(+), 49 deletions(-) create mode 100644 custom.d.ts create mode 100644 platform/ui-next/src/components/Combobox/Combobox.tsx create mode 100644 platform/ui-next/src/components/Combobox/index.ts create mode 100644 platform/ui-next/src/components/Popover/Popover.tsx create mode 100644 platform/ui-next/src/components/Popover/index.ts diff --git a/custom.d.ts b/custom.d.ts new file mode 100644 index 00000000000..070d2483d55 --- /dev/null +++ b/custom.d.ts @@ -0,0 +1,10 @@ +declare module '*.svg' { + const content: React.FunctionComponent>; + export default content; +} + +// png +declare module '*.png' { + const value: string; + export default value; +} diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx index 3018bb9b41f..afac91a2783 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx @@ -3,8 +3,8 @@ import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import { utils } from '@ohif/core'; -import { StudyBrowser, useImageViewer, useViewportGrid, Dialog, ButtonEnums } from '@ohif/ui'; -import {Button, buttonVariants} from '@ohif/ui-next'; +import { StudyBrowser, useImageViewer, useViewportGrid, ButtonEnums } from '@ohif/ui'; +import { Button, buttonVariants, Combobox, Dialog } from '@ohif/ui-next'; import { useTrackedMeasurements } from '../../getContextModule'; const { formatDate } = utils; @@ -35,6 +35,7 @@ function PanelStudyBrowserTracking({ // doesn't have to have such an intense shape. This works well enough for now. // Tabs --> Studies --> DisplaySets --> Thumbnails const { StudyInstanceUIDs } = useImageViewer(); + const [showDialog, setShowDialog] = useState(false); const [{ activeViewportId, viewports, isHangingProtocolLayout }, viewportGridService] = useViewportGrid(); const [trackedMeasurements, sendTrackedMeasurementsEvent] = useTrackedMeasurements(); @@ -346,54 +347,90 @@ function PanelStudyBrowserTracking({ }); }; - uiDialogService.create({ - id: 'untrack-series', - centralize: true, - isDraggable: false, - showOverlay: true, - content: Dialog, - contentProps: { - title: 'Untrack Series', - body: () => ( -
-

Are you sure you want to untrack this series?

-

- This action cannot be undone and will delete all your existing measurements. -

-
- ), - actions: [ - { - id: 'cancel', - text: 'Cancel', - type: ButtonEnums.type.secondary, - }, - { - id: 'yes', - text: 'Yes', - type: ButtonEnums.type.primary, - classes: ['untrack-yes-button'], - }, - ], - onClose: () => uiDialogService.dismiss({ id: 'untrack-series' }), - onSubmit: async ({ action }) => { - switch (action.id) { - case 'yes': - onConfirm(); - uiDialogService.dismiss({ id: 'untrack-series' }); - break; - case 'cancel': - uiDialogService.dismiss({ id: 'untrack-series' }); - break; - } - }, - }, - }); + // uiDialogService.create({ + // id: 'untrack-series', + // centralize: true, + // isDraggable: false, + // showOverlay: true, + // content: Dialog, + // contentProps: { + // title: 'Untrack Series', + // body: () => ( + //
+ //

Are you sure you want to untrack this series?

+ //

+ // This action cannot be undone and will delete all your existing measurements. + //

+ //
+ // ), + // actions: [ + // { + // id: 'cancel', + // text: 'Cancel', + // type: ButtonEnums.type.secondary, + // }, + // { + // id: 'yes', + // text: 'Yes', + // type: ButtonEnums.type.primary, + // classes: ['untrack-yes-button'], + // }, + // ], + // onClose: () => uiDialogService.dismiss({ id: 'untrack-series' }), + // onSubmit: async ({ action }) => { + // switch (action.id) { + // case 'yes': + // onConfirm(); + // uiDialogService.dismiss({ id: 'untrack-series' }); + // break; + // case 'cancel': + // uiDialogService.dismiss({ id: 'untrack-series' }); + // break; + // } + // }, + // }, + // }); }; + const frameworks = [ + { + value: 'next.js', + label: 'Next.js', + }, + { + value: 'sveltekit', + label: 'SvelteKit', + }, + { + value: 'nuxt.js', + label: 'Nuxt.js', + }, + { + value: 'remix', + label: 'Remix', + }, + { + value: 'astro', + label: 'Astro', + }, + ]; + return ( - - ) +
+ + +
+ ); return ( + + + + + + + No {placeholder.toLowerCase()} found. + + {data.map(item => ( + { + setValue(currentValue === value ? '' : currentValue); + setOpen(false); + }} + > + + {item.label} + + ))} + + + + + ); +} diff --git a/platform/ui-next/src/components/Combobox/index.ts b/platform/ui-next/src/components/Combobox/index.ts new file mode 100644 index 00000000000..83249c99ddf --- /dev/null +++ b/platform/ui-next/src/components/Combobox/index.ts @@ -0,0 +1,3 @@ +import { Combobox } from './Combobox'; + +export default Combobox; diff --git a/platform/ui-next/src/components/Popover/Popover.tsx b/platform/ui-next/src/components/Popover/Popover.tsx new file mode 100644 index 00000000000..28cdc7ddd31 --- /dev/null +++ b/platform/ui-next/src/components/Popover/Popover.tsx @@ -0,0 +1,31 @@ +import * as React from 'react'; +import * as PopoverPrimitive from '@radix-ui/react-popover'; + +import { cn } from '../../lib/utils'; + +const Popover = PopoverPrimitive.Root; + +const PopoverTrigger = PopoverPrimitive.Trigger; + +const PopoverAnchor = PopoverPrimitive.Anchor; + +const PopoverContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( + + + +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; + +export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }; diff --git a/platform/ui-next/src/components/Popover/index.ts b/platform/ui-next/src/components/Popover/index.ts new file mode 100644 index 00000000000..56fdcd0c04e --- /dev/null +++ b/platform/ui-next/src/components/Popover/index.ts @@ -0,0 +1,3 @@ +import * as Popover from './Popover'; + +export default Popover; diff --git a/platform/ui-next/src/components/index.ts b/platform/ui-next/src/components/index.ts index 9f14e0c249e..009e6561436 100644 --- a/platform/ui-next/src/components/index.ts +++ b/platform/ui-next/src/components/index.ts @@ -2,5 +2,7 @@ import { Button, buttonVariants } from './Button'; import { ThemeWrapper } from './ThemeWrapper'; import Command from './Command'; import Dialog from './Dialog'; +import Combobox from './Combobox'; +import Popover from './Popover'; -export { Button, buttonVariants, ThemeWrapper, Command, Dialog }; +export { Button, buttonVariants, ThemeWrapper, Command, Dialog, Combobox, Popover }; diff --git a/platform/ui-next/src/index.ts b/platform/ui-next/src/index.ts index 8502ec84227..d854ebb245a 100644 --- a/platform/ui-next/src/index.ts +++ b/platform/ui-next/src/index.ts @@ -1,9 +1,21 @@ -import { Button, buttonVariants, ThemeWrapper } from './components'; +import { + Button, + buttonVariants, + ThemeWrapper, + Dialog, + Command, + Popover, + Combobox, +} from './components'; import { useNotification, NotificationProvider } from './contextProviders'; export { // components Button, + Dialog, + Command, + Popover, + Combobox, buttonVariants, ThemeWrapper, // contextProviders diff --git a/yarn.lock b/yarn.lock index 9b5314caafa..478b123cf91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3608,6 +3608,28 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-layout-effect" "1.0.1" +"@radix-ui/react-popover@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.0.7.tgz#23eb7e3327330cb75ec7b4092d685398c1654e3c" + integrity sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-controllable-state" "1.0.1" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + "@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" @@ -3625,6 +3647,23 @@ "@radix-ui/react-use-size" "1.0.1" "@radix-ui/rect" "1.0.1" +"@radix-ui/react-popper@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.3.tgz#24c03f527e7ac348fabf18c89795d85d21b00b42" + integrity sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w== + 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" @@ -14273,6 +14312,11 @@ lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +lucide-react@^0.379.0: + version "0.379.0" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.379.0.tgz#29e34eeffae7fb241b64b09868cbe3ab888ef7cc" + integrity sha512-KcdeVPqmhRldldAAgptb8FjIunM2x2Zy26ZBh1RsEUcdLIvsEmbcw7KpzFYUy5BbpGeWhPu9Z9J5YXfStiXwhg== + magic-string@^0.25.0, magic-string@^0.25.1, magic-string@^0.25.2, magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" From 0edf1d6ec044d14baea9de8d15471afe399588a7 Mon Sep 17 00:00:00 2001 From: Alireza Date: Fri, 24 May 2024 14:40:32 -0400 Subject: [PATCH 10/28] chore: Update Dialog component imports and add untrack series confirmation dialog --- .../PanelStudyBrowserTracking.tsx | 129 ++++++------------ .../src/components/Combobox/Combobox.tsx | 48 ++++--- 2 files changed, 74 insertions(+), 103 deletions(-) diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx index afac91a2783..9a11bbb1f3a 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx @@ -3,8 +3,7 @@ import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import { utils } from '@ohif/core'; -import { StudyBrowser, useImageViewer, useViewportGrid, ButtonEnums } from '@ohif/ui'; -import { Button, buttonVariants, Combobox, Dialog } from '@ohif/ui-next'; +import { StudyBrowser, useImageViewer, useViewportGrid, ButtonEnums, Dialog } from '@ohif/ui'; import { useTrackedMeasurements } from '../../getContextModule'; const { formatDate } = utils; @@ -347,91 +346,51 @@ function PanelStudyBrowserTracking({ }); }; - // uiDialogService.create({ - // id: 'untrack-series', - // centralize: true, - // isDraggable: false, - // showOverlay: true, - // content: Dialog, - // contentProps: { - // title: 'Untrack Series', - // body: () => ( - //
- //

Are you sure you want to untrack this series?

- //

- // This action cannot be undone and will delete all your existing measurements. - //

- //
- // ), - // actions: [ - // { - // id: 'cancel', - // text: 'Cancel', - // type: ButtonEnums.type.secondary, - // }, - // { - // id: 'yes', - // text: 'Yes', - // type: ButtonEnums.type.primary, - // classes: ['untrack-yes-button'], - // }, - // ], - // onClose: () => uiDialogService.dismiss({ id: 'untrack-series' }), - // onSubmit: async ({ action }) => { - // switch (action.id) { - // case 'yes': - // onConfirm(); - // uiDialogService.dismiss({ id: 'untrack-series' }); - // break; - // case 'cancel': - // uiDialogService.dismiss({ id: 'untrack-series' }); - // break; - // } - // }, - // }, - // }); + uiDialogService.create({ + id: 'untrack-series', + centralize: true, + isDraggable: false, + showOverlay: true, + content: Dialog, + contentProps: { + title: 'Untrack Series', + body: () => ( +
+

Are you sure you want to untrack this series?

+

+ This action cannot be undone and will delete all your existing measurements. +

+
+ ), + actions: [ + { + id: 'cancel', + text: 'Cancel', + type: ButtonEnums.type.secondary, + }, + { + id: 'yes', + text: 'Yes', + type: ButtonEnums.type.primary, + classes: ['untrack-yes-button'], + }, + ], + onClose: () => uiDialogService.dismiss({ id: 'untrack-series' }), + onSubmit: async ({ action }) => { + switch (action.id) { + case 'yes': + onConfirm(); + uiDialogService.dismiss({ id: 'untrack-series' }); + break; + case 'cancel': + uiDialogService.dismiss({ id: 'untrack-series' }); + break; + } + }, + }, + }); }; - const frameworks = [ - { - value: 'next.js', - label: 'Next.js', - }, - { - value: 'sveltekit', - label: 'SvelteKit', - }, - { - value: 'nuxt.js', - label: 'Nuxt.js', - }, - { - value: 'remix', - label: 'Remix', - }, - { - value: 'astro', - label: 'Astro', - }, - ]; - - return ( -
- - -
- ); - return ( No {placeholder.toLowerCase()} found. - - {data.map(item => ( - { - setValue(currentValue === value ? '' : currentValue); - setOpen(false); - }} - > - - {item.label} - - ))} - + + + {data.map(item => ( + { + setValue(currentValue === value ? '' : currentValue); + setOpen(false); + }} + > + + {item.label} + + ))} + + From b8d9adf9ffa1d8def000d82c56f6dec0bf56c995 Mon Sep 17 00:00:00 2001 From: IbrahimCSAE Date: Sat, 25 May 2024 16:15:06 -0400 Subject: [PATCH 11/28] fix icons, cypress --- .webpack/webpack.base.js | 32 + babel.config.js | 17 - custom.d.ts | 10 - .../cornerstone-dicom-rt/babel.config.js | 2 +- .../cornerstone-dicom-seg/babel.config.js | 2 +- extensions/dicom-microscopy/babel.config.js | 2 +- modes/microscopy/babel.config.js | 2 +- modes/preclinical-4d/babel.config.js | 2 +- modes/segmentation/.webpack/webpack.prod.js | 32 + modes/segmentation/babel.config.js | 2 +- modes/segmentation/package.json | 2 +- package.json | 2 +- platform/app/cypress.config.ts | 5 +- .../extension/.webpack/webpack.prod.js | 33 + .../cli/templates/extension/babel.config.js | 16 - .../cli/templates/extension/dependencies.json | 2 +- .../templates/mode/.webpack/webpack.prod.js | 32 + platform/cli/templates/mode/babel.config.js | 2 +- platform/cli/templates/mode/dependencies.json | 2 +- platform/ui/src/components/Icon/getIcon.js | 366 +++--- platform/ui/src/components/Svg/getSvg.tsx | 2 +- yarn.lock | 1051 ++++++++++++++++- 22 files changed, 1342 insertions(+), 276 deletions(-) delete mode 100644 custom.d.ts diff --git a/.webpack/webpack.base.js b/.webpack/webpack.base.js index aa48230d163..9d9bf6508ca 100644 --- a/.webpack/webpack.base.js +++ b/.webpack/webpack.base.js @@ -98,6 +98,38 @@ module.exports = (env, argv, { SRC_DIR, ENTRY }) => { module: { noParse: [/(codec)/, /(dicomicc)/], rules: [ + { + test: /\.svg?$/, + oneOf: [ + { + use: [ + { + loader: '@svgr/webpack', + options: { + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + removeViewBox: false + }, + }, + }, + ] + }, + prettier: false, + svgo: true, + titleProp: true, + }, + }, + ], + issuer: { + and: [/\.(ts|tsx|js|jsx|md|mdx)$/], + }, + }, + ], + }, { test: /\.js$/, enforce: 'pre', diff --git a/babel.config.js b/babel.config.js index 9fbd804637a..32cc2d91475 100644 --- a/babel.config.js +++ b/babel.config.js @@ -5,23 +5,6 @@ module.exports = { babelrcRoots: ['./platform/*', './extensions/*', './modes/*'], presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'], plugins: [ - [ - 'inline-react-svg', - { - svgo: { - plugins: [ - { - name: 'preset-default', - params: { - overrides: { - removeViewBox: false, - }, - }, - }, - ], - }, - }, - ], ['@babel/plugin-proposal-class-properties', { loose: true }], '@babel/plugin-transform-typescript', ['@babel/plugin-proposal-private-property-in-object', { loose: true }], diff --git a/custom.d.ts b/custom.d.ts deleted file mode 100644 index 070d2483d55..00000000000 --- a/custom.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -declare module '*.svg' { - const content: React.FunctionComponent>; - export default content; -} - -// png -declare module '*.png' { - const value: string; - export default value; -} diff --git a/extensions/cornerstone-dicom-rt/babel.config.js b/extensions/cornerstone-dicom-rt/babel.config.js index a38ddda2127..e5144255190 100644 --- a/extensions/cornerstone-dicom-rt/babel.config.js +++ b/extensions/cornerstone-dicom-rt/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + plugins: ['@babel/plugin-proposal-class-properties'], env: { test: { presets: [ diff --git a/extensions/cornerstone-dicom-seg/babel.config.js b/extensions/cornerstone-dicom-seg/babel.config.js index a38ddda2127..e5144255190 100644 --- a/extensions/cornerstone-dicom-seg/babel.config.js +++ b/extensions/cornerstone-dicom-seg/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + plugins: ['@babel/plugin-proposal-class-properties'], env: { test: { presets: [ diff --git a/extensions/dicom-microscopy/babel.config.js b/extensions/dicom-microscopy/babel.config.js index a38ddda2127..e5144255190 100644 --- a/extensions/dicom-microscopy/babel.config.js +++ b/extensions/dicom-microscopy/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + plugins: ['@babel/plugin-proposal-class-properties'], env: { test: { presets: [ diff --git a/modes/microscopy/babel.config.js b/modes/microscopy/babel.config.js index a38ddda2127..e5144255190 100644 --- a/modes/microscopy/babel.config.js +++ b/modes/microscopy/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + plugins: ['@babel/plugin-proposal-class-properties'], env: { test: { presets: [ diff --git a/modes/preclinical-4d/babel.config.js b/modes/preclinical-4d/babel.config.js index a38ddda2127..e5144255190 100644 --- a/modes/preclinical-4d/babel.config.js +++ b/modes/preclinical-4d/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + plugins: ['@babel/plugin-proposal-class-properties'], env: { test: { presets: [ diff --git a/modes/segmentation/.webpack/webpack.prod.js b/modes/segmentation/.webpack/webpack.prod.js index 163392a699a..95d7bfea576 100644 --- a/modes/segmentation/.webpack/webpack.prod.js +++ b/modes/segmentation/.webpack/webpack.prod.js @@ -51,6 +51,38 @@ const config = { extensions: ['.js', '.jsx', '.ts', '.tsx'], }, }, + { + test: /\.svg?$/, + oneOf: [ + { + use: [ + { + loader: '@svgr/webpack', + options: { + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + removeViewBox: false + }, + }, + }, + ] + }, + prettier: false, + svgo: true, + titleProp: true, + }, + }, + ], + issuer: { + and: [/\.(ts|tsx|js|jsx|md|mdx)$/], + }, + }, + ], + }, ], }, resolve: { diff --git a/modes/segmentation/babel.config.js b/modes/segmentation/babel.config.js index a38ddda2127..37dbb87cca2 100644 --- a/modes/segmentation/babel.config.js +++ b/modes/segmentation/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + plugins: [ '@babel/plugin-proposal-class-properties'], env: { test: { presets: [ diff --git a/modes/segmentation/package.json b/modes/segmentation/package.json index e96c6b4ae41..134ceef13b8 100644 --- a/modes/segmentation/package.json +++ b/modes/segmentation/package.json @@ -63,7 +63,7 @@ "@babel/preset-typescript": "^7.13.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.0.0-beta.4", - "babel-plugin-inline-react-svg": "^2.0.1", + "@svgr/webpack": "^8.1.0", "clean-webpack-plugin": "^4.0.0", "copy-webpack-plugin": "^10.2.0", "cross-env": "^7.0.3", diff --git a/package.json b/package.json index 0489c3de1d6..2eb937001b6 100644 --- a/package.json +++ b/package.json @@ -82,13 +82,13 @@ "@babel/preset-env": "^7.23.2", "@babel/preset-react": "^7.16.7", "@babel/preset-typescript": "^7.13.0", + "@svgr/webpack": "^8.1.0", "@types/jest": "^27.5.0", "@typescript-eslint/eslint-plugin": "^6.3.0", "@typescript-eslint/parser": "^6.3.0", "autoprefixer": "^10.4.4", "babel-eslint": "9.x", "babel-loader": "^8.2.4", - "babel-plugin-inline-react-svg": "^2.0.2", "babel-plugin-module-resolver": "^5.0.0", "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^9.0.1", diff --git a/platform/app/cypress.config.ts b/platform/app/cypress.config.ts index c575e7c56cd..6244fd1d7e8 100644 --- a/platform/app/cypress.config.ts +++ b/platform/app/cypress.config.ts @@ -26,8 +26,9 @@ export default defineConfig({ waitForAnimations: true, chromeWebSecurity: false, defaultCommandTimeout: 10000, - requestTimeout: 10000, - responseTimeout: 10000, + requestTimeout: 120000, + responseTimeout: 120000, + pageLoadTimeout: 120000, specPattern: 'cypress/integration/**/*.spec.[jt]s', projectId: '4oe38f', video: true, diff --git a/platform/cli/templates/extension/.webpack/webpack.prod.js b/platform/cli/templates/extension/.webpack/webpack.prod.js index 070a723e38d..3a78c481305 100644 --- a/platform/cli/templates/extension/.webpack/webpack.prod.js +++ b/platform/cli/templates/extension/.webpack/webpack.prod.js @@ -43,7 +43,40 @@ const config = { }, ], module: { + rules: [ + { + test: /\.svg?$/, + oneOf: [ + { + use: [ + { + loader: '@svgr/webpack', + options: { + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + removeViewBox: false + }, + }, + }, + ] + }, + prettier: false, + svgo: true, + titleProp: true, + }, + }, + ], + issuer: { + and: [/\.(ts|tsx|js|jsx|md|mdx)$/], + }, + }, + ], + }, { test: /(\.jsx|\.js|\.tsx|\.ts)$/, loader: 'babel-loader', diff --git a/platform/cli/templates/extension/babel.config.js b/platform/cli/templates/extension/babel.config.js index 371f77fcf4f..7cbabaf7870 100644 --- a/platform/cli/templates/extension/babel.config.js +++ b/platform/cli/templates/extension/babel.config.js @@ -1,21 +1,5 @@ -// https://babeljs.io/docs/en/options#babelrcroots -const { extendDefaultPlugins } = require('svgo'); - module.exports = { plugins: [ - [ - 'inline-react-svg', - { - svgo: { - plugins: extendDefaultPlugins([ - { - name: 'removeViewBox', - active: false, - }, - ]), - }, - }, - ], ['@babel/plugin-proposal-class-properties', { loose: true }], '@babel/plugin-transform-typescript', ['@babel/plugin-proposal-private-property-in-object', { loose: true }], diff --git a/platform/cli/templates/extension/dependencies.json b/platform/cli/templates/extension/dependencies.json index 2fe29b8ab13..943bf89c8e0 100644 --- a/platform/cli/templates/extension/dependencies.json +++ b/platform/cli/templates/extension/dependencies.json @@ -47,7 +47,7 @@ "@babel/plugin-proposal-private-property-in-object": "7.21.11", "babel-eslint": "9.x", "babel-loader": "^8.2.4", - "babel-plugin-inline-react-svg": "^2.0.2", + "@svgr/webpack": "^8.1.0", "babel-plugin-module-resolver": "^5.0.0", "clean-webpack-plugin": "^4.0.0", "copy-webpack-plugin": "^10.2.0", diff --git a/platform/cli/templates/mode/.webpack/webpack.prod.js b/platform/cli/templates/mode/.webpack/webpack.prod.js index d0829f3c6a2..9f742f9c9f1 100644 --- a/platform/cli/templates/mode/.webpack/webpack.prod.js +++ b/platform/cli/templates/mode/.webpack/webpack.prod.js @@ -49,6 +49,38 @@ const config = { ], module: { rules: [ + { + test: /\.svg?$/, + oneOf: [ + { + use: [ + { + loader: '@svgr/webpack', + options: { + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + removeViewBox: false + }, + }, + }, + ] + }, + prettier: false, + svgo: true, + titleProp: true, + }, + }, + ], + issuer: { + and: [/\.(ts|tsx|js|jsx|md|mdx)$/], + }, + }, + ], + }, { test: /(\.jsx|\.js|\.tsx|\.ts)$/, loader: 'babel-loader', diff --git a/platform/cli/templates/mode/babel.config.js b/platform/cli/templates/mode/babel.config.js index a38ddda2127..e5144255190 100644 --- a/platform/cli/templates/mode/babel.config.js +++ b/platform/cli/templates/mode/babel.config.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + plugins: ['@babel/plugin-proposal-class-properties'], env: { test: { presets: [ diff --git a/platform/cli/templates/mode/dependencies.json b/platform/cli/templates/mode/dependencies.json index e7600852870..7e2f5de7bc1 100644 --- a/platform/cli/templates/mode/dependencies.json +++ b/platform/cli/templates/mode/dependencies.json @@ -37,7 +37,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", + "@svgr/webpack": "^8.1.0", "clean-webpack-plugin": "^4.0.0", "copy-webpack-plugin": "^10.2.0", "cross-env": "^7.0.3", diff --git a/platform/ui/src/components/Icon/getIcon.js b/platform/ui/src/components/Icon/getIcon.js index b7c8247d918..9a3e24e1f49 100644 --- a/platform/ui/src/components/Icon/getIcon.js +++ b/platform/ui/src/components/Icon/getIcon.js @@ -1,178 +1,179 @@ import React from 'react'; -import arrowDown from './../../assets/icons/arrow-down.svg'; -import arrowLeft from './../../assets/icons/arrow-left.svg'; -import arrowRight from './../../assets/icons/arrow-right.svg'; -import arrowLeftSmall from './../../assets/icons/arrow-left-small.svg'; -import arrowRightSmall from './../../assets/icons/arrow-right-small.svg'; -import calendar from './../../assets/icons/calendar.svg'; -import cancel from './../../assets/icons/cancel.svg'; -import clipboard from './../../assets/icons/clipboard.svg'; -import close from './../../assets/icons/closeIcon.svg'; -import dottedCircle from './../../assets/icons/dotted-circle.svg'; -import circledCheckmark from './../../assets/icons/circled-checkmark.svg'; -import chevronDown from './../../assets/icons/chevron-down.svg'; -import chevronLeft from './../../assets/icons/chevron-left.svg'; -import chevronMenu from './../../assets/icons/chevron-menu.svg'; -import chevronNext from './../../assets/icons/chevron-next.svg'; -import chevronPrev from './../../assets/icons/chevron-prev.svg'; -import chevronRight from './../../assets/icons/chevron-right.svg'; -import contentNext from './../../assets/icons/content-next.svg'; -import contentPrev from './../../assets/icons/content-prev.svg'; -import eyeVisible from './../../assets/icons/eye-visible.svg'; -import eyeHidden from './../../assets/icons/eye-hidden.svg'; -import exclamation from './../../assets/icons/exclamation.svg'; -import externalLink from './../../assets/icons/external-link.svg'; -import groupLayers from './../../assets/icons/group-layers.svg'; -import info from './../../assets/icons/info.svg'; -import infoAction from './../../assets/icons/info-action.svg'; -import infoLink from './../../assets/icons/info-link.svg'; -import launchArrow from './../../assets/icons/launch-arrow.svg'; -import launchInfo from './../../assets/icons/launch-info.svg'; -import link from './../../assets/icons/tool-stack-image-sync.svg'; -import listBullets from './../../assets/icons/list-bullets.svg'; -import lock from './../../assets/icons/lock.svg'; -import logoOhifSmall from './../../assets/icons/logo-ohif-small.svg'; -import logoDarkBackGround from './../../assets/icons/ohif-logo-color-darkbg.svg'; -import magnifier from './../../assets/icons/magnifier.svg'; -import notificationwarningDiamond from './../../assets/icons/notificationwarning-diamond.svg'; -import pencil from './../../assets/icons/pencil.svg'; -import powerOff from './../../assets/icons/power-off.svg'; -import profile from './../../assets/icons/profile.svg'; -import pushLeft from './../../assets/icons/push-left.svg'; -import pushRight from './../../assets/icons/push-right.svg'; -import settings from './../../assets/icons/settings.svg'; -import sidePanelCloseLeft from './../../assets/icons/side-panel-close-left.svg'; -import sidePanelCloseRight from './../../assets/icons/side-panel-close-right.svg'; -import sorting from './../../assets/icons/sorting.svg'; -import sortingActiveDown from './../../assets/icons/sorting-active-down.svg'; -import sortingActiveUp from './../../assets/icons/sorting-active-up.svg'; -import statusAlertWarning from './../../assets/icons/status-alert-warning.svg'; -import statusAlert from './../../assets/icons/status-alert.svg'; -import statusLocked from './../../assets/icons/status-locked.svg'; -import statusTracked from './../../assets/icons/status-tracked.svg'; -import statusUntracked from './../../assets/icons/status-untracked.svg'; -import tracked from './../../assets/icons/tracked.svg'; -import unlink from './../../assets/icons/unlink.svg'; -import checkboxChecked from './../../assets/icons/checkbox-checked.svg'; -import checkboxUnchecked from './../../assets/icons/checkbox-unchecked.svg'; -import iconAlertOutline from './../../assets/icons/icons-alert-outline.svg'; -import iconAlertSmall from './../../assets/icons/icon-alert-small.svg'; -import iconClose from './../../assets/icons/icon-close.svg'; -import iconClearField from './../../assets/icons/icon-clear-field.svg'; -import iconNextInactive from './../../assets/icons/icon-next-inactive.svg'; -import iconNext from './../../assets/icons/icon-next.svg'; -import iconPlay from './../../assets/icons/icon-play.svg'; -import iconPause from './../../assets/icons/icon-pause.svg'; -import iconPrevInactive from './../../assets/icons/icon-prev-inactive.svg'; -import iconPrev from './../../assets/icons/icon-prev.svg'; -import iconSearch from './../../assets/icons/icon-search.svg'; -import iconStatusAlert from './../../assets/icons/icon-status-alert.svg'; -import iconTransferring from './../../assets/icons/icon-transferring.svg'; -import iconUpload from './../../assets/icons/icon-upload.svg'; -import navigationPanelRightHide from './../../assets/icons/navigation-panel-right-hide.svg'; -import navigationPanelRightReveal from './../../assets/icons/navigation-panel-right-reveal.svg'; -import tabLinear from './../../assets/icons/tab-linear.svg'; -import tabPatientInfo from './../../assets/icons/tab-patient-info.svg'; -import tabROIThreshold from './../../assets/icons/tab-roi-threshold.svg'; -import tabSegmentation from './../../assets/icons/tab-segmentation.svg'; -import tabStudies from './../../assets/icons/tab-studies.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'; -import notificationsError from './../../assets/icons/notifications-error.svg'; -import notificationsSuccess from './../../assets/icons/notifications-success.svg'; -import nextArrow from './../../assets/icons/next-arrow.svg'; -import prevArrow from './../../assets/icons/prev-arrow.svg'; -import viewportStatusTracked from './../../assets/icons/viewport-status-tracked.svg'; +import { ReactComponent as arrowDown } from './../../assets/icons/arrow-down.svg'; +import { ReactComponent as arrowLeft } from './../../assets/icons/arrow-left.svg'; +import { ReactComponent as arrowRight } from './../../assets/icons/arrow-right.svg'; +import { ReactComponent as arrowLeftSmall } from './../../assets/icons/arrow-left-small.svg'; +import { ReactComponent as arrowRightSmall } from './../../assets/icons/arrow-right-small.svg'; +import { ReactComponent as calendar } from './../../assets/icons/calendar.svg'; +import { ReactComponent as cancel } from './../../assets/icons/cancel.svg'; +import { ReactComponent as clipboard } from './../../assets/icons/clipboard.svg'; +import { ReactComponent as close } from './../../assets/icons/closeIcon.svg'; +import { ReactComponent as dottedCircle } from './../../assets/icons/dotted-circle.svg'; +import { ReactComponent as circledCheckmark } from './../../assets/icons/circled-checkmark.svg'; +import { ReactComponent as chevronDown } from './../../assets/icons/chevron-down.svg'; +import { ReactComponent as chevronLeft } from './../../assets/icons/chevron-left.svg'; +import { ReactComponent as chevronMenu } from './../../assets/icons/chevron-menu.svg'; +import { ReactComponent as chevronNext } from './../../assets/icons/chevron-next.svg'; +import { ReactComponent as chevronPrev } from './../../assets/icons/chevron-prev.svg'; +import { ReactComponent as chevronRight } from './../../assets/icons/chevron-right.svg'; +import { ReactComponent as contentNext } from './../../assets/icons/content-next.svg'; +import { ReactComponent as contentPrev } from './../../assets/icons/content-prev.svg'; +import { ReactComponent as eyeVisible } from './../../assets/icons/eye-visible.svg'; +import { ReactComponent as eyeHidden } from './../../assets/icons/eye-hidden.svg'; +import { ReactComponent as exclamation } from './../../assets/icons/exclamation.svg'; +import { ReactComponent as externalLink } from './../../assets/icons/external-link.svg'; +import { ReactComponent as groupLayers } from './../../assets/icons/group-layers.svg'; +import { ReactComponent as info } from './../../assets/icons/info.svg'; +import { ReactComponent as infoAction } from './../../assets/icons/info-action.svg'; +import { ReactComponent as infoLink } from './../../assets/icons/info-link.svg'; +import { ReactComponent as launchArrow } from './../../assets/icons/launch-arrow.svg'; +import { ReactComponent as launchInfo } from './../../assets/icons/launch-info.svg'; +import { ReactComponent as link } from './../../assets/icons/tool-stack-image-sync.svg'; +import { ReactComponent as listBullets } from './../../assets/icons/list-bullets.svg'; +import { ReactComponent as lock } from './../../assets/icons/lock.svg'; +import { ReactComponent as logoOhifSmall } from './../../assets/icons/logo-ohif-small.svg'; +import { ReactComponent as logoDarkBackGround } from './../../assets/icons/ohif-logo-color-darkbg.svg'; +import { ReactComponent as magnifier } from './../../assets/icons/magnifier.svg'; +import { ReactComponent as notificationwarningDiamond } from './../../assets/icons/notificationwarning-diamond.svg'; +import { ReactComponent as pencil } from './../../assets/icons/pencil.svg'; +import { ReactComponent as powerOff } from './../../assets/icons/power-off.svg'; +import { ReactComponent as profile } from './../../assets/icons/profile.svg'; +import { ReactComponent as pushLeft } from './../../assets/icons/push-left.svg'; +import { ReactComponent as pushRight } from './../../assets/icons/push-right.svg'; +import { ReactComponent as settings } from './../../assets/icons/settings.svg'; +import { ReactComponent as sidePanelCloseLeft } from './../../assets/icons/side-panel-close-left.svg'; +import { ReactComponent as sidePanelCloseRight } from './../../assets/icons/side-panel-close-right.svg'; +import { ReactComponent as sorting } from './../../assets/icons/sorting.svg'; +import { ReactComponent as sortingActiveDown } from './../../assets/icons/sorting-active-down.svg'; +import { ReactComponent as sortingActiveUp } from './../../assets/icons/sorting-active-up.svg'; +import { ReactComponent as statusAlertWarning } from './../../assets/icons/status-alert-warning.svg'; +import { ReactComponent as statusAlert } from './../../assets/icons/status-alert.svg'; +import { ReactComponent as statusLocked } from './../../assets/icons/status-locked.svg'; +import { ReactComponent as statusTracked } from './../../assets/icons/status-tracked.svg'; +import { ReactComponent as statusUntracked } from './../../assets/icons/status-untracked.svg'; +import { ReactComponent as tracked } from './../../assets/icons/tracked.svg'; +import { ReactComponent as unlink } from './../../assets/icons/unlink.svg'; +import { ReactComponent as checkboxChecked } from './../../assets/icons/checkbox-checked.svg'; +import { ReactComponent as checkboxUnchecked } from './../../assets/icons/checkbox-unchecked.svg'; +import { ReactComponent as iconAlertOutline } from './../../assets/icons/icons-alert-outline.svg'; +import { ReactComponent as iconAlertSmall } from './../../assets/icons/icon-alert-small.svg'; +import { ReactComponent as iconClose } from './../../assets/icons/icon-close.svg'; +import { ReactComponent as iconClearField } from './../../assets/icons/icon-clear-field.svg'; +import { ReactComponent as iconNextInactive } from './../../assets/icons/icon-next-inactive.svg'; +import { ReactComponent as iconNext } from './../../assets/icons/icon-next.svg'; +import { ReactComponent as iconPlay } from './../../assets/icons/icon-play.svg'; +import { ReactComponent as iconPause } from './../../assets/icons/icon-pause.svg'; +import { ReactComponent as iconPrevInactive } from './../../assets/icons/icon-prev-inactive.svg'; +import { ReactComponent as iconPrev } from './../../assets/icons/icon-prev.svg'; +import { ReactComponent as iconSearch } from './../../assets/icons/icon-search.svg'; +import { ReactComponent as iconStatusAlert } from './../../assets/icons/icon-status-alert.svg'; +import { ReactComponent as iconTransferring } from './../../assets/icons/icon-transferring.svg'; +import { ReactComponent as iconUpload } from './../../assets/icons/icon-upload.svg'; +import { ReactComponent as navigationPanelRightHide } from './../../assets/icons/navigation-panel-right-hide.svg'; +import { ReactComponent as navigationPanelRightReveal } from './../../assets/icons/navigation-panel-right-reveal.svg'; +import { ReactComponent as tabLinear } from './../../assets/icons/tab-linear.svg'; +import { ReactComponent as tabPatientInfo } from './../../assets/icons/tab-patient-info.svg'; +import { ReactComponent as tabROIThreshold } from './../../assets/icons/tab-roi-threshold.svg'; +import { ReactComponent as tabSegmentation } from './../../assets/icons/tab-segmentation.svg'; +import { ReactComponent as tabStudies } from './../../assets/icons/tab-studies.svg'; +import { ReactComponent as uiArrowDown } from './../../assets/icons/ui-arrow-down.svg'; +import { ReactComponent as uiArrowUp } from './../../assets/icons/ui-arrow-up.svg'; +import { ReactComponent as uiArrowLeft } from './../../assets/icons/ui-arrow-left.svg'; +import { ReactComponent as uiArrowRight } from './../../assets/icons/ui-arrow-right.svg'; +import { ReactComponent as loadingOHIFMark } from './../../assets/icons/loading-ohif-mark.svg'; +import { ReactComponent as notificationsInfo } from './../../assets/icons/notifications-info.svg'; +import { ReactComponent as notificationsWarning } from './../../assets/icons/notifications-warning.svg'; +import { ReactComponent as notificationsError } from './../../assets/icons/notifications-error.svg'; +import { ReactComponent as notificationsSuccess } from './../../assets/icons/notifications-success.svg'; +import { ReactComponent as nextArrow } from './../../assets/icons/next-arrow.svg'; +import { ReactComponent as prevArrow } from './../../assets/icons/prev-arrow.svg'; +import { ReactComponent as viewportStatusTracked } from './../../assets/icons/viewport-status-tracked.svg'; +import { ReactComponent as toggleDicomOverlay } from './../../assets/icons/tool-toggle-dicom-overlay.svg'; +import { ReactComponent as toolZoom } from './../../assets/icons/tool-zoom.svg'; +import { ReactComponent as toolCapture } from './../../assets/icons/tool-capture.svg'; +import { ReactComponent as toolLayout } from './../../assets/icons/tool-layout-default.svg'; +import { ReactComponent as toolMore } from './../../assets/icons/tool-more-menu.svg'; +import { ReactComponent as toolMove } from './../../assets/icons/tool-move.svg'; +import { ReactComponent as toolWindow } from './../../assets/icons/tool-window-level.svg'; +import { ReactComponent as toolAnnotate } from './../../assets/icons/tool-annotate.svg'; +import { ReactComponent as toolBidirectional } from './../../assets/icons/tool-bidirectional.svg'; +import { ReactComponent as toolElipse } from './../../assets/icons/tool-measure-elipse.svg'; +import { ReactComponent as toolCircle } from './../../assets/icons/tool-circle.svg'; +import { ReactComponent as toolLength } from './../../assets/icons/tool-length.svg'; +import { ReactComponent as toolStackScroll } from './../../assets/icons/tool-stack-scroll.svg'; +import { ReactComponent as toolMagnify } from './../../assets/icons/tool-quick-magnify.svg'; +import { ReactComponent as toolFlipHorizontal } from './../../assets/icons/tool-flip-horizontal.svg'; +import { ReactComponent as toolInvert } from './../../assets/icons/tool-invert.svg'; +import { ReactComponent as toolRotateRight } from './../../assets/icons/tool-rotate-right.svg'; +import { ReactComponent as toolCine } from './../../assets/icons/tool-cine.svg'; +import { ReactComponent as toolCrosshair } from './../../assets/icons/tool-crosshair.svg'; +import { ReactComponent as toolProbe } from './../../assets/icons/focus-frame-target.svg'; +import { ReactComponent as toolAngle } from './../../assets/icons/tool-angle.svg'; +import { ReactComponent as toolReset } from './../../assets/icons/tool-reset.svg'; +import { ReactComponent as toolRectangle } from './../../assets/icons/tool-rectangle.svg'; +import { ReactComponent as toolFusionColor } from './../../assets/icons/tool-fusion-color.svg'; +import { ReactComponent as toolCreateThreshold } from './../../assets/icons/tool-create-threshold.svg'; +import { ReactComponent as toolCalibration } from './../../assets/icons/tool-calibrate.svg'; +import { ReactComponent as toolFreehand } from './../../assets/icons/tool-freehand.svg'; +import { ReactComponent as toolFreehandPolygon } from './../../assets/icons/tool-freehand-polygon.svg'; +import { ReactComponent as toolPolygon } from './../../assets/icons/tool-polygon.svg'; +import { ReactComponent as editPatient } from './../../assets/icons/edit-patient.svg'; +import { ReactComponent as panelGroupMore } from './../../assets/icons/panel-group-more.svg'; +import { ReactComponent as panelGroupOpenClose } from './../../assets/icons/panel-group-open-close.svg'; +import { ReactComponent as rowAdd } from './../../assets/icons/row-add.svg'; +import { ReactComponent as rowEdit } from './../../assets/icons/row-edit.svg'; +import { ReactComponent as rowHidden } from './../../assets/icons/row-hidden.svg'; +import { ReactComponent as rowShown } from './../../assets/icons/row-shown.svg'; +import { ReactComponent as rowLock } from './../../assets/icons/row-lock.svg'; +import { ReactComponent as rowUnlock } from './../../assets/icons/row-unlock.svg'; +import { ReactComponent as iconMPR } from './../../assets/icons/icon-mpr-alt.svg'; +import { ReactComponent as checkboxDefault } from './../../assets/icons/checkbox-default.svg'; +import { ReactComponent as checkboxActive } from './../../assets/icons/checkbox-active.svg'; +import { ReactComponent as referenceLines } from './../../assets/icons/tool-reference-lines.svg'; +import { ReactComponent as chevronDownNew } from './../../assets/icons/icon-disclosure-close.svg'; +import { ReactComponent as chevronLeftNew } from './../../assets/icons/icon-disclosure-open.svg'; +import { ReactComponent as settingsBars } from './../../assets/icons/icon-display-settings.svg'; +import { ReactComponent as iconAdd } from './../../assets/icons/icon-add.svg'; +import { ReactComponent as iconRename } from './../../assets/icons/icon-rename.svg'; +import { ReactComponent as iconDelete } from './../../assets/icons/icon-delete.svg'; +import { ReactComponent as iconMoreMenu } from './../../assets/icons/icon-more-menu.svg'; +import { ReactComponent as iconToolBrush } from './../../assets/icons/tool-seg-brush.svg'; +import { ReactComponent as iconToolEraser } from './../../assets/icons/tool-seg-eraser.svg'; +import { ReactComponent as iconToolScissor } from './../../assets/icons/icon-tool-scissor.svg'; +import { ReactComponent as iconToolShape } from './../../assets/icons/tool-seg-shape.svg'; +import { ReactComponent as iconToolThreshold } from './../../assets/icons/tool-seg-threshold.svg'; +import { ReactComponent as viewportWindowLevel } from './../../assets/icons/viewport-window-level.svg'; +import { ReactComponent as dicomTagBrowser } from './../../assets/icons/tool-dicom-tag-browser.svg'; +import { ReactComponent as iconToolFreehandRoi } from './../../assets/icons/tool-freehand-roi.svg'; +import { ReactComponent as iconToolLivewire } from './../../assets/icons/tool-magnetic-roi.svg'; +import { ReactComponent as iconToolSplineRoi } from './../../assets/icons/tool-spline-roi.svg'; +import { ReactComponent as iconToolUltrasoundBidirectional } from './../../assets/icons/tool-ultrasound-bidirectional.svg'; +import { ReactComponent as iconToolLoupe } from './../../assets/icons/tool-magnify.svg'; +import { ReactComponent as oldTrash } from './../../assets/icons/old-trash.svg'; +import { ReactComponent as oldPlay } from './../../assets/icons/old-play.svg'; +import { ReactComponent as oldStop } from './../../assets/icons/old-stop.svg'; +import { ReactComponent as iconColorLUT } from './../../assets/icons/icon-color-lut.svg'; +import { ReactComponent as iconChevronPatient } from './../../assets/icons/icon-chevron-patient.svg'; +import { ReactComponent as iconPatient } from './../../assets/icons/icon-patient.svg'; +import { ReactComponent as iconSettings } from './../../assets/icons/icon-settings.svg'; +import { ReactComponent as iconToolbarBack } from './../../assets/icons/icon-toolbar-back.svg'; +import { ReactComponent as iconMultiplePatients } from './../../assets/icons/icon-multiple-patients.svg'; +import { ReactComponent as layoutAdvanced3DFourUp } from './../../assets/icons/layout-advanced-3d-four-up.svg'; +import { ReactComponent as layoutAdvanced3DMain } from './../../assets/icons/layout-advanced-3d-main.svg'; +import { ReactComponent as layoutAdvanced3DOnly } from './../../assets/icons/layout-advanced-3d-only.svg'; +import { ReactComponent as layoutAdvanced3DPrimary } from './../../assets/icons/layout-advanced-3d-primary.svg'; +import { ReactComponent as layoutAdvancedAxialPrimary } from './../../assets/icons/layout-advanced-axial-primary.svg'; +import { ReactComponent as layoutAdvancedMPR } from './../../assets/icons/layout-advanced-mpr.svg'; +import { ReactComponent as layoutCommon1x1 } from './../../assets/icons/layout-common-1x1.svg'; +import { ReactComponent as layoutCommon1x2 } from './../../assets/icons/layout-common-1x2.svg'; +import { ReactComponent as layoutCommon2x2 } from './../../assets/icons/layout-common-2x2.svg'; +import { ReactComponent as layoutCommon2x3 } from './../../assets/icons/layout-common-2x3.svg'; +import { ReactComponent as iconToolRotate } from './../../assets/icons/tool-3d-rotate.svg'; +import { ReactComponent as tab4D } from './../../assets/icons/tab-4d.svg'; +import { ReactComponent as investigationalUse } from './../../assets/icons/illustration-investigational-use.svg'; +import { ReactComponent as actionNewDialog } from './../../assets/icons/action-new-dialog.svg'; -/** Tools */ -import toggleDicomOverlay from './../../assets/icons/tool-toggle-dicom-overlay.svg'; -import toolZoom from './../../assets/icons/tool-zoom.svg'; -import toolCapture from './../../assets/icons/tool-capture.svg'; -import toolLayout from './../../assets/icons/tool-layout-default.svg'; -import toolMore from './../../assets/icons/tool-more-menu.svg'; -import toolMove from './../../assets/icons/tool-move.svg'; -import toolWindow from './../../assets/icons/tool-window-level.svg'; -import toolAnnotate from './../../assets/icons/tool-annotate.svg'; -import toolBidirectional from './../../assets/icons/tool-bidirectional.svg'; -import toolElipse from './../../assets/icons/tool-measure-elipse.svg'; -import toolCircle from './../../assets/icons/tool-circle.svg'; -import toolLength from './../../assets/icons/tool-length.svg'; -import toolStackScroll from './../../assets/icons/tool-stack-scroll.svg'; -import toolMagnify from './../../assets/icons/tool-quick-magnify.svg'; -import toolFlipHorizontal from './../../assets/icons/tool-flip-horizontal.svg'; -import toolInvert from './../../assets/icons/tool-invert.svg'; -import toolRotateRight from './../../assets/icons/tool-rotate-right.svg'; -import toolCine from './../../assets/icons/tool-cine.svg'; -import toolCrosshair from './../../assets/icons/tool-crosshair.svg'; -import toolProbe from './../../assets/icons/focus-frame-target.svg'; -import toolAngle from './../../assets/icons/tool-angle.svg'; -import toolReset from './../../assets/icons/tool-reset.svg'; -import toolRectangle from './../../assets/icons/tool-rectangle.svg'; -import toolFusionColor from './../../assets/icons/tool-fusion-color.svg'; -import toolCreateThreshold from './../../assets/icons/tool-create-threshold.svg'; -import toolCalibration from './../../assets/icons/tool-calibrate.svg'; -import toolFreehand from './../../assets/icons/tool-freehand.svg'; -import toolFreehandPolygon from './../../assets/icons/tool-freehand-polygon.svg'; -import toolPolygon from './../../assets/icons/tool-polygon.svg'; -import toolBrush from './../../assets/icons/tool-brush.svg'; -import toolEraser from './../../assets/icons/tool-eraser.svg'; -import toolScissorRect from './../../assets/icons/tool-scissor-rect.svg'; -import toolScissorCircle from './../../assets/icons/tool-scissor-circle.svg'; -import toolPaintFill from './../../assets/icons/tool-paint-fill.svg'; -import editPatient from './../../assets/icons/edit-patient.svg'; -import panelGroupMore from './../../assets/icons/panel-group-more.svg'; -import panelGroupOpenClose from './../../assets/icons/panel-group-open-close.svg'; -import rowAdd from './../../assets/icons/row-add.svg'; -import rowEdit from './../../assets/icons/row-edit.svg'; -import rowHidden from './../../assets/icons/row-hidden.svg'; -import rowShown from './../../assets/icons/row-shown.svg'; -import rowLock from './../../assets/icons/row-lock.svg'; -import rowUnlock from './../../assets/icons/row-unlock.svg'; -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/tool-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'; -import iconMoreMenu from './../../assets/icons/icon-more-menu.svg'; -import iconToolBrush from './../../assets/icons/tool-seg-brush.svg'; -import iconToolEraser from './../../assets/icons/tool-seg-eraser.svg'; -import iconToolScissor from './../../assets/icons/icon-tool-scissor.svg'; -import iconToolShape from './../../assets/icons/tool-seg-shape.svg'; -import iconToolThreshold from './../../assets/icons/tool-seg-threshold.svg'; -import viewportWindowLevel from './../../assets/icons/viewport-window-level.svg'; -import dicomTagBrowser from './../../assets/icons/tool-dicom-tag-browser.svg'; -import iconToolFreehandRoi from './../../assets/icons/tool-freehand-roi.svg'; -import iconToolLivewire from './../../assets/icons/tool-magnetic-roi.svg'; -import iconToolSplineRoi from './../../assets/icons/tool-spline-roi.svg'; -import iconToolUltrasoundBidirectional from './../../assets/icons/tool-ultrasound-bidirectional.svg'; -import iconToolLoupe from './../../assets/icons/tool-magnify.svg'; -/** Old OHIF */ -import oldTrash from './../../assets/icons/old-trash.svg'; -import oldPlay from './../../assets/icons/old-play.svg'; -import oldStop from './../../assets/icons/old-stop.svg'; - -/** ColorLut */ -import iconColorLUT from './../../assets/icons/icon-color-lut.svg'; - -/** New Patient Info Toolbar */ -import iconChevronPatient from './../../assets/icons/icon-chevron-patient.svg'; -import iconPatient from './../../assets/icons/icon-patient.svg'; -import iconSettings from './../../assets/icons/icon-settings.svg'; -import iconToolbarBack from './../../assets/icons/icon-toolbar-back.svg'; -import iconMultiplePatients from './../../assets/icons/icon-multiple-patients.svg'; - -/** Volume Rendering */ import CTAAA from './../../assets/icons/CT-AAA.png'; import CTAAA2 from './../../assets/icons/CT-AAA2.png'; import CTAir from './../../assets/icons/CT-Air.png'; @@ -200,27 +201,6 @@ import MRDefault from './../../assets/icons/MR-Default.png'; import MRMIP from './../../assets/icons/MR-MIP.png'; import MRT2Brain from './../../assets/icons/MR-T2-Brain.png'; import VolumeRendering from './../../assets/icons/VolumeRendering.png'; -import actionNewDialog from './../../assets/icons/action-new-dialog.svg'; - -/** LAYOUT */ - -import layoutAdvanced3DFourUp from './../../assets/icons/layout-advanced-3d-four-up.svg'; -import layoutAdvanced3DMain from './../../assets/icons/layout-advanced-3d-main.svg'; -import layoutAdvanced3DOnly from './../../assets/icons/layout-advanced-3d-only.svg'; -import layoutAdvanced3DPrimary from './../../assets/icons/layout-advanced-3d-primary.svg'; -import layoutAdvancedAxialPrimary from './../../assets/icons/layout-advanced-axial-primary.svg'; -import layoutAdvancedMPR from './../../assets/icons/layout-advanced-mpr.svg'; -import layoutCommon1x1 from './../../assets/icons/layout-common-1x1.svg'; -import layoutCommon1x2 from './../../assets/icons/layout-common-1x2.svg'; -import layoutCommon2x2 from './../../assets/icons/layout-common-2x2.svg'; -import layoutCommon2x3 from './../../assets/icons/layout-common-2x3.svg'; -import iconToolRotate from './../../assets/icons/tool-3d-rotate.svg'; - -// -import tab4D from './../../assets/icons/tab-4d.svg'; - -/** New investigational use */ -import investigationalUse from './../../assets/icons/illustration-investigational-use.svg'; const ICONS = { 'arrow-down': arrowDown, diff --git a/platform/ui/src/components/Svg/getSvg.tsx b/platform/ui/src/components/Svg/getSvg.tsx index 22ebc3b842d..8a1975176ed 100644 --- a/platform/ui/src/components/Svg/getSvg.tsx +++ b/platform/ui/src/components/Svg/getSvg.tsx @@ -1,6 +1,6 @@ import React from 'react'; // Svgs -import logoOhif from './../../assets/svgs/ohif-logo.svg'; +import { ReactComponent as logoOhif } from './../../assets/svgs/ohif-logo.svg'; const SVGS = { 'logo-ohif': logoOhif, diff --git a/yarn.lock b/yarn.lock index 34920750cd8..79913d88b2d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -204,11 +204,24 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" +"@babel/code-frame@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.6.tgz#ab88da19344445c3d8889af2216606d3329f3ef2" + integrity sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA== + dependencies: + "@babel/highlight" "^7.24.6" + picocolors "^1.0.0" + "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.2", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== +"@babel/compat-data@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.6.tgz#b3600217688cabb26e25f8e467019e66d71b7ae2" + integrity sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -252,6 +265,27 @@ json5 "^2.2.3" semver "^6.3.1" +"@babel/core@^7.21.3": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.6.tgz#8650e0e4b03589ebe886c4e4a60398db0a7ec787" + integrity sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helpers" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/traverse" "^7.24.6" + "@babel/types" "^7.24.6" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.23.0", "@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" @@ -262,6 +296,16 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" +"@babel/generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.6.tgz#dfac82a228582a9d30c959fe50ad28951d4737a7" + integrity sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg== + dependencies: + "@babel/types" "^7.24.6" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -269,6 +313,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-annotate-as-pure@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz#517af93abc77924f9b2514c407bbef527fb8938d" + integrity sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" @@ -276,6 +327,13 @@ dependencies: "@babel/types" "^7.22.15" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz#19e9089ee87b0d0928012c83961a8deef4b0223f" + integrity sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" @@ -287,6 +345,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz#4a51d681f7680043d38e212715e2a7b1ad29cb51" + integrity sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg== + dependencies: + "@babel/compat-data" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" @@ -302,6 +371,21 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz#c50b86fa1c4ca9b7a890dc21884f097b6c4b5286" + integrity sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-member-expression-to-functions" "^7.24.6" + "@babel/helper-optimise-call-expression" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" @@ -311,6 +395,15 @@ regexpu-core "^5.3.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz#47d382dec0d49e74ca1b6f7f3b81f5968022a3c8" + integrity sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + regexpu-core "^5.3.1" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.4.4": version "0.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" @@ -349,6 +442,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@babel/helper-environment-visitor@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz#ac7ad5517821641550f6698dd5468f8cef78620d" + integrity sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g== + "@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" @@ -357,6 +455,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.23.0" +"@babel/helper-function-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz#cebdd063386fdb95d511d84b117e51fc68fec0c8" + integrity sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w== + dependencies: + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" + "@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" @@ -364,6 +470,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-hoist-variables@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz#8a7ece8c26756826b6ffcdd0e3cf65de275af7f9" + integrity sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" @@ -371,6 +484,13 @@ dependencies: "@babel/types" "^7.23.0" +"@babel/helper-member-expression-to-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz#86084f3e0e4e2169a134754df3870bc7784db71e" + integrity sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": version "7.24.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" @@ -378,6 +498,13 @@ dependencies: "@babel/types" "^7.24.0" +"@babel/helper-module-imports@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz#65e54ffceed6a268dc4ce11f0433b82cfff57852" + integrity sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" @@ -389,6 +516,17 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" +"@babel/helper-module-transforms@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz#22346ed9df44ce84dee850d7433c5b73fab1fe4e" + integrity sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA== + dependencies: + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-simple-access" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" + "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -396,6 +534,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-optimise-call-expression@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz#f7836e3ccca3dfa02f15d2bc8b794efe75a5256e" + integrity sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" @@ -406,6 +551,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== +"@babel/helper-plugin-utils@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz#fa02a32410a15a6e8f8185bcbf608f10528d2a24" + integrity sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg== + "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" @@ -415,6 +565,15 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" +"@babel/helper-remap-async-to-generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz#c96ceb9846e877d806ce82a1521230ea7e0fc354" + integrity sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-wrap-function" "^7.24.6" + "@babel/helper-replace-supers@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" @@ -424,6 +583,15 @@ "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" +"@babel/helper-replace-supers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz#3ea87405a2986a49ab052d10e540fe036d747c71" + integrity sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ== + dependencies: + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-member-expression-to-functions" "^7.24.6" + "@babel/helper-optimise-call-expression" "^7.24.6" + "@babel/helper-simple-access@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" @@ -431,6 +599,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-simple-access@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz#1d6e04d468bba4fc963b4906f6dac6286cfedff1" + integrity sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" @@ -438,6 +613,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-skip-transparent-expression-wrappers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz#c47e9b33b7ea50d1073e125ebc26661717cb7040" + integrity sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q== + dependencies: + "@babel/types" "^7.24.6" + "@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" @@ -445,21 +627,43 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-split-export-declaration@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz#e830068f7ba8861c53b7421c284da30ae656d7a3" + integrity sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw== + dependencies: + "@babel/types" "^7.24.6" + "@babel/helper-string-parser@^7.23.4": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== +"@babel/helper-string-parser@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz#28583c28b15f2a3339cfafafeaad42f9a0e828df" + integrity sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz#08bb6612b11bdec78f3feed3db196da682454a5e" + integrity sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw== + "@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== +"@babel/helper-validator-option@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz#59d8e81c40b7d9109ab7e74457393442177f460a" + integrity sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ== + "@babel/helper-wrap-function@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" @@ -469,6 +673,15 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" +"@babel/helper-wrap-function@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz#c27af1006e310683fdc76b668a0a1f6003e36217" + integrity sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ== + dependencies: + "@babel/helper-function-name" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" + "@babel/helpers@^7.12.5", "@babel/helpers@^7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" @@ -478,6 +691,14 @@ "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" +"@babel/helpers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.6.tgz#cd124245299e494bd4e00edda0e4ea3545c2c176" + integrity sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA== + dependencies: + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.24.2": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" @@ -488,11 +709,26 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/highlight@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.6.tgz#6d610c1ebd2c6e061cade0153bf69b0590b7b3df" + integrity sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ== + dependencies: + "@babel/helper-validator-identifier" "^7.24.6" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4", "@babel/parser@^7.7.0": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== +"@babel/parser@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.6.tgz#5e030f440c3c6c78d195528c3b688b101a365328" + integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q== + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" @@ -501,6 +737,14 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz#283a74ef365b1e954cda6b2724c678a978215e88" + integrity sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw== + dependencies: + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" @@ -508,6 +752,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz#f9f5ae4d6fb72f5950262cb6f0b2482c3bc684ef" + integrity sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" @@ -517,6 +768,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.24.1" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz#ab9be6edfffa127bd5ec4317c76c5af0f8fc7e6c" + integrity sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/plugin-transform-optional-chaining" "^7.24.6" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" @@ -525,6 +785,14 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz#0faf879249ec622d7f1c42eaebf7d11197401b2c" + integrity sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ== + dependencies: + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-proposal-class-properties@^7.16.7": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" @@ -632,6 +900,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-syntax-import-assertions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz#52521c1c1698fc2dd9cf88f7a4dd86d4d041b9e1" + integrity sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-import-attributes@^7.22.5", "@babel/plugin-syntax-import-attributes@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" @@ -639,6 +914,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-syntax-import-attributes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz#12aba325534129584672920274fefa4dc2d5f68e" + integrity sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -667,6 +949,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-syntax-jsx@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz#bcca2964150437f88f65e3679e3d68762287b9c8" + integrity sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -730,6 +1019,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-syntax-typescript@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz#769daf2982d60308bc83d8936eaecb7582463c87" + integrity sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -745,6 +1041,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-arrow-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz#93607d1ef5b81c70af174aff3532d57216367492" + integrity sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-async-generator-functions@^7.23.2", "@babel/plugin-transform-async-generator-functions@^7.24.3": version "7.24.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" @@ -755,6 +1058,16 @@ "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" +"@babel/plugin-transform-async-generator-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz#fa4a9e5c3a7f60f697ba36587b6c41b04f507d84" + integrity sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA== + dependencies: + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-remap-async-to-generator" "^7.24.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-transform-async-to-generator@^7.22.5", "@babel/plugin-transform-async-to-generator@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" @@ -764,6 +1077,15 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" +"@babel/plugin-transform-async-to-generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz#eb11434b11d73d8c0cf9f71a6f4f1e6ba441df35" + integrity sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g== + dependencies: + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-remap-async-to-generator" "^7.24.6" + "@babel/plugin-transform-block-scoped-functions@^7.22.5", "@babel/plugin-transform-block-scoped-functions@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" @@ -771,6 +1093,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-block-scoped-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz#975555b5bfa9870b1218da536d1528735f1f8c56" + integrity sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-block-scoping@^7.23.0", "@babel/plugin-transform-block-scoping@^7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" @@ -778,6 +1107,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-block-scoping@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz#a03ec8a4591c2b43cf7798bc633e698293fda179" + integrity sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" @@ -786,6 +1122,14 @@ "@babel/helper-create-class-features-plugin" "^7.24.1" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-class-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz#d9f394e97e88ef905d5a1e5e7a16238621b7982e" + integrity sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-class-static-block@^7.22.11", "@babel/plugin-transform-class-static-block@^7.24.4": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" @@ -795,6 +1139,15 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-class-static-block" "^7.14.5" +"@babel/plugin-transform-class-static-block@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz#f43f29286f6f0dca33d18fd5033b817d6c3fa816" + integrity sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-transform-classes@^7.22.15", "@babel/plugin-transform-classes@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" @@ -809,6 +1162,20 @@ "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz#0cc198c02720d4eeb091004843477659c6b37977" + integrity sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.22.5", "@babel/plugin-transform-computed-properties@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" @@ -817,6 +1184,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/template" "^7.24.0" +"@babel/plugin-transform-computed-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz#7a1765c01cdfe59c320d2d0f37a4dc4aecd14df1" + integrity sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/plugin-transform-destructuring@^7.23.0", "@babel/plugin-transform-destructuring@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" @@ -824,6 +1199,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-destructuring@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz#bdd1a6c90ffb2bfd13b6007b13316eeafc97cb53" + integrity sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" @@ -832,6 +1214,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-dotall-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz#5a6b3148ec5f4f274ff48cebea90565087cad126" + integrity sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-duplicate-keys@^7.22.5", "@babel/plugin-transform-duplicate-keys@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" @@ -839,6 +1229,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-duplicate-keys@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz#2716301227cf7cd4fdadcbe4353ce191f8b3dc8a" + integrity sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-dynamic-import@^7.22.11", "@babel/plugin-transform-dynamic-import@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" @@ -847,6 +1244,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-transform-dynamic-import@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz#b477177761d56b15a4ba42a83be31cf72d757acf" + integrity sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator@^7.22.5", "@babel/plugin-transform-exponentiation-operator@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" @@ -855,6 +1260,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-exponentiation-operator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz#011e9e1a429f91b024af572530873ca571f9ef06" + integrity sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-export-namespace-from@^7.22.11", "@babel/plugin-transform-export-namespace-from@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" @@ -863,6 +1276,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-transform-export-namespace-from@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz#b64ded74d9afb3db5d47d93996c4df69f15ac97c" + integrity sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-transform-flow-strip-types@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz#fa8d0a146506ea195da1671d38eed459242b2dcc" @@ -879,6 +1300,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" +"@babel/plugin-transform-for-of@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz#7f31780bd0c582b546372c0c0da9d9d56731e0a2" + integrity sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/plugin-transform-function-name@^7.22.5", "@babel/plugin-transform-function-name@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" @@ -888,6 +1317,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-function-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz#60d1de3f6fd816a3e3bf9538578a64527e1b9c97" + integrity sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q== + dependencies: + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-json-strings@^7.22.11", "@babel/plugin-transform-json-strings@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" @@ -896,6 +1334,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-transform-json-strings@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz#a84639180ea1f9001bb5e6dc01921235ab05ad8b" + integrity sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-transform-literals@^7.22.5", "@babel/plugin-transform-literals@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" @@ -903,6 +1349,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz#7f44f2871d7a4456030b0540858046f0b7bc6b18" + integrity sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-logical-assignment-operators@^7.22.11", "@babel/plugin-transform-logical-assignment-operators@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" @@ -911,6 +1364,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-transform-logical-assignment-operators@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz#9cc7baa5629866566562c159dc1eae7569810f33" + integrity sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-transform-member-expression-literals@^7.22.5", "@babel/plugin-transform-member-expression-literals@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" @@ -918,6 +1379,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-member-expression-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz#5d3681ca201ac6909419cc51ac082a6ba4c5c756" + integrity sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-modules-amd@^7.23.0", "@babel/plugin-transform-modules-amd@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" @@ -926,6 +1394,14 @@ "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-modules-amd@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz#09aeac7acb7913496aaaafdc64f40683e0db7e41" + integrity sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ== + dependencies: + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-modules-commonjs@^7.23.0", "@babel/plugin-transform-modules-commonjs@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" @@ -935,6 +1411,15 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-simple-access" "^7.22.5" +"@babel/plugin-transform-modules-commonjs@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz#1b8269902f25bd91ca6427230d4735ddd1e1283e" + integrity sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw== + dependencies: + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-simple-access" "^7.24.6" + "@babel/plugin-transform-modules-systemjs@^7.23.0", "@babel/plugin-transform-modules-systemjs@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" @@ -945,6 +1430,16 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-validator-identifier" "^7.22.20" +"@babel/plugin-transform-modules-systemjs@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz#c54eb53fe16f9b82d320abd76762d0320e3f9393" + integrity sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w== + dependencies: + "@babel/helper-hoist-variables" "^7.24.6" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" + "@babel/plugin-transform-modules-umd@^7.22.5", "@babel/plugin-transform-modules-umd@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" @@ -953,6 +1448,14 @@ "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-modules-umd@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz#c4ef8b6d4da230b8dc87e81cd66986728952f89b" + integrity sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg== + dependencies: + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" @@ -961,6 +1464,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz#352ee2861ab8705320029f80238cf26a92ba65d5" + integrity sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-new-target@^7.22.5", "@babel/plugin-transform-new-target@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" @@ -968,6 +1479,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-new-target@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz#fc024294714705113720d5e3dc0f9ad7abdbc289" + integrity sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" @@ -976,6 +1494,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz#12b83b3cdfd1cd2066350e36e4fb912ab194545e" + integrity sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-transform-numeric-separator@^7.22.11", "@babel/plugin-transform-numeric-separator@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" @@ -984,6 +1510,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-transform-numeric-separator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz#d9115669cc85aa91fbfb15f88f2226332cf4946a" + integrity sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-transform-object-rest-spread@^7.22.15", "@babel/plugin-transform-object-rest-spread@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" @@ -994,6 +1528,16 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.24.1" +"@babel/plugin-transform-object-rest-spread@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz#68d763f69955f9e599c405c6c876f5be46b47d8a" + integrity sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg== + dependencies: + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.24.6" + "@babel/plugin-transform-object-super@^7.22.5", "@babel/plugin-transform-object-super@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" @@ -1002,6 +1546,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-replace-supers" "^7.24.1" +"@babel/plugin-transform-object-super@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz#9cbe6f995bed343a7ab8daf0416dac057a9c3e27" + integrity sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" + "@babel/plugin-transform-optional-catch-binding@^7.22.11", "@babel/plugin-transform-optional-catch-binding@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" @@ -1010,6 +1562,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-transform-optional-catch-binding@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz#c81e90a971aad898e56f2b75a358e6c4855aeba3" + integrity sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" @@ -1019,6 +1579,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-transform-optional-chaining@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz#3d636b3ed8b5a506f93e4d4675fc95754d7594f5" + integrity sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" @@ -1026,6 +1595,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-parameters@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz#7aee86dfedd2fc0136fecbe6f7649fc02d86ab22" + integrity sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" @@ -1034,6 +1610,14 @@ "@babel/helper-create-class-features-plugin" "^7.24.1" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-private-methods@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz#258e1f859a52ff7b30ad556598224c192defcda7" + integrity sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-private-property-in-object@^7.22.11", "@babel/plugin-transform-private-property-in-object@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" @@ -1044,6 +1628,16 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-transform-private-property-in-object@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz#59ff09a099f62213112cf348e96b6b11957d1f28" + integrity sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-transform-property-literals@^7.22.5", "@babel/plugin-transform-property-literals@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" @@ -1051,6 +1645,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-property-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz#243c4faabe811c405e9443059a58e834bf95dfd1" + integrity sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.18.12": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz#d493a0918b9fdad7540f5afd9b5eb5c52500d18d" @@ -1058,6 +1659,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-react-constant-elements@^7.21.3": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.6.tgz#628c52aecfb2beca1e6383ce2c5b6722df3ff311" + integrity sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-react-display-name@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" @@ -1099,6 +1707,14 @@ "@babel/helper-plugin-utils" "^7.24.0" regenerator-transform "^0.15.2" +"@babel/plugin-transform-regenerator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz#ed10cf0c13619365e15459f88d1b915ac57ffc24" + integrity sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + regenerator-transform "^0.15.2" + "@babel/plugin-transform-reserved-words@^7.22.5", "@babel/plugin-transform-reserved-words@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" @@ -1106,6 +1722,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-reserved-words@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz#9eb16cbf339fcea0a46677716c775afb5ef14245" + integrity sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-runtime@^7.18.6", "@babel/plugin-transform-runtime@^7.23.2": version "7.24.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz#dc58ad4a31810a890550365cc922e1ff5acb5d7f" @@ -1125,6 +1748,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-shorthand-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz#ef734ebccc428d2174c7bb36015d0800faf5381e" + integrity sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-spread@^7.22.5", "@babel/plugin-transform-spread@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" @@ -1133,6 +1763,14 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" +"@babel/plugin-transform-spread@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz#a56cecbd8617675531d1b79f5b755b7613aa0822" + integrity sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/plugin-transform-sticky-regex@^7.22.5", "@babel/plugin-transform-sticky-regex@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" @@ -1140,6 +1778,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-sticky-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz#1a78127731fea87d954bed193840986a38f04327" + integrity sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-template-literals@^7.22.5", "@babel/plugin-transform-template-literals@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" @@ -1147,6 +1792,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-template-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz#aaf2ae157acd0e5c9265dba8ac0a439f8d2a6303" + integrity sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-typeof-symbol@^7.22.5", "@babel/plugin-transform-typeof-symbol@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" @@ -1154,6 +1806,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-typeof-symbol@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz#3d02da23ebcc8f1982ddcd1f2581cf3ee4e58762" + integrity sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-typescript@^7.13.0", "@babel/plugin-transform-typescript@^7.24.1": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15" @@ -1164,6 +1823,16 @@ "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-typescript" "^7.24.1" +"@babel/plugin-transform-typescript@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz#339c6127a783c32e28a5b591e6c666f899b57db0" + integrity sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-typescript" "^7.24.6" + "@babel/plugin-transform-unicode-escapes@^7.22.10", "@babel/plugin-transform-unicode-escapes@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" @@ -1171,6 +1840,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-unicode-escapes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz#c8ddca8fd5bacece837a4e27bd3b7ed64580d1a8" + integrity sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-unicode-property-regex@^7.22.5", "@babel/plugin-transform-unicode-property-regex@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" @@ -1179,6 +1855,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-unicode-property-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz#e66297d5d452db0b0be56515e3d0e10b7d33fb32" + integrity sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-unicode-regex@^7.22.5", "@babel/plugin-transform-unicode-regex@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" @@ -1187,6 +1871,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-unicode-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz#2001e7d87ed709eea145e0b65fb5f93c3c0e225b" + integrity sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-transform-unicode-sets-regex@^7.22.5", "@babel/plugin-transform-unicode-sets-regex@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" @@ -1195,6 +1887,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.24.0" +"@babel/plugin-transform-unicode-sets-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz#f18b7292222aee85c155258ceb345a146a070a46" + integrity sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/preset-env@7.23.2": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.2.tgz#1f22be0ff0e121113260337dbc3e58fafce8d059" @@ -1368,6 +2068,93 @@ core-js-compat "^3.31.0" semver "^6.3.1" +"@babel/preset-env@^7.20.2": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.6.tgz#a5a55bc70e5ff1ed7f872067e2a9d65ff917ad6f" + integrity sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg== + dependencies: + "@babel/compat-data" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.6" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.6" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.24.6" + "@babel/plugin-syntax-import-attributes" "^7.24.6" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.24.6" + "@babel/plugin-transform-async-generator-functions" "^7.24.6" + "@babel/plugin-transform-async-to-generator" "^7.24.6" + "@babel/plugin-transform-block-scoped-functions" "^7.24.6" + "@babel/plugin-transform-block-scoping" "^7.24.6" + "@babel/plugin-transform-class-properties" "^7.24.6" + "@babel/plugin-transform-class-static-block" "^7.24.6" + "@babel/plugin-transform-classes" "^7.24.6" + "@babel/plugin-transform-computed-properties" "^7.24.6" + "@babel/plugin-transform-destructuring" "^7.24.6" + "@babel/plugin-transform-dotall-regex" "^7.24.6" + "@babel/plugin-transform-duplicate-keys" "^7.24.6" + "@babel/plugin-transform-dynamic-import" "^7.24.6" + "@babel/plugin-transform-exponentiation-operator" "^7.24.6" + "@babel/plugin-transform-export-namespace-from" "^7.24.6" + "@babel/plugin-transform-for-of" "^7.24.6" + "@babel/plugin-transform-function-name" "^7.24.6" + "@babel/plugin-transform-json-strings" "^7.24.6" + "@babel/plugin-transform-literals" "^7.24.6" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.6" + "@babel/plugin-transform-member-expression-literals" "^7.24.6" + "@babel/plugin-transform-modules-amd" "^7.24.6" + "@babel/plugin-transform-modules-commonjs" "^7.24.6" + "@babel/plugin-transform-modules-systemjs" "^7.24.6" + "@babel/plugin-transform-modules-umd" "^7.24.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.6" + "@babel/plugin-transform-new-target" "^7.24.6" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.6" + "@babel/plugin-transform-numeric-separator" "^7.24.6" + "@babel/plugin-transform-object-rest-spread" "^7.24.6" + "@babel/plugin-transform-object-super" "^7.24.6" + "@babel/plugin-transform-optional-catch-binding" "^7.24.6" + "@babel/plugin-transform-optional-chaining" "^7.24.6" + "@babel/plugin-transform-parameters" "^7.24.6" + "@babel/plugin-transform-private-methods" "^7.24.6" + "@babel/plugin-transform-private-property-in-object" "^7.24.6" + "@babel/plugin-transform-property-literals" "^7.24.6" + "@babel/plugin-transform-regenerator" "^7.24.6" + "@babel/plugin-transform-reserved-words" "^7.24.6" + "@babel/plugin-transform-shorthand-properties" "^7.24.6" + "@babel/plugin-transform-spread" "^7.24.6" + "@babel/plugin-transform-sticky-regex" "^7.24.6" + "@babel/plugin-transform-template-literals" "^7.24.6" + "@babel/plugin-transform-typeof-symbol" "^7.24.6" + "@babel/plugin-transform-unicode-escapes" "^7.24.6" + "@babel/plugin-transform-unicode-property-regex" "^7.24.6" + "@babel/plugin-transform-unicode-regex" "^7.24.6" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.6" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.31.0" + semver "^6.3.1" + "@babel/preset-flow@^7.22.15": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.1.tgz#da7196c20c2d7dd4e98cfd8b192fe53b5eb6f0bb" @@ -1409,6 +2196,17 @@ "@babel/plugin-transform-modules-commonjs" "^7.24.1" "@babel/plugin-transform-typescript" "^7.24.1" +"@babel/preset-typescript@^7.21.0": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz#27057470fb981c31338bdb897fc3d9aa0cb7dab2" + integrity sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w== + dependencies: + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-syntax-jsx" "^7.24.6" + "@babel/plugin-transform-modules-commonjs" "^7.24.6" + "@babel/plugin-transform-typescript" "^7.24.6" + "@babel/register@^7.22.15": version "7.23.7" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" @@ -1457,6 +2255,15 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" +"@babel/template@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.6.tgz#048c347b2787a6072b24c723664c8d02b67a44f9" + integrity sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw== + dependencies: + "@babel/code-frame" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.24.1", "@babel/traverse@^7.7.0": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" @@ -1473,6 +2280,22 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.6.tgz#0941ec50cdeaeacad0911eb67ae227a4f8424edc" + integrity sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw== + dependencies: + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-hoist-variables" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" @@ -1482,6 +2305,15 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.21.3", "@babel/types@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.6.tgz#ba4e1f59870c10dc2fa95a274ac4feec23b21912" + integrity sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ== + dependencies: + "@babel/helper-string-parser" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -2086,7 +2918,7 @@ "@docusaurus/theme-search-algolia" "2.4.3" "@docusaurus/types" "2.4.3" -"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": +"@docusaurus/react-loadable@5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== @@ -4683,6 +5515,11 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== + "@svgr/babel-plugin-add-jsx-attribute@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" @@ -4693,7 +5530,7 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== -"@svgr/babel-plugin-remove-jsx-attribute@*": +"@svgr/babel-plugin-remove-jsx-attribute@*", "@svgr/babel-plugin-remove-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== @@ -4703,7 +5540,7 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== -"@svgr/babel-plugin-remove-jsx-empty-expression@*": +"@svgr/babel-plugin-remove-jsx-empty-expression@*", "@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== @@ -4713,6 +5550,11 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== + "@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" @@ -4723,6 +5565,11 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== + "@svgr/babel-plugin-svg-dynamic-title@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" @@ -4733,6 +5580,11 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== + "@svgr/babel-plugin-svg-em-dimensions@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" @@ -4743,6 +5595,11 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== + "@svgr/babel-plugin-transform-react-native-svg@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" @@ -4753,6 +5610,11 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== + "@svgr/babel-plugin-transform-svg-component@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" @@ -4763,6 +5625,20 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + "@svgr/babel-preset@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" @@ -4791,6 +5667,17 @@ "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" "@svgr/babel-plugin-transform-svg-component" "^6.5.1" +"@svgr/core@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" + snake-case "^3.0.4" + "@svgr/core@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" @@ -4811,6 +5698,14 @@ camelcase "^6.2.0" cosmiconfig "^7.0.1" +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== + dependencies: + "@babel/types" "^7.21.3" + entities "^4.4.0" + "@svgr/hast-util-to-babel-ast@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" @@ -4826,6 +5721,16 @@ "@babel/types" "^7.20.0" entities "^4.4.0" +"@svgr/plugin-jsx@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== + dependencies: + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" + svg-parser "^2.0.4" + "@svgr/plugin-jsx@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" @@ -4846,6 +5751,15 @@ "@svgr/hast-util-to-babel-ast" "^6.5.1" svg-parser "^2.0.4" +"@svgr/plugin-svgo@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" + integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== + dependencies: + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" + "@svgr/plugin-svgo@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" @@ -4892,6 +5806,20 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" +"@svgr/webpack@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" + integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== + dependencies: + "@babel/core" "^7.21.3" + "@babel/plugin-transform-react-constant-elements" "^7.21.3" + "@babel/preset-env" "^7.20.2" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.21.0" + "@svgr/core" "8.1.0" + "@svgr/plugin-jsx" "8.1.0" + "@svgr/plugin-svgo" "8.1.0" + "@swc/core-darwin-arm64@1.4.13": version "1.4.13" resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.13.tgz#9b1ff4477a9b9eb76275e1dd1af52fbe8d11a0d3" @@ -6761,17 +7689,6 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -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== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/parser" "^7.0.0" - lodash.isplainobject "^4.0.6" - resolve "^2.0.0-next.4" - svgo "^2.8.0" - babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -8241,7 +9158,7 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.2.0, cosmiconfig@^8.3.5: +cosmiconfig@^8.1.3, cosmiconfig@^8.2.0, cosmiconfig@^8.3.5: version "8.3.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== @@ -8433,6 +9350,22 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" @@ -8531,6 +9464,13 @@ csso@^4.0.2, csso@^4.2.0: dependencies: css-tree "^1.1.2" +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -8932,7 +9872,7 @@ deepmerge@^1.5.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== -deepmerge@^4.2.2: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -14172,11 +15112,6 @@ lodash.ismatch@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -14623,6 +15558,16 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" @@ -17964,6 +18909,14 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" +"react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + react-modal@3.11.2: version "3.11.2" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.11.2.tgz#bad911976d4add31aa30dba8a41d11e21c4ac8a4" @@ -18705,7 +19658,7 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4, resolve@^2.0.0-next.5: +resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== @@ -19373,6 +20326,14 @@ smart-buffer@^4.2.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + sockjs@^0.3.21, sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -19446,7 +20407,7 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.2, source-map-js@^1.2.0: +source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== @@ -19757,7 +20718,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -19775,6 +20736,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.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" @@ -19870,7 +20840,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -19898,6 +20868,13 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + 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" @@ -20101,6 +21078,19 @@ svgo@^2.7.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" +svgo@^3.0.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.3.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.0.0" + swc-loader@^0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.6.tgz#bf0cba8eeff34bb19620ead81d1277fefaec6bc8" @@ -21961,7 +22951,7 @@ worker-loader@3.0.8, worker-loader@^3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -21987,6 +22977,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 78fa6c216f68c312ad3b2466a50d65e6799de5a1 Mon Sep 17 00:00:00 2001 From: IbrahimCSAE Date: Sat, 25 May 2024 16:54:29 -0400 Subject: [PATCH 12/28] memory fix --- .circleci/config.yml | 15 +++++++-------- .../app/cypress/integration/volume/MPR.spec.js | 4 ++-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 410cd92dc1b..8bfebe2d054 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -408,9 +408,13 @@ jobs: package-manager: << parameters.package-manager >> post-install: << parameters.post-install >> working-directory: << parameters.working-directory >> + - run: + name: Start Test Server + command: << parameters.start-command >> + background: true - cypress/run-tests: cypress-command: << parameters.cypress-command >> - start-command: << parameters.start-command >> + start-command: '' working-directory: << parameters.working-directory >> workflows: @@ -495,18 +499,13 @@ workflows: - BUILD: filters: branches: - only: /^release\/.*/ - - HOLD_FOR_APPROVAL: - type: approval - requires: - - BUILD + only: release - NPM_PUBLISH: requires: - - HOLD_FOR_APPROVAL + - BUILD - DOCKER_RELEASE_PUBLISH: requires: - NPM_PUBLISH - ### # Unit and E2E tests have already run for PR_CHECKS # Re-running should not gain us any confidence here diff --git a/platform/app/cypress/integration/volume/MPR.spec.js b/platform/app/cypress/integration/volume/MPR.spec.js index 2ef026ec90d..9929519e5b2 100644 --- a/platform/app/cypress/integration/volume/MPR.spec.js +++ b/platform/app/cypress/integration/volume/MPR.spec.js @@ -78,8 +78,8 @@ describe('OHIF MPR', () => { const fOR = Object.keys(fORMap)[0]; const fORAnnotation = fORMap[fOR]; - // it should have crosshairs as the only key - expect(Object.keys(fORAnnotation)).to.have.length(1); + // it should have crosshairs as the only key (references lines make this 2) + expect(Object.keys(fORAnnotation)).to.have.length(2); const crosshairs = fORAnnotation.Crosshairs; From bbd7f48f9531fb3acbc709cebcf81266a0114c1d Mon Sep 17 00:00:00 2001 From: IbrahimCSAE Date: Sat, 25 May 2024 17:12:01 -0400 Subject: [PATCH 13/28] undo --- .circleci/config.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8bfebe2d054..88ea0bcd364 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -408,13 +408,9 @@ jobs: package-manager: << parameters.package-manager >> post-install: << parameters.post-install >> working-directory: << parameters.working-directory >> - - run: - name: Start Test Server - command: << parameters.start-command >> - background: true - cypress/run-tests: cypress-command: << parameters.cypress-command >> - start-command: '' + start-command: << parameters.start-command >> working-directory: << parameters.working-directory >> workflows: From 1fbf5cedc1f9ac70d5f9add50b447c74ee1495e8 Mon Sep 17 00:00:00 2001 From: IbrahimCSAE Date: Sat, 25 May 2024 22:09:21 -0400 Subject: [PATCH 14/28] undo --- .circleci/config.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 88ea0bcd364..410cd92dc1b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -495,13 +495,18 @@ workflows: - BUILD: filters: branches: - only: release - - NPM_PUBLISH: + only: /^release\/.*/ + - HOLD_FOR_APPROVAL: + type: approval requires: - BUILD + - NPM_PUBLISH: + requires: + - HOLD_FOR_APPROVAL - DOCKER_RELEASE_PUBLISH: requires: - NPM_PUBLISH + ### # Unit and E2E tests have already run for PR_CHECKS # Re-running should not gain us any confidence here From 17b780db4a7f1d233c5228fff2b1e09687545d40 Mon Sep 17 00:00:00 2001 From: IbrahimCSAE Date: Sun, 26 May 2024 12:28:48 -0400 Subject: [PATCH 15/28] update react-resize-detector --- extensions/cornerstone/package.json | 2 +- .../src/Viewport/OHIFCornerstoneViewport.tsx | 16 +++-- .../src/DicomMicroscopyViewport.tsx | 24 +++---- extensions/dicom-microscopy/src/index.tsx | 22 +++++-- .../src/services/MicroscopyService.ts | 9 +++ platform/app/package.json | 2 +- platform/app/src/components/ViewportGrid.tsx | 66 +++---------------- yarn.lock | 8 +-- 8 files changed, 60 insertions(+), 89 deletions(-) diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 4e0d66ee080..365088b7abd 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -48,7 +48,7 @@ "prop-types": "^15.6.2", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-resize-detector": "^6.7.6" + "react-resize-detector": "^10.0.1" }, "devDependencies": { "lodash": "^4.17.21" diff --git a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx index e2c05999ad7..12e2b5625e1 100644 --- a/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx +++ b/extensions/cornerstone/src/Viewport/OHIFCornerstoneViewport.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useRef, useCallback, useState } from 'react'; -import ReactResizeDetector from 'react-resize-detector'; +import { useResizeDetector } from 'react-resize-detector'; import PropTypes from 'prop-types'; import * as cs3DTools from '@cornerstonejs/tools'; import { @@ -140,7 +140,7 @@ const OHIFCornerstoneViewport = React.memo((props: withAppTypes) => { const [scrollbarHeight, setScrollbarHeight] = useState('100px'); const [enabledVPElement, setEnabledVPElement] = useState(null); - const elementRef = useRef(); + const elementRef = useRef() as React.MutableRefObject; const [appConfig] = useAppConfig(); const { @@ -417,19 +417,21 @@ const OHIFCornerstoneViewport = React.memo((props: withAppTypes) => { }); }, [displaySets, viewportId, viewportActionCornersService, servicesManager, commandsManager]); + const { ref: resizeRef } = useResizeDetector({ + onResize, + }); return (
-
e.preventDefault()} onMouseDown={e => e.preventDefault()} - ref={elementRef} + ref={el => { + resizeRef.current = el; + elementRef.current = el; + }} >
any; constructor(props: any) { super(props); const { microscopyService } = this.props.servicesManager.services; this.microscopyService = microscopyService; - this.debouncedResize = debounce(() => { - if (this.viewer) { - this.viewer.resize(); - } - }, 100); } static propTypes = { @@ -54,6 +46,7 @@ class DicomMicroscopyViewport extends Component { servicesManager: PropTypes.object, extensionManager: PropTypes.object, commandsManager: PropTypes.object, + resizeRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({ current: PropTypes.any })]), }; /** @@ -298,13 +291,16 @@ class DicomMicroscopyViewport extends Component {
- {ReactResizeDetector && ( - - )} {this.state.error ? (

{JSON.stringify(this.state.error)}

) : ( -
+
{ + this.container.current = ref; + this.props.resizeRef.current = ref; + }} + /> )} {this.state.isLoaded ? null : ( @@ -312,10 +308,6 @@ class DicomMicroscopyViewport extends Component {
); } - - onWindowResize = () => { - this.debouncedResize(); - }; } export default DicomMicroscopyViewport; diff --git a/extensions/dicom-microscopy/src/index.tsx b/extensions/dicom-microscopy/src/index.tsx index ff36bde1482..55b6004c7ba 100644 --- a/extensions/dicom-microscopy/src/index.tsx +++ b/extensions/dicom-microscopy/src/index.tsx @@ -8,6 +8,8 @@ import { useViewportGrid } from '@ohif/ui'; import getDicomMicroscopySopClassHandler from './DicomMicroscopySopClassHandler'; import getDicomMicroscopySRSopClassHandler from './DicomMicroscopySRSopClassHandler'; import MicroscopyService from './services/MicroscopyService'; +import { useResizeDetector } from 'react-resize-detector'; +import debounce from 'lodash.debounce'; const Component = React.lazy(() => { return import('./DicomMicroscopyViewport'); @@ -59,14 +61,25 @@ const extension: Types.Extensions.Extension = { const [viewportGrid, viewportGridService] = useViewportGrid(); const { activeViewportId } = viewportGrid; - // a unique identifier based on the contents of displaySets. - // since we changed our rendering pipeline and if there is no - // element size change nor viewportId change we won't re-render - // we need a way to force re-rendering when displaySets change. const displaySetsKey = useMemo(() => { return props.displaySets.map(ds => ds.displaySetInstanceUID).join('-'); }, [props.displaySets]); + const onResize = debounce(() => { + const { microscopyService } = servicesManager.services; + const managedViewer = microscopyService.getAllManagedViewers(); + + if (managedViewer && managedViewer.length > 0) { + managedViewer[0].viewer.resize(); + } + }, 100); + + const { ref: resizeRef } = useResizeDetector({ + onResize, + handleHeight: true, + handleWidth: true, + }); + return ( ); diff --git a/extensions/dicom-microscopy/src/services/MicroscopyService.ts b/extensions/dicom-microscopy/src/services/MicroscopyService.ts index 4068ad91024..be91cb6f2d1 100644 --- a/extensions/dicom-microscopy/src/services/MicroscopyService.ts +++ b/extensions/dicom-microscopy/src/services/MicroscopyService.ts @@ -628,6 +628,15 @@ export default class MicroscopyService extends PubSubService { setROIStyle(uid, styleOptions) { this.managedViewers.forEach(mv => mv.setROIStyle(uid, styleOptions)); } + + /** + * Get all managed viewers + * + * @returns {Array} managedViewers + */ + getAllManagedViewers() { + return Array.from(this.managedViewers); + } } export { EVENTS }; diff --git a/platform/app/package.json b/platform/app/package.json index d2b3d1e92cd..f4941c6cf73 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -92,7 +92,7 @@ "react-dom": "^18.3.1", "react-dropzone": "^10.1.7", "react-i18next": "^12.2.2", - "react-resize-detector": "^9.1.0", + "react-resize-detector": "^10.0.1", "react-router": "^6.8.1", "react-router-dom": "^6.8.1" }, diff --git a/platform/app/src/components/ViewportGrid.tsx b/platform/app/src/components/ViewportGrid.tsx index 0556544c54b..807b2072dac 100644 --- a/platform/app/src/components/ViewportGrid.tsx +++ b/platform/app/src/components/ViewportGrid.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useCallback, useRef, useState } from 'react'; -import ReactResizeDetector from 'react-resize-detector'; +import { useResizeDetector } from 'react-resize-detector'; import PropTypes from 'prop-types'; import { Types, MeasurementService } from '@ohif/core'; import { ViewportGrid, ViewportPane, useViewportGrid } from '@ohif/ui'; @@ -14,10 +14,16 @@ function ViewerViewportGrid(props: withAppTypes) { const { layout, activeViewportId, viewports, isHangingProtocolLayout } = viewportGrid; const { numCols, numRows } = layout; - const elementRef = useRef(null); + const { ref: resizeRef } = useResizeDetector({ + refreshMode: 'debounce', + refreshRate: 7, + refreshOptions: { leading: true }, + onResize: () => { + viewportGridService.setViewportGridSizeChanged(); + }, + }); const layoutHash = useRef(null); - // TODO -> Need some way of selecting which displaySets hit the viewports. const { displaySetService, measurementService, hangingProtocolService, uiNotificationService } = servicesManager.services; @@ -198,50 +204,6 @@ function ViewerViewportGrid(props: withAppTypes) { }; }, [viewports]); - /** - const onDoubleClick = viewportId => { - // TODO -> Disabled for now. - // onNewImage on a cornerstone viewport is firing setDisplaySetsForViewport. - // Which it really really shouldn't. We need a larger fix for jump to - // measurements and all cornerstone "imageIndex" state to fix this. - if (cachedLayout) { - viewportGridService.set({ - numCols: cachedLayout.numCols, - numRows: cachedLayout.numRows, - activeViewportId: cachedLayout.activeViewportId, - viewports: cachedLayout.viewports, - cachedLayout: null, - }); - - return; - } - - const cachedViewports = viewports.map(viewport => { - return { - displaySetInstanceUID: viewport.displaySetInstanceUID, - }; - }); - - viewportGridService.set({ - numCols: 1, - numRows: 1, - activeViewportId: 0, - viewports: [ - { - displaySetInstanceUID: viewports[viewportId].displaySetInstanceUID, - imageIndex: undefined, - }, - ], - cachedLayout: { - numCols, - numRows, - viewports: cachedViewports, - activeViewportId: viewportId, - }, - }); - }; - */ - const onDropHandler = (viewportId, { displaySetInstanceUID }) => { const updatedViewports = _getUpdatedViewports(viewportId, displaySetInstanceUID); viewportGridService.setDisplaySetsForViewports(updatedViewports); @@ -363,21 +325,13 @@ function ViewerViewportGrid(props: withAppTypes) { return (
- { - viewportGridService.setViewportGridSizeChanged(); - }} - targetRef={elementRef.current} - /> {getViewportPanes()}
diff --git a/yarn.lock b/yarn.lock index 79913d88b2d..af80881a3de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18976,10 +18976,10 @@ react-remove-scroll@2.5.5: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-resize-detector@^9.1.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-9.1.1.tgz#ce13cf55b9b09d9978fc51e0c87bb3639704921e" - integrity sha512-siLzop7i4xIvZIACE/PHTvRegA8QRCEt0TfmvJ/qCIFQJ4U+3NuYcF8tNDmDWxfIn+X1eNCyY2rauH4KRxge8w== +react-resize-detector@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-10.0.1.tgz#ae9a8c5b6b93c4c11e03b3eb87e57fd7b62f1020" + integrity sha512-CR2EdP83ycGlWkhhrd6+hhZVhPJO4xnzClFCTBXlODVTHOgiDJQu77sBt67J7P3gfU4ec/kOuf2c5EcyTUNLXQ== dependencies: lodash "^4.17.21" From f1e706f6a783fb7721cd22ed16f8d6c97600b534 Mon Sep 17 00:00:00 2001 From: Ibrahim <93064150+IbrahimCSAE@users.noreply.github.com> Date: Sun, 26 May 2024 20:24:55 -0400 Subject: [PATCH 16/28] xlarge resource class --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 410cd92dc1b..740622b8e2f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -397,6 +397,7 @@ jobs: default: '' description: Directory containing package.json type: string + resource_class: xlarge steps: - cypress/install: cypress-cache-key: << parameters.cypress-cache-key >> From fcd838f384e052023eba24b5ac91a7db699a3f0e Mon Sep 17 00:00:00 2001 From: Ibrahim <93064150+IbrahimCSAE@users.noreply.github.com> Date: Sun, 26 May 2024 20:39:45 -0400 Subject: [PATCH 17/28] Try large since xlarge is unavailable --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 740622b8e2f..1b996649775 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -397,7 +397,7 @@ jobs: default: '' description: Directory containing package.json type: string - resource_class: xlarge + resource_class: large steps: - cypress/install: cypress-cache-key: << parameters.cypress-cache-key >> From 9ff458284a4c629a3b66844efd4bc64746fa71e6 Mon Sep 17 00:00:00 2001 From: IbrahimCSAE Date: Sun, 26 May 2024 21:06:41 -0400 Subject: [PATCH 18/28] check for undefined --- platform/app/src/routes/Mode/Mode.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/platform/app/src/routes/Mode/Mode.tsx b/platform/app/src/routes/Mode/Mode.tsx index 783356ddaf6..07b1512dfdd 100644 --- a/platform/app/src/routes/Mode/Mode.tsx +++ b/platform/app/src/routes/Mode/Mode.tsx @@ -306,9 +306,11 @@ export default function ModeRoute({ } // The unsubscriptions must occur before the extension onModeExit // in order to prevent exceptions during cleanup caused by spurious events - unsubscriptions.forEach(unsub => { - unsub(); - }); + if (unsubscriptions) { + unsubscriptions.forEach(unsub => { + unsub(); + }); + } // The extension manager must be called after the mode, this is // expected to cleanup the state to a standard setup. extensionManager.onModeExit(); From 315467f1ad1454cde7a1017193159bc585f0850d Mon Sep 17 00:00:00 2001 From: IbrahimCSAE Date: Mon, 27 May 2024 11:23:55 -0400 Subject: [PATCH 19/28] date picker replacement --- platform/app/package.json | 1 + platform/ui-next/package.json | 2 + .../src/components/Calendar/Calendar.tsx | 60 +++ .../ui-next/src/components/Calendar/index.tsx | 3 + .../src/components/DateRange/DateRange.tsx | 84 ++++ .../ui-next/src/components/DateRange/index.ts | 3 + platform/ui-next/src/components/index.ts | 4 +- platform/ui-next/src/index.ts | 4 + .../InputDateRange/InputDateRange.tsx | 8 +- yarn.lock | 475 ++++++++---------- 10 files changed, 388 insertions(+), 256 deletions(-) create mode 100644 platform/ui-next/src/components/Calendar/Calendar.tsx create mode 100644 platform/ui-next/src/components/Calendar/index.tsx create mode 100644 platform/ui-next/src/components/DateRange/DateRange.tsx create mode 100644 platform/ui-next/src/components/DateRange/index.ts diff --git a/platform/app/package.json b/platform/app/package.json index f4941c6cf73..638bd1c3539 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -72,6 +72,7 @@ "@ohif/mode-test": "3.9.0-beta.21", "@ohif/ui": "3.9.0-beta.21", "@ohif/ui-next": "3.9.0-beta.14", + "@svgr/webpack": "^8.1.0", "@types/react": "^18.3.3", "classnames": "^2.3.2", "core-js": "^3.16.1", diff --git a/platform/ui-next/package.json b/platform/ui-next/package.json index c35f3e604c9..d719307fa19 100644 --- a/platform/ui-next/package.json +++ b/platform/ui-next/package.json @@ -20,10 +20,12 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.0.0", + "date-fns": "^3.6.0", "framer-motion": "6.2.4", "lucide-react": "^0.379.0", "next-themes": "^0.3.0", "react": "^18.3.1", + "react-day-picker": "^8.10.1", "sonner": "^1.4.41", "tailwind-merge": "^2.3.0", "tailwindcss": "3.2.4", diff --git a/platform/ui-next/src/components/Calendar/Calendar.tsx b/platform/ui-next/src/components/Calendar/Calendar.tsx new file mode 100644 index 00000000000..62d1e344845 --- /dev/null +++ b/platform/ui-next/src/components/Calendar/Calendar.tsx @@ -0,0 +1,60 @@ +'use client'; + +import * as React from 'react'; +import { ChevronLeft, ChevronRight } from 'lucide-react'; +import { DayPicker } from 'react-day-picker'; + +import { cn } from '../../lib/utils'; + +import { buttonVariants } from '../Button'; + +export type CalendarProps = React.ComponentProps; + +function Calendar({ className, classNames, showOutsideDays = true, ...props }: CalendarProps) { + return ( + , + IconRight: ({ ...props }) => , + }} + {...props} + /> + ); +} +Calendar.displayName = 'Calendar'; + +export { Calendar }; diff --git a/platform/ui-next/src/components/Calendar/index.tsx b/platform/ui-next/src/components/Calendar/index.tsx new file mode 100644 index 00000000000..110b553c2bb --- /dev/null +++ b/platform/ui-next/src/components/Calendar/index.tsx @@ -0,0 +1,3 @@ +import { Calendar } from './Calendar'; + +export default Calendar; diff --git a/platform/ui-next/src/components/DateRange/DateRange.tsx b/platform/ui-next/src/components/DateRange/DateRange.tsx new file mode 100644 index 00000000000..3cbaa78c206 --- /dev/null +++ b/platform/ui-next/src/components/DateRange/DateRange.tsx @@ -0,0 +1,84 @@ +"use client" + +import * as React from "react" +import { format, parse } from "date-fns" +import { Calendar as CalendarIcon } from "lucide-react" +import { DateRange } from "react-day-picker" + +import { cn } from '../../lib/utils'; +import { Button } from "../Button" +import Calendar from "../Calendar" +import Popover from "../Popover" + +export type DatePickerWithRangeProps = { + id: string, + /** YYYYMMDD (19921022) */ + startDate: string, + /** YYYYMMDD (19921022) */ + endDate: string, + /** Callback that received { startDate: string(YYYYMMDD), endDate: string(YYYYMMDD)} */ + onChange: (value: { startDate: string, endDate: string }) => void, +}; + +export function DatePickerWithRange({ + className, + id, + startDate, + endDate, + onChange, + ...props +}: React.HTMLAttributes & DatePickerWithRangeProps) { + + const [date, setDate] = React.useState({ + from: startDate ? parse(startDate, "yyyyMMdd", new Date()) : undefined, + to: endDate ? parse(endDate, "yyyyMMdd", new Date()) : undefined, + }) + + React.useEffect(() => { + onChange({ + startDate: date?.from ? format(date.from, "yyyyMMdd") : "", + endDate: date?.to ? format(date.to, "yyyyMMdd") : "", + }) + }, [date]) + + return ( +
+ + + + + + + + +
+ ) +} diff --git a/platform/ui-next/src/components/DateRange/index.ts b/platform/ui-next/src/components/DateRange/index.ts new file mode 100644 index 00000000000..dd77e0cb035 --- /dev/null +++ b/platform/ui-next/src/components/DateRange/index.ts @@ -0,0 +1,3 @@ +import { DatePickerWithRange } from "./DateRange"; + +export default DatePickerWithRange; diff --git a/platform/ui-next/src/components/index.ts b/platform/ui-next/src/components/index.ts index 009e6561436..e0c1cbe767a 100644 --- a/platform/ui-next/src/components/index.ts +++ b/platform/ui-next/src/components/index.ts @@ -4,5 +4,7 @@ import Command from './Command'; import Dialog from './Dialog'; import Combobox from './Combobox'; import Popover from './Popover'; +import Calendar from './Calendar'; +import DatePickerWithRange from './DateRange'; -export { Button, buttonVariants, ThemeWrapper, Command, Dialog, Combobox, Popover }; +export { Button, buttonVariants, ThemeWrapper, Command, Dialog, Combobox, Popover, Calendar, DatePickerWithRange}; diff --git a/platform/ui-next/src/index.ts b/platform/ui-next/src/index.ts index d854ebb245a..63fbdcf76e0 100644 --- a/platform/ui-next/src/index.ts +++ b/platform/ui-next/src/index.ts @@ -6,6 +6,8 @@ import { Command, Popover, Combobox, + Calendar, + DatePickerWithRange, } from './components'; import { useNotification, NotificationProvider } from './contextProviders'; @@ -18,6 +20,8 @@ export { Combobox, buttonVariants, ThemeWrapper, + Calendar, + DatePickerWithRange, // contextProviders NotificationProvider, useNotification, diff --git a/platform/ui/src/components/InputDateRange/InputDateRange.tsx b/platform/ui/src/components/InputDateRange/InputDateRange.tsx index 212b6f48ead..6d85ace3a95 100644 --- a/platform/ui/src/components/InputDateRange/InputDateRange.tsx +++ b/platform/ui/src/components/InputDateRange/InputDateRange.tsx @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import DateRange from '../DateRange'; +import { DatePickerWithRange } from '@ohif/ui-next'; import InputLabelWrapper from '../InputLabelWrapper'; const InputDateRange = ({ @@ -26,9 +26,11 @@ const InputDateRange = ({ isSortable={isSortable} sortDirection={sortDirection} onLabelClick={onClickHandler} + className='xl:min-w-[284px]' > -
- + Date: Mon, 27 May 2024 11:46:15 -0400 Subject: [PATCH 20/28] fix small bug --- .../src/components/DateRange/DateRange.tsx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/platform/ui-next/src/components/DateRange/DateRange.tsx b/platform/ui-next/src/components/DateRange/DateRange.tsx index 3cbaa78c206..87010473773 100644 --- a/platform/ui-next/src/components/DateRange/DateRange.tsx +++ b/platform/ui-next/src/components/DateRange/DateRange.tsx @@ -34,12 +34,22 @@ export function DatePickerWithRange({ to: endDate ? parse(endDate, "yyyyMMdd", new Date()) : undefined, }) + const handleSelect = (selectedDate: DateRange | undefined) => { + setDate(selectedDate); + if (selectedDate) { + onChange({ + startDate: selectedDate.from ? format(selectedDate.from, "yyyyMMdd") : "", + endDate: selectedDate.to ? format(selectedDate.to, "yyyyMMdd") : "", + }); + } + } + React.useEffect(() => { - onChange({ - startDate: date?.from ? format(date.from, "yyyyMMdd") : "", - endDate: date?.to ? format(date.to, "yyyyMMdd") : "", + setDate({ + from: startDate ? parse(startDate, "yyyyMMdd", new Date()) : undefined, + to: endDate ? parse(endDate, "yyyyMMdd", new Date()) : undefined, }) - }, [date]) + } , [startDate, endDate]) return (
@@ -74,7 +84,7 @@ export function DatePickerWithRange({ mode="range" defaultMonth={date?.from} selected={date} - onSelect={setDate} + onSelect={handleSelect} numberOfMonths={2} /> From 0b1867b790a65cf595b77cc1d7daa7af4d7557e5 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 27 May 2024 11:52:23 -0400 Subject: [PATCH 21/28] update --- .circleci/config.yml | 6 + .../PanelStudyBrowserTracking.tsx | 3 +- platform/app/cypress.config.ts | 6 +- platform/app/src/App.tsx | 2 +- yarn.lock | 506 +++++++++--------- 5 files changed, 267 insertions(+), 256 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1b996649775..699a9d30a2a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -42,6 +42,7 @@ jobs: ### UNIT_TESTS: <<: *defaults + resource_class: large steps: # Update yarn - run: yarn -v @@ -98,6 +99,7 @@ jobs: ### BUILD: <<: *defaults + resource_class: large steps: # Checkout code and ALL Git Tags - checkout @@ -146,6 +148,7 @@ jobs: # just to make sure later on we can publish them BUILD_PACKAGES_QUICK: <<: *defaults + resource_class: large steps: - run: yarn -v # Checkout code and ALL Git Tags @@ -195,6 +198,7 @@ jobs: ### NPM_PUBLISH: <<: *defaults + resource_class: large steps: - run: yarn -v # Checkout code and ALL Git Tags @@ -264,6 +268,7 @@ jobs: DOCKER_RELEASE_PUBLISH: <<: *defaults + resource_class: large steps: - attach_workspace: at: ~/repo @@ -293,6 +298,7 @@ jobs: DOCKER_BETA_PUBLISH: <<: *defaults + resource_class: large steps: - attach_workspace: at: ~/repo diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx index 9a11bbb1f3a..d6f6e084488 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.tsx @@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import { utils } from '@ohif/core'; -import { StudyBrowser, useImageViewer, useViewportGrid, ButtonEnums, Dialog } from '@ohif/ui'; +import { StudyBrowser, useImageViewer, useViewportGrid, Dialog, ButtonEnums } from '@ohif/ui'; import { useTrackedMeasurements } from '../../getContextModule'; const { formatDate } = utils; @@ -34,7 +34,6 @@ function PanelStudyBrowserTracking({ // doesn't have to have such an intense shape. This works well enough for now. // Tabs --> Studies --> DisplaySets --> Thumbnails const { StudyInstanceUIDs } = useImageViewer(); - const [showDialog, setShowDialog] = useState(false); const [{ activeViewportId, viewports, isHangingProtocolLayout }, viewportGridService] = useViewportGrid(); const [trackedMeasurements, sendTrackedMeasurementsEvent] = useTrackedMeasurements(); diff --git a/platform/app/cypress.config.ts b/platform/app/cypress.config.ts index 6244fd1d7e8..648c42889d8 100644 --- a/platform/app/cypress.config.ts +++ b/platform/app/cypress.config.ts @@ -26,9 +26,9 @@ export default defineConfig({ waitForAnimations: true, chromeWebSecurity: false, defaultCommandTimeout: 10000, - requestTimeout: 120000, - responseTimeout: 120000, - pageLoadTimeout: 120000, + requestTimeout: 10000, + responseTimeout: 10000, + pageLoadTimeout: 10000, specPattern: 'cypress/integration/**/*.spec.[jt]s', projectId: '4oe38f', video: true, diff --git a/platform/app/src/App.tsx b/platform/app/src/App.tsx index 2f512d9474f..463f4dd5803 100644 --- a/platform/app/src/App.tsx +++ b/platform/app/src/App.tsx @@ -111,7 +111,7 @@ function App({ [ViewportGridProvider, { service: viewportGridService }], [ViewportDialogProvider, { service: uiViewportDialogService }], [CineProvider, { service: cineService }], - [NotificationProvider, { service: uiNotificationService }], + // [NotificationProvider, { service: uiNotificationService }], [SnackbarProvider, { service: uiNotificationService }], [DialogProvider, { service: uiDialogService }], [ModalProvider, { service: uiModalService, modal: Modal }], diff --git a/yarn.lock b/yarn.lock index eaf22399a0e..99217aa2223 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2239,14 +2239,7 @@ core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/runtime@7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" - integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@7.22.11", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== @@ -2925,7 +2918,7 @@ "@docusaurus/theme-search-algolia" "2.4.3" "@docusaurus/types" "2.4.3" -"@docusaurus/react-loadable@5.5.2": +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== @@ -4282,6 +4275,27 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" + integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + "@polka/url@^1.0.0-next.24": version "1.0.0-next.25" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" @@ -4796,10 +4810,10 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== "@sinonjs/commons@^3.0.0": version "3.0.1" @@ -5887,12 +5901,12 @@ dependencies: "@swc/counter" "^0.1.3" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: - defer-to-connect "^1.0.1" + defer-to-connect "^2.0.1" "@testing-library/react-hooks@^3.2.1": version "3.7.0" @@ -6142,6 +6156,11 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + "@types/http-errors@*": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" @@ -7578,6 +7597,11 @@ axobject-query@^3.2.1: dependencies: dequal "^2.0.3" +b4a@^1.6.4: + version "1.6.6" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== + babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" @@ -7786,6 +7810,39 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +bare-events@^2.0.0, bare-events@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078" + integrity sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ== + +bare-fs@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402" + integrity sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw== + dependencies: + bare-events "^2.0.0" + bare-path "^2.0.0" + bare-stream "^1.0.0" + +bare-os@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da" + integrity sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg== + +bare-path@^2.0.0, bare-path@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== + dependencies: + bare-os "^2.1.0" + +bare-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4" + integrity sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ== + dependencies: + streamx "^2.16.1" + base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" @@ -7897,7 +7954,7 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== @@ -8131,18 +8188,23 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" + "@types/http-cache-semantics" "^4.0.2" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.3" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" cachedir@^2.3.0: version "2.4.0" @@ -8574,13 +8636,6 @@ clone-deep@4.0.1, clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -8735,32 +8790,7 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9" - integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@^7.0.0, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: +commander@8.3.0, commander@9.2.0, commander@^2.20.0, commander@^5.1.0, commander@^6.2.1, commander@^7.0.0, commander@^7.2.0, commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -8848,6 +8878,14 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + configstore@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" @@ -9795,13 +9833,6 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -9873,10 +9904,10 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" @@ -10030,7 +10061,7 @@ detect-indent@^6.1.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-libc@^2.0.0, detect-libc@^2.0.1: +detect-libc@^2.0.0, detect-libc@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== @@ -10412,11 +10443,6 @@ dotenv@~16.3.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.2.tgz#3cb611ce5a63002dbabf7c281bc331f69d28f03f" integrity sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ== -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - duplexer@^0.1.1, duplexer@^0.1.2, duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -11497,6 +11523,11 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" @@ -11916,6 +11947,11 @@ fork-ts-checker-webpack-plugin@^8.0.0: semver "^7.3.5" tapable "^2.2.1" +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -12181,7 +12217,7 @@ get-stream@6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -12309,14 +12345,7 @@ gl-matrix@3.4.3, gl-matrix@^3.1.0, gl-matrix@^3.4.3: resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== -glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1, glob-parent@^6.0.2: +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@^6.0.1, glob-parent@^6.0.2, glob-parent@~5.1.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -12509,22 +12538,27 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" +got@^12.1.0: + version "12.6.1" + resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" + integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" @@ -12891,7 +12925,7 @@ htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.4.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -12965,6 +12999,14 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + https-proxy-agent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" @@ -13200,7 +13242,7 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.2, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -14521,11 +14563,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -14632,13 +14669,6 @@ jsprim@^2.0.2: object.assign "^4.1.4" object.values "^1.1.6" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -15187,15 +15217,10 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^10.2.0: version "10.2.0" @@ -15959,16 +15984,16 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -16332,10 +16357,10 @@ node-addon-api@^3.2.1: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== node-dir@^0.1.17: version "0.1.17" @@ -16488,16 +16513,16 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +normalize-url@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== + npm-bundled@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" @@ -16636,14 +16661,7 @@ nprogress@^0.2.0: resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.1: +nth-check@^1.0.2, nth-check@^2.0.1, nth-check@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== @@ -16999,10 +17017,10 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-finally@^1.0.0: version "1.0.0" @@ -17151,15 +17169,15 @@ p-waterfall@2.1.1: dependencies: p-reduce "^2.0.0" -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== +package-json@^6.3.0, package-json@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" + integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" + got "^12.1.0" + registry-auth-token "^5.0.1" + registry-url "^6.0.0" + semver "^7.3.7" pacote@^15.2.0: version "15.2.0" @@ -18202,11 +18220,6 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -18375,6 +18388,11 @@ property-information@^5.0.0, property-information@^5.3.0: dependencies: xtend "^4.0.0" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + protocol-buffers-schema@^3.3.1: version "3.6.0" resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz#77bc75a48b2ff142c1ad5b5b90c94cd0fa2efd03" @@ -18542,6 +18560,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + queue@6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" @@ -18615,7 +18638,7 @@ rbush@^3.0.1: dependencies: quickselect "^2.0.0" -rc@1.2.8, rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: +rc@1.2.8, rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -18896,14 +18919,6 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" -"react-loadable@npm:@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== - dependencies: - "@types/react" "*" - prop-types "^15.6.2" - react-modal@3.11.2: version "3.11.2" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.11.2.tgz#bad911976d4add31aa30dba8a41d11e21c4ac8a4" @@ -19405,12 +19420,12 @@ registry-auth-token@3.3.2: rc "^1.1.6" safe-buffer "^5.0.1" -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== +registry-auth-token@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== dependencies: - rc "1.2.8" + "@pnpm/npm-conf" "^2.1.0" registry-url@3.1.0: version "3.1.0" @@ -19419,13 +19434,6 @@ registry-url@3.1.0: dependencies: rc "^1.0.1" -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - registry-url@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" @@ -19592,6 +19600,11 @@ reselect@^4.1.7: resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -19664,12 +19677,12 @@ resolve@~1.19.0: is-core-module "^2.1.0" path-parse "^1.0.6" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== dependencies: - lowercase-keys "^1.0.0" + lowercase-keys "^3.0.0" restore-cursor@^2.0.0: version "2.0.0" @@ -19972,7 +19985,7 @@ semver@7.5.3: dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -20132,18 +20145,18 @@ shallowequal@^1.1.0: resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== -sharp@^0.30.7: - version "0.30.7" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c" - integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig== +sharp@^0.30.7, sharp@^0.32.6: + version "0.32.6" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" + integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== dependencies: color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" + detect-libc "^2.0.2" + node-addon-api "^6.1.0" prebuild-install "^7.1.1" - semver "^7.3.7" + semver "^7.5.4" simple-get "^4.0.1" - tar-fs "^2.1.1" + tar-fs "^3.0.4" tunnel-agent "^0.6.0" shebang-command@^1.2.0: @@ -20669,6 +20682,16 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== +streamx@^2.15.0, streamx@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" + integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + optionalDependencies: + bare-events "^2.2.0" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -20697,7 +20720,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -20715,15 +20738,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.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" @@ -20819,7 +20833,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -20847,13 +20861,6 @@ strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - 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" @@ -21190,6 +21197,17 @@ tar-fs@^2.0.0, tar-fs@^2.1.1: pump "^3.0.0" tar-stream "^2.1.4" +tar-fs@^3.0.4: + version "3.0.6" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== + dependencies: + pump "^3.0.0" + tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^2.1.1" + bare-path "^2.1.0" + tar-stream@^2.1.4, tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -21201,6 +21219,15 @@ tar-stream@^2.1.4, tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^3.1.5: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + tar@6.1.11: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -21382,11 +21409,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -21438,20 +21460,20 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +trim-newlines@^3.0.0, trim-newlines@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-5.0.0.tgz#fbe350dc9d5fe15e80793b86c09bc7436a3da383" + integrity sha512-kstfs+hgwmdsOadN3KgA+C68wPJwnZq4DN6WMDCvZapDWEF34W2TyPKN2v2+BJnZgIz5QOfxFeldLyYvdgRAwg== 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" integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== +trim@0.0.1, trim@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-1.0.1.tgz#68e78f6178ccab9687a610752f4f5e5a7022ee8c" + integrity sha512-3JVP2YVqITUisXblCDq/Bi4P9457G/sdEamInkyvCsjbTcXLXIiG7XCb4kGMFWh6JGXesS3TKxOPtrncN/xe8w== trough@^1.0.0: version "1.0.5" @@ -22005,13 +22027,6 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -22922,7 +22937,7 @@ worker-loader@3.0.8, worker-loader@^3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -22948,15 +22963,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From fabf768fbf4bd32179ccdcb6a2ff9b21c7aba695 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 27 May 2024 12:21:22 -0400 Subject: [PATCH 22/28] chore: Remove unused imports and update calendar caption layout --- .../src/components/Calendar/Calendar.tsx | 13 +- .../src/components/Combobox/Combobox.tsx | 2 - .../src/components/DateRange/DateRange.tsx | 138 +++++++++++------- 3 files changed, 90 insertions(+), 63 deletions(-) diff --git a/platform/ui-next/src/components/Calendar/Calendar.tsx b/platform/ui-next/src/components/Calendar/Calendar.tsx index 62d1e344845..cbdb6fd4313 100644 --- a/platform/ui-next/src/components/Calendar/Calendar.tsx +++ b/platform/ui-next/src/components/Calendar/Calendar.tsx @@ -1,5 +1,3 @@ -'use client'; - import * as React from 'react'; import { ChevronLeft, ChevronRight } from 'lucide-react'; import { DayPicker } from 'react-day-picker'; @@ -15,18 +13,21 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }: C void, + onChange: (value: { startDate: string; endDate: string }) => void; }; export function DatePickerWithRange({ @@ -28,67 +24,99 @@ export function DatePickerWithRange({ onChange, ...props }: React.HTMLAttributes & DatePickerWithRangeProps) { + const [start, setStart] = React.useState( + startDate ? parse(startDate, 'yyyyMMdd', new Date()) : undefined + ); + const [end, setEnd] = React.useState( + endDate ? parse(endDate, 'yyyyMMdd', new Date()) : undefined + ); + const [openEnd, setOpenEnd] = React.useState(false); - const [date, setDate] = React.useState({ - from: startDate ? parse(startDate, "yyyyMMdd", new Date()) : undefined, - to: endDate ? parse(endDate, "yyyyMMdd", new Date()) : undefined, - }) + const handleStartSelect = (selectedDate: Date | undefined) => { + setStart(selectedDate); + setOpenEnd(true); + onChange({ + startDate: selectedDate ? format(selectedDate, 'yyyyMMdd') : '', + endDate: end ? format(end, 'yyyyMMdd') : '', + }); + }; - const handleSelect = (selectedDate: DateRange | undefined) => { - setDate(selectedDate); - if (selectedDate) { - onChange({ - startDate: selectedDate.from ? format(selectedDate.from, "yyyyMMdd") : "", - endDate: selectedDate.to ? format(selectedDate.to, "yyyyMMdd") : "", - }); - } - } + const handleEndSelect = (selectedDate: Date | undefined) => { + setEnd(selectedDate); + setOpenEnd(false); + onChange({ + startDate: start ? format(start, 'yyyyMMdd') : '', + endDate: selectedDate ? format(selectedDate, 'yyyyMMdd') : '', + }); + }; React.useEffect(() => { - setDate({ - from: startDate ? parse(startDate, "yyyyMMdd", new Date()) : undefined, - to: endDate ? parse(endDate, "yyyyMMdd", new Date()) : undefined, - }) - } , [startDate, endDate]) + setStart(startDate ? parse(startDate, 'yyyyMMdd', new Date()) : undefined); + setEnd(endDate ? parse(endDate, 'yyyyMMdd', new Date()) : undefined); + }, [startDate, endDate]); return ( -
+
+ + + + + + + + + - +
- ) + ); } From bb7071b9aa394580364789b17de62060d817ff54 Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 27 May 2024 12:42:28 -0400 Subject: [PATCH 23/28] chore: Update calendar caption layout and remove unused imports --- platform/ui-next/src/components/Calendar/Calendar.tsx | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/platform/ui-next/src/components/Calendar/Calendar.tsx b/platform/ui-next/src/components/Calendar/Calendar.tsx index cbdb6fd4313..c511ef8dc9b 100644 --- a/platform/ui-next/src/components/Calendar/Calendar.tsx +++ b/platform/ui-next/src/components/Calendar/Calendar.tsx @@ -13,21 +13,16 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }: C Date: Mon, 27 May 2024 12:45:38 -0400 Subject: [PATCH 24/28] chore: Update calendar caption layout and remove unused imports --- platform/ui-next/src/components/Calendar/Calendar.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/platform/ui-next/src/components/Calendar/Calendar.tsx b/platform/ui-next/src/components/Calendar/Calendar.tsx index c511ef8dc9b..b564cbb3fd3 100644 --- a/platform/ui-next/src/components/Calendar/Calendar.tsx +++ b/platform/ui-next/src/components/Calendar/Calendar.tsx @@ -16,10 +16,15 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }: C captionLayout="dropdown" fromYear={1945} toYear={2024} + labels={{ + labelMonthDropdown: () => undefined, + labelYearDropdown: () => undefined, + }} classNames={{ months: 'flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0', month: 'space-y-4', caption: 'flex justify-between items-center px-2', + caption_dropdowns: 'flex space-x-2', caption_label: 'hidden', nav: 'space-x-1 flex items-center', From 29fa404b09d325d8db78da26164165f93f67a51d Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 27 May 2024 12:48:41 -0400 Subject: [PATCH 25/28] feat: Update defaultMonth in DatePickerWithRange component --- platform/ui-next/src/components/DateRange/DateRange.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/ui-next/src/components/DateRange/DateRange.tsx b/platform/ui-next/src/components/DateRange/DateRange.tsx index d0fa31d28d8..32e76303dd2 100644 --- a/platform/ui-next/src/components/DateRange/DateRange.tsx +++ b/platform/ui-next/src/components/DateRange/DateRange.tsx @@ -110,7 +110,7 @@ export function DatePickerWithRange({ Date: Mon, 27 May 2024 13:09:17 -0400 Subject: [PATCH 26/28] fix: Update DatePickerWithRange component to handle input changes --- .../src/components/DateRange/DateRange.tsx | 121 +++++++++++------- 1 file changed, 75 insertions(+), 46 deletions(-) diff --git a/platform/ui-next/src/components/DateRange/DateRange.tsx b/platform/ui-next/src/components/DateRange/DateRange.tsx index 32e76303dd2..bb65ae5fe8d 100644 --- a/platform/ui-next/src/components/DateRange/DateRange.tsx +++ b/platform/ui-next/src/components/DateRange/DateRange.tsx @@ -1,8 +1,7 @@ import * as React from 'react'; -import { format, parse } from 'date-fns'; +import { format, parse, isValid } from 'date-fns'; import { Calendar as CalendarIcon } from 'lucide-react'; import { cn } from '../../lib/utils'; -import { Button } from '../Button'; import Calendar from '../Calendar'; import Popover from '../Popover'; @@ -24,52 +23,78 @@ export function DatePickerWithRange({ onChange, ...props }: React.HTMLAttributes & DatePickerWithRangeProps) { - const [start, setStart] = React.useState( - startDate ? parse(startDate, 'yyyyMMdd', new Date()) : undefined + const [start, setStart] = React.useState( + startDate ? format(parse(startDate, 'yyyyMMdd', new Date()), 'yyyy-MM-dd') : '' ); - const [end, setEnd] = React.useState( - endDate ? parse(endDate, 'yyyyMMdd', new Date()) : undefined + const [end, setEnd] = React.useState( + endDate ? format(parse(endDate, 'yyyyMMdd', new Date()), 'yyyy-MM-dd') : '' ); const [openEnd, setOpenEnd] = React.useState(false); const handleStartSelect = (selectedDate: Date | undefined) => { - setStart(selectedDate); - setOpenEnd(true); - onChange({ - startDate: selectedDate ? format(selectedDate, 'yyyyMMdd') : '', - endDate: end ? format(end, 'yyyyMMdd') : '', - }); + if (selectedDate) { + const formattedDate = format(selectedDate, 'yyyy-MM-dd'); + setStart(formattedDate); + setOpenEnd(true); + onChange({ + startDate: format(selectedDate, 'yyyyMMdd'), + endDate: end.replace(/-/g, ''), + }); + } }; const handleEndSelect = (selectedDate: Date | undefined) => { - setEnd(selectedDate); - setOpenEnd(false); - onChange({ - startDate: start ? format(start, 'yyyyMMdd') : '', - endDate: selectedDate ? format(selectedDate, 'yyyyMMdd') : '', - }); + if (selectedDate) { + const formattedDate = format(selectedDate, 'yyyy-MM-dd'); + setEnd(formattedDate); + setOpenEnd(false); + onChange({ + startDate: start.replace(/-/g, ''), + endDate: format(selectedDate, 'yyyyMMdd'), + }); + } + }; + + const handleInputChange = (e: React.ChangeEvent, type: 'start' | 'end') => { + const value = e.target.value; + const date = parse(value, 'yyyy-MM-dd', new Date()); + if (type === 'start') { + setStart(value); + if (isValid(date)) { + handleStartSelect(date); + } + } else { + setEnd(value); + if (isValid(date)) { + handleEndSelect(date); + } + } }; React.useEffect(() => { - setStart(startDate ? parse(startDate, 'yyyyMMdd', new Date()) : undefined); - setEnd(endDate ? parse(endDate, 'yyyyMMdd', new Date()) : undefined); + setStart(startDate ? format(parse(startDate, 'yyyyMMdd', new Date()), 'yyyy-MM-dd') : ''); + setEnd(endDate ? format(parse(endDate, 'yyyyMMdd', new Date()), 'yyyy-MM-dd') : ''); }, [startDate, endDate]); return (
- +
+ + handleInputChange(e, 'start')} + className={cn( + 'border-inputfield-main focus:border-inputfield-focus h-full w-full justify-start rounded border bg-black py-[6.5px] pl-[6.5px] pr-[6.5px] text-left text-sm font-normal hover:bg-black hover:text-white', + !start && 'text-muted-foreground' + )} + /> +
@@ -91,17 +116,21 @@ export function DatePickerWithRange({ onOpenChange={setOpenEnd} > - +
+ + handleInputChange(e, 'end')} + className={cn( + 'border-inputfield-main focus:border-inputfield-focus h-full w-full justify-start rounded border bg-black py-[6.5px] pl-[6.5px] pr-[6.5px] text-left text-sm font-normal hover:bg-black hover:text-white', + !end && 'text-muted-foreground' + )} + /> +
From 68e6655cfd81e031c9440532f201a1c01fca9c8e Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 27 May 2024 13:25:29 -0400 Subject: [PATCH 27/28] update --- extensions/cornerstone/src/initCineService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/cornerstone/src/initCineService.ts b/extensions/cornerstone/src/initCineService.ts index fb7f8c2fac8..b98c2f2816b 100644 --- a/extensions/cornerstone/src/initCineService.ts +++ b/extensions/cornerstone/src/initCineService.ts @@ -6,7 +6,7 @@ function _getVolumesFromViewport(viewport) { } function _getVolumeFromViewport(viewport) { - const volumes = _getVolumesFromViewport(viewport); + const volumes = _getVolumesFromViewport(viewport).filter(volume => volume); const dynamicVolume = volumes.find(volume => volume.isDynamicVolume()); return dynamicVolume ?? volumes[0]; From 00c73b6fe0fab4b5ab4eb6bbee31f92e89f7165b Mon Sep 17 00:00:00 2001 From: Alireza Date: Mon, 27 May 2024 14:09:42 -0400 Subject: [PATCH 28/28] chore: Update date range input selectors in Cypress tests --- platform/app/cypress/support/aliases.js | 4 ++-- platform/ui-next/src/components/DateRange/DateRange.tsx | 2 ++ platform/ui/src/components/InputDateRange/InputDateRange.tsx | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/platform/app/cypress/support/aliases.js b/platform/app/cypress/support/aliases.js index 5b28709ca67..0d677f5d250 100644 --- a/platform/app/cypress/support/aliases.js +++ b/platform/app/cypress/support/aliases.js @@ -61,8 +61,8 @@ export function initStudyListAliasesOnDesktop() { // We can't use data attributes (e.g. data--cy) for these since // they are using third party libraries (i.e. react-dates, react-select) - cy.get('#date-range-studyDate-start-date').as('studyListStartDate'); - cy.get('#date-range-studyDate-end-date').as('studyListEndDate'); + cy.get('[data-cy="input-date-range-start"').as('studyListStartDate'); + cy.get('[data-cy="input-date-range-end"').as('studyListEndDate'); cy.get('#input-modalities').as('modalities'); } diff --git a/platform/ui-next/src/components/DateRange/DateRange.tsx b/platform/ui-next/src/components/DateRange/DateRange.tsx index bb65ae5fe8d..7af8e7aa0f5 100644 --- a/platform/ui-next/src/components/DateRange/DateRange.tsx +++ b/platform/ui-next/src/components/DateRange/DateRange.tsx @@ -93,6 +93,7 @@ export function DatePickerWithRange({ 'border-inputfield-main focus:border-inputfield-focus h-full w-full justify-start rounded border bg-black py-[6.5px] pl-[6.5px] pr-[6.5px] text-left text-sm font-normal hover:bg-black hover:text-white', !start && 'text-muted-foreground' )} + data-cy="input-date-range-start" />
@@ -129,6 +130,7 @@ export function DatePickerWithRange({ 'border-inputfield-main focus:border-inputfield-focus h-full w-full justify-start rounded border bg-black py-[6.5px] pl-[6.5px] pr-[6.5px] text-left text-sm font-normal hover:bg-black hover:text-white', !end && 'text-muted-foreground' )} + data-cy="input-date-range-end" />
diff --git a/platform/ui/src/components/InputDateRange/InputDateRange.tsx b/platform/ui/src/components/InputDateRange/InputDateRange.tsx index 6d85ace3a95..88638b496d7 100644 --- a/platform/ui/src/components/InputDateRange/InputDateRange.tsx +++ b/platform/ui/src/components/InputDateRange/InputDateRange.tsx @@ -26,11 +26,11 @@ const InputDateRange = ({ isSortable={isSortable} sortDirection={sortDirection} onLabelClick={onClickHandler} - className='xl:min-w-[284px]' + className="xl:min-w-[284px]" >