gesso-core 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1480,6 +1480,29 @@ interface DecorationBox {
1480
1480
  readonly y?: number;
1481
1481
  readonly width?: number;
1482
1482
  readonly height?: number;
1483
+ /**
1484
+ * The far edges, as distances inward from the node's right and
1485
+ * bottom. Any two of `x`, `width`, `right` fix the horizontal axis,
1486
+ * exactly as CSS's `left`, `width` and `right` do, and likewise
1487
+ * `y`, `height`, `bottom`.
1488
+ *
1489
+ * { y: 0, height: 2 } the top edge, two pixels
1490
+ * { bottom: 0, height: 2 } the bottom edge
1491
+ * { x: 0, width: 2, y: 2, bottom: 2 } the left edge, between them
1492
+ *
1493
+ * Without them a shape could only be placed from the top left, and
1494
+ * `width` and `height` only defaulted to the node's own — so
1495
+ * anything pinned to a far edge, or spanning between two, had to be
1496
+ * built by a caller that had already measured the node. An
1497
+ * application that declares its own geometry, as a spreadsheet
1498
+ * declares its row height, does not need this; a general modifier
1499
+ * such as `borders()` cannot exist without it.
1500
+ *
1501
+ * Given all three on one axis, the size wins and the far inset is
1502
+ * ignored, which is the rule CSS settles the same conflict with.
1503
+ */
1504
+ readonly right?: number;
1505
+ readonly bottom?: number;
1483
1506
  /**
1484
1507
  * Grows the rectangle on all four sides. This is what puts a focus
1485
1508
  * ring outside the control instead of on top of it.
@@ -1993,6 +2016,32 @@ declare enum UiEventType {
1993
2016
  BeforeInput = "beforeinput",
1994
2017
  /** An editable's text changed. */
1995
2018
  Input = "input",
2019
+ /**
2020
+ * An editable's selection moved, whether or not its text changed.
2021
+ *
2022
+ * Separate from `Input` because the caret moves without the text on
2023
+ * every arrow key, every click into the text and every
2024
+ * select-all — and something has to be able to follow it. A formula
2025
+ * editor that colours the bracket beside the caret has no other way
2026
+ * to know it moved.
2027
+ *
2028
+ * Fires *after* `Input` when a change did both, so a listener that
2029
+ * reads the text sees the new one. It is skipped entirely when the
2030
+ * selection did not actually move, so holding a key that is already
2031
+ * at the end of the text is silent.
2032
+ */
2033
+ SelectionChange = "selectionchange",
2034
+ /**
2035
+ * Text arrived from the system clipboard with nothing editable
2036
+ * focused.
2037
+ *
2038
+ * A paste with a caret in it belongs to the text and never reaches
2039
+ * here. This is the other case: a surface that owns a selection of
2040
+ * its own — a grid with a rectangle of cells picked out — and is the
2041
+ * only thing that knows what a block of text means to it.
2042
+ * `preventDefault()` says it was taken.
2043
+ */
2044
+ Paste = "paste",
1996
2045
  Click = "click",
1997
2046
  LongPress = "longpress",
1998
2047
  DragStart = "dragstart",
@@ -2220,12 +2269,45 @@ declare class UiBeforeInputEvent extends UiInputEvent {
2220
2269
  * An editable node's text changed: the new value and the selection
2221
2270
  * after the change. Bubbles, so a form can watch all its fields.
2222
2271
  */
2272
+ /**
2273
+ * Text from the system clipboard, offered to whatever holds focus.
2274
+ *
2275
+ * Carries the text rather than a clipboard handle, because a render
2276
+ * worker has neither a clipboard nor a window: the shell reads it and
2277
+ * sends it across, which is the same path `ShellService.copyText`
2278
+ * takes in the other direction.
2279
+ */
2280
+ declare class UiPasteEvent extends UiInputEvent {
2281
+ readonly text: string;
2282
+ constructor(text: string);
2283
+ }
2223
2284
  declare class UiTextChangeEvent extends UiInputEvent {
2224
2285
  readonly value: string;
2225
2286
  readonly selectionStart: number;
2226
2287
  readonly selectionEnd: number;
2227
2288
  constructor(value: string, selectionStart: number, selectionEnd: number);
2228
2289
  }
2290
+ /**
2291
+ * An editable's selection moved.
2292
+ *
2293
+ * Carries the text as well as the offsets, because every use of this
2294
+ * is "what is under the caret" and the answer needs both — and
2295
+ * reading the text back off the model afterwards is a second source
2296
+ * of truth that can disagree by a frame.
2297
+ *
2298
+ * `start` and `end` are ordered; `anchor` and `focus` are where the
2299
+ * selection was begun and where the caret now is, which is the pair
2300
+ * that says which way it was dragged.
2301
+ */
2302
+ declare class UiSelectionChangeEvent extends UiInputEvent {
2303
+ readonly value: string;
2304
+ readonly start: number;
2305
+ readonly end: number;
2306
+ readonly anchor: number;
2307
+ readonly focus: number;
2308
+ constructor(value: string, start: number, end: number, anchor: number, focus: number);
2309
+ get collapsed(): boolean;
2310
+ }
2229
2311
  /**
2230
2312
  * Wheel scroll input event.
2231
2313
  *
@@ -3760,6 +3842,24 @@ declare function spannedTextOf(node: UiNode): UiSpannedText | undefined;
3760
3842
  declare function textContentOf(node: UiNode): string;
3761
3843
  /** The runs of a node's paragraph; empty when it has none. */
3762
3844
  declare function resolvedSpansOf(node: UiNode): readonly UiResolvedTextSpan[];
3845
+ /**
3846
+ * The runs an *editable* node styles its own text with.
3847
+ *
3848
+ * An editable's paragraph is the user's, held by its model rather
3849
+ * than by a property — so unlike a `Text`, its runs do not supply the
3850
+ * text, they only describe it. `spans` on an editable is presentation
3851
+ * over a string somebody is typing.
3852
+ *
3853
+ * Which is why this checks. Every offset the editor works in — the
3854
+ * caret, the selection, the hit test that turns a click into a text
3855
+ * position — is an offset into the model's string. Runs describing a
3856
+ * *different* string would put the glyphs somewhere the caret does
3857
+ * not agree with, and the field would look subtly, unfixably wrong.
3858
+ * When they disagree the text is drawn unstyled, which is a frame of
3859
+ * plain colour rather than a frame of nonsense, and corrects itself
3860
+ * as soon as the application catches up.
3861
+ */
3862
+ declare function editableSpansOf(node: UiNode, text: string): readonly UiResolvedTextSpan[];
3763
3863
  /** The span covering an offset, or undefined where no run does. */
3764
3864
  declare function spanAtOffset(spans: readonly UiResolvedTextSpan[], offset: number): UiResolvedTextSpan | undefined;
3765
3865
  /**
@@ -4640,6 +4740,430 @@ declare const lazySource: ((args: LazySourceArgs, key?: string | number) => UiMo
4640
4740
  readonly kind: UiModifierKind<LazySourceArgs>;
4641
4741
  };
4642
4742
  //#endregion
4743
+ //#region src/composition/UiVirtualSheet.d.ts
4744
+ /**
4745
+ * Two-axis windowing, for a surface whose geometry is known rather
4746
+ * than measured.
4747
+ *
4748
+ * `LazyColumn` and `LazyGrid` window one axis and learn the extent of
4749
+ * an item by mounting and measuring it, correcting an estimate as the
4750
+ * user scrolls. A spreadsheet is the other case: every row is the same
4751
+ * height and every column the same width because the sheet says so, so
4752
+ * there is nothing to measure and nothing to correct, and the window
4753
+ * on each axis is arithmetic on the scroll offset.
4754
+ *
4755
+ * That difference is why this is its own class rather than a second
4756
+ * axis bolted onto `UiVirtualWindow`. Dropping measurement drops the
4757
+ * correction table, the scroll anchoring and the per-frame walk that
4758
+ * collects extents — none of which a sheet can use — and what is left
4759
+ * is small enough to read in one sitting.
4760
+ *
4761
+ * It also deliberately does **not** use `subgrid: 'columns'`. A lazy
4762
+ * grid's rows share tracks with a header because their widths come
4763
+ * from their content, and `LayoutEngine.collectSubgridColumns` pays
4764
+ * for that by measuring every cell of every mounted row, at unbounded
4765
+ * constraints, on every layout. A sheet is told its column widths, so
4766
+ * a row is an ordinary `Row` of fixed-width cells and the tracks never
4767
+ * have to be sized at all.
4768
+ */
4769
+ interface SheetViewport {
4770
+ /** Horizontal scroll offset of the container. */
4771
+ scrollX: number;
4772
+ /** Vertical scroll offset of the container. */
4773
+ scrollY: number;
4774
+ /** Visible width. */
4775
+ width: number;
4776
+ /** Visible height. */
4777
+ height: number;
4778
+ }
4779
+ /** The cells the window has mounted, inclusive on both ends. */
4780
+ interface SheetRange {
4781
+ readonly firstRow: number;
4782
+ readonly lastRow: number;
4783
+ readonly firstColumn: number;
4784
+ readonly lastColumn: number;
4785
+ }
4786
+ /**
4787
+ * Builds one row, given the columns the window wants in it.
4788
+ *
4789
+ * It must return a `Row` (or anything that lays its children out
4790
+ * horizontally), and exactly one child per column in `[firstColumn,
4791
+ * lastColumn]`, each keyed by its **absolute** column index. The
4792
+ * window adds the leading spacer and sets the row's own geometry, so
4793
+ * the renderer is only ever asked for cells.
4794
+ *
4795
+ * Keys are absolute rather than positional on purpose: a scroll of one
4796
+ * row then reconciles to one row built and one dropped, instead of
4797
+ * every mounted cell being rewritten to hold its neighbour's value.
4798
+ */
4799
+ type SheetRowRenderer = (row: number, firstColumn: number, lastColumn: number) => UiChild;
4800
+ interface UiVirtualSheetOptions {
4801
+ readonly rowCount: Reactive<number>;
4802
+ readonly columnCount: Reactive<number>;
4803
+ /** The height every row has unless `rowHeights` says otherwise. */
4804
+ readonly rowHeight: number;
4805
+ /**
4806
+ * The rows that are not the default height, by row index.
4807
+ *
4808
+ * **Sparse, where `columnWidth` is an array, and the asymmetry is
4809
+ * deliberate.** A sheet has a few hundred columns and a width for
4810
+ * each of them is a reasonable thing to hand over; it has up to a
4811
+ * million rows, and an array that long — rebuilt whenever one row
4812
+ * changed — would be the largest allocation in the application, to
4813
+ * describe a sheet where every row but two is the same.
4814
+ *
4815
+ * What actually produces a non-default height is hiding a row
4816
+ * (zero), autofitting one, or wrapping text in it. All three are
4817
+ * exceptions by nature, and there are tens of them rather than
4818
+ * thousands, so the offsets are a multiplication plus a binary
4819
+ * search over the exceptions rather than a prefix sum over
4820
+ * everything.
4821
+ */
4822
+ readonly rowHeights?: ReadonlyMap<number, number>;
4823
+ /**
4824
+ * One width for every column, or a width per column.
4825
+ *
4826
+ * An array is what makes a column resizable, and it is the reason
4827
+ * the offsets below are a prefix sum rather than a multiplication.
4828
+ * A sheet of a few hundred columns keeps the sum and searches it;
4829
+ * that is two orders of magnitude cheaper than measuring, which is
4830
+ * the thing this class exists not to do.
4831
+ */
4832
+ readonly columnWidth: number | readonly number[];
4833
+ /** Rows mounted beyond each edge of the viewport. Default 3. */
4834
+ readonly rowOverscan?: Reactive<number>;
4835
+ /** Columns mounted beyond each edge of the viewport. Default 2. */
4836
+ readonly columnOverscan?: Reactive<number>;
4837
+ /**
4838
+ * A frozen strip at the start of every row — a sheet's row numbers.
4839
+ *
4840
+ * The window needs its width because it is content: it shifts every
4841
+ * column along by that much and it is part of the scrollable extent.
4842
+ * Keeping it *visible* while the sheet scrolls sideways is the
4843
+ * renderer's business, with `position: 'sticky'` on whatever the row
4844
+ * renderer puts there.
4845
+ */
4846
+ readonly gutterWidth?: number;
4847
+ /** Height of the header row above the rows, when there is one. */
4848
+ readonly headerHeight?: number;
4849
+ /**
4850
+ * Rows and columns kept mounted however far the sheet is scrolled.
4851
+ *
4852
+ * A frozen pane, and the second thing that cannot be windowed by
4853
+ * position alone — `extendRange` is no use here, because widening
4854
+ * the window back to row 0 from row 5,000 would mount five thousand
4855
+ * rows to show one.
4856
+ *
4857
+ * What this does is *mount* them and take them out of the scrolled
4858
+ * window, so they appear once rather than twice and the spacers
4859
+ * account for them. Keeping them **visible** is the renderer's
4860
+ * business, with `position: 'sticky'` — exactly as it already is
4861
+ * for the header row and the gutter, which are this idea with the
4862
+ * count fixed at one.
4863
+ *
4864
+ * With `frozenColumns` set, a row renderer is asked for the columns
4865
+ * in `[0, frozenColumns)` first and then for `[firstColumn,
4866
+ * lastColumn]`, and the window puts the leading spacer between the
4867
+ * two groups.
4868
+ */
4869
+ readonly frozenRows?: number;
4870
+ readonly frozenColumns?: number;
4871
+ /**
4872
+ * Widens the window the viewport implies, for things the document
4873
+ * says reach outside it.
4874
+ *
4875
+ * **The one place a sheet's geometry is allowed to depend on its
4876
+ * contents.** Everything else here is arithmetic on the scroll
4877
+ * offset, which is what makes it cheap; this is the exception, and
4878
+ * it exists because two things genuinely cannot be windowed by
4879
+ * position alone.
4880
+ *
4881
+ * A **merged cell** is the case that forced it. A merge spanning
4882
+ * C3:E3 is drawn by its anchor, C3, and when the sheet is scrolled
4883
+ * so the window begins at column D there is no anchor to draw —
4884
+ * the merge silently disappears at the left edge of the screen.
4885
+ * Widening the window to include the anchor is the only fix that
4886
+ * does not put the document inside this class: the caller knows
4887
+ * where its merges are, and returns a range that covers them.
4888
+ *
4889
+ * Called on every recompute, so it must be cheap — a lookup, not a
4890
+ * scan. Returning the range unchanged costs nothing at all. If what
4891
+ * it would answer changes without the viewport moving, the caller
4892
+ * says so with `invalidate`.
4893
+ */
4894
+ readonly extendRange?: (range: SheetRange) => SheetRange;
4895
+ /** Viewport assumed before the first layout. */
4896
+ readonly initialViewport?: {
4897
+ readonly width: number;
4898
+ readonly height: number;
4899
+ };
4900
+ }
4901
+ /**
4902
+ * Builds the row above the rows, for the columns now in the window.
4903
+ *
4904
+ * Rendered once per column window rather than once per frame, and
4905
+ * placed before the leading spacer, so a header that is
4906
+ * `position: 'sticky'` with `top: 0` stays put while the rows scroll
4907
+ * under it and moves with them when they scroll sideways.
4908
+ */
4909
+ type SheetHeaderRenderer = (firstColumn: number, lastColumn: number) => UiChild;
4910
+ /** The sheet sits on its scroll container under this property. */
4911
+ declare const VIRTUAL_SHEET_PROP = "virtualSheet";
4912
+ declare class UiVirtualSheet {
4913
+ readonly children$: BehaviorSubject<UiElement[]>;
4914
+ /**
4915
+ * The range now mounted, for whoever has to fetch the values in it.
4916
+ *
4917
+ * This is the whole reason the window is reachable from outside: the
4918
+ * render thread does not hold the cells, so the range it settles on
4919
+ * each frame is what it asks the application thread for. Emits only
4920
+ * when the range changes, so binding a command to it does not send
4921
+ * one per frame.
4922
+ */
4923
+ readonly range$: BehaviorSubject<SheetRange>;
4924
+ private rowCount;
4925
+ private columnCount;
4926
+ private rowOverscan;
4927
+ private columnOverscan;
4928
+ private rowHeight;
4929
+ private readonly gutterWidth;
4930
+ private readonly headerHeight;
4931
+ private frozenRows;
4932
+ private frozenColumns;
4933
+ private readonly renderRow;
4934
+ private renderHeader;
4935
+ private readonly extendRange;
4936
+ /** One width per column, or undefined when every column is the same. */
4937
+ private widths;
4938
+ /** `offsets[c]` is where column `c` starts, measured past the gutter. */
4939
+ private offsets;
4940
+ private uniformWidth;
4941
+ /**
4942
+ * The rows that are not `rowHeight` tall, in row order.
4943
+ *
4944
+ * Three parallel arrays rather than a map of objects: this is
4945
+ * searched on every hit test and on every frame that scrolls, and
4946
+ * the arrays are read in step.
4947
+ */
4948
+ private exceptionRows;
4949
+ private exceptionHeights;
4950
+ /** `exceptionStarts[i]` is where `exceptionRows[i]` starts, past the header. */
4951
+ private exceptionStarts;
4952
+ private range;
4953
+ private viewport;
4954
+ /** Rows built for the current column range, so a vertical scroll rebuilds one row. */
4955
+ private readonly mountedRows;
4956
+ /** The frozen rows, kept separately because they never leave. */
4957
+ private readonly frozenMounted;
4958
+ private mountedHeader;
4959
+ constructor(options: UiVirtualSheetOptions, renderRow: SheetRowRenderer, renderHeader?: SheetHeaderRenderer);
4960
+ /**
4961
+ * New column widths, as a drag on a header edge produces.
4962
+ *
4963
+ * The prefix sum is rebuilt whole. It is one pass over the columns
4964
+ * and it happens once per frame of a drag at most, against a
4965
+ * per-column offset that would otherwise have to be corrected
4966
+ * everywhere downstream of the column that moved.
4967
+ */
4968
+ setColumnWidths(widths: number | readonly number[]): void;
4969
+ private adoptWidths;
4970
+ /**
4971
+ * New row heights, as hiding a row or autofitting one produces.
4972
+ *
4973
+ * The exceptions are rebuilt whole, which is one pass over *them*
4974
+ * and not over the rows — the whole reason they are sparse. A
4975
+ * height of zero is a hidden row and is allowed; a negative one is
4976
+ * not.
4977
+ */
4978
+ setRowHeights(heights: ReadonlyMap<number, number> | undefined): void;
4979
+ /** The height every row has unless it is an exception. */
4980
+ setRowHeight(height: number): void;
4981
+ private adoptHeights;
4982
+ /**
4983
+ * Where each exception begins, and what they cost in total.
4984
+ *
4985
+ * `start` is the row's own offset past the header, so the inverse —
4986
+ * `rowAt` — can binary search it directly rather than reconstructing
4987
+ * it per probe.
4988
+ */
4989
+ private rebuildExceptionStarts;
4990
+ /** The index of the last exception starting at or before an offset, or -1. */
4991
+ private exceptionAt;
4992
+ /** How many exceptions come before a row, as an index into them. */
4993
+ private exceptionsBefore;
4994
+ /** The height of one row. Zero when it is hidden. */
4995
+ rowHeightOf(row: number): number;
4996
+ /** Where a row starts, measured past the header. */
4997
+ rowOffsetOf(row: number): number;
4998
+ /** Total height of the rows, not counting the header. */
4999
+ private get rowsHeight();
5000
+ /**
5001
+ * What the exceptions before `row` add to or take off the offset.
5002
+ *
5003
+ * Read off the last exception before it rather than summed: the
5004
+ * start of an exception already carries everything before it, so
5005
+ * its end minus where it *would* have ended is the running total.
5006
+ */
5007
+ private extraWithin;
5008
+ /** The width of one column. */
5009
+ widthOf(column: number): number;
5010
+ /** Where a column starts, measured past the gutter. */
5011
+ offsetOf(column: number): number;
5012
+ /** Total width of the columns, not counting the gutter. */
5013
+ private get columnsWidth();
5014
+ get contentWidth(): number;
5015
+ /** Where the scrolled columns begin, past the gutter and the frozen ones. */
5016
+ private get frozenWidth();
5017
+ get contentHeight(): number;
5018
+ /**
5019
+ * The cell under a point in the scroll container's own coordinates.
5020
+ *
5021
+ * The window already knows where everything is and how far it is
5022
+ * scrolled, which is the whole of this: a drag towards a cell — a
5023
+ * fill handle, a selection being stretched — is usually heading for
5024
+ * one that has not been mounted, so there is no node to hit-test and
5025
+ * arithmetic is the only answer available.
5026
+ */
5027
+ cellAt(x: number, y: number): {
5028
+ row: number;
5029
+ column: number;
5030
+ };
5031
+ /**
5032
+ * The row at a content offset, clamped to the sheet.
5033
+ *
5034
+ * A division when every row is the default height — the common case
5035
+ * by a very long way — and otherwise a binary search over the
5036
+ * exceptions followed by a division inside the uniform run that
5037
+ * follows the one it lands in.
5038
+ *
5039
+ * A hidden row occupies no offset at all, so the offset where it
5040
+ * *would* be belongs to the row after it. That falls out of the
5041
+ * arithmetic rather than being special-cased: a zero-height
5042
+ * exception starts and ends at the same place, so the point is
5043
+ * never inside it.
5044
+ */
5045
+ rowAt(offset: number): number;
5046
+ /**
5047
+ * The column at a content offset, clamped to the sheet.
5048
+ *
5049
+ * A binary search over the prefix sum when the columns differ, and
5050
+ * a division when they do not — the uniform case is the common one
5051
+ * and should not pay for the general one.
5052
+ */
5053
+ columnAt(offset: number): number;
5054
+ setRowCount(count: number): void;
5055
+ setColumnCount(count: number): void;
5056
+ /**
5057
+ * The bands, which the spike tunes from the screen.
5058
+ *
5059
+ * A band is the only defence against the round trip to the
5060
+ * application thread: rows inside it already hold their values when
5061
+ * the scroll reaches them. Widening it costs nodes on every frame
5062
+ * and cells on every publish, so what it should be is a measurement,
5063
+ * not a default — hence setters rather than a constant.
5064
+ */
5065
+ setOverscan(rows: number, columns: number): void;
5066
+ /**
5067
+ * How many rows and columns stay put while the rest scrolls.
5068
+ *
5069
+ * Freezing changes which rows are in the scrolled window, so every
5070
+ * mounted row is rebuilt — a row that was scrolling is now frozen
5071
+ * or the other way about.
5072
+ */
5073
+ setFrozen(rows: number, columns: number): void;
5074
+ /** Drops every mounted row and rebuilds against the last viewport. */
5075
+ invalidate(): void;
5076
+ /**
5077
+ * One step, run by the host each frame before layout.
5078
+ *
5079
+ * Nothing is measured and nothing is anchored: the offsets are exact,
5080
+ * so the rows a scroll reveals are placed correctly on the frame
5081
+ * that reveals them rather than corrected on the one after.
5082
+ */
5083
+ update(viewport: SheetViewport): void;
5084
+ private recompute;
5085
+ /**
5086
+ * The window, in content coordinates.
5087
+ *
5088
+ * The header and the gutter are *content*: they occupy the first
5089
+ * `headerHeight` pixels and the first `gutterWidth`, and `rowAt` and
5090
+ * `columnAt` already subtract them. So the range comes out slightly
5091
+ * generous at the near edges — the rows a header is covering are
5092
+ * mounted, and the columns behind the gutter are too — which is
5093
+ * correct rather than wasteful, since a sticky strip is drawn over
5094
+ * cells that are really there.
5095
+ */
5096
+ private windowFor;
5097
+ private buildChildren;
5098
+ /**
5099
+ * The header, given the same geometry a row gets.
5100
+ *
5101
+ * Its own children are laid out exactly like a row's, so that a
5102
+ * column header lines up with the column under it without either
5103
+ * being told where the other is: the same leading spacer, the same
5104
+ * gutter-sized first cell, the same widths.
5105
+ */
5106
+ private wrapHeader;
5107
+ /**
5108
+ * A row's children with the leading spacer in the right place.
5109
+ *
5110
+ * With a gutter, the renderer's first child *is* the gutter: it sits
5111
+ * at content x 0 and the columns begin past it, so the spacer for
5112
+ * the columns scrolled out of view goes after it. Without one the
5113
+ * spacer goes first. Either way the renderer is handed a range of
5114
+ * columns and never has to know where the window is.
5115
+ */
5116
+ private withLead;
5117
+ /**
5118
+ * The row the renderer returned, given its place in the sheet.
5119
+ *
5120
+ * The leading spacer is prepended here rather than asked of the
5121
+ * renderer, because it is windowing bookkeeping and not a cell: it is
5122
+ * what puts column `firstColumn` at its own offset without the row
5123
+ * holding the columns to its left.
5124
+ */
5125
+ private wrap;
5126
+ }
5127
+ /** What `sheetSource` carries from a LazySheet's props to its window. */
5128
+ interface SheetSourceArgs {
5129
+ readonly sheet: UiVirtualSheet;
5130
+ readonly rowCount: Reactive<number>;
5131
+ readonly columnCount: Reactive<number>;
5132
+ readonly rowOverscan?: Reactive<number>;
5133
+ readonly columnOverscan?: Reactive<number>;
5134
+ }
5135
+ /**
5136
+ * Feeds a sheet the inputs that may change, with the node's lifetime.
5137
+ *
5138
+ * The same reasoning as `lazySource`: a modifier is released inside
5139
+ * `removeSubtree`, and it attaches after the element's props and
5140
+ * before its children, so a count that arrives with the tree is in the
5141
+ * window before the first children are read from it.
5142
+ */
5143
+ declare const sheetSource: ((args: SheetSourceArgs, key?: string | number) => UiModifier<SheetSourceArgs>) & {
5144
+ readonly kind: UiModifierKind<SheetSourceArgs>;
5145
+ };
5146
+ type LazySheetProps = ScrollViewProps & Omit<UiVirtualSheetOptions, 'initialViewport'> & {
5147
+ /** Hands the window to the caller, once, as the element is built. */
5148
+ sheetRef?: (sheet: UiVirtualSheet) => void;
5149
+ /** The row above the rows, sized by `headerHeight`. */
5150
+ header?: SheetHeaderRenderer;
5151
+ };
5152
+ /**
5153
+ * A scrolling surface that mounts only the cells in view, on both axes.
5154
+ *
5155
+ * LazySheet({ rowCount: 10_000, columnCount: 100, rowHeight: 24, columnWidth: 96 },
5156
+ * (row, first, last) => Row({}, ...cells(row, first, last)))
5157
+ *
5158
+ * It is a ScrollView whose children are a spacer for the rows above
5159
+ * the window, the mounted rows, and a spacer for the rows below; each
5160
+ * row carries a spacer for the columns to its left and is as wide as
5161
+ * the whole sheet, so the container's content extent — and both
5162
+ * scrollbars — are the sheet's real size on the first frame rather
5163
+ * than an estimate that settles.
5164
+ */
5165
+ declare function LazySheet(props: LazySheetProps, renderRow: SheetRowRenderer): UiElement;
5166
+ //#endregion
4643
5167
  //#region src/editing/EditableTextModel.d.ts
4644
5168
  /** How far a caret move or a delete reaches. */
4645
5169
  type EditUnit = 'grapheme' | 'word' | 'line' | 'document';
@@ -4693,6 +5217,21 @@ declare class EditableTextModel {
4693
5217
  blinkOrigin: number;
4694
5218
  /** The last `value` the host synchronised in; see `UiEditable`. */
4695
5219
  syncedValue: string | undefined;
5220
+ /**
5221
+ * The selection the last `selectionchange` reported.
5222
+ *
5223
+ * Kept on the model rather than worked out at each call site,
5224
+ * because the caret is moved from a dozen places — arrows, clicks,
5225
+ * select-all, an edit that replaces a range — and every one of them
5226
+ * would otherwise have to remember to compare. Storing what was
5227
+ * last said makes the comparison the notifier's job and the answer
5228
+ * the same wherever the move came from.
5229
+ *
5230
+ * `NaN` to begin with, so the first report always fires: a fresh
5231
+ * model at offset zero has genuinely not told anyone yet.
5232
+ */
5233
+ notifiedAnchor: number;
5234
+ notifiedFocus: number;
4696
5235
  constructor(text?: string);
4697
5236
  get text(): string;
4698
5237
  get anchor(): number;
@@ -5202,6 +5741,7 @@ declare const UiProperties: {
5202
5741
  readonly selectable: UiPropertyDefinition<boolean | undefined>;
5203
5742
  readonly pointerEvents: UiPropertyDefinition<UiPointerEvents | undefined>;
5204
5743
  readonly focusable: UiPropertyDefinition<boolean | undefined>;
5744
+ readonly tabStop: UiPropertyDefinition<boolean | undefined>;
5205
5745
  readonly disabled: UiPropertyDefinition<boolean | undefined>;
5206
5746
  /** What this node is, in ARIA's vocabulary. Closed: a typo throws. */
5207
5747
  readonly role: UiPropertyDefinition<UiRole | undefined>;
@@ -5292,6 +5832,8 @@ declare const UiProperties: {
5292
5832
  readonly virtualLead: UiPropertyDefinition<boolean | undefined>;
5293
5833
  /** Set by LazyColumn/LazyRow on the scroll container: its UiVirtualWindow. */
5294
5834
  readonly virtualWindow: UiPropertyDefinition<UiVirtualWindow | undefined>;
5835
+ /** Set by LazySheet on the scroll container: its UiVirtualSheet. */
5836
+ readonly virtualSheet: UiPropertyDefinition<UiVirtualSheet | undefined>;
5295
5837
  readonly theme: UiPropertyDefinition<UiTheme | undefined>;
5296
5838
  /**
5297
5839
  * The type this element and its subtree are written in: a role in
@@ -5421,6 +5963,23 @@ type UiEventProps = {
5421
5963
  onBeforeInput?: (event: UiBeforeInputEvent) => void;
5422
5964
  /** An editable's text changed. */
5423
5965
  onInput?: (event: UiTextChangeEvent) => void;
5966
+ /**
5967
+ * An editable's selection moved, with or without a text change.
5968
+ *
5969
+ * The caret moves without the text on every arrow key, every click
5970
+ * into the text and every select-all, and `onInput` says nothing
5971
+ * about any of them. Anything that decorates by caret position — a
5972
+ * bracket matched against the one beside it, a hint about the
5973
+ * argument being typed — needs this one.
5974
+ */
5975
+ onSelectionChange?: (event: UiSelectionChangeEvent) => void;
5976
+ /**
5977
+ * Text from the clipboard, when nothing editable has the caret.
5978
+ *
5979
+ * `preventDefault()` says it was taken. A paste with a caret in it
5980
+ * belongs to the text and never reaches here.
5981
+ */
5982
+ onPaste?: (event: UiPasteEvent) => void;
5424
5983
  };
5425
5984
  /** Reconciliation identity and node access; never stored on the node. */
5426
5985
  type IdentityProps = {
@@ -5439,7 +5998,7 @@ type PaintProps = PropsOf<'backgroundColor' | 'backgroundGradient' | 'borderColo
5439
5998
  * they cascade to the text below it.
5440
5999
  */
5441
6000
  type TypographyProps = PropsOf<'color' | 'fontFamily' | 'fontSize' | 'fontWeight' | 'lineHeight' | 'letterSpacing' | 'textAlign' | 'textDirection' | 'fontStyle' | 'fontStretch' | 'fontVariant' | 'fontKerning' | 'textDecoration'>;
5442
- type InteractionProps = PropsOf<'cursor' | 'pointerEvents' | 'focusable' | 'disabled' | 'hitTestable' | 'visualState' | 'selectable'>;
6001
+ type InteractionProps = PropsOf<'cursor' | 'pointerEvents' | 'focusable' | 'tabStop' | 'disabled' | 'hitTestable' | 'visualState' | 'selectable'>;
5443
6002
  /**
5444
6003
  * What the element means, for assistive technology. Legal on any
5445
6004
  * element; a component sets them on the node that *is* the control,
@@ -5496,8 +6055,16 @@ type TextProps = CommonProps & TextContentProps;
5496
6055
  * every change; `multiline` lets Enter insert a newline. Wrapping
5497
6056
  * follows `textWrap` (use `'none'` for a single-line field that scrolls
5498
6057
  * rather than wraps).
6058
+ *
6059
+ * `spans` styles that text in runs, and here it means something
6060
+ * narrower than it does on a `Text`: an editable's paragraph is the
6061
+ * model's, so the runs describe the text rather than supplying it.
6062
+ * Their concatenation has to equal `value`, and when it does not the
6063
+ * text is drawn unstyled — every offset the editor works in is an
6064
+ * offset into the model's string, and runs describing a different one
6065
+ * would put the glyphs where the caret does not agree with them.
5499
6066
  */
5500
- type EditableTextProps = CommonProps & PropsOf<'value' | 'placeholder' | 'multiline' | 'readOnly' | 'textWrap' | 'verticalAlign' | 'caretColor' | 'selectionColor' | 'placeholderColor'>;
6067
+ type EditableTextProps = CommonProps & PropsOf<'value' | 'spans' | 'placeholder' | 'multiline' | 'readOnly' | 'textWrap' | 'verticalAlign' | 'caretColor' | 'selectionColor' | 'placeholderColor'>;
5501
6068
  /**
5502
6069
  * A Box stacks its children in one content box, aligned by `x` / `y`,
5503
6070
  * and may draw an image behind them.
@@ -8417,6 +8984,20 @@ declare class UiFocusManager {
8417
8984
  * this again once the frame's tree is built, which is when a dialog
8418
8985
  * gets its caret. Idempotent: with focus already inside the scope,
8419
8986
  * or no scope at all, it does nothing.
8987
+ *
8988
+ * **The scope root is the fallback, and it is the whole reason
8989
+ * `tabStop` exists.** A scope with no tab stop inside it used to
8990
+ * blur, which hands the keyboard to nothing: a `Dialog` whose body
8991
+ * is a sentence and a button could not be dismissed with Escape,
8992
+ * because Escape had nowhere to be delivered. Falling back to the
8993
+ * root fixes that only if the root can hold focus without becoming a
8994
+ * stop of its own, or every dialog grows a tab stop that announces
8995
+ * nothing. `focusable: true, tabStop: false` on the body is exactly
8996
+ * that pair, and the fallback is what makes it worth setting.
8997
+ *
8998
+ * Blurring is still what happens when the root cannot hold focus
8999
+ * either, because a scope that has genuinely nothing to focus is
9000
+ * better admitted than faked.
8420
9001
  */
8421
9002
  settleScope(): void;
8422
9003
  /**
@@ -8443,7 +9024,14 @@ declare class UiFocusManager {
8443
9024
  */
8444
9025
  handleNodeRemoved(_node: UiNode): void;
8445
9026
  private moveFocus;
8446
- /** Focusable nodes in document order (parent before children). */
9027
+ /**
9028
+ * The tab stops in document order (parent before children).
9029
+ *
9030
+ * Tab stops and not every focusable node: a container with
9031
+ * `tabStop: false` can hold focus and is not a place the cycle
9032
+ * stops, which is what lets a dialog body be the keyboard's home of
9033
+ * last resort without becoming a stop of its own.
9034
+ */
8447
9035
  private collectFocusable;
8448
9036
  /** Whether the node may hold focus given the active scope, if any. */
8449
9037
  private withinScope;
@@ -8787,7 +9375,15 @@ interface ScrollContainerState {
8787
9375
  scrollY: number;
8788
9376
  maxScrollX: number;
8789
9377
  maxScrollY: number;
8790
- /** True when the container scrolls horizontally (row layout). */
9378
+ /**
9379
+ * True when the container lays its children out in a row.
9380
+ *
9381
+ * The wheel no longer reads this: it asks each axis whether it has
9382
+ * room, so a container that overflows both ways takes both deltas.
9383
+ * `UiTouchScroller` still reads it to pick the axis a drag and its
9384
+ * inertia run along, which is a single-axis model — a two-axis
9385
+ * container is panned on whichever axis this names.
9386
+ */
8791
9387
  horizontal: boolean;
8792
9388
  /**
8793
9389
  * The visible extent, which is what a page-mode wheel delta means.
@@ -9732,7 +10328,7 @@ declare class UiTouchScroller {
9732
10328
  */
9733
10329
  private releaseVelocity;
9734
10330
  /**
9735
- * The container that should take this movement.
10331
+ * The container that should take this movement, and which of its axes.
9736
10332
  *
9737
10333
  * The nearest scroll container that can still move in the direction
9738
10334
  * asked for, walking outward. A container already at its end is
@@ -9740,6 +10336,18 @@ declare class UiTouchScroller {
9740
10336
  * that has hit its bottom keep scrolling the page it sits in. When
9741
10337
  * nothing can move, the innermost container is returned so the
9742
10338
  * gesture still belongs somewhere.
10339
+ *
10340
+ * **Each axis is asked for separately**, because a container may
10341
+ * scroll on both, and this used to pick one from the container's
10342
+ * flex direction and drop the other on the floor. A spreadsheet is
10343
+ * the case that found it on the wheel in 38e70a3: one `ScrollView`
10344
+ * whose content overflows in both directions, classified as vertical,
10345
+ * so a sideways drag moved nothing at all. This is the same fix on
10346
+ * the same shared state, so the two input paths cannot disagree about
10347
+ * which container takes a gesture.
10348
+ *
10349
+ * A container that overflows on one axis only is unaffected: the axis
10350
+ * it does not scroll has no room, so it is not taken.
9743
10351
  */
9744
10352
  private resolve;
9745
10353
  }
@@ -9850,8 +10458,18 @@ declare class UiEditingController {
9850
10458
  * `onInput` rather than a delete and an insert.
9851
10459
  */
9852
10460
  replaceText(text: string): boolean;
9853
- /** Pastes text: newlines are kept in a multiline field and become spaces in a single-line one. */
10461
+ /**
10462
+ * Pastes text: newlines are kept in a multiline field and become
10463
+ * spaces in a single-line one.
10464
+ *
10465
+ * With nothing editable focused the text is offered to whatever is,
10466
+ * as a `Paste` event, instead of being dropped. That is the case a
10467
+ * grid needs: it owns a rectangle of cells, a block of tab-separated
10468
+ * text means something to it that it means to nothing else, and
10469
+ * before this there was no way for it to hear about one at all.
10470
+ */
9854
10471
  paste(text: string): boolean;
10472
+ private offerPaste;
9855
10473
  private insert;
9856
10474
  compositionStart(): void;
9857
10475
  /** The composition text so far and the caret within it. */
@@ -9890,6 +10508,18 @@ declare class UiEditingController {
9890
10508
  private applyEdit;
9891
10509
  private history;
9892
10510
  private afterTextChange;
10511
+ /**
10512
+ * Reports the selection, if it has actually moved since last time.
10513
+ *
10514
+ * The guard is what keeps this quiet: holding a right arrow against
10515
+ * the end of the text moves nothing and must say nothing, and a
10516
+ * listener that recomputed decoration on every key would otherwise
10517
+ * do it forever for no reason.
10518
+ *
10519
+ * `hasListeners` already makes an unheard dispatch free, so the
10520
+ * cost when nobody is listening is the two comparisons here.
10521
+ */
10522
+ private notifySelection;
9893
10523
  private afterSelectionChange;
9894
10524
  /**
9895
10525
  * Asks the host to scroll the caret into view, when the node has been
@@ -9911,6 +10541,23 @@ declare class UiEditingController {
9911
10541
  * layout the record is empty and the lines fall at the origin, which
9912
10542
  * is still a valid place for a caret.
9913
10543
  */
10544
+ /**
10545
+ * Where the caret is inside a field, in the field's own coordinates.
10546
+ *
10547
+ * Relative to the node's border-box origin, with the field's own
10548
+ * scroll already applied — so a popup placed under the caret adds
10549
+ * the node's position on screen and nothing else.
10550
+ *
10551
+ * Public because an application cannot work this out. The geometry
10552
+ * needs the paragraph as it was *laid out*, which means the
10553
+ * measurer, the resolved paint and the layout record, and an
10554
+ * application that re-measured the text to find the caret would be
10555
+ * a second measurer that must never disagree with this one. Asking
10556
+ * is the only version that stays right.
10557
+ *
10558
+ * Null when the node is not an editable, or has not been laid out.
10559
+ */
10560
+ caretRectOf(node: UiNode): CaretRect | null;
9914
10561
  private layoutOf;
9915
10562
  }
9916
10563
  //#endregion
@@ -10204,6 +10851,24 @@ declare function isNodeHitTestable(node: UiNode): boolean;
10204
10851
  * not. The graph Root never participates in tab order.
10205
10852
  */
10206
10853
  declare function isNodeFocusable(node: UiNode): boolean;
10854
+ /**
10855
+ * Whether Tab should stop here.
10856
+ *
10857
+ * Every tab stop is focusable and not every focusable node is a tab
10858
+ * stop, which is the distinction `tabindex="-1"` draws in the DOM and
10859
+ * the one this engine was missing. `focusable` answers "may this node
10860
+ * hold focus at all", and that is the wrong question for a container:
10861
+ * a dialog's body must be able to *take* the keyboard, so that opening
10862
+ * a dialog whose content is a sentence does not hand it to nothing, and
10863
+ * must not be a place Tab *lands*, or every dialog gains a stop that
10864
+ * announces nothing and does nothing.
10865
+ *
10866
+ * So `tabStop: false` means focusable, reachable by a press and by
10867
+ * `focus()`, and skipped by the cycle. It says nothing on a node that
10868
+ * is not focusable in the first place, because there is no order to be
10869
+ * out of.
10870
+ */
10871
+ declare function isNodeTabStop(node: UiNode): boolean;
10207
10872
  /**
10208
10873
  * Whether the user may select this node's text with the pointer.
10209
10874
  *
@@ -10694,6 +11359,7 @@ declare function formatExplanation(explanation: LayoutExplanation): string;
10694
11359
  declare const SCROLLBAR_LINGER_MS = 1200;
10695
11360
  /** Portion of the linger during which the scrollbar fades out. */
10696
11361
  declare const SCROLLBAR_FADE_MS = 350;
11362
+ /** An editable's text is the user's; runs are a property of a `Text` node. */
10697
11363
  interface ScrollAdjustment {
10698
11364
  container: UiNode;
10699
11365
  scrollX: number;
@@ -11097,6 +11763,26 @@ declare class LayoutEngine {
11097
11763
  * an item that fits nowhere starts a line of its own.
11098
11764
  */
11099
11765
  private breakLines;
11766
+ /**
11767
+ * A line's main size when the container shrink-wraps it.
11768
+ *
11769
+ * The sum of the hypothetical sizes would be the answer if an item
11770
+ * never grew — but `flex: 1` is `flex-basis: 0`, and an item that
11771
+ * starts flexing from zero asks for nothing while its content still
11772
+ * wants the width of its text. A container wrapped around that sum
11773
+ * comes out too narrow; the item's text then wraps inside a box that
11774
+ * was measured as though it had not, and the container is left
11775
+ * shorter than the children it draws — a menu whose last rows fall
11776
+ * out of its own panel.
11777
+ *
11778
+ * So an item that can grow contributes whichever is larger, the size
11779
+ * its basis gives it or the size its content asks for. Chrome ignores
11780
+ * the basis entirely here and browsers disagree with each other about
11781
+ * it; the larger of the two is the reading that keeps `flex-basis`
11782
+ * counting for something, which is what `basis/sizes-container`
11783
+ * already records this engine as doing.
11784
+ */
11785
+ private lineMaxContentMain;
11100
11786
  private lineOuterMain;
11101
11787
  /**
11102
11788
  * Resolves the flexible lengths of one line (CSS Flexbox §9.7).
@@ -12083,6 +12769,75 @@ interface FocusRingOptions {
12083
12769
  * attachment.
12084
12770
  */
12085
12771
  declare function focusRing(options?: FocusRingOptions): UiModifier<FocusRingOptions>;
12772
+ /** One edge's border: a thickness, and a colour if it is not the shared one. */
12773
+ interface BorderEdge {
12774
+ readonly width: number;
12775
+ readonly color?: UiColorValue;
12776
+ }
12777
+ /** What `borders()` takes. An omitted edge is not drawn. */
12778
+ interface BordersOptions {
12779
+ readonly top?: number | BorderEdge;
12780
+ readonly right?: number | BorderEdge;
12781
+ readonly bottom?: number | BorderEdge;
12782
+ readonly left?: number | BorderEdge;
12783
+ /** The colour for any edge that does not name its own. Defaults to `border`. */
12784
+ readonly color?: UiColorValue;
12785
+ }
12786
+ /**
12787
+ * A border per edge, as paint rather than as layout.
12788
+ *
12789
+ * `borderWidth` is one number and `borderColor` one colour, so a node
12790
+ * cannot have a heavy bottom edge and a hairline top. This is the gap
12791
+ * closed from the cheap side. A border in Gesso is paint-only —
12792
+ * `paintBorder` strokes inside the box and touches no layout — so four
12793
+ * edges are four filled rectangles in the node's own paint pass, with
12794
+ * nothing to lay out and nothing to hit test. A bordered cell costs
12795
+ * four draw instances and no extra nodes.
12796
+ *
12797
+ * Box({ modifiers: [borders({ bottom: 2, right: 1, color: 'border' })] })
12798
+ *
12799
+ * They lie *inside* the box, where `borderWidth` puts them, so a border
12800
+ * never changes where anything sits and never overlaps a neighbour.
12801
+ *
12802
+ * **Why this is a modifier and not four props, and why that is the
12803
+ * answer rather than a stopgap.** First-class `borderTopWidth` is a
12804
+ * much larger change, and the cost is not where it looks: the
12805
+ * property, the paint state and the Canvas2D stroke are easy, but the
12806
+ * WebGPU instance packs `radius, opacity, borderWidth` as one
12807
+ * `float32x3`, the fragment shader draws the border as an isotropic
12808
+ * SDF band, and one instance carries one colour — so four widths need
12809
+ * a wider vertex format, an anisotropic inner rect in the shader, and
12810
+ * up to four instances when the colours differ. This needs none of it,
12811
+ * because a decoration is already a rectangle with its own colour that
12812
+ * both backends draw.
12813
+ *
12814
+ * What the properties would buy over this, once written, is a rounded
12815
+ * per-edge border and one instance instead of four. The first is a
12816
+ * thing square-cornered borders are for — a grid, a table, a rule —
12817
+ * and the second is four draws on a node that already costs one. So
12818
+ * the properties are not planned. If something turns up that wants a
12819
+ * heavy bottom edge on a rounded card, that is the case to reopen it
12820
+ * with, and it will be a better case than "for completeness".
12821
+ *
12822
+ * What it does not do is round its corners. Four rectangles meeting at
12823
+ * a square corner is right for a grid, a table and a rule, which is
12824
+ * what per-edge borders are for; a rounded box wants the single
12825
+ * `borderWidth`, which the renderers draw as one band and get right.
12826
+ */
12827
+ declare function borders(options: BordersOptions): UiModifier<Decorations>;
12828
+ /**
12829
+ * The rectangles `borders()` draws, without the modifier around them.
12830
+ *
12831
+ * For a surface that cannot afford a modifier per node and pushes its
12832
+ * decorations in instead. A spreadsheet is the case: ten thousand
12833
+ * mounted cells, each with its own border, fed from one writer into a
12834
+ * subject per cell — a modifier per cell would be ten thousand
12835
+ * attachments to do what ten thousand array writes already do. The
12836
+ * arithmetic is the same either way, and sharing it is the point:
12837
+ * an application that rolled its own would be the second place a
12838
+ * corner could be painted twice.
12839
+ */
12840
+ declare function borderShapes(options: BordersOptions): readonly DecorationShape[];
12086
12841
  //#endregion
12087
12842
  //#region src/modifiers/focus.d.ts
12088
12843
  /** Takes focus the first time the node is laid out. */
@@ -16025,6 +16780,28 @@ interface UiSchedulerOptions {
16025
16780
  * animation reading it would not be reproducible.
16026
16781
  */
16027
16782
  beforeCollect?: (time: UiFrameTime) => void;
16783
+ /**
16784
+ * Told when a frame throws, instead of the clock simply stopping.
16785
+ *
16786
+ * A frame is the only thing that drives a Gesso application, so an
16787
+ * exception escaping one used to end it: the throw unwound past the
16788
+ * re-arm at the bottom of `handleFrame`, `pending` was already
16789
+ * false, and nothing ever asked for another frame. The application
16790
+ * did not crash — it *stopped*, with its last frame still on screen
16791
+ * and every click landing in a surface nobody was listening to. The
16792
+ * worker sat idle, so a debugger attached to it reported nothing
16793
+ * running and nothing to pause.
16794
+ *
16795
+ * That failure is silent, indistinguishable from a hang, and was
16796
+ * found by typing quickly into a spreadsheet. The scheduler now
16797
+ * survives it: the frame is abandoned, this is called, and the
16798
+ * clock keeps running so the next frame can try again.
16799
+ *
16800
+ * Defaults to reporting on `console.error`, because a frame that
16801
+ * threw is a bug somewhere and the one thing that must not happen
16802
+ * is for nobody to hear about it.
16803
+ */
16804
+ onFrameError?: (error: unknown, time: UiFrameTime) => void;
16028
16805
  }
16029
16806
  /**
16030
16807
  * Decides when a dirty graph gets processed.
@@ -16042,6 +16819,7 @@ declare class UiScheduler {
16042
16819
  private readonly dirty;
16043
16820
  private readonly onFrame;
16044
16821
  private readonly beforeCollect;
16822
+ private readonly onFrameError;
16045
16823
  private disposed;
16046
16824
  private active;
16047
16825
  private pending;
@@ -16392,5 +17170,5 @@ interface UiSemanticsAction {
16392
17170
  readonly value?: string;
16393
17171
  }
16394
17172
  //#endregion
16395
- export { Mp3Header as $, GestureRecognizerOptions as $a, UiChildrenBinding as $c, UiTrackSize as $d, UiInputDispatcher as $f, UiFrameClockFactory as $i, VIRTUAL_INDEX_PROP as $l, findEnvironmentKey as $m, VideoPlayback as $n, nextCaretToggle as $o, DecorationRect as $p, pressable as $r, SpannedRuns as $s, PaintResolver as $t, hasVisualState as $u, MARK_PREFIX as A, UiDropEffect as Aa, ResponsiveProps as Ac, inputsEqual as Ad, UiModifierFocus as Af, UiTransforms as Ah, proportionalFontMetrics as Ai, UiPropertyValueOf as Al, UiBorderRadius as Am, resolveString as An, scrollbarThumbs as Ao, rotateFrom as Ap, pinchable as Ar, PaintTextSpan as As, WebGPUTextureCache as At, densityFactors as Au, ByteSource as B, formatShortcut as Ba, Grid as Bc, UiGradientStop as Bd, UiModifierTeardown as Bf, colorsEqual as Bh, LayoutStateExplanation as Bi, normalizeStates as Bl, UiShapeName as Bm, breakpoint as Bn, UiEnvironmentProvider as Bo, LayoutStats as Bp, draggable as Br, DEFAULT_LINE_HEIGHT_FACTOR as Bs, WebGPUSurface as Bt, UiTypographyExtensions as Bu, paragraphGeometry as C, UiEditingController as Ca, lineStartAt as Cc, PaintLineCap as Cd, observeViewportInsets as Cf, defaultMotion as Ch, parseAlignContent as Ci, TextContentProps as Cl, UiTextAlign as Cm, CanvasHost as Cn, SCROLLBAR_HOVER_ZONE as Co, MotionStateInput as Cp, ShortcutOptions as Cr, Canvas2DGradient as Cs, glyphCount as Ct, withThemeExtension as Cu, UiFrameCallback as D, UiDragPayload as Da, previousWordStart as Dc, PaintTextStyle as Dd, containerBands as Df, interpolateTransform as Dh, parseFlexDirection as Di, UiNodeRef as Dl, UiThemeColorName as Dm, resolveNumber as Dn, ScrollbarAxis as Do, isMotionRest as Dp, shortcuts as Dr, DEFAULT_TEXT_COLOR as Ds, GlyphSlot as Dt, raiseContrast as Du, wordRangeIn as E, EXTERNAL_FILES as Ea, previousGraphemeStart as Ec, PaintTextAlign as Ed, bandOf as Ef, interpolateNumber as Eh, FlexDirection as Ei, UiEventProps as El, UiTextWrapValue as Em, resolveBoolean as En, SCROLLBAR_THICKNESS as Eo, fade as Ep, shortcut as Er, DEFAULT_FONT_WEIGHT as Es, GLYPH_SUBPIXEL_PHASES as Et, highContrastColors as Eu, setPerformanceMarks as F, ShortcutRegistryOptions as Fa, LazyRow as Fc, MAX_GRADIENT_STOPS as Fd, UiModifier as Ff, UiBasicColors as Fh, ScrollAdjustment as Fi, UiRole as Fl, borderRadiusIsZero as Fm, PublishInsetArgs as Fn, matchRangesOf as Fo, SharedClaim as Fp, dragSource as Fr, createPaintState as Fs, DrawStats as Ft, spacingSteps as Fu, Mp4AudioTrack as G, UiPointerController as Ga, Text as Gc, linearGradient as Gd, isComponentLikeElement as Gf, UiEasing as Gh, describeOverrides as Gi, EditUnit as Gl, UiColors as Gm, VideoClock as Gn, CARET_WIDTH as Go, tightenConstraints as Gp, FocusRingOptions as Gr, selectableTextOf as Gs, registerFontStack as Gt, MAX_MEASURES_PER_CHILD as Gu, RangeSourceOptions as H, KeyboardControllerOptions as Ha, Row as Hc, UiRadialGradient as Hd, ComponentLikeElement as Hf, parseColor as Hh, RelayoutExplanation as Hi, validateRole as Hl, defaultShapes as Hm, ScrollOffset as Hn, UiEnvironmentKeys as Ho, TightenOptions as Hp, clickOutside as Hr, TextRange as Hs, bumpFontStack as Ht, defaultTypography as Hu, VttCue as I, UiShortcut as Ia, Box as Ic, ResolvedGradient as Id, UiModifierKind as If, UiColor as Ih, AxisExplanation as Ii, UiSemanticState as Il, borderRadiusValuesEqual as Im, insetPadding as In, setMatchRanges as Io, UiSharedElements as Ip, dropTarget as Ir, isPaintVisible as Is, RenderHooks as It, UiShadows as Iu, demuxMp4Audio as J, UiScrollBehavior as Ja, BindingId as Jc, AutoLength as Jd, isUiElement as Jf, linear as Jh, labelNode as Ji, LazyGridOptions as Jl, lightColors as Jm, VideoTransport as Jn, editorFor as Jo, UiNode as Jp, BUTTON_INTERACTION as Jr, CharacterCountTextMeasurer as Js, PaintPictureCache as Jt, UiLayoutProtocol as Ju, Mp4Sample as K, ScrollContainerState as Ka, createElement as Kc, radialGradient as Kd, isObservable$1 as Kf, cubicBezier as Kh, formatConstraints as Ki, EditableTextModel as Kl, colorsEqualPalette as Km, VideoSourceArgs as Kn, EDITOR_PROP as Ko, NodeId as Kp, decorated as Kr, selectionRangeOf as Ks, PaintCanvas as Kt, UiLayoutChild as Ku, VttTrack as L, UiShortcutBinding as La, Button as Lc, ResolvedGradientStop as Ld, defineModifier as Lf, colorToHex as Lh, CustomLayoutExplanation as Li, UiSemanticStates as Ll, normalizeBorderRadius as Lm, publishInset as Ln, FindMatch as Lo, Constraints as Lp, reorderable as Lr, normalizeTextAlign as Ls, WebGPURenderer as Lt, defaultShadows as Lu, markNow as M, UiDroppedFile as Ma, LazyGrid as Mc, pathValuesEqual as Md, UiModifierSet as Mf, transform as Mh, LayoutEngine as Mi, UI_ROLES as Ml, borderRadius as Mm, themeTokens as Mn, SubtreeBounds as Mo, slideDown as Mp, DragSourceOptions as Mr, VerticalAlign as Ms, isWebGPUAvailable as Mt, defaultSpacing as Mu, measureSpan as N, UiFileDropMessage as Na, LazyGridProps as Nc, UiImage as Nd, UiUnknownModifierPropertyError as Nf, transformIsIdentity as Nh, SCROLLBAR_FADE_MS as Ni, UI_SEMANTIC_STATES as Nl, borderRadiusCorners as Nm, sameArgs as Nn, TEXT_MATCHES_PROP as No, slideFrom as Np, DropTargetOptions as Nr, colorToCss as Ns, WebGPUError as Nt, scaleSpacing as Nu, UiScheduler as O, UiDragSession as Oa, wordRangeAt as Oc, UiPaint as Od, unknownContainerSize as Of, interpolatorFor as Oh, ELLIPSIS as Oi, UiProperties as Ol, UiVerticalAlign as Om, resolveProperty as On, ScrollbarThumb as Oo, pop as Op, PinchableOptions as Or, ObjectFit as Os, GlyphUpload as Ot, relativeLuminance as Ou, performanceMarksEnabled as P, dragSessionFor as Pa, LazyListProps as Pc, GradientPaint as Pd, assertModifierList as Pf, transformsEqual as Ph, SCROLLBAR_LINGER_MS as Pi, UiLiveRegion as Pl, borderRadiusEqual as Pm, InsetPaddingArgs as Pn, clearMatchRanges as Po, slideUp as Pp, ReorderableOptions as Pr, computeObjectFitRect as Ps, CapturedFrame as Pt, spacingEqual as Pu, Mp3Frames as Q, GestureInput as Qa, ChildrenBindingId as Qc, UiLength as Qd, UiEventListenerOptions as Qf, UiFrameClock as Qi, UiVirtualWindow as Ql, createEnvironmentKey as Qm, RangeResponse as Qn, isReadOnly as Qo, DecorationFill as Qp, measure as Qr, ParagraphTextMeasurer as Qs, PaintGradient as Qt, defaultVisualState as Qu, cueAt as R, UiShortcutRegistry as Ra, Column as Rc, UiGradient as Rd, isUiModifier as Rf, colorToRgba as Rh, Edges as Ri, isUiRole as Rl, uniformBorderRadius as Rm, BreakpointArgs as Rn, FindOptions as Ro, LayoutBox as Rp, DragOffset as Rr, normalizeVerticalAlign as Rs, WebGPURendererOptions as Rt, shadowsEqual as Ru, offsetAtPointIn as S, EditingState as Sa, lineEndAt as Sc, PaintFillRule as Sd, noInsets as Sf, UiSpringToken as Sh, MainAxisAlignment as Si, StackProps as Sl, UiSubgridAxis as Sm, labelOrigin as Sn, UiPoint as So, MotionState as Sp, ContextMenuOptions as Sr, Canvas2DContext as Ss, createTextCache as St, themeExtensionsEqual as Su, selectionRectsIn as T, UiTouchScroller as Ta, nextWordEnd as Tc, PaintSurface as Td, UiContainerSizeSource as Tf, interpolateColor as Th, parseMainAxisAlignment as Ti, TypographyProps as Tl, UiTextOverflowValue as Tm, createCanvasSurface as Tn, SCROLLBAR_MIN_THUMB as To, ResolvedMotionState as Tp, contextMenu as Tr, DEFAULT_FONT_SIZE as Ts, GlyphShaper as Tt, contrastRatio as Tu, bufferSource as U, UiKeyboardController as Ua, ScrollView as Uc, gradientPaint as Ud, UiChild as Uf, rgb8 as Uh, SizeDecision as Ui, validateStates as Ul, isShapeName as Um, ScrollPositionArgs as Un, EnvironmentNotifier as Uo, clampSize as Up, autoFocus as Ur, clearSelectionRange as Us, clearFontStacks as Ut, isTypographyRole as Uu, DEFAULT_BLOCK_SIZE as V, parseShortcut as Va, Paint as Vc, UiLinearGradient as Vd, ComponentResolver as Vf, normalizeColor as Vh, OverrideSources as Vi, statesEqual as Vl, UiShapes as Vm, sizeContainer as Vn, provideEnvironment as Vo, Size as Vp, ClickOutsideOptions as Vr, TEXT_SELECTION_PROP as Vs, createWebGPUSurface as Vt, UiTypographyRole as Vu, rangeSource as W, PointerControllerOptions as Wa, Stack as Wc, gradientsEqual as Wd, UiElement as Wf, rgba as Wh, describeLength as Wi, CompositionRange as Wl, shapesEqual as Wm, scrollPosition as Wn, CARET_BLINK_MS as Wo, constraintsEqual as Wp, Decorations as Wr, selectableTextNodes as Ws, fontStackFor as Wt, typographyEqual as Wu, Mp3Format as X, UiWheelController as Xa, UiGraph as Xc, MinMaxTrack as Xd, UiProps as Xf, UiFrame as Xi, LazyListOptions as Xl, UiEnvironment as Xm, DefaultVideoResolver as Xn, isEditableNode as Xo, UiPropertyOverride as Xp, hoverable as Xr, FontMetrics as Xs, paintPictures as Xt, UiVisualState as Xu, demuxMp4Video as Y, UiScrollability as Ya, UiBinding as Yc, FrLength as Yd, UiPropValue as Yf, steps as Yh, withOverrideSource as Yi, LazyItemRenderer as Yl, LayoutRecord as Ym, videoSource as Yn, editorOf as Yo, UiNodeTransitions as Yp, InteractiveOptions as Yr, FixedMetricsOptions as Ys, PaintStats as Yt, isLayoutProtocol as Yu, Mp3Frame as Z, isScrollContainer as Za, UiEventBinding as Zc, PercentLength as Zd, UiEventListener as Zf, UiAnimationFrameClock as Zi, LazySourceArgs as Zl, UiEnvironmentKey as Zm, DefaultVideoResolverOptions as Zn, isMultiline as Zo, UiPropertyOverrides as Zp, interactive as Zr, ParagraphLayout as Zs, PaintContext2D as Zt, UiVisualStateSet as Zu, linkOf as _, pointerDeviceOf as _a, offsetAtPoint as _c, spannedTextOf as _d, UiInsetEdge as _f, createTween as _h, GridTrack as _i, PositionProps as _l, UiOverflow as _m, LayoutReader as _n, UiSelectionController as _o, wheelDeltaYOf as _p, DefaultImageResolver as _r, layoutTextLines as _s, ScissorRect as _t, UiThemeExtensions as _u, diffSemantics as a, UiTimerFrameClockOptions as aa, TextRunMeasurer as ac, UiFontVariant as ad, isPercentLength as af, assertTransitionMap as ah, contentOffset as ai, CommonProps as al, paintsAfterChildren as am, PaintRecording as an, UiFocusManager as ao, UiGestureEvent as ap, sharedElement as ar, isPrintable as as, CLIP_STRIDE_FLOATS as at, lazySource as au, ParagraphGeometry as b, EditingControllerOptions as ba, selectionRects as bc, textStylesEqual as bd, UiInsets as bf, UiMotion as bh, AlignContent as bi, RowProps as bl, UiPosition as bm, OverlayShape as bn, HitTester as bo, MOTION_REST as bp, AnimateLayoutOptions as br, textRunBackgrounds as bs, TextRunDraw as bt, noThemeExtensions as bu, UiSemanticsMap as c, isNodeInert as ca, TextWrap as cc, UiTextDecoration as cd, repeat as cf, tween as ch, getPropertyNames as ci, EnvironmentProps as cl, UiBorderRadiusValue as cm, InspectorOverlay as cn, clearOverrideProperty as co, UiKeyboardEvent as cp, ImageSources as cr, PlacedTextRun as cs, INSTANCE_STRIDE_BYTES as ct, videoFrameSize as cu, buildSemanticsTree as d, CanvasPlatformSurface as da, PlacedLine as dc, UiTextSpan as dd, boxShadow as df, UiAnimationOptions as dh, propertyEffects as di, GridItemProps as dl, UiCursor as dm, CanvasTextMeasurer as dn, writeDeclaredProperty as do, UiPointerEvent as dp, IconCanvas as dr, TextRunRect as ds, NO_CLIP_INDEX as dt, lightTheme as du, UiFrameTime as ea, TextLine as ec, visualState as ed, auto as ef, UiNodeType as eh, UiModifierBundle as ei, UiGraphBuilder as el, DecorationShape as em, PaintTarget as en, UiGestureRecognizer as eo, UiListenerErrorReporter as ep, VideoResolver as er, syncEditorValue as es, readMp3Header as et, VIRTUAL_LEAD_PROP as eu, semanticsInertAbove as f, PlatformAdapterOptions as fa, RunMeasure as fc, UiTextStyle as fd, boxShadowArraysEqual as ff, UiReducedMotionPolicy as fh, propertyIsInherited as fi, GridProps as fl, UiDirection as fm, Canvas2DRenderer as fn, writeOverrideProperty as fo, UiPointerKind as fp, IconContext as fr, applyCanvasTextStyle as fs, PrimitiveCommand as ft, themesEqual as fu, linkHoverOf as g, capturePointer as ga, lineLimit as gc, spanAtOffset as gd, propertyValuesEqual as gf, UiTweenOptions as gh, GridPlacement as gi, PaintProps as gl, UiObjectFit as gm, UiRenderer as gn, SelectionHost as go, noKeyModifiers as gp, iconKey as gr, fillTextRects as gs, RenderTextCache as gt, UiThemeExtensionOptions as gu, hasTextLinks as h, UiPlatformAdapter as ha, lineIndexForOffset as hc, resolvedSpansOf as hd, defineProperty as hf, UiTween as hh, GridItemRequest as hi, PaintElementProps as hl, UiGridAutoFlow as hm, RendererBackend as hn, SelectionControllerOptions as ho, UiWheelEvent as hp, IconSpec as hr, drawText as hs, RenderList as ht, UiThemeExtension as hu, UiSemanticsPatch as i, UiTimerFrameClock as ia, TextOverflow as ic, UiFontStyle as id, isMinMaxTrack as if, UiTransitionValue as ih, accumulatedOffsetTo as ii, ColumnProps as il, hasDecorationPhase as im, PaintRecorder as in, FocusSource as io, UiFocusEvent as ip, motion as ir, detectEditingPlatform as is, CLIP_STRIDE_BYTES as it, VirtualViewport as iu, markInstant as j, UiDropZone as ja, LazyColumn as jc, paintValuesEqual as jd, UiModifierLayout as jf, parseTransform as jh, LayoutNotifier as ji, UiPropertyValues as jl, UiBorderRadiuses as jm, ThemeTokenTarget as jn, scrollbarZoneAt as jo, scaleFrom as jp, AutoScrollOptions as jr, TextAlign as js, initializeWebGPU as jt, UiSpacing as ju, UiSchedulerOptions as k, UiDragState as ka, Responsive as kc, UiPath as kd, UiModifierEnvironment as kf, UiTransform as kh, layoutParagraph as ki, UiPropertyName as kl, validateSubgrid as km, resolvePropertyByName as kn, scrollbarThumb as ko, resolveMotionState as kp, ZoomState as kr, PaintState as ks, WebGPUGlyphAtlas as kt, UiDensity as ku, UiSemanticsRecord as l, isNodeSelectable as la, spannedRunsFor as lc, UiTextLink as ld, resolveLength as lf, AnimatedCell as lh, inheritedPropertyFlags as li, FlexContainerProps as ll, UiColorValue as lm, LayoutInspector as ln, overrideSources as lo, UiPinchEvent as lp, iconSource as lr, SpanPaint as ls, INSTANCE_STRIDE_FLOATS as lt, UiTheme as lu, clearLinkHover as m, PlatformSurface as ma, lineIndexAtY as mc, flattenTextSpans as md, UiPropertyDefinition as mf, UiSpringOptions as mh, GridContribution as mi, InteractionProps as ml, UiFontWeight as mm, traceRoundedRect as mn, UiFindController as mo, UiWheelDeltaMode as mp, IconRasterizerOptions as mr, createCanvasTextStyle as ms, RenderCommand as mt, withDensity as mu, UiSemanticsBox as n, UiHostFrameClockOptions as na, TextMeasureRequest as nc, UiFontKerning as nd, isAutoLength as nf, AnimationDriver as nh, noModifiers as ni, BoxProps as nl, decorationColor as nm, EMPTY_RECORDING as nn, UiPinchRecognizer as no, UiBeforeInputEvent as np, MotionArgs as nr, EditingPlatform as ns, WebGPUGlyphPages as nt, VirtualItemMeasure as nu, recordsEqual as o, isNodeFocusable as oa, TextRunSpan as oc, UiResolvedTextSpan as od, minmax as of, normalizeTransition as oh, closestPropertyName as oi, ContainerProps as ol, UI_SUBGRID_AXES as om, replayPaint as on, NodeTransitions as oo, UiInputEvent as op, IconSourceArgs as or, EditableLayout as os, CommandKind as ot, UiVideoSurface as ou, textRunOfRecordId as p, PlatformEventTarget as pa, caretRectFor as pc, defaultTextStyle as pd, boxShadowsEqual as pf, UiSpring as ph, propertyValuesEqualByName as pi, IdentityProps as pl, UiFlexWrap as pm, Canvas2DRendererOptions as pn, FindHost as po, UiTextChangeEvent as pp, IconRasterizer as pr, buildFontString as ps, PrimitiveKind as pt, withContrast as pu, Mp4VideoTrack as q, ScrollSink as qa, UiDefinition as qc, validateGradient as qd, isUiChild as qf, easings as qh, formatExplanation as qi, LazyAxis as ql, darkColors as qm, VideoState as qn, caretVisibleAt as qo, NodeProperty as qp, focusRing as qr, setSelectionRange as qs, PaintCanvasFactory as qt, UiLayoutContext as qu, UiSemanticsUpdate as r, UiManualFrameClock as ra, TextMeasurer as rc, UiFontStretch as rd, isFrLength as rf, UiTransitionSpec as rh, Transform as ri, ButtonProps as rl, decorationRect as rm, PaintOp as rn, FocusNotifier as ro, UiEventType as rp, SharedElementArgs as rr, commandForKey as rs, Affine as rt, VirtualUpdate as ru, TEXT_RUN_ID_SEPARATOR as s, isNodeHitTestable as sa, TextRunStyle as sc, UiSpannedText as sd, percent as sf, spring as sh, findPropertyDefinition as si, EditableTextProps as sl, UiAlignment as sm, INSPECTOR_HEAT_MS as sn, resetTransitionWarnings as so, UiKeyModifiers as sp, ImageSourceArgs as sr, CanvasTextStyle as ss, GlyphCommand as st, isVideoSurface as su, UiSemanticsAction as t, UiHostFrameClock as ta, TextLineRun as tc, visualStatesEqual as td, fr as tf, DirtyFlags as th, bundle as ti, BoxModelProps as tl, DecorationStroke as tm, tracePathData as tn, PinchRecognizerOptions as to, MOUSE_POINTER as tp, canDecodeVideo as tr, EditCommand as ts, splitMp3Frames as tt, VIRTUAL_WINDOW_PROP as tu, buildSemanticsSubtree as u, resolveCursor as ua, CaretRect as uc, UiTextMetrics as ud, UiBoxShadow as uf, UiAnimation as uh, inheritedPropertyNames as ui, FlexItemProps as ul, UiContentDistribution as um, LayoutInspectorOptions as un, resetOverrideWarnings as uo, UiPointerDevice as up, imageSource as ur, TextLinePlacement as us, ImageCommand as ut, darkTheme as uu, linkRunAtPointIn as v, prepareInputSurface as va, offsetAtX as vc, textContentOf as vd, UiInsetRegistry as vf, UiDurationToken as vh, placeGridItems as vi, PropsOf as vl, UiPlacement as vm, RenderContext as vn, HitTestLayoutReader as vo, DirtyNodeSet as vp, DefaultImageResolverOptions as vr, runCanvasStyleInto as vs, TEXTURED_STRIDE_BYTES as vt, defineThemeExtension as vu, paragraphGeometryFrom as w, TouchScrollerOptions as wa, nextGraphemeEnd as wc, PaintLineJoin as wd, UiContainerSize as wf, UiInterpolator as wh, parseCrossAxisAlignment as wi, TextProps as wl, UiTextDirection as wm, CanvasSurface as wn, SCROLLBAR_INSET as wo, MotionTiming as wp, ShortcutsOptions as wr, DEFAULT_FONT_FAMILY as ws, textRuns as wt, UiContrast as wu, hasDrawnText as x, EditingHost as xa, graphemeBoundaries as xc, PaintBox as xd, insetsEqual as xf, UiSpringSpec as xh, CrossAxisAlignment as xi, ScrollViewProps as xl, UiSelfAlignment as xm, drawOverlayShapes as xn, UiHitTester as xo, MotionChannel as xp, animateLayout as xr, textRunDecorations as xs, buildRenderList as xt, themeExtension as xu, setLinkHover as y, touchActionFor as ya, offsetForVerticalMove as yc, textSpansEqual as yd, UiInsetSource as yf, UiEasingToken as yh, sizeGridTracks as yi, Reactive as yl, UiPointerEvents as ym, LABEL_PADDING_X as yn, HitTestResult as yo, MOTION_CHANNELS as yp, ImageResolver as yr, runFontString as ys, TEXTURED_STRIDE_FLOATS as yt, hasThemeExtension as yu, parseWebVtt as z, UiShortcutStep as za, EditableText as zc, UiGradientOffset as zd, UiModifierHost as zf, colorValuesEqual as zh, LayoutExplanation as zi, isUiSemanticState as zl, UiShapeExtensions as zm, SizeContainerArgs as zn, findMatchesIn as zo, LayoutResult as zp, DraggableOptions as zr, resolvePaintState as zs, WebGPUCanvasHost as zt, UiTypography as zu };
16396
- //# sourceMappingURL=index-DAdauEn9.d.ts.map
17173
+ export { Mp3Header as $, UiScrollBehavior as $a, BindingId as $c, ResolvedGradient as $d, UiModifierKind as $f, transformsEqual as $h, withOverrideSource as $i, LazySheetProps as $l, borderRadiusEqual as $m, VideoPlayback as $n, editorFor as $o, slideUp as $p, InteractiveOptions as $r, CharacterCountTextMeasurer as $s, PaintResolver as $t, defaultShadows as $u, MARK_PREFIX as A, UiTouchScroller as Aa, nextWordEnd as Ac, editableSpansOf as Ad, boxShadowsEqual as Af, UiAnimationOptions as Ah, FlexDirection as Ai, TypographyProps as Al, UiCursor as Am, resolveString as An, SCROLLBAR_MIN_THUMB as Ao, UiPointerKind as Ap, pinchable as Ar, DEFAULT_FONT_SIZE as As, WebGPUTextureCache as At, withDensity as Au, ByteSource as B, ShortcutRegistryOptions as Ba, LazyRow as Bc, PaintLineCap as Bd, observeViewportInsets as Bf, UiSpringSpec as Bh, AxisExplanation as Bi, UiRole as Bl, UiSelfAlignment as Bm, breakpoint as Bn, matchRangesOf as Bo, MotionChannel as Bp, draggable as Br, createPaintState as Bs, WebGPUSurface as Bt, UiContrast as Bu, paragraphGeometry as C, prepareInputSurface as Ca, offsetAtX as Cc, UiSpannedText as Cd, minmax as Cf, UiTransitionValue as Ch, sizeGridTracks as Ci, PropsOf as Cl, hasDecorationPhase as Cm, CanvasHost as Cn, HitTestLayoutReader as Co, UiInputEvent as Cp, ShortcutOptions as Cr, runCanvasStyleInto as Cs, glyphCount as Ct, isVideoSurface as Cu, UiFrameCallback as D, EditingState as Da, lineEndAt as Dc, UiTextSpan as Dd, UiBoxShadow as Df, tween as Dh, parseAlignContent as Di, StackProps as Dl, UiBorderRadiusValue as Dm, resolveNumber as Dn, UiPoint as Do, UiPinchEvent as Dp, shortcuts as Dr, Canvas2DContext as Ds, GlyphSlot as Dt, lightTheme as Du, wordRangeIn as E, EditingHost as Ea, graphemeBoundaries as Ec, UiTextMetrics as Ed, resolveLength as Ef, spring as Eh, MainAxisAlignment as Ei, ScrollViewProps as El, UiAlignment as Em, resolveBoolean as En, UiHitTester as Eo, UiPasteEvent as Ep, shortcut as Er, textRunDecorations as Es, GLYPH_SUBPIXEL_PHASES as Et, darkTheme as Eu, setPerformanceMarks as F, UiDropEffect as Fa, ResponsiveProps as Fc, textContentOf as Fd, UiInsetRegistry as Ff, UiTweenOptions as Fh, LayoutNotifier as Fi, UiPropertyValueOf as Fl, UiObjectFit as Fm, PublishInsetArgs as Fn, scrollbarThumbs as Fo, noKeyModifiers as Fp, dragSource as Fr, PaintTextSpan as Fs, DrawStats as Ft, hasThemeExtension as Fu, Mp4AudioTrack as G, formatShortcut as Ga, Grid as Gc, UiPaint as Gd, unknownContainerSize as Gf, interpolateNumber as Gh, OverrideSources as Gi, normalizeStates as Gl, UiTextWrapValue as Gm, VideoClock as Gn, UiEnvironmentProvider as Go, fade as Gp, BordersOptions as Gr, DEFAULT_LINE_HEIGHT_FACTOR as Gs, registerFontStack as Gt, UiDensity as Gu, RangeSourceOptions as H, UiShortcutBinding as Ha, Button as Hc, PaintSurface as Hd, UiContainerSizeSource as Hf, defaultMotion as Hh, Edges as Hi, UiSemanticStates as Hl, UiTextAlign as Hm, ScrollOffset as Hn, FindMatch as Ho, MotionStateInput as Hp, clickOutside as Hr, normalizeTextAlign as Hs, bumpFontStack as Ht, highContrastColors as Hu, VttCue as I, UiDropZone as Ia, LazyColumn as Ic, textSpansEqual as Id, UiInsetSource as If, createTween as Ih, LayoutEngine as Ii, UiPropertyValues as Il, UiOverflow as Im, insetPadding as In, scrollbarZoneAt as Io, wheelDeltaYOf as Ip, dropTarget as Ir, TextAlign as Is, RenderHooks as It, noThemeExtensions as Iu, demuxMp4Audio as J, UiKeyboardController as Ja, ScrollView as Jc, paintValuesEqual as Jd, UiModifierLayout as Jf, UiTransform as Jh, describeLength as Ji, validateStates as Jl, validateSubgrid as Jm, VideoTransport as Jn, EnvironmentNotifier as Jo, resolveMotionState as Jp, borderShapes as Jr, clearSelectionRange as Js, PaintPictureCache as Jt, defaultSpacing as Ju, Mp4Sample as K, parseShortcut as Ka, Paint as Kc, UiPath as Kd, UiModifierEnvironment as Kf, interpolateTransform as Kh, RelayoutExplanation as Ki, statesEqual as Kl, UiThemeColorName as Km, VideoSourceArgs as Kn, provideEnvironment as Ko, isMotionRest as Kp, Decorations as Kr, TEXT_SELECTION_PROP as Ks, PaintCanvas as Kt, densityFactors as Ku, VttTrack as L, UiDroppedFile as La, LazyGrid as Lc, textStylesEqual as Ld, UiInsets as Lf, UiDurationToken as Lh, SCROLLBAR_FADE_MS as Li, UI_ROLES as Ll, UiPlacement as Lm, publishInset as Ln, SubtreeBounds as Lo, DirtyNodeSet as Lp, reorderable as Lr, VerticalAlign as Ls, WebGPURenderer as Lt, themeExtension as Lu, markNow as M, UiDragPayload as Ma, previousWordStart as Mc, resolvedSpansOf as Md, defineProperty as Mf, UiSpring as Mh, ELLIPSIS as Mi, UiNodeRef as Ml, UiFlexWrap as Mm, themeTokens as Mn, ScrollbarAxis as Mo, UiTextChangeEvent as Mp, DragSourceOptions as Mr, DEFAULT_TEXT_COLOR as Ms, isWebGPUAvailable as Mt, UiThemeExtensionOptions as Mu, measureSpan as N, UiDragSession as Na, wordRangeAt as Nc, spanAtOffset as Nd, propertyValuesEqual as Nf, UiSpringOptions as Nh, layoutParagraph as Ni, UiProperties as Nl, UiFontWeight as Nm, sameArgs as Nn, ScrollbarThumb as No, UiWheelDeltaMode as Np, DropTargetOptions as Nr, ObjectFit as Ns, WebGPUError as Nt, UiThemeExtensions as Nu, UiScheduler as O, UiEditingController as Oa, lineStartAt as Oc, UiTextStyle as Od, boxShadow as Of, AnimatedCell as Oh, parseCrossAxisAlignment as Oi, TextContentProps as Ol, UiColorValue as Om, resolveProperty as On, SCROLLBAR_HOVER_ZONE as Oo, UiPointerDevice as Op, PinchableOptions as Or, Canvas2DGradient as Os, GlyphUpload as Ot, themesEqual as Ou, performanceMarksEnabled as P, UiDragState as Pa, Responsive as Pc, spannedTextOf as Pd, UiInsetEdge as Pf, UiTween as Ph, proportionalFontMetrics as Pi, UiPropertyName as Pl, UiGridAutoFlow as Pm, InsetPaddingArgs as Pn, scrollbarThumb as Po, UiWheelEvent as Pp, ReorderableOptions as Pr, PaintState as Ps, CapturedFrame as Pt, defineThemeExtension as Pu, Mp3Frames as Q, ScrollSink as Qa, UiDefinition as Qc, MAX_GRADIENT_STOPS as Qd, UiModifier as Qf, transformIsIdentity as Qh, labelNode as Qi, LazySheet as Ql, borderRadiusCorners as Qm, RangeResponse as Qn, caretVisibleAt as Qo, slideFrom as Qp, BUTTON_INTERACTION as Qr, setSelectionRange as Qs, PaintGradient as Qt, UiShadows as Qu, cueAt as R, UiFileDropMessage as Ra, LazyGridProps as Rc, PaintBox as Rd, insetsEqual as Rf, UiEasingToken as Rh, SCROLLBAR_LINGER_MS as Ri, UI_SEMANTIC_STATES as Rl, UiPointerEvents as Rm, BreakpointArgs as Rn, TEXT_MATCHES_PROP as Ro, MOTION_CHANNELS as Rp, DragOffset as Rr, colorToCss as Rs, WebGPURendererOptions as Rt, themeExtensionsEqual as Ru, offsetAtPointIn as S, pointerDeviceOf as Sa, offsetAtPoint as Sc, UiResolvedTextSpan as Sd, isPercentLength as Sf, UiTransitionSpec as Sh, placeGridItems as Si, PositionProps as Sl, decorationRect as Sm, labelOrigin as Sn, UiSelectionController as So, UiGestureEvent as Sp, ContextMenuOptions as Sr, layoutTextLines as Ss, createTextCache as St, UiVideoSurface as Su, selectionRectsIn as T, EditingControllerOptions as Ta, selectionRects as Tc, UiTextLink as Td, repeat as Tf, normalizeTransition as Th, CrossAxisAlignment as Ti, RowProps as Tl, UI_SUBGRID_AXES as Tm, createCanvasSurface as Tn, HitTester as To, UiKeyboardEvent as Tp, contextMenu as Tr, textRunBackgrounds as Ts, GlyphShaper as Tt, UiTheme as Tu, bufferSource as U, UiShortcutRegistry as Ua, Column as Uc, PaintTextAlign as Ud, bandOf as Uf, UiInterpolator as Uh, LayoutExplanation as Ui, isUiRole as Ul, UiTextDirection as Um, ScrollPositionArgs as Un, FindOptions as Uo, MotionTiming as Up, autoFocus as Ur, normalizeVerticalAlign as Us, clearFontStacks as Ut, raiseContrast as Uu, DEFAULT_BLOCK_SIZE as V, UiShortcut as Va, Box as Vc, PaintLineJoin as Vd, UiContainerSize as Vf, UiSpringToken as Vh, CustomLayoutExplanation as Vi, UiSemanticState as Vl, UiSubgridAxis as Vm, sizeContainer as Vn, setMatchRanges as Vo, MotionState as Vp, ClickOutsideOptions as Vr, isPaintVisible as Vs, createWebGPUSurface as Vt, contrastRatio as Vu, rangeSource as W, UiShortcutStep as Wa, EditableText as Wc, PaintTextStyle as Wd, containerBands as Wf, interpolateColor as Wh, LayoutStateExplanation as Wi, isUiSemanticState as Wl, UiTextOverflowValue as Wm, scrollPosition as Wn, findMatchesIn as Wo, ResolvedMotionState as Wp, BorderEdge as Wr, resolvePaintState as Ws, fontStackFor as Wt, relativeLuminance as Wu, Mp3Format as X, UiPointerController as Xa, Text as Xc, UiImage as Xd, UiUnknownModifierPropertyError as Xf, parseTransform as Xh, formatConstraints as Xi, EditUnit as Xl, UiBorderRadiuses as Xm, DefaultVideoResolver as Xn, CARET_WIDTH as Xo, scaleFrom as Xp, decorated as Xr, selectableTextOf as Xs, paintPictures as Xt, spacingEqual as Xu, demuxMp4Video as Y, PointerControllerOptions as Ya, Stack as Yc, pathValuesEqual as Yd, UiModifierSet as Yf, UiTransforms as Yh, describeOverrides as Yi, CompositionRange as Yl, UiBorderRadius as Ym, videoSource as Yn, CARET_BLINK_MS as Yo, rotateFrom as Yp, borders as Yr, selectableTextNodes as Ys, PaintStats as Yt, scaleSpacing as Yu, Mp3Frame as Z, ScrollContainerState as Za, createElement as Zc, GradientPaint as Zd, assertModifierList as Zf, transform as Zh, formatExplanation as Zi, EditableTextModel as Zl, borderRadius as Zm, DefaultVideoResolverOptions as Zn, EDITOR_PROP as Zo, slideDown as Zp, focusRing as Zr, selectionRangeOf as Zs, PaintContext2D as Zt, spacingSteps as Zu, linkOf as _, PlatformAdapterOptions as _a, RunMeasure as _c, visualStatesEqual as _d, auto as _f, createEnvironmentKey as _h, propertyValuesEqualByName as _i, GridProps as _l, DecorationFill as _m, LayoutReader as _n, writeOverrideProperty as _o, UiListenerErrorReporter as _p, DefaultImageResolver as _r, applyCanvasTextStyle as _s, ScissorRect as _t, VIRTUAL_WINDOW_PROP as _u, diffSemantics as a, UiHostFrameClock as aa, TextLine as ac, isTypographyRole as ad, UiRadialGradient as af, colorsEqual as ag, UiShapeName as ah, bundle as ai, UiGraphBuilder as al, LayoutStats as am, PaintRecording as an, UiGestureRecognizer as ao, ComponentLikeElement as ap, sharedElement as ar, syncEditorValue as as, CLIP_STRIDE_FLOATS as at, UiVirtualSheet as au, ParagraphGeometry as b, UiPlatformAdapter as ba, lineIndexForOffset as bc, UiFontStyle as bd, isFrLength as bf, DirtyFlags as bh, GridPlacement as bi, PaintElementProps as bl, DecorationStroke as bm, OverlayShape as bn, SelectionControllerOptions as bo, UiEventType as bp, AnimateLayoutOptions as br, drawText as bs, TextRunDraw as bt, VirtualViewport as bu, UiSemanticsMap as c, UiTimerFrameClock as ca, TextMeasurer as cc, UiLayoutChild as cd, linearGradient as cf, rgb8 as cg, isShapeName as ch, accumulatedOffsetTo as ci, ButtonProps as cl, clampSize as cm, InspectorOverlay as cn, FocusNotifier as co, isComponentLikeElement as cp, ImageSources as cr, commandForKey as cs, INSTANCE_STRIDE_BYTES as ct, sheetSource as cu, buildSemanticsTree as d, isNodeHitTestable as da, TextRunSpan as dc, isLayoutProtocol as dd, AutoLength as df, cubicBezier as dg, colorsEqualPalette as dh, findPropertyDefinition as di, ContainerProps as dl, NodeId as dm, CanvasTextMeasurer as dn, NodeTransitions as do, isUiElement as dp, IconCanvas as dr, EditableLayout as ds, NO_CLIP_INDEX as dt, LazyItemRenderer as du, UiFrame as ea, FixedMetricsOptions as ec, shadowsEqual as ed, ResolvedGradientStop as ef, UiBasicColors as eg, borderRadiusIsZero as eh, hoverable as ei, UiBinding as el, SharedClaim as em, PaintTarget as en, UiScrollability as eo, defineModifier as ep, VideoResolver as er, editorOf as es, readMp3Header as et, SheetHeaderRenderer as eu, semanticsInertAbove as f, isNodeInert as fa, TextRunStyle as fc, UiVisualState as fd, FrLength as ff, easings as fg, darkColors as fh, getPropertyNames as fi, EditableTextProps as fl, NodeProperty as fm, Canvas2DRenderer as fn, resetTransitionWarnings as fo, UiPropValue as fp, IconContext as fr, CanvasTextStyle as fs, PrimitiveCommand as ft, LazyListOptions as fu, linkHoverOf as g, CanvasPlatformSurface as ga, PlacedLine as gc, visualState as gd, UiTrackSize as gf, UiEnvironmentKey as gh, propertyIsInherited as gi, GridItemProps as gl, UiPropertyOverrides as gm, UiRenderer as gn, writeDeclaredProperty as go, UiInputDispatcher as gp, iconKey as gr, TextRunRect as gs, RenderTextCache as gt, VIRTUAL_LEAD_PROP as gu, hasTextLinks as h, resolveCursor as ha, CaretRect as hc, hasVisualState as hd, UiLength as hf, UiEnvironment as hh, propertyEffects as hi, FlexItemProps as hl, UiPropertyOverride as hm, RendererBackend as hn, resetOverrideWarnings as ho, UiEventListenerOptions as hp, IconSpec as hr, TextLinePlacement as hs, RenderList as ht, VIRTUAL_INDEX_PROP as hu, UiSemanticsPatch as i, UiFrameTime as ia, SpannedRuns as ic, defaultTypography as id, UiLinearGradient as if, colorValuesEqual as ig, UiShapeExtensions as ih, UiModifierBundle as ii, UiChildrenBinding as il, LayoutResult as im, PaintRecorder as in, GestureRecognizerOptions as io, ComponentResolver as ip, motion as ir, nextCaretToggle as is, CLIP_STRIDE_BYTES as it, SheetViewport as iu, markInstant as j, EXTERNAL_FILES as ja, previousGraphemeStart as jc, flattenTextSpans as jd, UiPropertyDefinition as jf, UiReducedMotionPolicy as jh, parseFlexDirection as ji, UiEventProps as jl, UiDirection as jm, ThemeTokenTarget as jn, SCROLLBAR_THICKNESS as jo, UiSelectionChangeEvent as jp, AutoScrollOptions as jr, DEFAULT_FONT_WEIGHT as js, initializeWebGPU as jt, UiThemeExtension as ju, UiSchedulerOptions as k, TouchScrollerOptions as ka, nextGraphemeEnd as kc, defaultTextStyle as kd, boxShadowArraysEqual as kf, UiAnimation as kh, parseMainAxisAlignment as ki, TextProps as kl, UiContentDistribution as km, resolvePropertyByName as kn, SCROLLBAR_INSET as ko, UiPointerEvent as kp, ZoomState as kr, DEFAULT_FONT_FAMILY as ks, WebGPUGlyphAtlas as kt, withContrast as ku, UiSemanticsRecord as l, UiTimerFrameClockOptions as la, TextOverflow as lc, UiLayoutContext as ld, radialGradient as lf, rgba as lg, shapesEqual as lh, contentOffset as li, ColumnProps as ll, constraintsEqual as lm, LayoutInspector as ln, FocusSource as lo, isObservable$1 as lp, iconSource as lr, detectEditingPlatform as ls, INSTANCE_STRIDE_FLOATS as lt, LazyAxis as lu, clearLinkHover as m, isNodeTabStop as ma, spannedRunsFor as mc, defaultVisualState as md, PercentLength as mf, steps as mg, LayoutRecord as mh, inheritedPropertyNames as mi, FlexContainerProps as ml, UiNodeTransitions as mm, traceRoundedRect as mn, overrideSources as mo, UiEventListener as mp, IconRasterizerOptions as mr, SpanPaint as ms, RenderCommand as mt, UiVirtualWindow as mu, UiSemanticsBox as n, UiFrameClock as na, ParagraphLayout as nc, UiTypographyExtensions as nd, UiGradientOffset as nf, colorToHex as ng, normalizeBorderRadius as nh, measure as ni, UiEventBinding as nl, Constraints as nm, EMPTY_RECORDING as nn, isScrollContainer as no, UiModifierHost as np, MotionArgs as nr, isMultiline as ns, WebGPUGlyphPages as nt, SheetRowRenderer as nu, recordsEqual as o, UiHostFrameClockOptions as oa, TextLineRun as oc, typographyEqual as od, gradientPaint as of, normalizeColor as og, UiShapes as oh, noModifiers as oi, BoxModelProps as ol, Size as om, replayPaint as on, PinchRecognizerOptions as oo, UiChild as op, IconSourceArgs as or, EditCommand as os, CommandKind as ot, UiVirtualSheetOptions as ou, textRunOfRecordId as p, isNodeSelectable as pa, TextWrap as pc, UiVisualStateSet as pd, MinMaxTrack as pf, linear as pg, lightColors as ph, inheritedPropertyFlags as pi, EnvironmentProps as pl, UiNode as pm, Canvas2DRendererOptions as pn, clearOverrideProperty as po, UiProps as pp, IconRasterizer as pr, PlacedTextRun as ps, PrimitiveKind as pt, LazySourceArgs as pu, Mp4VideoTrack as q, KeyboardControllerOptions as qa, Row as qc, inputsEqual as qd, UiModifierFocus as qf, interpolatorFor as qh, SizeDecision as qi, validateRole as ql, UiVerticalAlign as qm, VideoState as qn, UiEnvironmentKeys as qo, pop as qp, FocusRingOptions as qr, TextRange as qs, PaintCanvasFactory as qt, UiSpacing as qu, UiSemanticsUpdate as r, UiFrameClockFactory as ra, ParagraphTextMeasurer as rc, UiTypographyRole as rd, UiGradientStop as rf, colorToRgba as rg, uniformBorderRadius as rh, pressable as ri, ChildrenBindingId as rl, LayoutBox as rm, PaintOp as rn, GestureInput as ro, UiModifierTeardown as rp, SharedElementArgs as rr, isReadOnly as rs, Affine as rt, SheetSourceArgs as ru, TEXT_RUN_ID_SEPARATOR as s, UiManualFrameClock as sa, TextMeasureRequest as sc, MAX_MEASURES_PER_CHILD as sd, gradientsEqual as sf, parseColor as sg, defaultShapes as sh, Transform as si, BoxProps as sl, TightenOptions as sm, INSPECTOR_HEAT_MS as sn, UiPinchRecognizer as so, UiElement as sp, ImageSourceArgs as sr, EditingPlatform as ss, GlyphCommand as st, VIRTUAL_SHEET_PROP as su, UiSemanticsAction as t, UiAnimationFrameClock as ta, FontMetrics as tc, UiTypography as td, UiGradient as tf, UiColor as tg, borderRadiusValuesEqual as th, interactive as ti, UiGraph as tl, UiSharedElements as tm, tracePathData as tn, UiWheelController as to, isUiModifier as tp, canDecodeVideo as tr, isEditableNode as ts, splitMp3Frames as tt, SheetRange as tu, buildSemanticsSubtree as u, isNodeFocusable as ua, TextRunMeasurer as uc, UiLayoutProtocol as ud, validateGradient as uf, UiEasing as ug, UiColors as uh, closestPropertyName as ui, CommonProps as ul, tightenConstraints as um, LayoutInspectorOptions as un, UiFocusManager as uo, isUiChild as up, imageSource as ur, isPrintable as us, ImageCommand as ut, LazyGridOptions as uu, linkRunAtPointIn as v, PlatformEventTarget as va, caretRectFor as vc, UiFontKerning as vd, fr as vf, findEnvironmentKey as vh, GridContribution as vi, IdentityProps as vl, DecorationRect as vm, RenderContext as vn, FindHost as vo, MOUSE_POINTER as vp, DefaultImageResolverOptions as vr, buildFontString as vs, TEXTURED_STRIDE_BYTES as vt, VirtualItemMeasure as vu, paragraphGeometryFrom as w, touchActionFor as wa, offsetForVerticalMove as wc, UiTextDecoration as wd, percent as wf, assertTransitionMap as wh, AlignContent as wi, Reactive as wl, paintsAfterChildren as wm, CanvasSurface as wn, HitTestResult as wo, UiKeyModifiers as wp, ShortcutsOptions as wr, runFontString as ws, textRuns as wt, videoFrameSize as wu, hasDrawnText as x, capturePointer as xa, lineLimit as xc, UiFontVariant as xd, isMinMaxTrack as xf, AnimationDriver as xh, GridTrack as xi, PaintProps as xl, decorationColor as xm, drawOverlayShapes as xn, SelectionHost as xo, UiFocusEvent as xp, animateLayout as xr, fillTextRects as xs, buildRenderList as xt, lazySource as xu, setLinkHover as y, PlatformSurface as ya, lineIndexAtY as yc, UiFontStretch as yd, isAutoLength as yf, UiNodeType as yh, GridItemRequest as yi, InteractionProps as yl, DecorationShape as ym, LABEL_PADDING_X as yn, UiFindController as yo, UiBeforeInputEvent as yp, ImageResolver as yr, createCanvasTextStyle as ys, TEXTURED_STRIDE_FLOATS as yt, VirtualUpdate as yu, parseWebVtt as z, dragSessionFor as za, LazyListProps as zc, PaintFillRule as zd, noInsets as zf, UiMotion as zh, ScrollAdjustment as zi, UiLiveRegion as zl, UiPosition as zm, SizeContainerArgs as zn, clearMatchRanges as zo, MOTION_REST as zp, DraggableOptions as zr, computeObjectFitRect as zs, WebGPUCanvasHost as zt, withThemeExtension as zu };
17174
+ //# sourceMappingURL=index-B4o3nKt2.d.ts.map