@holoviz/panel 1.9.3 → 1.9.4-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/bundled/deckglplot/@deck.gl/carto@^9.1.14/dist.min.js +10 -10
  2. package/dist/bundled/notificationarea/panel/1.9.4-rc.2/dist/bundled/font-awesome/css/all.min.css +2 -0
  3. package/dist/bundled/panel/1.9.4-rc.2/dist/bundled/bootstrap5/css/bootstrap.min.css +2 -0
  4. package/dist/bundled/panel/1.9.4-rc.2/dist/bundled/bootstrap5/js/bootstrap.bundle.min.js +2 -0
  5. package/dist/bundled/panel/1.9.4-rc.2/dist/bundled/font-awesome/css/all.min.css +2 -0
  6. package/dist/bundled/panel/1.9.4-rc.2/dist/bundled/jquery/jquery.min.js +2 -0
  7. package/dist/bundled/theme/fast.css +1 -3
  8. package/dist/css/loading.css +14 -18
  9. package/dist/lib/models/feed.js +9 -1
  10. package/dist/lib/models/feed.js.map +1 -1
  11. package/dist/lib/models/layout.d.ts +32 -0
  12. package/dist/lib/models/layout.js +68 -25
  13. package/dist/lib/models/layout.js.map +1 -1
  14. package/dist/lib/models/progress.js +3 -0
  15. package/dist/lib/models/progress.js.map +1 -1
  16. package/dist/lib/models/react_component.d.ts +7 -0
  17. package/dist/lib/models/react_component.js +111 -29
  18. package/dist/lib/models/react_component.js.map +1 -1
  19. package/dist/lib/models/reactive_esm.d.ts +18 -1
  20. package/dist/lib/models/reactive_esm.js +31 -1
  21. package/dist/lib/models/reactive_esm.js.map +1 -1
  22. package/dist/lib/models/tabulator.d.ts +1 -0
  23. package/dist/lib/models/tabulator.js +14 -3
  24. package/dist/lib/models/tabulator.js.map +1 -1
  25. package/dist/lib/styles/loading.css.js +1 -1
  26. package/dist/panel.js +284 -103
  27. package/dist/panel.js.map +1 -1
  28. package/dist/panel.json +1 -1
  29. package/dist/panel.min.js +34 -34
  30. package/package.json +3 -3
  31. package/dist/bundled/notificationarea/panel/1.9.3/dist/bundled/font-awesome/css/all.min.css +0 -2
  32. package/dist/bundled/panel/1.9.3/dist/bundled/bootstrap5/css/bootstrap.min.css +0 -2
  33. package/dist/bundled/panel/1.9.3/dist/bundled/bootstrap5/js/bootstrap.bundle.min.js +0 -2
  34. package/dist/bundled/panel/1.9.3/dist/bundled/font-awesome/css/all.min.css +0 -2
  35. package/dist/bundled/panel/1.9.3/dist/bundled/jquery/jquery.min.js +0 -2
package/dist/panel.js CHANGED
@@ -82,7 +82,7 @@
82
82
  __esExport("CustomSelect", customselect_1.CustomSelect);
83
83
  var multiselect_1 = require("27b5580835") /* ./multiselect */;
84
84
  __esExport("CustomMultiSelect", multiselect_1.CustomMultiSelect);
85
- var tabulator_1 = require("b90fc40725") /* ./tabulator */;
85
+ var tabulator_1 = require("e0501f9786") /* ./tabulator */;
86
86
  __esExport("DataTabulator", tabulator_1.DataTabulator);
87
87
  var datetime_picker_1 = require("100965d6f3") /* ./datetime_picker */;
88
88
  __esExport("DatetimePicker", datetime_picker_1.DatetimePicker);
@@ -94,7 +94,7 @@
94
94
  __esExport("DiscretePlayer", discrete_player_1.DiscretePlayer);
95
95
  var echarts_1 = require("ec1ecef6a0") /* ./echarts */;
96
96
  __esExport("ECharts", echarts_1.ECharts);
97
- var feed_1 = require("f9c84aaf3d") /* ./feed */;
97
+ var feed_1 = require("44a7ecdf96") /* ./feed */;
98
98
  __esExport("Feed", feed_1.Feed);
99
99
  var file_download_1 = require("84a13dddfb") /* ./file_download */;
100
100
  __esExport("FileDownload", file_download_1.FileDownload);
@@ -124,17 +124,17 @@
124
124
  __esExport("Player", player_1.Player);
125
125
  var plotly_1 = require("59dbae0a77") /* ./plotly */;
126
126
  __esExport("PlotlyPlot", plotly_1.PlotlyPlot);
127
- var progress_1 = require("b1f4d68596") /* ./progress */;
127
+ var progress_1 = require("54e5f3767b") /* ./progress */;
128
128
  __esExport("Progress", progress_1.Progress);
129
129
  var quill_1 = require("a8f2a01dfe") /* ./quill */;
130
130
  __esExport("QuillInput", quill_1.QuillInput);
131
131
  var radio_button_group_1 = require("25e2d7c208") /* ./radio_button_group */;
132
132
  __esExport("RadioButtonGroup", radio_button_group_1.RadioButtonGroup);
133
- var react_component_1 = require("93ad10c64c") /* ./react_component */;
133
+ var react_component_1 = require("b2c617bbc6") /* ./react_component */;
134
134
  __esExport("ReactComponent", react_component_1.ReactComponent);
135
135
  var reactive_html_1 = require("d5752cda5a") /* ./reactive_html */;
136
136
  __esExport("ReactiveHTML", reactive_html_1.ReactiveHTML);
137
- var reactive_esm_1 = require("74cc5c8ee7") /* ./reactive_esm */;
137
+ var reactive_esm_1 = require("1e7e12b23e") /* ./reactive_esm */;
138
138
  __esExport("ReactiveESM", reactive_esm_1.ReactiveESM);
139
139
  var singleselect_1 = require("4155401209") /* ./singleselect */;
140
140
  __esExport("SingleSelect", singleselect_1.SingleSelect);
@@ -174,7 +174,7 @@
174
174
  var _a;
175
175
  __esModule();
176
176
  const dom_1 = require("@bokehjs/core/dom");
177
- const layout_1 = require("dab42e6dad") /* ./layout */;
177
+ const layout_1 = require("84236c2552") /* ./layout */;
178
178
  const util_1 = require("aa07eb54cc") /* ./util */;
179
179
  class AcePlotView extends layout_1.HTMLBoxView {
180
180
  connect_signals() {
@@ -338,15 +338,51 @@
338
338
  });
339
339
  })();
340
340
  },
341
- "dab42e6dad": /* models/layout.js */ function _(require, module, exports, __esModule, __esExport) {
341
+ "84236c2552": /* models/layout.js */ function _(require, module, exports, __esModule, __esExport) {
342
342
  __esModule();
343
+ exports.rerender_view = rerender_view;
343
344
  exports.set_size = set_size;
344
345
  const dom_1 = require("@bokehjs/core/dom");
345
346
  const types_1 = require("@bokehjs/core/util/types");
346
347
  const assert_1 = require("@bokehjs/core/util/assert");
347
348
  const widget_1 = require("@bokehjs/models/widgets/widget");
348
349
  const layout_dom_1 = require("@bokehjs/models/layouts/layout_dom");
350
+ /**
351
+ * Re-renders a view, including its layout.
352
+ *
353
+ * Bokeh's own `rerender` runs the whole render walk before `update_layout`,
354
+ * which is wrong for anything that is positioned by the layout: `render`
355
+ * re-parents annotation elements into the canvas layers and it is
356
+ * `update_layout` that moves them into their side panels. Measuring in
357
+ * between therefore caches a bbox for the container the element is about to
358
+ * leave, e.g. a legend measuring the full canvas width instead of its side
359
+ * panel. `compute_layout` then sizes the panel from that stale bbox and can
360
+ * squeeze the frame to zero, which poisons everything derived from it (for
361
+ * tile-based plots, a division by zero width puts NaN into the ranges with no
362
+ * recovery path). Updating the layout first means `after_render` measures
363
+ * elements where they will actually live.
364
+ */
365
+ function rerender_view(view) {
366
+ if (view instanceof layout_dom_1.LayoutDOMView) {
367
+ view.render();
368
+ view.update_layout();
369
+ view.r_after_render();
370
+ view.compute_layout();
371
+ }
372
+ else if (view.rerender) {
373
+ // Can be removed when Bokeh>3.7 (see https://github.com/holoviz/panel/pull/7815)
374
+ view.rerender();
375
+ }
376
+ else {
377
+ view.render();
378
+ view.r_after_render();
379
+ }
380
+ }
349
381
  class PanelMarkupView extends widget_1.WidgetView {
382
+ constructor() {
383
+ super(...arguments);
384
+ this._stylesheets_watcher = null;
385
+ }
350
386
  connect_signals() {
351
387
  super.connect_signals();
352
388
  const { width, height, min_height, max_height, margin, sizing_mode } = this.model.properties;
@@ -365,36 +401,55 @@
365
401
  });
366
402
  }
367
403
  }
