gesso-core 0.6.19 → 0.6.21
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 +28 -0
- package/dist/{CanvasSurface-tAao5BLh.js → CanvasSurface-BAhcLj2K.js} +985 -223
- package/dist/CanvasSurface-BAhcLj2K.js.map +1 -0
- package/dist/{index-8yhrkCnb.d.ts → index-DR8HAfh3.d.ts} +730 -383
- package/dist/index.d.ts +1 -1
- package/dist/index.js +278 -14
- package/dist/index.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/package.json +1 -1
- package/dist/CanvasSurface-tAao5BLh.js.map +0 -1
|
@@ -591,9 +591,10 @@ type UiTransitionSpec = {
|
|
|
591
591
|
/**
|
|
592
592
|
* What an element may write for one property of a `transition`.
|
|
593
593
|
*
|
|
594
|
-
* A bare number is a duration in milliseconds,
|
|
595
|
-
* `transition: { opacity: 200, transform:
|
|
596
|
-
*
|
|
594
|
+
* A bare number is a duration in milliseconds, so the common case,
|
|
595
|
+
* `transition: { opacity: 200, transform: 120 }`, reads the way a CSS
|
|
596
|
+
* transition does. A spring is for a property that is one number, like
|
|
597
|
+
* `opacity`: a transform only tweens (see `spring`).
|
|
597
598
|
*/
|
|
598
599
|
type UiTransitionValue = number | UiTransitionSpec;
|
|
599
600
|
/** A tween of `duration` milliseconds along `easing`. */
|
|
@@ -889,7 +890,304 @@ declare class UiEnvironment {
|
|
|
889
890
|
providesOwn(name: string): boolean;
|
|
890
891
|
}
|
|
891
892
|
//#endregion
|
|
893
|
+
//#region src/layout/TextMeasurer.d.ts
|
|
894
|
+
type TextWrap = 'word' | 'char' | 'none';
|
|
895
|
+
type TextOverflow = 'clip' | 'ellipsis';
|
|
896
|
+
/**
|
|
897
|
+
* The font a piece of text is measured in.
|
|
898
|
+
*
|
|
899
|
+
* Structural rather than imported so that layout keeps depending on
|
|
900
|
+
* nothing above it; a `UiResolvedTextSpan` is one of these plus the
|
|
901
|
+
* fields that only paint reads.
|
|
902
|
+
*/
|
|
903
|
+
interface TextRunStyle {
|
|
904
|
+
fontFamily?: string;
|
|
905
|
+
fontWeight?: string | number;
|
|
906
|
+
fontSize?: number;
|
|
907
|
+
fontStyle?: string;
|
|
908
|
+
fontStretch?: string;
|
|
909
|
+
fontVariant?: string;
|
|
910
|
+
fontKerning?: string;
|
|
911
|
+
letterSpacing?: number;
|
|
912
|
+
}
|
|
913
|
+
/** A run of the paragraph with a font of its own, as offsets into the text. */
|
|
914
|
+
interface TextRunSpan extends TextRunStyle {
|
|
915
|
+
readonly start: number;
|
|
916
|
+
readonly end: number;
|
|
917
|
+
/**
|
|
918
|
+
* The run is in the text but takes no room: every width that touches
|
|
919
|
+
* it counts it as nothing, and a line's `runs` leave it out, so no
|
|
920
|
+
* renderer has anything to draw for it.
|
|
921
|
+
*/
|
|
922
|
+
readonly hidden?: boolean;
|
|
923
|
+
}
|
|
924
|
+
interface TextMeasureRequest {
|
|
925
|
+
text: string;
|
|
926
|
+
fontSize: number;
|
|
927
|
+
/** Available width. Wrapping and fit-content sizing happen against it. */
|
|
928
|
+
maxWidth?: number;
|
|
929
|
+
/**
|
|
930
|
+
* `maxWidth` is the box's own width, fixed from outside (a width
|
|
931
|
+
* set, or the box being painted): lines wrap against it, and a word
|
|
932
|
+
* wider than it overflows on a line of its own. Otherwise the
|
|
933
|
+
* paragraph is fit-content, and a word wider than `maxWidth` widens
|
|
934
|
+
* it, every line wrapping against that wider box, as CSS lays out a
|
|
935
|
+
* box sized by its content.
|
|
936
|
+
*/
|
|
937
|
+
exactWidth?: boolean;
|
|
938
|
+
/**
|
|
939
|
+
* Font family for platforms that can shape text.
|
|
940
|
+
*
|
|
941
|
+
* Deterministic measurers may ignore every style field; they
|
|
942
|
+
* are hints for platform-backed implementations only.
|
|
943
|
+
*/
|
|
944
|
+
fontFamily?: string;
|
|
945
|
+
fontWeight?: string | number;
|
|
946
|
+
lineHeight?: number;
|
|
947
|
+
letterSpacing?: number;
|
|
948
|
+
fontStyle?: string;
|
|
949
|
+
fontStretch?: string;
|
|
950
|
+
fontVariant?: string;
|
|
951
|
+
fontKerning?: string;
|
|
952
|
+
/** Default 'word'. */
|
|
953
|
+
wrap?: TextWrap;
|
|
954
|
+
/** Keep at most this many lines. */
|
|
955
|
+
maxLines?: number;
|
|
956
|
+
/** What happens to a line that does not fit. Default 'clip'. */
|
|
957
|
+
overflow?: TextOverflow;
|
|
958
|
+
/**
|
|
959
|
+
* Runs of `text` with a font of their own, in order and not
|
|
960
|
+
* overlapping. Text outside every run is measured in the request's
|
|
961
|
+
* own font.
|
|
962
|
+
*
|
|
963
|
+
* Only the fields that change a width are here. A run that differs
|
|
964
|
+
* from its neighbours only in colour, background or underline is not
|
|
965
|
+
* in this list at all, so it costs a paint and never a re-layout.
|
|
966
|
+
*/
|
|
967
|
+
spans?: readonly TextRunSpan[];
|
|
968
|
+
}
|
|
969
|
+
/** One run of a line: where it sits in the line and which span it came from. */
|
|
970
|
+
interface TextLineRun {
|
|
971
|
+
/** Index into the request's `spans`, or -1 for text outside every run. */
|
|
972
|
+
span: number;
|
|
973
|
+
/** Offsets into the source text. */
|
|
974
|
+
start: number;
|
|
975
|
+
end: number;
|
|
976
|
+
text: string;
|
|
977
|
+
/** Distance from the line's left edge to this run's left edge. */
|
|
978
|
+
x: number;
|
|
979
|
+
width: number;
|
|
980
|
+
}
|
|
981
|
+
/** One laid-out line. `text` is what gets drawn and may end in an ellipsis. */
|
|
982
|
+
interface TextLine {
|
|
983
|
+
/** Offsets into the source text; hanging spaces and the ellipsis are outside them. */
|
|
984
|
+
start: number;
|
|
985
|
+
end: number;
|
|
986
|
+
text: string;
|
|
987
|
+
width: number;
|
|
988
|
+
/**
|
|
989
|
+
* The line cut at its runs, present only for a paragraph that has
|
|
990
|
+
* spans. A hidden run is not among them.
|
|
991
|
+
*
|
|
992
|
+
* Measured once, here, where the line's own width is measured. That
|
|
993
|
+
* is what keeps a spanned paragraph as cheap to paint as a plain
|
|
994
|
+
* one: a renderer walks these and asks the platform for nothing.
|
|
995
|
+
*/
|
|
996
|
+
runs?: readonly TextLineRun[];
|
|
997
|
+
}
|
|
998
|
+
interface FontMetrics {
|
|
999
|
+
/** Distance from the alphabetic baseline to the top of the glyph box. */
|
|
1000
|
+
ascent: number;
|
|
1001
|
+
/** Distance from the alphabetic baseline to the bottom of the glyph box. */
|
|
1002
|
+
descent: number;
|
|
1003
|
+
}
|
|
1004
|
+
/**
|
|
1005
|
+
* A measured paragraph: everything layout, alignment and painting need.
|
|
1006
|
+
*
|
|
1007
|
+
* `width` is fit-content, `height` is lines × lineHeight, and
|
|
1008
|
+
* `firstBaseline` is the distance from the paragraph top to the first
|
|
1009
|
+
* line's alphabetic baseline (half-leading plus ascent).
|
|
1010
|
+
*/
|
|
1011
|
+
interface ParagraphLayout {
|
|
1012
|
+
lines: TextLine[];
|
|
1013
|
+
width: number;
|
|
1014
|
+
height: number;
|
|
1015
|
+
lineHeight: number;
|
|
1016
|
+
ascent: number;
|
|
1017
|
+
descent: number;
|
|
1018
|
+
firstBaseline: number;
|
|
1019
|
+
/** Widest unbreakable segment under the requested wrap mode. */
|
|
1020
|
+
minContentWidth: number;
|
|
1021
|
+
/** Width with no wrapping at all. */
|
|
1022
|
+
maxContentWidth: number;
|
|
1023
|
+
}
|
|
1024
|
+
/**
|
|
1025
|
+
* Abstraction between layout and text platforms.
|
|
1026
|
+
*
|
|
1027
|
+
* Layout never measures text itself; a platform layer
|
|
1028
|
+
* (Canvas2D, WebGPU, tests) supplies an implementation.
|
|
1029
|
+
*/
|
|
1030
|
+
interface TextMeasurer {
|
|
1031
|
+
measure(request: TextMeasureRequest): Size;
|
|
1032
|
+
layout(request: TextMeasureRequest): ParagraphLayout;
|
|
1033
|
+
/**
|
|
1034
|
+
* The advance width of one run in the request's font. Caret and
|
|
1035
|
+
* selection geometry is built from prefix widths, so it has to come
|
|
1036
|
+
* from the same source as the line widths.
|
|
1037
|
+
*/
|
|
1038
|
+
measureRunWidth(text: string, request: TextMeasureRequest): number;
|
|
1039
|
+
/**
|
|
1040
|
+
* Forgets every cached answer. Called when what a font string means
|
|
1041
|
+
* has changed under the measurer: a declared face finished loading,
|
|
1042
|
+
* so widths measured with its fallback are wrong now. Measurers with
|
|
1043
|
+
* nothing cached need not implement it.
|
|
1044
|
+
*/
|
|
1045
|
+
invalidate?(): void;
|
|
1046
|
+
/**
|
|
1047
|
+
* Counts `invalidate` calls. A caller that keeps a paragraph past the
|
|
1048
|
+
* call that returned it (the layout engine keeps each node's last
|
|
1049
|
+
* one) may trust it only while this is unchanged. A measurer that
|
|
1050
|
+
* leaves it out is asked again every time.
|
|
1051
|
+
*/
|
|
1052
|
+
readonly generation?: number;
|
|
1053
|
+
}
|
|
1054
|
+
/**
|
|
1055
|
+
* The primitive a platform has to provide: the advance width of one
|
|
1056
|
+
* run of text, and the font's vertical metrics. Everything above it
|
|
1057
|
+
* is shared (see ParagraphLayout.ts).
|
|
1058
|
+
*/
|
|
1059
|
+
interface TextRunMeasurer {
|
|
1060
|
+
measureRunWidth(text: string, request: TextMeasureRequest): number;
|
|
1061
|
+
fontMetrics(request: TextMeasureRequest): FontMetrics;
|
|
1062
|
+
}
|
|
1063
|
+
/**
|
|
1064
|
+
* The widths of a paragraph whose runs have fonts of their own.
|
|
1065
|
+
*
|
|
1066
|
+
* Everything above it — line breaking, hanging blanks, the ellipsis,
|
|
1067
|
+
* caret and selection geometry — asks for the width of a stretch of
|
|
1068
|
+
* the text by its offsets rather than by its characters, and this
|
|
1069
|
+
* splits that stretch at the run boundaries and measures each piece in
|
|
1070
|
+
* its own font. That is the whole of what a span costs: the paragraph
|
|
1071
|
+
* algorithm is unchanged, and a paragraph with no spans never builds
|
|
1072
|
+
* one of these at all.
|
|
1073
|
+
*/
|
|
1074
|
+
interface SpannedRuns {
|
|
1075
|
+
/** The runs, as the request gave them. */
|
|
1076
|
+
readonly spans: readonly TextRunSpan[];
|
|
1077
|
+
/** Index of the run covering `offset`, or -1 where no run does. */
|
|
1078
|
+
indexAt(offset: number): number;
|
|
1079
|
+
/** The request an offset is measured with: its run's, or the paragraph's. */
|
|
1080
|
+
requestAt(offset: number): TextMeasureRequest;
|
|
1081
|
+
/** Whether the character at `offset` is in a hidden run. */
|
|
1082
|
+
hiddenAt(offset: number): boolean;
|
|
1083
|
+
/** Width of `text.slice(start, end)`, measured run by run. */
|
|
1084
|
+
width(text: string, start: number, end: number): number;
|
|
1085
|
+
/**
|
|
1086
|
+
* Width of a string that is not in the text, in the font of the run
|
|
1087
|
+
* covering `offset`: the ellipsis, and the space a tab is counted
|
|
1088
|
+
* as.
|
|
1089
|
+
*/
|
|
1090
|
+
widthOf(run: string, offset: number): number;
|
|
1091
|
+
/**
|
|
1092
|
+
* `text.slice(start, end)` cut at the run boundaries, each piece
|
|
1093
|
+
* placed from `x`. Hidden pieces take no room and are left out.
|
|
1094
|
+
*/
|
|
1095
|
+
cut(text: string, start: number, end: number, x: number): TextLineRun[];
|
|
1096
|
+
}
|
|
1097
|
+
/**
|
|
1098
|
+
* Builds the run widths for a request, or undefined when it has no
|
|
1099
|
+
* runs.
|
|
1100
|
+
*
|
|
1101
|
+
* One request object per run, built once: the paragraph cache means a
|
|
1102
|
+
* paragraph is laid out once per distinct request, so this runs once
|
|
1103
|
+
* per paragraph rather than once per frame.
|
|
1104
|
+
*/
|
|
1105
|
+
declare function spannedRunsFor(request: TextMeasureRequest, runs: Pick<TextRunMeasurer, 'measureRunWidth'>): SpannedRuns | undefined;
|
|
1106
|
+
/**
|
|
1107
|
+
* Base class for measurers: implement the two primitives and the
|
|
1108
|
+
* paragraph algorithm does the rest.
|
|
1109
|
+
*
|
|
1110
|
+
* **Every paragraph is laid out once per distinct request.** The same
|
|
1111
|
+
* request arrives several times a frame and on every frame after: the
|
|
1112
|
+
* layout engine asks when it measures the node, and both renderers ask
|
|
1113
|
+
* again when they paint it, because a `PaintState` and a box are all a
|
|
1114
|
+
* renderer holds. Without a cache a repaint is a line break, and a
|
|
1115
|
+
* transition that repaints the whole screen for half a second breaks
|
|
1116
|
+
* every paragraph on it sixty times a second. Measured on Sluice's
|
|
1117
|
+
* Bluesky feed opening a post: 30 to 50 ms a frame in `segmentParagraph`,
|
|
1118
|
+
* `measureRunWidth` and `applySpacing`, against under 13 ms on the same
|
|
1119
|
+
* click over short Wikipedia titles. The cache is keyed by every field
|
|
1120
|
+
* of the request, so a paragraph that changed in any way is laid out
|
|
1121
|
+
* again, and it is least-recently-used with a cap, so a feed that
|
|
1122
|
+
* mounts forty new rows a second does not grow it without bound.
|
|
1123
|
+
*
|
|
1124
|
+
* The result is shared between callers and must not be mutated.
|
|
1125
|
+
*/
|
|
1126
|
+
declare abstract class ParagraphTextMeasurer implements TextMeasurer, TextRunMeasurer {
|
|
1127
|
+
private readonly paragraphs;
|
|
1128
|
+
/**
|
|
1129
|
+
* Paragraphs that came out the same at every width they fit in, by
|
|
1130
|
+
* their key without the width; see `layoutFitsAnyWidth`.
|
|
1131
|
+
*
|
|
1132
|
+
* A resize asks every paragraph again at a width a few pixels from
|
|
1133
|
+
* the last, and a title, a caption or a label that fitted before
|
|
1134
|
+
* fits still: its lines, its box and everything else are what they
|
|
1135
|
+
* were. Keyed by its width as well, each of those missed on every
|
|
1136
|
+
* step of a dragged window edge and was laid out again, and the
|
|
1137
|
+
* box it was then painted in (its own width, exact) missed once
|
|
1138
|
+
* more.
|
|
1139
|
+
*/
|
|
1140
|
+
private readonly fitting;
|
|
1141
|
+
private generations;
|
|
1142
|
+
abstract measureRunWidth(text: string, request: TextMeasureRequest): number;
|
|
1143
|
+
abstract fontMetrics(request: TextMeasureRequest): FontMetrics;
|
|
1144
|
+
layout(request: TextMeasureRequest): ParagraphLayout;
|
|
1145
|
+
measure(request: TextMeasureRequest): Size;
|
|
1146
|
+
/** How many paragraphs are remembered right now; for specs. */
|
|
1147
|
+
get cachedParagraphs(): number;
|
|
1148
|
+
get generation(): number;
|
|
1149
|
+
/**
|
|
1150
|
+
* Forgets every laid-out paragraph. A subclass that caches its own
|
|
1151
|
+
* primitives overrides this and calls it, so a font that finished
|
|
1152
|
+
* loading invalidates the lines as well as the widths they were
|
|
1153
|
+
* built from.
|
|
1154
|
+
*/
|
|
1155
|
+
invalidate(): void;
|
|
1156
|
+
}
|
|
1157
|
+
interface FixedMetricsOptions {
|
|
1158
|
+
/** Advance of every glyph as a fraction of the font size. Default 0.6. */
|
|
1159
|
+
glyphWidth?: number;
|
|
1160
|
+
/** Ascent as a fraction of the font size. Default 0.8. */
|
|
1161
|
+
ascent?: number;
|
|
1162
|
+
/** Descent as a fraction of the font size. Default 0.2. */
|
|
1163
|
+
descent?: number;
|
|
1164
|
+
}
|
|
1165
|
+
/**
|
|
1166
|
+
* Deterministic measurer: every glyph is `glyphWidth` em wide, the
|
|
1167
|
+
* font is `ascent + descent` em tall, and the default line is 1.2em.
|
|
1168
|
+
*
|
|
1169
|
+
* Intended for tests and headless environments. With `glyphWidth: 1`
|
|
1170
|
+
* it reproduces the Ahem test font exactly, which is how the layout
|
|
1171
|
+
* conformance fixtures compare real wrapping text against Chrome.
|
|
1172
|
+
*/
|
|
1173
|
+
declare class CharacterCountTextMeasurer extends ParagraphTextMeasurer {
|
|
1174
|
+
private readonly glyphWidth;
|
|
1175
|
+
private readonly ascentFactor;
|
|
1176
|
+
private readonly descentFactor;
|
|
1177
|
+
constructor(options?: FixedMetricsOptions);
|
|
1178
|
+
measureRunWidth(text: string, request: TextMeasureRequest): number;
|
|
1179
|
+
fontMetrics(request: TextMeasureRequest): FontMetrics;
|
|
1180
|
+
}
|
|
1181
|
+
//#endregion
|
|
892
1182
|
//#region src/layout/LayoutRecord.d.ts
|
|
1183
|
+
/** A text leaf's paragraph, the request it was laid out for, and the measurer generation it was laid out under. */
|
|
1184
|
+
interface TextMemo {
|
|
1185
|
+
readonly request: TextMeasureRequest;
|
|
1186
|
+
readonly paragraph: ParagraphLayout;
|
|
1187
|
+
readonly generation: number;
|
|
1188
|
+
/** The paragraph is the same at any width it fits in; see `layoutFitsAnyWidth`. */
|
|
1189
|
+
readonly fitsAnyWidth: boolean;
|
|
1190
|
+
}
|
|
893
1191
|
/**
|
|
894
1192
|
* Mutable per-node layout projection owned by LayoutEngine.
|
|
895
1193
|
*
|
|
@@ -1058,6 +1356,8 @@ declare class LayoutRecord {
|
|
|
1058
1356
|
* multiline, the overlay scrollbars.
|
|
1059
1357
|
*/
|
|
1060
1358
|
scrollsText: boolean;
|
|
1359
|
+
/** A scroll container set to show no scrollbars (\`scrollbars: 'none'\`). */
|
|
1360
|
+
hidesScrollbars: boolean;
|
|
1061
1361
|
/**
|
|
1062
1362
|
* A multiline editable, which shows the overlay scrollbars a scroll
|
|
1063
1363
|
* container does over its own text. A single-line field scrolls
|
|
@@ -1122,6 +1422,23 @@ declare class LayoutRecord {
|
|
|
1122
1422
|
contentHeight: number;
|
|
1123
1423
|
/** Constraints this record was last measured under. */
|
|
1124
1424
|
lastConstraints: Constraints;
|
|
1425
|
+
/**
|
|
1426
|
+
* The paragraphs a text leaf was last measured as, one asked with a
|
|
1427
|
+
* width and one without; see `LayoutEngine.measureLeaf`. Flex asks
|
|
1428
|
+
* an item both questions every pass (its max-content basis, then its
|
|
1429
|
+
* final width), so one slot would be overwritten by the other every
|
|
1430
|
+
* time. Null until the node is measured as text that way.
|
|
1431
|
+
*
|
|
1432
|
+
* **Not reset.** These are the one thing a record carries from one
|
|
1433
|
+
* full pass into the next, on purpose: a full pass re-asks every
|
|
1434
|
+
* text leaf, and a memo that every pass cleared would answer
|
|
1435
|
+
* nothing a resize asks. They are safe to keep because they check
|
|
1436
|
+
* themselves — a memo is used only when every field of the request
|
|
1437
|
+
* it was laid out for matches and the measurer has not been
|
|
1438
|
+
* invalidated since — rather than trusting that nothing changed.
|
|
1439
|
+
*/
|
|
1440
|
+
textBounded: TextMemo | null;
|
|
1441
|
+
textUnbounded: TextMemo | null;
|
|
1125
1442
|
/**
|
|
1126
1443
|
* The percentage base the current measurement resolved against, and
|
|
1127
1444
|
* whether the node has a length that resolves against one.
|
|
@@ -1212,6 +1529,20 @@ declare class LayoutRecord {
|
|
|
1212
1529
|
propsPass: number;
|
|
1213
1530
|
propsBaseWidth: number | undefined;
|
|
1214
1531
|
propsBaseHeight: number | undefined;
|
|
1532
|
+
/**
|
|
1533
|
+
* The node's `propertyVersion` when its layout properties were last
|
|
1534
|
+
* resolved, and whether that resolution read the node and nothing
|
|
1535
|
+
* else (no inherited direction, no scroll leader). Together with the
|
|
1536
|
+
* percentage base they let a later pass, a full one included, keep
|
|
1537
|
+
* what the last one resolved instead of reading forty properties
|
|
1538
|
+
* again; see `LayoutEngine.resolveLayoutProps`.
|
|
1539
|
+
*
|
|
1540
|
+
* **Not reset,** with the fields they vouch for: `reset()` leaves
|
|
1541
|
+
* every field `resolveLayoutProps` writes as it was, because these
|
|
1542
|
+
* say whether it is still right.
|
|
1543
|
+
*/
|
|
1544
|
+
propsVersion: number;
|
|
1545
|
+
propsFromNodeAlone: boolean;
|
|
1215
1546
|
/**
|
|
1216
1547
|
* Returns the record to the state a freshly constructed one is in,
|
|
1217
1548
|
* so a full layout can reuse the object instead of replacing it.
|
|
@@ -1226,7 +1557,9 @@ declare class LayoutRecord {
|
|
|
1226
1557
|
* never reused across.
|
|
1227
1558
|
*
|
|
1228
1559
|
* **Every field above has to appear here, with the value it is
|
|
1229
|
-
* declared with
|
|
1560
|
+
* declared with,** but the two text memos and the resolved layout
|
|
1561
|
+
* properties, which check themselves and are kept across passes on
|
|
1562
|
+
* purpose. A field that is added and not reset would carry
|
|
1230
1563
|
* one pass's answer into the next, which is the kind of fault that
|
|
1231
1564
|
* shows as a stale box on a screen and as nothing at all in a test
|
|
1232
1565
|
* that lays out once. `LayoutRecord.spec.ts` compares a reset record
|
|
@@ -1722,8 +2055,23 @@ declare class UiNode {
|
|
|
1722
2055
|
* opacity → 0.5
|
|
1723
2056
|
* visible → true
|
|
1724
2057
|
* width → 200
|
|
2058
|
+
*
|
|
2059
|
+
* Read it directly; write it through `setProperty` and
|
|
2060
|
+
* `removeProperty`, which count the change in `propertyVersion`.
|
|
1725
2061
|
*/
|
|
1726
2062
|
readonly properties: Map<string, unknown>;
|
|
2063
|
+
/**
|
|
2064
|
+
* Counts writes to `properties`.
|
|
2065
|
+
*
|
|
2066
|
+
* Lets something derived from a node's own properties tell that it
|
|
2067
|
+
* is still right without reading them again. The layout engine
|
|
2068
|
+
* resolves forty of them into each record, and on a full pass over a
|
|
2069
|
+
* tree where nothing changed that reading was most of a sixth of the
|
|
2070
|
+
* pass. A counter is exact where a dirty flag is not: flags are
|
|
2071
|
+
* cleared by whichever pass runs next, and a record is resolved by
|
|
2072
|
+
* whichever pass reaches it.
|
|
2073
|
+
*/
|
|
2074
|
+
propertyVersion: number;
|
|
1727
2075
|
/**
|
|
1728
2076
|
* Values a modifier has written over the element's own.
|
|
1729
2077
|
*
|
|
@@ -1763,6 +2111,8 @@ declare class UiNode {
|
|
|
1763
2111
|
isDirty(): boolean;
|
|
1764
2112
|
getProperty<T>(property: NodeProperty): T | undefined;
|
|
1765
2113
|
setProperty<T>(property: NodeProperty, value: T): void;
|
|
2114
|
+
/** Removes a property; whether it was there. */
|
|
2115
|
+
removeProperty(property: NodeProperty): boolean;
|
|
1766
2116
|
}
|
|
1767
2117
|
//#endregion
|
|
1768
2118
|
//#region src/layout/LayoutTypes.d.ts
|
|
@@ -2064,6 +2414,8 @@ declare class DirtyNodeSet {
|
|
|
2064
2414
|
delete(node: UiNode): boolean;
|
|
2065
2415
|
get size(): number;
|
|
2066
2416
|
isEmpty(): boolean;
|
|
2417
|
+
/** The nodes in the set, without draining it. Not to be changed while walked. */
|
|
2418
|
+
values(): IterableIterator<UiNode>;
|
|
2067
2419
|
/**
|
|
2068
2420
|
* Whether any node in the set carries one of `flags`, without
|
|
2069
2421
|
* draining it.
|
|
@@ -3023,8 +3375,13 @@ declare class UiFocusManager {
|
|
|
3023
3375
|
* when that scope was pushed, when that node is still in the tree
|
|
3024
3376
|
* and still focusable. Otherwise focus is dropped rather than left
|
|
3025
3377
|
* on a node the scope was hiding.
|
|
3378
|
+
*
|
|
3379
|
+
* Given its root, only that scope ends: none, when it has gone already
|
|
3380
|
+
* (its subtree removed, which pops it), so a trap released after its
|
|
3381
|
+
* content was taken away cannot end the one under it, a submenu's
|
|
3382
|
+
* menu's; and one under another is taken out where it is.
|
|
3026
3383
|
*/
|
|
3027
|
-
popScope(): void;
|
|
3384
|
+
popScope(root?: UiNode): void;
|
|
3028
3385
|
/**
|
|
3029
3386
|
* Reacts to a subtree leaving the graph.
|
|
3030
3387
|
*
|
|
@@ -5189,6 +5546,19 @@ interface LazyListOptions {
|
|
|
5189
5546
|
readonly estimatedExtent: number;
|
|
5190
5547
|
/** Items mounted beyond each edge of the viewport. Default 3. */
|
|
5191
5548
|
readonly overscan?: number;
|
|
5549
|
+
/**
|
|
5550
|
+
* Reuse an item's node for the item that takes its place, as a native
|
|
5551
|
+
* list recycles its cells: an item scrolling out of the window hands its
|
|
5552
|
+
* node, and its component, to the one scrolling in, which is given the
|
|
5553
|
+
* new index. Nothing is built or torn down as the list scrolls, only
|
|
5554
|
+
* updated, which is most of what a scroll through rows of many nodes
|
|
5555
|
+
* costs.
|
|
5556
|
+
*
|
|
5557
|
+
* \`key\` is not used: items are keyed by their slot. The component an
|
|
5558
|
+
* item renders must follow its inputs as they change, since one keeps
|
|
5559
|
+
* its instance from item to item.
|
|
5560
|
+
*/
|
|
5561
|
+
readonly recycle?: boolean;
|
|
5192
5562
|
/** Identity of an item, for reconciliation. Default: its index. */
|
|
5193
5563
|
readonly key?: (index: number) => string | number;
|
|
5194
5564
|
/**
|
|
@@ -5293,6 +5663,15 @@ declare class UiVirtualWindow {
|
|
|
5293
5663
|
private count;
|
|
5294
5664
|
private readonly estimate;
|
|
5295
5665
|
private readonly overscan;
|
|
5666
|
+
private readonly recycle;
|
|
5667
|
+
/**
|
|
5668
|
+
* The slot each mounted item is keyed by, when recycling: an item keeps
|
|
5669
|
+
* its slot while it stays, and one leaving gives its slot to the next
|
|
5670
|
+
* one to come, whose element then matches the node it leaves behind.
|
|
5671
|
+
*/
|
|
5672
|
+
private readonly slotOf;
|
|
5673
|
+
private readonly freeSlots;
|
|
5674
|
+
private nextSlot;
|
|
5296
5675
|
private readonly keyOf;
|
|
5297
5676
|
private readonly renderItem;
|
|
5298
5677
|
private readonly grid;
|
|
@@ -6443,6 +6822,14 @@ declare const UiProperties: {
|
|
|
6443
6822
|
* descendants stick to its edges.
|
|
6444
6823
|
*/
|
|
6445
6824
|
readonly overflow: UiPropertyDefinition<UiOverflow | undefined>;
|
|
6825
|
+
/**
|
|
6826
|
+
* Whether a scroll container shows its overlay scrollbars: \`'auto'\`
|
|
6827
|
+
* (the default) while scrolling, \`'none'\` never, and then they cannot
|
|
6828
|
+
* be grabbed either. For a container scrolled by something else, as a
|
|
6829
|
+
* picture is moved inside a window onto it, where a bar would claim
|
|
6830
|
+
* the person could scroll it.
|
|
6831
|
+
*/
|
|
6832
|
+
readonly scrollbars: UiPropertyDefinition<"auto" | "none" | undefined>;
|
|
6446
6833
|
readonly inset: UiPropertyDefinition<UiLength | undefined>;
|
|
6447
6834
|
readonly backgroundColor: UiPropertyDefinition<UiColorValue | undefined>;
|
|
6448
6835
|
/**
|
|
@@ -6537,6 +6924,12 @@ declare const UiProperties: {
|
|
|
6537
6924
|
readonly multiline: UiPropertyDefinition<boolean | undefined>;
|
|
6538
6925
|
/** The text can be selected and copied but not changed. */
|
|
6539
6926
|
readonly readOnly: UiPropertyDefinition<boolean | undefined>;
|
|
6927
|
+
/**
|
|
6928
|
+
* A password field: every character is drawn as a bullet, copy and
|
|
6929
|
+
* cut take nothing, and the shell edits it through a password input.
|
|
6930
|
+
* The value itself is unchanged. Single-line only.
|
|
6931
|
+
*/
|
|
6932
|
+
readonly secret: UiPropertyDefinition<boolean | undefined>;
|
|
6540
6933
|
/** Colour of the caret; defaults to the text colour. */
|
|
6541
6934
|
readonly caretColor: UiPropertyDefinition<UiColorValue | undefined>;
|
|
6542
6935
|
/** Colour behind selected text; defaults to a translucent theme primary. */
|
|
@@ -6949,7 +7342,7 @@ type CommonProps = IdentityProps & UiEventProps & BoxModelProps & FlexItemProps
|
|
|
6949
7342
|
* layout replaces whatever the container would have done with its
|
|
6950
7343
|
* children, whichever container it is; see `layout/CustomLayout.ts`.
|
|
6951
7344
|
*/
|
|
6952
|
-
type ContainerProps = CommonProps & PropsOf<'overflow' | 'scrollX' | 'scrollY' | 'scrollWith' | 'scrollWithAxis' | 'scrollBehavior' | 'overscrollBehavior' | 'layout'>;
|
|
7345
|
+
type ContainerProps = CommonProps & PropsOf<'overflow' | 'scrollbars' | 'scrollX' | 'scrollY' | 'scrollWith' | 'scrollWithAxis' | 'scrollBehavior' | 'overscrollBehavior' | 'layout'>;
|
|
6953
7346
|
/** Props of a flex container: Row, Column, ScrollView. */
|
|
6954
7347
|
type FlexContainerProps = ContainerProps & PropsOf<'gap' | 'rowGap' | 'columnGap' | 'x' | 'y' | 'flexWrap' | 'alignContent' | 'direction'>;
|
|
6955
7348
|
/**
|
|
@@ -6975,7 +7368,7 @@ type TextProps = CommonProps & TextContentProps;
|
|
|
6975
7368
|
* offset into the model's string, and runs describing a different one
|
|
6976
7369
|
* would put the glyphs where the caret does not agree with them.
|
|
6977
7370
|
*/
|
|
6978
|
-
type EditableTextProps = CommonProps & PropsOf<'value' | 'spans' | 'placeholder' | 'multiline' | 'readOnly' | 'textWrap' | 'verticalAlign' | 'caretColor' | 'selectionColor' | 'placeholderColor'>;
|
|
7371
|
+
type EditableTextProps = CommonProps & PropsOf<'value' | 'spans' | 'placeholder' | 'multiline' | 'readOnly' | 'secret' | 'textWrap' | 'verticalAlign' | 'caretColor' | 'selectionColor' | 'placeholderColor'>;
|
|
6979
7372
|
/**
|
|
6980
7373
|
* A Box stacks its children in one content box, aligned by `x` / `y`,
|
|
6981
7374
|
* and may draw an image behind them.
|
|
@@ -7083,6 +7476,15 @@ interface UiGraphBuilderOptions {
|
|
|
7083
7476
|
declare class UiGraphBuilder {
|
|
7084
7477
|
private readonly graph;
|
|
7085
7478
|
private readonly refs;
|
|
7479
|
+
/**
|
|
7480
|
+
* The definition each node was last reconciled from. A definition is
|
|
7481
|
+
* a description that is never changed once made, so the same object
|
|
7482
|
+
* again has nothing new to say: a lazy list hands back the row it made
|
|
7483
|
+
* for an index on every scroll, and reconciling seventy unchanged rows
|
|
7484
|
+
* (their props, then every node of each row's component) to mount the
|
|
7485
|
+
* four that scrolled in cost a 165 Hz frame its budget.
|
|
7486
|
+
*/
|
|
7487
|
+
private readonly reconciledFrom;
|
|
7086
7488
|
private readonly modifiers;
|
|
7087
7489
|
private nextChildrenBindingId;
|
|
7088
7490
|
/**
|
|
@@ -7442,6 +7844,14 @@ declare class UiGraph {
|
|
|
7442
7844
|
*/
|
|
7443
7845
|
insertBefore(parent: UiNode, child: UiNode, reference: UiNode | null): void;
|
|
7444
7846
|
removeNode(node: UiNode): void;
|
|
7847
|
+
/**
|
|
7848
|
+
* Moves a child before \`reference\` among its own siblings, or to the
|
|
7849
|
+
* end when that is null. Its parent is unchanged, and so is everything
|
|
7850
|
+
* it inherits, so its subtree is not visited: a lazy list recycling its
|
|
7851
|
+
* rows moves one from end to end on every frame of a scroll, and
|
|
7852
|
+
* re-inheriting walked the whole row each time.
|
|
7853
|
+
*/
|
|
7854
|
+
moveWithin(child: UiNode, reference: UiNode | null): void;
|
|
7445
7855
|
detachNode(node: UiNode): void;
|
|
7446
7856
|
/**
|
|
7447
7857
|
* The binding driving one property of one node, if any.
|
|
@@ -7971,377 +8381,119 @@ declare function graphemeBoundaries(text: string): number[];
|
|
|
7971
8381
|
*/
|
|
7972
8382
|
declare function nextWordEnd(text: string, index: number): number;
|
|
7973
8383
|
/**
|
|
7974
|
-
* Where a word-wise move to the left stops: back over spaces and
|
|
7975
|
-
* punctuation, to the start of the previous word.
|
|
7976
|
-
*/
|
|
7977
|
-
declare function previousWordStart(text: string, index: number): number;
|
|
7978
|
-
/**
|
|
7979
|
-
* The word under `index`, for a double-click: a run of word
|
|
7980
|
-
* characters, else the run of whatever else is there (spaces,
|
|
7981
|
-
* punctuation), never crossing a newline.
|
|
7982
|
-
*/
|
|
7983
|
-
declare function wordRangeAt(text: string, index: number): {
|
|
7984
|
-
start: number;
|
|
7985
|
-
end: number;
|
|
7986
|
-
};
|
|
7987
|
-
/** The offset just after the previous newline, or 0. */
|
|
7988
|
-
declare function lineStartAt(text: string, index: number): number;
|
|
7989
|
-
/** The offset of the next newline, or `text.length`. */
|
|
7990
|
-
declare function lineEndAt(text: string, index: number): number;
|
|
7991
|
-
//#endregion
|
|
7992
|
-
//#region src/editing/TextGeometry.d.ts
|
|
7993
|
-
/**
|
|
7994
|
-
* A placed line, as `placeLines` in the text renderer produces: the
|
|
7995
|
-
* source offsets it covers, its box after alignment, and its text.
|
|
7996
|
-
*/
|
|
7997
|
-
interface PlacedLine {
|
|
7998
|
-
readonly text: string;
|
|
7999
|
-
readonly start: number;
|
|
8000
|
-
readonly end: number;
|
|
8001
|
-
readonly x: number;
|
|
8002
|
-
readonly y: number;
|
|
8003
|
-
readonly width: number;
|
|
8004
|
-
readonly height: number;
|
|
8005
|
-
}
|
|
8006
|
-
/**
|
|
8007
|
-
* The advance width of a run in the paragraph's font.
|
|
8008
|
-
*
|
|
8009
|
-
* `start` is the run's first character's offset in the source text,
|
|
8010
|
-
* and is what a paragraph with runs of its own needs to know which
|
|
8011
|
-
* font to measure in; a paragraph in one font ignores it. Omitted for
|
|
8012
|
-
* a string that is not in the text at all, such as the space a
|
|
8013
|
-
* selection past the end of a line is widened by.
|
|
8014
|
-
*/
|
|
8015
|
-
type RunMeasure = (text: string, start?: number) => number;
|
|
8016
|
-
interface CaretRect {
|
|
8017
|
-
x: number;
|
|
8018
|
-
y: number;
|
|
8019
|
-
height: number;
|
|
8020
|
-
/** Index of the line the caret is on. */
|
|
8021
|
-
line: number;
|
|
8022
|
-
}
|
|
8023
|
-
/**
|
|
8024
|
-
* Caret and selection geometry over laid-out lines.
|
|
8025
|
-
*
|
|
8026
|
-
* The lines are the paragraph the layout engine sized the node with
|
|
8027
|
-
* and the renderer draws, so a caret computed here sits exactly where
|
|
8028
|
-
* the glyphs are. Widths come from the same measurer: the x of offset
|
|
8029
|
-
* `n` on a line is the width of that line's first `n` characters.
|
|
8030
|
-
*
|
|
8031
|
-
* Direction: `rtl` mirrors every x against the line's right edge, so a
|
|
8032
|
-
* right-to-left paragraph places its caret and selection from the
|
|
8033
|
-
* right. Runs of mixed direction within one line are not reordered —
|
|
8034
|
-
* the renderers do not shape them either — so this is direction-aware
|
|
8035
|
-
* rather than fully bidirectional, and says so.
|
|
8036
|
-
*/
|
|
8037
|
-
/**
|
|
8038
|
-
* The line an offset belongs to. Hanging spaces at a wrap belong to
|
|
8039
|
-
* the line before the break; the first character after the break
|
|
8040
|
-
* starts the next line.
|
|
8041
|
-
*/
|
|
8042
|
-
declare function lineIndexForOffset(lines: readonly PlacedLine[], offset: number): number;
|
|
8043
|
-
/**
|
|
8044
|
-
* The offset a line's caret positions run to, hanging spaces included:
|
|
8045
|
-
* the text's end on the last line, else up to the break — the newline
|
|
8046
|
-
* character itself, or the first character of the next line.
|
|
8047
|
-
*
|
|
8048
|
-
* `line.end` stops at the last glyph, since spaces at a wrap hang and
|
|
8049
|
-
* have no width in layout. The caret still has to move through them,
|
|
8050
|
-
* as it does in a textarea, so geometry measures them from `text`.
|
|
8051
|
-
*/
|
|
8052
|
-
declare function lineLimit(lines: readonly PlacedLine[], index: number, text: string): number;
|
|
8053
|
-
/** Where the caret for `offset` is drawn. */
|
|
8054
|
-
declare function caretRectFor(lines: readonly PlacedLine[], text: string, offset: number, measure: RunMeasure, rtl: boolean): CaretRect;
|
|
8055
|
-
/** The line whose box contains `y`, clamped to the first and last. */
|
|
8056
|
-
declare function lineIndexAtY(lines: readonly PlacedLine[], y: number): number;
|
|
8057
|
-
/** The caret position nearest to a point: the boundary closest to `x` on the line under `y`. */
|
|
8058
|
-
declare function offsetAtPoint(lines: readonly PlacedLine[], text: string, x: number, y: number, measure: RunMeasure, rtl: boolean): number;
|
|
8059
|
-
/**
|
|
8060
|
-
* The caret position on one line nearest to `x`. Widths grow with the
|
|
8061
|
-
* prefix, so the boundary is found by bisection: O(log n) measures per
|
|
8062
|
-
* click on a line of n graphemes.
|
|
8063
|
-
*
|
|
8064
|
-
* On the last line the trailing spaces are positions too, so a click
|
|
8065
|
-
* past the text lands after them. On a wrapped line the hanging spaces
|
|
8066
|
-
* are not: a click past the glyphs stops before the break, as it does
|
|
8067
|
-
* in a textarea.
|
|
8068
|
-
*/
|
|
8069
|
-
declare function offsetAtX(lines: readonly PlacedLine[], index: number, text: string, x: number, measure: RunMeasure, rtl: boolean): number;
|
|
8070
|
-
/**
|
|
8071
|
-
* The offset a vertical move lands on: the position nearest the
|
|
8072
|
-
* caret's x (or `goalX`, the x of the line the run of moves started
|
|
8073
|
-
* on) on the adjacent line. Null when there is no line that way, which
|
|
8074
|
-
* callers turn into "go to the start / end of the text".
|
|
8075
|
-
*/
|
|
8076
|
-
declare function offsetForVerticalMove(lines: readonly PlacedLine[], text: string, offset: number, direction: -1 | 1, measure: RunMeasure, rtl: boolean, goalX?: number): {
|
|
8077
|
-
offset: number;
|
|
8078
|
-
x: number;
|
|
8079
|
-
} | null;
|
|
8080
|
-
/**
|
|
8081
|
-
* The boxes covering `[start, end)`, one per line touched. Hanging
|
|
8082
|
-
* spaces inside the range are highlighted at their width; a line the
|
|
8083
|
-
* range runs past with nothing hanging gets a space's width more, so a
|
|
8084
|
-
* selected line break is visible.
|
|
8085
|
-
*/
|
|
8086
|
-
declare function selectionRects(lines: readonly PlacedLine[], text: string, start: number, end: number, measure: RunMeasure, rtl: boolean): LayoutBox[];
|
|
8087
|
-
//#endregion
|
|
8088
|
-
//#region src/layout/TextMeasurer.d.ts
|
|
8089
|
-
type TextWrap = 'word' | 'char' | 'none';
|
|
8090
|
-
type TextOverflow = 'clip' | 'ellipsis';
|
|
8091
|
-
/**
|
|
8092
|
-
* The font a piece of text is measured in.
|
|
8093
|
-
*
|
|
8094
|
-
* Structural rather than imported so that layout keeps depending on
|
|
8095
|
-
* nothing above it; a `UiResolvedTextSpan` is one of these plus the
|
|
8096
|
-
* fields that only paint reads.
|
|
8097
|
-
*/
|
|
8098
|
-
interface TextRunStyle {
|
|
8099
|
-
fontFamily?: string;
|
|
8100
|
-
fontWeight?: string | number;
|
|
8101
|
-
fontSize?: number;
|
|
8102
|
-
fontStyle?: string;
|
|
8103
|
-
fontStretch?: string;
|
|
8104
|
-
fontVariant?: string;
|
|
8105
|
-
fontKerning?: string;
|
|
8106
|
-
letterSpacing?: number;
|
|
8107
|
-
}
|
|
8108
|
-
/** A run of the paragraph with a font of its own, as offsets into the text. */
|
|
8109
|
-
interface TextRunSpan extends TextRunStyle {
|
|
8110
|
-
readonly start: number;
|
|
8111
|
-
readonly end: number;
|
|
8112
|
-
/**
|
|
8113
|
-
* The run is in the text but takes no room: every width that touches
|
|
8114
|
-
* it counts it as nothing, and a line's `runs` leave it out, so no
|
|
8115
|
-
* renderer has anything to draw for it.
|
|
8116
|
-
*/
|
|
8117
|
-
readonly hidden?: boolean;
|
|
8118
|
-
}
|
|
8119
|
-
interface TextMeasureRequest {
|
|
8120
|
-
text: string;
|
|
8121
|
-
fontSize: number;
|
|
8122
|
-
/** Available width. Wrapping and fit-content sizing happen against it. */
|
|
8123
|
-
maxWidth?: number;
|
|
8124
|
-
/**
|
|
8125
|
-
* Font family for platforms that can shape text.
|
|
8126
|
-
*
|
|
8127
|
-
* Deterministic measurers may ignore every style field; they
|
|
8128
|
-
* are hints for platform-backed implementations only.
|
|
8129
|
-
*/
|
|
8130
|
-
fontFamily?: string;
|
|
8131
|
-
fontWeight?: string | number;
|
|
8132
|
-
lineHeight?: number;
|
|
8133
|
-
letterSpacing?: number;
|
|
8134
|
-
fontStyle?: string;
|
|
8135
|
-
fontStretch?: string;
|
|
8136
|
-
fontVariant?: string;
|
|
8137
|
-
fontKerning?: string;
|
|
8138
|
-
/** Default 'word'. */
|
|
8139
|
-
wrap?: TextWrap;
|
|
8140
|
-
/** Keep at most this many lines. */
|
|
8141
|
-
maxLines?: number;
|
|
8142
|
-
/** What happens to a line that does not fit. Default 'clip'. */
|
|
8143
|
-
overflow?: TextOverflow;
|
|
8144
|
-
/**
|
|
8145
|
-
* Runs of `text` with a font of their own, in order and not
|
|
8146
|
-
* overlapping. Text outside every run is measured in the request's
|
|
8147
|
-
* own font.
|
|
8148
|
-
*
|
|
8149
|
-
* Only the fields that change a width are here. A run that differs
|
|
8150
|
-
* from its neighbours only in colour, background or underline is not
|
|
8151
|
-
* in this list at all, so it costs a paint and never a re-layout.
|
|
8152
|
-
*/
|
|
8153
|
-
spans?: readonly TextRunSpan[];
|
|
8154
|
-
}
|
|
8155
|
-
/** One run of a line: where it sits in the line and which span it came from. */
|
|
8156
|
-
interface TextLineRun {
|
|
8157
|
-
/** Index into the request's `spans`, or -1 for text outside every run. */
|
|
8158
|
-
span: number;
|
|
8159
|
-
/** Offsets into the source text. */
|
|
8160
|
-
start: number;
|
|
8161
|
-
end: number;
|
|
8162
|
-
text: string;
|
|
8163
|
-
/** Distance from the line's left edge to this run's left edge. */
|
|
8164
|
-
x: number;
|
|
8165
|
-
width: number;
|
|
8166
|
-
}
|
|
8167
|
-
/** One laid-out line. `text` is what gets drawn and may end in an ellipsis. */
|
|
8168
|
-
interface TextLine {
|
|
8169
|
-
/** Offsets into the source text; hanging spaces and the ellipsis are outside them. */
|
|
8170
|
-
start: number;
|
|
8171
|
-
end: number;
|
|
8172
|
-
text: string;
|
|
8173
|
-
width: number;
|
|
8174
|
-
/**
|
|
8175
|
-
* The line cut at its runs, present only for a paragraph that has
|
|
8176
|
-
* spans. A hidden run is not among them.
|
|
8177
|
-
*
|
|
8178
|
-
* Measured once, here, where the line's own width is measured. That
|
|
8179
|
-
* is what keeps a spanned paragraph as cheap to paint as a plain
|
|
8180
|
-
* one: a renderer walks these and asks the platform for nothing.
|
|
8181
|
-
*/
|
|
8182
|
-
runs?: readonly TextLineRun[];
|
|
8183
|
-
}
|
|
8184
|
-
interface FontMetrics {
|
|
8185
|
-
/** Distance from the alphabetic baseline to the top of the glyph box. */
|
|
8186
|
-
ascent: number;
|
|
8187
|
-
/** Distance from the alphabetic baseline to the bottom of the glyph box. */
|
|
8188
|
-
descent: number;
|
|
8384
|
+
* Where a word-wise move to the left stops: back over spaces and
|
|
8385
|
+
* punctuation, to the start of the previous word.
|
|
8386
|
+
*/
|
|
8387
|
+
declare function previousWordStart(text: string, index: number): number;
|
|
8388
|
+
/**
|
|
8389
|
+
* The word under `index`, for a double-click: a run of word
|
|
8390
|
+
* characters, else the run of whatever else is there (spaces,
|
|
8391
|
+
* punctuation), never crossing a newline.
|
|
8392
|
+
*/
|
|
8393
|
+
declare function wordRangeAt(text: string, index: number): {
|
|
8394
|
+
start: number;
|
|
8395
|
+
end: number;
|
|
8396
|
+
};
|
|
8397
|
+
/** The offset just after the previous newline, or 0. */
|
|
8398
|
+
declare function lineStartAt(text: string, index: number): number;
|
|
8399
|
+
/** The offset of the next newline, or `text.length`. */
|
|
8400
|
+
declare function lineEndAt(text: string, index: number): number;
|
|
8401
|
+
//#endregion
|
|
8402
|
+
//#region src/editing/TextGeometry.d.ts
|
|
8403
|
+
/**
|
|
8404
|
+
* A placed line, as `placeLines` in the text renderer produces: the
|
|
8405
|
+
* source offsets it covers, its box after alignment, and its text.
|
|
8406
|
+
*/
|
|
8407
|
+
interface PlacedLine {
|
|
8408
|
+
readonly text: string;
|
|
8409
|
+
readonly start: number;
|
|
8410
|
+
readonly end: number;
|
|
8411
|
+
readonly x: number;
|
|
8412
|
+
readonly y: number;
|
|
8413
|
+
readonly width: number;
|
|
8414
|
+
readonly height: number;
|
|
8189
8415
|
}
|
|
8190
8416
|
/**
|
|
8191
|
-
*
|
|
8417
|
+
* The advance width of a run in the paragraph's font.
|
|
8192
8418
|
*
|
|
8193
|
-
* `
|
|
8194
|
-
*
|
|
8195
|
-
*
|
|
8419
|
+
* `start` is the run's first character's offset in the source text,
|
|
8420
|
+
* and is what a paragraph with runs of its own needs to know which
|
|
8421
|
+
* font to measure in; a paragraph in one font ignores it. Omitted for
|
|
8422
|
+
* a string that is not in the text at all, such as the space a
|
|
8423
|
+
* selection past the end of a line is widened by.
|
|
8196
8424
|
*/
|
|
8197
|
-
|
|
8198
|
-
|
|
8199
|
-
|
|
8425
|
+
type RunMeasure = (text: string, start?: number) => number;
|
|
8426
|
+
interface CaretRect {
|
|
8427
|
+
x: number;
|
|
8428
|
+
y: number;
|
|
8200
8429
|
height: number;
|
|
8201
|
-
|
|
8202
|
-
|
|
8203
|
-
descent: number;
|
|
8204
|
-
firstBaseline: number;
|
|
8205
|
-
/** Widest unbreakable segment under the requested wrap mode. */
|
|
8206
|
-
minContentWidth: number;
|
|
8207
|
-
/** Width with no wrapping at all. */
|
|
8208
|
-
maxContentWidth: number;
|
|
8430
|
+
/** Index of the line the caret is on. */
|
|
8431
|
+
line: number;
|
|
8209
8432
|
}
|
|
8210
8433
|
/**
|
|
8211
|
-
*
|
|
8434
|
+
* Caret and selection geometry over laid-out lines.
|
|
8212
8435
|
*
|
|
8213
|
-
*
|
|
8214
|
-
*
|
|
8436
|
+
* The lines are the paragraph the layout engine sized the node with
|
|
8437
|
+
* and the renderer draws, so a caret computed here sits exactly where
|
|
8438
|
+
* the glyphs are. Widths come from the same measurer: the x of offset
|
|
8439
|
+
* `n` on a line is the width of that line's first `n` characters.
|
|
8440
|
+
*
|
|
8441
|
+
* Direction: `rtl` mirrors every x against the line's right edge, so a
|
|
8442
|
+
* right-to-left paragraph places its caret and selection from the
|
|
8443
|
+
* right. Runs of mixed direction within one line are not reordered —
|
|
8444
|
+
* the renderers do not shape them either — so this is direction-aware
|
|
8445
|
+
* rather than fully bidirectional, and says so.
|
|
8215
8446
|
*/
|
|
8216
|
-
interface TextMeasurer {
|
|
8217
|
-
measure(request: TextMeasureRequest): Size;
|
|
8218
|
-
layout(request: TextMeasureRequest): ParagraphLayout;
|
|
8219
|
-
/**
|
|
8220
|
-
* The advance width of one run in the request's font. Caret and
|
|
8221
|
-
* selection geometry is built from prefix widths, so it has to come
|
|
8222
|
-
* from the same source as the line widths.
|
|
8223
|
-
*/
|
|
8224
|
-
measureRunWidth(text: string, request: TextMeasureRequest): number;
|
|
8225
|
-
/**
|
|
8226
|
-
* Forgets every cached answer. Called when what a font string means
|
|
8227
|
-
* has changed under the measurer: a declared face finished loading,
|
|
8228
|
-
* so widths measured with its fallback are wrong now. Measurers with
|
|
8229
|
-
* nothing cached need not implement it.
|
|
8230
|
-
*/
|
|
8231
|
-
invalidate?(): void;
|
|
8232
|
-
}
|
|
8233
8447
|
/**
|
|
8234
|
-
* The
|
|
8235
|
-
*
|
|
8236
|
-
*
|
|
8448
|
+
* The line an offset belongs to. Hanging spaces at a wrap belong to
|
|
8449
|
+
* the line before the break; the first character after the break
|
|
8450
|
+
* starts the next line.
|
|
8237
8451
|
*/
|
|
8238
|
-
|
|
8239
|
-
measureRunWidth(text: string, request: TextMeasureRequest): number;
|
|
8240
|
-
fontMetrics(request: TextMeasureRequest): FontMetrics;
|
|
8241
|
-
}
|
|
8452
|
+
declare function lineIndexForOffset(lines: readonly PlacedLine[], offset: number): number;
|
|
8242
8453
|
/**
|
|
8243
|
-
* The
|
|
8454
|
+
* The offset a line's caret positions run to, hanging spaces included:
|
|
8455
|
+
* the text's end on the last line, else up to the break — the newline
|
|
8456
|
+
* character itself, or the first character of the next line.
|
|
8244
8457
|
*
|
|
8245
|
-
*
|
|
8246
|
-
*
|
|
8247
|
-
*
|
|
8248
|
-
* splits that stretch at the run boundaries and measures each piece in
|
|
8249
|
-
* its own font. That is the whole of what a span costs: the paragraph
|
|
8250
|
-
* algorithm is unchanged, and a paragraph with no spans never builds
|
|
8251
|
-
* one of these at all.
|
|
8458
|
+
* `line.end` stops at the last glyph, since spaces at a wrap hang and
|
|
8459
|
+
* have no width in layout. The caret still has to move through them,
|
|
8460
|
+
* as it does in a textarea, so geometry measures them from `text`.
|
|
8252
8461
|
*/
|
|
8253
|
-
|
|
8254
|
-
|
|
8255
|
-
|
|
8256
|
-
|
|
8257
|
-
|
|
8258
|
-
|
|
8259
|
-
|
|
8260
|
-
/** Whether the character at `offset` is in a hidden run. */
|
|
8261
|
-
hiddenAt(offset: number): boolean;
|
|
8262
|
-
/** Width of `text.slice(start, end)`, measured run by run. */
|
|
8263
|
-
width(text: string, start: number, end: number): number;
|
|
8264
|
-
/**
|
|
8265
|
-
* Width of a string that is not in the text, in the font of the run
|
|
8266
|
-
* covering `offset`: the ellipsis, and the space a tab is counted
|
|
8267
|
-
* as.
|
|
8268
|
-
*/
|
|
8269
|
-
widthOf(run: string, offset: number): number;
|
|
8270
|
-
/**
|
|
8271
|
-
* `text.slice(start, end)` cut at the run boundaries, each piece
|
|
8272
|
-
* placed from `x`. Hidden pieces take no room and are left out.
|
|
8273
|
-
*/
|
|
8274
|
-
cut(text: string, start: number, end: number, x: number): TextLineRun[];
|
|
8275
|
-
}
|
|
8462
|
+
declare function lineLimit(lines: readonly PlacedLine[], index: number, text: string): number;
|
|
8463
|
+
/** Where the caret for `offset` is drawn. */
|
|
8464
|
+
declare function caretRectFor(lines: readonly PlacedLine[], text: string, offset: number, measure: RunMeasure, rtl: boolean): CaretRect;
|
|
8465
|
+
/** The line whose box contains `y`, clamped to the first and last. */
|
|
8466
|
+
declare function lineIndexAtY(lines: readonly PlacedLine[], y: number): number;
|
|
8467
|
+
/** The caret position nearest to a point: the boundary closest to `x` on the line under `y`. */
|
|
8468
|
+
declare function offsetAtPoint(lines: readonly PlacedLine[], text: string, x: number, y: number, measure: RunMeasure, rtl: boolean): number;
|
|
8276
8469
|
/**
|
|
8277
|
-
*
|
|
8278
|
-
*
|
|
8470
|
+
* The caret position on one line nearest to `x`. Widths grow with the
|
|
8471
|
+
* prefix, so the boundary is found by bisection: O(log n) measures per
|
|
8472
|
+
* click on a line of n graphemes.
|
|
8279
8473
|
*
|
|
8280
|
-
*
|
|
8281
|
-
*
|
|
8282
|
-
*
|
|
8474
|
+
* On the last line the trailing spaces are positions too, so a click
|
|
8475
|
+
* past the text lands after them. On a wrapped line the hanging spaces
|
|
8476
|
+
* are not: a click past the glyphs stops before the break, as it does
|
|
8477
|
+
* in a textarea.
|
|
8283
8478
|
*/
|
|
8284
|
-
declare function
|
|
8479
|
+
declare function offsetAtX(lines: readonly PlacedLine[], index: number, text: string, x: number, measure: RunMeasure, rtl: boolean): number;
|
|
8285
8480
|
/**
|
|
8286
|
-
*
|
|
8287
|
-
*
|
|
8288
|
-
*
|
|
8289
|
-
*
|
|
8290
|
-
* request arrives several times a frame and on every frame after: the
|
|
8291
|
-
* layout engine asks when it measures the node, and both renderers ask
|
|
8292
|
-
* again when they paint it, because a `PaintState` and a box are all a
|
|
8293
|
-
* renderer holds. Without a cache a repaint is a line break, and a
|
|
8294
|
-
* transition that repaints the whole screen for half a second breaks
|
|
8295
|
-
* every paragraph on it sixty times a second. Measured on Sluice's
|
|
8296
|
-
* Bluesky feed opening a post: 30 to 50 ms a frame in `segmentParagraph`,
|
|
8297
|
-
* `measureRunWidth` and `applySpacing`, against under 13 ms on the same
|
|
8298
|
-
* click over short Wikipedia titles. The cache is keyed by every field
|
|
8299
|
-
* of the request, so a paragraph that changed in any way is laid out
|
|
8300
|
-
* again, and it is least-recently-used with a cap, so a feed that
|
|
8301
|
-
* mounts forty new rows a second does not grow it without bound.
|
|
8302
|
-
*
|
|
8303
|
-
* The result is shared between callers and must not be mutated.
|
|
8481
|
+
* The offset a vertical move lands on: the position nearest the
|
|
8482
|
+
* caret's x (or `goalX`, the x of the line the run of moves started
|
|
8483
|
+
* on) on the adjacent line. Null when there is no line that way, which
|
|
8484
|
+
* callers turn into "go to the start / end of the text".
|
|
8304
8485
|
*/
|
|
8305
|
-
declare
|
|
8306
|
-
|
|
8307
|
-
|
|
8308
|
-
|
|
8309
|
-
layout(request: TextMeasureRequest): ParagraphLayout;
|
|
8310
|
-
measure(request: TextMeasureRequest): Size;
|
|
8311
|
-
/** How many paragraphs are remembered right now; for specs. */
|
|
8312
|
-
get cachedParagraphs(): number;
|
|
8313
|
-
/**
|
|
8314
|
-
* Forgets every laid-out paragraph. A subclass that caches its own
|
|
8315
|
-
* primitives overrides this and calls it, so a font that finished
|
|
8316
|
-
* loading invalidates the lines as well as the widths they were
|
|
8317
|
-
* built from.
|
|
8318
|
-
*/
|
|
8319
|
-
invalidate(): void;
|
|
8320
|
-
}
|
|
8321
|
-
interface FixedMetricsOptions {
|
|
8322
|
-
/** Advance of every glyph as a fraction of the font size. Default 0.6. */
|
|
8323
|
-
glyphWidth?: number;
|
|
8324
|
-
/** Ascent as a fraction of the font size. Default 0.8. */
|
|
8325
|
-
ascent?: number;
|
|
8326
|
-
/** Descent as a fraction of the font size. Default 0.2. */
|
|
8327
|
-
descent?: number;
|
|
8328
|
-
}
|
|
8486
|
+
declare function offsetForVerticalMove(lines: readonly PlacedLine[], text: string, offset: number, direction: -1 | 1, measure: RunMeasure, rtl: boolean, goalX?: number): {
|
|
8487
|
+
offset: number;
|
|
8488
|
+
x: number;
|
|
8489
|
+
} | null;
|
|
8329
8490
|
/**
|
|
8330
|
-
*
|
|
8331
|
-
*
|
|
8332
|
-
*
|
|
8333
|
-
*
|
|
8334
|
-
* it reproduces the Ahem test font exactly, which is how the layout
|
|
8335
|
-
* conformance fixtures compare real wrapping text against Chrome.
|
|
8491
|
+
* The boxes covering `[start, end)`, one per line touched. Hanging
|
|
8492
|
+
* spaces inside the range are highlighted at their width; a line the
|
|
8493
|
+
* range runs past with nothing hanging gets a space's width more, so a
|
|
8494
|
+
* selected line break is visible.
|
|
8336
8495
|
*/
|
|
8337
|
-
declare
|
|
8338
|
-
private readonly glyphWidth;
|
|
8339
|
-
private readonly ascentFactor;
|
|
8340
|
-
private readonly descentFactor;
|
|
8341
|
-
constructor(options?: FixedMetricsOptions);
|
|
8342
|
-
measureRunWidth(text: string, request: TextMeasureRequest): number;
|
|
8343
|
-
fontMetrics(request: TextMeasureRequest): FontMetrics;
|
|
8344
|
-
}
|
|
8496
|
+
declare function selectionRects(lines: readonly PlacedLine[], text: string, start: number, end: number, measure: RunMeasure, rtl: boolean): LayoutBox[];
|
|
8345
8497
|
//#endregion
|
|
8346
8498
|
//#region src/selection/UiSelectable.d.ts
|
|
8347
8499
|
/**
|
|
@@ -8926,6 +9078,13 @@ declare class EditableLayout {
|
|
|
8926
9078
|
readonly placeholderLines: readonly TextLinePlacement[];
|
|
8927
9079
|
readonly measure: RunMeasure;
|
|
8928
9080
|
readonly rtl: boolean;
|
|
9081
|
+
/**
|
|
9082
|
+
* The text as drawn: the model's, or a secret field's mask of it
|
|
9083
|
+
* (see `maskText`). The geometry is the drawing's, so it is measured
|
|
9084
|
+
* from this; the two are the same length, so its offsets are the
|
|
9085
|
+
* model's.
|
|
9086
|
+
*/
|
|
9087
|
+
readonly text: string;
|
|
8929
9088
|
constructor(model: EditableTextModel, box: LayoutBox, state: PaintState, measurer: TextMeasurer);
|
|
8930
9089
|
caretRect(offset?: number): CaretRect;
|
|
8931
9090
|
/**
|
|
@@ -9039,6 +9198,7 @@ declare function editorOf(node: UiNode): EditableTextModel | undefined;
|
|
|
9039
9198
|
/** Applies a changed `value` property to the model; see editorFor. */
|
|
9040
9199
|
declare function syncEditorValue(node: UiNode, model: EditableTextModel): void;
|
|
9041
9200
|
declare function isEditableNode(node: UiNode): boolean;
|
|
9201
|
+
/** Whether Enter inserts a newline. Never in a secret field, which is one line, as a password input is. */
|
|
9042
9202
|
declare function isMultiline(node: UiNode): boolean;
|
|
9043
9203
|
declare function isReadOnly(node: UiNode): boolean;
|
|
9044
9204
|
/**
|
|
@@ -10384,6 +10544,11 @@ declare class UiWheelController {
|
|
|
10384
10544
|
* wheel of a burst land correctly even though the first could not.
|
|
10385
10545
|
*/
|
|
10386
10546
|
lastWheelTarget: UiNode | null;
|
|
10547
|
+
/**
|
|
10548
|
+
* The container the wheel last scrolled, for a frame's report of where
|
|
10549
|
+
* scrolling put it. Null until the wheel has scrolled something.
|
|
10550
|
+
*/
|
|
10551
|
+
lastScrolled: UiNode | null;
|
|
10387
10552
|
wheel(x: number, y: number, deltaX: number, deltaY: number, modifiers?: UiKeyModifiers, deltaMode?: UiWheelDeltaMode, wheelDeltaY?: number,
|
|
10388
10553
|
/**
|
|
10389
10554
|
* When the event happened, on this controller's clock. Pacing
|
|
@@ -10470,16 +10635,15 @@ declare class UiWheelController {
|
|
|
10470
10635
|
* comes a varying time after the last step: applied as they arrive, a
|
|
10471
10636
|
* steady flick moves the page by uneven amounts, which reads as
|
|
10472
10637
|
* judder. Evening that out by waiting for steps puts the page behind
|
|
10473
|
-
* the hand. So this does what a browser does for its own scrolling:
|
|
10474
|
-
*
|
|
10475
|
-
*
|
|
10476
|
-
*
|
|
10477
|
-
* even, and nothing trails.
|
|
10638
|
+
* the hand. So this does what a browser does for its own scrolling: it
|
|
10639
|
+
* resamples the steps at the frame's time, reading a line fitted through
|
|
10640
|
+
* the last `VELOCITY_WINDOW_MS` of them. Frames come out even, and
|
|
10641
|
+
* nothing trails.
|
|
10478
10642
|
*
|
|
10479
|
-
* A gesture's first step, with no
|
|
10480
|
-
* steps stop, the
|
|
10481
|
-
*
|
|
10482
|
-
*
|
|
10643
|
+
* A gesture's first step, with no line yet, goes as it is. Once the
|
|
10644
|
+
* steps stop, the page eases over a few frames to exactly where they add
|
|
10645
|
+
* up to; a trackpad's momentum slows to nothing first, so there is next
|
|
10646
|
+
* to nothing to take up.
|
|
10483
10647
|
*
|
|
10484
10648
|
* True while a gesture is still being paced, so the host keeps frames
|
|
10485
10649
|
* coming until it has settled.
|
|
@@ -11454,6 +11618,14 @@ interface EditingState {
|
|
|
11454
11618
|
* `UiEditingGroup.copyHtml`). Absent otherwise.
|
|
11455
11619
|
*/
|
|
11456
11620
|
readonly html?: string;
|
|
11621
|
+
/**
|
|
11622
|
+
* A secret field (`UiProperties.secret`). `text` is then its mask,
|
|
11623
|
+
* not its value, so the value never leaves the runtime; `clipboard`
|
|
11624
|
+
* is empty, so a copy or a cut takes nothing. A shell edits it
|
|
11625
|
+
* through a password input, which is what tells the platform not to
|
|
11626
|
+
* learn, correct or read out what is typed.
|
|
11627
|
+
*/
|
|
11628
|
+
readonly secret?: true;
|
|
11457
11629
|
}
|
|
11458
11630
|
interface EditingControllerOptions {
|
|
11459
11631
|
/** Keyboard conventions; detected from the user agent by default. */
|
|
@@ -12169,6 +12341,8 @@ interface UiHostFrameClockOptions {
|
|
|
12169
12341
|
* turn out to be worse than its host's.
|
|
12170
12342
|
*/
|
|
12171
12343
|
requestAnimationFrame?: ((callback: (time: number) => void) => number) | null;
|
|
12344
|
+
/** This thread's `performance.timeOrigin`, to read the host's times on this clock. Injectable for specs. */
|
|
12345
|
+
timeOrigin?: number;
|
|
12172
12346
|
/** How long to wait for a host tick before pacing a frame anyway. */
|
|
12173
12347
|
fallbackMs?: number;
|
|
12174
12348
|
/**
|
|
@@ -12246,14 +12420,104 @@ declare class UiHostFrameClock implements UiFrameClock {
|
|
|
12246
12420
|
private readonly minStallMs;
|
|
12247
12421
|
private readonly now;
|
|
12248
12422
|
/** This thread's own `requestAnimationFrame`, or null where there is none. */
|
|
12249
|
-
private
|
|
12423
|
+
private local;
|
|
12250
12424
|
private localHandle;
|
|
12425
|
+
/** Whether the page is hidden, when this thread's refreshes do not come. */
|
|
12426
|
+
private hidden;
|
|
12427
|
+
private readonly timeOrigin;
|
|
12428
|
+
/** Gaps between this thread's own refreshes while frames ran back to back. */
|
|
12429
|
+
private readonly localIntervals;
|
|
12430
|
+
private lastLocalTime;
|
|
12431
|
+
/** The display's interval and the host's time origin, once the host has said. */
|
|
12432
|
+
private display;
|
|
12433
|
+
/**
|
|
12434
|
+
* Set once this thread's refreshes have shown they keep no display's
|
|
12435
|
+
* time: frames are then timed here, on the beat the host's refreshes
|
|
12436
|
+
* show (see \`displayInterval\`).
|
|
12437
|
+
*/
|
|
12438
|
+
private locked;
|
|
12439
|
+
/** The host's recent refresh times, which give the beat its phase. */
|
|
12440
|
+
private readonly refreshes;
|
|
12441
|
+
/** Host refreshes since the last frame drawn on the beat. */
|
|
12442
|
+
private refreshesSinceFrame;
|
|
12443
|
+
/** The refresh the last frame here was drawn for: a frame is never drawn for one twice. */
|
|
12444
|
+
private lastLocked;
|
|
12445
|
+
/** How long recent frames took here, which decides how many refreshes each one gets. */
|
|
12446
|
+
private readonly costs;
|
|
12447
|
+
/** Refreshes per frame on the beat: 1, or more when frames cost more than a refresh can hold. */
|
|
12448
|
+
private stride;
|
|
12251
12449
|
constructor(onFrame: (time: UiFrameTime) => void,
|
|
12252
12450
|
/** Told when this starts and stops wanting ticks. */
|
|
12253
12451
|
onActive: (active: boolean) => void, options?: UiHostFrameClockOptions);
|
|
12254
12452
|
/** Whether this clock is driving itself from the compositor. */
|
|
12255
12453
|
get isLocal(): boolean;
|
|
12256
12454
|
requestFrame(): void;
|
|
12455
|
+
/**
|
|
12456
|
+
* The page was hidden or shown. While it is hidden this thread's own
|
|
12457
|
+
* refreshes stop, so a frame asked for is paced by the timer, as a
|
|
12458
|
+
* hosted clock is when its host stops ticking; one already waiting
|
|
12459
|
+
* for a refresh that will not come is handed to the timer.
|
|
12460
|
+
*/
|
|
12461
|
+
setHidden(hidden: boolean): void;
|
|
12462
|
+
/**
|
|
12463
|
+
* Tells the clock the display's interval, measured on the host's own
|
|
12464
|
+
* refreshes, and the host's \`timeOrigin\`, which puts the host's frame
|
|
12465
|
+
* times on this thread's clock.
|
|
12466
|
+
*
|
|
12467
|
+
* A worker's own refreshes are not always the display's. WebKit's come
|
|
12468
|
+
* from a timer near 65 Hz that keeps no display's time: on a 120 Hz
|
|
12469
|
+
* MacBook its frames fell 15 to 16.4 ms apart, so each was shown after
|
|
12470
|
+
* one refresh, two or three, and a scroll juddered at a steady sixty.
|
|
12471
|
+
* Driving frames from the host's ticks instead put the host's thread in
|
|
12472
|
+
* every frame, and WebKit's is uneven while scrolling: at 120 a seventh
|
|
12473
|
+
* of the frames missed their refresh. So once this thread's refreshes
|
|
12474
|
+
* have shown they keep no display's time, frames follow the host's
|
|
12475
|
+
* refreshes, which are the only ones a worker's canvas is shown on in
|
|
12476
|
+
* WebKit anyway, with two differences from a plain hosted clock: each
|
|
12477
|
+
* frame is stamped with its refresh on the display's beat and on this
|
|
12478
|
+
* thread's clock, which is the clock a wheel step's time is on; and
|
|
12479
|
+
* frames too costly for one refresh are given an even two (see
|
|
12480
|
+
* \`recordCost\`).
|
|
12481
|
+
*/
|
|
12482
|
+
displayInterval(ms: number, origin: number): void;
|
|
12483
|
+
/** Whether frames are timed here on the display's beat; see \`displayInterval\`. */
|
|
12484
|
+
get isDisplayLocked(): boolean;
|
|
12485
|
+
private recordLocal;
|
|
12486
|
+
/**
|
|
12487
|
+
* Gives this thread's refreshes up when they come well slower than the
|
|
12488
|
+
* display's: they cost frames, and in WebKit keep no display's beat
|
|
12489
|
+
* either. Faster than the display is left alone, because that is the
|
|
12490
|
+
* display the measurement was taken on going stale (a window dragged to
|
|
12491
|
+
* a faster screen), not a worker failing to keep up with it.
|
|
12492
|
+
*/
|
|
12493
|
+
private compareLocal;
|
|
12494
|
+
/** A time on the host's clock, on this thread's. */
|
|
12495
|
+
private toLocal;
|
|
12496
|
+
/**
|
|
12497
|
+
* When the display's refreshes start, on the host's clock: the earliest
|
|
12498
|
+
* in phase of the host's recent refresh times, since a host's callback
|
|
12499
|
+
* can only run late, never early.
|
|
12500
|
+
*/
|
|
12501
|
+
private beat;
|
|
12502
|
+
/** The interval between the most punctual early and late refreshes, judged by `rough`. */
|
|
12503
|
+
private refineInterval;
|
|
12504
|
+
/**
|
|
12505
|
+
* Draws the frame a host refresh asked for, stamped with that refresh on
|
|
12506
|
+
* the display's beat rather than with when its callback happened to run,
|
|
12507
|
+
* and on this thread's clock.
|
|
12508
|
+
*/
|
|
12509
|
+
private deliverOnBeat;
|
|
12510
|
+
/**
|
|
12511
|
+
* Keeps the stride to what frames cost: every refresh while the typical
|
|
12512
|
+
* frame fits in most of one, two once it no longer does. Decided by the
|
|
12513
|
+
* typical frame, not the slow ones: a slow frame (a few rows mounted at
|
|
12514
|
+
* once) shown a refresh late is a moment's hitch, where two refreshes a
|
|
12515
|
+
* frame for a whole scroll halves the rate. Ruled by the slow quarter,
|
|
12516
|
+
* a 165 Hz display drew at 82 with its typical frame in half a refresh.
|
|
12517
|
+
*/
|
|
12518
|
+
private recordCost;
|
|
12519
|
+
/** Refreshes per frame while timed on the display's beat; see \`recordCost\`. */
|
|
12520
|
+
get displayStride(): number;
|
|
12257
12521
|
/**
|
|
12258
12522
|
* Arms the timer that draws a frame the host did not ask for.
|
|
12259
12523
|
*
|
|
@@ -12691,6 +12955,8 @@ declare class LayoutEngine {
|
|
|
12691
12955
|
*/
|
|
12692
12956
|
private readonly stickyShifted;
|
|
12693
12957
|
private readonly textMeasurer;
|
|
12958
|
+
/** Where `measureLeaf` resolves a text node's font; read before anything else can resolve one. */
|
|
12959
|
+
private readonly fontScratch;
|
|
12694
12960
|
/**
|
|
12695
12961
|
* The definite size percentages resolve against while a container's
|
|
12696
12962
|
* children are measured: its content box. Undefined on an axis whose
|
|
@@ -13742,7 +14008,10 @@ declare const ELLIPSIS = "…";
|
|
|
13742
14008
|
* narrower than the widest segment. When a segment is wider than the
|
|
13743
14009
|
* available width the paragraph grows to it, and every line wraps
|
|
13744
14010
|
* against that grown width rather than the one asked for, because that
|
|
13745
|
-
* is the box the lines will be painted in.
|
|
14011
|
+
* is the box the lines will be painted in. When the width is the box's
|
|
14012
|
+
* own (`exactWidth`: a width set from outside, or the box being
|
|
14013
|
+
* painted), it does not grow: the lines wrap against it and the wide
|
|
14014
|
+
* segment overflows alone, as CSS wraps text in a box of a fixed width.
|
|
13746
14015
|
*
|
|
13747
14016
|
* The first baseline sits half the leading below the line top, plus the
|
|
13748
14017
|
* ascent, with the half-leading floored to a whole pixel. That floor is
|
|
@@ -16028,26 +16297,33 @@ interface UiRenderer {
|
|
|
16028
16297
|
* subtree changed.
|
|
16029
16298
|
*
|
|
16030
16299
|
* **When one is trusted.** Only when the caller vouches for what
|
|
16031
|
-
* changed (
|
|
16032
|
-
*
|
|
16033
|
-
* - no
|
|
16034
|
-
*
|
|
16035
|
-
*
|
|
16036
|
-
*
|
|
16037
|
-
*
|
|
16038
|
-
*
|
|
16039
|
-
* the root to ask for a repaint and says nothing about what for;
|
|
16300
|
+
* changed (\`RenderContext.changes\`), and only while all of these hold:
|
|
16301
|
+
*
|
|
16302
|
+
* - no ancestor's properties or environment changed: an inherited
|
|
16303
|
+
* value set above marks the descendants that read it, which is
|
|
16304
|
+
* damage like any other, and this keeps the old caution for the
|
|
16305
|
+
* rest. An ancestor marked for paint alone is the runtime asking
|
|
16306
|
+
* for a frame; one laid out again either leaves the container where
|
|
16307
|
+
* it was or moves it, which the next rule hears about;
|
|
16040
16308
|
* - the container lands on the same device-pixel phase, at the same
|
|
16041
16309
|
* device scale, with no rotation, skew or scale above it and no
|
|
16042
16310
|
* opacity in force, so a copy is exact rather than resampled;
|
|
16043
|
-
* - the scroll moved it by a whole number of device pixels;
|
|
16044
16311
|
* - nothing the layer drew depends on the clock (a caret, a fading
|
|
16045
16312
|
* scrollbar, a video frame) or escaped it (a lifted node).
|
|
16046
16313
|
*
|
|
16314
|
+
* **What a frame redraws in it.** The strip a scroll brought into view
|
|
16315
|
+
* (the scroll as the frame draws it, snapped to a device pixel), and the
|
|
16316
|
+
* items something changed (see \`damage\`): an item, one of the
|
|
16317
|
+
* container's children through any fragments, is wrong where it was and
|
|
16318
|
+
* where it is when it is added, removed, moved, or changed inside. A
|
|
16319
|
+
* lazy list scrolling mounts and unmounts rows in its overscan and grows
|
|
16320
|
+
* and shrinks spacers off screen, so what it redraws is the strip. Only
|
|
16321
|
+
* what reaches the strips is walked, a \`SPILL\` past them.
|
|
16322
|
+
*
|
|
16047
16323
|
* Anything else, and the container is drawn directly, exactly as it
|
|
16048
16324
|
* was before layers existed. The first frame a container scrolls on
|
|
16049
16325
|
* pays for the layer — its content drawn into it, then the copy onto
|
|
16050
|
-
* the frame — and every
|
|
16326
|
+
* the frame — and every frame after that is repaid.
|
|
16051
16327
|
*
|
|
16052
16328
|
* **What it cannot help.** A frame where the content itself changes —
|
|
16053
16329
|
* a live layer redrawn every tick, a zoom that resizes every tile — is
|
|
@@ -16069,6 +16345,67 @@ interface ScrollLayerStats {
|
|
|
16069
16345
|
dropped: number;
|
|
16070
16346
|
}
|
|
16071
16347
|
//#endregion
|
|
16348
|
+
//#region src/rendering/canvas2d/TextRasterCache.d.ts
|
|
16349
|
+
/**
|
|
16350
|
+
* Text kept as pixels, so a frame that only moved it copies it rather
|
|
16351
|
+
* than drawing its glyphs again.
|
|
16352
|
+
*
|
|
16353
|
+
* **Why.** Drawing glyphs is most of what a frame of text costs:
|
|
16354
|
+
* profiled while flicking through a file in Easel, `fillText` was 1,064
|
|
16355
|
+
* of the renderer's 1,985 ms. A scroll moves every line on screen and
|
|
16356
|
+
* changes none of them, so every one of those glyphs was drawn again
|
|
16357
|
+
* only to land a few pixels from where it was. In WKWebView a frame of
|
|
16358
|
+
* that cost 4 to 7 ms, which is more than a 165 Hz refresh holds.
|
|
16359
|
+
*
|
|
16360
|
+
* **What is kept.** What `drawText` draws for one node, drawn once into
|
|
16361
|
+
* a canvas of its own at the device scale and fraction of a pixel it
|
|
16362
|
+
* lands on, and copied onto the frame from then on. The copy lands on
|
|
16363
|
+
* whole device pixels, so the pixels are the ones a direct draw at that
|
|
16364
|
+
* fraction would have made, and a scroll, which moves by whole device
|
|
16365
|
+
* pixels, keeps the fraction.
|
|
16366
|
+
*
|
|
16367
|
+
* **When it is drawn again.** When anything `drawText` reads changes:
|
|
16368
|
+
* the text, its runs, its font, its colour, its box, the scale, or the
|
|
16369
|
+
* fraction of a pixel it sits at. Each is compared every frame, which is
|
|
16370
|
+
* a few comparisons; a run list or a colour that has not changed is the
|
|
16371
|
+
* same object it was.
|
|
16372
|
+
*
|
|
16373
|
+
* **What it is not for.** Text that changes on most frames (a clock, a
|
|
16374
|
+
* counter, an animated colour) would be drawn twice a frame, into the
|
|
16375
|
+
* cache and out of it. A node redrawn on most of its recent frames is
|
|
16376
|
+
* drawn directly instead, until it has been still for a while.
|
|
16377
|
+
*/
|
|
16378
|
+
declare class TextRasterCache {
|
|
16379
|
+
private readonly createCanvas;
|
|
16380
|
+
private readonly entries;
|
|
16381
|
+
private frame;
|
|
16382
|
+
private pixels;
|
|
16383
|
+
/** Draws served from the cache and drawn into it, since the last reset. For budget specs. */
|
|
16384
|
+
readonly stats: {
|
|
16385
|
+
copied: number;
|
|
16386
|
+
drawn: number;
|
|
16387
|
+
direct: number;
|
|
16388
|
+
};
|
|
16389
|
+
constructor(createCanvas: LayerCanvasFactory);
|
|
16390
|
+
beginFrame(): void;
|
|
16391
|
+
/** Lets go of text not drawn lately: removed, scrolled far away, or hidden. */
|
|
16392
|
+
endFrame(): void;
|
|
16393
|
+
dropAll(): void;
|
|
16394
|
+
resetStats(): void;
|
|
16395
|
+
/**
|
|
16396
|
+
* Draws a node's text from the cache, drawing it into the cache first
|
|
16397
|
+
* when what it holds is out of date. False when the text should be
|
|
16398
|
+
* drawn directly: a context that cannot say where it draws, one that
|
|
16399
|
+
* rotates or skews, text too large to keep, or text that changes too
|
|
16400
|
+
* often to be worth keeping.
|
|
16401
|
+
*/
|
|
16402
|
+
draw(ctx: Canvas2DContext, node: UiNode, box: LayoutBox, paint: PaintState, measurer: TextMeasurer): boolean;
|
|
16403
|
+
private redraw;
|
|
16404
|
+
/** Makes room for `needed` more pixels, letting go of what was drawn least recently. */
|
|
16405
|
+
private make;
|
|
16406
|
+
private drop;
|
|
16407
|
+
}
|
|
16408
|
+
//#endregion
|
|
16072
16409
|
//#region src/rendering/canvas2d/Canvas2DRenderer.d.ts
|
|
16073
16410
|
interface Canvas2DRendererOptions {
|
|
16074
16411
|
/**
|
|
@@ -16091,10 +16428,16 @@ interface Canvas2DRendererOptions {
|
|
|
16091
16428
|
*/
|
|
16092
16429
|
scrollLayers?: boolean;
|
|
16093
16430
|
/**
|
|
16094
|
-
* Makes the canvases scroll layers
|
|
16095
|
-
* `OffscreenCanvas`; a spec passes a double.
|
|
16431
|
+
* Makes the canvases scroll layers and kept text are held in. Defaults
|
|
16432
|
+
* to an `OffscreenCanvas`; a spec passes a double.
|
|
16096
16433
|
*/
|
|
16097
16434
|
createLayerCanvas?: LayerCanvasFactory;
|
|
16435
|
+
/**
|
|
16436
|
+
* Whether text is kept as pixels across frames and copied rather than
|
|
16437
|
+
* drawn again while it has not changed. Defaults to true; false draws
|
|
16438
|
+
* every glyph every frame, as before. See `TextRasterCache.ts`.
|
|
16439
|
+
*/
|
|
16440
|
+
textCache?: boolean;
|
|
16098
16441
|
/**
|
|
16099
16442
|
* How many frames in a row a container must scroll quietly before it
|
|
16100
16443
|
* gets a layer. Defaults to `SCROLL_LAYER_SETTLE_FRAMES`; a spec of
|
|
@@ -16205,6 +16548,10 @@ declare class Canvas2DRenderer implements UiRenderer {
|
|
|
16205
16548
|
*/
|
|
16206
16549
|
private volatileDraws;
|
|
16207
16550
|
constructor(options: Canvas2DRendererOptions);
|
|
16551
|
+
/** Text kept as pixels; see `TextRasterCache.ts`. */
|
|
16552
|
+
private readonly textCache;
|
|
16553
|
+
/** What the text cache did since the last reset, or null with it off. For budget specs. */
|
|
16554
|
+
get textCacheStats(): TextRasterCache['stats'] | null;
|
|
16208
16555
|
/** What the scroll layers did since the last reset. For budget specs. */
|
|
16209
16556
|
get scrollLayerStats(): ScrollLayerStats;
|
|
16210
16557
|
resetScrollLayerStats(): void;
|
|
@@ -19047,5 +19394,5 @@ interface UiSemanticsAction {
|
|
|
19047
19394
|
readonly value?: string;
|
|
19048
19395
|
}
|
|
19049
19396
|
//#endregion
|
|
19050
|
-
export { Mp4AudioTrack as $, UiDroppedFile as $a, Responsive as $c, editableSpansOf as $d, UiBoxShadow as $f, cubicBezier as $g, colorsEqualPalette as $h, AxisExplanation as $i, UiPropertyName as $l, NodeId as $m, ScrollOffset as $n, scrollbarThumbs as $o, UiPropValue as $p, clickOutside as $r, PaintState as $s, registerFontStack as $t, UiThemeExtensionOptions as $u, offsetAtPointIn as A, resolveCursor as Aa, TextRunSpan as Ac, UiLayoutChild as Ad, UiRadialGradient as Af, defaultMotion as Ag, UiTextAlign as Ah, propertyValuesEqualByName as Ai, ContainerProps as Al, MotionStateInput as Am, LABEL_PADDING_X as An, overrideSources as Ao, UiModifierEnvironment as Ap, ImageResolver as Ar, CanvasTextStyle as As, createTextCache as At, LazyAxis as Au, markNow as B, touchActionFor as Ba, lineLimit as Bc, UiFontKerning as Bd, UiLength as Bf, transformIsIdentity as Bg, borderRadiusCorners as Bh, parseAlignContent as Bi, PaintProps as Bl, slideFrom as Bm, resolvePropertyByName as Bn, HitTestResult as Bo, UiModifierHost as Bp, ZoomState as Br, layoutTextLines as Bs, isWebGPUAvailable as Bt, VirtualUpdate as Bu, hasTextLinks as C, isNodeFocusable as Ca, SpannedRuns as Cc, UiTypography as Cd, MAX_GRADIENT_STOPS as Cf, UiTweenOptions as Cg, UiObjectFit as Ch, findPropertyDefinition as Ci, UiChildrenBinding as Cl, noKeyModifiers as Cm, LayerCanvasFactory as Cn, UiGestureRecognizer as Co, UiEditingGroup as Cp, IconContext as Cr, syncEditorValue as Cs, RenderList as Ct, SheetRowRenderer as Cu, setLinkHover as D, isNodeTabStop as Da, TextMeasurer as Dc, isTypographyRole as Dd, UiGradientOffset as Df, UiMotion as Dg, UiPosition as Dh, propertyEffects as Di, ButtonProps as Dl, MOTION_REST as Dm, LayoutReader as Dn, NodeTransitions as Do, comparePositions as Dp, iconKey as Dr, detectEditingPlatform as Ds, TEXTURED_STRIDE_FLOATS as Dt, UiVirtualSheetOptions as Du, linkRunAtPointIn as E, isNodeSelectable as Ea, TextMeasureRequest as Ec, defaultTypography as Ed, UiGradient as Ef, UiEasingToken as Eg, UiPointerEvents as Eh, inheritedPropertyNames as Ei, BoxProps as El, MOTION_CHANNELS as Em, UiRenderer as En, FocusNotifier as Eo, adjacentField as Ep, IconSpec as Er, commandForKey as Es, TEXTURED_STRIDE_BYTES as Et, UiVirtualSheet as Eu, UiFrameCallback as F, UiPlatformAdapter as Fa, PlacedLine as Fc, UiVisualStateSet as Fd, validateGradient as Ff, interpolatorFor as Fg, UiVerticalAlign as Fh, placeGridItems as Fi, GridItemProps as Fl, pop as Fm, CanvasSurface as Fn, UiFindController as Fo, assertModifierList as Fp, ShortcutsOptions as Fr, applyCanvasTextStyle as Fs, GlyphSlot as Ft, UiVirtualWindow as Fu, VttTrack as G, TouchScrollerOptions as Ga, graphemeBoundaries as Gc, UiSpannedText as Gd, isFrLength as Gf, colorToRgba as Gg, uniformBorderRadius as Gh, ELLIPSIS as Gi, ScrollViewProps as Gl, LayoutBox as Gm, InsetPaddingArgs as Gn, SCROLLBAR_INSET as Go, ComponentResolver as Gp, ReorderableOptions as Gr, Canvas2DContext as Gs, WebGPURenderer as Gt, videoFrameSize as Gu, performanceMarksEnabled as H, EditingHost as Ha, offsetAtX as Hc, UiFontStyle as Hd, auto as Hf, UiBasicColors as Hg, borderRadiusIsZero as Hh, parseMainAxisAlignment as Hi, PropsOf as Hl, SharedClaim as Hm, ThemeTokenTarget as Hn, UiHitTester as Ho, FocusOptions as Hp, AutoScrollOptions as Hr, runFontString as Hs, CapturedFrame as Ht, lazySource as Hu, UiScheduler as I, capturePointer as Ia, RunMeasure as Ic, defaultVisualState as Id, AutoLength as If, UiTransform as Ig, validateSubgrid as Ih, sizeGridTracks as Ii, GridProps as Il, resolveMotionState as Im, createCanvasSurface as In, SelectionControllerOptions as Io, UiModifier as Ip, contextMenu as Ir, buildFontString as Is, GlyphUpload as It, VIRTUAL_INDEX_PROP as Iu, ByteSource as J, UiDragPayload as Ja, nextGraphemeEnd as Jc, UiTextMetrics as Jd, minmax as Jf, normalizeColor as Jg, UiShapes as Jh, LayoutNotifier as Ji, TextProps as Jl, Size as Jm, publishInset as Jn, ScrollbarAxis as Jo, UiElement as Jp, reorderable as Jr, DEFAULT_FONT_SIZE as Js, WebGPUSurface as Jt, lightTheme as Ju, cueAt as K, UiTouchScroller as Ka, lineEndAt as Kc, UiTextDecoration as Kd, isMinMaxTrack as Kf, colorValuesEqual as Kg, UiShapeExtensions as Kh, layoutParagraph as Ki, StackProps as Kl, LayoutResult as Km, PublishInsetArgs as Kn, SCROLLBAR_MIN_THUMB as Ko, ComponentLikeElement as Kp, dragSource as Kr, Canvas2DGradient as Ks, WebGPURendererOptions as Kt, UiTheme as Ku, UiSchedulerOptions as L, isImeKey as La, caretRectFor as Lc, hasVisualState as Ld, FrLength as Lf, UiTransforms as Lg, UiBorderRadius as Lh, AlignContent as Li, IdentityProps as Ll, rotateFrom as Lm, resolveBoolean as Ln, SelectionHost as Lo, UiModifierKind as Lp, shortcut as Lr, createCanvasTextStyle as Ls, WebGPUGlyphAtlas as Lt, VIRTUAL_LEAD_PROP as Lu, paragraphGeometryFrom as M, PlatformAdapterOptions as Ma, TextWrap as Mc, UiLayoutProtocol as Md, gradientsEqual as Mf, interpolateColor as Mg, UiTextOverflowValue as Mh, GridItemRequest as Mi, EnvironmentProps as Ml, ResolvedMotionState as Mm, drawOverlayShapes as Mn, writeDeclaredProperty as Mo, UiModifierLayout as Mp, animateLayout as Mr, SpanPaint as Ms, textRuns as Mt, LazyItemRenderer as Mu, selectionRectsIn as N, PlatformEventTarget as Na, spannedRunsFor as Nc, isLayoutProtocol as Nd, linearGradient as Nf, interpolateNumber as Ng, UiTextWrapValue as Nh, GridPlacement as Ni, FlexContainerProps as Nl, fade as Nm, labelOrigin as Nn, writeOverrideProperty as No, UiModifierSet as Np, ContextMenuOptions as Nr, TextLinePlacement as Ns, GlyphShaper as Nt, LazyListOptions as Nu, ParagraphGeometry as O, isSubtreeInert as Oa, TextOverflow as Oc, typographyEqual as Od, UiGradientStop as Of, UiSpringSpec as Og, UiSelfAlignment as Oh, propertyIsInherited as Oi, ColumnProps as Ol, MotionChannel as Om, RenderChanges as On, resetTransitionWarnings as Oo, edgeField as Op, DefaultImageResolver as Or, isPrintable as Os, TextRunDraw as Ot, VIRTUAL_SHEET_PROP as Ou, wordRangeIn as P, PlatformSurface as Pa, CaretRect as Pc, UiVisualState as Pd, radialGradient as Pf, interpolateTransform as Pg, UiThemeColorName as Ph, GridTrack as Pi, FlexItemProps as Pl, isMotionRest as Pm, CanvasHost as Pn, FindHost as Po, UiUnknownModifierPropertyError as Pp, ShortcutOptions as Pr, TextRunRect as Ps, GLYPH_SUBPIXEL_PHASES as Pt, LazySourceArgs as Pu, rangeSource as Q, UiDropZone as Qa, wordRangeAt as Qc, defaultTextStyle as Qd, BOX_SHADOW_BLUR_REACH as Qf, UiEasing as Qg, UiColors as Qh, ScrollAdjustment as Qi, UiProperties as Ql, tightenConstraints as Qm, sizeContainer as Qn, scrollbarThumb as Qo, isUiElement as Qp, ClickOutsideOptions as Qr, PaintBoxShadow as Qs, fontStackFor as Qt, UiThemeExtension as Qu, MARK_PREFIX as R, pointerDeviceOf as Ra, lineIndexAtY as Rc, visualState as Rd, MinMaxTrack as Rf, parseTransform as Rg, UiBorderRadiuses as Rh, CrossAxisAlignment as Ri, InteractionProps as Rl, scaleFrom as Rm, resolveNumber as Rn, UiSelectionController as Ro, defineModifier as Rp, shortcuts as Rr, drawText as Rs, WebGPUTextureCache as Rt, VIRTUAL_WINDOW_PROP as Ru, clearLinkHover as S, UiTimerFrameClockOptions as Sa, ParagraphTextMeasurer as Sc, shadowsEqual as Sd, GradientPaint as Sf, UiTween as Sg, UiGridAutoFlow as Sh, closestPropertyName as Si, ChildrenBindingId as Sl, UiWheelEvent as Sm, traceRoundedRect as Sn, GestureRecognizerOptions as So, textInputOf as Sp, IconCanvas as Sr, nextCaretToggle as Ss, RenderCommand as St, SheetRange as Su, linkOf as T, isNodeInert as Ta, TextLineRun as Tc, UiTypographyRole as Td, ResolvedGradientStop as Tf, UiDurationToken as Tg, UiPlacement as Th, inheritedPropertyFlags as Ti, BoxModelProps as Tl, DirtyNodeSet as Tm, RendererBackend as Tn, UiPinchRecognizer as To, UiTextPosition as Tp, IconRasterizerOptions as Tr, EditingPlatform as Ts, ScissorRect as Tt, SheetViewport as Tu, setPerformanceMarks as U, EditingState as Ua, offsetForVerticalMove as Uc, UiFontVariant as Ud, fr as Uf, UiColor as Ug, borderRadiusValuesEqual as Uh, FlexDirection as Ui, Reactive as Ul, UiSharedElements as Um, themeTokens as Un, UiPoint as Uo, FocusSource as Up, DragSourceOptions as Ur, textRunBackgrounds as Us, DrawStats as Ut, UiVideoSurface as Uu, measureSpan as V, EditingControllerOptions as Va, offsetAtPoint as Vc, UiFontStretch as Vd, UiTrackSize as Vf, transformsEqual as Vg, borderRadiusEqual as Vh, parseCrossAxisAlignment as Vi, PositionProps as Vl, slideUp as Vm, resolveString as Vn, HitTester as Vo, UiModifierTeardown as Vp, pinchable as Vr, runCanvasStyleInto as Vs, WebGPUError as Vt, VirtualViewport as Vu, VttCue as W, UiEditingController as Wa, selectionRects as Wc, UiResolvedTextSpan as Wd, isAutoLength as Wf, colorToHex as Wg, normalizeBorderRadius as Wh, parseFlexDirection as Wi, RowProps as Wl, Constraints as Wm, sameArgs as Wn, SCROLLBAR_HOVER_ZONE as Wo, UiFocusManager as Wp, DropTargetOptions as Wr, textRunDecorations as Ws, RenderHooks as Wt, isVideoSurface as Wu, RangeSourceOptions as X, UiDragState as Xa, previousGraphemeStart as Xc, UiTextSpan as Xd, repeat as Xf, rgb8 as Xg, isShapeName as Xh, SCROLLBAR_FADE_MS as Xi, UiEventProps as Xl, clampSize as Xm, SizeContainerArgs as Xn, scrollLeaderOf as Xo, isObservable$1 as Xp, DraggableOptions as Xr, DEFAULT_TEXT_COLOR as Xs, bumpFontStack as Xt, withContrast as Xu, DEFAULT_BLOCK_SIZE as Y, UiDragSession as Ya, nextWordEnd as Yc, UiTextRange as Yd, percent as Yf, parseColor as Yg, defaultShapes as Yh, LayoutEngine as Yi, TypographyProps as Yl, TightenOptions as Ym, BreakpointArgs as Yn, ScrollbarThumb as Yo, isComponentLikeElement as Yp, DragOffset as Yr, DEFAULT_FONT_WEIGHT as Ys, createWebGPUSurface as Yt, themesEqual as Yu, bufferSource as Z, UiDropEffect as Za, previousWordStart as Zc, UiTextStyle as Zd, resolveLength as Zf, rgba as Zg, shapesEqual as Zh, SCROLLBAR_LINGER_MS as Zi, UiNodeRef as Zl, constraintsEqual as Zm, breakpoint as Zn, scrollRange as Zo, isUiChild as Zp, draggable as Zr, ObjectFit as Zs, clearFontStacks as Zt, withDensity as Zu, buildSemanticsTree as _, UiFrameTime as _a, setSelectionRange as _c, scaleSpacing as _d, UiPath as _f, UiAnimation as _g, UiContentDistribution as _h, bundle as _i, UiDefinition as _l, UiPointerEvent as _m, LayoutInspector as _n, UiScrollBehavior as _o, bandOf as _p, IconSourceArgs as _r, editorFor as _s, INSTANCE_STRIDE_FLOATS as _t, EditUnit as _u, diffSemantics as a, RelayoutExplanation as aa, createPaintState as ac, themeExtensionsEqual as ad, spansDifferOnlyInPaint as af, createEnvironmentKey as ag, DecorationFill as ah, borderShapes as ai, LazyRow as al, MOUSE_POINTER as am, PaintContext2D as an, UiShortcutRegistry as ao, UiPropertyDefinition as ap, VideoTransport as ar, setMatchRanges as as, Mp3Frame as at, UiLiveRegion as au, semanticsMemory as b, UiManualFrameClock as ba, FontMetrics as bc, UiShadows as bd, pathValuesEqual as bf, UiSpring as bg, UiFlexWrap as bh, accumulatedOffsetTo as bi, UiGraph as bl, UiTextChangeEvent as bm, Canvas2DRenderer as bn, isScrollContainer as bo, UiTextInput as bp, iconSource as br, isMultiline as bs, PrimitiveCommand as bt, LazySheetProps as bu, SemanticsMemory as c, describeOverrides as ca, normalizeVerticalAlign as cc, UiContrast as cd, textStylesEqual as cf, DirtyFlags as cg, DecorationStroke as ch, focusRing as ci, Column as cl, UiEventType as cm, PaintTarget as cn, formatShortcut as co, UiInsetEdge as cp, DefaultVideoResolverOptions as cr, findMatchesIn as cs, readMp3Header as ct, UiSemanticState as cu, SemanticsRewalk as d, labelNode as da, TEXT_SELECTION_PROP as dc, raiseContrast as dd, PaintLineCap as df, UiTransitionValue as dg, hasDecorationPhase as dh, hoverable as di, Paint as dl, UiInputEvent as dm, PaintOp as dn, KeyboardControllerOptions as do, UiInsets as dp, VideoResolver as dr, UiEnvironmentKeys as ds, Affine as dt, isUiSemanticState as du, easings as e_, CustomLayoutExplanation as ea, PaintTextSpan as ec, UiThemeExtensions as ed, flattenTextSpans as ef, darkColors as eg, NodeProperty as eh, autoFocus as ei, ResponsiveProps as el, UiProps as em, PaintCanvas as en, UiFileDropMessage as eo, boxShadow as ep, ScrollPositionArgs as er, scrollbarZoneAt as es, Mp4Sample as et, UiPropertyValueOf as eu, SemanticsSpan as f, withOverrideSource as fa, TextRange as fc, relativeLuminance as fd, PaintLineJoin as ff, assertTransitionMap as fg, paintsAfterChildren as fh, interactive as fi, Row as fl, UiKeyModifiers as fm, PaintRecorder as fn, UiKeyboardController as fo, insetsEqual as fp, canDecodeVideo as fr, EnvironmentNotifier as fs, CLIP_STRIDE_BYTES as ft, normalizeStates as fu, buildSemanticsSubtree as g, UiFrameClockFactory as ga, selectionRangeOf as gc, defaultSpacing as gd, UiPaint as gf, AnimatedCell as gg, UiColorValue as gh, UiModifierBundle as gi, createElement as gl, UiPointerDevice as gm, InspectorOverlay as gn, ScrollSink as go, UiContainerSizeSource as gp, sharedElement as gr, caretVisibleAt as gs, INSTANCE_STRIDE_BYTES as gt, CompositionRange as gu, UiSemanticsRecord as h, UiFrameClock as ha, selectableTextOf as hc, UiSpacing as hd, PaintTextStyle as hf, tween as hg, UiBorderRadiusValue as hh, pressable as hi, Text as hl, UiPinchEvent as hm, INSPECTOR_HEAT_MS as hn, ScrollContainerState as ho, UiContainerSize as hp, motion as hr, EDITOR_PROP as hs, GlyphCommand as ht, validateStates as hu, UiSemanticsPatch as i, OverrideSources as ia, computeObjectFitRect as ic, themeExtension as id, spannedTextOf as if, UiEnvironmentKey as ig, UiPropertyOverrides as ih, FocusRingOptions as ii, LazyListProps as il, UiListenerErrorReporter as im, paintPictures as in, UiShortcutBinding as io, boxShadowsEqual as ip, VideoState as ir, matchRangesOf as is, Mp3Format as it, UiAutocomplete as iu, paragraphGeometry as j, CanvasPlatformSurface as ja, TextRunStyle as jc, UiLayoutContext as jd, gradientPaint as jf, UiInterpolator as jg, UiTextDirection as jh, GridContribution as ji, EditableTextProps as jl, MotionTiming as jm, OverlayShape as jn, resetOverrideWarnings as jo, UiModifierFocus as jp, AnimateLayoutOptions as jr, PlacedTextRun as js, glyphCount as jt, LazyGridOptions as ju, hasDrawnText as k, pointerEventsOf as ka, TextRunMeasurer as kc, MAX_MEASURES_PER_CHILD as kd, UiLinearGradient as kf, UiSpringToken as kg, UiSubgridAxis as kh, propertyNarrowers as ki, CommonProps as kl, MotionState as km, RenderContext as kn, clearOverrideProperty as ko, editingGroupOf as kp, DefaultImageResolverOptions as kr, EditableLayout as ks, buildRenderList as kt, sheetSource as ku, SemanticsPlacement as l, formatConstraints as la, resolvePaintState as lc, contrastRatio as ld, PaintBox as lf, AnimationDriver as lg, decorationColor as lh, BUTTON_INTERACTION as li, EditableText as ll, UiFocusEvent as lm, tracePathData as ln, parseShortcut as lo, UiInsetRegistry as lp, RangeResponse as lr, UiEnvironmentProvider as ls, splitMp3Frames as lt, UiSemanticStates as lu, UiSemanticsMap as m, UiAnimationFrameClock as ma, selectableTextNodes as mc, densityFactors as md, PaintTextAlign as mf, spring as mg, UiAlignment as mh, measureFlow as mi, Stack as ml, UiPasteEvent as mm, replayPaint as mn, UiPointerController as mo, observeViewportInsets as mp, SharedElementArgs as mr, CARET_WIDTH as ms, CommandKind as mt, validateRole as mu, UiSemanticsBox as n, steps as n_, LayoutExplanation as na, VerticalAlign as nc, hasThemeExtension as nd, resolvedSpansOf as nf, LayoutRecord as ng, UiNodeTransitions as nh, BordersOptions as ni, LazyGrid as nl, UiEventListenerOptions as nm, PaintPictureCache as nn, ShortcutRegistryOptions as no, boxShadowRadius as np, VideoClock as nr, TEXT_MATCHES_PROP as ns, demuxMp4Audio as nt, UI_ROLES as nu, dropIndexShifts as o, SizeDecision as oa, isPaintVisible as oc, withThemeExtension as od, textContentOf as of, findEnvironmentKey as og, DecorationRect as oh, borders as oi, Box as ol, UiBeforeInputEvent as om, PaintGradient as on, UiShortcutStep as oo, defineProperty as op, videoSource as or, FindMatch as os, Mp3Frames as ot, UiOrientation as ou, TEXT_RUN_ID_SEPARATOR as p, UiFrame as pa, clearSelectionRange as pc, UiDensity as pd, PaintSurface as pf, normalizeTransition as pg, UI_SUBGRID_AXES as ph, measure as pi, ScrollView as pl, UiKeyboardEvent as pm, PaintRecording as pn, PointerControllerOptions as po, noInsets as pp, MotionArgs as pr, CARET_BLINK_MS as ps, CLIP_STRIDE_FLOATS as pt, statesEqual as pu, parseWebVtt as q, EXTERNAL_FILES as qa, lineStartAt as qc, UiTextLink as qd, isPercentLength as qf, colorsEqual as qg, UiShapeName as qh, proportionalFontMetrics as qi, TextContentProps as ql, LayoutStats as qm, insetPadding as qn, SCROLLBAR_THICKNESS as qo, UiChild as qp, dropTarget as qr, DEFAULT_FONT_FAMILY as qs, WebGPUCanvasHost as qt, darkTheme as qu, UiSemanticsUpdate as r, LayoutStateExplanation as ra, colorToCss as rc, noThemeExtensions as rd, spanAtOffset as rf, UiEnvironment as rg, UiPropertyOverride as rh, Decorations as ri, LazyGridProps as rl, UiInputDispatcher as rm, PaintStats as rn, UiShortcut as ro, boxShadowReach as rp, VideoSourceArgs as rr, clearMatchRanges as rs, demuxMp4Video as rt, UI_SEMANTIC_STATES as ru, recordsEqual as s, describeLength as sa, normalizeTextAlign as sc, HighContrastOptions as sd, textSpansEqual as sf, UiNodeType as sg, DecorationShape as sh, decorated as si, Button as sl, UiCompositionEvent as sm, PaintResolver as sn, describeShortcut as so, propertyValuesEqual as sp, DefaultVideoResolver as sr, FindOptions as ss, Mp3Header as st, UiRole as su, UiSemanticsAction as t, linear as t_, Edges as ta, TextAlign as tc, defineThemeExtension as td, hiddenRangesOf as tf, lightColors as tg, UiNode as th, BorderEdge as ti, LazyColumn as tl, UiEventListener as tm, PaintCanvasFactory as tn, dragSessionFor as to, boxShadowArraysEqual as tp, scrollPosition as tr, SubtreeBounds as ts, Mp4VideoTrack as tt, UiPropertyValues as tu, SemanticsReuse as u, formatExplanation as ua, DEFAULT_LINE_HEIGHT_FACTOR as uc, highContrastColors as ud, PaintFillRule as uf, UiTransitionSpec as ug, decorationRect as uh, InteractiveOptions as ui, Grid as ul, UiGestureEvent as um, EMPTY_RECORDING as un, shortcutKeyCaps as uo, UiInsetSource as up, VideoPlayback as ur, provideEnvironment as us, WebGPUGlyphPages as ut, isUiRole as uu, rewalkSemantics as v, UiHostFrameClock as va, CharacterCountTextMeasurer as vc, spacingEqual as vd, inputsEqual as vf, UiAnimationOptions as vg, UiCursor as vh, noModifiers as vi, BindingId as vl, UiPointerKind as vm, LayoutInspectorOptions as vn, UiScrollability as vo, containerBands as vp, ImageSourceArgs as vr, editorOf as vs, ImageCommand as vt, EditableTextModel as vu, linkHoverOf as w, isNodeHitTestable as wa, TextLine as wc, UiTypographyExtensions as wd, ResolvedGradient as wf, createTween as wg, UiOverflow as wh, getPropertyNames as wi, UiGraphBuilder as wl, wheelDeltaYOf as wm, ScrollLayerStats as wn, PinchRecognizerOptions as wo, UiGroupEdit as wp, IconRasterizer as wr, EditCommand as ws, RenderTextCache as wt, SheetSourceArgs as wu, textRunOfRecordId as x, UiTimerFrameClock as xa, ParagraphLayout as xc, defaultShadows as xd, UiImage as xf, UiSpringOptions as xg, UiFontWeight as xh, contentOffset as xi, UiEventBinding as xl, UiWheelDeltaMode as xm, Canvas2DRendererOptions as xn, GestureInput as xo, UiTextInputState as xp, imageSource as xr, isReadOnly as xs, PrimitiveKind as xt, SheetHeaderRenderer as xu, semanticsInertAbove as y, UiHostFrameClockOptions as ya, FixedMetricsOptions as yc, spacingSteps as yd, paintValuesEqual as yf, UiReducedMotionPolicy as yg, UiDirection as yh, Transform as yi, UiBinding as yl, UiSelectionChangeEvent as ym, CanvasTextMeasurer as yn, UiWheelController as yo, unknownContainerSize as yp, ImageSources as yr, isEditableNode as ys, NO_CLIP_INDEX as yt, LazySheet as yu, markInstant as z, prepareInputSurface as za, lineIndexForOffset as zc, visualStatesEqual as zd, PercentLength as zf, transform as zg, borderRadius as zh, MainAxisAlignment as zi, PaintElementProps as zl, slideDown as zm, resolveProperty as zn, HitTestLayoutReader as zo, isUiModifier as zp, PinchableOptions as zr, fillTextRects as zs, initializeWebGPU as zt, VirtualItemMeasure as zu };
|
|
19051
|
-
//# sourceMappingURL=index-
|
|
19397
|
+
export { Mp4AudioTrack as $, UiDroppedFile as $a, Text as $c, PaintTextStyle as $d, UiContainerSize as $f, cubicBezier as $g, TextRunSpan as $h, AxisExplanation as $i, validateStates as $l, UiBorderRadiusValue as $m, ScrollOffset as $n, scrollbarThumbs as $o, UiPinchEvent as $p, clickOutside as $r, PaintState as $s, registerFontStack as $t, UiSpacing as $u, offsetAtPointIn as A, resolveCursor as Aa, lineEndAt as Ac, UiTextDecoration as Ad, isMinMaxTrack as Af, defaultMotion as Ag, UiShapeExtensions as Ah, propertyValuesEqualByName as Ai, StackProps as Al, LayoutResult as Am, LABEL_PADDING_X as An, overrideSources as Ao, ComponentLikeElement as Ap, ImageResolver as Ar, CanvasTextStyle as As, createTextCache as At, UiTheme as Au, markNow as B, touchActionFor as Ba, LazyGrid as Bc, resolvedSpansOf as Bd, boxShadowRadius as Bf, transformIsIdentity as Bg, LayoutRecord as Bh, parseAlignContent as Bi, UI_ROLES as Bl, UiNodeTransitions as Bm, resolvePropertyByName as Bn, HitTestResult as Bo, UiEventListenerOptions as Bp, ZoomState as Br, layoutTextLines as Bs, isWebGPUAvailable as Bt, hasThemeExtension as Bu, hasTextLinks as C, isNodeFocusable as Ca, lineIndexForOffset as Cc, visualStatesEqual as Cd, PercentLength as Cf, UiTweenOptions as Cg, borderRadius as Ch, findPropertyDefinition as Ci, PaintElementProps as Cl, slideDown as Cm, LayerCanvasFactory as Cn, UiGestureRecognizer as Co, isUiModifier as Cp, IconContext as Cr, syncEditorValue as Cs, RenderList as Ct, VirtualItemMeasure as Cu, setLinkHover as D, isNodeTabStop as Da, offsetForVerticalMove as Dc, UiFontVariant as Dd, fr as Df, UiMotion as Dg, borderRadiusValuesEqual as Dh, propertyEffects as Di, Reactive as Dl, UiSharedElements as Dm, LayoutReader as Dn, NodeTransitions as Do, FocusSource as Dp, iconKey as Dr, detectEditingPlatform as Ds, TEXTURED_STRIDE_FLOATS as Dt, UiVideoSurface as Du, linkRunAtPointIn as E, isNodeSelectable as Ea, offsetAtX as Ec, UiFontStyle as Ed, auto as Ef, UiEasingToken as Eg, borderRadiusIsZero as Eh, inheritedPropertyNames as Ei, PropsOf as El, SharedClaim as Em, UiRenderer as En, FocusNotifier as Eo, FocusOptions as Ep, IconSpec as Er, commandForKey as Es, TEXTURED_STRIDE_BYTES as Et, lazySource as Eu, UiFrameCallback as F, UiPlatformAdapter as Fa, previousWordStart as Fc, UiTextStyle as Fd, resolveLength as Ff, interpolatorFor as Fg, shapesEqual as Fh, placeGridItems as Fi, UiNodeRef as Fl, constraintsEqual as Fm, CanvasSurface as Fn, UiFindController as Fo, isUiChild as Fp, ShortcutsOptions as Fr, applyCanvasTextStyle as Fs, GlyphSlot as Ft, withDensity as Fu, VttTrack as G, TouchScrollerOptions as Ga, Button as Gc, textSpansEqual as Gd, propertyValuesEqual as Gf, colorToRgba as Gg, ParagraphTextMeasurer as Gh, ELLIPSIS as Gi, UiRole as Gl, DecorationShape as Gm, InsetPaddingArgs as Gn, SCROLLBAR_INSET as Go, UiCompositionEvent as Gp, ReorderableOptions as Gr, Canvas2DContext as Gs, WebGPURenderer as Gt, HighContrastOptions as Gu, performanceMarksEnabled as H, EditingHost as Ha, LazyListProps as Hc, spannedTextOf as Hd, boxShadowsEqual as Hf, UiBasicColors as Hg, FixedMetricsOptions as Hh, parseMainAxisAlignment as Hi, UiAutocomplete as Hl, UiPropertyOverrides as Hm, ThemeTokenTarget as Hn, UiHitTester as Ho, UiListenerErrorReporter as Hp, AutoScrollOptions as Hr, runFontString as Hs, CapturedFrame as Ht, themeExtension as Hu, UiScheduler as I, capturePointer as Ia, wordRangeAt as Ic, defaultTextStyle as Id, BOX_SHADOW_BLUR_REACH as If, UiTransform as Ig, UiColors as Ih, sizeGridTracks as Ii, UiProperties as Il, tightenConstraints as Im, createCanvasSurface as In, SelectionControllerOptions as Io, isUiElement as Ip, contextMenu as Ir, buildFontString as Is, GlyphUpload as It, UiThemeExtension as Iu, ByteSource as J, UiDragPayload as Ja, Grid as Jc, PaintFillRule as Jd, UiInsetSource as Jf, normalizeColor as Jg, TextLineRun as Jh, LayoutNotifier as Ji, isUiRole as Jl, decorationRect as Jm, publishInset as Jn, ScrollbarAxis as Jo, UiGestureEvent as Jp, reorderable as Jr, DEFAULT_FONT_SIZE as Js, WebGPUSurface as Jt, highContrastColors as Ju, cueAt as K, UiTouchScroller as Ka, Column as Kc, textStylesEqual as Kd, UiInsetEdge as Kf, colorValuesEqual as Kg, SpannedRuns as Kh, layoutParagraph as Ki, UiSemanticState as Kl, DecorationStroke as Km, PublishInsetArgs as Kn, SCROLLBAR_MIN_THUMB as Ko, UiEventType as Kp, dragSource as Kr, Canvas2DGradient as Ks, WebGPURendererOptions as Kt, UiContrast as Ku, UiSchedulerOptions as L, isImeKey as La, Responsive as Lc, editableSpansOf as Ld, UiBoxShadow as Lf, UiTransforms as Lg, colorsEqualPalette as Lh, AlignContent as Li, UiPropertyName as Ll, NodeId as Lm, resolveBoolean as Ln, SelectionHost as Lo, UiPropValue as Lp, shortcut as Lr, createCanvasTextStyle as Ls, WebGPUGlyphAtlas as Lt, UiThemeExtensionOptions as Lu, paragraphGeometryFrom as M, PlatformAdapterOptions as Ma, nextGraphemeEnd as Mc, UiTextMetrics as Md, minmax as Mf, interpolateColor as Mg, UiShapes as Mh, GridItemRequest as Mi, TextProps as Ml, Size as Mm, drawOverlayShapes as Mn, writeDeclaredProperty as Mo, UiElement as Mp, animateLayout as Mr, SpanPaint as Ms, textRuns as Mt, lightTheme as Mu, selectionRectsIn as N, PlatformEventTarget as Na, nextWordEnd as Nc, UiTextRange as Nd, percent as Nf, interpolateNumber as Ng, defaultShapes as Nh, GridPlacement as Ni, TypographyProps as Nl, TightenOptions as Nm, labelOrigin as Nn, writeOverrideProperty as No, isComponentLikeElement as Np, ContextMenuOptions as Nr, TextLinePlacement as Ns, GlyphShaper as Nt, themesEqual as Nu, ParagraphGeometry as O, isSubtreeInert as Oa, selectionRects as Oc, UiResolvedTextSpan as Od, isAutoLength as Of, UiSpringSpec as Og, normalizeBorderRadius as Oh, propertyIsInherited as Oi, RowProps as Ol, Constraints as Om, RenderChanges as On, resetTransitionWarnings as Oo, UiFocusManager as Op, DefaultImageResolver as Or, isPrintable as Os, TextRunDraw as Ot, isVideoSurface as Ou, wordRangeIn as P, PlatformSurface as Pa, previousGraphemeStart as Pc, UiTextSpan as Pd, repeat as Pf, interpolateTransform as Pg, isShapeName as Ph, GridTrack as Pi, UiEventProps as Pl, clampSize as Pm, CanvasHost as Pn, FindHost as Po, isObservable$1 as Pp, ShortcutOptions as Pr, TextRunRect as Ps, GLYPH_SUBPIXEL_PHASES as Pt, withContrast as Pu, rangeSource as Q, UiDropZone as Qa, Stack as Qc, PaintTextAlign as Qd, observeViewportInsets as Qf, UiEasing as Qg, TextRunMeasurer as Qh, ScrollAdjustment as Qi, validateRole as Ql, UiAlignment as Qm, sizeContainer as Qn, scrollbarThumb as Qo, UiPasteEvent as Qp, ClickOutsideOptions as Qr, PaintBoxShadow as Qs, fontStackFor as Qt, densityFactors as Qu, MARK_PREFIX as R, pointerDeviceOf as Ra, ResponsiveProps as Rc, flattenTextSpans as Rd, boxShadow as Rf, parseTransform as Rg, darkColors as Rh, CrossAxisAlignment as Ri, UiPropertyValueOf as Rl, NodeProperty as Rm, resolveNumber as Rn, UiSelectionController as Ro, UiProps as Rp, shortcuts as Rr, drawText as Rs, WebGPUTextureCache as Rt, UiThemeExtensions as Ru, clearLinkHover as S, UiTimerFrameClockOptions as Sa, lineIndexAtY as Sc, visualState as Sd, MinMaxTrack as Sf, UiTween as Sg, UiBorderRadiuses as Sh, closestPropertyName as Si, InteractionProps as Sl, scaleFrom as Sm, traceRoundedRect as Sn, GestureRecognizerOptions as So, defineModifier as Sp, IconCanvas as Sr, nextCaretToggle as Ss, RenderCommand as St, VIRTUAL_WINDOW_PROP as Su, linkOf as T, isNodeInert as Ta, offsetAtPoint as Tc, UiFontStretch as Td, UiTrackSize as Tf, UiDurationToken as Tg, borderRadiusEqual as Th, inheritedPropertyFlags as Ti, PositionProps as Tl, slideUp as Tm, RendererBackend as Tn, UiPinchRecognizer as To, UiModifierTeardown as Tp, IconRasterizerOptions as Tr, EditingPlatform as Ts, ScissorRect as Tt, VirtualViewport as Tu, setPerformanceMarks as U, EditingState as Ua, LazyRow as Uc, spansDifferOnlyInPaint as Ud, UiPropertyDefinition as Uf, UiColor as Ug, FontMetrics as Uh, FlexDirection as Ui, UiLiveRegion as Ul, DecorationFill as Um, themeTokens as Un, UiPoint as Uo, MOUSE_POINTER as Up, DragSourceOptions as Ur, textRunBackgrounds as Us, DrawStats as Ut, themeExtensionsEqual as Uu, measureSpan as V, EditingControllerOptions as Va, LazyGridProps as Vc, spanAtOffset as Vd, boxShadowReach as Vf, transformsEqual as Vg, CharacterCountTextMeasurer as Vh, parseCrossAxisAlignment as Vi, UI_SEMANTIC_STATES as Vl, UiPropertyOverride as Vm, resolveString as Vn, HitTester as Vo, UiInputDispatcher as Vp, pinchable as Vr, runCanvasStyleInto as Vs, WebGPUError as Vt, noThemeExtensions as Vu, VttCue as W, UiEditingController as Wa, Box as Wc, textContentOf as Wd, defineProperty as Wf, colorToHex as Wg, ParagraphLayout as Wh, parseFlexDirection as Wi, UiOrientation as Wl, DecorationRect as Wm, sameArgs as Wn, SCROLLBAR_HOVER_ZONE as Wo, UiBeforeInputEvent as Wp, DropTargetOptions as Wr, textRunDecorations as Ws, RenderHooks as Wt, withThemeExtension as Wu, RangeSourceOptions as X, UiDragState as Xa, Row as Xc, PaintLineJoin as Xd, insetsEqual as Xf, rgb8 as Xg, TextMeasurer as Xh, SCROLLBAR_FADE_MS as Xi, normalizeStates as Xl, paintsAfterChildren as Xm, SizeContainerArgs as Xn, scrollLeaderOf as Xo, UiKeyModifiers as Xp, DraggableOptions as Xr, DEFAULT_TEXT_COLOR as Xs, bumpFontStack as Xt, relativeLuminance as Xu, DEFAULT_BLOCK_SIZE as Y, UiDragSession as Ya, Paint as Yc, PaintLineCap as Yd, UiInsets as Yf, parseColor as Yg, TextMeasureRequest as Yh, LayoutEngine as Yi, isUiSemanticState as Yl, hasDecorationPhase as Ym, BreakpointArgs as Yn, ScrollbarThumb as Yo, UiInputEvent as Yp, DragOffset as Yr, DEFAULT_FONT_WEIGHT as Ys, createWebGPUSurface as Yt, raiseContrast as Yu, bufferSource as Z, UiDropEffect as Za, ScrollView as Zc, PaintSurface as Zd, noInsets as Zf, rgba as Zg, TextOverflow as Zh, SCROLLBAR_LINGER_MS as Zi, statesEqual as Zl, UI_SUBGRID_AXES as Zm, breakpoint as Zn, scrollRange as Zo, UiKeyboardEvent as Zp, draggable as Zr, ObjectFit as Zs, clearFontStacks as Zt, UiDensity as Zu, buildSemanticsTree as _, UiFrameTime as _a, setSelectionRange as _c, isLayoutProtocol as _d, linearGradient as _f, UiAnimation as _g, UiTextWrapValue as _h, bundle as _i, FlexContainerProps as _l, fade as _m, LayoutInspector as _n, UiScrollBehavior as _o, UiModifierSet as _p, IconSourceArgs as _r, editorFor as _s, INSTANCE_STRIDE_FLOATS as _t, LazyListOptions as _u, diffSemantics as a, RelayoutExplanation as aa, createPaintState as ac, defaultShadows as ad, UiImage as af, createEnvironmentKey as ag, UiFontWeight as ah, borderShapes as ai, UiEventBinding as al, UiWheelDeltaMode as am, PaintContext2D as an, UiShortcutRegistry as ao, UiTextInputState as ap, VideoTransport as ar, setMatchRanges as as, Mp3Frame as at, SheetHeaderRenderer as au, semanticsMemory as b, UiManualFrameClock as ba, RunMeasure as bc, defaultVisualState as bd, AutoLength as bf, UiSpring as bg, validateSubgrid as bh, accumulatedOffsetTo as bi, GridProps as bl, resolveMotionState as bm, Canvas2DRenderer as bn, isScrollContainer as bo, UiModifier as bp, iconSource as br, isMultiline as bs, PrimitiveCommand as bt, VIRTUAL_INDEX_PROP as bu, SemanticsMemory as c, describeOverrides as ca, normalizeVerticalAlign as cc, UiTypographyExtensions as cd, ResolvedGradient as cf, DirtyFlags as cg, UiOverflow as ch, focusRing as ci, UiGraphBuilder as cl, wheelDeltaYOf as cm, PaintTarget as cn, formatShortcut as co, UiGroupEdit as cp, DefaultVideoResolverOptions as cr, findMatchesIn as cs, readMp3Header as ct, SheetSourceArgs as cu, SemanticsRewalk as d, labelNode as da, TEXT_SELECTION_PROP as dc, isTypographyRole as dd, UiGradientOffset as df, UiTransitionValue as dg, UiPosition as dh, hoverable as di, ButtonProps as dl, MOTION_REST as dm, PaintOp as dn, KeyboardControllerOptions as do, comparePositions as dp, VideoResolver as dr, UiEnvironmentKeys as ds, Affine as dt, UiVirtualSheetOptions as du, easings as e_, CustomLayoutExplanation as ea, PaintTextSpan as ec, defaultSpacing as ed, UiPaint as ef, TextRunStyle as eg, UiColorValue as eh, autoFocus as ei, createElement as el, UiPointerDevice as em, PaintCanvas as en, UiFileDropMessage as eo, UiContainerSizeSource as ep, ScrollPositionArgs as er, scrollbarZoneAt as es, Mp4Sample as et, CompositionRange as eu, SemanticsSpan as f, withOverrideSource as fa, TextRange as fc, typographyEqual as fd, UiGradientStop as ff, assertTransitionMap as fg, UiSelfAlignment as fh, interactive as fi, ColumnProps as fl, MotionChannel as fm, PaintRecorder as fn, UiKeyboardController as fo, edgeField as fp, canDecodeVideo as fr, EnvironmentNotifier as fs, CLIP_STRIDE_BYTES as ft, VIRTUAL_SHEET_PROP as fu, buildSemanticsSubtree as g, UiFrameClockFactory as ga, selectionRangeOf as gc, UiLayoutProtocol as gd, gradientsEqual as gf, AnimatedCell as gg, UiTextOverflowValue as gh, UiModifierBundle as gi, EnvironmentProps as gl, ResolvedMotionState as gm, InspectorOverlay as gn, ScrollSink as go, UiModifierLayout as gp, sharedElement as gr, caretVisibleAt as gs, INSTANCE_STRIDE_BYTES as gt, LazyItemRenderer as gu, UiSemanticsRecord as h, UiFrameClock as ha, selectableTextOf as hc, UiLayoutContext as hd, gradientPaint as hf, tween as hg, UiTextDirection as hh, pressable as hi, EditableTextProps as hl, MotionTiming as hm, INSPECTOR_HEAT_MS as hn, ScrollContainerState as ho, UiModifierFocus as hp, motion as hr, EDITOR_PROP as hs, GlyphCommand as ht, LazyGridOptions as hu, UiSemanticsPatch as i, OverrideSources as ia, computeObjectFitRect as ic, UiShadows as id, pathValuesEqual as if, UiEnvironmentKey as ig, UiFlexWrap as ih, FocusRingOptions as ii, UiGraph as il, UiTextChangeEvent as im, paintPictures as in, UiShortcutBinding as io, UiTextInput as ip, VideoState as ir, matchRangesOf as is, Mp3Format as it, LazySheetProps as iu, paragraphGeometry as j, CanvasPlatformSurface as ja, lineStartAt as jc, UiTextLink as jd, isPercentLength as jf, UiInterpolator as jg, UiShapeName as jh, GridContribution as ji, TextContentProps as jl, LayoutStats as jm, OverlayShape as jn, resetOverrideWarnings as jo, UiChild as jp, AnimateLayoutOptions as jr, PlacedTextRun as js, glyphCount as jt, darkTheme as ju, hasDrawnText as k, pointerEventsOf as ka, graphemeBoundaries as kc, UiSpannedText as kd, isFrLength as kf, UiSpringToken as kg, uniformBorderRadius as kh, propertyNarrowers as ki, ScrollViewProps as kl, LayoutBox as km, RenderContext as kn, clearOverrideProperty as ko, ComponentResolver as kp, DefaultImageResolverOptions as kr, EditableLayout as ks, buildRenderList as kt, videoFrameSize as ku, SemanticsPlacement as l, formatConstraints as la, resolvePaintState as lc, UiTypographyRole as ld, ResolvedGradientStop as lf, AnimationDriver as lg, UiPlacement as lh, BUTTON_INTERACTION as li, BoxModelProps as ll, DirtyNodeSet as lm, tracePathData as ln, parseShortcut as lo, UiTextPosition as lp, RangeResponse as lr, UiEnvironmentProvider as ls, splitMp3Frames as lt, SheetViewport as lu, UiSemanticsMap as m, UiAnimationFrameClock as ma, selectableTextNodes as mc, UiLayoutChild as md, UiRadialGradient as mf, spring as mg, UiTextAlign as mh, measureFlow as mi, ContainerProps as ml, MotionStateInput as mm, replayPaint as mn, UiPointerController as mo, UiModifierEnvironment as mp, SharedElementArgs as mr, CARET_WIDTH as ms, CommandKind as mt, LazyAxis as mu, UiSemanticsBox as n, steps as n_, LayoutExplanation as na, VerticalAlign as nc, spacingEqual as nd, inputsEqual as nf, spannedRunsFor as ng, UiCursor as nh, BordersOptions as ni, BindingId as nl, UiPointerKind as nm, PaintPictureCache as nn, ShortcutRegistryOptions as no, containerBands as np, VideoClock as nr, TEXT_MATCHES_PROP as ns, demuxMp4Audio as nt, EditableTextModel as nu, dropIndexShifts as o, SizeDecision as oa, isPaintVisible as oc, shadowsEqual as od, GradientPaint as of, findEnvironmentKey as og, UiGridAutoFlow as oh, borders as oi, ChildrenBindingId as ol, UiWheelEvent as om, PaintGradient as on, UiShortcutStep as oo, textInputOf as op, videoSource as or, FindMatch as os, Mp3Frames as ot, SheetRange as ou, TEXT_RUN_ID_SEPARATOR as p, UiFrame as pa, clearSelectionRange as pc, MAX_MEASURES_PER_CHILD as pd, UiLinearGradient as pf, normalizeTransition as pg, UiSubgridAxis as ph, measure as pi, CommonProps as pl, MotionState as pm, PaintRecording as pn, PointerControllerOptions as po, editingGroupOf as pp, MotionArgs as pr, CARET_BLINK_MS as ps, CLIP_STRIDE_FLOATS as pt, sheetSource as pu, parseWebVtt as q, EXTERNAL_FILES as qa, EditableText as qc, PaintBox as qd, UiInsetRegistry as qf, colorsEqual as qg, TextLine as qh, proportionalFontMetrics as qi, UiSemanticStates as ql, decorationColor as qm, insetPadding as qn, SCROLLBAR_THICKNESS as qo, UiFocusEvent as qp, dropTarget as qr, DEFAULT_FONT_FAMILY as qs, WebGPUCanvasHost as qt, contrastRatio as qu, UiSemanticsUpdate as r, LayoutStateExplanation as ra, colorToCss as rc, spacingSteps as rd, paintValuesEqual as rf, UiEnvironment as rg, UiDirection as rh, Decorations as ri, UiBinding as rl, UiSelectionChangeEvent as rm, PaintStats as rn, UiShortcut as ro, unknownContainerSize as rp, VideoSourceArgs as rr, clearMatchRanges as rs, demuxMp4Video as rt, LazySheet as ru, recordsEqual as s, describeLength as sa, normalizeTextAlign as sc, UiTypography as sd, MAX_GRADIENT_STOPS as sf, UiNodeType as sg, UiObjectFit as sh, decorated as si, UiChildrenBinding as sl, noKeyModifiers as sm, PaintResolver as sn, describeShortcut as so, UiEditingGroup as sp, DefaultVideoResolver as sr, FindOptions as ss, Mp3Header as st, SheetRowRenderer as su, UiSemanticsAction as t, linear as t_, Edges as ta, TextAlign as tc, scaleSpacing as td, UiPath as tf, TextWrap as tg, UiContentDistribution as th, BorderEdge as ti, UiDefinition as tl, UiPointerEvent as tm, PaintCanvasFactory as tn, dragSessionFor as to, bandOf as tp, scrollPosition as tr, SubtreeBounds as ts, Mp4VideoTrack as tt, EditUnit as tu, SemanticsReuse as u, formatExplanation as ua, DEFAULT_LINE_HEIGHT_FACTOR as uc, defaultTypography as ud, UiGradient as uf, UiTransitionSpec as ug, UiPointerEvents as uh, InteractiveOptions as ui, BoxProps as ul, MOTION_CHANNELS as um, EMPTY_RECORDING as un, shortcutKeyCaps as uo, adjacentField as up, VideoPlayback as ur, provideEnvironment as us, WebGPUGlyphPages as ut, UiVirtualSheet as uu, rewalkSemantics as v, UiHostFrameClock as va, CaretRect as vc, UiVisualState as vd, radialGradient as vf, UiAnimationOptions as vg, UiThemeColorName as vh, noModifiers as vi, FlexItemProps as vl, isMotionRest as vm, LayoutInspectorOptions as vn, UiScrollability as vo, UiUnknownModifierPropertyError as vp, ImageSourceArgs as vr, editorOf as vs, ImageCommand as vt, LazySourceArgs as vu, linkHoverOf as w, isNodeHitTestable as wa, lineLimit as wc, UiFontKerning as wd, UiLength as wf, createTween as wg, borderRadiusCorners as wh, getPropertyNames as wi, PaintProps as wl, slideFrom as wm, ScrollLayerStats as wn, PinchRecognizerOptions as wo, UiModifierHost as wp, IconRasterizer as wr, EditCommand as ws, RenderTextCache as wt, VirtualUpdate as wu, textRunOfRecordId as x, UiTimerFrameClock as xa, caretRectFor as xc, hasVisualState as xd, FrLength as xf, UiSpringOptions as xg, UiBorderRadius as xh, contentOffset as xi, IdentityProps as xl, rotateFrom as xm, Canvas2DRendererOptions as xn, GestureInput as xo, UiModifierKind as xp, imageSource as xr, isReadOnly as xs, PrimitiveKind as xt, VIRTUAL_LEAD_PROP as xu, semanticsInertAbove as y, UiHostFrameClockOptions as ya, PlacedLine as yc, UiVisualStateSet as yd, validateGradient as yf, UiReducedMotionPolicy as yg, UiVerticalAlign as yh, Transform as yi, GridItemProps as yl, pop as ym, CanvasTextMeasurer as yn, UiWheelController as yo, assertModifierList as yp, ImageSources as yr, isEditableNode as ys, NO_CLIP_INDEX as yt, UiVirtualWindow as yu, markInstant as z, prepareInputSurface as za, LazyColumn as zc, hiddenRangesOf as zd, boxShadowArraysEqual as zf, transform as zg, lightColors as zh, MainAxisAlignment as zi, UiPropertyValues as zl, UiNode as zm, resolveProperty as zn, HitTestLayoutReader as zo, UiEventListener as zp, PinchableOptions as zr, fillTextRects as zs, initializeWebGPU as zt, defineThemeExtension as zu };
|
|
19398
|
+
//# sourceMappingURL=index-DR8HAfh3.d.ts.map
|