revojs 0.0.79 → 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
@@ -438,14 +438,17 @@ async function $fetch(scope, input, options) {
438
438
  function useAsync(scope, invoke, options) {
439
439
  const { tasks } = useRuntime(scope);
440
440
  const state = createState();
441
- const isLoading = createState(true);
441
+ const isLoading = createState(false);
442
442
  const execute = async () => {
443
+ isLoading.value = true;
443
444
  try {
444
- const result = await invoke().finally(() => isLoading.value = false);
445
- if (options?.viewTransition) await startViewTransition(() => state.value = result);
445
+ const result = await invoke();
446
+ if (options?.viewTransition) await startViewTransition(options.viewTransition, () => state.value = result);
446
447
  else state.value = result;
447
448
  } catch (error) {
448
449
  options?.catch?.(error);
450
+ } finally {
451
+ isLoading.value = false;
449
452
  }
450
453
  return state.value;
451
454
  };
@@ -517,6 +520,20 @@ const ROUTE_CONTEXT = defineContext("ROUTE_CONTEXT");
517
520
 
518
521
  //#endregion
519
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
+ };
520
537
  var MountedEvent = class extends Event {
521
538
  constructor() {
522
539
  super("mounted");
@@ -797,10 +814,25 @@ function onMounted(scope, event) {
797
814
  useEvent(scope, host, "mounted", event);
798
815
  }
799
816
  }
800
- async function startViewTransition(invoke) {
801
- 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
+ }
802
822
  return invoke();
803
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
+ }
804
836
  function isClient() {
805
837
  return typeof window !== "undefined";
806
838
  }
@@ -831,11 +863,6 @@ var AfterNavigateEvent = class extends Event {
831
863
  super("afterNavigate");
832
864
  }
833
865
  };
834
- var AfterNavigateTransitionEvent = class extends Event {
835
- constructor() {
836
- super("afterNavigateTransition");
837
- }
838
- };
839
866
  function provideRouterContext(scope, options) {
840
867
  const url = createState();
841
868
  const route = createState();
@@ -860,7 +887,6 @@ function provideRouterContext(scope, options) {
860
887
  navigator.dispatchEvent(new AfterNavigateEvent());
861
888
  }
862
889
  };
863
- if (isClient()) useEvent(scope, window, "popstate", fetch$1);
864
890
  scope.setContext(ROUTE_CONTEXT, { inputs: createState() });
865
891
  scope.setContext(ROUTER_CONTEXT, {
866
892
  options,
@@ -870,8 +896,14 @@ function provideRouterContext(scope, options) {
870
896
  route
871
897
  });
872
898
  fetch$1();
873
- useEvent(scope, navigator, "navigate", () => startViewTransition(fetch$1).finally(() => navigator.dispatchEvent(new AfterNavigateTransitionEvent())));
874
- 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
+ }
875
907
  return useRouter(scope);
876
908
  }
877
909
  function useRouter(scope, context) {
@@ -948,4 +980,4 @@ function useLocale(scope, context) {
948
980
  const LOCALE_CONTEXT = defineContext("LOCALE_CONTEXT");
949
981
 
950
982
  //#endregion
951
- 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.79",
3
+ "version": "0.0.81",
4
4
  "type": "module",
5
5
  "repository": "coverbase/revojs",
6
6
  "license": "MIT",