vintage-frames 0.14.1 → 0.16.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 (55) hide show
  1. package/custom-elements.json +770 -74
  2. package/dist/chrome.d.ts +10 -1
  3. package/dist/chrome.js +8 -3
  4. package/dist/components/vf-button.d.ts +5 -1
  5. package/dist/components/vf-button.js +1 -1
  6. package/dist/components/vf-desktop.d.ts +5 -2
  7. package/dist/components/vf-desktop.js +5 -5
  8. package/dist/components/vf-dialog.d.ts +13 -2
  9. package/dist/components/vf-dialog.js +27 -27
  10. package/dist/components/vf-menu-bar.js +9 -10
  11. package/dist/components/vf-menu-item.js +18 -13
  12. package/dist/components/vf-menu.d.ts +8 -3
  13. package/dist/components/vf-menu.js +85 -61
  14. package/dist/components/vf-number-field.d.ts +4 -0
  15. package/dist/components/vf-number-field.js +28 -25
  16. package/dist/components/vf-paragraph.d.ts +3 -1
  17. package/dist/components/vf-paragraph.js +7 -0
  18. package/dist/components/vf-scroll-area.d.ts +16 -1
  19. package/dist/components/vf-scroll-area.js +39 -29
  20. package/dist/components/vf-select.d.ts +5 -4
  21. package/dist/components/vf-select.js +26 -17
  22. package/dist/components/vf-text-field.d.ts +5 -5
  23. package/dist/components/vf-text-field.js +1 -1
  24. package/dist/components/vf-window.d.ts +22 -5
  25. package/dist/components/vf-window.js +113 -98
  26. package/dist/cursor.d.ts +8 -0
  27. package/dist/cursor.js +70 -73
  28. package/dist/events.d.ts +3 -2
  29. package/dist/events.js +3 -3
  30. package/dist/index.d.ts +2 -1
  31. package/dist/modal-dialog.d.ts +49 -4
  32. package/dist/modal-dialog.js +115 -87
  33. package/dist/position.js +25 -20
  34. package/dist/shell/alert.d.ts +17 -9
  35. package/dist/shell/alert.js +25 -28
  36. package/dist/shell/catalog.d.ts +1 -1
  37. package/dist/shell/catalog.js +32 -18
  38. package/dist/shell/finder.d.ts +46 -1
  39. package/dist/shell/finder.js +166 -126
  40. package/dist/shell/index.d.ts +2 -4
  41. package/dist/shell/index.js +5 -6
  42. package/dist/shell/pure.d.ts +10 -0
  43. package/dist/shell/pure.js +4 -0
  44. package/dist/shell/shell.d.ts +40 -13
  45. package/dist/shell/shell.js +87 -51
  46. package/dist/shell/windows.d.ts +69 -12
  47. package/dist/shell/windows.js +245 -144
  48. package/dist/text-control.d.ts +30 -1
  49. package/dist/text-control.js +27 -6
  50. package/dist/top-layer.d.ts +13 -0
  51. package/dist/top-layer.js +16 -0
  52. package/docs/SPEC.md +25 -24
  53. package/editor/vscode.html-custom-data.json +22 -12
  54. package/editor/web-types.json +58 -25
  55. package/package.json +5 -1
@@ -12,34 +12,50 @@ var u = (e, t) => e.set(t, (e.get(t) ?? 0) + 1), d = (e, t) => {
12
12
  width: e.width ?? 0,
13
13
  height: e.height ?? 0
14
14
  });
