@flemo/core 2.1.0 → 2.2.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.
Files changed (49) 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 +25 -0
  13. package/dist/history/historyDriver.d.ts +2 -0
  14. package/dist/index.d.ts +3 -3
  15. package/dist/index.mjs +2353 -2155
  16. package/dist/morph/__tests__/morphFace.test.d.ts +1 -0
  17. package/dist/morph/__tests__/morphLine.test.d.ts +1 -0
  18. package/dist/morph/morphFace.d.ts +61 -0
  19. package/dist/morph/morphGeometry.d.ts +48 -0
  20. package/dist/morph/morphKeyframes.d.ts +121 -4
  21. package/dist/morph/morphLine.d.ts +73 -0
  22. package/dist/morph/morphPose.d.ts +30 -0
  23. package/dist/morph/morphSheet.d.ts +9 -0
  24. package/dist/morph/morphSide.d.ts +6 -0
  25. package/dist/platform/profile.d.ts +41 -15
  26. package/dist/screen/__tests__/partLayer.test.d.ts +1 -0
  27. package/dist/screen/computeScreenFreeze.d.ts +0 -1
  28. package/dist/screen/partLayer.d.ts +14 -0
  29. package/dist/transition/__tests__/gestureScrub.test.d.ts +1 -0
  30. package/dist/transition/__tests__/partClockInheritance.test.d.ts +1 -0
  31. package/dist/transition/compileTransitionStyles.d.ts +9 -1
  32. package/dist/transition/gestureScrub.d.ts +33 -0
  33. package/dist/transition/partTransition/__tests__/resolvePartDefinition.test.d.ts +1 -0
  34. package/dist/transition/partTransition/createPartTransition.d.ts +4 -5
  35. package/dist/transition/partTransition/createRawPartTransition.d.ts +10 -11
  36. package/dist/transition/partTransition/partTransition.d.ts +17 -0
  37. package/dist/transition/partTransition/resolvePartClock.d.ts +41 -0
  38. package/dist/transition/partTransition/typing.d.ts +8 -2
  39. package/package.json +1 -1
  40. package/dist/core/engine/__tests__/diagnosticRegistry.test.d.ts +0 -10
  41. package/dist/core/engine/diagnosticFlags.d.ts +0 -16
  42. package/dist/core/engine/diagnosticRegistry.d.ts +0 -38
  43. package/dist/core/engine/imageRevealHold.d.ts +0 -2
  44. package/dist/morph/morphAnimations.d.ts +0 -2
  45. /package/dist/core/engine/__tests__/{createTransitionEngine.flightImageHold.test.d.ts → barPartStaging.test.d.ts} +0 -0
  46. /package/dist/core/engine/__tests__/{diagnosticFlags.test.d.ts → createSwipeController.barPartStaging.test.d.ts} +0 -0
  47. /package/dist/core/engine/__tests__/{documentedDefaults.test.d.ts → createSwipeController.dragRiders.test.d.ts} +0 -0
  48. /package/dist/core/engine/__tests__/{imageRevealHold.test.d.ts → createTransitionEngine.barPartStaging.test.d.ts} +0 -0
  49. /package/dist/{morph/__tests__/morphAnimations.test.d.ts → core/engine/__tests__/platformDefaults.test.d.ts} +0 -0
@@ -1,2 +1,19 @@
1
+ import { BaseTransition, Transition } from '../typing';
1
2
  import { PartTransition, PartTransitionName } from './typing';
2
3
  export declare const partTransitionMap: Map<PartTransitionName, PartTransition>;
