@flemo/core 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/core/TaskManger.d.ts +5 -5
  2. package/dist/core/engine/__tests__/riderSwipe.test.d.ts +1 -0
  3. package/dist/core/engine/barPartStaging.d.ts +39 -0
  4. package/dist/core/engine/cancelResume.d.ts +6 -0
  5. package/dist/core/engine/createSwipeController.d.ts +10 -0
  6. package/dist/core/engine/flightRouting.d.ts +2 -2
  7. package/dist/core/engine/layerSettleHold.d.ts +0 -1
  8. package/dist/core/engine/riderSwipe.d.ts +28 -0
  9. package/dist/core/engine/types.d.ts +1 -0
  10. package/dist/dom/__tests__/staging.test.d.ts +1 -0
  11. package/dist/dom/attributes.d.ts +57 -4
  12. package/dist/dom/staging.d.ts +33 -0
  13. package/dist/history/historyDriver.d.ts +2 -0
  14. package/dist/index.d.ts +3 -3
  15. package/dist/index.mjs +1944 -2047
  16. package/dist/platform/profile.d.ts +41 -15
  17. package/dist/screen/__tests__/partLayer.test.d.ts +1 -0
  18. package/dist/screen/computeScreenFreeze.d.ts +0 -1
  19. package/dist/screen/partLayer.d.ts +14 -0
  20. package/dist/transition/__tests__/partClockInheritance.test.d.ts +1 -0
  21. package/dist/transition/compileTransitionStyles.d.ts +9 -1
  22. package/dist/transition/gestureScrub.d.ts +33 -0
  23. package/dist/transition/partTransition/__tests__/resolvePartDefinition.test.d.ts +1 -0
  24. package/dist/transition/partTransition/createPartTransition.d.ts +4 -5
  25. package/dist/transition/partTransition/createRawPartTransition.d.ts +10 -11
  26. package/dist/transition/partTransition/partTransition.d.ts +17 -0
  27. package/dist/transition/partTransition/resolvePartClock.d.ts +41 -0
  28. package/dist/transition/partTransition/typing.d.ts +8 -2
  29. package/package.json +1 -1
  30. package/dist/core/engine/__tests__/diagnosticRegistry.test.d.ts +0 -10
  31. package/dist/core/engine/diagnosticFlags.d.ts +0 -16
  32. package/dist/core/engine/diagnosticRegistry.d.ts +0 -38
  33. package/dist/core/engine/imageRevealHold.d.ts +0 -2
  34. package/dist/morph/morphAnimations.d.ts +0 -2
  35. /package/dist/core/engine/__tests__/{createTransitionEngine.flightImageHold.test.d.ts → barPartStaging.test.d.ts} +0 -0
  36. /package/dist/core/engine/__tests__/{diagnosticFlags.test.d.ts → createSwipeController.barPartStaging.test.d.ts} +0 -0
  37. /package/dist/core/engine/__tests__/{documentedDefaults.test.d.ts → createSwipeController.dragRiders.test.d.ts} +0 -0
  38. /package/dist/core/engine/__tests__/{imageRevealHold.test.d.ts → createTransitionEngine.barPartStaging.test.d.ts} +0 -0
  39. /package/dist/{morph/__tests__/morphAnimations.test.d.ts → core/engine/__tests__/platformDefaults.test.d.ts} +0 -0
