nexa-router 0.6.4 → 0.7.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.
package/dist/index.d.ts CHANGED
@@ -18,5 +18,6 @@ export declare function createRouter(config: RouterConfig): {
18
18
  currentPath: import("nexa-reactivity").Signal<string>;
19
19
  params: import("nexa-reactivity").Signal<Record<string, string>>;
20
20
  query: import("nexa-reactivity").Signal<Record<string, string>>;
21
+ scrollPositions: Map<string, number>;
21
22
  };
22
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1E,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEnC,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,KAAK,EAAE,CAAA;KAAE,CAAA;CACjC,CAAA;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY;qBA4BjB,MAAM;wBAJT,KAAK;;;;;EA+BjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAE1E,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEnC,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE;QAAE,UAAU,EAAE,KAAK,EAAE,CAAA;KAAE,CAAA;CACjC,CAAA;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY;qBA4BjB,MAAM;wBAJT,KAAK;;;;;;EA4CjC"}
package/dist/index.js CHANGED
@@ -38,12 +38,22 @@ export function createRouter(config) {
38
38
  window.location.hash = `#${path}`;
39
39
  }
40
40
  else {
41
+ scrollPositions.set(currentPath.value, window.scrollY);
41
42
  window.history.pushState({}, '', path);
43
+ window.scrollTo(0, 0);
42
44
  }
43
45
  currentPath.value = path;
44
46
  }
47
+ const scrollPositions = new Map();
45
48
  window.addEventListener('popstate', () => {
49
+ const prev = currentPath.value;
50
+ scrollPositions.set(prev, window.scrollY);
46
51
  currentPath.value = window.location.pathname + window.location.search;
52
+ setTimeout(() => {
53
+ const saved = scrollPositions.get(currentPath.value);
54
+ if (saved !== undefined)
55
+ window.scrollTo(0, saved);
56
+ }, 0);
47
57
  });
48
58
  return {
49
59
  navigate,
@@ -51,7 +61,8 @@ export function createRouter(config) {
51
61
  currentRoute,
52
62
  currentPath,
53
63
  params,
54
- query
64
+ query,
65
+ scrollPositions
55
66
  };
56
67
  }
57
68
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,UAAU,EAA6B,MAAM,SAAS,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAQnC,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7E,MAAM,MAAM,GAAG,MAAM,CAAyB,EAAE,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,MAAM,CAAyB,EAAE,CAAC,CAAA;IAChD,MAAM,MAAM,GAAY,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAA;IAEvD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,EAAE;QACjC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnD,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACzC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;gBACpB,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;QACxD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAE7B,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,SAAS,UAAU,CAAC,KAAY;QAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpB,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,IAAY;QAClC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC,OAAO;gBAAE,OAAM;QACtB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QACxC,CAAC;QACD,WAAW,CAAC,KAAK,GAAG,IAAI,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;QACvC,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,KAAK;KACN,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,kCAgBrB,CAAA"}
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,kCAuCrB,CAAA"}
package/dist/view.js CHANGED
@@ -2,17 +2,37 @@ import { defineComponent, h } from 'nexa-runtime';
2
2
  export const RouterView = defineComponent({
3
3
  name: 'RouterView',
4
4
  props: {
5
- router: { type: Object, required: true }
5
+ router: { type: Object, required: true },
6
+ transition: { type: String, default: null },
7
+ keepAlive: { type: Boolean, default: false }
6
8
  },
7
9
  setup(props) {
10
+ const cache = new Map();
8
11
  return () => {
9
12
  const route = props.router.currentRoute.value;
10
13
  if (!route || !route.component)
11
14
  return h('div', { class: 'n-router-empty' }, '404 Not Found');
12
- return h(route.component, {
15
+ const vnode = h(route.component, {
13
16
  params: props.router.params.value,
14
17
  query: props.router.query.value
15
18
  });
19
+ // Simple keep-alive cache implementation at the router level
20
+ let rendered = vnode;
21
+ if (props.keepAlive) {
22
+ const path = props.router.currentPath.value;
23
+ if (cache.has(path)) {
24
+ const cached = cache.get(path);
25
+ // Restore element
26
+ if (cached.el)
27
+ vnode.el = cached.el;
28
+ }
29
+ cache.set(path, vnode);
30
+ }
31
+ // Transition wrapper
32
+ if (props.transition) {
33
+ return h('transition', { name: props.transition, mode: 'out-in' }, [rendered]);
34
+ }
35
+ return rendered;
16
36
  };
17
37
  }
18
38
  });
package/dist/view.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;IACxC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;KACzC;IACD,KAAK,CAAC,KAAK;QACT,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAA;YAC7C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,eAAe,CAAC,CAAA;YAE7F,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;gBACjC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;aAChC,CAAC,CAAA;QACJ,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;IACxC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE;QACL,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACxC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QAC3C,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;KAC7C;IACD,KAAK,CAAC,KAAK;QACT,MAAM,KAAK,GAAG,IAAI,GAAG,EAAe,CAAA;QAEpC,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAA;YAC7C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,eAAe,CAAC,CAAA;YAE7F,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE;gBAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;gBACjC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;aAChC,CAAC,CAAA;YAEF,6DAA6D;YAC7D,IAAI,QAAQ,GAAG,KAAK,CAAA;YACpB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAA;gBAC3C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAC9B,kBAAkB;oBAClB,IAAI,MAAM,CAAC,EAAE;wBAAE,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA;gBACrC,CAAC;gBACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACxB,CAAC;YAED,qBAAqB;YACrB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;YAChF,CAAC;YAED,OAAO,QAAQ,CAAA;QACjB,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexa-router",
3
- "version": "0.6.4",
3
+ "version": "0.7.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -13,7 +13,7 @@
13
13
  }
14
14
  },
15
15
  "dependencies": {
16
- "nexa-runtime": "0.6.4"
16
+ "nexa-runtime": "0.7.1"
17
17
  },
18
18
  "files": [
19
19
  "dist"
@@ -22,7 +22,7 @@
22
22
  "access": "public"
23
23
  },
24
24
  "peerDependencies": {
25
- "nexa-reactivity": "0.6.4"
25
+ "nexa-reactivity": "0.7.1"
26
26
  },
27
27
  "scripts": {
28
28
  "build": "tsc",