flexdesk 0.14.0 → 0.15.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 (190) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +54 -3
  3. package/THIRD_PARTY_LICENSES.md +0 -0
  4. package/css/base.css +0 -0
  5. package/css/flexdesk.css +34 -0
  6. package/css/overrides.css +0 -0
  7. package/css/reset.css +0 -0
  8. package/css/tokens.css +0 -0
  9. package/dist/canvas.js +0 -0
  10. package/dist/canvas.js.map +0 -0
  11. package/dist/charts.js +2 -2
  12. package/dist/charts.js.map +0 -0
  13. package/dist/chunk-3PHCPZHT.js +0 -0
  14. package/dist/chunk-3PHCPZHT.js.map +0 -0
  15. package/dist/chunk-6JSOVNID.js +0 -0
  16. package/dist/chunk-6JSOVNID.js.map +0 -0
  17. package/dist/chunk-CWPMLX67.js +0 -0
  18. package/dist/chunk-CWPMLX67.js.map +0 -0
  19. package/dist/{chunk-M2L4XW2U.js → chunk-FBGP5KN5.js} +33 -21
  20. package/dist/chunk-FBGP5KN5.js.map +7 -0
  21. package/dist/chunk-FL5KFNQH.js +0 -0
  22. package/dist/chunk-FL5KFNQH.js.map +0 -0
  23. package/dist/chunk-FOOS3T5L.js +0 -0
  24. package/dist/chunk-FOOS3T5L.js.map +0 -0
  25. package/dist/chunk-JYWURG5T.js +0 -0
  26. package/dist/chunk-JYWURG5T.js.map +0 -0
  27. package/dist/chunk-NLTOY57M.js +0 -0
  28. package/dist/chunk-NLTOY57M.js.map +0 -0
  29. package/dist/chunk-NNFTETK3.js +0 -0
  30. package/dist/chunk-NNFTETK3.js.map +0 -0
  31. package/dist/chunk-O5OHMWBB.js +0 -0
  32. package/dist/chunk-O5OHMWBB.js.map +0 -0
  33. package/dist/{chunk-IYMNDPWH.js → chunk-RQM5Z2MU.js} +2 -2
  34. package/dist/{chunk-IYMNDPWH.js.map → chunk-RQM5Z2MU.js.map} +0 -0
  35. package/dist/chunk-SN4LSOAR.js +0 -0
  36. package/dist/chunk-SN4LSOAR.js.map +0 -0
  37. package/dist/chunk-WVFGV5FT.js +0 -0
  38. package/dist/chunk-WVFGV5FT.js.map +0 -0
  39. package/dist/core.js +0 -0
  40. package/dist/core.js.map +0 -0
  41. package/dist/editor.js +0 -0
  42. package/dist/editor.js.map +0 -0
  43. package/dist/flexdesk.css +34 -0
  44. package/dist/flow.js +1 -1
  45. package/dist/flow.js.map +0 -0
  46. package/dist/host.js +28 -5
  47. package/dist/host.js.map +2 -2
  48. package/dist/reset.css +0 -0
  49. package/dist/tile_registry-6WZPTUZV.js +0 -0
  50. package/dist/tile_registry-6WZPTUZV.js.map +0 -0
  51. package/dist/tiles.js +11 -3
  52. package/dist/tiles.js.map +2 -2
  53. package/dist/tokens.css +0 -0
  54. package/dist/widgets.js +101 -10
  55. package/dist/widgets.js.map +2 -2
  56. package/dist/wm.js +0 -0
  57. package/dist/wm.js.map +0 -0
  58. package/package.json +1 -1
  59. package/src/canvas/canvas_adapter.js +0 -0
  60. package/src/canvas/edge_router.js +0 -0
  61. package/src/canvas/graph/connector_router.js +0 -0
  62. package/src/canvas/graph/history_service.js +0 -0
  63. package/src/canvas/graph/node_platform.js +0 -0
  64. package/src/canvas/index.js +0 -0
  65. package/src/charts/chart_types.js +0 -0
  66. package/src/charts/data_series_plot_window.js +0 -0
  67. package/src/charts/downsample.js +0 -0
  68. package/src/charts/plot_config.js +0 -0
  69. package/src/charts/plot_popout_window.js +0 -0
  70. package/src/charts/plotly_wrapper.js +0 -0
  71. package/src/core/event_bus.js +0 -0
  72. package/src/core/logging.js +0 -0
  73. package/src/core/settings.js +0 -0
  74. package/src/core/state_guard.js +0 -0
  75. package/src/core/state_guard_config.js +0 -0
  76. package/src/core/state_machine.js +0 -0
  77. package/src/editor/editor_pane.js +0 -0
  78. package/src/editor/monaco_editor_factory.js +0 -0
  79. package/src/editor/monaco_loader.js +0 -0
  80. package/src/editor/notebook_search.js +0 -0
  81. package/src/editor/notebook_tab_bar.js +0 -0
  82. package/src/editor/notebook_undo_manager.js +0 -0
  83. package/src/editor/split_pane_container.js +0 -0
  84. package/src/flow/canvas_editor/editor.js +0 -0
  85. package/src/flow/canvas_editor/index.js +0 -0
  86. package/src/flow/canvas_editor/layout.js +0 -0
  87. package/src/flow/canvas_editor/strings.js +0 -0
  88. package/src/flow/kit/always_before.js +0 -0
  89. package/src/flow/kit/catalogue.js +0 -0
  90. package/src/flow/kit/chip_input.js +0 -0
  91. package/src/flow/kit/dom.js +0 -0
  92. package/src/flow/kit/findings.js +0 -0
  93. package/src/flow/kit/history.js +0 -0
  94. package/src/flow/kit/index.js +0 -0
  95. package/src/flow/kit/keys.js +0 -0
  96. package/src/flow/kit/logic_graph.js +0 -0
  97. package/src/flow/kit/references.js +0 -0
  98. package/src/flow/kit/settings_panel.js +0 -0
  99. package/src/flow/kit/settings_schema.js +0 -0
  100. package/src/flow/kit/step_picker.js +0 -0
  101. package/src/flow/kit/strings.js +0 -0
  102. package/src/flow/kit/value_picker.js +0 -0
  103. package/src/flow/kit/widgets.js +0 -0
  104. package/src/flow/lanes/editor.js +0 -0
  105. package/src/flow/lanes/index.js +0 -0
  106. package/src/flow/lanes/layout.js +0 -0
  107. package/src/flow/lanes/pipeline.js +0 -0
  108. package/src/flow/lanes/preview.js +0 -0
  109. package/src/flow/lanes/strings.js +0 -0
  110. package/src/flow/outline/editor.js +0 -0
  111. package/src/flow/outline/index.js +0 -0
  112. package/src/flow/outline/mapping.js +0 -0
  113. package/src/flow/outline/menu.js +0 -0
  114. package/src/flow/outline/operations.js +0 -0
  115. package/src/flow/outline/recognise.js +0 -0
  116. package/src/flow/outline/strings.js +0 -0
  117. package/src/help/help_modal.js +0 -0
  118. package/src/help/help_registry.js +0 -0
  119. package/src/host/host.js +2 -1
  120. package/src/host/photino_host.js +31 -3
  121. package/src/host/photino_host.md +56 -3
  122. package/src/host/pywebview_host.js +0 -0
  123. package/src/tiles/chart_tiles.js +14 -1
  124. package/src/tiles/config_schema.js +0 -0
  125. package/src/tiles/layout_persistence.js +0 -0
  126. package/src/tiles/tile_base.js +0 -0
  127. package/src/tiles/tile_grid.js +0 -0
  128. package/src/tiles/tile_registry.js +0 -0
  129. package/src/tiling/bottom_panel_tabs.js +0 -0
  130. package/src/tiling/command_palette.js +0 -0
  131. package/src/tiling/content_registry.js +0 -0
  132. package/src/tiling/desktops.js +0 -0
  133. package/src/tiling/entity_sources.js +0 -0
  134. package/src/tiling/keymap.js +0 -0
  135. package/src/tiling/kind_taxonomy.js +0 -0
  136. package/src/tiling/landing_table.js +0 -0
  137. package/src/tiling/loading_overlay.js +0 -0
  138. package/src/tiling/nav_panel.js +0 -0
  139. package/src/tiling/page_factory.js +0 -0
  140. package/src/tiling/panel_keys.js +0 -0
  141. package/src/tiling/shell.js +0 -0
  142. package/src/tiling/tab_strip.js +0 -0
  143. package/src/tiling/tile_breadcrumb.js +0 -0
  144. package/src/tiling/tile_renderer.js +0 -0
  145. package/src/tiling/tile_tab_menu.js +0 -0
  146. package/src/tiling/tile_tree.js +0 -0
  147. package/src/tiling/wm.js +0 -0
  148. package/src/tiling/zoom.js +0 -0
  149. package/src/ui/base/component_base.js +0 -0
  150. package/src/ui/base/controller_base.js +0 -0
  151. package/src/ui/base/page_base.js +0 -0
  152. package/src/ui/components/about_dialog.js +0 -0
  153. package/src/ui/components/action_dropdown.js +0 -0
  154. package/src/ui/components/alert_log.js +0 -0
  155. package/src/ui/components/alerts_pane.js +0 -0
  156. package/src/ui/components/attribute_list_editor.js +0 -0
  157. package/src/ui/components/autocomplete_field.js +0 -0
  158. package/src/ui/components/column_fit.js +0 -0
  159. package/src/ui/components/computing_status_window.js +0 -0
  160. package/src/ui/components/confirm_dialog.js +0 -0
  161. package/src/ui/components/context_menu.js +0 -0
  162. package/src/ui/components/data_table.js +32 -14
  163. package/src/ui/components/detail_header.js +0 -0
  164. package/src/ui/components/drag_reorder.js +0 -0
  165. package/src/ui/components/fact_table.js +0 -0
  166. package/src/ui/components/gallery_picker.js +0 -0
  167. package/src/ui/components/inline_renamer.js +0 -0
  168. package/src/ui/components/managed_window.js +0 -0
  169. package/src/ui/components/modal.js +0 -0
  170. package/src/ui/components/notification_history.js +0 -0
  171. package/src/ui/components/record_list.js +0 -0
  172. package/src/ui/components/row_activation.js +0 -0
  173. package/src/ui/components/slide_out_panel.js +0 -0
  174. package/src/ui/components/slider_field.js +0 -0
  175. package/src/ui/components/sortable_list.js +0 -0
  176. package/src/ui/components/table_filter_chips.js +0 -0
  177. package/src/ui/components/table_state_store.js +0 -0
  178. package/src/ui/components/table_values.js +0 -0
  179. package/src/ui/components/toast.js +0 -0
  180. package/src/ui/components/tree_view.js +0 -0
  181. package/src/ui/components/window_taskbar.js +0 -0
  182. package/src/ui/controllers/panel_state_machine.js +0 -0
  183. package/src/ui/controllers/window_chrome_controller.js +106 -11
  184. package/src/ui/notification_center.js +0 -0
  185. package/src/ui/utils/auto_scrollbars.js +0 -0
  186. package/src/ui/utils/overlay_scrollbar.js +0 -0
  187. package/src/ui/utils/raf_resize_observer.js +0 -0
  188. package/src/ui/utils/scroll_lock.js +0 -0
  189. package/src/ui/utils/tooltip_service.js +0 -0
  190. package/dist/chunk-M2L4XW2U.js.map +0 -7
