gesso-framework 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.
- package/CHANGELOG.md +49 -0
- package/dist/{FunctionComponent-Czkex8fp.d.ts → FunctionComponent-BDVrANP0.d.ts} +14 -2
- package/dist/WorkerPorts-m_hLRoPj.js.map +1 -1
- package/dist/agent/index.d.ts +3 -1
- package/dist/agent/index.js +4 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/{computed-_cYcdczA.js → computed-DyW9SPpq.js} +12 -2
- package/dist/computed-DyW9SPpq.js.map +1 -0
- package/dist/{index-BENndtaH.d.ts → index-C08h2Jze.d.ts} +451 -29
- package/dist/index.d.ts +4 -4
- package/dist/index.js +207 -22
- package/dist/index.js.map +1 -1
- package/dist/jsx/jsx-runtime.d.ts +1 -1
- package/dist/{persisted-8meJmsOh.js → persisted-qEBOHDnj.js} +2 -2
- package/dist/{persisted-8meJmsOh.js.map → persisted-qEBOHDnj.js.map} +1 -1
- package/dist/remote/index.d.ts +2 -2
- package/dist/{render-cydQ10Nd.js → render-DlhL5y0d.js} +810 -190
- package/dist/render-DlhL5y0d.js.map +1 -0
- package/dist/{tools-BFBwuinE.d.ts → tools-Bl8LZ7LR.d.ts} +2 -2
- package/dist/worker/index.d.ts +3 -3
- package/dist/worker/index.js +2 -2
- package/package.json +2 -2
- package/dist/computed-_cYcdczA.js.map +0 -1
- package/dist/render-cydQ10Nd.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { L as ChannelToken, R as Command, a as ComponentType, c as Inputs, i as ComponentProps, j as Patch, n as ComponentArgs, p as InternalState, r as ComponentContext, u as Component, v as InputCell, x as ReadableCell, y as OutputCell } from "./FunctionComponent-
|
|
2
|
-
import { C as ServiceRegistry, E as DesignThemes, O as AgentConfirmation, U as ChannelSource, X as WorkerHandle, b as ComponentElement, s as UiHost, t as AgentToolDefinition, w as ChannelRegistry, x as FrameworkChild } from "./tools-
|
|
1
|
+
import { L as ChannelToken, R as Command, a as ComponentType, c as Inputs, i as ComponentProps, j as Patch, n as ComponentArgs, p as InternalState, r as ComponentContext, u as Component, v as InputCell, x as ReadableCell, y as OutputCell } from "./FunctionComponent-BDVrANP0.js";
|
|
2
|
+
import { C as ServiceRegistry, E as DesignThemes, O as AgentConfirmation, U as ChannelSource, X as WorkerHandle, b as ComponentElement, s as UiHost, t as AgentToolDefinition, w as ChannelRegistry, x as FrameworkChild } from "./tools-Bl8LZ7LR.js";
|
|
3
3
|
import { BehaviorSubject, Observable, Subscription } from "rxjs";
|
|
4
|
-
import { AnimatedCell, AnimationDriver, CanvasHost, CaretRect, ComponentLikeElement, ComponentResolver, EditingState, EditingState as EditingState$1, FocusOptions, IconRasterizer, ImageResolver, LayoutExplanation, LayoutInspector, MARK_PREFIX, MotionStateInput, MotionTiming, Reactive, RendererBackend, Size, SvgResolver, TextMeasureRequest, TextMeasurer, UI_ROLES, UI_SEMANTIC_STATES, UiAnimation, UiChild, UiContrast, UiDurationToken, UiEasing, UiEasingToken, UiEditingController, UiElement, UiFileDropMessage, UiFindController, UiFocusManager, UiFrameClockFactory, UiInputDispatcher, UiInsets, UiKeyModifiers, UiKeyboardController, UiLength, UiModifier, UiMotion, UiNode, UiPlatformAdapter, UiPointer, UiPointerController, UiPointerDevice, UiReducedMotionPolicy, UiRole, UiScrollability, UiSelectionController, UiSemanticState, UiSemanticsAction, UiSemanticsMap, UiSemanticsMap as UiSemanticsMap$1, UiSemanticsPatch, UiSemanticsRecord, UiSemanticsRecord as UiSemanticsRecord$1, UiSemanticsUpdate, UiShortcutRegistry, UiSourceLocation, UiSpringSpec, UiSpringToken, UiTextPosition, UiTheme, UiThemeExtension, UiTouchScroller, UiWheelController, VideoClock, VideoResolver, markInstant, markNow, measureSpan, performanceMarksEnabled, setPerformanceMarks as setPerformanceMarks$1 } from "gesso-core";
|
|
4
|
+
import { AnimatedCell, AnimationDriver, CanvasHost, CaretRect, ComponentLikeElement, ComponentResolver, EditingState, EditingState as EditingState$1, FocusOptions, IconRasterizer, ImageResolver, LayoutExplanation, LayoutInspector, MARK_PREFIX, MotionStateInput, MotionTiming, Reactive, RendererBackend, Size, SvgResolver, TextMeasureRequest, TextMeasurer, UI_ROLES, UI_SEMANTIC_STATES, UiAnimation, UiChild, UiClock, UiContrast, UiDurationToken, UiEasing, UiEasingToken, UiEditingController, UiElement, UiEnvironmentKey, UiFileDropMessage, UiFindController, UiFocusManager, UiFrameClockFactory, UiInputDispatcher, UiInsets, UiKeyModifiers, UiKeyboardController, UiLength, UiModifier, UiMotion, UiNode, UiPlatformAdapter, UiPointer, UiPointerController, UiPointerDevice, UiReducedMotionPolicy, UiRole, UiScrollability, UiSelectionController, UiSemanticState, UiSemanticsAction, UiSemanticsMap, UiSemanticsMap as UiSemanticsMap$1, UiSemanticsPatch, UiSemanticsRecord, UiSemanticsRecord as UiSemanticsRecord$1, UiSemanticsUpdate, UiShortcutRegistry, UiSourceLocation, UiSpringSpec, UiSpringToken, UiTextPosition, UiTheme, UiThemeExtension, UiTouchScroller, UiWheelController, VideoClock, VideoResolver, markInstant, markNow, measureSpan, performanceMarksEnabled, setPerformanceMarks as setPerformanceMarks$1 } from "gesso-core";
|
|
5
5
|
//#region src/derive.d.ts
|
|
6
6
|
/** How `derive` decides that a new value is not a change. */
|
|
7
7
|
type Equality<T> = 'reference' | 'structural' | ((a: T, b: T) => boolean);
|
|
@@ -883,6 +883,12 @@ interface ControlledOptions<T> {
|
|
|
883
883
|
readonly fallback: T;
|
|
884
884
|
/** Fired on every change in either form. */
|
|
885
885
|
readonly onChange: OutputCell<[next: T]>;
|
|
886
|
+
/**
|
|
887
|
+
* Other outputs a parent may hear the change through instead: a
|
|
888
|
+
* drawer's `onClose` beside its `onOpenChange`. A parent listening on
|
|
889
|
+
* any of them owns the value, as one passing `onChange` does.
|
|
890
|
+
*/
|
|
891
|
+
readonly heardBy?: readonly OutputCell<never>[];
|
|
886
892
|
}
|
|
887
893
|
/**
|
|
888
894
|
* Controlled by default, self-managing when given only an initial value.
|
|
@@ -893,9 +899,58 @@ interface ControlledOptions<T> {
|
|
|
893
899
|
* `defaultValue` and the control owns it, still reporting changes;
|
|
894
900
|
* pass both and it throws, because two owners is a bug. `bind(cell)` is
|
|
895
901
|
* the spread for the first form when the owner is a local cell.
|
|
902
|
+
*
|
|
903
|
+
* A `value` with no `onChange` beside it has nobody to own it, so it is
|
|
904
|
+
* where the control starts, and the control owns it from there; a new
|
|
905
|
+
* value from the parent starts it again. A screen written as a picture
|
|
906
|
+
* of a moment, `<Switch checked={true} />`, is then one a person can
|
|
907
|
+
* use: the design tool's Play mode runs mocks written exactly so, and a
|
|
908
|
+
* value that only the parent may change is what `readOnly` and
|
|
909
|
+
* `disabled` say, not a missing handler.
|
|
896
910
|
*/
|
|
897
911
|
declare function controlled<T>(options: ControlledOptions<T>): ControlledValue<T>;
|
|
898
912
|
//#endregion
|
|
913
|
+
//#region src/sharedValue.d.ts
|
|
914
|
+
/**
|
|
915
|
+
* Named values the components under one node share, with no
|
|
916
|
+
* application behind them: what one screen of a prototype was given
|
|
917
|
+
* (an email typed on Forgot password), shown by the next (Check email),
|
|
918
|
+
* or a wizard's steps passing on what was filled in.
|
|
919
|
+
*
|
|
920
|
+
* A node provides a store to what it holds,
|
|
921
|
+
* `provide={[provided(SharedValuesKey, values)]}`, and a component asks
|
|
922
|
+
* for a value by name with `sharedValue(ctx, name, start)`. Under a
|
|
923
|
+
* store, every component asking for the same name has the same cell;
|
|
924
|
+
* with none above, each has its own, at its own start. So a design tool
|
|
925
|
+
* can draw a screen on its board as written, each frame alone, and play
|
|
926
|
+
* it with the screens before it.
|
|
927
|
+
*
|
|
928
|
+
* It is not where an application's state goes. That survives a reload
|
|
929
|
+
* and is on a channel, written by a command; these are cells, written
|
|
930
|
+
* by whatever holds one, and gone with the store.
|
|
931
|
+
*/
|
|
932
|
+
declare class SharedValues {
|
|
933
|
+
private readonly cells;
|
|
934
|
+
/** Every value by name, as it is now, in the order each was first asked for. */
|
|
935
|
+
readonly values: InternalState<ReadonlyMap<string, unknown>>;
|
|
936
|
+
/** The value named `name`: made at `start` by the first to ask, and the same cell for each after. */
|
|
937
|
+
cell<T>(name: string, start: T): InternalState<T>;
|
|
938
|
+
/** Writes a value by name, as a component holding it would; a name nobody has asked for is ignored. */
|
|
939
|
+
set(name: string, value: unknown): void;
|
|
940
|
+
/** Every value back at the start it was made with. */
|
|
941
|
+
reset(): void;
|
|
942
|
+
private publish;
|
|
943
|
+
}
|
|
944
|
+
/** Where a node provides a `SharedValues` to what it holds. */
|
|
945
|
+
declare const SharedValuesKey: import("gesso-core").UiEnvironmentKey<SharedValues | null>;
|
|
946
|
+
/**
|
|
947
|
+
* A value by name: the cell the nearest `SharedValues` above holds for
|
|
948
|
+
* it, shared with every component asking for it there; with none
|
|
949
|
+
* above, a cell of this component's own, at `start`. Bind it as any
|
|
950
|
+
* cell: `<TextInput {...bind(email)} />`.
|
|
951
|
+
*/
|
|
952
|
+
declare function sharedValue<T>(ctx: ComponentContext, name: string, start: T): InternalState<T>;
|
|
953
|
+
//#endregion
|
|
899
954
|
//#region src/decorators.d.ts
|
|
900
955
|
/**
|
|
901
956
|
* Declares a class as a Gesso component.
|
|
@@ -1093,10 +1148,14 @@ declare function createComponent<C extends ComponentType>(component: C, ...args:
|
|
|
1093
1148
|
* edge of the screen whatever the language: an arrow drawn on a
|
|
1094
1149
|
* diagram, a tooltip on a panel that is always on the left.
|
|
1095
1150
|
*
|
|
1151
|
+
* `over` lays the entry over the anchor at its size, grown by the
|
|
1152
|
+
* offset on every side: the hole a spotlight leaves around what it
|
|
1153
|
+
* shows. No direction turns it.
|
|
1154
|
+
*
|
|
1096
1155
|
* The direction is the entry's: the one its content reads in, which is
|
|
1097
1156
|
* where its theme comes from too. See `OverlayEntry.environment`.
|
|
1098
1157
|
*/
|
|
1099
|
-
type OverlayPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end' | 'start' | 'start-start' | 'start-end' | 'end' | 'end-start' | 'end-end';
|
|
1158
|
+
type OverlayPlacement = 'over' | 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end' | 'start' | 'start-start' | 'start-end' | 'end' | 'end-start' | 'end-end';
|
|
1100
1159
|
/** A rectangle inside an anchor, from its border box's top left. */
|
|
1101
1160
|
interface OverlayRect {
|
|
1102
1161
|
readonly x: number;
|
|
@@ -1230,6 +1289,104 @@ declare class OverlayService {
|
|
|
1230
1289
|
closeAll(): void;
|
|
1231
1290
|
isOpen(id: string): boolean;
|
|
1232
1291
|
}
|
|
1292
|
+
/**
|
|
1293
|
+
* The overlays of the `OverlayScope` a node is in: where an entry
|
|
1294
|
+
* opened there goes instead of the runtime's layer. Null outside every
|
|
1295
|
+
* scope.
|
|
1296
|
+
*/
|
|
1297
|
+
declare const OverlayScopeKey: import("gesso-core").UiEnvironmentKey<OverlayService | null>;
|
|
1298
|
+
//#endregion
|
|
1299
|
+
//#region src/overlay/OverlayScope.d.ts
|
|
1300
|
+
interface OverlayScopeProps {
|
|
1301
|
+
children?: UiChild;
|
|
1302
|
+
}
|
|
1303
|
+
/**
|
|
1304
|
+
* A part of the tree that holds its own overlays: a dialog, menu or
|
|
1305
|
+
* tooltip opened inside it is drawn inside it, over its content and
|
|
1306
|
+
* nowhere else.
|
|
1307
|
+
*
|
|
1308
|
+
* What a design tool's player needs from the screen it plays: a dialog
|
|
1309
|
+
* on that screen dims the screen, centres in it and is clipped by it,
|
|
1310
|
+
* is scaled with it when the screen is drawn smaller than its own size,
|
|
1311
|
+
* and leaves the tool around it pressable. A menu is placed and flipped
|
|
1312
|
+
* within it, since an anchored entry stays inside the box its layer
|
|
1313
|
+
* covers. Outside a scope, entries open in the runtime's own layer
|
|
1314
|
+
* above the whole application, as they always have.
|
|
1315
|
+
*
|
|
1316
|
+
* It fills what holds it, and is the containing block of what it
|
|
1317
|
+
* holds. `useOverlay` finds the nearest scope above the component that
|
|
1318
|
+
* opens the entry; with none, it uses the runtime's `OverlayService`.
|
|
1319
|
+
*
|
|
1320
|
+
* A dialog's trap inside it holds the keyboard inside it only: the
|
|
1321
|
+
* tool around it, and every other scope, keep their focus, and none is
|
|
1322
|
+
* taken from them when it opens or handed to them when it closes.
|
|
1323
|
+
*/
|
|
1324
|
+
declare function OverlayScope(inputs: Inputs<OverlayScopeProps>, _ctx: ComponentContext): UiChild;
|
|
1325
|
+
//#endregion
|
|
1326
|
+
//#region src/startingInputsKey.d.ts
|
|
1327
|
+
/** One component's starting inputs: input names to values. */
|
|
1328
|
+
type StartingInputsRecord = Readonly<Record<string, unknown>>;
|
|
1329
|
+
/**
|
|
1330
|
+
* Starting inputs by component name: one record for every instance of
|
|
1331
|
+
* it, or a list for each in the order they are made (`null` for one
|
|
1332
|
+
* left as written), so the second of three switches can start on.
|
|
1333
|
+
*/
|
|
1334
|
+
type StartingInputsByName = Readonly<Record<string, StartingInputsRecord | readonly (StartingInputsRecord | null)[]>>;
|
|
1335
|
+
/**
|
|
1336
|
+
* The inputs components under a node start with, by component name,
|
|
1337
|
+
* over what their parents pass; see `StartingInputs`. Empty outside one.
|
|
1338
|
+
*/
|
|
1339
|
+
declare const StartingInputsKey: UiEnvironmentKey<StartingInputsByName>;
|
|
1340
|
+
//#endregion
|
|
1341
|
+
//#region src/StartingInputs.d.ts
|
|
1342
|
+
interface StartingInputsProps {
|
|
1343
|
+
/**
|
|
1344
|
+
* Inputs by component name: `{ ScrollArea: { scrollY: 600 }, Tour: { step: 1 } }`;
|
|
1345
|
+
* or a list for each instance in the order they are made, `null` for
|
|
1346
|
+
* one left as written: `{ Toggle: [null, { on: true }] }`.
|
|
1347
|
+
*/
|
|
1348
|
+
of?: StartingInputsByName;
|
|
1349
|
+
children?: UiChild;
|
|
1350
|
+
}
|
|
1351
|
+
/**
|
|
1352
|
+
* Draws what it holds with the components in it started from given
|
|
1353
|
+
* inputs, named by component, over what their parents pass: every
|
|
1354
|
+
* `ScrollArea` in it scrolled to 600, every `Tour` at its second step.
|
|
1355
|
+
*
|
|
1356
|
+
* What a design tool draws a moment of a screen with, beside the
|
|
1357
|
+
* screen as written, without a copy of the screen to drift from it: a
|
|
1358
|
+
* list scrolled far enough for its back-to-top button, a dialog open,
|
|
1359
|
+
* a tour on its second step. A component reads them as it would its
|
|
1360
|
+
* parent's props, so one that takes a value without a handler beside
|
|
1361
|
+
* it starts there and is then the person's to change, in a design
|
|
1362
|
+
* tool's player as anywhere. A preview of inputs (`InspectionService.
|
|
1363
|
+
* previewInputs`) goes over them, and ending it comes back to them.
|
|
1364
|
+
*
|
|
1365
|
+
* They are read as each component is made, so they start a component
|
|
1366
|
+
* rather than steer one: a new `of` reaches components made after it,
|
|
1367
|
+
* and once the parent passes something new for an input, it is the
|
|
1368
|
+
* parent's again, as a dialog saved open closes when its owner closes
|
|
1369
|
+
* it.
|
|
1370
|
+
* Nested, the outer one wins for an input both give a component, and
|
|
1371
|
+
* the inner one's other inputs and names still reach in: what draws a
|
|
1372
|
+
* screen at a moment decides over what the screen starts itself with,
|
|
1373
|
+
* so a moment saved from a moment is the later one. A list per instance
|
|
1374
|
+
* is taken whole. It fills what holds it.
|
|
1375
|
+
*/
|
|
1376
|
+
declare function StartingInputs(inputs: Inputs<StartingInputsProps>, ctx: ComponentContext): UiChild;
|
|
1377
|
+
//#endregion
|
|
1378
|
+
//#region src/liveInput.d.ts
|
|
1379
|
+
/**
|
|
1380
|
+
* Says what an input of the component whose body is running holds now,
|
|
1381
|
+
* as the component keeps it, and how to read it again: a switch turned
|
|
1382
|
+
* on, a field typed in, a list scrolled to 600. The inspector reports it
|
|
1383
|
+
* on the component's owner report (`live`), and a design tool saves a
|
|
1384
|
+
* moment of a played screen from it, to start the screen there again
|
|
1385
|
+
* (`StartingInputs`). `controlled` calls it for its value, so a control
|
|
1386
|
+
* written by its contract reports itself; outside a component's body it
|
|
1387
|
+
* does nothing.
|
|
1388
|
+
*/
|
|
1389
|
+
declare function liveInput(name: string, read: () => unknown): void;
|
|
1233
1390
|
//#endregion
|
|
1234
1391
|
//#region src/overlay/OverlayLayer.d.ts
|
|
1235
1392
|
/**
|
|
@@ -1258,7 +1415,10 @@ declare class OverlayService {
|
|
|
1258
1415
|
* why that node and not always the anchor.
|
|
1259
1416
|
*/
|
|
1260
1417
|
declare class OverlayLayer extends Component {
|
|
1261
|
-
|
|
1418
|
+
runtimeOverlays: OverlayService;
|
|
1419
|
+
/** The entries to draw, when not the runtime's: an `OverlayScope`'s. */
|
|
1420
|
+
service: InputCell<OverlayService | null>;
|
|
1421
|
+
private get overlays();
|
|
1262
1422
|
render(): UiElement;
|
|
1263
1423
|
private renderEntries;
|
|
1264
1424
|
}
|
|
@@ -1289,6 +1449,8 @@ declare class OverlayLayer extends Component {
|
|
|
1289
1449
|
declare class ComponentHost<P extends Record<string, unknown> = Record<string, unknown>> {
|
|
1290
1450
|
private readonly services;
|
|
1291
1451
|
private readonly channels;
|
|
1452
|
+
/** The slot's node, under its parent, for `ctx.environment`; null for a host made outside a tree. */
|
|
1453
|
+
private readonly anchor;
|
|
1292
1454
|
/** The class instance; undefined for a functional component. */
|
|
1293
1455
|
readonly instance: Component | undefined;
|
|
1294
1456
|
readonly element: ComponentElement<P>;
|
|
@@ -1310,11 +1472,29 @@ declare class ComponentHost<P extends Record<string, unknown> = Record<string, u
|
|
|
1310
1472
|
private readonly inputSubscriptions;
|
|
1311
1473
|
/** A functional component's cells, by prop name, as they were handed out. */
|
|
1312
1474
|
private readonly functionalCells;
|
|
1475
|
+
/**
|
|
1476
|
+
* Inputs it is drawn with over its parent's, from a `StartingInputs`
|
|
1477
|
+
* above it when it was made: a moment of a screen, a tour's second
|
|
1478
|
+
* step. A preview goes over these, and ending one comes back to them.
|
|
1479
|
+
*/
|
|
1480
|
+
private started;
|
|
1481
|
+
/** What the parent passed for each started input at birth: a new value from it takes over. */
|
|
1482
|
+
private readonly startedOver;
|
|
1483
|
+
/** A started input the parent passes as a stream: the start, then the stream's changes; one per input, so it is not resubscribed. */
|
|
1484
|
+
private readonly startedStreams;
|
|
1485
|
+
/** What the component says it holds now, by input; see `liveInput`. */
|
|
1486
|
+
private readonly live;
|
|
1487
|
+
/** Inputs a tool draws the component with over its parent's, until it ends them; see `previewInputs`. */
|
|
1488
|
+
private previewed;
|
|
1489
|
+
/** A class's input values from before they were previewed, for the ones its parent does not pass. */
|
|
1490
|
+
private readonly beforePreview;
|
|
1313
1491
|
private readonly mountHooks;
|
|
1314
1492
|
private readonly unmountHooks;
|
|
1315
1493
|
/** True only while the component function runs; hooks may register then. */
|
|
1316
1494
|
private rendering;
|
|
1317
|
-
constructor(element: ComponentElement<P>, services?: ServiceRegistry, channels?: ChannelRegistry
|
|
1495
|
+
constructor(element: ComponentElement<P>, services?: ServiceRegistry, channels?: ChannelRegistry,
|
|
1496
|
+
/** The slot's node, under its parent, for `ctx.environment`; null for a host made outside a tree. */
|
|
1497
|
+
anchor?: UiNode | null);
|
|
1318
1498
|
/** The class or function this host mounts. */
|
|
1319
1499
|
get component(): ComponentType;
|
|
1320
1500
|
/**
|
|
@@ -1338,6 +1518,21 @@ declare class ComponentHost<P extends Record<string, unknown> = Record<string, u
|
|
|
1338
1518
|
* cell is what updates the output.
|
|
1339
1519
|
*/
|
|
1340
1520
|
updateProps(props: P): void;
|
|
1521
|
+
/**
|
|
1522
|
+
* Feeds the inputs `values` names from them instead of from the
|
|
1523
|
+
* parent, until a call with null hands them back to the parent: a
|
|
1524
|
+
* design tool showing one of a component's states on the live tree.
|
|
1525
|
+
* A later call replaces the earlier one; a new prop from the parent
|
|
1526
|
+
* for a previewed input waits until the preview ends.
|
|
1527
|
+
*
|
|
1528
|
+
* Each input a preview starts or ends is handed its value even when
|
|
1529
|
+
* it holds that value already, as a new value from the parent is: a
|
|
1530
|
+
* control that owns what it was started at (`controlled`) starts
|
|
1531
|
+
* again from it, rather than keeping what a person turned it to.
|
|
1532
|
+
*/
|
|
1533
|
+
previewInputs(values: Readonly<Record<string, unknown>> | null): void;
|
|
1534
|
+
/** What an input is fed from: a preview's value for it, else what it was started with, else the parent's prop. */
|
|
1535
|
+
private providedFor;
|
|
1341
1536
|
private renderFunction;
|
|
1342
1537
|
/**
|
|
1343
1538
|
* The props record a functional component reads: a cell per name,
|
|
@@ -1350,6 +1545,8 @@ declare class ComponentHost<P extends Record<string, unknown> = Record<string, u
|
|
|
1350
1545
|
private createInputRecord;
|
|
1351
1546
|
private createContext;
|
|
1352
1547
|
private wireInputs;
|
|
1548
|
+
/** What the component says each of its inputs holds now; see `liveInput`. */
|
|
1549
|
+
liveInputs(): ReadonlyMap<string, unknown>;
|
|
1353
1550
|
/**
|
|
1354
1551
|
* What the parent most recently supplied for each input, as given:
|
|
1355
1552
|
* a value, an element or a stream, whether or not the component has
|
|
@@ -1398,7 +1595,7 @@ declare class ComponentHostResolver implements ComponentResolver {
|
|
|
1398
1595
|
private readonly hosts;
|
|
1399
1596
|
private pendingMounts;
|
|
1400
1597
|
constructor(services?: ServiceRegistry, channels?: ChannelRegistry);
|
|
1401
|
-
resolve(element: ComponentLikeElement, anchorId: string): UiChild;
|
|
1598
|
+
resolve(element: ComponentLikeElement, anchorId: string, anchor?: UiNode): UiChild;
|
|
1402
1599
|
release(anchorId: string): void;
|
|
1403
1600
|
flushMounts(): void;
|
|
1404
1601
|
/**
|
|
@@ -1477,6 +1674,13 @@ interface UiNodeReport {
|
|
|
1477
1674
|
*/
|
|
1478
1675
|
readonly beneath: readonly UiBeneathReport[];
|
|
1479
1676
|
readonly semantics?: UiSemanticsReport;
|
|
1677
|
+
/**
|
|
1678
|
+
* What the node draws while hovered and while pressed, from its
|
|
1679
|
+
* `interactive` modifiers: the props it writes then, as the element
|
|
1680
|
+
* would write them. For a design tool's handoff, which writes them
|
|
1681
|
+
* as `:hover` and `:active`. Absent when it changes nothing.
|
|
1682
|
+
*/
|
|
1683
|
+
readonly interaction?: UiInteractionReport;
|
|
1480
1684
|
/** `formatExplanation` of the node's layout, which is L8's answer. */
|
|
1481
1685
|
readonly explanation: string;
|
|
1482
1686
|
/**
|
|
@@ -1510,6 +1714,13 @@ interface UiOwnerReport {
|
|
|
1510
1714
|
* needs to write a component's use back as code: `label="Email"`.
|
|
1511
1715
|
*/
|
|
1512
1716
|
readonly inputs?: Readonly<Record<string, UiOwnerInput>>;
|
|
1717
|
+
/**
|
|
1718
|
+
* What the component says its inputs hold now, as it keeps them
|
|
1719
|
+
* (`liveInput`): a switch a person turned on, a list scrolled to 600.
|
|
1720
|
+
* Plain values only. What a design tool saves a moment of a played
|
|
1721
|
+
* screen from.
|
|
1722
|
+
*/
|
|
1723
|
+
readonly live?: Readonly<Record<string, string | number | boolean | null>>;
|
|
1513
1724
|
}
|
|
1514
1725
|
/** One input's value in an owner report; see `UiOwnerReport.inputs`. */
|
|
1515
1726
|
type UiOwnerInput = string | number | boolean | null | {
|
|
@@ -1625,6 +1836,10 @@ interface UiEnvironmentReport {
|
|
|
1625
1836
|
/** Whether this node provides the value rather than inheriting it. */
|
|
1626
1837
|
readonly provided: boolean;
|
|
1627
1838
|
}
|
|
1839
|
+
interface UiInteractionReport {
|
|
1840
|
+
readonly hovered?: Readonly<Record<string, unknown>>;
|
|
1841
|
+
readonly pressed?: Readonly<Record<string, unknown>>;
|
|
1842
|
+
}
|
|
1628
1843
|
interface UiSemanticsReport {
|
|
1629
1844
|
readonly role?: string;
|
|
1630
1845
|
readonly label?: string;
|
|
@@ -1707,6 +1922,9 @@ type ShellRequest = {
|
|
|
1707
1922
|
} | {
|
|
1708
1923
|
type: 'leaveWarning';
|
|
1709
1924
|
on: boolean;
|
|
1925
|
+
} | {
|
|
1926
|
+
type: 'colorScheme';
|
|
1927
|
+
preference: ColorSchemePreference;
|
|
1710
1928
|
} | {
|
|
1711
1929
|
type: 'popup';
|
|
1712
1930
|
id: number;
|
|
@@ -1894,6 +2112,8 @@ declare class ShellService {
|
|
|
1894
2112
|
private handler;
|
|
1895
2113
|
/** What `warnOnLeave` last said. */
|
|
1896
2114
|
private leaving;
|
|
2115
|
+
/** What `preferColorScheme` last asked for; null until it is asked. */
|
|
2116
|
+
private preferred;
|
|
1897
2117
|
private readonly scheme;
|
|
1898
2118
|
private readonly contrastState;
|
|
1899
2119
|
private readonly pointerState;
|
|
@@ -2145,6 +2365,26 @@ declare class ShellService {
|
|
|
2145
2365
|
* nothing.
|
|
2146
2366
|
*/
|
|
2147
2367
|
warnOnLeave(on: boolean): void;
|
|
2368
|
+
/**
|
|
2369
|
+
* Asks the shell to report this appearance from now on: `light` or
|
|
2370
|
+
* `dark` whatever the platform says, or `auto` to follow the platform
|
|
2371
|
+
* again. `colorScheme` then reports the answer, as it does when the
|
|
2372
|
+
* host calls `setColorScheme`, which is the same switch.
|
|
2373
|
+
*
|
|
2374
|
+
* For an application whose appearance setting is its own and stored:
|
|
2375
|
+
* the host reads the stored choice before the first frame and starts
|
|
2376
|
+
* with it (`createApp({ colorScheme })`), and the application, where
|
|
2377
|
+
* the person changes it, says so here. Without this, an application in
|
|
2378
|
+
* a render worker could not take back an override the host started it
|
|
2379
|
+
* with, and `auto` would keep reporting the stored choice instead of
|
|
2380
|
+
* the platform's. An application that stores nothing can combine its
|
|
2381
|
+
* choice with `colorScheme` instead and never call this.
|
|
2382
|
+
*
|
|
2383
|
+
* A request, because the media query is the window's; and a state,
|
|
2384
|
+
* like `warnOnLeave`, so a shell that arrives after it was asked is
|
|
2385
|
+
* told. Asking for the same thing twice sends nothing.
|
|
2386
|
+
*/
|
|
2387
|
+
preferColorScheme(preference: ColorSchemePreference): void;
|
|
2148
2388
|
/** Called by the runtime when the shell reports the state. Not for applications. */
|
|
2149
2389
|
applyFullscreen(active: boolean): void;
|
|
2150
2390
|
/**
|
|
@@ -2329,6 +2569,11 @@ interface AnimateOptions {
|
|
|
2329
2569
|
reducedMotion?: UiReducedMotionPolicy;
|
|
2330
2570
|
/** Wait this long before the first sample; see `UiAnimationOptions.delay`. */
|
|
2331
2571
|
delay?: number;
|
|
2572
|
+
/**
|
|
2573
|
+
* The clock it runs on, where it is drawn: `ctx.environment(UiEnvironmentKeys.clock)`
|
|
2574
|
+
* in a component, `clockOf(node)` from a node. Real time without one. See `UiClock`.
|
|
2575
|
+
*/
|
|
2576
|
+
clock?: UiClock | null;
|
|
2332
2577
|
}
|
|
2333
2578
|
interface SpringOptions {
|
|
2334
2579
|
/** A named spring, or one given outright. Defaults to `snappy`. */
|
|
@@ -2343,6 +2588,11 @@ interface SpringOptions {
|
|
|
2343
2588
|
reducedMotion?: UiReducedMotionPolicy;
|
|
2344
2589
|
/** Wait this long before the first sample; see `UiAnimationOptions.delay`. */
|
|
2345
2590
|
delay?: number;
|
|
2591
|
+
/**
|
|
2592
|
+
* The clock it runs on, where it is drawn: `ctx.environment(UiEnvironmentKeys.clock)`
|
|
2593
|
+
* in a component, `clockOf(node)` from a node. Real time without one. See `UiClock`.
|
|
2594
|
+
*/
|
|
2595
|
+
clock?: UiClock | null;
|
|
2346
2596
|
}
|
|
2347
2597
|
/**
|
|
2348
2598
|
* Animation, as a store components can inject.
|
|
@@ -2382,6 +2632,13 @@ declare class AnimationService {
|
|
|
2382
2632
|
* animation drives a cell, which has no node — see `UiMotion`.
|
|
2383
2633
|
*/
|
|
2384
2634
|
setMotion(motion: UiMotion): void;
|
|
2635
|
+
private motionListener;
|
|
2636
|
+
/**
|
|
2637
|
+
* Called by the runtime, which provides the vocabulary at its root so
|
|
2638
|
+
* a name in a `transition` or a `motion` state resolves to it too; a
|
|
2639
|
+
* part of the tree may provide its own over it (`UiEnvironmentKeys.motion`).
|
|
2640
|
+
*/
|
|
2641
|
+
setMotionListener(listener: ((motion: UiMotion) => void) | null): void;
|
|
2385
2642
|
get motion(): UiMotion;
|
|
2386
2643
|
/**
|
|
2387
2644
|
* Turns reduced motion on or off for this runtime.
|
|
@@ -3476,6 +3733,8 @@ declare class GessoRuntime {
|
|
|
3476
3733
|
private lastEarlyFrame;
|
|
3477
3734
|
/** When the last discrete input was routed; see `answerInput`. */
|
|
3478
3735
|
private lastDiscreteInput;
|
|
3736
|
+
/** The wheel's steps since the last frame, added together; see `wheel`. */
|
|
3737
|
+
private heldWheel;
|
|
3479
3738
|
/** The display time the frame being drawn is for; see `FrameMetrics.time`. */
|
|
3480
3739
|
private frameTime;
|
|
3481
3740
|
/** When the frame's first phase began, before its changes were collected; see `FrameMetrics.durationMs`. */
|
|
@@ -3580,6 +3839,11 @@ declare class GessoRuntime {
|
|
|
3580
3839
|
* them. Only populated while a listener is attached.
|
|
3581
3840
|
*/
|
|
3582
3841
|
private semanticsBoxes;
|
|
3842
|
+
/** When a frame last moved something, and when the boxes were last swept; see `updateSemantics`. */
|
|
3843
|
+
private semanticsMovedAt;
|
|
3844
|
+
private semanticsSweptAt;
|
|
3845
|
+
/** The sweep owed once a run of moving frames stops. */
|
|
3846
|
+
private semanticsSweepTimer;
|
|
3583
3847
|
/** What each semantics walk leaves for the next; see `SemanticsMemory`. */
|
|
3584
3848
|
private readonly semanticsMemory;
|
|
3585
3849
|
private lastFocusedId;
|
|
@@ -3626,6 +3890,10 @@ declare class GessoRuntime {
|
|
|
3626
3890
|
* lays out, whichever comes first; see `resize`.
|
|
3627
3891
|
*/
|
|
3628
3892
|
private laidOutOnce;
|
|
3893
|
+
/** Frames in a row that threw; see `reportFrameError`. */
|
|
3894
|
+
private framesFailed;
|
|
3895
|
+
/** Nodes that declare `holdUnseen`, as frames have found them; see `updateHolds`. */
|
|
3896
|
+
private readonly holdable;
|
|
3629
3897
|
constructor(options: GessoRuntimeOptions);
|
|
3630
3898
|
/**
|
|
3631
3899
|
* Aligns patch delivery from worker-owned channels to the frame.
|
|
@@ -3761,6 +4029,25 @@ declare class GessoRuntime {
|
|
|
3761
4029
|
* refresh either.
|
|
3762
4030
|
*/
|
|
3763
4031
|
answerInput(): void;
|
|
4032
|
+
/**
|
|
4033
|
+
* A step of the wheel, or of a trackpad's two fingers or its pinch,
|
|
4034
|
+
* held until the frame and added to the others that arrive before it.
|
|
4035
|
+
*
|
|
4036
|
+
* A trackpad sends a step on every refresh, and a handler that takes
|
|
4037
|
+
* longer than a refresh over one (a design tool's board zoomed over
|
|
4038
|
+
* hundreds of frames, each of whose names it scales) fell behind for
|
|
4039
|
+
* good: each step waited for the one before it, the frame waited for
|
|
4040
|
+
* them all, and a pinch drew nothing until the fingers stopped, then
|
|
4041
|
+
* jumped. Held, the steps that queue while the handler runs are one
|
|
4042
|
+
* step at the next frame, so the handler runs once a frame however
|
|
4043
|
+
* many arrive, and what it draws follows the fingers a frame at a
|
|
4044
|
+
* time. A step with other modifiers or in another unit is not added
|
|
4045
|
+
* to the held one but follows it, and any other input lets the held
|
|
4046
|
+
* step go first (`releaseWheel`), so nothing is answered out of order.
|
|
4047
|
+
*/
|
|
4048
|
+
wheel(...step: Parameters<UiWheelController['wheel']>): void;
|
|
4049
|
+
/** Hands the held wheel step to the input now, before what follows it; see `wheel`. */
|
|
4050
|
+
releaseWheel(): void;
|
|
3764
4051
|
/** Draws the pending frame in a task of its own, if the guards in `answerInput` allow. */
|
|
3765
4052
|
private drawEarly;
|
|
3766
4053
|
/**
|
|
@@ -4089,6 +4376,8 @@ declare class GessoRuntime {
|
|
|
4089
4376
|
private pathOf;
|
|
4090
4377
|
/** The components that rendered a node, nearest first. */
|
|
4091
4378
|
private sourceReport;
|
|
4379
|
+
/** The props the node's `interactive` modifiers write while hovered and pressed, later ones over earlier. */
|
|
4380
|
+
private interactionOf;
|
|
4092
4381
|
private ownersOf;
|
|
4093
4382
|
private propsOf;
|
|
4094
4383
|
/**
|
|
@@ -4167,7 +4456,9 @@ declare class GessoRuntime {
|
|
|
4167
4456
|
* reconciles rather than recreating, so a component whose class is
|
|
4168
4457
|
* the same object as before keeps its host and its `internalState`;
|
|
4169
4458
|
* one whose module was replaced is a different class, and its host
|
|
4170
|
-
* is disposed and mounted again
|
|
4459
|
+
* is disposed and mounted again with everything it rendered: its body
|
|
4460
|
+
* made new objects for its children, and a child kept from before
|
|
4461
|
+
* would go on holding the old ones. Scroll offsets on containers that
|
|
4171
4462
|
* survive are kept, because the node is kept. Component state in a
|
|
4172
4463
|
* replaced module is lost, which is the honest cost and the reason
|
|
4173
4464
|
* this is a development tool.
|
|
@@ -4273,6 +4564,13 @@ declare class GessoRuntime {
|
|
|
4273
4564
|
*/
|
|
4274
4565
|
applyFileDrop(message: UiFileDropMessage): void;
|
|
4275
4566
|
applySemanticsAction(action: UiSemanticsAction): void;
|
|
4567
|
+
/**
|
|
4568
|
+
* A semantics action on a node: the mirror's, or `InspectionService.act`'s
|
|
4569
|
+
* on a node with no record of its own. False when it did not take: focus
|
|
4570
|
+
* refused (an open dialog's trap holds it elsewhere), or a field that
|
|
4571
|
+
* takes no text.
|
|
4572
|
+
*/
|
|
4573
|
+
private actOn;
|
|
4276
4574
|
/**
|
|
4277
4575
|
* An action on an inline link, which is a run and not a node.
|
|
4278
4576
|
*
|
|
@@ -4381,6 +4679,29 @@ declare class GessoRuntime {
|
|
|
4381
4679
|
* missing, rather than by scanning every key for the prefix.
|
|
4382
4680
|
*/
|
|
4383
4681
|
private semanticIdsUnder;
|
|
4682
|
+
/**
|
|
4683
|
+
* The boxes for a frame that moved something but changed no meaning:
|
|
4684
|
+
* all of them when it is the first move after a rest, and otherwise
|
|
4685
|
+
* only the focused node's, with the sweep owed for when the moving
|
|
4686
|
+
* stops (`SEMANTICS_SETTLE_MS`), or for when the boxes have been stale
|
|
4687
|
+
* too long (`SEMANTICS_MOST_STALE_MS`).
|
|
4688
|
+
*
|
|
4689
|
+
* A pan or a zoom moves every box under the camera on every frame. In
|
|
4690
|
+
* Atelier, a board of three dozen screens panned at 15%, the sweep was
|
|
4691
|
+
* 3 to 4 ms of a 4 to 6 ms frame, with frames to 13 ms, past a 120 Hz
|
|
4692
|
+
* display's 8.3; and the main thread wrote four styles on each of 545
|
|
4693
|
+
* elements per frame, which in Chromium was 45% of that thread while
|
|
4694
|
+
* it also had the wheel events to deliver. Nobody reads the rectangle
|
|
4695
|
+
* of an element that is moving under a pan: a screen reader's cursor
|
|
4696
|
+
* is on what it rests on. The focused node is the exception, since its
|
|
4697
|
+
* focus ring is drawn from its element, so it moves every frame.
|
|
4698
|
+
*/
|
|
4699
|
+
private movedSemanticsBoxes;
|
|
4700
|
+
/** Sweeps the boxes once the moving has stopped, and sends what changed. */
|
|
4701
|
+
private scheduleSemanticsSweep;
|
|
4702
|
+
private sweepSemanticsBoxes;
|
|
4703
|
+
/** The focused node's box when it differs from the one last sent, as `collectSemanticsBoxes` would give it. */
|
|
4704
|
+
private focusedSemanticsBox;
|
|
4384
4705
|
/**
|
|
4385
4706
|
* The mirrored nodes whose box differs from the one last sent, and
|
|
4386
4707
|
* which are on screen.
|
|
@@ -4543,6 +4864,17 @@ declare class GessoRuntime {
|
|
|
4543
4864
|
/** Applies what waits for settled boxes: a reload's focus, then the reveals asked for. */
|
|
4544
4865
|
private finishSettling;
|
|
4545
4866
|
private warnLayoutPasses;
|
|
4867
|
+
/**
|
|
4868
|
+
* Holds each subtree that declares `holdUnseen` while it cannot be
|
|
4869
|
+
* read, and lets it go on the frame it can (see `UiGraph.hold`).
|
|
4870
|
+
*
|
|
4871
|
+
* Decided after the frame is drawn, from where it was drawn: a subtree
|
|
4872
|
+
* is only ever held once it has been laid out and painted, so what is
|
|
4873
|
+
* kept of it is what it showed, and one let go catches up on the next
|
|
4874
|
+
* frame, which its own marks arm. Only frames that moved or laid
|
|
4875
|
+
* something out can change the answer, so the rest pay nothing.
|
|
4876
|
+
*/
|
|
4877
|
+
private updateHolds;
|
|
4546
4878
|
private handleFrame;
|
|
4547
4879
|
/**
|
|
4548
4880
|
* Keeps frames coming while something is animating.
|
|
@@ -5276,6 +5608,16 @@ type RuntimeToShellMessage = {
|
|
|
5276
5608
|
type: 'leaveWarning';
|
|
5277
5609
|
on: boolean;
|
|
5278
5610
|
} |
|
|
5611
|
+
/**
|
|
5612
|
+
* Report this appearance from now on (ShellService.preferColorScheme):
|
|
5613
|
+
* `light` or `dark`, or `auto` to follow `prefers-color-scheme` again.
|
|
5614
|
+
* The shell does what `WorkerApp.setColorScheme` does, and answers
|
|
5615
|
+
* with `colorScheme`.
|
|
5616
|
+
*/
|
|
5617
|
+
{
|
|
5618
|
+
type: 'preferColorScheme';
|
|
5619
|
+
preference: ColorSchemePreference;
|
|
5620
|
+
} |
|
|
5279
5621
|
/**
|
|
5280
5622
|
* Open a sized, named window and report back whether the browser
|
|
5281
5623
|
* allowed it (ShellService.openPopup).
|
|
@@ -6730,6 +7072,8 @@ declare class GessoApp {
|
|
|
6730
7072
|
/** The appearance this shell reports; watched or overridden. */
|
|
6731
7073
|
private colorSchemePreference;
|
|
6732
7074
|
constructor(options: GessoAppOptions);
|
|
7075
|
+
/** Runs a pending frame now: see `FrameService.flush`. */
|
|
7076
|
+
private flushFrame;
|
|
6733
7077
|
/**
|
|
6734
7078
|
* The running app, as the agent's screen tools need it: its semantics
|
|
6735
7079
|
* tree and focus, the mirror's actions, keys, and a way to run a
|
|
@@ -7619,10 +7963,24 @@ declare function persisted<T>(adapter: StorageAdapter, key: string, options: Per
|
|
|
7619
7963
|
*/
|
|
7620
7964
|
declare class FrameService {
|
|
7621
7965
|
private readonly subject;
|
|
7966
|
+
private flusher;
|
|
7622
7967
|
/** Emits after each frame finishes, with what it cost and what it answered. */
|
|
7623
7968
|
readonly frames: Observable<FrameMetrics>;
|
|
7624
7969
|
/** Called by the runtime; not for components. */
|
|
7625
7970
|
publish(metrics: FrameMetrics): void;
|
|
7971
|
+
/** Called by the shell that drives the frames; not for components. */
|
|
7972
|
+
setFlush(flush: (() => void) | null): void;
|
|
7973
|
+
/**
|
|
7974
|
+
* Draws a pending frame now, rather than when the display next asks
|
|
7975
|
+
* for one; nothing when none is pending.
|
|
7976
|
+
*
|
|
7977
|
+
* A tab in the background is sent no frames. A design editor's tool,
|
|
7978
|
+
* called by an agent while the editor's window is behind another,
|
|
7979
|
+
* changes the screen and waits for it to be drawn before reading it:
|
|
7980
|
+
* without this, it waits for a frame that never comes. The agent's
|
|
7981
|
+
* own screen tools (`uiSurface`) do the same after each action.
|
|
7982
|
+
*/
|
|
7983
|
+
flush(): void;
|
|
7626
7984
|
}
|
|
7627
7985
|
//#endregion
|
|
7628
7986
|
//#region src/app/InspectionService.d.ts
|
|
@@ -7655,6 +8013,15 @@ declare class InspectionService {
|
|
|
7655
8013
|
* was used (`owners[].usedAt`).
|
|
7656
8014
|
*/
|
|
7657
8015
|
inspect(node: UiNode): UiNodeReport;
|
|
8016
|
+
/**
|
|
8017
|
+
* Why the node has the size it has, as the layout decided it: for
|
|
8018
|
+
* each axis, the rule that fixed it (`decidedBy`: its own length, a
|
|
8019
|
+
* flex share, a stretch across its parent, its content, a clamp) and
|
|
8020
|
+
* the sentences that say so. What a design tool needs to tell an
|
|
8021
|
+
* element that fills its parent from one that only happens to be as
|
|
8022
|
+
* wide, which the box alone cannot. Null before the node is laid out.
|
|
8023
|
+
*/
|
|
8024
|
+
explain(node: UiNode): LayoutExplanation | null;
|
|
7658
8025
|
/**
|
|
7659
8026
|
* Where the node is drawn, as `inspect(node).box` reports it, without
|
|
7660
8027
|
* the rest of the report: for an editor that reads the boxes of many
|
|
@@ -7667,6 +8034,21 @@ declare class InspectionService {
|
|
|
7667
8034
|
readonly width: number;
|
|
7668
8035
|
readonly height: number;
|
|
7669
8036
|
};
|
|
8037
|
+
/**
|
|
8038
|
+
* Where the node is seen on the screen: `box` with every transform
|
|
8039
|
+
* above it applied, so a node in a frame drawn at half its size is
|
|
8040
|
+
* half its size, where it is drawn. What an overlay laid over the
|
|
8041
|
+
* live tree is placed by (an outline on the component under the
|
|
8042
|
+
* pointer). `box` keeps the untransformed box, which is where the
|
|
8043
|
+
* node is in the layout: what an editor reading a zoomed board in
|
|
8044
|
+
* the board's own coordinates (a minimap) needs.
|
|
8045
|
+
*/
|
|
8046
|
+
screenBox(node: UiNode): {
|
|
8047
|
+
readonly x: number;
|
|
8048
|
+
readonly y: number;
|
|
8049
|
+
readonly width: number;
|
|
8050
|
+
readonly height: number;
|
|
8051
|
+
};
|
|
7670
8052
|
/**
|
|
7671
8053
|
* Draws a node as though it declared `value` for `property`, until
|
|
7672
8054
|
* the preview is ended or the node leaves the tree.
|
|
@@ -7681,11 +8063,43 @@ declare class InspectionService {
|
|
|
7681
8063
|
preview(node: UiNode, property: string, value: unknown): void;
|
|
7682
8064
|
/** Ends a preview of one property, or of every property previewed on the node. */
|
|
7683
8065
|
endPreview(node: UiNode, property?: string): void;
|
|
8066
|
+
/**
|
|
8067
|
+
* Draws a component as though its parent passed `inputs`, over what
|
|
8068
|
+
* the parent did pass, until the preview is ended or the component
|
|
8069
|
+
* leaves the tree. The component is named by its anchor, as
|
|
8070
|
+
* `inspect(node).owners[].anchorId` gives it.
|
|
8071
|
+
*
|
|
8072
|
+
* What a design editor shows when a component on a played screen is
|
|
8073
|
+
* jumped to one of its states (Filled, Error, Disabled): the same
|
|
8074
|
+
* instance, still live, given that state's inputs, and the inputs it
|
|
8075
|
+
* was written with back when the preview ends. A later preview of the
|
|
8076
|
+
* same component replaces this one. The names and values are props',
|
|
8077
|
+
* as JSX would write them. An anchor no component holds is ignored.
|
|
8078
|
+
*/
|
|
8079
|
+
previewInputs(anchorId: string, inputs: Readonly<Record<string, unknown>>): void;
|
|
8080
|
+
/** Ends a preview of a component's inputs: its parent's are its own again. */
|
|
8081
|
+
endInputPreview(anchorId: string): void;
|
|
8082
|
+
/**
|
|
8083
|
+
* Presses a node, or replaces the text of the field it is, as a
|
|
8084
|
+
* person would: a click at the middle of where it is drawn, which
|
|
8085
|
+
* its handlers and every handler above it get, or the edit a
|
|
8086
|
+
* keyboard makes once it has focus. The path the accessibility
|
|
8087
|
+
* mirror's actions take, for any node in the tree, record or not.
|
|
8088
|
+
*
|
|
8089
|
+
* What a design editor's agent does to play a prototype in its live
|
|
8090
|
+
* frames: a row pressed, an email typed, by a node it found with
|
|
8091
|
+
* `nodesAt` or by walking the tree. False when it did not take: a
|
|
8092
|
+
* node no longer in the tree, or a field that could not have focus
|
|
8093
|
+
* because an open dialog's trap holds it, or takes no text.
|
|
8094
|
+
*/
|
|
8095
|
+
act(node: UiNode, action: 'click' | 'setValue', value?: string): boolean;
|
|
7684
8096
|
}
|
|
7685
8097
|
/** What the runtime gives the service. */
|
|
7686
8098
|
interface InspectionHost {
|
|
7687
8099
|
nodesAt(x: number, y: number): readonly UiNode[];
|
|
7688
8100
|
inspect(node: UiNode): UiNodeReport;
|
|
8101
|
+
/** Why the node has its size, as the layout engine explains it. */
|
|
8102
|
+
explain?(node: UiNode): LayoutExplanation | null;
|
|
7689
8103
|
/** The node's box alone, as `inspect` reports it. */
|
|
7690
8104
|
box?(node: UiNode): {
|
|
7691
8105
|
readonly x: number;
|
|
@@ -7693,8 +8107,18 @@ interface InspectionHost {
|
|
|
7693
8107
|
readonly width: number;
|
|
7694
8108
|
readonly height: number;
|
|
7695
8109
|
};
|
|
8110
|
+
/** The node's box with the transforms above it applied. */
|
|
8111
|
+
screenBox?(node: UiNode): {
|
|
8112
|
+
readonly x: number;
|
|
8113
|
+
readonly y: number;
|
|
8114
|
+
readonly width: number;
|
|
8115
|
+
readonly height: number;
|
|
8116
|
+
};
|
|
7696
8117
|
preview?(node: UiNode, property: string, value: unknown): void;
|
|
7697
8118
|
endPreview?(node: UiNode, property?: string): void;
|
|
8119
|
+
/** Null ends the preview. */
|
|
8120
|
+
previewInputs?(anchorId: string, inputs: Readonly<Record<string, unknown>> | null): void;
|
|
8121
|
+
act?(node: UiNode, action: 'click' | 'setValue', value?: string): boolean;
|
|
7698
8122
|
}
|
|
7699
8123
|
//#endregion
|
|
7700
8124
|
//#region src/app/videoClock.d.ts
|
|
@@ -8235,6 +8659,17 @@ declare class EditingService {
|
|
|
8235
8659
|
* all three of which happen during the frame a field first appears.
|
|
8236
8660
|
*/
|
|
8237
8661
|
caretRectOf(node: UiNode | null, offset?: number): CaretRect | null;
|
|
8662
|
+
/**
|
|
8663
|
+
* The caret position nearest a point in a field, the point given as a
|
|
8664
|
+
* pointer event gives it: where a press there would put the caret.
|
|
8665
|
+
*
|
|
8666
|
+
* What a field opened over text the person pointed at uses to start
|
|
8667
|
+
* the caret where they pointed: ask once the field is laid out, then
|
|
8668
|
+
* `select` that offset. Null when the node is not an editable, when it
|
|
8669
|
+
* has not been laid out yet, or before the runtime has wired the
|
|
8670
|
+
* controller: "ask again next frame", as for `caretRectOf`.
|
|
8671
|
+
*/
|
|
8672
|
+
offsetNear(node: UiNode | null, x: number, y: number): number | null;
|
|
8238
8673
|
/**
|
|
8239
8674
|
* Selects from `anchor` to `focus` and focuses the field the focus is
|
|
8240
8675
|
* in: within one field, or across the fields of an editing group (see
|
|
@@ -8274,25 +8709,6 @@ declare class ScrollService {
|
|
|
8274
8709
|
}
|
|
8275
8710
|
//#endregion
|
|
8276
8711
|
//#region src/app/FocusService.d.ts
|
|
8277
|
-
/**
|
|
8278
|
-
* Keyboard focus, as a store components can inject.
|
|
8279
|
-
*
|
|
8280
|
-
* `UiFocusManager` lives in the runtime and a component cannot reach
|
|
8281
|
-
* it — components reach the world through stores, as they do for the
|
|
8282
|
-
* clipboard (`ShellService`), overlays (`OverlayService`) and find
|
|
8283
|
-
* (`FindService`). Without this a component cannot autofocus a field,
|
|
8284
|
-
* trap the keyboard in a dialog, or put the caret in the input that
|
|
8285
|
-
* failed validation.
|
|
8286
|
-
*
|
|
8287
|
-
* Nodes come from a `ref` prop. A tree's refs fire before the runtime
|
|
8288
|
-
* installs the manager, so an action taken during the first build is
|
|
8289
|
-
* queued and replayed once there is one; that is the same problem
|
|
8290
|
-
* `FindService` solves for its query field, and the reason `autoFocus`
|
|
8291
|
-
* in a dialog works on the frame it mounts.
|
|
8292
|
-
*
|
|
8293
|
-
* It must stay on the render thread: its actions take `UiNode`s, which
|
|
8294
|
-
* never cross a worker boundary.
|
|
8295
|
-
*/
|
|
8296
8712
|
declare class FocusService {
|
|
8297
8713
|
/** The node holding focus, or null. A control binds its focus ring to this. */
|
|
8298
8714
|
readonly focused: InternalState<UiNode | null>;
|
|
@@ -8326,6 +8742,12 @@ declare class FocusService {
|
|
|
8326
8742
|
focusNext(): void;
|
|
8327
8743
|
/** Moves focus to the previous focusable node, wrapping around. */
|
|
8328
8744
|
focusPrevious(): void;
|
|
8745
|
+
/**
|
|
8746
|
+
* The tab stops under `within` (the whole tree when not given), in
|
|
8747
|
+
* the order Tab visits them: what a design tool numbers to show a
|
|
8748
|
+
* screen's keyboard order. Empty before the runtime has a manager.
|
|
8749
|
+
*/
|
|
8750
|
+
tabStops(within?: UiNode): UiNode[];
|
|
8329
8751
|
/**
|
|
8330
8752
|
* Confines focus to `scope` until `releaseTrap`, moving it inside if
|
|
8331
8753
|
* it was elsewhere. Traps nest: a dialog opened over a dialog traps
|
|
@@ -8988,5 +9410,5 @@ declare class RenderWorkerApp {
|
|
|
8988
9410
|
private initialize;
|
|
8989
9411
|
}
|
|
8990
9412
|
//#endregion
|
|
8991
|
-
export { OpfsStorageOptions as $, BoundStream as $n,
|
|
8992
|
-
//# sourceMappingURL=index-
|
|
9413
|
+
export { OpfsStorageOptions as $, BoundStream as $n, ThemeTokenCell as $r, RendererChoice as $t, observeReducedMotion as A, DeriveOptions as Ai, AudioMetadata as An, OverlayRect as Ar, ShellHistory as At, InspectionHost as B, UiEasingChoice as Bn, findUnplainPath as Br, DevtoolsRequest as Bt, writeClipboard as C, FanOut as Ci, route as Cn, StartingInputsByName as Cr, GessoAppBuilder as Ct, TextService as D, ComputedOptions as Di, formatUrl as Dn, OverlayScopeProps as Dr, AppLogicEndpoint as Dt, EditingService as E, ComputedCell as Ei, buildPath as En, OverlayScope as Er, createApp as Et, AudioSink as F, AudioStatus as Fn, pick as Fr, ActionEntry as Ft, persisted as G, ShellRecentFile as Gn, Input as Gr, treeText as Gt, FrameService as H, ShellFileRequest as Hn, Channel as Hr, PatchEntry as Ht, AudioSinkOptions as I, AnimateOptions as In, pickKeys as Ir, ChannelErrorEntry as It, IndexedDbStorage as J, ShellStorageOp as Jn, SharedValuesKey as Jr, ShellToRuntimeMessage as Jt, ShellStorage as K, ShellRequest as Kn, Output as Kr, RuntimeErrorSource as Kt, AudioSinkOutput as L, AnimationService as Ln, ChannelRegistration as Lr, CommandEntry as Lt, PresenceProps as M, derive as Mi, AudioSample as Mn, OverlayService as Mr, ShellHistoryOptions as Mt, RouterOutlet as N, AudioService as Nn, createComponent as Nr, createShellHistory as Nt, FindService as O, ReadSource as Oi, parseUrl as On, OverlayEntry as Or, WorkerApp as Ot, AudioElementLike as P, AudioState as Pn, structurallyEqual as Pr, ActionCause as Pt, OpfsStorage as Q, observeColorScheme as Qn, controlled as Qr, GessoRuntimeOptions as Qt, MediaSessionLike as R, SpringOptions as Rn, ChannelRegistryHandle as Rr, ConsoleEntry as Rt, EditingProxySink as S, FanKey as Si, RouteTarget as Sn, StartingInputsProps as Sr, createSyncApp as St, ScrollService as T, fanOut as Ti, RouteParams as Tn, StartingInputsRecord as Tr, CreateAppOptions as Tt, PersistedOptions as U, ShellFileResult as Un, Define as Ur, UiTreeNode as Ut, InspectionService as V, ShellFile as Vn, requirePlainData as Vr, FrameEntry as Vt, PersistedState as W, ShellFileType as Wn, Inject as Wr, UiTreeSnapshot as Wt, OpfsDirectory as X, ColorScheme as Xn, ControlledOptions as Xr, FramePhaseTimings as Xt, IndexedDbStorageOptions as Y, ShellStorageResult as Yn, sharedValue as Yr, FrameMetrics as Yt, OpfsFileHandle as Z, ColorSchemePreference as Zn, ControlledValue as Zr, GessoRuntime as Zt, renderRoot as _, ResourceStatus as _i, OutletProps as _n, ComponentHostResolver as _r, ShellLocalStore as _t, UiRole as a, Each as ai, FontFamilyDeclaration as an, UiOwnerReport as ar, classifyStorageError as at, SemanticsMirrorSink as b, select as bi, RouteGuard as bn, liveInput as br, GessoApp as bt, UiSemanticsPatch as c, each as ci, FontService as cn, UiSemanticsReport as cr, storageReadValue as ct, markNow as d, MutateOptions as di, RouteAnswer as dn, formatAge as dr, UndoableOptions as dt, themeTokenCell as ei, RuntimeInput as en, NodePathTarget as er, OpfsWritable as et, measureSpan as f, Mutation as fi, RouteMatch as fn, formatNodePath as fr, undoable as ft, RenderWorkerError as g, ResourceState as gi, RouteState as gn, printPropValue as gr, rememberedDirectory as gt, RenderWorkerApp as h, ResourceOptions as hi, RouterService as hn, formatStream as hr, UndoTransaction as ht, UI_SEMANTIC_STATES as i, show as ii, FontFaceLike as in, UiOwnerInput as ir, StorageRead as it, Presence as j, Equality as ji, AudioRequest as jn, OverlayScopeKey as jr, ShellHistoryMode as jt, observeMediaQuery as k, computed as ki, AudioAction as kn, OverlayPlacement as kr, WorkerAppOptions as kt, UiSemanticsRecord$1 as l, debounced as li, MediaOptions as ln, UiStreamReport as lr, UndoShortcutOptions as lt, setPerformanceMarks$1 as m, Resource as mi, RouterRoutes as mn, formatSourceLocation as mr, UndoStackOptions as mt, MARK_PREFIX as n, Show as ni, UiFramePhase as nn, UiInteractionReport as nr, StorageAdapter as nt, UiSemanticState as o, EachKey as oi, FontFamilyStatus as on, UiPropOrigin as or, storageErrorMessage as ot, performanceMarksEnabled as p, mutate as pi, RouterHistorySink as pn, formatNodeReport as pr, UndoStack as pt, ShellStorageOptions as q, ShellService as qn, SharedValues as qr, RuntimeToShellMessage as qt, UI_ROLES as r, ShowProps as ri, FontFaceDeclaration as rn, UiNodeReport as rr, StorageOutcome as rt, UiSemanticsMap$1 as s, EachProps as si, FontHost as sn, UiPropReport as sr, storageReadFailure as st, EditingState$1 as t, bind as ti, UI_FRAME_PHASES as tn, UiEnvironmentReport as tr, MemoryStorage as tt, markInstant as u, throttled as ui, MediaService as un, describeStream as ur, registerUndoShortcuts as ut, EditingMirrorTarget as v, resource as vi, RouteContext as vn, ComponentHost as vr, performShellStorage as vt, FocusService as w, FanOutOptions as wi, to as wn, StartingInputsKey as wr, WebMcpChoice as wt, EditingProxy as x, FanCell as xi, RouteOptions as xn, StartingInputs as xr, GessoAppOptions as xt, SemanticsMirror as y, SelectOptions as yi, RouteDefinition as yn, OverlayLayer as yr, shellStorageDenied as yt, audioClock as z, UiDuration as zn, createChannelRegistry as zr, DevtoolsEvent as zt };
|
|
9414
|
+
//# sourceMappingURL=index-C08h2Jze.d.ts.map
|