gesso-core 0.3.0 → 0.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,62 @@
1
1
  # gesso-core
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - **`DoubleClick`, dispatched after a second Click on the same node.** The pointer
8
+ controller pairs Clicks on the same node within 500 ms and 4 px — the window the
9
+ editing and selection controllers already use for a word — and dispatches
10
+ `DoubleClick` after the second, as the DOM's `dblclick` follows its `click`. A
11
+ press that became a drag or was cancelled spends the pair.
12
+
13
+ `onDoubleClick` on any element; `fireEvent` gains `doubleClick` and
14
+ `contextMenu`.
15
+
16
+ - **A menu opened at a point stays on the screen.** A context menu's point was a
17
+ top and a left and nothing more, so a menu asked for near the bottom or right
18
+ edge opened off the screen.
19
+
20
+ The layout engine gains `anchorPoint`, a point placed beside as an anchor of no
21
+ size would be — the same flip and clamp — and overlays a `point` option that
22
+ uses it. `Menu`'s `at` opens below and to the right of the point, and above or
23
+ to the left when there is no room.
24
+
25
+ Found by a spreadsheet's status bar, whose menu opened below the window.
26
+
27
+ ### Patch Changes
28
+
29
+ - **An absolute box past its containing block keeps its explicit size.** With no
30
+ room left on an axis, the loose constraint an absolute child was measured under
31
+ came out `(0, 0)`, which reads as tight, and a box with an explicit width or
32
+ height was laid out at zero on that axis — where one pixel of room would have
33
+ left it whole.
34
+
35
+ An explicit size is the box's own, as in CSS; the block no longer caps it.
36
+
37
+ - **The browser shells post OS file drops.** The `fileDrop` message, its shape and
38
+ the session that turns it into an ordinary drag have existed since drop targets
39
+ did, and nothing posted one: a zone accepting `gesso/files` could be written and
40
+ never reached.
41
+
42
+ `attachFileDrop` is the shell half, shared by `createApp`'s worker shell and
43
+ `createSyncApp`'s single-thread one because it is the same four DOM events
44
+ either way. It answers drags that carry files and no others, prevents the
45
+ default on every `dragover` (which is what tells a browser the drop is wanted)
46
+ and on `drop` (or the tab is replaced by the file), and reads the bytes before
47
+ posting the drop. The worker shell transfers the buffers rather than copying
48
+ them; a drop whose files cannot be read is reported as a leave, so no zone stays
49
+ lit waiting. `GessoRuntime.applyFileDrop` hands the message to the tree's drag
50
+ session.
51
+
52
+ The core half was wrong in a way no spec could have caught: `applyFileDrop` began
53
+ a drag with the files of `enter` and, on `drop`, only moved it, so a zone
54
+ received the payload the drag started with. A browser lets a page see the _types_
55
+ of dragged files and nothing else until they are let go, so that payload has
56
+ empty names and no bytes — every file dropped from a desktop would have arrived
57
+ unopenable. The spec that covered it sent the same files on both phases, which is
58
+ the one shape a browser never produces. It now sends what one does.
59
+
3
60
  ## 0.3.0
4
61
 
5
62
  ### Minor Changes
@@ -188,6 +188,16 @@ let UiEventType = /* @__PURE__ */ function(UiEventType) {
188
188
  */
189
189
  UiEventType["Paste"] = "paste";
190
190
  UiEventType["Click"] = "click";
191
+ /**
192
+ * A second Click on the same node, soon enough after the first and
193
+ * close enough to it.
194
+ *
195
+ * Dispatched after that second Click rather than instead of it, as
196
+ * the DOM's `dblclick` is: a listener that answers a click has
197
+ * already answered both by the time this arrives, which is what lets
198
+ * a double click on a cell select it and then do more.
199
+ */
200
+ UiEventType["DoubleClick"] = "doubleclick";
191
201
  UiEventType["LongPress"] = "longpress";
192
202
  UiEventType["DragStart"] = "dragstart";
193
203
  UiEventType["DragMove"] = "dragmove";
@@ -3937,6 +3947,20 @@ const UiProperties = {
3937
3947
  inherited: false,
3938
3948
  affects: L
3939
3949
  }),
