gesso-core 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # gesso-core
2
2
 
3
+ ## 0.8.1
4
+
5
+ ### Patch Changes
6
+
7
+ - An absolutely positioned box placed by its top alone is as tall as what it holds, as in CSS, and overflows its containing block. It was capped at the room left below its top, which squeezed a column inside it: its flexible children shrank, and a drawing in one lost its lower part. Only both edges set make the height tight; the width is still the room beside the box, so text wraps as before.
8
+ - 5df787f: `EditingService.offsetNear(node, x, y)` says which caret position in a field is nearest a point, as a press there would put the caret, so a field opened over text the person pointed at can start its caret there with `select`.
9
+ - Hot replacement: when a module is replaced while the app runs, everything the replaced component rendered is mounted again with it. A child component from a module that was not replaced used to be kept, still holding the objects the old parent gave it, so part of the screen followed old state after a save.
10
+
3
11
  ## 0.8.0
4
12
 
5
13
  ### Minor Changes
@@ -2989,6 +2989,18 @@ var UiNode = class {
2989
2989
  * same shape, and the same argument, as `overrides` above.
2990
2990
  */
2991
2991
  transitions = null;
2992
+ /**
2993
+ * Set on a node whose subtree is held (see `UiGraph.hold`): what its
2994
+ * descendants were marked dirty with while it was, to be marked again
2995
+ * when it is let go. Null on every node that holds nothing.
2996
+ */
2997
+ hold = null;
2998
+ /**
2999
+ * The held node this one is inside, or null. Kept on every descendant
3000
+ * of a held node, so a mark finds out it is to wait with one field
3001
+ * read rather than a walk up the tree.
3002
+ */
3003
+ heldBy = null;
2992
3004
  hasChildren() {
2993
3005
  return this.firstChild !== null;
2994
3006
  }
@@ -5043,6 +5055,21 @@ const UiProperties = {
5043
5055
  inherited: false,
5044
5056
  affects: P
5045
5057
  }),
