From 59142a2071b3d967e4bc5af7c82f23f209e19a0a Mon Sep 17 00:00:00 2001 From: Jeremy Tuloup Date: Fri, 19 Mar 2021 10:56:48 +0100 Subject: [PATCH] Base off KernelWidgetManager from latest alpha packages --- packages/voila/package.json | 6 +- packages/voila/src/manager.ts | 105 ++++------------------------ packages/voila/src/plugins.ts | 48 ++----------- yarn.lock | 126 +++++++++++++++++++++------------- 4 files changed, 101 insertions(+), 184 deletions(-) diff --git a/packages/voila/package.json b/packages/voila/package.json index afbc5d362..6938f7914 100644 --- a/packages/voila/package.json +++ b/packages/voila/package.json @@ -8,9 +8,9 @@ "main": "lib/index.js", "browserslist": ">0.8%, not ie 11, not op_mini all, not dead", "dependencies": { - "@jupyter-widgets/base": "^4.0.0", - "@jupyter-widgets/controls": "^3.0.0", - "@jupyter-widgets/jupyterlab-manager": "^3.0.0", + "@jupyter-widgets/base": "^5.0.0-alpha.2", + "@jupyter-widgets/controls": "^4.0.0-alpha.2", + "@jupyter-widgets/jupyterlab-manager": "^4.0.0-alpha.1", "@jupyterlab/json-extension": "^3.0.0", "@jupyterlab/markdownviewer-extension": "^3.0.0", "@jupyterlab/mathjax2-extension": "^3.0.0", diff --git a/packages/voila/src/manager.ts b/packages/voila/src/manager.ts index a18809ebf..3a3b495e4 100644 --- a/packages/voila/src/manager.ts +++ b/packages/voila/src/manager.ts @@ -7,21 +7,14 @@ * The full license is in the file LICENSE, distributed with this software. * ****************************************************************************/ -import { - WidgetManager as JupyterLabManager, - WidgetRenderer -} from '@jupyter-widgets/jupyterlab-manager'; +import { WidgetRenderer, output } from '@jupyter-widgets/jupyterlab-manager'; -import { output } from '@jupyter-widgets/jupyterlab-manager'; +import { KernelWidgetManager } from '@jupyter-widgets/jupyterlab-manager/lib/manager'; import * as base from '@jupyter-widgets/base'; import * as controls from '@jupyter-widgets/controls'; -import { DocumentRegistry } from '@jupyterlab/docregistry'; - -import { INotebookModel } from '@jupyterlab/notebook'; - import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import * as LuminoWidget from '@lumino/widgets'; @@ -30,25 +23,24 @@ import { MessageLoop } from '@lumino/messaging'; import { Widget } from '@lumino/widgets'; -import { batchRateMap } from './utils'; +import { Kernel } from '@jupyterlab/services'; const WIDGET_MIMETYPE = 'application/vnd.jupyter.widget-view+json'; /** * A custom widget manager to render widgets with Voila */ -export class WidgetManager extends JupyterLabManager { +export class WidgetManager extends KernelWidgetManager { constructor( - context: DocumentRegistry.IContext, - rendermime: IRenderMimeRegistry, - settings: JupyterLabManager.Settings + kernel: Kernel.IKernelConnection, + rendermime: IRenderMimeRegistry ) { - super(context, rendermime, settings); + super(kernel, rendermime); rendermime.addFactory( { safe: false, mimeTypes: [WIDGET_MIMETYPE], - createRenderer: options => new WidgetRenderer(options, this) + createRenderer: options => new WidgetRenderer(options) }, 1 ); @@ -56,7 +48,6 @@ export class WidgetManager extends JupyterLabManager { } async build_widgets(): Promise { - const models = await this._build_models(); const tags = document.body.querySelectorAll( 'script[type="application/vnd.jupyter.widget-view+json"]' ); @@ -67,13 +58,11 @@ export class WidgetManager extends JupyterLabManager { try { const widgetViewObject = JSON.parse(viewtag.innerHTML); const { model_id } = widgetViewObject; - const model = models[model_id]; + const model = await this.get_model(model_id); const widgetel = document.createElement('div'); viewtag.parentElement.insertBefore(widgetel, viewtag); - // TODO: fix typing - await this.display_model(undefined as any, model, { - el: widgetel - }); + const view = await this.create_view(model); + this.display_view(view, widgetel); } catch (error) { // Each widget view tag rendering is wrapped with a try-catch statement. // @@ -84,13 +73,14 @@ export class WidgetManager extends JupyterLabManager { // // This workaround may not be necessary anymore with templates that make use // of progressive rendering. + console.error(error); } }); } - async display_view(msg: any, view: any, options: any): Promise { - if (options.el) { - LuminoWidget.Widget.attach(view.pWidget, options.el); + async display_view(view: any, el: HTMLElement): Promise { + if (el) { + LuminoWidget.Widget.attach(view.pWidget, el); } if (view.el) { view.el.setAttribute('data-voila-jupyter-widget', ''); @@ -104,10 +94,6 @@ export class WidgetManager extends JupyterLabManager { return view.pWidget; } - restoreWidgets(notebook: INotebookModel): Promise { - return Promise.resolve(); - } - private _registerWidgets(): void { this.register({ name: '@jupyter-widgets/base', @@ -125,65 +111,4 @@ export class WidgetManager extends JupyterLabManager { exports: output as any }); } - - async _build_models(): Promise<{ [key: string]: base.WidgetModel }> { - const comm_ids = await this._get_comm_info(); - const models: { [key: string]: base.WidgetModel } = {}; - /** - * For the classical notebook, iopub_msg_rate_limit=1000 (default) - * And for zmq, we are affected by the default ZMQ_SNDHWM setting of 1000 - * See https://github.com/voila-dashboards/voila/issues/534 for a discussion - */ - const maxMessagesInTransit = 100; // really save limit compared to ZMQ_SNDHWM - const maxMessagesPerSecond = 500; // lets be on the save side, in case the kernel sends more msg'es - const widgets_info = await Promise.all( - batchRateMap( - Object.keys(comm_ids), - async comm_id => { - const comm = await this._create_comm(this.comm_target_name, comm_id); - return this._update_comm(comm); - }, - { room: maxMessagesInTransit, rate: maxMessagesPerSecond } - ) - ); - - await Promise.all( - widgets_info.map(async widget_info => { - const state = (widget_info as any).msg.content.data.state; - const modelPromise = this.new_model( - { - model_name: state._model_name, - model_module: state._model_module, - model_module_version: state._model_module_version, - comm: (widget_info as any).comm - }, - state - ); - const model = await modelPromise; - models[model.model_id] = model; - return modelPromise; - }) - ); - return models; - } - - async _update_comm( - comm: base.IClassicComm - ): Promise<{ comm: base.IClassicComm; msg: any }> { - return new Promise((resolve, reject) => { - comm.on_msg(async msg => { - if (msg.content.data.buffer_paths) { - base.put_buffers( - msg.content.data.state, - msg.content.data.buffer_paths, - msg.buffers - ); - } - if (msg.content.data.method === 'update') { - resolve({ comm: comm, msg: msg }); - } - }); - comm.send({ method: 'request_state' }, {}); - }); - } } diff --git a/packages/voila/src/plugins.ts b/packages/voila/src/plugins.ts index 804879131..f27bfa8d2 100644 --- a/packages/voila/src/plugins.ts +++ b/packages/voila/src/plugins.ts @@ -5,10 +5,6 @@ import { import { PageConfig } from '@jupyterlab/coreutils'; -import { DocumentRegistry } from '@jupyterlab/docregistry'; - -import { INotebookModel } from '@jupyterlab/notebook'; - import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { KernelAPI, ServerConnection } from '@jupyterlab/services'; @@ -99,47 +95,11 @@ const widgetManager: JupyterFrontEndPlugin = { }; } const kernel = new KernelConnection({ model, serverSettings }); + const manager = new VoilaWidgetManager(kernel, rendermime); - // TODO: switch to using a real SessionContext and a session context widget manager - const context = { - sessionContext: { - session: { - kernel, - kernelChanged: { - // eslint-disable-next-line @typescript-eslint/no-empty-function - connect: () => {} - } - }, - statusChanged: { - // eslint-disable-next-line @typescript-eslint/no-empty-function - connect: () => {} - }, - kernelChanged: { - // eslint-disable-next-line @typescript-eslint/no-empty-function - connect: () => {} - }, - connectionStatusChanged: { - // eslint-disable-next-line @typescript-eslint/no-empty-function - connect: () => {} - } - }, - saveState: { - // eslint-disable-next-line @typescript-eslint/no-empty-function - connect: () => {} - } - }; - - const settings = { - saveState: false - }; - - const manager = new VoilaWidgetManager( - (context as unknown) as DocumentRegistry.IContext, - rendermime, - settings - ); - - void manager.build_widgets(); + manager.restored.connect(() => { + void manager.build_widgets(); + }); console.log('Voila manager activated'); diff --git a/yarn.lock b/yarn.lock index 8e80daed3..f7516057d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1185,46 +1185,56 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jupyter-widgets/base@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@jupyter-widgets/base/-/base-4.0.0.tgz#6935461a3bd78df5523022e1c3d370ae24c9a454" - integrity sha512-lBQgLYzq6C+XjfVJTidk+rckKo/+xlTgIm1XUtACA3BUz8bgi2du2zmbYkcrplJMwGub4QWP6GnKgM5ZZRhzYg== +"@jupyter-widgets/base-manager@^1.0.0-alpha.2": + version "1.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@jupyter-widgets/base-manager/-/base-manager-1.0.0-alpha.2.tgz#1cf4795446610d42fb411b909a365165f80d6c48" + integrity sha512-d5lCQmVaI/oad2VLW7RZ792ecfFTkSdMRJkko7w2tHwUN/h9ytiU58ngET2dyGHB6Q1fDW1vMM67XDdVcKdZ0Q== + dependencies: + "@jupyter-widgets/base" "^5.0.0-alpha.2" + "@jupyterlab/services" "^6.0.0" + "@lumino/coreutils" "^1.4.2" + base64-js "^1.2.1" + +"@jupyter-widgets/base@^5.0.0-alpha.2": + version "5.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@jupyter-widgets/base/-/base-5.0.0-alpha.2.tgz#09496121a2b3eb3e952805b85d82db59e8c09284" + integrity sha512-ENfr0xz2FzZ+km1s7nQdYWJo0/L2jtDTdWJb2ako4IIU7hkgYXQfxvl/MKtC3nztwA+yDPNx//dB/OYUGka72g== dependencies: "@jupyterlab/services" "^6.0.0" "@lumino/coreutils" "^1.2.0" "@lumino/messaging" "^1.2.1" "@lumino/widgets" "^1.3.0" - "@types/backbone" "^1.4.1" + "@types/backbone" "1.4.1" "@types/lodash" "^4.14.134" backbone "1.2.3" - base64-js "^1.2.1" jquery "^3.1.1" lodash "^4.17.4" -"@jupyter-widgets/controls@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@jupyter-widgets/controls/-/controls-3.0.0.tgz#76e0c343627f0d300908e2dbdb524651f1be6315" - integrity sha512-VyoBxUp/8pf7IFlM4hriD/UvYpHzXFXrUAaT/NRAhMUFO4Ruh4ALcxeHdWFnqxMjiSyOnWdjzdIeQL0pYi83Gg== - dependencies: - "@jupyter-widgets/base" "^4.0.0" - "@lumino/algorithm" "^1.1.0" - "@lumino/domutils" "^1.1.0" - "@lumino/messaging" "^1.2.1" - "@lumino/signaling" "^1.2.0" - "@lumino/widgets" "^1.3.0" +"@jupyter-widgets/controls@^4.0.0-alpha.2": + version "4.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@jupyter-widgets/controls/-/controls-4.0.0-alpha.2.tgz#ebb6601e51ce5289556b0f7f5a2ad97b16e4d25d" + integrity sha512-PrNbBBg2Ybcmoio0AQBxbiRrlym6TPIp0+AE4cRWadA/LIQSzyjE8XBOzof9PoWDEws/qya6zDIbmNM8eEO2PA== + dependencies: + "@jupyter-widgets/base" "^5.0.0-alpha.2" + "@lumino/algorithm" "^1.2.3" + "@lumino/domutils" "^1.1.7" + "@lumino/messaging" "^1.3.3" + "@lumino/signaling" "^1.3.5" + "@lumino/widgets" "^1.11.1" + d3-color "^1.4.0" d3-format "^1.3.0" jquery "^3.1.1" - jquery-ui "^1.12.1" - underscore "^1.8.3" + nouislider "^14.1.1" -"@jupyter-widgets/jupyterlab-manager@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@jupyter-widgets/jupyterlab-manager/-/jupyterlab-manager-3.0.0.tgz#fa47d03e2e72399ce3af4b86cc29aba2166d5781" - integrity sha512-9diAvsHHiK/kY7bT8f2cNBkMN+6a3o18EDd9GBd7ER6zsOjZCBiASPl7ZfslWz7VNYLQdiRyxcKQSYU/tiXxdQ== +"@jupyter-widgets/jupyterlab-manager@^4.0.0-alpha.1": + version "4.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyter-widgets/jupyterlab-manager/-/jupyterlab-manager-4.0.0-alpha.1.tgz#6e6e4eee2d915f792a62ac5bdf769498911c83b5" + integrity sha512-q6OBA/FW3SHYP6hZI3eldy/MZW80XP6WAs1jstwhnI1GqrJPyvEHHRggHeGmDKAahv0n5sIsErN7JTD4U5h+fg== dependencies: - "@jupyter-widgets/base" "^4.0.0" - "@jupyter-widgets/controls" "^3.0.0" - "@jupyter-widgets/output" "^4.0.0" + "@jupyter-widgets/base" "^5.0.0-alpha.2" + "@jupyter-widgets/base-manager" "^1.0.0-alpha.2" + "@jupyter-widgets/controls" "^4.0.0-alpha.2" + "@jupyter-widgets/output" "^5.0.0-alpha.2" "@jupyterlab/application" "^3.0.0" "@jupyterlab/docregistry" "^3.0.0" "@jupyterlab/logconsole" "^3.0.0" @@ -1243,16 +1253,16 @@ "@lumino/properties" "^1.1.0" "@lumino/signaling" "^1.2.0" "@lumino/widgets" "^1.3.0" - "@types/backbone" "^1.4.1" + "@types/backbone" "1.4.1" jquery "^3.1.1" semver "^6.1.1" -"@jupyter-widgets/output@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@jupyter-widgets/output/-/output-4.0.0.tgz#1dd759b1bfb699f707cc7fd0235a0e8d0c012c52" - integrity sha512-v9vyGhp6IFKKTSxlaa19Z9qo50ofGfvOwqlIyek6PzCAulE+8/UTGz4sw876Yts0cbCSQIwh1zF9HCQ8XfqH2A== +"@jupyter-widgets/output@^5.0.0-alpha.2": + version "5.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@jupyter-widgets/output/-/output-5.0.0-alpha.2.tgz#6d3ec5ab5da65972d10a4aa0562121585a11ef41" + integrity sha512-8jLmp9WcozjO9n1vSmhYERFjs1hx1dcCr+g46bW33bw7k4HX4CmOdQKBJXf89ZHUH9RNWUc8ze4LbXqiby30Vw== dependencies: - "@jupyter-widgets/base" "^4.0.0" + "@jupyter-widgets/base" "^5.0.0-alpha.2" "@jupyterlab/application@^3.0.0", "@jupyterlab/application@^3.0.6": version "3.0.6" @@ -2546,7 +2556,7 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" -"@lumino/algorithm@^1.1.0", "@lumino/algorithm@^1.3.3": +"@lumino/algorithm@^1.1.0", "@lumino/algorithm@^1.2.3", "@lumino/algorithm@^1.3.3": version "1.3.3" resolved "https://registry.yarnpkg.com/@lumino/algorithm/-/algorithm-1.3.3.tgz#fdf4daa407a1ce6f233e173add6a2dda0c99eef4" integrity sha512-I2BkssbOSLq3rDjgAC3fzf/zAIwkRUnAh60MO0lYcaFdSGyI15w4K3gwZHGIO0p9cKEiNHLXKEODGmOjMLOQ3g== @@ -2580,7 +2590,7 @@ "@lumino/signaling" "^1.4.3" "@lumino/virtualdom" "^1.8.0" -"@lumino/coreutils@^1.2.0", "@lumino/coreutils@^1.3.0", "@lumino/coreutils@^1.5.3": +"@lumino/coreutils@^1.2.0", "@lumino/coreutils@^1.3.0", "@lumino/coreutils@^1.4.2", "@lumino/coreutils@^1.5.3": version "1.5.3" resolved "https://registry.yarnpkg.com/@lumino/coreutils/-/coreutils-1.5.3.tgz#89dd7b7f381642a1bf568910c5b62c7bde705d71" integrity sha512-G72jJ6sgOwAUuilz+cri7LpHIJxllK+qz+YZUC3fyyWHK7oRlZemcc43jZAVE+tagTdMxKYSQWNIVzM5lI8sWw== @@ -2593,7 +2603,7 @@ "@lumino/algorithm" "^1.3.3" "@lumino/signaling" "^1.4.3" -"@lumino/domutils@^1.1.0", "@lumino/domutils@^1.2.3": +"@lumino/domutils@^1.1.7", "@lumino/domutils@^1.2.3": version "1.2.3" resolved "https://registry.yarnpkg.com/@lumino/domutils/-/domutils-1.2.3.tgz#7e8e549a97624bfdbd4dd95ae4d1e30b87799822" integrity sha512-SEi8WZSy+DWMkL5CfAY78MHbi3x83AVmRFxjs9+A6qsFPde+Hr1I4DNtLsSDmfAWsobHHgBnjyNp2ZkQEq0IEA== @@ -2611,7 +2621,7 @@ resolved "https://registry.yarnpkg.com/@lumino/keyboard/-/keyboard-1.2.3.tgz#594c73233636d85ed035b1a37a095acf956cfe8c" integrity sha512-ibS0sz0VABeuJXx2JVSz36sUBMUOcQNCNPybVhwzN/GkJFs0dnDKluMu+3Px0tkB2y33bGPZU/RLZY1Xj/faEA== -"@lumino/messaging@^1.2.1", "@lumino/messaging@^1.4.3": +"@lumino/messaging@^1.2.1", "@lumino/messaging@^1.3.3", "@lumino/messaging@^1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@lumino/messaging/-/messaging-1.4.3.tgz#75a1901f53086c7c0e978a63cb784eae5cc59f3f" integrity sha512-wa2Pj2KOuLNLS2n0wVBzUVFGbvjL1FLbuCOAUEYfN6xXVleqqtGGzd08uTF7ebu01KCO3VQ38+dkvoaM/C2qPw== @@ -2633,7 +2643,7 @@ resolved "https://registry.yarnpkg.com/@lumino/properties/-/properties-1.2.3.tgz#10675e554e4a9dcc4022de01875fd51f33e2c785" integrity sha512-dbS9V/L+RpQoRjxHMAGh1JYoXaLA6F7xkVbg/vmYXqdXZ7DguO5C3Qteu9tNp7Z7Q31TqFWUCrniTI9UJiJCoQ== -"@lumino/signaling@^1.2.0", "@lumino/signaling@^1.4.3": +"@lumino/signaling@^1.2.0", "@lumino/signaling@^1.3.5", "@lumino/signaling@^1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@lumino/signaling/-/signaling-1.4.3.tgz#d29f7f542fdcd70b91ca275d3ca793ae21cebf6a" integrity sha512-6clc8SMcH0tyKXIX31xw6sxjxJl5hj4YRd1DTHTS62cegQ0FkO8JjJeuv+Nc1pgTg6nEAf65aSOHpUdsFHDAvQ== @@ -2647,6 +2657,23 @@ dependencies: "@lumino/algorithm" "^1.3.3" +"@lumino/widgets@^1.11.1": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@lumino/widgets/-/widgets-1.19.0.tgz#5275aaa9c30d23d78a40004fe1c33582cb5dd5fc" + integrity sha512-LR1mwbbTS0K58K3SzC7TtapjSDBwL75Udrif9vBygyIpYNTT9VfRFvl+PT2+KSwhefClNI4n5pZ2s+RO908rsg== + dependencies: + "@lumino/algorithm" "^1.3.3" + "@lumino/commands" "^1.12.0" + "@lumino/coreutils" "^1.5.3" + "@lumino/disposable" "^1.4.3" + "@lumino/domutils" "^1.2.3" + "@lumino/dragdrop" "^1.7.1" + "@lumino/keyboard" "^1.2.3" + "@lumino/messaging" "^1.4.3" + "@lumino/properties" "^1.2.3" + "@lumino/signaling" "^1.4.3" + "@lumino/virtualdom" "^1.8.0" + "@lumino/widgets@^1.16.1", "@lumino/widgets@^1.18.0", "@lumino/widgets@^1.3.0": version "1.18.0" resolved "https://registry.yarnpkg.com/@lumino/widgets/-/widgets-1.18.0.tgz#fa8ce727126a1e91b9f3ba78e08425115046e3ac" @@ -2884,10 +2911,10 @@ dependencies: "@babel/types" "^7.3.0" -"@types/backbone@^1.4.1": - version "1.4.10" - resolved "https://registry.yarnpkg.com/@types/backbone/-/backbone-1.4.10.tgz#042e72ffc966fe920ed02ff92afa66984a036844" - integrity sha512-X6UM8N9i4WFtO1F53Z3DE7mjI7UxEfxyFtMTYHOPFhYFvExDuu0UJENstnA023+/FnVOdxltMIKc4picZxW4dA== +"@types/backbone@1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@types/backbone/-/backbone-1.4.1.tgz#aa03f9f69994bd96646c50cfc70b5f30d38aafaa" + integrity sha512-KYfGuQy4d2vvYXbn0uHFZ6brFLndatTMomxBlljpbWf4kFpA3BG/6LA3ec+J9iredrX6eAVI7sm9SVAvwiIM6g== dependencies: "@types/jquery" "*" "@types/underscore" "*" @@ -4612,6 +4639,11 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +d3-color@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + d3-format@^1.3.0: version "1.4.5" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" @@ -7180,11 +7212,6 @@ jest@^26.4.2: import-local "^3.0.2" jest-cli "^26.6.3" -jquery-ui@^1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" - integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= - jquery@^3.1.1: version "3.5.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" @@ -8300,6 +8327,11 @@ normalize.css@^8.0.1: resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== +nouislider@^14.1.1: + version "14.6.4" + resolved "https://registry.yarnpkg.com/nouislider/-/nouislider-14.6.4.tgz#81eb9544309a59b013293278951661da69e46713" + integrity sha512-PVCGYl+aC7/nVEbW61ypJWfuW3UCpvctz/luxpt4byxxli1FFyjBX9NIiy4Yak9AaO6a5BkPGfFYMCW4eg3eeQ== + npm-bundled@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" @@ -10994,7 +11026,7 @@ umask@^1.1.0: resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= -underscore@>=1.7.0, underscore@^1.8.3: +underscore@>=1.7.0: version "1.12.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.0.tgz#4814940551fc80587cef7840d1ebb0f16453be97" integrity sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==