@floegence/floe-webapp-core 0.36.11 → 0.36.13

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.
@@ -1,45 +1,98 @@
1
- const a = "data-floe-dialog-surface-host", m = "data-floe-dialog-surface-boundary";
2
- let o = null, t = null;
3
- function d(e) {
1
+ const a = "data-floe-dialog-surface-host", w = "data-floe-dialog-surface-boundary";
2
+ let o = null, n = null;
3
+ function s(e) {
4
4
  return typeof Element < "u" && e instanceof Element ? e : typeof Node < "u" && e instanceof Node ? e.parentElement : null;
5
5
  }
6
- function f(e) {
7
- const n = e?.activeElement;
8
- return n instanceof Element ? n : null;
6
+ function h(e) {
7
+ const t = e?.activeElement;
8
+ return t instanceof Element ? t : null;
9
9
  }
10
- function i(e) {
11
- const n = typeof document < "u" ? document : null;
10
+ function l(e) {
11
+ const t = typeof document < "u" ? document : null;
12
12
  o = {
13
- target: d(e),
14
- activeElement: f(n),
13
+ target: s(e),
14
+ activeElement: h(t),
15
15
  recordedAt: Date.now()
16
16
  };
17
17
  }
18
- function r(e) {
19
- i(e.target);
20
- }
21
18
  function u(e) {
22
- i(e.target);
19
+ l(e.target);
23
20
  }
24
- function l() {
25
- typeof document > "u" || t !== document && (t && (t.removeEventListener("pointerdown", r, !0), t.removeEventListener("focusin", u, !0)), document.addEventListener("pointerdown", r, !0), document.addEventListener("focusin", u, !0), t = document);
21
+ function c(e) {
22
+ l(e.target);
26
23
  }
27
- function s() {
28
- return !o || Date.now() - o.recordedAt > 1600 ? null : o;
24
+ function f() {
25
+ m();
29
26
  }
30
- function c(e) {
31
- const n = e?.closest(`[${a}="true"]`);
32
- return n instanceof HTMLElement && n.isConnected ? n : null;
27
+ function m() {
28
+ typeof document > "u" || n !== document && (n && (n.removeEventListener("pointerdown", u, !0), n.removeEventListener("focusin", c, !0)), document.addEventListener("pointerdown", u, !0), document.addEventListener("focusin", c, !0), n = document);
33
29
  }
34
30
  function E() {
35
- l();
36
- const e = s(), n = c(e?.target ?? null) ?? c(e?.activeElement ?? null);
37
- return n ? { host: n, mode: "surface" } : { host: null, mode: "global" };
31
+ return !o || Date.now() - o.recordedAt > 1600 ? null : o;
32
+ }
33
+ function d(e) {
34
+ const t = e?.closest(`[${a}="true"]`);
35
+ return typeof HTMLElement > "u" ? null : t instanceof HTMLElement && t.isConnected ? t : null;
36
+ }
37
+ function T() {
38
+ f();
39
+ const e = E(), t = d(e?.target ?? null) ?? d(e?.activeElement ?? null);
40
+ return t ? { host: t, mode: "surface" } : { host: null, mode: "global" };
41
+ }
42
+ function r(e) {
43
+ return e.mode === "surface" && !!e.host?.isConnected;
44
+ }
45
+ function v(e) {
46
+ return r(e) ? e.host ?? void 0 : void 0;
47
+ }
48
+ function p() {
49
+ return typeof window > "u" ? {
50
+ left: 0,
51
+ top: 0,
52
+ right: 0,
53
+ bottom: 0,
54
+ width: 0,
55
+ height: 0
56
+ } : {
57
+ left: 0,
58
+ top: 0,
59
+ right: window.innerWidth,
60
+ bottom: window.innerHeight,
61
+ width: window.innerWidth,
62
+ height: window.innerHeight
63
+ };
64
+ }
65
+ function g(e) {
66
+ if (!r(e) || !e.host)
67
+ return p();
68
+ const t = e.host.getBoundingClientRect();
69
+ return {
70
+ left: t.left,
71
+ top: t.top,
72
+ right: t.right,
73
+ bottom: t.bottom,
74
+ width: t.width,
75
+ height: t.height
76
+ };
77
+ }
78
+ function S(e, t) {
79
+ if (!r(t))
80
+ return e;
81
+ const i = g(t);
82
+ return {
83
+ x: e.x - i.left,
84
+ y: e.y - i.top
85
+ };
38
86
  }
39
- typeof document < "u" && l();
87
+ typeof document < "u" && f();
40
88
  export {
41
- m as DIALOG_SURFACE_BOUNDARY_ATTR,
89
+ w as DIALOG_SURFACE_BOUNDARY_ATTR,
42
90
  a as DIALOG_SURFACE_HOST_ATTR,
43
- l as ensureDialogSurfaceInteractionTracking,
44
- E as resolveDialogSurfaceHost
91
+ f as ensureDialogSurfaceInteractionTracking,
92
+ m as ensureSurfacePortalInteractionTracking,
93
+ r as isSurfacePortalMode,
94
+ S as projectSurfacePortalPosition,
95
+ g as resolveSurfacePortalBoundaryRect,
96
+ T as resolveSurfacePortalHost,
97
+ v as resolveSurfacePortalMount
45
98
  };
@@ -1,11 +1,30 @@
1
1
  export declare const VIEWPORT_MARGIN = 8;
2
2
  export declare const MENU_ITEM_SELECTOR = "[role=\"menuitem\"]:not([disabled]):not([aria-disabled=\"true\"])";
3
+ export type MenuBoundaryRect = Readonly<{
4
+ left: number;
5
+ top: number;
6
+ right: number;
7
+ bottom: number;
8
+ width: number;
9
+ height: number;
10
+ }>;
3
11
  export type MenuFocusMode = 'first' | 'last' | 'selected';
4
- export declare function calculateMenuPosition(triggerRect: DOMRect, menuRect: DOMRect, align: 'start' | 'center' | 'end'): {
12
+ export declare function resolveViewportMenuBoundaryRect(): MenuBoundaryRect;
13
+ export declare function clampMenuPosition(anchor: Readonly<{
14
+ x: number;
15
+ y: number;
16
+ }>, menuRect: Readonly<{
17
+ width: number;
18
+ height: number;
19
+ }>, boundaryRect?: MenuBoundaryRect): {
20
+ x: number;
21
+ y: number;
22
+ };
23
+ export declare function calculateMenuPosition(triggerRect: DOMRect, menuRect: DOMRect, align: 'start' | 'center' | 'end', boundaryRect?: MenuBoundaryRect): {
5
24
  x: number;
6
25
  y: number;
7
26
  };
8
- export declare function calculateSubmenuPosition(parentRect: DOMRect, submenuRect: DOMRect): {
27
+ export declare function calculateSubmenuPosition(parentRect: DOMRect, submenuRect: DOMRect, boundaryRect?: MenuBoundaryRect): {
9
28
  x: number;
10
29
  y: number;
11
30
  };
@@ -1,60 +1,90 @@
1
- const d = 8, r = '[role="menuitem"]:not([disabled]):not([aria-disabled="true"])';
2
- function M(e, t, n) {
3
- const o = window.innerWidth, f = window.innerHeight;
4
- let i;
5
- switch (n) {
1
+ const u = 8, M = '[role="menuitem"]:not([disabled]):not([aria-disabled="true"])';
2
+ function a() {
3
+ return typeof window > "u" ? {
4
+ left: 0,
5
+ top: 0,
6
+ right: 0,
7
+ bottom: 0,
8
+ width: 0,
9
+ height: 0
10
+ } : {
11
+ left: 0,
12
+ top: 0,
13
+ right: window.innerWidth,
14
+ bottom: window.innerHeight,
15
+ width: window.innerWidth,
16
+ height: window.innerHeight
17
+ };
18
+ }
19
+ function h(e) {
20
+ return e ?? a();
21
+ }
22
+ function E(e, t, f) {
23
+ const i = h(f);
24
+ let o = e.x, n = e.y;
25
+ return o + t.width > i.right - 8 && (o = i.right - t.width - 8), n + t.height > i.bottom - 8 && (n = i.bottom - t.height - 8), {
26
+ x: Math.max(i.left + 8, o),
27
+ y: Math.max(i.top + 8, n)
28
+ };
29
+ }
30
+ function A(e, t, f, i) {
31
+ const o = h(i);
32
+ let n;
33
+ switch (f) {
6
34
  case "center":
7
- i = e.left + e.width / 2 - t.width / 2;
35
+ n = e.left + e.width / 2 - t.width / 2;
8
36
  break;
9
37
  case "end":
10
- i = e.right - t.width;
38
+ n = e.right - t.width;
11
39
  break;
12
40
  default:
13
- i = e.left;
41
+ n = e.left;
14
42
  }
15
- let l = e.bottom + 4;
16
- if (i + t.width > o - 8 && (i = o - t.width - 8), i = Math.max(8, i), l + t.height > f - 8) {
17
- const I = e.top - 8, h = f - e.bottom - 8;
18
- I > h && I >= t.height ? l = e.top - t.height - 4 : l = f - t.height - 8;
43
+ let r = e.bottom + 4;
44
+ if (n + t.width > o.right - 8 && (n = o.right - t.width - 8), n = Math.max(o.left + 8, n), r + t.height > o.bottom - 8) {
45
+ const I = e.top - o.top - 8, d = o.bottom - e.bottom - 8;
46
+ I > d && I >= t.height ? r = e.top - t.height - 4 : r = o.bottom - t.height - 8;
19
47
  }
20
- return l = Math.max(8, l), { x: i, y: l };
21
- }
22
- function u(e, t) {
23
- const n = window.innerWidth, o = window.innerHeight;
24
- let f = e.right, i = e.top;
25
- if (f + t.width > n - 8) {
26
- const l = e.left - t.width;
27
- l >= 8 ? f = l : f = n - t.width - 8;
48
+ return r = Math.max(o.top + 8, r), { x: n, y: r };
49
+ }
50
+ function P(e, t, f) {
51
+ const i = h(f);
52
+ let o = e.right, n = e.top;
53
+ if (o + t.width > i.right - 8) {
54
+ const r = e.left - t.width;
55
+ r >= i.left + 8 ? o = r : o = i.right - t.width - 8;
28
56
  }
29
- return i + t.height > o - 8 && (i = o - t.height - 8), f = Math.max(8, f), i = Math.max(8, i), { x: f, y: i };
57
+ return n + t.height > i.bottom - 8 && (n = i.bottom - t.height - 8), o = Math.max(i.left + 8, o), n = Math.max(i.top + 8, n), { x: o, y: n };
30
58
  }
31
- function a(e, t, n) {
32
- return e <= 0 ? null : t < 0 ? n > 0 ? 0 : e - 1 : (t + n + e) % e;
59
+ function s(e, t, f) {
60
+ return e <= 0 ? null : t < 0 ? f > 0 ? 0 : e - 1 : (t + f + e) % e;
33
61
  }
34
- function s(e) {
35
- return !e || typeof HTMLElement > "u" ? [] : Array.from(e.querySelectorAll(r)).filter(
62
+ function l(e) {
63
+ return !e || typeof HTMLElement > "u" ? [] : Array.from(e.querySelectorAll(M)).filter(
36
64
  (t) => t instanceof HTMLElement
37
65
  );
38
66
  }
39
- function w(e, t = "first") {
40
- const n = s(e);
41
- if (!n.length) return !1;
42
- let o = n[0];
43
- return t === "last" ? o = n[n.length - 1] : t === "selected" && (o = n.find((f) => f.getAttribute("data-floe-selected") === "true") ?? n[0]), o.focus(), !0;
67
+ function T(e, t = "first") {
68
+ const f = l(e);
69
+ if (!f.length) return !1;
70
+ let i = f[0];
71
+ return t === "last" ? i = f[f.length - 1] : t === "selected" && (i = f.find((o) => o.getAttribute("data-floe-selected") === "true") ?? f[0]), i.focus(), !0;
44
72
  }
45
- function E(e, t, n) {
46
- const o = s(e);
47
- if (!o.length) return !1;
48
- const f = t ? o.indexOf(t) : -1, i = a(o.length, f, n);
49
- return i === null ? !1 : (o[i]?.focus(), !0);
73
+ function w(e, t, f) {
74
+ const i = l(e);
75
+ if (!i.length) return !1;
76
+ const o = t ? i.indexOf(t) : -1, n = s(i.length, o, f);
77
+ return n === null ? !1 : (i[n]?.focus(), !0);
50
78
  }
51
79
  export {
52
- r as MENU_ITEM_SELECTOR,
53
- d as VIEWPORT_MARGIN,
54
- M as calculateMenuPosition,
55
- u as calculateSubmenuPosition,
56
- w as focusMenuItem,
57
- s as getMenuItems,
58
- a as getWrappedMenuItemIndex,
59
- E as moveMenuFocus
80
+ M as MENU_ITEM_SELECTOR,
81
+ u as VIEWPORT_MARGIN,
82
+ A as calculateMenuPosition,
83
+ P as calculateSubmenuPosition,
84
+ E as clampMenuPosition,
85
+ T as focusMenuItem,
86
+ l as getMenuItems,
87
+ s as getWrappedMenuItemIndex,
88
+ w as moveMenuFocus,
89
+ a as resolveViewportMenuBoundaryRect
60
90
  };
@@ -0,0 +1 @@
1
+ export { SURFACE_PORTAL_HOST_ATTR, ensureSurfacePortalInteractionTracking, resolveSurfacePortalHost, isSurfacePortalMode, resolveSurfacePortalMount, resolveSurfacePortalBoundaryRect, projectSurfacePortalPosition, __resetSurfacePortalScopeForTests, type SurfacePortalInteractionSnapshot, type SurfacePortalMode, type ResolvedSurfacePortalHost, type SurfacePortalBoundaryRect, } from './dialogSurfaceScope';
@@ -1,44 +1,49 @@
1
- import { insert as a, createComponent as d, addEventListener as b, effect as v, className as f, setStyleProperty as m, template as l, delegateEvents as h } from "solid-js/web";
2
- import { For as x } from "solid-js";
3
- import { cn as k } from "../../utils/cn.js";
4
- var _ = /* @__PURE__ */ l("<div role=menu class=workbench-context-menu data-floe-workbench-boundary=true>"), p = /* @__PURE__ */ l("<div role=separator aria-orientation=horizontal class=workbench-context-menu__separator>"), w = /* @__PURE__ */ l("<button type=button role=menuitem><span class=workbench-context-menu__label>");
5
- function $(n) {
6
- return n.kind === "action";
1
+ import { spread as d, mergeProps as v, insert as a, createComponent as s, addEventListener as f, effect as b, className as _, template as c, delegateEvents as p } from "solid-js/web";
2
+ import { For as h } from "solid-js";
3
+ import { cn as x } from "../../utils/cn.js";
4
+ import { WORKBENCH_CONTEXT_MENU_ATTR as k } from "./workbenchContextMenuDismiss.js";
5
+ var w = /* @__PURE__ */ c("<div role=menu class=workbench-context-menu data-floe-workbench-boundary=true>"), C = /* @__PURE__ */ c("<div role=separator aria-orientation=horizontal class=workbench-context-menu__separator>"), $ = /* @__PURE__ */ c("<button type=button role=menuitem><span class=workbench-context-menu__label>");
6
+ function E(r) {
7
+ return r.kind === "action";
7
8
  }
8
- function E(n) {
9
+ function M(r) {
9
10
  return (() => {
10
- var r = _();
11
- return r.$$contextmenu = (e) => e.preventDefault(), a(r, d(x, {
11
+ var o = w();
12
+ return d(o, v({
13
+ [k]: "true"
14
+ }, {
15
+ get style() {
16
+ return {
17
+ left: `${r.x}px`,
18
+ top: `${r.y}px`
19
+ };
20
+ },
21
+ onContextMenu: (e) => e.preventDefault()
22
+ }), !1, !0), a(o, s(h, {
12
23
  get each() {
13
- return n.items;
24
+ return r.items;
14
25
  },
15
26
  children: (e) => {
16
- if (!$(e))
17
- return p();
18
- const c = e.icon;
27
+ if (!E(e))
28
+ return C();
29
+ const m = e.icon;
19
30
  return (() => {
20
- var t = w(), i = t.firstChild;
21
- return b(t, "click", e.onSelect, !0), a(t, d(c, {
31
+ var t = $(), l = t.firstChild;
32
+ return f(t, "click", e.onSelect, !0), a(t, s(m, {
22
33
  class: "h-3.5 w-3.5"
23
- }), i), a(i, () => e.label), v((o) => {
24
- var u = k("workbench-context-menu__item", e.destructive && "is-destructive"), s = e.disabled;
25
- return u !== o.e && f(t, o.e = u), s !== o.t && (t.disabled = o.t = s), o;
34
+ }), l), a(l, () => e.label), b((n) => {
35
+ var i = x("workbench-context-menu__item", e.destructive && "is-destructive"), u = e.disabled;
36
+ return i !== n.e && _(t, n.e = i), u !== n.t && (t.disabled = n.t = u), n;
26
37
  }, {
27
38
  e: void 0,
28
39
  t: void 0
29
40
  }), t;
30
41
  })();
31
42
  }
32
- })), v((e) => {
33
- var c = `${n.x}px`, t = `${n.y}px`;
34
- return c !== e.e && m(r, "left", e.e = c), t !== e.t && m(r, "top", e.t = t), e;
35
- }, {
36
- e: void 0,
37
- t: void 0
38
- }), r;
43
+ })), o;
39
44
  })();
40
45
  }
41
- h(["contextmenu", "click"]);
46
+ p(["click"]);
42
47
  export {
43
- E as WorkbenchContextMenu
48
+ M as WorkbenchContextMenu
44
49
  };
@@ -5,9 +5,12 @@ export interface WorkbenchSurfaceApi {
5
5
  worldX?: number;
6
6
  worldY?: number;
7
7
  }) => WorkbenchWidgetItem | null;
8
+ clearSelection: () => void;
8
9
  focusWidget: (widget: WorkbenchWidgetItem, options?: {
9
10
  centerViewport?: boolean;
10
11
  }) => WorkbenchWidgetItem;
12
+ fitWidget: (widget: WorkbenchWidgetItem) => WorkbenchWidgetItem;
13
+ overviewWidget: (widget: WorkbenchWidgetItem) => WorkbenchWidgetItem;
11
14
  findWidgetByType: (type: WorkbenchWidgetType) => WorkbenchWidgetItem | null;
12
15
  }
13
16
  export interface WorkbenchSurfaceProps {
@@ -1,42 +1,53 @@
1
- import { insert as c, createComponent as a, Portal as k, addEventListener as s, effect as p, className as b, template as m, delegateEvents as C } from "solid-js/web";
2
- import { createEffect as d, onCleanup as g, Show as W } from "solid-js";
3
- import { isTypingElement as A } from "../../utils/dom.js";
4
- import { WorkbenchCanvas as y } from "./WorkbenchCanvas.js";
1
+ import { insert as c, createComponent as a, Portal as h, addEventListener as p, effect as k, className as W, template as g, delegateEvents as b } from "solid-js/web";
2
+ import { createEffect as s, onCleanup as u, Show as C } from "solid-js";
3
+ import { isTypingElement as y } from "../../utils/dom.js";
4
+ import { WorkbenchCanvas as A } from "./WorkbenchCanvas.js";
5
5
  import { WorkbenchContextMenu as D } from "./WorkbenchContextMenu.js";
6
6
  import { WorkbenchFilterBar as x } from "./WorkbenchFilterBar.js";
7
7
  import { WorkbenchHud as S } from "./WorkbenchHud.js";
8
- import { WorkbenchLockButton as F } from "./WorkbenchLockButton.js";
9
- import { useWorkbenchModel as M } from "./useWorkbenchModel.js";
10
- var L = /* @__PURE__ */ m("<div class=workbench-menu-backdrop data-floe-workbench-boundary=true>"), R = /* @__PURE__ */ m("<div><div class=workbench-surface__body data-floe-workbench-canvas-frame=true>");
11
- const E = "F1";
12
- function U(i) {
13
- const e = M({
8
+ import { WorkbenchLockButton as M } from "./WorkbenchLockButton.js";
9
+ import { installWorkbenchContextMenuDismissListeners as F } from "./workbenchContextMenuDismiss.js";
10
+ import { useWorkbenchModel as L } from "./useWorkbenchModel.js";
11
+ var R = /* @__PURE__ */ g("<div class=workbench-menu-backdrop data-floe-workbench-boundary=true>"), E = /* @__PURE__ */ g("<div><div class=workbench-surface__body data-floe-workbench-canvas-frame=true>");
12
+ const _ = "F1";
13
+ function P(i) {
14
+ const e = L({
14
15
  state: () => i.state(),
15
16
  setState: (t) => i.setState(t),
16
17
  widgetDefinitions: () => i.widgetDefinitions,
17
18
  onClose: () => {
18
19
  }
19
20
  });
20
- d(() => {
21
+ s(() => {
21
22
  i.onApiReady?.({
22
23
  ensureWidget: (t, r) => e.widgetActions.ensureWidget(t, r) ?? null,
24
+ clearSelection: () => e.selection.clear(),
23
25
  focusWidget: (t, r) => e.navigation.focusWidget(t, r),
26
+ fitWidget: (t) => e.navigation.fitWidget(t),
27
+ overviewWidget: (t) => e.navigation.overviewWidget(t),
24
28
  findWidgetByType: (t) => e.queries.findWidgetByType(t)
25
- }), g(() => {
29
+ }), u(() => {
26
30
  i.onApiReady?.(null);
27
31
  });
28
32
  });
29
- const u = () => i.lockShortcut === void 0 ? E : i.lockShortcut;
30
- d(() => {
33
+ const d = () => i.lockShortcut === void 0 ? _ : i.lockShortcut;
34
+ s(() => {
35
+ if (typeof window > "u" || !e.contextMenu.state()) return;
36
+ const t = F({
37
+ ownerWindow: window,
38
+ onDismiss: e.contextMenu.close
39
+ });
40
+ u(() => t());
41
+ }), s(() => {
31
42
  if (i.enableKeyboard === !1 || typeof document > "u") return;
32
- const t = u(), r = (n) => {
43
+ const t = d(), r = (n) => {
33
44
  if (n.defaultPrevented || n.isComposing) return;
34
45
  if (t !== null && n.key === t) {
35
46
  n.preventDefault(), e.lock.toggle();
36
47
  return;
37
48
  }
38
49
  const o = n.target;
39
- if (!(o instanceof Element && A(o)))
50
+ if (!(o instanceof Element && y(o)))
40
51
  switch (n.key) {
41
52
  case "ArrowUp":
42
53
  n.preventDefault(), e.navigation.handleArrowNavigation("up");
@@ -56,26 +67,26 @@ function U(i) {
56
67
  break;
57
68
  }
58
69
  };
59
- document.addEventListener("keydown", r, !0), g(() => document.removeEventListener("keydown", r, !0));
70
+ document.addEventListener("keydown", r, !0), u(() => document.removeEventListener("keydown", r, !0));
60
71
  });
61
- const f = (t, r) => {
72
+ const m = (t, r) => {
62
73
  const n = document.querySelector('[data-floe-workbench-canvas-frame="true"]');
63
74
  if (!n) return null;
64
75
  const o = n.getBoundingClientRect();
65
76
  if (t < o.left || t > o.right || r < o.top || r > o.bottom)
66
77
  return null;
67
- const v = t - o.left, h = r - o.top, l = e.viewport();
78
+ const w = t - o.left, v = r - o.top, l = e.viewport();
68
79
  return {
69
- worldX: (v - l.x) / l.scale,
70
- worldY: (h - l.y) / l.scale
80
+ worldX: (w - l.x) / l.scale,
81
+ worldY: (v - l.y) / l.scale
71
82
  };
72
- }, w = (t, r, n) => {
73
- const o = f(r, n);
83
+ }, f = (t, r, n) => {
84
+ const o = m(r, n);
74
85
  o && e.widgetActions.addWidgetAtCursor(t, o.worldX, o.worldY);
75
86
  };
76
87
  return (() => {
77
- var t = R(), r = t.firstChild;
78
- return c(r, a(y, {
88
+ var t = E(), r = t.firstChild;
89
+ return c(r, a(A, {
79
90
  get widgetDefinitions() {
80
91
  return e.widgetDefinitions();
81
92
  },
@@ -130,7 +141,7 @@ function U(i) {
130
141
  get onRequestDelete() {
131
142
  return e.widgetActions.deleteWidget;
132
143
  }
133
- })), c(t, a(F, {
144
+ })), c(t, a(M, {
134
145
  get locked() {
135
146
  return e.locked();
136
147
  },
@@ -138,7 +149,7 @@ function U(i) {
138
149
  return e.lock.toggle;
139
150
  },
140
151
  get shortcutLabel() {
141
- return u() ?? void 0;
152
+ return d() ?? void 0;
142
153
  }
143
154
  }), null), c(t, a(x, {
144
155
  get widgetDefinitions() {
@@ -156,7 +167,7 @@ function U(i) {
156
167
  get onShowAll() {
157
168
  return e.filter.showAll;
158
169
  },
159
- onCreateAt: w
170
+ onCreateAt: f
160
171
  }), null), c(t, a(S, {
161
172
  get scaleLabel() {
162
173
  return e.scaleLabel();
@@ -167,16 +178,16 @@ function U(i) {
167
178
  get onZoomIn() {
168
179
  return e.hud.zoomIn;
169
180
  }
170
- }), null), c(t, a(W, {
181
+ }), null), c(t, a(C, {
171
182
  get when() {
172
183
  return e.contextMenu.state();
173
184
  },
174
185
  get children() {
175
- return a(k, {
186
+ return a(h, {
176
187
  get children() {
177
188
  return [(() => {
178
- var n = L();
179
- return s(n, "contextmenu", e.contextMenu.retarget, !0), s(n, "click", e.contextMenu.close, !0), n;
189
+ var n = R();
190
+ return p(n, "contextmenu", e.contextMenu.retarget, !0), n;
180
191
  })(), a(D, {
181
192
  get x() {
182
193
  return e.contextMenu.position()?.left ?? 0;
@@ -191,10 +202,10 @@ function U(i) {
191
202
  }
192
203
  });
193
204
  }
194
- }), null), p(() => b(t, `workbench-surface${i.class ? ` ${i.class}` : ""}`)), t;
205
+ }), null), k(() => W(t, `workbench-surface${i.class ? ` ${i.class}` : ""}`)), t;
195
206
  })();
196
207
  }
197
- C(["click", "contextmenu"]);
208
+ b(["contextmenu"]);
198
209
  export {
199
- U as WorkbenchSurface
210
+ P as WorkbenchSurface
200
211
  };
@@ -4,4 +4,4 @@ export { WorkbenchContextMenu, type WorkbenchContextMenuItem, type WorkbenchCont
4
4
  export { useWorkbenchModel, type UseWorkbenchModelOptions } from './useWorkbenchModel';
5
5
  export { WIDGET_REGISTRY, createWorkbenchFilterState, getWidgetEntry, isValidWorkbenchWidgetType, resolveWorkbenchWidgetDefinitions, type WidgetRegistryEntry, } from './widgets/widgetRegistry';
6
6
  export * from './types';
7
- export { sanitizeWorkbenchState, createDefaultWorkbenchState, createWorkbenchId, createWorkbenchProjectedRect, createWorkbenchRenderLayerMap, createWorkbenchWidgetSurfaceMetrics, resolveWorkbenchWidgetRenderMode, type WorkbenchRenderLayerMap, } from './workbenchHelpers';
7
+ export { sanitizeWorkbenchState, createDefaultWorkbenchState, createWorkbenchId, createWorkbenchProjectedRect, createWorkbenchRenderLayerMap, createWorkbenchViewportCenteredOnWidget, createWorkbenchViewportFitForWidget, createWorkbenchWidgetSurfaceMetrics, resolveWorkbenchWidgetRenderMode, type WorkbenchRenderLayerMap, } from './workbenchHelpers';
@@ -36,6 +36,7 @@ export declare function useWorkbenchModel(options: UseWorkbenchModelOptions): {
36
36
  openCanvasContextMenu: (event: InfiniteCanvasContextMenuEvent) => void;
37
37
  openWidgetContextMenu: (event: MouseEvent, item: WorkbenchWidgetItem) => void;
38
38
  selectWidget: (widgetId: string) => void;
39
+ clearSelection: () => void;
39
40
  startOptimisticFront: (widgetId: string) => void;
40
41
  commitFront: (widgetId: string) => void;
41
42
  commitMove: (widgetId: string, position: {
@@ -66,6 +67,11 @@ export declare function useWorkbenchModel(options: UseWorkbenchModelOptions): {
66
67
  focusWidget: (widget: WorkbenchWidgetItem, options?: {
67
68
  centerViewport?: boolean;
68
69
  }) => WorkbenchWidgetItem<WorkbenchWidgetType>;
70
+ fitWidget: (widget: WorkbenchWidgetItem) => WorkbenchWidgetItem<WorkbenchWidgetType>;
71
+ overviewWidget: (widget: WorkbenchWidgetItem) => WorkbenchWidgetItem<WorkbenchWidgetType>;
72
+ };
73
+ selection: {
74
+ clear: () => void;
69
75
  };
70
76
  widgetActions: {
71
77
  deleteSelected: () => void;