@flemo/core 1.28.1 → 1.30.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 (54) hide show
  1. package/dist/core/TaskManger.d.ts +13 -0
  2. package/dist/core/engine/__tests__/architectureDoc.test.d.ts +10 -0
  3. package/dist/core/engine/__tests__/diagnosticRegistry.test.d.ts +10 -0
  4. package/dist/core/engine/__tests__/singleResolution.test.d.ts +1 -0
  5. package/dist/core/engine/arrivalHold.d.ts +1 -1
  6. package/dist/core/engine/cancelResume.d.ts +17 -0
  7. package/dist/core/engine/compositorWarmUp.d.ts +1 -1
  8. package/dist/core/engine/createSwipeController.d.ts +11 -0
  9. package/dist/core/engine/createTransitionEngine.d.ts +2 -1
  10. package/dist/core/engine/diagnosticFlags.d.ts +1 -10
  11. package/dist/core/engine/diagnosticRegistry.d.ts +38 -0
  12. package/dist/core/engine/flightHolds.d.ts +22 -0
  13. package/dist/core/engine/flightParticipants.d.ts +8 -0
  14. package/dist/core/engine/flightRouting.d.ts +70 -0
  15. package/dist/core/engine/gpuPipelinePrewarm.d.ts +1 -1
  16. package/dist/core/engine/imageDecodeOffloader.d.ts +1 -1
  17. package/dist/core/engine/landingGovernor.d.ts +3 -0
  18. package/dist/core/engine/participantLayers.d.ts +12 -0
  19. package/dist/core/engine/types.d.ts +1 -1
  20. package/dist/dom/__tests__/attributes.test.d.ts +10 -0
  21. package/dist/dom/attributes.d.ts +115 -0
  22. package/dist/index.d.ts +8 -4
  23. package/dist/index.mjs +1512 -1700
  24. package/dist/navigate/store.d.ts +1 -0
  25. package/dist/platform/__tests__/displayCadence.test.d.ts +1 -0
  26. package/dist/platform/__tests__/displayProbe.test.d.ts +1 -0
  27. package/dist/platform/__tests__/engineProbes.test.d.ts +1 -0
  28. package/dist/platform/__tests__/legacyBlinkGate.test.d.ts +1 -0
  29. package/dist/platform/__tests__/profile.test.d.ts +1 -0
  30. package/dist/platform/__tests__/steadySixtyCadence.test.d.ts +1 -0
  31. package/dist/platform/displayCadence.d.ts +3 -0
  32. package/dist/platform/displayProbe.d.ts +5 -0
  33. package/dist/platform/engineProbes.d.ts +4 -0
  34. package/dist/platform/governedCompiled.d.ts +1 -0
  35. package/dist/platform/profile.d.ts +70 -0
  36. package/dist/{core/engine → platform}/steadySixtyCadence.d.ts +1 -1
  37. package/dist/runtime/__tests__/flemoRuntime.test.d.ts +1 -0
  38. package/dist/runtime/flemoRuntime.d.ts +9 -0
  39. package/dist/transition/compileTransitionStyles.d.ts +2 -3
  40. package/dist/transition/cubicBezier.d.ts +8 -0
  41. package/dist/transition/swipeSettle.d.ts +84 -1
  42. package/dist/transition/typing.d.ts +2 -2
  43. package/package.json +1 -1
  44. package/dist/core/engine/driverPolicy.d.ts +0 -12
  45. package/dist/core/engine/landingPixelSnap.d.ts +0 -10
  46. package/dist/core/engine/lowPowerCadence.d.ts +0 -6
  47. package/dist/core/engine/motionDriverKind.d.ts +0 -7
  48. package/dist/core/engine/transitionPlayer.d.ts +0 -40
  49. /package/dist/core/engine/__tests__/{driverPolicy.test.d.ts → createSwipeController.stuckGesture.test.d.ts} +0 -0
  50. /package/dist/core/engine/__tests__/{landingPixelSnap.test.d.ts → createSwipeController.velocity.test.d.ts} +0 -0
  51. /package/dist/core/engine/__tests__/{lowPowerCadence.test.d.ts → flightParticipants.test.d.ts} +0 -0
  52. /package/dist/core/engine/__tests__/{motionDriverKind.test.d.ts → flightRouting.test.d.ts} +0 -0
  53. /package/dist/core/engine/__tests__/{steadySixtyCadence.test.d.ts → landingGovernor.test.d.ts} +0 -0
  54. /package/dist/core/engine/__tests__/{transitionPlayer.test.d.ts → participantLayers.test.d.ts} +0 -0
