vintage-frames 0.19.0 → 0.20.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 (68) hide show
  1. package/README.md +1 -18
  2. package/custom-elements.json +247 -59
  3. package/dist/components/vf-menu-bar.d.ts +6 -4
  4. package/dist/components/vf-menu-bar.js +26 -56
  5. package/dist/components/vf-menu-item.d.ts +33 -5
  6. package/dist/components/vf-menu-item.js +128 -61
  7. package/dist/components/vf-menu.d.ts +35 -0
  8. package/dist/components/vf-menu.js +171 -111
  9. package/dist/glyphs.d.ts +6 -0
  10. package/dist/glyphs.js +18 -14
  11. package/dist/menu-navigation.d.ts +34 -0
  12. package/dist/menu-navigation.js +53 -0
  13. package/dist/menu-press.d.ts +25 -7
  14. package/dist/menu-press.js +78 -44
  15. package/dist/motion.d.ts +10 -0
  16. package/dist/text-control.d.ts +3 -3
  17. package/docs/SPEC.md +13 -9
  18. package/editor/vscode.html-custom-data.json +13 -8
  19. package/editor/web-types.json +51 -15
  20. package/package.json +4 -34
  21. package/dist/build/app-file.d.ts +0 -21
  22. package/dist/build/app-file.js +0 -42
  23. package/dist/build/box.d.ts +0 -57
  24. package/dist/build/box.js +0 -93
  25. package/dist/build/client.d.ts +0 -12
  26. package/dist/build/frame-picture.d.ts +0 -6
  27. package/dist/build/frame-picture.js +0 -4
  28. package/dist/build/frame.d.ts +0 -11
  29. package/dist/build/frame.js +0 -44
  30. package/dist/build/index.d.ts +0 -14
  31. package/dist/build/index.js +0 -4
  32. package/dist/build/plugins.d.ts +0 -41
  33. package/dist/build/plugins.js +0 -134
  34. package/dist/build/png.d.ts +0 -24
  35. package/dist/build/png.js +0 -116
  36. package/dist/shell/alert.d.ts +0 -40
  37. package/dist/shell/alert.js +0 -41
  38. package/dist/shell/app-file.d.ts +0 -115
  39. package/dist/shell/app-file.js +0 -189
  40. package/dist/shell/catalog.d.ts +0 -212
  41. package/dist/shell/catalog.js +0 -317
  42. package/dist/shell/clock.d.ts +0 -16
  43. package/dist/shell/clock.js +0 -36
  44. package/dist/shell/filing.d.ts +0 -39
  45. package/dist/shell/filing.js +0 -68
  46. package/dist/shell/finder.d.ts +0 -179
  47. package/dist/shell/finder.js +0 -662
  48. package/dist/shell/geometry.d.ts +0 -203
  49. package/dist/shell/geometry.js +0 -257
  50. package/dist/shell/index.d.ts +0 -30
  51. package/dist/shell/index.js +0 -12
  52. package/dist/shell/pure.d.ts +0 -13
  53. package/dist/shell/pure.js +0 -6
  54. package/dist/shell/shell.d.ts +0 -177
  55. package/dist/shell/shell.js +0 -272
  56. package/dist/shell/state.d.ts +0 -88
  57. package/dist/shell/state.js +0 -103
  58. package/dist/shell/storage.d.ts +0 -14
  59. package/dist/shell/storage.js +0 -41
  60. package/dist/shell/version.d.ts +0 -2
  61. package/dist/shell/version.js +0 -4
  62. package/dist/shell/windows.d.ts +0 -278
  63. package/dist/shell/windows.js +0 -447
  64. package/dist/styles/body-strike.d.ts +0 -12
  65. package/dist/styles/body-strike.js +0 -3961
  66. package/dist/styles/display-strike.d.ts +0 -12
  67. package/dist/styles/display-strike.js +0 -4343
  68. package/dist/styles/strike.d.ts +0 -30
