@flemo/core 1.4.0 → 1.6.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 (41) hide show
  1. package/dist/core/engine/__tests__/barRiding.test.d.ts +1 -0
  2. package/dist/core/engine/__tests__/createSwipeController.test.d.ts +1 -0
  3. package/dist/core/engine/__tests__/createTransitionEngine.test.d.ts +1 -0
  4. package/dist/core/engine/barRiding.d.ts +18 -0
  5. package/dist/core/engine/createSwipeController.d.ts +32 -0
  6. package/dist/core/engine/createTransitionEngine.d.ts +2 -0
  7. package/dist/core/engine/types.d.ts +22 -0
  8. package/dist/history/__tests__/createHistorySync.test.d.ts +1 -0
  9. package/dist/history/__tests__/historyDriver.test.d.ts +1 -0
  10. package/dist/history/__tests__/memoryHistoryDriver.test.d.ts +1 -0
  11. package/dist/history/__tests__/seedInitialHistory.test.d.ts +1 -0
  12. package/dist/history/createHistorySync.d.ts +12 -0
  13. package/dist/history/ensureWindowHistoryState.d.ts +2 -0
  14. package/dist/history/historyDriver.d.ts +14 -0
  15. package/dist/history/memoryHistoryDriver.d.ts +5 -0
  16. package/dist/history/seedInitialHistory.d.ts +4 -0
  17. package/dist/history/store.d.ts +2 -0
  18. package/dist/index.d.ts +21 -1
  19. package/dist/index.mjs +820 -97
  20. package/dist/navigate/__tests__/createNavigationController.test.d.ts +1 -0
  21. package/dist/navigate/createNavigationController.d.ts +34 -0
  22. package/dist/navigate/selfPopGuard.d.ts +5 -0
  23. package/dist/screen/__tests__/computeScreenFreeze.test.d.ts +1 -0
  24. package/dist/screen/__tests__/createScreenSelector.test.d.ts +1 -0
  25. package/dist/screen/__tests__/store.test.d.ts +1 -0
  26. package/dist/screen/computeScreenFreeze.d.ts +11 -0
  27. package/dist/screen/createScreenSelector.d.ts +10 -0
  28. package/dist/screen/store.d.ts +16 -0
  29. package/dist/transition/__tests__/animateInline.test.d.ts +1 -0
  30. package/dist/transition/__tests__/applyTransitionStyles.test.d.ts +1 -0
  31. package/dist/transition/__tests__/compileTransitionStyles.test.d.ts +5 -0
  32. package/dist/transition/animateInline.d.ts +4 -0
  33. package/dist/transition/applyTransitionStyles.d.ts +1 -0
  34. package/dist/transition/compileTransitionStyles.d.ts +3 -2
  35. package/dist/transition/partTransition/__tests__/createPartTransition.test.d.ts +1 -0
  36. package/dist/transition/partTransition/__tests__/createRawPartTransition.test.d.ts +1 -0
  37. package/dist/transition/partTransition/createPartTransition.d.ts +13 -0
  38. package/dist/transition/partTransition/createRawPartTransition.d.ts +19 -0
  39. package/dist/transition/partTransition/partTransition.d.ts +2 -0
  40. package/dist/transition/partTransition/typing.d.ts +24 -0
  41. package/package.json +3 -3