4
+ /**
5
+ * A registered part, with the clock the CURRENT flight gives it.
6
+ *
7
+ * Every reader of a part's timing goes through here, because the compiled CSS
8
+ * does: the rule a part actually runs carries the resolved clock (see
9
+ * resolvePartClock and the pair pass in compileTransitionStyles), so a reader
10
+ * that resolved the authored variants instead would disagree with the glass.
11
+ * That disagreement is not cosmetic — the choreography span decides how long
12
+ * the whole flight stays open, and the layer pin decides what stays promoted
13
+ * across the COMPLETED flip.
14
+ *
15
+ * `transition` is null only where there is no flight to inherit from, which is
16
+ * a part mounted outside any screen. It then reads exactly what it authored,
17
+ * matching the by-name rule that is the only one such a part selects.
18
+ */
19
+ export declare const resolvePartDefinition: (name: string | null, transition: Pick<Transition, "variants"> | null) => Pick<BaseTransition, "initial" | "variants"> | undefined;
@@ -0,0 +1,41 @@
1
+ import { BaseTransition, Transition } from '../typing';
2
+ import { PartTransition } from './typing';
3
+ /**
4
+ * A part's variant table with its clock filled in from the screen transition
5
+ * carrying the flight.
6
+ *
7
+ * A `<Part>` declares a POSE: what the piece of chrome looks like on each side
8
+ * of a hand-over. How long it takes to get there is not its own question — it
9
+ * is the flight's, and the flight already answered it. Authoring the length a
10
+ * second time is how the two drift apart, and an omitted length was worse than
11
+ * drift: it resolved to zero and the part SNAPPED while the screen carrying it
12
+ * took three quarters of a second.
13
+ *
14
+ * This is the rule `resolveDecoratorClock` already applies to decorators, for
15
+ * the same reason and by the same mapping: the SAME VARIANT KEY. A part's
16
+ * PUSHING-false sits with the screen's PUSHING-false, so a preset whose push
17
+ * and pop differ (material runs 0.35s and 0.25s) gives its parts the same
18
+ * asymmetry without the author restating it.
19
+ *
20
+ * WHERE IT DIFFERS from a decorator, and why this could not simply reuse it: a
21
+ * decorator is reached through `transition.decoratorName`, so it belongs to one
22
+ * transition and can be resolved once. A part is referenced by NAME and may
23
+ * appear under any transition in the Router, so the pair is resolved per
24
+ * transition and the compiled rule carries a `data-flemo-transition` term to
25
+ * select the right one. A part mounted outside any screen has no transition to
26
+ * inherit from and keeps what it authored.
27
+ *
28
+ * `transition` is null where there is no flight to inherit from — the by-name
29
+ * pass, and a part mounted outside any screen. It then normalizes rather than
30
+ * inherits: every variant comes back with a clock, so nothing downstream has to
31
+ * carry the optional shape. That normalization is the reason PartVariantValue's
32
+ * looseness stops here, exactly as DecoratorVariantValue's does.
33
+ *
34
+ * Resolution is COMPILE TIME and produces a literal. It must never become a
35
+ * `var()` in `animation-duration`: timing that depended on custom properties
36
+ * lost WebKit's accelerated playback and collapsed to a 2-frame snap under
37
+ * main-thread starvation (device-bisected 2026-08-13, see
38
+ * compileTransitionStyles.ts).
39
+ */
40
+ export declare const resolvePartClock: (transition: Pick<Transition, "variants"> | null, part: Pick<PartTransition, "initial" | "variants">) => Pick<BaseTransition, "initial" | "variants">;
41
+ export default resolvePartClock;
@@ -1,4 +1,9 @@
1
- import { BaseTransition, SwipeAnimate } from '../typing';
1
+ import { AnimationOptions, TransitionTarget } from '../cssTypes';
2
+ import { BaseTransition, SwipeAnimate, TransitionVariant } from '../typing';
3
+ export type PartVariantValue = {
4
+ value: TransitionTarget;
5
+ options?: AnimationOptions;
6
+ };
2
7
  export interface RegisterPartTransition {
3
8
  }
4
9
  export type PartTransitionName = RegisterPartTransition[keyof RegisterPartTransition] | (string & {});
@@ -19,6 +24,7 @@ export type PartTransitionOptions = {
19
24
  active: boolean;
20
25
  }) => void;
21
26
  };
22
- export interface PartTransition extends Omit<BaseTransition, "name">, PartTransitionOptions {
27
+ export interface PartTransition extends Omit<BaseTransition, "name" | "variants">, PartTransitionOptions {
23
28
  name: PartTransitionName;
29
+ variants: Record<TransitionVariant, PartVariantValue>;
24
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flemo/core",
3
- "version": "2.1.0",
3
+ "version": "2.2.1",
4
4
  "description": "Framework-agnostic primitives for flemo: history, navigation, transitions, task manager.",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
@@ -1,10 +0,0 @@
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,16 +0,0 @@
1
- export declare const readImageHoldFlag: () => "on" | "off" | null;
2
- export declare const morphTraceArmed: () => boolean;
3
- export declare const readSettleGateFlag: () => boolean;
4
- export declare const readArrivalHoldFlag: () => boolean;
5
- export declare const readDesktopReleaseFlipFlag: () => boolean;
6
- export declare const readCreepHeadFlag: () => boolean;
7
- export declare const readDeferReleaseCommitFlag: () => boolean;
8
- export declare const readDesktopHeadFlag: () => boolean;
9
- export declare const readPrerasterFlag: () => boolean;
10
- export declare const readRestLayerPromotionFlag: () => boolean;
11
- export declare const readImageOffloadOverride: () => "on" | "off" | null;
12
- export declare const readBlinkGovernedOverride: () => "on" | "off" | null;
13
- export declare const residentScreenLayers: () => boolean;
14
- export declare const resetResidentLayersForTesting: () => void;
15
- export declare const shallowFreeze: () => boolean;
16
- export declare const resetShallowFreezeForTesting: () => void;
@@ -1,38 +0,0 @@
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[];
@@ -1,2 +0,0 @@
1
- export declare function beginImageRevealHold(scope: Element | null, backstopMs: number, unpaintedOnly?: boolean): () => void;
2
- export default beginImageRevealHold;
@@ -1,2 +0,0 @@
1
- export declare function preserveDescendantAnimations(root: Element, move: () => void): void;
2
- export default preserveDescendantAnimations;