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 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 = content - viewport;
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
- const visible = rec.scrollbarVisibleUntil > (typeof performance !== "undefined" ? performance.now() : Date.now());
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 state = isScrollContainer(node) ? this.scrollSink.containerState(node) : void 0;
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 state = isScrollContainer(node) ? this.scrollSink.containerState(node) : void 0;
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(node, state, takesX ? deltaX : 0, takesY ? deltaY : 0, deltaMode, behaviorFor(node, deltaMode, wheelDeltaY));
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.scrollNodes) {
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
- for (const node of this.scrollNodes) this.applyScrollOffset(node, false);
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. This runs
15893
- * every pass, so an offset written against a larger content — a field
15894
- * whose text has since been deleted, a list that lost rows — comes
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 caret = field ? 1 : 0;
15908
- const overflowX = rec.contentWidth - rec.width;
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.mirrored = rec.scrollable && this.startEdge(node) === "right";
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 $, UiBinding as $a, defaultTextStyle as $i, EditableTextModel as $n, minmax as $r, DEFAULT_FONT_WEIGHT as $t, accumulatedOffsetTo as A, UiVisualState as Aa, themeExtension as Ai, setLinkHover as An, validateStates as Ar, proportionalFontMetrics as At, parseFlexDirection as B, UiInputEvent as Ba, spacingEqual as Bi, nextCaretToggle as Bn, transformsEqual as Br, layoutTextLines as Bt, describeLength as C, UiNode as Ca, lightTheme as Ci, isNodeTabStop as Cn, UI_ROLES as Cr, selectionRectsIn as Ct, formatNumber as D, resetOverrideWarnings as Da, defineThemeExtension as Di, linkHoverOf as Dn, normalizeStates as Dr, spannedRunsFor as Dt, formatExplanation as E, overrideSources as Ea, withDensity as Ei, hasTextLinks as En, isUiSemanticState as Er, ParagraphTextMeasurer as Et, constraintsEqual as F, MOUSE_POINTER as Fa, raiseContrast as Fi, editorFor as Fn, pathValuesEqual as Fr, applyCanvasTextStyle as Ft, MainAxisAlignment as G, UiSelectionChangeEvent as Ga, boxShadowArraysEqual as Gi, caretRectFor as Gn, radialGradient as Gr, textRunBackgrounds as Gt, sizeGridTracks as H, UiPasteEvent as Ha, defaultShadows as Hi, resolveColorValue as Hn, gradientPaint as Hr, runFontString as Ht, tightenConstraints as I, UiBeforeInputEvent as Ia, relativeLuminance as Ii, editorOf as In, UiTransforms as Ir, buildFontString as It, parseMainAxisAlignment as J, UiWheelEvent as Ja, isShapeName as Ji, lineLimit as Jn, fr as Jr, clearFontStacks as Jt, parseAlignContent as K, UiTextChangeEvent as Ka, boxShadowsEqual as Ki, lineIndexAtY as Kn, validateGradient as Kr, textRunDecorations as Kt, MAX_MEASURES_PER_CHILD as L, UiEventType as La, densityFactors as Li, isEditableNode as Ln, parseTransform as Lr, createCanvasTextStyle as Lt, LayoutRecord as M, hasVisualState as Ma, withThemeExtension as Mi, CARET_WIDTH as Mn, validateSubgrid as Mr, detectEditingPlatform as Mt, Constraints as N, visualState as Na, contrastRatio as Ni, EDITOR_PROP as Nn, inputsEqual as Nr, isPrintable as Nt, labelNode as O, writeDeclaredProperty as Oa, hasThemeExtension as Oi, linkOf as On, statesEqual as Or, ELLIPSIS as Ot, clampSize as P, visualStatesEqual as Pa, highContrastColors as Pi, caretVisibleAt as Pn, paintValuesEqual as Pr, EditableLayout as Pt, pointerDeviceOf as Q, DirtyFlags as Qa, typographyEqual as Qi, selectionRects as Qn, isPercentLength as Qr, DEFAULT_FONT_SIZE as Qt, isLayoutProtocol as R, UiFocusEvent as Ra, defaultSpacing as Ri, isMultiline as Rn, transform as Rr, drawText as Rt, SCROLLBAR_LINGER_MS as S, UiEnvironment as Sa, darkTheme as Si, isNodeSelectable as Sn, UiProperties as Sr, paragraphGeometryFrom as St, formatConstraints as T, clearOverrideProperty as Ta, withContrast as Ti, clearLinkHover as Tn, isUiRole as Tr, CharacterCountTextMeasurer as Tt, AlignContent as U, UiPinchEvent as Ua, shadowsEqual as Ui, isVideoSurface as Un, gradientsEqual as Ur, spanOf as Ut, placeGridItems as V, UiKeyboardEvent as Va, spacingSteps as Vi, syncEditorValue as Vn, MAX_GRADIENT_STOPS as Vr, runCanvasStyleInto as Vt, CrossAxisAlignment as W, UiPointerEvent as Wa, boxShadow as Wi, videoFrameSize as Wn, linearGradient as Wr, textMeasureRequest as Wt, UiPlatformAdapter as X, wheelDeltaYOf as Xa, defaultTypography as Xi, offsetAtX as Xn, isFrLength as Xr, registerFontStack as Xt, CanvasPlatformSurface as Y, noKeyModifiers as Ya, shapesEqual as Yi, offsetAtPoint as Yn, isAutoLength as Yr, fontStackFor as Yt, capturePointer as Z, UiNodeType as Za, isTypographyRole as Zi, offsetForVerticalMove as Zn, isMinMaxTrack as Zr, DEFAULT_FONT_FAMILY as Zt, LABEL_PADDING_X as _, parseColor as _a, observeViewportInsets as _i, selectionRangeOf as _n, inheritedPropertyFlags as _r, scrollbarZoneAt as _t, PaintPictureCache as a, textContentOf as aa, borderRadiusCorners as ai, normalizeTextAlign as an, previousGraphemeStart as ar, UiWheelController as at, LayoutEngine as b, createEnvironmentKey as ba, containerBands as bi, isNodeHitTestable as bn, propertyIsInherited as br, offsetAtPointIn as bt, EMPTY_RECORDING as c, colorsEqualPalette as ca, borderRadiusValuesEqual as ci, DEFAULT_LINE_HEIGHT_FACTOR as cn, resolveBoolean as cr, UiPointerController as ct, tracePathData as d, UiBasicColors as da, defineProperty as di, matchRangesOf as dn, resolvePropertyByName as dr, SCROLLBAR_HOVER_ZONE as dt, editableSpansOf as ea, percent as ei, DEFAULT_TEXT_COLOR as en, graphemeBoundaries as er, touchActionFor as et, ScaledImageCache as f, colorToHex as fa, propertyValuesEqual as fi, setMatchRanges as fn, resolveString as fr, SCROLLBAR_INSET as ft, paintsAfterChildren as g, normalizeColor as ga, noInsets as gi, selectableTextOf as gn, getPropertyNames as gr, scrollbarThumbs as gt, hasDecorationPhase as h, colorsEqual as ha, insetsEqual as hi, selectableTextNodes as hn, findPropertyDefinition as hr, scrollbarThumb as ht, traceRoundedRect as i, spannedTextOf as ia, borderRadius as ii, isPaintVisible as in, nextWordEnd as ir, UiPinchRecognizer as it, contentOffset as j, defaultVisualState as ja, themeExtensionsEqual as ji, CARET_BLINK_MS as jn, UI_SUBGRID_AXES as jr, commandForKey as jt, withOverrideSource as k, writeOverrideProperty as ka, noThemeExtensions as ki, linkRunAtPointIn as kn, validateRole as kr, layoutParagraph as kt, PaintRecorder as l, darkColors as la, normalizeBorderRadius as li, TEXT_MATCHES_PROP as ln, resolveNumber as lr, UiFocusManager as lt, decorationRect as m, colorValuesEqual as ma, UiInsetRegistry as mi, clearSelectionRange as mn, closestPropertyName as mr, SCROLLBAR_THICKNESS as mt, createCanvasSurface as n, resolvedSpansOf as na, resolveLength as ni, computeObjectFitRect as nn, lineStartAt as nr, UiTouchScroller as nt, paintPictures as o, textSpansEqual as oa, borderRadiusEqual as oi, normalizeVerticalAlign as on, previousWordStart as or, isScrollContainer as ot, decorationColor as p, colorToRgba as pa, UiEnvironmentKeys as pi, TEXT_SELECTION_PROP as pn, UiGraph as pr, SCROLLBAR_MIN_THUMB as pt, parseCrossAxisAlignment as q, UiWheelDeltaMode as qa, defaultShapes as qi, lineIndexForOffset as qn, auto as qr, bumpFontStack as qt, Canvas2DRenderer as r, spanAtOffset as ra, UiBorderRadiuses as ri, createPaintState as rn, nextGraphemeEnd as rr, UiGestureRecognizer as rt, PaintTarget as s, textStylesEqual as sa, borderRadiusIsZero as si, resolvePaintState as sn, wordRangeAt as sr, UiKeyboardController as st, CanvasSurface as t, flattenTextSpans as ta, repeat as ti, colorToCss as tn, lineEndAt as tr, UiEditingController as tt, replayPaint as u, lightColors as ua, uniformBorderRadius as ui, clearMatchRanges as un, resolveProperty as ur, UiHitTester as ut, drawOverlayShapes as v, rgb8 as va, UiContainerSizeSource as vi, setSelectionRange as vn, inheritedPropertyNames as vr, UiInputDispatcher as vt, describeOverrides as w, DirtyNodeSet as wa, themesEqual as wi, resolveCursor as wn, UI_SEMANTIC_STATES as wr, wordRangeIn as wt, SCROLLBAR_FADE_MS as x, findEnvironmentKey as xa, unknownContainerSize as xi, isNodeInert as xn, propertyValuesEqualByName as xr, paragraphGeometry as xt, labelOrigin as y, rgba as ya, bandOf as yi, isNodeFocusable as yn, propertyEffects as yr, hasDrawnText as yt, FlexDirection as z, UiGestureEvent as za, scaleSpacing as zi, isReadOnly as zn, transformIsIdentity as zr, fillTextRects as zt };
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-CaNWsAlm.js.map
19018
+ //# sourceMappingURL=CanvasSurface-BMOmE_dD.js.map