flexdesk 0.5.0 → 0.6.1

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 (70) hide show
  1. package/README.md +654 -1
  2. package/css/base.css +2868 -0
  3. package/css/flexdesk.css +2868 -0
  4. package/css/tokens.css +72 -0
  5. package/dist/canvas.js +390 -0
  6. package/dist/canvas.js.map +7 -0
  7. package/dist/charts.js +2 -2
  8. package/dist/{chunk-24MS7W5Y.js → chunk-6NG7YVBG.js} +2 -470
  9. package/dist/chunk-6NG7YVBG.js.map +7 -0
  10. package/dist/chunk-H4LT43RS.js +475 -0
  11. package/dist/chunk-H4LT43RS.js.map +7 -0
  12. package/dist/{chunk-KH2GJTKR.js → chunk-IYV5JVYB.js} +29 -1
  13. package/dist/chunk-IYV5JVYB.js.map +7 -0
  14. package/dist/chunk-SN4LSOAR.js +532 -0
  15. package/dist/chunk-SN4LSOAR.js.map +7 -0
  16. package/dist/{chunk-CNXP3SIN.js → chunk-ZMCRDOCF.js} +2 -2
  17. package/dist/flexdesk.css +2868 -0
  18. package/dist/flow.js +10030 -0
  19. package/dist/flow.js.map +7 -0
  20. package/dist/tiles.js +9 -9
  21. package/dist/tokens.css +72 -0
  22. package/dist/widgets.js +87 -5
  23. package/dist/widgets.js.map +3 -3
  24. package/dist/wm.js +4 -2
  25. package/dist/wm.js.map +1 -1
  26. package/package.json +9 -1
  27. package/src/canvas/canvas_adapter.js +523 -0
  28. package/src/canvas/edge_router.js +392 -0
  29. package/src/canvas/graph/connector_router.js +189 -0
  30. package/src/canvas/graph/history_service.js +170 -0
  31. package/src/canvas/graph/node_platform.js +116 -0
  32. package/src/canvas/index.js +16 -0
  33. package/src/flow/canvas_editor/editor.js +1081 -0
  34. package/src/flow/canvas_editor/index.js +16 -0
  35. package/src/flow/canvas_editor/layout.js +118 -0
  36. package/src/flow/canvas_editor/strings.js +37 -0
  37. package/src/flow/kit/always_before.js +325 -0
  38. package/src/flow/kit/catalogue.js +170 -0
  39. package/src/flow/kit/chip_input.js +461 -0
  40. package/src/flow/kit/dom.js +205 -0
  41. package/src/flow/kit/findings.js +129 -0
  42. package/src/flow/kit/history.js +173 -0
  43. package/src/flow/kit/index.js +38 -0
  44. package/src/flow/kit/keys.js +127 -0
  45. package/src/flow/kit/logic_graph.js +210 -0
  46. package/src/flow/kit/references.js +199 -0
  47. package/src/flow/kit/settings_panel.js +357 -0
  48. package/src/flow/kit/settings_schema.js +175 -0
  49. package/src/flow/kit/step_picker.js +209 -0
  50. package/src/flow/kit/strings.js +102 -0
  51. package/src/flow/kit/value_picker.js +238 -0
  52. package/src/flow/kit/widgets.js +763 -0
  53. package/src/flow/lanes/editor.js +1469 -0
  54. package/src/flow/lanes/index.js +26 -0
  55. package/src/flow/lanes/layout.js +525 -0
  56. package/src/flow/lanes/pipeline.js +327 -0
  57. package/src/flow/lanes/preview.js +109 -0
  58. package/src/flow/lanes/strings.js +98 -0
  59. package/src/flow/outline/editor.js +1511 -0
  60. package/src/flow/outline/index.js +20 -0
  61. package/src/flow/outline/mapping.js +286 -0
  62. package/src/flow/outline/menu.js +154 -0
  63. package/src/flow/outline/operations.js +738 -0
  64. package/src/flow/outline/recognise.js +755 -0
  65. package/src/flow/outline/strings.js +135 -0
  66. package/src/ui/components/data_table.js +40 -0
  67. package/src/ui/utils/scroll_lock.js +111 -0
  68. package/dist/chunk-24MS7W5Y.js.map +0 -7
  69. package/dist/chunk-KH2GJTKR.js.map +0 -7
  70. /package/dist/{chunk-CNXP3SIN.js.map → chunk-ZMCRDOCF.js.map} +0 -0