3950
+ /**
3951
+ * A point to be placed beside, as though it were an anchor of no
3952
+ * size: where a context menu was asked for. Relative to the
3953
+ * containing block, like `top` and `left`, and with `placement` the
3954
+ * same flip and clamp an anchored node gets — so a menu opened near
3955
+ * the bottom edge opens upward instead of off the screen. Ignored
3956
+ * when `anchor` is set.
3957
+ */
3958
+ anchorPoint: defineProperty({
3959
+ name: "anchorPoint",
3960
+ defaultValue: void 0,
3961
+ inherited: false,
3962
+ affects: L
3963
+ }),
3940
3964
  /** Gap between an anchored node and its anchor. */
3941
3965
  anchorOffset: defineProperty({
3942
3966
  name: "anchorOffset",
@@ -9435,6 +9459,15 @@ var UiPointerController = class {
9435
9459
  onHoverChange;
9436
9460
  editing;
9437
9461
  selection;
9462
+ now;
9463
+ /**
9464
+ * The last Click, for telling whether the next one makes a pair.
9465
+ *
9466
+ * Only a Click counts, not a press: a press that became a drag, or
9467
+ * was cancelled, is not half of a double click, and a release that
9468
+ * followed one would otherwise be read as the second half of it.
9469
+ */
9470
+ lastClick = null;
9438
9471
  hoverNode = null;
9439
9472
  downTarget = null;
9440
9473
  downX = 0;
@@ -9461,6 +9494,7 @@ var UiPointerController = class {
9461
9494
  this.onHoverChange = options.onHoverChange ?? null;
9462
9495
  this.editing = options.editing;
9463
9496
  this.selection = options.selection;
9497
+ this.now = options.now ?? defaultClock$2;
9464
9498
  }
9465
9499
  /** The node currently under the pointer, or null over empty space. */
9466
9500
  /** Where the pointer was last seen, in canvas space; null before it has been. */
@@ -9597,12 +9631,39 @@ var UiPointerController = class {
9597
9631
  if (dx <= slop && dy <= slop) {
9598
9632
  const click = new UiPointerEvent("click", x, y, buttons, modifiers, pointer);
9599
9633
  this.dispatcher.dispatch(click, target);
9600
- }
9601
- }
9634
+ this.countClick(target, x, y, buttons, modifiers, pointer);
9635
+ } else this.lastClick = null;
9636
+ } else this.lastClick = null;
9602
9637
  this.releaseHover(x, y, modifiers, pointer);
9603
9638
  return event;
9604
9639
  }
9605
9640
  /**
9641
+ * Pairs this Click with the one before it, and dispatches a
9642
+ * DoubleClick when they make a pair.
9643
+ *
9644
+ * A pair is two Clicks on the same node within `MULTI_CLICK_MS` and
9645
+ * `MULTI_CLICK_SLOP` of each other — the window the editing and
9646
+ * selection controllers already use for a word, so a double click
9647
+ * means the same thing on a label as it does in a field. The pair is
9648
+ * spent once it has fired: a third Click starts the next pair rather
9649
+ * than making a second DoubleClick out of the second and third.
9650
+ */
9651
+ countClick(target, x, y, buttons, modifiers, pointer) {
9652
+ const now = this.now();
9653
+ const last = this.lastClick;
9654
+ if (!(last !== null && last.node === target && now - last.at <= MULTI_CLICK_MS$1 && Math.abs(last.x - x) <= MULTI_CLICK_SLOP$1 && Math.abs(last.y - y) <= MULTI_CLICK_SLOP$1)) {
9655
+ this.lastClick = {
9656
+ node: target,
9657
+ x,
9658
+ y,
9659
+ at: now
9660
+ };
9661
+ return;
9662
+ }
9663
+ this.lastClick = null;
9664
+ this.dispatcher.dispatch(new UiPointerEvent("doubleclick", x, y, buttons, modifiers, pointer), target);
9665
+ }
9666
+ /**
9606
9667
  * Aborts the active press: dispatches PointerCancel to the pressed
9607
9668
  * node and clears press state so no Click is synthesized.
9608
9669
  */
