gesso-core 0.4.2 → 0.5.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.
@@ -1013,6 +1013,32 @@ declare class LayoutRecord {
1013
1013
  * that offset to its content extent.
1014
1014
  */
1015
1015
  clips: boolean;
1016
+ /**
1017
+ * Where anything in this subtree may paint, in the same space as the
1018
+ * box: the box itself, grown by whatever reaches past it under a node
1019
+ * that doesn't clip (an absolute child, a child pushed past it). A
1020
+ * renderer culls a node by this rather than by its box, since a node
1021
+ * that doesn't clip lets its children paint anywhere. It's the box
1022
+ * whenever nothing reaches past, which is nearly always. Worked out
1023
+ * when a node with children is placed, and grown up the ancestors
1024
+ * when a box is written; too large costs a descent, never a paint.
1025
+ */
1026
+ extentMinX: number;
1027
+ extentMinY: number;
1028
+ extentMaxX: number;
1029
+ extentMaxY: number;
1030
+ /**
1031
+ * How far past each side of its box the node itself paints: its
1032
+ * outer `boxShadows`, which no clip of its own holds in. Zero for
1033
+ * nearly every node. Part of the extent, and of a clipping node's
1034
+ * contribution to its parent's, since its clip is for its children.
1035
+ * Read from the node when its box is written and when a frame
1036
+ * repaints it; see `LayoutEngine.refreshPaintReach`.
1037
+ */
1038
+ paintReachLeft: number;
1039
+ paintReachTop: number;
1040
+ paintReachRight: number;
1041
+ paintReachBottom: number;
1016
1042
  scrollable: boolean;
1017
1043
  /**
1018
1044
  * An editable, which scrolls its own text inside its box.
@@ -1089,42 +1115,54 @@ declare class LayoutRecord {
1089
1115
  /** Constraints this record was last measured under. */
1090
1116
  lastConstraints: Constraints;
1091
1117
  /**
1092
- * A second memoised measurement. Flex measures every item twice —
1093
- * loose for its max-content size, then tight at its final size — and
1094
- * a one-entry memo would miss on every pass of every later frame. The
1095
- * outputs of the previous constraints are kept here and swapped back
1096
- * in when those constraints come round again, so an unchanged item
1097
- * costs nothing in either pass.
1098
- */
1099
- altValid: boolean;
1100
- altConstraints: Constraints;
1101
- /**
1102
- * The alternate measurement's twelve outputs, one field each.
1103
- *
1104
- * These were a `number[]` built by an `outputs()` helper, which reads
1105
- * better and cost two array allocations on every flex item of every
1106
- * pass: a full pass of the benchmark list spent 2.2% of its time in
1107
- * the pair of helpers that packed and unpacked them, before the
1108
- * collector's share of having made the arrays at all. A field per
1109
- * output is the same twelve numbers with nothing built to hold them.
1110
- */
1111
- private altMeasuredWidth;
1112
- private altMeasuredHeight;
1113
- private altOuterWidth;
1114
- private altOuterHeight;
1115
- private altMinContentWidth;
1116
- private altMinContentHeight;
1117
- private altMaxContentWidth;
1118
- private altIntrinsicWidth;
1119
- private altIntrinsicHeight;
1120
- private altHasBaseline;
1121
- private altBaseline;
1122
- private altContentWidth;
1123
- private altContentHeight;
1124
- /** Keeps the current measurement as the alternate before a fresh one overwrites it. */
1118
+ * The percentage base the current measurement resolved against, and
1119
+ * whether the node has a length that resolves against one.
1120
+ *
1121
+ * A percentage is resolved against the container's content box,
1122
+ * which is not in the constraints. A node sized `height: 100%` and
1123
+ * asked the same loose constraints under a taller container must
1124
+ * not be handed back the height it had in the shorter one, so for a
1125
+ * node with a percentage the base is part of what a memo matches.
1126
+ * Each axis counts only for a node with a percentage on it, so a
1127
+ * block that is `width: 100%` is not measured again because its
1128
+ * column's height changed, and a node with none (the overwhelming
1129
+ * majority) matches as cheaply as it always did.
1130
+ */
1131
+ lastBaseWidth: number | undefined;
1132
+ lastBaseHeight: number | undefined;
1133
+ percentWidth: boolean;
1134
+ percentHeight: boolean;
1135
+ /** Whether a measurement under `baseWidth` by `baseHeight` would resolve the same percentages as the current one. */
1136
+ sameBase(baseWidth: number | undefined, baseHeight: number | undefined): boolean;
1137
+ /**
1138
+ * Earlier memoised measurements, most recently used first.
1139
+ *
1140
+ * Flex measures an item more than once a pass, and a memo of one
1141
+ * entry missed on every pass of every later frame. Two entries (the
1142
+ * last one and one alternate) covered a column of items: loose for
1143
+ * the max-content size, then tight at the final size. A row with a
1144
+ * flexible child holding a column of auto-height blocks asks that
1145
+ * column's items a third question: the flex basis measures them
1146
+ * unbounded, the final width measures them loose in height, and a
1147
+ * row that stretches its items measures them again at the stretched
1148
+ * height. With two slots the third evicted one of the others, so an
1149
+ * edit to one block re-measured every block on every keystroke: 6,005
1150
+ * nodes for a 1,000-paragraph document, where a hit costs nothing.
1151
+ *
1152
+ * The slots are allocated the first time a record needs one, so a
1153
+ * node only ever measured one way carries none.
1154
+ */
1155
+ private alternates;
1156
+ /** Keeps the current measurement as the most recent alternate before a fresh one overwrites it. */
1125
1157
  saveAlt(): void;
1126
- /** Makes the alternate measurement current, and the current one alternate. */
1127
- swapAlt(): void;
1158
+ /**
1159
+ * Makes a remembered measurement for these constraints current, and
1160
+ * keeps the current one as an alternate in its place. False when
1161
+ * nothing remembered matches.
1162
+ */
1163
+ recallAlt(constraints: Constraints, baseWidth?: number, baseHeight?: number): boolean;
1164
+ /** Forgets every remembered measurement: the node's content changed. */
1165
+ forgetAlts(): void;
1128
1166
  /**
1129
1167
  * Set by the parent before measuring this node: something outside it
1130
1168
  * reads a content-derived output beyond its constrained size — its
@@ -1143,6 +1181,8 @@ declare class LayoutRecord {
1143
1181
  relayoutBoundary: boolean;
1144
1182
  measureDirty: boolean;
1145
1183
  placeDirty: boolean;
1184
+ /** Whether the node's children have been placed at least once, so its subtree can be shifted rather than placed. */
1185
+ placedOnce: boolean;
1146
1186
  transformDirty: boolean;
1147
1187
  /**
1148
1188
  * Which layout pass last folded the node's properties onto this
@@ -1241,6 +1281,15 @@ interface UiColors {
1241
1281
  readonly selectionBackground: UiColor;
1242
1282
  readonly selectionForeground: UiColor;
1243
1283
  }
1284
+ /**
1285
+ * The stock palettes.
1286
+ *
1287
+ * Neutrals carry a little blue, as a screen's greys do now, rather
1288
+ * than being an even mix of the three channels; the accent is deep
1289
+ * enough that white on it reads (4.5:1 and up), which the bright
1290
+ * Material blue this replaced did not. Values are written as 8-bit
1291
+ * channels so each one can be read as the hex it is.
1292
+ */
1244
1293
  declare const lightColors: UiColors;
1245
1294
  declare const darkColors: UiColors;
1246
1295
  /**
@@ -1743,6 +1792,8 @@ interface LayoutStats {
1743
1792
  measured: number;
1744
1793
  /** Nodes whose place ran. */
1745
1794
  placed: number;
1795
+ /** Laid-out subtrees that moved without changing size, and were shifted rather than placed again. */
1796
+ shifted: number;
1746
1797
  /** Subtrees laid out from a relayout boundary instead of the root. */
1747
1798
  relayoutRoots: number;
1748
1799
  /** Whether the pass started from the root. */
