gesso-core 0.7.0 → 0.8.1

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.
@@ -8,6 +8,13 @@ import { BehaviorSubject, Observable, Subject } from "rxjs";
8
8
  * easing — so nothing downstream clamps what it returns.
9
9
  */
10
10
  type UiEasing = (t: number) => number;
11
+ /**
12
+ * The easing as CSS writes it, `cubic-bezier(0.2, 0, 0, 1)` or `linear`,
13
+ * for an easing made by `cubicBezier` or `linear`; undefined for one
14
+ * that is only a function, which CSS cannot name. What a design tool's
15
+ * handoff writes into a `transition`.
16
+ */
17
+ declare function easingCss(easing: UiEasing): string | undefined;
11
18
  /** Progress equals time. What a spinner and a sweep want. */
12
19
  declare const linear: UiEasing;
13
20
  /**
@@ -291,11 +298,30 @@ declare function interpolatorFor(from: unknown, to: unknown): UiInterpolator<unk
291
298
  * it has forty opinions. the rule for colour —
292
299
  * tokens only, never a literal in a component — applies to time.
293
300
  */
294
- type UiDurationToken = 'instant' | 'fast' | 'normal' | 'slow' | 'deliberate';
301
+ type UiDurationToken = 'instant' | 'fast' | 'normal' | 'slow' | 'deliberate' | (keyof UiDurationExtensions & string);
295
302
  /** The named curves; see `UiEasing.ts` for what each one is for. */
296
- type UiEasingToken = keyof typeof easings;
303
+ type UiEasingToken = keyof typeof easings | (keyof UiEasingExtensions & string);
297
304
  /** The named springs, for a movement that follows a gesture. */
298
- type UiSpringToken = 'gentle' | 'snappy' | 'stiff';
305
+ type UiSpringToken = 'gentle' | 'snappy' | 'stiff' | (keyof UiSpringExtensions & string);
306
+ /**
307
+ * Names an application adds to the vocabulary, as typography roles are
308
+ * added (`UiTypographyExtensions`): a design's own `press` beside
309
+ * `fast`, given its value in the motion it provides (`defineMotion`).
310
+ *
311
+ * declare module 'gesso-core' {
312
+ * interface UiDurationExtensions {
313
+ * readonly press: unknown;
314
+ * }
315
+ * }
316
+ *
317
+ * Only the key is used. Declaring one makes `transition={{ opacity:
318
+ * 'press' }}` legal and a misspelling a compile error.
319
+ */
320
+ interface UiDurationExtensions {}
321
+ /** Curves an application names; see `UiDurationExtensions`. */
322
+ interface UiEasingExtensions {}
323
+ /** Springs an application names; see `UiDurationExtensions`. */
324
+ interface UiSpringExtensions {}
299
325
  /**
300
326
  * A spring, in the physical sense: `stiffness` pulls towards the
301
327
  * target, `damping` resists velocity, `mass` resists both.
@@ -314,21 +340,42 @@ interface UiSpringSpec {
314
340
  /**
315
341
  * A vocabulary of motion, beside the palette and the type scale.
316
342
  *
317
- * It is deliberately **not** a field on `UiTheme`. A theme value is
318
- * resolved per node — `resolveColorValue` asks what the node inherits
319
- * — and an animation drives a *cell*, which has no node, so a motion
320
- * token on the theme would be a token nothing could resolve. That is
321
- * the mistake `visualState` made: a value
322
- * shipped where nothing reads it. An application that wants a
323
- * different feel installs one with `AnimationService.setMotion`, which
324
- * is per runtime, as everything else in front of the graph is.
343
+ * It is deliberately **not** a field on `UiTheme`: a theme value is
344
+ * resolved per node at paint, and a name in an animation is resolved
345
+ * once, when the animation starts. An application that wants a
346
+ * different feel installs one with `AnimationService.setMotion`, for
347
+ * the whole runtime, and a part of the tree may provide another over it
348
+ * (`UiEnvironmentKeys.motion`): a name in a `transition` or a `motion`
349
+ * state resolves against the motion where it is drawn (`motionOf`).
325
350
  */
326
351
  interface UiMotion {
327
352
  readonly durations: Readonly<Record<UiDurationToken, number>>;
328
353
  readonly easings: Readonly<Record<UiEasingToken, UiEasing>>;
329
354
  readonly springs: Readonly<Record<UiSpringToken, UiSpringSpec>>;
330
355
  }
356
+ /** What a design changes in the vocabulary: any name, its own included. */
357
+ interface UiMotionChanges {
358
+ readonly durations?: Readonly<Partial<Record<UiDurationToken, number>>>;
359
+ readonly easings?: Readonly<Partial<Record<UiEasingToken, UiEasing>>>;
360
+ readonly springs?: Readonly<Partial<Record<UiSpringToken, UiSpringSpec>>>;
361
+ }
331
362
  declare const defaultMotion: UiMotion;
363
+ /**
364
+ * A vocabulary with a design's own values, Gesso's for the rest:
365
+ *
366
+ * export const motion = defineMotion({ durations: { fast: 100, press: 90 } });
367
+ *
368
+ * Provided to a part of the tree (`UiEnvironmentKeys.motion`) or to the
369
+ * whole runtime (`AnimationService.setMotion`), it is what a name in a
370
+ * `transition`, a `motion` state or `AnimationService` resolves to.
371
+ */
372
+ declare function defineMotion(changes: UiMotionChanges): UiMotion;
373
+ /** A duration by name or in milliseconds, as `motion` has it; `normal` for a name it lacks. */
374
+ declare function durationIn(motion: UiMotion, duration: number | UiDurationToken | undefined): number;
375
+ /** A curve by name, or given outright; `standard` for none or a name it lacks. */
376
+ declare function easingIn(motion: UiMotion, easing: UiEasing | UiEasingToken | undefined): UiEasing;
377
+ /** A spring by name, or given outright; `snappy` for none or a name it lacks. */
378
+ declare function springIn(motion: UiMotion, spring: UiSpringSpec | UiSpringToken | undefined): UiSpringSpec;
332
379
  //#endregion
333
380
  //#region src/animation/UiAnimation.d.ts
334
381
  /**
@@ -499,7 +546,8 @@ declare abstract class UiAnimation<T> {
499
546
  */
500
547
  continueFrom(previous: UiAnimation<T>): void;
501
548
  protected onBegin(): void;
502
- advance(now: number): void;
549
+ /** `hold`: at its end, stay there, unfinished, to be sampled again at an earlier time (`UiClock.holding`). */
550
+ advance(now: number, hold?: boolean): void;
503
551
  /**
504
552
  * Moves the ideal timeline on by one step.
505
553
  *
@@ -597,13 +645,15 @@ declare function createTween<T>(cell: AnimatedCell<T>, to: T, options: UiTweenOp
597
645
  */
598
646
  type UiTransitionSpec = {
599
647
  readonly kind: 'tween';
600
- readonly duration: number;
601
- readonly easing?: UiEasing;
648
+ /** Milliseconds, or a name resolved against the motion where it is drawn. */
649
+ readonly duration: number | UiDurationToken;
650
+ readonly easing?: UiEasing | UiEasingToken;
602
651
  readonly stepMs?: number;
603
652
  readonly reducedMotion?: UiReducedMotionPolicy;
604
653
  } | {
605
654
  readonly kind: 'spring';
606
- readonly spring: UiSpringSpec;
655
+ /** Given outright, or a name resolved against the motion where it is drawn. */
656
+ readonly spring: UiSpringSpec | UiSpringToken;
607
657
  readonly restDelta?: number;
608
658
  readonly reducedMotion?: UiReducedMotionPolicy;
609
659
  };