@@ -0,0 +1,34 @@
1
+ import { HistoryDriver } from '../history/historyDriver';
2
+ import { HistoryStoreApi } from '../history/store';
3
+ import { NavigateStoreApi } from './store';
4
+ import { TransitionStoreApi } from '../transition/store';
5
+ import { TransitionName } from '../transition/typing';
6
+ export interface DistanceOptions {
7
+ skip?: number;
8
+ until?: string;
9
+ }
10
+ export interface NavigateOptions extends DistanceOptions {
11
+ layoutId?: string | number;
12
+ transitionName?: TransitionName;
13
+ }
14
+ export interface PopOptions extends DistanceOptions {
15
+ transitionName?: TransitionName;
16
+ }
17
+ export interface NavigationControllerDeps {
18
+ stores: {
19
+ history: HistoryStoreApi;
20
+ navigate: NavigateStoreApi;
21
+ transition: TransitionStoreApi;
22
+ };
23
+ buildPathname: (path: string, params: object) => {
24
+ pathname: string;
25
+ toPathname: string;
26
+ };
27
+ driver?: HistoryDriver;
28
+ markSelfInduced?: () => void;
29
+ }
30
+ export default function createNavigationController(deps: NavigationControllerDeps): {
31
+ push: (path: string, params?: object, options?: NavigateOptions) => Promise<void>;
32
+ replace: (path: string, params?: object, options?: NavigateOptions) => Promise<void>;
33
+ pop: (options?: PopOptions) => Promise<void>;
34
+ };
@@ -1,3 +1,8 @@
1
+ export interface SelfPopGuard {
2
+ mark(): void;
3
+ consume(): boolean;
4
+ }
5
+ export declare function createSelfPopGuard(): SelfPopGuard;
1
6
  /**
2
7
  * Marks that flemo itself is about to call `window.history.back()`. The
3
8
  * `popstate` it produces is then consumed by `consumeSelfInducedPop` so the
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { NavigateStatus } from '../navigate/store';
2
+ export interface ScreenFreezeInput {
3
+ isActive: boolean;
4
+ isPrev: boolean;
5
+ zIndex: number;
6
+ index: number;
7
+ status: NavigateStatus;
8
+ dragStatus: "IDLE" | "PENDING";
9
+ replaceTransitionStatus: "IDLE" | "PENDING";
10
+ }
11
+ export default function computeScreenFreeze(input: ScreenFreezeInput): boolean;
@@ -0,0 +1,10 @@
1
+ import { History } from '../history/store';
2
+ import { TransitionName } from '../transition/typing';
3
+ export interface ScreenSelection extends History {
4
+ isActive: boolean;
5
+ isRoot: boolean;
6
+ isPrev: boolean;
7
+ zIndex: number;
8
+ prevTransitionName: TransitionName;
9
+ }
10
+ export default function createScreenSelector(histories: History[], index: number): ScreenSelection[];
@@ -0,0 +1,16 @@
1
+ import { StoreApi } from 'zustand/vanilla';
2
+ export interface SharedBarPresence {
3
+ topBar: boolean;
4
+ bottomBar: boolean;
5
+ }
6
+ export interface ScreenStore {
7
+ dragStatus: "IDLE" | "PENDING";
8
+ replaceTransitionStatus: "IDLE" | "PENDING";
9
+ sharedBars: Record<string, SharedBarPresence>;
10
+ setDragStatus: (dragStatus: "IDLE" | "PENDING") => void;
11
+ setReplaceTransitionStatus: (replaceTransitionStatus: "IDLE" | "PENDING") => void;
12
+ registerSharedBars: (id: string, presence: SharedBarPresence) => void;
13
+ unregisterSharedBars: (id: string) => void;
14
+ }
15
+ export type ScreenStoreApi = StoreApi<ScreenStore>;
16
+ export default function createScreenStore(): ScreenStoreApi;
@@ -0,0 +1 @@
1
+ export {};
@@ -13,4 +13,9 @@ declare module '../decorator/typing' {
13
13
  "rich-deco": "rich-deco";
14
14
  }
15
15
  }
16
+ declare module '../partTransition/typing' {
17
+ interface RegisterPartTransition {
18
+ "test-title-fade": "test-title-fade";
19
+ }
20
+ }
16
21
  export {};
@@ -0,0 +1,4 @@
1
+ import { SwipeAnimate } from './typing';
2
+ export declare const clearInlineAnimation: (el: HTMLElement, properties?: string[]) => void;
3
+ declare const animateInline: SwipeAnimate;
4
+ export default animateInline;
@@ -0,0 +1 @@
1
+ export default function applyTransitionStyles(): void;
@@ -1,6 +1,7 @@
1
1
  import { AnimationOptions, InitialTarget } from './cssTypes';
2
2
  import { Transition, TransitionVariant, TransitionVariantValue } from './typing';
3
3
  import { Decorator } from './decorator/typing';
4
+ import { PartTransition } from './partTransition/typing';
4
5
  export type CssDecl = {
5
6
  property: string;
6
7
  value: string;
@@ -8,6 +9,6 @@ export type CssDecl = {
8
9
  export declare const collectAnimatedProperties: (transition: Transition) => string[];
9
10
  export declare const targetToDecls: (target: TransitionVariantValue["value"] | InitialTarget) => CssDecl[];
10
11
  export declare const easingToCss: (ease: AnimationOptions["ease"] | undefined) => string;
11
- export declare const animationName: (scope: "screen" | "decorator", name: string, variant: TransitionVariant) => string;
12
- export declare const compileTransitionStyles: (transitions: Iterable<Transition>, decorators: Iterable<Decorator>) => string;
12
+ export declare const animationName: (scope: "screen" | "decorator" | "part", name: string, variant: TransitionVariant) => string;
13
+ export declare const compileTransitionStyles: (transitions: Iterable<Transition>, decorators: Iterable<Decorator>, partTransitions?: Iterable<PartTransition>) => string;
13
14
  export declare const variantHasAnimation: (transitionLike: Pick<Transition, "initial" | "variants">, variant: TransitionVariant) => boolean;
@@ -0,0 +1,13 @@
1
+ import { InitialTarget } from '../cssTypes';
2
+ import { TransitionVariantValue } from '../typing';
3
+ import { PartTransition, PartTransitionName, PartTransitionOptions } from './typing';
4
+ interface CreatePartProps {
5
+ name: PartTransitionName;
6
+ initial: InitialTarget;
7
+ idle: TransitionVariantValue;
8
+ enter: TransitionVariantValue;
9
+ exit: TransitionVariantValue;
10
+ options?: PartTransitionOptions;
11
+ }
12
+ export default function createPartTransition({ name, initial, idle, enter, exit, options }: CreatePartProps): PartTransition;
13
+ export {};
@@ -0,0 +1,19 @@
1
+ import { InitialTarget } from '../cssTypes';
2
+ import { TransitionVariantValue } from '../typing';
3
+ import { PartTransition, PartTransitionName, PartTransitionOptions } from './typing';
4
+ interface CreateRawPartProps {
5
+ name: PartTransitionName;
6
+ initial: InitialTarget;
7
+ idle: TransitionVariantValue;
8
+ pushOnEnter: TransitionVariantValue;
9
+ pushOnExit: TransitionVariantValue;
10
+ replaceOnEnter: TransitionVariantValue;
11
+ replaceOnExit: TransitionVariantValue;
12
+ popOnEnter: TransitionVariantValue;
13
+ popOnExit: TransitionVariantValue;
14
+ completedOnEnter: TransitionVariantValue;
15
+ completedOnExit: TransitionVariantValue;
16
+ options?: PartTransitionOptions;
17
+ }
18
+ export default function createRawPartTransition({ name, initial, idle, pushOnEnter, pushOnExit, replaceOnEnter, replaceOnExit, popOnEnter, popOnExit, completedOnEnter, completedOnExit, options }: CreateRawPartProps): PartTransition;
19
+ export {};
@@ -0,0 +1,2 @@
1
+ import { PartTransition, PartTransitionName } from './typing';
2
+ export declare const partTransitionMap: Map<PartTransitionName, PartTransition>;
@@ -0,0 +1,24 @@
1
+ import { BaseTransition, SwipeAnimate } from '../typing';
2
+ export interface RegisterPartTransition {
3
+ }
4
+ export type PartTransitionName = RegisterPartTransition[keyof RegisterPartTransition] | (string & {});
5
+ export type PartTransitionOptions = {
6
+ onSwipeStart?: (triggered: boolean, options: {
7
+ animate: SwipeAnimate;
8
+ element: HTMLElement;
9
+ active: boolean;
10
+ }) => void;
11
+ onSwipe?: (triggered: boolean, progress: number, options: {
12
+ animate: SwipeAnimate;
13
+ element: HTMLElement;
14
+ active: boolean;
15
+ }) => void;
16
+ onSwipeEnd?: (triggered: boolean, options: {
17
+ animate: SwipeAnimate;
18
+ element: HTMLElement;
19
+ active: boolean;
20
+ }) => void;
21
+ };
22
+ export interface PartTransition extends Omit<BaseTransition, "name">, PartTransitionOptions {
23
+ name: PartTransitionName;
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flemo/core",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
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",
@@ -37,14 +37,14 @@
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^24.13.1",
40
- "@vitest/coverage-v8": "^4.1.8",
40
+ "@vitest/coverage-v8": "^4.1.9",
41
41
  "csstype": "^3.2.3",
42
42
  "eslint": "^9.39.4",
43
43
  "jsdom": "^29.1.1",
44
44
  "typescript": "^6.0.3",
45
45
  "vite": "^8.0.16",
46
46
  "vite-plugin-dts": "^5.0.2",
47
- "vitest": "^4.1.8",
47
+ "vitest": "^4.1.9",
48
48
  "@flemo/eslint-config": "0.0.0",
49
49
  "@flemo/tsconfig": "0.0.0"
50
50
  },