flexdesk 0.17.6 → 0.17.8
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.
- package/CHANGELOG.md +36 -0
- package/LICENSE +0 -0
- package/README.md +0 -0
- package/THIRD_PARTY_LICENSES.md +0 -0
- package/canvas.js +0 -0
- package/charts.js +0 -0
- package/core.js +0 -0
- package/css/base.css +68 -0
- package/css/flexdesk.css +77 -2
- package/css/overrides.css +0 -0
- package/css/reset.css +0 -0
- package/css/tokens.css +11 -0
- package/dist/canvas.js +0 -0
- package/dist/canvas.js.map +0 -0
- package/dist/charts.js +1 -1
- package/dist/charts.js.map +0 -0
- package/dist/chunk-3PHCPZHT.js +0 -0
- package/dist/chunk-3PHCPZHT.js.map +0 -0
- package/dist/chunk-CVMCZZX2.js +0 -0
- package/dist/chunk-CVMCZZX2.js.map +0 -0
- package/dist/chunk-D3COLZZ2.js +0 -0
- package/dist/chunk-D3COLZZ2.js.map +0 -0
- package/dist/{chunk-RMTRWWEO.js → chunk-EIYNF4BD.js} +66 -25
- package/dist/chunk-EIYNF4BD.js.map +7 -0
- package/dist/chunk-FOOS3T5L.js +0 -0
- package/dist/chunk-FOOS3T5L.js.map +0 -0
- package/dist/chunk-GOQLR5WR.js +0 -0
- package/dist/chunk-GOQLR5WR.js.map +0 -0
- package/dist/chunk-HNU6MM2B.js +0 -0
- package/dist/chunk-HNU6MM2B.js.map +0 -0
- package/dist/chunk-HYJYYEPK.js +0 -0
- package/dist/chunk-HYJYYEPK.js.map +0 -0
- package/dist/chunk-JKZLNKG6.js +0 -0
- package/dist/chunk-JKZLNKG6.js.map +0 -0
- package/dist/chunk-JYWURG5T.js +0 -0
- package/dist/chunk-JYWURG5T.js.map +0 -0
- package/dist/chunk-LWV23YVE.js +0 -0
- package/dist/chunk-LWV23YVE.js.map +0 -0
- package/dist/chunk-N7HC3ADV.js +0 -0
- package/dist/chunk-N7HC3ADV.js.map +0 -0
- package/dist/chunk-RKNFBX5K.js +0 -0
- package/dist/chunk-RKNFBX5K.js.map +0 -0
- package/dist/chunk-UURZ37SD.js +0 -0
- package/dist/chunk-UURZ37SD.js.map +0 -0
- package/dist/chunk-UWO43BZU.js +0 -0
- package/dist/chunk-UWO43BZU.js.map +0 -0
- package/dist/chunk-WVFGV5FT.js +0 -0
- package/dist/chunk-WVFGV5FT.js.map +0 -0
- package/dist/core.js +0 -0
- package/dist/core.js.map +0 -0
- package/dist/editor.js +0 -0
- package/dist/editor.js.map +0 -0
- package/dist/flexdesk.css +77 -2
- package/dist/flow.js +0 -0
- package/dist/flow.js.map +0 -0
- package/dist/host.js +0 -0
- package/dist/host.js.map +0 -0
- package/dist/reset.css +0 -0
- package/dist/tile_registry-6WZPTUZV.js +0 -0
- package/dist/tile_registry-6WZPTUZV.js.map +0 -0
- package/dist/tiles.js +1 -1
- package/dist/tiles.js.map +0 -0
- package/dist/tokens.css +11 -0
- package/dist/widgets.js +0 -0
- package/dist/widgets.js.map +0 -0
- package/dist/wm.js +0 -0
- package/dist/wm.js.map +0 -0
- package/docs/README.md +0 -0
- package/docs/best-practices.md +0 -0
- package/docs/components/charts.md +66 -0
- package/docs/components/command-palette.md +0 -0
- package/docs/components/conversation.md +0 -0
- package/docs/components/data-table-grid.md +0 -0
- package/docs/components/data-table.md +0 -0
- package/docs/components/editor.md +0 -0
- package/docs/components/flow-canvas-editor.md +0 -0
- package/docs/components/flow-editors.md +0 -0
- package/docs/components/flow-lane-editor.md +0 -0
- package/docs/components/flow-outline-editor.md +0 -0
- package/docs/components/forms-and-dialogs.md +0 -0
- package/docs/components/input-fields.md +0 -0
- package/docs/components/keymap.md +0 -0
- package/docs/components/layout-widgets.md +38 -0
- package/docs/components/markdown-and-outline.md +0 -0
- package/docs/components/menus.md +0 -0
- package/docs/components/notifications.md +0 -0
- package/docs/components/panels-and-desktops.md +0 -0
- package/docs/components/record-list-and-fact-table.md +0 -0
- package/docs/components/settings-view.md +0 -0
- package/docs/components/shell.md +0 -0
- package/docs/components/slide-out-panel.md +0 -0
- package/docs/components/tiles.md +0 -0
- package/docs/components/wizard.md +0 -0
- package/docs/concepts/building-and-packaging.md +0 -0
- package/docs/concepts/domain-neutrality.md +0 -0
- package/docs/concepts/host-port.md +0 -0
- package/docs/concepts/packages-and-entry-points.md +0 -0
- package/docs/concepts/peer-dependencies.md +0 -0
- package/docs/concepts/state-guard.md +0 -0
- package/docs/concepts/styling.md +0 -0
- package/docs/quickstart.md +0 -0
- package/editor.js +0 -0
- package/flow.js +0 -0
- package/host.js +0 -0
- package/package.json +1 -1
- package/src/canvas/canvas_adapter.js +0 -0
- package/src/canvas/edge_router.js +0 -0
- package/src/canvas/graph/connector_router.js +0 -0
- package/src/canvas/graph/history_service.js +0 -0
- package/src/canvas/graph/node_platform.js +0 -0
- package/src/canvas/index.js +0 -0
- package/src/canvas/layered_layout.js +0 -0
- package/src/charts/chart_types.js +0 -0
- package/src/charts/data_series_plot_window.js +0 -0
- package/src/charts/downsample.js +0 -0
- package/src/charts/plot_config.js +0 -0
- package/src/charts/plot_config_editor.js +0 -0
- package/src/charts/plot_grid.js +16 -4
- package/src/charts/plot_popout_window.js +2 -1
- package/src/charts/plotly_wrapper.js +0 -0
- package/src/charts/series_transforms.js +114 -20
- package/src/core/event_bus.js +0 -0
- package/src/core/logging.js +0 -0
- package/src/core/settings.js +0 -0
- package/src/core/state_guard.js +0 -0
- package/src/core/state_guard_config.js +0 -0
- package/src/core/state_machine.js +0 -0
- package/src/editor/editor_pane.js +0 -0
- package/src/editor/monaco_editor_factory.js +0 -0
- package/src/editor/monaco_loader.js +0 -0
- package/src/editor/notebook_search.js +0 -0
- package/src/editor/notebook_tab_bar.js +0 -0
- package/src/editor/notebook_undo_manager.js +0 -0
- package/src/editor/split_pane_container.js +0 -0
- package/src/flow/canvas_editor/connections.js +0 -0
- package/src/flow/canvas_editor/editor.js +0 -0
- package/src/flow/canvas_editor/index.js +0 -0
- package/src/flow/canvas_editor/layout.js +0 -0
- package/src/flow/canvas_editor/strings.js +0 -0
- package/src/flow/kit/always_before.js +0 -0
- package/src/flow/kit/catalogue.js +0 -0
- package/src/flow/kit/chip_input.js +0 -0
- package/src/flow/kit/dom.js +0 -0
- package/src/flow/kit/findings.js +0 -0
- package/src/flow/kit/history.js +0 -0
- package/src/flow/kit/index.js +0 -0
- package/src/flow/kit/keys.js +0 -0
- package/src/flow/kit/logic_graph.js +0 -0
- package/src/flow/kit/references.js +0 -0
- package/src/flow/kit/settings_panel.js +0 -0
- package/src/flow/kit/settings_schema.js +0 -0
- package/src/flow/kit/step_picker.js +0 -0
- package/src/flow/kit/strings.js +0 -0
- package/src/flow/kit/value_picker.js +0 -0
- package/src/flow/kit/widgets.js +0 -0
- package/src/flow/lanes/editor.js +0 -0
- package/src/flow/lanes/index.js +0 -0
- package/src/flow/lanes/layout.js +0 -0
- package/src/flow/lanes/pipeline.js +0 -0
- package/src/flow/lanes/preview.js +0 -0
- package/src/flow/lanes/strings.js +0 -0
- package/src/flow/outline/editor.js +0 -0
- package/src/flow/outline/index.js +0 -0
- package/src/flow/outline/mapping.js +0 -0
- package/src/flow/outline/menu.js +0 -0
- package/src/flow/outline/operations.js +0 -0
- package/src/flow/outline/recognise.js +0 -0
- package/src/flow/outline/strings.js +0 -0
- package/src/help/help_modal.js +0 -0
- package/src/help/help_registry.js +0 -0
- package/src/host/external_links.js +0 -0
- package/src/host/file_picker.js +0 -0
- package/src/host/host.js +0 -0
- package/src/host/photino_host.js +0 -0
- package/src/host/photino_host.md +0 -0
- package/src/host/pywebview_host.js +0 -0
- package/src/tiles/chart_tiles.js +0 -0
- package/src/tiles/config_schema.js +0 -0
- package/src/tiles/figure_tile.js +0 -0
- package/src/tiles/layout_persistence.js +0 -0
- package/src/tiles/list_tiles.js +0 -0
- package/src/tiles/scope_picker.js +0 -0
- package/src/tiles/tile_base.js +0 -0
- package/src/tiles/tile_config_form.js +0 -0
- package/src/tiles/tile_grid.js +0 -0
- package/src/tiles/tile_registry.js +0 -0
- package/src/tiling/bottom_panel_tabs.js +0 -0
- package/src/tiling/command_palette.js +0 -0
- package/src/tiling/content_registry.js +0 -0
- package/src/tiling/desktops.js +0 -0
- package/src/tiling/entity_sources.js +0 -0
- package/src/tiling/keymap.js +0 -0
- package/src/tiling/kind_taxonomy.js +0 -0
- package/src/tiling/landing_table.js +0 -0
- package/src/tiling/loading_overlay.js +0 -0
- package/src/tiling/nav_panel.js +0 -0
- package/src/tiling/page_factory.js +0 -0
- package/src/tiling/panel_availability.js +0 -0
- package/src/tiling/panel_keys.js +0 -0
- package/src/tiling/shell.js +0 -0
- package/src/tiling/tab_strip.js +0 -0
- package/src/tiling/tile_breadcrumb.js +0 -0
- package/src/tiling/tile_renderer.js +0 -0
- package/src/tiling/tile_tab_menu.js +0 -0
- package/src/tiling/tile_tree.js +0 -0
- package/src/tiling/wm.js +0 -0
- package/src/tiling/zoom.js +0 -0
- package/src/ui/base/component_base.js +0 -0
- package/src/ui/base/controller_base.js +0 -0
- package/src/ui/base/page_base.js +0 -0
- package/src/ui/components/about_dialog.js +0 -0
- package/src/ui/components/action_dropdown.js +0 -0
- package/src/ui/components/alert_log.js +0 -0
- package/src/ui/components/alerts_pane.js +0 -0
- package/src/ui/components/attribute_list_editor.js +0 -0
- package/src/ui/components/autocomplete_field.js +0 -0
- package/src/ui/components/cell_editor_host.js +0 -0
- package/src/ui/components/cell_editors.js +0 -0
- package/src/ui/components/cell_grid.js +0 -0
- package/src/ui/components/cell_paste.js +0 -0
- package/src/ui/components/cell_selection.js +0 -0
- package/src/ui/components/choice_controls.js +0 -0
- package/src/ui/components/color_field.js +0 -0
- package/src/ui/components/color_list_field.js +0 -0
- package/src/ui/components/column_fit.js +0 -0
- package/src/ui/components/column_groups.js +0 -0
- package/src/ui/components/column_order.js +0 -0
- package/src/ui/components/computing_status_window.js +0 -0
- package/src/ui/components/confirm_dialog.js +0 -0
- package/src/ui/components/context_menu.js +0 -0
- package/src/ui/components/conversation_view.js +0 -0
- package/src/ui/components/crosstab.js +0 -0
- package/src/ui/components/data_table.js +0 -0
- package/src/ui/components/detail_header.js +0 -0
- package/src/ui/components/document_outline.js +0 -0
- package/src/ui/components/drag_reorder.js +0 -0
- package/src/ui/components/fact_table.js +0 -0
- package/src/ui/components/fill_handle.js +0 -0
- package/src/ui/components/gallery_picker.js +0 -0
- package/src/ui/components/header_actions.js +0 -0
- package/src/ui/components/inline_renamer.js +0 -0
- package/src/ui/components/job_progress.js +0 -0
- package/src/ui/components/managed_window.js +0 -0
- package/src/ui/components/menu_bar.js +0 -0
- package/src/ui/components/modal.js +0 -0
- package/src/ui/components/notification_history.js +0 -0
- package/src/ui/components/progress.js +0 -0
- package/src/ui/components/record_list.js +0 -0
- package/src/ui/components/row_activation.js +0 -0
- package/src/ui/components/section_stack.js +0 -0
- package/src/ui/components/series.js +0 -0
- package/src/ui/components/settings_view.js +0 -0
- package/src/ui/components/slide_out_panel.js +0 -0
- package/src/ui/components/slider_field.js +0 -0
- package/src/ui/components/sortable_list.js +0 -0
- package/src/ui/components/staged_edits.js +0 -0
- package/src/ui/components/staged_history.js +0 -0
- package/src/ui/components/table_filter_chips.js +0 -0
- package/src/ui/components/table_state_store.js +0 -0
- package/src/ui/components/table_structure.js +0 -0
- package/src/ui/components/table_values.js +0 -0
- package/src/ui/components/tabs.js +0 -0
- package/src/ui/components/tag_input.js +0 -0
- package/src/ui/components/toast.js +0 -0
- package/src/ui/components/toggle_field.js +0 -0
- package/src/ui/components/tree_view.js +0 -0
- package/src/ui/components/tsv.js +0 -0
- package/src/ui/components/window_taskbar.js +0 -0
- package/src/ui/components/wizard.js +0 -0
- package/src/ui/controllers/window_chrome_controller.js +0 -0
- package/src/ui/notification_center.js +0 -0
- package/src/ui/utils/auto_scrollbars.js +0 -0
- package/src/ui/utils/markdown.js +0 -0
- package/src/ui/utils/native_context_menu.js +0 -0
- package/src/ui/utils/overlay_scrollbar.js +0 -0
- package/src/ui/utils/raf_resize_observer.js +0 -0
- package/src/ui/utils/scroll_lock.js +0 -0
- package/src/ui/utils/strip_scroll.js +0 -0
- package/src/ui/utils/tooltip_service.js +0 -0
- package/tiles.js +0 -0
- package/widgets.js +0 -0
- package/wm.js +0 -0
- package/dist/chunk-RMTRWWEO.js.map +0 -7
|
File without changes
|
package/dist/chunk-UURZ37SD.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/chunk-UWO43BZU.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/chunk-WVFGV5FT.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/core.js
CHANGED
|
File without changes
|
package/dist/core.js.map
CHANGED
|
File without changes
|
package/dist/editor.js
CHANGED
|
File without changes
|
package/dist/editor.js.map
CHANGED
|
File without changes
|
package/dist/flexdesk.css
CHANGED
|
@@ -9593,6 +9593,74 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
9593
9593
|
}
|
|
9594
9594
|
|
|
9595
9595
|
|
|
9596
|
+
/* ══ OVERLAY SCROLLBARS (0.17.7) ═════════════════════════════════════
|
|
9597
|
+
*
|
|
9598
|
+
* `installOverlayScrollbar(container, { orientation })`
|
|
9599
|
+
* (src/ui/utils/overlay_scrollbar.js) appends a `.overlay-scrollbar-v` or
|
|
9600
|
+
* `.overlay-scrollbar-h` holding a `.track` and a `.thumb`, and sets their
|
|
9601
|
+
* top/left/height/width from the container's scroll position. The bar is
|
|
9602
|
+
* absolute, so it takes no layout space: a static bar is content, its height
|
|
9603
|
+
* feeds the container's scrollHeight, and the container grows without limit
|
|
9604
|
+
* (BUG-0039). The script sets `data-scrollable` on the container and drives
|
|
9605
|
+
* the bar's opacity and pointer events itself (shown on hover or focus while
|
|
9606
|
+
* the container overflows, kept while the thumb is dragged); these rules are
|
|
9607
|
+
* the hidden starting state, the geometry and the colours. The bar takes no
|
|
9608
|
+
* pointer events, so content under it stays clickable; the thumb takes them
|
|
9609
|
+
* back to be dragged. */
|
|
9610
|
+
.overlay-scrollbar-v,
|
|
9611
|
+
.overlay-scrollbar-h {
|
|
9612
|
+
position: absolute;
|
|
9613
|
+
pointer-events: none;
|
|
9614
|
+
opacity: 0;
|
|
9615
|
+
transition: opacity var(--transition-fast);
|
|
9616
|
+
z-index: var(--z-scrollbar);
|
|
9617
|
+
}
|
|
9618
|
+
.overlay-scrollbar-v {
|
|
9619
|
+
top: 0;
|
|
9620
|
+
right: 0;
|
|
9621
|
+
width: var(--scrollbar-size);
|
|
9622
|
+
}
|
|
9623
|
+
.overlay-scrollbar-h {
|
|
9624
|
+
left: 0;
|
|
9625
|
+
bottom: 0;
|
|
9626
|
+
height: var(--scrollbar-size);
|
|
9627
|
+
}
|
|
9628
|
+
.overlay-scrollbar-v .track,
|
|
9629
|
+
.overlay-scrollbar-h .track {
|
|
9630
|
+
position: absolute;
|
|
9631
|
+
inset: 0;
|
|
9632
|
+
background: var(--scrollbar-track);
|
|
9633
|
+
border-radius: var(--scrollbar-radius);
|
|
9634
|
+
}
|
|
9635
|
+
.overlay-scrollbar-v .thumb,
|
|
9636
|
+
.overlay-scrollbar-h .thumb {
|
|
9637
|
+
position: absolute;
|
|
9638
|
+
background: var(--scrollbar-thumb);
|
|
9639
|
+
border-radius: var(--scrollbar-radius);
|
|
9640
|
+
pointer-events: auto;
|
|
9641
|
+
cursor: pointer;
|
|
9642
|
+
transition: background 80ms ease;
|
|
9643
|
+
}
|
|
9644
|
+
.overlay-scrollbar-v .thumb {
|
|
9645
|
+
right: 0;
|
|
9646
|
+
width: 100%;
|
|
9647
|
+
min-height: 30px;
|
|
9648
|
+
}
|
|
9649
|
+
.overlay-scrollbar-h .thumb {
|
|
9650
|
+
bottom: 0;
|
|
9651
|
+
height: 100%;
|
|
9652
|
+
min-width: 30px;
|
|
9653
|
+
}
|
|
9654
|
+
.overlay-scrollbar-v .thumb:hover,
|
|
9655
|
+
.overlay-scrollbar-h .thumb:hover {
|
|
9656
|
+
background: var(--scrollbar-thumb-hover);
|
|
9657
|
+
}
|
|
9658
|
+
.overlay-scrollbar-v .thumb:active,
|
|
9659
|
+
.overlay-scrollbar-h .thumb:active {
|
|
9660
|
+
background: var(--scrollbar-thumb-active);
|
|
9661
|
+
}
|
|
9662
|
+
|
|
9663
|
+
|
|
9596
9664
|
/* ══ RECORD LIST & FACT SHEET (0.7.0) ══════════════════════════════════
|
|
9597
9665
|
* `createRecordList` (src/ui/components/record_list.js) and
|
|
9598
9666
|
* `createFactTable` (src/ui/components/fact_table.js). Neither has a height
|
|
@@ -10740,8 +10808,8 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
10740
10808
|
/* ══ SERIES TRANSFORMS ═══════════════════════════════════════════════
|
|
10741
10809
|
*
|
|
10742
10810
|
* `renderSeriesTransformControls` (src/charts/series_transforms.js): per
|
|
10743
|
-
* injected transform, a group with a toggle per output and a number field
|
|
10744
|
-
* parameter, in a subplot's config. */
|
|
10811
|
+
* injected transform, a group with a toggle per output and a number field (or,
|
|
10812
|
+
* for a choice parameter, a select) per parameter, in a subplot's config. */
|
|
10745
10813
|
.twm-series-transforms {
|
|
10746
10814
|
display: flex;
|
|
10747
10815
|
flex-direction: column;
|
|
@@ -10781,6 +10849,13 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
|
|
|
10781
10849
|
.twm-series-transforms__param:disabled {
|
|
10782
10850
|
opacity: 0.5;
|
|
10783
10851
|
}
|
|
10852
|
+
/* A choice parameter's select (0.17.8): as wide as its option labels. */
|
|
10853
|
+
.twm-series-transforms__select {
|
|
10854
|
+
width: auto;
|
|
10855
|
+
min-width: 96px;
|
|
10856
|
+
max-width: 60%;
|
|
10857
|
+
cursor: pointer;
|
|
10858
|
+
}
|
|
10784
10859
|
/* ══ end SERIES TRANSFORMS ══ */
|
|
10785
10860
|
|
|
10786
10861
|
/* ══ PLOT GRID ════════════════════════════════════════════════════════
|
package/dist/flow.js
CHANGED
|
File without changes
|
package/dist/flow.js.map
CHANGED
|
File without changes
|
package/dist/host.js
CHANGED
|
File without changes
|
package/dist/host.js.map
CHANGED
|
File without changes
|
package/dist/reset.css
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/tiles.js
CHANGED
package/dist/tiles.js.map
CHANGED
|
File without changes
|
package/dist/tokens.css
CHANGED
|
@@ -102,6 +102,14 @@
|
|
|
102
102
|
--state-active: rgba(255, 255, 255, 0.08);
|
|
103
103
|
--state-selected: rgba(0, 122, 204, 0.15);
|
|
104
104
|
|
|
105
|
+
/* ── Overlay scrollbars (installOverlayScrollbar) ─────────── */
|
|
106
|
+
--scrollbar-size: 6px;
|
|
107
|
+
--scrollbar-radius: 3px;
|
|
108
|
+
--scrollbar-track: rgba(255, 255, 255, 0.08);
|
|
109
|
+
--scrollbar-thumb: rgba(255, 255, 255, 0.28);
|
|
110
|
+
--scrollbar-thumb-hover: rgba(255, 255, 255, 0.38);
|
|
111
|
+
--scrollbar-thumb-active: rgba(255, 255, 255, 0.48);
|
|
112
|
+
|
|
105
113
|
/* ── Shadows / elevation ──────────────────────────────────── */
|
|
106
114
|
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
|
|
107
115
|
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
|
|
@@ -119,6 +127,9 @@
|
|
|
119
127
|
stack from 6000 to 6999 (managed_window.js), so a popover at
|
|
120
128
|
--z-popover would open behind the window that opened it. */
|
|
121
129
|
--z-over-windows: 7100;
|
|
130
|
+
/* An overlay scrollbar inside a scroll container: over the container's
|
|
131
|
+
content and its dropdowns, under managed windows (6000+). */
|
|
132
|
+
--z-scrollbar: 500;
|
|
122
133
|
|
|
123
134
|
/* ── Transitions ──────────────────────────────────────────── */
|
|
124
135
|
--transition-fast: 120ms ease;
|
package/dist/widgets.js
CHANGED
|
File without changes
|
package/dist/widgets.js.map
CHANGED
|
File without changes
|
package/dist/wm.js
CHANGED
|
File without changes
|
package/dist/wm.js.map
CHANGED
|
File without changes
|
package/docs/README.md
CHANGED
|
File without changes
|
package/docs/best-practices.md
CHANGED
|
File without changes
|
|
@@ -4,6 +4,72 @@
|
|
|
4
4
|
|
|
5
5
|
Plotly-backed charts: the wrapper, the chart types, subplot layouts, downsampling, the plot grid, the plot-config editor and the two plot windows. Plotly itself is not in the bundle; call `setPlotlySource()` with the path to your copy. The plot window's `streamEvents` option is described with the [other application-neutral options](../concepts/domain-neutrality.md#no-application-globals-the-gallery-picker-and-plot-window-events-0170).
|
|
6
6
|
|
|
7
|
+
## A series transform knows its series, and takes a choice parameter (0.17.8)
|
|
8
|
+
|
|
9
|
+
Two additions to [`seriesTransforms`](#derived-series-seriestransforms-0170).
|
|
10
|
+
A transform written for `run(y, params)` with number parameters works exactly
|
|
11
|
+
as before.
|
|
12
|
+
|
|
13
|
+
**The series it runs on.** `run` gets a third argument:
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
run(y, params, { series, subplot, results, resolveSeries })
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`series` is the subplot's series entry the trace was drawn from (the same
|
|
20
|
+
object, with its `variable` and whatever else you keep on it, such as a
|
|
21
|
+
`scenario`), `subplot` the subplot config, `results` the results the figure was
|
|
22
|
+
drawn from, and `resolveSeries` the `(series, results, subplot) => { y, x? }`
|
|
23
|
+
the figure was drawn with (yours, or `resolveSeriesData`). `y` is still the
|
|
24
|
+
drawn values, after the subplot's NaN handling and whatever your
|
|
25
|
+
`resolveSeries` did to them (a rebase, say). So a transform can draw the same
|
|
26
|
+
series from somewhere else, resolved the same way, instead of guessing which
|
|
27
|
+
series `y` is:
|
|
28
|
+
|
|
29
|
+
```js
|
|
30
|
+
delta: {
|
|
31
|
+
label: 'Scenario delta',
|
|
32
|
+
params: { baseline: { label: 'Compare with', type: 'choice',
|
|
33
|
+
options: () => scenarios.map((s) => ({ value: s.id, label: s.name })) } },
|
|
34
|
+
outputs: { difference: { label: 'Difference', suffix: ' (Δ)', lineStyle: 'dashed' } },
|
|
35
|
+
run: (y, { baseline }, { series, subplot, resolveSeries }) => {
|
|
36
|
+
const base = resolveSeries(series, resultsOf(baseline), subplot)?.y;
|
|
37
|
+
return base ? { difference: y.map((v, i) => v - base[i]) } : {};
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`renderPlotGrid`, and so `PlotPopoutWindow`, run transforms on the same
|
|
43
|
+
traces as in 0.17.7, with the same derived traces: every line or scatter trace
|
|
44
|
+
of the figure, overlays included, never a derived trace. A trace drawn from one
|
|
45
|
+
of the subplot's series gets that series as `context.series`; any other trace,
|
|
46
|
+
such as an overlay, gets `context.series` null (with `subplot`, `results` and
|
|
47
|
+
`resolveSeries` still given), so a transform that needs a series, such as a
|
|
48
|
+
scenario delta, skips it itself (`if (!series) return {};`).
|
|
49
|
+
`deriveSeriesTraces(traces, subplot, seriesTransforms,
|
|
50
|
+
{ onError, seriesOf, results, resolveSeries })` takes the same as options:
|
|
51
|
+
`seriesOf(trace)` names the series a trace was drawn from (null for none); it
|
|
52
|
+
only fills `context.series` and does not choose which traces are run on.
|
|
53
|
+
Without these options `series`, `results` and `resolveSeries` are null.
|
|
54
|
+
|
|
55
|
+
**A choice parameter.** A parameter declared `{ type: 'choice', options }` is
|
|
56
|
+
a select instead of a number field. `options` is an array of
|
|
57
|
+
`{ value, label }` (a bare value, a `disabled` option and a `{ group, options }`
|
|
58
|
+
entry work as in the other FlexDesk selects), or a function
|
|
59
|
+
`(subplot) => options`, called when the controls are drawn and also whenever
|
|
60
|
+
the parameter needs its default (nothing saved, no `default`), which is on
|
|
61
|
+
each redraw of the figure. It is drawn by
|
|
62
|
+
`renderSeriesTransformControls` with the same select the settings view and
|
|
63
|
+
the flow kit use (choice_controls' `selectBox`), so a value comes back as the
|
|
64
|
+
option's own value (a number stays a number) and a saved value the list no
|
|
65
|
+
longer offers stays chosen, shown as `<value> (not found)`. The pick is saved
|
|
66
|
+
under `subplot.transforms.<id>.params` and passed to `run` like a number
|
|
67
|
+
parameter. Without a `default` and with nothing saved, the parameter is its
|
|
68
|
+
first enabled option (`{ group, options }` entries flattened in order, as the
|
|
69
|
+
select draws them), in the select and in `run`.
|
|
70
|
+
|
|
71
|
+
`tests/series_transforms.test.mjs` §7 to §10 pin all of it.
|
|
72
|
+
|
|
7
73
|
## A data series with no saved plot config opens (0.17.5)
|
|
8
74
|
|
|
9
75
|
`openDataSeriesPlotWindow` (and `new DataSeriesPlotWindow`, the module's
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -36,6 +36,44 @@ at the right edge of a window that was not maximized, so those panes had no
|
|
|
36
36
|
scrollbar at all (BUG-0036). `tests/autoscroll_resize_handle_not_cover.test.mjs`
|
|
37
37
|
holds it.
|
|
38
38
|
|
|
39
|
+
## `installOverlayScrollbar` is styled by flexdesk.css (0.17.7)
|
|
40
|
+
|
|
41
|
+
`installOverlayScrollbar(container, { orientation })` (from
|
|
42
|
+
`@flexdesk/widgets`) gives one container its own bar: a
|
|
43
|
+
`.overlay-scrollbar-v` or `.overlay-scrollbar-h` element, holding a `.track`
|
|
44
|
+
and a `.thumb`, appended to the container (or to its parent with
|
|
45
|
+
`externalBar: true`, as `installTabsScrollbars` does). flexdesk.css styles
|
|
46
|
+
it, so it works with only FlexDesk's stylesheets loaded:
|
|
47
|
+
|
|
48
|
+
- **It takes no layout space.** The bar is `position: absolute` at the
|
|
49
|
+
container's right edge (vertical) or bottom edge (horizontal),
|
|
50
|
+
`--scrollbar-size` thick, on `--z-scrollbar` (over the container's content,
|
|
51
|
+
under managed windows). The script keeps it pinned to the visible edge as
|
|
52
|
+
the container scrolls.
|
|
53
|
+
- **It shows on hover while the container overflows.** The script sets
|
|
54
|
+
`data-scrollable="1"` or `"0"` on the container, and shows the bar on
|
|
55
|
+
`mouseenter` and `focusin` when it is `"1"`. It hides the bar on leave,
|
|
56
|
+
unless the thumb is being dragged. The bar starts at `opacity: 0`.
|
|
57
|
+
- **The thumb drags; the rest lets clicks through.** The bar takes no
|
|
58
|
+
pointer events, so content under it stays clickable. The thumb takes them
|
|
59
|
+
back (`pointer-events: auto`) and is at least 30px long.
|
|
60
|
+
- **Colours are tokens** in tokens.css: `--scrollbar-track`,
|
|
61
|
+
`--scrollbar-thumb`, `--scrollbar-thumb-hover`, `--scrollbar-thumb-active`,
|
|
62
|
+
and `--scrollbar-radius` for the rounding. Override them to restyle every
|
|
63
|
+
overlay bar.
|
|
64
|
+
|
|
65
|
+
The rules key on the orientation classes, so a bar created with another
|
|
66
|
+
`className` (`installWorkspaceScrollbars` uses `panel-scrollbar` and
|
|
67
|
+
`tabs-scrollbar`) is styled the same way. `installCollapsibleScrollbars`,
|
|
68
|
+
`installTabsScrollbars` and `installWorkspaceScrollbars` all build on
|
|
69
|
+
`installOverlayScrollbar`, so none of them needs embedder CSS either.
|
|
70
|
+
|
|
71
|
+
Until 0.17.7 no FlexDesk stylesheet had a rule for these classes. The bar
|
|
72
|
+
was `position: static`: it sat in the scroll container's flow, its height fed
|
|
73
|
+
the container's content height, and the container grew without limit unless
|
|
74
|
+
the embedder brought its own CSS (BUG-0039).
|
|
75
|
+
`tests/overlay_scrollbar_styles.test.mjs` holds it.
|
|
76
|
+
|
|
39
77
|
## A stack of collapsible sections: `createSectionStack` (0.17.0)
|
|
40
78
|
|
|
41
79
|
Inspector-style panel content: titled sections in a column, each opened and
|
|
File without changes
|
package/docs/components/menus.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/docs/components/shell.md
CHANGED
|
File without changes
|
|
File without changes
|
package/docs/components/tiles.md
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/docs/concepts/styling.md
CHANGED
|
File without changes
|
package/docs/quickstart.md
CHANGED
|
File without changes
|
package/editor.js
CHANGED
|
File without changes
|
package/flow.js
CHANGED
|
File without changes
|
package/host.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/canvas/index.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/charts/downsample.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/charts/plot_grid.js
CHANGED
|
@@ -84,6 +84,10 @@ function resolveSeriesData(series, results) {
|
|
|
84
84
|
* @param {Object} [options.overlays] - `{ [series.id]: { years, values } }`, drawn for
|
|
85
85
|
* every series with an `overlay` description.
|
|
86
86
|
* @param {Object} [options.seriesTransforms] - `{ [id]: transform }` (series_transforms.js).
|
|
87
|
+
* Each runs on every line/scatter trace (overlays included, derived traces
|
|
88
|
+
* not) as `run(y, params, { series, subplot, results, resolveSeries })`,
|
|
89
|
+
* `series` being the subplot's series entry the trace was drawn from, or
|
|
90
|
+
* null for an overlay.
|
|
87
91
|
* @param {Function} [options.onTransformError] - `({ transformId, traceName, error })`.
|
|
88
92
|
* @param {Function} [options.derivedTraces] - `(traces, subplot, { results, index })
|
|
89
93
|
* => trace[] | Promise<trace[]>`: extra traces appended to a subplot's figure.
|
|
@@ -197,6 +201,8 @@ function renderPlotGrid(container, plotConfig, results, options = {}) {
|
|
|
197
201
|
/** The subplot's own series (overlays and derived traces aside), and how many are hidden. */
|
|
198
202
|
let ownCount = 0;
|
|
199
203
|
let hiddenCount = 0;
|
|
204
|
+
/** Each trace drawn from one of the subplot's series, to that series (a transform's context.series). */
|
|
205
|
+
const seriesByTrace = new Map();
|
|
200
206
|
|
|
201
207
|
const useX = sp.xAxis && sp.xAxis.useTime === false && sp.xAxis.variable;
|
|
202
208
|
const xData = useX
|
|
@@ -237,7 +243,7 @@ function renderPlotGrid(container, plotConfig, results, options = {}) {
|
|
|
237
243
|
const y = Array.isArray(resolved.y)
|
|
238
244
|
? applyNanHandling(resolved.y, sp.nanHandling ?? 'gap', x)
|
|
239
245
|
: resolved.y;
|
|
240
|
-
|
|
246
|
+
const trace = buildTrace({
|
|
241
247
|
chartType: sp.chartType || 'line',
|
|
242
248
|
x,
|
|
243
249
|
y,
|
|
@@ -249,7 +255,9 @@ function renderPlotGrid(container, plotConfig, results, options = {}) {
|
|
|
249
255
|
yAxisId: yRef,
|
|
250
256
|
showMarkers: sp.showDataPoints ?? false,
|
|
251
257
|
stackGroup: s.stackGroup ?? null,
|
|
252
|
-
})
|
|
258
|
+
});
|
|
259
|
+
traces.push(trace);
|
|
260
|
+
seriesByTrace.set(trace, s);
|
|
253
261
|
|
|
254
262
|
const overlay = s.overlay ? opts.overlays?.[s.id] : null;
|
|
255
263
|
if (!overlay?.years?.length) continue;
|
|
@@ -280,8 +288,12 @@ function renderPlotGrid(container, plotConfig, results, options = {}) {
|
|
|
280
288
|
}
|
|
281
289
|
});
|
|
282
290
|
|
|
283
|
-
traces.push(...await deriveSeriesTraces(traces, sp, opts.seriesTransforms,
|
|
284
|
-
|
|
291
|
+
traces.push(...await deriveSeriesTraces(traces, sp, opts.seriesTransforms, {
|
|
292
|
+
onError: opts.onTransformError ?? undefined,
|
|
293
|
+
seriesOf: (trace) => seriesByTrace.get(trace) ?? null,
|
|
294
|
+
results: data,
|
|
295
|
+
resolveSeries: opts.resolveSeries,
|
|
296
|
+
}));
|
|
285
297
|
if (opts.derivedTraces) {
|
|
286
298
|
const extra = await opts.derivedTraces(traces, sp, { results: data, index });
|
|
287
299
|
if (Array.isArray(extra)) traces.push(...extra);
|
|
@@ -50,7 +50,8 @@ export class PlotPopoutWindow {
|
|
|
50
50
|
* renders the Config tab. What it returns is disposed (`dispose()`) when the
|
|
51
51
|
* window closes, so an editor drawn there (renderPlotConfigEditor) goes with it.
|
|
52
52
|
* @param {Object} [options.seriesTransforms] - `{ [id]: transform }` (series_transforms.js);
|
|
53
|
-
* absent => no derived series are drawn
|
|
53
|
+
* absent => no derived series are drawn. Each runs as
|
|
54
|
+
* `run(y, params, { series, subplot, results, resolveSeries })` (renderPlotGrid).
|
|
54
55
|
* @param {string} [options.refreshEvent='data:changed'] - Bus event after which the
|
|
55
56
|
* window re-reads `getResults()` and redraws.
|
|
56
57
|
* @param {{delta?: string|null, complete?: string|null}} [options.streamEvents] - Bus
|
|
File without changes
|