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
@@ -181,12 +181,20 @@
181
181
  "privacy": "private",
182
182
  "readonly": true
183
183
  },
184
+ {
185
+ "kind": "field",
186
+ "name": "routerSubscribers",
187
+ "privacy": "private",
188
+ "readonly": true,
189
+ "default": "new RouterSubscribers()",
190
+ "description": "Subscribers that took a router this view may still supersede."
191
+ },
184
192
  {
185
193
  "kind": "field",
186
194
  "name": "onContextRequest",
187
195
  "privacy": "private",
188
196
  "readonly": true,
189
- "description": "Answers `context-request` for the router, so a `@lit/context` consumer under this view is served too."
197
+ "description": "Answers `context-request` for the router, so a `@lit/context` consumer\nunder this view is served too.\n\nWhile the router this view holds is a sought one its provider may still\nreplace, a `subscribe` request is kept and called once more with the router\nthis view adopts."
190
198
  },
191
199
  {
192
200
  "kind": "method",
@@ -221,6 +229,22 @@
221
229
  "default": "false",
222
230
  "description": "Set only for the synchronous span of our own re-seek."
223
231
  },
232
+ {
233
+ "kind": "field",
234
+ "name": "providerSubscription",
235
+ "type": {
236
+ "text": "() => void | undefined"
237
+ },
238
+ "privacy": "private",
239
+ "description": "Drops this view's subscription to its provider; set while the provider may still replace its router."
240
+ },
241
+ {
242
+ "kind": "field",
243
+ "name": "onProvidedRouterReplaced",
244
+ "privacy": "private",
245
+ "readonly": true,
246
+ "description": "The provider replaced the router this view sought: adopt it, and pass it on."
247
+ },
224
248
  {
225
249
  "kind": "method",
226
250
  "name": "seekProvidedRouter",
@@ -469,11 +493,20 @@
469
493
  "privacy": "private",
470
494
  "readonly": true
471
495
  },
496
+ {
497
+ "kind": "field",
498
+ "name": "routerSubscribers",
499
+ "privacy": "private",
500
+ "readonly": true,
501
+ "default": "new RouterSubscribers()",
502
+ "description": "Subscribers that took the placeholder, owed the app's router."
503
+ },
472
504
  {
473
505
  "kind": "field",
474
506
  "name": "onContextRequest",
475
507
  "privacy": "private",
476
- "readonly": true
508
+ "readonly": true,
509
+ "description": "Answers a `context-request` for the router context.\n\nWhile the placeholder minted on connect stands, a `subscribe` request is\nkept and called once more with the router that replaces it, and gets an\nunsubscribe that drops it. Any other answer is final: one call and a no-op\nunsubscribe, since a later swap is unsupported and only warns."
477
510
  },