@@ -9754,6 +9815,12 @@ var UiPointerController = class {
9754
9815
  function isSecondaryButton(buttons) {
9755
9816
  return buttons === 2;
9756
9817
  }
9818
+ /** How long, and how far, a second Click may be from the first and still pair with it. */
9819
+ const MULTI_CLICK_MS$1 = 500;
9820
+ const MULTI_CLICK_SLOP$1 = 4;
9821
+ function defaultClock$2() {
9822
+ return typeof performance !== "undefined" ? performance.now() : Date.now();
9823
+ }
9757
9824
  //#endregion
9758
9825
  //#region src/input/UiKeyboardController.ts
9759
9826
  /**
@@ -9808,13 +9875,19 @@ var UiKeyboardController = class {
9808
9875
  this.find = options.find;
9809
9876
  this.activation = options.activation;
9810
9877
  }
9811
- keyDown(key, modifiers = noKeyModifiers()) {
9878
+ /**
9879
+ * `textFollows` says whether the shell will send the key's text on its
9880
+ * own, as a `beforeinput`. False — a key that reached the canvas while
9881
+ * an editable held the focus — has the key inserted here, whatever the
9882
+ * text source; absent leaves it to the editing controller's setting.
9883
+ */
9884
+ keyDown(key, modifiers = noKeyModifiers(), textFollows) {
9812
9885
  if (!MODIFIER_KEYS.has(key)) this.focusManager.noteInput("keyboard");
9813
9886
  const event = new UiKeyboardEvent("keydown", key, modifiers);
9814
9887
  const focused = this.focusManager.focusedNode;
9815
9888
  const target = focused ?? this.root();
9816
9889
  this.dispatcher.dispatch(event, target);
9817
- if (!event.defaultPrevented && focused !== null && this.editing !== void 0 && this.editing.handleKey(focused, key, modifiers)) {
9890
+ if (!event.defaultPrevented && focused !== null && this.editing !== void 0 && this.editing.handleKey(focused, key, modifiers, textFollows === false ? true : void 0)) {
9818
9891
  event.preventDefault();
9819
9892
  return event;
9820
9893
  }
@@ -10808,9 +10881,10 @@ var UiEditingController = class {
10808
10881
  * when the key was an editing command, so the caller can mark the
10809
10882
  * event handled.
10810
10883
  */
10811
- handleKey(node, key, modifiers) {
10884
+ /** `textFromKeys` overrides the controller's own setting for this one key; see `UiKeyboardController.keyDown`. */
10885
+ handleKey(node, key, modifiers, textFromKeys = this.textFromKeys) {
10812
10886
  if (!isEditableNode(node)) return false;
10813
- const command = commandForKey(key, modifiers, this.platform, this.textFromKeys);
10887
+ const command = commandForKey(key, modifiers, this.platform, textFromKeys);
10814
10888
  if (command === null) return false;
10815
10889
  return this.execute(node, command);
10816
10890
  }
@@ -15183,6 +15257,7 @@ var LayoutEngine = class {
15183
15257
  };
15184
15258
  this.resolveLayoutProps(child, cRec);
15185
15259
  const anchor = child.properties.get("anchor");
15260
+ const point = child.properties.get("anchorPoint");
15186
15261
  if (anchor !== void 0 && anchor !== null) {
15187
15262
  this.anchoredNodes.add(child);
15188
15263
  this.trackAnchor(child, anchor);
@@ -15191,6 +15266,12 @@ var LayoutEngine = class {
15191
15266
  this.placeAnchored(child, cRec, anchorRec, anchor, block);
15192
15267
  return;
15193
15268
  }
15269
+ } else if (point !== void 0 && point !== null) {
15270
+ this.anchoredNodes.delete(child);
15271
+ this.trackAnchor(child, null);
15272
+ this.measure(child, new Constraints(0, Math.max(0, block.width), 0, Math.max(0, block.height)));
15273
+ this.placeBeside(child, cRec, block.x + point.x, block.y + point.y, 0, 0, block);
15274
+ return;
15194
15275
  } else {
15195
15276
  this.anchoredNodes.delete(child);
15196
15277
  this.trackAnchor(child, null);
@@ -15199,9 +15280,11 @@ var LayoutEngine = class {
15199
15280
  const marginV = cRec.marginTop + cRec.marginBottom;
15200
15281
  const availableWidth = Math.max(0, block.width - (cRec.left ?? 0) - (cRec.right ?? 0) - marginH);
15201
15282
  const availableHeight = Math.max(0, block.height - (cRec.top ?? 0) - (cRec.bottom ?? 0) - marginV);
15202
- const tightWidth = cRec.left !== void 0 && cRec.right !== void 0 && this.lengthProp(child, "width", block.width) === void 0;
15203
- const tightHeight = cRec.top !== void 0 && cRec.bottom !== void 0 && this.lengthProp(child, "height", block.height) === void 0;
15204
- this.measure(child, new Constraints(tightWidth ? availableWidth : 0, availableWidth, tightHeight ? availableHeight : 0, availableHeight));
15283
+ const explicitWidth = this.lengthProp(child, "width", block.width) !== void 0;
15284
+ const explicitHeight = this.lengthProp(child, "height", block.height) !== void 0;
15285
+ const tightWidth = cRec.left !== void 0 && cRec.right !== void 0 && !explicitWidth;
15286
+ const tightHeight = cRec.top !== void 0 && cRec.bottom !== void 0 && !explicitHeight;
15287
+ this.measure(child, new Constraints(tightWidth ? availableWidth : 0, explicitWidth ? Infinity : availableWidth, tightHeight ? availableHeight : 0, explicitHeight ? Infinity : availableHeight));
15205
15288
  const width = cRec.measuredWidth;
15206
15289
  const height = cRec.measuredHeight;
15207
15290
  let x;
@@ -15229,18 +15312,25 @@ var LayoutEngine = class {
15229
15312
  */
15230
15313
  placeAnchored(child, cRec, anchorRec, anchor, block) {
15231
15314
  this.measure(child, new Constraints(0, Math.max(0, block.width), 0, Math.max(0, block.height)));
15232
- const width = cRec.measuredWidth;
15233
- const height = cRec.measuredHeight;
15234
- const gap = this.numberProp(child, "anchorOffset") ?? 0;
15235
- const { side, align } = this.parsePlacement(child.properties.get("placement"));
15236
15315
  const scrollAnchor = this.scrollOffsetOf(anchor);
15237
15316
  const scrollChild = this.scrollOffsetOf(child);
15238
15317
  const stickyAnchor = this.stickyOffsetOf(anchor);
15239
15318
  const stickyChild = this.stickyOffsetOf(child);
15240
15319
  const ax = anchorRec.x + stickyAnchor.x - scrollAnchor.x + scrollChild.x - stickyChild.x;
15241
15320
  const ay = anchorRec.y + stickyAnchor.y - scrollAnchor.y + scrollChild.y - stickyChild.y;
15242
- const aw = anchorRec.width;
15243
- const ah = anchorRec.height;
15321
+ this.placeBeside(child, cRec, ax, ay, anchorRec.width, anchorRec.height, block);
15322
+ }
15323
+ /**
15324
+ * Places a measured node beside a box — an anchor's, or a point's of
15325
+ * no size — flipping to the opposite side when the named one would
15326
+ * overflow the block and the other has more room, and clamping along
15327
+ * the side to stay inside it.
15328
+ */
15329
+ placeBeside(child, cRec, ax, ay, aw, ah, block) {
15330
+ const width = cRec.measuredWidth;
15331
+ const height = cRec.measuredHeight;
15332
+ const gap = this.numberProp(child, "anchorOffset") ?? 0;
15333
+ const { side, align } = this.parsePlacement(child.properties.get("placement"));
15244
15334
  const vertical = side === "top" || side === "bottom";
15245
15335
  let resolvedSide = side;
15246
15336
  if (vertical) {
@@ -18212,4 +18302,4 @@ function createCanvasSurface(host) {
18212
18302
  //#endregion
18213
18303
  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 };
18214
18304
 
18215
- //# sourceMappingURL=CanvasSurface-ifHkg0-g.js.map
18305
+ //# sourceMappingURL=CanvasSurface-BR7hECHm.js.map