flexdesk 0.2.0 → 0.3.0

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 (56) hide show
  1. package/css/base.css +1484 -181
  2. package/css/flexdesk.css +1311 -18
  3. package/css/overrides.css +44 -0
  4. package/css/tokens.css +45 -0
  5. package/dist/charts.js +5 -3
  6. package/dist/charts.js.map +1 -1
  7. package/dist/{chunk-DVU44T77.js → chunk-ELXVW542.js} +196 -75
  8. package/dist/chunk-ELXVW542.js.map +7 -0
  9. package/dist/chunk-LH5TSOZW.js +1237 -0
  10. package/dist/chunk-LH5TSOZW.js.map +7 -0
  11. package/dist/{chunk-TLZUUFOE.js → chunk-O5OHMWBB.js} +10 -2
  12. package/dist/chunk-O5OHMWBB.js.map +7 -0
  13. package/dist/{chunk-CT4YXXLP.js → chunk-QIU5S2RU.js} +371 -73
  14. package/dist/chunk-QIU5S2RU.js.map +7 -0
  15. package/dist/chunk-QNQHQ24V.js +408 -0
  16. package/dist/chunk-QNQHQ24V.js.map +7 -0
  17. package/dist/{chunk-DRYCDMEG.js → chunk-XKDTIT4Q.js} +168 -12
  18. package/dist/chunk-XKDTIT4Q.js.map +7 -0
  19. package/dist/editor.js +3 -380
  20. package/dist/editor.js.map +3 -3
  21. package/dist/flexdesk.css +1311 -18
  22. package/dist/tiles.js +168 -41
  23. package/dist/tiles.js.map +2 -2
  24. package/dist/tokens.css +45 -0
  25. package/dist/widgets.js +44 -14
  26. package/dist/widgets.js.map +2 -2
  27. package/dist/wm.js +2983 -142
  28. package/dist/wm.js.map +4 -4
  29. package/package.json +3 -2
  30. package/src/charts/chart_types.js +167 -0
  31. package/src/charts/plotly_wrapper.js +178 -10
  32. package/src/editor/notebook_tab_bar.js +39 -3
  33. package/src/tiles/tile_base.js +143 -35
  34. package/src/tiles/tile_grid.js +52 -1
  35. package/src/tiling/command_palette.js +71 -18
  36. package/src/tiling/desktops.js +36 -12
  37. package/src/tiling/keymap.js +24 -4
  38. package/src/tiling/shell.js +135 -24
  39. package/src/tiling/tab_strip.js +184 -0
  40. package/src/tiling/tile_breadcrumb.js +34 -2
  41. package/src/tiling/tile_renderer.js +1386 -21
  42. package/src/tiling/tile_tab_menu.js +101 -0
  43. package/src/tiling/tile_tree.js +82 -0
  44. package/src/tiling/wm.js +2352 -74
  45. package/src/ui/components/action_dropdown.js +34 -3
  46. package/src/ui/components/autocomplete_field.js +65 -13
  47. package/src/ui/components/context_menu.js +79 -8
  48. package/src/ui/components/data_table.js +508 -84
  49. package/src/ui/components/managed_window.js +928 -36
  50. package/src/ui/components/modal.js +214 -8
  51. package/dist/chunk-CT4YXXLP.js.map +0 -7
  52. package/dist/chunk-DRYCDMEG.js.map +0 -7
  53. package/dist/chunk-DVU44T77.js.map +0 -7
  54. package/dist/chunk-TLZUUFOE.js.map +0 -7
  55. package/dist/chunk-UCJ2WD4D.js +0 -625
  56. package/dist/chunk-UCJ2WD4D.js.map +0 -7
package/dist/tokens.css CHANGED
@@ -134,4 +134,49 @@
134
134
  --panel-surface, --panel-header-bg, --primary-color-hover) removed
135
135
  in Phase 7 — all page CSS now references canonical tokens
136
136
  directly. */
137
+
138
+ /* ── `--ea-*` — density and chrome tokens `flexdesk.css` DEPENDS ON ──
139
+ These are not EcoAgent's private variables any more. `flexdesk.css`
140
+ was extracted from EcoAgent's stylesheets and 27 `--ea-*` names came
141
+ with it — 47 declarations across the framework's own components read
142
+ them. FIVE have no fallback:
143
+
144
+ --ea-pad-snug (21 uses) --ea-pad-loose (9 uses)
145
+ --ea-font-body (14 uses) --ea-pad-tight (2 uses)
146
+ --ea-input-pad (1 use)
147
+
148
+ In EcoAgent they resolve, because EcoAgent defines them in
149
+ `ecoagent_extra_modes.css`. In ANY OTHER consumer they resolve to
150
+ nothing, and `padding: 0 var(--ea-pad-loose)` with no fallback is not
151
+ a smaller padding — it is an invalid declaration that is dropped. The
152
+ symptom is a modal with misplaced titlebar icons, no body padding,
153
+ wrong proportions and scrollbars where the content would otherwise
154
+ have fitted.
155
+
156
+ Values are EcoAgent's own (`ecoagent_extra_modes.css:32-52`), so this
157
+ is additive and changes nothing for EcoAgent, which still defines its
158
+ copies later and wins. The colour tokens alias the canonical ones
159
+ above rather than repeating literals. */
160
+ --ea-pad-tight: 2px;
161
+ --ea-pad-snug: 6px;
162
+ --ea-pad-loose: 10px;
163
+ --ea-input-pad: 4px 8px;
164
+ --ea-row-h: 18px;
165
+ --ea-font-body: 11px;
166
+ --ea-font-small: 10px;
167
+ --ea-font-mono: 10.5px;
168
+ --ea-font-title: 11px;
169
+ --ea-mono: var(--font-family-mono);
170
+
171
+ --ea-bg-chrome: #1a1a1a;
172
+ --ea-bg-content: #212121;
173
+ --ea-bg-well: #0d0d0d;
174
+ --ea-bg-strip: var(--surface-2);
175
+ --ea-input-bg: var(--surface-3);
176
+ --ea-border: #333;
177
+ --ea-border-soft: #2a2a2a;
178
+ --ea-text: var(--text-body);
179
+ --ea-text-muted: var(--text-muted);
180
+ --ea-text-dim: var(--text-dim);
181
+ --ea-accent: var(--accent-bright);
137
182
  }