@@ -50,6 +50,19 @@ declare class TaskManager {
50
50
  emitSignal(signalName: string): void;
51
51
  private processPendingTasks;
52
52
  private pendingWaiters;
53
+ /**
54
+ * Wake the queue on the next frame, so the terminal flip's commit and the
55
+ * queued flight's opening commit land in different ones.
56
+ *
57
+ * Falls straight through where there is no frame clock (SSR, a non-browser
58
+ * embedder): there is no commit to separate from.
59
+ *
60
+ * Reaching this at all takes a task genuinely PENDING ahead of the queued one
61
+ * — a waiter added to an empty queue resolves on the spot and never goes
62
+ * through the notify path, so a test that merely drives two tasks exercises
63
+ * nothing here. The suite holds a manual task open and queues behind it.
64
+ */
65
+ private wakeQueueNextFrame;
53
66
  private notifyPendingWaiters;
54
67
  private waitForPendingTasks;
55
68
  private onTaskStatusChange;
@@ -0,0 +1,10 @@
1
+ declare global {
2
+ interface ImportMeta {
3
+ glob(pattern: string, options: {
4
+ query: string;
5
+ import: string;
6
+ eager: true;
7
+ }): Record<string, string>;
8
+ }
9
+ }
10
+ export {};
@@ -0,0 +1,10 @@
1
+ declare global {
2
+ interface ImportMeta {
3
+ glob(pattern: string, options: {
4
+ query: string;
5
+ import: string;
6
+ eager: true;
7
+ }): Record<string, string>;
8
+ }
9
+ }
10
+ export {};
@@ -1,2 +1,2 @@
1
- export declare const HELD_ARRIVAL_ATTR = "data-flemo-held-arrival";
1
+ export { HELD_ARRIVAL_ATTR } from '../../dom/attributes';
2
2
  export default function createArrivalHold(scope: HTMLElement): () => void;
@@ -0,0 +1,17 @@
1
+ import { VariantMotion } from '../../transition/variantMotion';
2
+ export declare const RESUME_BUDGET = 4;
3
+ export interface CancelResumeConfig {
4
+ element: HTMLElement;
5
+ expectedName: string;
6
+ motion: VariantMotion;
7
+ isLive: () => boolean;
8
+ budgetUsed: () => number;
9
+ spendBudget: () => void;
10
+ onTerminal: () => void;
11
+ writer?: symbol;
12
+ }
13
+ export declare const wireCancelResume: (config: CancelResumeConfig) => {
14
+ attach: () => void;
15
+ detach: () => void;
16
+ fullRestart: () => void;
17
+ };
@@ -1,3 +1,3 @@
1
- export declare const WARM_ATTR = "data-flemo-warm";
1
+ export { WARM_ATTR } from '../../dom/attributes';
2
2
  export declare const resetCompositorWarmForTesting: () => void;
3
3
  export default function holdCompositorWarm(): () => void;
@@ -30,6 +30,17 @@ export interface SwipeController {
30
30
  pointerMove: (event: PointerEvent) => void;
31
31
  pointerUp: (event: PointerEvent) => void;
32
32
  pointerCancel: (event: PointerEvent) => void;
33
+ lostPointerCapture: (event: PointerEvent) => void;
34
+ /**
35
+ * Abandon whatever gesture is in flight, with no pointer to close it.
36
+ *
37
+ * The binding calls this when the SCREEN goes away underneath one: an unmount,
38
+ * or a freeze (which detaches the listeners but keeps this controller, since
39
+ * it outlives the effects). Without it the gesture state has exactly one way
40
+ * out — a pointerup carrying the id that armed it — and if the browser never
41
+ * delivers that event, nothing ever does. See the note on `abandon` below.
42
+ */
43
+ abandon: () => void;
33
44
  shouldPreventTouch: () => boolean;
34
45
  }
35
46
  export default function createSwipeController(config: SwipeControllerConfig): SwipeController;
@@ -1,3 +1,4 @@
1
1
  import { TransitionEngine, TransitionEngineDeps } from './types';
2
- export declare const resetDisplayProbeForTests: () => void;
2
+ import { resetDisplayProbeForTests } from '../../platform/displayProbe';
3
+ export { resetDisplayProbeForTests };
3
4
  export default function createTransitionEngine(deps: TransitionEngineDeps): TransitionEngine;
@@ -1,7 +1,5 @@
1
- export declare const readLandingSnapFlag: () => boolean;
2
1
  export declare const readImageHoldFlag: () => "on" | "off" | null;
3
2
  export declare const readSettleGateFlag: () => boolean;
4
- export declare const readHandoffFlag: () => boolean;
5
3
  export declare const readArrivalHoldFlag: () => boolean;
6
4
  export declare const readDesktopReleaseFlipFlag: () => boolean;
7
5
  export declare const readCreepHeadFlag: () => boolean;
@@ -10,14 +8,7 @@ export declare const readDesktopHeadFlag: () => boolean;
10
8
  export declare const readPrerasterFlag: () => boolean;
11
9
  export declare const readRestLayerPromotionFlag: () => boolean;
12
10
  export declare const readImageOffloadOverride: () => "on" | "off" | null;
13
- export declare const HANDOFF_MS_DEFAULT: number;
14
- export declare const JITTER_BAND_MAX_DEVICE_PX = 4;
15
- export declare const snapshotApplyOverride: () => "scrub" | null;
16
- export declare const handoffOverride: () => "on" | null;
17
- export declare const snapOverride: () => "always" | "off" | "gate" | "hybrid" | null;
18
- export declare const jitterBandMaxDevicePx: () => number;
19
- export declare const handoffMs: () => number;
20
- export declare const resetSessionOverrideCachesForTests: () => void;
11
+ export declare const readBlinkGovernedOverride: () => "on" | "off" | null;
21
12
  export declare const residentScreenLayers: () => boolean;
22
13
  export declare const resetResidentLayersForTesting: () => void;
23
14
  export declare const shallowFreeze: () => boolean;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * What kind of thing a flag is — which decides how a report should read it.
3
+ *
4
+ * - `production-state`: written by the library itself (a learned ledger). Never
5
+ * set by hand; the KEY STRINGS are frozen, since users' devices carry
6
+ * persisted values.
7
+ * - `production-default-with-override`: the library computes a default and the
8
+ * key overrides it both ways, for field debugging.
9
+ * - `opt-in-diagnostic`: default OFF. A measurement instrument that ships so a
10
+ * device session can be probed without a custom build.
11
+ */
12
+ export type DiagnosticFlagKind = "production-state" | "production-default-with-override" | "opt-in-diagnostic";
13
+ export interface DiagnosticFlag {
14
+ readonly key: string;
15
+ readonly storage: "session" | "local";
16
+ readonly kind: DiagnosticFlagKind;
17
+ /** Accepted values, for a report or a panel to offer. */
18
+ readonly values: string;
19
+ /** The default when the key is unset. */
20
+ readonly fallback: string;
21
+ readonly effect: string;
22
+ }
23
+ /** Every `flemo:*` key the library reads today. */
24
+ export declare const DIAGNOSTIC_FLAGS: readonly DiagnosticFlag[];
25
+ export interface RetiredDiagnosticFlag {
26
+ readonly key: string;
27
+ readonly storage: "session" | "local";
28
+ /** What it used to do, and when it stopped doing it. */
29
+ readonly retiredWith: string;
30
+ }
31
+ /**
32
+ * Keys the library once read and no longer does. Declared so a report can say
33
+ * "this is set, and it does nothing" — residue that is merely unknown reads as
34
+ * a lead worth chasing, and one such key once burned a multi-day investigation.
35
+ *
36
+ * Values persisted on users' devices are never read again.
37
+ */
38
+ export declare const RETIRED_DIAGNOSTIC_FLAGS: readonly RetiredDiagnosticFlag[];
@@ -0,0 +1,22 @@
1
+ import { TransitionName } from '../../transition/typing';
2
+ export interface FlightHoldsDeps {
3
+ /**
4
+ * Land any pending deferred landing NOW. A navigation starting inside a
5
+ * still-pending window must not let that window's reveal punch into it.
6
+ */
7
+ readonly landNow: () => void;
8
+ /** Defer a release to the frames past the COMPLETED flip. */
9
+ readonly scheduleLanding: (land: () => void) => void;
10
+ }
11
+ export interface FlightHoldsInput {
12
+ readonly isTransitional: boolean;
13
+ readonly isActive: boolean;
14
+ readonly status: string;
15
+ readonly transitionName: TransitionName;
16
+ readonly getScope: () => HTMLElement | null | undefined;
17
+ }
18
+ export interface FlightHolds {
19
+ /** Reconcile every hold with what this drive run says the screen is doing. */
20
+ readonly sync: (input: FlightHoldsInput) => void;
21
+ }
22
+ export declare const createFlightHolds: (deps: FlightHoldsDeps) => FlightHolds;
@@ -0,0 +1,8 @@
1
+ import { default as resolveTransition } from '../../transition/resolveTransition';
2
+ import { TransitionVariant } from '../../transition/typing';
3
+ export declare const collectScreenParts: (scope: HTMLElement) => HTMLElement[];
4
+ export declare const collectVariantParts: (scope: HTMLElement, variant: TransitionVariant) => HTMLElement[];
5
+ export declare const collectFlightParts: (scope: HTMLElement, status: string) => HTMLElement[];
6
+ export declare const collectUnheldOuterParts: (scope: HTMLElement, status: string) => HTMLElement[];
7
+ export declare const collectStampedOuterParts: (scope: HTMLElement) => HTMLElement[];
8
+ export declare const statusChoreographySpanMs: (scope: HTMLElement, transition: ReturnType<typeof resolveTransition>, status: string) => number;
@@ -0,0 +1,70 @@
1
+ import { Transition } from '../../transition/typing';
2
+ export interface FlightRouting {
3
+ /** This flight has motion to drive at all (not skipped, and it resolves). */
4
+ readonly hasDrivableMotion: boolean;
5
+ /**
6
+ * The engine may perform CLOCK SURGERY on this flight — the first-frame
7
+ * hold, the flight-start anchor, stall re-anchoring. Authored
8
+ * `driver: "native"` pins only, and never on Blink.
9
+ *
10
+ * Every one of those mutates a running animation's timing (WAAPI pause/play,
11
+ * startTime shifts), and the 2026-08 iPhone falsification series established
12
+ * that on WebKit any such touch costs the accelerated out-of-process path or
13
+ * desyncs its re-sync. The default therefore runs the compiled animation
14
+ * UNTOUCHED and protects the opening by release scheduling instead. An author
15
+ * who pins "native" takes the main-thread-presentation trade knowingly.
16
+ */
17
+ readonly nativeSurgeryAllowed: boolean;
18
+ /** Touch WebKit on the governed compiled tier. */
19
+ readonly touchGoverned: boolean;
20
+ /**
21
+ * Touch WebKit whose STATUS also takes the flat head: POP always, PUSH once
22
+ * the settle gate has moved the mount weight out of the release.
23
+ */
24
+ readonly forceCompiled: boolean;
25
+ /**
26
+ * This flight gets the GOVERNED HEAD KIT — a flat opening segment baked into
27
+ * the keyframes, so a commit that ages the wall clock eats the head instead
28
+ * of the curve's start.
29
+ */
30
+ readonly governedHead: boolean;
31
+ /**
32
+ * Desktop macOS Safari's own flat head: the same compiled clock presented
33
+ * from the main thread, with its own lengths and its own gate attribute.
34
+ * Arming it retires the birth anchor — two interventions on one clock is the
35
+ * pairing the touch tier was built to avoid.
36
+ */
37
+ readonly desktopHead: boolean;
38
+ /** The head's length for this status, in milliseconds. 0 when there is none. */
39
+ readonly birthHoldMs: number;
40
+ /**
41
+ * A SLIDE on the governed touch tier. It stands the wall-clock accelerators
42
+ * down for the same reason `forceCompiled` does, and covers one case that
43
+ * predicate does not: a touch-WebKit PUSH with the settle gate turned off.
44
+ *
45
+ * Named `governedSoftenActive` until 2026-08, after the front-softening
46
+ * treatment it shipped beside. That treatment is gone; this outlived it
47
+ * because what it guards is the clock, not the curve.
48
+ */
49
+ readonly governedSlide: boolean;
50
+ /**
51
+ * Keep a frame source alive for the flight. Compiled Blink only: a
52
+ * compositor-driven flight leaves the main thread idle, and Chrome then
53
+ * paces its macOS ProMotion presentation unevenly — video-measured as
54
+ * drops and double-steps the eye reads as trembling.
55
+ */
56
+ readonly framePacingKeepalive: boolean;
57
+ /** Arm the creep head beside the governed one (`flemo:creep`). */
58
+ readonly creepHead: boolean;
59
+ }
60
+ export interface FlightRoutingInput {
61
+ readonly status: string;
62
+ readonly transition: Transition;
63
+ /** The scope carries the skip marker for this flight. */
64
+ readonly skipAnimation: boolean;
65
+ /** The active variant resolves a motion. */
66
+ readonly hasActiveMotion: boolean;
67
+ /** The active variant has an authored animation at all. */
68
+ readonly hasAnimation: boolean;
69
+ }
70
+ export declare const resolveFlightRouting: (input: FlightRoutingInput) => FlightRouting;
@@ -1,4 +1,4 @@
1
- export declare const GPU_PREWARM_ATTR = "data-flemo-gpu-prewarm";
1
+ export { GPU_PREWARM_ATTR } from '../../dom/attributes';
2
2
  export declare const PREWARM_SPAN_MS = 450;
3
3
  export declare const resetGpuPipelinePrewarmForTesting: () => void;
4
4
  export default function ensureGpuPipelinePrewarm(): () => void;
@@ -1,5 +1,5 @@
1
1
  export declare const OVERSIZE_AREA_RATIO = 8;
2
- export declare const OFFLOADED_SRC_ATTR = "data-flemo-image-src";
2
+ export { OFFLOADED_SRC_ATTR } from '../../dom/attributes';
3
3
  export interface OversizeInput {
4
4
  naturalWidth: number;
5
5
  naturalHeight: number;
@@ -0,0 +1,3 @@
1
+ import { VariantMotion } from '../../transition/variantMotion';
2
+ import { PerceptualBox } from './perceptualSpan';
3
+ export declare const governedEasingForMotion: (motion: VariantMotion, box: PerceptualBox, devicePixelRatio: number, frameIntervalMs: number) => string | null;
@@ -0,0 +1,12 @@
1
+ import { default as resolveTransition } from '../../transition/resolveTransition';
2
+ import { TransitionVariant } from '../../transition/typing';
3
+ export declare const holdParticipantLayers: (elements: {
4
+ scope: HTMLElement;
5
+ decorator?: HTMLElement | null;
6
+ bars?: (HTMLElement | null | undefined)[];
7
+ }, transition: ReturnType<typeof resolveTransition>, variant: TransitionVariant, owner: symbol) => void;
8
+ export declare const releaseParticipantLayers: (elements: {
9
+ scope?: HTMLElement | null;
10
+ decorator?: HTMLElement | null;
11
+ bars?: (HTMLElement | null | undefined)[];
12
+ }, owner: symbol) => void;
@@ -1,6 +1,6 @@
1
1
  import { NavigateStatus } from '../../navigate/store';
2
2
  import { TransitionName } from '../../transition/typing';
3
- export declare const SKIP_ANIMATION_ATTR = "data-flemo-skip-animation";
3
+ export { SKIP_ANIMATION_ATTR } from '../../dom/attributes';
4
4
  export interface TransitionEngineDeps {
5
5
  getTransitionTaskId: () => string | null;
6
6
  setDragStatus: (status: "IDLE" | "PENDING") => void;
@@ -0,0 +1,10 @@
1
+ declare global {
2
+ interface ImportMeta {
3
+ glob(pattern: string, options: {
4
+ query: string;
5
+ import: string;
6
+ eager: true;
7
+ }): Record<string, string>;
8
+ }
9
+ }
10
+ export {};
@@ -0,0 +1,115 @@
1
+ /** Shared prefix. Every attribute below starts with it. */
2
+ export declare const FLEMO_ATTR_PREFIX = "data-flemo-";
3
+ /** Marks a screen scope. Presence only — the value carries nothing. */
4
+ export declare const SCREEN_ATTR = "data-flemo-screen";
5
+ /** The navigation status this screen is rendering: a `NavigateStatus` value. */
6
+ export declare const STATUS_ATTR = "data-flemo-status";
7
+ /** `"true"` on the screen the navigation is moving TO, `"false"` on its partner. */
8
+ export declare const ACTIVE_ATTR = "data-flemo-active";
9
+ /** The resolved transition name, so the compiled rules select the right keyframes. */
10
+ export declare const TRANSITION_ATTR = "data-flemo-transition";
11
+ /**
12
+ * The owning Router's identity. The engine scopes a flight's choreography
13
+ * participants by this marker rather than by DOM structure: each screen sits in
14
+ * its own wrapper, a root Router renders no container, and two independent
15
+ * Routers may share a DOM parent — so structure cannot draw the line.
16
+ */
17
+ export declare const ROUTER_ATTR = "data-flemo-router";
18
+ /**
19
+ * `"true"` suppresses this screen's motion for one flight (an interrupted or
20
+ * restored navigation that must land without animating).
21
+ */
22
+ export declare const SKIP_ANIMATION_ATTR = "data-flemo-skip-animation";
23
+ /** Marks a shared bar element. */
24
+ export declare const BAR_ATTR = "data-flemo-bar";
25
+ /** The bar's own active flag (see ACTIVE_ATTR). */
26
+ export declare const BAR_ACTIVE_ATTR = "data-flemo-bar-active";
27
+ /** The bar's own status (see STATUS_ATTR). */
28
+ export declare const BAR_STATUS_ATTR = "data-flemo-bar-status";
29
+ /**
30
+ * `"true"` while the bar RIDES its screen's keyframes — the compiled rule pairs
31
+ * the bar selector with the screen rule, so the pair moves in lockstep.
32
+ */
33
+ export declare const BAR_RIDING_ATTR = "data-flemo-bar-riding";
34
+ /** The consumer-supplied shared-bar id, used to match a bar across screens. */
35
+ export declare const BAR_ID_ATTR = "data-flemo-bar-id";
36
+ /** The id's `typeof`, so `1` and `"1"` never match as the same bar. */
37
+ export declare const BAR_ID_TYPE_ATTR = "data-flemo-bar-id-type";
38
+ /** The transition name driving this bar. */
39
+ export declare const BAR_TRANSITION_ATTR = "data-flemo-bar-transition";
40
+ /** The layout spacer that reserves a shared bar's height in the screen flow. */
41
+ export declare const BAR_SPACER_ATTR = "data-flemo-bar-spacer";
42
+ /** Marks the decorator element (the dim/overlay layer between screens). */
43
+ export declare const DECORATOR_ATTR = "data-flemo-decorator";
44
+ /** The decorator definition's name, for its own compiled rules. */
45
+ export declare const DECORATOR_NAME_ATTR = "data-flemo-decorator-name";
46
+ /**
47
+ * A `<Part>`'s registered part-transition name. Parts self-carry their screen's
48
+ * status/active (STATUS_ATTR/ACTIVE_ATTR) so the compiled part selectors and
49
+ * the engine's participant scan can both find them.
50
+ */
51
+ export declare const PART_NAME_ATTR = "data-flemo-part-name";
52
+ /**
53
+ * The animation hold. `"true"` pauses this element's compiled animation (and
54
+ * its descendant parts) at the from-pose; `"park"` parks it at its
55
+ * destination instead; `"false"` releases. The release flip is the moment a
56
+ * flight's clock starts.
57
+ */
58
+ export declare const ANIM_HOLD_ATTR = "data-flemo-anim-hold";
59
+ /**
60
+ * The values ANIM_HOLD_ATTR takes. These are as much of the contract as the
61
+ * attribute name: the binding writes them, the compiled stylesheet generates
62
+ * one rule per parked form, and the engine's release watch compares against
63
+ * RELEASED. All four "held" forms pause the animation; they differ in where
64
+ * the held element sits while it waits.
65
+ */
66
+ export declare const ANIM_HOLD: {
67
+ /** Paused at the keyframe's from-pose. */
68
+ readonly HELD: "true";
69
+ /** Released — the flight's clock starts on this write. */
70
+ readonly RELEASED: "false";
71
+ /** Pre-positioned at its DESTINATION, under an opaque cover. */
72
+ readonly PARK: "park";
73
+ /** The push-side mirror: the entering screen parked BELOW its cover. */
74
+ readonly PARK_UNDER: "park-under";
75
+ /** The promoted variant of PARK_UNDER, kept above so its raster survives. */
76
+ readonly PARK_OVER: "park-over";
77
+ };
78
+ /** The values the compiled hold rule must pause on. */
79
+ export declare const ANIM_HOLD_PAUSED_VALUES: readonly ["true", "park", "park-under", "park-over"];
80
+ /** Marks content parked by the in-flight arrival hold, pending its landing. */
81
+ export declare const HELD_ARRIVAL_ATTR = "data-flemo-held-arrival";
82
+ /** Marks an `<img>` whose reveal is held to the flight's rest. */
83
+ export declare const IMAGE_HOLD_ATTR = "data-flemo-img-hold";
84
+ /** The governed (touch WebKit) head kit. */
85
+ export declare const GOVERNED_ATTR = "data-flemo-governed";
86
+ /** The creep head: the head's end keyframe carries a hair of motion. */
87
+ export declare const CREEP_ATTR = "data-flemo-creep";
88
+ /** The desktop macOS Safari flat head, with its own lengths. */
89
+ export declare const DESK_HEAD_ATTR = "data-flemo-desk-head";
90
+ /** The compositor warm-up element. */
91
+ export declare const WARM_ATTR = "data-flemo-warm";
92
+ /** The warm-up's cadence video, when the desktop profile uses one. */
93
+ export declare const WARM_VIDEO_ATTR = "data-flemo-warm-video";
94
+ /** The one-shot GPU pipeline prewarm element. */
95
+ export declare const GPU_PREWARM_ATTR = "data-flemo-gpu-prewarm";
96
+ /**
97
+ * An offloaded `<img>`'s AUTHORED source, kept while `src` points at the
98
+ * decoded-to-scale replacement.
99
+ */
100
+ export declare const OFFLOADED_SRC_ATTR = "data-flemo-image-src";
101
+ /**
102
+ * The devtools panel's shadow host. Owned by @flemo/devtools, reserved here so
103
+ * the name cannot be reused and so the engine's own scans can skip it.
104
+ */
105
+ export declare const DEVTOOLS_PANEL_ATTR = "data-flemo-devtools-panel";
106
+ /** `[data-flemo-screen]` — presence selector for one attribute. */
107
+ export declare const attrSelector: (attribute: string) => string;
108
+ /** `[data-flemo-status="PUSHING"]` — value selector for one attribute. */
109
+ export declare const attrValueSelector: (attribute: string, value: string) => string;
110
+ /**
111
+ * Every attribute this library writes. Exported so a consumer, an e2e suite or
112
+ * a devtools build can assert against the shipped set instead of a hand-kept
113
+ * copy — the drift this module exists to end.
114
+ */
115
+ 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-part-name", "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"];
package/dist/index.d.ts CHANGED
@@ -36,15 +36,19 @@ export { default as registerTransitionDefinitions } from './transition/registerT
36
36
  export { default as enteringInitialStyle, type EnteringInitialStyleInput } from './transition/enteringInitialStyle';
37
37
  export { default as animateInline, clearInlineAnimation } from './transition/animateInline';
38
38
  export { default as createTransitionEngine } from './core/engine/createTransitionEngine';
39
- export { lowPowerCadenceActive, governedCompiledActive } from './core/engine/lowPowerCadence';
40
- export { readSettleGateFlag, readDeferReleaseCommitFlag, readDesktopReleaseFlipFlag, readPrerasterFlag, readRestLayerPromotionFlag, readImageOffloadOverride } from './core/engine/diagnosticFlags';
39
+ export { governedCompiledActive } from './platform/governedCompiled';
40
+ export { startFlemoRuntime } from './runtime/flemoRuntime';
41
+ export { resolvePlatformProfile, restLayerPromotionEnabled, type PlatformProfile, type PlatformProfileInput } from './platform/profile';
42
+ 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, PART_NAME_ATTR, ROUTER_ATTR, SCREEN_ATTR, STATUS_ATTR, TRANSITION_ATTR, WARM_ATTR, WARM_VIDEO_ATTR } from './dom/attributes';
43
+ export { DIAGNOSTIC_FLAGS, RETIRED_DIAGNOSTIC_FLAGS, type DiagnosticFlag, type DiagnosticFlagKind, type RetiredDiagnosticFlag } from './core/engine/diagnosticRegistry';
44
+ export { TRANSITIONAL_STATUS_VALUES } from './navigate/store';
41
45
  export { SKIP_ANIMATION_ATTR, type TransitionEngine, type TransitionEngineDeps, type ScreenLifecycleInput } from './core/engine/types';
42
46
  export { default as createSwipeController } from './core/engine/createSwipeController';
43
47
  export { type SwipeController, type SwipeControllerConfig, type SwipeControllerElements, type SharedBarPresenceLike } from './core/engine/createSwipeController';
44
48
  export { default as computeBarRiding, sharedBarsMatch, type BarRidingInput } from './screen/computeBarRiding';
45
49
  export { animHoldKey, scheduleAnimHoldRelease, createAnimHoldCoordinator, eagerlyDecodeImages, ANIM_HOLD_RELEASE_BACKSTOP_MS, type AnimHoldInput, type AnimHoldCoordinator } from './screen/animStartAnchor';
46
- export { detectBlinkEngine, isDesktopBlink, isLegacyAndroidBlink } from './core/engine/driverPolicy';
47
- export { steadySixtyPlayerEligible } from './core/engine/steadySixtyCadence';
50
+ export { detectBlinkEngine, isDesktopBlink, isLegacyAndroidBlink } from './platform/engineProbes';
51
+ export { steadySixtyDesktopProfile } from './platform/steadySixtyCadence';
48
52
  export { swipeSettleSeconds, MIN_SETTLE_SECONDS, type SwipeSettleInput } from './transition/swipeSettle';
49
53
  export { default as observeBarHeight } from './screen/observeBarHeight';
50
54
  export { default as observeViewportScrollHeight } from './screen/observeViewportScrollHeight';