@@ -1,447 +0,0 @@
1
- import { snapSys as e, systemPxQuantum as t } from "../scale.js";
2
- import { VfWindow as n } from "../components/vf-window.js";
3
- import "../index.js";
4
- import { cascadeFrom as r, cascadedBox as i, frameOf as a, nearBox as o, pinOf as s, pinTo as c, windowOrigin as l } from "./geometry.js";
5
- //#region src/shell/windows.ts
6
- var u = (e, t) => e.set(t, (e.get(t) ?? 0) + 1), d = (e, t) => {
7
- let n = e.get(t) ?? 1;
8
- n > 1 ? e.set(t, n - 1) : e.delete(t);
9
- }, f = (e, t, n) => Math.min(Math.max(e, t), n), p = (e) => ({
10
- left: e.left ?? 0,
11
- top: e.top ?? 0,
12
- width: e.width ?? 0,
13
- height: e.height ?? 0
14
- });
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() {
20
- let e = document.activeElement;
21
- for (; e?.shadowRoot?.activeElement;) e = e.shadowRoot.activeElement;
22
- return e;
23
- }
24
- var g = (e) => {
25
- let t = document.activeElement;
26
- return !!t && (t === e || e.contains(t));
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;
34
- return !1;
35
- }
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;
48
- return null;
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();
55
- }
56
- }, H = () => null, U = () => !1;
57
- function W(n, 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;
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)))));
60
- let p = u ?? n.width ?? 0, m = d ?? n.height ?? 0;
61
- return {
62
- left: f(e(r.left ?? i.left, n), i.left, Math.max(i.left, o(c - p))),
63
- top: f(e(r.top ?? s, n), s, Math.max(s, o(l - m))),
64
- width: u,
65
- height: d
66
- };
67
- }
68
- let G = (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), O.delete(t);
70
- }, K = (e) => {
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;
85
- if (n) return n(t);
86
- if (!e.resizable) return { size: {
87
- width: t.width,
88
- height: t.height
89
- } };
90
- let { minWidth: r, minHeight: i } = e.sizeLimits;
91
- return { min: {
92
- width: r,
93
- height: i
94
- } };
95
- }, oe = (e, t, n = J(e, p(e))) => W(e, c(t, x(), k(), n)), se = (e, t) => {
96
- let n = p(e);
97
- return [
98
- "left",
99
- "top",
100
- "width",
101
- "height"
102
- ].every((e) => {
103
- let r = t[e];
104
- return r == null || !Number.isFinite(r) || n[e] === r;
105
- });
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() {
111
- let e = !1;
112
- for (let [t, n] of C) {
113
- if (!n.palette) continue;
114
- let r = n.app === Y && n.palette();
115
- t.hidden !== !r && (t.hidden = !r, r && h.bringToFront(t), e = !0);
116
- }
117
- e && M();
118
- }
119
- let de = (e) => {
120
- let t = document.activeElement?.closest("vf-window");
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);
129
- if (t !== Y) {
130
- Y = t, ue();
131
- for (let e of [...L]) e(Y);
132
- }
133
- };
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);
139
- });
140
- let Z = 0, pe = (e) => {
141
- !(e.target instanceof n) || !C.has(e.target) || Z || (Z = window.setTimeout(() => {
142
- Z = 0, M();
143
- }, 0));
144
- };
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();
150
- });
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);
156
- if (u?.keep && o(l, u.keep(a))) {
157
- G(n, W(n, u.keep(S())));
158
- return;
159
- }
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);
169
- }
170
- O.set(n, {
171
- pin: h,
172
- ...p(n)
173
- });
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 $ = {
184
- get area() {
185
- return S();
186
- },
187
- get front() {
188
- return Y;
189
- },
190
- adopt(e, t) {
191
- let n = t.palette;
192
- if (C.set(e, {
193
- app: t.app,
194
- item: t.item ?? null,
195
- place: t.place ?? null,
196
- policy: t.policy ?? null,
197
- keep: t.keep ?? null,
198
- zoom: t.zoom ?? null,
199
- palette: n ? n === !0 ? () => !0 : n : null,
200
- close: t.close ?? null
201
- }), ge(e, t.pin ?? null), _e || Q.set(e, t.pin ?? null), n) {
202
- let t = C.get(e);
203
- e.hidden = !(t.app === Y && t.palette());
204
- }
205
- h.activeWindow === e && fe(e), n || P(), M();
206
- },
207
- open(e) {
208
- let t = e.item == null ? null : $.windowFor(e.item);
209
- if (t) return h.bringToFront(t), X(t), t;
210
- let n = e.create(), r = {
211
- width: n.width ?? 0,
212
- height: n.height ?? 0
213
- }, a = ce();
214
- h.append(n);
215
- let o = e.item ?? null;
216
- return $.adopt(n, {
217
- app: e.app,
218
- item: o,
219
- place: e.place ?? ((e) => i(e, r, l(e), a)),
220
- pin: o == null ? null : T.get(o)?.pin ?? te(o),
221
- policy: e.policy ?? null,
222
- keep: e.keep ?? null,
223
- zoom: e.zoom ?? null,
224
- close: e.close ?? null
225
- }), o != null && T.delete(o), h.bringToFront(n), e.from && n.show({ from: e.from }), X(n, !0), n;
226
- },
227
- close(e, { to: t } = {}) {
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, {
230
- app: i,
231
- pin: s(p(e), x(), k())
232
- });
233
- let c = e.hide({ to: a });
234
- r != null && u(E, r), i != null && !n?.palette && u(D, i);
235
- let l = () => {
236
- r != null && d(E, r), i != null && !n?.palette && d(D, i), P();
237
- };
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);
241
- }), c;
242
- },
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;
251
- },
252
- windowFor(e) {
253
- for (let [t, n] of C) if (n.item === e) return t;
254
- return null;
255
- },
256
- windowsOf(e) {
257
- return h.stackingOrder.filter((t) => t instanceof n && C.get(t)?.app === e);
258
- },
259
- itemOf(e) {
260
- return e instanceof n ? C.get(e)?.item ?? null : null;
261
- },
262
- appOf(e) {
263
- if (e instanceof n) return C.get(e)?.app ?? null;
264
- let t = ie(e);
265
- return t ? z.get(t).app : null;
266
- },
267
- holdDialog(e, { app: t }) {
268
- let n = z.get(e);
269
- if (n) n.app = t;
270
- else {
271
- let n = new MutationObserver(V);
272
- n.observe(e, {
273
- attributes: !0,
274
- attributeFilter: ["open"],
275
- subtree: !0
276
- }), z.set(e, {
277
- app: t,
278
- observer: n
279
- });
280
- }
281
- h.contains(e) || h.append(e), V();
282
- },
283
- releaseDialog(e) {
284
- let t = z.get(e);
285
- t && (t.observer.disconnect(), z.delete(e), V());
286
- },
287
- dialogsOf(e) {
288
- return [...z].filter(([, t]) => t.app === e).map(([e]) => e);
289
- },
290
- get asking() {
291
- let e = B[B.length - 1];
292
- return e ? z.get(e).app : null;
293
- },
294
- isPalette(e) {
295
- return e instanceof n && !!C.get(e)?.palette;
296
- },
297
- setItem(e, t) {
298
- let n = C.get(e);
299
- !n || n.item === t || (n.item = t, P());
300
- },
301
- isOpen(e) {
302
- return E.has(e) || $.windowFor(e) !== null;
303
- },
304
- hasWindows(e) {
305
- if (D.has(e)) return !0;
306
- for (let [, t] of C) if (t.app === e && !t.palette) return !0;
307
- return !1;
308
- },
309
- palettesChanged() {
310
- ue();
311
- },
312
- write(e, t) {
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();
332
- },
333
- clamped(e, t) {
334
- return W(e, t);
335
- },
336
- placed(e) {
337
- return K(e);
338
- },
339
- pinOf(e) {
340
- return s(p(e), x(), k());
341
- },
342
- fromPin(e, t, n) {
343
- return oe(e, t, n);
344
- },
345
- setFrameBands(e) {
346
- re = { ...e }, O = /* @__PURE__ */ new WeakMap();
347
- },
348
- arrangeWith(e, t) {
349
- return w.set(e, t), M(), () => {
350
- w.get(e) === t && w.delete(e), M();
351
- };
352
- },
353
- arrange() {
354
- j = !0;
355
- try {
356
- for (let e of w.values()) e.arrange();
357
- for (let e of C.keys()) {
358
- let t = K(e);
359
- t && G(e, t);
360
- }
361
- } finally {
362
- j = !1;
363
- }
364
- M();
365
- },
366
- arranged() {
367
- for (let e of w.values()) if (!e.arranged()) return !1;
368
- for (let e of C.keys()) {
369
- let t = K(e);
370
- if (t && !e.hidden && !se(e, t)) return !1;
371
- }
372
- return !0;
373
- },
374
- resized(e) {
375
- let t = x();
376
- if (e.width === t.width && e.height === t.height) return;
377
- let n = S(), r = {
378
- left: n.left,
379
- top: n.top,
380
- width: e.width - n.left,
381
- height: Math.max(0, e.height - n.top)
382
- };
383
- for (let n of C.keys()) he(n, e, t, r);
384
- for (let n of [...F]) n(e, t);
385
- M();
386
- },
387
- snapshot() {
388
- let e = {};
389
- for (let [t, n] of T) e[t] = { ...n };
390
- let t = h.stackingOrder;
391
- for (let [n, r] of C) {
392
- if (r.item == null) continue;
393
- let i = s(p(n), x(), k());
394
- e[r.item] = r.palette ? {
395
- app: r.app,
396
- pin: i
397
- } : {
398
- app: r.app,
399
- pin: i,
400
- z: t.indexOf(n)
401
- };
402
- }
403
- return e;
404
- },
405
- rememberedPin(e) {
406
- return T.get(e)?.pin ?? null;
407
- },
408
- layoutChanged() {
409
- M();
410
- },
411
- setHome(e, t) {
412
- return H = e, U = t, () => {
413
- H = () => null, U = () => !1;
414
- };
415
- },
416
- onLayout(e) {
417
- return A.add(e), () => void A.delete(e);
418
- },
419
- onWindows(e) {
420
- return N.add(e), () => void N.delete(e);
421
- },
422
- onRaster(e) {
423
- return F.add(e), () => void F.delete(e);
424
- },
425
- beforeFront(e) {
426
- return I.add(e), () => void I.delete(e);
427
- },
428
- onFront(e) {
429
- return L.add(e), () => void L.delete(e);
430
- },
431
- onDialogs(e) {
432
- return R.add(e), () => void R.delete(e);
433
- },
434
- dispose() {
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();
442
- }
443
- };
444
- return Y = le(h.activeWindow), $;
445
- }
446
- //#endregion
447
- export { v as createWindowManager, h as deepActiveElement, m as desktopRendered, ee as focusInto };
@@ -1,12 +0,0 @@
1
- /**
2
- * VF Body as data. GENERATED by fonts/manifest-to-font.py from
3
- * fonts/VF-Body.glyphs.txt: edit the manifest and rebuild, never this file.
4
- *
5
- * Each character's advance, placement and ink, in whole design px, for
6
- * drawing the kit's type without a browser. The ink is the kit's own
7
- * re-drawn strike in the style of Geneva 9pt, the design Susan Kare
8
- * created for Apple's original Macintosh, and the same artwork the face's
9
- * woff2 is built from (fonts/README.md).
10
- */
11
- import type { Strike } from './strike.js';
12
- export declare const VF_BODY_STRIKE: Strike;