@@ -1830,11 +1881,12 @@ declare class UiSharedElements {
1830
1881
  * But it must not disappear *yet*. A claim happens during
1831
1882
  * reconciliation, and the arriving node has no box until the frame
1832
1883
  * lays out — so yielding here leaves a window in which neither
1833
- * element is drawn. For a transform morph that window is closed
1834
- * within the same frame; for a geometry morph, which cannot write a
1835
- * box after layout has run, it is a whole frame long, and a whole
1836
- * frame with neither the old card nor the new one is a flash of the
1837
- * page behind them. It was exactly that visible.
1884
+ * element is drawn. The window closes within the frame now, for a
1885
+ * geometry morph as for a transform one, but only because the
1886
+ * arriving element takes its place in that frame's layout pass; when
1887
+ * a geometry morph's box waited for the next frame, a whole frame
1888
+ * with neither the old card nor the new one was a flash of the page
1889
+ * behind them, and it was exactly that visible.
1838
1890
  *
1839
1891
  * So the caller yields the previous holder at the moment it actually
1840
1892
  * takes its place. Until then both are on screen, in the same
@@ -1991,6 +2043,15 @@ declare class DirtyNodeSet {
1991
2043
  delete(node: UiNode): boolean;
1992
2044
  get size(): number;
1993
2045
  isEmpty(): boolean;
2046
+ /**
2047
+ * Whether any node in the set carries one of `flags`, without
2048
+ * draining it.
2049
+ *
2050
+ * What a frame asks after its layout listeners have run: whether one
2051
+ * of them wrote something that has to be laid out again before the
2052
+ * frame paints. Stops at the first node that says yes.
2053
+ */
2054
+ anyFlags(flags: DirtyFlags): boolean;
1994
2055
  /**
1995
2056
  * Drains the set, returning the nodes in insertion order.
1996
2057
  */
@@ -2290,7 +2351,21 @@ declare class UiKeyboardEvent extends UiInputEvent {
2290
2351
  declare class UiBeforeInputEvent extends UiInputEvent {
2291
2352
  readonly inputType: string;
2292
2353
  readonly data: string | null;
2293
- constructor(inputType: string, data: string | null);
2354
+ /**
2355
+ * For `insertFromPaste`, the clipboard's HTML when it held some,
2356
+ * else null. `data` is always its plain text, which is what the
2357
+ * field inserts; an editor that keeps structure (a heading, a list,
2358
+ * a link) can cancel the edit and convert this instead.
2359
+ */
2360
+ readonly html: string | null;
2361
+ constructor(inputType: string, data: string | null,
2362
+ /**
2363
+ * For `insertFromPaste`, the clipboard's HTML when it held some,
2364
+ * else null. `data` is always its plain text, which is what the
2365
+ * field inserts; an editor that keeps structure (a heading, a list,
2366
+ * a link) can cancel the edit and convert this instead.
2367
+ */
2368
+ html?: string | null);
2294
2369
  }
2295
2370
  /**
2296
2371
  * An editable node's text changed: the new value and the selection
@@ -2306,7 +2381,11 @@ declare class UiBeforeInputEvent extends UiInputEvent {
2306
2381
  */
2307
2382
  declare class UiPasteEvent extends UiInputEvent {
2308
2383
  readonly text: string;
2309
- constructor(text: string);
2384
+ /** The clipboard's HTML when it held some, else null. */
2385
+ readonly html: string | null;
2386
+ constructor(text: string,
2387
+ /** The clipboard's HTML when it held some, else null. */
2388
+ html?: string | null);
2310
2389
  }
2311
2390
  declare class UiTextChangeEvent extends UiInputEvent {
2312
2391
  readonly value: string;
@@ -2665,6 +2744,246 @@ interface ComponentResolver {
2665
2744
  flushMounts(): void;
2666
2745
  }
2667
2746
  //#endregion
2747
+ //#region src/input/UiFocusManager.d.ts
2748
+ /**
2749
+ * One entry on the focus scope stack.
2750
+ *
2751
+ * `restore` is what held focus when the scope was pushed, so popping
2752
+ * can hand focus back to the control that opened the dialog. Scopes
2753
+ * nest: a confirmation dialog over a dialog pushes a second one, and
2754
+ * each pop restores its own opener.
2755
+ */
2756
+ /**
2757
+ * What moved focus, which decides whether the focused node is scrolled
2758
+ * into view.
2759
+ *
2760
+ * A browser draws the same distinction and it is the reason it exists:
2761
+ * keyboard focus must reveal its target, because a control the person
2762
+ * cannot see is a control they cannot use, while a *click* has already
2763
+ * shown them where they are — the thing they pressed is under their
2764
+ * cursor. Scrolling after a click moves the page out from under a
2765
+ * pointer that is still there, and on a tall element that is a jump of
2766
+ * most of the screen.
2767
+ */
2768
+ type FocusSource = 'pointer' | 'keyboard' | 'program';
2769
+ /**
2770
+ * How focus is moved, beyond what moved it. The DOM's `FocusOptions`,
2771
+ * for the part of it that means something here.
2772
+ */
2773
+ interface FocusOptions {
2774
+ /**
2775
+ * Leaves every scroll container where it is, as
2776
+ * `element.focus({ preventScroll: true })` does: the node takes focus
2777
+ * without being scrolled into view.
2778
+ *
2779
+ * For focus placed for a screen reader's sake rather than the eye's.
2780
+ * A page that focuses its content region when it opens, so the region
2781
+ * is read out, starts at its top; revealing the region as well would
2782
+ * scroll a tall one to a few pixels short of its own edge, because a
2783
+ * reveal keeps a margin from the viewport.
2784
+ *
2785
+ * Kept for as long as the node holds focus: a key pressed later makes
2786
+ * the focus visible without scrolling to it either. Moving focus
2787
+ * again, by Tab or by code, reveals as usual.
2788
+ */
2789
+ readonly preventScroll?: boolean;
2790
+ }
2791
+ /**
2792
+ * How the person last drove the app, as far as focus can tell: the
2793
+ * pointer or the keyboard. This is what decides whether focus is
2794
+ * *visible*, the way `:focus-visible` does in a browser: a ring that
2795
+ * appeared on every mouse click would mark a control nobody is about to
2796
+ * drive with the keyboard, so the ring waits until the keyboard is used.
2797
+ */
2798
+ type FocusModality = 'pointer' | 'keyboard';
2799
+ /**
2800
+ * Logical focus within the UI tree.
2801
+ *
2802
+ * At most one node holds focus at a time. Focus transitions are
2803
+ * target-only: the node losing focus receives Blur (with the new
2804
+ * node as `relatedNode`), then the node gaining focus receives Focus
2805
+ * (with the old node as `relatedNode`).
2806
+ *
2807
+ * Tab / Shift+Tab navigation walks the focusable nodes in document
2808
+ * (depth-first) order and wraps around. A node participates when
2809
+ * `isNodeFocusable` says so: focusable by type (Button), explicitly
2810
+ * opted in via `focusable: true`, and never when inert.
2811
+ *
2812
+ * Focus-on-press is applied through `focusOnPress`, which the pointer
2813
+ * pipeline calls after a successful pointerdown (skipped when the
2814
+ * down was defaultPrevented).
2815
+ *
2816
+ * **Scopes.** `pushScope(node)` confines focus to a subtree: traversal
2817
+ * collects only that subtree's focusables, so Tab wraps inside it, and
2818
+ * `focus()` refuses a node outside it — which is what makes a modal
2819
+ * dialog modal for the keyboard. `popScope()` restores focus to
2820
+ * whatever held it when the scope was pushed. Components reach both
2821
+ * through `FocusService`, never directly.
2822
+ */
2823
+ declare class UiFocusManager {
2824
+ private readonly dispatcher;
2825
+ private root;
2826
+ private focused;
2827
+ /**
2828
+ * Keyboard until told otherwise, so focus placed before any input
2829
+ * (an `autoFocus`, a dialog's first field) is visible, as a browser
2830
+ * would show it.
2831
+ */
2832
+ private modality;
2833
+ /** How the focused node took focus; see `FocusOptions.preventScroll`. */
2834
+ private focusedOptions;
2835
+ private readonly listeners;
2836
+ private readonly scopeListeners;
2837
+ private readonly scopes;
2838
+ /** The field of each editing group that last had focus, where Tab back into the group lands. */
2839
+ private readonly groupEntries;
2840
+ constructor(root: UiNode, dispatcher: UiInputDispatcher);
2841
+ /** The root used for focus-order traversal. Clears any active scope. */
2842
+ setRoot(root: UiNode): void;
2843
+ /** The node that currently holds logical focus, or null. */
2844
+ get focusedNode(): UiNode | null;
2845
+ hasFocus(): boolean;
2846
+ /** How the person last drove the app. */
2847
+ get focusModality(): FocusModality;
2848
+ /**
2849
+ * Whether the focus held should be shown. True while focus was
2850
+ * reached by the keyboard, or by code with no pointer since; false
2851
+ * after a pointer press, until the next key.
2852
+ */
2853
+ get focusVisible(): boolean;
2854
+ /**
2855
+ * Records an input the person made. A change of modality while a node
2856
+ * holds focus is reported to the focus listeners as a change on that
2857
+ * node, so a ring can appear on a mouse-focused control the moment an
2858
+ * arrow key is pressed, and disappear again on the next press.
2859
+ */
2860
+ noteInput(modality: FocusModality): void;
2861
+ /**
2862
+ * The subtree focus is currently confined to: the innermost scope,
2863
+ * or the whole tree when none is active.
2864
+ */
2865
+ get scopeRoot(): UiNode;
2866
+ /** Whether focus is confined to a subtree. */
2867
+ get trapped(): boolean;
2868
+ /**
2869
+ * Moves focus to the node. Returns false when the node cannot be
2870
+ * focused (inert, non-focusable, outside the active scope); true
2871
+ * otherwise, including when the node already held focus (a no-op
2872
+ * that emits nothing).
2873
+ *
2874
+ * `options` travel with the change to the listeners, which is where
2875
+ * the runtime decides whether to scroll the node into view.
2876
+ */
2877
+ focus(node: UiNode, source?: FocusSource, options?: FocusOptions): boolean;
2878
+ /**
2879
+ * Called after focus moves or clears, with the new focused node. The
2880
+ * runtime uses it to scroll the focused node into view, unless the
2881
+ * options say not to.
2882
+ */
2883
+ onFocusChange(listener: (node: UiNode | null, source: FocusSource, options: FocusOptions) => void): () => void;
2884
+ /** Called after a scope is pushed or popped. */
2885
+ onScopeChange(listener: () => void): () => void;
2886
+ private notify;
2887
+ private notifyScope;
2888
+ /** Drops focus without moving it anywhere. */
2889
+ blur(): void;
2890
+ /**
2891
+ * Focus-on-press hook: focuses the nearest focusable node at or above
2892
+ * the one that was pressed.
2893
+ *
2894
+ * The walk upward is what the DOM does, and what a container that is
2895
+ * one tab stop needs: pressing a tab hits the Text inside it, a table
2896
+ * cell hits a Box three levels below the table, and a component whose
2897
+ * arrows move a selection is keyboard-dead after a mouse press if the
2898
+ * press left focus where it was. Found in a browser, on `Tabs` —
2899
+ * clicking a tab selected it and the arrows then did nothing.
2900
+ *
2901
+ * Nothing focusable above the press leaves focus untouched, as before:
2902
+ * pressing the page background is not a request to blur.
2903
+ */
2904
+ focusOnPress(node: UiNode): void;
2905
+ /** Moves focus to the next focusable node, wrapping to the first. */
2906
+ focusNext(): boolean;
2907
+ /** Moves focus to the previous focusable node, wrapping to the last. */
2908
+ focusPrevious(): boolean;
2909
+ /**
2910
+ * Confines focus to `root` until the matching `popScope`.
2911
+ *
2912
+ * Focus that is outside the new scope moves to its first focusable,
2913
+ * so the very next Tab stays inside; a scope with nothing focusable
2914
+ * in it drops focus rather than leaving it behind the dialog.
2915
+ */
2916
+ pushScope(root: UiNode): void;
2917
+ /**
2918
+ * Moves focus into the innermost scope when it is outside it, and
2919
+ * drops it when the scope has nothing to focus.
2920
+ *
2921
+ * A scope is usually taken from a `ref`, which fires before the
2922
+ * node's children are reconciled — so at that moment a dialog is an
2923
+ * empty box and there is nothing in it to focus. The runtime calls
2924
+ * this again once the frame's tree is built, which is when a dialog
2925
+ * gets its caret. Idempotent: with focus already inside the scope,
2926
+ * or no scope at all, it does nothing.
2927
+ *
2928
+ * **The scope root is the fallback, and it is the whole reason
2929
+ * `tabStop` exists.** A scope with no tab stop inside it used to
2930
+ * blur, which hands the keyboard to nothing: a `Dialog` whose body
2931
+ * is a sentence and a button could not be dismissed with Escape,
2932
+ * because Escape had nowhere to be delivered. Falling back to the
2933
+ * root fixes that only if the root can hold focus without becoming a
2934
+ * stop of its own, or every dialog grows a tab stop that announces
2935
+ * nothing. `focusable: true, tabStop: false` on the body is exactly
2936
+ * that pair, and the fallback is what makes it worth setting.
2937
+ *
2938
+ * Blurring is still what happens when the root cannot hold focus
2939
+ * either, because a scope that has genuinely nothing to focus is
2940
+ * better admitted than faked.
2941
+ */
2942
+ settleScope(): void;
2943
+ /**
2944
+ * Ends the innermost scope and hands focus back to whatever held it
2945
+ * when that scope was pushed, when that node is still in the tree
2946
+ * and still focusable. Otherwise focus is dropped rather than left
2947
+ * on a node the scope was hiding.
2948
+ */
2949
+ popScope(): void;
2950
+ /**
2951
+ * Reacts to a subtree leaving the graph.
2952
+ *
2953
+ * The graph reports the root of a removed subtree after detaching
2954
+ * every node in it, so the descendants' parent links are already
2955
+ * gone: the test is "is this node still attached", not "was it in
2956
+ * that subtree".
2957
+ *
2958
+ * A scope whose subtree has gone is a trap that ended, so it is
2959
+ * popped as though the component had released it and focus returns
2960
+ * to the opener — a dialog that unmounts hands the keyboard back
2961
+ * without having to sequence its own teardown. Focus lost with the
2962
+ * subtree is dropped without a Blur, since the node's listeners were
2963
+ * released with it.
2964
+ */
2965
+ handleNodeRemoved(_node: UiNode): void;
2966
+ private moveFocus;
2967
+ /**
2968
+ * The tab stops in document order (parent before children).
2969
+ *
2970
+ * Tab stops and not every focusable node: a container with
2971
+ * `tabStop: false` can hold focus and is not a place the cycle
2972
+ * stops, which is what lets a dialog body be the keyboard's home of
2973
+ * last resort without becoming a stop of its own.
2974
+ */
2975
+ private collectFocusable;
2976
+ /** Whether an ancestor is hidden or disabled, which takes the node's focus away with it. */
2977
+ private insideHidden;
2978
+ /** The editing group a field belongs to, by its root, or null for anything that isn't a field of one. */
2979
+ private groupOf;
2980
+ /** Whether the node may hold focus given the active scope, if any. */
2981
+ private withinScope;
2982
+ /** Whether the node is still connected to the traversal root. */
2983
+ private isAttached;
2984
+ private isWithin;
2985
+ }
2986
+ //#endregion
2668
2987
  //#region src/modifiers/UiModifierHost.d.ts
2669
2988
  /** Anything a modifier can hand to `own` to have released on detach. */
2670
2989
  type UiModifierTeardown = (() => void) | {
@@ -2788,6 +3107,13 @@ interface UiModifierHost {
2788
3107
  * A scroll is a superset of what a listener may care about: read
2789
3108
  * `flowBox()` inside the listener when what matters is the node's
2790
3109
  * place in the layout rather than on the screen.
3110
+ *
3111
+ * It runs after the frame's layout and before the frame paints, and
3112
+ * the listener may change layout from it: the runtime lays out again
3113
+ * before painting, and tells the listeners whose boxes that moved, so
3114
+ * what was written is on screen on the same frame. The loop is
3115
+ * bounded, so a listener that answers its own change with another
3116
+ * one is painted unsettled and warned about rather than hanging.
2791
3117
  */
2792
3118
  onLayout(listener: (box: LayoutBox) => void): void;
2793
3119
  /**
@@ -2807,8 +3133,12 @@ interface UiModifierHost {
2807
3133
  * at all.
2808
3134
  */
2809
3135
  onEnvironment(listener: () => void): void;
2810
- /** Moves keyboard focus to the node, if it can take it. */
2811
- focus(): void;
3136
+ /**
3137
+ * Moves keyboard focus to the node, if it can take it. It is scrolled
3138
+ * into view as any focus from code is, unless `options.preventScroll`
3139
+ * says otherwise.
3140
+ */
3141
+ focus(options?: FocusOptions): void;
2812
3142
  /** Whether the node currently holds keyboard focus. */
2813
3143
  isFocused(): boolean;
2814
3144
  /**
@@ -2965,7 +3295,7 @@ interface UiModifierFocus {
2965
3295
  isFocused(node: UiNode): boolean;
2966
3296
  /** Whether the focus `node` holds should be shown; see `UiFocusManager.focusVisible`. */
2967
3297
  isFocusVisible(node: UiNode): boolean;
2968
- focus(node: UiNode): void;
3298
+ focus(node: UiNode, options?: FocusOptions): void;
2969
3299
  onFocusChange(node: UiNode, listener: (focused: boolean) => void): () => void;
2970
3300
  }
2971
3301
  /** Where a modifier's environment access comes from. */
@@ -3033,36 +3363,124 @@ declare class UiModifierSet {
3033
3363
  */
3034
3364
  declare function assertModifierList(node: UiNode, value: unknown): readonly UiModifier[];
3035
3365
  //#endregion
3036
- //#region src/environment/UiContainerSize.d.ts
3366
+ //#region src/editing/UiEditingGroup.d.ts
3037
3367
  /**
3038
- * A box's content size as it changes, for the things that branch on
3039
- * it.
3368
+ * Fields that select as one: the editables inside a container that sets
3369
+ * `editingGroup`.
3040
3370
  *
3041
- * The value behind `UiEnvironmentKeys.containerSize`, and deliberately
3042
- * a *source* rather than a size. An environment value is a snapshot
3043
- * that a subtree caches, so putting a number in one would mean
3044
- * rebuilding the environment of everything under a container on every
3045
- * pixel of a drag. The source object never changes identity, so the
3046
- * environment is built once; what changes is what the source reports,
3047
- * and only the code that asked to hear about it does any work.
3371
+ * A document editor is many fields, one per paragraph, and a person
3372
+ * selects across paragraphs as if they were one text: dragging from one
3373
+ * into the next, Shift and an arrow off the end of a line, Shift and a
3374
+ * press further down, select all. Each field's own selection can only
3375
+ * cover its own text, so inside a group the editing controller keeps a
3376
+ * selection whose two ends may sit in different fields, lights every
3377
+ * field between them, and hands the shell the selected text, so native
3378
+ * copy and cut take all of it.
3048
3379
  *
3049
- * A media query is the wrong tool for this and is why the environment
3050
- * carries the container and not the window. `observeMediaQuery` needs
3051
- * a window, the runtime that would branch on it is usually in a
3052
- * worker, and the question a component actually has is "how much room
3053
- * do I have", which is not the window's width in any layout with a
3054
- * sidebar in it.
3055
- */
3056
- interface UiContainerSize {
3057
- /** The last size reported, or zeroes before the first layout. */
3058
- readonly current: Size;
3059
- /** Every distinct size, starting with `current`. */
3060
- readonly changes: Observable<Size>;
3061
- }
3062
- /**
3063
- * A container size nothing has measured yet.
3380
+ * What happens to such a selection when the person types, deletes,
3381
+ * presses Enter, pastes or cuts is the application's: only it knows
3382
+ * that joining a heading to the list under it makes a heading. So those
3383
+ * edits are not applied to any field. They go to `onEdit`, with both
3384
+ * ends, and the application changes its document and puts the caret
3385
+ * where it belongs.
3064
3386
  *
3065
- * The default for the environment key, so a component that reads the
3387
+ * A selection inside one field is that field's, as it always was.
3388
+ */
3389
+ interface UiEditingGroup {
3390
+ /** An edit over a selection that spans fields. Nothing is applied for it. */
3391
+ onEdit(edit: UiGroupEdit): void;
3392
+ /**
3393
+ * The text a selection spanning fields copies as. By default each
3394
+ * field's selected text, joined by newlines.
3395
+ */
3396
+ copyText?(start: UiTextPosition, end: UiTextPosition): string;
3397
+ /**
3398
+ * The selection as HTML, which a copy puts on the clipboard beside
3399
+ * the text, for a target that takes formatting (a document, an email).
3400
+ * Asked for a selection across fields and for one inside a single
3401
+ * field of the group. Null or absent copies text alone.
3402
+ */
3403
+ copyHtml?(start: UiTextPosition, end: UiTextPosition): string | null;
3404
+ /**
3405
+ * A selection across fields began, moved, or ended (null). For a
3406
+ * command the application runs over it, such as making it bold:
3407
+ * keys reach the focused field first, and only the group knows what
3408
+ * the selection covers.
3409
+ */
3410
+ onSelectionChange?(selection: {
3411
+ readonly start: UiTextPosition;
3412
+ readonly end: UiTextPosition;
3413
+ } | null): void;
3414
+ }
3415
+ /** A place in a field's text. */
3416
+ interface UiTextPosition {
3417
+ readonly node: UiNode;
3418
+ readonly offset: number;
3419
+ }
3420
+ /**
3421
+ * An edit over a selection that spans fields, in the DOM's vocabulary:
3422
+ * `insertText` with the text, `insertParagraph` for Enter,
3423
+ * `insertFromPaste`, a `delete…` type for Backspace and Delete, and
3424
+ * `deleteByCut`. `start` comes before `end` in document order.
3425
+ */
3426
+ interface UiGroupEdit {
3427
+ readonly inputType: string;
3428
+ readonly data: string | null;
3429
+ /** For a paste, the clipboard's HTML when it held some. */
3430
+ readonly html?: string | null;
3431
+ readonly start: UiTextPosition;
3432
+ readonly end: UiTextPosition;
3433
+ }
3434
+ /** The group a field belongs to, and the container that declared it, or null. */
3435
+ declare function editingGroupOf(node: UiNode): {
3436
+ readonly root: UiNode;
3437
+ readonly group: UiEditingGroup;
3438
+ } | null;
3439
+ /**
3440
+ * The next field in document order after `from` (or before it, for -1),
3441
+ * inside `root`, or null at either end. Walks only as far as it has to,
3442
+ * so stepping from one paragraph to the next costs the nodes between
3443
+ * them, not the whole document.
3444
+ */
3445
+ declare function adjacentField(root: UiNode, from: UiNode, direction: 1 | -1): UiNode | null;
3446
+ /** The first or last field inside `root`, or null when it has none. */
3447
+ declare function edgeField(root: UiNode, direction: 1 | -1): UiNode | null;
3448
+ /**
3449
+ * Which of two positions comes first in document order: negative, zero
3450
+ * or positive, as a comparator.
3451
+ */
3452
+ declare function comparePositions(a: UiTextPosition, b: UiTextPosition): number;
3453
+ //#endregion
3454
+ //#region src/environment/UiContainerSize.d.ts
3455
+ /**
3456
+ * A box's content size as it changes, for the things that branch on
3457
+ * it.
3458
+ *
3459
+ * The value behind `UiEnvironmentKeys.containerSize`, and deliberately
3460
+ * a *source* rather than a size. An environment value is a snapshot
3461
+ * that a subtree caches, so putting a number in one would mean
3462
+ * rebuilding the environment of everything under a container on every
3463
+ * pixel of a drag. The source object never changes identity, so the
3464
+ * environment is built once; what changes is what the source reports,
3465
+ * and only the code that asked to hear about it does any work.
3466
+ *
3467
+ * A media query is the wrong tool for this and is why the environment
3468
+ * carries the container and not the window. `observeMediaQuery` needs
3469
+ * a window, the runtime that would branch on it is usually in a
3470
+ * worker, and the question a component actually has is "how much room
3471
+ * do I have", which is not the window's width in any layout with a
3472
+ * sidebar in it.
3473
+ */
3474
+ interface UiContainerSize {
3475
+ /** The last size reported, or zeroes before the first layout. */
3476
+ readonly current: Size;
3477
+ /** Every distinct size, starting with `current`. */
3478
+ readonly changes: Observable<Size>;
3479
+ }
3480
+ /**
3481
+ * A container size nothing has measured yet.
3482
+ *
3483
+ * The default for the environment key, so a component that reads the
3066
3484
  * key outside any container gets zeroes and one emission rather than
3067
3485
  * an error. A layout branching on zero picks its narrowest arm, which
3068
3486
  * is the right guess for something whose room is unknown.
@@ -3249,24 +3667,28 @@ declare function propertyValuesEqual<T>(definition: UiPropertyDefinition<T>, a:
3249
3667
  //#endregion
3250
3668
  //#region src/properties/UiBoxShadow.d.ts
3251
3669
  /**
3252
- * Renderer-independent box shadow description.
3670
+ * Renderer-independent box shadow description, with CSS `box-shadow`
3671
+ * semantics.
3253
3672
  *
3254
- * A shadow is defined by its offset, blur, spread, color, and
3255
- * whether it is inset. The renderer is responsible for translating
3256
- * these semantics into drawing operations.
3673
+ * An outer shadow is the node's (rounded) box, grown by `spreadRadius`
3674
+ * on every side, moved by the offset, blurred by `blurRadius` (a
3675
+ * Gaussian whose standard deviation is half of it), and seen only
3676
+ * outside the box. An inset one is the same shape inverted and seen
3677
+ * only inside the box. `color` may be a palette name, resolved against
3678
+ * the node's theme as `backgroundColor` is.
3257
3679
  */
3258
3680
  interface UiBoxShadow {
3259
3681
  readonly offsetX: number;
3260
3682
  readonly offsetY: number;
3261
3683
  readonly blurRadius: number;
3262
3684
  readonly spreadRadius: number;
3263
- readonly color: UiColor;
3685
+ readonly color: UiColorValue;
3264
3686
  readonly inset?: boolean;
3265
3687
  }
3266
3688
  /**
3267
3689
  * Creates a box shadow with the supplied parameters.
3268
3690
  */
3269
- declare function boxShadow(offsetX: number, offsetY: number, blurRadius: number, spreadRadius: number, color: UiColor, inset?: boolean): UiBoxShadow;
3691
+ declare function boxShadow(offsetX: number, offsetY: number, blurRadius: number, spreadRadius: number, color: UiColorValue, inset?: boolean): UiBoxShadow;
3270
3692
  /**
3271
3693
  * Compares two box shadows for equality.
3272
3694
  */
@@ -3275,6 +3697,34 @@ declare function boxShadowsEqual(a: UiBoxShadow, b: UiBoxShadow): boolean;
3275
3697
  * Compares two shadow arrays for equality.
3276
3698
  */
3277
3699
  declare function boxShadowArraysEqual(a: readonly UiBoxShadow[], b: readonly UiBoxShadow[]): boolean;
3700
+ /**
3701
+ * How far a shadow's blur reaches past the edge of its shape, as a
3702
+ * multiple of `blurRadius`.
3703
+ *
3704
+ * The blur is a Gaussian with a standard deviation of half the radius,
3705
+ * so this is three standard deviations: what is left beyond it is
3706
+ * under a quarter of a percent of the shadow's colour, and both
3707
+ * renderers stop drawing there.
3708
+ */
3709
+ declare const BOX_SHADOW_BLUR_REACH = 1.5;
3710
+ /**
3711
+ * The corner radius of a shadow's shape, from the box's and the
3712
+ * spread: an outer shadow's corner grows with its spread, an inset
3713
+ * one's hole shrinks with it. A square corner stays square, as CSS
3714
+ * keeps it.
3715
+ */
3716
+ declare function boxShadowRadius(boxRadius: number, spreadRadius: number, inset: boolean): number;
3717
+ /**
3718
+ * How far past each side of the box a node's outer shadows may paint,
3719
+ * written into `out`; all zero for a node with none. Inset shadows
3720
+ * paint inside the box and add nothing.
3721
+ */
3722
+ declare function boxShadowReach(shadows: readonly UiBoxShadow[], out: {
3723
+ left: number;
3724
+ top: number;
3725
+ right: number;
3726
+ bottom: number;
3727
+ }): void;
3278
3728
  //#endregion
3279
3729
  //#region src/layout/UiLength.d.ts
3280
3730
  /**
@@ -3795,6 +4245,18 @@ interface UiTextMetrics {
3795
4245
  readonly fontVariant?: UiFontVariant;
3796
4246
  readonly fontKerning?: UiFontKerning;
3797
4247
  readonly letterSpacing?: number;
4248
+ /**
4249
+ * Kept in the text but not drawn: the run takes no room, paints
4250
+ * nothing, and a caret steps over it as one unit.
4251
+ *
4252
+ * It is a metric field because it changes a width, to nothing. Its
4253
+ * characters stay where they were, so every offset still means what
4254
+ * it meant, a copy of the text still copies them, and the semantics
4255
+ * mirror still reads them. It is how an editor that styles markup
4256
+ * as it is typed (`**bold**` drawn as a bold word) puts the markers
4257
+ * out of sight without taking them out of the string.
4258
+ */
4259
+ readonly hidden?: boolean;
3798
4260
  }
3799
4261
  /**
3800
4262
  * A run that is activated rather than only read.
@@ -3845,6 +4307,16 @@ interface UiSpannedText {
3845
4307
  readonly text: string;
3846
4308
  readonly spans: readonly UiResolvedTextSpan[];
3847
4309
  }
4310
+ /**
4311
+ * What text is set in when nothing says otherwise.
4312
+ *
4313
+ * `system-ui` is the platform's own interface face (San Francisco,
4314
+ * Segoe UI, Roboto), which is what an application on that platform is
4315
+ * expected to look like; `sans-serif` is there for an engine that does
4316
+ * not know the generic. The line is 20 on 14, about 1.43, because the
4317
+ * 1.2 that a browser's `normal` comes to sets lines too tight to read
4318
+ * in a paragraph. The ink is the stock palette's `text`, not black.
4319
+ */
3848
4320
  declare const defaultTextStyle: UiTextStyle;
3849
4321
  /** The text of a span array, with each run's offsets into it. */
3850
4322
  declare function flattenTextSpans(spans: readonly UiTextSpan[]): UiSpannedText;
@@ -3886,7 +4358,21 @@ declare function resolvedSpansOf(node: UiNode): readonly UiResolvedTextSpan[];
3886
4358
  * plain colour rather than a frame of nonsense, and corrects itself
3887
4359
  * as soon as the application catches up.
3888
4360
  */
3889
- declare function editableSpansOf(node: UiNode, text: string): readonly UiResolvedTextSpan[];
4361
+ declare function editableSpansOf(node: UiNode, text: string, composition?: UiTextRange | null): readonly UiResolvedTextSpan[];
4362
+ /** A stretch of a paragraph, as offsets into its text. */
4363
+ interface UiTextRange {
4364
+ readonly start: number;
4365
+ readonly end: number;
4366
+ }
4367
+ /** The part of a run `hiddenRangesOf` reads; a paint span has it as well as a resolved one. */
4368
+ type HiddenSpan = Pick<UiResolvedTextSpan, 'start' | 'end' | 'hidden'>;
4369
+ /**
4370
+ * The stretches of a paragraph its runs hide, in order, with runs that
4371
+ * touch merged into one: `**` hidden next to a hidden `_` is one
4372
+ * stretch of three characters, which a caret steps over at once.
4373
+ * Remembered by the identity of the array, as the flattening is.
4374
+ */
4375
+ declare function hiddenRangesOf(spans: readonly HiddenSpan[]): readonly UiTextRange[];
3890
4376
  /** The span covering an offset, or undefined where no run does. */
3891
4377
  declare function spanAtOffset(spans: readonly UiResolvedTextSpan[], offset: number): UiResolvedTextSpan | undefined;
3892
4378
  /**
@@ -4140,6 +4626,11 @@ type UiTypographyRole = keyof UiTypography | (keyof UiTypographyExtensions & str
4140
4626
  * drawing at a default size, which is the quieter of the two failures.
4141
4627
  */
4142
4628
  declare function isTypographyRole(value: unknown, scale: UiTypography): value is UiTypographyRole;
4629
+ /**
4630
+ * The stock scale: one face, and line heights on a 4-point grid rather
4631
+ * than 1.2 of the size, so a paragraph has room and a stack of text
4632
+ * lines up with the spacing scale around it.
4633
+ */
4143
4634
  declare const defaultTypography: UiTypography;
4144
4635
  /**
4145
4636
  * Compares two typography scales for equality.
@@ -5219,6 +5710,26 @@ interface CompositionRange {
5219
5710
  * took. `replaceText` — the host resetting the value from outside —
5220
5711
  * drops the history: the text it replaces never existed as far as the
5221
5712
  * next undo is concerned.
5713
+ *
5714
+ * **Hidden text.** Runs the field draws as nothing (`hidden` on a
5715
+ * span) are still in the text, and the caret treats each stretch of
5716
+ * them as one unit it cannot stop inside:
5717
+ *
5718
+ * - A move by grapheme or word crosses one visible grapheme or word,
5719
+ * and with it the hidden text in the way, and stops on the side of
5720
+ * any hidden text there nearest where it started. From the end of
5721
+ * `**bold**`, Left stops between `l` and `d`; from the start, Right
5722
+ * stops after `b`. Where nothing visible is left that way the caret
5723
+ * goes past the hidden text to the edge, so it is never stuck.
5724
+ * - Backspace and Delete remove the visible grapheme or word next to
5725
+ * the caret and keep hidden text at either end of it: Backspace at
5726
+ * the end of `**bold**` leaves `**bol**`. Hidden text strictly inside
5727
+ * what they remove goes with it, as it does from a selection, which
5728
+ * is deleted exactly as selected. With nothing visible that way they
5729
+ * delete nothing.
5730
+ * - An offset the application sets is kept as given, even inside
5731
+ * hidden text: it may be about to show that text. The next move
5732
+ * steps out of it.
5222
5733
  */
5223
5734
  declare class EditableTextModel {
5224
5735
  private textValue;
@@ -5230,6 +5741,9 @@ declare class EditableTextModel {
5230
5741
  private redoStack;
5231
5742
  private lastEdit;
5232
5743
  private lastEditEnd;
5744
+ private hiddenRanges;
5745
+ private hiddenText;
5746
+ private visibleCache;
5233
5747
  /** Whether the node holds focus; the caret only shows (and blinks) then. */
5234
5748
  focused: boolean;
5235
5749
  /**
@@ -5272,6 +5786,22 @@ declare class EditableTextModel {
5272
5786
  get composing(): boolean;
5273
5787
  get canUndo(): boolean;
5274
5788
  get canRedo(): boolean;
5789
+ /**
5790
+ * The stretches of the text that are not drawn, in order; empty when
5791
+ * none are, or when the ranges were given for a text the field no
5792
+ * longer holds (a keystroke the application has not restyled yet).
5793
+ */
5794
+ get hidden(): readonly UiTextRange[];
5795
+ /**
5796
+ * Says which stretches of `text` are not drawn. `editorFor` calls
5797
+ * this from the node's runs; the ranges only count while the field
5798
+ * holds that text.
5799
+ */
5800
+ setHidden(text: string, ranges: readonly UiTextRange[]): void;
5801
+ /** An offset moved out of hidden text, to the nearer end of it; any other offset as it is. */
5802
+ caretOffsetNear(offset: number): number;
5803
+ /** Whether no visible grapheme lies from the caret in `direction`, so a move that way can only reach the edge. */
5804
+ atVisibleEdge(direction: -1 | 1): boolean;
5275
5805
  /** Sets the selection; `focus` defaults to `anchor` (a caret). */
5276
5806
  select(anchor: number, focus?: number): void;
5277
5807
  /** Moves the caret to `offset`, extending the selection from the anchor when asked. */
@@ -5284,8 +5814,17 @@ declare class EditableTextModel {
5284
5814
  * vertical movement is the caller's, since it needs geometry.
5285
5815
  */
5286
5816
  move(unit: EditUnit, direction: -1 | 1, extend: boolean): void;
5287
- /** The offset one `unit` away from `from` in `direction`. */
5817
+ /** The offset one `unit` away from `from` in `direction`; see "Hidden text" above. */
5288
5818
  offsetBy(from: number, unit: EditUnit, direction: -1 | 1): number;
5819
+ /** The text as drawn, or null when nothing in it is hidden. */
5820
+ private visible;
5821
+ /**
5822
+ * The source range a delete of one `unit` from the caret removes, in
5823
+ * a text with hidden runs: the visible stretch it crosses, without
5824
+ * the hidden text at either end of it. Null when nothing visible is
5825
+ * there to delete.
5826
+ */
5827
+ private visibleDeletion;
5289
5828
  /**
5290
5829
  * Replaces the selection with `text` and puts the caret after it.
5291
5830
  * Single-grapheme insertions at the caret coalesce into one undo
@@ -5359,7 +5898,9 @@ declare class EditableTextModel {
5359
5898
  * What a node is. Closed, so a typo is a build error the way an
5360
5899
  * unknown prop already is: the mirror can only emit roles it knows.
5361
5900
  */
5362
- type UiRole = 'button' | 'checkbox' | 'switch' | 'radio' | 'radiogroup' | 'slider' | 'spinbutton' | 'textbox' | 'searchbox' | 'combobox' | 'listbox' | 'option' | 'menu' | 'menubar' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'tab' | 'tablist' | 'tabpanel' | 'link' | 'progressbar' | 'list' | 'listitem' | 'tree' | 'treeitem' | 'grid' | 'row' | 'columnheader' | 'rowheader' | 'cell' | 'group' | 'separator' | 'toolbar' | 'heading' | 'image' | 'paragraph' | 'dialog' | 'alertdialog' | 'tooltip' | 'alert' | 'status' | 'banner' | 'navigation' | 'main' | 'region' | 'form' | 'search' | 'contentinfo';
5901
+ type UiRole = 'button' | 'checkbox' | 'switch' | 'radio' | 'radiogroup' | 'slider' | 'spinbutton' | 'textbox' | 'searchbox' | 'combobox' | 'listbox' | 'option' | 'menu' | 'menubar' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'tab' | 'tablist' | 'tabpanel' | 'link' | 'progressbar' | 'list' | 'listitem' | 'tree' | 'treeitem' | 'grid' | 'row' | 'columnheader' | 'rowheader' | 'cell' |
5902
+ /** A cell of an interactive `grid`: what a calendar's day is, and what can be `selected`. */
5903
+ 'gridcell' | 'group' | 'separator' | 'toolbar' | 'heading' | 'image' | 'paragraph' | 'dialog' | 'alertdialog' | 'tooltip' | 'alert' | 'status' | 'banner' | 'navigation' | 'main' | 'region' | 'form' | 'search' | 'contentinfo';
5363
5904
  /** How urgently a live region's changes are announced. */
5364
5905
  type UiLiveRegion = 'polite' | 'assertive';
5365
5906
  declare const UI_ROLES: readonly UiRole[];
@@ -5372,7 +5913,19 @@ declare function isUiRole(value: unknown): value is UiRole;
5372
5913
  * two ways to say it would let them disagree. The semantics record
5373
5914
  * derives it.
5374
5915
  */
5375
- type UiSemanticState = 'checked' | 'mixed' | 'expanded' | 'collapsed' | 'selected' | 'pressed' | 'busy' | 'invalid' | 'required' | 'readonly' | 'modal';
5916
+ type UiSemanticState = 'checked' | 'mixed' | 'expanded' | 'collapsed' | 'selected' | 'pressed' | 'busy' | 'invalid' | 'required' | 'readonly' | 'modal' |
5917
+ /**
5918
+ * On a `listbox`, `grid` or `tree` whose selection is a set: without
5919
+ * it a screen reader treats the option it's on as the one selected.
5920
+ */
5921
+ 'multiselectable' |
5922
+ /**
5923
+ * The item that is the current one of a set, such as the page a
5924
+ * navigation link leads to while it's open. `selected` is for choices
5925
+ * in a listbox, grid or tabs, and a screen reader ignores it on a link
5926
+ * or a button.
5927
+ */
5928
+ 'current';
5376
5929
  declare const UI_SEMANTIC_STATES: readonly UiSemanticState[];
5377
5930
  declare function isUiSemanticState(value: unknown): value is UiSemanticState;
5378
5931
  /**
@@ -5778,6 +6331,12 @@ declare const UiProperties: {
5778
6331
  * label out by default.
5779
6332
  */
5780
6333
  readonly selectable: UiPropertyDefinition<boolean | undefined>;
6334
+ /**
6335
+ * Makes the editables inside one selection: a selection can start in
6336
+ * one and end in another, and edits over it go to the group's
6337
+ * `onEdit`. See `UiEditingGroup`.
6338
+ */
6339
+ readonly editingGroup: UiPropertyDefinition<UiEditingGroup | undefined>;
5781
6340
  readonly pointerEvents: UiPropertyDefinition<UiPointerEvents | undefined>;
5782
6341
  readonly focusable: UiPropertyDefinition<boolean | undefined>;
5783
6342
  readonly tabStop: UiPropertyDefinition<boolean | undefined>;
@@ -5806,6 +6365,14 @@ declare const UiProperties: {
5806
6365
  readonly posInSet: UiPropertyDefinition<number | undefined>;
5807
6366
  /** How many items the set holds, including the ones not mounted. */
5808
6367
  readonly setSize: UiPropertyDefinition<number | undefined>;
6368
+ /**
6369
+ * The descendant that's active while this node keeps focus: the
6370
+ * highlighted option of a combobox whose field holds the caret, the
6371
+ * cell a grid's cursor is on. A screen reader announces it as if it
6372
+ * were focused. The node should be a record of its own (an `option`,
6373
+ * a `gridcell`); see `aria-activedescendant`.
6374
+ */
6375
+ readonly activeDescendant: UiPropertyDefinition<UiNode | null | undefined>;
5809
6376
  /**
5810
6377
  * How deep a treeitem sits, 1 for a root. A tree is rendered as a
5811
6378
  * flat list of rows — it must be, to be virtualized — so the nesting
@@ -6070,13 +6637,13 @@ type PaintProps = PropsOf<'backgroundColor' | 'backgroundGradient' | 'borderColo
6070
6637
  * they cascade to the text below it.
6071
6638
  */
6072
6639
  type TypographyProps = PropsOf<'color' | 'fontFamily' | 'fontSize' | 'fontWeight' | 'lineHeight' | 'letterSpacing' | 'textAlign' | 'textDirection' | 'fontStyle' | 'fontStretch' | 'fontVariant' | 'fontKerning' | 'textDecoration'>;
6073
- type InteractionProps = PropsOf<'cursor' | 'pointerEvents' | 'focusable' | 'tabStop' | 'disabled' | 'hitTestable' | 'visualState' | 'selectable'>;
6640
+ type InteractionProps = PropsOf<'cursor' | 'pointerEvents' | 'focusable' | 'tabStop' | 'disabled' | 'hitTestable' | 'visualState' | 'selectable' | 'editingGroup'>;
6074
6641
  /**
6075
6642
  * What the element means, for assistive technology. Legal on any
6076
6643
  * element; a component sets them on the node that *is* the control,
6077
6644
  * not on a wrapper. See `UiSemantics.ts`.
6078
6645
  */
6079
- type SemanticsProps = PropsOf<'role' | 'label' | 'description' | 'live' | 'states' | 'valueNow' | 'valueMin' | 'valueMax' | 'valueText' | 'posInSet' | 'setSize' | 'level'>;
6646
+ type SemanticsProps = PropsOf<'role' | 'label' | 'description' | 'live' | 'states' | 'valueNow' | 'valueMin' | 'valueMax' | 'valueText' | 'posInSet' | 'setSize' | 'level' | 'activeDescendant'>;
6080
6647
  /** Environment values an element provides to its subtree. */
6081
6648
  type EnvironmentProps = PropsOf<'theme' | 'textStyle' | 'contentColor' | 'containerSize' | 'insets'>;
6082
6649
  /**
@@ -6370,6 +6937,18 @@ declare class UiGraphBuilder {
6370
6937
  * instance is unchanged and torn down when a property stops
6371
6938
  * being reactive.
6372
6939
  */
6940
+ /**
6941
+ * The properties each node's element declared last time, so a render
6942
+ * that stops declaring one takes it off the node.
6943
+ *
6944
+ * Only bindings used to be torn down that way. A plain value stayed:
6945
+ * a conditional that swapped `<scrollview padding={20}>` for a
6946
+ * `<scrollview>` reused the node and kept the padding, and an editor
6947
+ * switching from its source view back to its document came back
6948
+ * twenty pixels narrower. Only what the builder declared is tracked,
6949
+ * so what modifiers and the runtime write on a node is left alone.
6950
+ */
6951
+ private readonly declaredProps;
6373
6952
  private reconcileProps;
6374
6953
  /**
6375
6954
  * Attaches, updates and detaches the node's modifiers.
@@ -6695,6 +7274,12 @@ declare class UiGraph {
6695
7274
  * hold the node and would otherwise pay for an id lookup.
6696
7275
  */
6697
7276
  updateNodeProperty<T>(node: UiNode, property: string, value: T, dirtyFlags?: DirtyFlags): boolean;
7277
+ /**
7278
+ * Removes a property the element declared and no longer does, through
7279
+ * the same cascade a write goes through, so a modifier overriding it
7280
+ * keeps its value. See `UiGraphBuilder.reconcileProps`.
7281
+ */
7282
+ removeNodeProperty(node: UiNode, property: string, dirtyFlags?: DirtyFlags): boolean;
6698
7283
  /**
6699
7284
  * Writes a property without consulting the node's transitions.
6700
7285
  *
@@ -7043,7 +7628,9 @@ interface ResponsiveProps extends ColumnProps {
7043
7628
  * The first build happens before any layout, when the size is zero, so
7044
7629
  * `build` must return something sensible for a container whose room is
7045
7630
  * not yet known. Zero picks the narrowest arm, which is the right
7046
- * guess and also what a phone gets.
7631
+ * guess and also what a phone gets. It is never what a wider container
7632
+ * paints: the first layout reports the real size, the arm for it is
7633
+ * built, and the runtime lays that out before the frame paints.
7047
7634
  */
7048
7635
  declare function Responsive(props: ResponsiveProps, build: (size: Size) => UiChild | readonly UiChild[]): UiElement;
7049
7636
  //#endregion
@@ -7218,6 +7805,12 @@ interface TextRunStyle {
7218
7805
  interface TextRunSpan extends TextRunStyle {
7219
7806
  readonly start: number;
7220
7807
  readonly end: number;
7808
+ /**
7809
+ * The run is in the text but takes no room: every width that touches
7810
+ * it counts it as nothing, and a line's `runs` leave it out, so no
7811
+ * renderer has anything to draw for it.
7812
+ */
7813
+ readonly hidden?: boolean;
7221
7814
  }
7222
7815
  interface TextMeasureRequest {
7223
7816
  text: string;
@@ -7276,7 +7869,7 @@ interface TextLine {
7276
7869
  width: number;
7277
7870
  /**
7278
7871
  * The line cut at its runs, present only for a paragraph that has
7279
- * spans.
7872
+ * spans. A hidden run is not among them.
7280
7873
  *
7281
7874
  * Measured once, here, where the line's own width is measured. That
7282
7875
  * is what keeps a spanned paragraph as cheap to paint as a plain
@@ -7360,6 +7953,8 @@ interface SpannedRuns {
7360
7953
  indexAt(offset: number): number;
7361
7954
  /** The request an offset is measured with: its run's, or the paragraph's. */
7362
7955
  requestAt(offset: number): TextMeasureRequest;
7956
+ /** Whether the character at `offset` is in a hidden run. */
7957
+ hiddenAt(offset: number): boolean;
7363
7958
  /** Width of `text.slice(start, end)`, measured run by run. */
7364
7959
  width(text: string, start: number, end: number): number;
7365
7960
  /**
@@ -7368,7 +7963,10 @@ interface SpannedRuns {
7368
7963
  * as.
7369
7964
  */
7370
7965
  widthOf(run: string, offset: number): number;
7371
- /** `text.slice(start, end)` cut at the run boundaries, each piece placed from `x`. */
7966
+ /**
7967
+ * `text.slice(start, end)` cut at the run boundaries, each piece
7968
+ * placed from `x`. Hidden pieces take no room and are left out.
7969
+ */
7372
7970
  cut(text: string, start: number, end: number, x: number): TextLineRun[];
7373
7971
  }
7374
7972
  /**
@@ -7533,7 +8131,12 @@ interface PaintState {
7533
8131
  borderColor: UiColor | undefined;
7534
8132
  borderWidth: number;
7535
8133
  borderRadius: UiBorderRadius;
7536
- boxShadows: readonly UiBoxShadow[];
8134
+ /**
8135
+ * The node's shadows, in the order they were declared, with palette
8136
+ * names resolved against its theme. A shadow whose colour names
8137
+ * nothing is dropped, as a background that names nothing is.
8138
+ */
8139
+ boxShadows: readonly PaintBoxShadow[];
7537
8140
  hasTransform: boolean;
7538
8141
  transform: UiTransform;
7539
8142
  text: string | undefined;
@@ -7593,6 +8196,10 @@ interface PaintState {
7593
8196
  matchColor: UiColor;
7594
8197
  caretColor: UiColor;
7595
8198
  }
8199
+ /** A shadow ready to paint: a `UiBoxShadow` whose colour is resolved. */
8200
+ interface PaintBoxShadow extends UiBoxShadow {
8201
+ readonly color: UiColor;
8202
+ }
7596
8203
  /** A run of a paragraph, ready to paint: metrics, resolved colours, and its link. */
7597
8204
  interface PaintTextSpan extends UiTextMetrics {
7598
8205
  readonly start: number;
@@ -7814,6 +8421,15 @@ interface Canvas2DContext {
7814
8421
  font: string;
7815
8422
  textAlign: CanvasTextAlign;
7816
8423
  textBaseline: CanvasTextBaseline;
8424
+ /**
8425
+ * The shadow a fill casts, which is how a `boxShadows` entry is drawn.
8426
+ * Unlike everything else here, the offset and blur are in device
8427
+ * pixels: the current transform does not apply to them.
8428
+ */
8429
+ shadowColor: string;
8430
+ shadowBlur: number;
8431
+ shadowOffsetX: number;
8432
+ shadowOffsetY: number;
7817
8433
  }
7818
8434
  //#endregion
7819
8435
  //#region src/rendering/TextRenderer.d.ts
@@ -8008,13 +8624,27 @@ declare class EditableLayout {
8008
8624
  readonly rtl: boolean;
8009
8625
  constructor(model: EditableTextModel, box: LayoutBox, state: PaintState, measurer: TextMeasurer);
8010
8626
  caretRect(offset?: number): CaretRect;
8627
+ /**
8628
+ * The caret position nearest a point. Where hidden text sits at the
8629
+ * boundary nearest the point, a point before the boundary (left of it
8630
+ * in left-to-right text) lands before the hidden text and a point
8631
+ * past it lands after: hidden text takes no room, so its two ends
8632
+ * are drawn at one x and the side of the press is what tells them
8633
+ * apart. Never inside hidden text.
8634
+ */
8011
8635
  offsetAt(x: number, y: number): number;
8012
8636
  verticalMove(offset: number, direction: -1 | 1, goalX?: number): {
8013
8637
  offset: number;
8014
8638
  x: number;
8015
8639
  } | null;
8016
- /** Boxes behind the selected text. */
8017
- selectionBoxes(): LayoutBox[];
8640
+ /**
8641
+ * Boxes behind the selected text: the field's part of a selection
8642
+ * across an editing group when `range` is given, else its own.
8643
+ */
8644
+ selectionBoxes(range?: {
8645
+ readonly start: number;
8646
+ readonly end: number;
8647
+ }): LayoutBox[];
8018
8648
  /** Boxes under the text the IME is composing, for its underline. */
8019
8649
  compositionBoxes(): LayoutBox[];
8020
8650
  }
@@ -8808,333 +9438,127 @@ declare class UiFindController {
8808
9438
  next(): boolean;
8809
9439
  /** Moves to the previous match, wrapping around. */
8810
9440
  previous(): boolean;
8811
- /** Drops the query, the matches and their highlights. */
8812
- clear(): void;
8813
- /**
8814
- * A node left the tree. Its matches went with it, so the search is
8815
- * re-run rather than left pointing at something that is gone.
8816
- */
8817
- handleNodeRemoved(node: UiNode): void;
8818
- private notify;
8819
- private step;
8820
- /**
8821
- * The matches of a query, dropped where the text they are in is not
8822
- * drawn: a paragraph capped by `maxLines` shows part of itself, and a
8823
- * match the user cannot see must not be counted or stepped through.
8824
- * Geometry is only measured for the nodes that matched at all.
8825
- */
8826
- private collect;
8827
- /** Writes the match ranges onto the nodes that hold them. */
8828
- private highlight;
8829
- /** Selects the match at `index` and scrolls it into view. */
8830
- private activate;
8831
- private revealMatch;
8832
- private geometryEndOf;
8833
- /** The node's text laid out in its own coordinates; see UiSelectionController. */
8834
- private geometryOf;
8835
- }
8836
- //#endregion
8837
- //#region src/graph/UiPropertyOverrides.d.ts
8838
- /**
8839
- * The cascade a modifier writes into.
8840
- *
8841
- * effective(property) = the last override in modifier order,
8842
- * else what the element declared
8843
- *
8844
- * Keeping the element's own value rather than replacing it is what
8845
- * makes a modifier safe to detach: dragging can write `transform` and
8846
- * `opacity` for as long as the drag lasts, and dropping restores
8847
- * exactly what the element asked for — including "nothing", which
8848
- * restores inheritance from the environment rather than a default.
8849
- *
8850
- * Everything here funnels into `graph.applyResolvedProperty`, so
8851
- * layout, paint, input and the environment read what they always read.
8852
- */
8853
- /**
8854
- * A write from the element: a plain prop, or an emission from a bound
8855
- * Observable. It updates the declared value; whether it reaches the
8856
- * node depends on whether a modifier is currently overriding it.
8857
- */
8858
- declare function writeDeclaredProperty(graph: UiGraph, node: UiNode, property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
8859
- /**
8860
- * A write from a modifier. Replaces that modifier's own entry, or adds
8861
- * one in its position in the list.
8862
- */
8863
- declare function writeOverrideProperty(graph: UiGraph, node: UiNode, property: NodeProperty, override: Omit<UiPropertyOverride, 'value'> & {
8864
- value: unknown;
8865
- }, flags: DirtyFlags): boolean;
8866
- /** Removes one modifier's write, restoring whatever was under it. */
8867
- declare function clearOverrideProperty(graph: UiGraph, node: UiNode, property: NodeProperty, source: symbol, flags: DirtyFlags): boolean;
8868
- /** The names of the modifiers overriding a property, in order. */
8869
- declare function overrideSources(node: UiNode, property: NodeProperty): string[];
8870
- /** Test hook: forgets which conflicts have been reported. */
8871
- declare function resetOverrideWarnings(): void;
8872
- //#endregion
8873
- //#region src/graph/UiPropertyTransitions.d.ts
8874
- /**
8875
- * The transitions declared on one node, and the animations they are
8876
- * currently running.
8877
- *
8878
- * This is the same shape as the override cascade and for the same
8879
- * reason that lives on the node: **both
8880
- * the builder's static writes and a binding's emissions funnel through
8881
- * `updateNodeProperty`**, so interposing there is the only place that
8882
- * catches both. `node.transitions` is null until an element declares
8883
- * one, so the cost to a tree without transitions is the second field
8884
- * read on the write path.
8885
- *
8886
- * What it interposes is a write, not a binding. The Observable a
8887
- * component wrote is still bound by the graph and still emits into the
8888
- * same property; what changes is that the emission becomes a target
8889
- * rather than a value. So nothing about component identity, binding
8890
- * teardown or `getBindingForProperty` moves, and a `transition` can be
8891
- * added to an element without touching anything else about it.
8892
- */
8893
- declare class NodeTransitions implements UiNodeTransitions {
8894
- private readonly node;
8895
- private readonly graph;
8896
- private readonly driver;
8897
- private specs;
8898
- private readonly cells;
8899
- private readonly targets;
8900
- constructor(node: UiNode, graph: UiGraph, driver: AnimationDriver);
8901
- /** Replaces what the element declares; a property dropped from the list stops animating. */
8902
- setSpecs(specs: ReadonlyMap<NodeProperty, UiTransitionSpec>): void;
8903
- get size(): number;
8904
- /**
8905
- * Takes over a write, or declines it.
8906
- *
8907
- * Declines when the property has no transition, when the node has no
8908
- * value yet — a node's *first* value is not a change and animating
8909
- * from nothing would mean animating from a default nobody asked for
8910
- * — and when the two values cannot be blended (`interpolatorFor`
8911
- * says which, and why).
8912
- */
8913
- write(property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
8914
- /** Cancels everything, for a node leaving the tree or dropping the prop. */
8915
- release(): void;
8916
- private stopProperty;
8917
- /**
8918
- * The cell one property animates through, kept for the life of the
8919
- * node: the driver keys its running set by cell identity, so a fresh
8920
- * adapter per write would leave the previous animation running.
8921
- *
8922
- * Writing goes through `updateNodePropertyNow`, which is the path a
8923
- * plain write takes minus this class — so a modifier's override still
8924
- * sits on top of an animated value, exactly as it sits on top of a
8925
- * bound one.
8926
- */
8927
- private cellFor;
8928
- private startAnimation;
8929
- }
8930
- /** Test hook: forgets which properties have been reported. */
8931
- declare function resetTransitionWarnings(): void;
8932
- //#endregion
8933
- //#region src/input/UiFocusManager.d.ts
8934
- /**
8935
- * One entry on the focus scope stack.
8936
- *
8937
- * `restore` is what held focus when the scope was pushed, so popping
8938
- * can hand focus back to the control that opened the dialog. Scopes
8939
- * nest: a confirmation dialog over a dialog pushes a second one, and
8940
- * each pop restores its own opener.
8941
- */
8942
- /**
8943
- * What moved focus, which decides whether the focused node is scrolled
8944
- * into view.
8945
- *
8946
- * A browser draws the same distinction and it is the reason it exists:
8947
- * keyboard focus must reveal its target, because a control the person
8948
- * cannot see is a control they cannot use, while a *click* has already
8949
- * shown them where they are — the thing they pressed is under their
8950
- * cursor. Scrolling after a click moves the page out from under a
8951
- * pointer that is still there, and on a tall element that is a jump of
8952
- * most of the screen.
8953
- */
8954
- type FocusSource = 'pointer' | 'keyboard' | 'program';
8955
- /**
8956
- * How the person last drove the app, as far as focus can tell: the
8957
- * pointer or the keyboard. This is what decides whether focus is
8958
- * *visible*, the way `:focus-visible` does in a browser: a ring that
8959
- * appeared on every mouse click would mark a control nobody is about to
8960
- * drive with the keyboard, so the ring waits until the keyboard is used.
8961
- */
8962
- type FocusModality = 'pointer' | 'keyboard';
8963
- /**
8964
- * Logical focus within the UI tree.
8965
- *
8966
- * At most one node holds focus at a time. Focus transitions are
8967
- * target-only: the node losing focus receives Blur (with the new
8968
- * node as `relatedNode`), then the node gaining focus receives Focus
8969
- * (with the old node as `relatedNode`).
8970
- *
8971
- * Tab / Shift+Tab navigation walks the focusable nodes in document
8972
- * (depth-first) order and wraps around. A node participates when
8973
- * `isNodeFocusable` says so: focusable by type (Button), explicitly
8974
- * opted in via `focusable: true`, and never when inert.
8975
- *
8976
- * Focus-on-press is applied through `focusOnPress`, which the pointer
8977
- * pipeline calls after a successful pointerdown (skipped when the
8978
- * down was defaultPrevented).
8979
- *
8980
- * **Scopes.** `pushScope(node)` confines focus to a subtree: traversal
8981
- * collects only that subtree's focusables, so Tab wraps inside it, and
8982
- * `focus()` refuses a node outside it — which is what makes a modal
8983
- * dialog modal for the keyboard. `popScope()` restores focus to
8984
- * whatever held it when the scope was pushed. Components reach both
8985
- * through `FocusService`, never directly.
8986
- */
8987
- declare class UiFocusManager {
8988
- private readonly dispatcher;
8989
- private root;
8990
- private focused;
8991
- /**
8992
- * Keyboard until told otherwise, so focus placed before any input
8993
- * (an `autoFocus`, a dialog's first field) is visible, as a browser
8994
- * would show it.
8995
- */
8996
- private modality;
8997
- private readonly listeners;
8998
- private readonly scopeListeners;
8999
- private readonly scopes;
9000
- constructor(root: UiNode, dispatcher: UiInputDispatcher);
9001
- /** The root used for focus-order traversal. Clears any active scope. */
9002
- setRoot(root: UiNode): void;
9003
- /** The node that currently holds logical focus, or null. */
9004
- get focusedNode(): UiNode | null;
9005
- hasFocus(): boolean;
9006
- /** How the person last drove the app. */
9007
- get focusModality(): FocusModality;
9008
- /**
9009
- * Whether the focus held should be shown. True while focus was
9010
- * reached by the keyboard, or by code with no pointer since; false
9011
- * after a pointer press, until the next key.
9012
- */
9013
- get focusVisible(): boolean;
9014
- /**
9015
- * Records an input the person made. A change of modality while a node
9016
- * holds focus is reported to the focus listeners as a change on that
9017
- * node, so a ring can appear on a mouse-focused control the moment an
9018
- * arrow key is pressed, and disappear again on the next press.
9019
- */
9020
- noteInput(modality: FocusModality): void;
9021
- /**
9022
- * The subtree focus is currently confined to: the innermost scope,
9023
- * or the whole tree when none is active.
9024
- */
9025
- get scopeRoot(): UiNode;
9026
- /** Whether focus is confined to a subtree. */
9027
- get trapped(): boolean;
9028
- /**
9029
- * Moves focus to the node. Returns false when the node cannot be
9030
- * focused (inert, non-focusable, outside the active scope); true
9031
- * otherwise, including when the node already held focus (a no-op
9032
- * that emits nothing).
9033
- */
9034
- focus(node: UiNode, source?: FocusSource): boolean;
9035
- /**
9036
- * Called after focus moves or clears, with the new focused node. The
9037
- * runtime uses it to scroll the focused node into view.
9038
- */
9039
- onFocusChange(listener: (node: UiNode | null, source: FocusSource) => void): () => void;
9040
- /** Called after a scope is pushed or popped. */
9041
- onScopeChange(listener: () => void): () => void;
9042
- private notify;
9043
- private notifyScope;
9044
- /** Drops focus without moving it anywhere. */
9045
- blur(): void;
9046
- /**
9047
- * Focus-on-press hook: focuses the nearest focusable node at or above
9048
- * the one that was pressed.
9049
- *
9050
- * The walk upward is what the DOM does, and what a container that is
9051
- * one tab stop needs: pressing a tab hits the Text inside it, a table
9052
- * cell hits a Box three levels below the table, and a component whose
9053
- * arrows move a selection is keyboard-dead after a mouse press if the
9054
- * press left focus where it was. Found in a browser, on `Tabs` —
9055
- * clicking a tab selected it and the arrows then did nothing.
9056
- *
9057
- * Nothing focusable above the press leaves focus untouched, as before:
9058
- * pressing the page background is not a request to blur.
9059
- */
9060
- focusOnPress(node: UiNode): void;
9061
- /** Moves focus to the next focusable node, wrapping to the first. */
9062
- focusNext(): boolean;
9063
- /** Moves focus to the previous focusable node, wrapping to the last. */
9064
- focusPrevious(): boolean;
9065
- /**
9066
- * Confines focus to `root` until the matching `popScope`.
9067
- *
9068
- * Focus that is outside the new scope moves to its first focusable,
9069
- * so the very next Tab stays inside; a scope with nothing focusable
9070
- * in it drops focus rather than leaving it behind the dialog.
9071
- */
9072
- pushScope(root: UiNode): void;
9441
+ /** Drops the query, the matches and their highlights. */
9442
+ clear(): void;
9073
9443
  /**
9074
- * Moves focus into the innermost scope when it is outside it, and
9075
- * drops it when the scope has nothing to focus.
9076
- *
9077
- * A scope is usually taken from a `ref`, which fires before the
9078
- * node's children are reconciled — so at that moment a dialog is an
9079
- * empty box and there is nothing in it to focus. The runtime calls
9080
- * this again once the frame's tree is built, which is when a dialog
9081
- * gets its caret. Idempotent: with focus already inside the scope,
9082
- * or no scope at all, it does nothing.
9083
- *
9084
- * **The scope root is the fallback, and it is the whole reason
9085
- * `tabStop` exists.** A scope with no tab stop inside it used to
9086
- * blur, which hands the keyboard to nothing: a `Dialog` whose body
9087
- * is a sentence and a button could not be dismissed with Escape,
9088
- * because Escape had nowhere to be delivered. Falling back to the
9089
- * root fixes that only if the root can hold focus without becoming a
9090
- * stop of its own, or every dialog grows a tab stop that announces
9091
- * nothing. `focusable: true, tabStop: false` on the body is exactly
9092
- * that pair, and the fallback is what makes it worth setting.
9093
- *
9094
- * Blurring is still what happens when the root cannot hold focus
9095
- * either, because a scope that has genuinely nothing to focus is
9096
- * better admitted than faked.
9444
+ * A node left the tree. Its matches went with it, so the search is
9445
+ * re-run rather than left pointing at something that is gone.
9097
9446
  */
9098
- settleScope(): void;
9447
+ handleNodeRemoved(node: UiNode): void;
9448
+ private notify;
9449
+ private step;
9099
9450
  /**
9100
- * Ends the innermost scope and hands focus back to whatever held it
9101
- * when that scope was pushed, when that node is still in the tree
9102
- * and still focusable. Otherwise focus is dropped rather than left
9103
- * on a node the scope was hiding.
9451
+ * The matches of a query, dropped where the text they are in is not
9452
+ * drawn: a paragraph capped by `maxLines` shows part of itself, and a
9453
+ * match the user cannot see must not be counted or stepped through.
9454
+ * Geometry is only measured for the nodes that matched at all.
9104
9455
  */
9105
- popScope(): void;
9456
+ private collect;
9457
+ /** Writes the match ranges onto the nodes that hold them. */
9458
+ private highlight;
9459
+ /** Selects the match at `index` and scrolls it into view. */
9460
+ private activate;
9461
+ private revealMatch;
9462
+ private geometryEndOf;
9463
+ /** The node's text laid out in its own coordinates; see UiSelectionController. */
9464
+ private geometryOf;
9465
+ }
9466
+ //#endregion
9467
+ //#region src/graph/UiPropertyOverrides.d.ts
9468
+ /**
9469
+ * The cascade a modifier writes into.
9470
+ *
9471
+ * effective(property) = the last override in modifier order,
9472
+ * else what the element declared
9473
+ *
9474
+ * Keeping the element's own value rather than replacing it is what
9475
+ * makes a modifier safe to detach: dragging can write `transform` and
9476
+ * `opacity` for as long as the drag lasts, and dropping restores
9477
+ * exactly what the element asked for — including "nothing", which
9478
+ * restores inheritance from the environment rather than a default.
9479
+ *
9480
+ * Everything here funnels into `graph.applyResolvedProperty`, so
9481
+ * layout, paint, input and the environment read what they always read.
9482
+ */
9483
+ /**
9484
+ * A write from the element: a plain prop, or an emission from a bound
9485
+ * Observable. It updates the declared value; whether it reaches the
9486
+ * node depends on whether a modifier is currently overriding it.
9487
+ */
9488
+ declare function writeDeclaredProperty(graph: UiGraph, node: UiNode, property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
9489
+ /**
9490
+ * A write from a modifier. Replaces that modifier's own entry, or adds
9491
+ * one in its position in the list.
9492
+ */
9493
+ declare function writeOverrideProperty(graph: UiGraph, node: UiNode, property: NodeProperty, override: Omit<UiPropertyOverride, 'value'> & {
9494
+ value: unknown;
9495
+ }, flags: DirtyFlags): boolean;
9496
+ /** Removes one modifier's write, restoring whatever was under it. */
9497
+ declare function clearOverrideProperty(graph: UiGraph, node: UiNode, property: NodeProperty, source: symbol, flags: DirtyFlags): boolean;
9498
+ /** The names of the modifiers overriding a property, in order. */
9499
+ declare function overrideSources(node: UiNode, property: NodeProperty): string[];
9500
+ /** Test hook: forgets which conflicts have been reported. */
9501
+ declare function resetOverrideWarnings(): void;
9502
+ //#endregion
9503
+ //#region src/graph/UiPropertyTransitions.d.ts
9504
+ /**
9505
+ * The transitions declared on one node, and the animations they are
9506
+ * currently running.
9507
+ *
9508
+ * This is the same shape as the override cascade and for the same
9509
+ * reason that lives on the node: **both
9510
+ * the builder's static writes and a binding's emissions funnel through
9511
+ * `updateNodeProperty`**, so interposing there is the only place that
9512
+ * catches both. `node.transitions` is null until an element declares
9513
+ * one, so the cost to a tree without transitions is the second field
9514
+ * read on the write path.
9515
+ *
9516
+ * What it interposes is a write, not a binding. The Observable a
9517
+ * component wrote is still bound by the graph and still emits into the
9518
+ * same property; what changes is that the emission becomes a target
9519
+ * rather than a value. So nothing about component identity, binding
9520
+ * teardown or `getBindingForProperty` moves, and a `transition` can be
9521
+ * added to an element without touching anything else about it.
9522
+ */
9523
+ declare class NodeTransitions implements UiNodeTransitions {
9524
+ private readonly node;
9525
+ private readonly graph;
9526
+ private readonly driver;
9527
+ private specs;
9528
+ private readonly cells;
9529
+ private readonly targets;
9530
+ constructor(node: UiNode, graph: UiGraph, driver: AnimationDriver);
9531
+ /** Replaces what the element declares; a property dropped from the list stops animating. */
9532
+ setSpecs(specs: ReadonlyMap<NodeProperty, UiTransitionSpec>): void;
9533
+ get size(): number;
9106
9534
  /**
9107
- * Reacts to a subtree leaving the graph.
9108
- *
9109
- * The graph reports the root of a removed subtree after detaching
9110
- * every node in it, so the descendants' parent links are already
9111
- * gone: the test is "is this node still attached", not "was it in
9112
- * that subtree".
9535
+ * Takes over a write, or declines it.
9113
9536
  *
9114
- * A scope whose subtree has gone is a trap that ended, so it is
9115
- * popped as though the component had released it and focus returns
9116
- * to the opener — a dialog that unmounts hands the keyboard back
9117
- * without having to sequence its own teardown. Focus lost with the
9118
- * subtree is dropped without a Blur, since the node's listeners were
9119
- * released with it.
9537
+ * Declines when the property has no transition, when the node has no
9538
+ * value yet — a node's *first* value is not a change and animating
9539
+ * from nothing would mean animating from a default nobody asked for
9540
+ * — and when the two values cannot be blended (`interpolatorFor`
9541
+ * says which, and why).
9120
9542
  */
9121
- handleNodeRemoved(_node: UiNode): void;
9122
- private moveFocus;
9543
+ write(property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
9544
+ /** Cancels everything, for a node leaving the tree or dropping the prop. */
9545
+ release(): void;
9546
+ private stopProperty;
9123
9547
  /**
9124
- * The tab stops in document order (parent before children).
9548
+ * The cell one property animates through, kept for the life of the
9549
+ * node: the driver keys its running set by cell identity, so a fresh
9550
+ * adapter per write would leave the previous animation running.
9125
9551
  *
9126
- * Tab stops and not every focusable node: a container with
9127
- * `tabStop: false` can hold focus and is not a place the cycle
9128
- * stops, which is what lets a dialog body be the keyboard's home of
9129
- * last resort without becoming a stop of its own.
9552
+ * Writing goes through `updateNodePropertyNow`, which is the path a
9553
+ * plain write takes minus this class — so a modifier's override still
9554
+ * sits on top of an animated value, exactly as it sits on top of a
9555
+ * bound one.
9130
9556
  */
9131
- private collectFocusable;
9132
- /** Whether the node may hold focus given the active scope, if any. */
9133
- private withinScope;
9134
- /** Whether the node is still connected to the traversal root. */
9135
- private isAttached;
9136
- private isWithin;
9557
+ private cellFor;
9558
+ private startAnimation;
9137
9559
  }
9560
+ /** Test hook: forgets which properties have been reported. */
9561
+ declare function resetTransitionWarnings(): void;
9138
9562
  //#endregion
9139
9563
  //#region src/input/FocusNotifier.d.ts
9140
9564
  /**
@@ -9578,6 +10002,8 @@ declare class UiWheelController {
9578
10002
  * still constructs; without it such a root is read as the default.
9579
10003
  */
9580
10004
  private readonly rootNode;
10005
+ /** The clock the precise-device memory below reads. Injectable for specs. */
10006
+ private readonly now;
9581
10007
  constructor(hitTester: HitTester, dispatcher: UiInputDispatcher, scrollSink: ScrollSink,
9582
10008
  /**
9583
10009
  * The tree's root, when the host knows it.
@@ -9587,7 +10013,27 @@ declare class UiWheelController {
9587
10013
  * container to walk up from. Optional so every existing caller
9588
10014
  * still constructs; without it such a root is read as the default.
9589
10015
  */
9590
- rootNode?: (() => UiNode | null) | null);
10016
+ rootNode?: (() => UiNode | null) | null,
10017
+ /** The clock the precise-device memory below reads. Injectable for specs. */
10018
+ now?: () => number, options?: UiWheelControllerOptions);
10019
+ /** Whether a precision device's steps are paced over frames; see `advance`. */
10020
+ private readonly paced;
10021
+ /** A precision device's gesture, by the container it scrolls. */
10022
+ private readonly pacing;
10023
+ /** When the event being routed happened, for the gesture it joins. */
10024
+ private eventTime;
10025
+ /** The last frame's time, and the display's interval measured from it. */
10026
+ private lastFrame;
10027
+ private frameInterval;
10028
+ /**
10029
+ * Until when the wheel is taken to be a precision device whatever an
10030
+ * event says. One event can't always tell: Chrome on a Mac reports a
10031
+ * trackpad's legacy delta as three times its pixel delta, so a step of
10032
+ * 40 pixels reads as a whole detent. A mouse wheel never sends an event
10033
+ * that doesn't look notched, so one that doesn't means a trackpad, and
10034
+ * every event close behind it (a gesture, and its momentum) is one too.
10035
+ */
10036
+ private preciseUntil;
9591
10037
  /**
9592
10038
  * The node the last wheel landed on, or null before any.
9593
10039
  *
@@ -9599,7 +10045,12 @@ declare class UiWheelController {
9599
10045
  * wheel of a burst land correctly even though the first could not.
9600
10046
  */
9601
10047
  lastWheelTarget: UiNode | null;
9602
- wheel(x: number, y: number, deltaX: number, deltaY: number, modifiers?: UiKeyModifiers, deltaMode?: UiWheelDeltaMode, wheelDeltaY?: number): UiWheelEvent;
10048
+ wheel(x: number, y: number, deltaX: number, deltaY: number, modifiers?: UiKeyModifiers, deltaMode?: UiWheelDeltaMode, wheelDeltaY?: number,
10049
+ /**
10050
+ * When the event happened, on this controller's clock. Pacing
10051
+ * predicts from it; without it, the time it arrives stands in.
10052
+ */
10053
+ at?: number): UiWheelEvent;
9603
10054
  /**
9604
10055
  * Whether a wheel at this point would move anything, without moving
9605
10056
  * it.
@@ -9662,6 +10113,39 @@ declare class UiWheelController {
9662
10113
  */
9663
10114
  private appContainsOverscroll;
9664
10115
  private applyDelta;
10116
+ /**
10117
+ * A container's state as a step should judge it: during a paced gesture,
10118
+ * where the steps so far have really taken it, not where the prediction
10119
+ * has drawn it. Judged by what's drawn, a flick into the top found no
10120
+ * room once the prediction got there first, its last steps were refused,
10121
+ * and withdrawing the prediction then moved the list back down off the
10122
+ * top.
10123
+ */
10124
+ private gestureState;
10125
+ /**
10126
+ * Moves each precision-device gesture for one frame. A host that turned
10127
+ * pacing on calls this once a frame, with the frame's time, before the
10128
+ * frame reads scroll offsets.
10129
+ *
10130
+ * A trackpad sends on its own clock, not the display's, so a frame
10131
+ * comes a varying time after the last step: applied as they arrive, a
10132
+ * steady flick moves the page by uneven amounts, which reads as
10133
+ * judder. Evening that out by waiting for steps puts the page behind
10134
+ * the hand. So this does what a browser does for its own scrolling:
10135
+ * it puts the page where the input will have reached when the frame is
10136
+ * shown, the steps so far plus their velocity times the time since the
10137
+ * last one, never more than a frame and a half ahead. Steps come out
10138
+ * even, and nothing trails.
10139
+ *
10140
+ * A gesture's first step, with no velocity yet, goes as it is. Once the
10141
+ * steps stop, the prediction is withdrawn and the page settles exactly
10142
+ * where they add up to; a trackpad's momentum slows to nothing first,
10143
+ * so there is next to nothing to withdraw.
10144
+ *
10145
+ * True while a gesture is still being paced, so the host keeps frames
10146
+ * coming until it has settled.
10147
+ */
10148
+ advance(time?: number): boolean;
9665
10149
  /**
9666
10150
  * A wheel delta in whatever unit it arrived in, as pixels.
9667
10151
  *
@@ -9675,6 +10159,13 @@ declare class UiWheelController {
9675
10159
  }
9676
10160
  /** A ScrollView, or any node with overflow 'scroll' or 'auto'. */
9677
10161
  declare function isScrollContainer(node: UiNode): boolean;
10162
+ interface UiWheelControllerOptions {
10163
+ /**
10164
+ * Pace a precision device's steps to the frame instead of applying each
10165
+ * as it arrives; the host then calls `advance` once a frame.
10166
+ */
10167
+ readonly pace?: boolean;
10168
+ }
9678
10169
  //#endregion
9679
10170
  //#region src/input/UiPointerController.d.ts
9680
10171
  interface PointerControllerOptions {
@@ -9730,7 +10221,12 @@ interface PointerControllerOptions {
9730
10221
  */
9731
10222
  editing?: {
9732
10223
  isEditable(node: UiNode): boolean;
9733
- pointerDown(node: UiNode, x: number, y: number, modifiers: UiKeyModifiers): void;
10224
+ /** The field of an editing group a press on none of its fields belongs to; see `UiEditingController.fieldNear`. */
10225
+ fieldNear?(target: UiNode, y: number, handlesPress: (node: UiNode) => boolean): UiNode | null;
10226
+ /** The text offset under a point in a field, as the field is drawn now; see `UiEditingController.offsetAt`. */
10227
+ offsetAt?(node: UiNode, x: number, y: number): number;
10228
+ /** `offset`, when given, is where the press landed, found before it moved focus. */
10229
+ pointerDown(node: UiNode, x: number, y: number, modifiers: UiKeyModifiers, offset?: number): void;
9734
10230
  pointerMove(node: UiNode, x: number, y: number): void;
9735
10231
  pointerUp(): void;
9736
10232
  };
@@ -9807,6 +10303,8 @@ interface PointerControllerOptions {
9807
10303
  declare class UiPointerController {
9808
10304
  private readonly hitTester;
9809
10305
  private readonly dispatcher;
10306
+ /** Whether a node answers a press itself: a click or pointer listener of its own. */
10307
+ private handlesPress;
9810
10308
  private readonly slop;
9811
10309
  private readonly touchSlop;
9812
10310
  private readonly gestures;
@@ -10115,6 +10613,12 @@ interface ShortcutRegistryOptions {
10115
10613
  * Without that rule an application with a `n` for "new note" becomes an
10116
10614
  * application you cannot type the letter n into, which is the failure
10117
10615
  * every home-grown key handler eventually ships.
10616
+ *
10617
+ * ## Pressing is not a shortcut
10618
+ *
10619
+ * A bare Enter or Space is skipped while a button or link has focus,
10620
+ * unless the shortcut is that control's own: the control is focused, so
10621
+ * it has the key first, as it would in a browser.
10118
10622
  */
10119
10623
  declare class UiShortcutRegistry {
10120
10624
  private readonly bindings;
@@ -10151,16 +10655,21 @@ declare class UiShortcutRegistry {
10151
10655
  * act on a key that has already been spent.
10152
10656
  */
10153
10657
  handleKey(key: string, modifiers: UiKeyModifiers, focused: UiNode | null): boolean;
10658
+ private platform;
10659
+ /** Whether a field would take this key as an edit of its own, rather than as text or as Enter. */
10660
+ private isEditingKey;
10154
10661
  /** Forgets a half-typed chord, for a route change or a lost focus. */
10155
10662
  reset(): void;
10156
10663
  /**
10157
10664
  * Whether a binding would fire for a key going to `focused`.
10158
10665
  *
10159
- * Three things take a shortcut out: its scope does not contain the
10160
- * focused node, its own `when` says no, and, for a shortcut with no
10161
- * modifier at all, the focused node is somewhere text is being
10162
- * typed. The last is the rule that keeps a single-letter shortcut
10163
- * from making a text field unusable.
10666
+ * Four things take a shortcut out: its scope does not contain the
10667
+ * focused node, its own `when` says no, for a shortcut with no
10668
+ * modifier at all the focused node is somewhere text is being typed,
10669
+ * and for a bare Enter or Space the focused node is a button that
10670
+ * isn't the shortcut's own. The third keeps a single-letter shortcut
10671
+ * from making a text field unusable; the fourth keeps a list's Enter
10672
+ * from opening a row when the button focused inside it was pressed.
10164
10673
  */
10165
10674
  private isLive;
10166
10675
  }
@@ -10173,14 +10682,13 @@ declare class UiShortcutRegistry {
10173
10682
  */
10174
10683
  declare function parseShortcut(keys: string): readonly UiShortcutStep[];
10175
10684
  /**
10176
- * The shortcut as a palette should print it.
10177
- *
10178
- * `Mod` is printed as `Ctrl`, not as a platform glyph: the render
10179
- * worker cannot see the platform, and a wrong symbol is worse than a
10180
- * plain word. An application that knows what it is running on can
10181
- * format the `steps` itself.
10685
+ * The shortcut as a palette should print it, the way the platform
10686
+ * writes its own: `⇧⌘K` on a Mac, where `Mod` is Command, and
10687
+ * `Ctrl+Shift+K` elsewhere, where it is Control. The platform is the
10688
+ * one the editing keys follow (`detectEditingPlatform`, from the user
10689
+ * agent, which a worker can read too).
10182
10690
  */
10183
- declare function formatShortcut(steps: readonly UiShortcutStep[]): string;
10691
+ declare function formatShortcut(steps: readonly UiShortcutStep[], platform?: EditingPlatform): string;
10184
10692
  //#endregion
10185
10693
  //#region src/input/UiDragSession.d.ts
10186
10694
  /**
@@ -10236,6 +10744,17 @@ interface UiDropZone {
10236
10744
  leave(): void;
10237
10745
  /** The drag was released over the zone. What it did, for the source. */
10238
10746
  drop(state: UiDragState): UiDropEffect;
10747
+ /**
10748
+ * The point is inside this zone and the zone would take the payload,
10749
+ * whether or not a deeper zone won the drop; null once it no longer
10750
+ * is, or the drag ended.
10751
+ *
10752
+ * `over` goes to the winner alone, which is right for "where would
10753
+ * this land" and wrong for auto-scroll: a list whose rows are drop
10754
+ * zones of their own is never the winner, so a drag held at its edge
10755
+ * never scrolled it. Auto-scroll listens here instead.
10756
+ */
10757
+ hover?(state: UiDragState | null): void;
10239
10758
  }
10240
10759
  /** The result a completed drag reports back to whatever started it. */
10241
10760
  interface UiDragResult {
@@ -10323,6 +10842,8 @@ declare class UiDragSession {
10323
10842
  private readonly zones;
10324
10843
  private current;
10325
10844
  private inside;
10845
+ /** Every zone the point is in that would take the payload, winner or not. */
10846
+ private hovering;
10326
10847
  /** Registers a drop target. The returned function unregisters it. */
10327
10848
  addZone(zone: UiDropZone): () => void;
10328
10849
  /** The drag in flight, or null when nothing is being carried. */
@@ -10347,6 +10868,8 @@ declare class UiDragSession {
10347
10868
  end(): UiDragResult | null;
10348
10869
  /** Abandons the drag: the zone under it is told, and nothing is dropped. */
10349
10870
  cancel(): void;
10871
+ /** Tells every zone the drag was hovering over that it no longer is. */
10872
+ private unhover;
10350
10873
  /**
10351
10874
  * Turns a shell's file-drop message into an ordinary drag.
10352
10875
  *
@@ -10532,6 +11055,12 @@ interface EditingState {
10532
11055
  readonly caret: LayoutBox;
10533
11056
  readonly multiline: boolean;
10534
11057
  readonly composing: boolean;
11058
+ /**
11059
+ * The selection as HTML, which a copy puts on the clipboard beside
11060
+ * the text, when the field's editing group gives some (see
11061
+ * `UiEditingGroup.copyHtml`). Absent otherwise.
11062
+ */
11063
+ readonly html?: string;
10535
11064
  }
10536
11065
  interface EditingControllerOptions {
10537
11066
  /** Keyboard conventions; detected from the user agent by default. */
@@ -10570,6 +11099,35 @@ declare class UiEditingController {
10570
11099
  private dragging;
10571
11100
  private lastPress;
10572
11101
  private compositionOpen;
11102
+ /**
11103
+ * The text as it was when the composition began. A commit is reported
11104
+ * against this, not against the text with the composition in it,
11105
+ * which already holds what is committed whenever the person picks
11106
+ * the candidate on screen: compared with that, a commit changed
11107
+ * nothing and the application never heard about the text.
11108
+ */
11109
+ private compositionBase;
11110
+ /**
11111
+ * A selection across the fields of an editing group, while it spans
11112
+ * more than one; null while the selection is one field's own. `lit`
11113
+ * is every field drawing part of it. See `UiEditingGroup`.
11114
+ */
11115
+ private span;
11116
+ /**
11117
+ * What the group last made of a selection for the clipboard, kept
11118
+ * while the selection and the texts it covers stay the same: the
11119
+ * state is asked for every frame, and serializing a long selection
11120
+ * every frame would cost more than the frame.
11121
+ */
11122
+ private copied;
11123
+ /** Set while the span moves focus to the field its focus end is in, so that move does not end it. */
11124
+ private spanFocusing;
11125
+ /**
11126
+ * The field focus left for the one just pressed. A press focuses its
11127
+ * field before this controller hears of it, so a Shift and press in a
11128
+ * new field needs to know where the selection was anchored.
11129
+ */
11130
+ private pressedFrom;
10573
11131
  constructor(host: EditingHost, dispatcher: UiInputDispatcher, focus: UiFocusManager, options?: EditingControllerOptions);
10574
11132
  /** The editable that holds focus, or null. */
10575
11133
  get focused(): UiNode | null;
@@ -10584,6 +11142,11 @@ declare class UiEditingController {
10584
11142
  handleKey(node: UiNode, key: string, modifiers: UiKeyModifiers, textFromKeys?: boolean): boolean;
10585
11143
  private execute;
10586
11144
  private move;
11145
+ /** Whether a move would go past the edge of a field, rather than somewhere in it. */
11146
+ private leavesField;
11147
+ /** Where a selection extended into a field from the one before or after it lands. */
11148
+ private entryOffset;
11149
+ private moveInField;
10587
11150
  /**
10588
11151
  * A `beforeinput` from the shell's editing proxy, in the DOM's
10589
11152
  * vocabulary. Returns true when it was applied to the focused
@@ -10615,7 +11178,7 @@ declare class UiEditingController {
10615
11178
  * text means something to it that it means to nothing else, and
10616
11179
  * before this there was no way for it to hear about one at all.
10617
11180
  */
10618
- paste(text: string): boolean;
11181
+ paste(text: string, html?: string | null): boolean;
10619
11182
  private offerPaste;
10620
11183
  private insert;
10621
11184
  compositionStart(): void;
@@ -10629,7 +11192,29 @@ declare class UiEditingController {
10629
11192
  * selects the word, a third the line. Dragging afterwards extends the
10630
11193
  * selection from the anchor.
10631
11194
  */
10632
- pointerDown(node: UiNode, x: number, y: number, modifiers: UiKeyModifiers): void;
11195
+ /**
11196
+ * The field a press belongs to that landed inside an editing group
11197
+ * but on none of its fields: in the padding round the fields, the gap
11198
+ * between two of them, or the plain structure a field sits in (a list
11199
+ * item's bullet). The nearest field, by height, as a document puts the
11200
+ * caret on the nearest line. Null for a press outside any group, and
11201
+ * for one on something that answers presses itself, such as a task's
11202
+ * checkbox: `handlesPress` says which nodes do.
11203
+ */
11204
+ fieldNear(target: UiNode, y: number, handlesPress: (node: UiNode) => boolean): UiNode | null;
11205
+ /**
11206
+ * The offset under a point in a field, by its layout as it stands. The
11207
+ * pointer controller asks this before a press moves focus, and hands
11208
+ * the answer to `pointerDown`; see there.
11209
+ */
11210
+ offsetAt(node: UiNode, x: number, y: number): number;
11211
+ /**
11212
+ * `pressedAt` is the offset the press landed on, found before focus
11213
+ * moved. A field may change how it is drawn when it takes focus (its
11214
+ * runs show text they hid), and from then on its geometry is not the
11215
+ * one the person pressed on. Without it, the offset is found here.
11216
+ */
11217
+ pointerDown(node: UiNode, x: number, y: number, modifiers: UiKeyModifiers, pressedAt?: number): void;
10633
11218
  pointerMove(node: UiNode, x: number, y: number): void;
10634
11219
  pointerUp(): void;
10635
11220
  /** The focused editable's state for the shell to mirror, or null. */
@@ -10668,6 +11253,49 @@ declare class UiEditingController {
10668
11253
  */
10669
11254
  private notifySelection;
10670
11255
  private afterSelectionChange;
11256
+ /**
11257
+ * Selects from `anchor` to `focus`, in one field or across the fields
11258
+ * of an editing group, and focuses the field the focus end is in: what
11259
+ * an application does after a command over a selection, to leave it
11260
+ * selected. False when the two ends are not editables of one group.
11261
+ */
11262
+ select(anchor: UiTextPosition, focus: UiTextPosition): boolean;
11263
+ /** Whether a selection is spanning the fields of a group. */
11264
+ get spanning(): boolean;
11265
+ /**
11266
+ * Selects from `anchor` to `focus` across a group's fields: lights
11267
+ * every field between them with its part, gives the focus field its
11268
+ * own part in its model (anchored on the side the selection comes
11269
+ * from, so its keys and its IME stay sensible), and moves focus there.
11270
+ * Two ends in one field are that field's selection, as ever.
11271
+ */
11272
+ private setSpan;
11273
+ /** Ends a selection across fields, if there is one, unlighting them. */
11274
+ private clearSpan;
11275
+ /** Collapses a selection across fields to its start (-1) or its end (1). */
11276
+ private collapseSpan;
11277
+ /**
11278
+ * Hands an edit over a selection across fields to the group, and ends
11279
+ * the selection. No field is changed: the application changes its
11280
+ * document, which changes the fields, and places the caret.
11281
+ */
11282
+ private spanEdit;
11283
+ /** The text and HTML a selection across fields copies as. */
11284
+ private spanCopy;
11285
+ /** The HTML a selection inside one field of a group copies as, if the group gives any. */
11286
+ private fieldHtml;
11287
+ private cachedCopy;
11288
+ /** Where a Shift and press extends from: the focused field's anchor, if it is in the same group. */
11289
+ private anchorIn;
11290
+ /**
11291
+ * The field of a group a drag at height `y` is over: stepping up or
11292
+ * down from `from` until one reaches it, so a drag costs the fields it
11293
+ * crosses. A point in the gap between two fields belongs to the next
11294
+ * one in the direction of travel.
11295
+ */
11296
+ private fieldAt;
11297
+ /** Focuses a field for the span without ending it. */
11298
+ private focusField;
10671
11299
  /**
10672
11300
  * Asks the host to scroll the caret into view, when the node has been
10673
11301
  * laid out: the field's own text first, then any scroll container
@@ -11340,6 +11968,16 @@ declare class UiFrame {
11340
11968
  * node looked at.
11341
11969
  */
11342
11970
  anyFlags(flags: DirtyFlags): boolean;
11971
+ /**
11972
+ * This frame and `later` as one: every node in either, with the
11973
+ * flags it carried in both.
11974
+ *
11975
+ * What the phases after layout read when layout ran more than once
11976
+ * in a frame (see `UiScheduler.recollect`): a node dirtied by a
11977
+ * layout listener has to be re-meant and redrawn like any other
11978
+ * node the frame changed.
11979
+ */
11980
+ merged(later: UiFrame): UiFrame;
11343
11981
  get size(): number;
11344
11982
  isEmpty(): boolean;
11345
11983
  dirtyFlagsFor(node: UiNode): DirtyFlags;
@@ -11512,30 +12150,6 @@ interface ScrollAdjustment {
11512
12150
  scrollX: number;
11513
12151
  scrollY: number;
11514
12152
  }
11515
- /**
11516
- * Calculates geometry for a retained UiNode tree.
11517
- *
11518
- * Layout owns a separate projection of the graph (LayoutRecords
11519
- * keyed by UiNode identity) so the graph stays structural and
11520
- * the renderer/hit-testing read geometry from one place. The
11521
- * engine knows nothing about Canvas, WebGPU, or the DOM: it
11522
- * produces numbers only.
11523
- *
11524
- * measure: bottom-up, dirty subtrees only, early-stop via
11525
- * idempotent measured-size comparison
11526
- * place: top-down, dirty paths only, re-places a child's
11527
- * descendants only when its box actually changed
11528
- *
11529
- * Flex is two-pass, as in CSS: items are first measured at their
11530
- * max-content size to obtain a flex base, the main axis is resolved,
11531
- * and any item whose main size changed is measured again at that size
11532
- * so a cross size that depends on it — wrapped text above all — comes
11533
- * out right. The second pass only touches items that actually flexed.
11534
- *
11535
- * Scroll offset is a coordinate-space translation stored on the
11536
- * container record; descendants keep content coordinates, so
11537
- * scrolling never re-measures or re-places them.
11538
- */
11539
12153
  declare class LayoutEngine {
11540
12154
  private records;
11541
12155
  /**
@@ -11570,6 +12184,14 @@ declare class LayoutEngine {
11570
12184
  * no children to translate, so they are kept apart from `scrollNodes`.
11571
12185
  */
11572
12186
  private readonly textScrollNodes;
12187
+ /**
12188
+ * The editables whose text scroll needs clamping at the end of this
12189
+ * pass: the ones measured in it, whose extent may have changed, and
12190
+ * the ones whose offset was written. A field nothing touched keeps
12191
+ * the offset it had; clamping every editable every frame cost a
12192
+ * keystroke five thousand clamps in a 5,000-line document.
12193
+ */
12194
+ private readonly textScrollPending;
11573
12195
  /** Absolutely positioned nodes placed against an anchor node. */
11574
12196
  private readonly anchoredNodes;
11575
12197
  /** The anchor each of those nodes was last placed against. */
@@ -12026,6 +12648,15 @@ declare class LayoutEngine {
12026
12648
  */
12027
12649
  private minContentHeightContribution;
12028
12650
  private measureStack;
12651
+ /** What a stack asks a child while measuring: tight on a stretched axis, up to its content box otherwise. */
12652
+ private stackQuestion;
12653
+ /**
12654
+ * Whether a scroller's content is read from outside it. Scrolled
12655
+ * content pushes on nothing past a scroller whose size is its own,
12656
+ * but one without is its content's size under a loose bound, so
12657
+ * whatever reads its size reads the content's.
12658
+ */
12659
+ private scrollContentMatters;
12029
12660
  private measureScroll;
12030
12661
  /**
12031
12662
  * A leaf is its content plus padding. Text content comes from the
@@ -12340,6 +12971,46 @@ declare class LayoutEngine {
12340
12971
  * size properties itself, in measure().
12341
12972
  */
12342
12973
  private assignBox;
12974
+ /**
12975
+ * A frame repainted the node, perhaps with new shadows. A shadow lays
12976
+ * nothing out, so no pass would otherwise notice that the node now
12977
+ * paints further out, or less far, than its extent says.
12978
+ */
12979
+ private refreshPaintReach;
12980
+ /**
12981
+ * Moves a laid-out subtree by (dx, dy) without placing it again.
12982
+ *
12983
+ * Boxes are absolute, so a block inserted at the top of a long
12984
+ * document moved every box below it, and each one that moved was
12985
+ * placed again: its children re-measured (memo hits) and re-assigned,
12986
+ * all the way down. An Enter in a 5,000-line document placed 9,572
12987
+ * nodes and cost 18 ms of layout. A subtree that moved without
12988
+ * changing size, with nothing inside it waiting to be laid out, is
12989
+ * placed relative to itself already, so every box in it moves by the
12990
+ * same amount, which is one addition per node.
12991
+ *
12992
+ * Two kinds of node don't move with it. An absolutely positioned
12993
+ * descendant whose containing block is outside the subtree is placed
12994
+ * against that block, which didn't move. An anchored one is placed
12995
+ * against its anchor, and is placed again (`movedAnchored`) when its
12996
+ * anchor is one of the boxes that moved.
12997
+ */
12998
+ /**
12999
+ * A node's paint extent, once its children are placed: its box and its
13000
+ * own shadows, grown by each child's (a clipping child's box, since nothing paints past
13001
+ * it; anything else's extent). Then carried up, since an ancestor that
13002
+ * wasn't placed this pass still needs to hear.
13003
+ */
13004
+ private updateExtent;
13005
+ /**
13006
+ * Grows each ancestor's extent to cover a node's, up to the first
13007
+ * that clips or already covers it, which is at once in the usual case.
13008
+ * An incremental pass doesn't place the ancestors of the subtree it
13009
+ * laid out, so this is how they hear that something under them moved
13010
+ * past them.
13011
+ */
13012
+ private growExtentUp;
13013
+ private shiftSubtree;
12343
13014
  private scrollDirection;
12344
13015
  /**
12345
13016
  * Iterates over a node's in-flow children, transparently expanding
@@ -13011,8 +13682,17 @@ declare function borders(options: BordersOptions): UiModifier<Decorations>;
13011
13682
  declare function borderShapes(options: BordersOptions): readonly DecorationShape[];
13012
13683
  //#endregion
13013
13684
  //#region src/modifiers/focus.d.ts
13014
- /** Takes focus the first time the node is laid out. */
13015
- declare function autoFocus(): UiModifier<void>;
13685
+ /**
13686
+ * Takes focus the first time the node is laid out.
13687
+ *
13688
+ * The node is scrolled into view, as focus from code always is, once
13689
+ * the frame's layout has settled. Pass `{ preventScroll: true }` to
13690
+ * leave the page where it is, as `element.focus({ preventScroll: true })`
13691
+ * does: for a region focused when a page opens so a screen reader reads
13692
+ * it, where revealing it would scroll a tall region to a few pixels
13693
+ * short of its own top instead of leaving the page at its start.
13694
+ */
13695
+ declare function autoFocus(options?: FocusOptions): UiModifier<FocusOptions>;
13016
13696
  //#endregion
13017
13697
  //#region src/modifiers/clickOutside.d.ts
13018
13698
  interface ClickOutsideOptions {
@@ -14316,6 +14996,9 @@ interface SizeContainerArgs {
14316
14996
  * padding, and a layout that switched arms at 600 px would otherwise
14317
14997
  * switch at 600 px of border box and lay itself out in 560.
14318
14998
  *
14999
+ * What a subtree builds from the size it reports is laid out on the
15000
+ * same frame, before anything paints; see `UiModifierHost.onLayout`.
15001
+ *
14319
15002
  * `Responsive` attaches this for you. Attach it by hand when the
14320
15003
  * source has to be reachable somewhere the helper's own children are
14321
15004
  * not, and put the same object on the node's `containerSize` prop.
@@ -14352,9 +15035,15 @@ interface BreakpointArgs {
14352
15035
  * about it and the thing a media query cannot do: a card in a sidebar
14353
15036
  * asks how wide the card is, not how wide the window is.
14354
15037
  *
14355
- * Nothing is written until the node has been laid out once, so the
14356
- * first frame uses the element's own values. Give the element the
14357
- * narrowest band's values as its declared props if that matters.
15038
+ * Nothing is written until the node has been laid out once, but the
15039
+ * first frame is already right: the runtime lays out again before it
15040
+ * paints when a layout listener changes layout (see
15041
+ * `UiModifierHost.onLayout`), so the frame a node first appears on,
15042
+ * and the frame a resize crosses a width on, are drawn with the band's
15043
+ * values. The element's own values are what that first pass measures
15044
+ * with; give it the narrowest band's values as its declared props so a
15045
+ * layout nothing settles (a headless one, a spec driving layout by
15046
+ * hand) starts from the right band.
14358
15047
  */
14359
15048
  declare const breakpoint: ((args: BreakpointArgs, key?: string | number) => UiModifier<BreakpointArgs>) & {
14360
15049
  readonly kind: UiModifierKind<BreakpointArgs>;
@@ -14838,7 +15527,9 @@ interface Canvas2DRendererOptions {
14838
15527
  *
14839
15528
  * Painting per node (in order):
14840
15529
  *
15530
+ * 0. outer shadows (boxShadows, last declared first, as CSS stacks them)
14841
15531
  * 1. background fill (backgroundColor, rounded rect when radius > 0)
15532
+ * 1b. inset shadows (boxShadows marked `inset`, over the background)
14842
15533
  * 2. background image (image + objectFit)
14843
15534
  * 2b. picture (what a Paint node's `paint`/`path` drew)
14844
15535
  * 3. border (borderWidth/borderColor)
@@ -14870,6 +15561,8 @@ declare class Canvas2DRenderer implements UiRenderer {
14870
15561
  /** Scratch for the padded box text is drawn in; reused across nodes. */
14871
15562
  private readonly contentBox;
14872
15563
  private readonly paint;
15564
+ /** The frame's context, wrapped so a huge scroll offset keeps its precision; reset each frame. */
15565
+ private precise;
14873
15566
  /**
14874
15567
  * Whose style the shared paint scratch currently holds.
14875
15568
  *
@@ -14963,6 +15656,25 @@ declare class Canvas2DRenderer implements UiRenderer {
14963
15656
  /** Everything between the boundary (or the root) and a lifted node. */
14964
15657
  private applyAncestors;
14965
15658
  private paintBackground;
15659
+ /**
15660
+ * The node's outer shadows, or its inset ones, with CSS `box-shadow`
15661
+ * semantics: see `UiBoxShadow`.
15662
+ *
15663
+ * Drawn with the canvas's own shadow, which blurs whatever a fill
15664
+ * covers. The fill itself must not show, so the shape is drawn well
15665
+ * away from the box, outside the clip, and its shadow is cast back by
15666
+ * exactly that distance. The clip is what CSS clips a shadow to: for
15667
+ * an outer shadow the ring around the box, so a translucent background
15668
+ * does not show the shadow through it; for an inset one the box. An
15669
+ * inset shadow is the shadow of a frame around a hole, the hole being
15670
+ * the box moved by the offset and shrunk by the spread.
15671
+ *
15672
+ * A canvas shadow's offset and blur are in device pixels and ignore
15673
+ * the transform, so both are carried through it here: the throw by
15674
+ * the transform's linear part, the blur by its scale. The list is
15675
+ * walked backwards because CSS paints the first shadow on top.
15676
+ */
15677
+ private paintShadows;
14966
15678
  /** The node's box, following its corner radius. */
14967
15679
  private fillBox;
14968
15680
  /**
@@ -16373,13 +17085,24 @@ declare class GlyphShaper {
16373
17085
  * 2 size.xy
16374
17086
  * 4 color.rgba
16375
17087
  * 8 radius, opacity, borderWidth
16376
- * 11 kind (u32: PrimitiveKind)
17088
+ * 11 kind (PrimitiveKind, as a float)
16377
17089
  * 12 transform 3x2 affine, absolute layout → logical screen
16378
17090
  * 18 clipIndex index into the clip chain, -1 for none
16379
17091
  * 19 gradientIndex index into the frame's gradients, -1 for none
16380
- * 20 (end)
16381
- */
16382
- declare const INSTANCE_STRIDE_FLOATS = 20;
17092
+ * 20 shadow offsetX, offsetY, spread, the other shape's radius
17093
+ * 24 (end)
17094
+ *
17095
+ * A shadow is two rounded rectangles, the blurred one and the box it
17096
+ * is cut by, and an instance describes the first. For an outer shadow
17097
+ * the rectangle is the blurred shape grown by the blur's reach
17098
+ * (`BOX_SHADOW_BLUR_REACH` × blur), `radius` its corners, `borderWidth`
17099
+ * the blur, and the box it must not show under is recovered from the
17100
+ * offset and spread, with the box's own radius last. An inset shadow's
17101
+ * rectangle is the box, and the hole it is cast from is the box moved
17102
+ * by the offset and shrunk by the spread, with the hole's radius last.
17103
+ * Every other instance writes zeros there.
17104
+ */
17105
+ declare const INSTANCE_STRIDE_FLOATS = 24;
16383
17106
  declare const INSTANCE_STRIDE_BYTES: number;
16384
17107
  /**
16385
17108
  * Textured instance layout (glyphs and images), in floats:
@@ -16415,7 +17138,11 @@ declare const CLIP_STRIDE_BYTES: number;
16415
17138
  declare const NO_CLIP_INDEX = -1;
16416
17139
  declare const enum PrimitiveKind {
16417
17140
  Fill = 0,
16418
- Border = 1
17141
+ Border = 1,
17142
+ /** A `boxShadows` entry outside the box; see the instance layout. */
17143
+ Shadow = 2,
17144
+ /** A `boxShadows` entry marked `inset`. */
17145
+ InsetShadow = 3
16419
17146
  }
16420
17147
  declare const enum CommandKind {
16421
17148
  /** A contiguous range of primitive instances under one scissor. */
@@ -17278,6 +18005,23 @@ declare class UiScheduler {
17278
18005
  * cleared surface for a frame.
17279
18006
  */
17280
18007
  flush(time: UiFrameTime): void;
18008
+ /**
18009
+ * Takes what was dirtied since `frame` was collected into that same
18010
+ * frame, rather than leaving it for the next one.
18011
+ *
18012
+ * For a phase that has to finish inside the frame what the frame
18013
+ * started. A layout listener (a `breakpoint`, a `sizeContainer`)
18014
+ * that writes padding after the boxes are final has made those boxes
18015
+ * stale, and painting them would show the stale layout for one frame
18016
+ * before the next corrects it. The runtime lays the writes out again
18017
+ * from what this returns, before anything paints.
18018
+ *
18019
+ * The result holds only the newly dirtied nodes, with `frame`'s id
18020
+ * and time: it is more of the same frame, not a new one, so the
18021
+ * frame count does not move. Anything armed by those writes finds
18022
+ * nothing left to do.
18023
+ */
18024
+ recollect(frame: UiFrame): UiFrame;
17281
18025
  /**
17282
18026
  * Runs one frame, and names its three parts for the browser's
17283
18027
  * profiler when anything is recording (`PerformanceMarks`).
@@ -17322,6 +18066,8 @@ interface ParagraphGeometry {
17322
18066
  readonly end: number;
17323
18067
  readonly measure: RunMeasure;
17324
18068
  readonly rtl: boolean;
18069
+ /** Stretches of the text its runs hide; a double click selects words as drawn. */
18070
+ readonly hidden: readonly UiTextRange[];
17325
18071
  }
17326
18072
  /**
17327
18073
  * Lays a node's text out in its content box, exactly as the renderers
@@ -17412,6 +18158,8 @@ interface UiSemanticsRecord {
17412
18158
  readonly setSize?: number;
17413
18159
  /** How deep a treeitem sits, 1 for a root. */
17414
18160
  readonly level?: number;
18161
+ /** The record id of the descendant that's active while this one keeps focus. */
18162
+ readonly activeDescendant?: string;
17415
18163
  }
17416
18164
  /** Insertion-ordered: iterating the map walks the tree in document order. */
17417
18165
  type UiSemanticsMap = ReadonlyMap<string, UiSemanticsRecord>;
@@ -17434,7 +18182,29 @@ type UiSemanticsMap = ReadonlyMap<string, UiSemanticsRecord>;
17434
18182
  * is, carrying `disabled` — unavailable is a thing to announce,
17435
18183
  * hidden is not.
17436
18184
  */
17437
- declare function buildSemanticsTree(root: UiNode): Map<string, UiSemanticsRecord>;
18185
+ declare function buildSemanticsTree(root: UiNode, memory?: SemanticsMemory): Map<string, UiSemanticsRecord>;
18186
+ /**
18187
+ * What a walk leaves behind for the next one, so a structural change can
18188
+ * be described without walking everything again.
18189
+ *
18190
+ * `described` is every node a walk has given a record, so a record is
18191
+ * only ever taken back by the node that earned it: an id can come back
18192
+ * on a new node once its old one has gone. `spans` is, for every node
18193
+ * without a record of its own, which records it contributed to the
18194
+ * record above it: the first, by id, and how many. An untouched
18195
+ * transparent subtree (a block of a long document, say) is then
18196
+ * renumbered as a run of its parent's children instead of walked.
18197
+ */
18198
+ interface SemanticsMemory {
18199
+ readonly described: WeakSet<UiNode>;
18200
+ readonly spans: WeakMap<UiNode, SemanticsSpan>;
18201
+ }
18202
+ interface SemanticsSpan {
18203
+ readonly parent: string | null;
18204
+ readonly first: string | null;
18205
+ readonly count: number;
18206
+ }
18207
+ declare function semanticsMemory(): SemanticsMemory;
17438
18208
  /**
17439
18209
  * The records one subtree contributes, as if walked in place.
17440
18210
  *
@@ -17455,7 +18225,57 @@ declare function buildSemanticsTree(root: UiNode): Map<string, UiSemanticsRecord
17455
18225
  * `inert` is whether an ancestor above this subtree is disabled, which
17456
18226
  * only the caller can know.
17457
18227
  */
17458
- declare function buildSemanticsSubtree(node: UiNode, parent: string | null, index: number, inert: boolean): Map<string, UiSemanticsRecord> | null;
18228
+ declare function buildSemanticsSubtree(node: UiNode, parent: string | null, index: number, inert: boolean, memory?: SemanticsMemory): Map<string, UiSemanticsRecord> | null;
18229
+ /**
18230
+ * What a walk after a structural change may take from the tree it is
18231
+ * replacing.
18232
+ *
18233
+ * `previous` is the last tree's records by id; their indices may be out
18234
+ * of date, so a record's place is read from `childrenOf`, its parent's
18235
+ * children in order, and `positionOf`. `unchanged(node)` says that a
18236
+ * node and everything under it mean what they meant then: nothing in it
18237
+ * was described differently, and it took no children and lost none.
18238
+ */
18239
+ interface SemanticsReuse {
18240
+ readonly previous: ReadonlyMap<string, UiSemanticsRecord>;
18241
+ readonly childrenOf: (parent: string | null) => readonly string[];
18242
+ readonly positionOf: (parent: string | null, id: string) => number;
18243
+ readonly memory: SemanticsMemory;
18244
+ readonly unchanged: (node: UiNode) => boolean;
18245
+ }
18246
+ /** What a walk after a structural change found. */
18247
+ interface SemanticsRewalk {
18248
+ /** The records described afresh, with their indices. */
18249
+ readonly records: Map<string, UiSemanticsRecord>;
18250
+ /** For each record the walk went inside, its children's ids in order. */
18251
+ readonly children: Map<string | null, string[]>;
18252
+ /** Records taken back as they were, subtrees and all, without being described. */
18253
+ readonly kept: Set<string>;
18254
+ /** Every record the walk put somewhere, in document order, with where. */
18255
+ readonly placed: readonly SemanticsPlacement[];
18256
+ }
18257
+ interface SemanticsPlacement {
18258
+ readonly id: string;
18259
+ readonly parent: string | null;
18260
+ readonly index: number;
18261
+ }
18262
+ /**
18263
+ * Walks a subtree again after the shape of the tree changed inside it,
18264
+ * describing only what changed.
18265
+ *
18266
+ * A full walk asks every node what it means, and moves every record
18267
+ * whose siblings moved. After a block is inserted in a long document
18268
+ * nearly every node means what it did. So a record `reuse.unchanged`
18269
+ * vouches for is taken back as it was, and an untouched transparent
18270
+ * subtree (one with no record of its own, like a block of the document)
18271
+ * is taken back as the run of its parent's children it contributed last
18272
+ * time, without being walked into. Nothing taken back is renumbered:
18273
+ * the caller learns where everything went from `children` and `placed`.
18274
+ *
18275
+ * `node` has to carry a record, as for `buildSemanticsSubtree`; null
18276
+ * otherwise.
18277
+ */
18278
+ declare function rewalkSemantics(node: UiNode, parent: string | null, index: number, inert: boolean, reuse: SemanticsReuse): SemanticsRewalk | null;
17459
18279
  /**
17460
18280
  * Whether an ancestor of `node` is disabled, which every record in its
17461
18281
  * subtree inherits.
@@ -17487,6 +18307,11 @@ declare function textRunOfRecordId(id: string): {
17487
18307
  * from them, and a whole record cannot be applied out of order into
17488
18308
  * something half-updated. `remove` carries only the id, since a
17489
18309
  * removed subtree's records are each removed in their own patch.
18310
+ *
18311
+ * A record whose index moved only because a sibling came or went is
18312
+ * not sent (see `dropIndexShifts`). A consumer that applies removals,
18313
+ * then adds and updates in order, placing each at its index, keeps its
18314
+ * children in order without them.
17490
18315
  */
17491
18316
  type UiSemanticsPatch = {
17492
18317
  readonly op: 'add';
@@ -17507,6 +18332,24 @@ type UiSemanticsPatch = {
17507
18332
  * a mirror can append as it reads.
17508
18333
  */
17509
18334
  declare function diffSemantics(previous: UiSemanticsMap, next: UiSemanticsMap): UiSemanticsPatch[];
18335
+ /**
18336
+ * Drops the updates that only renumber a record whose siblings kept
18337
+ * their order.
18338
+ *
18339
+ * A record carries its index among its siblings, so inserting one near
18340
+ * the top of a list changes the index of every record after it, and
18341
+ * each of those used to go out as an update: 4,266 patches for one
18342
+ * paragraph inserted in a 5,000-line document, every one of them
18343
+ * crossing to the main thread and rewriting a mirror element. They say
18344
+ * nothing a mirror needs. It applies removals, then adds in document
18345
+ * order at their indices, so the elements that stayed are already in
18346
+ * the right order around the ones that came and went. Only when the
18347
+ * siblings that stayed changed their order among themselves (a move)
18348
+ * do the new indices matter, and then every update is kept.
18349
+ *
18350
+ * The records keep their new indices; this only thins the patches.
18351
+ */
18352
+ declare function dropIndexShifts(previous: UiSemanticsMap, next: UiSemanticsMap, patches: readonly UiSemanticsPatch[]): UiSemanticsPatch[];
17510
18353
  /** Structural equality over the record's flat, pruned members. */
17511
18354
  declare function recordsEqual(a: UiSemanticsRecord, b: UiSemanticsRecord): boolean;
17512
18355
  //#endregion
@@ -17566,5 +18409,5 @@ interface UiSemanticsAction {
17566
18409
  readonly value?: string;
17567
18410
  }
17568
18411
  //#endregion
17569
- export { Mp3Header as $, UiPointerController as $a, ScrollView as $c, paintValuesEqual as $d, UiModifierLayout as $f, UiTransform as $h, formatConstraints as $i, validateStates as $l, validateSubgrid as $m, DefaultVideoResolver as $n, EnvironmentNotifier as $o, resolveMotionState as $p, decorated as $r, clearSelectionRange as $s, PaintResolver as $t, defaultSpacing as $u, MARK_PREFIX as A, EditingState as Aa, selectionRects as Ac, UiTextLink as Ad, repeat as Af, normalizeTransition as Ah, parseAlignContent as Ai, RowProps as Al, UI_SUBGRID_AXES as Am, resolveNumber as An, UiPoint as Ao, UiKeyboardEvent as Ap, shortcuts as Ar, textRunBackgrounds as As, WebGPUTextureCache as At, UiTheme as Au, ByteSource as B, UiDroppedFile as Ba, ResponsiveProps as Bc, textContentOf as Bd, UiInsetRegistry as Bf, UiTweenOptions as Bh, SCROLLBAR_FADE_MS as Bi, UiPropertyValueOf as Bl, UiObjectFit as Bm, publishInset as Bn, scrollbarThumbs as Bo, noKeyModifiers as Bp, reorderable as Br, PaintTextSpan as Bs, WebGPUSurface as Bt, hasThemeExtension as Bu, paragraphGeometry as C, UiPlatformAdapter as Ca, caretRectFor as Cc, UiFontKerning as Cd, fr as Cf, findEnvironmentKey as Ch, GridPlacement as Ci, IdentityProps as Cl, DecorationRect as Cm, OverlayShape as Cn, SelectionControllerOptions as Co, MOUSE_POINTER as Cp, AnimateLayoutOptions as Cr, buildFontString as Cs, glyphCount as Ct, VirtualItemMeasure as Cu, UiFrameCallback as D, touchActionFor as Da, offsetAtPoint as Dc, UiResolvedTextSpan as Dd, isPercentLength as Df, UiTransitionSpec as Dh, AlignContent as Di, PositionProps as Dl, decorationRect as Dm, CanvasSurface as Dn, HitTestResult as Do, UiGestureEvent as Dp, ShortcutsOptions as Dr, layoutTextLines as Ds, GlyphSlot as Dt, UiVideoSurface as Du, wordRangeIn as E, prepareInputSurface as Ea, lineLimit as Ec, UiFontVariant as Ed, isMinMaxTrack as Ef, AnimationDriver as Eh, sizeGridTracks as Ei, PaintProps as El, decorationColor as Em, CanvasHost as En, HitTestLayoutReader as Eo, UiFocusEvent as Ep, ShortcutOptions as Er, fillTextRects as Es, GLYPH_SUBPIXEL_PHASES as Et, lazySource as Eu, setPerformanceMarks as F, UiDragPayload as Fa, nextWordEnd as Fc, editableSpansOf as Fd, boxShadowsEqual as Ff, UiAnimationOptions as Fh, ELLIPSIS as Fi, TypographyProps as Fl, UiCursor as Fm, themeTokens as Fn, ScrollbarAxis as Fo, UiPointerKind as Fp, DragSourceOptions as Fr, DEFAULT_FONT_SIZE as Fs, DrawStats as Ft, withDensity as Fu, Mp4AudioTrack as G, UiShortcutBinding as Ga, LazyRow as Gc, PaintLineCap as Gd, observeViewportInsets as Gf, UiSpringSpec as Gh, Edges as Gi, UiRole as Gl, UiSelfAlignment as Gm, ScrollOffset as Gn, matchRangesOf as Go, MotionChannel as Gp, clickOutside as Gr, createPaintState as Gs, registerFontStack as Gt, UiContrast as Gu, RangeSourceOptions as H, dragSessionFor as Ha, LazyGrid as Hc, textStylesEqual as Hd, UiInsets as Hf, UiDurationToken as Hh, ScrollAdjustment as Hi, UI_ROLES as Hl, UiPlacement as Hm, SizeContainerArgs as Hn, SubtreeBounds as Ho, DirtyNodeSet as Hp, DraggableOptions as Hr, VerticalAlign as Hs, bumpFontStack as Ht, themeExtension as Hu, VttCue as I, UiDragSession as Ia, previousGraphemeStart as Ic, flattenTextSpans as Id, UiPropertyDefinition as If, UiReducedMotionPolicy as Ih, layoutParagraph as Ii, UiEventProps as Il, UiDirection as Im, sameArgs as In, ScrollbarThumb as Io, UiSelectionChangeEvent as Ip, DropTargetOptions as Ir, DEFAULT_FONT_WEIGHT as Is, RenderHooks as It, UiThemeExtension as Iu, demuxMp4Audio as J, formatShortcut as Ja, Column as Jc, PaintTextAlign as Jd, bandOf as Jf, UiInterpolator as Jh, OverrideSources as Ji, isUiRole as Jl, UiTextDirection as Jm, VideoClock as Jn, FindOptions as Jo, MotionTiming as Jp, BordersOptions as Jr, normalizeVerticalAlign as Js, PaintPictureCache as Jt, raiseContrast as Ju, Mp4Sample as K, UiShortcutRegistry as Ka, Box as Kc, PaintLineJoin as Kd, UiContainerSize as Kf, UiSpringToken as Kh, LayoutExplanation as Ki, UiSemanticState as Kl, UiSubgridAxis as Km, ScrollPositionArgs as Kn, setMatchRanges as Ko, MotionState as Kp, autoFocus as Kr, isPaintVisible as Ks, PaintCanvas as Kt, contrastRatio as Ku, VttTrack as L, UiDragState as La, previousWordStart as Lc, resolvedSpansOf as Ld, defineProperty as Lf, UiSpring as Lh, proportionalFontMetrics as Li, UiNodeRef as Ll, UiFlexWrap as Lm, InsetPaddingArgs as Ln, scrollLeaderOf as Lo, UiTextChangeEvent as Lp, ReorderableOptions as Lr, DEFAULT_TEXT_COLOR as Ls, WebGPURenderer as Lt, UiThemeExtensionOptions as Lu, markNow as M, TouchScrollerOptions as Ma, lineEndAt as Mc, UiTextSpan as Md, UiBoxShadow as Mf, tween as Mh, parseMainAxisAlignment as Mi, StackProps as Ml, UiBorderRadiusValue as Mm, resolvePropertyByName as Mn, SCROLLBAR_INSET as Mo, UiPinchEvent as Mp, ZoomState as Mr, Canvas2DContext as Ms, isWebGPUAvailable as Mt, lightTheme as Mu, measureSpan as N, UiTouchScroller as Na, lineStartAt as Nc, UiTextStyle as Nd, boxShadow as Nf, AnimatedCell as Nh, FlexDirection as Ni, TextContentProps as Nl, UiColorValue as Nm, resolveString as Nn, SCROLLBAR_MIN_THUMB as No, UiPointerDevice as Np, pinchable as Nr, Canvas2DGradient as Ns, WebGPUError as Nt, themesEqual as Nu, UiScheduler as O, EditingControllerOptions as Oa, offsetAtX as Oc, UiSpannedText as Od, minmax as Of, UiTransitionValue as Oh, CrossAxisAlignment as Oi, PropsOf as Ol, hasDecorationPhase as Om, createCanvasSurface as On, HitTester as Oo, UiInputEvent as Op, contextMenu as Or, runCanvasStyleInto as Os, GlyphUpload as Ot, isVideoSurface as Ou, performanceMarksEnabled as P, EXTERNAL_FILES as Pa, nextGraphemeEnd as Pc, defaultTextStyle as Pd, boxShadowArraysEqual as Pf, UiAnimation as Ph, parseFlexDirection as Pi, TextProps as Pl, UiContentDistribution as Pm, ThemeTokenTarget as Pn, SCROLLBAR_THICKNESS as Po, UiPointerEvent as Pp, AutoScrollOptions as Pr, DEFAULT_FONT_FAMILY as Ps, CapturedFrame as Pt, withContrast as Pu, Mp3Frames as Q, PointerControllerOptions as Qa, Row as Qc, inputsEqual as Qd, UiModifierFocus as Qf, interpolatorFor as Qh, describeOverrides as Qi, validateRole as Ql, UiVerticalAlign as Qm, videoSource as Qn, UiEnvironmentKeys as Qo, pop as Qp, borders as Qr, TextRange as Qs, PaintGradient as Qt, UiSpacing as Qu, cueAt as R, UiDropEffect as Ra, wordRangeAt as Rc, spanAtOffset as Rd, propertyValuesEqual as Rf, UiSpringOptions as Rh, LayoutNotifier as Ri, UiProperties as Rl, UiFontWeight as Rm, PublishInsetArgs as Rn, scrollRange as Ro, UiWheelDeltaMode as Rp, dragSource as Rr, ObjectFit as Rs, WebGPURendererOptions as Rt, UiThemeExtensions as Ru, offsetAtPointIn as S, PlatformSurface as Sa, RunMeasure as Sc, visualStatesEqual as Sd, auto as Sf, createEnvironmentKey as Sh, GridItemRequest as Si, GridProps as Sl, DecorationFill as Sm, LABEL_PADDING_X as Sn, UiFindController as So, UiListenerErrorReporter as Sp, ImageResolver as Sr, applyCanvasTextStyle as Ss, createTextCache as St, VIRTUAL_WINDOW_PROP as Su, selectionRectsIn as T, pointerDeviceOf as Ta, lineIndexForOffset as Tc, UiFontStyle as Td, isFrLength as Tf, DirtyFlags as Th, placeGridItems as Ti, PaintElementProps as Tl, DecorationStroke as Tm, labelOrigin as Tn, UiSelectionController as To, UiEventType as Tp, ContextMenuOptions as Tr, drawText as Ts, GlyphShaper as Tt, VirtualViewport as Tu, bufferSource as U, ShortcutRegistryOptions as Ua, LazyGridProps as Uc, PaintBox as Ud, insetsEqual as Uf, UiEasingToken as Uh, AxisExplanation as Ui, UI_SEMANTIC_STATES as Ul, UiPointerEvents as Um, breakpoint as Un, TEXT_MATCHES_PROP as Uo, MOTION_CHANNELS as Up, draggable as Ur, colorToCss as Us, clearFontStacks as Ut, themeExtensionsEqual as Uu, DEFAULT_BLOCK_SIZE as V, UiFileDropMessage as Va, LazyColumn as Vc, textSpansEqual as Vd, UiInsetSource as Vf, createTween as Vh, SCROLLBAR_LINGER_MS as Vi, UiPropertyValues as Vl, UiOverflow as Vm, BreakpointArgs as Vn, scrollbarZoneAt as Vo, wheelDeltaYOf as Vp, DragOffset as Vr, TextAlign as Vs, createWebGPUSurface as Vt, noThemeExtensions as Vu, rangeSource as W, UiShortcut as Wa, LazyListProps as Wc, PaintFillRule as Wd, noInsets as Wf, UiMotion as Wh, CustomLayoutExplanation as Wi, UiLiveRegion as Wl, UiPosition as Wm, sizeContainer as Wn, clearMatchRanges as Wo, MOTION_REST as Wp, ClickOutsideOptions as Wr, computeObjectFitRect as Ws, fontStackFor as Wt, withThemeExtension as Wu, Mp3Format as X, KeyboardControllerOptions as Xa, Grid as Xc, UiPaint as Xd, unknownContainerSize as Xf, interpolateNumber as Xh, SizeDecision as Xi, normalizeStates as Xl, UiTextWrapValue as Xm, VideoState as Xn, UiEnvironmentProvider as Xo, fade as Xp, FocusRingOptions as Xr, DEFAULT_LINE_HEIGHT_FACTOR as Xs, paintPictures as Xt, UiDensity as Xu, demuxMp4Video as Y, parseShortcut as Ya, EditableText as Yc, PaintTextStyle as Yd, containerBands as Yf, interpolateColor as Yh, RelayoutExplanation as Yi, isUiSemanticState as Yl, UiTextOverflowValue as Ym, VideoSourceArgs as Yn, findMatchesIn as Yo, ResolvedMotionState as Yp, Decorations as Yr, resolvePaintState as Ys, PaintStats as Yt, relativeLuminance as Yu, Mp3Frame as Z, UiKeyboardController as Za, Paint as Zc, UiPath as Zd, UiModifierEnvironment as Zf, interpolateTransform as Zh, describeLength as Zi, statesEqual as Zl, UiThemeColorName as Zm, VideoTransport as Zn, provideEnvironment as Zo, isMotionRest as Zp, borderShapes as Zr, TEXT_SELECTION_PROP as Zs, PaintContext2D as Zt, densityFactors as Zu, linkOf as _, isNodeTabStop as _a, TextRunStyle as _c, UiVisualState as _d, FrLength as _f, easings as _g, darkColors as _h, inheritedPropertyNames as _i, EditableTextProps as _l, NodeProperty as _m, RendererBackend as _n, overrideSources as _o, UiPropValue as _p, IconRasterizerOptions as _r, CanvasTextStyle as _s, ScissorRect as _t, LazyListOptions as _u, diffSemantics as a, UiFrameClock as aa, FixedMetricsOptions as ac, shadowsEqual as ad, ResolvedGradientStop as af, UiBasicColors as ag, borderRadiusIsZero as ah, measure as ai, UiBinding as al, SharedClaim as am, PaintRecording as an, isScrollContainer as ao, defineModifier as ap, MotionArgs as ar, editorOf as as, CLIP_STRIDE_FLOATS as at, SheetHeaderRenderer as au, ParagraphGeometry as b, PlatformAdapterOptions as ba, CaretRect as bc, hasVisualState as bd, UiLength as bf, UiEnvironment as bh, propertyValuesEqualByName as bi, FlexItemProps as bl, UiPropertyOverride as bm, RenderChanges as bn, writeOverrideProperty as bo, UiEventListenerOptions as bp, DefaultImageResolver as br, TextLinePlacement as bs, TextRunDraw as bt, VIRTUAL_INDEX_PROP as bu, UiSemanticsMap as c, UiHostFrameClock as ca, ParagraphTextMeasurer as cc, UiTypographyRole as cd, UiGradientStop as cf, colorToRgba as cg, uniformBorderRadius as ch, bundle as ci, ChildrenBindingId as cl, LayoutBox as cm, InspectorOverlay as cn, UiGestureRecognizer as co, UiModifierTeardown as cp, sharedElement as cr, isReadOnly as cs, INSTANCE_STRIDE_BYTES as ct, SheetSourceArgs as cu, buildSemanticsTree as d, UiTimerFrameClock as da, TextLineRun as dc, typographyEqual as dd, gradientPaint as df, normalizeColor as dg, UiShapes as dh, accumulatedOffsetTo as di, BoxModelProps as dl, Size as dm, CanvasTextMeasurer as dn, FocusNotifier as do, UiChild as dp, ImageSources as dr, EditCommand as ds, NO_CLIP_INDEX as dt, UiVirtualSheetOptions as du, formatExplanation as ea, selectableTextNodes as ec, scaleSpacing as ed, pathValuesEqual as ef, UiTransforms as eg, UiBorderRadius as eh, focusRing as ei, Stack as el, rotateFrom as em, PaintTarget as en, ScrollContainerState as eo, UiModifierSet as ep, DefaultVideoResolverOptions as er, CARET_BLINK_MS as es, readMp3Header as et, CompositionRange as eu, semanticsInertAbove as f, UiTimerFrameClockOptions as fa, TextMeasureRequest as fc, MAX_MEASURES_PER_CHILD as fd, gradientsEqual as ff, parseColor as fg, defaultShapes as fh, contentOffset as fi, BoxProps as fl, TightenOptions as fm, Canvas2DRenderer as fn, FocusSource as fo, UiElement as fp, iconSource as fr, EditingPlatform as fs, PrimitiveCommand as ft, VIRTUAL_SHEET_PROP as fu, linkHoverOf as g, isNodeSelectable as ga, TextRunSpan as gc, isLayoutProtocol as gd, AutoLength as gf, cubicBezier as gg, colorsEqualPalette as gh, inheritedPropertyFlags as gi, ContainerProps as gl, NodeId as gm, ScrollLayerStats as gn, clearOverrideProperty as go, isUiElement as gp, IconRasterizer as gr, EditableLayout as gs, RenderTextCache as gt, LazyItemRenderer as gu, hasTextLinks as h, isNodeInert as ha, TextRunMeasurer as hc, UiLayoutProtocol as hd, validateGradient as hf, UiEasing as hg, UiColors as hh, getPropertyNames as hi, CommonProps as hl, tightenConstraints as hm, LayerCanvasFactory as hn, resetTransitionWarnings as ho, isUiChild as hp, IconContext as hr, isPrintable as hs, RenderList as ht, LazyGridOptions as hu, UiSemanticsPatch as i, UiAnimationFrameClock as ia, CharacterCountTextMeasurer as ic, defaultShadows as id, ResolvedGradient as if, transformsEqual as ig, borderRadiusEqual as ih, interactive as ii, BindingId as il, slideUp as im, PaintRecorder as in, UiWheelController as io, UiModifierKind as ip, canDecodeVideo as ir, editorFor as is, CLIP_STRIDE_BYTES as it, LazySheetProps as iu, markInstant as j, UiEditingController as ja, graphemeBoundaries as jc, UiTextMetrics as jd, resolveLength as jf, spring as jh, parseCrossAxisAlignment as ji, ScrollViewProps as jl, UiAlignment as jm, resolveProperty as jn, SCROLLBAR_HOVER_ZONE as jo, UiPasteEvent as jp, PinchableOptions as jr, textRunDecorations as js, initializeWebGPU as jt, darkTheme as ju, UiSchedulerOptions as k, EditingHost as ka, offsetForVerticalMove as kc, UiTextDecoration as kd, percent as kf, assertTransitionMap as kh, MainAxisAlignment as ki, Reactive as kl, paintsAfterChildren as km, resolveBoolean as kn, UiHitTester as ko, UiKeyModifiers as kp, shortcut as kr, runFontString as ks, WebGPUGlyphAtlas as kt, videoFrameSize as ku, UiSemanticsRecord as l, UiHostFrameClockOptions as la, SpannedRuns as lc, defaultTypography as ld, UiLinearGradient as lf, colorValuesEqual as lg, UiShapeExtensions as lh, noModifiers as li, UiChildrenBinding as ll, LayoutResult as lm, LayoutInspector as ln, PinchRecognizerOptions as lo, ComponentResolver as lp, IconSourceArgs as lr, nextCaretToggle as ls, INSTANCE_STRIDE_FLOATS as lt, SheetViewport as lu, clearLinkHover as m, isNodeHitTestable as ma, TextOverflow as mc, UiLayoutContext as md, radialGradient as mf, rgba as mg, shapesEqual as mh, findPropertyDefinition as mi, ColumnProps as ml, constraintsEqual as mm, traceRoundedRect as mn, NodeTransitions as mo, isObservable$1 as mp, IconCanvas as mr, detectEditingPlatform as ms, RenderCommand as mt, LazyAxis as mu, UiSemanticsBox as n, withOverrideSource as na, selectionRangeOf as nc, spacingSteps as nd, GradientPaint as nf, transform as ng, borderRadius as nh, InteractiveOptions as ni, createElement as nl, slideDown as nm, EMPTY_RECORDING as nn, UiScrollBehavior as no, assertModifierList as np, VideoPlayback as nr, EDITOR_PROP as ns, WebGPUGlyphPages as nt, EditableTextModel as nu, recordsEqual as o, UiFrameClockFactory as oa, FontMetrics as oc, UiTypography as od, UiGradient as of, UiColor as og, borderRadiusValuesEqual as oh, pressable as oi, UiGraph as ol, UiSharedElements as om, replayPaint as on, GestureInput as oo, isUiModifier as op, SharedElementArgs as or, isEditableNode as os, CommandKind as ot, SheetRange as ou, textRunOfRecordId as p, isNodeFocusable as pa, TextMeasurer as pc, UiLayoutChild as pd, linearGradient as pf, rgb8 as pg, isShapeName as ph, closestPropertyName as pi, ButtonProps as pl, clampSize as pm, Canvas2DRendererOptions as pn, UiFocusManager as po, isComponentLikeElement as pp, imageSource as pr, commandForKey as ps, PrimitiveKind as pt, sheetSource as pu, Mp4VideoTrack as q, UiShortcutStep as qa, Button as qc, PaintSurface as qd, UiContainerSizeSource as qf, defaultMotion as qh, LayoutStateExplanation as qi, UiSemanticStates as ql, UiTextAlign as qm, scrollPosition as qn, FindMatch as qo, MotionStateInput as qp, BorderEdge as qr, normalizeTextAlign as qs, PaintCanvasFactory as qt, highContrastColors as qu, UiSemanticsUpdate as r, UiFrame as ra, setSelectionRange as rc, UiShadows as rd, MAX_GRADIENT_STOPS as rf, transformIsIdentity as rg, borderRadiusCorners as rh, hoverable as ri, UiDefinition as rl, slideFrom as rm, PaintOp as rn, UiScrollability as ro, UiModifier as rp, VideoResolver as rr, caretVisibleAt as rs, Affine as rt, LazySheet as ru, TEXT_RUN_ID_SEPARATOR as s, UiFrameTime as sa, ParagraphLayout as sc, UiTypographyExtensions as sd, UiGradientOffset as sf, colorToHex as sg, normalizeBorderRadius as sh, UiModifierBundle as si, UiEventBinding as sl, Constraints as sm, INSPECTOR_HEAT_MS as sn, GestureRecognizerOptions as so, UiModifierHost as sp, motion as sr, isMultiline as ss, GlyphCommand as st, SheetRowRenderer as su, UiSemanticsAction as t, labelNode as ta, selectableTextOf as tc, spacingEqual as td, UiImage as tf, parseTransform as tg, UiBorderRadiuses as th, BUTTON_INTERACTION as ti, Text as tl, scaleFrom as tm, tracePathData as tn, ScrollSink as to, UiUnknownModifierPropertyError as tp, RangeResponse as tr, CARET_WIDTH as ts, splitMp3Frames as tt, EditUnit as tu, buildSemanticsSubtree as u, UiManualFrameClock as ua, TextLine as uc, isTypographyRole as ud, UiRadialGradient as uf, colorsEqual as ug, UiShapeName as uh, Transform as ui, UiGraphBuilder as ul, LayoutStats as um, LayoutInspectorOptions as un, UiPinchRecognizer as uo, ComponentLikeElement as up, ImageSourceArgs as ur, syncEditorValue as us, ImageCommand as ut, UiVirtualSheet as uu, linkRunAtPointIn as v, resolveCursor as va, TextWrap as vc, UiVisualStateSet as vd, MinMaxTrack as vf, linear as vg, lightColors as vh, propertyEffects as vi, EnvironmentProps as vl, UiNode as vm, UiRenderer as vn, resetOverrideWarnings as vo, UiProps as vp, IconSpec as vr, PlacedTextRun as vs, TEXTURED_STRIDE_BYTES as vt, LazySourceArgs as vu, paragraphGeometryFrom as w, capturePointer as wa, lineIndexAtY as wc, UiFontStretch as wd, isAutoLength as wf, UiNodeType as wh, GridTrack as wi, InteractionProps as wl, DecorationShape as wm, drawOverlayShapes as wn, SelectionHost as wo, UiBeforeInputEvent as wp, animateLayout as wr, createCanvasTextStyle as ws, textRuns as wt, VirtualUpdate as wu, hasDrawnText as x, PlatformEventTarget as xa, PlacedLine as xc, visualState as xd, UiTrackSize as xf, UiEnvironmentKey as xh, GridContribution as xi, GridItemProps as xl, UiPropertyOverrides as xm, RenderContext as xn, FindHost as xo, UiInputDispatcher as xp, DefaultImageResolverOptions as xr, TextRunRect as xs, buildRenderList as xt, VIRTUAL_LEAD_PROP as xu, setLinkHover as y, CanvasPlatformSurface as ya, spannedRunsFor as yc, defaultVisualState as yd, PercentLength as yf, steps as yg, LayoutRecord as yh, propertyIsInherited as yi, FlexContainerProps as yl, UiNodeTransitions as ym, LayoutReader as yn, writeDeclaredProperty as yo, UiEventListener as yp, iconKey as yr, SpanPaint as ys, TEXTURED_STRIDE_FLOATS as yt, UiVirtualWindow as yu, parseWebVtt as z, UiDropZone as za, Responsive as zc, spannedTextOf as zd, UiInsetEdge as zf, UiTween as zh, LayoutEngine as zi, UiPropertyName as zl, UiGridAutoFlow as zm, insetPadding as zn, scrollbarThumb as zo, UiWheelEvent as zp, dropTarget as zr, PaintState as zs, WebGPUCanvasHost as zt, defineThemeExtension as zu };
17570
- //# sourceMappingURL=index-BiN3WdTh.d.ts.map
18412
+ export { Mp4AudioTrack as $, UiShortcutBinding as $a, Box as $c, PaintFillRule as $d, UiInsetSource as $f, spring as $h, Edges as $i, UiSemanticState as $l, UiAlignment as $m, ScrollOffset as $n, FindMatch as $o, UiPasteEvent as $p, clickOutside as $r, isPaintVisible as $s, registerFontStack as $t, contrastRatio as $u, offsetAtPointIn as A, PlatformSurface as Aa, caretRectFor as Ac, UiFontKerning as Ad, UiTrackSize as Af, colorToRgba as Ag, uniformBorderRadius as Ah, GridItemRequest as Ai, IdentityProps as Al, LayoutBox as Am, LABEL_PADDING_X as An, SelectionHost as Ao, UiFocusManager as Ap, ImageResolver as Ar, createCanvasTextStyle as As, createTextCache as At, VirtualItemMeasure as Au, markNow as B, TouchScrollerOptions as Ba, lineStartAt as Bc, UiTextSpan as Bd, resolveLength as Bf, linear as Bg, lightColors as Bh, parseMainAxisAlignment as Bi, TextContentProps as Bl, UiNode as Bm, resolvePropertyByName as Bn, SCROLLBAR_THICKNESS as Bo, UiProps as Bp, ZoomState as Br, DEFAULT_FONT_FAMILY as Bs, isWebGPUAvailable as Bt, themesEqual as Bu, hasTextLinks as C, isNodeInert as Ca, TextRunSpan as Cc, isLayoutProtocol as Cd, radialGradient as Cf, parseTransform as Cg, UiBorderRadiuses as Ch, getPropertyNames as Ci, ContainerProps as Cl, scaleFrom as Cm, LayerCanvasFactory as Cn, overrideSources as Co, UiModifierKind as Cp, IconContext as Cr, CanvasTextStyle as Cs, RenderList as Ct, LazyItemRenderer as Cu, setLinkHover as D, CanvasPlatformSurface as Da, CaretRect as Dc, hasVisualState as Dd, MinMaxTrack as Df, UiBasicColors as Dg, borderRadiusIsZero as Dh, propertyIsInherited as Di, FlexItemProps as Dl, SharedClaim as Dm, LayoutReader as Dn, FindHost as Do, UiModifierTeardown as Dp, iconKey as Dr, TextRunRect as Ds, TEXTURED_STRIDE_FLOATS as Dt, VIRTUAL_INDEX_PROP as Du, linkRunAtPointIn as E, resolveCursor as Ea, spannedRunsFor as Ec, defaultVisualState as Ed, FrLength as Ef, transformsEqual as Eg, borderRadiusEqual as Eh, propertyEffects as Ei, FlexContainerProps as El, slideUp as Em, UiRenderer as En, writeOverrideProperty as Eo, UiModifierHost as Ep, IconSpec as Er, TextLinePlacement as Es, TEXTURED_STRIDE_BYTES as Et, UiVirtualWindow as Eu, UiFrameCallback as F, touchActionFor as Fa, offsetAtX as Fc, UiSpannedText as Fd, isMinMaxTrack as Ff, rgb8 as Fg, isShapeName as Fh, AlignContent as Fi, PropsOf as Fl, clampSize as Fm, CanvasSurface as Fn, UiHitTester as Fo, isComponentLikeElement as Fp, ShortcutsOptions as Fr, runFontString as Fs, GlyphSlot as Ft, isVideoSurface as Fu, VttTrack as G, UiDragState as Ga, wordRangeAt as Gc, hiddenRangesOf as Gd, boxShadowRadius as Gf, findEnvironmentKey as Gh, proportionalFontMetrics as Gi, UiProperties as Gl, DecorationRect as Gm, InsetPaddingArgs as Gn, scrollbarThumb as Go, MOUSE_POINTER as Gp, ReorderableOptions as Gr, PaintBoxShadow as Gs, WebGPURenderer as Gt, UiThemeExtensions as Gu, performanceMarksEnabled as H, EXTERNAL_FILES as Ha, nextWordEnd as Hc, defaultTextStyle as Hd, UiBoxShadow as Hf, UiEnvironment as Hh, parseFlexDirection as Hi, TypographyProps as Hl, UiPropertyOverride as Hm, ThemeTokenTarget as Hn, ScrollbarThumb as Ho, UiEventListenerOptions as Hp, AutoScrollOptions as Hr, DEFAULT_FONT_WEIGHT as Hs, CapturedFrame as Ht, withDensity as Hu, UiScheduler as I, EditingControllerOptions as Ia, offsetForVerticalMove as Ic, UiTextDecoration as Id, isPercentLength as If, rgba as Ig, shapesEqual as Ih, CrossAxisAlignment as Ii, Reactive as Il, constraintsEqual as Im, createCanvasSurface as In, UiPoint as Io, isObservable$1 as Ip, contextMenu as Ir, textRunBackgrounds as Is, GlyphUpload as It, videoFrameSize as Iu, ByteSource as J, UiDroppedFile as Ja, LazyColumn as Jc, spannedTextOf as Jd, UiPropertyDefinition as Jf, AnimationDriver as Jh, SCROLLBAR_FADE_MS as Ji, UiPropertyValues as Jl, decorationColor as Jm, publishInset as Jn, SubtreeBounds as Jo, UiFocusEvent as Jp, reorderable as Jr, TextAlign as Js, WebGPUSurface as Jt, noThemeExtensions as Ju, cueAt as K, UiDropEffect as Ka, Responsive as Kc, resolvedSpansOf as Kd, boxShadowReach as Kf, UiNodeType as Kh, LayoutNotifier as Ki, UiPropertyName as Kl, DecorationShape as Km, PublishInsetArgs as Kn, scrollbarThumbs as Ko, UiBeforeInputEvent as Kp, dragSource as Kr, PaintState as Ks, WebGPURendererOptions as Kt, defineThemeExtension as Ku, UiSchedulerOptions as L, EditingHost as La, selectionRects as Lc, UiTextLink as Ld, minmax as Lf, UiEasing as Lg, UiColors as Lh, MainAxisAlignment as Li, RowProps as Ll, tightenConstraints as Lm, resolveBoolean as Ln, SCROLLBAR_HOVER_ZONE as Lo, isUiChild as Lp, shortcut as Lr, textRunDecorations as Ls, WebGPUGlyphAtlas as Lt, UiTheme as Lu, paragraphGeometryFrom as M, capturePointer as Ma, lineIndexForOffset as Mc, UiFontStyle as Md, fr as Mf, colorsEqual as Mg, UiShapeName as Mh, GridTrack as Mi, PaintElementProps as Ml, LayoutStats as Mm, drawOverlayShapes as Mn, HitTestLayoutReader as Mo, ComponentLikeElement as Mp, animateLayout as Mr, fillTextRects as Ms, textRuns as Mt, VirtualViewport as Mu, selectionRectsIn as N, pointerDeviceOf as Na, lineLimit as Nc, UiFontVariant as Nd, isAutoLength as Nf, normalizeColor as Ng, UiShapes as Nh, placeGridItems as Ni, PaintProps as Nl, Size as Nm, labelOrigin as Nn, HitTestResult as No, UiChild as Np, ContextMenuOptions as Nr, layoutTextLines as Ns, GlyphShaper as Nt, lazySource as Nu, ParagraphGeometry as O, PlatformAdapterOptions as Oa, PlacedLine as Oc, visualState as Od, PercentLength as Of, UiColor as Og, borderRadiusValuesEqual as Oh, propertyValuesEqualByName as Oi, GridItemProps as Ol, UiSharedElements as Om, RenderChanges as On, UiFindController as Oo, FocusOptions as Op, DefaultImageResolver as Or, applyCanvasTextStyle as Os, TextRunDraw as Ot, VIRTUAL_LEAD_PROP as Ou, wordRangeIn as P, prepareInputSurface as Pa, offsetAtPoint as Pc, UiResolvedTextSpan as Pd, isFrLength as Pf, parseColor as Pg, defaultShapes as Ph, sizeGridTracks as Pi, PositionProps as Pl, TightenOptions as Pm, CanvasHost as Pn, HitTester as Po, UiElement as Pp, ShortcutOptions as Pr, runCanvasStyleInto as Ps, GLYPH_SUBPIXEL_PHASES as Pt, UiVideoSurface as Pu, rangeSource as Q, UiShortcut as Qa, LazyRow as Qc, PaintBox as Qd, UiInsetRegistry as Qf, normalizeTransition as Qh, CustomLayoutExplanation as Qi, UiRole as Ql, UI_SUBGRID_AXES as Qm, sizeContainer as Qn, setMatchRanges as Qo, UiKeyboardEvent as Qp, ClickOutsideOptions as Qr, createPaintState as Qs, fontStackFor as Qt, UiContrast as Qu, MARK_PREFIX as R, EditingState as Ra, graphemeBoundaries as Rc, UiTextMetrics as Rd, percent as Rf, cubicBezier as Rg, colorsEqualPalette as Rh, parseAlignContent as Ri, ScrollViewProps as Rl, NodeId as Rm, resolveNumber as Rn, SCROLLBAR_INSET as Ro, isUiElement as Rp, shortcuts as Rr, Canvas2DContext as Rs, WebGPUTextureCache as Rt, darkTheme as Ru, clearLinkHover as S, isNodeHitTestable as Sa, TextRunMeasurer as Sc, UiLayoutProtocol as Sd, linearGradient as Sf, UiTransforms as Sg, UiBorderRadius as Sh, findPropertyDefinition as Si, CommonProps as Sl, rotateFrom as Sm, traceRoundedRect as Sn, clearOverrideProperty as So, UiModifier as Sp, IconCanvas as Sr, EditableLayout as Ss, RenderCommand as St, LazyGridOptions as Su, linkOf as T, isNodeTabStop as Ta, TextWrap as Tc, UiVisualStateSet as Td, AutoLength as Tf, transformIsIdentity as Tg, borderRadiusCorners as Th, inheritedPropertyNames as Ti, EnvironmentProps as Tl, slideFrom as Tm, RendererBackend as Tn, writeDeclaredProperty as To, isUiModifier as Tp, IconRasterizerOptions as Tr, SpanPaint as Ts, ScissorRect as Tt, LazySourceArgs as Tu, setPerformanceMarks as U, UiDragPayload as Ua, previousGraphemeStart as Uc, editableSpansOf as Ud, boxShadow as Uf, UiEnvironmentKey as Uh, ELLIPSIS as Ui, UiEventProps as Ul, UiPropertyOverrides as Um, themeTokens as Un, scrollLeaderOf as Uo, UiInputDispatcher as Up, DragSourceOptions as Ur, DEFAULT_TEXT_COLOR as Us, DrawStats as Ut, UiThemeExtension as Uu, measureSpan as V, UiTouchScroller as Va, nextGraphemeEnd as Vc, UiTextStyle as Vd, BOX_SHADOW_BLUR_REACH as Vf, steps as Vg, LayoutRecord as Vh, FlexDirection as Vi, TextProps as Vl, UiNodeTransitions as Vm, resolveString as Vn, ScrollbarAxis as Vo, UiEventListener as Vp, pinchable as Vr, DEFAULT_FONT_SIZE as Vs, WebGPUError as Vt, withContrast as Vu, VttCue as W, UiDragSession as Wa, previousWordStart as Wc, flattenTextSpans as Wd, boxShadowArraysEqual as Wf, createEnvironmentKey as Wh, layoutParagraph as Wi, UiNodeRef as Wl, DecorationFill as Wm, sameArgs as Wn, scrollRange as Wo, UiListenerErrorReporter as Wp, DropTargetOptions as Wr, ObjectFit as Ws, RenderHooks as Wt, UiThemeExtensionOptions as Wu, RangeSourceOptions as X, dragSessionFor as Xa, LazyGridProps as Xc, textSpansEqual as Xd, propertyValuesEqual as Xf, UiTransitionValue as Xh, ScrollAdjustment as Xi, UI_SEMANTIC_STATES as Xl, hasDecorationPhase as Xm, SizeContainerArgs as Xn, clearMatchRanges as Xo, UiInputEvent as Xp, DraggableOptions as Xr, colorToCss as Xs, bumpFontStack as Xt, themeExtensionsEqual as Xu, DEFAULT_BLOCK_SIZE as Y, UiFileDropMessage as Ya, LazyGrid as Yc, textContentOf as Yd, defineProperty as Yf, UiTransitionSpec as Yh, SCROLLBAR_LINGER_MS as Yi, UI_ROLES as Yl, decorationRect as Ym, BreakpointArgs as Yn, TEXT_MATCHES_PROP as Yo, UiGestureEvent as Yp, DragOffset as Yr, VerticalAlign as Ys, createWebGPUSurface as Yt, themeExtension as Yu, bufferSource as Z, ShortcutRegistryOptions as Za, LazyListProps as Zc, textStylesEqual as Zd, UiInsetEdge as Zf, assertTransitionMap as Zh, AxisExplanation as Zi, UiLiveRegion as Zl, paintsAfterChildren as Zm, breakpoint as Zn, matchRangesOf as Zo, UiKeyModifiers as Zp, draggable as Zr, computeObjectFitRect as Zs, clearFontStacks as Zt, withThemeExtension as Zu, buildSemanticsTree as _, UiHostFrameClockOptions as _a, TextLine as _c, isTypographyRole as _d, UiGradientStop as _f, interpolateColor as _g, UiTextOverflowValue as _h, noModifiers as _i, UiGraphBuilder as _l, ResolvedMotionState as _m, LayoutInspector as _n, PinchRecognizerOptions as _o, UiModifierFocus as _p, IconSourceArgs as _r, EditCommand as _s, INSTANCE_STRIDE_FLOATS as _t, UiVirtualSheet as _u, diffSemantics as a, describeLength as aa, TextRange as ac, UiSpacing as ad, UiPaint as af, UiSpring as ag, UiFlexWrap as ah, borderShapes as ai, Row as al, UiTextChangeEvent as am, PaintContext2D as an, UiKeyboardController as ao, UiContainerSizeSource as ap, VideoTransport as ar, EnvironmentNotifier as as, Mp3Frame as at, validateRole as au, semanticsMemory as b, UiTimerFrameClockOptions as ba, TextMeasurer as bc, UiLayoutChild as bd, gradientPaint as bf, interpolatorFor as bg, UiVerticalAlign as bh, contentOffset as bi, ButtonProps as bl, pop as bm, Canvas2DRenderer as bn, NodeTransitions as bo, UiUnknownModifierPropertyError as bp, iconSource as br, detectEditingPlatform as bs, PrimitiveCommand as bt, sheetSource as bu, SemanticsMemory as c, formatExplanation as ca, selectableTextOf as cc, spacingEqual as cd, paintValuesEqual as cf, UiTweenOptions as cg, UiObjectFit as ch, focusRing as ci, Text as cl, noKeyModifiers as cm, PaintTarget as cn, ScrollContainerState as co, unknownContainerSize as cp, DefaultVideoResolverOptions as cr, EDITOR_PROP as cs, readMp3Header as ct, EditUnit as cu, SemanticsRewalk as d, UiFrame as da, CharacterCountTextMeasurer as dc, defaultShadows as dd, GradientPaint as df, UiEasingToken as dg, UiPointerEvents as dh, hoverable as di, BindingId as dl, MOTION_CHANNELS as dm, PaintOp as dn, UiScrollability as do, UiTextPosition as dp, VideoResolver as dr, editorOf as ds, Affine as dt, LazySheetProps as du, LayoutExplanation as ea, normalizeTextAlign as ec, highContrastColors as ed, PaintLineCap as ef, tween as eg, UiBorderRadiusValue as eh, autoFocus as ei, Button as el, UiPinchEvent as em, PaintCanvas as en, UiShortcutRegistry as eo, UiInsets as ep, ScrollPositionArgs as er, FindOptions as es, Mp4Sample as et, UiSemanticStates as eu, SemanticsSpan as f, UiAnimationFrameClock as fa, FixedMetricsOptions as fc, shadowsEqual as fd, MAX_GRADIENT_STOPS as ff, UiMotion as fg, UiPosition as fh, interactive as fi, UiBinding as fl, MOTION_REST as fm, PaintRecorder as fn, UiWheelController as fo, adjacentField as fp, canDecodeVideo as fr, isEditableNode as fs, CLIP_STRIDE_BYTES as ft, SheetHeaderRenderer as fu, buildSemanticsSubtree as g, UiHostFrameClock as ga, SpannedRuns as gc, defaultTypography as gd, UiGradientOffset as gf, UiInterpolator as gg, UiTextDirection as gh, bundle as gi, UiChildrenBinding as gl, MotionTiming as gm, InspectorOverlay as gn, UiGestureRecognizer as go, UiModifierEnvironment as gp, sharedElement as gr, syncEditorValue as gs, INSTANCE_STRIDE_BYTES as gt, SheetViewport as gu, UiSemanticsRecord as h, UiFrameTime as ha, ParagraphTextMeasurer as hc, UiTypographyRole as hd, UiGradient as hf, defaultMotion as hg, UiTextAlign as hh, UiModifierBundle as hi, ChildrenBindingId as hl, MotionStateInput as hm, INSPECTOR_HEAT_MS as hn, GestureRecognizerOptions as ho, editingGroupOf as hp, motion as hr, nextCaretToggle as hs, GlyphCommand as ht, SheetSourceArgs as hu, UiSemanticsPatch as i, SizeDecision as ia, TEXT_SELECTION_PROP as ic, densityFactors as id, PaintTextStyle as if, UiReducedMotionPolicy as ig, UiDirection as ih, FocusRingOptions as ii, Paint as il, UiSelectionChangeEvent as im, paintPictures as in, KeyboardControllerOptions as io, UiContainerSize as ip, VideoState as ir, UiEnvironmentKeys as is, Mp3Format as it, statesEqual as iu, paragraphGeometry as j, UiPlatformAdapter as ja, lineIndexAtY as jc, UiFontStretch as jd, auto as jf, colorValuesEqual as jg, UiShapeExtensions as jh, GridPlacement as ji, InteractionProps as jl, LayoutResult as jm, OverlayShape as jn, UiSelectionController as jo, ComponentResolver as jp, AnimateLayoutOptions as jr, drawText as js, glyphCount as jt, VirtualUpdate as ju, hasDrawnText as k, PlatformEventTarget as ka, RunMeasure as kc, visualStatesEqual as kd, UiLength as kf, colorToHex as kg, normalizeBorderRadius as kh, GridContribution as ki, GridProps as kl, Constraints as km, RenderContext as kn, SelectionControllerOptions as ko, FocusSource as kp, DefaultImageResolverOptions as kr, buildFontString as ks, buildRenderList as kt, VIRTUAL_WINDOW_PROP as ku, SemanticsPlacement as l, labelNode as la, selectionRangeOf as lc, spacingSteps as ld, pathValuesEqual as lf, createTween as lg, UiOverflow as lh, BUTTON_INTERACTION as li, createElement as ll, wheelDeltaYOf as lm, tracePathData as ln, ScrollSink as lo, UiEditingGroup as lp, RangeResponse as lr, caretVisibleAt as ls, splitMp3Frames as lt, EditableTextModel as lu, UiSemanticsMap as m, UiFrameClockFactory as ma, ParagraphLayout as mc, UiTypographyExtensions as md, ResolvedGradientStop as mf, UiSpringToken as mg, UiSubgridAxis as mh, pressable as mi, UiEventBinding as ml, MotionState as mm, replayPaint as mn, GestureInput as mo, edgeField as mp, SharedElementArgs as mr, isReadOnly as ms, CommandKind as mt, SheetRowRenderer as mu, UiSemanticsBox as n, OverrideSources as na, resolvePaintState as nc, relativeLuminance as nd, PaintSurface as nf, UiAnimation as ng, UiContentDistribution as nh, BordersOptions as ni, EditableText as nl, UiPointerEvent as nm, PaintPictureCache as nn, formatShortcut as no, noInsets as np, VideoClock as nr, UiEnvironmentProvider as ns, demuxMp4Audio as nt, isUiSemanticState as nu, dropIndexShifts as o, describeOverrides as oa, clearSelectionRange as oc, defaultSpacing as od, UiPath as of, UiSpringOptions as og, UiFontWeight as oh, borders as oi, ScrollView as ol, UiWheelDeltaMode as om, PaintGradient as on, PointerControllerOptions as oo, bandOf as op, videoSource as or, CARET_BLINK_MS as os, Mp3Frames as ot, validateStates as ou, TEXT_RUN_ID_SEPARATOR as p, UiFrameClock as pa, FontMetrics as pc, UiTypography as pd, ResolvedGradient as pf, UiSpringSpec as pg, UiSelfAlignment as ph, measure as pi, UiGraph as pl, MotionChannel as pm, PaintRecording as pn, isScrollContainer as po, comparePositions as pp, MotionArgs as pr, isMultiline as ps, CLIP_STRIDE_FLOATS as pt, SheetRange as pu, parseWebVtt as q, UiDropZone as qa, ResponsiveProps as qc, spanAtOffset as qd, boxShadowsEqual as qf, DirtyFlags as qh, LayoutEngine as qi, UiPropertyValueOf as ql, DecorationStroke as qm, insetPadding as qn, scrollbarZoneAt as qo, UiEventType as qp, dropTarget as qr, PaintTextSpan as qs, WebGPUCanvasHost as qt, hasThemeExtension as qu, UiSemanticsUpdate as r, RelayoutExplanation as ra, DEFAULT_LINE_HEIGHT_FACTOR as rc, UiDensity as rd, PaintTextAlign as rf, UiAnimationOptions as rg, UiCursor as rh, Decorations as ri, Grid as rl, UiPointerKind as rm, PaintStats as rn, parseShortcut as ro, observeViewportInsets as rp, VideoSourceArgs as rr, provideEnvironment as rs, demuxMp4Video as rt, normalizeStates as ru, recordsEqual as s, formatConstraints as sa, selectableTextNodes as sc, scaleSpacing as sd, inputsEqual as sf, UiTween as sg, UiGridAutoFlow as sh, decorated as si, Stack as sl, UiWheelEvent as sm, PaintResolver as sn, UiPointerController as so, containerBands as sp, DefaultVideoResolver as sr, CARET_WIDTH as ss, Mp3Header as st, CompositionRange as su, UiSemanticsAction as t, LayoutStateExplanation as ta, normalizeVerticalAlign as tc, raiseContrast as td, PaintLineJoin as tf, AnimatedCell as tg, UiColorValue as th, BorderEdge as ti, Column as tl, UiPointerDevice as tm, PaintCanvasFactory as tn, UiShortcutStep as to, insetsEqual as tp, scrollPosition as tr, findMatchesIn as ts, Mp4VideoTrack as tt, isUiRole as tu, SemanticsReuse as u, withOverrideSource as ua, setSelectionRange as uc, UiShadows as ud, UiImage as uf, UiDurationToken as ug, UiPlacement as uh, InteractiveOptions as ui, UiDefinition as ul, DirtyNodeSet as um, EMPTY_RECORDING as un, UiScrollBehavior as uo, UiGroupEdit as up, VideoPlayback as ur, editorFor as us, WebGPUGlyphPages as ut, LazySheet as uu, rewalkSemantics as v, UiManualFrameClock as va, TextLineRun as vc, typographyEqual as vd, UiLinearGradient as vf, interpolateNumber as vg, UiTextWrapValue as vh, Transform as vi, BoxModelProps as vl, fade as vm, LayoutInspectorOptions as vn, UiPinchRecognizer as vo, UiModifierLayout as vp, ImageSourceArgs as vr, EditingPlatform as vs, ImageCommand as vt, UiVirtualSheetOptions as vu, linkHoverOf as w, isNodeSelectable as wa, TextRunStyle as wc, UiVisualState as wd, validateGradient as wf, transform as wg, borderRadius as wh, inheritedPropertyFlags as wi, EditableTextProps as wl, slideDown as wm, ScrollLayerStats as wn, resetOverrideWarnings as wo, defineModifier as wp, IconRasterizer as wr, PlacedTextRun as ws, RenderTextCache as wt, LazyListOptions as wu, textRunOfRecordId as x, isNodeFocusable as xa, TextOverflow as xc, UiLayoutContext as xd, gradientsEqual as xf, UiTransform as xg, validateSubgrid as xh, closestPropertyName as xi, ColumnProps as xl, resolveMotionState as xm, Canvas2DRendererOptions as xn, resetTransitionWarnings as xo, assertModifierList as xp, imageSource as xr, isPrintable as xs, PrimitiveKind as xt, LazyAxis as xu, semanticsInertAbove as y, UiTimerFrameClock as ya, TextMeasureRequest as yc, MAX_MEASURES_PER_CHILD as yd, UiRadialGradient as yf, interpolateTransform as yg, UiThemeColorName as yh, accumulatedOffsetTo as yi, BoxProps as yl, isMotionRest as ym, CanvasTextMeasurer as yn, FocusNotifier as yo, UiModifierSet as yp, ImageSources as yr, commandForKey as ys, NO_CLIP_INDEX as yt, VIRTUAL_SHEET_PROP as yu, markInstant as z, UiEditingController as za, lineEndAt as zc, UiTextRange as zd, repeat as zf, easings as zg, darkColors as zh, parseCrossAxisAlignment as zi, StackProps as zl, NodeProperty as zm, resolveProperty as zn, SCROLLBAR_MIN_THUMB as zo, UiPropValue as zp, PinchableOptions as zr, Canvas2DGradient as zs, initializeWebGPU as zt, lightTheme as zu };
18413
+ //# sourceMappingURL=index-DBnLGexp.d.ts.map