478
511
  {
479
512
  "kind": "field",
@@ -0,0 +1,65 @@
1
+ import { isRouterContextRequest, requestRouter } from "./context.js";
2
+ import { uiRouterContextEventName } from "./events.js";
3
+ export const noUnsubscribe = () => {};
4
+ export class RouterSubscribers {
5
+ constructor() {
6
+ this.pending = new Set();
7
+ }
8
+ answer(event, router, provisional) {
9
+ if (!router || !isRouterContextRequest(event)) return;
10
+ event.stopImmediatePropagation();
11
+ const { callback, subscribe } = event;
12
+ if (!subscribe) return callback(router);
13
+ if (!provisional) return callback(router, noUnsubscribe);
14
+ const deliver = (next) => callback(next, noUnsubscribe);
15
+ this.pending.add(deliver);
16
+ callback(router, () => this.pending.delete(deliver));
17
+ }
18
+ deliver(router) {
19
+ const failures = [];
20
+ for (const deliver of [...this.pending]) {
21
+ if (!this.pending.delete(deliver)) continue;
22
+ try {
23
+ deliver(router);
24
+ } catch (thrown) {
25
+ failures.push(thrown);
26
+ }
27
+ }
28
+ reportFailures(failures);
29
+ }
30
+ }
31
+ const reportFailures = (failures) => {
32
+ if (!failures.length) return;
33
+ if (typeof globalThis.reportError === "function") {
34
+ failures.forEach((failure) => globalThis.reportError(failure));
35
+ return;
36
+ }
37
+ throw failures.length === 1 ? failures[0] : new AggregateError(failures, "router upgrade subscribers threw");
38
+ };
39
+ export const subscribeRouter = (target, onReplaced) => {
40
+ let seeking = true;
41
+ let unsubscribe;
42
+ const router = requestRouter(target, {
43
+ subscribe: true,
44
+ callback: (value, offered) => {
45
+ unsubscribe = offered === noUnsubscribe ? void 0 : offered;
46
+ if (!seeking) onReplaced(value);
47
+ }
48
+ });
49
+ seeking = false;
50
+ if (router) return {
51
+ router,
52
+ unsubscribe
53
+ };
54
+ const event = new CustomEvent(uiRouterContextEventName, {
55
+ bubbles: true,
56
+ composed: true,
57
+ detail: {}
58
+ });
59
+ target.dispatchEvent(event);
60
+ return {
61
+ router: event.detail.uiRouter,
62
+ unsubscribe: void 0
63
+ };
64
+ };
65
+ //# sourceMappingURL=router-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-subscription.js","mappings":"AACA,SAAS,wBAAwB,qBAAqB;AAEtD,SAAS,gCAAgC;AAIzC,OAAO,MAAM,sBAA4B,CAAC;AAQ1C,OAAO,MAAM,kBAAkB;;iBACF,IAAI,IAAmC;;CAOlE,OACE,OACA,QACA,aACM;EACN,IAAI,CAAC,UAAU,CAAC,uBAAuB,KAAK,GAC1C;EAGF,MAAM,yBAAyB;EAC/B,MAAM,EAAE,UAAU,cAAc;EAChC,IAAI,CAAC,WACH,OAAO,SAAS,MAAM;EAExB,IAAI,CAAC,aACH,OAAO,SAAS,QAAQ,aAAa;EAEvC,MAAM,WAAW,SAAsB,SAAS,MAAM,aAAa;EACnE,KAAK,QAAQ,IAAI,OAAO;EACxB,SAAS,cAAc,KAAK,QAAQ,OAAO,OAAO,CAAC;CACrD;CAQA,QAAQ,QAA2B;EACjC,MAAM,WAAsB,CAAC;EAC7B,KAAK,MAAM,WAAW,CAAC,GAAG,KAAK,OAAO,GAAG;GAEvC,IAAI,CAAC,KAAK,QAAQ,OAAO,OAAO,GAC9B;GAEF,IAAI;IACF,QAAQ,MAAM;GAChB,SAAS,QAAQ;IACf,SAAS,KAAK,MAAM;GACtB;EACF;EACA,eAAe,QAAQ;CACzB;AACF;AAOA,MAAM,kBAAkB,aAA8B;CACpD,IAAI,CAAC,SAAS,QACZ;CAEF,IAAI,OAAO,WAAW,gBAAgB,YAAY;EAChD,SAAS,SAAS,YAAY,WAAW,YAAY,OAAO,CAAC;EAC7D;CACF;CACA,MAAM,SAAS,WAAW,IACtB,SAAS,KACT,IAAI,eAAe,UAAU,kCAAkC;AACrE;AAsBA,OAAO,MAAM,mBACX,QACA,eACuB;CACvB,IAAI,UAAU;CACd,IAAI;CACJ,MAAM,SAAS,cAAc,QAAQ;EACnC,WAAW;EACX,WAAW,OAAO,YAAY;GAC5B,cAAc,YAAY,gBAAgB,SAAY;GACtD,IAAI,CAAC,SACH,WAAW,KAAK;EAEpB;CACF,CAAC;CACD,UAAU;CACV,IAAI,QACF,OAAO;EAAE;EAAQ;CAAY;CAE/B,MAAM,QAA8B,IAAI,YACtC,0BACA;EAAE,SAAS;EAAM,UAAU;EAAM,QAAQ,CAAC;CAAE,CAC9C;CACA,OAAO,cAAc,KAAK;CAC1B,OAAO;EAAE,QAAQ,MAAM,OAAO;EAAU,aAAa;CAAU;AACjE","names":[],"ignoreList":[],"sources":["../../src/router-subscription.ts"]}
@@ -1,7 +1,7 @@
1
1
  import { nothing } from "lit";
2
2
  import { warnMissingRouter } from "./dev-warn.js";
3
+ import { subscribeRouter } from "./router-subscription.js";
3
4
  import { resolveAriaCurrent, SrefTargets } from "./sref-status.js";
4
- import { UIRouterLitElement } from "./ui-router.js";
5
5
  import { UI_SREF_TARGET_EVENT, UI_SREF_TARGET_REMOVED_EVENT } from "./ui-sref.js";
6
6
  import { UiView } from "./ui-view.js";
7
7
  const sameShape = (a, b) => a === b || !!a && !!b && a.active === b.active && a.exact === b.exact && a.entering === b.entering && a.exiting === b.exiting && a.targetStates.length === b.targetStates.length && a.targetStates.every((target, i) => target === b.targetStates[i]);
@@ -9,8 +9,17 @@ export class SrefStatusController {
9
9
  constructor(host, options = {}) {
10
10
  this.targets = new SrefTargets();
11
11
  this.deregisterFns = [];
12
+ this.routerDeregisterFns = [];
12
13
  this.computed = false;
13
14
  this._connection = 0;
15
+ this.onRouterReplaced = (router) => {
16
+ this.unwatch();
17
+ this.targets.router = router;
18
+ this.targets.relative = UiView.seekParentView(this.host)?.viewContext?.name;
19
+ this.targets.rebuild();
20
+ this.watch(router);
21
+ this.refresh();
22
+ };
14
23
  this.onUiSrefTargetEvent = (event) => {
15
24
  this.targets.onLink(event);
16
25
  this.refresh();
@@ -81,7 +90,11 @@ export class SrefStatusController {
81
90
  }
82
91
  hostConnected() {
83
92
  const { host } = this;
84
- this.targets.router ??= this.options.router ?? UIRouterLitElement.seekRouter(host);
93
+ if (!this.options.router) {
94
+ const { router, unsubscribe } = subscribeRouter(host, this.onRouterReplaced);
95
+ this.targets.router = router;
96
+ if (unsubscribe) this.deregisterFns.push(unsubscribe);
97
+ }
85
98
  this.targets.relative = UiView.seekParentView(host)?.viewContext?.name;
86
99
  this.targets.setExplicit();
87
100
  const scope = host.renderRoot ?? host;
@@ -92,15 +105,22 @@ export class SrefStatusController {
92
105
  scope.removeEventListener(UI_SREF_TARGET_REMOVED_EVENT, this.onUiSrefTargetRemovedEvent);
93
106
  });
94
107
  const router = this.targets.router;
95
- if (router) this.deregisterFns.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
108
+ if (router) this.watch(router);
96
109
  else warnMissingRouter(host, `new SrefStatusController() on <${host.localName}>`, "will never be marked active");
97
110
  this.refresh();
98
111
  }
99
112
  hostDisconnected() {
100
- this._connection++;
113
+ this.unwatch();
101
114
  while (this.deregisterFns.length) this.deregisterFns.shift()?.();
102
115
  if (!this.options.router) this.targets.router = void 0;
103
116
  }
117
+ watch(router) {
118
+ this.routerDeregisterFns.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
119
+ }
120
+ unwatch() {
121
+ this._connection++;
122
+ while (this.routerDeregisterFns.length) this.routerDeregisterFns.shift()?.();
123
+ }
104
124
  refresh(event) {
105
125
  if (this.compute(event)) this.host.requestUpdate();
106
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sref-status-controller.js","mappings":"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","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"]}
@@ -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"]}
@@ -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"]}
@@ -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":"AAAA,SAAS,YAAY,MAAM,eAAe;AAE1C,SAAS,UAAU,aAAa;AAChC,SAEE,gBACA,YAEA,YAGA,OAEA,YACA,UACA,SAEA,cAGK;AASP,SAAS,eAA4B,0BAA0B;AAC/D,SAAS,gCAAgC;AACzC,SAAS,yBAAyB;AAClC,SAAS,0BAA0B;AAMnC,SACE,yBACA,kBACA,2BACK;;AAGP,IAAI,gBAAgB;AAMpB,MAAM,eAAe;AAMrB,MAAM,kBAAkB,SAAoC;CAC1D,IAAI,CAAC,QAAQ,KAAK,aAAa,cAC7B,OAAO;CAET,MAAM,EAAE,SAAS;CACjB,OAAO,SAAS,MAAM,KAAK,SAAS,UAAU;AAChD;AAWA,MAAM,gCAAgC,CAAC;AAyCvC,OAAO,MAAM,eAAe,WAAW;;;cAG9B;mBAcuC;uBAWT,CAAC;wBAGb;gBAOC;+BAiDe,UAA8B;GAErE,IAAI,MAAM,aAAa,CAAC,CAAC,OAAO,MAC9B;GAGF,MAAM,gBAAgB;GACtB,MAAM,OAAO,aAAa;EAC5B;qCAQ+C,UAAiB;GAE9D,IACE,MAAM,aAAa,CAAC,CAAC,OAAO,QAC5B,CAAC,iBAAiB,OAAO,mBAAmB,GAE5C;GAEF,MAAM,yBAAyB;GAC/B,MAAM,SAAS,MAAM,MAAM,YAAY,0BAA0B,MAAS;EAC5E;iCA+C2C,UAAgC;GAEzE,IAAI,KAAK,uBACP;GAEF,mBAAmB,uBAAuB,KAAK,QAAQ,CAAC,CAAC,KAAK;EAChE;2BAGqC,UAAiB;GACpD,IAAI,KAAK,uBACP;GAEF,mBAAmB,iBAAiB,KAAK,QAAQ,CAAC,CAAC,KAAK;EAC1D;+BA4BgC;kBAmEb;8BA0FqC,CAAC;;CArUzD,mBAAyB;EACvB,OAAO;CACT;CAQA,mBAA2B,QAAoB;EAC7C,IAAI,CAAC,QAAQ;GACX,KAAK,YAAY;GACjB,KAAK,cAAc;GACnB;EACF;EAEA,IAAI,EAAE,kBAAkB,gBACtB;EAIF,IAAI,KAAK,YAAY,WAAW,QAC9B;EAGF,MAAM,yBAAyB,KAAK,aAAa,OAAO,SAAS,QAAS;EAC1E,KAAK,oBAAoB,MAAM;CACjC;CAEA,oBAA4B,QAAuB;EACjD,KAAK,YAAY,SAAS;EAE1B,IAAI,CAAC,KAAK,eAAe,QAAQ,UAAU,UACzC,KAAK,cAAc;GACjB,KAAK,KAAK,YAAY;GACtB,SAAS,OAAO,SAAS;EAC3B;EAGF,KAAK,iBAAiB,IAAI,eAAe,OAAO,IAAI;EAGpD,MAAM,EAAE,cAAc,OAAO;EAC7B,KAAK,YAAY,mBAAmB,SAAS,IACzC,yBAAyB,SAAS,IAClC;EACJ,KAAK,cAAc;CACrB;CAkCA,oBAA0B;EACxB,MAAM,kBAAkB;EACxB,KAAK,iBACH,KAAK,YAAY,wBACjB,KAAK,oBACP;EACA,KAAK,iBACH,yBACA,KAAK,0BACP;EACA,KAAK,YAAY;EACjB,IAAI,KAAK,YAEP,KAAK,oBAAoB;OAGzB,KAAK,eAAe;CAExB;;gCAGE,mBAAmB;;CAErB,OAAe,qBAAyC;EACtD,OAAO,IAAI,YAAY,KAAK,wBAAwB;GAClD,SAAS;GACT,UAAU;GACV,QAAQ,EACN,YAAY,KACd;EACF,CAAC;CACH;CAGA,OAAO,eAAe,WAAuC;EAC3D,MAAM,qBAAqB,KAAK,mBAAmB;EACnD,UAAU,cAAc,kBAAkB;EAC1C,OAAO,mBAAmB,OAAO;CACnC;CAEA,iBAAyB;EACvB,KAAK,aAAa,KAAK,YAAY,eAAe,IAAI;CACxD;CAkBA,aAAqB;EACnB,IAAI,CAAC,KAAK,UAAU;GAClB,KAAK,eAAe,mBAAmB,WAAW,IAAI;GACtD,KAAK,WAAW,KAAK;EACvB;EACA,KAAK,iBACH,mBAAmB,0BACnB,KAAK,sBACP;EACA,KAAK,iBAAiB,yBAAyB,KAAK,gBAAgB;CACtE;CAyBA,qBAAsD;EACpD,KAAK,wBAAwB;EAC7B,IAAI;GACF,OAAO,mBAAmB,WAAW,IAAI;EAC3C,UAAU;GACR,KAAK,wBAAwB;EAC/B;CACF;CAuBA,sBAAsC;EAEpC,IAAI,CAAC,KAAK,aACR;EAGF,MAAM,WAAW,CAAC,CAAC,KAAK,YAAY,KAAK,aAAa,KAAK;EAC3D,MAAM,SAAS,WAAW,KAAK,WAAW,KAAK,mBAAmB;EAClE,IAAI,CAAC,UAAU,WAAW,KAAK,kBAC7B;EAGF,IAAI,CAAC,UACH,KAAK,eAAe;EAEtB,KAAK,cAAc;EACnB,KAAK,WAAW;EAChB,KAAK,YAAY;CACnB;CAEA,gBAA8B;EAC5B,OAAO,KAAK,qBAAqB,QAE/B,KADqB,qBAAqB,MACpC,CAAC,GAAG;CAEd;CAUA,iBAAsC;EACpC,MAAM,WAAwB,CAAC;EAC/B,KAAK,MAAM,SAAS,KAAK,YAAY;GACnC,IAAI,eAAe,KAAK,GAAG;GAC3B,SAAS,KAAK,KAAK;EACrB;EACA,OAAO;CACT;CAcA,iBAAiC;EAC/B,IAAI,KAAK,YAAY,eAAe,KAAK,UAAU,GACjD;EAEF,KAAK,WAAW;EAChB,KAAK,aAAa,SAAS,uBAAuB;EAClD,KAAK,gBAAgB,KAAK,eAAe;EACzC,KAAK,SAAS,OAAO,GAAG,KAAK,aAAa;CAC5C;CAcA,wBAAwC;EACtC,IAAI,KAAK,UACP;EAEF,MAAM,WAAW,KAAK,eAAe;EACrC,IAAI,CAAC,SAAS,QACZ;EAEF,KAAK,WAAW;EAChB,KAAK,aAAa,SAAS,uBAAuB;EAClD,KAAK,gBAAgB;EACrB,KAAK,iBAAiB;CACxB;CAGA,IAAY,gBAAyB;EACnC,OAAO,CAAC,KAAK,aAAa,CAAC,KAAK;CAClC;CASA,gBAA8B;EAC5B,MAAM,WAAW,KAAK;EACtB,MAAM,OAAO,CAAC,KAAK;EACnB,IAAI,CAAC,YAAY,SAAS,KAAK,gBAC7B;EAEF,KAAK,iBAAiB;EACtB,IAAI,MACF,SAAS,OAAO,GAAG,KAAK,aAAa;OAErC,KAAK,aAAa,UAAU,KAAK,UAAU;CAE/C;CAIA,cAAsB;EACpB,KAAK,WAAW;EAChB,KAAK,eAAe;EACpB,MAAM,EAAE,QAAQ,UAAU,QAAQ,eAAe;EACjD,MAAM,OAAO,KAAK,QAAQ;EAE1B,MAAM,YAAY,YAAY;EAC9B,MAAM,kBACJ,YAAY,eAAe,QAAQ,cAAc,KAAK;EACxD,MAAM,MAAM,YAAY,YAAY,MAAM,OAAO;EAEjD,KAAK,cAAc;GACjB,OAAO;GACP,IAAI;GACJ;GACA;GACA;GACA,eAAe,KAAK,mBAAmB,KAAK,IAAI;GAChD,QAAQ;EACV;EAEA,IAAI,CAAC,QACH;EAGF,KAAK,qBAAqB,KACxB,OAAO,kBAAkB,SAAS,CAAC,IAAI,UAAU;GAC/C,OAAO,KAAK,qBAAqB,KAAK;EACxC,CAAC,CACH;EAEA,KAAK,qBAAqB,KACxB,OAAO,kBAAkB,UAAU,CAAC,IAAI,UACtC,KAAK,6BAA6B,KAAK,CACzC,CACF;EAEA,KAAK,qBAAqB,KACxB,OAAO,YAAY,eAAe,KAAK,WAAW,CACpD;EACA,KAAK,mBAAmB;CAC1B;CAGA,uBAA6B;EAC3B,MAAM,qBAAqB;EAC3B,KAAK,oBACH,KAAK,YAAY,wBACjB,KAAK,oBACP;EACA,KAAK,oBACH,yBACA,KAAK,0BACP;EAEA,KAAK,cAAc;CACrB;CAUA,qBAA6B,OAAmB;EAC9C,MAAM,WAAW,KAAK;EACtB,MAAM,cAAgC,UAAU;EAChD,IAAI,WAAW,WAAW,GAAG;GAC3B,MAAM,QAA0B,KAAK;GAErC,IAAI,MAAM,QAAQ,CAAC,CAAC,SAAS,KAAK,GAChC,MAAM,QAAQ,CAAC,GAAG,WAAY;IAC5B,OAAO,YAAY,KAAK,UAAU,KAAK;GACzC,CAAC;EAEL;CACF;CAGA,cAAc,GAAG,MAAqD;EACpE,MAAM,cAAc,GAAG,IAAI;EAC3B,MAAM,WAAW,KAAK;EACtB,IAAI,WAAW,UAAU,aAAa,GACpC,SAAS,cAAc;CAE3B;CAKA,6BAAqC,cAA0B;EAE7D,KAAK,cAAc;EAEnB,MAAM,WAAW,KAAK;EACtB,MAAM,oBAAsC,UAAU;EAEtD,IAAI,WAAW,iBAAiB,GAAG;GACjC,MAAM,YAAY,KAAK;GASvB,IACE,iBALA,IAJyC,eACzC,KAAK,YAAY,OAAO,IAGX,CAAC,CAAC,cAAc,cAAc,CAAC,CAAC,QAM7C,aAAa,QAAQ,CAAC,CAAC,SAAS,SAAS,GAEzC;GAEF,MAAM,WACJ,aAAa,OAAO,IAAI;GAC1B,MAAM,aACJ,aAAa,OAAO,MAAM;GAC5B,MAAM,iBAAiB,SAAmB,KAAK;GAC/C,MAAM,WAAoB,aACvB,YAAY,IAAI,CAAC,CACjB,IAAI,aAAa,CAAC,CAClB,OAAgB,SAAS,CAAC,CAAC;GAC9B,MAAM,aAAsB,aACzB,YAAY,MAAM,CAAC,CACnB,IAAI,aAAa,CAAC,CAClB,OAAgB,SAAS,CAAC,CAAC;GAG9B,MAAM,kBAAkB,SAAS,QAAQ,UAAiB;IACxD,MAAM,MAAM,WAAW,QAAQ,KAAK;IACpC,OACE,QAAQ,MACR,CAAC,WAAW,IAAI,CAAC,KAAK,OAAO,SAAS,MAAM,KAAK,WAAW,MAAM,GAAG;GAEzE,CAAC;GAGD,IAAI,gBAAgB,QAAQ;IAC1B,MAAM,cAAwB,gBAAgB,KAAK,MAAM,EAAE,EAAE;IAE7D,MAAM,YAAY,OAAO,WAAW,GAAG,QACrC,YAAY,SAAS,GAAI,CAC3B;IACA,SAAS,kBAAkB,WAAW,YAAY;GACpD;EACF;CACF;CAGA,IAAW,MAA0B;EACnC,OAAO,KAAK,aAAa;CAC3B;CAGA,IAAW,cAAuC;EAChD,OAAO,MAAM,aAAa,QAAQ,SAAS;CAC7C;CAGA,IAAW,QAA0B;EACnC,OAAQ,KAAK,YAA4B;CAC3C;CAYA,WAAqB,SAAqC;EACxD,MAAM,WAAW,OAAO;EACxB,IAAI,CAAC,KAAK,YACR,KAAK,oBAAoB;EAE3B,KAAK,cAAc;CACrB;CAaA,aAAuB,SAA+B;EACpD,MAAM,aAAa,OAAO;EAC1B,IAAI,CAAC,KAAK,UACR,kBAAkB,MAAM,aAAa,iCAAiC;CAE1E;CAMA,SAA0C;EACxC,IAAI,KAAK,eAEP,OAAO,KAAK,WAAW,UAAU,IAAI;EAGvC,MAAM,EAAE,UAAU,QAAQ,cAAc;EACxC,MAAM,WAAW,KAAK,eAAe,SAAS;EAc9C,OAAO,UAAW;GAFmB;GAAQ,UAXzB,KAAK,eACtB,UAAU,CAAC,CACX,QAAQ,UAAU,SAAS,KAAK,CAAC,CAAC,CAClC,KAAK,UAAU,KAAK,eAAe,cAAc,KAAK,CAAC,CAAC,CACxD,QAAQ,MAAM,EAAE,QAEQ,CAAC,CACzB,KAAK,EAAE,YAAY,CAAC,OAAiB,SAAS,IAAI,KAAK,CAAY,CAAC,CAAC,CACrE,OAAO,YAAY,CAAC,CAG6B;GAAG,YAFpC,SAAS,IAAI,UAEgC;EAE1C,CAAC;CACzB;AACF;WA3kBG,SAAS;WAOT,SAAS,EAAE,WAAW,MAAM,CAAC;WAG7B,MAAM;WAIN,MAAM;WAoEN,MAAM","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"]}
@@ -0,0 +1,46 @@
1
+ import type { UIRouterLit } from "./core.js";
2
+ /** The unsubscribe a provider hands out when its router is final: it will not call again. */
3
+ export declare const noUnsubscribe: () => void;
4
+ /**
5
+ * The `subscribe: true` requests a provider answered while its router was
6
+ * provisional, each owed the router that replaces it.
7
+ *
8
+ * @internal
9
+ */
10
+ export declare class RouterSubscribers {
11
+ private readonly pending;
12
+ /**
13
+ * Answers a router `context-request`. A subscriber is kept, with an
14
+ * unsubscribe that drops it, only while `provisional`; otherwise it gets
15
+ * {@link noUnsubscribe}.
16
+ */
17
+ answer(event: Event, router: UIRouterLit | undefined, provisional: boolean): void;
18
+ /**
19
+ * Hands every kept subscriber `router`, once, and forgets them.
20
+ *
21
+ * A subscriber that throws does not keep the router from the others; its
22
+ * error goes to {@link reportFailures} once all have it.
23
+ */
24
+ deliver(router: UIRouterLit): void;
25
+ }
26
+ /**
27
+ * What {@link subscribeRouter} found: the router, and the unsubscribe to call
28
+ * on disconnect, absent when the provider's router is final.
29
+ *
30
+ * @internal
31
+ */
32
+ export interface RouterSubscription {
33
+ router: UIRouterLit | undefined;
34
+ unsubscribe: (() => void) | undefined;
35
+ }
36
+ /**
37
+ * Seeks the router from `target` and subscribes to its replacement, which
38
+ * reaches `onReplaced`.
39
+ *
40
+ * Asks over `context-request` with `subscribe: true`, falling back to the house
41
+ * `ui-router-context` event, which cannot subscribe, when nobody answered.
42
+ *
43
+ * @internal
44
+ */
45
+ export declare const subscribeRouter: (target: Element, onReplaced: (router: UIRouterLit) => void) => RouterSubscription;
46
+ //# sourceMappingURL=router-subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-subscription.d.ts","mappings":"AAEA,cAAc,mBAAmB;;AAKjC,OAAO,cAAM;;;;;;;AAQb,OAAO,cAAM,kBAAkB;CAC7B,iBAAiB;;;;;;CAOjB,OACE,OAAO,OACP,QAAQ,yBACR;;;;;;;CAyBF,QAAQ,QAAQ;AAelB;;;;;;;AA0BA,iBAAiB,mBAAmB;CAClC,QAAQ;CACR;AACF;;;;;;;;;;AAWA,OAAO,cAAM,kBACX,QAAQ,SACR,aAAa,QAAQ,yBACpB","names":[],"ignoreList":[],"sources":["../src/router-subscription.ts"]}
@@ -0,0 +1,65 @@
1
+ import { isRouterContextRequest, requestRouter } from "./context.js";
2
+ import { uiRouterContextEventName } from "./events.js";
3
+ export const noUnsubscribe = () => {};
4
+ export class RouterSubscribers {
5
+ constructor() {
6
+ this.pending = new Set();
7
+ }
8
+ answer(event, router, provisional) {
9
+ if (!router || !isRouterContextRequest(event)) return;
10
+ event.stopImmediatePropagation();
11
+ const { callback, subscribe } = event;
12
+ if (!subscribe) return callback(router);
13
+ if (!provisional) return callback(router, noUnsubscribe);
14
+ const deliver = (next) => callback(next, noUnsubscribe);
15
+ this.pending.add(deliver);
16
+ callback(router, () => this.pending.delete(deliver));
17
+ }
18
+ deliver(router) {
19
+ const failures = [];
20
+ for (const deliver of [...this.pending]) {
21
+ if (!this.pending.delete(deliver)) continue;
22
+ try {
23
+ deliver(router);
24
+ } catch (thrown) {
25
+ failures.push(thrown);
26
+ }
27
+ }
28
+ reportFailures(failures);
29
+ }
30
+ }
31
+ const reportFailures = (failures) => {
32
+ if (!failures.length) return;
33
+ if (typeof globalThis.reportError === "function") {
34
+ failures.forEach((failure) => globalThis.reportError(failure));
35
+ return;
36
+ }
37
+ throw failures.length === 1 ? failures[0] : new AggregateError(failures, "router upgrade subscribers threw");
38
+ };
39
+ export const subscribeRouter = (target, onReplaced) => {
40
+ let seeking = true;
41
+ let unsubscribe;
42
+ const router = requestRouter(target, {
43
+ subscribe: true,
44
+ callback: (value, offered) => {
45
+ unsubscribe = offered === noUnsubscribe ? void 0 : offered;
46
+ if (!seeking) onReplaced(value);
47
+ }
48
+ });
49
+ seeking = false;
50
+ if (router) return {
51
+ router,
52
+ unsubscribe
53
+ };
54
+ const event = new CustomEvent(uiRouterContextEventName, {
55
+ bubbles: true,
56
+ composed: true,
57
+ detail: {}
58
+ });
59
+ target.dispatchEvent(event);
60
+ return {
61
+ router: event.detail.uiRouter,
62
+ unsubscribe: void 0
63
+ };
64
+ };
65
+ //# sourceMappingURL=router-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-subscription.js","mappings":"AACA,SAAS,wBAAwB,qBAAqB;AAEtD,SAAS,gCAAgC;AAIzC,OAAO,MAAM,sBAA4B,CAAC;AAQ1C,OAAO,MAAM,kBAAkB;;iBACF,IAAI,IAAmC;;CAOlE,OACE,OACA,QACA,aACM;EACN,IAAI,CAAC,UAAU,CAAC,uBAAuB,KAAK,GAC1C;EAGF,MAAM,yBAAyB;EAC/B,MAAM,EAAE,UAAU,cAAc;EAChC,IAAI,CAAC,WACH,OAAO,SAAS,MAAM;EAExB,IAAI,CAAC,aACH,OAAO,SAAS,QAAQ,aAAa;EAEvC,MAAM,WAAW,SAAsB,SAAS,MAAM,aAAa;EACnE,KAAK,QAAQ,IAAI,OAAO;EACxB,SAAS,cAAc,KAAK,QAAQ,OAAO,OAAO,CAAC;CACrD;CAQA,QAAQ,QAA2B;EACjC,MAAM,WAAsB,CAAC;EAC7B,KAAK,MAAM,WAAW,CAAC,GAAG,KAAK,OAAO,GAAG;GAEvC,IAAI,CAAC,KAAK,QAAQ,OAAO,OAAO,GAC9B;GAEF,IAAI;IACF,QAAQ,MAAM;GAChB,SAAS,QAAQ;IACf,SAAS,KAAK,MAAM;GACtB;EACF;EACA,eAAe,QAAQ;CACzB;AACF;AAOA,MAAM,kBAAkB,aAA8B;CACpD,IAAI,CAAC,SAAS,QACZ;CAEF,IAAI,OAAO,WAAW,gBAAgB,YAAY;EAChD,SAAS,SAAS,YAAY,WAAW,YAAY,OAAO,CAAC;EAC7D;CACF;CACA,MAAM,SAAS,WAAW,IACtB,SAAS,KACT,IAAI,eAAe,UAAU,kCAAkC;AACrE;AAsBA,OAAO,MAAM,mBACX,QACA,eACuB;CACvB,IAAI,UAAU;CACd,IAAI;CACJ,MAAM,SAAS,cAAc,QAAQ;EACnC,WAAW;EACX,WAAW,OAAO,YAAY;GAC5B,cAAc,YAAY,gBAAgB,SAAY;GACtD,IAAI,CAAC,SACH,WAAW,KAAK;EAEpB;CACF,CAAC;CACD,UAAU;CACV,IAAI,QACF,OAAO;EAAE;EAAQ;CAAY;CAE/B,MAAM,QAA8B,IAAI,YACtC,0BACA;EAAE,SAAS;EAAM,UAAU;EAAM,QAAQ,CAAC;CAAE,CAC9C;CACA,OAAO,cAAc,KAAK;CAC1B,OAAO;EAAE,QAAQ,MAAM,OAAO;EAAU,aAAa;CAAU;AACjE","names":[],"ignoreList":[],"sources":["../src/router-subscription.ts"]}
@@ -13,8 +13,9 @@ export interface SrefStatusControllerOptions extends SrefTargetParams {
13
13
  * The {@link UIRouter} instance to observe.
14
14
  *
15
15
  * When omitted, the controller discovers the router from an ancestor
16
- * <code>&lt;ui-router&gt;</code> (or <code>&lt;ui-view&gt;</code>) via the
17
- * `ui-router-context` event when the host connects.
16
+ * <code>&lt;ui-router&gt;</code> (or <code>&lt;ui-view&gt;</code>) when the
17
+ * host connects, and follows the placeholder router a
18
+ * <code>&lt;ui-router&gt;</code> mints for itself to the one that replaces it.
18
19
  *
19
20
  * Passing it explicitly also moves the first status computation into the
20
21
  * constructor, so the status is there for the very first render and needs
@@ -104,6 +105,8 @@ export declare class SrefStatusController implements ReactiveController {
104
105
  private options;
105
106
  private readonly targets;
106
107
  private readonly deregisterFns;
108
+ /** the hooks on the router itself, which a replacement router moves */
109
+ private readonly routerDeregisterFns;
107
110
  private _status;
108
111
  /** whether a status has ever been computed, so the first one always renders */
109
112
  private computed;
@@ -152,6 +155,10 @@ export declare class SrefStatusController implements ReactiveController {
152
155
  hostConnected(): void;
153
156
  /** @internal */
154
157
  hostDisconnected(): void;
158
+ private watch;
159
+ private unwatch;
160
+ /** What a disconnect and reconnect would do, for the router that replaced the one found. */
161
+ private readonly onRouterReplaced;
155
162
  /**
156
163
  * Recomputes the status and re-renders the host, but only if a flag or a
157
164
  * watched target moved.
@@ -1 +1 @@
1
- {"version":3,"file":"sref-status-controller.d.ts","mappings":"AAAA,SAAS,aAAyB,gBAAgB;AAClD,SAAS,SAAS,oBAAoB,8BAA8B;AAGpE,cAAc,wBAAwB;AAQtC,SACE,kBACA,mBACA,YACA,gBACK;;;;;;;AAYP,iBAAiB,oCAAoC,iBAAiB;;;;;;;;;;;;;CAapE,SAAS;AACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGA,OAAO,cAAM,gCAAgC,mBAAmB;CAC9D,iBAAiB;CAEjB,QAAQ;CAER,iBAAiB;CAEjB,iBAAiB;CAEjB,QAAQ;;CAGR,QAAQ;;CAGR,QAAQ;CAER,YACE,MAAM,yBAAyB,SAC/B,UAAS;;;;;;;;CAsBX,IAAI,UAAU;;;;;CAQd,IAAI,UAAU;;CAKd,IAAI;;CAKJ,IAAI;;CAKJ,IAAI;;CAKJ,IAAI;;CAKJ,IAAI,gBAAgB;;;;;;CASpB,SAAS,QAAQ;;;;;;;;;CAejB,YACE,QAAQ,mBAAmB,oBAC1B,0BAA0B;;CAK7B;;CAkDA;;;;;;;CAiBA,QAAQ,QAAQ;;CAOhB,QAAQ;CAQR,iBAAiB;CAKjB,iBAAiB;CAMjB,iBAAiB;CAKjB,iBAAiB;AAcnB","names":[],"ignoreList":[],"sources":["../src/sref-status-controller.ts"]}
1
+ {"version":3,"file":"sref-status-controller.d.ts","mappings":"AAAA,SAAS,aAAyB,gBAAgB;AAClD,SAAS,SAAS,oBAAoB,8BAA8B;AAIpE,cAAc,wBAAwB;AAOtC,SACE,kBACA,mBACA,YACA,gBACK;;;;;;;AAYP,iBAAiB,oCAAoC,iBAAiB;;;;;;;;;;;;;;CAcpE,SAAS;AACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiGA,OAAO,cAAM,gCAAgC,mBAAmB;CAC9D,iBAAiB;CAEjB,QAAQ;CAER,iBAAiB;CAEjB,iBAAiB;;CAGjB,iBAAiB;CAEjB,QAAQ;;CAGR,QAAQ;;CAGR,QAAQ;CAER,YACE,MAAM,yBAAyB,SAC/B,UAAS;;;;;;;;CAsBX,IAAI,UAAU;;;;;CAQd,IAAI,UAAU;;CAKd,IAAI;;CAKJ,IAAI;;CAKJ,IAAI;;CAKJ,IAAI;;CAKJ,IAAI,gBAAgB;;;;;;CASpB,SAAS,QAAQ;;;;;;;;;CAejB,YACE,QAAQ,mBAAmB,oBAC1B,0BAA0B;;CAK7B;;CAqDA;CAWA,QAAQ;CASR,QAAQ;;CAQR,iBAAiB;;;;;;;CAejB,QAAQ,QAAQ;;CAOhB,QAAQ;CAQR,iBAAiB;CAKjB,iBAAiB;CAMjB,iBAAiB;CAKjB,iBAAiB;AAcnB","names":[],"ignoreList":[],"sources":["../src/sref-status-controller.ts"]}
@@ -1,7 +1,7 @@
1
1
  import { nothing } from "lit";
2
2
  import { warnMissingRouter } from "./dev-warn.js";
3
+ import { subscribeRouter } from "./router-subscription.js";
3
4
  import { resolveAriaCurrent, SrefTargets } from "./sref-status.js";
4
- import { UIRouterLitElement } from "./ui-router.js";
5
5
  import { UI_SREF_TARGET_EVENT, UI_SREF_TARGET_REMOVED_EVENT } from "./ui-sref.js";
6
6
  import { UiView } from "./ui-view.js";
7
7
  const sameShape = (a, b) => a === b || !!a && !!b && a.active === b.active && a.exact === b.exact && a.entering === b.entering && a.exiting === b.exiting && a.targetStates.length === b.targetStates.length && a.targetStates.every((target, i) => target === b.targetStates[i]);
@@ -9,8 +9,17 @@ export class SrefStatusController {
9
9
  constructor(host, options = {}) {
10
10
  this.targets = new SrefTargets();
11
11
  this.deregisterFns = [];
12
+ this.routerDeregisterFns = [];
12
13
  this.computed = false;
13
14
  this._connection = 0;
15
+ this.onRouterReplaced = (router) => {
16
+ this.unwatch();
17
+ this.targets.router = router;
18
+ this.targets.relative = UiView.seekParentView(this.host)?.viewContext?.name;
19
+ this.targets.rebuild();
20
+ this.watch(router);
21
+ this.refresh();
22
+ };
14
23
  this.onUiSrefTargetEvent = (event) => {
15
24
  this.targets.onLink(event);
16
25
  this.refresh();
@@ -81,7 +90,11 @@ export class SrefStatusController {
81
90
  }
82
91
  hostConnected() {
83
92
  const { host } = this;
84
- this.targets.router ??= this.options.router ?? UIRouterLitElement.seekRouter(host);
93
+ if (!this.options.router) {
94
+ const { router, unsubscribe } = subscribeRouter(host, this.onRouterReplaced);
95
+ this.targets.router = router;
96
+ if (unsubscribe) this.deregisterFns.push(unsubscribe);
97
+ }
85
98
  this.targets.relative = UiView.seekParentView(host)?.viewContext?.name;
86
99
  this.targets.setExplicit();
87
100
  const scope = host.renderRoot ?? host;
@@ -92,15 +105,22 @@ export class SrefStatusController {
92
105
  scope.removeEventListener(UI_SREF_TARGET_REMOVED_EVENT, this.onUiSrefTargetRemovedEvent);
93
106
  });
94
107
  const router = this.targets.router;
95
- if (router) this.deregisterFns.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
108
+ if (router) this.watch(router);
96
109
  else warnMissingRouter(host, `new SrefStatusController() on <${host.localName}>`, "will never be marked active");
97
110
  this.refresh();
98
111
  }
99
112
  hostDisconnected() {
100
- this._connection++;
113
+ this.unwatch();
101
114
  while (this.deregisterFns.length) this.deregisterFns.shift()?.();
102
115
  if (!this.options.router) this.targets.router = void 0;
103
116
  }
117
+ watch(router) {
118
+ this.routerDeregisterFns.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
119
+ }
120
+ unwatch() {
121
+ this._connection++;
122
+ while (this.routerDeregisterFns.length) this.routerDeregisterFns.shift()?.();
123
+ }
104
124
  refresh(event) {
105
125
  if (this.compute(event)) this.host.requestUpdate();
106
126
  }