diff --git a/core/HoistComponentFunctional.js b/core/HoistComponentFunctional.js index 216a2f7ef..86e1dd190 100644 --- a/core/HoistComponentFunctional.js +++ b/core/HoistComponentFunctional.js @@ -67,7 +67,7 @@ export function hoistComponent(config) { isForwardRef = (render.length === 2); // 1) Default and validate the modelSpec - const modelSpec = withDefault(config.model, uses('*')); + const modelSpec = withDefault(config.model, uses('*', {publishMode: ModelPublishMode.NONE})); throwIf( modelSpec && !(modelSpec instanceof ModelSpec), "The 'model' config passed to hoistComponent() is incorrectly specified: provide a spec returned by either uses() or creates()." diff --git a/desktop/appcontainer/AboutDialog.js b/desktop/appcontainer/AboutDialog.js index 46fc0ca81..b1cd82da4 100644 --- a/desktop/appcontainer/AboutDialog.js +++ b/desktop/appcontainer/AboutDialog.js @@ -4,13 +4,15 @@ * * Copyright © 2020 Extremely Heavy Industries Inc. */ -import {AboutDialogModel} from '@xh/hoist/appcontainer/AboutDialogModel'; -import {filler, frame} from '@xh/hoist/cmp/layout'; -import {hoistCmp, uses, XH} from '@xh/hoist/core'; -import {button} from '@xh/hoist/desktop/cmp/button'; + +import {dialog} from '@xh/hoist/desktop/cmp/dialog'; +import {XH, hoistCmp, uses} from '@xh/hoist/core'; import {toolbar} from '@xh/hoist/desktop/cmp/toolbar'; +import {button} from '@xh/hoist/desktop/cmp/button'; import {Icon} from '@xh/hoist/icon'; -import {dialog} from '@xh/hoist/kit/blueprint'; +import {frame, filler} from '@xh/hoist/cmp/layout'; + +import {AboutDialogModel} from '@xh/hoist/appcontainer/AboutDialogModel'; import './AboutDialog.scss'; /** @@ -30,12 +32,14 @@ export const aboutDialog = hoistCmp.factory({ const onClose = () => model.hide(); return dialog({ - isOpen: true, - isCloseButtonShown: false, + model: { + showCloseButton: false, + size: {width: 450}, + onClose + }, icon: Icon.info({size: 'lg'}), className: 'xh-about-dialog', title: `About ${XH.appName}`, - style: {width: 450}, items: [ frame({ className: 'xh-about-dialog__inner', @@ -49,8 +53,7 @@ export const aboutDialog = hoistCmp.factory({ onClick: onClose }) ) - ], - onClose + ] }); } }); \ No newline at end of file diff --git a/desktop/appcontainer/ExceptionDialog.js b/desktop/appcontainer/ExceptionDialog.js index 69fb7e619..c02cbc639 100644 --- a/desktop/appcontainer/ExceptionDialog.js +++ b/desktop/appcontainer/ExceptionDialog.js @@ -4,15 +4,19 @@ * * Copyright © 2020 Extremely Heavy Industries Inc. */ -import {ExceptionDialogModel} from '@xh/hoist/appcontainer/ExceptionDialogModel'; + +import {dialog} from '@xh/hoist/desktop/cmp/dialog'; +import {XH, hoistCmp, uses} from '@xh/hoist/core'; import {filler, fragment} from '@xh/hoist/cmp/layout'; -import {hoistCmp, uses, XH} from '@xh/hoist/core'; -import {button} from '@xh/hoist/desktop/cmp/button'; +import {panel} from '@xh/hoist/desktop/cmp/panel'; import {toolbar} from '@xh/hoist/desktop/cmp/toolbar'; import {Icon} from '@xh/hoist/icon'; -import {dialog, dialogBody} from '@xh/hoist/kit/blueprint'; -import './ExceptionDialog.scss'; +import {button} from '@xh/hoist/desktop/cmp/button'; + +import {ExceptionDialogModel} from '@xh/hoist/appcontainer/ExceptionDialogModel'; + import {exceptionDialogDetails} from './ExceptionDialogDetails'; +import './ExceptionDialog.scss'; /** * Dialog for display of exceptions, with support for viewing a detailed stacktrace @@ -33,15 +37,17 @@ export const exceptionDialog = hoistCmp.factory({ return fragment( dialog({ - isOpen: true, + model: { + showCloseButton: !options.requireReload, + size: {width: 500}, + onClose + }, title: options.title, - isCloseButtonShown: !options.requireReload, - onClose, icon: Icon.warning({size: 'lg'}), - items: [ - dialogBody(options.message), - bbar() - ] + items: panel({ + item: options.message, + bbar: bbar() + }) }), exceptionDialogDetails() ); @@ -79,7 +85,6 @@ export const dismissButton = hoistCmp.factory( ({model}) => { const reloadRequired = model.options.requireReload, loginRequired = isSessionExpired(model.exception); - return reloadRequired ? button({ icon: loginRequired ? Icon.login() : Icon.refresh(), diff --git a/desktop/appcontainer/ExceptionDialogDetails.js b/desktop/appcontainer/ExceptionDialogDetails.js index 3c0ba61b1..9c46818b1 100644 --- a/desktop/appcontainer/ExceptionDialogDetails.js +++ b/desktop/appcontainer/ExceptionDialogDetails.js @@ -4,15 +4,16 @@ * * Copyright © 2020 Extremely Heavy Industries Inc. */ -import {filler, pre, table, tbody, td, th, tr} from '@xh/hoist/cmp/layout'; -import {hoistCmp, XH} from '@xh/hoist/core'; -import {button} from '@xh/hoist/desktop/cmp/button'; +import {dialog} from '@xh/hoist/desktop/cmp/dialog'; +import {XH, hoistCmp} from '@xh/hoist/core'; +import {pre, table, tbody, td, th, tr, filler, vframe} from '@xh/hoist/cmp/layout'; import {clipboardButton} from '@xh/hoist/desktop/cmp/clipboard'; -import {textArea} from '@xh/hoist/desktop/cmp/input'; import {toolbar} from '@xh/hoist/desktop/cmp/toolbar'; -import {stringifyErrorSafely} from '@xh/hoist/exception'; +import {button} from '@xh/hoist/desktop/cmp/button'; +import {textArea} from '@xh/hoist/desktop/cmp/input'; import {Icon} from '@xh/hoist/icon'; -import {dialog, dialogBody} from '@xh/hoist/kit/blueprint'; +import {stringifyErrorSafely} from '@xh/hoist/exception'; + import {dismissButton} from './ExceptionDialog'; /** @@ -45,12 +46,13 @@ export const exceptionDialogDetails = hoistCmp.factory( return dialog({ title: 'Error Details', icon: Icon.search(), - isOpen: true, - isCloseButtonShown: !requireReload, - onClose: !requireReload ? () => model.close() : null, - style: {width: 800}, + model: { + showCloseButton: !requireReload, + onClose: !requireReload ? () => model.close() : null, + size: {width: 800} + }, items: [ - dialogBody({ + vframe({ className: 'xh-exception-dialog-details', items: [ header, diff --git a/desktop/appcontainer/FeedbackDialog.js b/desktop/appcontainer/FeedbackDialog.js index 770677468..c88a58e28 100644 --- a/desktop/appcontainer/FeedbackDialog.js +++ b/desktop/appcontainer/FeedbackDialog.js @@ -4,13 +4,14 @@ * * Copyright © 2020 Extremely Heavy Industries Inc. */ -import {FeedbackDialogModel} from '@xh/hoist/appcontainer/FeedbackDialogModel'; +import {dialog} from '@xh/hoist/desktop/cmp/dialog'; import {filler} from '@xh/hoist/cmp/layout'; import {hoistCmp, uses, XH} from '@xh/hoist/core'; import {button} from '@xh/hoist/desktop/cmp/button'; import {textArea} from '@xh/hoist/desktop/cmp/input'; import {toolbar} from '@xh/hoist/desktop/cmp/toolbar'; -import {dialog} from '@xh/hoist/kit/blueprint'; + +import {FeedbackDialogModel} from '@xh/hoist/appcontainer/FeedbackDialogModel'; /** * A simple dialog component to collect user feedback from directly within the application. @@ -25,12 +26,15 @@ export const feedbackDialog = hoistCmp.factory({ render({model}) { if (!model.isOpen) return null; + const onClose = () => model.hide(); + return dialog({ title: `${XH.clientAppName} Feedback`, - style: {width: 450}, - isOpen: true, - onClose: () => model.hide(), - canOutsideClickClose: false, + model: { + size: {width: 450}, + closeOnOutsideClick: false, + onClose + }, items: [ textArea({ placeholder: 'Please enter your comments...', @@ -45,7 +49,7 @@ export const feedbackDialog = hoistCmp.factory({ filler(), button({ text: 'Cancel', - onClick: () => model.hide() + onClick: onClose }), button({ text: 'Send Feedback', diff --git a/desktop/appcontainer/Message.js b/desktop/appcontainer/Message.js index 0abd5f2e0..8d1aac20b 100644 --- a/desktop/appcontainer/Message.js +++ b/desktop/appcontainer/Message.js @@ -6,13 +6,13 @@ */ import {MessageModel} from '@xh/hoist/appcontainer/MessageModel'; import {form} from '@xh/hoist/cmp/form'; -import {filler} from '@xh/hoist/cmp/layout'; +import {filler, vframe} from '@xh/hoist/cmp/layout'; import {hoistCmp, uses} from '@xh/hoist/core'; import {button} from '@xh/hoist/desktop/cmp/button'; import {formField} from '@xh/hoist/desktop/cmp/form'; import {textInput} from '@xh/hoist/desktop/cmp/input'; import {toolbar} from '@xh/hoist/desktop/cmp/toolbar'; -import {dialog, dialogBody} from '@xh/hoist/kit/blueprint'; +import {dialog} from '@xh/hoist/desktop/cmp/dialog'; import {withDefault} from '@xh/hoist/utils/js'; import './Message.scss'; @@ -30,18 +30,19 @@ export const message = hoistCmp.factory({ if (!model.isOpen) return null; return dialog({ - isOpen: true, - isCloseButtonShown: false, title: model.title, icon: model.icon, + model: { + showCloseButton: false, + onClose: model.cancelProps ? () => model.doCancel() : null + }, items: [ - dialogBody( - model.message, - inputCmp() - ), + vframe({ + margin: '20px', + items: [model.message, inputCmp()] + }), bbar() ], - onClose: () => {if (model.cancelProps) model.doCancel();}, ...props }); } diff --git a/desktop/appcontainer/OptionsDialog.js b/desktop/appcontainer/OptionsDialog.js index 223d2f6dc..7a314518f 100644 --- a/desktop/appcontainer/OptionsDialog.js +++ b/desktop/appcontainer/OptionsDialog.js @@ -4,15 +4,15 @@ * * Copyright © 2020 Extremely Heavy Industries Inc. */ -import {OptionsDialogModel} from '@xh/hoist/appcontainer/OptionsDialogModel'; -import {form} from '@xh/hoist/cmp/form'; +import {dialog} from '@xh/hoist/desktop/cmp/dialog'; +import {hoistCmp, XH, uses} from '@xh/hoist/core'; +import {panel} from '@xh/hoist/desktop/cmp/panel'; +import {Icon} from '@xh/hoist/icon'; import {filler} from '@xh/hoist/cmp/layout'; -import {hoistCmp, uses, XH} from '@xh/hoist/core'; import {button, restoreDefaultsButton} from '@xh/hoist/desktop/cmp/button'; +import {form} from '@xh/hoist/cmp/form'; import {formField} from '@xh/hoist/desktop/cmp/form'; -import {panel} from '@xh/hoist/desktop/cmp/panel'; -import {Icon} from '@xh/hoist/icon'; -import {dialog, dialogBody} from '@xh/hoist/kit/blueprint'; +import {OptionsDialogModel} from '@xh/hoist/appcontainer/OptionsDialogModel'; import './OptionsDialog.scss'; /** @@ -35,38 +35,35 @@ export const optionsDialog = hoistCmp.factory({ title: `${XH.clientAppName} Options`, icon: Icon.options(), className, - isOpen: true, - onClose: () => model.hide(), - canOutsideClickClose: false, - item: [ - panel({ - mask: 'onLoad', - item: dialogBody( - form({ - model: formModel, - fieldDefaults: {minimal: true, inline: true}, - items: model.options.map(option => { - return formField({field: option.name, ...option.formField}); - }) - }) - ), - bbar: [ - restoreDefaultsButton(), - filler(), - button({ - text: 'Cancel', - onClick: () => model.hide() - }), - button({ - disabled: !formModel.isDirty, - text: reloadRequired ? 'Save & Reload' : 'Save', - icon: reloadRequired ? Icon.refresh() : Icon.check(), - intent: 'success', - onClick: () => model.saveAsync() - }) - ] - }) - ] + model: { + closeOnOutsideClick: false, + onClose: () => model.hide() + }, + item: panel({ + mask: 'onLoad', + item: form({ + model: formModel, + fieldDefaults: {minimal: true, inline: true}, + items: model.options.map(option => { + return formField({field: option.name, ...option.formField}); + }) + }), + bbar: [ + restoreDefaultsButton(), + filler(), + button({ + text: 'Cancel', + onClick: () => model.hide() + }), + button({ + disabled: !formModel.isDirty, + text: reloadRequired ? 'Save & Reload' : 'Save', + icon: reloadRequired ? Icon.refresh() : Icon.check(), + intent: 'success', + onClick: () => model.saveAsync() + }) + ] + }) }); } }); diff --git a/desktop/cmp/button/MenuButton.js b/desktop/cmp/button/MenuButton.js new file mode 100644 index 000000000..dba914376 --- /dev/null +++ b/desktop/cmp/button/MenuButton.js @@ -0,0 +1,98 @@ +import {PropTypes as PT} from 'prop-types'; +import {castArray} from 'lodash'; + +import {hoistCmp} from '@xh/hoist/core'; +import {button} from '@xh/hoist/desktop/cmp/button'; +import {Icon} from '@xh/hoist/icon'; +import {buttonGroup, menu, menuItem, popover} from '@xh/hoist/kit/blueprint'; + +import './MenuButton.scss'; + + +export const [MenuButton, menuButton] = hoistCmp.withFactory({ + displayName: 'MenuButton', + model: false, + className: 'xh-menu-button', + + render(props) { + const {menuItemConfs} = props; + return !menuItemConfs || !castArray(menuItemConfs).length ? + primaryButton({ + side: 'left', + ...props + }) : + buttonGroup({ + className: 'menubutton', + items: [ + primaryButton({ + side: 'left', + ...props + }), + menuTriggerButton({...props}), + primaryButton({ + side: 'right', + ...props + }) + ] + }); + } +}); + +const primaryButton = hoistCmp.factory({ + displayName: 'MenuButton', + model: false, + + render({side, menuTriggerSide='right', disabled, intent, minimal, primaryButtonConf}) { + return menuTriggerSide == 'left' && side=='right' || + menuTriggerSide == 'right' && side=='left' ? + button({ + intent, + minimal, + ...primaryButtonConf, + disabled + }) : + null; + } +}); + +const menuTriggerButton = hoistCmp.factory({ + displayName: 'MenuTriggerButton', + model: false, + + render({menuTriggerSide='right', disabled, menuItemConfs, minimal, intent}) { + return !disabled ? popover({ + position: `bottom-${menuTriggerSide}`, + minimal: true, + target: button({ + intent: intent, + minimal: minimal, + className: `menubutton__trigger--${menuTriggerSide}`, + icon: Icon.chevronDown({prefix: 'fas'}) + }), + content: menu({ + className: 'menubutton__menu', + items: castArray(menuItemConfs).map((it, idx) => menuItem({ + key: idx, + ...it + })) + }) + }) : + button({ + intent, + minimal, + className: `menubutton__trigger--${menuTriggerSide}`, + disabled: true, + icon: Icon.chevronDown({prefix: 'fas'}) + }); + } +}); + +MenuButton.propTypes = { + menuTriggerSide: PT.oneOf(['left', 'right']), // defaults to 'right' + intent: PT.oneOf(['success']), // only success supported, as of March 2020 + minimal: PT.bool, // defaults to true + disabled: PT.bool, + primaryButtonConf: PT.object.isRequired, + // if menuItemConfs is null or is undefined or if array is empty, primaryButtonConf is rendered as plain button, with no menuTrigger + menuItemConfs: PT.oneOfType([PT.object, PT.arrayOf(PT.object)]) +}; \ No newline at end of file diff --git a/desktop/cmp/button/MenuButton.scss b/desktop/cmp/button/MenuButton.scss new file mode 100644 index 000000000..c7bc7cd14 --- /dev/null +++ b/desktop/cmp/button/MenuButton.scss @@ -0,0 +1,33 @@ +// todo when needed: +// support: +// - more intents than just 'success' on menu items + +.menubutton { + &__menu { + .bp3-menu-item.bp3-intent-success { + box-shadow: inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); + background-color: var(--xh-intent-success); + background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + color: #fff; + + &:hover { + background-image: linear-gradient(to bottom, rgba(138, 155, 168, 0.3), rgba(138, 155, 168, 0.3)); + } + } + } +} + +.bp3-dark .menubutton { + &__menu { + .bp3-menu-item.bp3-intent-success { + box-shadow: 0 0 0 1px rgba(16, 22, 26, 0.4); + background-color: var(--xh-intent-success); + background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0)); + color: #fff; + + &:hover { + background-image: linear-gradient(to bottom, rgba(138, 155, 168, 0.3), rgba(138, 155, 168, 0.3)); + } + } + } +} \ No newline at end of file diff --git a/desktop/cmp/button/index.js b/desktop/cmp/button/index.js index caa5e58f8..596e7ded1 100644 --- a/desktop/cmp/button/index.js +++ b/desktop/cmp/button/index.js @@ -15,6 +15,7 @@ export * from './ExportButton'; export * from './FeedbackButton'; export * from './LaunchAdminButton'; export * from './LogoutButton'; +export * from './MenuButton'; export * from './OptionsButton'; export * from './RefreshButton'; export * from './RestoreDefaultsButton'; diff --git a/desktop/cmp/dialog/Dialog.js b/desktop/cmp/dialog/Dialog.js new file mode 100644 index 000000000..873129bac --- /dev/null +++ b/desktop/cmp/dialog/Dialog.js @@ -0,0 +1,44 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ + +import PT from 'prop-types'; + +import {hoistCmp, uses, ModelPublishMode} from '@xh/hoist/core'; +import {rndDialog} from './impl/RndDialog'; + +import {DialogModel} from './DialogModel'; + +/** + * Component for showing content in a window. + * + * See DialogModel for the main API for specifying and controlling this component. + */ +export const [Dialog, dialog] = hoistCmp.withFactory({ + displayName: 'Dialog', + model: uses(DialogModel, {publishMode: ModelPublishMode.LIMITED}), + memo: false, + className: 'xh-dialog', + + render(props) { + return rndDialog(props); + } +}); + +Dialog.propTypes = { + /** An icon to be shown in the dialog's header. */ + icon: PT.element, + + /** Title to be shown in the dialog's header. */ + title: PT.oneOfType([PT.string, PT.node]), + + /** Primary component model instance. */ + model: PT.oneOfType([PT.instanceOf(DialogModel), PT.object]), + + /** Escape hatch to pass any props to underlying react-rnd API */ + rndOptions: PT.object +}; + diff --git a/desktop/cmp/dialog/DialogModel.js b/desktop/cmp/dialog/DialogModel.js new file mode 100644 index 000000000..2eb4ae93d --- /dev/null +++ b/desktop/cmp/dialog/DialogModel.js @@ -0,0 +1,288 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ + +import {XH, HoistModel, managed, RenderMode, RefreshMode} from '@xh/hoist/core'; +import {action, observable} from '@xh/hoist/mobx'; +import {isPlainObject, isString, isNumber, isFinite, isNil, endsWith, assign} from 'lodash'; +import {throwIf} from '@xh/hoist/utils/js'; +import {DialogStateModel} from './DialogStateModel'; + +/** + * Main backing Model for Dialog Component. + * + * Provides the API for configuration and run-time manipulation of the Dialog's positioning + * and other state. + */ +@HoistModel +export class DialogModel { + + /** @member {DialogStateModel} */ + @managed + stateModel; + + //----------------------- + // Immutable Properties + //----------------------- + /** @member {boolean} */ + resizable; + /** @member {boolean} */ + draggable; + /** @member {boolean} */ + closeOnOutsideClick; + /** @member {boolean} */ + closeOnEscape; + /** @member {boolean} */ + showCloseButton; + /** @member {boolean} */ + showBackgroundMask; + /** @member {boolean} */ + inPortal; + /** @member {RenderMode} */ + renderMode; + /** @member {RefreshMode} */ + refreshMode; + + + //--------------------------------- + // Observable/Settable Public State + //---------------------------------- + /** + * @member {Size} - Desired width and height (when not maximized). + * Null or undefined values in either dimension indicate dialog should take natural + * size of content in that dimension. + */ + @observable.ref size; + + /** + * @member {Position} - Desired position of top-left corner (when not maximized). + * Null or undefined values in either dimension indicate dialog should be centered + * along that dimension. + */ + @observable.ref position; + + /** @member {boolean} - is the Dialog visible (i.e. rendered) */ + @observable isOpen; + + /** @member {boolean} - is the Dialog maximized within its parent. */ + @observable isMaximized; + + //------------------------ + // Read-only Public State + //------------------------ + /** + * @member {Size} - Rendered width and height. + */ + @observable.ref renderedSize; + + /** + * @member {Position} - Rendered position of top-left corner. + */ + @observable.ref renderedPosition; + + /** + * @param {Object} config + * @param {boolean} [config.resizable] - true to add draggable borders. + * @param {boolean} [config.draggable] - true to allow dragging the dialog via its title bar. + * @param {boolean} [config.closeOnOutsideClick] - true to allow closing by clicking outside dialog. + * @param {boolean} [config.closeOnEscape] - true to allow closing by pressing escape key + * @param {boolean} [config.showCloseButton] - true to show close button in header. + * @param {boolean} [config.showBackgroundMask] - true to show a background mask. + * @param {boolean} [config.inPortal] - Open in portal? If true dialog will be positioned with + * respect to the entire Viewport. If false, dialog will be bound by parent DOM element. + * @param {Size} [config.size] - initial (unmaximized) size + * @param {Position} [config.position] - initial (unmaximized) position. + * @param {boolean} [config.isOpen] - Is dialog open? + * @param {boolean} [config.isMaximized] - Does dialog cover entire viewport? + * @param {RenderMode} [c.renderMode] - strategy for rendering closed dialog. + * @param {RefreshMode} [c.refreshMode] - strategy for refreshing closed dialog. + * See enum for description of supported modes. + * @param {(Object|string)} [config.stateModel] - config or string for a DialogStateModel. + * @param {function} [config.onOpen] - callback function to run when dialog is opened. + * @param {function} [config.onClose] - callback function to run when dialog is closed. + */ + constructor({ + resizable = false, + draggable = false, + closeOnOutsideClick = true, + closeOnEscape = true, + showCloseButton = true, + showBackgroundMask = true, + inPortal = true, + + size, + position, + isOpen = true, + isMaximized = false, + renderMode = RenderMode.LAZY, + refreshMode = RefreshMode.ON_SHOW_LAZY, + + stateModel = null, + onClose = null, + onOpen = null + } = {}) { + + // Set immutables + this.inPortal = inPortal; + this.showBackgroundMask = showBackgroundMask; + this.showCloseButton = showCloseButton; + this.resizable = resizable; + this.draggable = draggable; + this.closeOnOutsideClick = closeOnOutsideClick; + this.closeOnEscape = closeOnEscape; + this.renderMode = renderMode; + this.refreshMode = refreshMode; + + // set observables + this.setSize(size); + this.setPosition(position); + this.isOpen = isOpen; + this.isMaximized = isMaximized; + + // Other + this.stateModel = this.parseStateModel(stateModel); + if (onClose || onOpen) { + this.addReaction({ + track: () => this.isOpen, + run: (isOpen) => isOpen ? onOpen?.call() : onClose?.call() + }); + } + } + + //---------------------- + // Public Methods + //---------------------- + /** + * Open the Dialog, if not already open. + */ + @action + open() { + this.isOpen = true; + } + + /** + * Close the Dialog, if open. + */ + @action + close() { + this.isOpen = false; + } + + /** + * Maximize the dialog to take up the entire size of its parent. + */ + @action + maximize() { + this.isMaximized = true; + } + + /** + * Restore a maximized dialog back to its unmaximized state. + */ + @action + restore() { + this.isMaximized = false; + } + + /** + * Maximize or restore as appropriate. + */ + @action + toggleMaximized() { + this.isMaximized = !this.isMaximized; + } + + /** + * Set the (unmaximized) position of the dialog. + */ + @action + setPosition({x, y} = {}) { + this.position = assign( + {x: undefined, y: undefined}, + this.position, + {x: this.parseCoordinate(x), y: this.parseCoordinate(y)} + ); + } + + /** + * Set the (unmaximized) size of the dialog. + */ + @action + setSize({width, height} = {}) { + this.size = assign( + {width: undefined, height: undefined}, + this.size, + {width: this.parseDim(width), height: this.parseDim(height)} + ); + } + + //----------------- + // Implementation + //----------------- + parseStateModel(stateModel) { + let ret = null; + if (isPlainObject(stateModel)) { + ret = new DialogStateModel(stateModel); + } else if (isString(stateModel)) { + ret = new DialogStateModel({dialogId: stateModel}); + } + if (ret) { + ret.init(this); + } + return ret; + } + + parseDim(val) { + if (isNumber(val)) { + throwIf( + !isFinite(val) || val < 0, + 'Dimension must be a positive number.' + ); + } else if (isString(val)) { + const numb = parseInt(val); + throwIf( + !endsWith(val, '%') || !isFinite(numb) || numb > 100 || numb < 0, + 'String Dimension must be a percentage between 0 and 100.' + ); + } else if (!isNil(val)) { + throw XH.exception('Incorrect dimension value.'); + } + return val; + } + + parseCoordinate(val) { + if (isNumber(val)) { + throwIf( + !isFinite(val) || val < 0, + 'Position Co-ordinate must be a number greater than or equal to zero.' + ); + } else if (!isNil(val)) { + throw XH.exception('Incorrect position co-ordinate.'); + } + return val; + } + + + @action + noteRendered(size, position) { + this.renderedSize = size; + this.renderedPosition = position; + } +} + + +/** + * @typedef {Object} Size + * @property {(number|String)} width - pixel count or string percentage between '0%' and '100%'. + * @property {(number|String)} height - pixel count or string percentage between '0%' and '100%'. + */ + + +/** + * @typedef {Object} Position + * @property {number} x - x co-ordinate from top-left corner of parent. + * @property {number} y - y co-ordinate of top-left corner of parent + */ \ No newline at end of file diff --git a/desktop/cmp/dialog/DialogStateModel.js b/desktop/cmp/dialog/DialogStateModel.js new file mode 100644 index 000000000..7410e9b7c --- /dev/null +++ b/desktop/cmp/dialog/DialogStateModel.js @@ -0,0 +1,161 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ +import {XH, HoistModel} from '@xh/hoist/core'; +import {cloneDeep, debounce, isUndefined} from 'lodash'; + +/** + * Model for serializing/de-serializing saved dialog state across user browsing sessions + * and applying saved state to its parent DialogModel upon that model's construction. + * + * DialogModels can enable persistent dialog state via their stateModel config, typically + * provided as a simple string `dialogId` to identify a given dialog instance. + * + * It is not necessary to manually create instances of this class within an application. + * @private + */ +@HoistModel +export class DialogStateModel { + + /** + * Version of dialog state definitions currently supported by this model. + * Increment *only* when we need to abandon all existing dialog state that might be saved on + * user workstations to ensure compatibility with a new serialization or approach. + */ + static DIALOG_STATE_VERSION = 1; + static STATE_SAVE_DEBOUNCE_MS = 500; + + dialogModel = null; + dialogId = null; + + state = {}; + + /** + * @param {Object} c - DialogStateModel configuration. + * @param {string} c.dialogId - unique identifier for a Dialog instance. + * @param {boolean} [c.trackSize] - true to save state of dialog width and height. + * @param {boolean} [c.trackPosition] - true to save x & y position. + * @param {boolean} [c.trackIsMaximized] - true to save maximized state. + */ + constructor({dialogId, trackSize = true, trackPosition = true, trackIsMaximized = true}) { + this.dialogId = dialogId; + this.trackSize = trackSize; + this.trackPosition = trackPosition; + this.trackIsMaximized = trackIsMaximized; + } + + init(dialogModel) { + this.dialogModel = dialogModel; + + if (this.trackSize) { + this.addReaction(this.sizeReaction()); + } + + if (this.trackPosition) { + this.addReaction(this.positionReaction()); + } + + if (this.trackIsMaximized) { + this.addReaction(this.isMaximizedReaction()); + } + } + + getStateKey() { + return `dialogState.v${DialogStateModel.DIALOG_STATE_VERSION}.${this.dialogId}`; + } + + readState(stateKey) { + return XH.localStorageService.get(stateKey, {}); + } + + saveState(stateKey, state) { + XH.localStorageService.set(stateKey, state); + } + + //-------------------------- + // Implementation + //-------------------------- + initializeState() { + const userState = this.readState(this.getStateKey()); + this.loadState(userState); + } + + loadState(state) { + this.state = cloneDeep(state); + // updateIsMaximized must be first to short-circuit dialogModel.positionDialog + if (this.trackIsMaximized) this.updateIsMaximized(); + if (this.trackSize) this.updateSize(); + if (this.trackPosition) this.updatePosition(); + } + + //-------------------------- + // Size + //-------------------------- + sizeReaction() { + return { + track: () => this.dialogModel.sizeState, + run: (sizeState) => { + this.state.size = {...sizeState}; + this.saveStateChange(); + } + }; + } + + updateSize() { + const {dialogModel, state} = this; + if (!state.size) return; + + dialogModel.setSize(state.size); + } + + //-------------------------- + // Position + //-------------------------- + positionReaction() { + const {dialogModel} = this; + return { + track: () => dialogModel.positionState, + run: (positionState) => { + this.state.position = {...positionState}; + this.saveStateChange(); + } + }; + } + + updatePosition() { + const {dialogModel, state} = this; + if (!state.position) return; + + dialogModel.setPosition(state.position); + } + + //-------------------------- + // Mazimized + //-------------------------- + isMaximizedReaction() { + return { + track: () => this.dialogModel.isMaximizedState, + run: (isMaximizedState) => { + this.state.isMaximized = isMaximizedState; + this.saveStateChange(); + } + }; + } + + updateIsMaximized() { + const {dialogModel, state} = this; + if (isUndefined(state.isMaximized)) return; + + dialogModel.setIsMaximized(state.isMaximized); + } + + //-------------------------- + // Helper + //-------------------------- + saveStateChange = debounce(() => { + this.saveState(this.getStateKey(), this.state); + }, DialogStateModel.STATE_SAVE_DEBOUNCE_MS); +} \ No newline at end of file diff --git a/desktop/cmp/dialog/impl/RndDialog.js b/desktop/cmp/dialog/impl/RndDialog.js new file mode 100644 index 000000000..343e37075 --- /dev/null +++ b/desktop/cmp/dialog/impl/RndDialog.js @@ -0,0 +1,129 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ + +import {merge} from 'lodash'; + +import {rnd} from '@xh/hoist/kit/react-rnd'; +import {hoistCmp, uses, useLocalModel, RenderMode, refreshContextView} from '@xh/hoist/core'; +import {Children, useRef} from 'react'; +import {div, vframe} from '@xh/hoist/cmp/layout'; +import ReactDOM from 'react-dom'; + +import {DialogModel} from '../DialogModel'; +import {RndModel} from './RndModel'; +import {rndHeader} from './RndHeader'; +import './RndDialog.scss'; + + +/** + * The base zIndex that will be used for all dialogs. + * >4 is required to stay on top of blueprint popopver targets. + * Cannot be too high or you will cover datepicker and select popups + */ +const DIALOG_Z_INDEX_BASE = 4; + +/** + * @private + * + * Main implementation component for Dialog. + * + * Wraps content in a react-rnd component for showing in a window with draggable affordances. + */ +export const rndDialog = hoistCmp.factory({ + model: uses(DialogModel), + render({model, className, icon, title, rndOptions, children}) { + const rndModel = useLocalModel(() => new RndModel(model)); + + let {isOpen, renderMode} = model, + wasOpen = useRef(false); + if (!wasOpen.current && isOpen) wasOpen.current = true; + if ( + !isOpen && + ( + (renderMode === RenderMode.UNMOUNT_ON_HIDE) || + (renderMode === RenderMode.LAZY && !wasOpen.current) + ) + ) { + return null; + } + + const { + inPortal, + resizable, + draggable, + showBackgroundMask, + closeOnOutsideClick, + isMaximized + } = model; + + let zIndex = DIALOG_Z_INDEX_BASE, + baseClass = inPortal ? 'xh-dialog-portal' : 'xh-dialog-container'; + + rndOptions = merge({}, rndOptions, {style: {zIndex}}); + + let ret = div({ + style: {display: isOpen ? 'flex' : 'none'}, + className: baseClass, + items: [ + maskComp({rndModel, baseClass, zIndex, omit: !showBackgroundMask}), + clickCaptureComp({rndModel, baseClass, zIndex, omit: !closeOnOutsideClick}), + rnd({ + ref: rndModel.rndRef, + ...rndOptions, + disableDragging: !draggable, + enableResizing: isMaximized ? null : { + bottom: resizable, + bottomLeft: resizable, + bottomRight: resizable, + left: resizable, + right: resizable, + top: resizable, + topLeft: resizable, + topRight: resizable + }, + bounds: inPortal ? 'body' : 'parent', + dragHandleClassName: 'xh-dialog__header', + onDragStop: rndModel.onDragStop, + onResizeStop: rndModel.onResizeStop, + item: div({ + onKeyDown: rndModel.onKeyDown, + tabIndex: 0, + className, + item: vframe({ + width: '100%', + height: '100%', + items: [ + rndHeader({icon, title}), + ...Children.toArray(children) + ] + }) + }) + }) + ] + }); + + ret = refreshContextView({model: rndModel.refreshContextModel, item: ret}); + + return inPortal ? ReactDOM.createPortal(ret, rndModel.portalEl) : ret; + } +}); + + +//------------------- +// Helper Components +//------------------- +const maskComp = hoistCmp.factory( + ({baseClass, zIndex}) => div({className: `${baseClass}__mask`, style: {zIndex}}) +); + +const clickCaptureComp = hoistCmp.factory( + ({rndModel, baseClass, zIndex}) => div({ + className: `${baseClass}__click-capture`, + style: {zIndex}, + onClick: rndModel.onCloseClick + }) +); \ No newline at end of file diff --git a/desktop/cmp/dialog/impl/RndDialog.scss b/desktop/cmp/dialog/impl/RndDialog.scss new file mode 100644 index 000000000..2c54beeea --- /dev/null +++ b/desktop/cmp/dialog/impl/RndDialog.scss @@ -0,0 +1,63 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ + +.xh-dialog-portal, +.xh-dialog-container { + .react-draggable { + background-color: var(--xh-bg); + box-shadow: var(--xh-dialog-box-shadow); + border: var(--xh-popup-border-width-px) solid var(--xh-popup-border-color); + max-height: 100vh; + max-width: 100vh; + + .xh-dialog { + // width & needed to make charts fill in space + width: 100%; + height: 100%; + // flex needed to get content sizes correct (comment out and test /app/other/popups) to see background bleed issue + display: flex; + } + } + + &__mask { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + opacity: 1; + background-color: rgba(16, 22, 26, 0.7); + overflow: auto; + user-select: none; + } + + &__click-capture { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + opacity: 1; + background-color: transparent; + overflow: auto; + user-select: none; + } +} + +.xh-dialog-container { + position: absolute; + width: 100%; + height: 100%; + + &__mask { + position: absolute; + } + + &__click-capture { + position: absolute; + } +} diff --git a/desktop/cmp/dialog/impl/RndHeader.js b/desktop/cmp/dialog/impl/RndHeader.js new file mode 100644 index 000000000..c9f114edb --- /dev/null +++ b/desktop/cmp/dialog/impl/RndHeader.js @@ -0,0 +1,63 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ + +import {hoistCmp, uses} from '@xh/hoist/core'; +import {box, hbox, filler} from '@xh/hoist/cmp/layout'; +import {button} from '@xh/hoist/desktop/cmp/button'; +import {Icon} from '@xh/hoist/icon'; +import {DialogModel} from '../DialogModel'; +import './RndHeader.scss'; + +/** + * @private + * + * Header display for Dialog. + */ +export const rndHeader = hoistCmp.factory({ + model: uses(DialogModel), + + render({model, icon, title}) { + const {draggable, showCloseButton} = model; + + if (!title && !icon && !showCloseButton) return null; + + return hbox({ + className: 'xh-dialog__header' + (draggable ? ' xh-dialog__header--draggable' : ''), + items: [ + icon ?? null, + title ? + box({className: 'xh-dialog__header__title', flex: 1, item: title}) : + filler(), + maxMinButton(), + closeButton() + ] + }); + } +}); + +//------------------- +// Helper Components +//------------------- +const maxMinButton = hoistCmp.factory( + ({model}) => { + return button({ + omit: !model.resizable, + icon: model.isMaximized ? Icon.collapse() : Icon.expand(), + onClick: () => model.toggleMaximized() + }); + } +); + +const closeButton = hoistCmp.factory( + ({model}) => { + return button({ + omit: !model.showCloseButton, + icon: Icon.close(), + onClick: () => model.close() + }); + } +); \ No newline at end of file diff --git a/desktop/cmp/dialog/impl/RndHeader.scss b/desktop/cmp/dialog/impl/RndHeader.scss new file mode 100644 index 000000000..7c712893f --- /dev/null +++ b/desktop/cmp/dialog/impl/RndHeader.scss @@ -0,0 +1,31 @@ +.xh-dialog { + &__header { + align-items: center; + flex: none; + user-select: none; + height: var(--xh-title-height-px); + padding: var(--xh-title-pad-px); + background-color: var(--xh-popup-title-bg); + color: var(--xh-popup-title-text-color); + + &--draggable { + cursor: move; + } + + &__title { + text-overflow: ellipsis; + white-space: nowrap; + font-size: var(--xh-title-font-size-px); + } + + // Header glyph. + & > .svg-inline--fa { + margin: 0 6px 0 2px; + } + + // Header "tool" buttons. + .xh-button--minimal { + color: var(--xh-title-text-color) !important; + } + } +} diff --git a/desktop/cmp/dialog/impl/RndModel.js b/desktop/cmp/dialog/impl/RndModel.js new file mode 100644 index 000000000..7b5d15a6c --- /dev/null +++ b/desktop/cmp/dialog/impl/RndModel.js @@ -0,0 +1,236 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ + +import {HoistModel, ManagedRefreshContextModel, managed} from '@xh/hoist/core'; +import {createObservableRef} from '@xh/hoist/utils/react'; +import {runInAction} from '@xh/hoist/mobx'; +import {observeResize} from '@xh/hoist/utils/js'; +import {isNil, isNumber} from 'lodash'; + +/** + * @private + * + * Implementation Model + * + * For Portal info: + * see https://reactjs.org/docs/portals.html#event-bubbling-through-portals} + * see https://github.com/palantir/blueprint/blob/develop/packages/core/src/components/portal/portal.tsx} + */ +@HoistModel +export class RndModel { + + dialogModel; + + rndRef = createObservableRef(); + portalEl; + resizeObserver; + @managed refreshContextModel; + + constructor(dialogModel) { + const dm = this.dialogModel = dialogModel; + + if (this.inPortal) { + this.portalEl = this.portalRoot.appendChild(document.createElement('div')); + } + + this.addReaction({ + track: () => [dm.size, dm.position, dm.isMaximized, this.rnd], + run: () => this.positionRnd() + }); + + this.addReaction({ + when: () => this.rnd, + run: () => { + this.maybeSetFocus(); + this.resizeObserver = observeResize( + () => this.positionRnd(), + this.inPortal ? document.body : this.parentElement + ); + } + }); + + this.refreshContextModel = new ManagedRefreshContextModel(this); + } + + //-------------------- + // Helper Trampolines + //-------------------- + get dm() {return this.dialogModel} + get inPortal() {return this.dm.inPortal} + get isMaximized() {return this.dm.isMaximized} + get isOpen() {return this.dm.isOpen} + get rnd() {return this.rndRef.current} + get portalRoot() {return document.getElementById('xh-dialog-root')} + get parentElement() {return this.rnd?.getParent()?.parentElement} + + get isActive() {return this.isOpen} + get refreshMode() {return this.dm.refreshMode} + + //------------------ + // Positioning + //------------------ + positionRnd() { + const {dm, rnd} = this; + + if (!rnd) return; + + if (this.isMaximized) { + rnd.updateSize(this.containerSize); + rnd.updatePosition({x: 0, y: 0}); + this.noteRendered(); + } else { + // Set size then position after delay -- allow position calcs to be based on size + this.updateSizeBounded(dm.size); + window.requestAnimationFrame(() => { + const centered = this.calcCenteredPos(); + this.updatePositionBounded({ + x: dm.position.x ?? centered.x, + y: dm.position.y ?? centered.y + }); + this.noteRendered(); + }); + } + } + + noteRendered() { + window.requestAnimationFrame(() => { + this.dm.noteRendered(this.renderedSize, this.renderedPosition); + }); + } + + updateSizeBounded(size) { + const {containerSize, rnd} = this; + rnd.updateSize({ + width: this.parseSizeDim(size.width, containerSize.width), + height: this.parseSizeDim(size.height, containerSize.height) + }); + } + + parseSizeDim(dim, bound) { + return isNumber(dim) ? max(0, min(bound - 10, dim)) : dim; + } + + updatePositionBounded(pos) { + const {containerSize, renderedSize, rnd} = this; + pos = { + x: max(0, min(pos.x, containerSize.width - renderedSize.width)), + y: max(0, min(pos.y, containerSize.height - renderedSize.height)) + }; + rnd.updatePosition(pos); + } + + //----------------------- + // Size calculations + //------------------------ + calcCenteredPos() { + const {containerSize, renderedSize} = this; + return { + x: max((containerSize.width - renderedSize.width) / 2, 0), + y: max((containerSize.height - renderedSize.height) / 2, 0) + }; + } + + get containerSize() { + return this.inPortal ? this.windowSize : this.parentSize; + } + + get windowSize() { + const w = window, d = document, e = d.documentElement, + g = d.getElementsByTagName('body')[0]; + + return { + width: w.innerWidth ?? e.clientWidth ?? g.clientWidth, + height: w.innerHeight ?? e.clientHeight ?? g.clientHeight + }; + } + + get parentSize() { + const p = this.parentElement; + return p ? {width: p.offsetWidth, height: p.offsetHeight} : {}; + } + + get renderedSize() { + const el = this.rnd?.getSelfElement(); + return el ? {width: el.offsetWidth, height: el.offsetHeight} : {}; + } + + get renderedPosition() { + return this.rnd?.getDraggablePosition() ?? {}; + } + + //---------- + // Handlers + //---------- + onDragStop = (evt, data) => { + if (this.isMaximized) return; + if (evt.target.closest('button')) return; // ignore drags on buttons + this.dm.setPosition({x: data.x, y: data.y}); + }; + + onResizeStop = (evt, resizeDirection, domEl, delta, domPosition) => { + if (this.isMaximized) return; + runInAction(()=> { + const {dm} = this, + {position} = dm; + + dm.setSize({width: domEl.offsetWidth, height: domEl.offsetHeight}); + // also reposition for when resized left or up -- but don't overwrite if 'centered'. + dm.setPosition({ + x: !isNil(position.x) ? domPosition.x : undefined, + y: !isNil(position.y) ? domPosition.y : undefined + }); + }); + }; + + onKeyDown = (evt) => { + if (evt.key === 'Escape' && this.dm.closeOnEscape) { + this.dm.close(); + } + }; + + onCloseClick = (evt) => { + this.dm.close(); + evt.stopPropagation(); + }; + + //--------- + // Misc + //---------- + maybeSetFocus() { + // always delay focus manipulation to just before repaint to prevent scroll jumping + // portalEl may be undefined after mount, activeElement may be undefined in IE + // see https://github.com/facebook/react/blob/9fe1031244903e442de179821f1d383a9f2a59f2/packages/react-dom/src/shared/DOMProperty.js#L294} + // see https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOMHostConfig.js#L379} + // for why we do not search for autofocus on dom element: TLDR: it's not there! + window.requestAnimationFrame(() => { + const {isOpen, portalEl} = this, + {activeElement} = document; + + if (isOpen && portalEl && activeElement && !portalEl.contains(activeElement)) { + const wrapperEl = portalEl.querySelector('[tabindex]'); + wrapperEl?.focus(); + } + }); + } + + destroy() { + if (this.portalEl) { + this.portalRoot.removeChild(this.portalEl); + } + this.resizeObserver?.disconnect(); + } +} + +function max(...args) { + const ret = Math.max(...args); + return isFinite(ret) ? ret : undefined; +} + +function min(...args) { + const ret = Math.min(...args); + return isFinite(ret) ? ret : undefined; +} diff --git a/desktop/cmp/dialog/index.js b/desktop/cmp/dialog/index.js new file mode 100644 index 000000000..355961c82 --- /dev/null +++ b/desktop/cmp/dialog/index.js @@ -0,0 +1,8 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ +export * from './Dialog'; +export * from './DialogModel'; \ No newline at end of file diff --git a/kit/react-rnd/index.js b/kit/react-rnd/index.js new file mode 100644 index 000000000..6b21c177f --- /dev/null +++ b/kit/react-rnd/index.js @@ -0,0 +1,10 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2019 Extremely Heavy Industries Inc. + */ +import {elemFactory} from '@xh/hoist/core'; +import {Rnd} from 'react-rnd'; + +export const rnd = elemFactory(Rnd); \ No newline at end of file diff --git a/package.json b/package.json index 86136be84..6fa218742 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "react-beautiful-dnd": "~13.0.0", "react-dates": "~21.8.0", "react-dropzone": "~10.2.2", + "react-rnd": "~10.2.2", "react-select": "3.1.0", "react-transition-group": "~4.4.1", "react-windowed-select": "~2.0.3", diff --git a/static/index.html b/static/index.html index 5df76efa8..7ce027366 100644 --- a/static/index.html +++ b/static/index.html @@ -12,6 +12,7 @@ </noscript> <div id="xh-root"></div> + <div id="xh-dialog-root"></div> </body> </html> diff --git a/styles/vars.scss b/styles/vars.scss index 5a554fc95..b72ee6519 100644 --- a/styles/vars.scss +++ b/styles/vars.scss @@ -530,6 +530,7 @@ body { --xh-popup-title-font-size: var(--popup-title-font-size, var(--xh-title-font-size)); --xh-popup-title-font-size-px: calc(var(--xh-popup-title-font-size) * 1px); --xh-popup-title-text-color: var(--popup-title-text-color, var(--xh-title-text-color)); + --xh-dialog-box-shadow: var(--dialog-box-shadow, #{0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2)}); //------------------------ @@ -619,6 +620,8 @@ body { } } + // Popups / dialogs + --xh-dialog-box-shadow: var(--dialog-box-shadow, #{0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4)}); //------------------------ // Toolbars diff --git a/utils/impl/ModelContextHelper.js b/utils/impl/ModelContextHelper.js new file mode 100644 index 000000000..cf8f27175 --- /dev/null +++ b/utils/impl/ModelContextHelper.js @@ -0,0 +1,36 @@ +/* + * This file belongs to Hoist, an application development toolkit + * developed by Extremely Heavy Industries (www.xh.io | info@xh.io) + * + * Copyright © 2020 Extremely Heavy Industries Inc. + */ + +import {hoistCmp, ModelPublishMode} from '@xh/hoist/core'; +import {useContext} from 'react'; +import {ModelLookupContext} from '@xh/hoist/core/impl/ModelLookup'; + +/** + * @private + * + * Insert into the graphical hierarchy to put helpful info about + * Hoist's model context into the console. + */ +export const modelContextHelper = hoistCmp.factory({ + render({name = 'Anon'}) { + let lookup = useContext(ModelLookupContext); + const lookups = []; + for (let l = lookup; l ; l = l.parent) { + lookups.push(l); + } + const msg = lookups.map(m => { + const {name} = m.model.constructor, + mode = m.publishMode === ModelPublishMode.LIMITED ? '(L)' : ''; + return name + mode; + }).join(' -> '); + console.debug('Lookup from ' + name); + console.debug(msg); + console.dir(lookup); + + return null; + } +}); diff --git a/utils/impl/index.js b/utils/impl/index.js index 934fe23c5..c9d1251c4 100644 --- a/utils/impl/index.js +++ b/utils/impl/index.js @@ -5,5 +5,4 @@ * Copyright © 2020 Extremely Heavy Industries Inc. */ export * from './Separators'; -export * from './TimeZone'; - +export * from './TimeZone'; \ No newline at end of file diff --git a/utils/js/DomUtils.js b/utils/js/DomUtils.js index 06c9727fb..650a476c4 100644 --- a/utils/js/DomUtils.js +++ b/utils/js/DomUtils.js @@ -37,7 +37,7 @@ export function isDisplayed(elem) { * * For a hook that conveniently wraps this function see useOnResize(). */ -export function observeResize(fn, node, {debounce}) { +export function observeResize(fn, node, {debounce} = {}) { let prevWidth = null, prevHeight = null; let wrappedFn = (e) => { const {contentRect} = e[0], diff --git a/yarn.lock b/yarn.lock index e2dd2b6e3..7929d2ecc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,18 +19,18 @@ semver "^5.5.0" "@babel/core@>=7.9.0", "@babel/core@~7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" - integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" + integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" + "@babel/generator" "^7.11.6" "@babel/helper-module-transforms" "^7.11.0" "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.1" + "@babel/parser" "^7.11.5" "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.0" - "@babel/types" "^7.11.0" + "@babel/traverse" "^7.11.5" + "@babel/types" "^7.11.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -40,12 +40,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" - integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": + version "7.11.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" + integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.11.5" jsesc "^2.5.1" source-map "^0.5.0" @@ -64,14 +64,14 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-builder-react-jsx-experimental@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz#f35e956a19955ff08c1258e44a515a6d6248646b" - integrity sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg== +"@babel/helper-builder-react-jsx-experimental@^7.10.4", "@babel/helper-builder-react-jsx-experimental@^7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.11.5.tgz#4ea43dd63857b0a35cd1f1b161dc29b43414e79f" + integrity sha512-Vc4aPJnRZKWfzeCBsqTBnzulVNjABVdahSPhtdMD3Vs80ykx4a87jTHtF/VR+alSrDmNvat7l13yrRHauGcHVw== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-module-imports" "^7.10.4" - "@babel/types" "^7.10.5" + "@babel/types" "^7.11.5" "@babel/helper-builder-react-jsx@^7.10.4": version "7.10.4" @@ -123,11 +123,10 @@ lodash "^4.17.19" "@babel/helper-explode-assignable-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" - integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b" + integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ== dependencies: - "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" "@babel/helper-function-name@^7.10.4": @@ -200,14 +199,13 @@ lodash "^4.17.19" "@babel/helper-remap-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" - integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== + version "7.11.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d" + integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA== dependencies: "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-wrap-function" "^7.10.4" "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" "@babel/helper-replace-supers@^7.10.4": @@ -275,10 +273,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1", "@babel/parser@^7.7.0": - version "7.11.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" - integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== +"@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.7.0": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" @@ -686,11 +684,11 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-react-jsx-development@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz#6ec90f244394604623880e15ebc3c34c356258ba" - integrity sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ== + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.11.5.tgz#e1439e6a57ee3d43e9f54ace363fb29cefe5d7b6" + integrity sha512-cImAmIlKJ84sDmpQzm4/0q/2xrXlDezQoixy3qoz1NJeZL/8PRon6xZtluvr4H4FzwlDGI5tCcFupMnXGtr+qw== dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.11.5" "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" @@ -796,9 +794,9 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/preset-env@~7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" - integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" + integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== dependencies: "@babel/compat-data" "^7.11.0" "@babel/helper-compilation-targets" "^7.10.4" @@ -862,7 +860,7 @@ "@babel/plugin-transform-unicode-escapes" "^7.10.4" "@babel/plugin-transform-unicode-regex" "^7.10.4" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.11.0" + "@babel/types" "^7.11.5" browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -870,9 +868,9 @@ semver "^5.5.0" "@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -909,25 +907,25 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.7.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" - integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== +"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.7.0": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" + "@babel/generator" "^7.11.5" "@babel/helper-function-name" "^7.10.4" "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.0" - "@babel/types" "^7.11.0" + "@babel/parser" "^7.11.5" + "@babel/types" "^7.11.5" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.4", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" - integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" + integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== dependencies: "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.19" @@ -1091,22 +1089,22 @@ dependencies: prop-types "^15.7.2" -"@jimp/bmp@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.0.tgz#8d96854b3f2dd64ffe11d46f73fd62b54e037d40" - integrity sha512-lc4Ecyys6mRpKHLjFefkS1irCeIBTCpDBjKvNkU/6cIeIMXrFhv290MDT0WCL4UNFjJC/oU2PPraq+M+RkAcpA== +"@jimp/bmp@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.1.tgz#6e2da655b2ba22e721df0795423f34e92ef13768" + integrity sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" bmp-js "^0.1.0" -"@jimp/core@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.16.0.tgz#cad38113293bd711e00710c755c4d14aa977d6ff" - integrity sha512-7WBYr3BX84fc9tuA86EDhAKNyT9QLcbVYk4whwvshxKtODPxlF1hmZU6Xmx2shoJ62JJtiWLsPsXAHKfEuERtQ== +"@jimp/core@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.16.1.tgz#68c4288f6ef7f31a0f6b859ba3fb28dae930d39d" + integrity sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" any-base "^1.1.0" buffer "^5.2.0" exif-parser "^0.1.12" @@ -1117,266 +1115,266 @@ pixelmatch "^4.0.2" tinycolor2 "^1.4.1" -"@jimp/custom@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.16.0.tgz#08489092e35425c8b3964efcf6172a08d5a93556" - integrity sha512-xN9WHeW2RP3gLdXdehCgnzKq8l9ezMsfWpkZP0HYtGqwGDSRXx+LNGR2Da1J/tV0pB+qbt67gAXtaxkJwdQ3cA== +"@jimp/custom@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.16.1.tgz#28b659c59e20a1d75a0c46067bd3f4bd302cf9c5" + integrity sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/core" "^0.16.0" + "@jimp/core" "^0.16.1" -"@jimp/gif@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.16.0.tgz#241cb429cfaeec8843e63db0a1f3d4148c26950f" - integrity sha512-thc3C6/dvGKEVTMxiX82ruRAitIx7EstThqzrd0qk7Yf2O3qbrRZuENl6KNn2PXpmkr6fjcfFLWVM39bP4MG1Q== +"@jimp/gif@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.16.1.tgz#d1f7c3a58f4666482750933af8b8f4666414f3ca" + integrity sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" gifwrap "^0.9.2" omggif "^1.0.9" -"@jimp/jpeg@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.16.0.tgz#fc668d4a28a16abb57531783a4a9f6ab4408ad15" - integrity sha512-pzlv92YZi7ySvIICNkB0eMphLztBcTAMH2kl5lxFMzF1FDv2FR2d/FI1ph6DSzBV8VYFDu4AM1lJRq3hFJurgQ== +"@jimp/jpeg@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.16.1.tgz#3b7bb08a4173f2f6d81f3049b251df3ee2ac8175" + integrity sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" - jpeg-js "^0.4.0" + "@jimp/utils" "^0.16.1" + jpeg-js "0.4.2" -"@jimp/plugin-blit@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.16.0.tgz#215435d253710614c080082c209a030da939d140" - integrity sha512-CrakcEvr2ztOwECKpuwmwhXArbtDP2SB44WV0wrFXtuss2mkBbL/hIkUmTnLyJGpwIflj4Vww9m5yIreG5lgUQ== +"@jimp/plugin-blit@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz#09ea919f9d326de3b9c2826fe4155da37dde8edb" + integrity sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-blur@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.16.0.tgz#d1630b95b247069e921bf80bd288d8acdf65eed9" - integrity sha512-CfTrQR4JY+DGtGbdAbdZgbUpjOqtcF+kmGOoa1uh3NF16tn1glbE8/0SA9YkgvHxNTmekwuT7Lu0nRq09MKVJw== +"@jimp/plugin-blur@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz#e614fa002797dcd662e705d4cea376e7db968bf5" + integrity sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-circle@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.16.0.tgz#3b9bc2f3a93b7bec16f067e1ad03ee11c3ab43f0" - integrity sha512-O79288GKwUIxpHR3qyYg0paH/Iegz+Bdo2ePIvD/M3MigEzVdj5dJ/CQXz2cUnJx87rc0k1N5cTI4floIgv0tg== +"@jimp/plugin-circle@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz#20e3194a67ca29740aba2630fd4d0a89afa27491" + integrity sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-color@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.16.0.tgz#9fd6e5f60c2c8451486ce3b2b96f4eefd662397a" - integrity sha512-S4CbN1r5+VjUF9OBIyWxWBTXRNutLQqAAOkq7QX//lS4HY76eOAafgWWwZR7ci9WWZT8uyyw4tfd4ePoBvoYhw== +"@jimp/plugin-color@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.16.1.tgz#0f298ba74dee818b663834cd80d53e56f3755233" + integrity sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" tinycolor2 "^1.4.1" -"@jimp/plugin-contain@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.16.0.tgz#26116ec8c3520e0e659f460c2ab88c443445bff4" - integrity sha512-ZAVe9ad0/TDLSPutIP/8Z+jXXOv638w/FZeA3avTAI5GfWV7ZBT6BB7kDI3iZTl+SHUjv/MlzHCS99WCnpc1hg== +"@jimp/plugin-contain@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz#3c5f5c495fd9bb08a970739d83694934f58123f2" + integrity sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-cover@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.16.0.tgz#1cfa9327ae81c1dfa57ca91120e653ea582cfb46" - integrity sha512-gJGorvc4HOeSR0dNR29mYLLXtrWvgj8da0B/lUJSb0R2AvUrb+VgLKSfFPyf+nL/jtcm9/CJzYhAPcz13zmRKA== +"@jimp/plugin-cover@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz#0e8caec16a40abe15b1b32e5383a603a3306dc41" + integrity sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-crop@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.16.0.tgz#901052a0984f9259d082caab0560044fe43bcccd" - integrity sha512-I5McmdrNodg0iU815qOsuI8CjkwiRsFRTY4/LBOsLGHZasvxhzFxGcwD3SgnohdIkhRc3tX8jfvKg2pdPbD2AA== +"@jimp/plugin-crop@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz#b362497c873043fe47ba881ab08604bf7226f50f" + integrity sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-displace@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.16.0.tgz#7dc9e57171b579d82945abc8a0259c2dbe38f601" - integrity sha512-+c5n5jDiN/neAuAxAAy55Gpycgmyay1PwUy8qKM1fgfBE874mrF5C4u1ThFz4OiDkRirKLpncRmrUMHa9boZtA== +"@jimp/plugin-displace@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz#4dd9db518c3e78de9d723f86a234bf98922afe8d" + integrity sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-dither@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.16.0.tgz#753bfaf9f9d9da61954310e7e02da3cae0d929cd" - integrity sha512-rsLHSGnpWniQXoughYXRCbK/8KKXi+avV5z5mHIKzAKS4areXW03XlLqmy9o26q2h0g/YV5Hkxo9jwIw0v2Fpg== +"@jimp/plugin-dither@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz#b47de2c0bb09608bed228b41c3cd01a85ec2d45b" + integrity sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-fisheye@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.0.tgz#cd7f148751834c61da8ec2015ac12eeb4ec4a008" - integrity sha512-P6KsHQHUOWyDprxKl4chPTwKIJNbXB7LGDQH6Bq/q8zZ9XwYXGnTmkHA/BwGKI6HGCj/+R2WoP3Cnhwm6XaIpg== +"@jimp/plugin-fisheye@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz#f625047b6cdbe1b83b89e9030fd025ab19cdb1a4" + integrity sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-flip@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.16.0.tgz#43101e504082092042ea499686db2a86f168a2f7" - integrity sha512-5MlqM1RJohk0NU0Z3ZtviI0DqHXDB0OuRk3dimUIquePz1OocFCt9Z4bBbDRIczGZFOrDrCrpHMfMxPjwm7eXw== +"@jimp/plugin-flip@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz#7a99ea22bde802641017ed0f2615870c144329bb" + integrity sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-gaussian@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.0.tgz#c0b5998dec529f55a8a16d1d53ca80f9c39302a4" - integrity sha512-oP2Hg4gR4uq9id1gF+SfTvPrzqZc3fVY+t6gwxPXPgpnb9S5UVuSQbwtixY1EEBC9XRdX2XFko9eUul8dTnUpQ== +"@jimp/plugin-gaussian@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz#0845e314085ccd52e34fad9a83949bc0d81a68e8" + integrity sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-invert@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.16.0.tgz#a8a342e463b22ae44205550785e1c4e1a0acc246" - integrity sha512-RFsES55G7po6rv35A/3jz7IA1BOr8krX4H0zmtKUprcrhFl+El9iZojVCpJQRJ5QKQVS3iXi5H6EGN7AT1HykQ== +"@jimp/plugin-invert@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz#7e6f5a15707256f3778d06921675bbcf18545c97" + integrity sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-mask@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.16.0.tgz#188566556ff0ddb85b9b0fc987f06bf7eee19ee8" - integrity sha512-inJweZgTNYZQdF0m5f/or5/LCLhpz4ccSDsK9HveuFQ82ITfJcvFaUlvlo11pHRl2r+Q92Er7B5g7icMIzXHZw== +"@jimp/plugin-mask@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz#e7f2460e05c3cda7af5e76f33ccb0579f66f90df" + integrity sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-normalize@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.16.0.tgz#668d3ac26fe77069cc1c4ed1089f271abe2784fc" - integrity sha512-sfqhHDGks0ccqIaTCG/dFJ772eGi8bewxIvrQkeLw5TizzPZ3S+C4GXKwlkX2z5dyQr30cHM5Mv6+XhNNLEHWw== +"@jimp/plugin-normalize@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz#032dfd88eefbc4dedc8b1b2d243832e4f3af30c8" + integrity sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-print@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.16.0.tgz#537b9ade9b0b21b876013f17c908cb466afd8b03" - integrity sha512-tQJfSOTf+las/PJpdUK9Aw9EdComQ50zl29TgMrAULuae1lh+e/A188ZhNQzTCpAAc/PEku8xoke+rYUU1AVig== +"@jimp/plugin-print@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.16.1.tgz#66b803563f9d109825970714466e6ab9ae639ff6" + integrity sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" load-bmfont "^1.4.0" -"@jimp/plugin-resize@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.16.0.tgz#91d16bf12e23f43a76e2698725921ba45529ac97" - integrity sha512-aI5H1Xe1fE1phBBI0EgQiVgMEXJ7cy2CXH+H7WSxnrdZJTnt9emzc4LnvKEOPBY6dCPw3P7k/BHp9SDTpUKSOQ== +"@jimp/plugin-resize@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz#65e39d848ed13ba2d6c6faf81d5d590396571d10" + integrity sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-rotate@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.16.0.tgz#1c6ef9d50f935a4ec4ce72b978333bbc91338a6e" - integrity sha512-YTKo4LntC2h46H6+De+3ctt8MacC+fTbIdw527BBBIKF44aWYn0uAQlAO+R+Aemnq4YqNnCnrZzPtWYZXA6nNw== +"@jimp/plugin-rotate@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz#53fb5d51a4b3d05af9c91c2a8fffe5d7a1a47c8c" + integrity sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-scale@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.16.0.tgz#4a4519058a390033ee5d274822e55c7565354498" - integrity sha512-AfDnTIjBzGdvJ1K7MkUexgkGGAYDzpNzkYoCpfaRNKl/txoivaA6iKfvCiE7i1IDXq5mRCLkjQjMF43l8kwv5g== +"@jimp/plugin-scale@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz#89f6ba59feed3429847ed226aebda33a240cc647" + integrity sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-shadow@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.16.0.tgz#3ca117ce1dd90756dfb8fcda57f7e56e45240188" - integrity sha512-8O1CKwvSnrrAIuAM3BEDTwt4U5oRVB5pXxnRegYXDuFFLDPIp2N4ILQqC2NaN+PBaVvj1JuLYuxmNzja0uRQKQ== +"@jimp/plugin-shadow@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz#a7af892a740febf41211e10a5467c3c5c521a04c" + integrity sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugin-threshold@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.16.0.tgz#98bf41f89c0bd371cc950e222eab45035819d237" - integrity sha512-PNrB6IIF7kDGu7A/cyNAy3pchWtXbJGdpowkW6hcEzXOR+FwBRMuo5LS+q/eedo86qQ2F1vw5dm/nWYJxNxvkg== +"@jimp/plugin-threshold@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz#34f3078f9965145b7ae26c53a32ad74b1195bbf5" + integrity sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" -"@jimp/plugins@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.16.0.tgz#d0d140675978110ccc3c4d0b13bb129c93b23638" - integrity sha512-aiyn/9MrSqVJwsnBmkbHD4DWTowULdP4NEes8Vt738KxZMw1UawKbEbj3/CzHIeEIQKjDECTi+jNd5HIbDq9LQ== +"@jimp/plugins@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.16.1.tgz#9f08544c97226d6460a16ced79f57e85bec3257b" + integrity sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/plugin-blit" "^0.16.0" - "@jimp/plugin-blur" "^0.16.0" - "@jimp/plugin-circle" "^0.16.0" - "@jimp/plugin-color" "^0.16.0" - "@jimp/plugin-contain" "^0.16.0" - "@jimp/plugin-cover" "^0.16.0" - "@jimp/plugin-crop" "^0.16.0" - "@jimp/plugin-displace" "^0.16.0" - "@jimp/plugin-dither" "^0.16.0" - "@jimp/plugin-fisheye" "^0.16.0" - "@jimp/plugin-flip" "^0.16.0" - "@jimp/plugin-gaussian" "^0.16.0" - "@jimp/plugin-invert" "^0.16.0" - "@jimp/plugin-mask" "^0.16.0" - "@jimp/plugin-normalize" "^0.16.0" - "@jimp/plugin-print" "^0.16.0" - "@jimp/plugin-resize" "^0.16.0" - "@jimp/plugin-rotate" "^0.16.0" - "@jimp/plugin-scale" "^0.16.0" - "@jimp/plugin-shadow" "^0.16.0" - "@jimp/plugin-threshold" "^0.16.0" + "@jimp/plugin-blit" "^0.16.1" + "@jimp/plugin-blur" "^0.16.1" + "@jimp/plugin-circle" "^0.16.1" + "@jimp/plugin-color" "^0.16.1" + "@jimp/plugin-contain" "^0.16.1" + "@jimp/plugin-cover" "^0.16.1" + "@jimp/plugin-crop" "^0.16.1" + "@jimp/plugin-displace" "^0.16.1" + "@jimp/plugin-dither" "^0.16.1" + "@jimp/plugin-fisheye" "^0.16.1" + "@jimp/plugin-flip" "^0.16.1" + "@jimp/plugin-gaussian" "^0.16.1" + "@jimp/plugin-invert" "^0.16.1" + "@jimp/plugin-mask" "^0.16.1" + "@jimp/plugin-normalize" "^0.16.1" + "@jimp/plugin-print" "^0.16.1" + "@jimp/plugin-resize" "^0.16.1" + "@jimp/plugin-rotate" "^0.16.1" + "@jimp/plugin-scale" "^0.16.1" + "@jimp/plugin-shadow" "^0.16.1" + "@jimp/plugin-threshold" "^0.16.1" timm "^1.6.1" -"@jimp/png@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.16.0.tgz#d18f16ca8037ebfabab6e1c62b516329fbd356d8" - integrity sha512-3uDwCeZRaHTq6Jqjav37n73IGL4vrDkoHLzkC+dAGcSdaKnUnRxD/sO4CBTK1cHttJhsf5Xk/+0dO+qaqIEvNA== +"@jimp/png@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.16.1.tgz#f24cfc31529900b13a2dd9d4fdb4460c1e4d814e" + integrity sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.0" + "@jimp/utils" "^0.16.1" pngjs "^3.3.3" -"@jimp/tiff@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.16.0.tgz#4c549b3bb0adebbddf0a0315b1893584b5520b70" - integrity sha512-wiGgIKGtUwR7vUi+PHv7qzEKhlnqT/k78qtOgsF6PiGhXGevJWBIniD4LksbQaW+Ph1Jwl3ovvYEdS89Db46Bw== +"@jimp/tiff@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.16.1.tgz#0e8756695687d7574b6bc73efab0acd4260b7a12" + integrity sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ== dependencies: "@babel/runtime" "^7.7.2" utif "^2.0.1" -"@jimp/types@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.16.0.tgz#cc07b42ccc9e227a1adb6cb742befcf29d538e5e" - integrity sha512-T0VBF1HFXZ+Ez48zQ0sxrOpcFbfSzCulaVONWeEi/CqcNv2B7UmiaA81bw9uLGZ40VIOrFYHB20ma0m1asYBvw== +"@jimp/types@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.16.1.tgz#0dbab37b3202315c91010f16c31766d35a2322cc" + integrity sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/bmp" "^0.16.0" - "@jimp/gif" "^0.16.0" - "@jimp/jpeg" "^0.16.0" - "@jimp/png" "^0.16.0" - "@jimp/tiff" "^0.16.0" + "@jimp/bmp" "^0.16.1" + "@jimp/gif" "^0.16.1" + "@jimp/jpeg" "^0.16.1" + "@jimp/png" "^0.16.1" + "@jimp/tiff" "^0.16.1" timm "^1.6.1" -"@jimp/utils@^0.16.0": - version "0.16.0" - resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.16.0.tgz#5a5f2755b468fa2afe024a81455905a038b88391" - integrity sha512-dZJd5Rq4yOjPtqN/bArNy0v03nnaiHCf/Qct2wdiqK0k4wsfDL2Lle9XmswNcPPFuoL/LNnYY2E5ruAnatF/4A== +"@jimp/utils@^0.16.1": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.16.1.tgz#2f51e6f14ff8307c4aa83d5e1a277da14a9fe3f7" + integrity sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw== dependencies: "@babel/runtime" "^7.7.2" regenerator-runtime "^0.13.3" @@ -1474,15 +1472,15 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== -"@types/json-schema@^7.0.4": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" - integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== +"@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== "@types/lodash@~4.14.158": - version "4.14.159" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.159.tgz#61089719dc6fdd9c5cb46efc827f2571d1517065" - integrity sha512-gF7A72f7WQN33DpqOWw9geApQPh4M3PxluMtaHxWHXEGSN12/WbcEk/eNSqWNQcQhF66VSZ06vCF94CrHwXJDg== + version "4.14.161" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.161.tgz#a21ca0777dabc6e4f44f3d07f37b765f54188b18" + integrity sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA== "@types/minimatch@*": version "3.0.3" @@ -1495,9 +1493,9 @@ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= "@types/node@*": - version "14.6.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" - integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA== + version "14.11.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.1.tgz#56af902ad157e763f9ba63d671c39cda3193c835" + integrity sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1520,9 +1518,9 @@ integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= "@types/react@~16.9.44": - version "16.9.46" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.46.tgz#f0326cd7adceda74148baa9bff6e918632f5069e" - integrity sha512-dbHzO3aAq1lB3jRQuNpuZ/mnu+CdD3H0WVaaBQA8LTT3S33xhVBUj232T8M3tAhSWJs/D/UqORYUlJNl/8VQZg== + version "16.9.49" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872" + integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -1564,9 +1562,9 @@ source-map "^0.7.3" "@types/webpack@^4.4.31", "@types/webpack@^4.41.8": - version "4.41.21" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.21.tgz#cc685b332c33f153bb2f5fc1fa3ac8adeb592dee" - integrity sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA== + version "4.41.22" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.22.tgz#ff9758a17c6bd499e459b91e78539848c32d0731" + integrity sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ== dependencies: "@types/anymatch" "*" "@types/node" "*" @@ -1809,9 +1807,9 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: negotiator "0.6.2" acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== acorn-walk@^7.1.1: version "7.2.0" @@ -1841,9 +1839,9 @@ agent-base@^4.3.0: es6-promisify "^5.0.0" aggregate-error@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" - integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" @@ -1868,15 +1866,15 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3: - version "6.12.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" - integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2187,9 +2185,9 @@ atob@^2.1.2: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== attr-accept@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.1.tgz#89b48de019ed4342f1865626b4389c666b3ed231" - integrity sha512-GpefLMsbH5ojNgfTW+OBin2xKzuHfyeNA+qCktzZojBhbA/lPZdCFMWdwk5ajb989Ok7ZT+EADqvW3TAFNMjhA== + version "2.2.2" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" + integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== author-regex@^1.0.0: version "1.0.0" @@ -2364,7 +2362,7 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.1: +bl@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== @@ -2536,14 +2534,14 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.12.0, browserslist@^4.8.5: - version "4.14.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" - integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== + version "4.14.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" + integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== dependencies: - caniuse-lite "^1.0.30001111" - electron-to-chromium "^1.3.523" - escalade "^3.0.2" - node-releases "^1.1.60" + caniuse-lite "^1.0.30001131" + electron-to-chromium "^1.3.570" + escalade "^3.1.0" + node-releases "^1.1.61" browserstack@^1.5.1: version "1.6.0" @@ -2648,7 +2646,7 @@ cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.4, cacache@^15.0.5: +cacache@^15.0.5: version "15.0.5" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== @@ -2749,10 +2747,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== -caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001111: - version "1.0.30001116" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz#f3a3dea347f9294a3bdc4292309039cc84117fb8" - integrity sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ== +caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: + version "1.0.30001131" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001131.tgz#afad8a28fc2b7a0d3ae9407e71085a0ead905d54" + integrity sha512-4QYi6Mal4MMfQMSqGIRPGbKIbZygeN83QsWq1ixpUwvtfgAZot5BrCKzGygvZaV+CnELdTwD0S4cqUNozq7/Cw== case-sensitive-paths-webpack-plugin@~2.3.0: version "2.3.0" @@ -2918,7 +2916,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2, classnames@~2.2.6: +classnames@^2.2, classnames@^2.2.5, classnames@~2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== @@ -3108,9 +3106,9 @@ commander@^4.1.1: integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.0.0.tgz#2b270da94f8fb9014455312f829a1129dbf8887e" - integrity sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" + integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== commondir@^1.0.1: version "1.0.1" @@ -3239,18 +3237,18 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= copy-webpack-plugin@~6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz#2b3d2bfc6861b96432a65f0149720adbd902040b" - integrity sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA== + version "6.0.4" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.4.tgz#7b7d7f7f290aa21b3411d02525859b89988a200b" + integrity sha512-zCazfdYAh3q/O4VzZFiadWGpDA2zTs6FC6D7YTHD6H1J40pzo0H4z22h1NYMCl4ArQP4CK8y/KWqPrJ4rVkZ5A== dependencies: - cacache "^15.0.4" + cacache "^15.0.5" fast-glob "^3.2.4" find-cache-dir "^3.3.1" glob-parent "^5.1.1" globby "^11.0.1" loader-utils "^2.0.0" normalize-path "^3.0.0" - p-limit "^3.0.1" + p-limit "^3.0.2" schema-utils "^2.7.0" serialize-javascript "^4.0.0" webpack-sources "^1.4.3" @@ -3394,15 +3392,14 @@ css-box-model@^1.2.0: tiny-invariant "^1.0.6" css-loader@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.2.1.tgz#9f48fd7eae1219d629a3f085ba9a9102ca1141a7" - integrity sha512-MoqmF1if7Z0pZIEXA4ZF9PgtCXxWbfzfJM+3p+OYfhcrwcqhaCRb74DSnfzRl7e024xEiCRn5hCvfUbTf2sgFA== + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.2.2.tgz#b668b3488d566dc22ebcf9425c5f254a05808c89" + integrity sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg== dependencies: camelcase "^6.0.0" cssesc "^3.0.0" icss-utils "^4.1.1" loader-utils "^2.0.0" - normalize-path "^3.0.0" postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" postcss-modules-local-by-default "^3.0.3" @@ -3438,9 +3435,9 @@ csstype@^2.5.7: integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== csstype@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.2.tgz#ee5ff8f208c8cd613b389f7b222c9801ca62b3f7" - integrity sha512-ofovWglpqoqbfLNOTBNZLSbMuGrblAf1efvvArGKOZMBrIoJeu5UsAipQolkijtyQx5MtAzT/J9IHj/CEY1mJw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" + integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== cyclist@^1.0.1: version "1.0.1" @@ -3781,9 +3778,9 @@ domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" + integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== domhandler@^2.3.0: version "2.4.2" @@ -3864,10 +3861,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.523: - version "1.3.539" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.539.tgz#9952fb0bf3fb4295282e7df35f6e7a2a8b89d3fd" - integrity sha512-rM0LWDIstdqfaRUADZetNrL6+zd/0NBmavbMEhBXgc2u/CC1d1GaDyN5hho29fFvBiOVFwrSWZkzmNcZnCEDog== +electron-to-chromium@^1.3.570: + version "1.3.570" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" + integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== elliptic@^6.5.3: version "6.5.3" @@ -3936,9 +3933,9 @@ entities@^2.0.0: integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== enzyme-adapter-react-16@^1.1.1: - version "1.15.3" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.3.tgz#90154055be3318d70a51df61ac89cfa22e3d5f60" - integrity sha512-98rqNI4n9HZslWIPuuwy4hK1bxRuMy+XX0CU1dS8iUqcgisTxeBaap6oPp2r4MWC8OphCbbqAT8EU/xHz3zIaQ== + version "1.15.4" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.4.tgz#328a782365a363ecb424f99283c4833dd92c0f21" + integrity sha512-wPzxs+JaGDK2TPYzl5a9YWGce6i2SQ3Cg51ScLeyj2WotUZ8Obcq1ke/U1Y2VGpYlb9rrX2yCjzSMgtKCeAt5w== dependencies: enzyme-adapter-utils "^1.13.1" enzyme-shallow-equal "^1.0.4" @@ -4029,6 +4026,24 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.4, es-abstrac string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-abstract@^1.18.0-next.0: + version "1.18.0-next.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" + integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -4050,10 +4065,10 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escalade@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" - integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== +escalade@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" + integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== escape-html@~1.0.3: version "1.0.3" @@ -4096,11 +4111,11 @@ eslint-scope@^4.0.3: estraverse "^4.1.1" eslint-scope@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" eslint-utils@^1.4.3: @@ -4179,19 +4194,19 @@ esquery@^1.0.1: dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== @@ -4220,9 +4235,9 @@ event-stream@3.3.4: through "~2.3.1" eventemitter3@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: version "3.2.0" @@ -4437,6 +4452,11 @@ fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-memoize@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" + integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== + fastq@^1.6.0: version "1.8.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" @@ -4523,11 +4543,11 @@ file-loader@~6.0.0: schema-utils "^2.6.5" file-selector@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.12.tgz#fe726547be219a787a9dcc640575a04a032b1fd0" - integrity sha512-Kx7RTzxyQipHuiqyZGf+Nz4vY9R1XGxuQl/hLoJwq+J4avk/9wxxgZyHKtbyIPJmbD4A66DWGYfyykWNpcYutQ== + version "0.1.13" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.13.tgz#5efd977ca2bca1700992df1b10e254f4e73d2df4" + integrity sha512-T2efCBY6Ps+jLIWdNQsmzt/UnAjKOEAlsZVdnQztg/BtAZGNL4uX1Jet9cMM8gify/x4CSudreji2HssGBNVIQ== dependencies: - tslib "^1.9.0" + tslib "^2.0.1" file-type@^12.3.0: version "12.4.2" @@ -5071,7 +5091,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0, has-symbols@^1.0.1: +has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -5214,7 +5234,22 @@ html-tags@^3.1.0: resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== -"html-webpack-plugin@>=4.0.0 || ^4.0.0-beta.11", html-webpack-plugin@~4.3.0: +"html-webpack-plugin@>=4.0.0 || ^4.0.0-beta.11": + version "4.4.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.4.1.tgz#61ab85aa1a84ba181443345ebaead51abbb84149" + integrity sha512-nEtdEIsIGXdXGG7MjTTZlmhqhpHU9pJFc1OYxcP36c5/ZKP6b0BJMww2QTvJGQYA9aMxUnjDujpZdYcVOXiBCQ== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +html-webpack-plugin@~4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd" integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w== @@ -5312,9 +5347,9 @@ http-signature@~1.2.0: sshpk "^1.7.0" http-status-codes@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.1.2.tgz#dc5b7ccd72fb383d1d7c21adbbddc3b125f6a5b7" - integrity sha512-zpZ1nBcoR0j1FLQ7xbXXBy1z/yUfAi+0a5IZBoZnmOseYkaljdzQ17ZeVXFlK23IbLxMJn6aWI0uU92DQQrG0g== + version "2.1.3" + resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.1.3.tgz#d0ab99a7f79afb43dd735bc862ff350171f3cc2f" + integrity sha512-/kDMtEEhAw747LvzDupRRsUOrmw/oEPmwf61guegI1ycj0vyywitq4BhGPknLzqAEBQvsW6rSv0dd2de1MU+yg== https-browserify@^1.0.0: version "1.0.0" @@ -5647,9 +5682,9 @@ is-buffer@^2.0.0: integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" + integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== is-data-descriptor@^0.1.4: version "0.1.4" @@ -5775,6 +5810,11 @@ is-invalid-path@^0.1.0: dependencies: is-glob "^2.0.0" +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + is-number-object@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" @@ -5852,7 +5892,7 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0: +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== @@ -5989,20 +6029,20 @@ jest-worker@^26.3.0: supports-color "^7.0.0" jimp@^0.10.3, jimp@^0.16.0, jimp@^0.8.3: - version "0.16.0" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.16.0.tgz#d01a1709634c22aa113df02076dbe4db7ca55acc" - integrity sha512-WRfGlXB6/0xY3mSoskfVhWVNSegVZCgmvunJDc41QthTWi5oRG2FeL7eOcX0zz/Z+dYRu6Q0ibO2yltC+EIptA== + version "0.16.1" + resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.16.1.tgz#192f851a30e5ca11112a3d0aa53137659a78ca7a" + integrity sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw== dependencies: "@babel/runtime" "^7.7.2" - "@jimp/custom" "^0.16.0" - "@jimp/plugins" "^0.16.0" - "@jimp/types" "^0.16.0" + "@jimp/custom" "^0.16.1" + "@jimp/plugins" "^0.16.1" + "@jimp/types" "^0.16.1" regenerator-runtime "^0.13.3" -jpeg-js@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.1.tgz#937a3ae911eb6427f151760f8123f04c8bfe6ef7" - integrity sha512-jA55yJiB5tCXEddos8JBbvW+IMrqY0y1tjjx9KNVtA+QPmu7ND5j0zkKopClpUTsaETL135uOM2XfcYG4XRjmw== +jpeg-js@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d" + integrity sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw== jquery@*: version "3.5.1" @@ -6042,6 +6082,11 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6219,9 +6264,9 @@ lint-staged@~10.2.13: stringify-object "^3.3.0" listr2@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.0.tgz#788a3d202978a1b8582062952cbc49272c8e206a" - integrity sha512-nwmqTJYQQ+AsKb4fCXH/6/UmLCEDL1jkRAdSn9M6cEUzoRGrs33YD/3N86gAZQnGZ6hxV18XSdlBcJ1GTmetJA== + version "2.6.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a" + integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -6339,9 +6384,9 @@ log-update@^4.0.0: wrap-ansi "^6.2.0" loglevel@^1.6.8: - version "1.6.8" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" - integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== longest-streak@^2.0.1: version "2.0.4" @@ -6494,9 +6539,9 @@ memory-fs@^0.5.0: readable-stream "^2.0.1" meow@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.0.tgz#50ecbcdafa16f8b58fb7eb9675b933f6473b3a59" - integrity sha512-kq5F0KVteskZ3JdfyQFivJEj2RaA8NFsS4+r9DaMKLcUHpk5OcHS3Q0XkCXONB1mZRPsu/Y/qImKri0nwSEZog== + version "7.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" + integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" @@ -6733,9 +6778,9 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mobx-react-lite@>=2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-2.2.0.tgz#95eecde237367af1087cc5c51d962ae081b6d1de" - integrity sha512-FUPacb4bk21qp/wrEv2vPcqC314nGRgHQzzIPHVBGAT5GtzaYiwvMHx192/Vy8TyI4+8H5JY9689jnvDOvLRuQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-2.2.2.tgz#87c217dc72b4e47b22493daf155daf3759f868a6" + integrity sha512-2SlXALHIkyUPDsV4VTKVR9DW7K3Ksh1aaIv3NrNJygTbhXe2A9GrcKHZ2ovIiOp/BXilOcTYemfHHZubP431dg== mobx-react@~6.3.0: version "6.3.0" @@ -6750,9 +6795,9 @@ mobx@~5.15.6: integrity sha512-U5nnx3UNdRkUjntpwzO060VWifGVx/JZeu/aMw4y28dTjDNjoY3vNKs6tFNm7z1qIfcPInsd9L9HIm8H0zTDqg== moment@>=1.6.0: - version "2.27.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" - integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + version "2.28.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.28.0.tgz#cdfe73ce01327cee6537b0fafac2e0f21a237d75" + integrity sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw== moment@~2.24.0: version "2.24.0" @@ -6842,9 +6887,9 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= nearley@^2.7.10: - version "2.19.5" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.5.tgz#6be78e4942eeb9a043b17c563413111d4ad849b7" - integrity sha512-qoh1ZXXl0Kpn40tFhmgvffUAlbpRMcjLUagNVnT1JmliUIsB4tFabmCNhD97+tkf9FZ/SLhhYzNow0V3GitzDg== + version "2.19.6" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.6.tgz#22663fd7326eb708b4c18bfdd7e4ce204b7239b0" + integrity sha512-OV3Lx+o5iIGWVY38zs+7aiSnBqaHTFAOQiz83VHJje/wOOaSgzE3H0S/xfISxJhFSoPcX611OEDV9sCT8F283g== dependencies: commander "^2.19.0" moo "^0.5.0" @@ -6876,9 +6921,9 @@ no-case@^3.0.3: tslib "^1.10.0" node-abi@^2.7.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.18.0.tgz#1f5486cfd7d38bd4f5392fa44a4ad4d9a0dffbf4" - integrity sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw== + version "2.19.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.19.1.tgz#6aa32561d0a5e2fdb6810d8c25641b657a8cea85" + integrity sha512-HbtmIuByq44yhAzK7b9j/FelKlHYISKQn0mtvcBrU5QBkhoCMp5bu8Hv5AI34DcKfOAcJBcOEMwLlwO62FFu9A== dependencies: semver "^5.4.1" @@ -6887,10 +6932,10 @@ node-addon-api@^3.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.0.0.tgz#812446a1001a54f71663bed188314bba07e09247" integrity sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg== -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== node-libs-browser@^2.2.1: version "2.2.1" @@ -6921,10 +6966,10 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^1.1.60: - version "1.1.60" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" - integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== +node-releases@^1.1.61: + version "1.1.61" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" + integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== noop-logger@^0.1.1: version "0.1.1" @@ -7045,7 +7090,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: +object-inspect@^1.7.0, object-inspect@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== @@ -7058,7 +7103,7 @@ object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2: define-properties "^1.1.3" es-abstract "^1.17.5" -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -7071,14 +7116,14 @@ object-visit@^1.0.0: isobject "^3.0.0" object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + version "4.1.1" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" + integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.0" + has-symbols "^1.0.1" + object-keys "^1.1.1" object.entries@^1.1.1, object.entries@^1.1.2: version "1.1.2" @@ -7166,9 +7211,9 @@ opencollective-postinstall@^2.0.2: integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== opener@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== opn@^5.5.0: version "5.5.0" @@ -7237,7 +7282,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.1, p-limit@^3.0.2: +p-limit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== @@ -7373,13 +7418,13 @@ parse-json@^4.0.0: json-parse-better-errors "^1.0.1" parse-json@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.1.tgz#7cfe35c1ccd641bce3981467e6c2ece61b3b3878" - integrity sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" parse-passwd@^1.0.0: @@ -7626,9 +7671,9 @@ postcss-less@^3.1.4: postcss "^7.0.14" postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.1.tgz#0a684bb8beb05e55baf922f7ab44c3edb17cf78e" + integrity sha512-D2ENobdoZsW0+BHy4x1CAkXtbXtYWYRIxL/JbtRBqrRGOPtJ2zoga/bEZWhV/ShWB5saVxJMzbMdSyA/vv4tXw== dependencies: cosmiconfig "^5.0.0" import-cwd "^2.0.0" @@ -7738,9 +7783,9 @@ postcss-value-parser@^4.1.0: integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6, postcss@^7.0.7: - version "7.0.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + version "7.0.34" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" + integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -8049,6 +8094,13 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +re-resizable@6.3.2: + version "6.3.2" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.3.2.tgz#27cc984af6ea5dbafd2b79f64c5224a6e1722fbe" + integrity sha512-ngxe4XBSb46vfwXjAwpURacVDig/pPt1kHRhcKlRRIoGICmo4aQHr725jurezepp1pm5jSC6iQhyLYfx3zOC3w== + dependencies: + fast-memoize "^2.5.1" + react-beautiful-dnd@~13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#f70cc8ff82b84bc718f8af157c9f95757a6c3b40" @@ -8105,6 +8157,14 @@ react-dom@~16.13.1: prop-types "^15.6.2" scheduler "^0.19.1" +react-draggable@4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" + integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== + dependencies: + classnames "^2.2.5" + prop-types "^15.6.0" + react-dropzone@~10.2.2: version "10.2.2" resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-10.2.2.tgz#67b4db7459589a42c3b891a82eaf9ade7650b815" @@ -8180,6 +8240,15 @@ react-redux@^7.1.1: prop-types "^15.7.2" react-is "^16.9.0" +react-rnd@~10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/react-rnd/-/react-rnd-10.2.2.tgz#378017178179c9e6cdca57280dee22cf48925b5a" + integrity sha512-UoQnNehseKEspimfPFaO0gN0vSVJ8uCZeG39nCibUVyGTjZ5d+bnY/zHEp9SObHQ9tKW4vFSa9+8Mf7QZrQrUw== + dependencies: + re-resizable "6.3.2" + react-draggable "4.4.3" + tslib "2.0.0" + react-select@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.1.0.tgz#ab098720b2e9fe275047c993f0d0caf5ded17c27" @@ -8406,9 +8475,9 @@ regexpp@^2.0.1: integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.2.0" @@ -8727,9 +8796,9 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs@^6.6.0, rxjs@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" - integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== dependencies: tslib "^1.9.0" @@ -8772,9 +8841,9 @@ sass-material-colors@~0.0.5: integrity sha1-uURTkjbJTi1OzjXS7j+iLxCy7UM= sass@~1.26.9: - version "1.26.10" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" - integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== + version "1.26.11" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.11.tgz#0f22cc4ab2ba27dad1d4ca30837beb350b709847" + integrity sha512-W1l/+vjGjIamsJ6OnTe0K37U2DBO/dgsv2Z4c89XQ8ZOO6l/VwkqwLSqoYzJeJs6CLuGSTRWc91GbQFL3lvrvw== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -8808,13 +8877,13 @@ schema-utils@^1.0.0: ajv-keywords "^3.1.0" schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" search-params@2.1.3: version "2.1.3" @@ -8837,11 +8906,11 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: xml2js "^0.4.17" selfsigned@^1.10.7: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== dependencies: - node-forge "0.9.0" + node-forge "^0.10.0" semver-compare@^1.0.0: version "1.0.0" @@ -9005,12 +9074,12 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" - integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" + integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== dependencies: - es-abstract "^1.17.0-next.1" - object-inspect "^1.7.0" + es-abstract "^1.18.0-next.0" + object-inspect "^1.8.0" signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" @@ -9210,9 +9279,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== spdy-transport@^3.0.0: version "3.0.0" @@ -9417,13 +9486,12 @@ string.prototype.matchall@^4.0.2: side-channel "^1.0.2" string.prototype.trim@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" - integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.2.tgz#f538d0bacd98fc4297f0bef645226d5aaebf59f3" + integrity sha512-b5yrbl3BXIjHau9Prk7U0RRYcUYdN4wGSVaqoBQS50CCE3KBuYU0TYRNPFCP7aVoNMX87HKThdMRVIP3giclKg== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.0" string.prototype.trimend@^1.0.1: version "1.0.1" @@ -9647,9 +9715,9 @@ supports-color@^6.1.0: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -9689,11 +9757,11 @@ tar-fs@^2.0.0: tar-stream "^2.0.0" tar-stream@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" - integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== dependencies: - bl "^4.0.1" + bl "^4.0.3" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" @@ -9751,9 +9819,9 @@ terser@^4.1.2, terser@^4.6.3: source-map-support "~0.5.12" terser@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.2.0.tgz#e547d0b20926b321d3e524bf9e5bc1b10ba2f360" - integrity sha512-nZ9TWhBznZdlww3borgJyfQDrxzpgd0RlRNoxR63tMVry01lIH/zKQDTTiaWRMGowydfvSHMgyiGyn6A9PSkCQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.2.tgz#f4bea90eb92945b2a028ceef79181b9bb586e7af" + integrity sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -9798,9 +9866,9 @@ timers-browserify@^2.0.4: setimmediate "^1.0.4" timm@^1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd" - integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw== + version "1.7.1" + resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" + integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== tiny-invariant@^1.0.6: version "1.1.0" @@ -9917,11 +9985,21 @@ tryer@^1.0.1: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +tslib@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" + integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== + tslib@^1.10.0, 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.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" + integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -9992,9 +10070,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= ua-parser-js@~0.7.21: - version "0.7.21" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" - integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + version "0.7.22" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" + integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== unherit@^1.0.4: version "1.1.3" @@ -10028,9 +10106,9 @@ unicode-property-aliases-ecmascript@^1.0.4: integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== unified@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.1.0.tgz#7ba82e5db4740c47a04e688a9ca8335980547410" - integrity sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag== + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -10130,9 +10208,9 @@ upath@^1.1.1: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" @@ -10253,9 +10331,9 @@ verror@1.10.0: extsprintf "^1.2.0" vfile-location@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3" - integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.1.0.tgz#81cd8a04b0ac935185f4fce16f270503fc2f692f" + integrity sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g== vfile-message@^2.0.0: version "2.0.4" @@ -10453,9 +10531,9 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- source-map "~0.6.1" webpack@~4.44.1: - version "4.44.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" - integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0"