package/dist/widgets.js CHANGED
@@ -7,22 +7,24 @@ import {
7
7
  helpCopy,
8
8
  helpProvider,
9
9
  hideContextMenu,
10
+ modalHost,
10
11
  openConfirm,
11
12
  openForm,
12
13
  openModal,
13
14
  setHelpProvider,
15
+ setModalHost,
14
16
  showContextMenu
15
- } from "./chunk-DVU44T77.js";
17
+ } from "./chunk-ELXVW542.js";
16
18
  import {
17
19
  ActionDropdown
18
- } from "./chunk-TLZUUFOE.js";
20
+ } from "./chunk-O5OHMWBB.js";
19
21
  import {
20
22
  DataTable,
21
23
  createRafResizeObserver
22
- } from "./chunk-CT4YXXLP.js";
24
+ } from "./chunk-QIU5S2RU.js";
23
25
  import {
24
26
  ManagedWindow
25
- } from "./chunk-UCJ2WD4D.js";
27
+ } from "./chunk-LH5TSOZW.js";
26
28
  import {
27
29
  getSetting
28
30
  } from "./chunk-FL5KFNQH.js";
@@ -1113,6 +1115,7 @@ var AutocompleteField = class {
1113
1115
  this._activeIndex = -1;
1114
1116
  this._isOpen = false;
1115
1117
  this._disposers = [];
1118
+ this._suggestSeq = 0;
1116
1119
  }
1117
1120
  getValue() {
1118
1121
  return this.#composeValue();
@@ -1402,24 +1405,48 @@ var AutocompleteField = class {
1402
1405
  }
1403
1406
  #updateSuggestions() {
1404
1407
  const fragment = this.#getInputFragment();
1408
+ const request = ++this._suggestSeq;
1409
+ let produced;
1405
1410
  try {
1406
- const items = this.provider({
1411
+ produced = this.provider({
1407
1412
  value: fragment,
1408
1413
  scope: this.scope,
1409
1414
  namespace: this.selectedNamespace
1410
- }) || [];
1411
- this._items = Array.isArray(items) ? items : [];
1412
- this._activeIndex = items.length > 0 ? 0 : -1;
1413
- this.#renderDropdown();
1414
- if (items.length > 0) {
1415
- this.#open();
1416
- } else {
1417
- this.#close();
1418
- }
1415
+ });
1419
1416
  } catch (err) {
1420
1417
  this.logger?.warn?.("autocomplete", "Provider error", { err });
1421
1418
  this._items = [];
1422
1419
  this.#close();
1420
+ return;
1421
+ }
1422
+ if (produced && typeof produced.then === "function") {
1423
+ produced.then(
1424
+ (items) => {
1425
+ if (request !== this._suggestSeq) return;
1426
+ this.#applySuggestions(items);
1427
+ },
1428
+ (err) => {
1429
+ this.logger?.warn?.("autocomplete", "Provider error", { err });
1430
+ if (request !== this._suggestSeq) return;
1431
+ this._items = [];
1432
+ this.#close();
1433
+ }
1434
+ );
1435
+ return;
1436
+ }
1437
+ this.#applySuggestions(produced);
1438
+ }
1439
+ /** Draw whatever the provider produced. Split out of `#updateSuggestions`
1440
+ * so the synchronous and the awaited paths cannot drift apart. */
1441
+ #applySuggestions(produced) {
1442
+ const items = Array.isArray(produced) ? produced : [];
1443
+ this._items = items;
1444
+ this._activeIndex = items.length > 0 ? 0 : -1;
1445
+ this.#renderDropdown();
1446
+ if (items.length > 0) {
1447
+ this.#open();
1448
+ } else {
1449
+ this.#close();
1423
1450
  }
1424
1451
  }
1425
1452
  #renderDropdown() {
@@ -1615,6 +1642,7 @@ var AutocompleteField = class {
1615
1642
  });
1616
1643
  }
1617
1644
  dispose() {
1645
+ this._suggestSeq += 1;
1618
1646
  this.#close();
1619
1647
  this._disposers.forEach((fn) => {
1620
1648
  try {
@@ -5409,6 +5437,7 @@ export {
5409
5437
  installOverlayScrollbar,
5410
5438
  installTabsScrollbars,
5411
5439
  installWorkspaceScrollbars,
5440
+ modalHost,
5412
5441
  mountAttributeListEditor,
5413
5442
  mountGalleryPicker,
5414
5443
  openConfirm,
@@ -5418,6 +5447,7 @@ export {
5418
5447
  reportBridgeError,
5419
5448
  selectItem,
5420
5449
  setHelpProvider,
5450
+ setModalHost,
5421
5451
  showAboutDialog,
5422
5452
  showChoiceDialog,
5423
5453
  showCloseConfirmDialog,