15
- function m() {
15
+ async function m(e) {
16
+ let t = e.querySelector(":scope > vf-menu-bar");
17
+ await Promise.all([e.updateComplete, t?.updateComplete]);
18
+ }
19
+ function h() {
16
20
  let e = document.activeElement;
17
21
  for (; e?.shadowRoot?.activeElement;) e = e.shadowRoot.activeElement;
18
22
  return e;
19
23
  }
20
- var h = (e) => {
24
+ var g = (e) => {
21
25
  let t = document.activeElement;
22
26
  return !!t && (t === e || e.contains(t));
23
27
  };
24
- async function g(e, { when: t } = {}) {
28
+ async function ee(e, { when: t } = {}) {
25
29
  let n = [...e.querySelectorAll("*")];
26
30
  if (await Promise.all([e, ...n].map((e) => e.updateComplete)), !e.isConnected || t && !t()) return !1;
27
- for (let t of n) if (!(t.closest("[hidden]") || !t.checkVisibility()) && !(t.tabIndex < 0 && !t.localName.startsWith("vf-")) && (t.focus({ preventScroll: !0 }), h(e))) return !0;
31
+ let r = (e) => !e.closest("[hidden]") && e.checkVisibility(), i = n.find((e) => e.hasAttribute("autofocus") && r(e));
32
+ if (i && (i.focus({ preventScroll: !0 }), g(e))) return !0;
33
+ for (let t of n) if (!(!r(t) || Number(t.getAttribute("tabindex")) < 0) && !(t.tabIndex < 0 && !t.localName.startsWith("vf-")) && (t.focus({ preventScroll: !0 }), g(e))) return !0;
28
34
  return !1;
29
35
  }
30
- function _(m, _) {
31
- let { defaultApp: v, savedPin: ee = () => null } = _, y = [], b = (e, t, n) => {
32
- e.addEventListener(t, n), y.push(() => e.removeEventListener(t, n));
33
- }, x = () => ({
34
- width: m.width,
35
- height: m.height
36
- }), S = () => m.windowArea, C = /* @__PURE__ */ new Map(), w = /* @__PURE__ */ new Map(), T = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new Map(), D = /* @__PURE__ */ new Map(), O = /* @__PURE__ */ new WeakMap(), k = {}, A = () => a(S().top, k), j = /* @__PURE__ */ new Set(), M = !1, N = () => {
37
- if (!M) for (let e of [...j]) e();
38
- }, P = /* @__PURE__ */ new Set(), F = () => {
39
- for (let e of [...P]) e();
40
- }, I = /* @__PURE__ */ new Set(), L = /* @__PURE__ */ new Set(), R = /* @__PURE__ */ new Set(), z = () => null, B = () => !1;
41
- function V(n, r) {
42
- let i = S(), a = t(n), o = (e) => Math.floor(e / a) * a, s = Math.ceil(i.top / a) * a, c = i.left + i.width, l = i.top + i.height, { width: u, height: d } = r;
36
+ function te(h, te) {
37
+ let { defaultApp: ne, savedPin: re = () => null } = te, _ = [], v = (e, t, n) => {
38
+ e.addEventListener(t, n), _.push(() => e.removeEventListener(t, n));
39
+ }, y = () => ({
40
+ width: h.width,
41
+ height: h.height
42
+ }), b = () => h.windowArea, x = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Map(), C = /* @__PURE__ */ new Map(), w = /* @__PURE__ */ new Map(), T = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new WeakMap(), D = /* @__PURE__ */ new WeakMap(), ie = {}, O = () => a(b().top, ie), k = /* @__PURE__ */ new Set(), A = !1, j = () => {
43
+ if (!A) for (let e of [...k]) e();
44
+ }, M = /* @__PURE__ */ new Set(), N = () => {
45
+ for (let e of [...M]) e();
46
+ }, P = /* @__PURE__ */ new Set(), F = /* @__PURE__ */ new Set(), I = /* @__PURE__ */ new Set(), L = /* @__PURE__ */ new Set(), R = /* @__PURE__ */ new Map(), z = [], ae = (e) => {
47
+ for (let t = e; t; t = t.parentElement) if (R.has(t)) return t;
48
+ return null;
49
+ }, oe = (e) => e.isConnected && (e.matches("vf-dialog[open]") || !!e.querySelector("vf-dialog[open]")), B = () => {
50
+ let e = z.filter((e) => R.has(e) && oe(e));
51
+ for (let t of R.keys()) !e.includes(t) && oe(t) && e.push(t);
52
+ if (!(e.length === z.length && e.every((e, t) => e === z[t]))) {
53
+ z = e;
54
+ for (let e of [...L]) e();
55
+ }
56
+ }, V = () => null, H = () => !1;
57
+ function U(n, r) {
58
+ let i = b(), a = t(n), o = (e) => Math.floor(e / a) * a, s = Math.ceil(i.top / a) * a, c = i.left + i.width, l = i.top + i.height, { width: u, height: d } = r;
43
59
  n.resizable && (u != null && Number.isFinite(u) && (u = Math.min(u, o(i.width))), d != null && Number.isFinite(d) && (d = Math.min(d, o(Math.max(0, l - s)))));
44
60
  let p = u ?? n.width ?? 0, m = d ?? n.height ?? 0;
45
61
  return {
@@ -49,13 +65,23 @@ function _(m, _) {
49
65
  height: d
50
66
  };
51
67
  }
52
- let H = (t, n) => {
53
- t.left = e(n.left, t), t.top = e(n.top, t), n.width != null && Number.isFinite(n.width) && (t.width = n.width), n.height != null && Number.isFinite(n.height) && (t.height = n.height), O.delete(t);
54
- }, U = (e) => {
55
- let t = C.get(e)?.place;
56
- return t ? V(e, t(S())) : null;
57
- }, W = (e, t) => {
58
- let n = C.get(e)?.policy;
68
+ let W = (t, n) => {
69
+ t.left = e(n.left, t), t.top = e(n.top, t), n.width != null && Number.isFinite(n.width) && (t.width = n.width), n.height != null && Number.isFinite(n.height) && (t.height = n.height), E.delete(t);
70
+ }, G = (e) => {
71
+ let t = x.get(e)?.place;
72
+ return t ? U(e, t(b())) : null;
73
+ }, K = (e, t = b()) => {
74
+ let n = x.get(e)?.zoom;
75
+ if (!n) return null;
76
+ let r = p(e), i = n(t, r);
77
+ return {
78
+ left: i.left ?? r.left,
79
+ top: i.top ?? r.top,
80
+ width: i.width ?? r.width,
81
+ height: i.height ?? r.height
82
+ };
83
+ }, q = (e, t) => {
84
+ let n = x.get(e)?.policy;
59
85
  if (n) return n(t);
60
86
  if (!e.resizable) return { size: {
61
87
  width: t.width,
@@ -66,7 +92,7 @@ function _(m, _) {
66
92
  width: r,
67
93
  height: i
68
94
  } };
69
- }, G = (e, t, n = W(e, p(e))) => V(e, c(t, x(), A(), n)), te = (e, t) => {
95
+ }, J = (e, t, n = q(e, p(e))) => U(e, c(t, y(), O(), n)), se = (e, t) => {
70
96
  let n = p(e);
71
97
  return [
72
98
  "left",
@@ -77,223 +103,291 @@ function _(m, _) {
77
103
  let r = t[e];
78
104
  return r == null || !Number.isFinite(r) || n[e] === r;
79
105
  });
80
- }, ne = (e) => {
81
- let t = [...C].filter(([t, n]) => t !== e && !t.hidden && !n.palette).map(([e]) => p(e));
82
- return r(l(S()), t).slot;
83
- }, K = v, q = (e) => e instanceof n && C.get(e)?.app || v;
84
- function J() {
106
+ }, ce = (e) => {
107
+ let t = [...x].filter(([t, n]) => t !== e && !t.hidden && !n.palette).map(([e]) => p(e));
108
+ return r(l(b()), t).slot;
109
+ }, Y = ne, le = (e) => e instanceof n && x.get(e)?.app || ne;
110
+ function ue() {
85
111
  let e = !1;
86
- for (let [t, n] of C) {
112
+ for (let [t, n] of x) {
87
113
  if (!n.palette) continue;
88
- let r = n.app === K && n.palette();
89
- t.hidden !== !r && (t.hidden = !r, r && m.bringToFront(t), e = !0);
114
+ let r = n.app === Y && n.palette();
115
+ t.hidden !== !r && (t.hidden = !r, r && h.bringToFront(t), e = !0);
90
116
  }
91
- e && N();
117
+ e && j();
92
118
  }
93
- let re = (e) => {
119
+ let de = (e) => {
94
120
  let t = document.activeElement?.closest("vf-window");
95
- !(t instanceof n) || t === e || !C.has(t) || C.get(t).palette || (e ? Y(e) : B(null, null));
96
- }, Y = (e) => void g(e, { when: () => m.activeWindow === e }), X = (e) => {
97
- re(e);
98
- for (let t of [...L]) t(e);
99
- let t = q(e);
100
- if (t !== K) {
101
- K = t, J();
102
- for (let e of [...R]) e(K);
121
+ !(t instanceof n) || t === e || !x.has(t) || x.get(t).palette || (e ? X(e) : H(null, null));
122
+ }, X = (e) => void ee(e, { when: () => h.activeWindow === e }), fe = (e) => {
123
+ de(e);
124
+ for (let t of [...F]) t(e);
125
+ let t = le(e);
126
+ if (t !== Y) {
127
+ Y = t, ue();
128
+ for (let e of [...I]) e(Y);
103
129
  }
104
130
  };
105
- b(m, "vf-activate", (e) => X(e.detail.window)), b(m, "vf-close", (e) => {
106
- let t = e.target;
107
- t instanceof n && C.has(t) && $.requestClose(t);
131
+ v(h, "vf-activate", (e) => fe(e.detail.window)), v(h, "vf-close", (e) => {
132
+ let t = e.target, r = t instanceof n ? x.get(t) : void 0;
133
+ if (!r) return;
134
+ let i = e.detail ?? {};
135
+ i.altKey && !r.palette ? $.closeAll(r.app, i) : $.requestClose(t, i);
108
136
  });
109
- let Z = 0, Q = (e) => {
110
- !(e.target instanceof n) || !C.has(e.target) || Z || (Z = window.setTimeout(() => {
111
- Z = 0, N();
137
+ let Z = 0, pe = (e) => {
138
+ !(e.target instanceof n) || !x.has(e.target) || Z || (Z = window.setTimeout(() => {
139
+ Z = 0, j();
112
140
  }, 0));
113
141
  };
114
- m.addEventListener("vf-placement-change", Q), y.push(() => m.removeEventListener("vf-placement-change", Q)), b(m, "vf-resize", (e) => {
115
- e.detail?.commit && N();
142
+ h.addEventListener("vf-placement-change", pe), _.push(() => h.removeEventListener("vf-placement-change", pe)), v(h, "vf-zoom", (e) => {
143
+ let t = e.target;
144
+ t instanceof n && x.get(t)?.zoom && $.zoom(t);
145
+ }), v(h, "vf-resize", (e) => {
146
+ e.detail?.commit && j();
116
147
  });
117
- let ie = (e) => {
118
- let t = C.get(e);
119
- t && (C.delete(e), O.delete(e), t.palette || F(), N());
120
- }, ae = (n, r, i, a) => {
121
- let l = p(n), u = C.get(n);
148
+ let me = (e) => {
149
+ let t = x.get(e);
150
+ t && (x.delete(e), E.delete(e), t.palette || N(), j());
151
+ }, he = (n, r, i, a) => {
152
+ let l = p(n), u = x.get(n);
122
153
  if (u?.keep && o(l, u.keep(a))) {
123
- H(n, V(n, u.keep(S())));
154
+ W(n, U(n, u.keep(b())));
124
155
  return;
125
156
  }
126
- let d = O.get(n), f = !!d && n.resizable && (d.width !== l.width || d.height !== l.height), m = !d || d.left !== l.left || d.top !== l.top || f || !d ? s(l, r, A()) : d.pin, h = c(m, i, A(), W(n, l));
127
- if (n.left = e(h.left, n), n.top = e(h.top, n), n.resizable) {
128
- let r = t(n), i = S(), a = Math.ceil(i.top / r) * r, o = Math.floor(i.width / r) * r, s = Math.floor(Math.max(0, i.top + i.height - a) / r) * r;
129
- n.width = Math.min(e(h.width, n), o), n.height = Math.min(e(h.height, n), s);
157
+ let d = K(n, a);
158
+ if (d && o(l, d)) {
159
+ W(n, U(n, K(n)));
160
+ return;
130
161
  }
131
- O.set(n, {
132
- pin: m,
162
+ let f = E.get(n), m = !!f && n.resizable && (f.width !== l.width || f.height !== l.height), h = !f || f.left !== l.left || f.top !== l.top || m || !f ? s(l, r, O()) : f.pin, g = c(h, i, O(), q(n, l));
163
+ if (n.left = e(g.left, n), n.top = e(g.top, n), n.resizable) {
164
+ let r = t(n), i = b(), a = Math.ceil(i.top / r) * r, o = Math.floor(i.width / r) * r, s = Math.floor(Math.max(0, i.top + i.height - a) / r) * r;
165
+ n.width = Math.min(e(g.width, n), o), n.height = Math.min(e(g.height, n), s);
166
+ }
167
+ E.set(n, {
168
+ pin: h,
133
169
  ...p(n)
134
170
  });
135
- }, $ = {
171
+ }, ge = (e, t) => {
172
+ let n = t ? J(e, t) : G(e);
173
+ n && W(e, n);
174
+ }, _e = !1, Q = /* @__PURE__ */ new Map();
175
+ m(h).then(() => {
176
+ _e = !0;
177
+ for (let [e, t] of Q) x.has(e) && ge(e, t);
178
+ Q.size && j(), Q.clear();
179
+ });
180
+ let $ = {
136
181
  get area() {
137
- return S();
182
+ return b();
138
183
  },
139
184
  get front() {
140
- return K;
185
+ return Y;
141
186
  },
142
187
  adopt(e, t) {
143
188
  let n = t.palette;
144
- if (C.set(e, {
189
+ if (x.set(e, {
145
190
  app: t.app,
146
191
  item: t.item ?? null,
147
192
  place: t.place ?? null,
148
193
  policy: t.policy ?? null,
149
194
  keep: t.keep ?? null,
195
+ zoom: t.zoom ?? null,
150
196
  palette: n ? n === !0 ? () => !0 : n : null,
151
197
  close: t.close ?? null
152
- }), t.pin) H(e, G(e, t.pin));
153
- else {
154
- let t = U(e);
155
- t && H(e, t);
198
+ }), ge(e, t.pin ?? null), _e || Q.set(e, t.pin ?? null), n) {
199
+ let t = x.get(e);
200
+ e.hidden = !(t.app === Y && t.palette());
156
201
  }
157
- if (n) {
158
- let t = C.get(e);
159
- e.hidden = !(t.app === K && t.palette());
160
- }
161
- m.activeWindow === e && X(e), n || F(), N();
202
+ h.activeWindow === e && fe(e), n || N(), j();
162
203
  },
163
204
  open(e) {
164
205
  let t = e.item == null ? null : $.windowFor(e.item);
165
- if (t) return m.bringToFront(t), Y(t), t;
206
+ if (t) return h.bringToFront(t), X(t), t;
166
207
  let n = e.create(), r = {
167
208
  width: n.width ?? 0,
168
209
  height: n.height ?? 0
169
- }, a = ne();
170
- m.append(n);
210
+ }, a = ce();
211
+ h.append(n);
171
212
  let o = e.item ?? null;
172
213
  return $.adopt(n, {
173
214
  app: e.app,
174
215
  item: o,
175
216
  place: e.place ?? ((e) => i(e, r, l(e), a)),
176
- pin: o == null ? null : T.get(o)?.pin ?? ee(o),
217
+ pin: o == null ? null : C.get(o)?.pin ?? re(o),
177
218
  policy: e.policy ?? null,
178
219
  keep: e.keep ?? null,
220
+ zoom: e.zoom ?? null,
179
221
  close: e.close ?? null
180
- }), o != null && T.delete(o), m.bringToFront(n), e.from && n.show({ from: e.from }), Y(n), n;
222
+ }), o != null && C.delete(o), h.bringToFront(n), e.from && n.show({ from: e.from }), X(n), n;
181
223
  },
182
224
  close(e, { to: t } = {}) {
183
- let n = C.get(e), r = n?.item ?? null, i = n?.app ?? null, a = t === void 0 ? i == null ? null : z(r, i) : t, o = m.activeWindow === e || h(e);
184
- r != null && i != null && T.set(r, {
225
+ let n = x.get(e), r = n?.item ?? null, i = n?.app ?? null, a = t === void 0 ? i == null ? null : V(r, i) : t, o = h.activeWindow === e || g(e);
226
+ r != null && i != null && C.set(r, {
185
227
  app: i,
186
- pin: s(p(e), x(), A())
228
+ pin: s(p(e), y(), O())
187
229
  });
188
230
  let c = e.hide({ to: a });
189
- r != null && u(E, r), i != null && !n?.palette && u(D, i);
231
+ r != null && u(w, r), i != null && !n?.palette && u(T, i);
190
232
  let l = () => {
191
- r != null && d(E, r), i != null && !n?.palette && d(D, i), F();
233
+ r != null && d(w, r), i != null && !n?.palette && d(T, i), N();
192
234
  };
193
- return c.then(l, l), ie(e), e.remove(), o && queueMicrotask(() => {
194
- let e = m.activeWindow;
195
- e ? Y(e) : B(r, i) || B(null, null);
235
+ return c.then(l, l), me(e), e.remove(), o && queueMicrotask(() => {
236
+ let e = h.activeWindow;
237
+ e ? X(e) : H(r, i) || H(null, null);
196
238
  }), c;
197
239
  },
198
- requestClose(e) {
199
- let t = C.get(e)?.close;
200
- t ? t(e) : $.close(e);
240
+ async requestClose(e, t = {}) {
241
+ let n = x.get(e)?.close;
242
+ return n ? await n(e, t) : $.close(e), !x.has(e);
243
+ },
244
+ async closeAll(e, t = {}) {
245
+ let n = $.windowsOf(e).filter((e) => !x.get(e)?.palette).reverse();
246
+ for (let e of n) if (x.has(e) && !await $.requestClose(e, t)) return !1;
247
+ return !0;
201
248
  },
202
249
  windowFor(e) {
203
- for (let [t, n] of C) if (n.item === e) return t;
250
+ for (let [t, n] of x) if (n.item === e) return t;
204
251
  return null;
205
252
  },
206
253
  windowsOf(e) {
207
- return m.stackingOrder.filter((t) => t instanceof n && C.get(t)?.app === e);
254
+ return h.stackingOrder.filter((t) => t instanceof n && x.get(t)?.app === e);
208
255
  },
209
256
  itemOf(e) {
210
- return e instanceof n ? C.get(e)?.item ?? null : null;
257
+ return e instanceof n ? x.get(e)?.item ?? null : null;
211
258
  },
212
259
  appOf(e) {
213
- return e instanceof n ? C.get(e)?.app ?? null : null;
260
+ if (e instanceof n) return x.get(e)?.app ?? null;
261
+ let t = ae(e);
262
+ return t ? R.get(t).app : null;
263
+ },
264
+ holdDialog(e, { app: t }) {
265
+ let n = R.get(e);
266
+ if (n) n.app = t;
267
+ else {
268
+ let n = new MutationObserver(B);
269
+ n.observe(e, {
270
+ attributes: !0,
271
+ attributeFilter: ["open"],
272
+ subtree: !0
273
+ }), R.set(e, {
274
+ app: t,
275
+ observer: n
276
+ });
277
+ }
278
+ h.contains(e) || h.append(e), B();
279
+ },
280
+ releaseDialog(e) {
281
+ let t = R.get(e);
282
+ t && (t.observer.disconnect(), R.delete(e), B());
283
+ },
284
+ dialogsOf(e) {
285
+ return [...R].filter(([, t]) => t.app === e).map(([e]) => e);
286
+ },
287
+ get asking() {
288
+ let e = z[z.length - 1];
289
+ return e ? R.get(e).app : null;
214
290
  },
215
291
  isPalette(e) {
216
- return e instanceof n && !!C.get(e)?.palette;
292
+ return e instanceof n && !!x.get(e)?.palette;
217
293
  },
218
294
  setItem(e, t) {
219
- let n = C.get(e);
220
- !n || n.item === t || (n.item = t, F());
295
+ let n = x.get(e);
296
+ !n || n.item === t || (n.item = t, N());
221
297
  },
222
298
  isOpen(e) {
223
- return E.has(e) || $.windowFor(e) !== null;
299
+ return w.has(e) || $.windowFor(e) !== null;
224
300
  },
225
301
  hasWindows(e) {
226
- if (D.has(e)) return !0;
227
- for (let [, t] of C) if (t.app === e && !t.palette) return !0;
302
+ if (T.has(e)) return !0;
303
+ for (let [, t] of x) if (t.app === e && !t.palette) return !0;
228
304
  return !1;
229
305
  },
230
306
  palettesChanged() {
231
- J();
307
+ ue();
232
308
  },
233
309
  write(e, t) {
234
- H(e, t), N();
310
+ W(e, t), j();
311
+ },
312
+ zoom(e) {
313
+ let t = K(e);
314
+ if (!t) return;
315
+ let n = p(e), r = U(e, t);
316
+ if (o(n, {
317
+ ...n,
318
+ ...r
319
+ })) {
320
+ let t = D.get(e);
321
+ D.delete(e);
322
+ let n = t ? J(e, t.pin, q(e, t.box)) : G(e);
323
+ n && W(e, n);
324
+ } else D.set(e, {
325
+ pin: s(n, y(), O()),
326
+ box: n
327
+ }), W(e, r);
328
+ j();
235
329
  },
236
330
  clamped(e, t) {
237
- return V(e, t);
331
+ return U(e, t);
238
332
  },
239
333
  placed(e) {
240
- return U(e);
334
+ return G(e);
241
335
  },
242
336
  pinOf(e) {
243
- return s(p(e), x(), A());
337
+ return s(p(e), y(), O());
244
338
  },
245
339
  fromPin(e, t, n) {
246
- return G(e, t, n);
340
+ return J(e, t, n);
247
341
  },
248
342
  setFrameBands(e) {
249
- k = { ...e }, O = /* @__PURE__ */ new WeakMap();
343
+ ie = { ...e }, E = /* @__PURE__ */ new WeakMap();
250
344
  },
251
345
  arrangeWith(e, t) {
252
- return w.set(e, t), N(), () => {
253
- w.get(e) === t && w.delete(e), N();
346
+ return S.set(e, t), j(), () => {
347
+ S.get(e) === t && S.delete(e), j();
254
348
  };
255
349
  },
256
350
  arrange() {
257
- M = !0;
351
+ A = !0;
258
352
  try {
259
- for (let e of w.values()) e.arrange();
260
- for (let e of C.keys()) {
261
- let t = U(e);
262
- t && H(e, t);
353
+ for (let e of S.values()) e.arrange();
354
+ for (let e of x.keys()) {
355
+ let t = G(e);
356
+ t && W(e, t);
263
357
  }
264
358
  } finally {
265
- M = !1;
359
+ A = !1;
266
360
  }
267
- N();
361
+ j();
268
362
  },
269
363
  arranged() {
270
- for (let e of w.values()) if (!e.arranged()) return !1;
271
- for (let e of C.keys()) {
272
- let t = U(e);
273
- if (t && !e.hidden && !te(e, t)) return !1;
364
+ for (let e of S.values()) if (!e.arranged()) return !1;
365
+ for (let e of x.keys()) {
366
+ let t = G(e);
367
+ if (t && !e.hidden && !se(e, t)) return !1;
274
368
  }
275
369
  return !0;
276
370
  },
277
371
  resized(e) {
278
- let t = x();
372
+ let t = y();
279
373
  if (e.width === t.width && e.height === t.height) return;
280
- let n = S(), r = {
374
+ let n = b(), r = {
281
375
  left: n.left,
282
376
  top: n.top,
283
377
  width: e.width - n.left,
284
378
  height: Math.max(0, e.height - n.top)
285
379
  };
286
- for (let n of C.keys()) ae(n, e, t, r);
287
- for (let n of [...I]) n(e, t);
288
- N();
380
+ for (let n of x.keys()) he(n, e, t, r);
381
+ for (let n of [...P]) n(e, t);
382
+ j();
289
383
  },
290
384
  snapshot() {
291
385
  let e = {};
292
- for (let [t, n] of T) e[t] = { ...n };
293
- let t = m.stackingOrder;
294
- for (let [n, r] of C) {
386
+ for (let [t, n] of C) e[t] = { ...n };
387
+ let t = h.stackingOrder;
388
+ for (let [n, r] of x) {
295
389
  if (r.item == null) continue;
296
- let i = s(p(n), x(), A());
390
+ let i = s(p(n), y(), O());
297
391
  e[r.item] = r.palette ? {
298
392
  app: r.app,
299
393
  pin: i
@@ -306,38 +400,45 @@ function _(m, _) {
306
400
  return e;
307
401
  },
308
402
  rememberedPin(e) {
309
- return T.get(e)?.pin ?? null;
403
+ return C.get(e)?.pin ?? null;
310
404
  },
311
405
  layoutChanged() {
312
- N();
406
+ j();
313
407
  },
314
408
  setHome(e, t) {
315
- return z = e, B = t, () => {
316
- z = () => null, B = () => !1;
409
+ return V = e, H = t, () => {
410
+ V = () => null, H = () => !1;
317
411
  };
318
412
  },
319
413
  onLayout(e) {
320
- return j.add(e), () => void j.delete(e);
414
+ return k.add(e), () => void k.delete(e);
321
415
  },
322
416
  onWindows(e) {
323
- return P.add(e), () => void P.delete(e);
417
+ return M.add(e), () => void M.delete(e);
324
418
  },
325
419
  onRaster(e) {
326
- return I.add(e), () => void I.delete(e);
420
+ return P.add(e), () => void P.delete(e);
327
421
  },
328
422
  beforeFront(e) {
329
- return L.add(e), () => void L.delete(e);
423
+ return F.add(e), () => void F.delete(e);
330
424
  },
331
425
  onFront(e) {
332
- return R.add(e), () => void R.delete(e);
426
+ return I.add(e), () => void I.delete(e);
427
+ },
428
+ onDialogs(e) {
429
+ return L.add(e), () => void L.delete(e);
333
430
  },
334
431
  dispose() {
335
432
  clearTimeout(Z);
336
- for (let e of y) e();
337
- j.clear(), P.clear(), I.clear(), L.clear(), R.clear(), w.clear(), C.clear();
433
+ for (let e of _) e();
434
+ k.clear(), M.clear(), P.clear(), F.clear(), I.clear(), L.clear();
435
+ for (let { observer: e } of R.values()) e.disconnect();
436
+ R.clear(), z = [], S.clear();
437
+ for (let e of x.keys()) e.remove();
438
+ x.clear();
338
439
  }
339
440
  };
340
- return K = q(m.activeWindow), $;
441
+ return Y = le(h.activeWindow), $;
341
442
  }
342
443
  //#endregion
343
- export { _ as createWindowManager, m as deepActiveElement, g as focusInto };
444
+ export { te as createWindowManager, h as deepActiveElement, m as desktopRendered, ee as focusInto };
@@ -87,6 +87,18 @@ export declare class VfTextControlBase extends VfShadowRoleControl {
87
87
  * wrapper once and can't drift on what turns the rule on.
88
88
  */
89
89
  protected get wellClass(): string;
90
+ /**
91
+ * The text as last committed: taken when the field gains focus, then at
92
+ * each commit. A commit that brings nothing new isn't announced, so the
93
+ * native `change` that follows a Return commit, or a step, is not a second
94
+ * one.
95
+ */
96
+ protected committed: string | null;
97
+ constructor();
98
+ /** The inner native control every field renders, tagged `vf-field`. */
99
+ protected get control(): HTMLInputElement | HTMLTextAreaElement | null;
100
+ /** Select all of the field's text, as a native field's `select()` does. */
101
+ select(): void;
90
102
  connectedCallback(): void;
91
103
  /**
92
104
  * Re-submit the value only when it (or the disabled state gating it) actually
@@ -117,6 +129,12 @@ export declare class VfTextControlBase extends VfShadowRoleControl {
117
129
  * disabled default button means no submission at all, as in HTML; a form
118
130
  * with no submit button falls back to the bare call, also as in HTML.
119
131
  *
132
+ * One departure: a submit `vf-button variant="default"`, the button with
133
+ * the ring, is the default button when the form has one, ahead of the
134
+ * first in tree order. A Cancel/OK row puts Cancel first, and Return
135
+ * should press the button the ring marks — the one a modal's own Return
136
+ * rule presses (`VfModalDialog`).
137
+ *
120
138
  * Returns whether a form owner took the press — true even when a disabled
121
139
  * default button meant no submission, since HTML gave the press to the form
122
140
  * either way. The callers cancel the keydown on true, so a modal shell
@@ -133,6 +151,17 @@ export declare class VfTextControlBase extends VfShadowRoleControl {
133
151
  protected emitValue(type: 'vf-input' | 'vf-change', detail?: Record<string, unknown>): void;
134
152
  /** Mirror the native control's value into `value` and announce a keystroke. */
135
153
  protected handleInput(event: Event): void;
136
- /** Mirror the native control's value into `value` and announce a commit. */
154
+ /** The committed form of typed text: as typed here; `vf-number-field` clamps and rounds it. */
155
+ protected committedText(raw: string): string;
156
+ /** Commit typed text: its committed form into `value`, announced unless it is what was last committed. */
157
+ protected commit(raw: string): void;
158
+ /** The native control's commit. */
137
159
  protected handleChange(event: Event): void;
160
+ /**
161
+ * A plain Return in a single-line field with a form: commit, then the
162
+ * form's implicit submission, the order a native input keeps (its `change`
163
+ * comes before the submission). The keydown is cancelled, so an enclosing
164
+ * modal does not route the same press to its default button as well.
165
+ */
166
+ protected submitOnEnter(event: KeyboardEvent): void;
138
167
  }