@flemo/core 1.30.0 → 2.0.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 (48) hide show
  1. package/dist/core/engine/__tests__/createSwipeController.dragHooks.test.d.ts +1 -0
  2. package/dist/core/engine/__tests__/createSwipeController.layerRelease.test.d.ts +1 -0
  3. package/dist/core/engine/__tests__/layerRiders.test.d.ts +1 -0
  4. package/dist/core/engine/createSwipeController.d.ts +5 -0
  5. package/dist/core/engine/diagnosticFlags.d.ts +1 -0
  6. package/dist/core/engine/flightRouting.d.ts +21 -0
  7. package/dist/core/engine/layerRiders.d.ts +21 -0
  8. package/dist/core/engine/types.d.ts +1 -0
  9. package/dist/dom/__tests__/stacking.test.d.ts +1 -0
  10. package/dist/dom/attributes.d.ts +126 -2
  11. package/dist/dom/stacking.d.ts +28 -0
  12. package/dist/history/store.d.ts +0 -1
  13. package/dist/index.d.ts +13 -1
  14. package/dist/index.mjs +2228 -1014
  15. package/dist/morph/__tests__/attachMorph.test.d.ts +1 -0
  16. package/dist/morph/__tests__/morphAnimations.test.d.ts +1 -0
  17. package/dist/morph/__tests__/morphClip.test.d.ts +1 -0
  18. package/dist/morph/__tests__/morphGeometry.test.d.ts +1 -0
  19. package/dist/morph/__tests__/morphKeyframes.test.d.ts +1 -0
  20. package/dist/morph/__tests__/morphLayer.test.d.ts +1 -0
  21. package/dist/morph/__tests__/morphPaint.test.d.ts +1 -0
  22. package/dist/morph/__tests__/morphPose.test.d.ts +1 -0
  23. package/dist/morph/__tests__/morphSheet.test.d.ts +1 -0
  24. package/dist/morph/__tests__/morphSide.test.d.ts +1 -0
  25. package/dist/morph/__tests__/morphSwipe.test.d.ts +1 -0
  26. package/dist/morph/attachMorph.d.ts +59 -0
  27. package/dist/morph/morphAnimations.d.ts +2 -0
  28. package/dist/morph/morphClip.d.ts +31 -0
  29. package/dist/morph/morphGeometry.d.ts +111 -0
  30. package/dist/morph/morphKeyframes.d.ts +190 -0
  31. package/dist/morph/morphLayer.d.ts +14 -0
  32. package/dist/morph/morphPaint.d.ts +31 -0
  33. package/dist/morph/morphPose.d.ts +44 -0
  34. package/dist/morph/morphSheet.d.ts +9 -0
  35. package/dist/morph/morphSide.d.ts +43 -0
  36. package/dist/morph/morphSwipe.d.ts +24 -0
  37. package/dist/navigate/createNavigationController.d.ts +0 -1
  38. package/dist/transition/cubicBezier.d.ts +17 -0
  39. package/dist/transition/morphTransition/__tests__/createMorphTransition.test.d.ts +1 -0
  40. package/dist/transition/morphTransition/createMorphTransition.d.ts +13 -0
  41. package/dist/transition/morphTransition/createRawMorphTransition.d.ts +17 -0
  42. package/dist/transition/morphTransition/morphTransition.d.ts +2 -0
  43. package/dist/transition/morphTransition/shared.d.ts +2 -0
  44. package/dist/transition/morphTransition/text.d.ts +2 -0
  45. package/dist/transition/morphTransition/typing.d.ts +72 -0
  46. package/dist/transition/morphTransition/zoom.d.ts +2 -0
  47. package/dist/transition/registerTransitionDefinitions.d.ts +2 -1
  48. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ export {};
@@ -24,6 +24,11 @@ export interface SwipeControllerConfig {
24
24
  getPartnerBarMetadata?: () => SharedBarsMetadata | undefined;
25
25
  setDragStatus: (status: "IDLE" | "PENDING") => void;
26
26
  back: () => void;
27
+ onDragStart?: () => void;
28
+ /** 0 at rest, 1 at the point the gesture would commit. */
29
+ onDragProgress?: (progress: number) => void;
30
+ /** The release: whether it committed, and the seconds the screens settle in. */
31
+ onDragSettle?: (committed: boolean, seconds: number) => void;
27
32
  }