@@ -615,10 +665,10 @@ type UiTransitionSpec = {
615
665
  * transition does. A spring is for a property that is one number, like
616
666
  * `opacity`: a transform only tweens (see `spring`).
617
667
  */
618
- type UiTransitionValue = number | UiTransitionSpec;
668
+ type UiTransitionValue = number | UiDurationToken | UiTransitionSpec;
619
669
  /** A tween of `duration` milliseconds along `easing`. */
620
- declare function tween(duration: number, options?: {
621
- easing?: UiEasing;
670
+ declare function tween(duration: number | UiDurationToken, options?: {
671
+ easing?: UiEasing | UiEasingToken;
622
672
  stepMs?: number;
623
673
  reducedMotion?: UiReducedMotionPolicy;
624
674
  }): UiTransitionSpec;
@@ -639,143 +689,6 @@ declare function normalizeTransition(value: UiTransitionValue): UiTransitionSpec
639
689
  */
640
690
  declare function assertTransitionMap(nodeId: string, value: unknown, isKnownProperty: (name: string) => boolean): ReadonlyMap<string, UiTransitionSpec>;
641
691
  //#endregion
642
- //#region src/animation/AnimationDriver.d.ts
643
- /**
644
- * The running animations of one runtime, and the thing the `ticks`
645
- * phase advances.
646
- *
647
- * **One animation per cell.** Starting a second one on a cell
648
- * supersedes the first, which completes without reaching its target.
649
- * That rule is not a simplification: it is what makes a gesture work
650
- * — every retarget while a finger moves is a new animation on the same
651
- * cell — and it removes the whole question of what two animations
652
- * writing one value would mean.
653
- *
654
- * The driver is per runtime for the reason `MediaService` is: the
655
- * playground runs several runtimes in one worker, and a module-level
656
- * set of animations would tick a disposed runtime's cells.
657
- */
658
- declare class AnimationDriver {
659
- private readonly running;
660
- private reducedMotion;
661
- private hidden;
662
- private wake;
663
- /**
664
- * Called when an animation enters the running set on an idle driver.
665
- *
666
- * The runtime arms a frame here. Without it an animation started
667
- * from a click handler that changes nothing else would never get a
668
- * first frame: the scheduler arms only on dirt, the animation's dirt
669
- * is made inside a frame, and no frame would ever come. Re-arming
670
- * *between* frames is `scheduleAnimationTick`'s job; this is only
671
- * the first one.
672
- */
673
- setWakeListener(listener: (() => void) | null): void;
674
- /** Whether anything is running, so the `ticks` phase can report 0. */
675
- get isRunning(): boolean;
676
- get size(): number;
677
- /** Whether a person has asked for less motion; see `UiReducedMotionPolicy`. */
678
- get isReducedMotion(): boolean;
679
- /**
680
- * Whether an animation should be put where it is going instead of
681
- * being run there.
682
- *
683
- * Two questions with one answer: a person who has asked for less
684
- * motion and a page nobody is looking at both want the end state and
685
- * not the journey to it, and in both cases `keep` is the way an
686
- * animation says its movement is the information rather than the
687
- * decoration.
688
- */
689
- private lands;
690
- /**
691
- * Starts an animation, replacing whatever was driving its cell.
692
- *
693
- * Returns the values it will write. Under reduced motion, or while
694
- * the document is hidden, an animation whose policy is `snap` never
695
- * enters the set at all: the cell takes its target here, in the
696
- * caller's turn, and the returned observable has already completed.
697
- * So a reduced-motion app runs no animation frames, rather than
698
- * running them and drawing the same thing sixty times.
699
- */
700
- start<T>(animation: UiAnimation<T>): Observable<T>;
701
- /** The animation currently driving a cell, if any. */
702
- animationFor<T>(cell: AnimatedCell<T>): UiAnimation<T> | undefined;
703
- /**
704
- * Stops whatever is driving a cell, leaving it where it stands.
705
- *
706
- * This is how a node leaving the tree releases its animations, which
707
- * is the leak the media tier names for image bitmaps and which
708
- * matters here too: a driver holding a cell holds every closure the
709
- * component that made it captured.
710
- */
711
- stop<T>(cell: AnimatedCell<T>): boolean;
712
- stopAll(): void;
713
- /**
714
- * A person's motion preference changed.
715
- *
716
- * Turning it on finishes everything already in flight that is
717
- * willing to be finished, rather than leaving a dialog stuck
718
- * half-faded until the animation it was told not to run runs out.
719
- */
720
- setReducedMotion(reduced: boolean): void;
721
- /**
722
- * The document went out of sight, or came back.
723
- *
724
- * A hidden page still paints. The runtime deliberately keeps giving
725
- * frames to a change that genuinely happened, so the canvas holds a
726
- * correct picture rather than whatever was on it when the tab went
727
- * away, and a route loaded hidden is drawn once its images have
728
- * decoded rather than being left half empty. What it does not do is
729
- * advance animations, because frames spent watching something move
730
- * that nobody can see are frames spent for nothing.
731
- *
732
- * Those two together leave an animation frozen at whatever value it
733
- * had reached, and painted there. For most animations that is
734
- * harmless: a colour halfway between two colours is still a colour.
735
- * For an **entrance** it is not, because an entrance begins at
736
- * `opacity: 0` and its frozen first value is an element that is not
737
- * there. Segue's track page, opened in a background tab, held sixty
738
- * two pixels of empty page where its play button belonged, and every
739
- * screen built from `motion({ initial })` did the same. It came back
740
- * the moment the tab did, which is exactly why it reads as a
741
- * rendering bug rather than as a tab that is not being drawn.
742
- *
743
- * So a hidden page lands its animations instead of freezing them, in
744
- * the same way and for the same reason a reduced-motion preference
745
- * does: what an animation has to say to nobody is nothing, and the
746
- * state it was going to end at is the one the page should be holding
747
- * while it waits to be looked at. An animation whose movement is the
748
- * information (`keep`) is left alone either way, so a spinner is
749
- * still a spinner when the tab comes back.
750
- */
751
- setHidden(hidden: boolean): void;
752
- /** Puts everything that may be landed where it was going. */
753
- private landRunning;
754
- /**
755
- * When the earliest animation next wants a frame, or undefined when
756
- * nothing is running.
757
- *
758
- * This is the whole answer to "how does an animation keep frames
759
- * coming on an idle app". The runtime asks after every frame: an
760
- * answer at or before `now` means arm the next frame, a later one
761
- * means a timer, and undefined means arm nothing — which is why an
762
- * idle app's profile reads `ticks 0.00` for the strong reason (no
763
- * frames at all) rather than the weak one (frames that did nothing).
764
- */
765
- nextTickAt(now: number): number | undefined;
766
- /**
767
- * Advances every animation whose next sample is due, writing each
768
- * one's cell. This is the `ticks` phase.
769
- *
770
- * It runs before the dirty set is snapshotted for exactly the reason
771
- * `patches` and `environment` do: the writes it makes have to belong
772
- * to the frame about to be collected, or a frame would draw the
773
- * previous tick's values and every animation would run one frame
774
- * behind.
775
- */
776
- advance(now: number): void;
777
- }
778
- //#endregion
779
692
  //#region src/graph/DirtyFlags.d.ts
780
693
  declare enum DirtyFlags {
781
694
  None = 0,
@@ -841,6 +754,27 @@ declare function createEnvironmentKey<T>(options: {
841
754
  * declared as a key.
842
755
  */
843
756
  declare function findEnvironmentKey(name: string): UiEnvironmentKey<unknown> | undefined;
757
+ /**
758
+ * A value a node provides for a key of your own, to everything under
759
+ * it: `provide={[provided(Session, session)]}`.
760
+ *
761
+ * The keys Gesso declares are provided by props of their own (`theme`,
762
+ * `pointer`, `contentColor`); this is how a key made with
763
+ * `createEnvironmentKey` is. A component under the node reads it with
764
+ * `ctx.environment(key)`. What the environment holds is compared by
765
+ * the key's `compare`, else by identity, so a value that changes often
766
+ * is better provided as a source (a cell) than as each new value: the
767
+ * source is set once and never compares unequal again.
768
+ */
769
+ interface UiProvision<T = unknown> {
770
+ readonly key: UiEnvironmentKey<T>;
771
+ readonly value: T;
772
+ }
773
+ /**
774
+ * A value for `key`, for a node's `provide`. Typed against the key
775
+ * here and erased in the result, so one list holds keys of any type.
776
+ */
777
+ declare function provided<T>(key: UiEnvironmentKey<T>, value: T): UiProvision;
844
778
  //#endregion
845
779
  //#region src/environment/UiEnvironment.d.ts
846
780
  /**
@@ -909,6 +843,86 @@ declare class UiEnvironment {
909
843
  providesOwn(name: string): boolean;
910
844
  }
911
845
  //#endregion
846
+ //#region src/layout/LayoutTypes.d.ts
847
+ interface Size {
848
+ width: number;
849
+ height: number;
850
+ }
851
+ interface LayoutBox {
852
+ x: number;
853
+ y: number;
854
+ width: number;
855
+ height: number;
856
+ }
857
+ /**
858
+ * Options applied to a Constraints instance.
859
+ *
860
+ * An explicit width/height makes that axis tight
861
+ * (min === max), mirroring CSS replaced sizing.
862
+ */
863
+ interface TightenOptions {
864
+ width?: number;
865
+ height?: number;
866
+ minWidth?: number;
867
+ maxWidth?: number;
868
+ minHeight?: number;
869
+ maxHeight?: number;
870
+ }
871
+ /**
872
+ * Immutable bounds handed down the layout tree.
873
+ *
874
+ * Unbounded axes use Infinity for max.
875
+ */
876
+ declare class Constraints {
877
+ readonly minWidth: number;
878
+ readonly maxWidth: number;
879
+ readonly minHeight: number;
880
+ readonly maxHeight: number;
881
+ constructor(minWidth?: number, maxWidth?: number, minHeight?: number, maxHeight?: number);
882
+ static unbounded(): Constraints;
883
+ static tight(width: number, height: number): Constraints;
884
+ static loose(width: number, height: number): Constraints;
885
+ hasBoundedWidth(): boolean;
886
+ hasBoundedHeight(): boolean;
887
+ }
888
+ /** What one layout call did; see LayoutEngine.stats. */
889
+ interface LayoutStats {
890
+ /** Nodes whose measure ran (memo hits excluded). */
891
+ measured: number;
892
+ /** Nodes whose place ran. */
893
+ placed: number;
894
+ /** Laid-out subtrees that moved without changing size, and were shifted rather than placed again. */
895
+ shifted: number;
896
+ /** Subtrees laid out from a relayout boundary instead of the root. */
897
+ relayoutRoots: number;
898
+ /** Whether the pass started from the root. */
899
+ fullLayout: boolean;
900
+ /** Every node whose measure ran, in order, when `LayoutEngine.trace` is on. */
901
+ measuredNodes: UiNode[];
902
+ }
903
+ /**
904
+ * The result of a full layout pass for the layout root.
905
+ *
906
+ * Descendant geometry is read from LayoutRecords.
907
+ */
908
+ interface LayoutResult {
909
+ root: UiNode;
910
+ box: LayoutBox;
911
+ contentWidth: number;
912
+ contentHeight: number;
913
+ scrollX: number;
914
+ scrollY: number;
915
+ clip: LayoutBox;
916
+ }
917
+ declare function clampSize(constraints: Constraints, width: number, height: number): Size;
918
+ declare function constraintsEqual(a: Constraints, b: Constraints): boolean;
919
+ /**
920
+ * Returns new constraints with the options applied on top of
921
+ * the supplied constraints. Explicit sizes make an axis tight,
922
+ * min/max values tighten the existing bounds.
923
+ */
924
+ declare function tightenConstraints(constraints: Constraints, options: TightenOptions): Constraints;
925
+ //#endregion
912
926
  //#region src/layout/TextMeasurer.d.ts
913
927
  type TextWrap = 'word' | 'char' | 'none';
914
928
  type TextOverflow = 'clip' | 'ellipsis';
@@ -1880,8 +1894,11 @@ declare const UI_SUBGRID_AXES: readonly UiSubgridAxis[];
1880
1894
  declare function validateSubgrid(value: unknown): string | undefined;
1881
1895
  type UiPosition = 'static' | 'relative' | 'absolute' | 'sticky';
1882
1896
  type UiOverflow = 'visible' | 'hidden' | 'scroll' | 'auto';
1883
- /** Side and alignment of an anchored node against its anchor. */
1884
- type UiPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
1897
+ /**
1898
+ * Side and alignment of an anchored node against its anchor, or `over`
1899
+ * it: laid over the anchor's box, grown by the offset on every side.
1900
+ */
1901
+ type UiPlacement = 'over' | 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
1885
1902
  type UiTextWrapValue = 'word' | 'char' | 'none';
1886
1903
  type UiTextOverflowValue = 'clip' | 'ellipsis';
1887
1904
  /**
@@ -2062,6 +2079,12 @@ interface UiPropertyOverride {
2062
2079
  readonly name: string;
2063
2080
  order: number;
2064
2081
  value: unknown;
2082
+ /**
2083
+ * Drawn at once, past any transition the node declares, and taken
2084
+ * away at once too: a design tool's preview of a value being chosen,
2085
+ * which has to keep up with the drag that chooses it.
2086
+ */
2087
+ readonly snap?: boolean;
2065
2088
  }
2066
2089
  /**
2067
2090
  * The cascade for one overridden property: the element's own value,
@@ -2087,9 +2110,23 @@ interface UiPropertyOverrides {
2087
2110
  interface UiNodeTransitions {
2088
2111
  /** Takes over a write by animating towards it, or declines it. */
2089
2112
  write(property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
2113
+ /** Stops animating one property, leaving it where it stands, for a write that is drawn at once. */
2114
+ cancel(property: NodeProperty): void;
2115
+ /** What the element declares, by property, as written: a name stays a name. For a tool that reads it. */
2116
+ readonly declared: ReadonlyMap<NodeProperty, UiTransitionSpec>;
2090
2117
  /** Cancels everything, for a node leaving the tree. */
2091
2118
  release(): void;
2092
2119
  }
2120
+ /**
2121
+ * What a held subtree is waiting to do: the marks its descendants were
2122
+ * given while it was held, and the environment its descendants are to
2123
+ * take again when it is let go. See `UiGraph.hold`.
2124
+ */
2125
+ interface UiHold {
2126
+ readonly pending: Map<UiNode, DirtyFlags>;
2127
+ /** The inherited-property flags a rebuild of the subtree's environment is owed, or None. */
2128
+ environment: DirtyFlags;
2129
+ }
2093
2130
  declare class UiNode {
2094
2131
  readonly id: NodeId;
2095
2132
  readonly type: UiNodeType;
@@ -2153,111 +2190,260 @@ declare class UiNode {
2153
2190
  */
2154
2191
  environment: UiEnvironment | null;
2155
2192
  /**
2156
- * Shapes the node's modifiers put in its own paint pass, merged in
2157
- * modifier order.
2193
+ * Shapes the node's modifiers put in its own paint pass, merged in
2194
+ * modifier order.
2195
+ *
2196
+ * Null until a modifier decorates, so the cost to an undecorated
2197
+ * node is the one null check each renderer already makes per node,
2198
+ * and a tree of ten thousand plain boxes pays nothing. Written only
2199
+ * through `UiModifierHost.decorate`; see `rendering/Decorations.ts`
2200
+ * for what a shape means and where it lands.
2201
+ */
2202
+ decorations: readonly DecorationShape[] | null;
2203
+ /**
2204
+ * How this node's properties get from one value to the next.
2205
+ *
2206
+ * Null until the element declares a `transition`, so the cost to a
2207
+ * tree without one is a field read on the property write path — the
2208
+ * same shape, and the same argument, as `overrides` above.
2209
+ */
2210
+ transitions: UiNodeTransitions | null;
2211
+ /**
2212
+ * Set on a node whose subtree is held (see `UiGraph.hold`): what its
2213
+ * descendants were marked dirty with while it was, to be marked again
2214
+ * when it is let go. Null on every node that holds nothing.
2215
+ */
2216
+ hold: UiHold | null;
2217
+ /**
2218
+ * The held node this one is inside, or null. Kept on every descendant
2219
+ * of a held node, so a mark finds out it is to wait with one field
2220
+ * read rather than a walk up the tree.
2221
+ */
2222
+ heldBy: UiNode | null;
2223
+ hasChildren(): boolean;
2224
+ isDirty(): boolean;
2225
+ getProperty<T>(property: NodeProperty): T | undefined;
2226
+ setProperty<T>(property: NodeProperty, value: T): void;
2227
+ /** Removes a property; whether it was there. */
2228
+ removeProperty(property: NodeProperty): boolean;
2229
+ }
2230
+ //#endregion
2231
+ //#region src/animation/UiClock.d.ts
2232
+ /**
2233
+ * How time passes for the animations under a node: at a speed of its
2234
+ * own, or not at all.
2235
+ *
2236
+ * A node provides one to its subtree,
2237
+ * `provide={[provided(UiEnvironmentKeys.clock, clock)]}`, and every
2238
+ * animation started there runs on it: a transition, a `motion` state,
2239
+ * hover and press, and `AnimationService.animate` given the node it
2240
+ * animates `on`. Nothing provided is real time.
2241
+ *
2242
+ * What a design tool needs to show one screen two ways at once. The
2243
+ * frames on its board are pictures: under a `settled` clock every
2244
+ * animation lands where it is going the moment it starts, and a loop
2245
+ * holds still. The screen it plays runs at the person's own speed, a
2246
+ * quarter of it to watch a press closely, or paused. Reduced motion and
2247
+ * a hidden page are the whole app's; this is one part of it.
2248
+ *
2249
+ * An animation takes all its time from the driver, which hands each
2250
+ * the local time of its clock, so nothing inside a tween or a spring
2251
+ * knows; and the driver asks for the next frame in real time, so a
2252
+ * slowed clock asks for frames as often as it needs them and a paused
2253
+ * one asks for none.
2254
+ */
2255
+ declare class UiClock {
2256
+ private rate;
2257
+ /** A real time and the local time it was, from the last change of speed: where local time is measured from. */
2258
+ private anchor;
2259
+ /** The real time last asked about, where a change of speed takes effect. */
2260
+ private lastReal;
2261
+ /** Every animation lands where it is going, and none runs. */
2262
+ settled: boolean;
2263
+ /**
2264
+ * Animations that reach their end stay, held there, rather than
2265
+ * finishing: so moving the time back (`seek`) plays them back. What a
2266
+ * design tool scrubs a transition with; let go, they finish as they
2267
+ * would have. A spring, which is worked out step by step rather than
2268
+ * from the time, holds but does not run back.
2269
+ */
2270
+ holding: boolean;
2271
+ /** Bumped by `seek`, so a driver knows to draw again at the new time. */
2272
+ moves: number;
2273
+ constructor(options?: {
2274
+ readonly speed?: number;
2275
+ readonly settled?: boolean;
2276
+ });
2277
+ /** How fast time passes: 1 is real time, 0.25 a quarter of it, 0 paused. */
2278
+ get speed(): number;
2279
+ set speed(next: number);
2280
+ /** The local time now, as last asked: where a seek is measured from. */
2281
+ get now(): number;
2282
+ /**
2283
+ * Puts local time at `at`, from now on: forward, or back to replay
2284
+ * what is held (`holding`). Paused, it stays there; running, it goes
2285
+ * on from there.
2286
+ */
2287
+ seek(at: number): void;
2288
+ /** The local time at real time `now`. The first time asked, the two agree. */
2289
+ local(now: number): number;
2290
+ /** The real time at which local time `at` comes; Infinity while paused. */
2291
+ real(at: number): number;
2292
+ }
2293
+ /** The motion vocabulary names resolve to under `node`: the nearest provided above it, or Gesso's. */
2294
+ declare function motionOf(node: UiNode | null | undefined): UiMotion;
2295
+ /** The clock the animations under `node` run on: the nearest one provided above it, or null for real time. */
2296
+ declare function clockOf(node: UiNode | null | undefined): UiClock | null;
2297
+ //#endregion
2298
+ //#region src/animation/AnimationDriver.d.ts
2299
+ /**
2300
+ * The running animations of one runtime, and the thing the `ticks`
2301
+ * phase advances.
2302
+ *
2303
+ * **One animation per cell.** Starting a second one on a cell
2304
+ * supersedes the first, which completes without reaching its target.
2305
+ * That rule is not a simplification: it is what makes a gesture work
2306
+ * — every retarget while a finger moves is a new animation on the same
2307
+ * cell — and it removes the whole question of what two animations
2308
+ * writing one value would mean.
2309
+ *
2310
+ * The driver is per runtime for the reason `MediaService` is: the
2311
+ * playground runs several runtimes in one worker, and a module-level
2312
+ * set of animations would tick a disposed runtime's cells.
2313
+ */
2314
+ declare class AnimationDriver {
2315
+ private readonly running;
2316
+ /** The clock each running animation was started on, when it was not real time; see `UiClock`. */
2317
+ private readonly clocks;
2318
+ /** Each clock's `moves` as last drawn: one moved since (a seek) is drawn at its new time at once. */
2319
+ private readonly seenMoves;
2320
+ private reducedMotion;
2321
+ private hidden;
2322
+ private advancing;
2323
+ private wake;
2324
+ /**
2325
+ * Called when an animation enters the running set on an idle driver.
2326
+ *
2327
+ * The runtime arms a frame here. Without it an animation started
2328
+ * from a click handler that changes nothing else would never get a
2329
+ * first frame: the scheduler arms only on dirt, the animation's dirt
2330
+ * is made inside a frame, and no frame would ever come. Re-arming
2331
+ * *between* frames is `scheduleAnimationTick`'s job; this is only
2332
+ * the first one.
2333
+ */
2334
+ setWakeListener(listener: (() => void) | null): void;
2335
+ /**
2336
+ * Whether a frame of the running animations is being written now: a
2337
+ * value written meanwhile is a step of an animation, not a change for
2338
+ * a transition to animate again.
2339
+ */
2340
+ get isAdvancing(): boolean;
2341
+ /** Whether anything is running, so the `ticks` phase can report 0. */
2342
+ get isRunning(): boolean;
2343
+ get size(): number;
2344
+ /** Whether a person has asked for less motion; see `UiReducedMotionPolicy`. */
2345
+ get isReducedMotion(): boolean;
2346
+ /**
2347
+ * Whether an animation should be put where it is going instead of
2348
+ * being run there.
2349
+ *
2350
+ * Two questions with one answer: a person who has asked for less
2351
+ * motion and a page nobody is looking at both want the end state and
2352
+ * not the journey to it, and in both cases `keep` is the way an
2353
+ * animation says its movement is the information rather than the
2354
+ * decoration.
2355
+ */
2356
+ private lands;
2357
+ /**
2358
+ * Starts an animation, replacing whatever was driving its cell.
2359
+ *
2360
+ * Returns the values it will write. Under reduced motion, or while
2361
+ * the document is hidden, an animation whose policy is `snap` never
2362
+ * enters the set at all: the cell takes its target here, in the
2363
+ * caller's turn, and the returned observable has already completed.
2364
+ * So a reduced-motion app runs no animation frames, rather than
2365
+ * running them and drawing the same thing sixty times.
2366
+ */
2367
+ start<T>(animation: UiAnimation<T>, clock?: UiClock | null): Observable<T>;
2368
+ /** The animation currently driving a cell, if any. */
2369
+ animationFor<T>(cell: AnimatedCell<T>): UiAnimation<T> | undefined;
2370
+ /**
2371
+ * Stops whatever is driving a cell, leaving it where it stands.
2372
+ *
2373
+ * This is how a node leaving the tree releases its animations, which
2374
+ * is the leak the media tier names for image bitmaps and which
2375
+ * matters here too: a driver holding a cell holds every closure the
2376
+ * component that made it captured.
2377
+ */
2378
+ stop<T>(cell: AnimatedCell<T>): boolean;
2379
+ stopAll(): void;
2380
+ /**
2381
+ * A person's motion preference changed.
2382
+ *
2383
+ * Turning it on finishes everything already in flight that is
2384
+ * willing to be finished, rather than leaving a dialog stuck
2385
+ * half-faded until the animation it was told not to run runs out.
2386
+ */
2387
+ setReducedMotion(reduced: boolean): void;
2388
+ /**
2389
+ * The document went out of sight, or came back.
2390
+ *
2391
+ * A hidden page still paints. The runtime deliberately keeps giving
2392
+ * frames to a change that genuinely happened, so the canvas holds a
2393
+ * correct picture rather than whatever was on it when the tab went
2394
+ * away, and a route loaded hidden is drawn once its images have
2395
+ * decoded rather than being left half empty. What it does not do is
2396
+ * advance animations, because frames spent watching something move
2397
+ * that nobody can see are frames spent for nothing.
2398
+ *
2399
+ * Those two together leave an animation frozen at whatever value it
2400
+ * had reached, and painted there. For most animations that is
2401
+ * harmless: a colour halfway between two colours is still a colour.
2402
+ * For an **entrance** it is not, because an entrance begins at
2403
+ * `opacity: 0` and its frozen first value is an element that is not
2404
+ * there. Segue's track page, opened in a background tab, held sixty
2405
+ * two pixels of empty page where its play button belonged, and every
2406
+ * screen built from `motion({ initial })` did the same. It came back
2407
+ * the moment the tab did, which is exactly why it reads as a
2408
+ * rendering bug rather than as a tab that is not being drawn.
2409
+ *
2410
+ * So a hidden page lands its animations instead of freezing them, in
2411
+ * the same way and for the same reason a reduced-motion preference
2412
+ * does: what an animation has to say to nobody is nothing, and the
2413
+ * state it was going to end at is the one the page should be holding
2414
+ * while it waits to be looked at. An animation whose movement is the
2415
+ * information (`keep`) is left alone either way, so a spinner is
2416
+ * still a spinner when the tab comes back.
2417
+ */
2418
+ setHidden(hidden: boolean): void;
2419
+ /** Puts everything that may be landed where it was going. */
2420
+ private landRunning;
2421
+ /**
2422
+ * When the earliest animation next wants a frame, or undefined when
2423
+ * nothing is running.
2158
2424
  *
2159
- * Null until a modifier decorates, so the cost to an undecorated
2160
- * node is the one null check each renderer already makes per node,
2161
- * and a tree of ten thousand plain boxes pays nothing. Written only
2162
- * through `UiModifierHost.decorate`; see `rendering/Decorations.ts`
2163
- * for what a shape means and where it lands.
2425
+ * This is the whole answer to "how does an animation keep frames
2426
+ * coming on an idle app". The runtime asks after every frame: an
2427
+ * answer at or before `now` means arm the next frame, a later one
2428
+ * means a timer, and undefined means arm nothing — which is why an
2429
+ * idle app's profile reads `ticks 0.00` for the strong reason (no
2430
+ * frames at all) rather than the weak one (frames that did nothing).
2164
2431
  */
2165
- decorations: readonly DecorationShape[] | null;
2432
+ nextTickAt(now: number): number | undefined;
2166
2433
  /**
2167
- * How this node's properties get from one value to the next.
2434
+ * Advances every animation whose next sample is due, writing each
2435
+ * one's cell. This is the `ticks` phase.
2168
2436
  *
2169
- * Null until the element declares a `transition`, so the cost to a
2170
- * tree without one is a field read on the property write path — the
2171
- * same shape, and the same argument, as `overrides` above.
2437
+ * It runs before the dirty set is snapshotted for exactly the reason
2438
+ * `patches` and `environment` do: the writes it makes have to belong
2439
+ * to the frame about to be collected, or a frame would draw the
2440
+ * previous tick's values and every animation would run one frame
2441
+ * behind.
2172
2442
  */
2173
- transitions: UiNodeTransitions | null;
2174
- hasChildren(): boolean;
2175
- isDirty(): boolean;
2176
- getProperty<T>(property: NodeProperty): T | undefined;
2177
- setProperty<T>(property: NodeProperty, value: T): void;
2178
- /** Removes a property; whether it was there. */
2179
- removeProperty(property: NodeProperty): boolean;
2180
- }
2181
- //#endregion
2182
- //#region src/layout/LayoutTypes.d.ts
2183
- interface Size {
2184
- width: number;
2185
- height: number;
2186
- }
2187
- interface LayoutBox {
2188
- x: number;
2189
- y: number;
2190
- width: number;
2191
- height: number;
2192
- }
2193
- /**
2194
- * Options applied to a Constraints instance.
2195
- *
2196
- * An explicit width/height makes that axis tight
2197
- * (min === max), mirroring CSS replaced sizing.
2198
- */
2199
- interface TightenOptions {
2200
- width?: number;
2201
- height?: number;
2202
- minWidth?: number;
2203
- maxWidth?: number;
2204
- minHeight?: number;
2205
- maxHeight?: number;
2206
- }
2207
- /**
2208
- * Immutable bounds handed down the layout tree.
2209
- *
2210
- * Unbounded axes use Infinity for max.
2211
- */
2212
- declare class Constraints {
2213
- readonly minWidth: number;
2214
- readonly maxWidth: number;
2215
- readonly minHeight: number;
2216
- readonly maxHeight: number;
2217
- constructor(minWidth?: number, maxWidth?: number, minHeight?: number, maxHeight?: number);
2218
- static unbounded(): Constraints;
2219
- static tight(width: number, height: number): Constraints;
2220
- static loose(width: number, height: number): Constraints;
2221
- hasBoundedWidth(): boolean;
2222
- hasBoundedHeight(): boolean;
2223
- }
2224
- /** What one layout call did; see LayoutEngine.stats. */
2225
- interface LayoutStats {
2226
- /** Nodes whose measure ran (memo hits excluded). */
2227
- measured: number;
2228
- /** Nodes whose place ran. */
2229
- placed: number;
2230
- /** Laid-out subtrees that moved without changing size, and were shifted rather than placed again. */
2231
- shifted: number;
2232
- /** Subtrees laid out from a relayout boundary instead of the root. */
2233
- relayoutRoots: number;
2234
- /** Whether the pass started from the root. */
2235
- fullLayout: boolean;
2236
- /** Every node whose measure ran, in order, when `LayoutEngine.trace` is on. */
2237
- measuredNodes: UiNode[];
2238
- }
2239
- /**
2240
- * The result of a full layout pass for the layout root.
2241
- *
2242
- * Descendant geometry is read from LayoutRecords.
2243
- */
2244
- interface LayoutResult {
2245
- root: UiNode;
2246
- box: LayoutBox;
2247
- contentWidth: number;
2248
- contentHeight: number;
2249
- scrollX: number;
2250
- scrollY: number;
2251
- clip: LayoutBox;
2443
+ advance(now: number): void;
2444
+ private advanceRunning;
2445
+ private advanceEach;
2252
2446
  }
2253
- declare function clampSize(constraints: Constraints, width: number, height: number): Size;
2254
- declare function constraintsEqual(a: Constraints, b: Constraints): boolean;
2255
- /**
2256
- * Returns new constraints with the options applied on top of
2257
- * the supplied constraints. Explicit sizes make an axis tight,
2258
- * min/max values tighten the existing bounds.
2259
- */
2260
- declare function tightenConstraints(constraints: Constraints, options: TightenOptions): Constraints;
2261
2447
  //#endregion
2262
2448
  //#region src/animation/UiSharedElements.d.ts
2263
2449
  /**
@@ -3238,8 +3424,11 @@ interface ComponentResolver {
3238
3424
  * Called on every reconcile pass that reaches the slot. Returning
3239
3425
  * the same value for an unchanged component is expected; the
3240
3426
  * builder reconciles it idempotently.
3427
+ *
3428
+ * `anchor` is the slot's node, already under its parent, so what
3429
+ * the component is placed in can be read while its body runs.
3241
3430
  */
3242
- resolve(element: ComponentLikeElement, anchorId: string): UiChild;
3431
+ resolve(element: ComponentLikeElement, anchorId: string, anchor?: UiNode): UiChild;
3243
3432
  /**
3244
3433
  * Tears down the host owning `anchorId`.
3245
3434
  *
@@ -3333,6 +3522,12 @@ type FocusModality = 'pointer' | 'keyboard';
3333
3522
  * dialog modal for the keyboard. `popScope()` restores focus to
3334
3523
  * whatever held it when the scope was pushed. Components reach both
3335
3524
  * through `FocusService`, never directly.
3525
+ *
3526
+ * A scope inside a bound (`setFocusBounds`) is modal only inside it. A
3527
+ * dialog open in one of a design tool's frames confines the keyboard in
3528
+ * that frame, when it is there, and leaves the tool around it, and every
3529
+ * other frame, to the person: it takes no focus from outside, and gives
3530
+ * none back when it closes.
3336
3531
  */
3337
3532
  declare class UiFocusManager {
3338
3533
  private readonly dispatcher;
@@ -3349,11 +3544,17 @@ declare class UiFocusManager {
3349
3544
  private readonly listeners;
3350
3545
  private readonly scopeListeners;
3351
3546
  private readonly scopes;
3547
+ private isBound;
3352
3548
  /** The field of each editing group that last had focus, where Tab back into the group lands. */
3353
3549
  private readonly groupEntries;
3354
3550
  constructor(root: UiNode, dispatcher: UiInputDispatcher);
3355
3551
  /** The root used for focus-order traversal. Clears any active scope. */
3356
3552
  setRoot(root: UiNode): void;
3553
+ /**
3554
+ * Which nodes bound a scope taken inside them: a trap under one is
3555
+ * modal only inside it. `OverlayScope`'s, set by the framework.
3556
+ */
3557
+ setFocusBounds(isBound: ((node: UiNode) => boolean) | null): void;
3357
3558
  /** The node that currently holds logical focus, or null. */
3358
3559
  get focusedNode(): UiNode | null;
3359
3560
  hasFocus(): boolean;
@@ -3421,7 +3622,8 @@ declare class UiFocusManager {
3421
3622
  /** Moves focus to the previous focusable node, wrapping to the last. */
3422
3623
  focusPrevious(): boolean;
3423
3624
  /**
3424
- * Confines focus to `root` until the matching `popScope`.
3625
+ * Confines focus to `root` until the matching `popScope`; inside a
3626
+ * bound, only for focus inside it (see the class's note).
3425
3627
  *
3426
3628
  * Focus that is outside the new scope moves to its first focusable,
3427
3629
  * so the very next Tab stays inside; a scope with nothing focusable
@@ -3491,6 +3693,12 @@ declare class UiFocusManager {
3491
3693
  * stops, which is what lets a dialog body be the keyboard's home of
3492
3694
  * last resort without becoming a stop of its own.
3493
3695
  */
3696
+ /**
3697
+ * The tab stops under `within`, or in the active scope, in the order
3698
+ * Tab visits them: what a design tool numbers to show a screen's
3699
+ * keyboard order.
3700
+ */
3701
+ tabStops(within?: UiNode): UiNode[];
3494
3702
  private collectFocusable;
3495
3703
  /** Whether an ancestor is hidden or disabled, which takes the node's focus away with it. */
3496
3704
  private insideHidden;
@@ -3498,6 +3706,18 @@ declare class UiFocusManager {
3498
3706
  private groupOf;
3499
3707
  /** Whether the node may hold focus given the active scope, if any. */
3500
3708
  private withinScope;
3709
+ /**
3710
+ * The innermost scope that confines a node: a bounded one only inside
3711
+ * its bound, so a node, or no focus at all, outside it answers to the
3712
+ * scope under it.
3713
+ */
3714
+ private scopeFor;
3715
+ /**
3716
+ * The bound above a scope's root, found once the root is in the tree
3717
+ * (a trap is taken from a `ref`, which may fire before) and kept, so
3718
+ * a scope whose subtree has gone still knows it.
3719
+ */
3720
+ private boundOf;
3501
3721
  /** Whether the node is still connected to the traversal root. */
3502
3722
  private isAttached;
3503
3723
  private isWithin;
@@ -3644,6 +3864,19 @@ interface UiModifierHost {
3644
3864
  * one is painted unsettled and warned about rather than hanging.
3645
3865
  */
3646
3866
  onLayout(listener: (box: LayoutBox) => void): void;
3867
+ /**
3868
+ * Called after any frame that changed the node's `flowBox` or its own
3869
+ * scroll offset, with the `flowBox`; not when a scroll or a transform
3870
+ * above it only moves it on screen. Removed on detach.
3871
+ *
3872
+ * The one to use when what the listener reads is the node's own place
3873
+ * in the layout — its size for a breakpoint, its box for a layout
3874
+ * animation, its offset for a scroll position — which a pan of a
3875
+ * design tool's board, or a page's scroll, does not change. Asking
3876
+ * nothing on those frames is most of what it is for. Runs where
3877
+ * `onLayout` runs, with the same freedom to change layout.
3878
+ */
3879
+ onFlowLayout(listener: (box: LayoutBox) => void): void;
3647
3880
  /**
3648
3881
  * The value the node inherits for an environment key: what the
3649
3882
  * nearest provider above it supplies, else the key's default.
@@ -3819,6 +4052,8 @@ interface UiModifierLayout {
3819
4052
  */
3820
4053
  viewport?(): LayoutBox | null;
3821
4054
  onLayout(node: UiNode, listener: (box: LayoutBox) => void): () => void;
4055
+ /** See `UiModifierHost.onFlowLayout`. Absent, `onLayout` stands in, which tells a listener more often, never less. */
4056
+ onFlowLayout?(node: UiNode, listener: (box: LayoutBox) => void): () => void;
3822
4057
  }
3823
4058
  /**
3824
4059
  * Where a modifier's focus access comes from.
@@ -3870,6 +4105,8 @@ declare class UiModifierSet {
3870
4105
  private decorationsFor;
3871
4106
  /** The names of what is attached, in order, for the inspector. */
3872
4107
  get names(): string[];
4108
+ /** What is attached, each kind with its current arguments, in order: for a tool reading what a node does. */
4109
+ get modifiers(): readonly UiModifier[];
3873
4110
  get size(): number;
3874
4111
  /**
3875
4112
  * Brings the attached set in line with what the element declares.
@@ -4628,6 +4865,14 @@ declare const BOX_SHADOW_BLUR_REACH = 1.5;
4628
4865
  * one's hole shrinks with it. A square corner stays square, as CSS
4629
4866
  * keeps it.
4630
4867
  */
4868
+ /**
4869
+ * A box's corner radius as its shadows take it: no more than half its
4870
+ * shorter side, as CSS shrinks radii to fit the box before a shadow is
4871
+ * spread from them. A box of no size with a 16 radius has no corners,
4872
+ * so the hole an outer shadow leaves under it is nothing: a spotlight's
4873
+ * hole shrunk to a point showed a 16-pixel circle where there was none.
4874
+ */
4875
+ declare function fittedShadowRadius(boxRadius: number, width: number, height: number): number;
4631
4876
  declare function boxShadowRadius(boxRadius: number, spreadRadius: number, inset: boolean): number;
4632
4877
  /**
4633
4878
  * How far past each side of the box a node's outer shadows may paint,
@@ -5195,6 +5440,16 @@ interface UiGradientStop {
5195
5440
  * does.
5196
5441
  */
5197
5442
  readonly color: UiColorValue;
5443
+ /**
5444
+ * How much of the colour shows, 0 to 1, multiplied into its alpha once
5445
+ * a palette name has been resolved: `{ color: 'background', opacity: 0 }`.
5446
+ *
5447
+ * What a fade to nothing is made of. A canvas blends a gradient's stops
5448
+ * without premultiplying, so a ramp from white to `transparent`, which
5449
+ * is transparent *black*, passes through grey on its way out; a ramp to
5450
+ * the same colour at no opacity stays that colour all the way.
5451
+ */
5452
+ readonly opacity?: number;
5198
5453
  }
5199
5454
  interface UiLinearGradient {
5200
5455
  readonly kind: 'linear';
@@ -5422,12 +5677,44 @@ interface PaintSurface {
5422
5677
  /** Multiplies into the opacity already in force, as a node's does. */
5423
5678
  alpha(value: number): void;
5424
5679
  /**
5425
- * Blurs everything drawn after it, by a radius in logical pixels.
5680
+ * Blurs everything drawn after it, by a radius (CSS's standard
5681
+ * deviation) in the current coordinates, so a blur under a `scale`
5682
+ * scales with what it blurs. The transform in force at the call is
5683
+ * the one it is measured in.
5426
5684
  *
5427
5685
  * Scoped by `save` and `restore` like every other style value, so a
5428
5686
  * frosted panel is `save`, `blur`, draw, `restore`. Zero clears it.
5429
5687
  */
5430
5688
  blur(radius: number): void;
5689
+ /**
5690
+ * Starts a masked layer: what is drawn from here to `layerMask` is
5691
+ * the layer's content, kept apart from what is drawn already and cut
5692
+ * to this rectangle, in the current coordinates.
5693
+ *
5694
+ * Saves the state as `save` does. The content starts with the
5695
+ * transform in force and an empty path, and with every other style
5696
+ * value at its initial one: the alpha, blur and clip in force here
5697
+ * apply to the layer as a whole, when `endMaskedLayer` draws it.
5698
+ *
5699
+ * An SVG `<mask>` and a drop shadow are both drawn this way. A host
5700
+ * that cannot keep a layer apart draws the content unmasked and the
5701
+ * mask not at all, which is a picture that is wrong in one detail
5702
+ * rather than missing.
5703
+ */
5704
+ beginMaskedLayer(x: number, y: number, width: number, height: number): void;
5705
+ /**
5706
+ * Ends the layer's content and starts its mask: the state is as
5707
+ * `beginMaskedLayer` found it, the path empty, and the mask cut to the
5708
+ * same rectangle. Where the mask is drawn the content shows, by how
5709
+ * much `mode` says; where nothing is, nothing does.
5710
+ */
5711
+ layerMask(mode?: PaintMaskMode): void;
5712
+ /**
5713
+ * Draws the layer's content, masked, where it began, and restores the
5714
+ * state `beginMaskedLayer` saved. A layer ended without a mask draws
5715
+ * its content as it is.
5716
+ */
5717
+ endMaskedLayer(): void;
5431
5718
  /** Fills the current path. The default rule is `nonzero`. */
5432
5719
  fill(rule?: PaintFillRule): void;
5433
5720
  stroke(): void;
@@ -5449,6 +5736,13 @@ type PaintFillRule = 'nonzero' | 'evenodd';
5449
5736
  type PaintLineCap = 'butt' | 'round' | 'square';
5450
5737
  type PaintLineJoin = 'miter' | 'round' | 'bevel';
5451
5738
  type PaintTextAlign = 'left' | 'center' | 'right';
5739
+ /**
5740
+ * How a layer's mask says how much of it shows. `luminance`, the
5741
+ * default, is SVG's `<mask>` and CSS's `mask-type: luminance`: the
5742
+ * mask's brightness times its alpha, so white shows the content and
5743
+ * black hides it. `alpha` is the mask's alpha alone, whatever its colour.
5744
+ */
5745
+ type PaintMaskMode = 'luminance' | 'alpha';
5452
5746
  /** The little of a text style a single painted line can carry. */
5453
5747
  interface PaintTextStyle {
5454
5748
  readonly fontSize?: number;
@@ -6902,6 +7196,16 @@ declare function validateRole(value: unknown): string | undefined;
6902
7196
  declare function validateStates(value: unknown): string | undefined;
6903
7197
  //#endregion
6904
7198
  //#region src/properties/UiProperty.d.ts
7199
+ /**
7200
+ * When a subtree is held (`holdUnseen`): out of view, or, with
7201
+ * `belowScale`, also when drawn smaller than that share of its size.
7202
+ * `margin` is how far outside the view, in screen pixels, still counts
7203
+ * as in it, so a pan reaches it already caught up; 0 by default.
7204
+ */
7205
+ type UiHoldUnseen = true | {
7206
+ readonly belowScale?: number;
7207
+ readonly margin?: number;
7208
+ };
6905
7209
  declare const UiProperties: {
6906
7210
  readonly width: UiPropertyDefinition<UiLength | undefined>;
6907
7211
  readonly height: UiPropertyDefinition<UiLength | undefined>;
@@ -7151,7 +7455,10 @@ declare const UiProperties: {
7151
7455
  * Side and alignment against the anchor: 'bottom' (default),
7152
7456
  * 'bottom-start', 'bottom-end', 'top', 'top-start', 'top-end',
7153
7457
  * 'left', 'left-start', 'left-end', 'right', 'right-start',
7154
- * 'right-end'.
7458
+ * 'right-end'; or 'over', which lays the node over the anchor at its
7459
+ * size, grown by `anchorOffset` on every side: a spotlight's hole, a
7460
+ * focus ring drawn above everything, following the anchor as any
7461
+ * anchored node does.
7155
7462
  */
7156
7463
  readonly placement: UiPropertyDefinition<UiPlacement | undefined>;
7157
7464
  /**
@@ -7453,6 +7760,16 @@ declare const UiProperties: {
7453
7760
  * it is drawn at, is drawn directly.
7454
7761
  */
7455
7762
  readonly rasterize: UiPropertyDefinition<boolean>;
7763
+ /**
7764
+ * Hold this subtree while it cannot be read: out of view, or drawn
7765
+ * smaller than `belowScale` of its size (a frame on a board zoomed
7766
+ * far out). Held, nothing in it is laid out, described or drawn again,
7767
+ * whatever its clocks and streams write; it is shown as it last was,
7768
+ * which with `rasterize` is one copy of its pixels. It catches up on
7769
+ * the frame it can be read again. `true` holds it only out of view.
7770
+ * See `UiGraph.hold`.
7771
+ */
7772
+ readonly holdUnseen: UiPropertyDefinition<UiHoldUnseen | undefined>;
7456
7773
  readonly text: UiPropertyDefinition<string | undefined>;
7457
7774
  readonly image: UiPropertyDefinition<ImageBitmap | undefined>;
7458
7775
  /**
@@ -7573,6 +7890,8 @@ declare const UiProperties: {
7573
7890
  */
7574
7891
  readonly textStyle: UiPropertyDefinition<UiTextStyle | UiTypographyRole | undefined>;
7575
7892
  readonly contentColor: UiPropertyDefinition<UiColorValue | undefined>;
7893
+ /** Values for keys of the application's own, provided to the subtree; see `UiProvision`. */
7894
+ readonly provide: UiPropertyDefinition<readonly UiProvision<unknown>[] | undefined>;
7576
7895
  /**
7577
7896
  * Declares this node a size query container: its content size is
7578
7897
  * published to the subtree through `UiEnvironmentKeys.containerSize`,
@@ -7731,7 +8050,7 @@ type FlexItemProps = PropsOf<'flex' | 'flexGrow' | 'flexShrink' | 'flexBasis' |
7731
8050
  /** Where an element sits in a Grid. */
7732
8051
  type GridItemProps = PropsOf<'column' | 'columnSpan' | 'row' | 'rowSpan'>;
7733
8052
  type PositionProps = PropsOf<'position' | 'top' | 'right' | 'bottom' | 'left' | 'inset' | 'zIndex' | 'lift' | 'liftBoundary' | 'anchor' | 'anchorPoint' | 'anchorRect' | 'placement' | 'anchorOffset'>;
7734
- type PaintProps = PropsOf<'backgroundColor' | 'backgroundGradient' | 'borderColor' | 'borderWidth' | 'borderRadius' | 'opacity' | 'boxShadows' | 'visible' | 'transform' | 'rasterize'>;
8053
+ type PaintProps = PropsOf<'backgroundColor' | 'backgroundGradient' | 'borderColor' | 'borderWidth' | 'borderRadius' | 'opacity' | 'boxShadows' | 'visible' | 'transform' | 'rasterize' | 'holdUnseen'>;
7735
8054
  /**
7736
8055
  * Inherited text properties. Legal on any element: set on a container,
7737
8056
  * they cascade to the text below it.
@@ -7745,7 +8064,7 @@ type InteractionProps = PropsOf<'cursor' | 'pointerEvents' | 'touchEmulation' |
7745
8064
  */
7746
8065
  type SemanticsProps = PropsOf<'role' | 'label' | 'description' | 'live' | 'states' | 'valueNow' | 'valueMin' | 'valueMax' | 'valueText' | 'posInSet' | 'setSize' | 'level' | 'rowIndex' | 'columnIndex' | 'rowCount' | 'columnCount' | 'activeDescendant' | 'controls' | 'autocomplete' | 'orientation'>;
7747
8066
  /** Environment values an element provides to its subtree. */
7748
- type EnvironmentProps = PropsOf<'theme' | 'pointer' | 'textStyle' | 'contentColor' | 'containerSize' | 'insets'>;
8067
+ type EnvironmentProps = PropsOf<'theme' | 'pointer' | 'textStyle' | 'contentColor' | 'containerSize' | 'insets' | 'provide'>;
7749
8068
  /**
7750
8069
  * Behaviour attached to an element without wrapping it: hover and
7751
8070
  * press state, a focus ring, a tooltip, drag. See `packages/core/src/modifiers`.
@@ -8380,6 +8699,29 @@ declare class UiGraph {
8380
8699
  * common case: themes change far less often than anything else.
8381
8700
  */
8382
8701
  hasEnvironmentDirty(): boolean;
8702
+ /**
8703
+ * Holds a subtree as it is: from now until `release`, nothing beneath
8704
+ * `node` is marked dirty, so nothing there is laid out, described or
8705
+ * drawn again, and a change to a provider above it stops at it. The
8706
+ * marks are kept instead, and given again on release, so the subtree
8707
+ * then catches up in one frame with everything that happened to it.
8708
+ * `node` itself is not held: its own size and place still follow.
8709
+ *
8710
+ * For a subtree nobody can see, whose reactive sources would otherwise
8711
+ * keep a whole tree busy: a design tool's board of hundreds of frames,
8712
+ * each a live screen with its own clocks, most of them out of view or
8713
+ * too small to read. Its bindings keep running and keep writing the
8714
+ * values they produce, which costs a property write each; what it no
8715
+ * longer costs is the layout, environment, semantics and paint every
8716
+ * one of those writes set off. What the renderer has kept of it
8717
+ * (`rasterize`) stays its picture, since nothing in it is dirty.
8718
+ *
8719
+ * Holding is not nested: a held node inside another's subtree is held
8720
+ * by the outer one until that one is let go.
8721
+ */
8722
+ hold(node: UiNode): void;
8723
+ /** Lets a held subtree go, and marks again what was marked while it was held. */
8724
+ release(node: UiNode): void;
8383
8725
  markDirtyById(id: NodeId, flags: DirtyFlags): void;
8384
8726
  clearDirty(node: UiNode): void;
8385
8727
  /**
@@ -8430,15 +8772,10 @@ declare class UiGraph {
8430
8772
  */
8431
8773
  removeNodeProperty(node: UiNode, property: string, dirtyFlags?: DirtyFlags): boolean;
8432
8774
  /**
8433
- * Writes a property without consulting the node's transitions.
8434
- *
8435
- * What a transition's own per-frame writes go through: they are
8436
- * already the animation towards the target, so re-entering the
8437
- * transition check would have each frame start an animation towards
8438
- * the value it had just produced. Everything below this — the
8439
- * override cascade, the equality check, the dirty marking — is
8440
- * unchanged, so an animated value is overridable by a modifier
8441
- * exactly as a bound one is.
8775
+ * Writes the element's value for a property: onto the node, or into
8776
+ * the cascade under a modifier writing over it. The same as
8777
+ * `updateNodeProperty`, kept by its name for the callers that write
8778
+ * a value of the runtime's own, such as the root's pointer.
8442
8779
  */
8443
8780
  updateNodePropertyNow<T>(node: UiNode, property: string, value: T, dirtyFlags?: DirtyFlags): boolean;
8444
8781
  /**
@@ -8448,8 +8785,18 @@ declare class UiGraph {
8448
8785
  * Removing rather than writing a default is what lets a detaching
8449
8786
  * modifier restore inheritance: a node that never declared `color`
8450
8787
  * reads it from the environment again, as it did before.
8788
+ *
8789
+ * `snap` draws it at once, past any transition the node declares;
8790
+ * see `UiPropertyOverride.snap`.
8451
8791
  */
8452
- applyResolvedProperty(node: UiNode, property: NodeProperty, present: boolean, value: unknown, dirtyFlags: DirtyFlags): boolean;
8792
+ applyResolvedProperty(node: UiNode, property: NodeProperty, present: boolean, value: unknown, dirtyFlags: DirtyFlags, snap?: boolean): boolean;
8793
+ /**
8794
+ * Writes what a transition's frame drew, without consulting the
8795
+ * transition again: the frame is already the animation towards the
8796
+ * target, and re-entering it would start an animation towards the
8797
+ * value it had just produced.
8798
+ */
8799
+ applyAnimatedValue(node: UiNode, property: NodeProperty, value: unknown, dirtyFlags: DirtyFlags): boolean;
8453
8800
  /**
8454
8801
  * Adds the environment flag to a write of `color` or of a text
8455
8802
  * style field, which a node provides to its subtree as well as
@@ -9761,6 +10108,10 @@ declare const UiEnvironmentKeys: {
9761
10108
  * with two windows provides one per window.
9762
10109
  */
9763
10110
  readonly insets: UiEnvironmentKey<UiInsetSource>;
10111
+ /** The durations, easings and springs a name resolves to under a node; see `UiMotion`. */
10112
+ readonly motion: UiEnvironmentKey<UiMotion>;
10113
+ /** The clock the animations under a node run on; null is real time. See `UiClock`. */
10114
+ readonly clock: UiEnvironmentKey<UiClock | null>;
9764
10115
  };
9765
10116
  //#endregion
9766
10117
  //#region src/environment/UiEnvironmentProvider.d.ts
@@ -10549,16 +10900,17 @@ declare class NodeTransitions implements UiNodeTransitions {
10549
10900
  write(property: NodeProperty, value: unknown, flags: DirtyFlags): boolean;
10550
10901
  /** Cancels everything, for a node leaving the tree or dropping the prop. */
10551
10902
  release(): void;
10903
+ cancel(property: NodeProperty): void;
10904
+ get declared(): ReadonlyMap<NodeProperty, UiTransitionSpec>;
10552
10905
  private stopProperty;
10553
10906
  /**
10554
10907
  * The cell one property animates through, kept for the life of the
10555
10908
  * node: the driver keys its running set by cell identity, so a fresh
10556
10909
  * adapter per write would leave the previous animation running.
10557
10910
  *
10558
- * Writing goes through `updateNodePropertyNow`, which is the path a
10559
- * plain write takes minus this class — so a modifier's override still
10560
- * sits on top of an animated value, exactly as it sits on top of a
10561
- * bound one.
10911
+ * It writes what is drawn (`applyAnimatedValue`): the target already
10912
+ * is the value the element and any modifier over it settled on, so a
10913
+ * frame of the way there goes onto the node as it is.
10562
10914
  */
10563
10915
  private cellFor;
10564
10916
  private startAnimation;
@@ -11058,11 +11410,27 @@ declare class UiWheelController {
11058
11410
  * wheel of a burst land correctly even though the first could not.
11059
11411
  */
11060
11412
  lastWheelTarget: UiNode | null;
11413
+ /** Where the last wheel event was, for the latch; see `latched`. */
11414
+ private lastX;
11415
+ private lastY;
11061
11416
  /**
11062
11417
  * The container the wheel last scrolled, for a frame's report of where
11063
11418
  * scrolling put it. Null until the wheel has scrolled something.
11064
11419
  */
11065
11420
  lastScrolled: UiNode | null;
11421
+ /**
11422
+ * The node the last wheel event landed on, while this one belongs to
11423
+ * the same gesture: close behind it, with the pointer where it was.
11424
+ * Null when it does not, and the point is tested afresh.
11425
+ *
11426
+ * A browser does the same, latching a wheel gesture to the element its
11427
+ * first step landed on, and for the reason it matters here: testing the
11428
+ * point asks for bounds that the gesture's own last step may have made
11429
+ * out of date. A pinch over a design tool's board scales every name on
11430
+ * it, and each step of it filled in the bounds of 1,800 names again,
11431
+ * 4 ms, to find what the step before had found.
11432
+ */
11433
+ private latched;
11066
11434
  wheel(x: number, y: number, deltaX: number, deltaY: number, modifiers?: UiKeyModifiers, deltaMode?: UiWheelDeltaMode, wheelDeltaY?: number,
11067
11435
  /**
11068
11436
  * When the event happened, on this controller's clock. Pacing
@@ -12460,6 +12828,15 @@ declare class UiEditingController {
12460
12828
  * Null when the node is not an editable, or has not been laid out.
12461
12829
  */
12462
12830
  caretRectOf(node: UiNode, offset?: number): CaretRect | null;
12831
+ /**
12832
+ * The caret position nearest a point, given as a pointer event gives
12833
+ * it: where a press there would put the caret. For an application
12834
+ * that opens a field over text the person pointed at, to start the
12835
+ * caret where they pointed (`EditingService.select` puts it there).
12836
+ *
12837
+ * Null when the node is not an editable, or has not been laid out.
12838
+ */
12839
+ offsetNear(node: UiNode, x: number, y: number): number | null;
12463
12840
  /** Where a field, or a part of it in its own coordinates, is drawn; see `EditingHost.screenBox`. */
12464
12841
  private drawnBox;
12465
12842
  private layoutOf;
@@ -12956,6 +13333,10 @@ declare class UiHostFrameClock implements UiFrameClock {
12956
13333
  /** This thread's own `requestAnimationFrame`, or null where there is none. */
12957
13334
  private local;
12958
13335
  private localHandle;
13336
+ /** This thread's own refreshes so far, which `watchLocal` counts on. */
13337
+ private localRefreshes;
13338
+ /** The timer standing by for a refresh that does not come; see `watchLocal`. */
13339
+ private localWatch;
12959
13340
  /** Whether the page is hidden, when this thread's refreshes do not come. */
12960
13341
  private hidden;
12961
13342
  private readonly timeOrigin;
@@ -12993,6 +13374,29 @@ declare class UiHostFrameClock implements UiFrameClock {
12993
13374
  /** Whether this clock is driving itself from the compositor. */
12994
13375
  get isLocal(): boolean;
12995
13376
  requestFrame(): void;
13377
+ /**
13378
+ * Draws a wanted frame on a timer when this thread's own refreshes
13379
+ * have stopped coming on a page that says it is shown.
13380
+ *
13381
+ * They do stop. A window that is shown but not composited (a browser
13382
+ * pane hidden inside a desktop app, a window behind others on some
13383
+ * systems) refreshes a page once a second or not at all, while
13384
+ * `document.visibilityState` stays `visible`, so `setHidden` never
13385
+ * hears of it; and a worker whose canvas the compositor is behind on
13386
+ * is not given another refresh until it catches up. A frame asked for
13387
+ * then waited for a refresh that did not come, and with no timer on
13388
+ * this path, nothing else drew it: the application stopped answering,
13389
+ * with its last frame on screen.
13390
+ *
13391
+ * One timer, a quarter of a second long, armed while frames are wanted
13392
+ * and never more than one: it draws a frame only when not one refresh
13393
+ * came in the whole of it. A compositor that is answering, however
13394
+ * slowly the frames themselves run, always beats it, so it never
13395
+ * stands in for a refresh that is coming (see the spec about a blocked
13396
+ * host thread); it costs four wake-ups a second while something
13397
+ * animates, against one per refresh for a per-frame watch.
13398
+ */
13399
+ private watchLocal;
12996
13400
  /**
12997
13401
  * The page was hidden or shown. While it is hidden this thread's own
12998
13402
  * refreshes stop, so a frame asked for is paced by the timer, as a
@@ -13155,6 +13559,22 @@ declare class UiHostFrameClock implements UiFrameClock {
13155
13559
  private cadenceMs;
13156
13560
  /** The interval to pace at while the host is absent: the display's, if it is known. */
13157
13561
  private selfPaceMs;
13562
+ /**
13563
+ * Draws the pending frame now, on this clock's timeline, and nothing
13564
+ * when none is pending (`FrameService.flush`): for a tool that changed
13565
+ * the screen and must read it drawn, in a window that may be sent no
13566
+ * refreshes. It is not a refresh, so it teaches the clock nothing about
13567
+ * the display. Handed to `tick` as one, with this thread's time, which
13568
+ * is not the host's, it took the beat backwards; see `tick`.
13569
+ */
13570
+ flush(): void;
13571
+ /**
13572
+ * Draws the pending frame now, without waiting for a refresh: on the
13573
+ * display's beat when frames are timed on it, so its time is the next
13574
+ * refresh's and never one already drawn for; else at this moment, on
13575
+ * the timeline the clock's frames are on.
13576
+ */
13577
+ private drawNow;
13158
13578
  cancelFrame(): void;
13159
13579
  private clearFallback;
13160
13580
  private deliver;
@@ -13491,6 +13911,13 @@ declare class LayoutEngine {
13491
13911
  private readonly absoluteBlocks;
13492
13912
  /** A positioned node, or the root, took a new box this pass; see `absoluteBlocks`. */
13493
13913
  private blockResized;
13914
+ /**
13915
+ * Which positioned nodes took a new box this pass, so only the nodes
13916
+ * placed against one of them are placed again. Checking every one
13917
+ * walked up from each to its block: a design tool's board has ten
13918
+ * thousand of them, and one comment pin's label growing checked all.
13919
+ */
13920
+ private readonly resizedBlocks;
13494
13921
  /**
13495
13922
  * The nodes asking for `lift`, in the order they asked.
13496
13923
  *
@@ -13543,8 +13970,21 @@ declare class LayoutEngine {
13543
13970
  * from the first move to the last.
13544
13971
  */
13545
13972
  private layoutVersion;
13546
- /** The version `subtreeBounds` on the records was filled from. */
13547
- private boundsVersion;
13973
+ /**
13974
+ * Where the subtree bounds are out of date: everything, after a full
13975
+ * pass; otherwise the nodes whose box or children or transform
13976
+ * changed (`boundsMoved`) and the subtrees moved whole
13977
+ * (`boundsShifted`), which `refreshSubtreeBounds` fills in again with
13978
+ * their ancestors and nothing else.
13979
+ */
13980
+ private boundsWhole;
13981
+ private readonly boundsMoved;
13982
+ private readonly boundsShifted;
13983
+ /**
13984
+ * How many transforms changed: a transform moves no box, so it leaves
13985
+ * `layoutVersion` alone, and `geometryVersion` adds these to it.
13986
+ */
13987
+ private transformMoves;
13548
13988
  constructor(textMeasurer?: TextMeasurer);
13549
13989
  recordFor(node: UiNode): LayoutRecord | undefined;
13550
13990
  /**
@@ -14096,6 +14536,8 @@ declare class LayoutEngine {
14096
14536
  * into the same visible space before comparing them.
14097
14537
  */
14098
14538
  private placeAnchored;
14539
+ /** Lays a node exactly over a box, at its size, whatever size it asks for: `placement: 'over'`. */
14540
+ private placeOver;
14099
14541
  /**
14100
14542
  * Places a measured node beside a box — an anchor's, or a point's of
14101
14543
  * no size — flipping to the opposite side when the named one would
@@ -14173,6 +14615,8 @@ declare class LayoutEngine {
14173
14615
  * chain the renderer composes on the way down, walked up; a turned box
14174
14616
  * is the box its corners span.
14175
14617
  */
14618
+ /** How many changed nodes are refilled one by one before the whole tree is; see `WHOLE_BOUNDS_REFILL`. */
14619
+ private wholeBoundsRefill;
14176
14620
  private projectBox;
14177
14621
  /**
14178
14622
  * A canvas box brought into the space an absolute child's record is
@@ -14189,6 +14633,8 @@ declare class LayoutEngine {
14189
14633
  * positioned ancestor's, else the layout root's.
14190
14634
  */
14191
14635
  private containingBlockOf;
14636
+ /** The positioned ancestor, or the root, that an absolute node is placed against. */
14637
+ private containingBlockNodeOf;
14192
14638
  /**
14193
14639
  * Records the children's paint order when it differs from tree order,
14194
14640
  * so renderers and hit testing agree on who is on top: by zIndex, and
@@ -14567,8 +15013,28 @@ interface NotifiedLayout {
14567
15013
  declare class LayoutNotifier {
14568
15014
  private readonly listeners;
14569
15015
  private readonly last;
15016
+ /**
15017
+ * Listeners told about the node's place in the layout and its scroll
15018
+ * offset, and not about where it is drawn (`addFlow`).
15019
+ */
15020
+ private readonly flowListeners;
15021
+ private readonly flowLast;
14570
15022
  /** Registers a listener; the returned function removes it. */
14571
15023
  add(node: UiNode, listener: (box: LayoutBox) => void): () => void;
15024
+ /**
15025
+ * Registers a listener told when the node's laid-out box or its own
15026
+ * scroll offset changes, and not when a scroll or a transform above it
15027
+ * moves it on screen; the returned function removes it.
15028
+ *
15029
+ * Most listeners are this kind: a size container, a breakpoint, a
15030
+ * layout animation, a scroll position read only the node's own box
15031
+ * and offset. Told of every move on screen, each of them was asked
15032
+ * on every step of a pan over a design tool's board, 2,600 of them,
15033
+ * to find nothing it reads had changed; and each answer was where
15034
+ * the node was drawn, worked out through every ancestor. Its place in
15035
+ * the layout is its record, read at once.
15036
+ */
15037
+ addFlow(node: UiNode, listener: (box: LayoutBox) => void): () => void;
14572
15038
  get size(): number;
14573
15039
  /** Whether anything is listening, so a frame can skip the walk. */
14574
15040
  isEmpty(): boolean;
@@ -14576,7 +15042,7 @@ declare class LayoutNotifier {
14576
15042
  * Calls the listeners of every watched node whose box or scroll
14577
15043
  * offset differs from what it was last told about.
14578
15044
  */
14579
- notify(read: (node: UiNode) => NotifiedLayout): void;
15045
+ notify(read: (node: UiNode) => NotifiedLayout, readFlow?: (node: UiNode) => NotifiedLayout): void;
14580
15046
  /** Drops a removed node's listeners, so nothing keeps it alive. */
14581
15047
  handleNodeRemoved(node: UiNode): void;
14582
15048
  }
@@ -14901,6 +15367,18 @@ declare function bundle(...parts: readonly (UiModifier | UiModifierBundle)[]): U
14901
15367
  declare const noModifiers: UiModifierBundle;
14902
15368
  //#endregion
14903
15369
  //#region src/modifiers/interaction.d.ts
15370
+ /** A pointer or keyboard state a tool draws an element in without the pointer or the keyboard. */
15371
+ type UiShownAs = 'hovered' | 'pressed' | 'focused';
15372
+ /**
15373
+ * Draws what is under a node as though it were hovered, pressed or
15374
+ * focused: every `interactive` modifier there shows its hover or press
15375
+ * look, and every `focusRing` its ring. What a design tool draws a
15376
+ * component's pointer states with, beside its other states, where no
15377
+ * pointer is over it. Read as each modifier attaches, so a node drawn
15378
+ * under it starts so and stays so; the pointer still adds its own.
15379
+ * Pressed is hovered too, as a press under a pointer is.
15380
+ */
15381
+ declare const ShownAsKey: UiEnvironmentKey<UiShownAs | null>;
14904
15382
  /**
14905
15383
  * Pointer state, as a property anything can read, and the property
14906
15384
  * writes that follow from it.
@@ -15642,10 +16120,10 @@ interface SvgXmlElement {
15642
16120
  *
15643
16121
  * What a design tool exports is what is read: shapes and paths, groups
15644
16122
  * and `<use>`, transforms, solid fills and strokes with their
15645
- * opacities, linear and radial gradients, clip paths, a `<style>` of
15646
- * simple selectors, and nested `<svg>`. What is not drawn yet is named
15647
- * in `unsupported`, so a file that leans on it can say so rather than
15648
- * look subtly wrong.
16123
+ * opacities, linear and radial gradients, clip paths, masks, a filter
16124
+ * that is one drop shadow, a `<style>` of simple selectors, and nested
16125
+ * `<svg>`. What is not drawn yet is named in `unsupported`, so a file
16126
+ * that leans on it can say so rather than look subtly wrong.
15649
16127
  */
15650
16128
  interface SvgDocument {
15651
16129
  /** The `<svg>` element. */
@@ -15655,11 +16133,16 @@ interface SvgDocument {
15655
16133
  readonly height: number;
15656
16134
  /** The region of the drawing's own coordinates that fills that size. */
15657
16135
  readonly viewBox: SvgRect;
15658
- /** Every element with an `id`, for `<use>`, gradients and clip paths. */
16136
+ /** Every element with an `id`, for `<use>`, gradients, clip paths, masks and filters. */
15659
16137
  readonly ids: ReadonlyMap<string, SvgXmlElement>;
15660
16138
  /** The rules of its `<style>` elements, in document order. */
15661
16139
  readonly rules: readonly SvgStyleRule[];
15662
- /** What the file uses that is not drawn: `text`, `filter`, `mask` and so on, once each. */
16140
+ /**
16141
+ * What the file uses that is not drawn: `text`, `image`, `marker` and
16142
+ * so on, once each. `filter` is a filter that is anything but one
16143
+ * `<feDropShadow>`, or a `filter` that names something else; `mask`
16144
+ * is a `mask` that names something other than a `<mask>`.
16145
+ */
15663
16146
  readonly unsupported: readonly string[];
15664
16147
  }
15665
16148
  interface SvgRect {
@@ -17974,6 +18457,17 @@ type PaintOp = {
17974
18457
  } | {
17975
18458
  readonly op: 'blur';
17976
18459
  readonly radius: number;
18460
+ } | {
18461
+ readonly op: 'beginMaskedLayer';
18462
+ readonly x: number;
18463
+ readonly y: number;
18464
+ readonly width: number;
18465
+ readonly height: number;
18466
+ } | {
18467
+ readonly op: 'layerMask';
18468
+ readonly mode: PaintMaskMode;
18469
+ } | {
18470
+ readonly op: 'endMaskedLayer';
17977
18471
  } | {
17978
18472
  readonly op: 'fill';
17979
18473
  readonly rule: PaintFillRule;
@@ -18057,6 +18551,9 @@ declare class PaintRecorder implements PaintSurface {
18057
18551
  lineDash(segments: readonly number[], offset?: number): void;
18058
18552
  alpha(value: number): void;
18059
18553
  blur(radius: number): void;
18554
+ beginMaskedLayer(x: number, y: number, width: number, height: number): void;
18555
+ layerMask(mode?: PaintMaskMode): void;
18556
+ endMaskedLayer(): void;
18060
18557
  fill(rule?: PaintFillRule): void;
18061
18558
  stroke(): void;
18062
18559
  clip(rule?: PaintFillRule): void;
@@ -18146,12 +18643,74 @@ interface PaintContext2D {
18146
18643
  * rather than none.
18147
18644
  */
18148
18645
  filter?: string;
18646
+ /**
18647
+ * What a masked layer needs of a context, all optional for the reason
18648
+ * `filter` is: a host or a double without them draws the layer's
18649
+ * content unmasked. The context drawn into reads and sets its whole
18650
+ * transform, to place a layer in device pixels; a layer's own canvas
18651
+ * also composites and reads its pixels back.
18652
+ */
18653
+ getTransform?(): PaintMatrix;
18654
+ setTransform?(a: number, b: number, c: number, d: number, e: number, f: number): void;
18655
+ globalCompositeOperation?: string;
18656
+ getImageData?(x: number, y: number, width: number, height: number): PaintPixels;
18657
+ putImageData?(pixels: PaintPixels, x: number, y: number): void;
18149
18658
  fillStyle: string | PaintGradient;
18150
18659
  strokeStyle: string | PaintGradient;
18151
18660
  font: string;
18152
18661
  textAlign: 'left' | 'center' | 'right';
18153
18662
  textBaseline: 'alphabetic';
18154
18663
  }
18664
+ /** An affine matrix to device pixels, `a b c d e f`, as `getTransform` reports one. */
18665
+ interface PaintMatrix {
18666
+ readonly a: number;
18667
+ readonly b: number;
18668
+ readonly c: number;
18669
+ readonly d: number;
18670
+ readonly e: number;
18671
+ readonly f: number;
18672
+ }
18673
+ /** A context's pixels, unpremultiplied RGBA, as `getImageData` reads them. */
18674
+ interface PaintPixels {
18675
+ readonly width: number;
18676
+ readonly height: number;
18677
+ readonly data: Uint8ClampedArray;
18678
+ }
18679
+ /**
18680
+ * The canvas a picture is drawn into, and the bitmap it becomes.
18681
+ *
18682
+ * `IconCanvas`'s sibling, and injectable for the same two reasons: the
18683
+ * suite has no `OffscreenCanvas`, and a host that lacks one should
18684
+ * fail by drawing nothing rather than by throwing in a frame.
18685
+ *
18686
+ * `take()` is synchronous, which is the whole reason the default is
18687
+ * `transferToImageBitmap` and not `createImageBitmap`. An asynchronous
18688
+ * raster would put the picture a frame behind its inputs and would
18689
+ * need a way to ask for another frame from inside a renderer, which no
18690
+ * renderer has and none should.
18691
+ */
18692
+ interface PaintCanvas {
18693
+ context(): PaintContext2D | null;
18694
+ take(): UiImage;
18695
+ }
18696
+ type PaintCanvasFactory = (width: number, height: number) => PaintCanvas | null;
18697
+ /**
18698
+ * Where a target's masked layers come from: a canvas per layer, and the
18699
+ * rectangle of the context drawn into, in its device pixels, that a
18700
+ * layer is cut to. Without one a target draws a layer's content
18701
+ * unmasked.
18702
+ */
18703
+ interface PaintLayers {
18704
+ readonly create: PaintCanvasFactory;
18705
+ readonly bounds: PaintDeviceRect;
18706
+ }
18707
+ /** A rectangle in device pixels. */
18708
+ interface PaintDeviceRect {
18709
+ readonly x: number;
18710
+ readonly y: number;
18711
+ readonly width: number;
18712
+ readonly height: number;
18713
+ }
18155
18714
  /** The part of a canvas gradient a picture uses. */
18156
18715
  interface PaintGradient {
18157
18716
  addColorStop(offset: number, color: string): void;
@@ -18180,8 +18739,8 @@ interface PaintResolver {
18180
18739
  * picture's cache key.
18181
18740
  */
18182
18741
  declare class PaintTarget implements PaintSurface {
18183
- private readonly ctx;
18184
18742
  private readonly resolver;
18743
+ private readonly layerSource?;
18185
18744
  /**
18186
18745
  * The pending blur radius per save level.
18187
18746
  *
@@ -18191,7 +18750,17 @@ declare class PaintTarget implements PaintSurface {
18191
18750
  */
18192
18751
  private readonly blurStack;
18193
18752
  private blurRadius;
18194
- constructor(ctx: PaintContext2D, resolver: PaintResolver);
18753
+ /** The context drawn into now: the one given, or a layer's while its content or mask is drawn. */
18754
+ private ctx;
18755
+ /** The masked layers begun and not yet ended, innermost last. */
18756
+ private readonly layers;
18757
+ /**
18758
+ * How many layers are drawing nothing at the moment: one cut to
18759
+ * nothing, or a mask a host could not keep apart. Fills, strokes,
18760
+ * text and images are dropped while it is above zero.
18761
+ */
18762
+ private suppressed;
18763
+ constructor(ctx: PaintContext2D, resolver: PaintResolver, layerSource?: PaintLayers | undefined);
18195
18764
  save(): void;
18196
18765
  restore(): void;
18197
18766
  translate(x: number, y: number): void;
@@ -18223,7 +18792,25 @@ declare class PaintTarget implements PaintSurface {
18223
18792
  miterLimit(limit: number): void;
18224
18793
  lineDash(segments: readonly number[], offset?: number): void;
18225
18794
  alpha(value: number): void;
18795
+ /**
18796
+ * A canvas's filter is measured in device pixels whatever the
18797
+ * transform, so the radius is scaled by the transform's here, where
18798
+ * there is one to read.
18799
+ */
18226
18800
  blur(radius: number): void;
18801
+ /**
18802
+ * The content is drawn into a canvas of its own, the size of the
18803
+ * layer's rectangle in device pixels and cut to the part of the
18804
+ * context drawn into that it covers, under the same transform less
18805
+ * the canvas's corner. A fresh canvas per layer, sized once: drawing
18806
+ * into a canvas just blended from makes Chrome copy it first (see
18807
+ * `GroupOpacity.ts`).
18808
+ */
18809
+ beginMaskedLayer(x: number, y: number, width: number, height: number): void;
18810
+ layerMask(mode?: PaintMaskMode): void;
18811
+ endMaskedLayer(): void;
18812
+ /** A canvas for a layer's content or mask, placed and cut as the layer is; null where none can be had. */
18813
+ private openLayerCanvas;
18227
18814
  fill(rule?: PaintFillRule): void;
18228
18815
  stroke(): void;
18229
18816
  clip(rule?: PaintFillRule): void;
@@ -18232,24 +18819,6 @@ declare class PaintTarget implements PaintSurface {
18232
18819
  }
18233
18820
  //#endregion
18234
18821
  //#region src/rendering/PaintPicture.d.ts
18235
- /**
18236
- * The canvas a picture is drawn into, and the bitmap it becomes.
18237
- *
18238
- * `IconCanvas`'s sibling, and injectable for the same two reasons: the
18239
- * suite has no `OffscreenCanvas`, and a host that lacks one should
18240
- * fail by drawing nothing rather than by throwing in a frame.
18241
- *
18242
- * `take()` is synchronous, which is the whole reason the default is
18243
- * `transferToImageBitmap` and not `createImageBitmap`. An asynchronous
18244
- * raster would put the picture a frame behind its inputs and would
18245
- * need a way to ask for another frame from inside a renderer, which no
18246
- * renderer has and none should.
18247
- */
18248
- interface PaintCanvas {
18249
- context(): PaintContext2D | null;
18250
- take(): UiImage;
18251
- }
18252
- type PaintCanvasFactory = (width: number, height: number) => PaintCanvas | null;
18253
18822
  /** What a painted frame did, for `PaintPicture.budget.spec.ts`. */
18254
18823
  interface PaintStats {
18255
18824
  /** How many times a painter's `draw` ran. */
@@ -20422,5 +20991,5 @@ interface UiSemanticsAction {
20422
20991
  readonly value?: string;
20423
20992
  }
20424
20993
  //#endregion
20425
- export { Mp4AudioTrack as $, EditingControllerOptions as $a, ResponsiveProps as $c, darkTheme as $d, UiTextLink as $f, createTween as $g, borderRadiusCorners as $h, parseCrossAxisAlignment as $i, UiPropertyValueOf as $l, slideFrom as $m, BreakpointArgs as $n, HitTester as $o, UiModifierTeardown as $p, pinchable as $r, drawText as $s, registerFontStack as $t, hasVisualState as $u, offsetAtPointIn as A, linear as A_, UiHostFrameClock as Aa, selectableTextOf as Ac, FrLength as Ad, UiBoxShadow as Af, TextWrap as Ag, UiContentDistribution as Ah, noModifiers as Ai, EditableTextProps as Al, UiPointerEvent as Am, UiRenderer as An, UiScrollability as Ao, containerBands as Ap, IconRasterizerOptions as Ar, EDITOR_PROP as As, createTextCache as At, LazyGridOptions as Au, markNow as B, isSubtreeInert as Ba, offsetAtPoint as Bc, isPercentLength as Bd, UiTypography as Bf, UiTransitionValue as Bg, UiPosition as Bh, propertyIsInherited as Bi, PositionProps as Bl, MOTION_REST as Bm, createCanvasSurface as Bn, resetTransitionWarnings as Bo, edgeField as Bp, DefaultImageResolver as Br, EditingPlatform as Bs, isWebGPUAvailable as Bt, VirtualViewport as Bu, hasTextLinks as C, normalizeColor as C_, labelNode as Ca, normalizeVerticalAlign as Cc, UiRadialGradient as Cd, relativeLuminance as Cf, TextLineRun as Cg, decorationRect as Ch, hoverable as Ci, UiGraphBuilder as Cl, UiGestureEvent as Cm, CanvasTextMeasurer as Cn, KeyboardControllerOptions as Co, UiInsets as Cp, ImageSources as Cr, findMatchesIn as Cs, RenderList as Ct, SheetSourceArgs as Cu, setLinkHover as D, UiEasing as D_, UiFrameClock as Da, TextRange as Dc, radialGradient as Dd, defaultShadows as Df, TextRunMeasurer as Dg, UiAlignment as Dh, pressable as Di, ColumnProps as Dl, UiPasteEvent as Dm, LayerCanvasFactory as Dn, ScrollContainerState as Do, UiContainerSize as Dp, IconCanvas as Dr, EnvironmentNotifier as Ds, TEXTURED_STRIDE_FLOATS as Dt, VIRTUAL_SHEET_PROP as Du, linkRunAtPointIn as E, rgba as E_, UiAnimationFrameClock as Ea, TEXT_SELECTION_PROP as Ec, linearGradient as Ed, UiShadows as Ef, TextOverflow as Eg, UI_SUBGRID_AXES as Eh, measureFlow as Ei, ButtonProps as El, UiKeyboardEvent as Em, traceRoundedRect as En, UiPointerController as Eo, observeViewportInsets as Ep, mediaLoadsInFlight as Er, UiEnvironmentKeys as Es, TEXTURED_STRIDE_BYTES as Et, UiVirtualSheetOptions as Eu, UiFrameCallback as F, isNodeFocusable as Fa, RunMeasure as Fc, auto as Fd, boxShadowRadius as Ff, findEnvironmentKey as Fg, UiGridAutoFlow as Fh, findPropertyDefinition as Fi, GridProps as Fl, UiWheelEvent as Fm, OverlayShape as Fn, UiGestureRecognizer as Fo, UiEditingGroup as Fp, SvgResolver as Fr, isMultiline as Fs, GlyphSlot as Ft, VIRTUAL_INDEX_PROP as Fu, VttTrack as G, PlatformEventTarget as Ga, lineEndAt as Gc, UiPropertyDefinition as Gd, typographyEqual as Gf, AnimatedCell as Gg, UiTextOverflowValue as Gh, GridPlacement as Gi, StackProps as Gl, ResolvedMotionState as Gm, resolveString as Gn, writeOverrideProperty as Go, UiModifierSet as Gp, ContextMenuOptions as Gr, CanvasTextStyle as Gs, WebGPURenderer as Gt, MAX_MEASURES_PER_CHILD as Gu, performanceMarksEnabled as H, resolveCursor as Ha, offsetForVerticalMove as Hc, percent as Hd, UiTypographyRole as Hf, normalizeTransition as Hg, UiSubgridAxis as Hh, propertyValuesEqualByName as Hi, Reactive as Hl, MotionState as Hm, resolveNumber as Hn, overrideSources as Ho, UiModifierEnvironment as Hp, ImageResolver as Hr, detectEditingPlatform as Hs, CapturedFrame as Ht, UiVideoSurface as Hu, UiScheduler as I, isNodeHitTestable as Ia, caretRectFor as Ic, fr as Id, boxShadowReach as If, UiNodeType as Ig, UiObjectFit as Ih, getPropertyNames as Ii, IdentityProps as Il, noKeyModifiers as Im, drawOverlayShapes as In, PinchRecognizerOptions as Io, UiGroupEdit as Ip, isSvgSource as Ir, isReadOnly as Is, GlyphUpload as It, VIRTUAL_LEAD_PROP as Iu, ByteSource as J, capturePointer as Ja, nextWordEnd as Jc, TOUCH_TARGET as Jd, UiFontStyle as Jf, UiReducedMotionPolicy as Jg, UiVerticalAlign as Jh, sizeGridTracks as Ji, TypographyProps as Jl, pop as Jm, sameArgs as Jn, SelectionControllerOptions as Jo, UiModifier as Jp, contextMenu as Jr, TextLinePlacement as Js, WebGPUSurface as Jt, UiLayoutProtocol as Ju, cueAt as K, PlatformSurface as Ka, lineStartAt as Kc, defineProperty as Kd, UiFontKerning as Kf, UiAnimation as Kg, UiTextWrapValue as Kh, GridTrack as Ki, TextContentProps as Kl, fade as Km, ThemeTokenTarget as Kn, FindHost as Ko, UiUnknownModifierPropertyError as Kp, ShortcutOptions as Kr, PlacedTextRun as Ks, WebGPURendererOptions as Kt, UiLayoutChild as Ku, UiSchedulerOptions as L, isNodeInert as La, lineIndexAtY as Lc, isAutoLength as Ld, boxShadowValuesEqual as Lf, DirtyFlags as Lg, UiOverflow as Lh, inheritedPropertyFlags as Li, InteractionProps as Ll, wheelDeltaYOf as Lm, labelOrigin as Ln, UiPinchRecognizer as Lo, UiTextPosition as Lp, SvgDocument as Lr, nextCaretToggle as Ls, WebGPUGlyphAtlas as Lt, VIRTUAL_WINDOW_PROP as Lu, paragraphGeometryFrom as M, UiManualFrameClock as Ma, setSelectionRange as Mc, PercentLength as Md, UiShadowName as Mf, UiEnvironment as Mg, UiDirection as Mh, accumulatedOffsetTo as Mi, FlexContainerProps as Ml, UiSelectionChangeEvent as Mm, RenderChanges as Mn, isScrollContainer as Mo, UiTextInput as Mp, iconKey as Mr, editorFor as Ms, textRuns as Mt, LazyListOptions as Mu, selectionRectsIn as N, UiTimerFrameClock as Na, CaretRect as Nc, UiLength as Nd, boxShadow as Nf, UiEnvironmentKey as Ng, UiFlexWrap as Nh, contentOffset as Ni, FlexItemProps as Nl, UiTextChangeEvent as Nm, RenderContext as Nn, GestureInput as No, UiTextInputState as Np, DefaultSvgResolver as Nr, editorOf as Ns, GlyphShaper as Nt, LazySourceArgs as Nu, ParagraphGeometry as O, cubicBezier as O_, UiFrameClockFactory as Oa, clearSelectionRange as Oc, validateGradient as Od, shadowsEqual as Of, TextRunSpan as Og, UiBorderRadiusValue as Oh, UiModifierBundle as Oi, CommonProps as Ol, UiPinchEvent as Om, ScrollLayerStats as On, ScrollSink as Oo, UiContainerSizeSource as Op, IconContext as Or, CARET_BLINK_MS as Os, TextRunDraw as Ot, sheetSource as Ou, wordRangeIn as P, UiTimerFrameClockOptions as Pa, PlacedLine as Pc, UiTrackSize as Pd, boxShadowArraysEqual as Pf, createEnvironmentKey as Pg, UiFontWeight as Ph, closestPropertyName as Pi, GridItemProps as Pl, UiWheelDeltaMode as Pm, LABEL_PADDING_X as Pn, GestureRecognizerOptions as Po, textInputOf as Pp, DefaultSvgResolverOptions as Pr, isEditableNode as Ps, GLYPH_SUBPIXEL_PHASES as Pt, UiVirtualWindow as Pu, rangeSource as Q, touchActionFor as Qa, Responsive as Qc, UiTheme as Qd, UiTextDecoration as Qf, UiTweenOptions as Qg, borderRadius as Qh, parseAlignContent as Qi, UiPropertyName as Ql, slideDown as Qm, publishInset as Qn, HitTestResult as Qo, UiModifierHost as Qp, ZoomState as Qr, createCanvasTextStyle as Qs, fontStackFor as Qt, defaultVisualState as Qu, MARK_PREFIX as R, isNodeSelectable as Ra, lineIndexForOffset as Rc, isFrLength as Rd, boxShadowsEqual as Rf, AnimationDriver as Rg, UiPlacement as Rh, inheritedPropertyNames as Ri, PaintElementProps as Rl, DirtyNodeSet as Rm, CanvasHost as Rn, FocusNotifier as Ro, adjacentField as Rp, SvgRect as Rr, syncEditorValue as Rs, WebGPUTextureCache as Rt, VirtualItemMeasure as Ru, clearLinkHover as S, colorsEqual as S_, formatExplanation as Sa, normalizeTextAlign as Sc, UiLinearGradient as Sd, raiseContrast as Sf, TextLine as Sg, decorationColor as Sh, InteractiveOptions as Si, UiChildrenBinding as Sl, UiFocusEvent as Sm, LayoutInspectorOptions as Sn, shortcutKeyCaps as So, UiInsetSource as Sp, ImageSourceArgs as Sr, FindOptions as Ss, RenderCommand as St, SheetRowRenderer as Su, linkOf as T, rgb8 as T_, UiFrame as Ta, DEFAULT_LINE_HEIGHT_FACTOR as Tc, gradientsEqual as Td, densityFactors as Tf, TextMeasurer as Tg, paintsAfterChildren as Th, measure as Ti, BoxProps as Tl, UiKeyModifiers as Tm, Canvas2DRendererOptions as Tn, PointerControllerOptions as To, noInsets as Tp, imageSource as Tr, provideEnvironment as Ts, ScissorRect as Tt, UiVirtualSheet as Tu, setPerformanceMarks as U, CanvasPlatformSurface as Ua, selectionRects as Uc, repeat as Ud, defaultTypography as Uf, spring as Ug, UiTextAlign as Uh, GridContribution as Ui, RowProps as Ul, MotionStateInput as Um, resolveProperty as Un, resetOverrideWarnings as Uo, UiModifierFocus as Up, AnimateLayoutOptions as Ur, isPrintable as Us, DrawStats as Ut, isVideoSurface as Uu, measureSpan as V, pointerEventsOf as Va, offsetAtX as Vc, minmax as Vd, UiTypographyExtensions as Vf, assertTransitionMap as Vg, UiSelfAlignment as Vh, propertyNarrowers as Vi, PropsOf as Vl, MotionChannel as Vm, resolveBoolean as Vn, clearOverrideProperty as Vo, editingGroupOf as Vp, DefaultImageResolverOptions as Vr, commandForKey as Vs, WebGPUError as Vt, lazySource as Vu, VttCue as W, PlatformAdapterOptions as Wa, graphemeBoundaries as Wc, resolveLength as Wd, isTypographyRole as Wf, tween as Wg, UiTextDirection as Wh, GridItemRequest as Wi, ScrollViewProps as Wl, MotionTiming as Wm, resolvePropertyByName as Wn, writeDeclaredProperty as Wo, UiModifierLayout as Wp, animateLayout as Wr, EditableLayout as Ws, RenderHooks as Wt, videoFrameSize as Wu, RangeSourceOptions as X, pointerDeviceOf as Xa, previousWordStart as Xc, UiThemeTouch as Xd, UiResolvedTextSpan as Xf, UiSpringOptions as Xg, UiBorderRadius as Xh, CrossAxisAlignment as Xi, UiNodeRef as Xl, rotateFrom as Xm, PublishInsetArgs as Xn, UiSelectionController as Xo, defineModifier as Xp, shortcuts as Xr, applyCanvasTextStyle as Xs, bumpFontStack as Xt, UiVisualState as Xu, DEFAULT_BLOCK_SIZE as Y, isImeKey as Ya, previousGraphemeStart as Yc, UiPointer as Yd, UiFontVariant as Yf, UiSpring as Yg, validateSubgrid as Yh, AlignContent as Yi, UiEventProps as Yl, resolveMotionState as Ym, InsetPaddingArgs as Yn, SelectionHost as Yo, UiModifierKind as Yp, shortcut as Yr, TextRunRect as Ys, createWebGPUSurface as Yt, isLayoutProtocol as Yu, bufferSource as Z, prepareInputSurface as Za, wordRangeAt as Zc, withPointer as Zd, UiSpannedText as Zf, UiTween as Zg, UiBorderRadiuses as Zh, MainAxisAlignment as Zi, UiProperties as Zl, scaleFrom as Zm, insetPadding as Zn, HitTestLayoutReader as Zo, isUiModifier as Zp, PinchableOptions as Zr, buildFontString as Zs, clearFontStacks as Zt, UiVisualStateSet as Zu, buildSemanticsTree as _, UiBasicColors as __, RelayoutExplanation as _a, VerticalAlign as _c, ResolvedGradient as _d, withThemeExtension as _f, FixedMetricsOptions as _g, UiPropertyOverrides as _h, borderShapes as _i, BindingId as _l, UiListenerErrorReporter as _m, drawSvg as _n, UiShortcutRegistry as _o, scaleSpacing as _p, MotionArgs as _r, TEXT_MATCHES_PROP as _s, INSTANCE_STRIDE_FLOATS as _t, EditableTextModel as _u, diffSemantics as a, defaultMotion as a_, proportionalFontMetrics as aa, textRunDecorations as ac, PaintLineJoin as ad, UiUnits as af, UiShapeExtensions as ag, LayoutResult as ah, dropTarget as ai, Box as al, UiChild as am, PaintContext2D as an, EXTERNAL_FILES as ao, editableSpansOf as ap, scrollPosition as ar, SCROLLBAR_THICKNESS as as, Mp3Frame as at, UiOrientation as au, semanticsMemory as b, colorToRgba as b_, describeOverrides as ba, createPaintState as bc, UiGradientOffset as bd, contrastRatio as bf, ParagraphTextMeasurer as bg, DecorationShape as bh, focusRing as bi, UiEventBinding as bl, UiCompositionEvent as bm, InspectorOverlay as bn, formatShortcut as bo, UiInsetEdge as bp, sharedElement as br, setMatchRanges as bs, PrimitiveCommand as bt, SheetHeaderRenderer as bu, SemanticsMemory as c, interpolateNumber as c_, SCROLLBAR_FADE_MS as ca, DEFAULT_FONT_FAMILY as cc, PaintTextStyle as cd, unitsEqual as cf, defaultShapes as cg, TightenOptions as ch, DraggableOptions as ci, EditableText as cl, isComponentLikeElement as cm, PaintTarget as cn, UiDragState as co, resolvedSpansOf as cp, VideoState as cr, ScrollbarThumb as cs, readMp3Header as ct, UiSemanticStates as cu, SemanticsRewalk as d, UiTransform as d_, AxisExplanation as da, DEFAULT_TEXT_COLOR as dc, inputsEqual as dd, UiThemeExtensions as df, UiColors as dg, tightenConstraints as dh, clickOutside as di, Row as dl, isUiElement as dm, PaintOp as dn, UiDroppedFile as do, spansDifferOnlyInPaint as dp, DefaultVideoResolver as dr, scrollRange as ds, Affine as dt, normalizeStates as du, UiDurationToken as e_, parseMainAxisAlignment as ea, fillTextRects as ec, visualState as ed, lightTheme as ef, borderRadiusEqual as eg, slideUp as eh, AutoScrollOptions as ei, LazyColumn as el, FocusOptions as em, PaintCanvas as en, EditingHost as eo, UiTextMetrics as ep, SizeContainerArgs as er, UiHitTester as es, Mp4Sample as et, UiPropertyValues as eu, SemanticsSpan as f, UiTransforms as f_, CustomLayoutExplanation as fa, ObjectFit as fc, paintValuesEqual as fd, defineThemeExtension as ff, colorsEqualPalette as fg, NodeId as fh, autoFocus as fi, ScrollView as fl, UiPropValue as fm, PaintRecorder as fn, UiFileDropMessage as fo, textContentOf as fp, DefaultVideoResolverOptions as fr, scrollbarThumb as fs, CLIP_STRIDE_BYTES as ft, statesEqual as fu, buildSemanticsSubtree as g, transformsEqual as g_, OverrideSources as ga, TextAlign as gc, MAX_GRADIENT_STOPS as gd, themeExtensionsEqual as gf, CharacterCountTextMeasurer as gg, UiPropertyOverride as gh, FocusRingOptions as gi, UiDefinition as gl, UiInputDispatcher as gm, SvgFit as gn, UiShortcutBinding as go, defaultSpacing as gp, canDecodeVideo as gr, SubtreeBounds as gs, INSTANCE_STRIDE_BYTES as gt, EditUnit as gu, UiSemanticsRecord as h, transformIsIdentity as h_, LayoutStateExplanation as ha, PaintTextSpan as hc, GradientPaint as hd, themeExtension as hf, LayoutRecord as hg, UiNodeTransitions as hh, Decorations as hi, createElement as hl, UiEventListenerOptions as hm, SvgDrawOptions as hn, UiShortcut as ho, UiSpacing as hp, VideoResolver as hr, scrollsFromRight as hs, GlyphCommand as ht, CompositionRange as hu, UiSemanticsPatch as i, UiSpringToken as i_, layoutParagraph as ia, textRunBackgrounds as ic, PaintLineCap as id, UiLengths as if, uniformBorderRadius as ig, LayoutBox as ih, dragSource as ii, LazyRow as il, ComponentLikeElement as im, paintPictures as in, UiTouchScroller as io, defaultTextStyle as ip, ScrollPositionArgs as ir, SCROLLBAR_MIN_THUMB as is, Mp3Format as it, UiLiveRegion as iu, paragraphGeometry as j, steps as j_, UiHostFrameClockOptions as ja, selectionRangeOf as jc, MinMaxTrack as jd, UiBoxShadows as jf, spannedRunsFor as jg, UiCursor as jh, Transform as ji, EnvironmentProps as jl, UiPointerKind as jm, LayoutReader as jn, UiWheelController as jo, unknownContainerSize as jp, IconSpec as jr, caretVisibleAt as js, glyphCount as jt, LazyItemRenderer as ju, hasDrawnText as k, easings as k_, UiFrameTime as ka, selectableTextNodes as kc, AutoLength as kd, BOX_SHADOW_BLUR_REACH as kf, TextRunStyle as kg, UiColorValue as kh, bundle as ki, ContainerProps as kl, UiPointerDevice as km, RendererBackend as kn, UiScrollBehavior as ko, bandOf as kp, IconRasterizer as kr, CARET_WIDTH as ks, buildRenderList as kt, LazyAxis as ku, SemanticsPlacement as l, interpolateTransform as l_, SCROLLBAR_LINGER_MS as la, DEFAULT_FONT_SIZE as lc, UiPaint as ld, UiThemeExtension as lf, isShapeName as lg, clampSize as lh, draggable as li, Grid as ll, isObservable$1 as lm, tracePathData as ln, UiDropEffect as lo, spanAtOffset as lp, VideoTransport as lr, scrollBounds as ls, splitMp3Frames as lt, isUiRole as lu, UiSemanticsMap as m, transform as m_, LayoutExplanation as ma, PaintState as mc, UiImage as md, noThemeExtensions as mf, lightColors as mg, UiNode as mh, BordersOptions as mi, Text as ml, UiEventListener as mm, replayPaint as mn, ShortcutRegistryOptions as mo, textStylesEqual as mp, VideoPlayback as mr, scrollbarZoneAt as ms, CommandKind as mt, validateStates as mu, UiSemanticsBox as n, UiMotion as n_, parseFlexDirection as na, runCanvasStyleInto as nc, PaintBox as nd, withContrast as nf, borderRadiusValuesEqual as ng, UiSharedElements as nh, DropTargetOptions as ni, LazyGridProps as nl, UiFocusManager as nm, PaintPictureCache as nn, UiEditingController as no, UiTextSpan as np, sizeContainer as nr, SCROLLBAR_HOVER_ZONE as ns, demuxMp4Audio as nt, UI_SEMANTIC_STATES as nu, dropIndexShifts as o, UiInterpolator as o_, LayoutNotifier as oa, Canvas2DContext as oc, PaintSurface as od, defaultUnits as of, UiShapeName as og, LayoutStats as oh, reorderable as oi, Button as ol, UiElement as om, PaintGradient as on, UiDragPayload as oo, flattenTextSpans as op, VideoClock as or, ScrollBounds as os, Mp3Frames as ot, UiRole as ou, TEXT_RUN_ID_SEPARATOR as p, parseTransform as p_, Edges as pa, PaintBoxShadow as pc, pathValuesEqual as pd, hasThemeExtension as pf, darkColors as pg, NodeProperty as ph, BorderEdge as pi, Stack as pl, UiProps as pm, PaintRecording as pn, dragSessionFor as po, textSpansEqual as pp, RangeResponse as pr, scrollbarThumbs as ps, CLIP_STRIDE_FLOATS as pt, validateRole as pu, parseWebVtt as q, UiPlatformAdapter as qa, nextGraphemeEnd as qc, propertyValuesEqual as qd, UiFontStretch as qf, UiAnimationOptions as qg, UiThemeColorName as qh, placeGridItems as qi, TextProps as ql, isMotionRest as qm, themeTokens as qn, UiFindController as qo, assertModifierList as qp, ShortcutsOptions as qr, SpanPaint as qs, WebGPUCanvasHost as qt, UiLayoutContext as qu, UiSemanticsUpdate as r, UiSpringSpec as r_, ELLIPSIS as ra, runFontString as rc, PaintFillRule as rd, withDensity as rf, normalizeBorderRadius as rg, Constraints as rh, ReorderableOptions as ri, LazyListProps as rl, ComponentResolver as rm, PaintStats as rn, TouchScrollerOptions as ro, UiTextStyle as rp, ScrollOffset as rr, SCROLLBAR_INSET as rs, demuxMp4Video as rt, UiAutocomplete as ru, recordsEqual as s, interpolateColor as s_, LayoutEngine as sa, Canvas2DGradient as sc, PaintTextAlign as sd, lengths as sf, UiShapes as sg, Size as sh, DragOffset as si, Column as sl, UiSourceLocation as sm, PaintResolver as sn, UiDragSession as so, hiddenRangesOf as sp, VideoSourceArgs as sr, ScrollbarAxis as ss, Mp3Header as st, UiSemanticState as su, UiSemanticsAction as t, UiEasingToken as t_, FlexDirection as ta, layoutTextLines as tc, visualStatesEqual as td, themesEqual as tf, borderRadiusIsZero as tg, SharedClaim as th, DragSourceOptions as ti, LazyGrid as tl, FocusSource as tm, PaintCanvasFactory as tn, EditingState as to, UiTextRange as tp, breakpoint as tr, UiPoint as ts, Mp4VideoTrack as tt, UI_ROLES as tu, SemanticsReuse as u, interpolatorFor as u_, ScrollAdjustment as ua, DEFAULT_FONT_WEIGHT as uc, UiPath as ud, UiThemeExtensionOptions as uf, shapesEqual as ug, constraintsEqual as uh, ClickOutsideOptions as ui, Paint as ul, isUiChild as um, EMPTY_RECORDING as un, UiDropZone as uo, spannedTextOf as up, videoSource as ur, scrollLeaderOf as us, WebGPUGlyphPages as ut, isUiSemanticState as uu, rewalkSemantics as v, UiColor as v_, SizeDecision as va, colorToCss as vc, ResolvedGradientStop as vd, HighContrastOptions as vf, FontMetrics as vg, DecorationFill as vh, borders as vi, UiBinding as vl, MOUSE_POINTER as vm, svgPaint as vn, UiShortcutStep as vo, spacingEqual as vp, SharedElementArgs as vr, clearMatchRanges as vs, ImageCommand as vt, LazySheet as vu, linkHoverOf as w, parseColor as w_, withOverrideSource as wa, resolvePaintState as wc, gradientPaint as wd, UiDensity as wf, TextMeasureRequest as wg, hasDecorationPhase as wh, interactive as wi, BoxModelProps as wl, UiInputEvent as wm, Canvas2DRenderer as wn, UiKeyboardController as wo, insetsEqual as wp, iconSource as wr, UiEnvironmentProvider as ws, RenderTextCache as wt, SheetViewport as wu, textRunOfRecordId as x, colorValuesEqual as x_, formatConstraints as xa, isPaintVisible as xc, UiGradientStop as xd, highContrastColors as xf, SpannedRuns as xg, DecorationStroke as xh, BUTTON_INTERACTION as xi, ChildrenBindingId as xl, UiEventType as xm, LayoutInspector as xn, parseShortcut as xo, UiInsetRegistry as xp, IconSourceArgs as xr, FindMatch as xs, PrimitiveKind as xt, SheetRange as xu, semanticsInertAbove as y, colorToHex as y_, describeLength as ya, computeObjectFitRect as yc, UiGradient as yd, UiContrast as yf, ParagraphLayout as yg, DecorationRect as yh, decorated as yi, UiGraph as yl, UiBeforeInputEvent as ym, INSPECTOR_HEAT_MS as yn, describeShortcut as yo, spacingSteps as yp, motion as yr, matchRangesOf as ys, NO_CLIP_INDEX as yt, LazySheetProps as yu, markInstant as z, isNodeTabStop as za, lineLimit as zc, isMinMaxTrack as zd, shadowsOf as zf, UiTransitionSpec as zg, UiPointerEvents as zh, propertyEffects as zi, PaintProps as zl, MOTION_CHANNELS as zm, CanvasSurface as zn, NodeTransitions as zo, comparePositions as zp, parseSvg as zr, EditCommand as zs, initializeWebGPU as zt, VirtualUpdate as zu };
20426
- //# sourceMappingURL=index-B5r1ETCh.d.ts.map
20994
+ export { Mp4AudioTrack as $, linear as $_, UiPlatformAdapter as $a, nextGraphemeEnd as $c, UiPropertyDefinition as $d, isTypographyRole as $f, UiTransitionSpec as $g, validateSubgrid as $h, placeGridItems as $i, TextProps as $l, MotionTiming as $m, InsetPaddingArgs as $n, UiFindController as $o, UiModifierLayout as $p, shortcut as $r, SpanPaint as $s, registerFontStack as $t, UiLayoutChild as $u, offsetAtPointIn as A, interpolateNumber as A_, withOverrideSource as Aa, resolvePaintState as Ac, UiLinearGradient as Ad, raiseContrast as Af, TextOverflow as Ag, UI_SUBGRID_AXES as Ah, interactive as Ai, BoxModelProps as Al, UiEventType as Am, traceRoundedRect as An, UiKeyboardController as Ao, UiInsetRegistry as Ap, mediaLoadsInFlight as Ar, UiEnvironmentProvider as As, createTextCache as At, SheetSourceArgs as Au, markNow as B, UiColor as B_, UiTimerFrameClockOptions as Ba, PlacedLine as Bc, PercentLength as Bd, UiShadowName as Bf, Size as Bg, UiObjectFit as Bh, closestPropertyName as Bi, GridItemProps as Bl, UiPointerKind as Bm, drawOverlayShapes as Bn, GestureRecognizerOptions as Bo, unknownContainerSize as Bp, isSvgSource as Br, isEditableNode as Bs, isWebGPUAvailable as Bt, LazySourceArgs as Bu, hasTextLinks as C, defaultMotion as C_, RelayoutExplanation as Ca, VerticalAlign as Cc, GradientPaint as Cd, themeExtension as Cf, ParagraphLayout as Cg, DecorationRect as Ch, decorated as Ci, BindingId as Cl, UiEventListener as Cm, INSPECTOR_HEAT_MS as Cn, UiShortcutRegistry as Co, textStylesEqual as Cp, motion as Cr, TEXT_MATCHES_PROP as Cs, RenderList as Ct, EditUnit as Cu, setLinkHover as D, springIn as D_, formatConstraints as Da, isPaintVisible as Dc, UiGradient as Dd, UiContrast as Df, TextLineRun as Dg, decorationRect as Dh, ShownAsKey as Di, ChildrenBindingId as Dl, MOUSE_POINTER as Dm, CanvasTextMeasurer as Dn, parseShortcut as Do, spacingEqual as Dp, ImageSources as Dr, FindMatch as Ds, TEXTURED_STRIDE_FLOATS as Dt, SheetHeaderRenderer as Du, linkRunAtPointIn as E, easingIn as E_, describeOverrides as Ea, createPaintState as Ec, ResolvedGradientStop as Ed, HighContrastOptions as Ef, TextLine as Eg, decorationColor as Eh, InteractiveOptions as Ei, UiEventBinding as El, UiListenerErrorReporter as Em, LayoutInspectorOptions as En, formatShortcut as Eo, scaleSpacing as Ep, ImageSourceArgs as Er, setMatchRanges as Es, TEXTURED_STRIDE_BYTES as Et, LazySheetProps as Eu, UiFrameCallback as F, parseTransform as F_, UiFrameTime as Fa, selectableTextNodes as Fc, radialGradient as Fd, defaultShadows as Ff, spannedRunsFor as Fg, UiCursor as Fh, bundle as Fi, ContainerProps as Fl, UiKeyboardEvent as Fm, LayoutReader as Fn, UiScrollBehavior as Fo, observeViewportInsets as Fp, IconSpec as Fr, CARET_WIDTH as Fs, GlyphSlot as Ft, sheetSource as Fu, VttTrack as G, normalizeColor as G_, isNodeTabStop as Ga, lineLimit as Gc, isAutoLength as Gd, boxShadowValuesEqual as Gf, UiEnvironment as Gg, UiSelfAlignment as Gh, propertyEffects as Gi, PaintProps as Gl, noKeyModifiers as Gm, resolveBoolean as Gn, NodeTransitions as Go, UiGroupEdit as Gp, DefaultImageResolverOptions as Gr, EditCommand as Gs, WebGPURenderer as Gt, VirtualItemMeasure as Gu, performanceMarksEnabled as H, colorToRgba as H_, isNodeHitTestable as Ha, caretRectFor as Hc, UiTrackSize as Hd, boxShadowArraysEqual as Hf, clampSize as Hg, UiPlacement as Hh, getPropertyNames as Hi, IdentityProps as Hl, UiTextChangeEvent as Hm, CanvasHost as Hn, PinchRecognizerOptions as Ho, UiTextInputState as Hp, SvgRect as Hr, isReadOnly as Hs, CapturedFrame as Ht, VIRTUAL_INDEX_PROP as Hu, UiScheduler as I, transform as I_, UiHostFrameClock as Ia, selectableTextOf as Ic, validateGradient as Id, shadowsEqual as If, Constraints as Ig, UiDirection as Ih, noModifiers as Ii, EditableTextProps as Il, UiPasteEvent as Im, RenderChanges as In, UiScrollability as Io, UiContainerSize as Ip, iconKey as Ir, EDITOR_PROP as Is, GlyphUpload as It, LazyAxis as Iu, ByteSource as J, rgba as J_, resolveCursor as Ja, offsetForVerticalMove as Jc, isPercentLength as Jd, shadowsOf as Jf, createEnvironmentKey as Jg, UiTextDirection as Jh, propertyValuesEqualByName as Ji, Reactive as Jl, MOTION_CHANNELS as Jm, resolvePropertyByName as Jn, overrideSources as Jo, comparePositions as Jp, animateLayout as Jr, detectEditingPlatform as Js, WebGPUSurface as Jt, lazySource as Ju, cueAt as K, parseColor as K_, isSubtreeInert as Ka, offsetAtPoint as Kc, isFrLength as Kd, boxShadowsEqual as Kf, UiEnvironmentKey as Kg, UiSubgridAxis as Kh, propertyIsInherited as Ki, PositionProps as Kl, wheelDeltaYOf as Km, resolveNumber as Kn, resetTransitionWarnings as Ko, UiTextPosition as Kp, ImageResolver as Kr, EditingPlatform as Ks, WebGPURendererOptions as Kt, VirtualUpdate as Ku, UiSchedulerOptions as L, transformIsIdentity as L_, UiHostFrameClockOptions as La, selectionRangeOf as Lc, AutoLength as Ld, BOX_SHADOW_BLUR_REACH as Lf, LayoutBox as Lg, UiFlexWrap as Lh, Transform as Li, EnvironmentProps as Ll, UiPinchEvent as Lm, RenderContext as Ln, UiWheelController as Lo, UiContainerSizeSource as Lp, DefaultSvgResolver as Lr, caretVisibleAt as Ls, WebGPUGlyphAtlas as Lt, LazyGridOptions as Lu, paragraphGeometryFrom as M, interpolatorFor as M_, UiAnimationFrameClock as Ma, TEXT_SELECTION_PROP as Mc, gradientPaint as Md, UiDensity as Mf, TextRunSpan as Mg, UiBorderRadiusValue as Mh, measureFlow as Mi, ButtonProps as Ml, UiGestureEvent as Mm, ScrollLayerStats as Mn, UiPointerController as Mo, UiInsets as Mp, IconContext as Mr, UiEnvironmentKeys as Ms, textRuns as Mt, UiVirtualSheet as Mu, selectionRectsIn as N, UiTransform as N_, UiFrameClock as Na, TextRange as Nc, gradientsEqual as Nd, densityFactors as Nf, TextRunStyle as Ng, UiColorValue as Nh, pressable as Ni, ColumnProps as Nl, UiInputEvent as Nm, RendererBackend as Nn, ScrollContainerState as No, insetsEqual as Np, IconRasterizer as Nr, EnvironmentNotifier as Ns, GlyphShaper as Nt, UiVirtualSheetOptions as Nu, ParagraphGeometry as O, UiInterpolator as O_, formatExplanation as Oa, normalizeTextAlign as Oc, UiGradientOffset as Od, contrastRatio as Of, TextMeasureRequest as Og, hasDecorationPhase as Oh, UiShownAs as Oi, UiChildrenBinding as Ol, UiBeforeInputEvent as Om, Canvas2DRenderer as On, shortcutKeyCaps as Oo, spacingSteps as Op, iconSource as Or, FindOptions as Os, TextRunDraw as Ot, SheetRange as Ou, wordRangeIn as P, UiTransforms as P_, UiFrameClockFactory as Pa, clearSelectionRange as Pc, linearGradient as Pd, UiShadows as Pf, TextWrap as Pg, UiContentDistribution as Ph, UiModifierBundle as Pi, CommonProps as Pl, UiKeyModifiers as Pm, UiRenderer as Pn, ScrollSink as Po, noInsets as Pp, IconRasterizerOptions as Pr, CARET_BLINK_MS as Ps, GLYPH_SUBPIXEL_PHASES as Pt, VIRTUAL_SHEET_PROP as Pu, rangeSource as Q, easings as Q_, PlatformSurface as Qa, lineStartAt as Qc, resolveLength as Qd, defaultTypography as Qf, DirtyFlags as Qg, UiVerticalAlign as Qh, GridTrack as Qi, TextContentProps as Ql, MotionStateInput as Qm, sameArgs as Qn, FindHost as Qo, UiModifierFocus as Qp, contextMenu as Qr, PlacedTextRun as Qs, fontStackFor as Qt, MAX_MEASURES_PER_CHILD as Qu, MARK_PREFIX as R, transformsEqual as R_, UiManualFrameClock as Ra, setSelectionRange as Rc, FrLength as Rd, UiBoxShadow as Rf, LayoutResult as Rg, UiFontWeight as Rh, accumulatedOffsetTo as Ri, FlexContainerProps as Rl, UiPointerDevice as Rm, LABEL_PADDING_X as Rn, isScrollContainer as Ro, bandOf as Rp, DefaultSvgResolverOptions as Rr, editorFor as Rs, WebGPUTextureCache as Rt, LazyItemRenderer as Ru, clearLinkHover as S, UiSpringToken as S_, OverrideSources as Sa, TextAlign as Sc, UiImage as Sd, noThemeExtensions as Sf, FontMetrics as Sg, DecorationFill as Sh, borders as Si, UiDefinition as Sl, UiProps as Sm, svgPaint as Sn, UiShortcutBinding as So, textSpansEqual as Sp, SharedElementArgs as Sr, SubtreeBounds as Ss, RenderCommand as St, CompositionRange as Su, linkOf as T, durationIn as T_, describeLength as Ta, computeObjectFitRect as Tc, ResolvedGradient as Td, withThemeExtension as Tf, SpannedRuns as Tg, DecorationStroke as Th, BUTTON_INTERACTION as Ti, UiGraph as Tl, UiInputDispatcher as Tm, LayoutInspector as Tn, describeShortcut as To, defaultSpacing as Tp, IconSourceArgs as Tr, matchRangesOf as Ts, ScissorRect as Tt, LazySheet as Tu, setPerformanceMarks as U, colorValuesEqual as U_, isNodeInert as Ua, lineIndexAtY as Uc, auto as Ud, boxShadowRadius as Uf, constraintsEqual as Ug, UiPointerEvents as Uh, inheritedPropertyFlags as Ui, InteractionProps as Ul, UiWheelDeltaMode as Um, CanvasSurface as Un, UiPinchRecognizer as Uo, textInputOf as Up, parseSvg as Ur, nextCaretToggle as Us, DrawStats as Ut, VIRTUAL_LEAD_PROP as Uu, measureSpan as V, colorToHex as V_, isNodeFocusable as Va, RunMeasure as Vc, UiLength as Vd, boxShadow as Vf, TightenOptions as Vg, UiOverflow as Vh, findPropertyDefinition as Vi, GridProps as Vl, UiSelectionChangeEvent as Vm, labelOrigin as Vn, UiGestureRecognizer as Vo, UiTextInput as Vp, SvgDocument as Vr, isMultiline as Vs, WebGPUError as Vt, UiVirtualWindow as Vu, VttCue as W, colorsEqual as W_, isNodeSelectable as Wa, lineIndexForOffset as Wc, fr as Wd, boxShadowReach as Wf, tightenConstraints as Wg, UiPosition as Wh, inheritedPropertyNames as Wi, PaintElementProps as Wl, UiWheelEvent as Wm, createCanvasSurface as Wn, FocusNotifier as Wo, UiEditingGroup as Wp, DefaultImageResolver as Wr, syncEditorValue as Ws, RenderHooks as Wt, VIRTUAL_WINDOW_PROP as Wu, RangeSourceOptions as X, cubicBezier as X_, PlatformAdapterOptions as Xa, graphemeBoundaries as Xc, percent as Xd, UiTypographyExtensions as Xf, provided as Xg, UiTextWrapValue as Xh, GridItemRequest as Xi, ScrollViewProps as Xl, MotionChannel as Xm, ThemeTokenTarget as Xn, writeDeclaredProperty as Xo, editingGroupOf as Xp, ShortcutOptions as Xr, EditableLayout as Xs, bumpFontStack as Xt, isVideoSurface as Xu, DEFAULT_BLOCK_SIZE as Y, UiEasing as Y_, CanvasPlatformSurface as Ya, selectionRects as Yc, minmax as Yd, UiTypography as Yf, findEnvironmentKey as Yg, UiTextOverflowValue as Yh, GridContribution as Yi, RowProps as Yl, MOTION_REST as Ym, resolveString as Yn, resetOverrideWarnings as Yo, edgeField as Yp, ContextMenuOptions as Yr, isPrintable as Ys, createWebGPUSurface as Yt, UiVideoSurface as Yu, bufferSource as Z, easingCss as Z_, PlatformEventTarget as Za, lineEndAt as Zc, repeat as Zd, UiTypographyRole as Zf, UiNodeType as Zg, UiThemeColorName as Zh, GridPlacement as Zi, StackProps as Zl, MotionState as Zm, themeTokens as Zn, writeOverrideProperty as Zo, UiModifierEnvironment as Zp, ShortcutsOptions as Zr, CanvasTextStyle as Zs, clearFontStacks as Zt, videoFrameSize as Zu, buildSemanticsTree as _, UiEasingToken as __, AxisExplanation as _a, DEFAULT_TEXT_COLOR as _c, UiPaint as _d, UiThemeExtension as _f, darkColors as _g, NodeProperty as _h, BorderEdge as _i, Row as _l, isComponentLikeElement as _m, PaintRecording as _n, UiDroppedFile as _o, resolvedSpansOf as _p, RangeResponse as _r, scrollRange as _s, INSTANCE_STRIDE_FLOATS as _t, isUiSemanticState as _u, diffSemantics as a, AnimatedCell as a_, parseCrossAxisAlignment as aa, drawText as ac, defaultVisualState as ad, withPointer as af, borderRadiusIsZero as ag, rotateFrom as ah, DragSourceOptions as ai, ResponsiveProps as al, defineModifier as am, PaintContext2D as an, EditingControllerOptions as ao, UiResolvedTextSpan as ap, breakpoint as ar, HitTester as as, Mp3Frame as at, UiPropertyName as au, semanticsMemory as b, UiSpringExtensions as b_, LayoutExplanation as ba, PaintState as bc, paintValuesEqual as bd, defineThemeExtension as bf, CharacterCountTextMeasurer as bg, UiPropertyOverride as bh, FocusRingOptions as bi, Text as bl, isUiElement as bm, SvgFit as bn, ShortcutRegistryOptions as bo, spansDifferOnlyInPaint as bp, canDecodeVideo as br, scrollbarZoneAt as bs, PrimitiveCommand as bt, validateRole as bu, SemanticsMemory as c, UiReducedMotionPolicy as c_, parseFlexDirection as ca, runCanvasStyleInto as cc, visualStatesEqual as cd, lightTheme as cf, uniformBorderRadius as cg, slideFrom as ch, dragSource as ci, LazyGridProps as cl, UiModifierTeardown as cm, PaintLayers as cn, UiEditingController as co, UiTextLink as cp, ScrollPositionArgs as cr, SCROLLBAR_HOVER_ZONE as cs, readMp3Header as ct, UI_ROLES as cu, SemanticsRewalk as d, UiTween as d_, proportionalFontMetrics as da, textRunDecorations as dc, PaintLineCap as dd, withDensity as df, UiShapes as dg, UiSharedElements as dh, DragOffset as di, Box as dl, UiFocusManager as dm, PaintResolver as dn, EXTERNAL_FILES as do, UiTextSpan as dp, VideoSourceArgs as dr, SCROLLBAR_THICKNESS as ds, Affine as dt, UiLiveRegion as du, UiTransitionValue as e_, sizeGridTracks as ea, TextLinePlacement as ec, UiLayoutContext as ed, defineProperty as ef, UiBorderRadius as eg, ResolvedMotionState as eh, shortcuts as ei, nextWordEnd as el, UiModifierSet as em, PaintPictureCache as en, capturePointer as eo, typographyEqual as ep, PublishInsetArgs as er, SelectionControllerOptions as es, Mp4Sample as et, TypographyProps as eu, steps as ev, SemanticsSpan as f, UiTweenOptions as f_, LayoutNotifier as fa, Canvas2DContext as fc, PaintLineJoin as fd, UiLengths as ff, defaultShapes as fg, AnimationDriver as fh, DraggableOptions as fi, Button as fl, ComponentResolver as fm, PaintTarget as fn, UiDragPayload as fo, UiTextStyle as fp, VideoState as fr, ScrollBounds as fs, CLIP_STRIDE_BYTES as ft, UiOrientation as fu, buildSemanticsSubtree as g, UiEasingExtensions as g_, ScrollAdjustment as ga, DEFAULT_FONT_WEIGHT as gc, PaintTextStyle as gd, unitsEqual as gf, colorsEqualPalette as gg, NodeId as gh, autoFocus as gi, Paint as gl, UiSourceLocation as gm, PaintRecorder as gn, UiDropZone as go, hiddenRangesOf as gp, DefaultVideoResolverOptions as gr, scrollLeaderOf as gs, INSTANCE_STRIDE_BYTES as gt, isUiRole as gu, UiSemanticsRecord as h, UiDurationToken as h_, SCROLLBAR_LINGER_MS as ha, DEFAULT_FONT_SIZE as hc, PaintTextAlign as hd, lengths as hf, UiColors as hg, motionOf as hh, clickOutside as hi, Grid as hl, UiElement as hm, PaintOp as hn, UiDropEffect as ho, flattenTextSpans as hp, DefaultVideoResolver as hr, scrollBounds as hs, GlyphCommand as ht, UiSemanticStates as hu, UiSemanticsPatch as i, tween as i_, parseAlignContent as ia, createCanvasTextStyle as ic, UiVisualStateSet as id, UiThemeTouch as if, borderRadiusEqual as ig, resolveMotionState as ih, AutoScrollOptions as ii, Responsive as il, UiModifierKind as im, PaintCanvasFactory as in, touchActionFor as io, UiFontVariant as ip, SizeContainerArgs as ir, HitTestResult as is, Mp3Format as it, UiProperties as iu, paragraphGeometry as j, interpolateTransform as j_, UiFrame as ja, DEFAULT_LINE_HEIGHT_FACTOR as jc, UiRadialGradient as jd, relativeLuminance as jf, TextRunMeasurer as jg, UiAlignment as jh, measure as ji, BoxProps as jl, UiFocusEvent as jm, LayerCanvasFactory as jn, PointerControllerOptions as jo, UiInsetSource as jp, IconCanvas as jr, provideEnvironment as js, glyphCount as jt, SheetViewport as ju, hasDrawnText as k, interpolateColor as k_, labelNode as ka, normalizeVerticalAlign as kc, UiGradientStop as kd, highContrastColors as kf, TextMeasurer as kg, paintsAfterChildren as kh, hoverable as ki, UiGraphBuilder as kl, UiCompositionEvent as km, Canvas2DRendererOptions as kn, KeyboardControllerOptions as ko, UiInsetEdge as kp, imageSource as kr, findMatchesIn as ks, buildRenderList as kt, SheetRowRenderer as ku, SemanticsPlacement as l, UiSpring as l_, ELLIPSIS as la, runFontString as lc, PaintBox as ld, themesEqual as lf, UiShapeExtensions as lg, slideUp as lh, dropTarget as li, LazyListProps as ll, FocusOptions as lm, PaintMatrix as ln, TouchScrollerOptions as lo, UiTextMetrics as lp, scrollPosition as lr, SCROLLBAR_INSET as ls, splitMp3Frames as lt, UI_SEMANTIC_STATES as lu, UiSemanticsMap as m, UiDurationExtensions as m_, SCROLLBAR_FADE_MS as ma, DEFAULT_FONT_FAMILY as mc, PaintSurface as md, defaultUnits as mf, shapesEqual as mg, clockOf as mh, ClickOutsideOptions as mi, EditableText as ml, UiChild as mm, EMPTY_RECORDING as mn, UiDragState as mo, editableSpansOf as mp, videoSource as mr, ScrollbarThumb as ms, CommandKind as mt, UiSemanticState as mu, UiSemanticsBox as n, normalizeTransition as n_, CrossAxisAlignment as na, applyCanvasTextStyle as nc, isLayoutProtocol as nd, TOUCH_TARGET as nf, borderRadius as ng, isMotionRest as nh, ZoomState as ni, previousWordStart as nl, assertModifierList as nm, paintPictures as nn, pointerDeviceOf as no, UiFontStretch as np, publishInset as nr, UiSelectionController as ns, demuxMp4Audio as nt, UiNodeRef as nu, dropIndexShifts as o, UiAnimation as o_, parseMainAxisAlignment as oa, fillTextRects as oc, hasVisualState as od, UiTheme as of, borderRadiusValuesEqual as og, scaleFrom as oh, DropTargetOptions as oi, LazyColumn as ol, isUiModifier as om, PaintDeviceRect as on, EditingHost as oo, UiSpannedText as op, sizeContainer as or, UiHitTester as os, Mp3Frames as ot, UiPropertyValueOf as ou, TEXT_RUN_ID_SEPARATOR as p, createTween as p_, LayoutEngine as pa, Canvas2DGradient as pc, PaintMaskMode as pd, UiUnits as pf, isShapeName as pg, UiClock as ph, draggable as pi, Column as pl, ComponentLikeElement as pm, tracePathData as pn, UiDragSession as po, defaultTextStyle as pp, VideoTransport as pr, ScrollbarAxis as ps, CLIP_STRIDE_FLOATS as pt, UiRole as pu, parseWebVtt as q, rgb8 as q_, pointerEventsOf as qa, offsetAtX as qc, isMinMaxTrack as qd, fittedShadowRadius as qf, UiProvision as qg, UiTextAlign as qh, propertyNarrowers as qi, PropsOf as ql, DirtyNodeSet as qm, resolveProperty as qn, clearOverrideProperty as qo, adjacentField as qp, AnimateLayoutOptions as qr, commandForKey as qs, WebGPUCanvasHost as qt, VirtualViewport as qu, UiSemanticsUpdate as r, spring as r_, MainAxisAlignment as ra, buildFontString as rc, UiVisualState as rd, UiPointer as rf, borderRadiusCorners as rg, pop as rh, pinchable as ri, wordRangeAt as rl, UiModifier as rm, PaintCanvas as rn, prepareInputSurface as ro, UiFontStyle as rp, BreakpointArgs as rr, HitTestLayoutReader as rs, demuxMp4Video as rt, UiHoldUnseen as ru, recordsEqual as s, UiAnimationOptions as s_, FlexDirection as sa, layoutTextLines as sc, visualState as sd, darkTheme as sf, normalizeBorderRadius as sg, slideDown as sh, ReorderableOptions as si, LazyGrid as sl, UiModifierHost as sm, PaintGradient as sn, EditingState as so, UiTextDecoration as sp, ScrollOffset as sr, UiPoint as ss, Mp3Header as st, UiPropertyValues as su, UiSemanticsAction as t, assertTransitionMap as t_, AlignContent as ta, TextRunRect as tc, UiLayoutProtocol as td, propertyValuesEqual as tf, UiBorderRadiuses as tg, fade as th, PinchableOptions as ti, previousGraphemeStart as tl, UiUnknownModifierPropertyError as tm, PaintStats as tn, isImeKey as to, UiFontKerning as tp, insetPadding as tr, SelectionHost as ts, Mp4VideoTrack as tt, UiEventProps as tu, SemanticsReuse as u, UiSpringOptions as u_, layoutParagraph as ua, textRunBackgrounds as uc, PaintFillRule as ud, withContrast as uf, UiShapeName as ug, SharedClaim as uh, reorderable as ui, LazyRow as ul, FocusSource as um, PaintPixels as un, UiTouchScroller as uo, UiTextRange as up, VideoClock as ur, SCROLLBAR_MIN_THUMB as us, WebGPUGlyphPages as ut, UiAutocomplete as uu, rewalkSemantics as v, UiMotion as v_, CustomLayoutExplanation as va, ObjectFit as vc, UiPath as vd, UiThemeExtensionOptions as vf, lightColors as vg, UiNode as vh, BordersOptions as vi, ScrollView as vl, isObservable$1 as vm, replayPaint as vn, UiFileDropMessage as vo, spanAtOffset as vp, VideoPlayback as vr, scrollbarThumb as vs, ImageCommand as vt, normalizeStates as vu, linkHoverOf as w, defineMotion as w_, SizeDecision as wa, colorToCss as wc, MAX_GRADIENT_STOPS as wd, themeExtensionsEqual as wf, ParagraphTextMeasurer as wg, DecorationShape as wh, focusRing as wi, UiBinding as wl, UiEventListenerOptions as wm, InspectorOverlay as wn, UiShortcutStep as wo, UiSpacing as wp, sharedElement as wr, clearMatchRanges as ws, RenderTextCache as wt, EditableTextModel as wu, textRunOfRecordId as x, UiSpringSpec as x_, LayoutStateExplanation as xa, PaintTextSpan as xc, pathValuesEqual as xd, hasThemeExtension as xf, FixedMetricsOptions as xg, UiPropertyOverrides as xh, borderShapes as xi, createElement as xl, UiPropValue as xm, drawSvg as xn, UiShortcut as xo, textContentOf as xp, MotionArgs as xr, scrollsFromRight as xs, PrimitiveKind as xt, validateStates as xu, semanticsInertAbove as y, UiMotionChanges as y_, Edges as ya, PaintBoxShadow as yc, inputsEqual as yd, UiThemeExtensions as yf, LayoutRecord as yg, UiNodeTransitions as yh, Decorations as yi, Stack as yl, isUiChild as ym, SvgDrawOptions as yn, dragSessionFor as yo, spannedTextOf as yp, VideoResolver as yr, scrollbarThumbs as ys, NO_CLIP_INDEX as yt, statesEqual as yu, markInstant as z, UiBasicColors as z_, UiTimerFrameClock as za, CaretRect as zc, MinMaxTrack as zd, UiBoxShadows as zf, LayoutStats as zg, UiGridAutoFlow as zh, contentOffset as zi, FlexItemProps as zl, UiPointerEvent as zm, OverlayShape as zn, GestureInput as zo, containerBands as zp, SvgResolver as zr, editorOf as zs, initializeWebGPU as zt, LazyListOptions as zu };
20995
+ //# sourceMappingURL=index-BSoAnZP0.d.ts.map