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