vintage-frames 0.10.1 → 0.12.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.
- package/custom-elements.json +61 -17
- package/dist/components/vf-desktop.d.ts +5 -6
- package/dist/components/vf-desktop.js +22 -9
- package/dist/components/vf-option.d.ts +7 -2
- package/dist/components/vf-option.js +34 -16
- package/dist/components/vf-select.d.ts +19 -9
- package/dist/components/vf-select.js +98 -55
- package/dist/glyphs.d.ts +8 -0
- package/dist/glyphs.js +22 -14
- package/dist/index.d.ts +2 -1
- package/dist/index.js +41 -41
- package/dist/pixel-frame.d.ts +10 -8
- package/dist/pixel-frame.js +5 -5
- package/docs/SPEC.md +6 -4
- package/editor/vscode.html-custom-data.json +14 -4
- package/editor/web-types.json +26 -6
- package/package.json +1 -1
|
@@ -3,36 +3,31 @@ import { vfElement as n } from "../define.js";
|
|
|
3
3
|
import { ScaleController as r, sys as i } from "../scale.js";
|
|
4
4
|
import a from "../_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.js";
|
|
5
5
|
import { VfPositioned as o } from "../position.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
6
|
+
import { vfBodyDecls as s } from "../styles/recipes/body-face.js";
|
|
7
|
+
import { vfDisplay as c } from "../styles/recipes/display-face.js";
|
|
8
|
+
import { vfBase as l } from "../styles/recipes/host.js";
|
|
9
|
+
import { vfPanel as u } from "../styles/recipes/surface.js";
|
|
10
|
+
import { vfFocusUnderline as d } from "../styles/recipes/focus.js";
|
|
11
|
+
import { GridSnapController as f } from "../grid-snap.js";
|
|
12
|
+
import { DocumentListenersController as p } from "../document-listeners.js";
|
|
13
|
+
import { runSelectionBlink as m } from "../motion.js";
|
|
14
|
+
import { CARET_DOWN as h, CARET_DOWN_SMALL as g, CARET_UP as _, CARET_UP_SMALL as v, glyphSvg as y } from "../glyphs.js";
|
|
15
|
+
import { VfShadowRoleControl as b } from "../form-control.js";
|
|
16
|
+
import { FocusRuleController as x } from "../focus-modality.js";
|
|
17
|
+
import { VfOption as S } from "./vf-option.js";
|
|
18
|
+
import { clampScroll as C, ensureVisibleScroll as w, firstPickableRow as T, lastPickableRow as E, layoutClampedPopup as D } from "../popup-overflow.js";
|
|
19
|
+
import { TypeAheadBuffer as O } from "../type-ahead.js";
|
|
20
|
+
import { css as k, html as A, nothing as j } from "lit";
|
|
21
|
+
import { property as M, query as N, queryAssignedElements as P, state as F } from "lit/decorators.js";
|
|
22
|
+
import { classMap as I } from "lit/directives/class-map.js";
|
|
22
23
|
//#region src/components/vf-select.ts
|
|
23
|
-
var
|
|
24
|
-
static {
|
|
25
|
-
P = this;
|
|
26
|
-
}
|
|
27
|
-
static {
|
|
28
|
-
this.ITEM_HEIGHT = 16;
|
|
29
|
-
}
|
|
24
|
+
var L = class extends o(b) {
|
|
30
25
|
static {
|
|
31
26
|
this.styles = [
|
|
32
|
-
c,
|
|
33
|
-
s,
|
|
34
27
|
l,
|
|
35
|
-
|
|
28
|
+
c,
|
|
29
|
+
u,
|
|
30
|
+
k`
|
|
36
31
|
:host {
|
|
37
32
|
/* A popup menu is sized to its widest option — never stretched to fill
|
|
38
33
|
its container. fit-content holds that intrinsic width even inside a
|
|
@@ -42,6 +37,14 @@ var P, F = class extends o(_) {
|
|
|
42
37
|
display: inline-block;
|
|
43
38
|
width: fit-content;
|
|
44
39
|
}
|
|
40
|
+
/* The small pill restates the height token on the host, so the pill, the
|
|
41
|
+
arrow slots and the slotted options (which inherit it) all derive from
|
|
42
|
+
the one small height. A --vf-popup-height set on the element itself
|
|
43
|
+
still wins over :host. */
|
|
44
|
+
:host([size='small']) {
|
|
45
|
+
--vf-popup-height: var(--vf-popup-height-small, 12px);
|
|
46
|
+
${s}
|
|
47
|
+
}
|
|
45
48
|
.control {
|
|
46
49
|
/* Also the anchor the focus rule below hangs from. */
|
|
47
50
|
position: relative;
|
|
@@ -96,7 +99,7 @@ var P, F = class extends o(_) {
|
|
|
96
99
|
}
|
|
97
100
|
.control.vf-focus-rule::after {
|
|
98
101
|
--vf-focus-underline-offset: -4px;
|
|
99
|
-
${
|
|
102
|
+
${d}
|
|
100
103
|
left: calc(var(--vf-scale, 1) * -1px);
|
|
101
104
|
right: calc(var(--vf-scale, 1) * -1px);
|
|
102
105
|
}
|
|
@@ -121,6 +124,23 @@ var P, F = class extends o(_) {
|
|
|
121
124
|
overflow: hidden;
|
|
122
125
|
text-overflow: ellipsis;
|
|
123
126
|
}
|
|
127
|
+
/* A line box as tall as the small pill's content (10 rows) centers the
|
|
128
|
+
body face's 16px em with 9 rows above the baseline and 1 below, which
|
|
129
|
+
puts the second descender row on the border. An 8px line box leaves 8
|
|
130
|
+
above and 2 below for the descenders.
|
|
131
|
+
|
|
132
|
+
The em's 4px descent reaches 2 rows past those 2, and this box is a
|
|
133
|
+
scroll container (overflow: hidden, for the ellipsis): with the clip
|
|
134
|
+
ending at the content's last row, that inkless spill is 2px of
|
|
135
|
+
scrollable overflow a find-in-page could scroll. So the padding covers
|
|
136
|
+
all 4 rows below the baseline, and the negative margin hands the extra
|
|
137
|
+
2 back to layout. The clip now ends 2 rows below the content, on the
|
|
138
|
+
border and the shadow, where the face draws nothing. */
|
|
139
|
+
:host([size='small']) .value {
|
|
140
|
+
line-height: calc(var(--vf-scale, 1) * (var(--vf-popup-height, 12px) - 4px));
|
|
141
|
+
padding-bottom: calc(var(--vf-scale, 1) * 4px);
|
|
142
|
+
margin-bottom: calc(var(--vf-scale, 1) * -2px);
|
|
143
|
+
}
|
|
124
144
|
/* Sizer contributes width only: collapsed to zero height and clipped so it
|
|
125
145
|
never adds a row, but its widest line still drives the grid cell width. */
|
|
126
146
|
.sizer {
|
|
@@ -143,6 +163,17 @@ var P, F = class extends o(_) {
|
|
|
143
163
|
width: calc(var(--vf-scale, 1) * 11px);
|
|
144
164
|
height: calc(var(--vf-scale, 1) * 6px);
|
|
145
165
|
}
|
|
166
|
+
/* The small ▼ is 5 rows tall, which centers on a half row, so it is
|
|
167
|
+
pinned 3 rows down the 10-row content: 3 blank rows above it, 2 below,
|
|
168
|
+
its middle row on the middle row of the x-height (rows 3–7). */
|
|
169
|
+
:host([size='small']) .arrow {
|
|
170
|
+
align-self: flex-start;
|
|
171
|
+
padding-top: calc(var(--vf-scale, 1) * 3px);
|
|
172
|
+
}
|
|
173
|
+
:host([size='small']) .arrow svg {
|
|
174
|
+
width: calc(var(--vf-scale, 1) * 9px);
|
|
175
|
+
height: calc(var(--vf-scale, 1) * 5px);
|
|
176
|
+
}
|
|
146
177
|
/* Disabled: only the value label dims; the box, hard shadow and ▼ arrow
|
|
147
178
|
stay solid black (System 7 dims the label, not the control). */
|
|
148
179
|
:host([disabled]) .label,
|
|
@@ -226,6 +257,14 @@ var P, F = class extends o(_) {
|
|
|
226
257
|
width: calc(var(--vf-scale, 1) * 11px);
|
|
227
258
|
height: calc(var(--vf-scale, 1) * 6px);
|
|
228
259
|
}
|
|
260
|
+
/* The small caret in a 10px slot: 2 rows above it, 3 below (5 rows can't
|
|
261
|
+
center), and 14 in, which keeps the regular caret's center column. */
|
|
262
|
+
:host([size='small']) .arrow-slot svg {
|
|
263
|
+
left: calc(var(--vf-scale, 1) * 14px);
|
|
264
|
+
top: calc(var(--vf-scale, 1) * 2px);
|
|
265
|
+
width: calc(var(--vf-scale, 1) * 9px);
|
|
266
|
+
height: calc(var(--vf-scale, 1) * 5px);
|
|
267
|
+
}
|
|
229
268
|
`
|
|
230
269
|
];
|
|
231
270
|
}
|
|
@@ -242,7 +281,7 @@ var P, F = class extends o(_) {
|
|
|
242
281
|
return this.rowScroll < this.optionItems.length - this.visibleSlots;
|
|
243
282
|
}
|
|
244
283
|
constructor() {
|
|
245
|
-
super(), this.value = "", this.name = "", this.label = "", this.open = !1, this.cachedOptions = [], this.scale = new r(this), this.gridSnap = new
|
|
284
|
+
super(), this.value = "", this.name = "", this.size = "regular", this.label = "", this.open = !1, this.cachedOptions = [], this.scale = new r(this), this.gridSnap = new f(this), this.focusRule = new x(this), this.panelListeners = new p(this, () => [
|
|
246
285
|
[
|
|
247
286
|
document,
|
|
248
287
|
"pointerdown",
|
|
@@ -260,7 +299,7 @@ var P, F = class extends o(_) {
|
|
|
260
299
|
"resize",
|
|
261
300
|
this.handleWindowResize
|
|
262
301
|
]
|
|
263
|
-
]), this.pressListeners = new
|
|
302
|
+
]), this.pressListeners = new p(this, () => [
|
|
264
303
|
[
|
|
265
304
|
document,
|
|
266
305
|
"pointermove",
|
|
@@ -279,8 +318,8 @@ var P, F = class extends o(_) {
|
|
|
279
318
|
this.handlePressCancel,
|
|
280
319
|
!0
|
|
281
320
|
]
|
|
282
|
-
]), this.activeIndex = -1, this.rowScroll = 0, this.visibleSlots = 0, this.rowHeight = 0, this.arrowScroll = null, this.pressStartArrow = null, this.pressing = !1, this.pressOpenedPanel = !1, this.pressMoved = !1, this.pressStartOption = null, this.pressDownTime = 0, this.pressDownX = 0, this.pressDownY = 0, this.swallowClick = !1, this.blinking = !1, this.typeAhead = new
|
|
283
|
-
if (this.cachedOptions = this.assignedOptions ?? [], this.value === "") {
|
|
321
|
+
]), this.activeIndex = -1, this.rowScroll = 0, this.visibleSlots = 0, this.rowHeight = 0, this.arrowScroll = null, this.pressStartArrow = null, this.pressing = !1, this.pressOpenedPanel = !1, this.pressMoved = !1, this.pressStartOption = null, this.pressDownTime = 0, this.pressDownX = 0, this.pressDownY = 0, this.swallowClick = !1, this.blinking = !1, this.typeAhead = new O(), this.handleSlotChange = () => {
|
|
322
|
+
if (this.cachedOptions = this.assignedOptions ?? [], this.applySize(), this.value === "") {
|
|
284
323
|
let e = this.optionItems.find((e) => !e.disabled);
|
|
285
324
|
e && (this.value = this.optionValue(e));
|
|
286
325
|
}
|
|
@@ -407,7 +446,7 @@ var P, F = class extends o(_) {
|
|
|
407
446
|
this.controlEl?.focus(e);
|
|
408
447
|
}
|
|
409
448
|
updated(e) {
|
|
410
|
-
e.has("value") && this.applySelection(), (e.has("value") || e.has("disabled")) && this.syncFormValue(this.value), e.has("disabled") && this.disabled && this.open && this.closePanel(!1);
|
|
449
|
+
e.has("value") && this.applySelection(), (e.has("value") || e.has("disabled")) && this.syncFormValue(this.value), e.has("disabled") && this.disabled && this.open && this.closePanel(!1), e.has("size") && (this.applySize(), this.open && this.closePanel(!1));
|
|
411
450
|
}
|
|
412
451
|
formDisabledCallback(e) {
|
|
413
452
|
super.formDisabledCallback(e), this.syncFormValue(this.value), e && this.open && this.closePanel(!1);
|
|
@@ -424,6 +463,10 @@ var P, F = class extends o(_) {
|
|
|
424
463
|
applySelection() {
|
|
425
464
|
for (let e of this.optionItems) e.selected = this.optionValue(e) === this.value;
|
|
426
465
|
}
|
|
466
|
+
applySize() {
|
|
467
|
+
let e = this.size === "small" ? "small" : "regular";
|
|
468
|
+
for (let t of this.optionItems) t.size = e;
|
|
469
|
+
}
|
|
427
470
|
async openPanel() {
|
|
428
471
|
if (this.open || this.isDisabled) return;
|
|
429
472
|
this.open = !0, this.panelListeners.attach(), await this.updateComplete;
|
|
@@ -433,15 +476,15 @@ var P, F = class extends o(_) {
|
|
|
433
476
|
positionPanel(e) {
|
|
434
477
|
let t = this.controlEl, n = this.panelEl;
|
|
435
478
|
if (!t || !n) return;
|
|
436
|
-
let r = t.getBoundingClientRect(), a = this.optionItems[0]?.getBoundingClientRect()?.height ||
|
|
437
|
-
idealTop: r.top - e *
|
|
438
|
-
rowHeight:
|
|
439
|
-
border:
|
|
479
|
+
let r = t.getBoundingClientRect(), a = getComputedStyle(n), o = parseFloat(a.borderTopWidth) || 0, s = this.optionItems[0]?.getBoundingClientRect()?.height || r.height - 2 * o, c = (e) => i(parseFloat(a.getPropertyValue(e)) || 0, this), l = D({
|
|
480
|
+
idealTop: r.top - e * s,
|
|
481
|
+
rowHeight: s,
|
|
482
|
+
border: o,
|
|
440
483
|
rowCount: this.optionItems.length,
|
|
441
484
|
viewTop: c("--vf-popup-clamp-top"),
|
|
442
485
|
viewBottom: window.innerHeight - c("--vf-popup-clamp-bottom")
|
|
443
486
|
}), u = r.left;
|
|
444
|
-
n.style.minWidth = `${r.width}px`, n.style.top = `${l.panelTop}px`, n.style.left = `${u}px`, n.style.height = `${l.panelHeight}px`, this.rowHeight =
|
|
487
|
+
n.style.minWidth = `${r.width}px`, n.style.top = `${l.panelTop}px`, n.style.left = `${u}px`, n.style.height = `${l.panelHeight}px`, this.rowHeight = s, this.visibleSlots = l.visibleSlots, this.rowScroll = l.initialScroll, this.applyScroll();
|
|
445
488
|
}
|
|
446
489
|
closePanel(e) {
|
|
447
490
|
this.open && (this.open = !1, this.cancelBlink(), this.stopArrowScroll(), this.endPress(), this.clearActive(), this.typeAhead.reset(), this.panelListeners.detach(), e && this.controlEl?.focus());
|
|
@@ -451,11 +494,11 @@ var P, F = class extends o(_) {
|
|
|
451
494
|
this.rowsEl && (this.rowsEl.style.transform = e ? `translateY(${-e}px)` : ""), this.upArrowEl?.classList.toggle("shown", this.showUpArrow), this.downArrowEl?.classList.toggle("shown", this.showDownArrow);
|
|
452
495
|
}
|
|
453
496
|
revealRow(e) {
|
|
454
|
-
let t =
|
|
497
|
+
let t = w(e, this.rowScroll, this.optionItems.length, this.visibleSlots);
|
|
455
498
|
t !== this.rowScroll && (this.rowScroll = t, this.applyScroll());
|
|
456
499
|
}
|
|
457
500
|
stepArrowScroll(e) {
|
|
458
|
-
let t =
|
|
501
|
+
let t = C(this.rowScroll + e, this.rowScroll, this.optionItems.length, this.visibleSlots);
|
|
459
502
|
return t !== this.rowScroll && (this.rowScroll = t, this.applyScroll(), !0);
|
|
460
503
|
}
|
|
461
504
|
startArrowScroll(e) {
|
|
@@ -531,7 +574,7 @@ var P, F = class extends o(_) {
|
|
|
531
574
|
if (e.disabled || this.blinking) return;
|
|
532
575
|
let t = this.optionItems.indexOf(e);
|
|
533
576
|
this.setActive(t, !1), this.blinking = !0;
|
|
534
|
-
let n =
|
|
577
|
+
let n = m((t) => {
|
|
535
578
|
e.active = t;
|
|
536
579
|
}, () => {
|
|
537
580
|
this.commit(e);
|
|
@@ -547,7 +590,7 @@ var P, F = class extends o(_) {
|
|
|
547
590
|
this.value = r, e(this, "vf-change", { value: r }), t(this, "input"), t(this, "change");
|
|
548
591
|
}
|
|
549
592
|
optionFromEvent(e) {
|
|
550
|
-
return e.composedPath().find((e) => e instanceof
|
|
593
|
+
return e.composedPath().find((e) => e instanceof S);
|
|
551
594
|
}
|
|
552
595
|
endPress() {
|
|
553
596
|
this.pressing && (this.pressing = !1, this.pressStartOption = null, this.pressStartArrow = null, this.pressListeners.detach());
|
|
@@ -557,7 +600,7 @@ var P, F = class extends o(_) {
|
|
|
557
600
|
if (!this.open || !n) return null;
|
|
558
601
|
let r = n.getBoundingClientRect();
|
|
559
602
|
if (e < r.left || e >= r.right || t < r.top || t >= r.bottom) return null;
|
|
560
|
-
let i =
|
|
603
|
+
let i = T(this.rowScroll), a = E(this.rowScroll, this.optionItems.length, this.visibleSlots);
|
|
561
604
|
for (let n = i; n <= a; n += 1) {
|
|
562
605
|
let r = this.optionItems[n];
|
|
563
606
|
if (!r) continue;
|
|
@@ -580,10 +623,10 @@ var P, F = class extends o(_) {
|
|
|
580
623
|
this.selectOption(e);
|
|
581
624
|
}
|
|
582
625
|
render() {
|
|
583
|
-
let e = this.optionItems.find((e) => this.optionValue(e) === this.value), t = e ? (e.textContent ?? "").trim() : "", n = this.isDisabled;
|
|
584
|
-
return
|
|
626
|
+
let e = this.optionItems.find((e) => this.optionValue(e) === this.value), t = e ? (e.textContent ?? "").trim() : "", n = this.isDisabled, r = this.size === "small", i = r ? g : h, a = r ? v : _;
|
|
627
|
+
return A`
|
|
585
628
|
<div
|
|
586
|
-
class=${
|
|
629
|
+
class=${I({
|
|
587
630
|
control: !0,
|
|
588
631
|
"vf-snap": !0,
|
|
589
632
|
"vf-focus-rule": this.focusRule.marked && !this.open,
|
|
@@ -595,20 +638,20 @@ var P, F = class extends o(_) {
|
|
|
595
638
|
aria-expanded=${this.open ? "true" : "false"}
|
|
596
639
|
aria-disabled=${n ? "true" : "false"}
|
|
597
640
|
aria-controls="listbox"
|
|
598
|
-
aria-label=${this.label || this.hostLabel ||
|
|
641
|
+
aria-label=${this.label || this.hostLabel || j}
|
|
599
642
|
aria-describedby=${this.describedBy}
|
|
600
|
-
aria-required=${this.required ? "true" :
|
|
601
|
-
aria-invalid=${this.validity.valid ?
|
|
643
|
+
aria-required=${this.required ? "true" : j}
|
|
644
|
+
aria-invalid=${this.validity.valid ? j : "true"}
|
|
602
645
|
tabindex=${n ? "-1" : "0"}
|
|
603
646
|
>
|
|
604
647
|
<span class="label" part="label">
|
|
605
648
|
<span class="value">${t}</span>
|
|
606
649
|
<span class="sizer" aria-hidden="true">
|
|
607
|
-
${this.optionItems.map((e) =>
|
|
650
|
+
${this.optionItems.map((e) => A`<span>${(e.textContent ?? "").trim()}</span>`)}
|
|
608
651
|
</span>
|
|
609
652
|
</span>
|
|
610
653
|
<span class="arrow" part="arrow" aria-hidden="true"
|
|
611
|
-
>${
|
|
654
|
+
>${y(i, "caret")}</span
|
|
612
655
|
>
|
|
613
656
|
</div>
|
|
614
657
|
<div
|
|
@@ -616,7 +659,7 @@ var P, F = class extends o(_) {
|
|
|
616
659
|
class="panel vf-panel ${this.open ? "open" : ""}"
|
|
617
660
|
part="panel"
|
|
618
661
|
role="listbox"
|
|
619
|
-
aria-label=${this.label || this.hostLabel ||
|
|
662
|
+
aria-label=${this.label || this.hostLabel || j}
|
|
620
663
|
aria-hidden=${this.open ? "false" : "true"}
|
|
621
664
|
>
|
|
622
665
|
<!-- role="presentation" so the strip that carries the roll doesn't
|
|
@@ -636,7 +679,7 @@ var P, F = class extends o(_) {
|
|
|
636
679
|
@pointermove=${this.handleArrowEnter}
|
|
637
680
|
@pointerleave=${this.handleArrowLeave}
|
|
638
681
|
>
|
|
639
|
-
${
|
|
682
|
+
${y(a, "caret")}
|
|
640
683
|
</div>
|
|
641
684
|
<div
|
|
642
685
|
class="arrow-slot down"
|
|
@@ -646,13 +689,13 @@ var P, F = class extends o(_) {
|
|
|
646
689
|
@pointermove=${this.handleArrowEnter}
|
|
647
690
|
@pointerleave=${this.handleArrowLeave}
|
|
648
691
|
>
|
|
649
|
-
${
|
|
692
|
+
${y(i, "caret")}
|
|
650
693
|
</div>
|
|
651
694
|
</div>
|
|
652
695
|
${this.renderDescription()}
|
|
653
696
|
`;
|
|
654
697
|
}
|
|
655
698
|
};
|
|
656
|
-
a([
|
|
699
|
+
a([M()], L.prototype, "value", void 0), a([M({ reflect: !0 })], L.prototype, "name", void 0), a([M({ reflect: !0 })], L.prototype, "size", void 0), a([M()], L.prototype, "label", void 0), a([F()], L.prototype, "open", void 0), a([N(".control")], L.prototype, "controlEl", void 0), a([N(".panel")], L.prototype, "panelEl", void 0), a([N(".rows")], L.prototype, "rowsEl", void 0), a([N(".arrow-slot.up")], L.prototype, "upArrowEl", void 0), a([N(".arrow-slot.down")], L.prototype, "downArrowEl", void 0), a([P({ selector: "vf-option" })], L.prototype, "assignedOptions", void 0), a([F()], L.prototype, "cachedOptions", void 0), L = a([n("vf-select")], L);
|
|
657
700
|
//#endregion
|
|
658
|
-
export {
|
|
701
|
+
export { L as VfSelect };
|
package/dist/glyphs.d.ts
CHANGED
|
@@ -54,6 +54,14 @@ export declare const CARET_DOWN: Glyph;
|
|
|
54
54
|
* retrace both. Same synthesis convention as {@link STEPPER_UP_FILL}.
|
|
55
55
|
*/
|
|
56
56
|
export declare const CARET_UP: Glyph;
|
|
57
|
+
/**
|
|
58
|
+
* The small popup's ▼ (`vf-select size="small"`) — {@link CARET_DOWN} without
|
|
59
|
+
* its widest row: the same staircase, 9×5. Also the small panel's bottom
|
|
60
|
+
* scroll arrow, as the regular caret is the regular panel's.
|
|
61
|
+
*/
|
|
62
|
+
export declare const CARET_DOWN_SMALL: Glyph;
|
|
63
|
+
/** {@link CARET_DOWN_SMALL} mirrored vertically: the small panel's top scroll arrow. */
|
|
64
|
+
export declare const CARET_UP_SMALL: Glyph;
|
|
57
65
|
/**
|
|
58
66
|
* The "little arrows" stepper at rest — a rounded 1-bit frame enclosing hollow
|
|
59
67
|
* up/down arrows (`Little arrows.png`), used by `vf-number-field`.
|
package/dist/glyphs.js
CHANGED
|
@@ -33,59 +33,67 @@ var t = {
|
|
|
33
33
|
h: 6,
|
|
34
34
|
d: "M5 0h1v1h-1zM4 1h3v1h-3zM3 2h5v1h-5zM2 3h7v1h-7zM1 4h9v1h-9zM0 5h11v1h-11z"
|
|
35
35
|
}, l = {
|
|
36
|
+
w: 9,
|
|
37
|
+
h: 5,
|
|
38
|
+
d: "M0 0h9v1h-9zM1 1h7v1h-7zM2 2h5v1h-5zM3 3h3v1h-3zM4 4h1v1h-1z"
|
|
39
|
+
}, u = {
|
|
40
|
+
w: 9,
|
|
41
|
+
h: 5,
|
|
42
|
+
d: "M4 0h1v1h-1zM3 1h3v1h-3zM2 2h5v1h-5zM1 3h7v1h-7zM0 4h9v1h-9z"
|
|
43
|
+
}, d = {
|
|
36
44
|
w: 15,
|
|
37
45
|
h: 25,
|
|
38
46
|
d: "M2 0h11v1h-11zM1 1h1v1h-1zM13 1h1v1h-1zM0 2h1v1h-1zM14 2h1v1h-1zM0 3h1v1h-1zM7 3h1v1h-1zM14 3h1v1h-1zM0 4h1v1h-1zM6 4h1v1h-1zM8 4h1v1h-1zM14 4h1v1h-1zM0 5h1v1h-1zM5 5h1v1h-1zM9 5h1v1h-1zM14 5h1v1h-1zM0 6h1v1h-1zM4 6h1v1h-1zM10 6h1v1h-1zM14 6h1v1h-1zM0 7h1v1h-1zM3 7h3v1h-3zM9 7h3v1h-3zM14 7h1v1h-1zM0 8h1v1h-1zM5 8h1v1h-1zM9 8h1v1h-1zM14 8h1v1h-1zM0 9h1v1h-1zM5 9h1v1h-1zM9 9h1v1h-1zM14 9h1v1h-1zM0 10h1v1h-1zM5 10h5v1h-5zM14 10h1v1h-1zM0 11h1v1h-1zM14 11h1v1h-1zM0 12h1v1h-1zM14 12h1v1h-1zM0 13h1v1h-1zM14 13h1v1h-1zM0 14h1v1h-1zM5 14h5v1h-5zM14 14h1v1h-1zM0 15h1v1h-1zM5 15h1v1h-1zM9 15h1v1h-1zM14 15h1v1h-1zM0 16h1v1h-1zM5 16h1v1h-1zM9 16h1v1h-1zM14 16h1v1h-1zM0 17h1v1h-1zM3 17h3v1h-3zM9 17h3v1h-3zM14 17h1v1h-1zM0 18h1v1h-1zM4 18h1v1h-1zM10 18h1v1h-1zM14 18h1v1h-1zM0 19h1v1h-1zM5 19h1v1h-1zM9 19h1v1h-1zM14 19h1v1h-1zM0 20h1v1h-1zM6 20h1v1h-1zM8 20h1v1h-1zM14 20h1v1h-1zM0 21h1v1h-1zM7 21h1v1h-1zM14 21h1v1h-1zM0 22h1v1h-1zM14 22h1v1h-1zM1 23h1v1h-1zM13 23h1v1h-1zM2 24h11v1h-11z"
|
|
39
|
-
},
|
|
47
|
+
}, f = {
|
|
40
48
|
w: 11,
|
|
41
49
|
h: 12,
|
|
42
50
|
d: "M1 0h9v1h-9zM0 1h1v1h-1zM10 1h1v1h-1zM0 2h1v1h-1zM10 2h1v1h-1zM0 3h1v1h-1zM3 3h1v1h-1zM5 3h1v1h-1zM7 3h1v1h-1zM10 3h1v1h-1zM0 4h1v1h-1zM3 4h1v1h-1zM5 4h1v1h-1zM7 4h1v1h-1zM10 4h1v1h-1zM0 5h1v1h-1zM3 5h1v1h-1zM5 5h1v1h-1zM7 5h1v1h-1zM10 5h1v1h-1zM0 6h1v1h-1zM3 6h1v1h-1zM5 6h1v1h-1zM7 6h1v1h-1zM10 6h1v1h-1zM0 7h1v1h-1zM3 7h1v1h-1zM5 7h1v1h-1zM7 7h1v1h-1zM10 7h1v1h-1zM1 8h1v1h-1zM9 8h1v1h-1zM2 9h1v1h-1zM8 9h1v1h-1zM3 10h1v1h-1zM7 10h1v1h-1zM4 11h3v1h-3z"
|
|
43
|
-
},
|
|
51
|
+
}, p = {
|
|
44
52
|
w: 11,
|
|
45
53
|
h: 12,
|
|
46
54
|
d: "M1 0h9v1h-9zM0 1h11v1h-11zM0 2h11v1h-11zM0 3h11v1h-11zM0 4h11v1h-11zM0 5h11v1h-11zM0 6h11v1h-11zM0 7h11v1h-11zM1 8h9v1h-9zM2 9h7v1h-7zM3 10h5v1h-5zM4 11h3v1h-3z"
|
|
47
|
-
},
|
|
55
|
+
}, m = {
|
|
48
56
|
w: 15,
|
|
49
57
|
h: 25,
|
|
50
58
|
d: "M7 3h1v1h-1zM6 4h3v1h-3zM5 5h5v1h-5zM4 6h7v1h-7zM3 7h9v1h-9zM5 8h5v1h-5zM5 9h5v1h-5zM5 10h5v1h-5z"
|
|
51
|
-
},
|
|
59
|
+
}, h = {
|
|
52
60
|
w: 15,
|
|
53
61
|
h: 25,
|
|
54
62
|
d: "M5 14h5v1h-5zM5 15h5v1h-5zM5 16h5v1h-5zM3 17h9v1h-9zM4 18h7v1h-7zM5 19h5v1h-5zM6 20h3v1h-3zM7 21h1v1h-1z"
|
|
55
|
-
},
|
|
63
|
+
}, g = {
|
|
56
64
|
w: 16,
|
|
57
65
|
h: 16,
|
|
58
66
|
d: "M7 3h2v1h-2zM6 4h1v1h-1zM9 4h1v1h-1zM5 5h1v1h-1zM10 5h1v1h-1zM4 6h1v1h-1zM11 6h1v1h-1zM3 7h1v1h-1zM12 7h1v1h-1zM2 8h4v1h-4zM10 8h4v1h-4zM5 9h1v1h-1zM10 9h1v1h-1zM5 10h1v1h-1zM10 10h1v1h-1zM5 11h1v1h-1zM10 11h1v1h-1zM5 12h6v1h-6z"
|
|
59
|
-
},
|
|
67
|
+
}, _ = {
|
|
60
68
|
w: 16,
|
|
61
69
|
h: 16,
|
|
62
70
|
d: "M7 3h2v1h-2zM6 4h4v1h-4zM5 5h6v1h-6zM4 6h8v1h-8zM3 7h10v1h-10zM2 8h12v1h-12zM5 9h6v1h-6zM5 10h6v1h-6zM5 11h6v1h-6zM5 12h6v1h-6z"
|
|
63
|
-
},
|
|
71
|
+
}, v = {
|
|
64
72
|
w: 16,
|
|
65
73
|
h: 16,
|
|
66
74
|
d: "M5 3h6v1h-6zM5 4h1v1h-1zM10 4h1v1h-1zM5 5h1v1h-1zM10 5h1v1h-1zM5 6h1v1h-1zM10 6h1v1h-1zM2 7h4v1h-4zM10 7h4v1h-4zM3 8h1v1h-1zM12 8h1v1h-1zM4 9h1v1h-1zM11 9h1v1h-1zM5 10h1v1h-1zM10 10h1v1h-1zM6 11h1v1h-1zM9 11h1v1h-1zM7 12h2v1h-2z"
|
|
67
|
-
},
|
|
75
|
+
}, y = {
|
|
68
76
|
w: 16,
|
|
69
77
|
h: 16,
|
|
70
78
|
d: "M5 3h6v1h-6zM5 4h6v1h-6zM5 5h6v1h-6zM5 6h6v1h-6zM2 7h12v1h-12zM3 8h10v1h-10zM4 9h8v1h-8zM5 10h6v1h-6zM6 11h4v1h-4zM7 12h2v1h-2z"
|
|
71
|
-
},
|
|
79
|
+
}, b = {
|
|
72
80
|
w: 16,
|
|
73
81
|
h: 16,
|
|
74
82
|
d: "M8 2h1v1h-1zM7 3h2v1h-2zM6 4h1v1h-1zM8 4h1v1h-1zM5 5h1v1h-1zM8 5h5v1h-5zM4 6h1v1h-1zM12 6h1v1h-1zM3 7h1v1h-1zM12 7h1v1h-1zM3 8h1v1h-1zM12 8h1v1h-1zM4 9h1v1h-1zM12 9h1v1h-1zM5 10h1v1h-1zM8 10h5v1h-5zM6 11h1v1h-1zM8 11h1v1h-1zM7 12h2v1h-2zM8 13h1v1h-1z"
|
|
75
|
-
},
|
|
83
|
+
}, x = {
|
|
76
84
|
w: 16,
|
|
77
85
|
h: 16,
|
|
78
86
|
d: "M8 2h1v1h-1zM7 3h2v1h-2zM6 4h3v1h-3zM5 5h8v1h-8zM4 6h9v1h-9zM3 7h10v1h-10zM3 8h10v1h-10zM4 9h9v1h-9zM5 10h8v1h-8zM6 11h3v1h-3zM7 12h2v1h-2zM8 13h1v1h-1z"
|
|
79
|
-
},
|
|
87
|
+
}, S = {
|
|
80
88
|
w: 16,
|
|
81
89
|
h: 16,
|
|
82
90
|
d: "M7 2h1v1h-1zM7 3h2v1h-2zM7 4h1v1h-1zM9 4h1v1h-1zM3 5h5v1h-5zM10 5h1v1h-1zM3 6h1v1h-1zM11 6h1v1h-1zM3 7h1v1h-1zM12 7h1v1h-1zM3 8h1v1h-1zM12 8h1v1h-1zM3 9h1v1h-1zM11 9h1v1h-1zM3 10h5v1h-5zM10 10h1v1h-1zM7 11h1v1h-1zM9 11h1v1h-1zM7 12h2v1h-2zM7 13h1v1h-1z"
|
|
83
|
-
},
|
|
91
|
+
}, C = {
|
|
84
92
|
w: 16,
|
|
85
93
|
h: 16,
|
|
86
94
|
d: "M7 2h1v1h-1zM7 3h2v1h-2zM7 4h3v1h-3zM3 5h8v1h-8zM3 6h9v1h-9zM3 7h10v1h-10zM3 8h10v1h-10zM3 9h9v1h-9zM3 10h8v1h-8zM7 11h3v1h-3zM7 12h2v1h-2zM7 13h1v1h-1z"
|
|
87
95
|
};
|
|
88
|
-
function
|
|
96
|
+
function w(t, n) {
|
|
89
97
|
return e`<svg
|
|
90
98
|
class=${n}
|
|
91
99
|
viewBox="0 0 ${t.w} ${t.h}"
|
|
@@ -97,4 +105,4 @@ function S(t, n) {
|
|
|
97
105
|
</svg>`;
|
|
98
106
|
}
|
|
99
107
|
//#endregion
|
|
100
|
-
export { s as CARET_DOWN, c as CARET_UP, t as CHECKBOX_X, o as CHECKMARK, a as RADIO_DOT, n as RADIO_FACE, r as RADIO_RING, i as RADIO_RING_PRESSED,
|
|
108
|
+
export { s as CARET_DOWN, l as CARET_DOWN_SMALL, c as CARET_UP, u as CARET_UP_SMALL, t as CHECKBOX_X, o as CHECKMARK, a as RADIO_DOT, n as RADIO_FACE, r as RADIO_RING, i as RADIO_RING_PRESSED, v as SCROLL_ARROW_DOWN, y as SCROLL_ARROW_DOWN_FILL, b as SCROLL_ARROW_LEFT, x as SCROLL_ARROW_LEFT_FILL, S as SCROLL_ARROW_RIGHT, C as SCROLL_ARROW_RIGHT_FILL, g as SCROLL_ARROW_UP, _ as SCROLL_ARROW_UP_FILL, f as SLIDER_THUMB, p as SLIDER_THUMB_FACE, d as STEPPER, h as STEPPER_DOWN_FILL, m as STEPPER_UP_FILL, w as glyphSvg };
|
package/dist/index.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export { VfTextField } from './components/vf-text-field.js';
|
|
|
24
24
|
export { VfTextArea } from './components/vf-text-area.js';
|
|
25
25
|
export { VfNumberField } from './components/vf-number-field.js';
|
|
26
26
|
export { VfSelect } from './components/vf-select.js';
|
|
27
|
+
export type { VfSelectSize } from './components/vf-select.js';
|
|
27
28
|
export { VfOption } from './components/vf-option.js';
|
|
28
29
|
export { VfProgressBar } from './components/vf-progress-bar.js';
|
|
29
30
|
export { VfSlider } from './components/vf-slider.js';
|
|
@@ -125,7 +126,7 @@ export type { Pattern, PatternMotif, PatternName } from './patterns.js';
|
|
|
125
126
|
export { PatternFillController, vfPatternFill } from './pattern-fill.js';
|
|
126
127
|
export type { PatternFillOptions } from './pattern-fill.js';
|
|
127
128
|
/** Glyph sprites (`glyphSvg(CHECKMARK, 'check')`) and their pixel geometry. */
|
|
128
|
-
export { glyphSvg, CHECKBOX_X, RADIO_FACE, RADIO_RING, RADIO_RING_PRESSED, RADIO_DOT, CHECKMARK, CARET_DOWN, STEPPER, STEPPER_UP_FILL, STEPPER_DOWN_FILL, SLIDER_THUMB, SLIDER_THUMB_FACE, } from './glyphs.js';
|
|
129
|
+
export { glyphSvg, CHECKBOX_X, RADIO_FACE, RADIO_RING, RADIO_RING_PRESSED, RADIO_DOT, CHECKMARK, CARET_DOWN, CARET_DOWN_SMALL, STEPPER, STEPPER_UP_FILL, STEPPER_DOWN_FILL, SLIDER_THUMB, SLIDER_THUMB_FACE, } from './glyphs.js';
|
|
129
130
|
export type { Glyph } from './glyphs.js';
|
|
130
131
|
/** Pixel-stepped corner profiles and the clip-paths traced from them. */
|
|
131
132
|
export { steppedRectClip, steppedRingClip, steppedCornerClip, BUTTON_FRAME, BUTTON_FACE, RING_FRAME, RING_HOLE, RING_INSET, SCREEN_CORNER, } from './pixel-frame.js';
|
package/dist/index.js
CHANGED
|
@@ -32,44 +32,44 @@ import { VfSized as Ie } from "./size.js";
|
|
|
32
32
|
import { DragController as Le } from "./drag.js";
|
|
33
33
|
import { ScrollStateController as Re } from "./scroll-state.js";
|
|
34
34
|
import { BLINK_FLIPS as ze, BLINK_INTERVAL_MS as Be, PRESS_HOLD_MS as Ve, RENAME_DELAY_MS as He, WALK_BEAT_MS as Ue, WALK_STEP_MS as We, WALK_STEP_PX as Ge, prefersReducedMotion as Ke, runOutlineTravel as qe, runSelectionBlink as Je } from "./motion.js";
|
|
35
|
-
import { CARET_DOWN as Ye,
|
|
36
|
-
import { ScrollRailController as
|
|
37
|
-
import { VfScrollArea as
|
|
38
|
-
import { VfWindow as
|
|
39
|
-
import { VfModalDialog as
|
|
40
|
-
import { VfDialog as
|
|
41
|
-
import { VfSeparator as
|
|
42
|
-
import { VfFormControl as
|
|
43
|
-
import { VfButton as
|
|
44
|
-
import { VfButtonGroup as
|
|
45
|
-
import { VfSwatch as
|
|
46
|
-
import { VfToggleControl as
|
|
47
|
-
import { VfCheckbox as
|
|
48
|
-
import { VfRadio as
|
|
49
|
-
import { VfRadioGroup as
|
|
50
|
-
import { FocusRuleController as
|
|
51
|
-
import { VfTextControlBase as
|
|
52
|
-
import { VfTextField as
|
|
53
|
-
import { VfTextArea as
|
|
54
|
-
import { VfNumberField as
|
|
55
|
-
import { VfOption as
|
|
56
|
-
import { VfSelect as
|
|
57
|
-
import { VfProgressBar as
|
|
58
|
-
import { VfSlider as
|
|
59
|
-
import { VfLabel as
|
|
60
|
-
import { VfParagraph as
|
|
61
|
-
import { VfImg as
|
|
62
|
-
import { VfIcon as
|
|
63
|
-
import { VfIconField as
|
|
64
|
-
import { VfMenuBar as
|
|
65
|
-
import { VfMenu as
|
|
66
|
-
import { VfMenuItem as
|
|
67
|
-
import { VfList as
|
|
68
|
-
import { VfListItem as
|
|
69
|
-
import { VfFieldset as
|
|
70
|
-
import { VfGrid as
|
|
71
|
-
import { VfStack as
|
|
72
|
-
import { VfContainer as
|
|
73
|
-
import { CURSOR_ARROW as
|
|
74
|
-
import { applyCursor as
|
|
75
|
-
export { ze as BLINK_FLIPS, Be as BLINK_INTERVAL_MS, Ee as BUTTON_FACE, De as BUTTON_FRAME, Ye as CARET_DOWN, Xe as
|
|
35
|
+
import { CARET_DOWN as Ye, CARET_DOWN_SMALL as Xe, CHECKBOX_X as Ze, CHECKMARK as Qe, RADIO_DOT as $e, RADIO_FACE as et, RADIO_RING as tt, RADIO_RING_PRESSED as nt, SLIDER_THUMB as rt, SLIDER_THUMB_FACE as it, STEPPER as at, STEPPER_DOWN_FILL as ot, STEPPER_UP_FILL as st, glyphSvg as ct } from "./glyphs.js";
|
|
36
|
+
import { ScrollRailController as lt, renderScrollRail as ut } from "./scroll-rail.js";
|
|
37
|
+
import { VfScrollArea as dt } from "./components/vf-scroll-area.js";
|
|
38
|
+
import { VfWindow as ft } from "./components/vf-window.js";
|
|
39
|
+
import { VfModalDialog as pt, modalDialogStyles as mt } from "./modal-dialog.js";
|
|
40
|
+
import { VfDialog as ht } from "./components/vf-dialog.js";
|
|
41
|
+
import { VfSeparator as gt } from "./components/vf-separator.js";
|
|
42
|
+
import { VfFormControl as _t } from "./form-control.js";
|
|
43
|
+
import { VfButton as vt } from "./components/vf-button.js";
|
|
44
|
+
import { VfButtonGroup as yt } from "./components/vf-button-group.js";
|
|
45
|
+
import { VfSwatch as bt } from "./components/vf-swatch.js";
|
|
46
|
+
import { VfToggleControl as xt } from "./toggle-control.js";
|
|
47
|
+
import { VfCheckbox as St } from "./components/vf-checkbox.js";
|
|
48
|
+
import { VfRadio as Ct } from "./components/vf-radio.js";
|
|
49
|
+
import { VfRadioGroup as wt } from "./components/vf-radio-group.js";
|
|
50
|
+
import { FocusRuleController as Tt, focusModality as Et, trackFocusModality as Dt } from "./focus-modality.js";
|
|
51
|
+
import { VfTextControlBase as Ot } from "./text-control.js";
|
|
52
|
+
import { VfTextField as kt } from "./components/vf-text-field.js";
|
|
53
|
+
import { VfTextArea as At } from "./components/vf-text-area.js";
|
|
54
|
+
import { VfNumberField as jt } from "./components/vf-number-field.js";
|
|
55
|
+
import { VfOption as Mt } from "./components/vf-option.js";
|
|
56
|
+
import { VfSelect as Nt } from "./components/vf-select.js";
|
|
57
|
+
import { VfProgressBar as Pt } from "./components/vf-progress-bar.js";
|
|
58
|
+
import { VfSlider as Ft } from "./components/vf-slider.js";
|
|
59
|
+
import { VfLabel as It } from "./components/vf-label.js";
|
|
60
|
+
import { VfParagraph as Lt } from "./components/vf-paragraph.js";
|
|
61
|
+
import { VfImg as Rt } from "./components/vf-img.js";
|
|
62
|
+
import { VfIcon as zt } from "./components/vf-icon.js";
|
|
63
|
+
import { VfIconField as Bt } from "./components/vf-icon-field.js";
|
|
64
|
+
import { VfMenuBar as Vt } from "./components/vf-menu-bar.js";
|
|
65
|
+
import { VfMenu as Ht } from "./components/vf-menu.js";
|
|
66
|
+
import { VfMenuItem as Ut } from "./components/vf-menu-item.js";
|
|
67
|
+
import { VfList as Wt } from "./components/vf-list.js";
|
|
68
|
+
import { VfListItem as Gt } from "./components/vf-list-item.js";
|
|
69
|
+
import { VfFieldset as Kt } from "./components/vf-fieldset.js";
|
|
70
|
+
import { VfGrid as qt } from "./components/vf-grid.js";
|
|
71
|
+
import { VfStack as Jt } from "./components/vf-stack.js";
|
|
72
|
+
import { VfContainer as Yt } from "./components/vf-container.js";
|
|
73
|
+
import { CURSOR_ARROW as Xt, CURSOR_CROSSHAIR as Zt, CURSOR_I_BEAM as Qt, CURSOR_WAIT as $t } from "./cursor-art.js";
|
|
74
|
+
import { applyCursor as en } from "./cursor.js";
|
|
75
|
+
export { ze as BLINK_FLIPS, Be as BLINK_INTERVAL_MS, Ee as BUTTON_FACE, De as BUTTON_FRAME, Ye as CARET_DOWN, Xe as CARET_DOWN_SMALL, Ze as CHECKBOX_X, Qe as CHECKMARK, r as CLASSIC_DPI, i as CSS_REFERENCE_DPI, Xt as CURSOR_ARROW, Zt as CURSOR_CROSSHAIR, Qt as CURSOR_I_BEAM, $t as CURSOR_WAIT, Te as DocumentListenersController, Le as DragController, Tt as FocusRuleController, Ce as GridSnapController, G as PATTERNS, K as PATTERN_NAMES, q as PATTERN_SIZE, D as PIXEL_GRID_METRICS, Ve as PRESS_HOLD_MS, xe as PatternFillController, T as PlacementController, $e as RADIO_DOT, et as RADIO_FACE, tt as RADIO_RING, nt as RADIO_RING_PRESSED, He as RENAME_DELAY_MS, Oe as RING_FRAME, ke as RING_HOLE, Ae as RING_INSET, ie as RULE_EDGES, je as SCREEN_CORNER, rt as SLIDER_THUMB, it as SLIDER_THUMB_FACE, at as STEPPER, ot as STEPPER_DOWN_FILL, st as STEPPER_UP_FILL, a as SYSTEM_PX_IN_CSS_PX, d as ScaleController, lt as ScrollRailController, Re as ScrollStateController, R as TILE_LATTICE, ge as TileRasterCache, be as TrackWidthController, k as VF_BODY_FAMILY, M as VF_DISPLAY_FAMILY, vt as VfButton, yt as VfButtonGroup, St as VfCheckbox, Yt as VfContainer, Fe as VfDesktop, ht as VfDialog, Kt as VfFieldset, _t as VfFormControl, qt as VfGrid, zt as VfIcon, Bt as VfIconField, Rt as VfImg, It as VfLabel, Wt as VfList, Gt as VfListItem, Ht as VfMenu, Vt as VfMenuBar, Ut as VfMenuItem, pt as VfModalDialog, jt as VfNumberField, Mt as VfOption, Lt as VfParagraph, E as VfPositioned, Pt as VfProgressBar, Ct as VfRadio, wt as VfRadioGroup, dt as VfScrollArea, Nt as VfSelect, gt as VfSeparator, Ie as VfSized, Ft as VfSlider, Jt as VfStack, bt as VfSwatch, At as VfTextArea, Ot as VfTextControlBase, kt as VfTextField, xt as VfToggleControl, ft as VfWindow, Ue as WALK_BEAT_MS, We as WALK_STEP_MS, Ge as WALK_STEP_PX, en as applyCursor, f as applyScale, t as defineElement, o as devicePxPerSystemPx, p as effectiveScale, e as emit, Et as focusModality, m as getScale, s as getZoom, ct as glyphSvg, mt as modalDialogStyles, h as onScaleChange, c as onZoomChange, J as parsePattern, ae as parseRule, Y as patternHex, X as patternMotif, _e as patternOverride, Z as patternRects, Ke as prefersReducedMotion, A as registerBodyFace, N as registerDisplayFace, O as registerEmbeddedFont, ut as renderScrollRail, we as requestGridSnap, l as resetZoomBaseline, oe as ruleClasses, qe as runOutlineTravel, Je as runSelectionBlink, g as snapSys, _ as snapToDevicePx, v as snapToSystemPx, Me as steppedCornerClip, Ne as steppedRectClip, Pe as steppedRingClip, y as sys, b as sysLength, x as sysLengths, S as systemPxQuantum, ve as tileGrid, z as tileImage, B as tileRaster, V as tileRects, H as tileSpan, C as toSys, w as toSysExact, Dt as trackFocusModality, u as truePixelRatio, I as vfBase, j as vfBodyDecls, te as vfChromeFrame, P as vfDisplay, F as vfDisplayDecls, Q as vfDots, n as vfElement, me as vfField, ue as vfFocus, de as vfFocusRing, fe as vfFocusUnderline, ee as vfHardShadowDecls, ne as vfModalFrame, re as vfPanel, Se as vfPatternFill, se as vfRule, he as vfScrollRail, L as vfStaticText, $ as vfStripes, ye as vfTileGrid, U as vfTileMaskSize, W as vfTileSize, ce as vfTitleBar, pe as vfToggle, le as vfWindowWidgets };
|
package/dist/pixel-frame.d.ts
CHANGED
|
@@ -69,7 +69,8 @@ export declare const RING_INSET = 4;
|
|
|
69
69
|
/**
|
|
70
70
|
* The screen-corner mask: per-row width (system px) of the black staircase a
|
|
71
71
|
* compact Mac's ROM painted over the rounded corners of its CRT — what makes
|
|
72
|
-
* the System 7 menu bar's top corners read as rounded
|
|
72
|
+
* the System 7 menu bar's top corners read as rounded, and what a bezeled
|
|
73
|
+
* `vf-desktop` paints on all four screen corners. Traced from a 1x
|
|
73
74
|
* screen capture (5×5 corner crop): y0 run 5, y1 3, y2 2, y3–y4 1. The same
|
|
74
75
|
* radius-5 staircase as {@link RING_FRAME}'s corner — QuickDraw had one
|
|
75
76
|
* vocabulary for round corners — but the opposite *object*: this is the ink
|
|
@@ -80,14 +81,15 @@ export declare const SCREEN_CORNER: readonly number[];
|
|
|
80
81
|
/** Compile a profile into a stepped `polygon()` clip-path value. */
|
|
81
82
|
export declare const steppedRectClip: (p: SteppedProfile) => string;
|
|
82
83
|
/**
|
|
83
|
-
* Compile a corner-mask run list into the ink polygon for one
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* mirrors the staircase (via `100% - …`) for
|
|
87
|
-
* element `runs[0]` wide × `runs.length`
|
|
88
|
-
* corner, and let its `background`
|
|
84
|
+
* Compile a corner-mask run list into the ink polygon for one corner — the
|
|
85
|
+
* corner box minus the rounded silhouette, i.e. the region the screen mask
|
|
86
|
+
* blacked out. Runs are the mask's per-row width, the row on the box's edge
|
|
87
|
+
* first; `side` mirrors the staircase (via `100% - …`) for a right corner,
|
|
88
|
+
* `edge` for a bottom one. Clip an element `runs[0]` wide × `runs.length`
|
|
89
|
+
* tall (system px), anchored into its corner, and let its `background`
|
|
90
|
+
* supply the ink.
|
|
89
91
|
*/
|
|
90
|
-
export declare const steppedCornerClip: (runs: readonly number[], side: "left" | "right") => string;
|
|
92
|
+
export declare const steppedCornerClip: (runs: readonly number[], side: "left" | "right", edge?: "top" | "bottom") => string;
|
|
91
93
|
/**
|
|
92
94
|
* Compile an outer profile and a hole profile into a ring (a stepped donut).
|
|
93
95
|
*
|
package/dist/pixel-frame.js
CHANGED
|
@@ -55,13 +55,13 @@ var e = {
|
|
|
55
55
|
for (let e of n) i.push(`${o(e.from)} ${s(e.y)}`, `${o(e.to)} ${s(e.y)}`);
|
|
56
56
|
for (let e of r) i.push(`${o(e.to)} ${o(e.y)}`, `${o(e.from)} ${o(e.y)}`);
|
|
57
57
|
return i;
|
|
58
|
-
}, u = (e) => `polygon(${l(e).join(", ")})`, d = (e, t) => {
|
|
59
|
-
let
|
|
58
|
+
}, u = (e) => `polygon(${l(e).join(", ")})`, d = (e, t, n = "top") => {
|
|
59
|
+
let r = t === "left" ? o : s, i = n === "top" ? o : s, a = e[0] ?? 0, c = [`${r(0)} ${i(0)}`, `${r(a)} ${i(0)}`];
|
|
60
60
|
for (let t = 1; t <= e.length; t++) {
|
|
61
|
-
let
|
|
62
|
-
|
|
61
|
+
let n = e[t] ?? 0;
|
|
62
|
+
n !== a && (c.push(`${r(a)} ${i(t)}`, `${r(n)} ${i(t)}`), a = n);
|
|
63
63
|
}
|
|
64
|
-
return `polygon(${
|
|
64
|
+
return `polygon(${c.join(", ")})`;
|
|
65
65
|
}, f = (e, t) => {
|
|
66
66
|
let n = l(e), r = l(t), i = `50% ${o(e.start)}`, a = `50% ${o(t.start)}`, s = [...n.slice(1), n[0]], c = [r[0], ...r.slice(1).reverse()];
|
|
67
67
|
return `polygon(evenodd, ${[
|