lit-ui-router 1.16.0 → 1.16.2

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 (37) hide show
  1. package/dist/custom-elements.json +35 -2
  2. package/dist/development/router-subscription.js +65 -0
  3. package/dist/development/router-subscription.js.map +1 -0
  4. package/dist/development/sref-status-controller.js +24 -4
  5. package/dist/development/sref-status-controller.js.map +1 -1
  6. package/dist/development/transition-controller.js +22 -3
  7. package/dist/development/transition-controller.js.map +1 -1
  8. package/dist/development/ui-router.js +5 -10
  9. package/dist/development/ui-router.js.map +1 -1
  10. package/dist/development/ui-view.js +15 -3
  11. package/dist/development/ui-view.js.map +1 -1
  12. package/dist/router-subscription.d.ts +46 -0
  13. package/dist/router-subscription.d.ts.map +1 -0
  14. package/dist/router-subscription.js +65 -0
  15. package/dist/router-subscription.js.map +1 -0
  16. package/dist/sref-status-controller.d.ts +9 -2
  17. package/dist/sref-status-controller.d.ts.map +1 -1
  18. package/dist/sref-status-controller.js +24 -4
  19. package/dist/sref-status-controller.js.map +1 -1
  20. package/dist/transition-controller.d.ts +10 -2
  21. package/dist/transition-controller.d.ts.map +1 -1
  22. package/dist/transition-controller.js +22 -3
  23. package/dist/transition-controller.js.map +1 -1
  24. package/dist/ui-router.d.ts +6 -5
  25. package/dist/ui-router.d.ts.map +1 -1
  26. package/dist/ui-router.js +5 -10
  27. package/dist/ui-router.js.map +1 -1
  28. package/dist/ui-view.d.ts +14 -1
  29. package/dist/ui-view.d.ts.map +1 -1
  30. package/dist/ui-view.js +15 -3
  31. package/dist/ui-view.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/router-subscription.ts +132 -0
  34. package/src/sref-status-controller.ts +45 -12
  35. package/src/transition-controller.ts +37 -7
  36. package/src/ui-router.ts +18 -24
  37. package/src/ui-view.ts +37 -4
