diff --git a/packages/apputils/package.json b/packages/apputils/package.json index 5f5a822bc0a8..f2549800a91f 100644 --- a/packages/apputils/package.json +++ b/packages/apputils/package.json @@ -58,6 +58,7 @@ "@lumino/disposable": "^1.4.3", "@lumino/domutils": "^1.2.3", "@lumino/messaging": "^1.4.3", + "@lumino/polling": "^1.3.3", "@lumino/properties": "^1.2.3", "@lumino/signaling": "^1.4.3", "@lumino/virtualdom": "^1.8.0", diff --git a/packages/apputils/src/mainareawidget.ts b/packages/apputils/src/mainareawidget.ts index 81d32f78a521..d8b03213609e 100644 --- a/packages/apputils/src/mainareawidget.ts +++ b/packages/apputils/src/mainareawidget.ts @@ -7,7 +7,7 @@ import { BoxLayout, BoxPanel, Widget } from '@lumino/widgets'; import { DOMUtils } from './domutils'; import { Printing } from './printing'; import { Spinner } from './spinner'; -import { Toolbar } from './toolbar'; +import { ReactiveToolbar, Toolbar } from './toolbar'; /** * A widget meant to be contained in the JupyterLab main area. @@ -40,7 +40,7 @@ export class MainAreaWidget const content = (this._content = options.content); content.node.setAttribute('role', 'region'); content.node.setAttribute('aria-label', trans.__('notebook content')); - const toolbar = (this._toolbar = options.toolbar || new Toolbar()); + const toolbar = (this._toolbar = options.toolbar || new ReactiveToolbar()); toolbar.node.setAttribute('role', 'navigation'); toolbar.node.setAttribute('aria-label', trans.__('notebook actions')); const contentHeader = (this._contentHeader = diff --git a/packages/apputils/src/toolbar.tsx b/packages/apputils/src/toolbar.tsx index 18cbf5b05f3d..71aafcdf214e 100644 --- a/packages/apputils/src/toolbar.tsx +++ b/packages/apputils/src/toolbar.tsx @@ -11,6 +11,7 @@ import { circleEmptyIcon, circleIcon, classes, + ellipsesIcon, LabIcon, offlineBoltIcon, refreshIcon, @@ -25,12 +26,18 @@ import { PanelLayout, Widget } from '@lumino/widgets'; import * as React from 'react'; import { ISessionContext, sessionContextDialogs } from './sessioncontext'; import { ReactWidget, UseSignal } from './vdom'; +import { Throttler } from '@lumino/polling'; /** * The class name added to toolbars. */ const TOOLBAR_CLASS = 'jp-Toolbar'; +/** + * Toolbar pop-up opener button name + */ +const TOOLBAR_OPENER_NAME = 'toolbar-popup-opener'; + /** * The class name added to toolbar items. */ @@ -183,7 +190,6 @@ export class Toolbar extends Widget { constructor() { super(); this.addClass(TOOLBAR_CLASS); - this.addClass('jp-scrollbar-tiny'); this.layout = new ToolbarLayout(); } @@ -242,7 +248,10 @@ export class Toolbar extends Widget { } widget.addClass(TOOLBAR_ITEM_CLASS); const layout = this.layout as ToolbarLayout; - layout.insertWidget(index, widget); + + const j = Math.max(0, Math.min(index, layout.widgets.length)); + layout.insertWidget(j, widget); + Private.nameProperty.set(widget, name); return true; } @@ -362,6 +371,197 @@ export class Toolbar extends Widget { } } +/** + * A class which provides a toolbar widget. + */ +export class ReactiveToolbar extends Toolbar { + /** + * Construct a new toolbar widget. + */ + constructor() { + super(); + this.insertItem(0, TOOLBAR_OPENER_NAME, this.popupOpener); + this.popupOpener.hide(); + this._resizer = new Throttler(this._onResize.bind(this), 500); + } + + /** + * Dispose of the widget and its descendant widgets. + */ + dispose(): void { + if (this.isDisposed) { + return; + } + + if (this._resizer) { + this._resizer.dispose(); + } + + super.dispose(); + } + + /** + * Insert an item into the toolbar at the after a target item. + * + * @param at - The target item to insert after. + * + * @param name - The name of the item. + * + * @param widget - The widget to add. + * + * @returns Whether the item was added to the toolbar. Returns false if + * an item of the same name is already in the toolbar or if the target + * is the toolbar pop-up opener. + * + * #### Notes + * The index will be clamped to the bounds of the items. + * The item can be removed from the toolbar by setting its parent to `null`. + */ + insertAfter(at: string, name: string, widget: Widget): boolean { + if (at === TOOLBAR_OPENER_NAME) { + return false; + } + return super.insertAfter(at, name, widget); + } + + /** + * Insert an item into the toolbar at the specified index. + * + * @param index - The index at which to insert the item. + * + * @param name - The name of the item. + * + * @param widget - The widget to add. + * + * @returns Whether the item was added to the toolbar. Returns false if + * an item of the same name is already in the toolbar. + * + * #### Notes + * The index will be clamped to the bounds of the items. + * The item can be removed from the toolbar by setting its parent to `null`. + */ + insertItem(index: number, name: string, widget: Widget): boolean { + if (widget instanceof ToolbarPopupOpener) { + return super.insertItem(index, name, widget); + } else { + const j = Math.max( + 0, + Math.min(index, (this.layout as ToolbarLayout).widgets.length - 1) + ); + return super.insertItem(j, name, widget); + } + } + + /** + * A message handler invoked on a `'before-hide'` message. + * + * It will hide the pop-up panel + */ + onBeforeHide(msg: Message): void { + this.popupOpener.hidePopup(); + super.onBeforeHide(msg); + } + + protected onResize(msg: Widget.ResizeMessage): void { + super.onResize(msg); + if (msg.width > 0 && this._resizer) { + void this._resizer.invoke(); + } + } + + private _onResize() { + if (this.parent && this.parent.isAttached) { + const toolbarWidth = this.node.clientWidth; + const opener = this.popupOpener; + const openerWidth = 30; + const toolbarPadding = 2; + const layout = this.layout as ToolbarLayout; + + let width = opener.isHidden + ? toolbarPadding + : toolbarPadding + openerWidth; + let index = 0; + const widgetsToRemove = []; + const toIndex = layout.widgets.length - 1; + + while (index < toIndex) { + const widget = layout.widgets[index]; + this._saveWidgetWidth(widget); + width += this._getWidgetWidth(widget); + if ( + widgetsToRemove.length === 0 && + opener.isHidden && + width + openerWidth > toolbarWidth + ) { + width += openerWidth; + } + if (width > toolbarWidth) { + widgetsToRemove.push(widget); + } + index++; + } + + while (widgetsToRemove.length > 0) { + const widget = widgetsToRemove.pop() as Widget; + width -= this._getWidgetWidth(widget); + opener.addWidget(widget); + } + + if (opener.widgetCount() > 0) { + const widgetsToAdd = []; + let index = 0; + let widget = opener.widgetAt(index); + const widgetCount = opener.widgetCount(); + + width += this._getWidgetWidth(widget); + + if (widgetCount === 1 && width - openerWidth <= toolbarWidth) { + width -= openerWidth; + } + + while (width < toolbarWidth && index < widgetCount) { + widgetsToAdd.push(widget); + index++; + widget = opener.widgetAt(index); + if (widget) { + width += this._getWidgetWidth(widget); + } else { + break; + } + } + + while (widgetsToAdd.length > 0) { + const widget = widgetsToAdd.shift()!; + this.addItem(Private.nameProperty.get(widget), widget); + } + } + + if (opener.widgetCount() > 0) { + opener.updatePopup(); + opener.show(); + } else { + opener.hide(); + } + } + } + + private _saveWidgetWidth(widget: Widget) { + const widgetName = Private.nameProperty.get(widget); + this._widgetWidths![widgetName] = widget.hasClass(TOOLBAR_SPACER_CLASS) + ? 2 + : widget.node.clientWidth; + } + + private _getWidgetWidth(widget: Widget): number { + const widgetName = Private.nameProperty.get(widget); + return this._widgetWidths![widgetName]; + } + + protected readonly popupOpener: ToolbarPopupOpener = new ToolbarPopupOpener(); + private readonly _widgetWidths: { [key: string]: number } = {}; + private readonly _resizer: Throttler; +} + /** * The namespace for Toolbar class statics. */ @@ -642,6 +842,175 @@ export class CommandToolbarButton extends ReactWidget { } } +/** + * A class which provides a toolbar popup + * used to store widgets that don't fit + * in the toolbar when it is resized + */ +class ToolbarPopup extends Widget { + width: number = 0; + + /** + * Construct a new ToolbarPopup + */ + constructor() { + super(); + this.addClass('jp-Toolbar-responsive-popup'); + this.layout = new PanelLayout(); + Widget.attach(this, document.body); + this.hide(); + } + + /** + * Updates the width of the popup, this + * should match with the toolbar width + * + * @param width - The width to resize to + * @protected + */ + updateWidth(width: number) { + if (width > 0) { + this.width = width; + this.node.style.width = `${width}px`; + } + } + + /** + * Aligns the popup to left bottom of widget + * + * @param widget the widget to align to + * @private + */ + alignTo(widget: Widget) { + const { + height: widgetHeight, + width: widgetWidth, + x: widgetX, + y: widgetY + } = widget.node.getBoundingClientRect(); + const width = this.width; + this.node.style.left = `${widgetX + widgetWidth - width + 1}px`; + this.node.style.top = `${widgetY + widgetHeight + 1}px`; + } + + /** + * Inserts the widget at specified index + * @param index the index + * @param widget widget to add + */ + insertWidget(index: number, widget: Widget) { + (this.layout as PanelLayout).insertWidget(0, widget); + } + + /** + * Total number of widgets in the popup + */ + widgetCount() { + return (this.layout as PanelLayout).widgets.length; + } + + /** + * Returns the widget at index + * @param index the index + */ + widgetAt(index: number) { + return (this.layout as PanelLayout).widgets[index]; + } +} + +/** + * A class that provides a ToolbarPopupOpener, + * which is a button added to toolbar when + * the toolbar items overflow toolbar width + */ +class ToolbarPopupOpener extends ToolbarButton { + /** + * Create a new popup opener + */ + constructor() { + super({ + icon: ellipsesIcon, + onClick: () => { + this.handleClick(); + } + }); + this.addClass('jp-Toolbar-responsive-opener'); + this.popup = new ToolbarPopup(); + } + + /** + * Add widget to the popup, prepends widgets + * @param widget the widget to add + */ + addWidget(widget: Widget) { + this.popup.insertWidget(0, widget); + } + + /** + * Dispose of the widget and its descendant widgets. + * + * #### Notes + * It is unsafe to use the widget after it has been disposed. + * + * All calls made to this method after the first are a no-op. + */ + dispose(): void { + if (this.isDisposed) { + return; + } + this.popup.dispose(); + super.dispose(); + } + + /** + * Hides the opener and the popup + */ + hide(): void { + super.hide(); + this.hidePopup(); + } + + /** + * Hides the popup + */ + hidePopup(): void { + this.popup.hide(); + } + + /** + * Updates width and position of the popup + * to align with the toolbar + */ + updatePopup(): void { + this.popup.updateWidth(this.parent!.node.clientWidth); + this.popup.alignTo(this.parent!); + } + + /** + * Returns widget at index in the popup + * @param index + */ + widgetAt(index: number) { + return this.popup.widgetAt(index); + } + + /** + * Returns total number of widgets in the popup + * + * @returns Number of widgets + */ + widgetCount(): number { + return this.popup.widgetCount(); + } + + protected handleClick() { + this.updatePopup(); + this.popup.setHidden(!this.popup.isHidden); + } + + protected popup: ToolbarPopup; +} + /** * A namespace for private data. */ diff --git a/packages/apputils/style/toolbar.css b/packages/apputils/style/toolbar.css index f05e4f40c0d0..63b70db5aecf 100644 --- a/packages/apputils/style/toolbar.css +++ b/packages/apputils/style/toolbar.css @@ -21,7 +21,7 @@ min-height: var(--jp-toolbar-micro-height); padding: 2px; z-index: 1; - overflow-x: auto; + overflow-x: hidden; } /* Toolbar items */ diff --git a/packages/apputils/test/toolbar.spec.ts b/packages/apputils/test/toolbar.spec.ts index 3a5948b1e647..5f6d74a5ba71 100644 --- a/packages/apputils/test/toolbar.spec.ts +++ b/packages/apputils/test/toolbar.spec.ts @@ -3,6 +3,7 @@ import { CommandToolbarButton, + ReactiveToolbar, SessionContext, Toolbar, ToolbarButton @@ -15,7 +16,7 @@ import { import { toArray } from '@lumino/algorithm'; import { CommandRegistry } from '@lumino/commands'; import { ReadonlyPartialJSONObject } from '@lumino/coreutils'; -import { Widget } from '@lumino/widgets'; +import { PanelLayout, Widget } from '@lumino/widgets'; import { simulate } from 'simulate-event'; const server = new JupyterServer(); @@ -385,6 +386,60 @@ describe('@jupyterlab/apputils', () => { }); }); + describe('ReactiveToolbar', () => { + let toolbar: ReactiveToolbar; + + beforeEach(() => { + toolbar = new ReactiveToolbar(); + Widget.attach(toolbar, document.body); + }); + + afterEach(() => { + toolbar.dispose(); + }); + + describe('#constructor()', () => { + it('should append a node to body for the pop-up', () => { + const popup = document.body.querySelector( + '.jp-Toolbar-responsive-popup' + ); + expect(popup).toBeDefined(); + expect(popup!.parentNode!.nodeName).toEqual('BODY'); + }); + }); + + describe('#addItem()', () => { + it('should insert item before the toolbar pop-up button', () => { + const w = new Widget(); + toolbar.addItem('test', w); + expect( + (toolbar.layout as PanelLayout).widgets.findIndex(v => v === w) + ).toEqual((toolbar.layout as PanelLayout).widgets.length - 2); + }); + }); + + describe('#insertItem()', () => { + it('should insert item before the toolbar pop-up button', () => { + const w = new Widget(); + toolbar.insertItem(2, 'test', w); + expect( + (toolbar.layout as PanelLayout).widgets.findIndex(v => v === w) + ).toEqual((toolbar.layout as PanelLayout).widgets.length - 2); + }); + }); + + describe('#insertAfter()', () => { + it('should not insert item after the toolbar pop-up button', () => { + const w = new Widget(); + const r = toolbar.insertAfter('toolbar-popup-opener', 'test', w); + expect(r).toEqual(false); + expect( + (toolbar.layout as PanelLayout).widgets.findIndex(v => v === w) + ).toEqual(-1); + }); + }); + }); + describe('ToolbarButton', () => { describe('#constructor()', () => { it('should accept no arguments', () => { diff --git a/packages/docregistry/test/default.spec.ts b/packages/docregistry/test/default.spec.ts index f018e69ec156..b174692f25fe 100644 --- a/packages/docregistry/test/default.spec.ts +++ b/packages/docregistry/test/default.spec.ts @@ -189,10 +189,18 @@ describe('docregistry/default', () => { const context = await Mock.createFileContext(); const widget = factory.createNew(context); const widget2 = factory.createNew(context); - expect(toArray(widget.toolbar.names())).toEqual(['foo', 'bar']); - expect(toArray(widget2.toolbar.names())).toEqual(['foo', 'bar']); - expect(toArray(widget.toolbar.children()).length).toBe(2); - expect(toArray(widget2.toolbar.children()).length).toBe(2); + expect(toArray(widget.toolbar.names())).toEqual([ + 'foo', + 'bar', + 'toolbar-popup-opener' + ]); + expect(toArray(widget2.toolbar.names())).toEqual([ + 'foo', + 'bar', + 'toolbar-popup-opener' + ]); + expect(toArray(widget.toolbar.children()).length).toBe(3); + expect(toArray(widget2.toolbar.children()).length).toBe(3); }); }); diff --git a/packages/notebook/style/toolbar.css b/packages/notebook/style/toolbar.css index 2fb28f90a301..c1a3259af042 100644 --- a/packages/notebook/style/toolbar.css +++ b/packages/notebook/style/toolbar.css @@ -7,6 +7,10 @@ | Variables |----------------------------------------------------------------------------*/ +:root { + --jp-notebook-toolbar-padding: 2px 5px 2px 2px; +} + /*----------------------------------------------------------------------------- /*----------------------------------------------------------------------------- @@ -14,7 +18,7 @@ |----------------------------------------------------------------------------*/ .jp-NotebookPanel-toolbar { - padding: 2px; + padding: var(--jp-notebook-toolbar-padding); } .jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused { @@ -33,3 +37,24 @@ .jp-Notebook-toolbarCellTypeDropdown span { top: 5px !important; } + +.jp-Toolbar-responsive-popup { + position: absolute; + height: fit-content; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-end; + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + background: var(--jp-toolbar-background); + min-height: var(--jp-toolbar-micro-height); + padding: var(--jp-notebook-toolbar-padding); + z-index: 1; + right: 0px; + top: 0px; +} + +.jp-Toolbar > .jp-Toolbar-responsive-opener { + margin-left: auto; +} diff --git a/packages/notebook/test/widgetfactory.spec.ts b/packages/notebook/test/widgetfactory.spec.ts index c6c5dc597b08..65b3d1ad5f09 100644 --- a/packages/notebook/test/widgetfactory.spec.ts +++ b/packages/notebook/test/widgetfactory.spec.ts @@ -115,10 +115,18 @@ describe('@jupyterlab/notebook', () => { const factory = utils.createNotebookWidgetFactory(toolbarFactory); const panel = factory.createNew(context); const panel2 = factory.createNew(context); - expect(toArray(panel.toolbar.names())).toEqual(['foo', 'bar']); - expect(toArray(panel2.toolbar.names())).toEqual(['foo', 'bar']); - expect(toArray(panel.toolbar.children()).length).toBe(2); - expect(toArray(panel2.toolbar.children()).length).toBe(2); + expect(toArray(panel.toolbar.names())).toEqual([ + 'foo', + 'bar', + 'toolbar-popup-opener' + ]); + expect(toArray(panel2.toolbar.names())).toEqual([ + 'foo', + 'bar', + 'toolbar-popup-opener' + ]); + expect(toArray(panel.toolbar.children()).length).toBe(3); + expect(toArray(panel2.toolbar.children()).length).toBe(3); }); it('should clone from the optional source widget', () => { diff --git a/packages/ui-components/src/style/icon.ts b/packages/ui-components/src/style/icon.ts index 7ae006054e8e..720a27a99b53 100644 --- a/packages/ui-components/src/style/icon.ts +++ b/packages/ui-components/src/style/icon.ts @@ -425,7 +425,6 @@ export namespace LabIconStyle { toolbarButton: { container: { display: 'inline-block', - margin: 'auto', verticalAlign: 'middle' }, element: { diff --git a/ui-tests/reference-output/screenshots/general_opened_menu_view.png b/ui-tests/reference-output/screenshots/general_opened_menu_view.png index 9d842ea79e44..e2603023a949 100644 Binary files a/ui-tests/reference-output/screenshots/general_opened_menu_view.png and b/ui-tests/reference-output/screenshots/general_opened_menu_view.png differ diff --git a/ui-tests/reference-output/screenshots/notebook_create_opened_menu_view.png b/ui-tests/reference-output/screenshots/notebook_create_opened_menu_view.png index f8b4dffed692..054dd16e3010 100644 Binary files a/ui-tests/reference-output/screenshots/notebook_create_opened_menu_view.png and b/ui-tests/reference-output/screenshots/notebook_create_opened_menu_view.png differ diff --git a/yarn.lock b/yarn.lock index caa43a0b1182..e495cc27c260 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2392,11 +2392,6 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-10.0.0.tgz#db4335de99509021f501fc4e026e6ff495fe1e62" integrity sha512-k1iO2zKuEjjRS1EJb4FwSLk+iF6EGp+ZV0OMRViQoWhQ1fZTk9hg1xccZII5uyYoiqcbC73MRBmT45y1vp2PPg== -"@octokit/openapi-types@^8.2.1": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-8.2.1.tgz#102e752a7378ff8d21057c70fd16f1c83856d8c5" - integrity sha512-BJz6kWuL3n+y+qM8Pv+UGbSxH6wxKf/SBs5yzGufMHwDefsa+Iq7ZGy1BINMD2z9SkXlIzk1qiu988rMuGXEMg== - "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" @@ -2453,14 +2448,7 @@ "@octokit/plugin-request-log" "^1.0.4" "@octokit/plugin-rest-endpoint-methods" "^5.9.0" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1": - version "6.18.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.18.1.tgz#a6db178536e649fd5d67a7b747754bcc43940be4" - integrity sha512-5YsddjO1U+xC8ZYKV8yZYebW55PCc7qiEEeZ+wZRr6qyclynzfyD65KZ5FdtIeP0/cANyFaD7hV69qElf1nMsQ== - dependencies: - "@octokit/openapi-types" "^8.2.1" - -"@octokit/types@^6.26.0": +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.26.0": version "6.26.0" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.26.0.tgz#b8af298485d064ad9424cb41520541c1bf820346" integrity sha512-RDxZBAFMtqs1ZPnbUu1e7ohPNfoNhTiep4fErY7tZs995BeHu369Vsh5woMIaFbllRWEZBfvTCS4hvDnMPiHrA== @@ -3242,12 +3230,7 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^2.0.0": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" - integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== - -"@types/prettier@~2.1.0": +"@types/prettier@^2.0.0", "@types/prettier@~2.1.0": version "2.1.6" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.6.tgz#f4b1efa784e8db479cdb8b14403e2144b1e9ff03" integrity sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA== @@ -3406,16 +3389,7 @@ resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.2.tgz#8db514b059c1b2ae14ce9d7bb325296de6a9a0fa" integrity sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw== -"@types/webpack-sources@*": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.1.tgz#6af17e3a3ded71eec2b98008d7c12f498a0a4506" - integrity sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack-sources@^0.1.5": +"@types/webpack-sources@*", "@types/webpack-sources@^0.1.5": version "0.1.9" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.9.tgz#da69b06eb34f6432e6658acb5a6893c55d983920" integrity sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new== @@ -3468,7 +3442,7 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.8.2": +"@typescript-eslint/experimental-utils@4.8.2", "@typescript-eslint/experimental-utils@^4.0.1": version "4.8.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.2.tgz#8909a5732f19329cf5ef0c39766170476bff5e50" integrity sha512-hpTw6o6IhBZEsQsjuw/4RWmceRyESfAiEzAEnXHKG1X7S5DXFaZ4IO1JO7CW1aQ604leQBzjZmuMI9QBCAJX8Q== @@ -3480,18 +3454,6 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/experimental-utils@^4.0.1": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz#4ebdec06a10888e9326e1d51d81ad52a361bd0b0" - integrity sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.28.2" - "@typescript-eslint/types" "4.28.2" - "@typescript-eslint/typescript-estree" "4.28.2" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - "@typescript-eslint/parser@~4.8.1": version "4.8.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.8.2.tgz#78dccbe5124de2b8dea2d4c363dee9f769151ca8" @@ -3502,14 +3464,6 @@ "@typescript-eslint/typescript-estree" "4.8.2" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz#451dce90303a3ce283750111495d34c9c204e510" - integrity sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A== - dependencies: - "@typescript-eslint/types" "4.28.2" - "@typescript-eslint/visitor-keys" "4.28.2" - "@typescript-eslint/scope-manager@4.8.2": version "4.8.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.8.2.tgz#a18388c63ae9c17adde519384f539392f2c4f0d9" @@ -3518,29 +3472,11 @@ "@typescript-eslint/types" "4.8.2" "@typescript-eslint/visitor-keys" "4.8.2" -"@typescript-eslint/types@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.2.tgz#e6b9e234e0e9a66c4d25bab881661e91478223b5" - integrity sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA== - "@typescript-eslint/types@4.8.2": version "4.8.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.8.2.tgz#c862dd0e569d9478eb82d6aee662ea53f5661a36" integrity sha512-z1/AVcVF8ju5ObaHe2fOpZYEQrwHyZ7PTOlmjd3EoFeX9sv7UekQhfrCmgUO7PruLNfSHrJGQvrW3Q7xQ8EoAw== -"@typescript-eslint/typescript-estree@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz#680129b2a285289a15e7c6108c84739adf3a798c" - integrity sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg== - dependencies: - "@typescript-eslint/types" "4.28.2" - "@typescript-eslint/visitor-keys" "4.28.2" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.8.2": version "4.8.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.2.tgz#eeec34707d8577600fb21661b5287226cc8b3bed" @@ -3555,14 +3491,6 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.28.2": - version "4.28.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz#bf56a400857bb68b59b311e6d0a5fbef5c3b5130" - integrity sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w== - dependencies: - "@typescript-eslint/types" "4.28.2" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.8.2": version "4.8.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.2.tgz#62cd3fbbbf65f8eccfbe6f159eb1b84a243a3f77" @@ -3952,18 +3880,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: +abstract-leveldown@^6.2.1, abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== @@ -5225,30 +5142,7 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.5: - version "15.2.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" - integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^15.2.0: +cacache@^15.0.5, cacache@^15.2.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -6433,16 +6327,11 @@ cssstyle@^2.0.0, cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@2.6.9: +csstype@2.6.9, csstype@^2.5.7: version "2.6.9" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098" integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== -csstype@^2.5.7: - version "2.6.17" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e" - integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A== - csstype@^3.0.2, csstype@~3.0.3: version "3.0.8" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" @@ -6636,14 +6525,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -debug@4.3.1: +debug@4, debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -7304,7 +7186,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.0, es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: +es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: version "1.18.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== @@ -7541,13 +7423,6 @@ eslint-utils@^2.0.0, eslint-utils@^2.1.0: dependencies: eslint-visitor-keys "^1.1.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" @@ -7869,16 +7744,11 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - fast-deep-equal@^3.1.1, fast-deep-equal@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -7999,15 +7869,7 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-loader@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-loader@~6.0.0: +file-loader@^6.0.0, file-loader@~6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== @@ -8654,7 +8516,7 @@ globby@8.0.2: pify "^3.0.0" slash "^1.0.0" -globby@^11.0.1, globby@^11.0.2, globby@^11.0.3: +globby@^11.0.1, globby@^11.0.2: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== @@ -8690,12 +8552,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -9025,7 +8882,7 @@ http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-errors@1.7.2: +http-errors@1.7.2, http-errors@~1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== @@ -9047,17 +8904,6 @@ http-errors@1.8.0: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-link-header@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-0.8.0.tgz#a22b41a0c9b1e2d8fac1bf1b697c6bd532d5f5e4" @@ -9293,16 +9139,11 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.7: +ini@1.3.7, ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== -ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, 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== - init-package-json@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.4.tgz#9f9f66cd5934e6d5f645150e15013d384d0b90d2" @@ -9535,14 +9376,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -is-core-module@^2.5.0: +is-core-module@^2.2.0, is-core-module@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== @@ -11894,16 +11728,11 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2: +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multimatch@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" @@ -11934,12 +11763,7 @@ mv@2.1.1: ncp "~2.0.0" rimraf "~2.4.0" -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nan@^2.14.0: +nan@^2.12.1, nan@^2.14.0: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== @@ -12157,17 +11981,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" - integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== - dependencies: - hosted-git-info "^4.0.1" - resolve "^1.20.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.2: +normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== @@ -12431,7 +12245,7 @@ object.entries@^1.1.0, object.entries@^1.1.2: es-abstract "^1.18.0-next.2" has "^1.0.3" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.2: +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== @@ -13266,12 +13080,7 @@ pretty-ms@^5.0.0: dependencies: parse-ms "^2.1.0" -prismjs@^1.8.4: - version "1.24.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.1.tgz#c4d7895c4d6500289482fa8936d9cdd192684036" - integrity sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow== - -prismjs@~1.17.0: +prismjs@^1.8.4, prismjs@~1.17.0: version "1.17.1" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== @@ -13492,16 +13301,11 @@ querystring-es3@^0.2.0: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@0.2.0: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -14301,7 +14105,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.1.10, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.9.0: +resolve@^1.1.10, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -14347,20 +14151,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3: +rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.0, rimraf@^3.0.2, rimraf@~3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -14441,12 +14238,12 @@ safe-buffer@5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -15289,14 +15086,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== @@ -15523,19 +15313,7 @@ tar@^4.4.12: safe-buffer "^5.1.2" yallist "^3.0.3" -tar@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^6.1.0: +tar@^6.0.2, tar@^6.1.0: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -15931,21 +15709,16 @@ ts-pnp@^1.1.6: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^1.8.1, tslib@^1.9.0, tslib@~1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== -tslib@~1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - tslib@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" @@ -15956,7 +15729,7 @@ tsscmp@1.0.6: resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsutils@^3.17.1, tsutils@^3.21.0: +tsutils@^3.17.1: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -16102,7 +15875,7 @@ typestyle@^2.0.4: csstype "2.6.9" free-style "3.1.0" -uglify-js@3.4.x: +uglify-js@3.4.x, uglify-js@^3.1.4: version "3.4.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== @@ -16110,11 +15883,6 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -uglify-js@^3.1.4: - version "3.13.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.10.tgz#a6bd0d28d38f592c3adb6b180ea6e07e1e540a8d" - integrity sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg== - uid-number@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -16356,7 +16124,7 @@ util-promisify@^2.1.0: dependencies: object.getownpropertydescriptors "^2.0.3" -util.promisify@1.0.0: +util.promisify@1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -16364,16 +16132,6 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"