404
+ /**
405
+ * Schedules `style_redraw` for when all applied stylesheets have settled.
406
+ *
407
+ * A stylesheet counts as settled once it has loaded *or* failed: views
408
+ * reveal their container from `style_redraw`, so a stylesheet that never
409
+ * arrives must not hide them forever. Listeners registered by a previous
410
+ * call are cancelled, since the elements they watch have been discarded.
411
+ */
368
412
  watch_stylesheets() {
413
+ this._stylesheets_watcher?.abort();
414
+ const { signal } = this._stylesheets_watcher = new AbortController();
369
415
  this._initialized_stylesheets = new Map();
370
416
  for (const stylesheet of this._applied_stylesheets) {
371
417
  // @ts-expect-error: 'el' is protected
372
418
  const style_el = stylesheet.el;
373
419
  if (style_el instanceof HTMLLinkElement) {
374
- this._initialized_stylesheets.set(style_el.href, false);
375
- style_el.addEventListener("load", () => {
420
+ // A link served from cache may already have loaded, and `load` does
421
+ // not fire again for it, so seed from `sheet` instead of assuming
422
+ // every stylesheet is still pending.
423
+ this._initialized_stylesheets.set(style_el.href, style_el.sheet != null);
424
+ const settled = () => {
376
425
  this._initialized_stylesheets.set(style_el.href, true);
377
426
  if ([...this._initialized_stylesheets.values()].every((v) => v)) {
378
427
  requestAnimationFrame(() => this.style_redraw());
379
428
  }
380
- });
429
+ };
430
+ style_el.addEventListener("load", settled, { signal });
431
+ style_el.addEventListener("error", settled, { signal });
381
432
  }
382
433
  }
383
- if (this._initialized_stylesheets.size == 0) {
434
+ if ([...this._initialized_stylesheets.values()].every((v) => v)) {
384
435
  this.style_redraw();
385
436
  }
386
437
  }
387
- rerender_(view = null) {
388
- // Can be removed when Bokeh>3.7 (see https://github.com/holoviz/panel/pull/7815)
389
- view = view == null ? this : view;
390
- if (view.rerender) {
391
- view.rerender();
392
- }
393
- else {
394
- view.render();
395
- view.r_after_render();
438
+ /**
439
+ * Bokeh recreates the stylesheet elements on every update, discarding the
440
+ * ones `watch_stylesheets` listens on, so the watcher has to be re-armed.
441
+ * Skipped until the view has armed it itself, as the update triggered from
442
+ * `super.render()` precedes the creation of `this.container`.
443
+ */
444
+ _update_stylesheets() {
445
+ super._update_stylesheets();
446
+ if (this._stylesheets_watcher != null) {
447
+ this.watch_stylesheets();
396
448
  }
397
449
  }
450
+ rerender_(view = null) {
451
+ rerender_view(view == null ? this : view);
452
+ }
398
453
  style_redraw() { }
399
454
  has_math_disabled() {
400
455
  return this.model.disable_math || !this.contains_tex_string(this.model.text);
@@ -513,15 +568,7 @@
513
568
  set_size(this.el, this.model);
514
569
  }
515
570
  rerender_(view = null) {
516
- // Can be removed when Bokeh>3.7 (see https://github.com/holoviz/panel/pull/7815)
517
- view = view == null ? this : view;
518
- if (view.rerender) {
519
- view.rerender();
520
- }
521
- else {
522
- view.render();
523
- view.r_after_render();
524
- }
571
+ rerender_view(view == null ? this : view);
525
572
  }
526
573
  watch_stylesheets() {
527
574
  this._initialized_stylesheets = new Map();
@@ -538,9 +585,9 @@
538
585
  });
539
586
  }
540
587
  }
541
- if (Object.keys(this._initialized_stylesheets).length === 0) {
542
- requestAnimationFrame(() => this.style_redraw());
543
- }
588
+ // Unconditional: subclasses redraw (and reveal themselves) here even when
589
+ // the stylesheets never load, so this is their only guaranteed redraw.
590
+ requestAnimationFrame(() => this.style_redraw());
544
591
  }
545
592
  style_redraw() { }
546
593
  get child_models() {
@@ -778,7 +825,7 @@
778
825
  "1f663ffe94": /* models/anywidget_component.js */ function _(require, module, exports, __esModule, __esExport) {
779
826
  var _a;
780
827
  __esModule();
781
- const reactive_esm_1 = require("74cc5c8ee7") /* ./reactive_esm */;
828
+ const reactive_esm_1 = require("1e7e12b23e") /* ./reactive_esm */;
782
829
  class AnyWidgetModelAdapter {
783
830
  constructor(model) {
784
831
  this.view = null;
@@ -942,7 +989,7 @@ export default {render}`;
942
989
  _a.prototype.default_view = AnyWidgetComponentView;
943
990
  })();
944
991
  },
945
- "74cc5c8ee7": /* models/reactive_esm.js */ function _(require, module, exports, __esModule, __esExport) {
992
+ "1e7e12b23e": /* models/reactive_esm.js */ function _(require, module, exports, __esModule, __esExport) {
946
993
  var _a, _b, _c;
947
994
  __esModule();
948
995
  exports.model_getter = model_getter;
@@ -959,17 +1006,18 @@ export default {render}`;
959
1006
  return c > 3 && r && Object.defineProperty(target, key, r), r;
960
1007
  };
961
1008
  var ESMEvent_1;
962
- const sucrase_1 = require("48024289a4") /* sucrase */;
1009
+ const sucrase_1 = require("28a8b14fda") /* sucrase */;
963
1010
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
964
1011
  const dom_1 = require("@bokehjs/core/dom");
965
1012
  const dom_2 = require("@bokehjs/core/dom");
1013
+ const dom_view_1 = require("@bokehjs/core/dom_view");
966
1014
  const kinds_1 = require("@bokehjs/core/kinds");
967
1015
  const layout_dom_1 = require("@bokehjs/models/layouts/layout_dom");
968
1016
  const types_1 = require("@bokehjs/core/util/types");
969
1017
  const ui_element_1 = require("@bokehjs/models/ui/ui_element");
970
1018
  const event_to_object_1 = require("a572dba9cd") /* ./event-to-object */;
971
1019
  const html_1 = require("4c04683fdc") /* ./html */;
972
- const layout_1 = require("dab42e6dad") /* ./layout */;
1020
+ const layout_1 = require("84236c2552") /* ./layout */;
973
1021
  const util_1 = require("aa07eb54cc") /* ./util */;
974
1022
  const esm_css_1 = tslib_1.__importDefault(require("727a14f76b") /* ../styles/models/esm.css */);
975
1023
  const MODULE_CACHE = new Map();
@@ -1207,7 +1255,36 @@ export default {render}`;
1207
1255
  this.model.disconnect_watchers(this);
1208
1256
  }
1209
1257
  _on_mounted() { }
1210
- notify_mount(child, id, remove) {
1258
+ /**
1259
+ * Bokeh walks the whole view tree from `r_after_render`, but ESM components
1260
+ * do not render their children themselves: the children are mounted later,
1261
+ * by the component, once it commits. Recursing into a child that has not
1262
+ * been mounted yet would run `after_render` (and with it style updates,
1263
+ * measurement and layout) on a view that is still detached and therefore
1264
+ * measures 0x0, which permanently poisons anything latching onto its first
1265
+ * measurement. Such children are skipped here and walked when they mount.
1266
+ */
1267
+ r_after_render() {
1268
+ for (const child_view of this.children_views()) {
1269
+ if (child_view instanceof dom_view_1.DOMView && this._is_mountable(child_view)) {
1270
+ child_view.r_after_render();
1271
+ }
1272
+ }
1273
+ this.after_render();
1274
+ this._was_built = true;
1275
+ }
1276
+ /**
1277
+ * Whether Bokeh's render walk may descend into a child view. Views this
1278
+ * component owns are only walkable once mounted; anything else (e.g. a
1279
+ * context menu) is not ours to defer.
1280
+ */
1281
+ _is_mountable(child_view) {
1282
+ if (!this._child_views.has(child_view.model)) {
1283
+ return true;
1284
+ }
1285
+ return child_view.el.isConnected;
1286
+ }
1287
+ notify_mount(child, id, remove = false) {
1211
1288
  if (!this._mounted.has(child)) {
1212
1289
  this._mounted.set(child, new Set());
1213
1290
  }
@@ -1869,7 +1946,7 @@ export default {render}`;
1869
1946
  }));
