flexdesk 0.17.12 → 0.17.14
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 +44 -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 +61 -0
- package/css/flexdesk.css +85 -2
- package/css/overrides.css +24 -2
- package/css/reset.css +0 -0
- package/dist/canvas.js +0 -0
- package/dist/canvas.js.map +0 -0
- package/dist/charts.js +3 -3
- package/dist/{chunk-NIJEJAZ7.js → chunk-2PM6ZMNS.js} +2 -2
- package/dist/chunk-3PHCPZHT.js +0 -0
- package/dist/chunk-3PHCPZHT.js.map +0 -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-F35XSQWA.js → chunk-IG74S3ZH.js} +2 -2
- 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-CVMCZZX2.js → chunk-MADMGRX2.js} +18 -7
- package/dist/chunk-MADMGRX2.js.map +7 -0
- package/dist/chunk-N7HC3ADV.js +0 -0
- package/dist/chunk-N7HC3ADV.js.map +0 -0
- package/dist/{chunk-75FLVAUT.js → chunk-TLIV6QSU.js} +3 -3
- package/dist/{chunk-BE2PU3LL.js → chunk-ZMH3OC7H.js} +2 -2
- package/dist/core.js +3 -18
- package/dist/core.js.map +2 -2
- package/dist/editor.js.map +0 -0
- package/dist/flexdesk.css +85 -2
- package/dist/flow.js +3 -3
- 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 +5 -5
- package/dist/widgets.js +31 -22
- package/dist/widgets.js.map +2 -2
- package/dist/wm.js +198 -31
- package/dist/wm.js.map +3 -3
- package/docs/README.md +1 -1
- package/docs/best-practices.md +1 -1
- 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 +66 -3
- package/docs/components/layout-widgets.md +32 -0
- package/docs/components/markdown-and-outline.md +0 -0
- package/docs/components/menus.md +63 -0
- package/docs/components/notifications.md +0 -0
- package/docs/components/panels-and-desktops.md +56 -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/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 +65 -2
- package/docs/concepts/styling.md +24 -6
- package/docs/quickstart.md +0 -0
- package/editor.js +0 -0
- package/flow.js +0 -0
- package/host.js +0 -0
- package/package.json +2 -2
- 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/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/plotly_wrapper.js +0 -0
- 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 +19 -18
- 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_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_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 +79 -16
- package/src/tiling/entity_sources.js +0 -0
- package/src/tiling/keymap.js +70 -2
- 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 +9 -2
- 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 +63 -5
- package/src/tiling/wm.js +59 -6
- 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/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/conversation_view.js +0 -0
- package/src/ui/components/crosstab.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 +24 -6
- 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 +41 -18
- 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-CVMCZZX2.js.map +0 -7
- /package/dist/{chunk-NIJEJAZ7.js.map → chunk-2PM6ZMNS.js.map} +0 -0
- /package/dist/{chunk-F35XSQWA.js.map → chunk-IG74S3ZH.js.map} +0 -0
- /package/dist/{chunk-75FLVAUT.js.map → chunk-TLIV6QSU.js.map} +0 -0
- /package/dist/{chunk-BE2PU3LL.js.map → chunk-ZMH3OC7H.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.17.14 (2026-10-26)
|
|
4
|
+
|
|
5
|
+
A patch release. Everything below is additive except one changed default (see
|
|
6
|
+
"Changed default"). Each entry with a docs section links to it.
|
|
7
|
+
|
|
8
|
+
### Added and changed
|
|
9
|
+
|
|
10
|
+
- [Tree items with row actions](docs/components/layout-widgets.md#tree-items-with-row-actions-01714): `createTreeItem` takes `actions` in the shape `createTreeNode` takes them (`{ id: { icon, title, onClick(id, event) } }`). The buttons (`.twm-tree-node__action-btn`) sit in one line in a `.twm-tree-item__actions` slot at the row's end, shown on hover, on focus within and on the selected item; the slot takes no height, so a row is as tall with actions as without; it is hidden by opacity, so Tab still reaches the buttons; a click on an action does not select the item and a double-click does not reach `onItemDoubleClick`. Without `actions` the markup is unchanged. `createTreeNode`'s action buttons, built by the same code, are now `type="button"`, so inside a form they no longer submit it (STORY-0121).
|
|
11
|
+
- [The digit chords follow the key's position](docs/components/keymap.md#the-digit-chords-follow-the-keys-position-not-its-character-01714): Alt+1..9 and Alt+Shift+1..9 match `event.code` (`Digit1`..`Digit9`), so Alt+Shift+N moves the focused tile to desktop N from a real key press on any layout (BUG-0046).
|
|
12
|
+
- [Spinners turn without keyframes of your own](docs/concepts/styling.md#spinners-turn-without-keyframes-of-your-own-01714): flexdesk.css defines the `@keyframes` its tile-loading, data-table, computing-status and run-progress spinners name (BUG-0047).
|
|
13
|
+
- [A saved layout that cannot be read](docs/components/panels-and-desktops.md#a-saved-layout-that-cannot-be-read-01714): a saved `desktops` layout that is JSON but not a layout is ignored with one warning, and the shell opens its default layout instead of throwing (BUG-0048).
|
|
14
|
+
- `flexdesk/css/tokens` resolves to `dist/tokens.css`, the file the docs name, like `flexdesk/css` and `flexdesk/css/reset` (BUG-0030).
|
|
15
|
+
- [The menu-bar row is a band of its own](docs/components/menus.md#the-menu-bar-in-its-own-row-under-the-top-bar-01713): `.twm-global-menu-bar` has background `var(--surface-0)`, darker than the top bar, and a `1px solid var(--border-strong)` border above and below (was `var(--surface-1)` with a `var(--surface-0)` bottom border), so it is set off from the top bar and the tiles. The row is 1px taller (STORY-0122).
|
|
16
|
+
|
|
17
|
+
### Changed default
|
|
18
|
+
|
|
19
|
+
- `DEFAULT_STATE_GUARD_CONFIG.allowedDatasetKeys` no longer lists thirteen keys that one embedding application had left in it and no FlexDesk widget writes: `scenario-id`, `run-id`, `run-state`, `mirror-input`, `mirror-input-bound`, `mirror-change-bound`, `override-type`, `info-for`, `dsl-state`, `dsl-section-registered`, `dsl-scrollbars-installed`, `dsl-tabs-bound` and `dsl-controls-bound`. An app that writes one of them under a guard built on the defaults lists it on top of them; a strict guard otherwise throws on the write (BUG-0029).
|
|
20
|
+
|
|
21
|
+
### Removed or renamed exports
|
|
22
|
+
|
|
23
|
+
None. Compared with 0.17.13, across every entry point (`core`, `widgets`, `wm`,
|
|
24
|
+
`host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
|
|
25
|
+
`exports` map, no export was added, removed or renamed, and no option was
|
|
26
|
+
removed or renamed; `createTreeItem` has one new option, `actions`. Not an
|
|
27
|
+
export but worth knowing: flexdesk.css has one new class,
|
|
28
|
+
`.twm-tree-item__actions`, and defines no new custom property.
|
|
29
|
+
|
|
30
|
+
## 0.17.13 (2026-10-26)
|
|
31
|
+
|
|
32
|
+
A patch release: everything below is additive. Every fix is documented in a
|
|
33
|
+
section of the docs headed "(0.17.13)"; each entry links to it.
|
|
34
|
+
|
|
35
|
+
### Added and changed
|
|
36
|
+
|
|
37
|
+
- [The menu bar in its own row under the top bar](docs/components/menus.md#the-menu-bar-in-its-own-row-under-the-top-bar-01713): a shell's menu bar can sit on a second line, as a full-width strip directly under the top bar. Put `chrome.menuBar` in a `.twm-global-menu-bar` that is a child of `body.twm-body`, between `.twm-global-top-bar` and the host. The row is a fixed-size item in the body's flex column (`flex: 0 0 auto`), so the host is shorter by the row's height and nothing is drawn under it. It is styled with FlexDesk tokens (`padding: var(--space-xxs) var(--space-xs)`, background `var(--surface-1)`, text `var(--text-body)`, a bottom border `var(--surface-0)` like the top bar's), and the `.twm-menubar` inside it keeps its own styles. It is a sibling of the top bar, not part of it: a window-drag region bound to the top bar (`WindowChromeController`'s `topBar`) does not include it, so a press on the row never drags the window, and it sets no `z-index`, so the top bar's dropdowns are drawn over it. A `ManagedWindow` on `document.body` (no `container`) is clamped, centred and maximised below the top bar and the row. A modal's backdrop starts below the top bar, so the row, like the top bar, stays usable while a modal is open. A shell without the row looks exactly as before; the row works only inside `body.twm-body` (STORY-0119).
|
|
38
|
+
|
|
39
|
+
### Removed or renamed exports
|
|
40
|
+
|
|
41
|
+
None. Compared with 0.17.12, across every entry point (`core`, `widgets`, `wm`,
|
|
42
|
+
`host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
|
|
43
|
+
`exports` map, no export was added, removed or renamed, and no option was
|
|
44
|
+
removed or renamed. Not an export but worth knowing: flexdesk.css has one new
|
|
45
|
+
class, `.twm-global-menu-bar`, and defines no new custom property.
|
|
46
|
+
|
|
3
47
|
## 0.17.12 (2026-10-26)
|
|
4
48
|
|
|
5
49
|
A patch release: everything below is additive. Every fix is documented in a
|
package/LICENSE
CHANGED
|
File without changes
|
package/README.md
CHANGED
|
File without changes
|
package/THIRD_PARTY_LICENSES.md
CHANGED
|
File without changes
|
package/canvas.js
CHANGED
|
File without changes
|
package/charts.js
CHANGED
|
File without changes
|
package/core.js
CHANGED
|
File without changes
|
package/css/base.css
CHANGED
|
@@ -1275,6 +1275,28 @@ body.twm-dt-col-resizing {
|
|
|
1275
1275
|
.twm-global-top-bar, .twm-global-top-bar .twm-bar-left, .twm-global-top-bar .twm-bar-center, .twm-global-top-bar .twm-bar-right {
|
|
1276
1276
|
min-width: 0; /* allow flex children to shrink */
|
|
1277
1277
|
}
|
|
1278
|
+
/* Global menu row (STORY-0119, 0.17.13): a shell's `chrome.menuBar` in a
|
|
1279
|
+
* full-width strip of its own, directly under .twm-global-top-bar in
|
|
1280
|
+
* body.twm-body's column (host.css), so the host below shrinks by its height.
|
|
1281
|
+
* It is a sibling of the top bar, not inside it: a window-drag region bound
|
|
1282
|
+
* to the top bar does not include it. No z-index, so it is no stacking
|
|
1283
|
+
* context: the top bar's dropdowns draw over it, and the .twm-menubar inside
|
|
1284
|
+
* keeps its own styles, its menus (position: fixed, --z-over-windows) drawing
|
|
1285
|
+
* over the page. It reads as a band of its own (STORY-0122, 0.17.14): darker
|
|
1286
|
+
* than the top bar, with a border above and below. Its height is the bar's
|
|
1287
|
+
* plus the padding and the two borders. */
|
|
1288
|
+
.twm-global-menu-bar {
|
|
1289
|
+
display: flex;
|
|
1290
|
+
align-items: center;
|
|
1291
|
+
width: 100%;
|
|
1292
|
+
box-sizing: border-box;
|
|
1293
|
+
padding: var(--space-xxs) var(--space-xs);
|
|
1294
|
+
background-color: var(--surface-0);
|
|
1295
|
+
color: var(--text-body);
|
|
1296
|
+
border-top: 1px solid var(--border-strong);
|
|
1297
|
+
border-bottom: 1px solid var(--border-strong);
|
|
1298
|
+
overflow: visible; /* the bar's menus extend below */
|
|
1299
|
+
}
|
|
1278
1300
|
.twm-bar-center {
|
|
1279
1301
|
white-space: nowrap;
|
|
1280
1302
|
overflow: hidden;
|
|
@@ -2417,6 +2439,28 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2417
2439
|
color: var(--text-dim);
|
|
2418
2440
|
margin-left: var(--space-xs);
|
|
2419
2441
|
}
|
|
2442
|
+
/* Row actions (createTreeItem's `actions`, STORY-0121): one line at the row's
|
|
2443
|
+
* end, after label, subtitle and badge, shown on hover, on focus within and on
|
|
2444
|
+
* the selected item. Hidden by opacity, not display, so the buttons stay in
|
|
2445
|
+
* the tab order (Tab reaches them and :focus-within shows them) and the label
|
|
2446
|
+
* keeps its width on hover. The slot is no taller than the label line, so a
|
|
2447
|
+
* row is as high with actions as without. */
|
|
2448
|
+
.twm-tree-item__actions {
|
|
2449
|
+
display: flex;
|
|
2450
|
+
align-items: center;
|
|
2451
|
+
gap: var(--space-xxs);
|
|
2452
|
+
flex-shrink: 0;
|
|
2453
|
+
height: 0;
|
|
2454
|
+
overflow: visible;
|
|
2455
|
+
opacity: 0;
|
|
2456
|
+
pointer-events: none;
|
|
2457
|
+
}
|
|
2458
|
+
.twm-tree-item:hover > .twm-tree-item__actions,
|
|
2459
|
+
.twm-tree-item:focus-within > .twm-tree-item__actions,
|
|
2460
|
+
.twm-tree-item.selected > .twm-tree-item__actions {
|
|
2461
|
+
opacity: 1;
|
|
2462
|
+
pointer-events: auto;
|
|
2463
|
+
}
|
|
2420
2464
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
2421
2465
|
Plot Popout Window
|
|
2422
2466
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
@@ -2794,6 +2838,18 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2794
2838
|
border-radius: 50%;
|
|
2795
2839
|
animation: computing-spin 0.8s linear infinite;
|
|
2796
2840
|
}
|
|
2841
|
+
/* The keyframes the rule above names. A spinner rule shipped with the animation
|
|
2842
|
+
name and without the `@keyframes` block, which CSS does not report: an
|
|
2843
|
+
undefined name is simply no animation, so the ring was drawn and never
|
|
2844
|
+
turned, and nothing threw, logged or failed a build. `@keyframes` names are
|
|
2845
|
+
global, so this one is not scoped (see `spin`): an embedder that defines
|
|
2846
|
+
its own `computing-spin` wins or loses on source order, and either way the
|
|
2847
|
+
ring turns. A full turn at the rule's own duration, linear and infinite, so
|
|
2848
|
+
the loop has no seam: the arc is back where it started. */
|
|
2849
|
+
@keyframes computing-spin {
|
|
2850
|
+
from { transform: rotate(0deg); }
|
|
2851
|
+
to { transform: rotate(360deg); }
|
|
2852
|
+
}
|
|
2797
2853
|
.twm-computing-status__message {
|
|
2798
2854
|
font-size: var(--font-size-md);
|
|
2799
2855
|
color: #b0b0b0;
|
|
@@ -2839,6 +2895,11 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2839
2895
|
flex-shrink: 0;
|
|
2840
2896
|
animation: etl-spin 0.8s linear infinite;
|
|
2841
2897
|
}
|
|
2898
|
+
/* The keyframes the rule above names; see `computing-spin`. */
|
|
2899
|
+
@keyframes etl-spin {
|
|
2900
|
+
from { transform: rotate(0deg); }
|
|
2901
|
+
to { transform: rotate(360deg); }
|
|
2902
|
+
}
|
|
2842
2903
|
.twm-run-progress__message {
|
|
2843
2904
|
font-size: var(--font-size-md);
|
|
2844
2905
|
color: var(--text-primary, #ccc);
|
package/css/flexdesk.css
CHANGED
|
@@ -1695,6 +1695,28 @@ body.twm-dt-col-resizing {
|
|
|
1695
1695
|
.twm-global-top-bar, .twm-global-top-bar .twm-bar-left, .twm-global-top-bar .twm-bar-center, .twm-global-top-bar .twm-bar-right {
|
|
1696
1696
|
min-width: 0; /* allow flex children to shrink */
|
|
1697
1697
|
}
|
|
1698
|
+
/* Global menu row (STORY-0119, 0.17.13): a shell's `chrome.menuBar` in a
|
|
1699
|
+
* full-width strip of its own, directly under .twm-global-top-bar in
|
|
1700
|
+
* body.twm-body's column (host.css), so the host below shrinks by its height.
|
|
1701
|
+
* It is a sibling of the top bar, not inside it: a window-drag region bound
|
|
1702
|
+
* to the top bar does not include it. No z-index, so it is no stacking
|
|
1703
|
+
* context: the top bar's dropdowns draw over it, and the .twm-menubar inside
|
|
1704
|
+
* keeps its own styles, its menus (position: fixed, --z-over-windows) drawing
|
|
1705
|
+
* over the page. It reads as a band of its own (STORY-0122, 0.17.14): darker
|
|
1706
|
+
* than the top bar, with a border above and below. Its height is the bar's
|
|
1707
|
+
* plus the padding and the two borders. */
|
|
1708
|
+
.twm-global-menu-bar {
|
|
1709
|
+
display: flex;
|
|
1710
|
+
align-items: center;
|
|
1711
|
+
width: 100%;
|
|
1712
|
+
box-sizing: border-box;
|
|
1713
|
+
padding: var(--space-xxs) var(--space-xs);
|
|
1714
|
+
background-color: var(--surface-0);
|
|
1715
|
+
color: var(--text-body);
|
|
1716
|
+
border-top: 1px solid var(--border-strong);
|
|
1717
|
+
border-bottom: 1px solid var(--border-strong);
|
|
1718
|
+
overflow: visible; /* the bar's menus extend below */
|
|
1719
|
+
}
|
|
1698
1720
|
.twm-bar-center {
|
|
1699
1721
|
white-space: nowrap;
|
|
1700
1722
|
overflow: hidden;
|
|
@@ -2942,6 +2964,28 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
2942
2964
|
color: var(--text-dim);
|
|
2943
2965
|
margin-left: var(--space-xs);
|
|
2944
2966
|
}
|
|
2967
|
+
/* Row actions (createTreeItem's `actions`, STORY-0121): one line at the row's
|
|
2968
|
+
* end, after label, subtitle and badge, shown on hover, on focus within and on
|
|
2969
|
+
* the selected item. Hidden by opacity, not display, so the buttons stay in
|
|
2970
|
+
* the tab order (Tab reaches them and :focus-within shows them) and the label
|
|
2971
|
+
* keeps its width on hover. The slot is no taller than the label line, so a
|
|
2972
|
+
* row is as high with actions as without. */
|
|
2973
|
+
.twm-tree-item__actions {
|
|
2974
|
+
display: flex;
|
|
2975
|
+
align-items: center;
|
|
2976
|
+
gap: var(--space-xxs);
|
|
2977
|
+
flex-shrink: 0;
|
|
2978
|
+
height: 0;
|
|
2979
|
+
overflow: visible;
|
|
2980
|
+
opacity: 0;
|
|
2981
|
+
pointer-events: none;
|
|
2982
|
+
}
|
|
2983
|
+
.twm-tree-item:hover > .twm-tree-item__actions,
|
|
2984
|
+
.twm-tree-item:focus-within > .twm-tree-item__actions,
|
|
2985
|
+
.twm-tree-item.selected > .twm-tree-item__actions {
|
|
2986
|
+
opacity: 1;
|
|
2987
|
+
pointer-events: auto;
|
|
2988
|
+
}
|
|
2945
2989
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
2946
2990
|
Plot Popout Window
|
|
2947
2991
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
@@ -3319,6 +3363,18 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3319
3363
|
border-radius: 50%;
|
|
3320
3364
|
animation: computing-spin 0.8s linear infinite;
|
|
3321
3365
|
}
|
|
3366
|
+
/* The keyframes the rule above names. A spinner rule shipped with the animation
|
|
3367
|
+
name and without the `@keyframes` block, which CSS does not report: an
|
|
3368
|
+
undefined name is simply no animation, so the ring was drawn and never
|
|
3369
|
+
turned, and nothing threw, logged or failed a build. `@keyframes` names are
|
|
3370
|
+
global, so this one is not scoped (see `spin`): an embedder that defines
|
|
3371
|
+
its own `computing-spin` wins or loses on source order, and either way the
|
|
3372
|
+
ring turns. A full turn at the rule's own duration, linear and infinite, so
|
|
3373
|
+
the loop has no seam: the arc is back where it started. */
|
|
3374
|
+
@keyframes computing-spin {
|
|
3375
|
+
from { transform: rotate(0deg); }
|
|
3376
|
+
to { transform: rotate(360deg); }
|
|
3377
|
+
}
|
|
3322
3378
|
.twm-computing-status__message {
|
|
3323
3379
|
font-size: var(--font-size-md);
|
|
3324
3380
|
color: #b0b0b0;
|
|
@@ -3364,6 +3420,11 @@ body.twm-window-maximized .twm-resize-handle {
|
|
|
3364
3420
|
flex-shrink: 0;
|
|
3365
3421
|
animation: etl-spin 0.8s linear infinite;
|
|
3366
3422
|
}
|
|
3423
|
+
/* The keyframes the rule above names; see `computing-spin`. */
|
|
3424
|
+
@keyframes etl-spin {
|
|
3425
|
+
from { transform: rotate(0deg); }
|
|
3426
|
+
to { transform: rotate(360deg); }
|
|
3427
|
+
}
|
|
3367
3428
|
.twm-run-progress__message {
|
|
3368
3429
|
font-size: var(--font-size-md);
|
|
3369
3430
|
color: var(--text-primary, #ccc);
|
|
@@ -8528,8 +8589,9 @@ body.twm-dragging * { user-select: none; }
|
|
|
8528
8589
|
* the WM host fills the remaining space.
|
|
8529
8590
|
*/
|
|
8530
8591
|
|
|
8531
|
-
/* Body is a flex column: top bar,
|
|
8532
|
-
* override the legacy `position: fixed` on both
|
|
8592
|
+
/* Body is a flex column: top bar, menu row (when there is one), WM host
|
|
8593
|
+
* (fill), bottom bar. We override the legacy `position: fixed` on both
|
|
8594
|
+
* bars so they become
|
|
8533
8595
|
* deterministic flex items and the host's height is exactly the
|
|
8534
8596
|
* leftover space — no math, no overlap, no off-by-N pixels. Their
|
|
8535
8597
|
* `z-index` stays put for dropdown stacking. */
|
|
@@ -8547,6 +8609,12 @@ body.twm-body > .twm-global-bottom-bar {
|
|
|
8547
8609
|
inset: auto !important;
|
|
8548
8610
|
flex: 0 0 auto;
|
|
8549
8611
|
}
|
|
8612
|
+
/* The menu row (STORY-0119) sits between the top bar and the host, in
|
|
8613
|
+
* normal flow: a fixed-size strip, so the host's leftover space is less by
|
|
8614
|
+
* exactly its height. */
|
|
8615
|
+
body.twm-body > .twm-global-menu-bar {
|
|
8616
|
+
flex: 0 0 auto;
|
|
8617
|
+
}
|
|
8550
8618
|
body.twm-body > .twm-host {
|
|
8551
8619
|
flex: 1 1 auto;
|
|
8552
8620
|
min-height: 0;
|
|
@@ -8842,6 +8910,16 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
8842
8910
|
border-radius: 50%;
|
|
8843
8911
|
animation: data-table__spin 0.7s linear infinite;
|
|
8844
8912
|
}
|
|
8913
|
+
/* The keyframes the rule above names. Without them the name is no animation
|
|
8914
|
+
(CSS reports nothing for it), so the ring was drawn and stood still. A full
|
|
8915
|
+
turn at the rule's own 0.7s linear infinite. `@keyframes` names are global
|
|
8916
|
+
and cannot be scoped (see `spin`); a definition of the same name in an
|
|
8917
|
+
embedder's sheet wins or loses on source order, and either way the ring
|
|
8918
|
+
turns. */
|
|
8919
|
+
@keyframes data-table__spin {
|
|
8920
|
+
from { transform: rotate(0deg); }
|
|
8921
|
+
to { transform: rotate(360deg); }
|
|
8922
|
+
}
|
|
8845
8923
|
.twm-data-table-component--compact .twm-pagination-controls > span {
|
|
8846
8924
|
color: var(--ea-text-dim, #aaa) !important;
|
|
8847
8925
|
font-size: 9.5px !important;
|
|
@@ -9019,6 +9097,11 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
9019
9097
|
border-radius: 50%;
|
|
9020
9098
|
animation: twm-tile-loading-spin 0.7s linear infinite;
|
|
9021
9099
|
}
|
|
9100
|
+
/* The keyframes the rule above names; see `data-table__spin`. */
|
|
9101
|
+
@keyframes twm-tile-loading-spin {
|
|
9102
|
+
from { transform: rotate(0deg); }
|
|
9103
|
+
to { transform: rotate(360deg); }
|
|
9104
|
+
}
|
|
9022
9105
|
/* Merged home page — detail header row, then the project-setup body
|
|
9023
9106
|
* fills the rest of the tile. */
|
|
9024
9107
|
.twm-home-page {
|
package/css/overrides.css
CHANGED
|
@@ -1797,8 +1797,9 @@ body.twm-dragging * { user-select: none; }
|
|
|
1797
1797
|
* the WM host fills the remaining space.
|
|
1798
1798
|
*/
|
|
1799
1799
|
|
|
1800
|
-
/* Body is a flex column: top bar,
|
|
1801
|
-
* override the legacy `position: fixed` on both
|
|
1800
|
+
/* Body is a flex column: top bar, menu row (when there is one), WM host
|
|
1801
|
+
* (fill), bottom bar. We override the legacy `position: fixed` on both
|
|
1802
|
+
* bars so they become
|
|
1802
1803
|
* deterministic flex items and the host's height is exactly the
|
|
1803
1804
|
* leftover space — no math, no overlap, no off-by-N pixels. Their
|
|
1804
1805
|
* `z-index` stays put for dropdown stacking. */
|
|
@@ -1816,6 +1817,12 @@ body.twm-body > .twm-global-bottom-bar {
|
|
|
1816
1817
|
inset: auto !important;
|
|
1817
1818
|
flex: 0 0 auto;
|
|
1818
1819
|
}
|
|
1820
|
+
/* The menu row (STORY-0119) sits between the top bar and the host, in
|
|
1821
|
+
* normal flow: a fixed-size strip, so the host's leftover space is less by
|
|
1822
|
+
* exactly its height. */
|
|
1823
|
+
body.twm-body > .twm-global-menu-bar {
|
|
1824
|
+
flex: 0 0 auto;
|
|
1825
|
+
}
|
|
1819
1826
|
body.twm-body > .twm-host {
|
|
1820
1827
|
flex: 1 1 auto;
|
|
1821
1828
|
min-height: 0;
|
|
@@ -2111,6 +2118,16 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
2111
2118
|
border-radius: 50%;
|
|
2112
2119
|
animation: data-table__spin 0.7s linear infinite;
|
|
2113
2120
|
}
|
|
2121
|
+
/* The keyframes the rule above names. Without them the name is no animation
|
|
2122
|
+
(CSS reports nothing for it), so the ring was drawn and stood still. A full
|
|
2123
|
+
turn at the rule's own 0.7s linear infinite. `@keyframes` names are global
|
|
2124
|
+
and cannot be scoped (see `spin`); a definition of the same name in an
|
|
2125
|
+
embedder's sheet wins or loses on source order, and either way the ring
|
|
2126
|
+
turns. */
|
|
2127
|
+
@keyframes data-table__spin {
|
|
2128
|
+
from { transform: rotate(0deg); }
|
|
2129
|
+
to { transform: rotate(360deg); }
|
|
2130
|
+
}
|
|
2114
2131
|
.twm-data-table-component--compact .twm-pagination-controls > span {
|
|
2115
2132
|
color: var(--ea-text-dim, #aaa) !important;
|
|
2116
2133
|
font-size: 9.5px !important;
|
|
@@ -2288,6 +2305,11 @@ tr:hover .twm-row-action { opacity: 1; }
|
|
|
2288
2305
|
border-radius: 50%;
|
|
2289
2306
|
animation: twm-tile-loading-spin 0.7s linear infinite;
|
|
2290
2307
|
}
|
|
2308
|
+
/* The keyframes the rule above names; see `data-table__spin`. */
|
|
2309
|
+
@keyframes twm-tile-loading-spin {
|
|
2310
|
+
from { transform: rotate(0deg); }
|
|
2311
|
+
to { transform: rotate(360deg); }
|
|
2312
|
+
}
|
|
2291
2313
|
/* Merged home page — detail header row, then the project-setup body
|
|
2292
2314
|
* fills the rest of the tile. */
|
|
2293
2315
|
.twm-home-page {
|
package/css/reset.css
CHANGED
|
File without changes
|
package/dist/canvas.js
CHANGED
|
File without changes
|
package/dist/canvas.js.map
CHANGED
|
File without changes
|
package/dist/charts.js
CHANGED
|
@@ -55,17 +55,17 @@ import {
|
|
|
55
55
|
strideIndices,
|
|
56
56
|
uid,
|
|
57
57
|
updateChart
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-TLIV6QSU.js";
|
|
59
59
|
import {
|
|
60
60
|
AutocompleteField,
|
|
61
61
|
createRafResizeObserver
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-2PM6ZMNS.js";
|
|
63
63
|
import {
|
|
64
64
|
ColorField,
|
|
65
65
|
ManagedWindow,
|
|
66
66
|
ToggleField,
|
|
67
67
|
selectBox
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-MADMGRX2.js";
|
|
69
69
|
import "./chunk-HNU6MM2B.js";
|
|
70
70
|
import "./chunk-N7HC3ADV.js";
|
|
71
71
|
import "./chunk-WUFLGETN.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isRowActivation,
|
|
3
3
|
isRowControl
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MADMGRX2.js";
|
|
5
5
|
import {
|
|
6
6
|
focusMenuItem,
|
|
7
7
|
moveMenuFocus,
|
|
@@ -10745,4 +10745,4 @@ export {
|
|
|
10745
10745
|
resolvePaging,
|
|
10746
10746
|
DataTable
|
|
10747
10747
|
};
|
|
10748
|
-
//# sourceMappingURL=chunk-
|
|
10748
|
+
//# sourceMappingURL=chunk-2PM6ZMNS.js.map
|
package/dist/chunk-3PHCPZHT.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/chunk-FOOS3T5L.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/chunk-GOQLR5WR.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/chunk-HNU6MM2B.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
modalHost
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZMH3OC7H.js";
|
|
4
4
|
import {
|
|
5
5
|
focusMenuItem,
|
|
6
6
|
moveMenuFocus,
|
|
@@ -104,4 +104,4 @@ export {
|
|
|
104
104
|
showContextMenu,
|
|
105
105
|
hideContextMenu
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
107
|
+
//# sourceMappingURL=chunk-IG74S3ZH.js.map
|
package/dist/chunk-JKZLNKG6.js
CHANGED
|
File without changes
|
|
File without changes
|
package/dist/chunk-JYWURG5T.js
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -9,6 +9,10 @@ var BASE_Z_INDEX = 6e3;
|
|
|
9
9
|
var MAX_Z_INDEX = 6999;
|
|
10
10
|
var TOP_BAR_HEIGHT = 35;
|
|
11
11
|
var BOTTOM_BAR_HEIGHT = 22;
|
|
12
|
+
function _topInset() {
|
|
13
|
+
const row = typeof document !== "undefined" ? document.querySelector("body > .twm-global-menu-bar") : null;
|
|
14
|
+
return TOP_BAR_HEIGHT + (row ? row.getBoundingClientRect().height : 0);
|
|
15
|
+
}
|
|
12
16
|
var SNAP_EDGE = 12;
|
|
13
17
|
var DEFAULT_ICON = "web_asset";
|
|
14
18
|
var _zIndexCounter = 0;
|
|
@@ -631,6 +635,10 @@ var ManagedWindow = class {
|
|
|
631
635
|
* width = window.innerWidth
|
|
632
636
|
* height = window.innerHeight - TOP_BAR_HEIGHT - BOTTOM_BAR_HEIGHT
|
|
633
637
|
*
|
|
638
|
+
* (STORY-0119: TOP_BAR_HEIGHT here is `_topInset()`, which is
|
|
639
|
+
* TOP_BAR_HEIGHT on a page without a menu row and adds the row's height
|
|
640
|
+
* on a page with one.)
|
|
641
|
+
*
|
|
634
642
|
* so, substituting into the clamps below:
|
|
635
643
|
*
|
|
636
644
|
* maxWidth = width = window.innerWidth ✓
|
|
@@ -659,11 +667,12 @@ var ManagedWindow = class {
|
|
|
659
667
|
height: this.container.clientHeight
|
|
660
668
|
};
|
|
661
669
|
}
|
|
670
|
+
const top = _topInset();
|
|
662
671
|
return {
|
|
663
672
|
minX: 0,
|
|
664
|
-
minY:
|
|
673
|
+
minY: top,
|
|
665
674
|
width: window.innerWidth,
|
|
666
|
-
height: window.innerHeight -
|
|
675
|
+
height: window.innerHeight - top - BOTTOM_BAR_HEIGHT
|
|
667
676
|
};
|
|
668
677
|
}
|
|
669
678
|
_applyPosition() {
|
|
@@ -890,7 +899,8 @@ var ManagedWindow = class {
|
|
|
890
899
|
}
|
|
891
900
|
} else {
|
|
892
901
|
this.x = Math.max(0, (maxWidth - this.width) / 2);
|
|
893
|
-
|
|
902
|
+
const top = _topInset();
|
|
903
|
+
this.y = Math.max(top, top + (maxHeight - this.height) / 2);
|
|
894
904
|
}
|
|
895
905
|
}
|
|
896
906
|
_saveCurrentState() {
|
|
@@ -1139,7 +1149,8 @@ var ManagedWindow = class {
|
|
|
1139
1149
|
const dy = e.clientY - state.startY;
|
|
1140
1150
|
const dir = state.direction;
|
|
1141
1151
|
const maxWidth = window.innerWidth;
|
|
1142
|
-
const
|
|
1152
|
+
const top = _topInset();
|
|
1153
|
+
const maxHeight = window.innerHeight - top - BOTTOM_BAR_HEIGHT;
|
|
1143
1154
|
let newX = state.startWinX;
|
|
1144
1155
|
let newY = state.startWinY;
|
|
1145
1156
|
let newW = state.startWidth;
|
|
@@ -1154,12 +1165,12 @@ var ManagedWindow = class {
|
|
|
1154
1165
|
newW = state.startWidth - (newX - state.startWinX);
|
|
1155
1166
|
}
|
|
1156
1167
|
if (dir.includes("s")) {
|
|
1157
|
-
newH = Math.max(this.minHeight, Math.min(state.startHeight + dy, maxHeight - (newY -
|
|
1168
|
+
newH = Math.max(this.minHeight, Math.min(state.startHeight + dy, maxHeight - (newY - top)));
|
|
1158
1169
|
}
|
|
1159
1170
|
if (dir.includes("n")) {
|
|
1160
1171
|
const maxDy = state.startHeight - this.minHeight;
|
|
1161
1172
|
const actualDy = Math.min(dy, maxDy);
|
|
1162
|
-
newY = Math.max(
|
|
1173
|
+
newY = Math.max(top, state.startWinY + actualDy);
|
|
1163
1174
|
newH = state.startHeight - (newY - state.startWinY);
|
|
1164
1175
|
}
|
|
1165
1176
|
this.x = newX;
|
|
@@ -1899,4 +1910,4 @@ export {
|
|
|
1899
1910
|
endsTextSelection,
|
|
1900
1911
|
isRowActivation
|
|
1901
1912
|
};
|
|
1902
|
-
//# sourceMappingURL=chunk-
|
|
1913
|
+
//# sourceMappingURL=chunk-MADMGRX2.js.map
|