revojs 0.0.80 → 0.0.81

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.
@@ -67,6 +67,14 @@ export interface CustomElement<TEvents extends Events, TAttributes extends Attri
67
67
  export interface CustomElementConstructor<TEvents extends Events, TAttributes extends Attributes> {
68
68
  new (): CustomElement<TEvents, TAttributes>;
69
69
  }
70
+ export declare class ViewTransitionEvent extends Event {
71
+ readonly name: string;
72
+ constructor(name: string);
73
+ }
74
+ export declare class AfterViewTransitionEvent extends Event {
75
+ readonly name: string;
76
+ constructor(name: string);
77
+ }
70
78
  export declare class MountedEvent extends Event {
71
79
  constructor();
72
80
  }
@@ -88,7 +96,8 @@ export declare function useEvent<T extends keyof ElementEventMap>(scope: Scope,
88
96
  export declare function useEvent<T extends keyof WindowEventMap>(scope: Scope, target: Window | undefined | null, event: T, input: EventListener<WindowEventMap[T]>, options?: AddEventListenerOptions): void;
89
97
  export declare function useEvent<T extends keyof HTMLElementEventMap>(scope: Scope, target: Document | HTMLElement | undefined | null, event: T, input: EventListener<HTMLElementEventMap[T]>, options?: AddEventListenerOptions): void;
90
98
  export declare function onMounted(scope: Scope, event: EventListener<MountedEvent>): void;
91
- export declare function startViewTransition(invoke: ViewTransitionUpdateCallback): Promise<void>;
99
+ export declare function startViewTransition(name: string, invoke: ViewTransitionUpdateCallback): Promise<void>;
100
+ export declare function onViewTransition(scope: Scope, viewTransition: string, name: string): () => string;
92
101
  export declare function isClient(): boolean;
93
102
  export declare function isServer(): boolean;
94
103
  export declare function preventDefault(event: Event): void;
@@ -97,6 +106,10 @@ export declare function stopImmediatePropagation(event: Event): void;
97
106
  export declare const components: Map<string, ComponentConstructor<Events, Attributes>>;
98
107
  export declare const HOST_CONTEXT: import("..").Descriptor<HostContext>;
99
108
  declare global {
109
+ interface ElementEventMap {
110
+ viewTransition: ViewTransitionEvent;
111
+ afterViewTransition: AfterViewTransitionEvent;
112
+ }
100
113
  interface HTMLElementEventMap {
101
114
  mounted: MountedEvent;
102
115
  }
package/dist/index.js CHANGED
@@ -443,7 +443,7 @@ function useAsync(scope, invoke, options) {
443
443
  isLoading.value = true;
444
444
  try {
445
445
  const result = await invoke();
446
- if (options?.viewTransition) await startViewTransition(() => state.value = result);
446
+ if (options?.viewTransition) await startViewTransition(options.viewTransition, () => state.value = result);
447
447
  else state.value = result;
448
448
  } catch (error) {
449
449
  options?.catch?.(error);
@@ -520,6 +520,20 @@ const ROUTE_CONTEXT = defineContext("ROUTE_CONTEXT");
520
520
 
521
521
  //#endregion
522
522
  //#region src/html/index.ts
523
+ var ViewTransitionEvent = class extends Event {
524
+ name;
525
+ constructor(name) {
526
+ super("viewTransition");
527
+ this.name = name;
528
+ }
529
+ };
530
+ var AfterViewTransitionEvent = class extends Event {
531
+ name;
532
+ constructor(name) {
533
+ super("afterViewTransition");
534
+ this.name = name;
535
+ }
536
+ };
523
537
  var MountedEvent = class extends Event {
524
538
  constructor() {
525
539
  super("mounted");
@@ -800,10 +814,25 @@ function onMounted(scope, event) {
800
814
  useEvent(scope, host, "mounted", event);
801
815
  }
802
816
  }
803
- async function startViewTransition(invoke) {
804
- if (isClient() && document.startViewTransition !== void 0) return document.startViewTransition(invoke).updateCallbackDone;
817
+ async function startViewTransition(name, invoke) {
818
+ if (isClient() && document.startViewTransition !== void 0) {
819
+ document.dispatchEvent(new ViewTransitionEvent(name));
820
+ return document.startViewTransition(invoke).finished.finally(() => document.dispatchEvent(new AfterViewTransitionEvent(name)));
821
+ }
805
822
  return invoke();
806
823
  }
824
+ function onViewTransition(scope, viewTransition, name) {
825
+ const state = createState(name);
826
+ if (isClient()) {
827
+ useEvent(scope, document, "viewTransition", (event) => {
828
+ if (event.name === viewTransition) state.value = name;
829
+ });
830
+ useEvent(scope, document, "afterViewTransition", (event) => {
831
+ if (event.name === viewTransition) state.value = "none";
832
+ });
833
+ }
834
+ return () => `view-transition-name: ${state.value}`;
835
+ }
807
836
  function isClient() {
808
837
  return typeof window !== "undefined";
809
838
  }
@@ -834,11 +863,6 @@ var AfterNavigateEvent = class extends Event {
834
863
  super("afterNavigate");
835
864
  }
836
865
  };
837
- var AfterNavigateTransitionEvent = class extends Event {
838
- constructor() {
839
- super("afterNavigateTransition");
840
- }
841
- };
842
866
  function provideRouterContext(scope, options) {
843
867
  const url = createState();
844
868
  const route = createState();
@@ -863,7 +887,6 @@ function provideRouterContext(scope, options) {
863
887
  navigator.dispatchEvent(new AfterNavigateEvent());
864
888
  }
865
889
  };
866
- if (isClient()) useEvent(scope, window, "popstate", fetch$1);
867
890
  scope.setContext(ROUTE_CONTEXT, { inputs: createState() });
868
891
  scope.setContext(ROUTER_CONTEXT, {
869
892
  options,
@@ -873,8 +896,14 @@ function provideRouterContext(scope, options) {
873
896
  route
874
897
  });
875
898
  fetch$1();
876
- useEvent(scope, navigator, "navigate", () => startViewTransition(fetch$1).finally(() => navigator.dispatchEvent(new AfterNavigateTransitionEvent())));
877
- if (isClient()) requestAnimationFrame(() => navigator.dispatchEvent(new AfterNavigateTransitionEvent()));
899
+ useEvent(scope, navigator, "navigate", () => startViewTransition("navigate", fetch$1));
900
+ if (isClient()) {
901
+ useEvent(scope, window, "popstate", () => {
902
+ fetch$1();
903
+ document.dispatchEvent(new AfterViewTransitionEvent("navigate"));
904
+ });
905
+ requestAnimationFrame(() => document.dispatchEvent(new AfterViewTransitionEvent("navigate")));
906
+ }
878
907
  return useRouter(scope);
879
908
  }
880
909
  function useRouter(scope, context) {
@@ -951,4 +980,4 @@ function useLocale(scope, context) {
951
980
  const LOCALE_CONTEXT = defineContext("LOCALE_CONTEXT");
952
981
 
953
982
  //#endregion
954
- export { $fetch, AfterNavigateEvent, AfterNavigateTransitionEvent, CLIENT, Compute, HOST_CONTEXT, Handler, LOCALE_CONTEXT, MountedEvent, NavigateEvent, Page, ROUTER_CONTEXT, ROUTE_CONTEXT, RUNTIME_CONTEXT, Radix, SERVER, Scope, StopEvent, activeCompute, components, createApp, createCompute, createElement, createMemo, createRuntime, createState, defineComponent, defineContext, defineMiddleware, defineRoute, fileName, fromValue, hydrate, isClient, isComponent, isCustomElement, isRoute, isServer, isTemplate, mergeObjects, mimeType, onMounted, preventDefault, provideLocaleContext, provideRouterContext, registerComponent, renderToString, sendBadRequest, sendHtml, sendJson, sendRedirect, sendText, sendUnauthorized, setCookie, startViewTransition, stopImmediatePropagation, stopPropagation, targets, toArray, toCustomElement, toFragment, toPath, toRange, toString, untrack, useAsync, useCookies, useEvent, useFetch, useHost, useLocale, useQuery, useRoute, useRouter, useRuntime, useSetCookies, useUrl };
983
+ export { $fetch, AfterNavigateEvent, AfterViewTransitionEvent, CLIENT, Compute, HOST_CONTEXT, Handler, LOCALE_CONTEXT, MountedEvent, NavigateEvent, Page, ROUTER_CONTEXT, ROUTE_CONTEXT, RUNTIME_CONTEXT, Radix, SERVER, Scope, StopEvent, ViewTransitionEvent, activeCompute, components, createApp, createCompute, createElement, createMemo, createRuntime, createState, defineComponent, defineContext, defineMiddleware, defineRoute, fileName, fromValue, hydrate, isClient, isComponent, isCustomElement, isRoute, isServer, isTemplate, mergeObjects, mimeType, onMounted, onViewTransition, preventDefault, provideLocaleContext, provideRouterContext, registerComponent, renderToString, sendBadRequest, sendHtml, sendJson, sendRedirect, sendText, sendUnauthorized, setCookie, startViewTransition, stopImmediatePropagation, stopPropagation, targets, toArray, toCustomElement, toFragment, toPath, toRange, toString, untrack, useAsync, useCookies, useEvent, useFetch, useHost, useLocale, useQuery, useRoute, useRouter, useRuntime, useSetCookies, useUrl };
@@ -17,9 +17,6 @@ export declare class NavigateEvent extends Event {
17
17
  export declare class AfterNavigateEvent extends Event {
18
18
  constructor();
19
19
  }
20
- export declare class AfterNavigateTransitionEvent extends Event {
21
- constructor();
22
- }
23
20
  export declare function provideRouterContext(scope: Scope, options: RouterOptions): {
24
21
  url: State<URL | undefined>;
25
22
  route: State<unknown>;
@@ -44,6 +41,5 @@ declare global {
44
41
  interface ElementEventMap {
45
42
  navigate: NavigateEvent;
46
43
  afterNavigate: AfterNavigateEvent;
47
- afterNavigateTransition: AfterNavigateTransitionEvent;
48
44
  }
49
45
  }
@@ -22,7 +22,7 @@ export type RouteContext = {
22
22
  inputs: State<Record<string, string>>;
23
23
  };
24
24
  export type AsyncOptions = {
25
- viewTransition?: boolean;
25
+ viewTransition?: string;
26
26
  catch?: (error: unknown) => void | Promise<void>;
27
27
  };
28
28
  export declare function isRoute<T>(value?: T): value is Route & T;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "revojs",
3
- "version": "0.0.80",
3
+ "version": "0.0.81",
4
4
  "type": "module",
5
5
  "repository": "coverbase/revojs",
6
6
  "license": "MIT",