@@ -1 +1 @@
1
- {"version":3,"file":"sref-status-controller.js","mappings":"AACA,SAAS,eAA2D;AAEpE,SAAS,yBAAyB;AAElC,SAAS,oBAAoB,mBAAmB;AAChD,SAAS,0BAA0B;AACnC,SACE,sBACA,oCAEK;AAOP,SAAS,cAAc;AAgCvB,MAAM,aACJ,GACA,MAEA,MAAM,KACL,CAAC,CAAC,KACD,CAAC,CAAC,KACF,EAAE,WAAW,EAAE,UACf,EAAE,UAAU,EAAE,SACd,EAAE,aAAa,EAAE,YACjB,EAAE,YAAY,EAAE,WAChB,EAAE,aAAa,WAAW,EAAE,aAAa,UACzC,EAAE,aAAa,OAAO,QAAQ,MAAM,WAAW,EAAE,aAAa,EAAE;AA8EpE,OAAO,MAAM,qBAAmD;CAiB9D,YACE,MACA,UAAuC,CAAC,GACxC;iBAfyB,IAAI,YAAY;uBAEM,CAAC;kBAK/B;qBAGG;8BA4KkB,UAAmC;GACzE,KAAK,QAAQ,OAAO,KAAK;GACzB,KAAK,QAAQ;EACf;qCAE+C,UAAuB;GACpE,IAAI,KAAK,QAAQ,cAAc,KAAK,GAClC,KAAK,QAAQ;EAEjB;+BAE+C;GAC7C,KAAK,QAAQ,QAAQ;GACrB,KAAK,QAAQ;EACf;4BAEsC,UAA4B;GAEhE,MAAM,aAAa,KAAK;GACxB,MAAM,WAAW,QAA+B;IAC9C,IAAI,eAAe,KAAK,aACtB,KAAK,QAAQ;KAAE;KAAK;IAAM,CAAC;GAE/B;GACA,KAAK,QAAQ;IAAE,KAAK;IAAS;GAAM,CAAC;GACpC,MAAM,QAAQ,WACN,QAAQ,SAAS,SACjB,QAAQ,OAAO,CACvB;EACF;EAnME,KAAK,OAAO;EACZ,KAAK,UAAU;EACf,KAAK,QAAQ,SAAS;EACtB,KAAK,cAAc,IAAI;EAEvB,IAAI,QAAQ,QAAQ;GAElB,KAAK,QAAQ,SAAS,QAAQ;GAC9B,KAAK,QAAQ,YAAY;GACzB,KAAK,QAAQ;EACf;CACF;CASA,IAAI,SAA+B;EACjC,OAAO,KAAK,QAAQ;CACtB;CAMA,IAAI,SAAiC;EACnC,OAAO,KAAK;CACd;CAGA,IAAI,SAAkB;EACpB,OAAO,KAAK,SAAS,UAAU;CACjC;CAGA,IAAI,QAAiB;EACnB,OAAO,KAAK,SAAS,SAAS;CAChC;CAGA,IAAI,WAAoB;EACtB,OAAO,KAAK,SAAS,YAAY;CACnC;CAGA,IAAI,UAAmB;EACrB,OAAO,KAAK,SAAS,WAAW;CAClC;CAGA,IAAI,eAA8B;EAChC,OAAO,KAAK,SAAS,gBAAgB,CAAC;CACxC;CAOA,SAAS,QAAgC;EACvC,KAAK,UAAU;GAAE,QAAQ,KAAK,QAAQ;GAAQ,GAAG;EAAO;EACxD,KAAK,QAAQ,SAAS,KAAK;EAC3B,KAAK,QAAQ,YAAY;EACzB,KAAK,QAAQ;CACf;CAUA,YACE,OACmC;EACnC,OAAO,KAAK,UAAU,mBAAmB,KAAK,SAAS,KAAK,IAAI;CAClE;CAGA,gBAAsB;EACpB,MAAM,EAAE,SAAS;EACjB,KAAK,QAAQ,WACX,KAAK,QAAQ,UAAU,mBAAmB,WAAW,IAAI;EAC3D,KAAK,QAAQ,WAAW,OAAO,eAAe,IAAI,CAAC,EAAE,aAAa;EAClE,KAAK,QAAQ,YAAY;EAIzB,MAAM,QACH,KAAsC,cAAc;EACvD,MAAM,iBACJ,sBACA,KAAK,mBACP;EACA,MAAM,iBACJ,8BACA,KAAK,0BACP;EACA,KAAK,cAAc,WAAW;GAC5B,MAAM,oBACJ,sBACA,KAAK,mBACP;GACA,MAAM,oBACJ,8BACA,KAAK,0BACP;EACF,CAAC;EAED,MAAM,SAAS,KAAK,QAAQ;EAC5B,IAAI,QACF,KAAK,cAAc,KACjB,OAAO,kBAAkB,QAAQ,CAAC,GAAG,KAAK,mBAAmB,EAC3D,UAAU,UACZ,CAAC,GACD,OAAO,cAAc,gBAAgB,KAAK,eAAe,CAC3D;OAEA,kBACE,MACA,kCAAkC,KAAK,UAAU,IACjD,6BACF;EAGF,KAAK,QAAQ;CACf;CAGA,mBAAyB;EACvB,KAAK;EACL,OAAO,KAAK,cAAc,QACxB,KAAK,cAAc,MAAM,CAAC,GAAG;EAE/B,IAAI,CAAC,KAAK,QAAQ,QAEhB,KAAK,QAAQ,SAAS;CAE1B;CAQA,QAAQ,OAAwB;EAC9B,IAAI,KAAK,QAAQ,KAAK,GACpB,KAAK,KAAK,cAAc;CAE5B;CAGA,QAAgB,OAA2B;EACzC,MAAM,SAAS,KAAK;EACpB,KAAK,UAAU,KAAK,QAAQ,OAAO,KAAK;EACxC,MAAM,QAAQ,CAAC,KAAK;EACpB,KAAK,WAAW;EAChB,OAAO,SAAS,CAAC,UAAU,QAAQ,KAAK,OAAO;CACjD;AAgCF","names":[],"ignoreList":[],"sources":["../src/sref-status-controller.ts"]}
1
+ {"version":3,"file":"sref-status-controller.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/sref-status-controller.ts"]}
@@ -47,8 +47,10 @@ export interface TransitionControllerOptions {
47
47
  * The {@link UIRouter} instance to observe.
48
48
  *
49
49
  * When omitted, the controller discovers the router from an ancestor
50
- * <code>&lt;ui-router&gt;</code> (or <code>&lt;ui-view&gt;</code>) via the
51
- * `ui-router-context` event when the host connects.
50
+ * <code>&lt;ui-router&gt;</code> (or <code>&lt;ui-view&gt;</code>) each time
51
+ * the host connects, and follows the placeholder router a
52
+ * <code>&lt;ui-router&gt;</code> mints for itself to the one that replaces
53
+ * it, synchronizing again with the `'hostConnected'` reason.
52
54
  */
53
55
  router?: UIRouter;
54
56
  /**
@@ -120,6 +122,8 @@ export declare class TransitionController implements ReactiveController {
120
122
  private readonly host;
121
123
  private readonly options;
122
124
  private readonly deregisterFns;
125
+ /** drops the subscription to a provider that may still replace its router */
126
+ private unsubscribe?;
123
127
  private _router?;
124
128
  private _transition?;
125
129
  constructor(host: ReactiveControllerHost & Element, options?: TransitionControllerOptions);
@@ -152,6 +156,10 @@ export declare class TransitionController implements ReactiveController {
152
156
  hostConnected(): void;
153
157
  /** @internal */
154
158
  hostDisconnected(): void;
159
+ private watch;
160
+ private unwatch;
161
+ /** What a disconnect and reconnect would do, for the router that replaced the one found. */
162
+ private readonly onRouterReplaced;
155
163
  private notify;
156
164
  }
157
165
  //# sourceMappingURL=transition-controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transition-controller.d.ts","mappings":"AAAA,SACE,mBAEA,WACA,kBACA,aACA,YACA,UACA,uBACK;AACP,SAAS,oBAAoB,8BAA8B;;;;;;;;;;AAgB3D,YAAY,sBACR,aACA,YACA,cACA;;;;;;;;;;AAWJ,YAAY,2BAA2B,sBAAsB;;;;;;;;;;;;;;;;;AAkB7D,YAAY,sBACV,YAAY,wBACZ,QAAQ;;;;;;AAQV,iBAAiB,4BAA4B;;;;;;;;CAQ3C,SAAS;;;;;;;CAQT,WAAW;;;;;;CAOX,SAAS;;;;;CAMT,WAAW;AACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,OAAO,cAAM,gCAAgC,mBAAmB;CAC9D,iBAAiB;CAEjB,iBAAiB;CAEjB,iBAAiB;CAEjB,QAAQ;CAER,QAAQ;CAER,YACE,MAAM,yBAAyB,SAC/B,UAAS;;;;;;;CAcX,IAAI,UAAU;;CAKd,IAAI,WAAW;;CAKf,IAAI,UAAU;;CAKd,IAAI,WAAW;;;;;CAQf,IAAI,cAAc;;;;;;;CAUlB,SAAS,aAAa,aAAa,SAAS;;CAK5C;;CA8BA;CAMA,QAAQ;AASV","names":[],"ignoreList":[],"sources":["../src/transition-controller.ts"]}
1
+ {"version":3,"file":"transition-controller.d.ts","mappings":"AAAA,SACE,mBAEA,WACA,kBACA,aACA,YACA,UACA,uBACK;AACP,SAAS,oBAAoB,8BAA8B;;;;;;;;;;AAgB3D,YAAY,sBACR,aACA,YACA,cACA;;;;;;;;;;AAWJ,YAAY,2BAA2B,sBAAsB;;;;;;;;;;;;;;;;;AAkB7D,YAAY,sBACV,YAAY,wBACZ,QAAQ;;;;;;AAQV,iBAAiB,4BAA4B;;;;;;;;;;CAU3C,SAAS;;;;;;;CAQT,WAAW;;;;;;CAOX,SAAS;;;;;CAMT,WAAW;AACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,OAAO,cAAM,gCAAgC,mBAAmB;CAC9D,iBAAiB;CAEjB,iBAAiB;CAEjB,iBAAiB;;CAGjB,QAAQ;CAER,QAAQ;CAER,QAAQ;CAER,YACE,MAAM,yBAAyB,SAC/B,UAAS;;;;;;;CAcX,IAAI,UAAU;;CAKd,IAAI,WAAW;;CAKf,IAAI,UAAU;;CAKd,IAAI,WAAW;;;;;CAQf,IAAI,cAAc;;;;;;;CAUlB,SAAS,aAAa,aAAa,SAAS;;CAK5C;;CAcA;CAMA,QAAQ;CA0BR,QAAQ;;CAOR,iBAAiB;CAQjB,QAAQ;AASV","names":[],"ignoreList":[],"sources":["../src/transition-controller.ts"]}
@@ -1,7 +1,14 @@
1
- import { UIRouterLitElement } from "./ui-router.js";
1
+ import { subscribeRouter } from "./router-subscription.js";
2
2
  export class TransitionController {
3
3
  constructor(host, options = {}) {
4
4
  this.deregisterFns = [];
5
+ this.onRouterReplaced = (router) => {
6
+ this.unsubscribe = void 0;
7
+ this.unwatch();
8
+ this._router = router;
9
+ this._transition = void 0;
10
+ this.watch();
11
+ };
5
12
  this.host = host;
6
13
  this.options = options;
7
14
  this._router = options.router;
@@ -26,7 +33,19 @@ export class TransitionController {
26
33
  return this._router?.stateService.includes(stateOrName, params) ?? false;
27
34
  }
28
35
  hostConnected() {
29
- this._router ??= this.options.router ?? UIRouterLitElement.seekRouter(this.host);
36
+ if (!this.options.router) {
37
+ const { router, unsubscribe } = subscribeRouter(this.host, this.onRouterReplaced);
38
+ this._router = router ?? this._router;
39
+ this.unsubscribe = unsubscribe;
40
+ }
41
+ this.watch();
42
+ }
43
+ hostDisconnected() {
44
+ this.unsubscribe?.();
45
+ this.unsubscribe = void 0;
46
+ this.unwatch();
47
+ }
48
+ watch() {
30
49
  const router = this._router;
31
50
  if (!router) return;
32
51
  const criteria = this.options.criteria ?? {};
@@ -34,7 +53,7 @@ export class TransitionController {
34
53
  for (const event of events) this.deregisterFns.push(router.transitionService[event](criteria, (transition) => this.notify(transition, event)));
35
54
  this.notify(router.globals.successfulTransitions.peekTail(), "hostConnected");
36
55
  }
37
- hostDisconnected() {
56
+ unwatch() {
38
57
  while (this.deregisterFns.length) this.deregisterFns.shift()?.();
39
58
  }
40
59
  notify(transition, reason) {
@@ -1 +1 @@
1
- {"version":3,"file":"transition-controller.js","mappings":"AAYA,SAAS,0BAA0B;AAuInC,OAAO,MAAM,qBAAmD;CAW9D,YACE,MACA,UAAuC,CAAC,GACxC;uBAT+C,CAAC;EAUhD,KAAK,OAAO;EACZ,KAAK,UAAU;EACf,KAAK,UAAU,QAAQ;EACvB,KAAK,cAAc,IAAI;CACzB;CAQA,IAAI,SAA+B;EACjC,OAAO,KAAK;CACd;CAGA,IAAI,UAAuC;EACzC,OAAO,KAAK,SAAS;CACvB;CAGA,IAAI,SAAoB;EACtB,OAAO,KAAK,SAAS,UAAU,CAAC;CAClC;CAGA,IAAI,UAAwC;EAC1C,OAAO,KAAK,SAAS;CACvB;CAMA,IAAI,aAAqC;EACvC,OAAO,KAAK;CACd;CAQA,SAAS,aAA0B,QAA6B;EAC9D,OAAO,KAAK,SAAS,aAAa,SAAS,aAAa,MAAM,KAAK;CACrE;CAGA,gBAAsB;EACpB,KAAK,YACH,KAAK,QAAQ,UAAU,mBAAmB,WAAW,KAAK,IAAI;EAEhE,MAAM,SAAS,KAAK;EACpB,IAAI,CAAC,QACH;EAGF,MAAM,WAAW,KAAK,QAAQ,YAAY,CAAC;EAC3C,MAAM,SAAS,KAAK,QAAQ,UAAU,CAAC,WAAW;EAElD,KAAK,MAAM,SAAS,QAClB,KAAK,cAAc,KACjB,OAAO,kBAAkB,MAAM,CAC7B,WACC,eAAe,KAAK,OAAO,YAAY,KAAK,CAC/C,CACF;EAKF,KAAK,OACH,OAAO,QAAQ,sBAAsB,SAAS,GAC9C,eACF;CACF;CAGA,mBAAyB;EACvB,OAAO,KAAK,cAAc,QACxB,KAAK,cAAc,MAAM,CAAC,GAAG;CAEjC;CAEA,OACE,YACA,QACS;EACT,KAAK,cAAc,cAAc,KAAK;EACtC,MAAM,SAAS,KAAK,QAAQ,WAAW,YAAY,MAAM;EACzD,KAAK,KAAK,cAAc;EACxB,OAAO;CACT;AACF","names":[],"ignoreList":[],"sources":["../src/transition-controller.ts"]}
1
+ {"version":3,"file":"transition-controller.js","mappings":"AAYA,SAAS,uBAAuB;AAyIhC,OAAO,MAAM,qBAAmD;CAc9D,YACE,MACA,UAAuC,CAAC,GACxC;uBAZ+C,CAAC;2BAoHb,WAA2B;GAC9D,KAAK,cAAc;GACnB,KAAK,QAAQ;GACb,KAAK,UAAU;GACf,KAAK,cAAc;GACnB,KAAK,MAAM;EACb;EA7GE,KAAK,OAAO;EACZ,KAAK,UAAU;EACf,KAAK,UAAU,QAAQ;EACvB,KAAK,cAAc,IAAI;CACzB;CAQA,IAAI,SAA+B;EACjC,OAAO,KAAK;CACd;CAGA,IAAI,UAAuC;EACzC,OAAO,KAAK,SAAS;CACvB;CAGA,IAAI,SAAoB;EACtB,OAAO,KAAK,SAAS,UAAU,CAAC;CAClC;CAGA,IAAI,UAAwC;EAC1C,OAAO,KAAK,SAAS;CACvB;CAMA,IAAI,aAAqC;EACvC,OAAO,KAAK;CACd;CAQA,SAAS,aAA0B,QAA6B;EAC9D,OAAO,KAAK,SAAS,aAAa,SAAS,aAAa,MAAM,KAAK;CACrE;CAGA,gBAAsB;EACpB,IAAI,CAAC,KAAK,QAAQ,QAAQ;GACxB,MAAM,EAAE,QAAQ,gBAAgB,gBAC9B,KAAK,MACL,KAAK,gBACP;GAEA,KAAK,UAAU,UAAU,KAAK;GAC9B,KAAK,cAAc;EACrB;EACA,KAAK,MAAM;CACb;CAGA,mBAAyB;EACvB,KAAK,cAAc;EACnB,KAAK,cAAc;EACnB,KAAK,QAAQ;CACf;CAEA,QAAsB;EACpB,MAAM,SAAS,KAAK;EACpB,IAAI,CAAC,QACH;EAGF,MAAM,WAAW,KAAK,QAAQ,YAAY,CAAC;EAC3C,MAAM,SAAS,KAAK,QAAQ,UAAU,CAAC,WAAW;EAElD,KAAK,MAAM,SAAS,QAClB,KAAK,cAAc,KACjB,OAAO,kBAAkB,MAAM,CAC7B,WACC,eAAe,KAAK,OAAO,YAAY,KAAK,CAC/C,CACF;EAKF,KAAK,OACH,OAAO,QAAQ,sBAAsB,SAAS,GAC9C,eACF;CACF;CAEA,UAAwB;EACtB,OAAO,KAAK,cAAc,QACxB,KAAK,cAAc,MAAM,CAAC,GAAG;CAEjC;CAWA,OACE,YACA,QACS;EACT,KAAK,cAAc,cAAc,KAAK;EACtC,MAAM,SAAS,KAAK,QAAQ,WAAW,YAAY,MAAM;EACzD,KAAK,KAAK,cAAc;EACxB,OAAO;CACT;AACF","names":[],"ignoreList":[],"sources":["../src/transition-controller.ts"]}
@@ -63,15 +63,16 @@ export declare class UIRouterLitElement extends LitElement {
63
63
  /** @internal */
64
64
  static onUiRouterContextEvent(uiRouter?: UIRouterLit): (event: UiRouterContextEvent) => void;
65
65
  private readonly onUiRouterContextEvent;
66
+ /** Subscribers that took the placeholder, owed the app's router. */
67
+ private readonly routerSubscribers;
66
68
  /**
67
69
  * Answers a `context-request` for the router context.
68
70
  *
69
- * `subscribe` gets one call and a no-op unsubscribe: the element takes its
70
- * router on connect and does not swap it afterwards.
71
- *
72
- * @internal
71
+ * While the placeholder minted on connect stands, a `subscribe` request is
72
+ * kept and called once more with the router that replaces it, and gets an
73
+ * unsubscribe that drops it. Any other answer is final: one call and a no-op
74
+ * unsubscribe, since a later swap is unsupported and only warns.
73
75
  */
74
- static onContextRequest(uiRouter?: UIRouterLit): (event: Event) => void;
75
76
  private readonly onContextRequest;
76
77
  /**
77
78
  * Answers the parent-view seek of every `<ui-view>` below, declining to name
@@ -1 +1 @@
1
- {"version":3,"file":"ui-router.d.ts","mappings":"AAAA,SAAe,kBAAkB;AACjC,cAAc,gBAAgB,sBAAsB;AAQpD,SAAS,mBAAmB;AAG5B,cAAc,4BAAgD;AAE9D,cAAc,sBAAsB,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;AA6B9D,OAAO,cAAM,2BAA2B,WAAW;;;;;CAKjD,AACA,UAAU;;CAGV,OAAO;;CAGP,OAAO;;CAGP,OAAO,qBAAqB,WAAW,cAAc;;;;;;;;;;;;;;;;;;;;;CA8BrD,OAAO,WAAW,WAAW,UAAU;;CAOvC,OAAO,uBACL,WAAW,eACT,OAAO;CAOX,iBAAiB;;;;;;;;;CAYjB,OAAO,iBAAiB,WAAW,eAAe,OAAO;CAWzD,iBAAiB;;;;;;;;;;CAajB,iBAAiB;;CAMjB;;CAqBA,QAAQ;;CAGR,UAAU,WAAW,SAAS;;CAa9B,UAAU;AAGZ;AAEA,iBAAiB,mBAAmB;;CAElC,oBAAoB;AACtB","names":[],"ignoreList":[],"sources":["../src/ui-router.ts"]}
1
+ {"version":3,"file":"ui-router.d.ts","mappings":"AAAA,SAAe,kBAAkB;AACjC,cAAc,gBAAgB,sBAAsB;AAIpD,SAAS,mBAAmB;AAG5B,cAAc,4BAAgD;AAG9D,cAAc,sBAAsB,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;AA0B9D,OAAO,cAAM,2BAA2B,WAAW;;;;;CAKjD,AACA,UAAU;;CAGV,OAAO;;CAGP,OAAO;;CAGP,OAAO,qBAAqB,WAAW,cAAc;;;;;;;;;;;;;;;;;;;;;CA8BrD,OAAO,WAAW,WAAW,UAAU;;CAOvC,OAAO,uBACL,WAAW,eACT,OAAO;CAOX,iBAAiB;;CAKjB,iBAAiB;;;;;;;;;CAUjB,iBAAiB;;;;;;;;;;CAiBjB,iBAAiB;;CAMjB;;CAqBA,QAAQ;;CAGR,UAAU,WAAW,SAAS;;CAiB9B,UAAU;AAGZ;AAEA,iBAAiB,mBAAmB;;CAElC,oBAAoB;AACtB","names":[],"ignoreList":[],"sources":["../src/ui-router.ts"]}
package/dist/ui-router.js CHANGED
@@ -1,19 +1,20 @@
1
1
  import { html, LitElement } from "lit";
2
2
  import { property } from "lit/decorators.js";
3
- import { contextRequestEventName, isRouterContextRequest, requestRouter } from "./context.js";
3
+ import { contextRequestEventName, requestRouter } from "./context.js";
4
4
  import { UIRouterLit } from "./core.js";
5
5
  import { warnRouterSwapped } from "./dev-warn.js";
6
6
  import { uiRouterContextEventName, uiViewContextEventName } from "./events.js";
7
+ import { RouterSubscribers } from "./router-subscription.js";
7
8
  import _decorate from "@oxc-project/runtime/helpers/decorate";
8
- const noUnsubscribe = () => {};
9
9
  export class UIRouterLitElement extends LitElement {
10
10
  constructor(..._args) {
11
11
  super(..._args);
12
12
  this.onUiRouterContextEvent = (event) => {
13
13
  this.constructor.onUiRouterContextEvent(this.uiRouter)(event);
14
14
  };
15
+ this.routerSubscribers = new RouterSubscribers();
15
16
  this.onContextRequest = (event) => {
16
- this.constructor.onContextRequest(this.uiRouter)(event);
17
+ this.routerSubscribers.answer(event, this.uiRouter, !!this.ownRouter && this.uiRouter === this.ownRouter);
17
18
  };
18
19
  this.onUiViewContextEvent = (event) => {
19
20
  event.stopPropagation();
@@ -44,13 +45,6 @@ export class UIRouterLitElement extends LitElement {
44
45
  event.detail.uiRouter = uiRouter;
45
46
  };
46
47
  }
47
- static onContextRequest(uiRouter) {
48
- return (event) => {
49
- if (!uiRouter || !isRouterContextRequest(event)) return;
50
- event.stopImmediatePropagation();
51
- event.callback(uiRouter, event.subscribe ? noUnsubscribe : void 0);
52
- };
53
- }
54
48
  connectedCallback() {
55
49
  super.connectedCallback();
56
50
  if (!this.uiRouter) {
@@ -65,6 +59,7 @@ export class UIRouterLitElement extends LitElement {
65
59
  willUpdate(changed) {
66
60
  super.willUpdate(changed);
67
61
  if (this.hasUpdated && changed.has("uiRouter") && changed.get("uiRouter") !== this.ownRouter) warnRouterSwapped(this);
62
+ if (this.uiRouter && this.uiRouter !== this.ownRouter) this.routerSubscribers.deliver(this.uiRouter);
68
63
  }
69
64
  render() {
70
65
  return html`<slot></slot>`;
@@ -1 +1 @@
1
- {"version":3,"file":"ui-router.js","mappings":"AAAA,SAAS,MAAM,kBAAkB;AAEjC,SAAS,gBAAgB;AAEzB,SACE,yBACA,wBACA,qBACK;AACP,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,SAAS,0BAA0B,8BAA8B;;AAMjE,MAAM,sBAAsB,CAAC;AA0B7B,OAAO,MAAM,2BAA2B,WAAW;;;iCA6DN,UAAgC;GACzE,KAAK,YAAY,uBAAuB,KAAK,QAAQ,CAAC,CAAC,KAAK;EAC9D;2BAqBqC,UAAiB;GACpD,KAAK,YAAY,iBAAiB,KAAK,QAAQ,CAAC,CAAC,KAAK;EACxD;+BAWyC,UAA8B;GACrE,MAAM,gBAAgB;GACtB,MAAM,OAAO,aAAa;EAC5B;;;kCA3F0C;;;gCAGF;;CAGxC,OAAO,qBAAqB,UAA8C;EACxE,OAAO,IAAI,YAAY,KAAK,0BAA0B;GACpD,SAAS;GACT,UAAU;GACV,QAAQ,EACN,SACF;EACF,CAAC;CACH;CAsBA,OAAO,WAAW,WAA6C;EAC7D,MAAM,uBAAuB,KAAK,qBAAqB;EACvD,UAAU,cAAc,oBAAoB;EAC5C,OAAO,qBAAqB,OAAO,YAAY,cAAc,SAAS;CACxE;CAGA,OAAO,uBACL,UACuC;EACvC,QAAQ,UAAgC;GACtC,MAAM,gBAAgB;GACtB,MAAM,OAAO,WAAW;EAC1B;CACF;CAcA,OAAO,iBAAiB,UAAgD;EACtE,QAAQ,UAAiB;GACvB,IAAI,CAAC,YAAY,CAAC,uBAAuB,KAAK,GAC5C;GAGF,MAAM,yBAAyB;GAC/B,MAAM,SAAS,UAAU,MAAM,YAAY,gBAAgB,MAAS;EACtE;CACF;CAqBA,oBAA0B;EACxB,MAAM,kBAAkB;EACxB,IAAI,CAAC,KAAK,UAAU;GAClB,KAAK,YAAY,IAAI,YAAY;GACjC,KAAK,WAAW,KAAK;EACvB;EAEA,KAAK,iBACH,KAAK,YAAY,0BACjB,KAAK,sBACP;EACA,KAAK,iBAAiB,yBAAyB,KAAK,gBAAgB;EACpE,KAAK,iBACH,KAAK,YAAY,wBACjB,KAAK,oBACP;EAEA,KAAK,cAAc,KAAK,YAAY,qBAAqB,KAAK,QAAQ,CAAC;CACzE;CAMA,WAAqB,SAAqC;EACxD,MAAM,WAAW,OAAO;EAExB,IACE,KAAK,cACL,QAAQ,IAAI,UAAU,KACtB,QAAQ,IAAI,UAAU,MAAM,KAAK,WAEjC,kBAAkB,IAAI;CAE1B;CAGA,SAAyB;EACvB,OAAO,IAAI;CACb;AACF;WA1IG,SAAS,EAAE,WAAW,MAAM,CAAC","names":[],"ignoreList":[],"sources":["../src/ui-router.ts"]}
1
+ {"version":3,"file":"ui-router.js","mappings":"AAAA,SAAS,MAAM,kBAAkB;AAEjC,SAAS,gBAAgB;AAEzB,SAAS,yBAAyB,qBAAqB;AACvD,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,SAAS,0BAA0B,8BAA8B;AAEjE,SAAS,yBAAyB;;AA4BlC,OAAO,MAAM,2BAA2B,WAAW;;;iCA6DN,UAAgC;GACzE,KAAK,YAAY,uBAAuB,KAAK,QAAQ,CAAC,CAAC,KAAK;EAC9D;2BAGqC,IAAI,kBAAkB;2BAUtB,UAAiB;GACpD,KAAK,kBAAkB,OACrB,OACA,KAAK,UACL,CAAC,CAAC,KAAK,aAAa,KAAK,aAAa,KAAK,SAC7C;EACF;+BAWyC,UAA8B;GACrE,MAAM,gBAAgB;GACtB,MAAM,OAAO,aAAa;EAC5B;;;kCAvF0C;;;gCAGF;;CAGxC,OAAO,qBAAqB,UAA8C;EACxE,OAAO,IAAI,YAAY,KAAK,0BAA0B;GACpD,SAAS;GACT,UAAU;GACV,QAAQ,EACN,SACF;EACF,CAAC;CACH;CAsBA,OAAO,WAAW,WAA6C;EAC7D,MAAM,uBAAuB,KAAK,qBAAqB;EACvD,UAAU,cAAc,oBAAoB;EAC5C,OAAO,qBAAqB,OAAO,YAAY,cAAc,SAAS;CACxE;CAGA,OAAO,uBACL,UACuC;EACvC,QAAQ,UAAgC;GACtC,MAAM,gBAAgB;GACtB,MAAM,OAAO,WAAW;EAC1B;CACF;CAwCA,oBAA0B;EACxB,MAAM,kBAAkB;EACxB,IAAI,CAAC,KAAK,UAAU;GAClB,KAAK,YAAY,IAAI,YAAY;GACjC,KAAK,WAAW,KAAK;EACvB;EAEA,KAAK,iBACH,KAAK,YAAY,0BACjB,KAAK,sBACP;EACA,KAAK,iBAAiB,yBAAyB,KAAK,gBAAgB;EACpE,KAAK,iBACH,KAAK,YAAY,wBACjB,KAAK,oBACP;EAEA,KAAK,cAAc,KAAK,YAAY,qBAAqB,KAAK,QAAQ,CAAC;CACzE;CAMA,WAAqB,SAAqC;EACxD,MAAM,WAAW,OAAO;EAExB,IACE,KAAK,cACL,QAAQ,IAAI,UAAU,KACtB,QAAQ,IAAI,UAAU,MAAM,KAAK,WAEjC,kBAAkB,IAAI;EAGxB,IAAI,KAAK,YAAY,KAAK,aAAa,KAAK,WAC1C,KAAK,kBAAkB,QAAQ,KAAK,QAAQ;CAEhD;CAGA,SAAyB;EACvB,OAAO,IAAI;CACb;AACF;WA1IG,SAAS,EAAE,WAAW,MAAM,CAAC","names":[],"ignoreList":[],"sources":["../src/ui-router.ts"]}
package/dist/ui-view.d.ts CHANGED
@@ -93,7 +93,16 @@ export declare class UiView extends LitElement {
93
93
  static seekParentView(candidate: Element): ParentView | null;
94
94
  private seekParentView;
95
95
  private readonly onUiRouterContextEvent;
96
- /** Answers `context-request` for the router, so a `@lit/context` consumer under this view is served too. */
96
+ /** Subscribers that took a router this view may still supersede. */
97
+ private readonly routerSubscribers;
98
+ /**
99
+ * Answers `context-request` for the router, so a `@lit/context` consumer
100
+ * under this view is served too.
101
+ *
102
+ * While the router this view holds is a sought one its provider may still
103
+ * replace, a `subscribe` request is kept and called once more with the router
104
+ * this view adopts.
105
+ */
97
106
  private readonly onContextRequest;
98
107
  private seekRouter;
99
108
  /**
@@ -109,6 +118,10 @@ export declare class UiView extends LitElement {
109
118
  private registeredRouter?;
110
119
  /** Set only for the synchronous span of our own re-seek. */
111
120
  private seekingProvidedRouter;
121
+ /** Drops this view's subscription to its provider; set while the provider may still replace its router. */
122
+ private providerSubscription?;
123
+ /** The provider replaced the router this view sought: adopt it, and pass it on. */
124
+ private readonly onProvidedRouterReplaced;
112
125
  /**
113
126
  * Seeks the provider's router, past our own answer.
114
127
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ui-view.d.ts","mappings":"AAAA,SAAS,YAAkB,eAAe;AAC1C,cAAc,gBAAgB,sBAAsB;AAEpD,SAME,kBASA,aACA,mBACK;AASP,SAAwB,mBAAuC;AAI/D,cACE,kBAGK;;AA6BP,iBAAiB,cAAc;CAC7B,SAAS,cAAc;CACvB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,OAAO,cAAM,eAAe,WAAW;;CAErC,AACA;;;;;CAMA,AACA,UAAW;CAEX,QACQ;;CAGR,QACQ;;;;;;;CAQR,QAAQ;;CAGR,QAAQ;;CAGR,QAAQ;;CAGR;CAIA,iBAAiB;CAEjB,QAAQ;CAER,QAAQ;CAER,QAAQ;CAoBR,QAAQ;CAoBR,QACQ;CAER,iBAAiB;;;;;;;CAgBjB,iBAAiB;;CAajB;CAoBA,wBAAwB;CAGxB,eAAe;;CAWf,OAAO,eAAe,WAAW,UAAU;CAM3C,QAAQ;CAIR,iBAAiB;;CASjB,iBAAiB;CAOjB,QAAQ;;;;;;;;;CAoBR,QAAQ;;CAGR,QAAQ;;CAGR,QAAQ;;;;;;;;CASR,QAAQ;;;;;;;;;;;;;;;;;;;;;;CA8BR,UAAU;CAoBV,QAAQ;;CAQR,QAAQ;;;;;;CAOR,QAAQ;;;;;;;;;;;;;CAqBR,UAAU;;;;;;;;;;;;;CAsBV,UAAU;;CAeV,YAAY;;;;;;;;CAWZ,QAAQ;CAcR,iBAAiB;CAEjB,QAAQ;;CA4CR;;;;;;;;;CAsBA,QAAQ;;CAeR,cAAc,GAAG,MAAM,WAAW,WAAW;;;;CAW7C,QAAQ;;CA2DR,IAAW;;CAKX,IAAW,eAAe;;CAK1B,IAAW,SAAS;;;;;;;;;;;CAcpB,UAAU,WAAW,SAAS;;;;;;;;;;;;CAmB9B,UAAU,aAAa,SAAS;;;;;CAWhC,UAAU,wBAAwB;AAuBpC;AAEA,iBAAiB,OAAO;;CAEtB,oBAAoB;AACtB","names":[],"ignoreList":[],"sources":["../src/ui-view.ts"]}
1
+ {"version":3,"file":"ui-view.d.ts","mappings":"AAAA,SAAS,YAAkB,eAAe;AAC1C,cAAc,gBAAgB,sBAAsB;AAEpD,SAME,kBASA,aACA,mBACK;AASP,SAAwB,mBAAuC;AAI/D,cACE,kBAGK;;AA8BP,iBAAiB,cAAc;CAC7B,SAAS,cAAc;CACvB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,OAAO,cAAM,eAAe,WAAW;;CAErC,AACA;;;;;CAMA,AACA,UAAW;CAEX,QACQ;;CAGR,QACQ;;;;;;;CAQR,QAAQ;;CAGR,QAAQ;;CAGR,QAAQ;;CAGR;CAIA,iBAAiB;CAEjB,QAAQ;CAER,QAAQ;CAER,QAAQ;CAoBR,QAAQ;CAoBR,QACQ;CAER,iBAAiB;;;;;;;CAgBjB,iBAAiB;;CAajB;CAoBA,wBAAwB;CAGxB,eAAe;;CAWf,OAAO,eAAe,WAAW,UAAU;CAM3C,QAAQ;CAIR,iBAAiB;;CASjB,iBAAiB;;;;;;;;;CAUjB,iBAAiB;CAWjB,QAAQ;;;;;;;;;CAoBR,QAAQ;;CAGR,QAAQ;;CAGR,QAAQ;;CAGR,QAAQ;;CAGR,iBAAiB;;;;;;;;CAYjB,QAAQ;;;;;;;;;;;;;;;;;;;;;;CAoCR,UAAU;CAqBV,QAAQ;;CAQR,QAAQ;;;;;;CAOR,QAAQ;;;;;;;;;;;;;CAqBR,UAAU;;;;;;;;;;;;;CAsBV,UAAU;;CAeV,YAAY;;;;;;;;CAWZ,QAAQ;CAcR,iBAAiB;CAEjB,QAAQ;;CA4CR;;;;;;;;;CAwBA,QAAQ;;CAeR,cAAc,GAAG,MAAM,WAAW,WAAW;;;;CAW7C,QAAQ;;CA2DR,IAAW;;CAKX,IAAW,eAAe;;CAK1B,IAAW,SAAS;;;;;;;;;;;CAcpB,UAAU,WAAW,SAAS;;;;;;;;;;;;CAmB9B,UAAU,aAAa,SAAS;;;;;CAWhC,UAAU,wBAAwB;AAuBpC;AAEA,iBAAiB,OAAO;;CAEtB,oBAAoB;AACtB","names":[],"ignoreList":[],"sources":["../src/ui-view.ts"]}
package/dist/ui-view.js CHANGED
@@ -6,6 +6,7 @@ import { routedLitElementRenderer } from "./routed-element.js";
6
6
  import { warnMissingRouter } from "./dev-warn.js";
7
7
  import { UIRouterLitElement } from "./ui-router.js";
8
8
  import { contextRequestEventName, isContextRequest, parentUiViewContext } from "./context.js";
9
+ import { RouterSubscribers, subscribeRouter } from "./router-subscription.js";
9
10
  import _decorate from "@oxc-project/runtime/helpers/decorate";
10
11
  let viewIdCounter = 0;
11
12
  const COMMENT_NODE = 8;
@@ -37,11 +38,16 @@ export class UiView extends LitElement {
37
38
  if (this.seekingProvidedRouter) return;
38
39
  UIRouterLitElement.onUiRouterContextEvent(this.uiRouter)(event);
39
40
  };
41
+ this.routerSubscribers = new RouterSubscribers();
40
42
  this.onContextRequest = (event) => {
41
43
  if (this.seekingProvidedRouter) return;
42
- UIRouterLitElement.onContextRequest(this.uiRouter)(event);
44
+ this.routerSubscribers.answer(event, this.uiRouter, !!this.providerSubscription && this.uiRouter === this.soughtRouter);
43
45
  };
44
46
  this.seekingProvidedRouter = false;
47
+ this.onProvidedRouterReplaced = () => {
48
+ this.providerSubscription = void 0;
49
+ this.adoptProvidedRouter();
50
+ };
45
51
  this.captured = false;
46
52
  this.disconnectedHandlers = [];
47
53
  }
@@ -98,16 +104,19 @@ export class UiView extends LitElement {
98
104
  }
99
105
  seekRouter() {
100
106
  if (!this.uiRouter) {
101
- this.soughtRouter = UIRouterLitElement.seekRouter(this);
107
+ this.soughtRouter = this.seekProvidedRouter();
102
108
  this.uiRouter = this.soughtRouter;
103
109
  }
104
110
  this.addEventListener(UIRouterLitElement.uiRouterContextEventName, this.onUiRouterContextEvent);
105
111
  this.addEventListener(contextRequestEventName, this.onContextRequest);
106
112
  }
107
113
  seekProvidedRouter() {
114
+ this.providerSubscription?.();
108
115
  this.seekingProvidedRouter = true;
109
116
  try {
110
- return UIRouterLitElement.seekRouter(this);
117
+ const { router, unsubscribe } = subscribeRouter(this, this.onProvidedRouterReplaced);
118
+ this.providerSubscription = unsubscribe;
119
+ return router;
111
120
  } finally {
112
121
  this.seekingProvidedRouter = false;
113
122
  }
@@ -121,6 +130,7 @@ export class UiView extends LitElement {
121
130
  this.deregisterAll();
122
131
  this.uiRouter = router;
123
132
  this.setupUiView();
133
+ this.routerSubscribers.deliver(router);
124
134
  }
125
135
  deregisterAll() {
126
136
  while (this.disconnectedHandlers.length) this.disconnectedHandlers.shift()?.();
@@ -189,6 +199,8 @@ export class UiView extends LitElement {
189
199
  super.disconnectedCallback();
190
200
  this.removeEventListener(this.constructor.uiViewContextEventName, this.onUiViewContextEvent);
191
201
  this.removeEventListener(contextRequestEventName, this.onParentViewContextRequest);
202
+ this.providerSubscription?.();
203
+ this.providerSubscription = void 0;
192
204
  this.deregisterAll();
193
205
  }
194
206
  _invokeUiCanExitHook(trans) {
@@ -1 +1 @@
1
- {"version":3,"file":"ui-view.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/ui-view.ts"]}
1
+ {"version":3,"file":"ui-view.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/ui-view.ts"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lit-ui-router",
3
- "version": "1.16.0",
3
+ "version": "1.16.2",
4
4
  "description": "State-based routing for Lit",
5
5
  "homepage": "https://lit-ui-router.dev",
6
6
  "license": "MIT",
@@ -0,0 +1,132 @@
1
+ // The subscribe half of the router context: a provider's provisional router, and the one upgrade it may make.
2
+ import { isRouterContextRequest, requestRouter } from './context.js';
3
+ import type { UIRouterLit } from './core.js';
4
+ import { uiRouterContextEventName } from './events.js';
5
+ import type { UiRouterContextEvent } from './events.js';
6
+
7
+ /** The unsubscribe a provider hands out when its router is final: it will not call again. */
8
+ export const noUnsubscribe = (): void => {};
9
+
10
+ /**
11
+ * The `subscribe: true` requests a provider answered while its router was
12
+ * provisional, each owed the router that replaces it.
13
+ *
14
+ * @internal
15
+ */
16
+ export class RouterSubscribers {
17
+ private readonly pending = new Set<(router: UIRouterLit) => void>();
18
+
19
+ /**
20
+ * Answers a router `context-request`. A subscriber is kept, with an
21
+ * unsubscribe that drops it, only while `provisional`; otherwise it gets
22
+ * {@link noUnsubscribe}.
23
+ */
24
+ answer(
25
+ event: Event,
26
+ router: UIRouterLit | undefined,
27
+ provisional: boolean,
28
+ ): void {
29
+ if (!router || !isRouterContextRequest(event)) {
30
+ return;
31
+ }
32
+ // stopped first: a throwing consumer must not leak the request outward
33
+ event.stopImmediatePropagation();
34
+ const { callback, subscribe } = event;
35
+ if (!subscribe) {
36
+ return callback(router);
37
+ }
38
+ if (!provisional) {
39
+ return callback(router, noUnsubscribe);
40
+ }
41
+ const deliver = (next: UIRouterLit) => callback(next, noUnsubscribe);
42
+ this.pending.add(deliver);
43
+ callback(router, () => this.pending.delete(deliver));
44
+ }
45
+
46
+ /**
47
+ * Hands every kept subscriber `router`, once, and forgets them.
48
+ *
49
+ * A subscriber that throws does not keep the router from the others; its
50
+ * error goes to {@link reportFailures} once all have it.
51
+ */
52
+ deliver(router: UIRouterLit): void {
53
+ const failures: unknown[] = [];
54
+ for (const deliver of [...this.pending]) {
55
+ // An earlier subscriber may have disconnected this one, unsubscribing it.
56
+ if (!this.pending.delete(deliver)) {
57
+ continue;
58
+ }
59
+ try {
60
+ deliver(router);
61
+ } catch (thrown) {
62
+ failures.push(thrown);
63
+ }
64
+ }
65
+ reportFailures(failures);
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Reports each failure through `reportError`, as the platform reports a
71
+ * throwing event listener. Without it (Node, DOM emulators) throws instead:
72
+ * the one error, or an `AggregateError` of several.
73
+ */
74
+ const reportFailures = (failures: unknown[]): void => {
75
+ if (!failures.length) {
76
+ return;
77
+ }
78
+ if (typeof globalThis.reportError === 'function') {
79
+ failures.forEach((failure) => globalThis.reportError(failure));
80
+ return;
81
+ }
82
+ throw failures.length === 1
83
+ ? failures[0]
84
+ : new AggregateError(failures, 'router upgrade subscribers threw');
85
+ };
86
+
87
+ /**
88
+ * What {@link subscribeRouter} found: the router, and the unsubscribe to call
89
+ * on disconnect, absent when the provider's router is final.
90
+ *
91
+ * @internal
92
+ */
93
+ export interface RouterSubscription {
94
+ router: UIRouterLit | undefined;
95
+ unsubscribe: (() => void) | undefined;
96
+ }
97
+
98
+ /**
99
+ * Seeks the router from `target` and subscribes to its replacement, which
100
+ * reaches `onReplaced`.
101
+ *
102
+ * Asks over `context-request` with `subscribe: true`, falling back to the house
103
+ * `ui-router-context` event, which cannot subscribe, when nobody answered.
104
+ *
105
+ * @internal
106
+ */
107
+ export const subscribeRouter = (
108
+ target: Element,
109
+ onReplaced: (router: UIRouterLit) => void,
110
+ ): RouterSubscription => {
111
+ let seeking = true;
112
+ let unsubscribe: (() => void) | undefined;
113
+ const router = requestRouter(target, {
114
+ subscribe: true,
115
+ callback: (value, offered) => {
116
+ unsubscribe = offered === noUnsubscribe ? undefined : offered;
117
+ if (!seeking) {
118
+ onReplaced(value);
119
+ }
120
+ },
121
+ });
122
+ seeking = false;
123
+ if (router) {
124
+ return { router, unsubscribe };
125
+ }
126
+ const event: UiRouterContextEvent = new CustomEvent(
127
+ uiRouterContextEventName,
128
+ { bubbles: true, composed: true, detail: {} },
129
+ );
130
+ target.dispatchEvent(event);
131
+ return { router: event.detail.uiRouter, unsubscribe: undefined };
132
+ };
@@ -2,9 +2,9 @@ import { TargetState, Transition, UIRouter } from '@uirouter/core';
2
2
  import { nothing, ReactiveController, ReactiveControllerHost } from 'lit';
3
3
 
4
4
  import { warnMissingRouter } from './dev-warn.js';
5
+ import { subscribeRouter } from './router-subscription.js';
5
6
  import type { SrefTargetParams } from './sref-active.js';
6
7
  import { resolveAriaCurrent, SrefTargets } from './sref-status.js';
7
- import { UIRouterLitElement } from './ui-router.js';
8
8
  import {
9
9
  UI_SREF_TARGET_EVENT,
10
10
  UI_SREF_TARGET_REMOVED_EVENT,
@@ -32,8 +32,9 @@ export interface SrefStatusControllerOptions extends SrefTargetParams {
32
32
  * The {@link UIRouter} instance to observe.
33
33
  *
34
34
  * When omitted, the controller discovers the router from an ancestor
35
- * <code>&lt;ui-router&gt;</code> (or <code>&lt;ui-view&gt;</code>) via the
36
- * `ui-router-context` event when the host connects.
35
+ * <code>&lt;ui-router&gt;</code> (or <code>&lt;ui-view&gt;</code>) when the
36
+ * host connects, and follows the placeholder router a
37
+ * <code>&lt;ui-router&gt;</code> mints for itself to the one that replaces it.
37
38
  *
38
39
  * Passing it explicitly also moves the first status computation into the
39
40
  * constructor, so the status is there for the very first render and needs
@@ -147,6 +148,9 @@ export class SrefStatusController implements ReactiveController {
147
148
 
148
149
  private readonly deregisterFns: DeregisterFn[] = [];
149
150
 
151
+ /** the hooks on the router itself, which a replacement router moves */
152
+ private readonly routerDeregisterFns: DeregisterFn[] = [];
153
+
150
154
  private _status: SrefStatus | undefined;
151
155
 
152
156
  /** whether a status has ever been computed, so the first one always renders */
@@ -245,8 +249,16 @@ export class SrefStatusController implements ReactiveController {
245
249
  /** @internal */
246
250
  hostConnected(): void {
247
251
  const { host } = this;
248
- this.targets.router ??=
249
- this.options.router ?? UIRouterLitElement.seekRouter(host);
252
+ if (!this.options.router) {
253
+ const { router, unsubscribe } = subscribeRouter(
254
+ host,
255
+ this.onRouterReplaced,
256
+ );
257
+ this.targets.router = router;
258
+ if (unsubscribe) {
259
+ this.deregisterFns.push(unsubscribe);
260
+ }
261
+ }
250
262
  this.targets.relative = UiView.seekParentView(host)?.viewContext?.name;
251
263
  this.targets.setExplicit();
252
264
 
@@ -275,12 +287,7 @@ export class SrefStatusController implements ReactiveController {
275
287
 
276
288
  const router = this.targets.router;
277
289
  if (router) {
278
- this.deregisterFns.push(
279
- router.transitionService.onStart({}, this.onTransitionStart, {
280
- priority: -Infinity,
281
- }) as DeregisterFn,
282
- router.stateRegistry.onStatesChanged(this.onStatesChanged),
283
- );
290
+ this.watch(router);
284
291
  } else {
285
292
  warnMissingRouter(
286
293
  host,
@@ -294,7 +301,7 @@ export class SrefStatusController implements ReactiveController {
294
301
 
295
302
  /** @internal */
296
303
  hostDisconnected(): void {
297
- this._connection++;
304
+ this.unwatch();
298
305
  while (this.deregisterFns.length) {
299
306
  this.deregisterFns.shift()?.();
300
307
  }
@@ -304,6 +311,32 @@ export class SrefStatusController implements ReactiveController {
304
311
  }
305
312
  }
306
313
 
314
+ private watch(router: UIRouter): void {
315
+ this.routerDeregisterFns.push(
316
+ router.transitionService.onStart({}, this.onTransitionStart, {
317
+ priority: -Infinity,
318
+ }) as DeregisterFn,
319
+ router.stateRegistry.onStatesChanged(this.onStatesChanged),
320
+ );
321
+ }
322
+
323
+ private unwatch(): void {
324
+ this._connection++;
325
+ while (this.routerDeregisterFns.length) {
326
+ this.routerDeregisterFns.shift()?.();
327
+ }
328
+ }
329
+
330
+ /** What a disconnect and reconnect would do, for the router that replaced the one found. */
331
+ private readonly onRouterReplaced = (router: UIRouter): void => {
332
+ this.unwatch();
333
+ this.targets.router = router;
334
+ this.targets.relative = UiView.seekParentView(this.host)?.viewContext?.name;
335
+ this.targets.rebuild();
336
+ this.watch(router);
337
+ this.refresh();
338
+ };
339
+
307
340
  /**
308
341
  * Recomputes the status and re-renders the host, but only if a flag or a
309
342
  * watched target moved.