package/dist/tiles.js CHANGED
@@ -1,12 +1,3 @@
1
- import {
2
- ActionDropdown
3
- } from "./chunk-O5OHMWBB.js";
4
- import {
5
- openRawTracesWindow
6
- } from "./chunk-CNXP3SIN.js";
7
- import "./chunk-KH2GJTKR.js";
8
- import "./chunk-6JSOVNID.js";
9
- import "./chunk-FL5KFNQH.js";
10
1
  import {
11
2
  TileRegistry,
12
3
  createWidget,
@@ -20,6 +11,15 @@ import {
20
11
  setTileLogger,
21
12
  tile_registry_exports
22
13
  } from "./chunk-FOOS3T5L.js";
14
+ import {
15
+ ActionDropdown
16
+ } from "./chunk-O5OHMWBB.js";
17
+ import {
18
+ openRawTracesWindow
19
+ } from "./chunk-ZMCRDOCF.js";
20
+ import "./chunk-IYV5JVYB.js";
21
+ import "./chunk-6JSOVNID.js";
22
+ import "./chunk-FL5KFNQH.js";
23
23
  import {
24
24
  __toCommonJS
25
25
  } from "./chunk-JYWURG5T.js";
package/dist/tokens.css CHANGED
@@ -193,4 +193,76 @@
193
193
  to its OWN 0.4 values when a token is unset (normal: 6px 8px and an
194
194
  inherited line height; compact: 2px 6px and 1.35), and a default here
195
195
  would replace both densities' values with one. */
196
+
197
+ /* ── Flow editors (@flexdesk/flow) — TONES, not colours ───────────
198
+ A step-type category names a TONE (`violet`, `teal`, `amber`, `grey`,
199
+ `blue`, `indigo`) and these map the tone to its colours, so a consumer
200
+ restyles every editor's categories here and nowhere else. Each tone is:
201
+
202
+ -bg / -fg a step's icon chip, a picker row's chip, a chip's fill
203
+ -line a reference chip's border
204
+ -icon-bg a lane card's icon zone
205
+ -text-bg a lane card's text zone
206
+ -dot a step tab's dot
207
+
208
+ New in the flow work and read by nothing older, so defining them
209
+ changes no existing screen. The values are the approved mocks'. */
210
+ --twm-flow-violet-bg: rgba(167, 139, 250, 0.16);
211
+ --twm-flow-violet-fg: #c6b4fb;
212
+ --twm-flow-violet-line: rgba(167, 139, 250, 0.45);
213
+ --twm-flow-violet-icon-bg: #351a40;
214
+ --twm-flow-violet-text-bg: #261e30;
215
+ --twm-flow-violet-dot: #a785e8;
216
+
217
+ --twm-flow-teal-bg: rgba(45, 180, 165, 0.17);
218
+ --twm-flow-teal-fg: #72d8c8;
219
+ --twm-flow-teal-line: rgba(45, 180, 165, 0.45);
220
+ --twm-flow-teal-icon-bg: #1a403a;
221
+ --twm-flow-teal-text-bg: #1a2b2a;
222
+ --twm-flow-teal-dot: #3fb8a6;
223
+
224
+ --twm-flow-amber-bg: rgba(222, 150, 70, 0.17);
225
+ --twm-flow-amber-fg: #ecb27a;
226
+ --twm-flow-amber-line: rgba(215, 163, 74, 0.45);
227
+ --twm-flow-amber-icon-bg: #3a3018;
228
+ --twm-flow-amber-text-bg: #2b2518;
229
+ --twm-flow-amber-dot: #d79a52;
230
+
231
+ --twm-flow-grey-bg: rgba(255, 255, 255, 0.08);
232
+ --twm-flow-grey-fg: #c4c4c4;
233
+ --twm-flow-grey-line: rgba(255, 255, 255, 0.28);
234
+ --twm-flow-grey-icon-bg: #333334;
235
+ --twm-flow-grey-text-bg: #262627;
236
+ --twm-flow-grey-dot: #9a9a9a;
237
+
238
+ --twm-flow-blue-bg: rgba(22, 131, 196, 0.22);
239
+ --twm-flow-blue-fg: #a8d4f2;
240
+ --twm-flow-blue-line: rgba(80, 160, 220, 0.45);
241
+ --twm-flow-blue-icon-bg: #173447;
242
+ --twm-flow-blue-text-bg: #1a2630;
243
+ --twm-flow-blue-dot: #4aa3dc;
244
+
245
+ --twm-flow-indigo-bg: rgba(127, 140, 240, 0.17);
246
+ --twm-flow-indigo-fg: #aab6fb;
247
+ --twm-flow-indigo-line: rgba(127, 140, 240, 0.45);
248
+ --twm-flow-indigo-icon-bg: #252850;
249
+ --twm-flow-indigo-text-bg: #1e1f30;
250
+ --twm-flow-indigo-dot: #7f8cf0;
251
+
252
+ /* The kit's own surfaces and signal colours (the mocks' values). The
253
+ focus ring is the canonical bright accent, so a consumer that restyles
254
+ the accent restyles it. */
255
+ --twm-flow-control-bg: #2b2b2c;
256
+ --twm-flow-control-border: #454545;
257
+ --twm-flow-muted: #a6a6a6;
258
+ --twm-flow-focus: var(--accent-bright);
259
+ --twm-flow-error: #f48771;
260
+ --twm-flow-error-bg: rgba(244, 135, 113, 0.09);
261
+ --twm-flow-error-line: rgba(244, 135, 113, 0.35);
262
+ --twm-flow-error-text: #f2cfc6;
263
+ --twm-flow-warning: #e2b366;
264
+ --twm-flow-warning-bg: rgba(226, 179, 102, 0.09);
265
+ --twm-flow-warning-line: rgba(226, 179, 102, 0.35);
266
+ --twm-flow-warning-text: #f0dcb8;
267
+ --twm-flow-ok: #89d185;
196
268
  }