package/dist/tokens.css CHANGED
File without changes
package/dist/widgets.js CHANGED
@@ -36,7 +36,7 @@ import {
36
36
  parseDateValue,
37
37
  parseDuration,
38
38
  resolvePaging
39
- } from "./chunk-M2L4XW2U.js";
39
+ } from "./chunk-FBGP5KN5.js";
40
40
  import {
41
41
  ManagedWindow,
42
42
  ROW_CONTROL_SELECTOR,
@@ -5050,9 +5050,13 @@ var MIN_WIDTH = 500;
5050
5050
  var MIN_HEIGHT = 350;
5051
5051
  var DRAG_THRESHOLD = 4;
5052
5052
  var WindowChromeController = class {
5053
- constructor({ eventBus, logger, host } = {}) {
5053
+ constructor({ eventBus, logger, host, topBar = ".twm-global-top-bar", controls = null, noDrag = "" } = {}) {
5054
5054
  this.eventBus = eventBus;
5055
5055
  this.logger = logger || console;
5056
+ this._topBarOpt = topBar;
5057
+ this._controlsOpt = controls;
5058
+ this._noDrag = noDrag;
5059
+ this._createdControls = null;
5056
5060
  this.win = host?.window || null;
5057
5061
  this.resizingActive = false;
5058
5062
  this.lastDblClickTs = 0;
@@ -5064,12 +5068,21 @@ var WindowChromeController = class {
5064
5068
  /**
5065
5069
  * Initialize the window chrome controller
5066
5070
  */
5067
- initialize() {
5068
- if (this._disposed) return;
5069
- if (!this.win || this.win.chrome() !== "custom") {
5071
+ async initialize() {
5072
+ if (this._disposed) return false;
5073
+ let chrome = "native";
5074
+ try {
5075
+ chrome = this.win ? await this.win.chrome() : "native";
5076
+ } catch (_) {
5077
+ chrome = "native";
5078
+ }
5079
+ if (this._disposed) return false;
5080
+ if (chrome !== "custom") {
5070
5081
  this.logger.info?.("[WindowChrome] Native/browser chrome detected \u2014 custom window chrome disabled");
5071
- return;
5082
+ return false;
5072
5083
  }
5084
+ document.body.classList.add("twm-custom-chrome");
5085
+ this.#createWindowControls();
5073
5086
  this.#wireWindowButtons();
5074
5087
  this.#createResizeHandles();
5075
5088
  this.#wireTopBarDrag();
@@ -5077,6 +5090,43 @@ var WindowChromeController = class {
5077
5090
  this.#wireNativeStateSync();
5078
5091
  this.#initializeState();
5079
5092
  this.logger.info?.("[WindowChrome] Initialized");
5093
+ return true;
5094
+ }
5095
+ /** An element from a selector or an element; null when there is none. */
5096
+ #resolve(target, within = document) {
5097
+ if (!target) return null;
5098
+ if (typeof target !== "string") return target;
5099
+ return within.querySelector(target);
5100
+ }
5101
+ /**
5102
+ * Draw minimise, maximise/restore and close, unless the page has its own
5103
+ * `#win-*` buttons (EcoSim's markup), which are then wired instead.
5104
+ */
5105
+ #createWindowControls() {
5106
+ if (document.getElementById("win-minimize") || document.getElementById("win-close")) return;
5107
+ const bar = this.#resolve(this._topBarOpt);
5108
+ const host = this.#resolve(this._controlsOpt) || bar?.querySelector(".twm-bar-right") || bar;
5109
+ if (!host) return;
5110
+ const box = document.createElement("div");
5111
+ box.className = "twm-window-controls";
5112
+ const button = (id, icon, label, extra = "") => {
5113
+ const b = document.createElement("button");
5114
+ b.type = "button";
5115
+ b.id = id;
5116
+ b.className = `twm-window-controls__btn${extra}`;
5117
+ b.setAttribute("aria-label", label);
5118
+ b.title = label;
5119
+ const i = document.createElement("span");
5120
+ i.className = "material-symbols-outlined";
5121
+ i.textContent = icon;
5122
+ b.appendChild(i);
5123
+ box.appendChild(b);
5124
+ };
5125
+ button("win-minimize", "remove", "Minimize");
5126
+ button("win-maximize", "check_box_outline_blank", "Maximize");
5127
+ button("win-close", "close", "Close", " twm-window-controls__btn--close");
5128
+ host.appendChild(box);
5129
+ this._createdControls = box;
5080
5130
  }
5081
5131
  /**
5082
5132
  * Wire minimize, maximize, close buttons
@@ -5122,6 +5172,7 @@ var WindowChromeController = class {
5122
5172
  const tooltipText = isMax ? "Restore" : "Maximize";
5123
5173
  window.LatexTooltip?.set(maxBtn, tooltipText);
5124
5174
  maxBtn.setAttribute("aria-label", tooltipText);
5175
+ maxBtn.title = tooltipText;
5125
5176
  document.body.classList.toggle("twm-window-maximized", isMax);
5126
5177
  }
5127
5178
  /**
@@ -5188,8 +5239,30 @@ var WindowChromeController = class {
5188
5239
  }
5189
5240
  };
5190
5241
  let activePointerId = null;
5242
+ const EDGE = {
5243
+ right: "e",
5244
+ left: "w",
5245
+ top: "n",
5246
+ bottom: "s",
5247
+ cornerBR: "se",
5248
+ cornerBL: "sw",
5249
+ cornerTR: "ne",
5250
+ cornerTL: "nw"
5251
+ };
5191
5252
  const startDrag = async (e) => {
5253
+ if (e.button != null && e.button !== 0) return;
5192
5254
  e.preventDefault();
5255
+ if (this.win.startNativeResize) {
5256
+ this.resizingActive = true;
5257
+ let handled = false;
5258
+ try {
5259
+ handled = await this.win.startNativeResize(EDGE[mode]);
5260
+ } catch (_) {
5261
+ handled = false;
5262
+ }
5263
+ this.resizingActive = false;
5264
+ if (handled) return;
5265
+ }
5193
5266
  this.resizingActive = true;
5194
5267
  startX = e.clientX;
5195
5268
  startY = e.clientY;
@@ -5300,9 +5373,25 @@ var WindowChromeController = class {
5300
5373
  * Setup top bar dragging for window movement
5301
5374
  */
5302
5375
  #wireTopBarDrag() {
5303
- this.topBar = document.querySelector(".twm-global-top-bar");
5376
+ this.topBar = this.#resolve(this._topBarOpt);
5304
5377
  if (!this.topBar) return;
5305
- const NO_DRAG_SELECTOR = ".no-drag, button, input, select, textarea, .menu-item, .menu-dropdown, .window-controls, .panel-toggles, .global-search-dropdown";
5378
+ const NO_DRAG_SELECTOR = [
5379
+ ".no-drag",
5380
+ "button",
5381
+ "a",
5382
+ "input",
5383
+ "select",
5384
+ "textarea",
5385
+ "label",
5386
+ '[role="button"]',
5387
+ '[role="menuitem"]',
5388
+ '[role="tab"]',
5389
+ '[contenteditable="true"]',
5390
+ ".twm-window-controls",
5391
+ ".window-controls",
5392
+ ".panel-toggles",
5393
+ this._noDrag
5394
+ ].filter(Boolean).join(", ");
5306
5395
  let dragging = false;
5307
5396
  let startSX = 0, startSY = 0, startX = null, startY = null, winW = 0, winH = 0;
5308
5397
  let wasMax = false;
@@ -5479,8 +5568,7 @@ var WindowChromeController = class {
5479
5568
  this.topBar.addEventListener("mousedown", blocker, true);
5480
5569
  this.topBar.addEventListener("pointerdown", blocker, true);
5481
5570
  const dblClickHandler = async (e) => {
5482
- const interactiveSelector = 'button, input, select, textarea, a, [role="button"], [role="menuitem"], .menu-bar, .fl-bar, .fl-item, .global-search-wrapper, .panel-toggle-btn';
5483
- if (e.target.closest(interactiveSelector)) {
5571
+ if (isInteractiveTarget(e.target)) {
5484
5572
  return;
5485
5573
  }
5486
5574
  this.lastDblClickTs = Date.now();
@@ -5586,6 +5674,9 @@ var WindowChromeController = class {
5586
5674
  }
5587
5675
  });
5588
5676
  this.handles = {};
5677
+ this._createdControls?.remove();
5678
+ this._createdControls = null;
5679
+ document.body.classList.remove("twm-custom-chrome", "twm-window-maximized", "window-fullscreen");
5589
5680
  this.logger.info?.("[WindowChrome] Disposed");
5590
5681
  }
5591
5682
  };