gesso-core 0.4.1 → 0.4.2
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/CHANGELOG.md +33 -0
- package/dist/{CanvasSurface-CaNWsAlm.js → CanvasSurface-BMOmE_dD.js} +144 -33
- package/dist/CanvasSurface-BMOmE_dD.js.map +1 -0
- package/dist/{index-CfUSbphd.d.ts → index-BiN3WdTh.d.ts} +74 -13
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +5 -7
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
- package/dist/CanvasSurface-CaNWsAlm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# gesso-core
|
|
2
2
|
|
|
3
|
+
## 0.4.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d27e076: **The wheel scrolls an editable that overflows.** A multiline field with a fixed
|
|
8
|
+
height, or an unwrapped one narrower than its line, followed the caret and
|
|
9
|
+
nothing else: a wheel over it did nothing. It now scrolls the field's text on
|
|
10
|
+
either axis, clamped where the caret-follow offset is and without moving the
|
|
11
|
+
caret, and a wheel the field has no room for chains to the scroll container
|
|
12
|
+
around it, as one from a scroll container's end does.
|
|
13
|
+
|
|
14
|
+
A multiline field also shows the overlay scrollbar a scroll container does,
|
|
15
|
+
fading when idle, revealed by hovering its edge, and draggable once it shows.
|
|
16
|
+
While hidden it takes no presses, so a click at the end of a line still places
|
|
17
|
+
the caret. A single-line field draws none.
|
|
18
|
+
|
|
19
|
+
`scrollRange(record, axis)` is the furthest a record can scroll, the one answer
|
|
20
|
+
the layout engine's clamp, the scrollbars and the scroll sinks now all read.
|
|
21
|
+
|
|
22
|
+
- d6c52da: **`scrollWith`: a container that scrolls in step with another node.** Binding a
|
|
23
|
+
container's `scrollY` to what `scrollPosition` reports leaves it a frame behind,
|
|
24
|
+
because the report arrives after the frame is laid out. A line-number gutter
|
|
25
|
+
beside a field, or a row header beside a grid, has to line up on every frame.
|
|
26
|
+
`scrollWith` names the node to follow and `scrollWithAxis` the axes (`both` by
|
|
27
|
+
default); the follower takes the leader's effective offset in the same layout
|
|
28
|
+
pass that settles it, whatever moved the leader. It ignores its own offset on a
|
|
29
|
+
followed axis, shows no scrollbar, and passes a wheel over it to the leader. An
|
|
30
|
+
`overflow="hidden"` box that follows is scrolled all the same, as script scrolls
|
|
31
|
+
one in CSS.
|
|
32
|
+
|
|
33
|
+
`scrollPosition` on an `<editabletext>` reports how far the field has scrolled
|
|
34
|
+
its own text, from the wheel, its scrollbar, the caret or a clamp.
|
|
35
|
+
|
|
3
36
|
## 0.4.1
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
|
@@ -4519,6 +4519,41 @@ const UiProperties = {
|
|
|
4519
4519
|
affects: T
|
|
4520
4520
|
}),
|
|
4521
4521
|
/**
|
|
4522
|
+
* Another node whose scroll offset this scroll container takes, on
|
|
4523
|
+
* the axes `scrollWithAxis` names: a line-number gutter beside an
|
|
4524
|
+
* editable's text, a spreadsheet's row header beside its grid.
|
|
4525
|
+
*
|
|
4526
|
+
* Taken in the same layout pass that settles the other node's
|
|
4527
|
+
* offset, so the two are painted in step on every frame, whatever
|
|
4528
|
+
* scrolled the other one — a wheel, a scrollbar, the caret, a clamp
|
|
4529
|
+
* after text was deleted. Binding `scrollY` to what `scrollPosition`
|
|
4530
|
+
* reports cannot do that: the report arrives after the frame is laid
|
|
4531
|
+
* out, and the follower is a frame behind.
|
|
4532
|
+
*
|
|
4533
|
+
* The follower's own `scrollX`/`scrollY` are ignored on a followed
|
|
4534
|
+
* axis, it shows no scrollbars, and a wheel over it scrolls the node
|
|
4535
|
+
* it follows. The other node may be any scroll container or an
|
|
4536
|
+
* editable, which scrolls its own text; the offset is clamped to the
|
|
4537
|
+
* follower's own range, so give it content as tall as the text.
|
|
4538
|
+
*
|
|
4539
|
+
* The follower may be `overflow: 'hidden'`, which is otherwise never
|
|
4540
|
+
* scrolled: following makes it scrolled, and nothing but the leader
|
|
4541
|
+
* moves it.
|
|
4542
|
+
*/
|
|
4543
|
+
scrollWith: defineProperty({
|
|
4544
|
+
name: "scrollWith",
|
|
4545
|
+
defaultValue: void 0,
|
|
4546
|
+
inherited: false,
|
|
4547
|
+
affects: 36
|
|
4548
|
+
}),
|
|
4549
|
+
/** Which axes `scrollWith` follows: 'both' (default), 'x' or 'y'. */
|
|
4550
|
+
scrollWithAxis: defineProperty({
|
|
4551
|
+
name: "scrollWithAxis",
|
|
4552
|
+
defaultValue: void 0,
|
|
4553
|
+
inherited: false,
|
|
4554
|
+
affects: T
|
|
4555
|
+
}),
|
|
4556
|
+
/**
|
|
4522
4557
|
* What happens to a wheel delta this node cannot use.
|
|
4523
4558
|
*
|
|
4524
4559
|
* Named after the CSS property it means the same thing as.
|
|
@@ -8641,6 +8676,30 @@ const SCROLLBAR_MIN_THUMB = 24;
|
|
|
8641
8676
|
/** Distance from the end edge within which the pointer reveals the bar. */
|
|
8642
8677
|
const SCROLLBAR_HOVER_ZONE = 16;
|
|
8643
8678
|
/**
|
|
8679
|
+
* The node a `scrollWith` container follows, or null for one that
|
|
8680
|
+
* scrolls on its own. A follower has no scrollbar of its own, and what
|
|
8681
|
+
* would scroll it scrolls this instead.
|
|
8682
|
+
*/
|
|
8683
|
+
function scrollLeaderOf(node) {
|
|
8684
|
+
const leader = node.properties.get("scrollWith");
|
|
8685
|
+
return leader !== void 0 && leader !== null && leader !== node ? leader : null;
|
|
8686
|
+
}
|
|
8687
|
+
/**
|
|
8688
|
+
* The furthest a record's content can be scrolled along an axis.
|
|
8689
|
+
*
|
|
8690
|
+
* The one answer the layout engine's clamp, the scrollbars and the
|
|
8691
|
+
* scroll sinks all read, so a wheel stops exactly where the caret
|
|
8692
|
+
* would. A field may go one caret width past its text, so that a
|
|
8693
|
+
* caret at the very end is inside the box and not on the clipped
|
|
8694
|
+
* edge; a field wide enough for its text gets no allowance, or the
|
|
8695
|
+
* line would shift by a pixel the moment the caret reached the end.
|
|
8696
|
+
*/
|
|
8697
|
+
function scrollRange(rec, axis) {
|
|
8698
|
+
const overflow = axis === "y" ? rec.contentHeight - rec.height : rec.contentWidth - rec.width;
|
|
8699
|
+
if (!(overflow > 0)) return 0;
|
|
8700
|
+
return rec.scrollsText ? overflow + 1 : overflow;
|
|
8701
|
+
}
|
|
8702
|
+
/**
|
|
8644
8703
|
* The scrollbars a scroll container shows: one per axis whose content
|
|
8645
8704
|
* overflows. Renderers draw exactly these rectangles and the hit
|
|
8646
8705
|
* tester grabs them, so what is seen is what is dragged.
|
|
@@ -8661,7 +8720,7 @@ function thumbFor(rec, axis) {
|
|
|
8661
8720
|
const track = viewport - 4;
|
|
8662
8721
|
const length = Math.min(track, Math.max(24, track * viewport / content));
|
|
8663
8722
|
const travel = Math.max(0, track - length);
|
|
8664
|
-
const maxScroll =
|
|
8723
|
+
const maxScroll = scrollRange(rec, axis);
|
|
8665
8724
|
const offset = axis === "y" ? rec.scrollY : rec.scrollX;
|
|
8666
8725
|
const along = 2 + (maxScroll > 0 ? travel * offset / maxScroll : 0);
|
|
8667
8726
|
return {
|
|
@@ -8981,7 +9040,7 @@ var UiHitTester = class {
|
|
|
8981
9040
|
const py = this.point.y - rec.stickyOffsetY;
|
|
8982
9041
|
if (rec.clips) {
|
|
8983
9042
|
if (px < rec.x || px >= rec.x + rec.width || py < rec.y || py >= rec.y + rec.height) return false;
|
|
8984
|
-
if (rec.scrollable && this.hitScrollbar(node, rec, px, py)) return true;
|
|
9043
|
+
if ((rec.scrollable || rec.textScrollbars) && scrollLeaderOf(node) === null && this.hitScrollbar(node, rec, px, py)) return true;
|
|
8985
9044
|
if (this.zoneOnly) {
|
|
8986
9045
|
const shiftX = rec.scrollX;
|
|
8987
9046
|
const shiftY = rec.scrollY;
|
|
@@ -9056,8 +9115,7 @@ var UiHitTester = class {
|
|
|
9056
9115
|
}
|
|
9057
9116
|
}
|
|
9058
9117
|
if (bar === null) return false;
|
|
9059
|
-
|
|
9060
|
-
if (!onThumb && !visible && !this.zoneOnly) return false;
|
|
9118
|
+
if (!(rec.scrollbarVisibleUntil > (typeof performance !== "undefined" ? performance.now() : Date.now())) && !this.zoneOnly && (!onThumb || !rec.scrollable)) return false;
|
|
9061
9119
|
this.recordHit(node, rec, px, py);
|
|
9062
9120
|
this.result.scrollbar = {
|
|
9063
9121
|
axis,
|
|
@@ -10114,7 +10172,8 @@ var UiWheelController = class {
|
|
|
10114
10172
|
let left = false;
|
|
10115
10173
|
let right = false;
|
|
10116
10174
|
for (let node = target; node !== null; node = node.parent) {
|
|
10117
|
-
const
|
|
10175
|
+
const scrolled = scrollLeaderOf(node) ?? node;
|
|
10176
|
+
const state = takesWheel(node) ? this.scrollSink.containerState(scrolled) : void 0;
|
|
10118
10177
|
if (state !== void 0) {
|
|
10119
10178
|
left ||= hasScrollRoom(state.scrollX, state.maxScrollX, -1);
|
|
10120
10179
|
right ||= hasScrollRoom(state.scrollX, state.maxScrollX, 1);
|
|
@@ -10162,7 +10221,8 @@ var UiWheelController = class {
|
|
|
10162
10221
|
*/
|
|
10163
10222
|
scrollChain(target, event, deltaX, deltaY, deltaMode, wheelDeltaY) {
|
|
10164
10223
|
for (let node = target; node !== null; node = node.parent) {
|
|
10165
|
-
const
|
|
10224
|
+
const scrolled = scrollLeaderOf(node) ?? node;
|
|
10225
|
+
const state = takesWheel(node) ? this.scrollSink.containerState(scrolled) : void 0;
|
|
10166
10226
|
if (state === void 0) {
|
|
10167
10227
|
if (containsOverscroll(node)) {
|
|
10168
10228
|
event.markConsumed();
|
|
@@ -10173,7 +10233,7 @@ var UiWheelController = class {
|
|
|
10173
10233
|
const takesX = deltaX !== 0 && hasScrollRoom(state.scrollX, state.maxScrollX, deltaX);
|
|
10174
10234
|
const takesY = deltaY !== 0 && hasScrollRoom(state.scrollY, state.maxScrollY, deltaY);
|
|
10175
10235
|
if (takesX || takesY) {
|
|
10176
|
-
this.applyDelta(
|
|
10236
|
+
this.applyDelta(scrolled, state, takesX ? deltaX : 0, takesY ? deltaY : 0, deltaMode, behaviorFor(scrolled, deltaMode, wheelDeltaY));
|
|
10177
10237
|
event.markConsumed();
|
|
10178
10238
|
return;
|
|
10179
10239
|
}
|
|
@@ -10228,6 +10288,17 @@ function behaviorFor(container, deltaMode, wheelDeltaY) {
|
|
|
10228
10288
|
if (container.getProperty("scrollBehavior") === "instant") return "instant";
|
|
10229
10289
|
return isNotchedWheel(deltaMode, wheelDeltaY) ? "smooth" : "instant";
|
|
10230
10290
|
}
|
|
10291
|
+
/**
|
|
10292
|
+
* Whether the wheel scrolls this node: a scroll container, an
|
|
10293
|
+
* editable, which scrolls its own text, or a `scrollWith` follower,
|
|
10294
|
+
* whose wheel goes to the node it follows.
|
|
10295
|
+
*
|
|
10296
|
+
* Only the wheel. A finger on a field places a caret or selects, and a
|
|
10297
|
+
* scrollbar drag is found by hit test, so neither asks this.
|
|
10298
|
+
*/
|
|
10299
|
+
function takesWheel(node) {
|
|
10300
|
+
return isScrollContainer(node) || node.type === "editable-text" || scrollLeaderOf(node) !== null;
|
|
10301
|
+
}
|
|
10231
10302
|
/** A ScrollView, or any node with overflow 'scroll' or 'auto'. */
|
|
10232
10303
|
function isScrollContainer(node) {
|
|
10233
10304
|
if (node.type === "scroll-view") return true;
|
|
@@ -12399,6 +12470,23 @@ var LayoutRecord = class {
|
|
|
12399
12470
|
clips = false;
|
|
12400
12471
|
scrollable = false;
|
|
12401
12472
|
/**
|
|
12473
|
+
* An editable, which scrolls its own text inside its box.
|
|
12474
|
+
*
|
|
12475
|
+
* Not `scrollable`: it has no children to translate and its offset
|
|
12476
|
+
* follows the caret, so every path that treats a scroll container's
|
|
12477
|
+
* content as children leaves it alone. What it shares with one is
|
|
12478
|
+
* the offset and its clamp — see `scrollRange` — and, when it is
|
|
12479
|
+
* multiline, the overlay scrollbars.
|
|
12480
|
+
*/
|
|
12481
|
+
scrollsText = false;
|
|
12482
|
+
/**
|
|
12483
|
+
* A multiline editable, which shows the overlay scrollbars a scroll
|
|
12484
|
+
* container does over its own text. A single-line field scrolls
|
|
12485
|
+
* sideways too, but a bar under one line of text reads as part of
|
|
12486
|
+
* the control rather than a hint that there is more of it.
|
|
12487
|
+
*/
|
|
12488
|
+
textScrollbars = false;
|
|
12489
|
+
/**
|
|
12402
12490
|
* A scroll container that reads right to left, so its overlay
|
|
12403
12491
|
* scrollbar hangs on the left edge and the band that reveals it is
|
|
12404
12492
|
* on the left too.
|
|
@@ -12664,6 +12752,8 @@ var LayoutRecord = class {
|
|
|
12664
12752
|
this.liftBoundary = false;
|
|
12665
12753
|
this.clips = false;
|
|
12666
12754
|
this.scrollable = false;
|
|
12755
|
+
this.scrollsText = false;
|
|
12756
|
+
this.textScrollbars = false;
|
|
12667
12757
|
this.mirrored = false;
|
|
12668
12758
|
this.sticky = false;
|
|
12669
12759
|
this.stickyOffsetX = 0;
|
|
@@ -14092,6 +14182,11 @@ var LayoutEngine = class {
|
|
|
14092
14182
|
scrollContainers() {
|
|
14093
14183
|
return this.scrollNodes;
|
|
14094
14184
|
}
|
|
14185
|
+
/** Everything that can show a scrollbar: scroll containers, then fields. */
|
|
14186
|
+
*scrollbarNodes() {
|
|
14187
|
+
yield* this.scrollNodes;
|
|
14188
|
+
yield* this.textScrollNodes;
|
|
14189
|
+
}
|
|
14095
14190
|
/**
|
|
14096
14191
|
* When the next scrollbar changes appearance (starts fading or
|
|
14097
14192
|
* disappears), or undefined when none is showing. Lets a host schedule
|
|
@@ -14099,9 +14194,9 @@ var LayoutEngine = class {
|
|
|
14099
14194
|
*/
|
|
14100
14195
|
nextScrollbarChange(now) {
|
|
14101
14196
|
let next;
|
|
14102
|
-
for (const node of this.
|
|
14197
|
+
for (const node of this.scrollbarNodes()) {
|
|
14103
14198
|
const rec = this.records.get(node);
|
|
14104
|
-
if (rec === void 0 || !rec.scrollable || rec.scrollbarVisibleUntil <= now) continue;
|
|
14199
|
+
if (rec === void 0 || !(rec.scrollable || rec.textScrollbars) || rec.scrollbarVisibleUntil <= now) continue;
|
|
14105
14200
|
if (rec.contentWidth <= rec.width && rec.contentHeight <= rec.height) continue;
|
|
14106
14201
|
const fadeStart = rec.scrollbarVisibleUntil - 350;
|
|
14107
14202
|
const candidate = now < fadeStart ? fadeStart : now + 16;
|
|
@@ -15883,38 +15978,52 @@ var LayoutEngine = class {
|
|
|
15883
15978
|
}
|
|
15884
15979
|
}
|
|
15885
15980
|
applyScroll() {
|
|
15886
|
-
|
|
15981
|
+
let followers;
|
|
15982
|
+
for (const node of this.scrollNodes) {
|
|
15983
|
+
if (scrollLeaderOf(node) !== null) {
|
|
15984
|
+
(followers ??= []).push(node);
|
|
15985
|
+
continue;
|
|
15986
|
+
}
|
|
15987
|
+
this.applyScrollOffset(node, false);
|
|
15988
|
+
}
|
|
15887
15989
|
for (const node of this.textScrollNodes) this.applyScrollOffset(node, true);
|
|
15990
|
+
if (followers !== void 0) for (const node of followers) this.applyFollowedScroll(node, scrollLeaderOf(node));
|
|
15888
15991
|
this.applySticky();
|
|
15889
15992
|
}
|
|
15890
15993
|
/**
|
|
15994
|
+
* A `scrollWith` container's offset: the leader's, on the axes it
|
|
15995
|
+
* follows, clamped to the follower's own range. No scrollbar shows
|
|
15996
|
+
* for it, since what is being scrolled is the leader.
|
|
15997
|
+
*/
|
|
15998
|
+
applyFollowedScroll(node, leader) {
|
|
15999
|
+
const rec = this.record(node);
|
|
16000
|
+
const source = this.records.get(leader);
|
|
16001
|
+
const axis = node.properties.get("scrollWithAxis") ?? "both";
|
|
16002
|
+
const followsX = axis !== "y";
|
|
16003
|
+
const followsY = axis !== "x";
|
|
16004
|
+
const rawX = followsX ? source?.scrollX ?? 0 : this.numberProp(node, "scrollX") ?? 0;
|
|
16005
|
+
const rawY = followsY ? source?.scrollY ?? 0 : this.numberProp(node, "scrollY") ?? 0;
|
|
16006
|
+
rec.scrollX = this.clamp(rawX, 0, scrollRange(rec, "x"));
|
|
16007
|
+
rec.scrollY = this.clamp(rawY, 0, scrollRange(rec, "y"));
|
|
16008
|
+
rec.transformDirty = false;
|
|
16009
|
+
}
|
|
16010
|
+
/**
|
|
15891
16011
|
* Brings a record's scroll offset up to date with its `scrollX` and
|
|
15892
|
-
* `scrollY` properties, clamped to what there is to scroll
|
|
15893
|
-
* every pass, so an offset written against
|
|
15894
|
-
* whose text has since been deleted, a
|
|
15895
|
-
* back into range on its own.
|
|
15896
|
-
*
|
|
15897
|
-
* A field that scrolls may go one caret width further than its text,
|
|
15898
|
-
* so that a caret at the very end is inside the box and not on its
|
|
15899
|
-
* edge, where the clip would take it. A field wide enough for its
|
|
15900
|
-
* text does not: the allowance would shift the line by a pixel the
|
|
15901
|
-
* moment the caret reached the end.
|
|
16012
|
+
* `scrollY` properties, clamped to what there is to scroll (see
|
|
16013
|
+
* `scrollRange`). This runs every pass, so an offset written against
|
|
16014
|
+
* a larger content — a field whose text has since been deleted, a
|
|
16015
|
+
* list that lost rows — comes back into range on its own.
|
|
15902
16016
|
*/
|
|
15903
16017
|
applyScrollOffset(node, field) {
|
|
15904
16018
|
const rec = this.record(node);
|
|
15905
16019
|
const rawX = this.numberProp(node, "scrollX") ?? 0;
|
|
15906
16020
|
const rawY = this.numberProp(node, "scrollY") ?? 0;
|
|
15907
|
-
const
|
|
15908
|
-
const
|
|
15909
|
-
const overflowY = rec.contentHeight - rec.height;
|
|
15910
|
-
const maxX = overflowX > 0 ? overflowX + caret : 0;
|
|
15911
|
-
const maxY = overflowY > 0 ? overflowY + caret : 0;
|
|
15912
|
-
const scrollX = this.clamp(rawX, 0, maxX);
|
|
15913
|
-
const scrollY = this.clamp(rawY, 0, maxY);
|
|
16021
|
+
const scrollX = this.clamp(rawX, 0, scrollRange(rec, "x"));
|
|
16022
|
+
const scrollY = this.clamp(rawY, 0, scrollRange(rec, "y"));
|
|
15914
16023
|
if (scrollX !== rec.scrollX || scrollY !== rec.scrollY) {
|
|
15915
16024
|
rec.scrollX = scrollX;
|
|
15916
16025
|
rec.scrollY = scrollY;
|
|
15917
|
-
if (!field) rec.scrollbarVisibleUntil = this.now() + SCROLLBAR_LINGER_MS;
|
|
16026
|
+
if (!field || rec.textScrollbars) rec.scrollbarVisibleUntil = this.now() + SCROLLBAR_LINGER_MS;
|
|
15918
16027
|
}
|
|
15919
16028
|
rec.transformDirty = false;
|
|
15920
16029
|
}
|
|
@@ -16126,8 +16235,10 @@ var LayoutEngine = class {
|
|
|
16126
16235
|
rec.sticky = position === "sticky";
|
|
16127
16236
|
rec.positioned = rec.absolute || rec.sticky || position === "relative";
|
|
16128
16237
|
const overflow = props.get("overflow");
|
|
16129
|
-
rec.scrollable = node.type === "scroll-view" || overflow === "scroll" || overflow === "auto";
|
|
16130
|
-
rec.
|
|
16238
|
+
rec.scrollable = node.type === "scroll-view" || overflow === "scroll" || overflow === "auto" || overflow === "hidden" && scrollLeaderOf(node) !== null;
|
|
16239
|
+
rec.scrollsText = node.type === "editable-text";
|
|
16240
|
+
rec.textScrollbars = rec.scrollsText && props.get("multiline") === true;
|
|
16241
|
+
rec.mirrored = (rec.scrollable || rec.textScrollbars) && this.startEdge(node) === "right";
|
|
16131
16242
|
rec.clips = rec.scrollable || overflow === "hidden" || node.type === "editable-text";
|
|
16132
16243
|
const insetH = this.lengthProp(node, "inset", base.width);
|
|
16133
16244
|
const insetV = this.lengthProp(node, "inset", base.height);
|
|
@@ -18358,7 +18469,7 @@ var Canvas2DRenderer = class {
|
|
|
18358
18469
|
if (rec.liftBoundary && this.liftedPass.length > liftedBefore) this.renderLifted(context, ctx, liftedBefore, node);
|
|
18359
18470
|
if (rec.clips) ctx.restore();
|
|
18360
18471
|
if (decorations !== null && hasDecorationPhase(decorations, true)) this.paintDecorations(ctx, node, rec, this.paintOwner === node ? this.paint : this.resolvePaint(node), decorations, true);
|
|
18361
|
-
if (rec.scrollable) this.paintScrollbars(ctx, rec, context.now ?? performance.now());
|
|
18472
|
+
if (rec.scrollable || rec.textScrollbars) this.paintScrollbars(ctx, rec, context.now ?? performance.now());
|
|
18362
18473
|
while (saves > 0) {
|
|
18363
18474
|
ctx.restore();
|
|
18364
18475
|
saves--;
|
|
@@ -18902,6 +19013,6 @@ function createCanvasSurface(host) {
|
|
|
18902
19013
|
return new CanvasSurface(host);
|
|
18903
19014
|
}
|
|
18904
19015
|
//#endregion
|
|
18905
|
-
export { prepareInputSurface as $,
|
|
19016
|
+
export { prepareInputSurface as $, UiNodeType as $a, isTypographyRole as $i, offsetForVerticalMove as $n, isMinMaxTrack as $r, DEFAULT_FONT_FAMILY as $t, accumulatedOffsetTo as A, writeDeclaredProperty as Aa, hasThemeExtension as Ai, linkOf as An, statesEqual as Ar, ELLIPSIS as At, parseFlexDirection as B, UiFocusEvent as Ba, defaultSpacing as Bi, isMultiline as Bn, transform as Br, drawText as Bt, describeLength as C, findEnvironmentKey as Ca, unknownContainerSize as Ci, isNodeInert as Cn, propertyValuesEqualByName as Cr, paragraphGeometry as Ct, formatNumber as D, clearOverrideProperty as Da, withContrast as Di, clearLinkHover as Dn, isUiRole as Dr, CharacterCountTextMeasurer as Dt, formatExplanation as E, DirtyNodeSet as Ea, themesEqual as Ei, resolveCursor as En, UI_SEMANTIC_STATES as Er, wordRangeIn as Et, constraintsEqual as F, visualState as Fa, contrastRatio as Fi, EDITOR_PROP as Fn, inputsEqual as Fr, isPrintable as Ft, MainAxisAlignment as G, UiPinchEvent as Ga, shadowsEqual as Gi, isVideoSurface as Gn, gradientsEqual as Gr, spanOf as Gt, sizeGridTracks as H, UiInputEvent as Ha, spacingEqual as Hi, nextCaretToggle as Hn, transformsEqual as Hr, layoutTextLines as Ht, tightenConstraints as I, visualStatesEqual as Ia, highContrastColors as Ii, caretVisibleAt as In, paintValuesEqual as Ir, EditableLayout as It, parseMainAxisAlignment as J, UiTextChangeEvent as Ja, boxShadowsEqual as Ji, lineIndexAtY as Jn, validateGradient as Jr, textRunDecorations as Jt, parseAlignContent as K, UiPointerEvent as Ka, boxShadow as Ki, videoFrameSize as Kn, linearGradient as Kr, textMeasureRequest as Kt, MAX_MEASURES_PER_CHILD as L, MOUSE_POINTER as La, raiseContrast as Li, editorFor as Ln, pathValuesEqual as Lr, applyCanvasTextStyle as Lt, LayoutRecord as M, UiVisualState as Ma, themeExtension as Mi, setLinkHover as Mn, validateStates as Mr, proportionalFontMetrics as Mt, Constraints as N, defaultVisualState as Na, themeExtensionsEqual as Ni, CARET_BLINK_MS as Nn, UI_SUBGRID_AXES as Nr, commandForKey as Nt, labelNode as O, overrideSources as Oa, withDensity as Oi, hasTextLinks as On, isUiSemanticState as Or, ParagraphTextMeasurer as Ot, clampSize as P, hasVisualState as Pa, withThemeExtension as Pi, CARET_WIDTH as Pn, validateSubgrid as Pr, detectEditingPlatform as Pt, pointerDeviceOf as Q, wheelDeltaYOf as Qa, defaultTypography as Qi, offsetAtX as Qn, isFrLength as Qr, registerFontStack as Qt, isLayoutProtocol as R, UiBeforeInputEvent as Ra, relativeLuminance as Ri, editorOf as Rn, UiTransforms as Rr, buildFontString as Rt, SCROLLBAR_LINGER_MS as S, createEnvironmentKey as Sa, containerBands as Si, isNodeHitTestable as Sn, propertyIsInherited as Sr, offsetAtPointIn as St, formatConstraints as T, UiNode as Ta, lightTheme as Ti, isNodeTabStop as Tn, UI_ROLES as Tr, selectionRectsIn as Tt, AlignContent as U, UiKeyboardEvent as Ua, spacingSteps as Ui, syncEditorValue as Un, MAX_GRADIENT_STOPS as Ur, runCanvasStyleInto as Ut, placeGridItems as V, UiGestureEvent as Va, scaleSpacing as Vi, isReadOnly as Vn, transformIsIdentity as Vr, fillTextRects as Vt, CrossAxisAlignment as W, UiPasteEvent as Wa, defaultShadows as Wi, resolveColorValue as Wn, gradientPaint as Wr, runFontString as Wt, UiPlatformAdapter as X, UiWheelEvent as Xa, isShapeName as Xi, lineLimit as Xn, fr as Xr, clearFontStacks as Xt, CanvasPlatformSurface as Y, UiWheelDeltaMode as Ya, defaultShapes as Yi, lineIndexForOffset as Yn, auto as Yr, bumpFontStack as Yt, capturePointer as Z, noKeyModifiers as Za, shapesEqual as Zi, offsetAtPoint as Zn, isAutoLength as Zr, fontStackFor as Zt, LABEL_PADDING_X as _, colorsEqual as _a, insetsEqual as _i, selectableTextNodes as _n, findPropertyDefinition as _r, scrollbarThumb as _t, PaintPictureCache as a, spanAtOffset as aa, UiBorderRadiuses as ai, createPaintState as an, nextGraphemeEnd as ar, UiWheelController as at, LayoutEngine as b, rgb8 as ba, UiContainerSizeSource as bi, setSelectionRange as bn, inheritedPropertyNames as br, UiInputDispatcher as bt, EMPTY_RECORDING as c, textSpansEqual as ca, borderRadiusEqual as ci, normalizeVerticalAlign as cn, previousWordStart as cr, UiPointerController as ct, tracePathData as d, darkColors as da, normalizeBorderRadius as di, TEXT_MATCHES_PROP as dn, resolveNumber as dr, SCROLLBAR_HOVER_ZONE as dt, typographyEqual as ea, isPercentLength as ei, DEFAULT_FONT_SIZE as en, DirtyFlags as eo, selectionRects as er, touchActionFor as et, ScaledImageCache as f, lightColors as fa, uniformBorderRadius as fi, clearMatchRanges as fn, resolveProperty as fr, SCROLLBAR_INSET as ft, paintsAfterChildren as g, colorValuesEqual as ga, UiInsetRegistry as gi, clearSelectionRange as gn, closestPropertyName as gr, scrollRange as gt, hasDecorationPhase as h, colorToRgba as ha, UiEnvironmentKeys as hi, TEXT_SELECTION_PROP as hn, UiGraph as hr, scrollLeaderOf as ht, traceRoundedRect as i, resolvedSpansOf as ia, resolveLength as ii, computeObjectFitRect as in, lineStartAt as ir, UiPinchRecognizer as it, contentOffset as j, writeOverrideProperty as ja, noThemeExtensions as ji, linkRunAtPointIn as jn, validateRole as jr, layoutParagraph as jt, withOverrideSource as k, resetOverrideWarnings as ka, defineThemeExtension as ki, linkHoverOf as kn, normalizeStates as kr, spannedRunsFor as kt, PaintRecorder as l, textStylesEqual as la, borderRadiusIsZero as li, resolvePaintState as ln, wordRangeAt as lr, UiFocusManager as lt, decorationRect as m, colorToHex as ma, propertyValuesEqual as mi, setMatchRanges as mn, resolveString as mr, SCROLLBAR_THICKNESS as mt, createCanvasSurface as n, editableSpansOf as na, percent as ni, DEFAULT_TEXT_COLOR as nn, graphemeBoundaries as nr, UiTouchScroller as nt, paintPictures as o, spannedTextOf as oa, borderRadius as oi, isPaintVisible as on, nextWordEnd as or, isScrollContainer as ot, decorationColor as p, UiBasicColors as pa, defineProperty as pi, matchRangesOf as pn, resolvePropertyByName as pr, SCROLLBAR_MIN_THUMB as pt, parseCrossAxisAlignment as q, UiSelectionChangeEvent as qa, boxShadowArraysEqual as qi, caretRectFor as qn, radialGradient as qr, textRunBackgrounds as qt, Canvas2DRenderer as r, flattenTextSpans as ra, repeat as ri, colorToCss as rn, lineEndAt as rr, UiGestureRecognizer as rt, PaintTarget as s, textContentOf as sa, borderRadiusCorners as si, normalizeTextAlign as sn, previousGraphemeStart as sr, UiKeyboardController as st, CanvasSurface as t, defaultTextStyle as ta, minmax as ti, DEFAULT_FONT_WEIGHT as tn, UiBinding as to, EditableTextModel as tr, UiEditingController as tt, replayPaint as u, colorsEqualPalette as ua, borderRadiusValuesEqual as ui, DEFAULT_LINE_HEIGHT_FACTOR as un, resolveBoolean as ur, UiHitTester as ut, drawOverlayShapes as v, normalizeColor as va, noInsets as vi, selectableTextOf as vn, getPropertyNames as vr, scrollbarThumbs as vt, describeOverrides as w, UiEnvironment as wa, darkTheme as wi, isNodeSelectable as wn, UiProperties as wr, paragraphGeometryFrom as wt, SCROLLBAR_FADE_MS as x, rgba as xa, bandOf as xi, isNodeFocusable as xn, propertyEffects as xr, hasDrawnText as xt, labelOrigin as y, parseColor as ya, observeViewportInsets as yi, selectionRangeOf as yn, inheritedPropertyFlags as yr, scrollbarZoneAt as yt, FlexDirection as z, UiEventType as za, densityFactors as zi, isEditableNode as zn, parseTransform as zr, createCanvasTextStyle as zt };
|
|
18906
19017
|
|
|
18907
|
-
//# sourceMappingURL=CanvasSurface-
|
|
19018
|
+
//# sourceMappingURL=CanvasSurface-BMOmE_dD.js.map
|