@@ -25,6 +25,7 @@ interface Task<T> {
25
25
  status: TaskStatus;
26
26
  dependencies: string[];
27
27
  instanceId: string;
28
+ scope: string;
28
29
  abortController?: AbortController;
29
30
  backstopTimer?: ReturnType<typeof setTimeout>;
30
31
  manualResolver?: {
@@ -33,19 +34,17 @@ interface Task<T> {
33
34
  result: T;
34
35
  };
35
36
  }
37
+ export declare const BROWSER_HISTORY_LANE = "browser-history";
36
38
  export declare const TRANSITION_GATE_BACKSTOP_MS = 1200;
37
39
  declare class TaskManager {
38
40
  private tasks;
39
41
  private readonly instanceId;
40
- private isLocked;
41
- private currentTaskId;
42
- private taskQueue;
43
42
  private signalListeners;
44
43
  private pendingTaskQueue;
44
+ private lanes;
45
+ private laneOf;
45
46
  get pendingTaskIds(): string[];
46
47
  private isProcessingPending;
47
- private acquireLock;
48
- private releaseLock;
49
48
  generateTaskId(): string;
50
49
  emitSignal(signalName: string): void;
51
50
  private processPendingTasks;
@@ -73,6 +72,7 @@ declare class TaskManager {
73
72
  rollback?: () => Promise<void>;
74
73
  dependencies?: string[];
75
74
  control?: Control;
75
+ scope?: string;
76
76
  }): Promise<TaskResult<T>>;
77
77
  private gatePhases;
78
78
  markGateHeld(taskId: string): void;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Above the screens, below a morph.
3
+ *
4
+ * A morph is the focal shared element of a flight — an element the consumer
5
+ * pointed at — and a bar's chrome passing over it would be exactly backwards.
6
+ * The morph layer's own number (see @morph/attachMorph's `prepareLayer`) is the
7
+ * ceiling this sits under.
8
+ */
9
+ export declare const PART_LAYER_LEVEL = 2147482000;
10
+ export interface StagedBarParts {
11
+ /** Put every staged part back where it came from, exactly as it was. */
12
+ readonly release: () => void;
13
+ }
14
+ export interface StageBarPartsInput {
15
+ /** The screen scope the parts belong to — the passive side of the flight. */
16
+ readonly scope: HTMLElement;
17
+ /** This screen's shared bars; riding and absent ones are skipped. */
18
+ readonly bars: readonly (HTMLElement | null | undefined)[];
19
+ /** The Router's part layer, from resolvePartLayer. */
20
+ readonly layer: HTMLElement | null;
21
+ /**
22
+ * How long to wait before releasing a staging nothing came back for.
23
+ *
24
+ * A screen that is still transitional when it goes away — an aborted
25
+ * navigation, a replace that unmounts the side it replaced — never runs the
26
+ * COMPLETED drive that would return its parts, and a part left in the layer
27
+ * is a stale icon floating over the app for the rest of the session. The
28
+ * caller passes this flight's choreography span plus its own slack, so a
29
+ * long-authored part is never cut short by the backstop.
30
+ */
31
+ readonly strandedMs: number;
32
+ }
33
+ /**
34
+ * Lift this screen's matched-bar parts into the Router's part layer for the
35
+ * flight. Returns null when there is nothing to stage — no layer, no screen
36
+ * identity, or no part in a matched bar — so a flight that needs none of this
37
+ * pays for none of it.
38
+ */
39
+ export declare const stageBarParts: (input: StageBarPartsInput) => StagedBarParts | null;
@@ -1,5 +1,11 @@
1
1
  import { VariantMotion } from '../../transition/variantMotion';
2
2
  export declare const RESUME_BUDGET = 4;