5058
+ /**
5059
+ * Hold this subtree while it cannot be read: out of view, or drawn
5060
+ * smaller than `belowScale` of its size (a frame on a board zoomed
5061
+ * far out). Held, nothing in it is laid out, described or drawn again,
5062
+ * whatever its clocks and streams write; it is shown as it last was,
5063
+ * which with `rasterize` is one copy of its pixels. It catches up on
5064
+ * the frame it can be read again. `true` holds it only out of view.
5065
+ * See `UiGraph.hold`.
5066
+ */
5067
+ holdUnseen: defineProperty({
5068
+ name: "holdUnseen",
5069
+ defaultValue: void 0,
5070
+ inherited: false,
5071
+ affects: 64
5072
+ }),
5046
5073
  text: defineProperty({
5047
5074
  name: "text",
5048
5075
  defaultValue: void 0,
@@ -5729,6 +5756,8 @@ var UiGraph = class {
5729
5756
  this.unbindEvents(current);
5730
5757
  this.nodes.delete(current.id);
5731
5758
  this.dirtyNodes.delete(current);
5759
+ current.hold = null;
5760
+ current.heldBy = null;
5732
5761
  for (let child = current.firstChild; child !== null; child = child.nextSibling) stack.push(child);
5733
5762
  }
5734
5763
  this.detachNode(node);
@@ -5921,6 +5950,12 @@ var UiGraph = class {
5921
5950
  for (const binding of byType.values()) binding.disconnect();
5922
5951
  }
5923
5952
  markDirty(node, flags) {
5953
+ const holder = node.heldBy;
5954
+ if (holder !== null) {
5955
+ const pending = holder.hold.pending;
5956
+ pending.set(node, (pending.get(node) ?? 0) | flags);
5957
+ return;
5958
+ }
5924
5959
  const newlyDirty = this.dirtyNodes.mark(node);
5925
5960
  node.dirtyFlags |= flags;
5926
5961
  if ((flags & 128) !== 0) this.environmentDirty = true;
@@ -5935,6 +5970,48 @@ var UiGraph = class {
5935
5970
  hasEnvironmentDirty() {
5936
5971
  return this.environmentDirty;
5937
5972
  }
5973
+ /**
5974
+ * Holds a subtree as it is: from now until `release`, nothing beneath
5975
+ * `node` is marked dirty, so nothing there is laid out, described or
5976
+ * drawn again, and a change to a provider above it stops at it. The
5977
+ * marks are kept instead, and given again on release, so the subtree
5978
+ * then catches up in one frame with everything that happened to it.
5979
+ * `node` itself is not held: its own size and place still follow.
5980
+ *
5981
+ * For a subtree nobody can see, whose reactive sources would otherwise
5982
+ * keep a whole tree busy: a design tool's board of hundreds of frames,
5983
+ * each a live screen with its own clocks, most of them out of view or
5984
+ * too small to read. Its bindings keep running and keep writing the
5985
+ * values they produce, which costs a property write each; what it no
5986
+ * longer costs is the layout, environment, semantics and paint every
5987
+ * one of those writes set off. What the renderer has kept of it
5988
+ * (`rasterize`) stays its picture, since nothing in it is dirty.
5989
+ *
5990
+ * Holding is not nested: a held node inside another's subtree is held
5991
+ * by the outer one until that one is let go.
5992
+ */
5993
+ hold(node) {
5994
+ if (node.hold !== null) return;
5995
+ node.hold = {
5996
+ pending: /* @__PURE__ */ new Map(),
5997
+ environment: 0
5998
+ };
5999
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) setHeldBy(child, node.heldBy ?? node);
6000
+ }
6001
+ /** Lets a held subtree go, and marks again what was marked while it was held. */
6002
+ release(node) {
6003
+ const hold = node.hold;
6004
+ if (hold === null) return;
6005
+ node.hold = null;
6006
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) setHeldBy(child, node.heldBy, true);
6007
+ if (hold.environment !== 0 && node.heldBy === null) for (let child = node.firstChild; child !== null; child = child.nextSibling) this.rebuildEnvironment(child, hold.environment);
6008
+ const into = node.heldBy;
6009
+ for (const [marked, flags] of hold.pending) {
6010
+ if (this.nodes.get(marked.id) !== marked) continue;
6011
+ this.markDirty(marked, flags);
6012
+ }
6013
+ if (into !== null && hold.environment !== 0) into.hold.environment |= hold.environment;
6014
+ }
5938
6015
  markDirtyById(id, flags) {
5939
6016
  const node = this.requireNode(id);
5940
6017
  this.markDirty(node, flags);
@@ -6209,6 +6286,9 @@ var UiGraph = class {
6209
6286
  * is what a mount costs anyway.
6210
6287
  */
6211
6288
  inheritEnvironment(child) {
6289
+ const parent = child.parent;
6290
+ const holder = parent === null ? null : parent.hold !== null ? parent : parent.heldBy;
6291
+ if (holder !== null) setHeldBy(child, holder);
6212
6292
  if (child.parent?.environment == null) return;
6213
6293
  const visit = (node) => {
6214
6294
  const previous = node.environment;
@@ -6252,18 +6332,27 @@ var UiGraph = class {
6252
6332
  this.suppressDirtyListener = false;
6253
6333
  }
6254
6334
  }
6255
- rebuildEnvironment(node, inheritedFlags) {
6335
+ rebuildEnvironment(node, inheritedFlags, above) {
6256
6336
  const previous = node.environment;
6257
6337
  const next = this.buildNodeEnvironment(node);
6258
- const flags = previous === null ? inheritedFlags : this.environmentChangeFlags(previous, next, inheritedFlags);
6338
+ const flags = previous === null ? inheritedFlags : above !== void 0 && previous === above.from && next === above.to ? above.flags : this.environmentChangeFlags(previous, next, inheritedFlags);
6259
6339
  if (flags !== 0) {
6260
6340
  node.environment = next;
6261
6341
  this.markDirty(node, flags);
6262
6342
  this.environmentChangedListener?.(node);
6263
6343
  }
6344
+ if (node.hold !== null) {
6345
+ node.hold.environment |= inheritedFlags;
6346
+ return;
6347
+ }
6348
+ const change = previous === null ? void 0 : {
6349
+ from: previous,
6350
+ to: next,
6351
+ flags
6352
+ };
6264
6353
  let child = node.firstChild;
6265
6354
  while (child !== null) {
6266
- this.rebuildEnvironment(child, inheritedFlags);
6355
+ this.rebuildEnvironment(child, inheritedFlags, change);
6267
6356
  child = child.nextSibling;
6268
6357
  }
6269
6358
  }
@@ -6337,6 +6426,23 @@ function textStyleFontsEqual(a, b) {
6337
6426
  function positive(value) {
6338
6427
  return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
6339
6428
  }
6429
+ /**
6430
+ * Points a subtree at the node holding it, or at none. Releasing, a node
6431
+ * that holds a subtree of its own keeps it: what is beneath it stays
6432
+ * pointed at it.
6433
+ */
6434
+ function setHeldBy(root, holder, releasing = false) {
6435
+ const stack = [root];
6436
+ while (stack.length > 0) {
6437
+ const node = stack.pop();
6438
+ node.heldBy = holder;
6439
+ if (releasing && node.hold !== null) {
6440
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) setHeldBy(child, holder ?? node);
6441
+ continue;
6442
+ }
6443
+ for (let child = node.firstChild; child !== null; child = child.nextSibling) stack.push(child);
6444
+ }
6445
+ }
6340
6446
  //#endregion
6341
6447
  //#region src/editing/TextBoundaries.ts
6342
6448
  const graphemes = createSegmenter("grapheme");
@@ -14013,6 +14119,18 @@ var UiEditingController = class {
14013
14119
  const layout = this.layoutOf(node);
14014
14120
  return offset === void 0 ? layout.caretRect() : layout.caretRect(Math.max(0, Math.min(offset, layout.model.text.length)));
14015
14121
  }
14122
+ /**
14123
+ * The caret position nearest a point, given as a pointer event gives
14124
+ * it: where a press there would put the caret. For an application
14125
+ * that opens a field over text the person pointed at, to start the
14126
+ * caret where they pointed (`EditingService.select` puts it there).
14127
+ *
14128
+ * Null when the node is not an editable, or has not been laid out.
14129
+ */
14130
+ offsetNear(node, x, y) {
14131
+ if (!isEditableNode(node) || this.host.recordFor(node) === void 0) return null;
14132
+ return Math.min(this.offsetAt(node, x, y), editorFor(node).text.length);
14133
+ }
14016
14134
  /** Where a field, or a part of it in its own coordinates, is drawn; see `EditingHost.screenBox`. */
14017
14135
  drawnBox(node, part) {
14018
14136
  if (this.host.screenBox !== void 0) return this.host.screenBox(node, part);
@@ -16417,6 +16535,13 @@ var LayoutEngine = class {
16417
16535
  /** A positioned node, or the root, took a new box this pass; see `absoluteBlocks`. */
16418
16536
  blockResized = false;
16419
16537
  /**
16538
+ * Which positioned nodes took a new box this pass, so only the nodes
16539
+ * placed against one of them are placed again. Checking every one
16540
+ * walked up from each to its block: a design tool's board has ten
16541
+ * thousand of them, and one comment pin's label growing checked all.
16542
+ */
16543
+ resizedBlocks = /* @__PURE__ */ new Set();
16544
+ /**
16420
16545
  * The nodes asking for `lift`, in the order they asked.
16421
16546
  *
16422
16547
  * Kept as a set rather than rebuilt per pass because layout is
@@ -16910,6 +17035,7 @@ var LayoutEngine = class {
16910
17035
  this.anchorDependents.clear();
16911
17036
  this.movedAnchored.clear();
16912
17037
  this.blockResized = false;
17038
+ this.resizedBlocks.clear();
16913
17039
  this.resetStats();
16914
17040
  this.fullLayout(constraints);
16915
17041
  const rec = this.record(node);
@@ -16998,6 +17124,7 @@ var LayoutEngine = class {
16998
17124
  }
16999
17125
  this.layoutVersion++;
17000
17126
  this.blockResized = false;
17127
+ this.resizedBlocks.clear();
17001
17128
  this.relayout(constraints);
17002
17129
  this.replaceStaleAbsolute();
17003
17130
  this.applyScroll();
@@ -18695,7 +18822,10 @@ var LayoutEngine = class {
18695
18822
  } else if (point !== void 0 && point !== null) {
18696
18823
  this.anchoredNodes.delete(child);
18697
18824
  this.trackAnchor(child, null);
18698
- this.absoluteBlocks.set(child, block);
18825
+ this.absoluteBlocks.set(child, {
18826
+ box: block,
18827
+ of: this.containingBlockNodeOf(child)
18828
+ });
18699
18829
  this.measure(child, new Constraints(0, Math.max(0, block.width), 0, Math.max(0, block.height)));
18700
18830
  this.placeBeside(child, cRec, block.x + point.x, block.y + point.y, 0, 0, block, true);
18701
18831
  return;
@@ -18703,7 +18833,10 @@ var LayoutEngine = class {
18703
18833
  this.anchoredNodes.delete(child);
18704
18834
  this.trackAnchor(child, null);
18705
18835
  }
18706
- this.absoluteBlocks.set(child, block);
18836
+ this.absoluteBlocks.set(child, {
18837
+ box: block,
18838
+ of: this.containingBlockNodeOf(child)
18839
+ });
18707
18840
  const marginH = cRec.marginLeft + cRec.marginRight;
18708
18841
  const marginV = cRec.marginTop + cRec.marginBottom;
18709
18842
  const availableWidth = Math.max(0, block.width - (cRec.left ?? 0) - (cRec.right ?? 0) - marginH);
@@ -18712,7 +18845,7 @@ var LayoutEngine = class {
18712
18845
  const explicitHeight = this.lengthProp(child, "height", block.height) !== void 0;
18713
18846
  const tightWidth = cRec.left !== void 0 && cRec.right !== void 0 && !explicitWidth;
18714
18847
  const tightHeight = cRec.top !== void 0 && cRec.bottom !== void 0 && !explicitHeight;
18715
- this.measure(child, new Constraints(tightWidth ? availableWidth : 0, explicitWidth ? Infinity : availableWidth, tightHeight ? availableHeight : 0, explicitHeight ? Infinity : availableHeight));
18848
+ this.measure(child, new Constraints(tightWidth ? availableWidth : 0, explicitWidth ? Infinity : availableWidth, tightHeight ? availableHeight : 0, explicitHeight || !tightHeight ? Infinity : availableHeight));
18716
18849
  const width = cRec.measuredWidth;
18717
18850
  const height = cRec.measuredHeight;
18718
18851
  let x;
@@ -18739,11 +18872,14 @@ var LayoutEngine = class {
18739
18872
  replaceStaleAbsolute() {
18740
18873
  for (let pass = 0; this.blockResized && pass < ANCHOR_CHAIN_LIMIT; pass++) {
18741
18874
  this.blockResized = false;
18742
- for (const [child, was] of this.absoluteBlocks) {
18875
+ const resized = new Set(this.resizedBlocks);
18876
+ this.resizedBlocks.clear();
18877
+ for (const [child, { box: was, of }] of this.absoluteBlocks) {
18743
18878
  if (!this.records.has(child)) {
18744
18879
  this.absoluteBlocks.delete(child);
18745
18880
  continue;
18746
18881
  }
18882
+ if (!resized.has(of)) continue;
18747
18883
  const block = this.containingBlockOf(child);
18748
18884
  if (block.x === was.x && block.y === was.y && block.width === was.width && block.height === was.height) continue;
18749
18885
  this.placeAbsolute(child);
@@ -18751,6 +18887,7 @@ var LayoutEngine = class {
18751
18887
  }
18752
18888
  }
18753
18889
  this.blockResized = false;
18890
+ this.resizedBlocks.clear();
18754
18891
  }
18755
18892
  /**
18756
18893
  * Places an anchored node beside its anchor.
@@ -19104,23 +19241,22 @@ var LayoutEngine = class {
19104
19241
  * positioned ancestor's, else the layout root's.
19105
19242
  */
19106
19243
  containingBlockOf(child) {
19244
+ const rec = this.record(this.containingBlockNodeOf(child));
19245
+ return {
19246
+ x: rec.x,
19247
+ y: rec.y,
19248
+ width: rec.width,
19249
+ height: rec.height
19250
+ };
19251
+ }
19252
+ /** The positioned ancestor, or the root, that an absolute node is placed against. */
19253
+ containingBlockNodeOf(child) {
19107
19254
  for (let current = child.parent; current !== null; current = current.parent) {
19108
19255
  if (this.isFragment(current)) continue;
19109
19256
  const rec = this.records.get(current);
19110
- if (rec !== void 0 && (rec.positioned || current === this.layoutRoot)) return {
19111
- x: rec.x,
19112
- y: rec.y,
19113
- width: rec.width,
19114
- height: rec.height
19115
- };
19257
+ if (rec !== void 0 && (rec.positioned || current === this.layoutRoot)) return current;
19116
19258
  }
19117
- const root = this.record(this.layoutRoot);
19118
- return {
19119
- x: root.x,
19120
- y: root.y,
19121
- width: root.width,
19122
- height: root.height
19123
- };
19259
+ return this.layoutRoot;
19124
19260
  }
19125
19261
  /**
19126
19262
  * Records the children's paint order when it differs from tree order,
@@ -19937,7 +20073,10 @@ var LayoutEngine = class {
19937
20073
  rec.extentMaxY = y + height + rec.paintReachBottom;
19938
20074
  this.growExtentUp(node);
19939
20075
  rec.placeDirty = true;
19940
- if (rec.positioned || node === this.layoutRoot) this.blockResized = true;
20076
+ if (rec.positioned || node === this.layoutRoot) {
20077
+ this.blockResized = true;
20078
+ this.resizedBlocks.add(node);
20079
+ }
19941
20080
  this.layoutVersion++;
19942
20081
  this.boundsMoved.add(node);
19943
20082
  if (this.anchorDependents.size > 0) {
@@ -21962,8 +22101,19 @@ var PreciseContext = class PreciseContext {
21962
22101
  this.inner = inner;
21963
22102
  this.reset(inner);
21964
22103
  }
21965
- /** Points at a context for a new frame, holding nothing back. Returns itself. */
22104
+ /**
22105
+ * Points at a context for a new frame, holding nothing back. Returns itself.
22106
+ *
22107
+ * Pointed at the same context again, it first restores every state the
22108
+ * last frame saved and never restored. A frame that throws partway (the
22109
+ * scheduler abandons it and draws the next) left its clips and
22110
+ * transforms on the canvas, and a canvas keeps its state stack from one
22111
+ * frame to the next: every later frame, the clear that starts it
22112
+ * included, was drawn through them, so the window showed only the parts
22113
+ * of it inside the last clip, or nothing at all, until it was reloaded.
22114
+ */
21966
22115
  reset(inner) {
22116
+ if (inner === this.inner) for (let open = this.saved.length; open >= 2; open -= 2) this.inner.restore();
21967
22117
  this.inner = inner;
21968
22118
  this.dx = 0;
21969
22119
  this.dy = 0;
@@ -23167,7 +23317,9 @@ var RasterCache = class {
23167
23317
  const canvasHeight = Math.ceil(height * scaleY) + 1;
23168
23318
  let entry = previous;
23169
23319
  if (entry !== void 0) entry.used = this.frame;
23320
+ let sized = false;
23170
23321
  if (entry === void 0 || entry.canvasWidth !== canvasWidth || entry.canvasHeight !== canvasHeight) {
23322
+ sized = true;
23171
23323
  const growth = canvasWidth * canvasHeight - (entry === void 0 ? 0 : entry.canvasWidth * entry.canvasHeight);
23172
23324
  if (!this.make(growth)) return null;
23173
23325
  if (entry === void 0) {
@@ -23182,13 +23334,14 @@ var RasterCache = class {
23182
23334
  this.pixels += growth;
23183
23335
  entry.canvasWidth = canvasWidth;
23184
23336
  entry.canvasHeight = canvasHeight;
23185
- } else {
23337
+ }
23338
+ const target = entry.ctx.reset(entry.raw);
23339
+ if (!sized) {
23186
23340
  entry.raw.setTransform(1, 0, 0, 1, 0, 0);
23187
23341
  entry.raw.clearRect(0, 0, canvasWidth, canvasHeight);
23188
23342
  }
23189
23343
  const fractionX = x - Math.floor(x);
23190
23344
  const fractionY = y - Math.floor(y);
23191
- const target = entry.ctx.reset(entry.raw);
23192
23345
  target.setTransform(scaleX, 0, 0, scaleY, fractionX - scaleX * cornerX, fractionY - scaleY * cornerY);
23193
23346
  target.globalAlpha = 1;
23194
23347
  const kept = paint(target, canvasWidth, canvasHeight);
@@ -24706,4 +24859,4 @@ function createCanvasSurface(host) {
24706
24859
  //#endregion
24707
24860
  export { UiPlatformAdapter as $, boxShadowArraysEqual as $a, UiKeyboardEvent as $i, isVideoSurface as $n, pathValuesEqual as $r, textRunDecorations as $t, formatNumber as A, withDensity as Aa, propertyValuesEqual as Ai, isPressable as An, colorsEqual as Ao, resolveString as Ar, paragraphGeometryFrom as At, MAX_MEASURES_PER_CHILD as B, contrastRatio as Ba, writeOverrideProperty as Bi, CARET_BLINK_MS as Bn, easings as Bo, UiProperties as Br, isPrintable as Bt, LayoutEngine as C, bandOf as Ca, borderRadiusCorners as Ci, selectionRangeOf as Cn, colorsEqualPalette as Co, wordRangeAt as Cr, scrollbarThumbs as Ct, describeOverrides as D, lightTheme as Da, normalizeBorderRadius as Di, isNodeInert as Dn, colorToHex as Do, resolveNumber as Dr, hasDrawnText as Dt, describeLength as E, darkTheme as Ea, borderRadiusValuesEqual as Ei, isNodeHitTestable as En, UiBasicColors as Eo, resolveBoolean as Er, UiInputDispatcher as Et, LayoutRecord as F, hasThemeExtension as Fa, DirtyNodeSet as Fi, hasTextLinks as Fn, createEnvironmentKey as Fo, inheritedPropertyNames as Fr, comparePositions as Ft, sizeGridTracks as G, defaultSpacing as Ga, visualStatesEqual as Gi, editorOf as Gn, normalizeStates as Gr, drawText as Gt, FlexDirection as H, raiseContrast as Ha, defaultVisualState as Hi, EDITOR_PROP as Hn, steps as Ho, UI_SEMANTIC_STATES as Hr, applyCanvasTextStyle as Ht, Constraints as I, noThemeExtensions as Ia, clearOverrideProperty as Ii, linkHoverOf as In, findEnvironmentKey as Io, propertyEffects as Ir, edgeField as It, MainAxisAlignment as J, spacingSteps as Ja, UiCompositionEvent as Ji, isReadOnly as Jn, validateStates as Jr, runCanvasStyleInto as Jt, AlignContent as K, scaleSpacing as Ka, MOUSE_POINTER as Ki, isEditableNode as Kn, statesEqual as Kr, fillTextRects as Kt, clampSize as L, themeExtension as La, overrideSources as Li, linkOf as Ln, provided as Lo, propertyIsInherited as Lr, editingGroupOf as Lt, withOverrideSource as M, lengths as Ma, withPointer as Mi, pointerEventsOf as Mn, parseColor as Mo, findPropertyDefinition as Mr, wordRangeIn as Mt, accumulatedOffsetTo as N, unitsEqual as Na, UiEnvironment as Ni, resolveCursor as Nn, rgb8 as No, getPropertyNames as Nr, textInputOf as Nt, formatConstraints as O, themesEqual as Oa, uniformBorderRadius as Oi, isNodeSelectable as On, colorToRgba as Oo, resolveProperty as Or, offsetAtPointIn as Ot, contentOffset as P, defineThemeExtension as Pa, UiNode as Pi, clearLinkHover as Pn, rgba as Po, inheritedPropertyFlags as Pr, adjacentField as Pt, CanvasPlatformSurface as Q, boxShadow as Qa, UiInputEvent as Qi, resolveColorValue as Qn, paintValuesEqual as Qr, textRunBackgrounds as Qt, constraintsEqual as R, themeExtensionsEqual as Ra, resetOverrideWarnings as Ri, linkRunAtPointIn as Rn, cubicBezier as Ro, propertyNarrowers as Rr, commandForKey as Rt, tracePathData as S, UiContainerSizeSource as Sa, borderRadius as Si, selectableTextOf as Sn, textStylesEqual as So, previousWordStart as Sr, scrollbarThumb as St, SCROLLBAR_LINGER_MS as T, unknownContainerSize as Ta, borderRadiusIsZero as Ti, isNodeFocusable as Tn, lightColors as To, DEFAULT_LINE_HEIGHT_FACTOR as Tr, scrollsFromRight as Tt, parseFlexDirection as U, relativeLuminance as Ua, hasVisualState as Ui, caretVisibleAt as Un, isUiRole as Ur, buildFontString as Ut, isLayoutProtocol as V, highContrastColors as Va, UiVisualState as Vi, CARET_WIDTH as Vn, linear as Vo, UI_ROLES as Vr, EditableLayout as Vt, placeGridItems as W, densityFactors as Wa, visualState as Wi, editorFor as Wn, isUiSemanticState as Wr, createCanvasTextStyle as Wt, parseCrossAxisAlignment as X, shadowsEqual as Xa, UiFocusEvent as Xi, nextCaretToggle as Xn, validateSubgrid as Xr, spanOf as Xt, parseAlignContent as Y, defaultShadows as Ya, UiEventType as Yi, maskText as Yn, UI_SUBGRID_AXES as Yr, runFontString as Yt, parseMainAxisAlignment as Z, BOX_SHADOW_BLUR_REACH as Za, UiGestureEvent as Zi, syncEditorValue as Zn, inputsEqual as Zr, textMeasureRequest as Zt, paintsAfterChildren as _, springIn as _a, minmax as _i, matchRangesOf as _n, spanAtOffset as _o, lineEndAt as _r, SCROLLBAR_MIN_THUMB as _t, layerRegion as a, UiWheelDeltaMode as aa, MAX_GRADIENT_STOPS as ai, DEFAULT_FONT_SIZE as an, shadowsOf as ao, layoutParagraph as ar, UiEditingController as at, labelOrigin as b, noInsets as ba, resolveLength as bi, clearSelectionRange as bn, textContentOf as bo, nextWordEnd as br, scrollLeaderOf as bt, paintPictures as c, wheelDeltaYOf as ca, linearGradient as ci, colorToCss as cn, shapesEqual as co, lineIndexAtY as cr, UiPinchRecognizer as ct, PaintRecorder as d, UiBinding as da, auto as di, isPaintVisible as dn, typographyEqual as do, offsetAtPoint as dr, UiKeyboardController as dt, UiPasteEvent as ea, UiTransforms as ei, bumpFontStack as en, boxShadowRadius as eo, videoFrameSize as er, capturePointer as et, replayPaint as f, UiEnvironmentKeys as fa, fr as fi, normalizeTextAlign as fn, defaultTextStyle as fo, offsetAtX as fr, UiPointerController as ft, hasDecorationPhase as g, easingIn as ga, isPercentLength as gi, clearMatchRanges as gn, resolvedSpansOf as go, graphemeBoundaries as gr, SCROLLBAR_INSET as gt, decorationRect as h, durationIn as ha, isMinMaxTrack as hi, TEXT_MATCHES_PROP as hn, hiddenRangesOf as ho, EditableTextModel as hr, SCROLLBAR_HOVER_ZONE as ht, traceRoundedRect as i, UiTextChangeEvent as ia, transformsEqual as ii, DEFAULT_FONT_FAMILY as in, fittedShadowRadius as io, ELLIPSIS as ir, touchActionFor as it, labelNode as j, defaultUnits as ja, TOUCH_TARGET as ji, isSubtreeInert as jn, normalizeColor as jo, closestPropertyName as jr, selectionRectsIn as jt, formatExplanation as k, withContrast as ka, defineProperty as ki, isNodeTabStop as kn, colorValuesEqual as ko, resolvePropertyByName as kr, paragraphGeometry as kt, PaintTarget as l, UiNodeType as la, radialGradient as li, computeObjectFitRect as ln, defaultTypography as lo, lineIndexForOffset as lr, UiWheelController as lt, decorationColor as m, defineMotion as ma, isFrLength as mi, resolvePaintState as mn, flattenTextSpans as mo, selectionRects as mr, UiHitTester as mt, createCanvasSurface as n, UiPointerEvent as na, transform as ni, fontStackFor as nn, boxShadowValuesEqual as no, ParagraphTextMeasurer as nr, pointerDeviceOf as nt, opacityNeedsLayer as o, UiWheelEvent as oa, gradientPaint as oi, DEFAULT_FONT_WEIGHT as on, defaultShapes as oo, proportionalFontMetrics as or, UiTouchScroller as ot, ScaledImageCache as p, defaultMotion as pa, isAutoLength as pi, normalizeVerticalAlign as pn, editableSpansOf as po, offsetForVerticalMove as pr, UiFocusManager as pt, CrossAxisAlignment as q, spacingEqual as qa, UiBeforeInputEvent as qi, isMultiline as qn, validateRole as qr, layoutTextLines as qt, Canvas2DRenderer as r, UiSelectionChangeEvent as ra, transformIsIdentity as ri, registerFontStack as rn, boxShadowsEqual as ro, spannedRunsFor as rr, prepareInputSurface as rt, PaintPictureCache as s, noKeyModifiers as sa, gradientsEqual as si, DEFAULT_TEXT_COLOR as sn, isShapeName as so, caretRectFor as sr, UiGestureRecognizer as st, CanvasSurface as t, UiPinchEvent as ta, parseTransform as ti, clearFontStacks as tn, boxShadowReach as to, CharacterCountTextMeasurer as tr, isImeKey as tt, EMPTY_RECORDING as u, DirtyFlags as ua, validateGradient as ui, createPaintState as un, isTypographyRole as uo, lineLimit as ur, isScrollContainer as ut, LABEL_PADDING_X as v, UiInsetRegistry as va, percent as vi, setMatchRanges as vn, spannedTextOf as vo, lineStartAt as vr, SCROLLBAR_THICKNESS as vt, SCROLLBAR_FADE_MS as w, containerBands as wa, borderRadiusEqual as wi, setSelectionRange as wn, darkColors as wo, UiGraph as wr, scrollbarZoneAt as wt, snapScroll as x, observeViewportInsets as xa, UiBorderRadiuses as xi, selectableTextNodes as xn, textSpansEqual as xo, previousGraphemeStart as xr, scrollRange as xt, drawOverlayShapes as y, insetsEqual as ya, repeat as yi, TEXT_SELECTION_PROP as yn, spansDifferOnlyInPaint as yo, nextGraphemeEnd as yr, scrollBounds as yt, tightenConstraints as z, withThemeExtension as za, writeDeclaredProperty as zi, setLinkHover as zn, easingCss as zo, propertyValuesEqualByName as zr, detectEditingPlatform as zt };
24708
24861
 
24709
- //# sourceMappingURL=CanvasSurface-Cy2UErXI.js.map
24862
+ //# sourceMappingURL=CanvasSurface-CkRHlmpu.js.map