package/dist/widgets.js CHANGED
@@ -7,14 +7,16 @@ import {
7
7
  helpCopy,
8
8
  helpProvider,
9
9
  hideContextMenu,
10
+ setHelpProvider,
11
+ showContextMenu
12
+ } from "./chunk-H4LT43RS.js";
13
+ import {
10
14
  modalHost,
11
15
  openConfirm,
12
16
  openForm,
13
17
  openModal,
14
- setHelpProvider,
15
- setModalHost,
16
- showContextMenu
17
- } from "./chunk-24MS7W5Y.js";
18
+ setModalHost
19
+ } from "./chunk-6NG7YVBG.js";
18
20
  import {
19
21
  ActionDropdown
20
22
  } from "./chunk-O5OHMWBB.js";
@@ -30,7 +32,7 @@ import {
30
32
  parseDatePeriod,
31
33
  parseDateValue,
32
34
  parseDuration
33
- } from "./chunk-KH2GJTKR.js";
35
+ } from "./chunk-IYV5JVYB.js";
34
36
  import {
35
37
  ManagedWindow,
36
38
  ROW_CONTROL_SELECTOR,
@@ -5486,6 +5488,85 @@ function installTabsScrollbars(selectors = [".tabs"]) {
5486
5488
  return () => observer.disconnect();
5487
5489
  }
5488
5490
 
5491
+ // src/ui/utils/scroll_lock.js
5492
+ function createScrollLock({ axis = "y", enabled = true } = {}) {
5493
+ const doY = axis === "y" || axis === "both";
5494
+ const doX = axis === "x" || axis === "both";
5495
+ const members = /* @__PURE__ */ new Map();
5496
+ let last = { top: 0, left: 0 };
5497
+ let on = !!enabled;
5498
+ function copyFrom(source) {
5499
+ last = { top: source.scrollTop, left: source.scrollLeft };
5500
+ if (!on) return;
5501
+ for (const [el, state] of members) {
5502
+ if (el === source) continue;
5503
+ const top = doY ? last.top : el.scrollTop;
5504
+ const left = doX ? last.left : el.scrollLeft;
5505
+ if (el.scrollTop === top && el.scrollLeft === left) continue;
5506
+ state.wrote = { top, left };
5507
+ if (doY) el.scrollTop = top;
5508
+ if (doX) el.scrollLeft = left;
5509
+ }
5510
+ }
5511
+ function onScroll(event) {
5512
+ const el = event.currentTarget;
5513
+ const state = members.get(el);
5514
+ if (!state) return;
5515
+ const wrote = state.wrote;
5516
+ state.wrote = null;
5517
+ if (wrote && Math.abs(el.scrollTop - wrote.top) < 1 && Math.abs(el.scrollLeft - wrote.left) < 1) return;
5518
+ copyFrom(el);
5519
+ }
5520
+ const lock = {
5521
+ /** Join the group. Returns the function that leaves it. */
5522
+ attach(el) {
5523
+ if (!el || typeof el.addEventListener !== "function") return () => {
5524
+ };
5525
+ if (members.has(el)) return () => lock.detach(el);
5526
+ const state = { wrote: null };
5527
+ members.set(el, state);
5528
+ el.addEventListener("scroll", onScroll, { passive: true });
5529
+ if (on && (last.top || last.left)) {
5530
+ state.wrote = {
5531
+ top: doY ? last.top : el.scrollTop,
5532
+ left: doX ? last.left : el.scrollLeft
5533
+ };
5534
+ if (doY) el.scrollTop = last.top;
5535
+ if (doX) el.scrollLeft = last.left;
5536
+ }
5537
+ return () => lock.detach(el);
5538
+ },
5539
+ detach(el) {
5540
+ if (!members.has(el)) return;
5541
+ members.delete(el);
5542
+ el.removeEventListener("scroll", onScroll);
5543
+ },
5544
+ /** Lock (true) or let the members scroll freely (false). Locking again
5545
+ * brings every member level with the one scrolled last. */
5546
+ setEnabled(value) {
5547
+ const was = on;
5548
+ on = !!value;
5549
+ if (on && !was) {
5550
+ const source = [...members.keys()].find(
5551
+ (el) => el.scrollTop === last.top && el.scrollLeft === last.left
5552
+ ) || members.keys().next().value;
5553
+ if (source) copyFrom(source);
5554
+ }
5555
+ },
5556
+ get enabled() {
5557
+ return on;
5558
+ },
5559
+ /** How many boxes are in the group (for a consumer's own checks). */
5560
+ get size() {
5561
+ return members.size;
5562
+ },
5563
+ dispose() {
5564
+ for (const el of [...members.keys()]) lock.detach(el);
5565
+ }
5566
+ };
5567
+ return lock;
5568
+ }
5569
+
5489
5570
  // src/ui/utils/tooltip_service.js
5490
5571
  var tooltipElement = null;
5491
5572
  var currentTarget = null;
@@ -5765,6 +5846,7 @@ export {
5765
5846
  attachInlineRenamer,
5766
5847
  createDetailHeader,
5767
5848
  createRafResizeObserver,
5849
+ createScrollLock,
5768
5850
  createTableStateStore,
5769
5851
  createTreeCategory,
5770
5852
  createTreeItem,