diff --git a/.storybook/main.js b/.storybook/main.js index ea43675e3..98cc11aa9 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -1,3 +1,4 @@ +var path = require('path'); module.exports = { core: { builder: 'webpack5', @@ -22,6 +23,14 @@ module.exports = { use: ['babel-loader', { loader: 'ts-loader', options: { transpileOnly: true } }], }, ]; + + config.resolve.alias = { + ...config.resolve.alias, + '@flyteconsole/locale': path.resolve(__dirname, '../packages/basics/locale/src'), + '@flyteconsole/ui-atoms': path.resolve(__dirname, '../packages/composites/ui-atoms/src'), + '@flyteconsole/components': path.resolve(__dirname, '../packages/plugins/components/src'), + }; + return config; }, }; diff --git a/jest.config.js b/jest.config.js index 120b1d53e..bfcf060b8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -7,7 +7,12 @@ module.exports = { verbose: false, setupFilesAfterEnv: ['./script/test/jest-setup.ts'], - projects: ['/packages/zapp/console', '/packages/plugins/components'], + projects: [ + '/packages/basics/locale', + '/packages/composites/ui-atoms', + '/packages/plugins/components', + '/packages/zapp/console', + ], coverageDirectory: '/.coverage', collectCoverageFrom: ['**/*.{ts,tsx}', '!**/*/*.stories.{ts,tsx}', '!**/*/*.mocks.{ts,tsx}'], diff --git a/package.json b/package.json index a747f7593..f2cf97c26 100644 --- a/package.json +++ b/package.json @@ -61,5 +61,15 @@ "ts-jest": "^26.3.0", "jest": "^26.0.0", "react-hot-loader": "^4.1.2" + }, + "resolutions": { + "@babel/cli": "~7.16.0", + "@babel/core": "~7.16.12", + "@babel/plugin-proposal-class-properties": "~7.16.7", + "@babel/plugin-proposal-decorators": "~7.16.7", + "@babel/plugin-proposal-object-rest-spread": "~7.16.7", + "@babel/preset-env": "~7.16.11", + "@babel/preset-react": "~7.16.7", + "@babel/preset-typescript": "~7.16.7" } } diff --git a/packages/basics/locale/README.md b/packages/basics/locale/README.md new file mode 100644 index 000000000..356bc8334 --- /dev/null +++ b/packages/basics/locale/README.md @@ -0,0 +1 @@ +This is a basic package which would be used for localization in future diff --git a/packages/basics/locale/jest.config.js b/packages/basics/locale/jest.config.js new file mode 100644 index 000000000..ecb112b22 --- /dev/null +++ b/packages/basics/locale/jest.config.js @@ -0,0 +1,6 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('../../../script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, +}; diff --git a/packages/basics/locale/package.json b/packages/basics/locale/package.json new file mode 100644 index 000000000..4d5063f3c --- /dev/null +++ b/packages/basics/locale/package.json @@ -0,0 +1,20 @@ +{ + "name": "@flyteconsole/locale", + "version": "0.0.1-rc.2", + "description": "Flyteconsole basics locale setup", + "main": "./dist/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/esm/index.d.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "scripts": { + "build": "yarn build:esm && yarn build:cjs", + "build:esm": "tsc --module esnext --outDir lib/esm", + "build:cjs": "tsc", + "test": "NODE_ENV=test jest" + } +} diff --git a/packages/basics/locale/src/index.ts b/packages/basics/locale/src/index.ts new file mode 100644 index 000000000..a8c255399 --- /dev/null +++ b/packages/basics/locale/src/index.ts @@ -0,0 +1 @@ +export { createLocalizedString, patternKey } from './locale'; diff --git a/packages/basics/locale/src/locale.test.ts b/packages/basics/locale/src/locale.test.ts new file mode 100644 index 000000000..b0dad1bb1 --- /dev/null +++ b/packages/basics/locale/src/locale.test.ts @@ -0,0 +1,32 @@ +import t, { patternKey } from './strings.mock'; + +describe('Basics/locale strings retirieval', () => { + it('Simple plain string retrieved properly', () => { + const text = t('regularString'); + expect(text).toEqual('Regular string'); + }); + + it('patternKey strings retrieved properly', () => { + let text = t(patternKey('value', 'on')); + expect(text).toEqual('Value ON'); + + text = t(patternKey('value', 'off')); + expect(text).toEqual('Value OFF'); + + text = t(patternKey('value')); + expect(text).toEqual('Default value'); + }); + + it('Localized function call, properly incorporates provided properties ', () => { + let text = t('activeUsers', 5, 12); + expect(text).toEqual('5 out of 12 users'); + + text = t('activeUsers', 5); + expect(text).toEqual('5 out of undefined users'); + }); + + it('If string is not present - returns undefined item', () => { + const text = t('nothingThere'); + expect(text).toEqual(undefined); + }); +}); diff --git a/packages/basics/locale/src/locale.ts b/packages/basics/locale/src/locale.ts new file mode 100644 index 000000000..df05b0129 --- /dev/null +++ b/packages/basics/locale/src/locale.ts @@ -0,0 +1,10 @@ +export const createLocalizedString = + (strings: any = {}) => + (key: string, ...rest: unknown[]) => { + const value = strings[key]; + return typeof value === 'function' ? value(...rest) : value; + }; + +export const patternKey = (parent: string, pattern?: string) => { + return `${parent}_${pattern ?? ''}`; +}; diff --git a/packages/basics/locale/src/strings.mock.ts b/packages/basics/locale/src/strings.mock.ts new file mode 100644 index 000000000..b318cc019 --- /dev/null +++ b/packages/basics/locale/src/strings.mock.ts @@ -0,0 +1,12 @@ +import { createLocalizedString } from '.'; + +const str = { + regularString: 'Regular string', + value_: 'Default value', + value_on: 'Value ON', + value_off: 'Value OFF', + activeUsers: (active: number, all: number) => `${active} out of ${all} users`, +}; + +export { patternKey } from '.'; +export default createLocalizedString(str); diff --git a/packages/basics/locale/tsconfig.json b/packages/basics/locale/tsconfig.json new file mode 100644 index 000000000..a6178cb4a --- /dev/null +++ b/packages/basics/locale/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"] +} diff --git a/packages/composites/ui-atoms/README.md b/packages/composites/ui-atoms/README.md new file mode 100644 index 000000000..3a2cdcad3 --- /dev/null +++ b/packages/composites/ui-atoms/README.md @@ -0,0 +1 @@ +This is a UI atoms package which plan to contain icons and basic UI elements. diff --git a/packages/composites/ui-atoms/jest.config.js b/packages/composites/ui-atoms/jest.config.js new file mode 100644 index 000000000..ecb112b22 --- /dev/null +++ b/packages/composites/ui-atoms/jest.config.js @@ -0,0 +1,6 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +const sharedConfig = require('../../../script/test/jest.base.js'); + +module.exports = { + ...sharedConfig, +}; diff --git a/packages/composites/ui-atoms/package.json b/packages/composites/ui-atoms/package.json new file mode 100644 index 000000000..3d53063d4 --- /dev/null +++ b/packages/composites/ui-atoms/package.json @@ -0,0 +1,35 @@ +{ + "name": "@flyteconsole/ui-atoms", + "version": "0.0.1-rc.2", + "description": "Flyteconsole UI atoms, which didn't plan to be published and would be consumed as is internally", + "main": "./dist/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/esm/index.d.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "scripts": { + "build": "yarn build:esm && yarn build:cjs", + "build:esm": "tsc --module esnext --outDir lib/esm", + "build:cjs": "tsc", + "test": "NODE_ENV=test jest" + }, + "dependencies": { + "@material-ui/core": "^4.0.0", + "@material-ui/icons": "^4.0.0", + "classnames": "^2.3.1" + }, + "peerDependencies": { + "react": "^16.13.1", + "react-dom": "^16.13.1" + }, + "devDependencies": { + "@types/react": "^16.9.34", + "@types/react-dom": "^16.9.7", + "react": "^16.13.1", + "react-dom": "^16.13.1" + } +} diff --git a/packages/composites/ui-atoms/src/Icons/FlyteLogo/FlyteLogo.stories.tsx b/packages/composites/ui-atoms/src/Icons/FlyteLogo/FlyteLogo.stories.tsx new file mode 100644 index 000000000..76796d897 --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/FlyteLogo/FlyteLogo.stories.tsx @@ -0,0 +1,89 @@ +import * as React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import { makeStyles } from '@material-ui/core/styles'; +import { FlyteLogo } from '.'; + +const useStyles = makeStyles(() => ({ + container: { + padding: '12px', + width: '100%', + }, +})); + +interface WrapperProps { + backgroundColor: 'aliceblue' | 'gray' | 'darkblue'; + size: number; + children: React.ReactNode; +} +const ComponentWrapper = (props: WrapperProps) => { + const styles = useStyles(); + + const height = props.size + 2 * 12; // + 2*padding size + return ( +
+ {props.children} +
+ ); +}; + +export default { + title: 'UI Atoms/FlyteLogo', + component: FlyteLogo, +} as ComponentMeta; + +const Template: ComponentStory = (props) => ; +export const All = Template.bind({}); +All.args = { + size: 42, + hideText: false, + background: 'light', +}; +All.decorators = [ + (Story, context) => { + return ( +
+ + {Story()} + + + {Story()} + + + {Story()} + +
+ ); + }, +]; + +export const Default = Template.bind({}); +Default.args = { + size: 42, +}; +Default.decorators = [ + (Story, context) => { + return ( + + {Story()} + + ); + }, +]; + +export const NoText = Template.bind({}); +NoText.args = { + size: 42, + hideText: true, +}; +NoText.decorators = [ + (Story, context) => { + return ( + + {Story()} + + ); + }, +]; diff --git a/packages/composites/ui-atoms/src/Icons/FlyteLogo/index.tsx b/packages/composites/ui-atoms/src/Icons/FlyteLogo/index.tsx new file mode 100644 index 000000000..fdffdc8d3 --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/FlyteLogo/index.tsx @@ -0,0 +1,46 @@ +import * as React from 'react'; + +export interface FlyteLogoProps { + /** Logo size (height) in pixels. Default: 32 */ + size: number; + /** If true - hides "Flyte" text */ + hideText?: boolean; + /** Which theme variant to use, depends on the background color logo used on. Default: 'dark' */ + background?: 'light' | 'dark'; +} + +const fillValues = { + dark: { + graphic: '#fff', + text: '#fff', + }, + light: { + graphic: '#40009f', + text: '#000', + }, +}; + +/** Renders the Flyte glyph/text logo */ +export const FlyteLogo = (props: FlyteLogoProps): JSX.Element => { + const fill = fillValues[props.background ?? 'dark']; + + const itemWidth = props.hideText ? 200 : 600; + return ( + + + {!props.hideText ? ( + + ) : null} + + ); +}; diff --git a/packages/composites/ui-atoms/src/Icons/InfoIcon/index.tsx b/packages/composites/ui-atoms/src/Icons/InfoIcon/index.tsx new file mode 100644 index 000000000..c9db6f50f --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/InfoIcon/index.tsx @@ -0,0 +1,24 @@ +import * as React from 'react'; +import classnames from 'classnames'; + +interface SVGProps { + size: number; + className?: string; + onClick?: () => void; +} + +export const InfoIcon = (props: SVGProps): JSX.Element => ( + + + + +); diff --git a/packages/composites/ui-atoms/src/Icons/index.tsx b/packages/composites/ui-atoms/src/Icons/index.tsx new file mode 100644 index 000000000..5b32e816c --- /dev/null +++ b/packages/composites/ui-atoms/src/Icons/index.tsx @@ -0,0 +1,2 @@ +export { FlyteLogo } from './FlyteLogo'; +export { InfoIcon } from './InfoIcon'; diff --git a/packages/composites/ui-atoms/src/index.ts b/packages/composites/ui-atoms/src/index.ts new file mode 100644 index 000000000..0999f3d1a --- /dev/null +++ b/packages/composites/ui-atoms/src/index.ts @@ -0,0 +1 @@ +export * from './Icons'; diff --git a/packages/composites/ui-atoms/tsconfig.json b/packages/composites/ui-atoms/tsconfig.json new file mode 100644 index 000000000..a6178cb4a --- /dev/null +++ b/packages/composites/ui-atoms/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["src/**/*"] +} diff --git a/packages/plugins/components/package.json b/packages/plugins/components/package.json index 92a91613e..0e88f35b4 100644 --- a/packages/plugins/components/package.json +++ b/packages/plugins/components/package.json @@ -19,7 +19,8 @@ }, "dependencies": { "@material-ui/core": "^4.0.0", - "@material-ui/icons": "^4.0.0" + "@material-ui/icons": "^4.0.0", + "classnames": "^2.3.1" }, "peerDependencies": { "react": "^16.13.1", diff --git a/packages/plugins/components/src/AppInfo/appInfo.mock.ts b/packages/plugins/components/src/AppInfo/appInfo.mock.ts new file mode 100644 index 000000000..bdf155b64 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/appInfo.mock.ts @@ -0,0 +1,9 @@ +import { VersionInfo } from './versionDisplay'; + +export const generateVersionInfo = (name: string, version: string): VersionInfo => { + return { + name: name, + version: version, + url: `#some.fake.link/${name}/v${version}`, + }; +}; diff --git a/packages/plugins/components/src/AppInfo/appInfo.stories.tsx b/packages/plugins/components/src/AppInfo/appInfo.stories.tsx new file mode 100644 index 000000000..44369a987 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/appInfo.stories.tsx @@ -0,0 +1,54 @@ +import * as React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import { Card, CardContent } from '@material-ui/core'; +import { AppInfo, INFO_WINDOW_WIDTH } from '.'; +import { generateVersionInfo } from './appInfo.mock'; +import { VersionDisplay } from './versionDisplay'; + +export default { + title: 'Components/AppInfo', + component: AppInfo, +} as ComponentMeta; + +const Template: ComponentStory = (props) => ; + +export const Default = Template.bind({}); +Default.args = { + versions: [ + generateVersionInfo('UI Version', '1.22.134'), + generateVersionInfo('Admin Version', '3.2.1'), + generateVersionInfo('Google Analytics', 'Active'), + ], + documentationUrl: 'here.is/some/link#', +}; + +export const ContentOnly = Template.bind({}); +ContentOnly.args = { + versions: [ + generateVersionInfo('Normal', '1.8.13'), + generateVersionInfo('Long Version', 'Very Uncomfortable'), + generateVersionInfo( + 'Long Name for all those who are interested in future endeavors', + '1.23.12', + ), + ], + documentationUrl: 'here.is/some/link#', +}; +ContentOnly.decorators = [ + (_Story, context) => { + return ( + + + + + + ); + }, +]; diff --git a/packages/plugins/components/src/AppInfo/appInfo.test.tsx b/packages/plugins/components/src/AppInfo/appInfo.test.tsx new file mode 100644 index 000000000..058097001 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/appInfo.test.tsx @@ -0,0 +1,44 @@ +import * as React from 'react'; +import { render, fireEvent, waitFor } from '@testing-library/react'; + +import { VersionDisplay } from './versionDisplay'; +import { AppInfo } from '.'; +import t from './strings'; +import { generateVersionInfo } from './appInfo.mock'; + +describe('appInfo', () => { + it('Info icon opens VersionDisplay on click', async () => { + const title = t('modalTitle'); + const { getByTestId, queryByText } = render(); + + // click on the icon to open modal + const infoIcon = getByTestId('infoIcon'); + fireEvent.click(infoIcon); + await waitFor(() => { + expect(queryByText(title)).toBeInTheDocument(); + }); + + // click on close button should close modal + const closeButton = getByTestId('closeButton'); + fireEvent.click(closeButton); + await waitFor(() => expect(queryByText(title)).not.toBeInTheDocument()); + }); + + it('VersionDisplay shows provided versions', async () => { + const versions = [ + generateVersionInfo('UI Version', 'Active'), + generateVersionInfo('Admin Version', '3.2.112'), + ]; + + const { queryByText } = render(); + + // click on the icon to open modal + await waitFor(() => { + expect(queryByText('UI Version')).toBeInTheDocument(); + expect(queryByText('Active')).toBeInTheDocument(); + + expect(queryByText('Admin Version')).toBeInTheDocument(); + expect(queryByText('3.2.112')).toBeInTheDocument(); + }); + }); +}); diff --git a/packages/plugins/components/src/AppInfo/index.tsx b/packages/plugins/components/src/AppInfo/index.tsx new file mode 100644 index 000000000..8c7e4f9eb --- /dev/null +++ b/packages/plugins/components/src/AppInfo/index.tsx @@ -0,0 +1,73 @@ +import * as React from 'react'; +import { + Dialog, + DialogContent, + DialogTitle, + IconButton, + makeStyles, + Theme, +} from '@material-ui/core'; +import { InfoIcon } from '@flyteconsole/ui-atoms'; +import CloseIcon from '@material-ui/icons/Close'; +import { VersionDisplay, VersionDisplayProps } from './versionDisplay'; + +export type { VersionInfo } from './versionDisplay'; + +export const INFO_WINDOW_WIDTH = 260; + +const useStyles = makeStyles((theme: Theme) => ({ + iconButton: { + cursor: 'pointer', + marginLeft: theme.spacing(1), + }, + closeButton: { + position: 'absolute', + right: theme.spacing(0.5), + top: theme.spacing(0.5), + }, + content: { + paddingBottom: theme.spacing(2), + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + dialog: { + width: `${INFO_WINDOW_WIDTH}px`, + maxWidth: `calc(100% - ${theme.spacing(2)}px)`, + maxHeight: `calc(100% - ${theme.spacing(2)}px)`, + }, +})); + +export const AppInfo = (props: VersionDisplayProps) => { + const [showVersionInfo, setShowVersionInfo] = React.useState(false); + + const styles = useStyles(); + + const onCloseDialog = () => setShowVersionInfo(false); + return ( + <> + setShowVersionInfo(true)} /> + + + + + + + + + + + + + ); +}; diff --git a/packages/plugins/components/src/AppInfo/strings.ts b/packages/plugins/components/src/AppInfo/strings.ts new file mode 100644 index 000000000..0d58b926c --- /dev/null +++ b/packages/plugins/components/src/AppInfo/strings.ts @@ -0,0 +1,9 @@ +import { createLocalizedString } from '@flyteconsole/locale'; + +const str = { + modalTitle: 'Flyte Console', + docsLink: 'Documentation Link:', +}; + +export { patternKey } from '@flyteconsole/locale'; +export default createLocalizedString(str); diff --git a/packages/plugins/components/src/AppInfo/versionDisplay.tsx b/packages/plugins/components/src/AppInfo/versionDisplay.tsx new file mode 100644 index 000000000..b42ba3217 --- /dev/null +++ b/packages/plugins/components/src/AppInfo/versionDisplay.tsx @@ -0,0 +1,88 @@ +import * as React from 'react'; +import classnames from 'classnames'; +import { Link, makeStyles, Theme } from '@material-ui/core'; +import { FlyteLogo } from '@flyteconsole/ui-atoms'; +import t from './strings'; + +const headerFontFamily = '"Open Sans", helvetica, arial, sans-serif'; + +/* eslint-disable no-dupe-keys */ +const useStyles = makeStyles((theme: Theme) => ({ + title: { + fontFamily: headerFontFamily, + fontWeight: 'bold', + fontSize: '16px', + lineHeight: '22px', + margin: theme.spacing(1, 0), + color: '#000', + }, + versionsContainer: { + width: '100%', + margin: theme.spacing(3), + padding: theme.spacing(0, 1), + }, + versionWrapper: { + display: 'flex', + justifyContent: 'space-between', + marginBottom: theme.spacing(1), + }, + versionName: { + fontFamily: 'Apple SD Gothic Neo', + fontWeight: 'normal', + fontSize: '14px', + lineHeight: '17px', + color: '#636379', + }, + versionLink: { + color: '#1982E3', + fontSize: '14px', + marginLeft: theme.spacing(1), + }, +})); + +export type VersionInfo = { + name: string; + version: string; + url: string; +}; + +export interface VersionDisplayProps { + versions: VersionInfo[]; + documentationUrl: string; +} + +export const VersionDisplay = (props: VersionDisplayProps): JSX.Element => { + const styles = useStyles(); + + const VersionItem = (info: VersionInfo) => { + return ( +
+ {info.name} + + {info.version} + +
+ ); + }; + + const versionsList = props.versions.map((info) => VersionItem(info)); + + return ( + <> +
+ +
+
{t('modalTitle')}
+ +
{versionsList}
+ +
{t('docsLink')}
+ + {props.documentationUrl} + + + ); +}; diff --git a/packages/plugins/components/src/NavBar/defaultContent.tsx b/packages/plugins/components/src/NavBar/defaultContent.tsx deleted file mode 100644 index 7d58ad46b..000000000 --- a/packages/plugins/components/src/NavBar/defaultContent.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as React from 'react'; -import { makeStyles, Theme } from '@material-ui/core/styles'; -import MenuIcon from '@material-ui/icons/Menu'; -import { IconButton } from '@material-ui/core'; -// import classnames from 'classnames'; -// import { FlyteLogo } from 'components/common/FlyteLogo'; -// import { useCommonStyles } from 'components/common/styles'; -// import { Link } from 'react-router-dom'; -// import { Routes } from 'routes/routes'; -// import { UserInformation } from './UserInformation'; - -const useStyles = makeStyles((theme: Theme) => ({ - spacer: { - flexGrow: 1, - }, - rightNavBarItem: { - marginLeft: theme.spacing(2), - }, - /// - menuButton: { - marginRight: theme.spacing(2), - }, -})); - -/** Renders the default content for the app bar, which is the logo and help links */ -export const DefaultNavBarContent: React.FC = () => { - // const commonStyles = useCommonStyles(); - const styles = useStyles(); - return ( - <> -
- {' NASTYA IS HERE '} -
- - - - {/* - - -
- */} - - ); -}; diff --git a/packages/plugins/components/src/NavBar/index.tsx b/packages/plugins/components/src/NavBar/index.tsx deleted file mode 100644 index 81f64d993..000000000 --- a/packages/plugins/components/src/NavBar/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; - -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -// import { navBarContentId } from 'common/constants'; -import { DefaultNavBarContent } from './defaultContent'; - -export const navBarContentId = 'nav-bar-content'; - -export interface NavBarProps { - useCustomContent?: boolean; // rename to show that it is a backNavigation - className?: string; -} - -/** Contains all content in the top navbar of the application. */ -export const NavBar = (props: NavBarProps) => { - // const content = props.useCustomContent ?
: ; - return ( - - - {/* {content} */} - - - - ); -}; - -// export const NavBar = (): React.ReactElement => { -// return
It's me - Navigation Bar
; -// }; - -export const add = (a: number, b: number) => { - return a + b; -}; diff --git a/packages/plugins/components/src/NavBar/navbar.test.tsx b/packages/plugins/components/src/NavBar/navbar.test.tsx deleted file mode 100644 index bc0209e1e..000000000 --- a/packages/plugins/components/src/NavBar/navbar.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import * as React from 'react'; -import { render, screen } from '@testing-library/react'; -import { NavBar, add } from './index'; - -describe('add function', () => { - it('should add two number together', () => { - const result = add(10, 5); - expect(result).toBe(15); - }); - - it('NavBar contains correct text', () => { - render(); - const text = screen.getByText('NASTYA IS HERE'); - expect(text).toBeInTheDocument(); - }); -}); diff --git a/packages/plugins/components/src/Sample/index.tsx b/packages/plugins/components/src/Sample/index.tsx new file mode 100644 index 000000000..7be98984d --- /dev/null +++ b/packages/plugins/components/src/Sample/index.tsx @@ -0,0 +1,41 @@ +import * as React from 'react'; +import { AppBar, Toolbar, IconButton, makeStyles, Theme } from '@material-ui/core'; +import MenuIcon from '@material-ui/icons/Menu'; + +const useStyles = makeStyles((theme: Theme) => ({ + spacer: { + flexGrow: 1, + }, + menuButton: { + marginRight: theme.spacing(2), + }, +})); + +export interface SampleComponentProps { + useCustomContent?: boolean; // rename to show that it is a backNavigation + className?: string; +} + +/** Contains all content in the top navbar of the application. */ +export const SampleComponent = (props: SampleComponentProps) => { + const styles = useStyles(); + + return ( + + +
+ {' Sample Text '} +
+ + + + + + ); +}; diff --git a/packages/plugins/components/src/NavBar/navbar.stories.tsx b/packages/plugins/components/src/Sample/sample.stories.tsx similarity index 50% rename from packages/plugins/components/src/NavBar/navbar.stories.tsx rename to packages/plugins/components/src/Sample/sample.stories.tsx index c415bec36..10634aa22 100644 --- a/packages/plugins/components/src/NavBar/navbar.stories.tsx +++ b/packages/plugins/components/src/Sample/sample.stories.tsx @@ -2,12 +2,12 @@ import * as React from 'react'; import { ComponentStory, ComponentMeta } from '@storybook/react'; import { makeStyles, Theme } from '@material-ui/core/styles'; -import { NavBar } from '.'; +import { SampleComponent } from '.'; export default { - title: 'Primitives/NavBar', - component: NavBar, -} as ComponentMeta; + title: 'Components/Sample', + component: SampleComponent, +} as ComponentMeta; const useStyles = makeStyles((_theme: Theme) => ({ updatedOne: { @@ -20,15 +20,15 @@ const useStyles = makeStyles((_theme: Theme) => ({ }, })); -const Template: ComponentStory = () => ; +const Template: ComponentStory = () => ; export const Primary = Template.bind({}); -export const Secondary: ComponentStory = () => { +export const Secondary: ComponentStory = () => { const styles = useStyles(); - return ; + return ; }; -export const Tertiary: ComponentStory = () => { +export const Tertiary: ComponentStory = () => { const styles = useStyles(); - return ; + return ; }; diff --git a/packages/plugins/components/src/Sample/sample.test.tsx b/packages/plugins/components/src/Sample/sample.test.tsx new file mode 100644 index 000000000..e6728d223 --- /dev/null +++ b/packages/plugins/components/src/Sample/sample.test.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import { render, screen } from '@testing-library/react'; +import { SampleComponent } from './index'; + +describe('add function', () => { + it('SampleComponent is rendered contains correct text', () => { + render(); + const text = screen.getByText('Sample Text'); + expect(text).toBeInTheDocument(); + }); +}); diff --git a/packages/plugins/components/src/index.ts b/packages/plugins/components/src/index.ts index 766d96c64..c016877a5 100644 --- a/packages/plugins/components/src/index.ts +++ b/packages/plugins/components/src/index.ts @@ -1 +1 @@ -export { NavBar } from './NavBar'; +export { AppInfo, type VersionInfo } from './AppInfo'; diff --git a/packages/plugins/components/tsconfig.build.json b/packages/plugins/components/tsconfig.build.json index b48c439cd..23926fe6e 100644 --- a/packages/plugins/components/tsconfig.build.json +++ b/packages/plugins/components/tsconfig.build.json @@ -11,5 +11,6 @@ "src/**/*.test.*", "src/**/*.mock.*", "src/**/*.stories.*" - ] + ], + "references": [{ "path": "../../basics/locale" }, { "path": "../../composites/ui-atoms" }] } diff --git a/packages/plugins/components/tsconfig.json b/packages/plugins/components/tsconfig.json index a6178cb4a..8e7708e67 100644 --- a/packages/plugins/components/tsconfig.json +++ b/packages/plugins/components/tsconfig.json @@ -4,5 +4,6 @@ "rootDir": "./src", "outDir": "./dist" }, + "references": [{ "path": "../../basics/locale" }, { "path": "../../composites/ui-atoms" }], "include": ["src/**/*"] } diff --git a/packages/zapp/console/src/basics/Locale/index.ts b/packages/zapp/console/src/basics/Locale/index.ts deleted file mode 100644 index 4e32b8251..000000000 --- a/packages/zapp/console/src/basics/Locale/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const createLocalizedString = - (strings = {}) => - (key, ...rest) => { - const value = strings[key]; - return typeof value === 'function' ? value(...rest) : value; - }; - -export const patternKey = (parent: string, pattern: string) => { - return `${parent}_${pattern}`; -}; diff --git a/packages/zapp/console/src/components/Entities/strings.ts b/packages/zapp/console/src/components/Entities/strings.ts index 820736c58..9c44f0f79 100644 --- a/packages/zapp/console/src/components/Entities/strings.ts +++ b/packages/zapp/console/src/components/Entities/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; import { startCase } from 'lodash'; const str = { @@ -12,5 +12,5 @@ const str = { noSchedules: (typeString: string) => `This ${typeString} has no schedules.`, }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts index bb19aa116..6c5d64a0e 100644 --- a/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts +++ b/packages/zapp/console/src/components/Executions/Tables/WorkflowExecutionTable/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; import { dateFromNow } from 'common/formatters'; import { timestampToDate } from 'common/utils'; import { Protobuf } from 'flyteidl'; @@ -10,7 +10,7 @@ const str = { tableLabel_duration: 'duration', tableLabel_actions: '', cancelAction: 'Cancel', - inputOutputTooltip: 'View Inputs & Outputs', + inputOutputTooltip: 'View Inputs & Outputs', launchPlanTooltip: 'View Launch Plan', archiveAction: (isArchived: boolean) => (isArchived ? 'Unarchive' : 'Archive'), archiveSuccess: (isArchived: boolean) => @@ -22,5 +22,5 @@ const str = { }, }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx b/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx index e586f16ae..0521056a2 100644 --- a/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx +++ b/packages/zapp/console/src/components/Navigation/DefaultAppBarContent.tsx @@ -1,11 +1,17 @@ import { makeStyles, Theme } from '@material-ui/core/styles'; import classnames from 'classnames'; -import { FlyteLogo } from 'components/common/FlyteLogo'; +import { AppInfo, VersionInfo } from '@flyteconsole/components'; +import { FlyteLogo } from '@flyteconsole/ui-atoms'; import { useCommonStyles } from 'components/common/styles'; import * as React from 'react'; import { Link } from 'react-router-dom'; import { Routes } from 'routes/routes'; +import { useAdminVersion } from 'components/hooks/useVersion'; +import { env } from 'common/env'; import { UserInformation } from './UserInformation'; +import t, { patternKey } from './strings'; + +const { version: platformVersion } = require('../../../package.json'); const useStyles = makeStyles((theme: Theme) => ({ spacer: { @@ -20,13 +26,34 @@ const useStyles = makeStyles((theme: Theme) => ({ export const DefaultAppBarContent: React.FC = () => { const commonStyles = useCommonStyles(); const styles = useStyles(); + const { adminVersion } = useAdminVersion(); + + const versions: VersionInfo[] = [ + { + name: t('versionConsoleUi'), + version: platformVersion, + url: `https://github.com/flyteorg/flyteconsole/releases/tag/v${platformVersion}`, + }, + { + name: t('versionAdmin'), + version: adminVersion, + url: `https://github.com/flyteorg/flyteadmin/releases/tag/v${adminVersion}`, + }, + { + name: t('versionGoogleAnalytics'), + version: t(patternKey('gaDisable', env.DISABLE_GA)), + url: 'https://github.com/flyteorg/flyteconsole#google-analytics', + }, + ]; + return ( <> - +
+ ); }; diff --git a/packages/zapp/console/src/components/Navigation/UserInformation.tsx b/packages/zapp/console/src/components/Navigation/UserInformation.tsx index cfc1dda20..31527df77 100644 --- a/packages/zapp/console/src/components/Navigation/UserInformation.tsx +++ b/packages/zapp/console/src/components/Navigation/UserInformation.tsx @@ -1,10 +1,10 @@ +import * as React from 'react'; import Link from '@material-ui/core/Link'; import { makeStyles, Theme } from '@material-ui/core/styles'; import { WaitForData } from 'components/common/WaitForData'; import { useUserProfile } from 'components/hooks/useUserProfile'; import { getLoginUrl } from 'models/AdminEntity/utils'; -import * as React from 'react'; -import { VersionDisplayModal } from './VersionDisplayModal'; +import t from './strings'; const useStyles = makeStyles((theme: Theme) => ({ container: { @@ -14,23 +14,18 @@ const useStyles = makeStyles((theme: Theme) => ({ const LoginLink: React.FC = () => ( - Login + {t('login')} ); /** Displays user info if logged in, or a login link otherwise. */ export const UserInformation: React.FC<{}> = () => { + const style = useStyles(); const profile = useUserProfile(); - const [showVersionInfo, setShowVersionInfo] = React.useState(false); - let modalContent: JSX.Element | null = null; - if (showVersionInfo) { - const onClose = () => setShowVersionInfo(false); - modalContent = ; - } return ( -
+
{!profile.value ? ( ) : !profile.value.preferredUsername || profile.value.preferredUsername === '' ? ( @@ -39,27 +34,6 @@ export const UserInformation: React.FC<{}> = () => { profile.value.preferredUsername )}
-
setShowVersionInfo(true)} - style={{ - cursor: 'pointer', - display: 'flex', - marginLeft: '5px', - }} - > - - - - -
- {modalContent} ); }; diff --git a/packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx b/packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx deleted file mode 100644 index 1f1fee678..000000000 --- a/packages/zapp/console/src/components/Navigation/VersionDisplayModal.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { Dialog, DialogContent } from '@material-ui/core'; -import Link from '@material-ui/core/Link'; -import { makeStyles, Theme } from '@material-ui/core/styles'; -import * as React from 'react'; -import { ClosableDialogTitle } from 'components/common/ClosableDialogTitle'; -import { useAdminVersion } from 'components/hooks/useVersion'; -import { env } from 'common/env'; - -const { version: platformVersion } = require('../../../package.json'); - -const useStyles = makeStyles((theme: Theme) => ({ - content: { - paddingTop: theme.spacing(2), - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - }, - dialog: { - maxWidth: `calc(100% - ${theme.spacing(12)}px)`, - maxHeight: `calc(100% - ${theme.spacing(12)}px)`, - height: theme.spacing(34), - width: theme.spacing(36), - }, - versionWrapper: { - minWidth: theme.spacing(20), - display: 'flex', - flexDirection: 'row', - justifyContent: 'space-between', - fontFamily: 'Apple SD Gothic Neo', - fontWeight: 'normal', - fontSize: '14px', - lineHeight: '17px', - color: '#636379', - marginBottom: '6px', - }, - title: { - fontFamily: 'Open Sans', - fontWeight: 'bold', - fontSize: '16px', - lineHeight: '22px', - margin: '7px 0 26px 0', - color: '#000', - }, - link: { - fontFamily: 'Apple SD Gothic Neo', - fontWeight: 'normal', - fontSize: '14px', - lineHeight: '17px', - color: '#636379', - margin: '17px 0 2px 0', - }, - version: { - color: '#1982E3', - fontSize: '14px', - }, -})); - -interface VersionDisplayModalProps { - onClose(): void; -} - -export const VersionDisplayModal: React.FC = ({ onClose }) => { - const styles = useStyles(); - const { adminVersion } = useAdminVersion(); - - const { DISABLE_GA } = env; - - return ( - - {} - - - - -
Flyte Console
-
- UI Version - - {platformVersion} - -
-
- Admin Version - - {adminVersion} - -
-
- Google Analytics - - {DISABLE_GA === 'false' ? 'Active' : 'Inactive'} - -
-
Documentation Link:
- - https://docs.flyte.org/en/latest/ - -
-
- ); -}; diff --git a/packages/zapp/console/src/components/Navigation/strings.ts b/packages/zapp/console/src/components/Navigation/strings.ts new file mode 100644 index 000000000..42c2a8d2c --- /dev/null +++ b/packages/zapp/console/src/components/Navigation/strings.ts @@ -0,0 +1,14 @@ +import { createLocalizedString } from '@flyteconsole/locale'; + +const str = { + login: 'Login', + versionConsoleUi: 'UI Version', + versionAdmin: 'Admin Version', + versionGoogleAnalytics: 'Google Analytics', + gaDisable_: 'Active', + gaDisable_true: 'Active', + gaDisable_false: 'Inactive', +}; + +export { patternKey } from '@flyteconsole/locale'; +export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/Project/strings.ts b/packages/zapp/console/src/components/Project/strings.ts index 6fd42c3ed..d864a8c3c 100644 --- a/packages/zapp/console/src/components/Project/strings.ts +++ b/packages/zapp/console/src/components/Project/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; const str = { allExecutionsTitle: 'All Executions in the Project', @@ -7,5 +7,5 @@ const str = { workflowsTotal: (n: number) => `${n} Workflows`, }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/components/common/FlyteLogo.tsx b/packages/zapp/console/src/components/common/FlyteLogo.tsx deleted file mode 100644 index 54250b3c9..000000000 --- a/packages/zapp/console/src/components/common/FlyteLogo.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; - -export interface FlyteLogoProps { - /** Logo size (height) in pixels. Default: 32 */ - size?: number; - /** Which theme variant to use. Default: 'dark' */ - variant?: 'light' | 'dark'; -} - -const fillValues = { - dark: { - graphic: '#fff', - text: '#fff', - }, - light: { - graphic: '#40009f', - text: '#000', - }, -}; - -/** Renders the Flyte glyph/text logo */ -export const FlyteLogo: React.FC = ({ size = 32, variant = 'dark' }) => { - const fill = fillValues[variant]; - return ( - - - - - ); -}; diff --git a/packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx b/packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx deleted file mode 100644 index 838f02314..000000000 --- a/packages/zapp/console/src/components/common/__stories__/FlyteLogo.stories.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { makeStyles, Theme } from '@material-ui/core/styles'; -import { storiesOf } from '@storybook/react'; -import * as React from 'react'; -import { FlyteLogo } from '../FlyteLogo'; - -const useStyles = makeStyles((theme: Theme) => ({ - darkContainer: { - backgroundColor: theme.palette.secondary.main, - height: '100%', - padding: theme.spacing(2), - width: '100%', - }, - lightContainer: { - height: '100%', - padding: theme.spacing(2), - width: '100%', - }, -})); - -const stories = storiesOf('Common/FlyteLogo', module); - -stories.add('Dark', () => ( -
- -
-)); - -stories.add('Light', () => ( -
- -
-)); diff --git a/packages/zapp/console/src/components/common/strings.ts b/packages/zapp/console/src/components/common/strings.ts index fe53e1d03..13e17f455 100644 --- a/packages/zapp/console/src/components/common/strings.ts +++ b/packages/zapp/console/src/components/common/strings.ts @@ -1,4 +1,4 @@ -import { createLocalizedString } from 'basics/Locale'; +import { createLocalizedString } from '@flyteconsole/locale'; const str = { annotationsHeader: 'Annotations', @@ -14,5 +14,5 @@ const str = { noMatchingResults: 'No matching results', }; -export { patternKey } from 'basics/Locale'; +export { patternKey } from '@flyteconsole/locale'; export default createLocalizedString(str); diff --git a/packages/zapp/console/src/routes/components.ts b/packages/zapp/console/src/routes/components.ts index 0ae5193ab..dce412f8d 100644 --- a/packages/zapp/console/src/routes/components.ts +++ b/packages/zapp/console/src/routes/components.ts @@ -4,7 +4,7 @@ import { ProjectDetails } from 'components/Project/ProjectDetails'; import { SelectProject } from 'components/SelectProject/SelectProject'; import { TaskDetails } from 'components/Task/TaskDetails'; import { WorkflowDetails } from 'components/Workflow/WorkflowDetails'; -import { WorkflowVersionDetails } from '../components/Workflow/WorkflowVersionDetails'; +import { WorkflowVersionDetails } from 'components/Workflow/WorkflowVersionDetails'; /** Indexes the components for each defined route. These are done separately to avoid circular references * in components which include the Routes dictionary diff --git a/packages/zapp/console/tsconfig.build.json b/packages/zapp/console/tsconfig.build.json index b48c439cd..7df78be0d 100644 --- a/packages/zapp/console/tsconfig.build.json +++ b/packages/zapp/console/tsconfig.build.json @@ -11,5 +11,10 @@ "src/**/*.test.*", "src/**/*.mock.*", "src/**/*.stories.*" + ], + "references": [ + { "path": "../../basics/locale" }, + { "path": "../../composites/ui-atoms" }, + { "path": "../../plugins/components" } ] } diff --git a/packages/zapp/console/tsconfig.json b/packages/zapp/console/tsconfig.json index 0e27291d2..e3dfdb756 100644 --- a/packages/zapp/console/tsconfig.json +++ b/packages/zapp/console/tsconfig.json @@ -3,14 +3,24 @@ "compilerOptions": { "baseUrl": "./src", "outDir": "./dist", + "paths": { + "@flyteconsole/*": [ + "../../../basics/*/src", + "../../../composites/*/src", + "../../../plugins/*/src" + ] + }, // TODO: this items should be removed when violations are fixed: "noUnusedLocals": false, "noUnusedParameters": false, "noImplicitAny": false, - "exactOptionalPropertyTypes": false, "noImplicitOverride": false }, - "references": [{ "path": "../../plugins/components" }], + "references": [ + { "path": "../../basics/locale" }, + { "path": "../../composites/ui-atoms" }, + { "path": "../../plugins/components" } + ], "include": ["src/**/*"] } diff --git a/packages/zapp/console/webpack.common.config.ts b/packages/zapp/console/webpack.common.config.ts index eebd81d8d..1f0c2c54d 100644 --- a/packages/zapp/console/webpack.common.config.ts +++ b/packages/zapp/console/webpack.common.config.ts @@ -92,6 +92,8 @@ const resolve = { mainFields: ['browser', 'module', 'main'], /** allow to resolve local packages to it's source code */ alias: { + '@flyteconsole/locale': path.resolve(__dirname, '../../basics/locale/src'), + '@flyteconsole/ui-atoms': path.resolve(__dirname, '../../composites/ui-atoms/src'), '@flyteconsole/components': path.resolve(__dirname, '../../plugins/components/src'), }, }; @@ -129,7 +131,7 @@ export const clientConfig: webpack.Configuration = { chunkFilename: '[name]-[chunkhash].chunk.js', }, plugins: [ - new ForkTsCheckerWebpackPlugin({ typescript: { configFile } }), + new ForkTsCheckerWebpackPlugin({ typescript: { configFile, build: true } }), favIconPlugin, statsWriterPlugin, getDefinePlugin(false), @@ -159,7 +161,7 @@ export const serverConfig: webpack.Configuration = { }, plugins: [ limitChunksPlugin, - new ForkTsCheckerWebpackPlugin({ typescript: { configFile } }), + new ForkTsCheckerWebpackPlugin({ typescript: { configFile, build: true } }), getDefinePlugin(true), ], }; diff --git a/script/test/jest.base.js b/script/test/jest.base.js index 6b607e83a..9b156c823 100644 --- a/script/test/jest.base.js +++ b/script/test/jest.base.js @@ -9,8 +9,14 @@ module.exports = { }, moduleNameMapper: { - '@flyteconsole/(.*)': ['/packages/plugins/$1/src', '/packages/zapp/$1/src'], + // In this case will correspond to package/zapp/console (and so) locations + '@flyteconsole/(.*)': [ + '/../../basics/$1/src', + '/../../composites/$1/src', + '/../../plugins/$1/src', + '/../../zapp/$1/src', + ], }, - coveragePathIgnorePatterns: ['mocks', 'src/index'], + coveragePathIgnorePatterns: ['mocks', '.mock', 'src/index'], }; diff --git a/tsconfig.base.json b/tsconfig.base.json index 52c8f322e..f0edb785b 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -12,17 +12,15 @@ "importHelpers": true, "jsx": "react", - "lib": ["es6", "es2021", "dom", "dom.iterable"], - // TODO: switch target to "esnext" when babel would be removed. - "target": "es6", + "lib": ["dom", "dom.iterable", "es6", "es2021"], + "target": "esnext", "module": "commonjs", "moduleResolution": "node", - "types": ["node", "webpack-env", "jest", "@testing-library/jest-dom"], + // "esModuleInterop": true "isolatedModules": true, "declaration": true, "declarationMap": true, - "downlevelIteration": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitAny": true, @@ -32,7 +30,6 @@ "useUnknownInCatchVariables": false, // More strict rules - "exactOptionalPropertyTypes": true, "noUncheckedIndexedAccess": false, "noPropertyAccessFromIndexSignature": false, "noImplicitOverride": true, @@ -41,9 +38,13 @@ "sourceMap": true, "composite": true, "baseUrl": ".", - "outDir": "./dist", "paths": { - "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] + "@flyteconsole/*": [ + "./packages/basics/*/src", + "./packages/composites/*/src", + "./packages/plugins/*/src", + "./packages/zapp/*/src" + ] } }, "exclude": ["**/node_modules", "**/dist", "**/lib"] diff --git a/tsconfig.json b/tsconfig.json index 596c9ccd1..3ee7a6c6e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,3 @@ { - "files": [], - "include": [], - "compilerOptions": { - // compilerOptions here used for jest setup only - - // all packages are using tsconfig.base.json as a baseline - "jsx": "react", - "lib": ["dom", "esnext"], - "module": "esnext", - "moduleResolution": "node", - "esModuleInterop": true, - "baseUrl": "./", - "paths": { - "@flyteconsole/*": ["./packages/plugins/*/src", "./packages/zapp/*/src"] - } - }, - "references": [ - { "path": "./packages/plugins/components" }, - { "path": "./packages/zapp/console" } - ] + "extends": "./tsconfig.base.json" } diff --git a/yarn.lock b/yarn.lock index 56b34b25b..0cd5fe1b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - "@babel/cli@~7.16.0": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.8.tgz#44b9be7706762bfa3bff8adbf746da336eb0ab7c" @@ -39,55 +32,12 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== -"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.12.10": - version "7.17.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" - integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/core@~7.16.12": +"@babel/core@7.12.9", "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5", "@babel/core@~7.16.12": version "7.16.12" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== @@ -180,19 +130,6 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-class-features-plugin@^7.17.1": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" - integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-create-regexp-features-plugin@^7.12.1": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" @@ -290,13 +227,6 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.12.1": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" - integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== - dependencies: - "@babel/types" "^7.12.7" - "@babel/helper-member-expression-to-functions@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" @@ -304,7 +234,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1": +"@babel/helper-module-imports@^7.0.0": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== @@ -318,21 +248,6 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - lodash "^4.17.19" - "@babel/helper-module-transforms@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" @@ -347,13 +262,6 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" - integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== - dependencies: - "@babel/types" "^7.12.7" - "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -380,16 +288,6 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - "@babel/helper-replace-supers@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" @@ -401,13 +299,6 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" - integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== - dependencies: - "@babel/types" "^7.12.1" - "@babel/helper-simple-access@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" @@ -461,16 +352,7 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" - integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" - -"@babel/helpers@^7.16.7", "@babel/helpers@^7.17.2": +"@babel/helpers@^7.16.7": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== @@ -554,18 +436,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.12.12": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz#c36372ddfe0360cac1ee331a238310bddca11493" - integrity sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.1" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.0" - charcodes "^0.2.0" - -"@babel/plugin-proposal-decorators@~7.16.7": +"@babel/plugin-proposal-decorators@^7.12.12", "@babel/plugin-proposal-decorators@~7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.7.tgz#922907d2e3e327f5b07d2246bcfc0bd438f360d2" integrity sha512-DoEpnuXK14XV9btI1k8tzNGCutMclpj4yru8aXKoHlVmbO1s+2A+g2+h4JhcjrxkFJqzbymnLG6j/niOf3iFXQ== @@ -630,27 +501,7 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" - integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.1" - -"@babel/plugin-proposal-object-rest-spread@^7.12.1": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== - dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" - -"@babel/plugin-proposal-object-rest-spread@^7.16.7", "@babel/plugin-proposal-object-rest-spread@~7.16.7": +"@babel/plugin-proposal-object-rest-spread@7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.16.7", "@babel/plugin-proposal-object-rest-spread@~7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== @@ -747,7 +598,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.16.7", "@babel/plugin-syntax-decorators@^7.17.0": +"@babel/plugin-syntax-decorators@^7.16.7": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== @@ -831,7 +682,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -1374,7 +1225,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": +"@babel/template@^7.10.4", "@babel/template@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== @@ -1392,7 +1243,7 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": +"@babel/traverse@^7.1.0": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== @@ -1407,7 +1258,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.17.3": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11": version "7.17.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== @@ -1439,7 +1290,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== @@ -2259,24 +2110,6 @@ "@babel/runtime" "^7.7.2" regenerator-runtime "^0.13.3" -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" - integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== - -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" @@ -6502,11 +6335,6 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - chart.js@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.6.2.tgz#47342c551f688ffdda2cd53b534cb7e461ecec33" @@ -10001,7 +9829,7 @@ genfun@^5.0.0: resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -16807,7 +16635,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2: +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.18.1: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==