1870
1947
  })();
1871
1948
  },
1872
- "48024289a4": /* sucrase/dist/esm/index.js */ function _(require, module, exports, __esModule, __esExport) {
1949
+ "28a8b14fda": /* sucrase/dist/esm/index.js */ function _(require, module, exports, __esModule, __esExport) {
1873
1950
  __esModule();
1874
1951
  exports.getVersion = getVersion;
1875
1952
  exports.transform = transform;
@@ -1889,7 +1966,7 @@ export default {render}`;
1889
1966
  ;
1890
1967
  function getVersion() {
1891
1968
  /* istanbul ignore next */
1892
- return "3.35.0";
1969
+ return "3.35.1";
1893
1970
  }
1894
1971
  function transform(code, options) {
1895
1972
  (0, Options_1.validateOptions)(options);
@@ -18121,7 +18198,7 @@ ${namesToRegister
18121
18198
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
18122
18199
  const object_1 = require("@bokehjs/core/util/object");
18123
18200
  const markup_1 = require("@bokehjs/models/widgets/markup");
18124
- const layout_1 = require("dab42e6dad") /* ./layout */;
18201
+ const layout_1 = require("84236c2552") /* ./layout */;
18125
18202
  const event_to_object_1 = require("a572dba9cd") /* ./event-to-object */;
18126
18203
  const util_1 = require("aa07eb54cc") /* ./util */;
18127
18204
  const html_css_1 = tslib_1.__importDefault(require("9b8139e439") /* ../styles/models/html.css */);
@@ -18387,7 +18464,7 @@ ${namesToRegister
18387
18464
  "fd59c985b3": /* models/audio.js */ function _(require, module, exports, __esModule, __esExport) {
18388
18465
  var _a;
18389
18466
  __esModule();
18390
- const layout_1 = require("dab42e6dad") /* ./layout */;
18467
+ const layout_1 = require("84236c2552") /* ./layout */;
18391
18468
  class AudioView extends layout_1.HTMLBoxView {
18392
18469
  initialize() {
18393
18470
  super.initialize();
@@ -19912,7 +19989,7 @@ ${namesToRegister
19912
19989
  _b.prototype.default_view = CustomMultiSelectView;
19913
19990
  })();
19914
19991
  },
19915
- "b90fc40725": /* models/tabulator.js */ function _(require, module, exports, __esModule, __esExport) {
19992
+ "e0501f9786": /* models/tabulator.js */ function _(require, module, exports, __esModule, __esExport) {
19916
19993
  var _a, _b, _c, _d;
19917
19994
  __esModule();
19918
19995
  const tslib_1 = require("tslib");
@@ -19928,7 +20005,7 @@ ${namesToRegister
19928
20005
  const debounce_1 = require("99a25e6992") /* debounce */;
19929
20006
  const comm_manager_1 = require("1bec1b1fcc") /* ./comm_manager */;
19930
20007
  const data_1 = require("be689f0377") /* ./data */;
19931
- const layout_1 = require("dab42e6dad") /* ./layout */;
20008
+ const layout_1 = require("84236c2552") /* ./layout */;
19932
20009
  const util_1 = require("aa07eb54cc") /* ./util */;
19933
20010
  const tabulator_css_1 = tslib_1.__importDefault(require("3d732ff91f") /* ../styles/models/tabulator.css */);
19934
20011
  class TableEditEvent extends bokeh_events_1.ModelEvent {
@@ -20292,8 +20369,8 @@ ${namesToRegister
20292
20369
  }
20293
20370
  connect_signals() {
20294
20371
  super.connect_signals();
20295
- const { configuration, layout, columns, groupby, visible, download, children, expanded, cell_styles, hidden_columns, page_size, page, max_page, frozen_rows, sorters, theme_classes, } = this.model.properties;
20296
- this.on_change([configuration, layout, groupby], (0, debounce_1.debounce)(() => {
20372
+ const { configuration, layout, columns, groupby, visible, download, children, expanded, cell_styles, hidden_columns, page_size, page, max_page, frozen_rows, movable_columns, sorters, theme_classes, } = this.model.properties;
20373
+ this.on_change([configuration, layout, groupby, movable_columns], (0, debounce_1.debounce)(() => {
20297
20374
  this.invalidate_render();
20298
20375
  }, 20, false));
20299
20376
  this.on_change(visible, () => {
@@ -20311,6 +20388,13 @@ ${namesToRegister
20311
20388
  });
20312
20389
  this.on_change(children, () => this.renderChildren());
20313
20390
  this.on_change(expanded, () => {
20391
+ // A view whose render() has not run, or which has been torn down, has no Tabulator
20392
+ // instance. It can still be subscribed to the model, and throwing here aborts the whole
20393
+ // emit chain, so a sibling view that *is* rendered never gets to draw the row content and
20394
+ // the expand click appears to do nothing. Every other handler in this file guards this way.
20395
+ if (this.tabulator == null) {
20396
+ return;
20397
+ }
20314
20398
  // The first cell is the cell of the frozen _index column.
20315
20399
  for (const row of this.tabulator.rowManager.getRows()) {
20316
20400
  if (row.cells.length > 0) {
@@ -20691,6 +20775,9 @@ ${namesToRegister
20691
20775
  break;
20692
20776
  }
20693
20777
  }
20778
+ if (heights.length === 0) {
20779
+ return;
20780
+ }
20694
20781
  if (height < table_height) {
20695
20782
  page_size = table.children.length;
20696
20783
  const remaining = table_height - height;
@@ -20758,7 +20845,7 @@ ${namesToRegister
20758
20845
  ...(0, util_1.transformJsPlaceholders)(this.model.configuration),
20759
20846
  index: "_index",
20760
20847
  nestedFieldSeparator: false,
20761
- movableColumns: false,
20848
+ movableColumns: this.model.movable_columns,
20762
20849
  selectableRows,
20763
20850
  columns: this.getColumns(),
20764
20851
  initialSort: this.sorters,
@@ -21498,6 +21585,7 @@ ${namesToRegister
21498
21585
  indexes: [List(Str), []],
21499
21586
  layout: [exports.TableLayout, "fit_data"],
21500
21587
  max_page: [Float, 0],
21588
+ movable_columns: [Bool, false],
21501
21589
  pagination: [Nullable(Str), null],
21502
21590
  page: [Float, 0],
21503
21591
  page_size: [Nullable(Float), null],
@@ -24560,7 +24648,7 @@ ${namesToRegister
24560
24648
  const column_data_source_1 = require("@bokehjs/models/sources/column_data_source");
24561
24649
  const debounce_1 = require("99a25e6992") /* debounce */;
24562
24650
  const data_1 = require("be689f0377") /* ./data */;
24563
- const layout_1 = require("dab42e6dad") /* ./layout */;
24651
+ const layout_1 = require("84236c2552") /* ./layout */;
24564
24652
  const lumagl_1 = require("16d69e2b49") /* ./lumagl */;
24565
24653
  const tooltips_1 = require("f8f8ea4284") /* ./tooltips */;
24566
24654
  function extractClasses() {
@@ -26531,7 +26619,7 @@ ${namesToRegister
26531
26619
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
26532
26620
  const dom_1 = require("@bokehjs/core/dom");
26533
26621
  const event_to_object_1 = require("a572dba9cd") /* ./event-to-object */;
26534
- const layout_1 = require("dab42e6dad") /* ./layout */;
26622
+ const layout_1 = require("84236c2552") /* ./layout */;
26535
26623
  const util_1 = require("aa07eb54cc") /* ./util */;
26536
26624
  const mouse_events = [
26537
26625
  "click", "dblclick", "mousedown", "mousemove", "mouseup", "mouseover", "mouseout",
@@ -26775,7 +26863,7 @@ ${namesToRegister
26775
26863
  }));
26776
26864
  })();
26777
26865
  },
26778
- "f9c84aaf3d": /* models/feed.js */ function _(require, module, exports, __esModule, __esExport) {
26866
+ "44a7ecdf96": /* models/feed.js */ function _(require, module, exports, __esModule, __esExport) {
26779
26867
  var _a, _b;
26780
26868
  __esModule();
26781
26869
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
@@ -26830,6 +26918,14 @@ ${namesToRegister
26830
26918
  initialize() {
26831
26919
  super.initialize();
26832
26920
  this._sync = true;
26921
+ // The Feed only clips its children when it is a scroll container, whose css
26922
+ // classes (see _SCROLL_MAPPING) all start with "scroll". Otherwise it grows
26923
+ // to fit its content and an ancestor (e.g. the page) scrolls, so visibility
26924
+ // must be measured against the viewport; rooting on this.el would treat
26925
+ // every rendered child - including the load_buffer - as visible and expand
26926
+ // visible_range until all objects load (#8661).
26927
+ const is_scroll_container = this.model.css_classes.some((cls) => cls.startsWith("scroll"));
26928
+ const root = is_scroll_container ? this.el : null;
26833
26929
  this._intersection_observer = new IntersectionObserver((entries) => {
26834
26930
  const visible = [...this.model.visible_children];
26835
26931
  const nodes = this.node_map;
@@ -26856,7 +26952,7 @@ ${namesToRegister
26856
26952
  this._last_visible = null;
26857
26953
  }
26858
26954
  }, {
26859
- root: this.el,
26955
+ root,
26860
26956
  threshold: 0.01,
26861
26957
  });
26862
26958
  }
@@ -27524,7 +27620,7 @@ ${namesToRegister
27524
27620
  var _a;
27525
27621
  __esModule();
27526
27622
  const dom_1 = require("@bokehjs/core/dom");
27527
- const layout_1 = require("dab42e6dad") /* ./layout */;
27623
+ const layout_1 = require("84236c2552") /* ./layout */;
27528
27624
  const Jupyter = window.Jupyter;
27529
27625
  class IPyWidgetView extends layout_1.HTMLBoxView {
27530
27626
  initialize() {
@@ -27613,7 +27709,7 @@ ${namesToRegister
27613
27709
  const kinds_1 = require("@bokehjs/core/kinds");
27614
27710
  const markup_1 = require("@bokehjs/models/widgets/markup");
27615
27711
  const json_formatter_js_1 = tslib_1.__importDefault(require("ec9d1ffc2e") /* json-formatter-js */);
27616
- const layout_1 = require("dab42e6dad") /* ./layout */;
27712
+ const layout_1 = require("84236c2552") /* ./layout */;
27617
27713
  class JSONView extends layout_1.PanelMarkupView {
27618
27714
  connect_signals() {
27619
27715
  super.connect_signals();
@@ -27771,7 +27867,7 @@ ${namesToRegister
27771
27867
  const tslib_1 = require("tslib");
27772
27868
  const dom_1 = require("@bokehjs/core/dom");
27773
27869
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
27774
- const layout_1 = require("dab42e6dad") /* ./layout */;
27870
+ const layout_1 = require("84236c2552") /* ./layout */;
27775
27871
  const jsoneditor_css_1 = tslib_1.__importDefault(require("317a12d360") /* ../styles/models/jsoneditor.css */);
27776
27872
  class JSONEditEvent extends bokeh_events_1.ModelEvent {
27777
27873
  constructor(data) {
@@ -27882,7 +27978,7 @@ ${namesToRegister
27882
27978
  var _a;
27883
27979
  __esModule();
27884
27980
  const markup_1 = require("@bokehjs/models/widgets/markup");
27885
- const layout_1 = require("dab42e6dad") /* ./layout */;
27981
+ const layout_1 = require("84236c2552") /* ./layout */;
27886
27982
  class KaTeXView extends layout_1.PanelMarkupView {
27887
27983
  connect_signals() {
27888
27984
  super.connect_signals();
@@ -28039,7 +28135,7 @@ ${namesToRegister
28039
28135
  var _a;
28040
28136
  __esModule();
28041
28137
  const markup_1 = require("@bokehjs/models/widgets/markup");
28042
- const layout_1 = require("dab42e6dad") /* ./layout */;
28138
+ const layout_1 = require("84236c2552") /* ./layout */;
28043
28139
  class MathJaxView extends layout_1.PanelMarkupView {
28044
28140
  connect_signals() {
28045
28141
  super.connect_signals();
@@ -28246,7 +28342,7 @@ ${namesToRegister
28246
28342
  var _a;
28247
28343
  __esModule();
28248
28344
  const markup_1 = require("@bokehjs/models/widgets/markup");
28249
- const layout_1 = require("dab42e6dad") /* ./layout */;
28345
+ const layout_1 = require("84236c2552") /* ./layout */;
28250
28346
  const html_1 = require("4c04683fdc") /* ./html */;
28251
28347
  class PDFView extends layout_1.PanelMarkupView {
28252
28348
  connect_signals() {
@@ -28310,7 +28406,7 @@ ${namesToRegister
28310
28406
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
28311
28407
  const dom_1 = require("@bokehjs/core/dom");
28312
28408
  const column_data_source_1 = require("@bokehjs/models/sources/column_data_source");
28313
- const layout_1 = require("dab42e6dad") /* ./layout */;
28409
+ const layout_1 = require("84236c2552") /* ./layout */;
28314
28410
  const perspective_css_1 = tslib_1.__importDefault(require("2e2913ea54") /* ../styles/models/perspective.css */);
28315
28411
  const THEMES = {
28316
28412
  "pro-dark": "Pro Dark",
@@ -28647,7 +28743,7 @@ ${namesToRegister
28647
28743
  const eq_1 = require("@bokehjs/core/util/eq");
28648
28744
  const column_data_source_1 = require("@bokehjs/models/sources/column_data_source");
28649
28745
  const debounce_1 = require("99a25e6992") /* debounce */;
28650
- const layout_1 = require("dab42e6dad") /* ./layout */;
28746
+ const layout_1 = require("84236c2552") /* ./layout */;
28651
28747
  const util_1 = require("aa07eb54cc") /* ./util */;
28652
28748
  const plotly_css_1 = tslib_1.__importDefault(require("3d56c75186") /* ../styles/models/plotly.css */);
28653
28749
  const FORBIDDEN_KEYS = new Set(["__proto__", "prototype", "constructor"]);
@@ -29124,11 +29220,11 @@ ${namesToRegister
29124
29220
  __esModule();
29125
29221
  exports.default = `.js-plotly-plot .plotly,.js-plotly-plot .plotly div{direction:ltr;font-family:'Open Sans', verdana, arial, sans-serif;margin:0;padding:0;}.js-plotly-plot .plotly input,.js-plotly-plot .plotly button{font-family:'Open Sans', verdana, arial, sans-serif;}.js-plotly-plot .plotly input:focus,.js-plotly-plot .plotly button:focus{outline:none;}.js-plotly-plot .plotly a{text-decoration:none;}.js-plotly-plot .plotly a:hover{text-decoration:none;}.js-plotly-plot .plotly .crisp{shape-rendering:crispEdges;}.js-plotly-plot .plotly .user-select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.js-plotly-plot .plotly svg{overflow:hidden;}.js-plotly-plot .plotly svg a{fill:#447adb;}.js-plotly-plot .plotly svg a:hover{fill:#3c6dc5;}.js-plotly-plot .plotly .main-svg{position:absolute;top:0;left:0;pointer-events:none;}.js-plotly-plot .plotly .main-svg .draglayer{pointer-events:all;}.js-plotly-plot .plotly .cursor-default{cursor:default;}.js-plotly-plot .plotly .cursor-pointer{cursor:pointer;}.js-plotly-plot .plotly .cursor-crosshair{cursor:crosshair;}.js-plotly-plot .plotly .cursor-move{cursor:move;}.js-plotly-plot .plotly .cursor-col-resize{cursor:col-resize;}.js-plotly-plot .plotly .cursor-row-resize{cursor:row-resize;}.js-plotly-plot .plotly .cursor-ns-resize{cursor:ns-resize;}.js-plotly-plot .plotly .cursor-ew-resize{cursor:ew-resize;}.js-plotly-plot .plotly .cursor-sw-resize{cursor:sw-resize;}.js-plotly-plot .plotly .cursor-s-resize{cursor:s-resize;}.js-plotly-plot .plotly .cursor-se-resize{cursor:se-resize;}.js-plotly-plot .plotly .cursor-w-resize{cursor:w-resize;}.js-plotly-plot .plotly .cursor-e-resize{cursor:e-resize;}.js-plotly-plot .plotly .cursor-nw-resize{cursor:nw-resize;}.js-plotly-plot .plotly .cursor-n-resize{cursor:n-resize;}.js-plotly-plot .plotly .cursor-ne-resize{cursor:ne-resize;}.js-plotly-plot .plotly .cursor-grab{cursor:-webkit-grab;cursor:grab;}.js-plotly-plot .plotly .modebar{position:absolute;top:2px;right:2px;}.js-plotly-plot .plotly .ease-bg{-webkit-transition:background-color 0.3s ease 0s;-moz-transition:background-color 0.3s ease 0s;-ms-transition:background-color 0.3s ease 0s;-o-transition:background-color 0.3s ease 0s;transition:background-color 0.3s ease 0s;}.js-plotly-plot .plotly .modebar--hover > :not(.watermark){opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;}.js-plotly-plot .plotly:hover .modebar--hover .modebar-group{opacity:1;}.js-plotly-plot .plotly .modebar-group{float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;}.js-plotly-plot .plotly .modebar-btn{fill:var(--plotly-icon-color);background-color:unset;border:none;position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;}.js-plotly-plot .plotly .modebar-btn.active{fill:var(--plotly-active-icon-color);}.js-plotly-plot .plotly .modebar-btn svg{position:relative;top:2px;}.js-plotly-plot .plotly .modebar.vertical{display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;}.js-plotly-plot .plotly .modebar.vertical svg{top:-1px;}.js-plotly-plot .plotly .modebar.vertical .modebar-group{display:block;float:none;padding-left:0px;padding-bottom:8px;}.js-plotly-plot .plotly .modebar.vertical .modebar-group .modebar-btn{display:block;text-align:center;}.js-plotly-plot .plotly [data-title]{}.js-plotly-plot .plotly [data-title]:before,.js-plotly-plot .plotly [data-title]:after{position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;}.js-plotly-plot .plotly [data-title]:hover:before,.js-plotly-plot .plotly [data-title]:hover:after{display:block;opacity:1;}.js-plotly-plot .plotly [data-title]:before{content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;}.js-plotly-plot .plotly [data-title]:after{content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;}.js-plotly-plot .plotly .vertical [data-title]:before,.js-plotly-plot .plotly .vertical [data-title]:after{top:0%;right:200%;}.js-plotly-plot .plotly .vertical [data-title]:before{border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;}.plotly-notifier{font-family:'Open Sans', verdana, arial, sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;}.plotly-notifier p{margin:0;}.plotly-notifier .notifier-note{min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140, 151, 175, 0.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;}.plotly-notifier .notifier-close{color:#fff;opacity:0.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;}.plotly-notifier .notifier-close:hover{color:#444;text-decoration:none;cursor:pointer;}`;
29126
29222
  },
29127
- "b1f4d68596": /* models/progress.js */ function _(require, module, exports, __esModule, __esExport) {
29223
+ "54e5f3767b": /* models/progress.js */ function _(require, module, exports, __esModule, __esExport) {
29128
29224
  var _a;
29129
29225
  __esModule();
29130
29226
  const dom_1 = require("@bokehjs/core/dom");
29131
- const layout_1 = require("dab42e6dad") /* ./layout */;
29227
+ const layout_1 = require("84236c2552") /* ./layout */;
29132
29228
  class ProgressView extends layout_1.HTMLBoxView {
29133
29229
  connect_signals() {
29134
29230
  super.connect_signals();
@@ -29141,6 +29237,9 @@ ${namesToRegister
29141
29237
  render() {
29142
29238
  super.render();
29143
29239
  const style = { ...this.model.styles, display: "inline-block" };
29240
+ if (this.model.height != null) {
29241
+ style.height = `${this.model.height}px`;
29242
+ }
29144
29243
  this.progressEl = document.createElement("progress");
29145
29244
  this.setValue();
29146
29245
  this.setMax();
@@ -29208,7 +29307,7 @@ ${namesToRegister
29208
29307
  var _a;
29209
29308
  __esModule();
29210
29309
  const dom_1 = require("@bokehjs/core/dom");
29211
- const layout_1 = require("dab42e6dad") /* ./layout */;
29310
+ const layout_1 = require("84236c2552") /* ./layout */;
29212
29311
  class QuillInputView extends layout_1.HTMLBoxView {
29213
29312
  connect_signals() {
29214
29313
  super.connect_signals();
@@ -29526,7 +29625,7 @@ ${namesToRegister
29526
29625
  }));
29527
29626
  })();
29528
29627
  },
29529
- "93ad10c64c": /* models/react_component.js */ function _(require, module, exports, __esModule, __esExport) {
29628
+ "b2c617bbc6": /* models/react_component.js */ function _(require, module, exports, __esModule, __esExport) {
29530
29629
  var _a;
29531
29630
  __esModule();
29532
29631
  const build_views_1 = require("@bokehjs/core/build_views");
@@ -29534,7 +29633,7 @@ ${namesToRegister
29534
29633
  const array_1 = require("@bokehjs/core/util/array");
29535
29634
  const assert_1 = require("@bokehjs/core/util/assert");
29536
29635
  const types_1 = require("@bokehjs/core/util/types");
29537
- const reactive_esm_1 = require("74cc5c8ee7") /* ./reactive_esm */;
29636
+ const reactive_esm_1 = require("1e7e12b23e") /* ./reactive_esm */;
29538
29637
  class HostedStyleSheet extends dom_1.InlineStyleSheet {
29539
29638
  constructor(css, id, persistent = false, host_id = "") {
29540
29639
  super(css, id, persistent);
@@ -29612,7 +29711,7 @@ ${namesToRegister
29612
29711
  return this.model.use_shadow_dom || !(this.parent instanceof ReactComponentView);
29613
29712
  }
29614
29713
  render_esm() {
29615
- if (this.model.compiled === null || this.model.render_module === null) {
29714
+ if (this.model.compiled === null || this.model.render_module === null || this.container == null) {
29616
29715
  return;
29617
29716
  }
29618
29717
  this._rendered = false;
@@ -29634,10 +29733,37 @@ ${namesToRegister
29634
29733
  this._mounted_resolve = resolve;
29635
29734
  });
29636
29735
  this.model.render_module.then((mod) => {
29736
+ if (this.container == null) {
29737
+ // Nothing will mount, so the ready promise has to be settled here or
29738
+ // the view never finishes and the document never goes idle.
29739
+ this._resolve_mounted();
29740
+ return;
29741
+ }
29637
29742
  this.react_root = mod.default.render(this.model.id);
29743
+ }).catch((e) => {
29744
+ this._resolve_mounted();
29745
+ throw e;
29638
29746
  });
29639
29747
  this._await_ready(mounted_promise);
29640
29748
  }
29749
+ render_error(error) {
29750
+ // A component that errored will never mount and so never settles its
29751
+ // promise via `after_rendered`.
29752
+ this._resolve_mounted();
29753
+ super.render_error(error);
29754
+ }
29755
+ /**
29756
+ * Settles the promise handed to `_await_ready` by `render_esm`. Safe to call
29757
+ * more than once; only the first call has an effect.
29758
+ */
29759
+ _resolve_mounted() {
29760
+ const resolve = this._mounted_resolve;
29761
+ if (resolve == null) {
29762
+ return;
29763
+ }
29764
+ this._mounted_resolve = null;
29765
+ resolve();
29766
+ }
29641
29767
  on_force_update(cb) {
29642
29768
  this._force_update_callbacks.push(cb);
29643
29769
  }
@@ -29649,13 +29775,13 @@ ${namesToRegister
29649
29775
  remove() {
29650
29776
  this._force_update_callbacks = [];
29651
29777
  this.mounted = false;
29778
+ // A view removed before it mounted still owes a resolution to the promise
29779
+ // handed to `_await_ready`, otherwise the root never reaches idle.
29780
+ this._resolve_mounted();
29652
29781
  if (this.react_root && this.use_shadow_dom) {
29653
29782
  super.remove();
29654
29783
  this.react_root.then((root) => root && root.unmount());
29655
- for (const view of this._scheduled_removals) {
29656
- view.remove();
29657
- }
29658
- this._scheduled_removals = [];
29784
+ this.flush_scheduled_removals();
29659
29785
  }
29660
29786
  else {
29661
29787
  this._applied_stylesheets.forEach((stylesheet) => stylesheet.uninstall());
@@ -29666,6 +29792,7 @@ ${namesToRegister
29666
29792
  this._child_rendered.clear();
29667
29793
  this._mounted.clear();
29668
29794
  }
29795
+ this.react_root = null;
29669
29796
  }
29670
29797
  get root_view() {
29671
29798
  let root = this;
@@ -29679,21 +29806,40 @@ ${namesToRegister
29679
29806
  }
29680
29807
  _apply_stylesheets(stylesheets) {
29681
29808
  const resolved_stylesheets = stylesheets.map((style) => (0, types_1.isString)(style) ? new dom_1.InlineStyleSheet(style) : style);
29682
- const styles = this.root_view.shadow_el.querySelectorAll("style");
29683
- const links = this.root_view.shadow_el.querySelectorAll("link");
29809
+ const root_view = this.root_view;
29810
+ const target = root_view.shadow_el;
29811
+ // When shadow DOM is disabled every component in the tree installs its
29812
+ // stylesheets into the same root, so the existing CSS is indexed once and
29813
+ // looked up by value. Scanning the root per stylesheet made this quadratic
29814
+ // in the number of components times the number of stylesheets each.
29815
+ const installed_css = new Set();
29816
+ const installed_hrefs = new Set();
29817
+ if (!this.use_shadow_dom) {
29818
+ for (const style of target.querySelectorAll("style")) {
29819
+ installed_css.add(style.textContent);
29820
+ }
29821
+ for (const link of target.querySelectorAll("link")) {
29822
+ installed_hrefs.add(link.href);
29823
+ }
29824
+ }
29684
29825
  resolved_stylesheets.forEach((stylesheet) => {
29685
29826
  if (!this.use_shadow_dom) {
29686
- if (stylesheet instanceof dom_1.InlineStyleSheet &&
29687
- Array.from(styles).some(style => style.innerHTML === stylesheet.css)) {
29688
- return;
29827
+ if (stylesheet instanceof dom_1.InlineStyleSheet) {
29828
+ if (installed_css.has(stylesheet.css)) {
29829
+ return;
29830
+ }
29831
+ installed_css.add(stylesheet.css);
29689
29832
  }
29690
- if (stylesheet instanceof dom_1.ImportedStyleSheet &&
29691
- Array.from(links).some(link => link.href === stylesheet.el.href)) {
29692
- return;
29833
+ else if (stylesheet instanceof dom_1.ImportedStyleSheet) {
29834
+ const { href } = stylesheet.el;
29835
+ if (installed_hrefs.has(href)) {
29836
+ return;
29837
+ }
29838
+ installed_hrefs.add(href);
29693
29839
  }
29694
29840
  }
29695
29841
  this._applied_stylesheets.push(stylesheet);
29696
- stylesheet.install(this.root_view.shadow_el);
29842
+ stylesheet.install(target);
29697
29843
  });
29698
29844
  }
29699
29845
  render() {
@@ -29702,6 +29848,9 @@ ${namesToRegister
29702
29848
  }
29703
29849
  this._force_update_callbacks = [];
29704
29850
  this.mounted = false;
29851
+ // `super.render()` calls `render_esm`, which installs a fresh promise, so
29852
+ // settle any promise the previous render left outstanding first.
29853
+ this._resolve_mounted();
29705
29854
  super.render();
29706
29855
  }
29707
29856
  r_after_render() {
@@ -29772,6 +29921,19 @@ ${namesToRegister
29772
29921
  }
29773
29922
  }
29774
29923
  this._update_children();
29924
+ // Removals are normally drained by the replacement child once it mounts,
29925
+ // but a child that never mounts would leak the old views, so flush any
29926
+ // that are still pending after React has had a chance to commit.
29927
+ setTimeout(() => this.flush_scheduled_removals(), 0);
29928
+ }
29929
+ flush_scheduled_removals() {
29930
+ const removals = this._scheduled_removals;
29931
+ this._scheduled_removals = [];
29932
+ for (const view of removals) {
29933
+ if (!view.is_destroyed) {
29934
+ view.remove();
29935
+ }
29936
+ }
29775
29937
  }
29776
29938
  _on_mounted() {
29777
29939
  this.invalidate_layout();
@@ -29798,17 +29960,15 @@ ${namesToRegister
29798
29960
  }
29799
29961
  this._rendered = true;
29800
29962
  if (this._mounted_resolve) {
29801
- const resolve = this._mounted_resolve;
29802
- this._mounted_resolve = null;
29803
29963
  const child_ready = [];
29804
29964
  for (const child_view of this.child_views) {
29805
29965
  child_ready.push(child_view.ready);
29806
29966
  }
29807
29967
  if (child_ready.length > 0) {
29808
- Promise.all(child_ready).then(() => resolve());
29968
+ Promise.all(child_ready).then(() => this._resolve_mounted());
29809
29969
  }
29810
29970
  else {
29811
- resolve();
29971
+ this._resolve_mounted();
29812
29972
  }
29813
29973
  }
29814
29974
  this.finish();
@@ -29887,6 +30047,18 @@ async function render(id) {
29887
30047
  super(props)
29888
30048
  this.render_callback = null
29889
30049
  this.containerRef = React.createRef()
30050
+ // Registers the child as tracked but not yet rendered. React's render
30051
+ // phase has to stay free of side effects, since a render may be
30052
+ // discarded without ever committing, so the flag is only ever flipped
30053
+ // here and from getSnapshotBeforeUpdate.
30054
+ this._mark_stale()
30055
+ }
30056
+
30057
+ _mark_stale() {
30058
+ const view = this.view
30059
+ if (view) {
30060
+ this.props.parent._child_rendered.set(view, false)
30061
+ }
29890
30062
  }
29891
30063
 
29892
30064
  updateElement() {
@@ -29922,15 +30094,13 @@ async function render(id) {
29922
30094
  }
29923
30095
  this.updateElement()
29924
30096
  if (this.use_shadow_dom) {
29925
- for (const view of this.props.parent._scheduled_removals) { view.remove() }
29926
- this.props.parent._scheduled_removals = []
30097
+ this.props.parent.flush_scheduled_removals()
29927
30098
  this.props.parent.rerender_(view)
29928
30099
  this.props.parent._child_rendered.set(view, true)
29929
30100
  } else {
29930
30101
  view.patch_container(this.containerRef.current)
29931
30102
  view.model.render_module.then(async (mod) => {
29932
- for (const view of this.props.parent._scheduled_removals) { view.remove() }
29933
- this.props.parent._scheduled_removals = []
30103
+ this.props.parent.flush_scheduled_removals()
29934
30104
  this.setState(
29935
30105
  {rendered: await mod.default.render(view.model.id)},
29936
30106
  () => {
@@ -29944,8 +30114,7 @@ async function render(id) {
29944
30114
  }
29945
30115
  this.props.parent.on_child_render(this.props.name, this.render_callback)
29946
30116
  if (view == null) { return }
29947
- for (const rview of this.props.parent._scheduled_removals) { rview.remove() }
29948
- this.props.parent._scheduled_removals = []
30117
+ this.props.parent.flush_scheduled_removals()
29949
30118
  if (this.use_shadow_dom) {
29950
30119
  this.updateElement()
29951
30120
  this.props.parent.rerender_(view)
@@ -29970,11 +30139,22 @@ async function render(id) {
29970
30139
  if (this.render_callback) {
29971
30140
  this.props.parent.remove_on_child_render(this.props.name, this.render_callback)
29972
30141
  }
29973
- if (!this.use_shadow_dom && this.view._mounted.has(this.props.name)) {
29974
- this.view._mounted.get(this.props.name).delete(this.props.id)
30142
+ // The mount bookkeeping lives on the parent, and the view may already be
30143
+ // gone by the time React unmounts us, so fall back to the model id prop.
30144
+ const id = this.view?.model.id ?? this.props.id
30145
+ if (id != null) {
30146
+ this.props.parent.notify_mount(this.props.name, id, true)
29975
30147
  }
29976
30148
  }
29977
30149
 
30150
+ getSnapshotBeforeUpdate() {
30151
+ // Commit-phase equivalent of the constructor's registration: the view
30152
+ // this Child renders may have been swapped out, so the incoming one is
30153
+ // registered as stale here rather than during render.
30154
+ this._mark_stale()
30155
+ return null
30156
+ }
30157
+
29978
30158
  componentDidUpdate() {
29979
30159
  if (this.use_shadow_dom) {
29980
30160
  this.updateElement()
@@ -29983,9 +30163,6 @@ async function render(id) {
29983
30163
 
29984
30164
  render() {
29985
30165
  const child = this.state.rendered
29986
- if (this.view) {
29987
- this.props.parent._child_rendered.set(this.view, false)
29988
- }
29989
30166
  const class_name = (this.use_shadow_dom ?
29990
30167
  "child-wrapper" : this.view.model.class_name.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()
29991
30168
  )
@@ -30141,6 +30318,9 @@ async function render(id) {
30141
30318
  container.id = view.model.root_node.replace("#", "")
30142
30319
  document.body.append(container)
30143
30320
  }
30321
+ } else if (view.container == null) {
30322
+ view._resolve_mounted()
30323
+ return null
30144
30324
  } else {
30145
30325
  container = view.container
30146
30326
  }
@@ -30148,6 +30328,7 @@ async function render(id) {
30148
30328
  try {
30149
30329
  root.render(rendered)
30150
30330
  } catch(e) {
30331
+ view._resolve_mounted()
30151
30332
  view.render_error(e)
30152
30333
  }
30153
30334
  return root
@@ -30205,7 +30386,7 @@ ${compiled}`;
30205
30386
  const data_1 = require("be689f0377") /* ./data */;
30206
30387
  const event_to_object_1 = require("a572dba9cd") /* ./event-to-object */;
30207
30388
  const html_1 = require("4c04683fdc") /* ./html */;
30208
- const layout_1 = require("dab42e6dad") /* ./layout */;
30389
+ const layout_1 = require("84236c2552") /* ./layout */;
30209
30390
  const util_1 = require("aa07eb54cc") /* ./util */;
30210
30391
  function serialize_attrs(attrs) {
30211
30392
  const serialized = {};
@@ -31263,7 +31444,7 @@ ${compiled}`;
31263
31444
  "5ac2cab0ab": /* models/speech_to_text.js */ function _(require, module, exports, __esModule, __esExport) {
31264
31445
  var _a;
31265
31446
  __esModule();
31266
- const layout_1 = require("dab42e6dad") /* ./layout */;
31447
+ const layout_1 = require("84236c2552") /* ./layout */;
31267
31448
  const iconStarted = `<svg xmlns="http://www.w3.org/2000/svg" height="22px" style="vertical-align: middle;" fill="currentColor" class="bi bi-mic" viewBox="0 0 16 16">
31268
31449
  <path fill-rule="evenodd" d="M3.5 6.5A.5.5 0 0 1 4 7v1a4 4 0 0 0 8 0V7a.5.5 0 0 1 1 0v1a5 5 0 0 1-4.5 4.975V15h3a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1h3v-2.025A5 5 0 0 1 3 8V7a.5.5 0 0 1 .5-.5z"/>
31269
31450
  <path fill-rule="evenodd" d="M10 8V3a2 2 0 1 0-4 0v5a2 2 0 1 0 4 0zM8 0a3 3 0 0 0-3 3v5a3 3 0 0 0 6 0V3a3 3 0 0 0-3-3z"/>
@@ -31696,7 +31877,7 @@ ${compiled}`;
31696
31877
  __esModule();
31697
31878
  const dom_1 = require("@bokehjs/core/dom");
31698
31879
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
31699
- const layout_1 = require("dab42e6dad") /* ./layout */;
31880
+ const layout_1 = require("84236c2552") /* ./layout */;
31700
31881
  class KeystrokeEvent extends bokeh_events_1.ModelEvent {
31701
31882
  constructor(key) {
31702
31883
  super();
@@ -31867,7 +32048,7 @@ ${compiled}`;
31867
32048
  "a04eb51988": /* models/text_to_speech.js */ function _(require, module, exports, __esModule, __esExport) {
31868
32049
  var _a;
31869
32050
  __esModule();
31870
- const layout_1 = require("dab42e6dad") /* ./layout */;
32051
+ const layout_1 = require("84236c2552") /* ./layout */;
31871
32052
  function toVoicesList(voices) {
31872
32053
  const voicesList = [];
31873
32054
  for (const voice of voices) {
@@ -32182,7 +32363,7 @@ ${compiled}`;
32182
32363
  "29d55a28a9": /* models/trend.js */ function _(require, module, exports, __esModule, __esExport) {
32183
32364
  var _a;
32184
32365
  __esModule();
32185
- const layout_1 = require("dab42e6dad") /* ./layout */;
32366
+ const layout_1 = require("84236c2552") /* ./layout */;
32186
32367
  const build_views_1 = require("@bokehjs/core/build_views");
32187
32368
  const plots_1 = require("@bokehjs/models/plots");
32188
32369
  const glyphs_1 = require("@bokehjs/models/glyphs");
@@ -32406,7 +32587,7 @@ ${compiled}`;
32406
32587
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
32407
32588
  const types_1 = require("@bokehjs/core/util/types");
32408
32589
  const layout_dom_1 = require("@bokehjs/models/layouts/layout_dom");
32409
- const layout_1 = require("dab42e6dad") /* ./layout */;
32590
+ const layout_1 = require("84236c2552") /* ./layout */;
32410
32591
  const debounce_1 = require("99a25e6992") /* debounce */;
32411
32592
  class VegaEvent extends bokeh_events_1.ModelEvent {
32412
32593
  constructor(data) {
@@ -32592,7 +32773,7 @@ ${compiled}`;
32592
32773
  __esModule();
32593
32774
  const tslib_1 = require("tslib");
32594
32775
  const dom_1 = require("@bokehjs/core/dom");
32595
- const layout_1 = require("dab42e6dad") /* ./layout */;
32776
+ const layout_1 = require("84236c2552") /* ./layout */;
32596
32777
  const video_css_1 = tslib_1.__importDefault(require("dfe21e6f1b") /* ../styles/models/video.css */);
32597
32778
  class VideoView extends layout_1.HTMLBoxView {
32598
32779
  constructor() {
@@ -32757,7 +32938,7 @@ ${compiled}`;
32757
32938
  "f8afc4e661": /* models/videostream.js */ function _(require, module, exports, __esModule, __esExport) {
32758
32939
  var _a;
32759
32940
  __esModule();
32760
- const layout_1 = require("dab42e6dad") /* ./layout */;
32941
+ const layout_1 = require("84236c2552") /* ./layout */;
32761
32942
  class VideoStreamView extends layout_1.HTMLBoxView {
32762
32943
  constructor() {
32763
32944
  super(...arguments);
@@ -32882,7 +33063,7 @@ ${compiled}`;
32882
33063
  const column_data_source_1 = require("@bokehjs/models/sources/column_data_source");
32883
33064
  const bokeh_events_1 = require("@bokehjs/core/bokeh_events");
32884
33065
  const debounce_1 = require("99a25e6992") /* debounce */;
32885
- const layout_1 = require("dab42e6dad") /* ./layout */;
33066
+ const layout_1 = require("84236c2552") /* ./layout */;
32886
33067
  class VizzuEvent extends bokeh_events_1.ModelEvent {
32887
33068
  constructor(data) {
32888
33069
  super();
@@ -33155,7 +33336,7 @@ ${compiled}`;
33155
33336
  const object_1 = require("@bokehjs/core/util/object");
33156
33337
  const color_mapper_1 = require("@bokehjs/models/mappers/color_mapper");
33157
33338
  const kinds_1 = require("@bokehjs/core/kinds");
33158
- const layout_1 = require("dab42e6dad") /* ../layout */;
33339
+ const layout_1 = require("84236c2552") /* ../layout */;
33159
33340
  const util_1 = require("df9946ff52") /* ./util */;
33160
33341
  const vtkcolorbar_1 = require("b1d68776a9") /* ./vtkcolorbar */;
33161
33342
  const vtkaxes_1 = require("0379dcf1cd") /* ./vtkaxes */;
@@ -41373,5 +41554,5 @@ ${compiled}`;
41373
41554
  util_1.vtkns.FullScreenRenderWindowSynchronized = FullScreenRenderWindowSynchronized;
41374
41555
  }
41375
41556
  },
41376
- }, "4e90918c0a", {"index":"4e90918c0a","models/index":"2fe1822b2b","models/ace":"5fa2fb81b3","models/layout":"dab42e6dad","models/util":"aa07eb54cc","models/anywidget_component":"1f663ffe94","models/reactive_esm":"74cc5c8ee7","models/event-to-object":"a572dba9cd","models/html":"4c04683fdc","styles/models/html.css":"9b8139e439","styles/models/esm.css":"727a14f76b","models/audio":"fd59c985b3","models/browser":"5a16cc23e6","models/button":"1db93211cd","models/button_icon":"1738ddeb3a","models/icon":"6c7fbea0ef","models/card":"31556103c8","models/column":"b273e5b2fb","styles/models/card.css":"6342ac8e26","models/checkbox_button_group":"51fbe9e2d0","models/chatarea_input":"27a077673d","models/textarea_input":"b7d595d74a","models/comm_manager":"1bec1b1fcc","models/customselect":"92bbd30bd1","models/multiselect":"27b5580835","models/tabulator":"b90fc40725","models/data":"be689f0377","styles/models/tabulator.css":"3d732ff91f","models/datetime_picker":"100965d6f3","models/datetime_slider":"c97cc0eade","models/deckgl":"d58ba73420","models/lumagl":"16d69e2b49","models/tooltips":"f8f8ea4284","models/discrete_player":"0dca2cd4f6","models/player":"96e805ccb5","models/echarts":"ec1ecef6a0","models/feed":"f9c84aaf3d","models/file_download":"84a13dddfb","models/file_dropper":"8531319d94","styles/models/filedropper.css":"c03dd3c931","models/ipywidget":"8a8089cbf3","models/json":"245cd3cfde","models/jsoneditor":"33e664043e","styles/models/jsoneditor.css":"317a12d360","models/katex":"f672d71a9f","models/location":"9012b81346","models/mathjax":"d889a68424","models/modal":"9a342a6757","styles/models/modal.css":"be4b4352c6","models/pdf":"f87ad1873c","models/perspective":"29a0b0da9a","styles/models/perspective.css":"2e2913ea54","models/plotly":"59dbae0a77","styles/models/plotly.css":"3d56c75186","models/progress":"b1f4d68596","models/quill":"a8f2a01dfe","models/radio_button_group":"25e2d7c208","models/react_component":"93ad10c64c","models/reactive_html":"d5752cda5a","models/singleselect":"4155401209","models/speech_to_text":"5ac2cab0ab","models/state":"92822cb73a","models/tabs":"fffb4344f7","models/terminal":"a961b5ae5e","models/text_input":"8be416b160","models/text_to_speech":"a04eb51988","models/time_picker":"1afcab4e45","models/toggle_icon":"ad985f285e","models/tooltip_icon":"ae3a172647","models/trend":"29d55a28a9","models/vega":"22dbf7c070","models/video":"79dc37b888","styles/models/video.css":"dfe21e6f1b","models/videostream":"f8afc4e661","models/vizzu":"1f7bc1f95b","models/vtk/index":"c51f25e2a7","models/vtk/vtkjs":"ac55912dc1","models/vtk/vtklayout":"b06d05fa3e","models/vtk/util":"df9946ff52","models/vtk/vtkcolorbar":"b1d68776a9","models/vtk/vtkaxes":"0379dcf1cd","models/vtk/vtkvolume":"18592eecef","models/vtk/vtksynchronized":"a4e5946204","models/vtk/panel_fullscreen_renwin_sync":"5e89c7b3eb"}, {});});
41557
+ }, "4e90918c0a", {"index":"4e90918c0a","models/index":"2fe1822b2b","models/ace":"5fa2fb81b3","models/layout":"84236c2552","models/util":"aa07eb54cc","models/anywidget_component":"1f663ffe94","models/reactive_esm":"1e7e12b23e","models/event-to-object":"a572dba9cd","models/html":"4c04683fdc","styles/models/html.css":"9b8139e439","styles/models/esm.css":"727a14f76b","models/audio":"fd59c985b3","models/browser":"5a16cc23e6","models/button":"1db93211cd","models/button_icon":"1738ddeb3a","models/icon":"6c7fbea0ef","models/card":"31556103c8","models/column":"b273e5b2fb","styles/models/card.css":"6342ac8e26","models/checkbox_button_group":"51fbe9e2d0","models/chatarea_input":"27a077673d","models/textarea_input":"b7d595d74a","models/comm_manager":"1bec1b1fcc","models/customselect":"92bbd30bd1","models/multiselect":"27b5580835","models/tabulator":"e0501f9786","models/data":"be689f0377","styles/models/tabulator.css":"3d732ff91f","models/datetime_picker":"100965d6f3","models/datetime_slider":"c97cc0eade","models/deckgl":"d58ba73420","models/lumagl":"16d69e2b49","models/tooltips":"f8f8ea4284","models/discrete_player":"0dca2cd4f6","models/player":"96e805ccb5","models/echarts":"ec1ecef6a0","models/feed":"44a7ecdf96","models/file_download":"84a13dddfb","models/file_dropper":"8531319d94","styles/models/filedropper.css":"c03dd3c931","models/ipywidget":"8a8089cbf3","models/json":"245cd3cfde","models/jsoneditor":"33e664043e","styles/models/jsoneditor.css":"317a12d360","models/katex":"f672d71a9f","models/location":"9012b81346","models/mathjax":"d889a68424","models/modal":"9a342a6757","styles/models/modal.css":"be4b4352c6","models/pdf":"f87ad1873c","models/perspective":"29a0b0da9a","styles/models/perspective.css":"2e2913ea54","models/plotly":"59dbae0a77","styles/models/plotly.css":"3d56c75186","models/progress":"54e5f3767b","models/quill":"a8f2a01dfe","models/radio_button_group":"25e2d7c208","models/react_component":"b2c617bbc6","models/reactive_html":"d5752cda5a","models/singleselect":"4155401209","models/speech_to_text":"5ac2cab0ab","models/state":"92822cb73a","models/tabs":"fffb4344f7","models/terminal":"a961b5ae5e","models/text_input":"8be416b160","models/text_to_speech":"a04eb51988","models/time_picker":"1afcab4e45","models/toggle_icon":"ad985f285e","models/tooltip_icon":"ae3a172647","models/trend":"29d55a28a9","models/vega":"22dbf7c070","models/video":"79dc37b888","styles/models/video.css":"dfe21e6f1b","models/videostream":"f8afc4e661","models/vizzu":"1f7bc1f95b","models/vtk/index":"c51f25e2a7","models/vtk/vtkjs":"ac55912dc1","models/vtk/vtklayout":"b06d05fa3e","models/vtk/util":"df9946ff52","models/vtk/vtkcolorbar":"b1d68776a9","models/vtk/vtkaxes":"0379dcf1cd","models/vtk/vtkvolume":"18592eecef","models/vtk/vtksynchronized":"a4e5946204","models/vtk/panel_fullscreen_renwin_sync":"5e89c7b3eb"}, {});});
41377
41558
  //# sourceMappingURL=panel.js.map