3
+ /**
4
+ * Announce a re-parent that will cancel this element's animations, so
5
+ * cancel-resume treats the cancel as expected instead of recovering from it.
6
+ * The caller is responsible for the clock across its own move.
7
+ */
8
+ export declare const expectAnimationCancel: (element: HTMLElement) => void;
3
9
  export interface CancelResumeConfig {
4
10
  element: HTMLElement;
5
11
  expectedName: string;
@@ -29,6 +29,16 @@ export interface SwipeControllerConfig {
29
29
  onDragProgress?: (progress: number) => void;
30
30
  /** The release: whether it committed, and the seconds the screens settle in. */
31
31
  onDragSettle?: (committed: boolean, seconds: number) => void;
32
+ /**
33
+ * The Router scope's part layer (see @screen/partLayer), for staging the
34
+ * covered side's matched shared-bar parts while the finger is down.
35
+ *
36
+ * A drag is not a flight: the navigate status stays COMPLETED throughout, so
37
+ * the engine's own staging never arms and the previous screen's bar parts
38
+ * cross-fade under the screen being dragged off them. Omitted by a binding
39
+ * that renders no layer; the drag then behaves as it did before.
40
+ */
41
+ getPartLayer?: () => HTMLElement | null;
32
42
  }
33
43
  export interface SwipeController {
34
44
  pointerDown: (event: PointerEvent) => void;
@@ -54,7 +54,7 @@ export interface FlightRouting {
54
54
  * drops and double-steps the eye reads as trembling.
55
55
  */
56
56
  readonly framePacingKeepalive: boolean;
57
- /** Arm the creep head beside the governed one (`flemo:creep`). */
57
+ /** Arm the creep head beside the governed one. */
58
58
  readonly creepHead: boolean;
59
59
  }
60
60
  export interface FlightRoutingInput {
@@ -71,7 +71,7 @@ export interface FlightRoutingInput {
71
71
  * WHICH HEAD KIT this session plays, and how long its flat head is.
72
72
  *
73
73
  * Extracted so it has exactly one definition. It is a pure function of the
74
- * platform, the diagnostic flags and the status — nothing about the flight —
74
+ * platform and the status — nothing about the flight —
75
75
  * and the MORPH runtime needs the same answer at a moment when it cannot get
76
76
  * it from the DOM: the head is announced by an attribute on the root, and the
77
77
  * engine writes that attribute from the SAME commit the morph is staged in.
@@ -1,5 +1,4 @@
1
1
  import { Transition } from '../../transition/typing';
2
- export { resetResidentLayersForTesting } from './diagnosticFlags';
3
2
  export declare const LAYER_SETTLE_MS = 300;
4
3
  export declare const holdScopeLayer: (scope: HTMLElement, transitionLike: Pick<Transition, "initial" | "variants">, containment?: boolean, owner?: symbol) => void;
5
4
  export declare const releaseScopeLayerAfterSettle: (scope: HTMLElement, owner?: symbol) => void;
@@ -0,0 +1,28 @@
1
+ import { VariantMotion } from '../../transition/variantMotion';
2
+ export interface RiderSwipe {
3
+ /** Whether anything is actually being driven. */
4
+ readonly active: boolean;
5
+ /** Move every rider to this fraction of its travel (0 → 1). */
6
+ scrub: (progress: number) => void;
7
+ /**
8
+ * Hand the riders back at the speed the release settled at.
9
+ *
10
+ * `commit` plays them out to the arrival and marks each element so the
11
+ * navigation's own compiled keyframe does not replay it from its `from`
12
+ * pose — the contract the swipe already applies to the screen and the dim.
13
+ * Otherwise they run backwards and the compiled rest rule takes them over
14
+ * again.
15
+ */
16
+ settle: (commit: boolean, seconds: number) => void;
17
+ }
18
+ export interface RiderMotion {
19
+ readonly element: HTMLElement;
20
+ readonly motion: VariantMotion;
21
+ }
22
+ /**
23
+ * Stage the riders of a drag, paused at zero. Returns null when there is
24
+ * nothing to drive, so a gesture over chrome that declares no motion costs
25
+ * nothing.
26
+ */
27
+ export declare const beginRiderSwipe: (riders: readonly RiderMotion[]) => RiderSwipe | null;
28
+ export default beginRiderSwipe;
@@ -12,6 +12,7 @@ export interface ScreenLifecycleInput {
12
12
  decorator?: HTMLElement | null;
13
13
  bars?: (HTMLElement | null | undefined)[];
14
14
  screenContainer?: HTMLElement | null;
15
+ partLayer?: HTMLElement | null;
15
16
  };
16
17
  transitionName: TransitionName;
17
18
  prevTransitionName: TransitionName;
@@ -0,0 +1 @@
1
+ export {};
@@ -97,6 +97,38 @@ export declare const LAYER_OWNER_ATTR = "data-flemo-layer-owner";
97
97
  * the engine's participant scan can both find them.
98
98
  */
99
99
  export declare const PART_NAME_ATTR = "data-flemo-part-name";
100
+ /**
101
+ * The per-Router PART LAYER: the box a shared bar's `<Part>` elements are staged
102
+ * in for a flight. Rendered by the binding, for the same reason the morph layer
103
+ * is (only a Router knows which box bounds its screens).
104
+ *
105
+ * Two screens that share a bar id each render their OWN copy of that bar inside
106
+ * their own screen container, and a screen container is an isolated stacking
107
+ * context carrying the screen's z-index. So the lower screen's parts are painted
108
+ * under the upper screen's opaque surface: both parts run their authored
109
+ * keyframes, but only one of them is ever seen, and the cross-fade the pair was
110
+ * written for never appears. Being covered is a property of being a descendant,
111
+ * so for the flight the covered side's parts stop being one.
112
+ */
113
+ export declare const PART_LAYER_ATTR = "data-flemo-part-layer";
114
+ /**
115
+ * On a staged part: the `data-flemo-screen` id of the screen it was lifted from.
116
+ * The engine's participant scan is otherwise structural (it walks out from the
117
+ * scope), and a staged part is no longer under any scope — without this it would
118
+ * drop out of the layer pin, the settle release and the COMPLETED inline clear,
119
+ * all of which must keep treating it as one of its screen's parts.
120
+ */
121
+ export declare const PART_HOME_ATTR = "data-flemo-part-home";
122
+ /**
123
+ * The box left behind in the bar while a part is staged.
124
+ *
125
+ * A part is a child of its bar's layout, so lifting it out shrinks the bar by
126
+ * exactly its size and everything after it slides over. That is invisible on
127
+ * the covered side and very visible on the other: a pop's staged part belongs
128
+ * to the RETURNING screen, whose bar is the one left on screen at the landing.
129
+ * Measured, it moved the title 56px and moved it back on release.
130
+ */
131
+ export declare const PART_STAND_IN_ATTR = "data-flemo-part-stand-in";
100
132
  /**
101
133
  * Marks a registered morph element. Presence only — the value is the ROLE
102
134
  * (see MORPH_ROLE). Written by the binding, read by the morph runtime (to find
@@ -211,10 +243,31 @@ export declare const GOVERNED_ATTR = "data-flemo-governed";
211
243
  export declare const CREEP_ATTR = "data-flemo-creep";
212
244
  /** The desktop macOS Safari flat head, with its own lengths. */
213
245
  export declare const DESK_HEAD_ATTR = "data-flemo-desk-head";
214
- /** The compositor warm-up element. */
246
+ /**
247
+ * The governed head PARKS instead of hiding — written on the entering screen's
248
+ * scope, not the root, because the decision is per-flight.
249
+ *
250
+ * The plain governed head holds the authored from-pose, which for an entering
251
+ * screen is fully off-screen, for `animation-delay` plus the head — 200ms on a
252
+ * PUSHING flight. WebKit drops a backing store that sits outside the coverage
253
+ * rect that long, so the pre-raster the park-over hold just paid for is thrown
254
+ * away and the slide reveals unrastered content (device-recorded 2026-08-30,
255
+ * iOS Safari: everything past the first ~512px tile row entered blank and the
256
+ * re-raster landed 183ms into the flight). Under this attribute the head holds
257
+ * the PARK pose instead — on-screen at the destination, near-zero opacity, the
258
+ * same place the hold already had it — so the tiles stay live across the wait.
259
+ *
260
+ * The binding writes it only where the park-over hold itself was granted (the
261
+ * covering screen's surface is verifiably opaque), so a translucent cover keeps
262
+ * the old off-screen head rather than showing a ghost.
263
+ */
264
+ export declare const PARK_HEAD_ATTR = "data-flemo-park-head";
265
+ /**
266
+ * The compositor warm-up element. Its VALUE says whether the warm-up is
267
+ * currently forcing frames (`"on"`) or resident but idle (`"idle"`) — the
268
+ * element outlives every hold, so its presence alone no longer answers that.
269
+ */
215
270
  export declare const WARM_ATTR = "data-flemo-warm";
216
- /** The warm-up's cadence video, when the desktop profile uses one. */
217
- export declare const WARM_VIDEO_ATTR = "data-flemo-warm-video";
218
271
  /** The one-shot GPU pipeline prewarm element. */
219
272
  export declare const GPU_PREWARM_ATTR = "data-flemo-gpu-prewarm";
220
273
  /**
@@ -236,4 +289,4 @@ export declare const attrValueSelector: (attribute: string, value: string) => st
236
289
  * a devtools build can assert against the shipped set instead of a hand-kept
237
290
  * copy — the drift this module exists to end.
238
291
  */
239
- export declare const FLEMO_ATTRIBUTES: readonly ["data-flemo-screen", "data-flemo-status", "data-flemo-active", "data-flemo-transition", "data-flemo-router", "data-flemo-skip-animation", "data-flemo-bar", "data-flemo-bar-active", "data-flemo-bar-status", "data-flemo-bar-riding", "data-flemo-bar-id", "data-flemo-bar-id-type", "data-flemo-bar-transition", "data-flemo-bar-spacer", "data-flemo-decorator", "data-flemo-decorator-name", "data-flemo-layer-host", "data-flemo-layer-owner", "data-flemo-layer-slot", "data-flemo-part-name", "data-flemo-morph", "data-flemo-morph-camera", "data-flemo-morph-ghost", "data-flemo-morph-layer", "data-flemo-morph-name", "data-flemo-morph-slot", "data-flemo-morph-stand-in", "data-flemo-morph-sheet", "data-flemo-anim-hold", "data-flemo-held-arrival", "data-flemo-img-hold", "data-flemo-governed", "data-flemo-creep", "data-flemo-desk-head", "data-flemo-warm", "data-flemo-warm-video", "data-flemo-gpu-prewarm", "data-flemo-image-src", "data-flemo-devtools-panel"];
292
+ export declare const FLEMO_ATTRIBUTES: readonly ["data-flemo-screen", "data-flemo-status", "data-flemo-active", "data-flemo-transition", "data-flemo-router", "data-flemo-skip-animation", "data-flemo-bar", "data-flemo-bar-active", "data-flemo-bar-status", "data-flemo-bar-riding", "data-flemo-bar-id", "data-flemo-bar-id-type", "data-flemo-bar-transition", "data-flemo-bar-spacer", "data-flemo-decorator", "data-flemo-decorator-name", "data-flemo-layer-host", "data-flemo-layer-owner", "data-flemo-layer-slot", "data-flemo-part-name", "data-flemo-part-layer", "data-flemo-part-home", "data-flemo-part-stand-in", "data-flemo-morph", "data-flemo-morph-camera", "data-flemo-morph-ghost", "data-flemo-morph-layer", "data-flemo-morph-name", "data-flemo-morph-slot", "data-flemo-morph-stand-in", "data-flemo-morph-sheet", "data-flemo-anim-hold", "data-flemo-held-arrival", "data-flemo-img-hold", "data-flemo-governed", "data-flemo-creep", "data-flemo-desk-head", "data-flemo-park-head", "data-flemo-warm", "data-flemo-gpu-prewarm", "data-flemo-image-src", "data-flemo-devtools-panel"];
@@ -0,0 +1,33 @@
1
+ export interface StagingRect {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ /**
8
+ * A viewport rect in a staging layer's own coordinates.
9
+ *
10
+ * The layer can sit inside a transformed ancestor (a demo bezel, a scaled
11
+ * preview), in which case a px it is positioned by is not a px on the glass.
12
+ * Its measured rect against its laid-out size gives the ratio, so a flight is
13
+ * expressed in the space it is actually staged in.
14
+ */
15
+ export declare const intoLayerSpace: (rect: StagingRect, layer: HTMLElement) => StagingRect;
16
+ export interface PreserveAnimationsOptions {
17
+ /**
18
+ * Carry the root element's OWN animations across the move too.
19
+ *
20
+ * Off by default, which is what a morph needs: the runtime writes the root's
21
+ * animation itself on both sides of the move and must stay its only author.
22
+ * A staged `<Part>` is the opposite case — the compiled part rule animates the
23
+ * part element itself, and that rule matches on name/status/active with no
24
+ * structural term, so the move restarts the very animation the flight is
25
+ * being watched for.
26
+ */
27
+ includeRoot?: boolean;
28
+ }
29
+ /**
30
+ * Runs `move` — the re-parent — and carries the subtree's animation clocks
31
+ * across it.
32
+ */
33
+ export declare function preserveAnimations(root: Element, move: () => void, options?: PreserveAnimationsOptions): void;
@@ -10,5 +10,7 @@ export interface HistoryDriver {
10
10
  go(delta: number): void;
11
11
  back(): void;
12
12
  subscribe(listener: (event: HistoryNavEvent) => void): () => void;
13
+ readonly isolated?: boolean;
13
14
  }
15
+ export declare const navigationLane: (driver: HistoryDriver) => string;
14
16
  export default function createBrowserHistoryDriver(routerKey?: string): HistoryDriver;
package/dist/index.d.ts CHANGED
@@ -32,6 +32,7 @@ export { morphTransitionMap } from './transition/morphTransition/morphTransition
32
32
  export { DEFAULT_MORPH_TRANSITION_NAME } from './transition/morphTransition/typing';
33
33
  export { default as attachMorph, type AttachMorphOptions } from './morph/attachMorph';
34
34
  export { registerMorphLayer } from './morph/morphLayer';
35
+ export { registerPartLayer, resolvePartLayer } from './screen/partLayer';
35
36
  export { beginMorphSwipe, type MorphSwipe } from './morph/morphSwipe';
36
37
  export { default as cupertino } from './transition/cupertino';
37
38
  export { default as material } from './transition/material';
@@ -49,10 +50,9 @@ export { default as animateInline, clearInlineAnimation } from './transition/ani
49
50
  export { default as createTransitionEngine } from './core/engine/createTransitionEngine';
50
51
  export { governedCompiledActive } from './platform/governedCompiled';
51
52
  export { startFlemoRuntime } from './runtime/flemoRuntime';
52
- export { resolvePlatformProfile, restLayerPromotionEnabled, type PlatformProfile, type PlatformProfileInput } from './platform/profile';
53
- export { FLEMO_ATTR_PREFIX, FLEMO_ATTRIBUTES, attrSelector, attrValueSelector, ANIM_HOLD, ANIM_HOLD_ATTR, ANIM_HOLD_PAUSED_VALUES, ACTIVE_ATTR, BAR_ACTIVE_ATTR, BAR_ATTR, BAR_ID_ATTR, BAR_ID_TYPE_ATTR, BAR_RIDING_ATTR, BAR_SPACER_ATTR, BAR_STATUS_ATTR, BAR_TRANSITION_ATTR, CREEP_ATTR, DECORATOR_ATTR, DECORATOR_NAME_ATTR, DESK_HEAD_ATTR, DEVTOOLS_PANEL_ATTR, GOVERNED_ATTR, GPU_PREWARM_ATTR, HELD_ARRIVAL_ATTR, IMAGE_HOLD_ATTR, LAYER_HOST_ATTR, LAYER_OWNER_ATTR, LAYER_SLOT_ATTR, MORPH_ATTR, MORPH_LAYER_ATTR, MORPH_NAME_ATTR, MORPH_ROLE, MORPH_SLOT_ATTR, MORPH_SHEET_ATTR, PART_NAME_ATTR, ROUTER_ATTR, SCREEN_ATTR, STATUS_ATTR, TRANSITION_ATTR, WARM_ATTR, WARM_VIDEO_ATTR } from './dom/attributes';
53
+ export { resolvePlatformProfile, type PlatformProfile, type PlatformProfileInput } from './platform/profile';
54
+ export { FLEMO_ATTR_PREFIX, FLEMO_ATTRIBUTES, attrSelector, attrValueSelector, ANIM_HOLD, ANIM_HOLD_ATTR, ANIM_HOLD_PAUSED_VALUES, ACTIVE_ATTR, BAR_ACTIVE_ATTR, BAR_ATTR, BAR_ID_ATTR, BAR_ID_TYPE_ATTR, BAR_RIDING_ATTR, BAR_SPACER_ATTR, BAR_STATUS_ATTR, BAR_TRANSITION_ATTR, CREEP_ATTR, DECORATOR_ATTR, DECORATOR_NAME_ATTR, DESK_HEAD_ATTR, DEVTOOLS_PANEL_ATTR, GOVERNED_ATTR, GPU_PREWARM_ATTR, HELD_ARRIVAL_ATTR, IMAGE_HOLD_ATTR, LAYER_HOST_ATTR, LAYER_OWNER_ATTR, LAYER_SLOT_ATTR, MORPH_ATTR, MORPH_LAYER_ATTR, MORPH_NAME_ATTR, MORPH_ROLE, MORPH_SLOT_ATTR, MORPH_SHEET_ATTR, PARK_HEAD_ATTR, PART_HOME_ATTR, PART_LAYER_ATTR, PART_NAME_ATTR, ROUTER_ATTR, SCREEN_ATTR, STATUS_ATTR, TRANSITION_ATTR, WARM_ATTR } from './dom/attributes';
54
55
  export { OVERLAY_LEVEL, SCREEN_STACKING_ORDER, UNNUMBERED_LEVEL } from './dom/stacking';
55
- export { DIAGNOSTIC_FLAGS, RETIRED_DIAGNOSTIC_FLAGS, type DiagnosticFlag, type DiagnosticFlagKind, type RetiredDiagnosticFlag } from './core/engine/diagnosticRegistry';
56
56
  export { TRANSITIONAL_STATUS_VALUES } from './navigate/store';
57
57
  export { SKIP_ANIMATION_ATTR, type TransitionEngine, type TransitionEngineDeps, type ScreenLifecycleInput } from './core/engine/types';
58
58
  export { default as createSwipeController } from './core/engine/createSwipeController';