28
33
  export interface SwipeController {
29
34
  pointerDown: (event: PointerEvent) => void;
@@ -1,4 +1,5 @@
1
1
  export declare const readImageHoldFlag: () => "on" | "off" | null;
2
+ export declare const morphTraceArmed: () => boolean;
2
3
  export declare const readSettleGateFlag: () => boolean;
3
4
  export declare const readArrivalHoldFlag: () => boolean;
4
5
  export declare const readDesktopReleaseFlipFlag: () => boolean;
@@ -67,4 +67,25 @@ export interface FlightRoutingInput {
67
67
  /** The active variant has an authored animation at all. */
68
68
  readonly hasAnimation: boolean;
69
69
  }
70
+ /**
71
+ * WHICH HEAD KIT this session plays, and how long its flat head is.
72
+ *
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 —
75
+ * and the MORPH runtime needs the same answer at a moment when it cannot get
76
+ * it from the DOM: the head is announced by an attribute on the root, and the
77
+ * engine writes that attribute from the SAME commit the morph is staged in.
78
+ * React runs a descendant's layout effect first, so a morph reading the
79
+ * attribute reads the PREVIOUS flight's answer — right by luck from the second
80
+ * navigation on, and wrong on the first, which is what made a first push run
81
+ * its element 33ms ahead of the screen carrying it while every push after it
82
+ * was aligned.
83
+ */
84
+ export declare const resolveHeadKit: (status: string) => {
85
+ touchGoverned: boolean;
86
+ forceCompiled: boolean;
87
+ governedHead: boolean;
88
+ desktopHead: boolean;
89
+ headMs: number;
90
+ };
70
91
  export declare const resolveFlightRouting: (input: FlightRoutingInput) => FlightRouting;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The `<Layer>` overlays that move with the screen in this container.
3
+ *
4
+ * Two shapes, because a host is inherited. A screen that renders its OWN host
5
+ * moves everything portaled into it by moving that one box. A screen NESTED
6
+ * inside such a host has its overlays in a container that is not its own, and
7
+ * no walk of its subtree can find them — so they are matched by the owner id
8
+ * they carry.
9
+ *
10
+ * Never both: driving a host and the slots inside it would compose the two
11
+ * writes and send the overlay twice as far as its screen.
12
+ */
13
+ export declare const collectLayerRiders: (container: HTMLElement | null) => HTMLElement[];
14
+ /**
15
+ * Whether an element beside a scope is riding this flight.
16
+ *
17
+ * A bar rides only when its partner screen does not own it, so it says so with
18
+ * an attribute the binding flips per flight. An overlay has exactly one screen
19
+ * and always leaves with it, so being a host or a slot is the whole answer.
20
+ */
21
+ export declare const isRider: (element: HTMLElement | null | undefined) => element is HTMLElement;
@@ -11,6 +11,7 @@ export interface ScreenLifecycleInput {
11
11
  scope: HTMLElement | null;
12
12
  decorator?: HTMLElement | null;
13
13
  bars?: (HTMLElement | null | undefined)[];
14
+ screenContainer?: HTMLElement | null;
14
15
  };
15
16
  transitionName: TransitionName;
16
17
  prevTransitionName: TransitionName;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,12 @@
1
1
  /** Shared prefix. Every attribute below starts with it. */
2
2
  export declare const FLEMO_ATTR_PREFIX = "data-flemo-";
3
- /** Marks a screen scope. Presence only — the value carries nothing. */
3
+ /**
4
+ * Marks a screen scope, and carries that screen's id.
5
+ *
6
+ * The value was empty until a `<Layer>` slot needed to name the screen it
7
+ * belongs to from the DOM alone. Presence selectors are unaffected, which is
8
+ * what every existing reader uses; nothing may start requiring the value.
9
+ */
4
10
  export declare const SCREEN_ATTR = "data-flemo-screen";
5
11
  /** The navigation status this screen is rendering: a `NavigateStatus` value. */
6
12
  export declare const STATUS_ATTR = "data-flemo-status";
@@ -43,12 +49,130 @@ export declare const BAR_SPACER_ATTR = "data-flemo-bar-spacer";
43
49
  export declare const DECORATOR_ATTR = "data-flemo-decorator";
44
50
  /** The decorator definition's name, for its own compiled rules. */
45
51
  export declare const DECORATOR_NAME_ATTR = "data-flemo-decorator-name";
52
+ /**
53
+ * The HOST: one childless box per screen chain, rendered by the OUTERMOST
54
+ * screen's container and inherited by every screen nested inside it. Outermost
55
+ * because an overlay has to clear the chrome of every screen above its own,
56
+ * and chrome declared by an ancestor sits outside that ancestor's scope.
57
+ *
58
+ * It is `position: absolute` and full-size so a consumer's absolutely
59
+ * positioned overlay has the region to anchor to, and it never takes a pointer
60
+ * itself — a host with nothing in it must not swallow taps meant for the
61
+ * screen underneath.
62
+ */
63
+ export declare const LAYER_HOST_ATTR = "data-flemo-layer-host";
64
+ /**
65
+ * A SLOT: one per `<Layer>`, portaled into the host, carrying its owning
66
+ * screen's identity. This is what keeps the escape from becoming an orphan —
67
+ * the slot leaves the screen's box for PAINT ORDER only, and takes the rest of
68
+ * being that screen with it:
69
+ *
70
+ * - it stacks by its owner's position, so two screens' overlays order the way
71
+ * their screens do rather than by portal mount order
72
+ * - it carries its owner's status/active/transition, so the compiled screen
73
+ * rule animates it in lockstep and it leaves WITH its screen (the same
74
+ * pairing a riding shared bar uses)
75
+ * - it mirrors its owner's paint-hidden state, which `visibility: hidden` on
76
+ * the screen container cannot reach across a portal
77
+ *
78
+ * Unmounting is React's: the slot is rendered from inside its screen's
79
+ * subtree, so it dies with the screen without anything having to notice.
80
+ */
81
+ export declare const LAYER_SLOT_ATTR = "data-flemo-layer-slot";
82
+ /**
83
+ * The id (see SCREEN_ATTR) of the screen a slot belongs to.
84
+ *
85
+ * A slot sits in an ancestor's host, so nothing about where it IS says whose
86
+ * it is. The gesture driver needs to: a drag moves a screen by writing inline
87
+ * styles frame by frame rather than through the compiled rules, so it has to
88
+ * enumerate everything that rides along, and it finds those by walking the
89
+ * moving screen's container. A slot is not in that container. This is how it
90
+ * is found anyway — the same problem a shared bar does not have, because a bar
91
+ * never leaves the container it belongs to.
92
+ */
93
+ export declare const LAYER_OWNER_ATTR = "data-flemo-layer-owner";
46
94
  /**
47
95
  * A `<Part>`'s registered part-transition name. Parts self-carry their screen's
48
96
  * status/active (STATUS_ATTR/ACTIVE_ATTR) so the compiled part selectors and
49
97
  * the engine's participant scan can both find them.
50
98
  */
51
99
  export declare const PART_NAME_ATTR = "data-flemo-part-name";
100
+ /**
101
+ * Marks a registered morph element. Presence only — the value is the ROLE
102
+ * (see MORPH_ROLE). Written by the binding, read by the morph runtime (to find
103
+ * the pair), by the compiled hold rule (so a morph pauses with its screen),
104
+ * and by devtools.
105
+ */
106
+ export declare const MORPH_ATTR = "data-flemo-morph";
107
+ /** The morph's side of the flight, stamped by the runtime for its duration. */
108
+ export declare const MORPH_ROLE: {
109
+ /** The arriving element: it travels from its partner's rect to its own. */
110
+ readonly ENTER: "enter";
111
+ /** The element left behind: it stays put and trades places with the arrival. */
112
+ readonly EXIT: "exit";
113
+ };
114
+ /**
115
+ * The registered morph-transition name for this element, so a consumer can run
116
+ * different morph choreography per element. Absent means the default preset.
117
+ */
118
+ export declare const MORPH_NAME_ATTR = "data-flemo-morph-name";
119
+ /**
120
+ * The per-Router FLIGHT LAYER: the box a shared element is staged in while it
121
+ * travels. Rendered by the binding (a Router knows which box bounds its
122
+ * screens); the morph runtime moves the element in at the start of a flight and
123
+ * back on landing. A morph inside a screen would be clipped by it, covered by
124
+ * it and dragged along with it — all three are properties of being a
125
+ * descendant, so for the flight it stops being one.
126
+ */
127
+ export declare const MORPH_LAYER_ATTR = "data-flemo-morph-layer";
128
+ /**
129
+ * The morph's placeholder: the box that stays behind in the layout, at the
130
+ * element's own size, while the element itself is up in the flight layer. It is
131
+ * what keeps the arriving screen laid out exactly as it will be at rest, so the
132
+ * landing has somewhere true to land.
133
+ */
134
+ export declare const MORPH_SLOT_ATTR = "data-flemo-morph-slot";
135
+ /**
136
+ * The STAND-IN: a copy of the element that is flying, left in its slot to hold
137
+ * its place in the layout.
138
+ *
139
+ * A placeholder measured in pixels is a placeholder that can be wrong, and
140
+ * "wrong" here is a layout shift lasting exactly as long as the flight. A copy
141
+ * of the element cannot be: the layout has no way to tell it apart from what
142
+ * was there — same box, same margins, same baseline. It paints nothing and
143
+ * takes no input, and it is replaced by the real element on landing. Owned
144
+ * entirely by the morph runtime.
145
+ */
146
+ export declare const MORPH_STAND_IN_ATTR = "data-flemo-morph-stand-in";
147
+ /**
148
+ * The GHOST: a copy of the element being replaced, carried inside the flight so
149
+ * the travelling box shows what was actually there at the start instead of the
150
+ * arrival's content squeezed into the departure's size. It cross-fades into the
151
+ * real element and is removed on landing. Owned entirely by the morph runtime.
152
+ */
153
+ export declare const MORPH_GHOST_ATTR = "data-flemo-morph-ghost";
154
+ /**
155
+ * The SCREEN a flight is driving as a camera, stamped with the flight's id.
156
+ *
157
+ * A morph with `carry: "screen"` does not just move its element: it moves the
158
+ * whole screen the element is small on, by exactly the zoom that takes the
159
+ * element from one end of the flight to the other. Everything else on that
160
+ * screen is then dragged along and pushed out of frame, which is what makes a
161
+ * container transform read as one camera move rather than as one card
162
+ * escaping a grid that stayed behind.
163
+ *
164
+ * The id is in the value because two flights can overlap: the rule that
165
+ * matches is the one whose keyframes are still in the sheet.
166
+ */
167
+ export declare const MORPH_CAMERA_ATTR = "data-flemo-morph-camera";
168
+ /**
169
+ * The `<style>` tag the morph runtime writes its per-flight keyframes into. A
170
+ * morph's geometry only exists once two rects do, so unlike every other
171
+ * animation in the library its keyframes cannot be compiled at registration —
172
+ * they are inserted when a flight starts and dropped when it lands. Kept out of
173
+ * the compiled sheet so that sheet stays a pure function of the definitions.
174
+ */
175
+ export declare const MORPH_SHEET_ATTR = "data-flemo-morph-sheet";
52
176
  /**
53
177
  * The animation hold. `"true"` pauses this element's compiled animation (and
54
178
  * its descendant parts) at the from-pose; `"park"` parks it at its
@@ -112,4 +236,4 @@ export declare const attrValueSelector: (attribute: string, value: string) => st
112
236
  * a devtools build can assert against the shipped set instead of a hand-kept
113
237
  * copy — the drift this module exists to end.
114
238
  */
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"];
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"];
@@ -0,0 +1,28 @@
1
+ /** The scope, the bars and the dim: ordered by paint order, not by number. */
2
+ export declare const UNNUMBERED_LEVEL = "auto";
3
+ /**
4
+ * The `<Layer>` host.
5
+ *
6
+ * Above any screen container this context can contain. A screen container is
7
+ * its stack position plus one, so the ceiling is a stack depth — this clears a
8
+ * depth no navigation stack reaches, and cannot leak past the container that
9
+ * isolates it.
10
+ */
11
+ export declare const OVERLAY_LEVEL = 100000;
12
+ /**
13
+ * The order as one readable list, so a test asserts the relation rather than
14
+ * restating the numbers and drifting from them.
15
+ */
16
+ export declare const SCREEN_STACKING_ORDER: readonly [{
17
+ readonly role: "content";
18
+ readonly level: "auto";
19
+ }, {
20
+ readonly role: "chrome";
21
+ readonly level: "auto";
22
+ }, {
23
+ readonly role: "decorator";
24
+ readonly level: "auto";
25
+ }, {
26
+ readonly role: "overlay";
27
+ readonly level: 100000;
28
+ }];
@@ -5,7 +5,6 @@ export interface History {
5
5
  pathname: string;
6
6
  params: object;
7
7
  transitionName: TransitionName;
8
- layoutId: string | number | null;
9
8
  frameIndex?: number;
10
9
  }
11
10
  export interface HistoryStore {
package/dist/index.d.ts CHANGED
@@ -25,11 +25,21 @@ export { decoratorMap } from './transition/decorator/decorator';
25
25
  export { default as createPartTransition } from './transition/partTransition/createPartTransition';
26
26
  export { default as createRawPartTransition } from './transition/partTransition/createRawPartTransition';
27
27
  export { partTransitionMap } from './transition/partTransition/partTransition';
28
+ export { default as createMorphTransition } from './transition/morphTransition/createMorphTransition';
29
+ export { default as createRawMorphTransition } from './transition/morphTransition/createRawMorphTransition';
30
+ export { morphTransitionMap } from './transition/morphTransition/morphTransition';
31
+ export { DEFAULT_MORPH_TRANSITION_NAME } from './transition/morphTransition/typing';
32
+ export { default as attachMorph, type AttachMorphOptions } from './morph/attachMorph';
33
+ export { registerMorphLayer } from './morph/morphLayer';
34
+ export { beginMorphSwipe, type MorphSwipe } from './morph/morphSwipe';
28
35
  export { default as cupertino } from './transition/cupertino';
29
36
  export { default as material } from './transition/material';
30
37
  export { default as layout } from './transition/layout';
31
38
  export { default as none } from './transition/none';
32
39
  export { default as overlay } from './transition/decorator/overlay';
40
+ export { default as shared } from './transition/morphTransition/shared';
41
+ export { default as textMorph } from './transition/morphTransition/text';
42
+ export { default as zoomMorph } from './transition/morphTransition/zoom';
33
43
  export { compileTransitionStyles, animationName, variantHasAnimation, targetToDecls, collectAnimatedProperties, easingToCss, type CssDecl } from './transition/compileTransitionStyles';
34
44
  export { default as applyTransitionStyles } from './transition/applyTransitionStyles';
35
45
  export { default as registerTransitionDefinitions } from './transition/registerTransitionDefinitions';
@@ -39,7 +49,8 @@ export { default as createTransitionEngine } from './core/engine/createTransitio
39
49
  export { governedCompiledActive } from './platform/governedCompiled';
40
50
  export { startFlemoRuntime } from './runtime/flemoRuntime';
41
51
  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';
52
+ 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 { OVERLAY_LEVEL, SCREEN_STACKING_ORDER, UNNUMBERED_LEVEL } from './dom/stacking';
43
54
  export { DIAGNOSTIC_FLAGS, RETIRED_DIAGNOSTIC_FLAGS, type DiagnosticFlag, type DiagnosticFlagKind, type RetiredDiagnosticFlag } from './core/engine/diagnosticRegistry';
44
55
  export { TRANSITIONAL_STATUS_VALUES } from './navigate/store';
45
56
  export { SKIP_ANIMATION_ATTR, type TransitionEngine, type TransitionEngineDeps, type ScreenLifecycleInput } from './core/engine/types';
@@ -58,6 +69,7 @@ export { default as ensureImageDecodeOffloader, createImageDecodeOffloader, shou
58
69
  export type { RegisterTransition, TransitionName, TransitionVariant, TransitionVariantValue, TransitionOptions, BaseTransition, Transition, SwipeInfo, SwipeAnimate } from './transition/typing';
59
70
  export type { RegisterDecorator, DecoratorName, DecoratorOptions, Decorator } from './transition/decorator/typing';
60
71
  export type { RegisterPartTransition, PartTransitionName, PartTransitionOptions, PartTransition } from './transition/partTransition/typing';
72
+ export type { RegisterMorphTransition, MorphTransitionName, MorphTransitionOptions, MorphTransition } from './transition/morphTransition/typing';
61
73
  export { default as isServer } from './utils/isServer';
62
74
  export { default as getParams } from './utils/getParams';
63
75
  export { default as getMatchedPathPattern } from './utils/getMatchedPathPattern';