@ktjs/router 0.14.0 → 0.14.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
@@ -1,3 +1,5 @@
1
+ import { KTHTMLElement } from '@ktjs/core';
2
+
1
3
  /**
2
4
  * Guard level that determines which guards to apply during navigation
3
5
  * - there are global and route-level guards
@@ -31,6 +33,8 @@ interface RawRouteConfig {
31
33
  name?: string;
32
34
  /** Optional metadata attached to the route */
33
35
  meta?: Record<string, any>;
36
+ /** Optional component to render */
37
+ component: () => HTMLElement | Promise<HTMLElement>;
34
38
  /** Route-level guard executed before entering this route. Return false to block, string/object to redirect */
35
39
  beforeEnter?: (
36
40
  context: RouteContext
@@ -130,6 +134,9 @@ interface Router {
130
134
  /** Navigation history */
131
135
  history: RouteContext[];
132
136
 
137
+ /** Set the router view container */
138
+ setRouterView(view: HTMLElement): void;
139
+
133
140
  /** Navigate with guards */
134
141
  push(location: string | NavOptions): boolean | Promise<boolean>;
135
142
 
@@ -152,10 +159,17 @@ interface RouteMatch {
152
159
  result: RouteConfig[];
153
160
  }
154
161
 
162
+ /**
163
+ * Create a router view container that automatically renders route components
164
+ */
165
+ declare function KTRouter({ router }: {
166
+ router: Router;
167
+ }): KTHTMLElement;
168
+
155
169
  /**
156
170
  * Create a new router instance
157
171
  */
158
172
  declare const createRouter: (config: RouterConfig) => Router;
159
173
 
160
- export { GuardLevel, createRouter };
174
+ export { GuardLevel, KTRouter, createRouter };
161
175
  export type { NavOptions, RawRouteConfig, RouteConfig, RouteContext, RouteMatch, Router, RouterConfig };
@@ -150,6 +150,15 @@ var __ktjs_router__ = (function (exports) {
150
150
  };
151
151
  };
152
152
 
153
+ /**
154
+ * Create a router view container that automatically renders route components
155
+ */
156
+ function KTRouter({ router }) {
157
+ const view = document.createElement('kt-router-view');
158
+ router.setRouterView(view);
159
+ return view;
160
+ }
161
+
153
162
  /**
154
163
  * Create a new router instance
155
164
  */
@@ -162,6 +171,7 @@ var __ktjs_router__ = (function (exports) {
162
171
  const asyncGuards = config.asyncGuards ?? true;
163
172
  // # private values
164
173
  const routes = [];
174
+ let routerView = null;
165
175
  /**
166
176
  * Normalize routes by adding default guards
167
177
  */
@@ -174,6 +184,7 @@ var __ktjs_router__ = (function (exports) {
174
184
  beforeEnter: route.beforeEnter ?? defaultHook,
175
185
  after: route.after ?? defaultHook,
176
186
  children: route.children ? normalize(route.children, path) : [],
187
+ component: route.component,
177
188
  };
178
189
  // directly push the normalized route to the list
179
190
  // avoid flatten them again
@@ -338,6 +349,23 @@ var __ktjs_router__ = (function (exports) {
338
349
  // Update current route
339
350
  current = to;
340
351
  history.push(to);
352
+ // Render component if routerView exists
353
+ if (routerView && to.matched.length > 0) {
354
+ const route = to.matched[to.matched.length - 1];
355
+ if (route.component) {
356
+ const element = route.component();
357
+ if (element instanceof Promise) {
358
+ element.then((el) => {
359
+ routerView.innerHTML = '';
360
+ routerView.appendChild(el);
361
+ });
362
+ }
363
+ else {
364
+ routerView.innerHTML = '';
365
+ routerView.appendChild(element);
366
+ }
367
+ }
368
+ }
341
369
  // Execute after hooks
342
370
  executeAfterHooksSync(to, history[history.length - 2] ?? null);
343
371
  return true;
@@ -377,6 +405,15 @@ var __ktjs_router__ = (function (exports) {
377
405
  }
378
406
  current = to;
379
407
  history.push(to);
408
+ // Render component if routerView exists
409
+ if (routerView && to.matched.length > 0) {
410
+ const route = to.matched[to.matched.length - 1];
411
+ if (route.component) {
412
+ const element = await route.component();
413
+ routerView.innerHTML = '';
414
+ routerView.appendChild(element);
415
+ }
416
+ }
380
417
  executeAfterHooks(to, history[history.length - 2] ?? null);
381
418
  return true;
382
419
  }
@@ -425,6 +462,9 @@ var __ktjs_router__ = (function (exports) {
425
462
  get history() {
426
463
  return history.concat();
427
464
  },
465
+ setRouterView(view) {
466
+ routerView = view;
467
+ },
428
468
  push(location) {
429
469
  const options = normalizeLocation(location);
430
470
  return navigate(options);
@@ -446,6 +486,7 @@ var __ktjs_router__ = (function (exports) {
446
486
  };
447
487
  };
448
488
 
489
+ exports.KTRouter = KTRouter;
449
490
  exports.createRouter = createRouter;
450
491
 
451
492
  return exports;
@@ -239,6 +239,16 @@ var __ktjs_router__ = (function (exports) {
239
239
  };
240
240
  };
241
241
 
242
+ /**
243
+ * Create a router view container that automatically renders route components
244
+ */
245
+ function KTRouter(_a) {
246
+ var router = _a.router;
247
+ var view = document.createElement('kt-router-view');
248
+ router.setRouterView(view);
249
+ return view;
250
+ }
251
+
242
252
  /**
243
253
  * Create a new router instance
244
254
  */
@@ -252,6 +262,7 @@ var __ktjs_router__ = (function (exports) {
252
262
  var asyncGuards = (_e = config.asyncGuards) !== null && _e !== void 0 ? _e : true;
253
263
  // # private values
254
264
  var routes = [];
265
+ var routerView = null;
255
266
  /**
256
267
  * Normalize routes by adding default guards
257
268
  */
@@ -266,6 +277,7 @@ var __ktjs_router__ = (function (exports) {
266
277
  beforeEnter: (_c = route.beforeEnter) !== null && _c !== void 0 ? _c : defaultHook,
267
278
  after: (_d = route.after) !== null && _d !== void 0 ? _d : defaultHook,
268
279
  children: route.children ? normalize(route.children, path) : [],
280
+ component: route.component,
269
281
  };
270
282
  // directly push the normalized route to the list
271
283
  // avoid flatten them again
@@ -445,6 +457,23 @@ var __ktjs_router__ = (function (exports) {
445
457
  // Update current route
446
458
  current = to;
447
459
  history.push(to);
460
+ // Render component if routerView exists
461
+ if (routerView && to.matched.length > 0) {
462
+ var route = to.matched[to.matched.length - 1];
463
+ if (route.component) {
464
+ var element = route.component();
465
+ if (element instanceof Promise) {
466
+ element.then(function (el) {
467
+ routerView.innerHTML = '';
468
+ routerView.appendChild(el);
469
+ });
470
+ }
471
+ else {
472
+ routerView.innerHTML = '';
473
+ routerView.appendChild(element);
474
+ }
475
+ }
476
+ }
448
477
  // Execute after hooks
449
478
  executeAfterHooksSync(to, (_a = history[history.length - 2]) !== null && _a !== void 0 ? _a : null);
450
479
  return true;
@@ -460,13 +489,13 @@ var __ktjs_router__ = (function (exports) {
460
489
  args_1[_i - 1] = arguments[_i];
461
490
  }
462
491
  return __awaiter(void 0, __spreadArray([options_1], args_1, true), void 0, function (options, redirectCount) {
463
- var prep, guardLevel, replace, to, fullPath, guardResult, url, error_2;
492
+ var prep, guardLevel, replace, to, fullPath, guardResult, url, route, element, error_2;
464
493
  var _a;
465
494
  if (redirectCount === void 0) { redirectCount = 0; }
466
495
  return __generator(this, function (_b) {
467
496
  switch (_b.label) {
468
497
  case 0:
469
- _b.trys.push([0, 2, , 3]);
498
+ _b.trys.push([0, 4, , 5]);
470
499
  // Prevent infinite redirect loop
471
500
  if (redirectCount > 10) {
472
501
  onError(new Error('Maximum redirect count exceeded'));
@@ -496,13 +525,23 @@ var __ktjs_router__ = (function (exports) {
496
525
  }
497
526
  current = to;
498
527
  history.push(to);
528
+ if (!(routerView && to.matched.length > 0)) return [3 /*break*/, 3];
529
+ route = to.matched[to.matched.length - 1];
530
+ if (!route.component) return [3 /*break*/, 3];
531
+ return [4 /*yield*/, route.component()];
532
+ case 2:
533
+ element = _b.sent();
534
+ routerView.innerHTML = '';
535
+ routerView.appendChild(element);
536
+ _b.label = 3;
537
+ case 3:
499
538
  executeAfterHooks(to, (_a = history[history.length - 2]) !== null && _a !== void 0 ? _a : null);
500
539
  return [2 /*return*/, true];
501
- case 2:
540
+ case 4:
502
541
  error_2 = _b.sent();
503
542
  onError(error_2);
504
543
  return [2 /*return*/, false];
505
- case 3: return [2 /*return*/];
544
+ case 5: return [2 /*return*/];
506
545
  }
507
546
  });
508
547
  });
@@ -559,6 +598,9 @@ var __ktjs_router__ = (function (exports) {
559
598
  get history() {
560
599
  return history.concat();
561
600
  },
601
+ setRouterView: function (view) {
602
+ routerView = view;
603
+ },
562
604
  push: function (location) {
563
605
  var options = normalizeLocation(location);
564
606
  return navigate(options);
@@ -580,6 +622,7 @@ var __ktjs_router__ = (function (exports) {
580
622
  };
581
623
  };
582
624
 
625
+ exports.KTRouter = KTRouter;
583
626
  exports.createRouter = createRouter;
584
627
 
585
628
  return exports;
package/dist/index.mjs CHANGED
@@ -147,6 +147,15 @@ const createMatcher = (routes) => {
147
147
  };
148
148
  };
149
149
 
150
+ /**
151
+ * Create a router view container that automatically renders route components
152
+ */
153
+ function KTRouter({ router }) {
154
+ const view = document.createElement('kt-router-view');
155
+ router.setRouterView(view);
156
+ return view;
157
+ }
158
+
150
159
  /**
151
160
  * Create a new router instance
152
161
  */
@@ -159,6 +168,7 @@ const createRouter = (config) => {
159
168
  const asyncGuards = config.asyncGuards ?? true;
160
169
  // # private values
161
170
  const routes = [];
171
+ let routerView = null;
162
172
  /**
163
173
  * Normalize routes by adding default guards
164
174
  */
@@ -171,6 +181,7 @@ const createRouter = (config) => {
171
181
  beforeEnter: route.beforeEnter ?? defaultHook,
172
182
  after: route.after ?? defaultHook,
173
183
  children: route.children ? normalize(route.children, path) : [],
184
+ component: route.component,
174
185
  };
175
186
  // directly push the normalized route to the list
176
187
  // avoid flatten them again
@@ -335,6 +346,23 @@ const createRouter = (config) => {
335
346
  // Update current route
336
347
  current = to;
337
348
  history.push(to);
349
+ // Render component if routerView exists
350
+ if (routerView && to.matched.length > 0) {
351
+ const route = to.matched[to.matched.length - 1];
352
+ if (route.component) {
353
+ const element = route.component();
354
+ if (element instanceof Promise) {
355
+ element.then((el) => {
356
+ routerView.innerHTML = '';
357
+ routerView.appendChild(el);
358
+ });
359
+ }
360
+ else {
361
+ routerView.innerHTML = '';
362
+ routerView.appendChild(element);
363
+ }
364
+ }
365
+ }
338
366
  // Execute after hooks
339
367
  executeAfterHooksSync(to, history[history.length - 2] ?? null);
340
368
  return true;
@@ -374,6 +402,15 @@ const createRouter = (config) => {
374
402
  }
375
403
  current = to;
376
404
  history.push(to);
405
+ // Render component if routerView exists
406
+ if (routerView && to.matched.length > 0) {
407
+ const route = to.matched[to.matched.length - 1];
408
+ if (route.component) {
409
+ const element = await route.component();
410
+ routerView.innerHTML = '';
411
+ routerView.appendChild(element);
412
+ }
413
+ }
377
414
  executeAfterHooks(to, history[history.length - 2] ?? null);
378
415
  return true;
379
416
  }
@@ -422,6 +459,9 @@ const createRouter = (config) => {
422
459
  get history() {
423
460
  return history.concat();
424
461
  },
462
+ setRouterView(view) {
463
+ routerView = view;
464
+ },
425
465
  push(location) {
426
466
  const options = normalizeLocation(location);
427
467
  return navigate(options);
@@ -443,4 +483,4 @@ const createRouter = (config) => {
443
483
  };
444
484
  };
445
485
 
446
- export { createRouter };
486
+ export { KTRouter, createRouter };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ktjs/router",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "Router for kt.js - client-side routing with navigation guards",
5
5
  "type": "module",
6
6
  "module": "./dist/index.mjs",
@@ -31,7 +31,7 @@
31
31
  "directory": "packages/router"
32
32
  },
33
33
  "dependencies": {
34
- "@ktjs/core": "0.13.0"
34
+ "@ktjs/core": "0.14.3"
35
35
  },
36
36
  "scripts": {
37
37
  "build": "rollup -c rollup.config.mjs",