gesso-core 0.4.1 → 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.
- package/CHANGELOG.md +92 -0
- package/dist/{CanvasSurface-CaNWsAlm.js → CanvasSurface-CDjWI3EH.js} +4539 -2722
- package/dist/CanvasSurface-CDjWI3EH.js.map +1 -0
- package/dist/{index-CfUSbphd.d.ts → index-DBnLGexp.d.ts} +1389 -485
- package/dist/index.d.ts +2 -2
- package/dist/index.js +610 -88
- package/dist/index.js.map +1 -1
- package/dist/testing.d.ts +13 -1
- package/dist/testing.js +46 -8
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
- package/dist/CanvasSurface-CaNWsAlm.js.map +0 -1
|
@@ -1013,7 +1013,50 @@ 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;
|
|
1043
|
+
/**
|
|
1044
|
+
* An editable, which scrolls its own text inside its box.
|
|
1045
|
+
*
|
|
1046
|
+
* Not `scrollable`: it has no children to translate and its offset
|
|
1047
|
+
* follows the caret, so every path that treats a scroll container's
|
|
1048
|
+
* content as children leaves it alone. What it shares with one is
|
|
1049
|
+
* the offset and its clamp — see `scrollRange` — and, when it is
|
|
1050
|
+
* multiline, the overlay scrollbars.
|
|
1051
|
+
*/
|
|
1052
|
+
scrollsText: boolean;
|
|
1053
|
+
/**
|
|
1054
|
+
* A multiline editable, which shows the overlay scrollbars a scroll
|
|
1055
|
+
* container does over its own text. A single-line field scrolls
|
|
1056
|
+
* sideways too, but a bar under one line of text reads as part of
|
|
1057
|
+
* the control rather than a hint that there is more of it.
|
|
1058
|
+
*/
|
|
1059
|
+
textScrollbars: boolean;
|
|
1017
1060
|
/**
|
|
1018
1061
|
* A scroll container that reads right to left, so its overlay
|
|
1019
1062
|
* scrollbar hangs on the left edge and the band that reveals it is
|
|
@@ -1072,42 +1115,54 @@ declare class LayoutRecord {
|
|
|
1072
1115
|
/** Constraints this record was last measured under. */
|
|
1073
1116
|
lastConstraints: Constraints;
|
|
1074
1117
|
/**
|
|
1075
|
-
*
|
|
1076
|
-
*
|
|
1077
|
-
*
|
|
1078
|
-
*
|
|
1079
|
-
* in
|
|
1080
|
-
*
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
*
|
|
1086
|
-
*
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
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. */
|
|
1108
1157
|
saveAlt(): void;
|
|
1109
|
-
/**
|
|
1110
|
-
|
|
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;
|
|
1111
1166
|
/**
|
|
1112
1167
|
* Set by the parent before measuring this node: something outside it
|
|
1113
1168
|
* reads a content-derived output beyond its constrained size — its
|
|
@@ -1126,6 +1181,8 @@ declare class LayoutRecord {
|
|
|
1126
1181
|
relayoutBoundary: boolean;
|
|
1127
1182
|
measureDirty: boolean;
|
|
1128
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;
|
|
1129
1186
|
transformDirty: boolean;
|
|
1130
1187
|
/**
|
|
1131
1188
|
* Which layout pass last folded the node's properties onto this
|
|
@@ -1224,6 +1281,15 @@ interface UiColors {
|
|
|
1224
1281
|
readonly selectionBackground: UiColor;
|
|
1225
1282
|
readonly selectionForeground: UiColor;
|
|
1226
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
|
+
*/
|
|
1227
1293
|
declare const lightColors: UiColors;
|
|
1228
1294
|
declare const darkColors: UiColors;
|
|
1229
1295
|
/**
|
|
@@ -1726,6 +1792,8 @@ interface LayoutStats {
|
|
|
1726
1792
|
measured: number;
|
|
1727
1793
|
/** Nodes whose place ran. */
|
|
1728
1794
|
placed: number;
|
|
1795
|
+
/** Laid-out subtrees that moved without changing size, and were shifted rather than placed again. */
|
|
1796
|
+
shifted: number;
|
|
1729
1797
|
/** Subtrees laid out from a relayout boundary instead of the root. */
|
|
1730
1798
|
relayoutRoots: number;
|
|
1731
1799
|
/** Whether the pass started from the root. */
|
|
@@ -1813,11 +1881,12 @@ declare class UiSharedElements {
|
|
|
1813
1881
|
* But it must not disappear *yet*. A claim happens during
|
|
1814
1882
|
* reconciliation, and the arriving node has no box until the frame
|
|
1815
1883
|
* lays out — so yielding here leaves a window in which neither
|
|
1816
|
-
* element is drawn.
|
|
1817
|
-
*
|
|
1818
|
-
*
|
|
1819
|
-
*
|
|
1820
|
-
*
|
|
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.
|
|
1821
1890
|
*
|
|
1822
1891
|
* So the caller yields the previous holder at the moment it actually
|
|
1823
1892
|
* takes its place. Until then both are on screen, in the same
|
|
@@ -1974,6 +2043,15 @@ declare class DirtyNodeSet {
|
|
|
1974
2043
|
delete(node: UiNode): boolean;
|
|
1975
2044
|
get size(): number;
|
|
1976
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;
|
|
1977
2055
|
/**
|
|
1978
2056
|
* Drains the set, returning the nodes in insertion order.
|
|
1979
2057
|
*/
|
|
@@ -2273,7 +2351,21 @@ declare class UiKeyboardEvent extends UiInputEvent {
|
|
|
2273
2351
|
declare class UiBeforeInputEvent extends UiInputEvent {
|
|
2274
2352
|
readonly inputType: string;
|
|
2275
2353
|
readonly data: string | null;
|
|
2276
|
-
|
|
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);
|
|
2277
2369
|
}
|
|
2278
2370
|
/**
|
|
2279
2371
|
* An editable node's text changed: the new value and the selection
|
|
@@ -2289,7 +2381,11 @@ declare class UiBeforeInputEvent extends UiInputEvent {
|
|
|
2289
2381
|
*/
|
|
2290
2382
|
declare class UiPasteEvent extends UiInputEvent {
|
|
2291
2383
|
readonly text: string;
|
|
2292
|
-
|
|
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);
|
|
2293
2389
|
}
|
|
2294
2390
|
declare class UiTextChangeEvent extends UiInputEvent {
|
|
2295
2391
|
readonly value: string;
|
|
@@ -2648,6 +2744,246 @@ interface ComponentResolver {
|
|
|
2648
2744
|
flushMounts(): void;
|
|
2649
2745
|
}
|
|
2650
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
|
|
2651
2987
|
//#region src/modifiers/UiModifierHost.d.ts
|
|
2652
2988
|
/** Anything a modifier can hand to `own` to have released on detach. */
|
|
2653
2989
|
type UiModifierTeardown = (() => void) | {
|
|
@@ -2771,6 +3107,13 @@ interface UiModifierHost {
|
|
|
2771
3107
|
* A scroll is a superset of what a listener may care about: read
|
|
2772
3108
|
* `flowBox()` inside the listener when what matters is the node's
|
|
2773
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.
|
|
2774
3117
|
*/
|
|
2775
3118
|
onLayout(listener: (box: LayoutBox) => void): void;
|
|
2776
3119
|
/**
|
|
@@ -2790,8 +3133,12 @@ interface UiModifierHost {
|
|
|
2790
3133
|
* at all.
|
|
2791
3134
|
*/
|
|
2792
3135
|
onEnvironment(listener: () => void): void;
|
|
2793
|
-
/**
|
|
2794
|
-
|
|
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;
|
|
2795
3142
|
/** Whether the node currently holds keyboard focus. */
|
|
2796
3143
|
isFocused(): boolean;
|
|
2797
3144
|
/**
|
|
@@ -2948,7 +3295,7 @@ interface UiModifierFocus {
|
|
|
2948
3295
|
isFocused(node: UiNode): boolean;
|
|
2949
3296
|
/** Whether the focus `node` holds should be shown; see `UiFocusManager.focusVisible`. */
|
|
2950
3297
|
isFocusVisible(node: UiNode): boolean;
|
|
2951
|
-
focus(node: UiNode): void;
|
|
3298
|
+
focus(node: UiNode, options?: FocusOptions): void;
|
|
2952
3299
|
onFocusChange(node: UiNode, listener: (focused: boolean) => void): () => void;
|
|
2953
3300
|
}
|
|
2954
3301
|
/** Where a modifier's environment access comes from. */
|
|
@@ -3016,30 +3363,118 @@ declare class UiModifierSet {
|
|
|
3016
3363
|
*/
|
|
3017
3364
|
declare function assertModifierList(node: UiNode, value: unknown): readonly UiModifier[];
|
|
3018
3365
|
//#endregion
|
|
3019
|
-
//#region src/
|
|
3366
|
+
//#region src/editing/UiEditingGroup.d.ts
|
|
3020
3367
|
/**
|
|
3021
|
-
*
|
|
3022
|
-
*
|
|
3368
|
+
* Fields that select as one: the editables inside a container that sets
|
|
3369
|
+
* `editingGroup`.
|
|
3023
3370
|
*
|
|
3024
|
-
*
|
|
3025
|
-
*
|
|
3026
|
-
*
|
|
3027
|
-
*
|
|
3028
|
-
*
|
|
3029
|
-
*
|
|
3030
|
-
*
|
|
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.
|
|
3031
3379
|
*
|
|
3032
|
-
*
|
|
3033
|
-
*
|
|
3034
|
-
*
|
|
3035
|
-
*
|
|
3036
|
-
*
|
|
3037
|
-
*
|
|
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.
|
|
3386
|
+
*
|
|
3387
|
+
* A selection inside one field is that field's, as it always was.
|
|
3038
3388
|
*/
|
|
3039
|
-
interface
|
|
3040
|
-
/**
|
|
3041
|
-
|
|
3042
|
-
/**
|
|
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`. */
|
|
3043
3478
|
readonly changes: Observable<Size>;
|
|
3044
3479
|
}
|
|
3045
3480
|
/**
|
|
@@ -3232,24 +3667,28 @@ declare function propertyValuesEqual<T>(definition: UiPropertyDefinition<T>, a:
|
|
|
3232
3667
|
//#endregion
|
|
3233
3668
|
//#region src/properties/UiBoxShadow.d.ts
|
|
3234
3669
|
/**
|
|
3235
|
-
* Renderer-independent box shadow description
|
|
3670
|
+
* Renderer-independent box shadow description, with CSS `box-shadow`
|
|
3671
|
+
* semantics.
|
|
3236
3672
|
*
|
|
3237
|
-
*
|
|
3238
|
-
*
|
|
3239
|
-
*
|
|
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.
|
|
3240
3679
|
*/
|
|
3241
3680
|
interface UiBoxShadow {
|
|
3242
3681
|
readonly offsetX: number;
|
|
3243
3682
|
readonly offsetY: number;
|
|
3244
3683
|
readonly blurRadius: number;
|
|
3245
3684
|
readonly spreadRadius: number;
|
|
3246
|
-
readonly color:
|
|
3685
|
+
readonly color: UiColorValue;
|
|
3247
3686
|
readonly inset?: boolean;
|
|
3248
3687
|
}
|
|
3249
3688
|
/**
|
|
3250
3689
|
* Creates a box shadow with the supplied parameters.
|
|
3251
3690
|
*/
|
|
3252
|
-
declare function boxShadow(offsetX: number, offsetY: number, blurRadius: number, spreadRadius: number, color:
|
|
3691
|
+
declare function boxShadow(offsetX: number, offsetY: number, blurRadius: number, spreadRadius: number, color: UiColorValue, inset?: boolean): UiBoxShadow;
|
|
3253
3692
|
/**
|
|
3254
3693
|
* Compares two box shadows for equality.
|
|
3255
3694
|
*/
|
|
@@ -3258,6 +3697,34 @@ declare function boxShadowsEqual(a: UiBoxShadow, b: UiBoxShadow): boolean;
|
|
|
3258
3697
|
* Compares two shadow arrays for equality.
|
|
3259
3698
|
*/
|
|
3260
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;
|
|
3261
3728
|
//#endregion
|
|
3262
3729
|
//#region src/layout/UiLength.d.ts
|
|
3263
3730
|
/**
|
|
@@ -3778,6 +4245,18 @@ interface UiTextMetrics {
|
|
|
3778
4245
|
readonly fontVariant?: UiFontVariant;
|
|
3779
4246
|
readonly fontKerning?: UiFontKerning;
|
|
3780
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;
|
|
3781
4260
|
}
|
|
3782
4261
|
/**
|
|
3783
4262
|
* A run that is activated rather than only read.
|
|
@@ -3828,6 +4307,16 @@ interface UiSpannedText {
|
|
|
3828
4307
|
readonly text: string;
|
|
3829
4308
|
readonly spans: readonly UiResolvedTextSpan[];
|
|
3830
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
|
+
*/
|
|
3831
4320
|
declare const defaultTextStyle: UiTextStyle;
|
|
3832
4321
|
/** The text of a span array, with each run's offsets into it. */
|
|
3833
4322
|
declare function flattenTextSpans(spans: readonly UiTextSpan[]): UiSpannedText;
|
|
@@ -3869,7 +4358,21 @@ declare function resolvedSpansOf(node: UiNode): readonly UiResolvedTextSpan[];
|
|
|
3869
4358
|
* plain colour rather than a frame of nonsense, and corrects itself
|
|
3870
4359
|
* as soon as the application catches up.
|
|
3871
4360
|
*/
|
|
3872
|
-
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[];
|
|
3873
4376
|
/** The span covering an offset, or undefined where no run does. */
|
|
3874
4377
|
declare function spanAtOffset(spans: readonly UiResolvedTextSpan[], offset: number): UiResolvedTextSpan | undefined;
|
|
3875
4378
|
/**
|
|
@@ -4123,6 +4626,11 @@ type UiTypographyRole = keyof UiTypography | (keyof UiTypographyExtensions & str
|
|
|
4123
4626
|
* drawing at a default size, which is the quieter of the two failures.
|
|
4124
4627
|
*/
|
|
4125
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
|
+
*/
|
|
4126
4634
|
declare const defaultTypography: UiTypography;
|
|
4127
4635
|
/**
|
|
4128
4636
|
* Compares two typography scales for equality.
|
|
@@ -5202,6 +5710,26 @@ interface CompositionRange {
|
|
|
5202
5710
|
* took. `replaceText` — the host resetting the value from outside —
|
|
5203
5711
|
* drops the history: the text it replaces never existed as far as the
|
|
5204
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.
|
|
5205
5733
|
*/
|
|
5206
5734
|
declare class EditableTextModel {
|
|
5207
5735
|
private textValue;
|
|
@@ -5213,6 +5741,9 @@ declare class EditableTextModel {
|
|
|
5213
5741
|
private redoStack;
|
|
5214
5742
|
private lastEdit;
|
|
5215
5743
|
private lastEditEnd;
|
|
5744
|
+
private hiddenRanges;
|
|
5745
|
+
private hiddenText;
|
|
5746
|
+
private visibleCache;
|
|
5216
5747
|
/** Whether the node holds focus; the caret only shows (and blinks) then. */
|
|
5217
5748
|
focused: boolean;
|
|
5218
5749
|
/**
|
|
@@ -5255,6 +5786,22 @@ declare class EditableTextModel {
|
|
|
5255
5786
|
get composing(): boolean;
|
|
5256
5787
|
get canUndo(): boolean;
|
|
5257
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;
|
|
5258
5805
|
/** Sets the selection; `focus` defaults to `anchor` (a caret). */
|
|
5259
5806
|
select(anchor: number, focus?: number): void;
|
|
5260
5807
|
/** Moves the caret to `offset`, extending the selection from the anchor when asked. */
|
|
@@ -5267,8 +5814,17 @@ declare class EditableTextModel {
|
|
|
5267
5814
|
* vertical movement is the caller's, since it needs geometry.
|
|
5268
5815
|
*/
|
|
5269
5816
|
move(unit: EditUnit, direction: -1 | 1, extend: boolean): void;
|
|
5270
|
-
/** The offset one `unit` away from `from` in `direction
|
|
5817
|
+
/** The offset one `unit` away from `from` in `direction`; see "Hidden text" above. */
|
|
5271
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;
|
|
5272
5828
|
/**
|
|
5273
5829
|
* Replaces the selection with `text` and puts the caret after it.
|
|
5274
5830
|
* Single-grapheme insertions at the caret coalesce into one undo
|
|
@@ -5342,7 +5898,9 @@ declare class EditableTextModel {
|
|
|
5342
5898
|
* What a node is. Closed, so a typo is a build error the way an
|
|
5343
5899
|
* unknown prop already is: the mirror can only emit roles it knows.
|
|
5344
5900
|
*/
|
|
5345
|
-
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' |
|
|
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';
|
|
5346
5904
|
/** How urgently a live region's changes are announced. */
|
|
5347
5905
|
type UiLiveRegion = 'polite' | 'assertive';
|
|
5348
5906
|
declare const UI_ROLES: readonly UiRole[];
|
|
@@ -5355,7 +5913,19 @@ declare function isUiRole(value: unknown): value is UiRole;
|
|
|
5355
5913
|
* two ways to say it would let them disagree. The semantics record
|
|
5356
5914
|
* derives it.
|
|
5357
5915
|
*/
|
|
5358
|
-
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';
|
|
5359
5929
|
declare const UI_SEMANTIC_STATES: readonly UiSemanticState[];
|
|
5360
5930
|
declare function isUiSemanticState(value: unknown): value is UiSemanticState;
|
|
5361
5931
|
/**
|
|
@@ -5761,6 +6331,12 @@ declare const UiProperties: {
|
|
|
5761
6331
|
* label out by default.
|
|
5762
6332
|
*/
|
|
5763
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>;
|
|
5764
6340
|
readonly pointerEvents: UiPropertyDefinition<UiPointerEvents | undefined>;
|
|
5765
6341
|
readonly focusable: UiPropertyDefinition<boolean | undefined>;
|
|
5766
6342
|
readonly tabStop: UiPropertyDefinition<boolean | undefined>;
|
|
@@ -5789,6 +6365,14 @@ declare const UiProperties: {
|
|
|
5789
6365
|
readonly posInSet: UiPropertyDefinition<number | undefined>;
|
|
5790
6366
|
/** How many items the set holds, including the ones not mounted. */
|
|
5791
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>;
|
|
5792
6376
|
/**
|
|
5793
6377
|
* How deep a treeitem sits, 1 for a root. A tree is rendered as a
|
|
5794
6378
|
* flat list of rows — it must be, to be virtualized — so the nesting
|
|
@@ -5824,6 +6408,31 @@ declare const UiProperties: {
|
|
|
5824
6408
|
*/
|
|
5825
6409
|
readonly scrollBehavior: UiPropertyDefinition<"instant" | "smooth" | undefined>;
|
|
5826
6410
|
readonly scrollY: UiPropertyDefinition<number | undefined>;
|
|
6411
|
+
/**
|
|
6412
|
+
* Another node whose scroll offset this scroll container takes, on
|
|
6413
|
+
* the axes `scrollWithAxis` names: a line-number gutter beside an
|
|
6414
|
+
* editable's text, a spreadsheet's row header beside its grid.
|
|
6415
|
+
*
|
|
6416
|
+
* Taken in the same layout pass that settles the other node's
|
|
6417
|
+
* offset, so the two are painted in step on every frame, whatever
|
|
6418
|
+
* scrolled the other one — a wheel, a scrollbar, the caret, a clamp
|
|
6419
|
+
* after text was deleted. Binding `scrollY` to what `scrollPosition`
|
|
6420
|
+
* reports cannot do that: the report arrives after the frame is laid
|
|
6421
|
+
* out, and the follower is a frame behind.
|
|
6422
|
+
*
|
|
6423
|
+
* The follower's own `scrollX`/`scrollY` are ignored on a followed
|
|
6424
|
+
* axis, it shows no scrollbars, and a wheel over it scrolls the node
|
|
6425
|
+
* it follows. The other node may be any scroll container or an
|
|
6426
|
+
* editable, which scrolls its own text; the offset is clamped to the
|
|
6427
|
+
* follower's own range, so give it content as tall as the text.
|
|
6428
|
+
*
|
|
6429
|
+
* The follower may be `overflow: 'hidden'`, which is otherwise never
|
|
6430
|
+
* scrolled: following makes it scrolled, and nothing but the leader
|
|
6431
|
+
* moves it.
|
|
6432
|
+
*/
|
|
6433
|
+
readonly scrollWith: UiPropertyDefinition<UiNode | null | undefined>;
|
|
6434
|
+
/** Which axes `scrollWith` follows: 'both' (default), 'x' or 'y'. */
|
|
6435
|
+
readonly scrollWithAxis: UiPropertyDefinition<"both" | "x" | "y" | undefined>;
|
|
5827
6436
|
/**
|
|
5828
6437
|
* What happens to a wheel delta this node cannot use.
|
|
5829
6438
|
*
|
|
@@ -6028,13 +6637,13 @@ type PaintProps = PropsOf<'backgroundColor' | 'backgroundGradient' | 'borderColo
|
|
|
6028
6637
|
* they cascade to the text below it.
|
|
6029
6638
|
*/
|
|
6030
6639
|
type TypographyProps = PropsOf<'color' | 'fontFamily' | 'fontSize' | 'fontWeight' | 'lineHeight' | 'letterSpacing' | 'textAlign' | 'textDirection' | 'fontStyle' | 'fontStretch' | 'fontVariant' | 'fontKerning' | 'textDecoration'>;
|
|
6031
|
-
type InteractionProps = PropsOf<'cursor' | 'pointerEvents' | 'focusable' | 'tabStop' | 'disabled' | 'hitTestable' | 'visualState' | 'selectable'>;
|
|
6640
|
+
type InteractionProps = PropsOf<'cursor' | 'pointerEvents' | 'focusable' | 'tabStop' | 'disabled' | 'hitTestable' | 'visualState' | 'selectable' | 'editingGroup'>;
|
|
6032
6641
|
/**
|
|
6033
6642
|
* What the element means, for assistive technology. Legal on any
|
|
6034
6643
|
* element; a component sets them on the node that *is* the control,
|
|
6035
6644
|
* not on a wrapper. See `UiSemantics.ts`.
|
|
6036
6645
|
*/
|
|
6037
|
-
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'>;
|
|
6038
6647
|
/** Environment values an element provides to its subtree. */
|
|
6039
6648
|
type EnvironmentProps = PropsOf<'theme' | 'textStyle' | 'contentColor' | 'containerSize' | 'insets'>;
|
|
6040
6649
|
/**
|
|
@@ -6068,7 +6677,7 @@ type CommonProps = IdentityProps & UiEventProps & BoxModelProps & FlexItemProps
|
|
|
6068
6677
|
* layout replaces whatever the container would have done with its
|
|
6069
6678
|
* children, whichever container it is; see `layout/CustomLayout.ts`.
|
|
6070
6679
|
*/
|
|
6071
|
-
type ContainerProps = CommonProps & PropsOf<'overflow' | 'scrollX' | 'scrollY' | 'scrollBehavior' | 'overscrollBehavior' | 'layout'>;
|
|
6680
|
+
type ContainerProps = CommonProps & PropsOf<'overflow' | 'scrollX' | 'scrollY' | 'scrollWith' | 'scrollWithAxis' | 'scrollBehavior' | 'overscrollBehavior' | 'layout'>;
|
|
6072
6681
|
/** Props of a flex container: Row, Column, ScrollView. */
|
|
6073
6682
|
type FlexContainerProps = ContainerProps & PropsOf<'gap' | 'rowGap' | 'columnGap' | 'x' | 'y' | 'flexWrap' | 'alignContent' | 'direction'>;
|
|
6074
6683
|
/**
|
|
@@ -6328,6 +6937,18 @@ declare class UiGraphBuilder {
|
|
|
6328
6937
|
* instance is unchanged and torn down when a property stops
|
|
6329
6938
|
* being reactive.
|
|
6330
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;
|
|
6331
6952
|
private reconcileProps;
|
|
6332
6953
|
/**
|
|
6333
6954
|
* Attaches, updates and detaches the node's modifiers.
|
|
@@ -6653,6 +7274,12 @@ declare class UiGraph {
|
|
|
6653
7274
|
* hold the node and would otherwise pay for an id lookup.
|
|
6654
7275
|
*/
|
|
6655
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;
|
|
6656
7283
|
/**
|
|
6657
7284
|
* Writes a property without consulting the node's transitions.
|
|
6658
7285
|
*
|
|
@@ -7001,7 +7628,9 @@ interface ResponsiveProps extends ColumnProps {
|
|
|
7001
7628
|
* The first build happens before any layout, when the size is zero, so
|
|
7002
7629
|
* `build` must return something sensible for a container whose room is
|
|
7003
7630
|
* not yet known. Zero picks the narrowest arm, which is the right
|
|
7004
|
-
* 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.
|
|
7005
7634
|
*/
|
|
7006
7635
|
declare function Responsive(props: ResponsiveProps, build: (size: Size) => UiChild | readonly UiChild[]): UiElement;
|
|
7007
7636
|
//#endregion
|
|
@@ -7176,6 +7805,12 @@ interface TextRunStyle {
|
|
|
7176
7805
|
interface TextRunSpan extends TextRunStyle {
|
|
7177
7806
|
readonly start: number;
|
|
7178
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;
|
|
7179
7814
|
}
|
|
7180
7815
|
interface TextMeasureRequest {
|
|
7181
7816
|
text: string;
|
|
@@ -7234,7 +7869,7 @@ interface TextLine {
|
|
|
7234
7869
|
width: number;
|
|
7235
7870
|
/**
|
|
7236
7871
|
* The line cut at its runs, present only for a paragraph that has
|
|
7237
|
-
* spans.
|
|
7872
|
+
* spans. A hidden run is not among them.
|
|
7238
7873
|
*
|
|
7239
7874
|
* Measured once, here, where the line's own width is measured. That
|
|
7240
7875
|
* is what keeps a spanned paragraph as cheap to paint as a plain
|
|
@@ -7318,6 +7953,8 @@ interface SpannedRuns {
|
|
|
7318
7953
|
indexAt(offset: number): number;
|
|
7319
7954
|
/** The request an offset is measured with: its run's, or the paragraph's. */
|
|
7320
7955
|
requestAt(offset: number): TextMeasureRequest;
|
|
7956
|
+
/** Whether the character at `offset` is in a hidden run. */
|
|
7957
|
+
hiddenAt(offset: number): boolean;
|
|
7321
7958
|
/** Width of `text.slice(start, end)`, measured run by run. */
|
|
7322
7959
|
width(text: string, start: number, end: number): number;
|
|
7323
7960
|
/**
|
|
@@ -7326,7 +7963,10 @@ interface SpannedRuns {
|
|
|
7326
7963
|
* as.
|
|
7327
7964
|
*/
|
|
7328
7965
|
widthOf(run: string, offset: number): number;
|
|
7329
|
-
/**
|
|
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
|
+
*/
|
|
7330
7970
|
cut(text: string, start: number, end: number, x: number): TextLineRun[];
|
|
7331
7971
|
}
|
|
7332
7972
|
/**
|
|
@@ -7491,7 +8131,12 @@ interface PaintState {
|
|
|
7491
8131
|
borderColor: UiColor | undefined;
|
|
7492
8132
|
borderWidth: number;
|
|
7493
8133
|
borderRadius: UiBorderRadius;
|
|
7494
|
-
|
|
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[];
|
|
7495
8140
|
hasTransform: boolean;
|
|
7496
8141
|
transform: UiTransform;
|
|
7497
8142
|
text: string | undefined;
|
|
@@ -7551,6 +8196,10 @@ interface PaintState {
|
|
|
7551
8196
|
matchColor: UiColor;
|
|
7552
8197
|
caretColor: UiColor;
|
|
7553
8198
|
}
|
|
8199
|
+
/** A shadow ready to paint: a `UiBoxShadow` whose colour is resolved. */
|
|
8200
|
+
interface PaintBoxShadow extends UiBoxShadow {
|
|
8201
|
+
readonly color: UiColor;
|
|
8202
|
+
}
|
|
7554
8203
|
/** A run of a paragraph, ready to paint: metrics, resolved colours, and its link. */
|
|
7555
8204
|
interface PaintTextSpan extends UiTextMetrics {
|
|
7556
8205
|
readonly start: number;
|
|
@@ -7772,6 +8421,15 @@ interface Canvas2DContext {
|
|
|
7772
8421
|
font: string;
|
|
7773
8422
|
textAlign: CanvasTextAlign;
|
|
7774
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;
|
|
7775
8433
|
}
|
|
7776
8434
|
//#endregion
|
|
7777
8435
|
//#region src/rendering/TextRenderer.d.ts
|
|
@@ -7966,13 +8624,27 @@ declare class EditableLayout {
|
|
|
7966
8624
|
readonly rtl: boolean;
|
|
7967
8625
|
constructor(model: EditableTextModel, box: LayoutBox, state: PaintState, measurer: TextMeasurer);
|
|
7968
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
|
+
*/
|
|
7969
8635
|
offsetAt(x: number, y: number): number;
|
|
7970
8636
|
verticalMove(offset: number, direction: -1 | 1, goalX?: number): {
|
|
7971
8637
|
offset: number;
|
|
7972
8638
|
x: number;
|
|
7973
8639
|
} | null;
|
|
7974
|
-
/**
|
|
7975
|
-
|
|
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[];
|
|
7976
8648
|
/** Boxes under the text the IME is composing, for its underline. */
|
|
7977
8649
|
compositionBoxes(): LayoutBox[];
|
|
7978
8650
|
}
|
|
@@ -8244,6 +8916,23 @@ declare const SCROLLBAR_MIN_THUMB = 24;
|
|
|
8244
8916
|
/** Distance from the end edge within which the pointer reveals the bar. */
|
|
8245
8917
|
declare const SCROLLBAR_HOVER_ZONE = 16;
|
|
8246
8918
|
type ScrollbarAxis = 'x' | 'y';
|
|
8919
|
+
/**
|
|
8920
|
+
* The node a `scrollWith` container follows, or null for one that
|
|
8921
|
+
* scrolls on its own. A follower has no scrollbar of its own, and what
|
|
8922
|
+
* would scroll it scrolls this instead.
|
|
8923
|
+
*/
|
|
8924
|
+
declare function scrollLeaderOf(node: UiNode): UiNode | null;
|
|
8925
|
+
/**
|
|
8926
|
+
* The furthest a record's content can be scrolled along an axis.
|
|
8927
|
+
*
|
|
8928
|
+
* The one answer the layout engine's clamp, the scrollbars and the
|
|
8929
|
+
* scroll sinks all read, so a wheel stops exactly where the caret
|
|
8930
|
+
* would. A field may go one caret width past its text, so that a
|
|
8931
|
+
* caret at the very end is inside the box and not on the clipped
|
|
8932
|
+
* edge; a field wide enough for its text gets no allowance, or the
|
|
8933
|
+
* line would shift by a pixel the moment the caret reached the end.
|
|
8934
|
+
*/
|
|
8935
|
+
declare function scrollRange(rec: LayoutRecord, axis: ScrollbarAxis): number;
|
|
8247
8936
|
/**
|
|
8248
8937
|
* One scrollbar's geometry, in the container's record coordinates
|
|
8249
8938
|
* (pre-scroll, like the record box): the thumb rectangle and the
|
|
@@ -8730,352 +9419,146 @@ declare class UiFindController {
|
|
|
8730
9419
|
handleKey(key: string, modifiers: UiKeyModifiers): boolean;
|
|
8731
9420
|
/** The query the matches are for; empty when nothing is being searched. */
|
|
8732
9421
|
get query(): string;
|
|
8733
|
-
/** Every match, in document order. */
|
|
8734
|
-
get matches(): readonly FindMatch[];
|
|
8735
|
-
get matchCount(): number;
|
|
8736
|
-
/** The index of the active match, or -1 when there is none. */
|
|
8737
|
-
get activeIndex(): number;
|
|
8738
|
-
/**
|
|
8739
|
-
* Runs a query over the app's text and activates the first match.
|
|
8740
|
-
* Returns how many there are; an empty query clears everything.
|
|
8741
|
-
*/
|
|
8742
|
-
search(query: string, options?: FindOptions): number;
|
|
8743
|
-
/**
|
|
8744
|
-
* Re-runs the current query. The tree changed under it — content was
|
|
8745
|
-
* edited, a list scrolled new rows in — so the matches did too.
|
|
8746
|
-
*/
|
|
8747
|
-
refresh(): void;
|
|
8748
|
-
/** Moves to the next match, wrapping around. */
|
|
8749
|
-
next(): boolean;
|
|
8750
|
-
/** Moves to the previous match, wrapping around. */
|
|
8751
|
-
previous(): boolean;
|
|
8752
|
-
/** Drops the query, the matches and their highlights. */
|
|
8753
|
-
clear(): void;
|
|
8754
|
-
/**
|
|
8755
|
-
* A node left the tree. Its matches went with it, so the search is
|
|
8756
|
-
* re-run rather than left pointing at something that is gone.
|
|
8757
|
-
*/
|
|
8758
|
-
handleNodeRemoved(node: UiNode): void;
|
|
8759
|
-
private notify;
|
|
8760
|
-
private step;
|
|
8761
|
-
/**
|
|
8762
|
-
* The matches of a query, dropped where the text they are in is not
|
|
8763
|
-
* drawn: a paragraph capped by `maxLines` shows part of itself, and a
|
|
8764
|
-
* match the user cannot see must not be counted or stepped through.
|
|
8765
|
-
* Geometry is only measured for the nodes that matched at all.
|
|
8766
|
-
*/
|
|
8767
|
-
private collect;
|
|
8768
|
-
/** Writes the match ranges onto the nodes that hold them. */
|
|
8769
|
-
private highlight;
|
|
8770
|
-
/** Selects the match at `index` and scrolls it into view. */
|
|
8771
|
-
private activate;
|
|
8772
|
-
private revealMatch;
|
|
8773
|
-
private geometryEndOf;
|
|
8774
|
-
/** The node's text laid out in its own coordinates; see UiSelectionController. */
|
|
8775
|
-
private geometryOf;
|
|
8776
|
-
}
|
|
8777
|
-
//#endregion
|
|
8778
|
-
//#region src/graph/UiPropertyOverrides.d.ts
|
|
8779
|
-
/**
|
|
8780
|
-
* The cascade a modifier writes into.
|
|
8781
|
-
*
|
|
8782
|
-
* effective(property) = the last override in modifier order,
|
|
8783
|
-
* else what the element declared
|
|
8784
|
-
*
|
|
8785
|
-
* Keeping the element's own value rather than replacing it is what
|
|
8786
|
-
* makes a modifier safe to detach: dragging can write `transform` and
|
|
8787
|
-
* `opacity` for as long as the drag lasts, and dropping restores
|
|
8788
|
-
* exactly what the element asked for — including "nothing", which
|
|
8789
|
-
* restores inheritance from the environment rather than a default.
|
|
8790
|
-
*
|
|
8791
|
-
* Everything here funnels into `graph.applyResolvedProperty`, so
|
|
8792
|
-
* layout, paint, input and the environment read what they always read.
|
|
8793
|
-
*/
|
|
8794
|
-
/**
|
|
8795
|
-
* A write from the element: a plain prop, or an emission from a bound
|
|
8796
|
-
* Observable. It updates the declared value; whether it reaches the
|
|
8797
|
-
* node depends on whether a modifier is currently overriding it.
|
|
8798
|
-
*/
|
|
8799
|
-
declare function writeDeclaredProperty(graph: UiGraph, node: UiNode, property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
|
|
8800
|
-
/**
|
|
8801
|
-
* A write from a modifier. Replaces that modifier's own entry, or adds
|
|
8802
|
-
* one in its position in the list.
|
|
8803
|
-
*/
|
|
8804
|
-
declare function writeOverrideProperty(graph: UiGraph, node: UiNode, property: NodeProperty, override: Omit<UiPropertyOverride, 'value'> & {
|
|
8805
|
-
value: unknown;
|
|
8806
|
-
}, flags: DirtyFlags): boolean;
|
|
8807
|
-
/** Removes one modifier's write, restoring whatever was under it. */
|
|
8808
|
-
declare function clearOverrideProperty(graph: UiGraph, node: UiNode, property: NodeProperty, source: symbol, flags: DirtyFlags): boolean;
|
|
8809
|
-
/** The names of the modifiers overriding a property, in order. */
|
|
8810
|
-
declare function overrideSources(node: UiNode, property: NodeProperty): string[];
|
|
8811
|
-
/** Test hook: forgets which conflicts have been reported. */
|
|
8812
|
-
declare function resetOverrideWarnings(): void;
|
|
8813
|
-
//#endregion
|
|
8814
|
-
//#region src/graph/UiPropertyTransitions.d.ts
|
|
8815
|
-
/**
|
|
8816
|
-
* The transitions declared on one node, and the animations they are
|
|
8817
|
-
* currently running.
|
|
8818
|
-
*
|
|
8819
|
-
* This is the same shape as the override cascade and for the same
|
|
8820
|
-
* reason that lives on the node: **both
|
|
8821
|
-
* the builder's static writes and a binding's emissions funnel through
|
|
8822
|
-
* `updateNodeProperty`**, so interposing there is the only place that
|
|
8823
|
-
* catches both. `node.transitions` is null until an element declares
|
|
8824
|
-
* one, so the cost to a tree without transitions is the second field
|
|
8825
|
-
* read on the write path.
|
|
8826
|
-
*
|
|
8827
|
-
* What it interposes is a write, not a binding. The Observable a
|
|
8828
|
-
* component wrote is still bound by the graph and still emits into the
|
|
8829
|
-
* same property; what changes is that the emission becomes a target
|
|
8830
|
-
* rather than a value. So nothing about component identity, binding
|
|
8831
|
-
* teardown or `getBindingForProperty` moves, and a `transition` can be
|
|
8832
|
-
* added to an element without touching anything else about it.
|
|
8833
|
-
*/
|
|
8834
|
-
declare class NodeTransitions implements UiNodeTransitions {
|
|
8835
|
-
private readonly node;
|
|
8836
|
-
private readonly graph;
|
|
8837
|
-
private readonly driver;
|
|
8838
|
-
private specs;
|
|
8839
|
-
private readonly cells;
|
|
8840
|
-
private readonly targets;
|
|
8841
|
-
constructor(node: UiNode, graph: UiGraph, driver: AnimationDriver);
|
|
8842
|
-
/** Replaces what the element declares; a property dropped from the list stops animating. */
|
|
8843
|
-
setSpecs(specs: ReadonlyMap<NodeProperty, UiTransitionSpec>): void;
|
|
8844
|
-
get size(): number;
|
|
8845
|
-
/**
|
|
8846
|
-
* Takes over a write, or declines it.
|
|
8847
|
-
*
|
|
8848
|
-
* Declines when the property has no transition, when the node has no
|
|
8849
|
-
* value yet — a node's *first* value is not a change and animating
|
|
8850
|
-
* from nothing would mean animating from a default nobody asked for
|
|
8851
|
-
* — and when the two values cannot be blended (`interpolatorFor`
|
|
8852
|
-
* says which, and why).
|
|
8853
|
-
*/
|
|
8854
|
-
write(property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
|
|
8855
|
-
/** Cancels everything, for a node leaving the tree or dropping the prop. */
|
|
8856
|
-
release(): void;
|
|
8857
|
-
private stopProperty;
|
|
8858
|
-
/**
|
|
8859
|
-
* The cell one property animates through, kept for the life of the
|
|
8860
|
-
* node: the driver keys its running set by cell identity, so a fresh
|
|
8861
|
-
* adapter per write would leave the previous animation running.
|
|
8862
|
-
*
|
|
8863
|
-
* Writing goes through `updateNodePropertyNow`, which is the path a
|
|
8864
|
-
* plain write takes minus this class — so a modifier's override still
|
|
8865
|
-
* sits on top of an animated value, exactly as it sits on top of a
|
|
8866
|
-
* bound one.
|
|
8867
|
-
*/
|
|
8868
|
-
private cellFor;
|
|
8869
|
-
private startAnimation;
|
|
8870
|
-
}
|
|
8871
|
-
/** Test hook: forgets which properties have been reported. */
|
|
8872
|
-
declare function resetTransitionWarnings(): void;
|
|
8873
|
-
//#endregion
|
|
8874
|
-
//#region src/input/UiFocusManager.d.ts
|
|
8875
|
-
/**
|
|
8876
|
-
* One entry on the focus scope stack.
|
|
8877
|
-
*
|
|
8878
|
-
* `restore` is what held focus when the scope was pushed, so popping
|
|
8879
|
-
* can hand focus back to the control that opened the dialog. Scopes
|
|
8880
|
-
* nest: a confirmation dialog over a dialog pushes a second one, and
|
|
8881
|
-
* each pop restores its own opener.
|
|
8882
|
-
*/
|
|
8883
|
-
/**
|
|
8884
|
-
* What moved focus, which decides whether the focused node is scrolled
|
|
8885
|
-
* into view.
|
|
8886
|
-
*
|
|
8887
|
-
* A browser draws the same distinction and it is the reason it exists:
|
|
8888
|
-
* keyboard focus must reveal its target, because a control the person
|
|
8889
|
-
* cannot see is a control they cannot use, while a *click* has already
|
|
8890
|
-
* shown them where they are — the thing they pressed is under their
|
|
8891
|
-
* cursor. Scrolling after a click moves the page out from under a
|
|
8892
|
-
* pointer that is still there, and on a tall element that is a jump of
|
|
8893
|
-
* most of the screen.
|
|
8894
|
-
*/
|
|
8895
|
-
type FocusSource = 'pointer' | 'keyboard' | 'program';
|
|
8896
|
-
/**
|
|
8897
|
-
* How the person last drove the app, as far as focus can tell: the
|
|
8898
|
-
* pointer or the keyboard. This is what decides whether focus is
|
|
8899
|
-
* *visible*, the way `:focus-visible` does in a browser: a ring that
|
|
8900
|
-
* appeared on every mouse click would mark a control nobody is about to
|
|
8901
|
-
* drive with the keyboard, so the ring waits until the keyboard is used.
|
|
8902
|
-
*/
|
|
8903
|
-
type FocusModality = 'pointer' | 'keyboard';
|
|
8904
|
-
/**
|
|
8905
|
-
* Logical focus within the UI tree.
|
|
8906
|
-
*
|
|
8907
|
-
* At most one node holds focus at a time. Focus transitions are
|
|
8908
|
-
* target-only: the node losing focus receives Blur (with the new
|
|
8909
|
-
* node as `relatedNode`), then the node gaining focus receives Focus
|
|
8910
|
-
* (with the old node as `relatedNode`).
|
|
8911
|
-
*
|
|
8912
|
-
* Tab / Shift+Tab navigation walks the focusable nodes in document
|
|
8913
|
-
* (depth-first) order and wraps around. A node participates when
|
|
8914
|
-
* `isNodeFocusable` says so: focusable by type (Button), explicitly
|
|
8915
|
-
* opted in via `focusable: true`, and never when inert.
|
|
8916
|
-
*
|
|
8917
|
-
* Focus-on-press is applied through `focusOnPress`, which the pointer
|
|
8918
|
-
* pipeline calls after a successful pointerdown (skipped when the
|
|
8919
|
-
* down was defaultPrevented).
|
|
8920
|
-
*
|
|
8921
|
-
* **Scopes.** `pushScope(node)` confines focus to a subtree: traversal
|
|
8922
|
-
* collects only that subtree's focusables, so Tab wraps inside it, and
|
|
8923
|
-
* `focus()` refuses a node outside it — which is what makes a modal
|
|
8924
|
-
* dialog modal for the keyboard. `popScope()` restores focus to
|
|
8925
|
-
* whatever held it when the scope was pushed. Components reach both
|
|
8926
|
-
* through `FocusService`, never directly.
|
|
8927
|
-
*/
|
|
8928
|
-
declare class UiFocusManager {
|
|
8929
|
-
private readonly dispatcher;
|
|
8930
|
-
private root;
|
|
8931
|
-
private focused;
|
|
8932
|
-
/**
|
|
8933
|
-
* Keyboard until told otherwise, so focus placed before any input
|
|
8934
|
-
* (an `autoFocus`, a dialog's first field) is visible, as a browser
|
|
8935
|
-
* would show it.
|
|
8936
|
-
*/
|
|
8937
|
-
private modality;
|
|
8938
|
-
private readonly listeners;
|
|
8939
|
-
private readonly scopeListeners;
|
|
8940
|
-
private readonly scopes;
|
|
8941
|
-
constructor(root: UiNode, dispatcher: UiInputDispatcher);
|
|
8942
|
-
/** The root used for focus-order traversal. Clears any active scope. */
|
|
8943
|
-
setRoot(root: UiNode): void;
|
|
8944
|
-
/** The node that currently holds logical focus, or null. */
|
|
8945
|
-
get focusedNode(): UiNode | null;
|
|
8946
|
-
hasFocus(): boolean;
|
|
8947
|
-
/** How the person last drove the app. */
|
|
8948
|
-
get focusModality(): FocusModality;
|
|
8949
|
-
/**
|
|
8950
|
-
* Whether the focus held should be shown. True while focus was
|
|
8951
|
-
* reached by the keyboard, or by code with no pointer since; false
|
|
8952
|
-
* after a pointer press, until the next key.
|
|
8953
|
-
*/
|
|
8954
|
-
get focusVisible(): boolean;
|
|
8955
|
-
/**
|
|
8956
|
-
* Records an input the person made. A change of modality while a node
|
|
8957
|
-
* holds focus is reported to the focus listeners as a change on that
|
|
8958
|
-
* node, so a ring can appear on a mouse-focused control the moment an
|
|
8959
|
-
* arrow key is pressed, and disappear again on the next press.
|
|
8960
|
-
*/
|
|
8961
|
-
noteInput(modality: FocusModality): void;
|
|
8962
|
-
/**
|
|
8963
|
-
* The subtree focus is currently confined to: the innermost scope,
|
|
8964
|
-
* or the whole tree when none is active.
|
|
8965
|
-
*/
|
|
8966
|
-
get scopeRoot(): UiNode;
|
|
8967
|
-
/** Whether focus is confined to a subtree. */
|
|
8968
|
-
get trapped(): boolean;
|
|
8969
|
-
/**
|
|
8970
|
-
* Moves focus to the node. Returns false when the node cannot be
|
|
8971
|
-
* focused (inert, non-focusable, outside the active scope); true
|
|
8972
|
-
* otherwise, including when the node already held focus (a no-op
|
|
8973
|
-
* that emits nothing).
|
|
8974
|
-
*/
|
|
8975
|
-
focus(node: UiNode, source?: FocusSource): boolean;
|
|
8976
|
-
/**
|
|
8977
|
-
* Called after focus moves or clears, with the new focused node. The
|
|
8978
|
-
* runtime uses it to scroll the focused node into view.
|
|
8979
|
-
*/
|
|
8980
|
-
onFocusChange(listener: (node: UiNode | null, source: FocusSource) => void): () => void;
|
|
8981
|
-
/** Called after a scope is pushed or popped. */
|
|
8982
|
-
onScopeChange(listener: () => void): () => void;
|
|
8983
|
-
private notify;
|
|
8984
|
-
private notifyScope;
|
|
8985
|
-
/** Drops focus without moving it anywhere. */
|
|
8986
|
-
blur(): void;
|
|
8987
|
-
/**
|
|
8988
|
-
* Focus-on-press hook: focuses the nearest focusable node at or above
|
|
8989
|
-
* the one that was pressed.
|
|
8990
|
-
*
|
|
8991
|
-
* The walk upward is what the DOM does, and what a container that is
|
|
8992
|
-
* one tab stop needs: pressing a tab hits the Text inside it, a table
|
|
8993
|
-
* cell hits a Box three levels below the table, and a component whose
|
|
8994
|
-
* arrows move a selection is keyboard-dead after a mouse press if the
|
|
8995
|
-
* press left focus where it was. Found in a browser, on `Tabs` —
|
|
8996
|
-
* clicking a tab selected it and the arrows then did nothing.
|
|
8997
|
-
*
|
|
8998
|
-
* Nothing focusable above the press leaves focus untouched, as before:
|
|
8999
|
-
* pressing the page background is not a request to blur.
|
|
9000
|
-
*/
|
|
9001
|
-
focusOnPress(node: UiNode): void;
|
|
9002
|
-
/** Moves focus to the next focusable node, wrapping to the first. */
|
|
9003
|
-
focusNext(): boolean;
|
|
9004
|
-
/** Moves focus to the previous focusable node, wrapping to the last. */
|
|
9005
|
-
focusPrevious(): boolean;
|
|
9006
|
-
/**
|
|
9007
|
-
* Confines focus to `root` until the matching `popScope`.
|
|
9008
|
-
*
|
|
9009
|
-
* Focus that is outside the new scope moves to its first focusable,
|
|
9010
|
-
* so the very next Tab stays inside; a scope with nothing focusable
|
|
9011
|
-
* in it drops focus rather than leaving it behind the dialog.
|
|
9012
|
-
*/
|
|
9013
|
-
pushScope(root: UiNode): void;
|
|
9014
|
-
/**
|
|
9015
|
-
* Moves focus into the innermost scope when it is outside it, and
|
|
9016
|
-
* drops it when the scope has nothing to focus.
|
|
9017
|
-
*
|
|
9018
|
-
* A scope is usually taken from a `ref`, which fires before the
|
|
9019
|
-
* node's children are reconciled — so at that moment a dialog is an
|
|
9020
|
-
* empty box and there is nothing in it to focus. The runtime calls
|
|
9021
|
-
* this again once the frame's tree is built, which is when a dialog
|
|
9022
|
-
* gets its caret. Idempotent: with focus already inside the scope,
|
|
9023
|
-
* or no scope at all, it does nothing.
|
|
9024
|
-
*
|
|
9025
|
-
* **The scope root is the fallback, and it is the whole reason
|
|
9026
|
-
* `tabStop` exists.** A scope with no tab stop inside it used to
|
|
9027
|
-
* blur, which hands the keyboard to nothing: a `Dialog` whose body
|
|
9028
|
-
* is a sentence and a button could not be dismissed with Escape,
|
|
9029
|
-
* because Escape had nowhere to be delivered. Falling back to the
|
|
9030
|
-
* root fixes that only if the root can hold focus without becoming a
|
|
9031
|
-
* stop of its own, or every dialog grows a tab stop that announces
|
|
9032
|
-
* nothing. `focusable: true, tabStop: false` on the body is exactly
|
|
9033
|
-
* that pair, and the fallback is what makes it worth setting.
|
|
9034
|
-
*
|
|
9035
|
-
* Blurring is still what happens when the root cannot hold focus
|
|
9036
|
-
* either, because a scope that has genuinely nothing to focus is
|
|
9037
|
-
* better admitted than faked.
|
|
9422
|
+
/** Every match, in document order. */
|
|
9423
|
+
get matches(): readonly FindMatch[];
|
|
9424
|
+
get matchCount(): number;
|
|
9425
|
+
/** The index of the active match, or -1 when there is none. */
|
|
9426
|
+
get activeIndex(): number;
|
|
9427
|
+
/**
|
|
9428
|
+
* Runs a query over the app's text and activates the first match.
|
|
9429
|
+
* Returns how many there are; an empty query clears everything.
|
|
9038
9430
|
*/
|
|
9039
|
-
|
|
9431
|
+
search(query: string, options?: FindOptions): number;
|
|
9040
9432
|
/**
|
|
9041
|
-
*
|
|
9042
|
-
*
|
|
9043
|
-
* and still focusable. Otherwise focus is dropped rather than left
|
|
9044
|
-
* on a node the scope was hiding.
|
|
9433
|
+
* Re-runs the current query. The tree changed under it — content was
|
|
9434
|
+
* edited, a list scrolled new rows in — so the matches did too.
|
|
9045
9435
|
*/
|
|
9046
|
-
|
|
9436
|
+
refresh(): void;
|
|
9437
|
+
/** Moves to the next match, wrapping around. */
|
|
9438
|
+
next(): boolean;
|
|
9439
|
+
/** Moves to the previous match, wrapping around. */
|
|
9440
|
+
previous(): boolean;
|
|
9441
|
+
/** Drops the query, the matches and their highlights. */
|
|
9442
|
+
clear(): void;
|
|
9047
9443
|
/**
|
|
9048
|
-
*
|
|
9049
|
-
*
|
|
9050
|
-
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
|
|
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.
|
|
9446
|
+
*/
|
|
9447
|
+
handleNodeRemoved(node: UiNode): void;
|
|
9448
|
+
private notify;
|
|
9449
|
+
private step;
|
|
9450
|
+
/**
|
|
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.
|
|
9455
|
+
*/
|
|
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;
|
|
9534
|
+
/**
|
|
9535
|
+
* Takes over a write, or declines it.
|
|
9054
9536
|
*
|
|
9055
|
-
*
|
|
9056
|
-
*
|
|
9057
|
-
*
|
|
9058
|
-
*
|
|
9059
|
-
*
|
|
9060
|
-
* 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).
|
|
9061
9542
|
*/
|
|
9062
|
-
|
|
9063
|
-
|
|
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;
|
|
9064
9547
|
/**
|
|
9065
|
-
* The
|
|
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.
|
|
9066
9551
|
*
|
|
9067
|
-
*
|
|
9068
|
-
*
|
|
9069
|
-
*
|
|
9070
|
-
*
|
|
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.
|
|
9071
9556
|
*/
|
|
9072
|
-
private
|
|
9073
|
-
|
|
9074
|
-
private withinScope;
|
|
9075
|
-
/** Whether the node is still connected to the traversal root. */
|
|
9076
|
-
private isAttached;
|
|
9077
|
-
private isWithin;
|
|
9557
|
+
private cellFor;
|
|
9558
|
+
private startAnimation;
|
|
9078
9559
|
}
|
|
9560
|
+
/** Test hook: forgets which properties have been reported. */
|
|
9561
|
+
declare function resetTransitionWarnings(): void;
|
|
9079
9562
|
//#endregion
|
|
9080
9563
|
//#region src/input/FocusNotifier.d.ts
|
|
9081
9564
|
/**
|
|
@@ -9519,6 +10002,8 @@ declare class UiWheelController {
|
|
|
9519
10002
|
* still constructs; without it such a root is read as the default.
|
|
9520
10003
|
*/
|
|
9521
10004
|
private readonly rootNode;
|
|
10005
|
+
/** The clock the precise-device memory below reads. Injectable for specs. */
|
|
10006
|
+
private readonly now;
|
|
9522
10007
|
constructor(hitTester: HitTester, dispatcher: UiInputDispatcher, scrollSink: ScrollSink,
|
|
9523
10008
|
/**
|
|
9524
10009
|
* The tree's root, when the host knows it.
|
|
@@ -9528,7 +10013,27 @@ declare class UiWheelController {
|
|
|
9528
10013
|
* container to walk up from. Optional so every existing caller
|
|
9529
10014
|
* still constructs; without it such a root is read as the default.
|
|
9530
10015
|
*/
|
|
9531
|
-
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;
|
|
9532
10037
|
/**
|
|
9533
10038
|
* The node the last wheel landed on, or null before any.
|
|
9534
10039
|
*
|
|
@@ -9540,7 +10045,12 @@ declare class UiWheelController {
|
|
|
9540
10045
|
* wheel of a burst land correctly even though the first could not.
|
|
9541
10046
|
*/
|
|
9542
10047
|
lastWheelTarget: UiNode | null;
|
|
9543
|
-
wheel(x: number, y: number, deltaX: number, deltaY: number, modifiers?: UiKeyModifiers, deltaMode?: UiWheelDeltaMode, wheelDeltaY?: number
|
|
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;
|
|
9544
10054
|
/**
|
|
9545
10055
|
* Whether a wheel at this point would move anything, without moving
|
|
9546
10056
|
* it.
|
|
@@ -9603,6 +10113,39 @@ declare class UiWheelController {
|
|
|
9603
10113
|
*/
|
|
9604
10114
|
private appContainsOverscroll;
|
|
9605
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;
|
|
9606
10149
|
/**
|
|
9607
10150
|
* A wheel delta in whatever unit it arrived in, as pixels.
|
|
9608
10151
|
*
|
|
@@ -9616,6 +10159,13 @@ declare class UiWheelController {
|
|
|
9616
10159
|
}
|
|
9617
10160
|
/** A ScrollView, or any node with overflow 'scroll' or 'auto'. */
|
|
9618
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
|
+
}
|
|
9619
10169
|
//#endregion
|
|
9620
10170
|
//#region src/input/UiPointerController.d.ts
|
|
9621
10171
|
interface PointerControllerOptions {
|
|
@@ -9671,7 +10221,12 @@ interface PointerControllerOptions {
|
|
|
9671
10221
|
*/
|
|
9672
10222
|
editing?: {
|
|
9673
10223
|
isEditable(node: UiNode): boolean;
|
|
9674
|
-
|
|
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;
|
|
9675
10230
|
pointerMove(node: UiNode, x: number, y: number): void;
|
|
9676
10231
|
pointerUp(): void;
|
|
9677
10232
|
};
|
|
@@ -9748,6 +10303,8 @@ interface PointerControllerOptions {
|
|
|
9748
10303
|
declare class UiPointerController {
|
|
9749
10304
|
private readonly hitTester;
|
|
9750
10305
|
private readonly dispatcher;
|
|
10306
|
+
/** Whether a node answers a press itself: a click or pointer listener of its own. */
|
|
10307
|
+
private handlesPress;
|
|
9751
10308
|
private readonly slop;
|
|
9752
10309
|
private readonly touchSlop;
|
|
9753
10310
|
private readonly gestures;
|
|
@@ -10056,6 +10613,12 @@ interface ShortcutRegistryOptions {
|
|
|
10056
10613
|
* Without that rule an application with a `n` for "new note" becomes an
|
|
10057
10614
|
* application you cannot type the letter n into, which is the failure
|
|
10058
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.
|
|
10059
10622
|
*/
|
|
10060
10623
|
declare class UiShortcutRegistry {
|
|
10061
10624
|
private readonly bindings;
|
|
@@ -10092,16 +10655,21 @@ declare class UiShortcutRegistry {
|
|
|
10092
10655
|
* act on a key that has already been spent.
|
|
10093
10656
|
*/
|
|
10094
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;
|
|
10095
10661
|
/** Forgets a half-typed chord, for a route change or a lost focus. */
|
|
10096
10662
|
reset(): void;
|
|
10097
10663
|
/**
|
|
10098
10664
|
* Whether a binding would fire for a key going to `focused`.
|
|
10099
10665
|
*
|
|
10100
|
-
*
|
|
10101
|
-
* focused node, its own `when` says no,
|
|
10102
|
-
* modifier at all
|
|
10103
|
-
*
|
|
10104
|
-
*
|
|
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.
|
|
10105
10673
|
*/
|
|
10106
10674
|
private isLive;
|
|
10107
10675
|
}
|
|
@@ -10114,14 +10682,13 @@ declare class UiShortcutRegistry {
|
|
|
10114
10682
|
*/
|
|
10115
10683
|
declare function parseShortcut(keys: string): readonly UiShortcutStep[];
|
|
10116
10684
|
/**
|
|
10117
|
-
* The shortcut as a palette should print it
|
|
10118
|
-
*
|
|
10119
|
-
* `
|
|
10120
|
-
*
|
|
10121
|
-
*
|
|
10122
|
-
* 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).
|
|
10123
10690
|
*/
|
|
10124
|
-
declare function formatShortcut(steps: readonly UiShortcutStep[]): string;
|
|
10691
|
+
declare function formatShortcut(steps: readonly UiShortcutStep[], platform?: EditingPlatform): string;
|
|
10125
10692
|
//#endregion
|
|
10126
10693
|
//#region src/input/UiDragSession.d.ts
|
|
10127
10694
|
/**
|
|
@@ -10177,6 +10744,17 @@ interface UiDropZone {
|
|
|
10177
10744
|
leave(): void;
|
|
10178
10745
|
/** The drag was released over the zone. What it did, for the source. */
|
|
10179
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;
|
|
10180
10758
|
}
|
|
10181
10759
|
/** The result a completed drag reports back to whatever started it. */
|
|
10182
10760
|
interface UiDragResult {
|
|
@@ -10264,6 +10842,8 @@ declare class UiDragSession {
|
|
|
10264
10842
|
private readonly zones;
|
|
10265
10843
|
private current;
|
|
10266
10844
|
private inside;
|
|
10845
|
+
/** Every zone the point is in that would take the payload, winner or not. */
|
|
10846
|
+
private hovering;
|
|
10267
10847
|
/** Registers a drop target. The returned function unregisters it. */
|
|
10268
10848
|
addZone(zone: UiDropZone): () => void;
|
|
10269
10849
|
/** The drag in flight, or null when nothing is being carried. */
|
|
@@ -10288,6 +10868,8 @@ declare class UiDragSession {
|
|
|
10288
10868
|
end(): UiDragResult | null;
|
|
10289
10869
|
/** Abandons the drag: the zone under it is told, and nothing is dropped. */
|
|
10290
10870
|
cancel(): void;
|
|
10871
|
+
/** Tells every zone the drag was hovering over that it no longer is. */
|
|
10872
|
+
private unhover;
|
|
10291
10873
|
/**
|
|
10292
10874
|
* Turns a shell's file-drop message into an ordinary drag.
|
|
10293
10875
|
*
|
|
@@ -10473,6 +11055,12 @@ interface EditingState {
|
|
|
10473
11055
|
readonly caret: LayoutBox;
|
|
10474
11056
|
readonly multiline: boolean;
|
|
10475
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;
|
|
10476
11064
|
}
|
|
10477
11065
|
interface EditingControllerOptions {
|
|
10478
11066
|
/** Keyboard conventions; detected from the user agent by default. */
|
|
@@ -10511,6 +11099,35 @@ declare class UiEditingController {
|
|
|
10511
11099
|
private dragging;
|
|
10512
11100
|
private lastPress;
|
|
10513
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;
|
|
10514
11131
|
constructor(host: EditingHost, dispatcher: UiInputDispatcher, focus: UiFocusManager, options?: EditingControllerOptions);
|
|
10515
11132
|
/** The editable that holds focus, or null. */
|
|
10516
11133
|
get focused(): UiNode | null;
|
|
@@ -10525,6 +11142,11 @@ declare class UiEditingController {
|
|
|
10525
11142
|
handleKey(node: UiNode, key: string, modifiers: UiKeyModifiers, textFromKeys?: boolean): boolean;
|
|
10526
11143
|
private execute;
|
|
10527
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;
|
|
10528
11150
|
/**
|
|
10529
11151
|
* A `beforeinput` from the shell's editing proxy, in the DOM's
|
|
10530
11152
|
* vocabulary. Returns true when it was applied to the focused
|
|
@@ -10556,7 +11178,7 @@ declare class UiEditingController {
|
|
|
10556
11178
|
* text means something to it that it means to nothing else, and
|
|
10557
11179
|
* before this there was no way for it to hear about one at all.
|
|
10558
11180
|
*/
|
|
10559
|
-
paste(text: string): boolean;
|
|
11181
|
+
paste(text: string, html?: string | null): boolean;
|
|
10560
11182
|
private offerPaste;
|
|
10561
11183
|
private insert;
|
|
10562
11184
|
compositionStart(): void;
|
|
@@ -10570,7 +11192,29 @@ declare class UiEditingController {
|
|
|
10570
11192
|
* selects the word, a third the line. Dragging afterwards extends the
|
|
10571
11193
|
* selection from the anchor.
|
|
10572
11194
|
*/
|
|
10573
|
-
|
|
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;
|
|
10574
11218
|
pointerMove(node: UiNode, x: number, y: number): void;
|
|
10575
11219
|
pointerUp(): void;
|
|
10576
11220
|
/** The focused editable's state for the shell to mirror, or null. */
|
|
@@ -10609,6 +11253,49 @@ declare class UiEditingController {
|
|
|
10609
11253
|
*/
|
|
10610
11254
|
private notifySelection;
|
|
10611
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;
|
|
10612
11299
|
/**
|
|
10613
11300
|
* Asks the host to scroll the caret into view, when the node has been
|
|
10614
11301
|
* laid out: the field's own text first, then any scroll container
|
|
@@ -11281,6 +11968,16 @@ declare class UiFrame {
|
|
|
11281
11968
|
* node looked at.
|
|
11282
11969
|
*/
|
|
11283
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;
|
|
11284
11981
|
get size(): number;
|
|
11285
11982
|
isEmpty(): boolean;
|
|
11286
11983
|
dirtyFlagsFor(node: UiNode): DirtyFlags;
|
|
@@ -11453,30 +12150,6 @@ interface ScrollAdjustment {
|
|
|
11453
12150
|
scrollX: number;
|
|
11454
12151
|
scrollY: number;
|
|
11455
12152
|
}
|
|
11456
|
-
/**
|
|
11457
|
-
* Calculates geometry for a retained UiNode tree.
|
|
11458
|
-
*
|
|
11459
|
-
* Layout owns a separate projection of the graph (LayoutRecords
|
|
11460
|
-
* keyed by UiNode identity) so the graph stays structural and
|
|
11461
|
-
* the renderer/hit-testing read geometry from one place. The
|
|
11462
|
-
* engine knows nothing about Canvas, WebGPU, or the DOM: it
|
|
11463
|
-
* produces numbers only.
|
|
11464
|
-
*
|
|
11465
|
-
* measure: bottom-up, dirty subtrees only, early-stop via
|
|
11466
|
-
* idempotent measured-size comparison
|
|
11467
|
-
* place: top-down, dirty paths only, re-places a child's
|
|
11468
|
-
* descendants only when its box actually changed
|
|
11469
|
-
*
|
|
11470
|
-
* Flex is two-pass, as in CSS: items are first measured at their
|
|
11471
|
-
* max-content size to obtain a flex base, the main axis is resolved,
|
|
11472
|
-
* and any item whose main size changed is measured again at that size
|
|
11473
|
-
* so a cross size that depends on it — wrapped text above all — comes
|
|
11474
|
-
* out right. The second pass only touches items that actually flexed.
|
|
11475
|
-
*
|
|
11476
|
-
* Scroll offset is a coordinate-space translation stored on the
|
|
11477
|
-
* container record; descendants keep content coordinates, so
|
|
11478
|
-
* scrolling never re-measures or re-places them.
|
|
11479
|
-
*/
|
|
11480
12153
|
declare class LayoutEngine {
|
|
11481
12154
|
private records;
|
|
11482
12155
|
/**
|
|
@@ -11511,6 +12184,14 @@ declare class LayoutEngine {
|
|
|
11511
12184
|
* no children to translate, so they are kept apart from `scrollNodes`.
|
|
11512
12185
|
*/
|
|
11513
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;
|
|
11514
12195
|
/** Absolutely positioned nodes placed against an anchor node. */
|
|
11515
12196
|
private readonly anchoredNodes;
|
|
11516
12197
|
/** The anchor each of those nodes was last placed against. */
|
|
@@ -11745,6 +12426,8 @@ declare class LayoutEngine {
|
|
|
11745
12426
|
revealScrollbars(node: UiNode): void;
|
|
11746
12427
|
/** Every scroll container that has been laid out. */
|
|
11747
12428
|
scrollContainers(): Iterable<UiNode>;
|
|
12429
|
+
/** Everything that can show a scrollbar: scroll containers, then fields. */
|
|
12430
|
+
private scrollbarNodes;
|
|
11748
12431
|
/**
|
|
11749
12432
|
* When the next scrollbar changes appearance (starts fading or
|
|
11750
12433
|
* disappears), or undefined when none is showing. Lets a host schedule
|
|
@@ -11965,6 +12648,15 @@ declare class LayoutEngine {
|
|
|
11965
12648
|
*/
|
|
11966
12649
|
private minContentHeightContribution;
|
|
11967
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;
|
|
11968
12660
|
private measureScroll;
|
|
11969
12661
|
/**
|
|
11970
12662
|
* A leaf is its content plus padding. Text content comes from the
|
|
@@ -12126,18 +12818,18 @@ declare class LayoutEngine {
|
|
|
12126
12818
|
*/
|
|
12127
12819
|
private markLayoutDirty;
|
|
12128
12820
|
private applyScroll;
|
|
12821
|
+
/**
|
|
12822
|
+
* A `scrollWith` container's offset: the leader's, on the axes it
|
|
12823
|
+
* follows, clamped to the follower's own range. No scrollbar shows
|
|
12824
|
+
* for it, since what is being scrolled is the leader.
|
|
12825
|
+
*/
|
|
12826
|
+
private applyFollowedScroll;
|
|
12129
12827
|
/**
|
|
12130
12828
|
* Brings a record's scroll offset up to date with its `scrollX` and
|
|
12131
|
-
* `scrollY` properties, clamped to what there is to scroll
|
|
12132
|
-
* every pass, so an offset written against
|
|
12133
|
-
* whose text has since been deleted, a
|
|
12134
|
-
* back into range on its own.
|
|
12135
|
-
*
|
|
12136
|
-
* A field that scrolls may go one caret width further than its text,
|
|
12137
|
-
* so that a caret at the very end is inside the box and not on its
|
|
12138
|
-
* edge, where the clip would take it. A field wide enough for its
|
|
12139
|
-
* text does not: the allowance would shift the line by a pixel the
|
|
12140
|
-
* moment the caret reached the end.
|
|
12829
|
+
* `scrollY` properties, clamped to what there is to scroll (see
|
|
12830
|
+
* `scrollRange`). This runs every pass, so an offset written against
|
|
12831
|
+
* a larger content — a field whose text has since been deleted, a
|
|
12832
|
+
* list that lost rows — comes back into range on its own.
|
|
12141
12833
|
*/
|
|
12142
12834
|
private applyScrollOffset;
|
|
12143
12835
|
/**
|
|
@@ -12279,6 +12971,46 @@ declare class LayoutEngine {
|
|
|
12279
12971
|
* size properties itself, in measure().
|
|
12280
12972
|
*/
|
|
12281
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;
|
|
12282
13014
|
private scrollDirection;
|
|
12283
13015
|
/**
|
|
12284
13016
|
* Iterates over a node's in-flow children, transparently expanding
|
|
@@ -12950,8 +13682,17 @@ declare function borders(options: BordersOptions): UiModifier<Decorations>;
|
|
|
12950
13682
|
declare function borderShapes(options: BordersOptions): readonly DecorationShape[];
|
|
12951
13683
|
//#endregion
|
|
12952
13684
|
//#region src/modifiers/focus.d.ts
|
|
12953
|
-
/**
|
|
12954
|
-
|
|
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>;
|
|
12955
13696
|
//#endregion
|
|
12956
13697
|
//#region src/modifiers/clickOutside.d.ts
|
|
12957
13698
|
interface ClickOutsideOptions {
|
|
@@ -14255,6 +14996,9 @@ interface SizeContainerArgs {
|
|
|
14255
14996
|
* padding, and a layout that switched arms at 600 px would otherwise
|
|
14256
14997
|
* switch at 600 px of border box and lay itself out in 560.
|
|
14257
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
|
+
*
|
|
14258
15002
|
* `Responsive` attaches this for you. Attach it by hand when the
|
|
14259
15003
|
* source has to be reachable somewhere the helper's own children are
|
|
14260
15004
|
* not, and put the same object on the node's `containerSize` prop.
|
|
@@ -14291,9 +15035,15 @@ interface BreakpointArgs {
|
|
|
14291
15035
|
* about it and the thing a media query cannot do: a card in a sidebar
|
|
14292
15036
|
* asks how wide the card is, not how wide the window is.
|
|
14293
15037
|
*
|
|
14294
|
-
* Nothing is written until the node has been laid out once,
|
|
14295
|
-
* first frame
|
|
14296
|
-
*
|
|
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.
|
|
14297
15047
|
*/
|
|
14298
15048
|
declare const breakpoint: ((args: BreakpointArgs, key?: string | number) => UiModifier<BreakpointArgs>) & {
|
|
14299
15049
|
readonly kind: UiModifierKind<BreakpointArgs>;
|
|
@@ -14777,7 +15527,9 @@ interface Canvas2DRendererOptions {
|
|
|
14777
15527
|
*
|
|
14778
15528
|
* Painting per node (in order):
|
|
14779
15529
|
*
|
|
15530
|
+
* 0. outer shadows (boxShadows, last declared first, as CSS stacks them)
|
|
14780
15531
|
* 1. background fill (backgroundColor, rounded rect when radius > 0)
|
|
15532
|
+
* 1b. inset shadows (boxShadows marked `inset`, over the background)
|
|
14781
15533
|
* 2. background image (image + objectFit)
|
|
14782
15534
|
* 2b. picture (what a Paint node's `paint`/`path` drew)
|
|
14783
15535
|
* 3. border (borderWidth/borderColor)
|
|
@@ -14809,6 +15561,8 @@ declare class Canvas2DRenderer implements UiRenderer {
|
|
|
14809
15561
|
/** Scratch for the padded box text is drawn in; reused across nodes. */
|
|
14810
15562
|
private readonly contentBox;
|
|
14811
15563
|
private readonly paint;
|
|
15564
|
+
/** The frame's context, wrapped so a huge scroll offset keeps its precision; reset each frame. */
|
|
15565
|
+
private precise;
|
|
14812
15566
|
/**
|
|
14813
15567
|
* Whose style the shared paint scratch currently holds.
|
|
14814
15568
|
*
|
|
@@ -14902,6 +15656,25 @@ declare class Canvas2DRenderer implements UiRenderer {
|
|
|
14902
15656
|
/** Everything between the boundary (or the root) and a lifted node. */
|
|
14903
15657
|
private applyAncestors;
|
|
14904
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;
|
|
14905
15678
|
/** The node's box, following its corner radius. */
|
|
14906
15679
|
private fillBox;
|
|
14907
15680
|
/**
|
|
@@ -16312,13 +17085,24 @@ declare class GlyphShaper {
|
|
|
16312
17085
|
* 2 size.xy
|
|
16313
17086
|
* 4 color.rgba
|
|
16314
17087
|
* 8 radius, opacity, borderWidth
|
|
16315
|
-
* 11 kind (
|
|
17088
|
+
* 11 kind (PrimitiveKind, as a float)
|
|
16316
17089
|
* 12 transform 3x2 affine, absolute layout → logical screen
|
|
16317
17090
|
* 18 clipIndex index into the clip chain, -1 for none
|
|
16318
17091
|
* 19 gradientIndex index into the frame's gradients, -1 for none
|
|
16319
|
-
* 20
|
|
16320
|
-
|
|
16321
|
-
|
|
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;
|
|
16322
17106
|
declare const INSTANCE_STRIDE_BYTES: number;
|
|
16323
17107
|
/**
|
|
16324
17108
|
* Textured instance layout (glyphs and images), in floats:
|
|
@@ -16354,7 +17138,11 @@ declare const CLIP_STRIDE_BYTES: number;
|
|
|
16354
17138
|
declare const NO_CLIP_INDEX = -1;
|
|
16355
17139
|
declare const enum PrimitiveKind {
|
|
16356
17140
|
Fill = 0,
|
|
16357
|
-
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
|
|
16358
17146
|
}
|
|
16359
17147
|
declare const enum CommandKind {
|
|
16360
17148
|
/** A contiguous range of primitive instances under one scissor. */
|
|
@@ -17217,6 +18005,23 @@ declare class UiScheduler {
|
|
|
17217
18005
|
* cleared surface for a frame.
|
|
17218
18006
|
*/
|
|
17219
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;
|
|
17220
18025
|
/**
|
|
17221
18026
|
* Runs one frame, and names its three parts for the browser's
|
|
17222
18027
|
* profiler when anything is recording (`PerformanceMarks`).
|
|
@@ -17261,6 +18066,8 @@ interface ParagraphGeometry {
|
|
|
17261
18066
|
readonly end: number;
|
|
17262
18067
|
readonly measure: RunMeasure;
|
|
17263
18068
|
readonly rtl: boolean;
|
|
18069
|
+
/** Stretches of the text its runs hide; a double click selects words as drawn. */
|
|
18070
|
+
readonly hidden: readonly UiTextRange[];
|
|
17264
18071
|
}
|
|
17265
18072
|
/**
|
|
17266
18073
|
* Lays a node's text out in its content box, exactly as the renderers
|
|
@@ -17351,6 +18158,8 @@ interface UiSemanticsRecord {
|
|
|
17351
18158
|
readonly setSize?: number;
|
|
17352
18159
|
/** How deep a treeitem sits, 1 for a root. */
|
|
17353
18160
|
readonly level?: number;
|
|
18161
|
+
/** The record id of the descendant that's active while this one keeps focus. */
|
|
18162
|
+
readonly activeDescendant?: string;
|
|
17354
18163
|
}
|
|
17355
18164
|
/** Insertion-ordered: iterating the map walks the tree in document order. */
|
|
17356
18165
|
type UiSemanticsMap = ReadonlyMap<string, UiSemanticsRecord>;
|
|
@@ -17373,7 +18182,29 @@ type UiSemanticsMap = ReadonlyMap<string, UiSemanticsRecord>;
|
|
|
17373
18182
|
* is, carrying `disabled` — unavailable is a thing to announce,
|
|
17374
18183
|
* hidden is not.
|
|
17375
18184
|
*/
|
|
17376
|
-
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;
|
|
17377
18208
|
/**
|
|
17378
18209
|
* The records one subtree contributes, as if walked in place.
|
|
17379
18210
|
*
|
|
@@ -17394,7 +18225,57 @@ declare function buildSemanticsTree(root: UiNode): Map<string, UiSemanticsRecord
|
|
|
17394
18225
|
* `inert` is whether an ancestor above this subtree is disabled, which
|
|
17395
18226
|
* only the caller can know.
|
|
17396
18227
|
*/
|
|
17397
|
-
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;
|
|
17398
18279
|
/**
|
|
17399
18280
|
* Whether an ancestor of `node` is disabled, which every record in its
|
|
17400
18281
|
* subtree inherits.
|
|
@@ -17426,6 +18307,11 @@ declare function textRunOfRecordId(id: string): {
|
|
|
17426
18307
|
* from them, and a whole record cannot be applied out of order into
|
|
17427
18308
|
* something half-updated. `remove` carries only the id, since a
|
|
17428
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.
|
|
17429
18315
|
*/
|
|
17430
18316
|
type UiSemanticsPatch = {
|
|
17431
18317
|
readonly op: 'add';
|
|
@@ -17446,6 +18332,24 @@ type UiSemanticsPatch = {
|
|
|
17446
18332
|
* a mirror can append as it reads.
|
|
17447
18333
|
*/
|
|
17448
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[];
|
|
17449
18353
|
/** Structural equality over the record's flat, pruned members. */
|
|
17450
18354
|
declare function recordsEqual(a: UiSemanticsRecord, b: UiSemanticsRecord): boolean;
|
|
17451
18355
|
//#endregion
|
|
@@ -17505,5 +18409,5 @@ interface UiSemanticsAction {
|
|
|
17505
18409
|
readonly value?: string;
|
|
17506
18410
|
}
|
|
17507
18411
|
//#endregion
|
|
17508
|
-
export { Mp3Header as $, UiPointerController as $a, Text as $c, UiImage as $d, UiUnknownModifierPropertyError as $f, parseTransform as $h, formatConstraints as $i, EditUnit as $l, UiBorderRadiuses as $m, DefaultVideoResolver as $n, CARET_WIDTH as $o, scaleFrom as $p, decorated as $r, selectableTextOf as $s, PaintResolver as $t, spacingEqual as $u, MARK_PREFIX as A, EditingState as Aa, lineEndAt as Ac, UiTextSpan as Ad, UiBoxShadow as Af, tween as Ah, parseAlignContent as Ai, StackProps as Al, UiBorderRadiusValue as Am, resolveNumber as An, UiPoint as Ao, UiPinchEvent as Ap, shortcuts as Ar, Canvas2DContext as As, WebGPUTextureCache as At, lightTheme as Au, ByteSource as B, UiDroppedFile as Ba, LazyGrid as Bc, textStylesEqual as Bd, UiInsets as Bf, UiDurationToken as Bh, SCROLLBAR_FADE_MS as Bi, UI_ROLES as Bl, UiPlacement as Bm, publishInset as Bn, SubtreeBounds as Bo, DirtyNodeSet as Bp, reorderable as Br, VerticalAlign as Bs, WebGPUSurface as Bt, themeExtension as Bu, paragraphGeometry as C, UiPlatformAdapter as Ca, lineIndexForOffset as Cc, UiFontStyle as Cd, isFrLength as Cf, DirtyFlags as Ch, GridPlacement as Ci, PaintElementProps as Cl, DecorationStroke as Cm, OverlayShape as Cn, SelectionControllerOptions as Co, UiEventType as Cp, AnimateLayoutOptions as Cr, drawText as Cs, glyphCount as Ct, VirtualViewport as Cu, UiFrameCallback as D, touchActionFor as Da, offsetForVerticalMove as Dc, UiTextDecoration as Dd, percent as Df, assertTransitionMap as Dh, AlignContent as Di, Reactive as Dl, paintsAfterChildren as Dm, CanvasSurface as Dn, HitTestResult as Do, UiKeyModifiers as Dp, ShortcutsOptions as Dr, runFontString as Ds, GlyphSlot as Dt, videoFrameSize as Du, wordRangeIn as E, prepareInputSurface as Ea, offsetAtX as Ec, UiSpannedText as Ed, minmax as Ef, UiTransitionValue as Eh, sizeGridTracks as Ei, PropsOf as El, hasDecorationPhase as Em, CanvasHost as En, HitTestLayoutReader as Eo, UiInputEvent as Ep, ShortcutOptions as Er, runCanvasStyleInto as Es, GLYPH_SUBPIXEL_PHASES as Et, isVideoSurface as Eu, setPerformanceMarks as F, UiDragPayload as Fa, previousWordStart as Fc, resolvedSpansOf as Fd, defineProperty as Ff, UiSpring as Fh, ELLIPSIS as Fi, UiNodeRef as Fl, UiFlexWrap as Fm, themeTokens as Fn, ScrollbarAxis as Fo, UiTextChangeEvent as Fp, DragSourceOptions as Fr, DEFAULT_TEXT_COLOR as Fs, DrawStats as Ft, UiThemeExtensionOptions as Fu, Mp4AudioTrack as G, UiShortcutBinding as Ga, Button as Gc, PaintSurface as Gd, UiContainerSizeSource as Gf, defaultMotion as Gh, Edges as Gi, UiSemanticStates as Gl, UiTextAlign as Gm, ScrollOffset as Gn, FindMatch as Go, MotionStateInput as Gp, clickOutside as Gr, normalizeTextAlign as Gs, registerFontStack as Gt, highContrastColors as Gu, RangeSourceOptions as H, dragSessionFor as Ha, LazyListProps as Hc, PaintFillRule as Hd, noInsets as Hf, UiMotion as Hh, ScrollAdjustment as Hi, UiLiveRegion as Hl, UiPosition as Hm, SizeContainerArgs as Hn, clearMatchRanges as Ho, MOTION_REST as Hp, DraggableOptions as Hr, computeObjectFitRect as Hs, bumpFontStack as Ht, withThemeExtension as Hu, VttCue as I, UiDragSession as Ia, wordRangeAt as Ic, spanAtOffset as Id, propertyValuesEqual as If, UiSpringOptions as Ih, layoutParagraph as Ii, UiProperties as Il, UiFontWeight as Im, sameArgs as In, ScrollbarThumb as Io, UiWheelDeltaMode as Ip, DropTargetOptions as Ir, ObjectFit as Is, RenderHooks as It, UiThemeExtensions as Iu, demuxMp4Audio as J, formatShortcut as Ja, Grid as Jc, UiPaint as Jd, unknownContainerSize as Jf, interpolateNumber as Jh, OverrideSources as Ji, normalizeStates as Jl, UiTextWrapValue as Jm, VideoClock as Jn, UiEnvironmentProvider as Jo, fade as Jp, BordersOptions as Jr, DEFAULT_LINE_HEIGHT_FACTOR as Js, PaintPictureCache as Jt, UiDensity as Ju, Mp4Sample as K, UiShortcutRegistry as Ka, Column as Kc, PaintTextAlign as Kd, bandOf as Kf, UiInterpolator as Kh, LayoutExplanation as Ki, isUiRole as Kl, UiTextDirection as Km, ScrollPositionArgs as Kn, FindOptions as Ko, MotionTiming as Kp, autoFocus as Kr, normalizeVerticalAlign as Ks, PaintCanvas as Kt, raiseContrast as Ku, VttTrack as L, UiDragState as La, Responsive as Lc, spannedTextOf as Ld, UiInsetEdge as Lf, UiTween as Lh, proportionalFontMetrics as Li, UiPropertyName as Ll, UiGridAutoFlow as Lm, InsetPaddingArgs as Ln, scrollbarThumb as Lo, UiWheelEvent as Lp, ReorderableOptions as Lr, PaintState as Ls, WebGPURenderer as Lt, defineThemeExtension as Lu, markNow as M, TouchScrollerOptions as Ma, nextGraphemeEnd as Mc, defaultTextStyle as Md, boxShadowArraysEqual as Mf, UiAnimation as Mh, parseMainAxisAlignment as Mi, TextProps as Ml, UiContentDistribution as Mm, resolvePropertyByName as Mn, SCROLLBAR_INSET as Mo, UiPointerEvent as Mp, ZoomState as Mr, DEFAULT_FONT_FAMILY as Ms, isWebGPUAvailable as Mt, withContrast as Mu, measureSpan as N, UiTouchScroller as Na, nextWordEnd as Nc, editableSpansOf as Nd, boxShadowsEqual as Nf, UiAnimationOptions as Nh, FlexDirection as Ni, TypographyProps as Nl, UiCursor as Nm, resolveString as Nn, SCROLLBAR_MIN_THUMB as No, UiPointerKind as Np, pinchable as Nr, DEFAULT_FONT_SIZE as Ns, WebGPUError as Nt, withDensity as Nu, UiScheduler as O, EditingControllerOptions as Oa, selectionRects as Oc, UiTextLink as Od, repeat as Of, normalizeTransition as Oh, CrossAxisAlignment as Oi, RowProps as Ol, UI_SUBGRID_AXES as Om, createCanvasSurface as On, HitTester as Oo, UiKeyboardEvent as Op, contextMenu as Or, textRunBackgrounds as Os, GlyphUpload as Ot, UiTheme as Ou, performanceMarksEnabled as P, EXTERNAL_FILES as Pa, previousGraphemeStart as Pc, flattenTextSpans as Pd, UiPropertyDefinition as Pf, UiReducedMotionPolicy as Ph, parseFlexDirection as Pi, UiEventProps as Pl, UiDirection as Pm, ThemeTokenTarget as Pn, SCROLLBAR_THICKNESS as Po, UiSelectionChangeEvent as Pp, AutoScrollOptions as Pr, DEFAULT_FONT_WEIGHT as Ps, CapturedFrame as Pt, UiThemeExtension as Pu, Mp3Frames as Q, PointerControllerOptions as Qa, Stack as Qc, pathValuesEqual as Qd, UiModifierSet as Qf, UiTransforms as Qh, describeOverrides as Qi, CompositionRange as Ql, UiBorderRadius as Qm, videoSource as Qn, CARET_BLINK_MS as Qo, rotateFrom as Qp, borders as Qr, selectableTextNodes as Qs, PaintGradient as Qt, scaleSpacing as Qu, cueAt as R, UiDropEffect as Ra, ResponsiveProps as Rc, textContentOf as Rd, UiInsetRegistry as Rf, UiTweenOptions as Rh, LayoutNotifier as Ri, UiPropertyValueOf as Rl, UiObjectFit as Rm, PublishInsetArgs as Rn, scrollbarThumbs as Ro, noKeyModifiers as Rp, dragSource as Rr, PaintTextSpan as Rs, WebGPURendererOptions as Rt, hasThemeExtension as Ru, offsetAtPointIn as S, PlatformSurface as Sa, lineIndexAtY as Sc, UiFontStretch as Sd, isAutoLength as Sf, UiNodeType as Sh, GridItemRequest as Si, InteractionProps as Sl, DecorationShape as Sm, LABEL_PADDING_X as Sn, UiFindController as So, UiBeforeInputEvent as Sp, ImageResolver as Sr, createCanvasTextStyle as Ss, createTextCache as St, VirtualUpdate as Su, selectionRectsIn as T, pointerDeviceOf as Ta, offsetAtPoint as Tc, UiResolvedTextSpan as Td, isPercentLength as Tf, UiTransitionSpec as Th, placeGridItems as Ti, PositionProps as Tl, decorationRect as Tm, labelOrigin as Tn, UiSelectionController as To, UiGestureEvent as Tp, ContextMenuOptions as Tr, layoutTextLines as Ts, GlyphShaper as Tt, UiVideoSurface as Tu, bufferSource as U, ShortcutRegistryOptions as Ua, LazyRow as Uc, PaintLineCap as Ud, observeViewportInsets as Uf, UiSpringSpec as Uh, AxisExplanation as Ui, UiRole as Ul, UiSelfAlignment as Um, breakpoint as Un, matchRangesOf as Uo, MotionChannel as Up, draggable as Ur, createPaintState as Us, clearFontStacks as Ut, UiContrast as Uu, DEFAULT_BLOCK_SIZE as V, UiFileDropMessage as Va, LazyGridProps as Vc, PaintBox as Vd, insetsEqual as Vf, UiEasingToken as Vh, SCROLLBAR_LINGER_MS as Vi, UI_SEMANTIC_STATES as Vl, UiPointerEvents as Vm, BreakpointArgs as Vn, TEXT_MATCHES_PROP as Vo, MOTION_CHANNELS as Vp, DragOffset as Vr, colorToCss as Vs, createWebGPUSurface as Vt, themeExtensionsEqual as Vu, rangeSource as W, UiShortcut as Wa, Box as Wc, PaintLineJoin as Wd, UiContainerSize as Wf, UiSpringToken as Wh, CustomLayoutExplanation as Wi, UiSemanticState as Wl, UiSubgridAxis as Wm, sizeContainer as Wn, setMatchRanges as Wo, MotionState as Wp, ClickOutsideOptions as Wr, isPaintVisible as Ws, fontStackFor as Wt, contrastRatio as Wu, Mp3Format as X, KeyboardControllerOptions as Xa, Row as Xc, inputsEqual as Xd, UiModifierFocus as Xf, interpolatorFor as Xh, SizeDecision as Xi, validateRole as Xl, UiVerticalAlign as Xm, VideoState as Xn, UiEnvironmentKeys as Xo, pop as Xp, FocusRingOptions as Xr, TextRange as Xs, paintPictures as Xt, UiSpacing as Xu, demuxMp4Video as Y, parseShortcut as Ya, Paint as Yc, UiPath as Yd, UiModifierEnvironment as Yf, interpolateTransform as Yh, RelayoutExplanation as Yi, statesEqual as Yl, UiThemeColorName as Ym, VideoSourceArgs as Yn, provideEnvironment as Yo, isMotionRest as Yp, Decorations as Yr, TEXT_SELECTION_PROP as Ys, PaintStats as Yt, densityFactors as Yu, Mp3Frame as Z, UiKeyboardController as Za, ScrollView as Zc, paintValuesEqual as Zd, UiModifierLayout as Zf, UiTransform as Zh, describeLength as Zi, validateStates as Zl, validateSubgrid as Zm, VideoTransport as Zn, EnvironmentNotifier as Zo, resolveMotionState as Zp, borderShapes as Zr, clearSelectionRange as Zs, PaintContext2D as Zt, defaultSpacing as Zu, linkOf as _, isNodeTabStop as _a, spannedRunsFor as _c, defaultVisualState as _d, PercentLength as _f, steps as _g, LayoutRecord as _h, inheritedPropertyNames as _i, FlexContainerProps as _l, UiNodeTransitions as _m, RendererBackend as _n, overrideSources as _o, UiEventListener as _p, IconRasterizerOptions as _r, SpanPaint as _s, ScissorRect as _t, UiVirtualWindow as _u, diffSemantics as a, UiFrameClock as aa, ParagraphLayout as ac, UiTypographyExtensions as ad, UiGradientOffset as af, colorToHex as ag, normalizeBorderRadius as ah, measure as ai, UiEventBinding as al, Constraints as am, PaintRecording as an, isScrollContainer as ao, UiModifierHost as ap, MotionArgs as ar, isMultiline as as, CLIP_STRIDE_FLOATS as at, SheetRowRenderer as au, ParagraphGeometry as b, PlatformAdapterOptions as ba, RunMeasure as bc, visualStatesEqual as bd, auto as bf, createEnvironmentKey as bh, propertyValuesEqualByName as bi, GridProps as bl, DecorationFill as bm, RenderChanges as bn, writeOverrideProperty as bo, UiListenerErrorReporter as bp, DefaultImageResolver as br, applyCanvasTextStyle as bs, TextRunDraw as bt, VIRTUAL_WINDOW_PROP as bu, UiSemanticsMap as c, UiHostFrameClock as ca, TextLine as cc, isTypographyRole as cd, UiRadialGradient as cf, colorsEqual as cg, UiShapeName as ch, bundle as ci, UiGraphBuilder as cl, LayoutStats as cm, InspectorOverlay as cn, UiGestureRecognizer as co, ComponentLikeElement as cp, sharedElement as cr, syncEditorValue as cs, INSTANCE_STRIDE_BYTES as ct, UiVirtualSheet as cu, buildSemanticsTree as d, UiTimerFrameClock as da, TextMeasurer as dc, UiLayoutChild as dd, linearGradient as df, rgb8 as dg, isShapeName as dh, accumulatedOffsetTo as di, ButtonProps as dl, clampSize as dm, CanvasTextMeasurer as dn, FocusNotifier as do, isComponentLikeElement as dp, ImageSources as dr, commandForKey as ds, NO_CLIP_INDEX as dt, sheetSource as du, formatExplanation as ea, selectionRangeOf as ec, spacingSteps as ed, GradientPaint as ef, transform as eg, borderRadius as eh, focusRing as ei, createElement as el, slideDown as em, PaintTarget as en, ScrollContainerState as eo, assertModifierList as ep, DefaultVideoResolverOptions as er, EDITOR_PROP as es, readMp3Header as et, EditableTextModel as eu, semanticsInertAbove as f, UiTimerFrameClockOptions as fa, TextOverflow as fc, UiLayoutContext as fd, radialGradient as ff, rgba as fg, shapesEqual as fh, contentOffset as fi, ColumnProps as fl, constraintsEqual as fm, Canvas2DRenderer as fn, FocusSource as fo, isObservable$1 as fp, iconSource as fr, detectEditingPlatform as fs, PrimitiveCommand as ft, LazyAxis as fu, linkHoverOf as g, isNodeSelectable as ga, TextWrap as gc, UiVisualStateSet as gd, MinMaxTrack as gf, linear as gg, lightColors as gh, inheritedPropertyFlags as gi, EnvironmentProps as gl, UiNode as gm, ScrollLayerStats as gn, clearOverrideProperty as go, UiProps as gp, IconRasterizer as gr, PlacedTextRun as gs, RenderTextCache as gt, LazySourceArgs as gu, hasTextLinks as h, isNodeInert as ha, TextRunStyle as hc, UiVisualState as hd, FrLength as hf, easings as hg, darkColors as hh, getPropertyNames as hi, EditableTextProps as hl, NodeProperty as hm, LayerCanvasFactory as hn, resetTransitionWarnings as ho, UiPropValue as hp, IconContext as hr, CanvasTextStyle as hs, RenderList as ht, LazyListOptions as hu, UiSemanticsPatch as i, UiAnimationFrameClock as ia, FontMetrics as ic, UiTypography as id, UiGradient as if, UiColor as ig, borderRadiusValuesEqual as ih, interactive as ii, UiGraph as il, UiSharedElements as im, PaintRecorder as in, UiWheelController as io, isUiModifier as ip, canDecodeVideo as ir, isEditableNode as is, CLIP_STRIDE_BYTES as it, SheetRange as iu, markInstant as j, UiEditingController as ja, lineStartAt as jc, UiTextStyle as jd, boxShadow as jf, AnimatedCell as jh, parseCrossAxisAlignment as ji, TextContentProps as jl, UiColorValue as jm, resolveProperty as jn, SCROLLBAR_HOVER_ZONE as jo, UiPointerDevice as jp, PinchableOptions as jr, Canvas2DGradient as js, initializeWebGPU as jt, themesEqual as ju, UiSchedulerOptions as k, EditingHost as ka, graphemeBoundaries as kc, UiTextMetrics as kd, resolveLength as kf, spring as kh, MainAxisAlignment as ki, ScrollViewProps as kl, UiAlignment as km, resolveBoolean as kn, UiHitTester as ko, UiPasteEvent as kp, shortcut as kr, textRunDecorations as ks, WebGPUGlyphAtlas as kt, darkTheme as ku, UiSemanticsRecord as l, UiHostFrameClockOptions as la, TextLineRun as lc, typographyEqual as ld, gradientPaint as lf, normalizeColor as lg, UiShapes as lh, noModifiers as li, BoxModelProps as ll, Size as lm, LayoutInspector as ln, PinchRecognizerOptions as lo, UiChild as lp, IconSourceArgs as lr, EditCommand as ls, INSTANCE_STRIDE_FLOATS as lt, UiVirtualSheetOptions as lu, clearLinkHover as m, isNodeHitTestable as ma, TextRunSpan as mc, isLayoutProtocol as md, AutoLength as mf, cubicBezier as mg, colorsEqualPalette as mh, findPropertyDefinition as mi, ContainerProps as ml, NodeId as mm, traceRoundedRect as mn, NodeTransitions as mo, isUiElement as mp, IconCanvas as mr, EditableLayout as ms, RenderCommand as mt, LazyItemRenderer as mu, UiSemanticsBox as n, withOverrideSource as na, CharacterCountTextMeasurer as nc, defaultShadows as nd, ResolvedGradient as nf, transformsEqual as ng, borderRadiusEqual as nh, InteractiveOptions as ni, BindingId as nl, slideUp as nm, EMPTY_RECORDING as nn, UiScrollBehavior as no, UiModifierKind as np, VideoPlayback as nr, editorFor as ns, WebGPUGlyphPages as nt, LazySheetProps as nu, recordsEqual as o, UiFrameClockFactory as oa, ParagraphTextMeasurer as oc, UiTypographyRole as od, UiGradientStop as of, colorToRgba as og, uniformBorderRadius as oh, pressable as oi, ChildrenBindingId as ol, LayoutBox as om, replayPaint as on, GestureInput as oo, UiModifierTeardown as op, SharedElementArgs as or, isReadOnly as os, CommandKind as ot, SheetSourceArgs as ou, textRunOfRecordId as p, isNodeFocusable as pa, TextRunMeasurer as pc, UiLayoutProtocol as pd, validateGradient as pf, UiEasing as pg, UiColors as ph, closestPropertyName as pi, CommonProps as pl, tightenConstraints as pm, Canvas2DRendererOptions as pn, UiFocusManager as po, isUiChild as pp, imageSource as pr, isPrintable as ps, PrimitiveKind as pt, LazyGridOptions as pu, Mp4VideoTrack as q, UiShortcutStep as qa, EditableText as qc, PaintTextStyle as qd, containerBands as qf, interpolateColor as qh, LayoutStateExplanation as qi, isUiSemanticState as ql, UiTextOverflowValue as qm, scrollPosition as qn, findMatchesIn as qo, ResolvedMotionState as qp, BorderEdge as qr, resolvePaintState as qs, PaintCanvasFactory as qt, relativeLuminance as qu, UiSemanticsUpdate as r, UiFrame as ra, FixedMetricsOptions as rc, shadowsEqual as rd, ResolvedGradientStop as rf, UiBasicColors as rg, borderRadiusIsZero as rh, hoverable as ri, UiBinding as rl, SharedClaim as rm, PaintOp as rn, UiScrollability as ro, defineModifier as rp, VideoResolver as rr, editorOf as rs, Affine as rt, SheetHeaderRenderer as ru, TEXT_RUN_ID_SEPARATOR as s, UiFrameTime as sa, SpannedRuns as sc, defaultTypography as sd, UiLinearGradient as sf, colorValuesEqual as sg, UiShapeExtensions as sh, UiModifierBundle as si, UiChildrenBinding as sl, LayoutResult as sm, INSPECTOR_HEAT_MS as sn, GestureRecognizerOptions as so, ComponentResolver as sp, motion as sr, nextCaretToggle as ss, GlyphCommand as st, SheetViewport as su, UiSemanticsAction as t, labelNode as ta, setSelectionRange as tc, UiShadows as td, MAX_GRADIENT_STOPS as tf, transformIsIdentity as tg, borderRadiusCorners as th, BUTTON_INTERACTION as ti, UiDefinition as tl, slideFrom as tm, tracePathData as tn, ScrollSink as to, UiModifier as tp, RangeResponse as tr, caretVisibleAt as ts, splitMp3Frames as tt, LazySheet as tu, buildSemanticsSubtree as u, UiManualFrameClock as ua, TextMeasureRequest as uc, MAX_MEASURES_PER_CHILD as ud, gradientsEqual as uf, parseColor as ug, defaultShapes as uh, Transform as ui, BoxProps as ul, TightenOptions as um, LayoutInspectorOptions as un, UiPinchRecognizer as uo, UiElement as up, ImageSourceArgs as ur, EditingPlatform as us, ImageCommand as ut, VIRTUAL_SHEET_PROP as uu, linkRunAtPointIn as v, resolveCursor as va, CaretRect as vc, hasVisualState as vd, UiLength as vf, UiEnvironment as vh, propertyEffects as vi, FlexItemProps as vl, UiPropertyOverride as vm, UiRenderer as vn, resetOverrideWarnings as vo, UiEventListenerOptions as vp, IconSpec as vr, TextLinePlacement as vs, TEXTURED_STRIDE_BYTES as vt, VIRTUAL_INDEX_PROP as vu, paragraphGeometryFrom as w, capturePointer as wa, lineLimit as wc, UiFontVariant as wd, isMinMaxTrack as wf, AnimationDriver as wh, GridTrack as wi, PaintProps as wl, decorationColor as wm, drawOverlayShapes as wn, SelectionHost as wo, UiFocusEvent as wp, animateLayout as wr, fillTextRects as ws, textRuns as wt, lazySource as wu, hasDrawnText as x, PlatformEventTarget as xa, caretRectFor as xc, UiFontKerning as xd, fr as xf, findEnvironmentKey as xh, GridContribution as xi, IdentityProps as xl, DecorationRect as xm, RenderContext as xn, FindHost as xo, MOUSE_POINTER as xp, DefaultImageResolverOptions as xr, buildFontString as xs, buildRenderList as xt, VirtualItemMeasure as xu, setLinkHover as y, CanvasPlatformSurface as ya, PlacedLine as yc, visualState as yd, UiTrackSize as yf, UiEnvironmentKey as yh, propertyIsInherited as yi, GridItemProps as yl, UiPropertyOverrides as ym, LayoutReader as yn, writeDeclaredProperty as yo, UiInputDispatcher as yp, iconKey as yr, TextRunRect as ys, TEXTURED_STRIDE_FLOATS as yt, VIRTUAL_LEAD_PROP as yu, parseWebVtt as z, UiDropZone as za, LazyColumn as zc, textSpansEqual as zd, UiInsetSource as zf, createTween as zh, LayoutEngine as zi, UiPropertyValues as zl, UiOverflow as zm, insetPadding as zn, scrollbarZoneAt as zo, wheelDeltaYOf as zp, dropTarget as zr, TextAlign as zs, WebGPUCanvasHost as zt, noThemeExtensions as zu };
|
|
17509
|
-
//# sourceMappingURL=index-
|
|
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
|