lit-ui-router 1.16.3 → 1.16.4
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/development/sref-active.js +23 -5
- package/dist/development/sref-active.js.map +1 -1
- package/dist/development/sref-href.js +13 -2
- package/dist/development/sref-href.js.map +1 -1
- package/dist/development/ui-sref-active.js +35 -12
- package/dist/development/ui-sref-active.js.map +1 -1
- package/dist/development/ui-sref.js +14 -2
- package/dist/development/ui-sref.js.map +1 -1
- package/dist/sref-active.d.ts +6 -0
- package/dist/sref-active.d.ts.map +1 -1
- package/dist/sref-active.js +23 -5
- package/dist/sref-active.js.map +1 -1
- package/dist/sref-href.d.ts +4 -0
- package/dist/sref-href.d.ts.map +1 -1
- package/dist/sref-href.js +13 -2
- package/dist/sref-href.js.map +1 -1
- package/dist/ui-sref-active.d.ts +7 -0
- package/dist/ui-sref-active.d.ts.map +1 -1
- package/dist/ui-sref-active.js +35 -12
- package/dist/ui-sref-active.js.map +1 -1
- package/dist/ui-sref.d.ts +4 -0
- package/dist/ui-sref.d.ts.map +1 -1
- package/dist/ui-sref.js +14 -2
- package/dist/ui-sref.js.map +1 -1
- package/package.json +1 -1
- package/src/sref-active.ts +43 -12
- package/src/sref-href.ts +23 -2
- package/src/ui-sref-active.ts +56 -21
- package/src/ui-sref.ts +24 -2
|
@@ -3,8 +3,8 @@ import { directive, PartType } from "lit/directive.js";
|
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
4
|
import { getScopedRouter } from "./context.js";
|
|
5
5
|
import { warnMissingRouter } from "./dev-warn.js";
|
|
6
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
6
7
|
import { resolveAriaCurrent, SrefTargets } from "./sref-status.js";
|
|
7
|
-
import { UIRouterLitElement } from "./ui-router.js";
|
|
8
8
|
import { UI_SREF_TARGET_EVENT, UI_SREF_TARGET_REMOVED_EVENT } from "./ui-sref.js";
|
|
9
9
|
import { UiView } from "./ui-view.js";
|
|
10
10
|
export class SrefStatusDirective extends AsyncDirective {
|
|
@@ -16,7 +16,16 @@ export class SrefStatusDirective extends AsyncDirective {
|
|
|
16
16
|
this.targets = new SrefTargets();
|
|
17
17
|
this._firstUpdated = false;
|
|
18
18
|
this._deregister = [];
|
|
19
|
+
this._routerDeregister = [];
|
|
19
20
|
this._connection = 0;
|
|
21
|
+
this.onRouterReplaced = (router) => {
|
|
22
|
+
this.unwatch();
|
|
23
|
+
this.uiRouter = router;
|
|
24
|
+
this.targets.router = router;
|
|
25
|
+
this.targets.rebuild();
|
|
26
|
+
this.watch(router);
|
|
27
|
+
this.refresh();
|
|
28
|
+
};
|
|
20
29
|
this.onUiSrefTargetEvent = (event) => {
|
|
21
30
|
this.targets.onLink(event);
|
|
22
31
|
this.refresh();
|
|
@@ -74,7 +83,9 @@ export class SrefStatusDirective extends AsyncDirective {
|
|
|
74
83
|
firstUpdated() {
|
|
75
84
|
if (this._firstUpdated || !this.isConnected) return;
|
|
76
85
|
const element = this.element;
|
|
77
|
-
|
|
86
|
+
const { router, unsubscribe } = subscribeRouter(element, this.onRouterReplaced);
|
|
87
|
+
this.uiRouter = router;
|
|
88
|
+
if (unsubscribe) this._deregister.push(unsubscribe);
|
|
78
89
|
this.parentView = UiView.seekParentView(element);
|
|
79
90
|
this.targets.router = this.uiRouter;
|
|
80
91
|
this.targets.relative = this.parentView?.viewContext?.name;
|
|
@@ -85,19 +96,26 @@ export class SrefStatusDirective extends AsyncDirective {
|
|
|
85
96
|
element.removeEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
|
|
86
97
|
element.removeEventListener(UI_SREF_TARGET_REMOVED_EVENT, this.onUiSrefTargetRemovedEvent);
|
|
87
98
|
});
|
|
88
|
-
|
|
89
|
-
if (router) this._deregister.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
|
|
99
|
+
if (router) this.watch(router);
|
|
90
100
|
else warnMissingRouter(element, `<${element.localName} ${this.attributeName}=\${${this.directiveName}(...)}>`, "will never be marked active");
|
|
91
101
|
this._firstUpdated = true;
|
|
92
102
|
this.refresh();
|
|
93
103
|
}
|
|
104
|
+
watch(router) {
|
|
105
|
+
this._routerDeregister.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
|
|
106
|
+
}
|
|
107
|
+
unwatch() {
|
|
108
|
+
this._connection++;
|
|
109
|
+
this._routerDeregister.forEach((deregister) => deregister());
|
|
110
|
+
this._routerDeregister = [];
|
|
111
|
+
}
|
|
94
112
|
refresh(event) {
|
|
95
113
|
this.status = this.targets.status(event);
|
|
96
114
|
const value = this.commit();
|
|
97
115
|
if (value !== noChange && this.isConnected) this.setValue(value);
|
|
98
116
|
}
|
|
99
117
|
disconnected() {
|
|
100
|
-
this.
|
|
118
|
+
this.unwatch();
|
|
101
119
|
this._deregister.forEach((deregister) => deregister());
|
|
102
120
|
this._deregister = [];
|
|
103
121
|
this._firstUpdated = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sref-active.js","mappings":"AACA,SAAS,UAAU,eAA8B;AACjD,SAEE,WAEA,gBACK;AAGP,SAAS,sBAAsB;AAE/B,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAClC,SAAS,oBAAoB,mBAAmB;AAChD,
|
|
1
|
+
{"version":3,"file":"sref-active.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/sref-active.ts"]}
|
|
@@ -3,7 +3,7 @@ import { directive, PartType } from "lit/directive.js";
|
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
4
|
import { getScopedRouter } from "./context.js";
|
|
5
5
|
import { warnMissingRouter } from "./dev-warn.js";
|
|
6
|
-
import {
|
|
6
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
7
7
|
import { clickBelongsToBrowser, sameTarget, srefTransitionOptions, uiSrefTargetEvent, uiSrefTargetRemovedEvent } from "./sref-internals.js";
|
|
8
8
|
import { UiView } from "./ui-view.js";
|
|
9
9
|
export class SrefHrefDirective extends AsyncDirective {
|
|
@@ -18,6 +18,13 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
18
18
|
this.targetState = null;
|
|
19
19
|
this._seekedRouter = false;
|
|
20
20
|
this._firstUpdated = false;
|
|
21
|
+
this.onRouterReplaced = (router) => {
|
|
22
|
+
this._unsubscribeRouter = void 0;
|
|
23
|
+
this.unsubscribe?.();
|
|
24
|
+
this.uiRouter = router;
|
|
25
|
+
this.unsubscribe = router.stateRegistry.onStatesChanged(this.doRender);
|
|
26
|
+
this.doRender();
|
|
27
|
+
};
|
|
21
28
|
this.doRender = () => {
|
|
22
29
|
const value = this.render(this.state, this.params, this.options);
|
|
23
30
|
if (value !== noChange && this.isConnected) this.setValue(value);
|
|
@@ -67,7 +74,9 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
67
74
|
firstUpdated() {
|
|
68
75
|
if (this._firstUpdated || !this.isConnected) return;
|
|
69
76
|
const element = this.element;
|
|
70
|
-
|
|
77
|
+
const { router, unsubscribe } = subscribeRouter(element, this.onRouterReplaced);
|
|
78
|
+
this.uiRouter = router;
|
|
79
|
+
this._unsubscribeRouter = unsubscribe;
|
|
71
80
|
this._seekedRouter = true;
|
|
72
81
|
this.parentView = UiView.seekParentView(element);
|
|
73
82
|
element.addEventListener("click", this.onClick);
|
|
@@ -86,6 +95,8 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
86
95
|
this.targetState = null;
|
|
87
96
|
this.unsubscribe?.();
|
|
88
97
|
this.unsubscribe = void 0;
|
|
98
|
+
this._unsubscribeRouter?.();
|
|
99
|
+
this._unsubscribeRouter = void 0;
|
|
89
100
|
this._firstUpdated = false;
|
|
90
101
|
}
|
|
91
102
|
reconnected() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sref-href.js","mappings":"AACA,SAAS,UAAU,eAA8B;AACjD,SAAS,WAAqB,gBAAgB;AAE9C,SAAS,sBAAsB;AAE/B,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAClC,SAAS,
|
|
1
|
+
{"version":3,"file":"sref-href.js","mappings":"AACA,SAAS,UAAU,eAA8B;AACjD,SAAS,WAAqB,gBAAgB;AAE9C,SAAS,sBAAsB;AAE/B,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAChC,SACE,uBACA,YACA,uBACA,mBACA,gCACK;AAEP,SAAS,cAAc;AAkBvB,OAAO,MAAM,0BAA0B,eAAe;CAgCpD,YAAY,UAAoB;EAC9B,MAAM,QAAQ;eA/BO;gBAEH,CAAC;iBAEQ,CAAC;iBAGJ;oBAKM;cAGV;qBAEY;uBAGV;uBACA;2BA4Ha,WAA8B;GACjE,KAAK,qBAAqB;GAC1B,KAAK,cAAc;GACnB,KAAK,WAAW;GAChB,KAAK,cAAc,OAAO,cAAc,gBAAgB,KAAK,QAAQ;GACrE,KAAK,SAAS;EAChB;wBAGuB;GACrB,MAAM,QAAQ,KAAK,OAAO,KAAK,OAAQ,KAAK,QAAQ,KAAK,OAAO;GAEhE,IAAI,UAAU,YAAY,KAAK,aAC7B,KAAK,SAAS,KAAK;EAEvB;kBAGW,UAA4B;GACrC,MAAM,EAAE,UAAU,QAAQ,OAAO,WAAW;GAC5C,MAAM,SAAS,QAAQ;GAEvB,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,eAAe,CAAC,OAAO;IACnD,IAAI,CAAC,UAAU,SAAS,KAAK,SAAS,aACpC,KAAK,kBAAkB,KAAK;IAG9B;GACF;GAGA,IAAI,sBAAsB,OAAO,MAAM,aAAwB,GAC7D;GAIF,OAAY,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC;GAC/C,MAAM,eAAe;EACvB;EAtJE,IACE,SAAS,SAAS,SAAS,aAC3B,SAAS,YAAY,QAErB,MAAM,IAAI,MACR,6FACF;CAEJ;CAGA,WAAW,OAA0B,KAAK,SAA4B;EACpE,OAAO,sBAAsB,KAAK,YAAY,IAAI;CACpD;CAUA,OACE,OACA,QACA,SAC2C;EAC3C,MAAM,UAAU,KAAK,YAAY,gBAAgB,EAAC,EAAG;EAErD,IAAI,CAAC,QAAQ;GACX,IAAI,KAAK,eACP,KAAK,kBAAkB,KAAK;GAG9B,OAAO;EACT;EAEA,MAAM,cAAc,OAAO,OAAO,OAAO,QAAQ,KAAK,WAAW,OAAO,CAAC;EACzE,MAAM,gBAAgB,CAAC,WAAW,KAAK,aAAa,WAAW;EAC/D,KAAK,cAAc;EAGnB,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,WAAW,OAAO,CAAC;EAI/D,IAAI,iBAAiB,KAAK,SACxB,KAAK,QAAQ,cAAc,kBAAkB,WAAW,CAAC;EAG3D,OAAO,KAAK,QAAQ;CACtB;CAGA,OACE,MACA,CAAC,OAAO,SAAS,CAAC,GAAG,UAAU,CAAC,IAKS;EACzC,KAAK,QAAQ;EACb,KAAK,SAAS;EACd,KAAK,UAAU;EAEf,IAAI,KAAK,YAAY,KAAK,SAAS;GACjC,KAAK,UAAU,KAAK;GACpB,KAAK,gBAAgB;GAErB,iBAAiB;IACf,KAAK,aAAa;GACpB,GAAG,CAAC;EACN;EAEA,OAAO,KAAK,OAAO,OAAO,QAAQ,OAAO;CAC3C;CAGA,eAAqB;EACnB,IAAI,KAAK,iBAAiB,CAAC,KAAK,aAC9B;EAGF,MAAM,UAAU,KAAK;EAErB,MAAM,EAAE,QAAQ,gBAAgB,gBAC9B,SACA,KAAK,gBACP;EAEA,KAAK,WAAW;EAChB,KAAK,qBAAqB;EAC1B,KAAK,gBAAgB;EACrB,KAAK,aAAa,OAAO,eAAe,OAAO;EAE/C,QAAQ,iBAAiB,SAAS,KAAK,OAAwB;EAE/D,IAAI,KAAK,UACP,KAAK,cAAc,KAAK,SAAS,cAAc,gBAC7C,KAAK,QACP;EAKF,KAAK,SAAS;EACd,KAAK,gBAAgB;CACvB;CA2CA,kBAA0B,OAAqB;EAC7C,MAAM,UAAU,KAAK;EAErB,IAAI,CAAC,SAAS;EACd,kBACE,SACA,IAAI,QAAQ,UAAU,qBAAqB,MAAM,OACjD,mBACF;CACF;CAGA,eAAqB;EAEnB,KAAK,SAAS,oBAAoB,SAAS,KAAK,OAAwB;EAExE,KAAK,SAAS,cAAc,yBAAyB,CAAC;EAEtD,KAAK,cAAc;EACnB,KAAK,cAAc;EACnB,KAAK,cAAc;EACnB,KAAK,qBAAqB;EAC1B,KAAK,qBAAqB;EAC1B,KAAK,gBAAgB;CACvB;CAGA,cAAoB;EAGlB,iBAAiB;GACf,KAAK,aAAa;EACpB,GAAG,CAAC;CACN;AACF;AAsCA,OAAO,MAAM,WAIoC,UAAU,iBAAiB","names":[],"ignoreList":[],"sources":["../../src/sref-href.ts"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { noChange } from "lit";
|
|
2
2
|
import { directive, PartType } from "lit/directive.js";
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
|
-
import { UIRouterLitElement } from "./ui-router.js";
|
|
5
4
|
import { inLitDevMode, warnMissingRouter } from "./dev-warn.js";
|
|
5
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
6
6
|
import { isNativeLink, mergeSrefStatus, srefStatus, toAriaCurrentValues, UI_SREF_TARGET_EVENT } from "./sref-internals.js";
|
|
7
7
|
import { UiView } from "./ui-view.js";
|
|
8
8
|
export { mergeSrefStatus, srefStatus } from "./sref-internals.js";
|
|
@@ -17,7 +17,10 @@ const isLinkElement = (element) => isNativeLink(element) || element.matches("[ro
|
|
|
17
17
|
let _first = null;
|
|
18
18
|
export class UiSrefActiveDirective extends AsyncDirective {
|
|
19
19
|
seekRouter() {
|
|
20
|
-
this.
|
|
20
|
+
this._unsubscribeRouter?.();
|
|
21
|
+
const { router, unsubscribe } = subscribeRouter(this.element, this.onRouterReplaced);
|
|
22
|
+
this.uiRouter = router;
|
|
23
|
+
this._unsubscribeRouter = unsubscribe;
|
|
21
24
|
}
|
|
22
25
|
seekParentView() {
|
|
23
26
|
this.parentView = UiView.seekParentView(this.element);
|
|
@@ -46,6 +49,17 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
46
49
|
});
|
|
47
50
|
};
|
|
48
51
|
this._firstUpdated = false;
|
|
52
|
+
this.onRouterReplaced = (router) => {
|
|
53
|
+
this._unsubscribeRouter = void 0;
|
|
54
|
+
this.unwatch();
|
|
55
|
+
this.uiRouter = router;
|
|
56
|
+
if (!this._lastTargetStates && this.state) {
|
|
57
|
+
this.targetStates.clear();
|
|
58
|
+
this.targetStates.add(this.explicitTarget(router, this.state));
|
|
59
|
+
}
|
|
60
|
+
this.watch(router);
|
|
61
|
+
this.onStatesChanged();
|
|
62
|
+
};
|
|
49
63
|
this.onUiSrefTargetEvent = (event) => {
|
|
50
64
|
const { targetState } = event.detail;
|
|
51
65
|
const previous = this._linkTargets.get(event.target);
|
|
@@ -159,13 +173,10 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
159
173
|
this.targetStates.add(targetState);
|
|
160
174
|
});
|
|
161
175
|
else if (this.state) {
|
|
162
|
-
if (this.uiRouter) this.targetStates.add(this.
|
|
176
|
+
if (this.uiRouter) this.targetStates.add(this.explicitTarget(this.uiRouter, this.state));
|
|
163
177
|
} else this.element.addEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
|
|
164
178
|
this.element.addEventListener(TRANSITION_STATE_CHANGE_EVENT, this.onTransitionStateChange);
|
|
165
|
-
if (this.uiRouter)
|
|
166
|
-
this._deregisterOnStart = this.uiRouter.transitionService.onStart({}, this.onTransitionStart);
|
|
167
|
-
this._deregisterOnStatesChanged = this.uiRouter.stateRegistry.onStatesChanged(this.onStatesChanged);
|
|
168
|
-
}
|
|
179
|
+
if (this.uiRouter) this.watch(this.uiRouter);
|
|
169
180
|
setTimeout(() => {
|
|
170
181
|
if (this.targetStates.size) {
|
|
171
182
|
const { active, exact } = this.getStatus() || {};
|
|
@@ -176,17 +187,29 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
176
187
|
}, 0);
|
|
177
188
|
this._firstUpdated = true;
|
|
178
189
|
}
|
|
190
|
+
explicitTarget(router, state) {
|
|
191
|
+
return router.stateService.target(state, this.params, this.getOptions());
|
|
192
|
+
}
|
|
193
|
+
watch(router) {
|
|
194
|
+
this._deregisterOnStart = router.transitionService.onStart({}, this.onTransitionStart);
|
|
195
|
+
this._deregisterOnStatesChanged = router.stateRegistry.onStatesChanged(this.onStatesChanged);
|
|
196
|
+
}
|
|
197
|
+
unwatch() {
|
|
198
|
+
this._connection++;
|
|
199
|
+
this._deregisterOnStart?.();
|
|
200
|
+
this._deregisterOnStart = void 0;
|
|
201
|
+
this._deregisterOnStatesChanged?.();
|
|
202
|
+
this._deregisterOnStatesChanged = void 0;
|
|
203
|
+
}
|
|
179
204
|
disconnected() {
|
|
180
205
|
this._firstUpdated = false;
|
|
181
|
-
this.
|
|
206
|
+
this.unwatch();
|
|
207
|
+
this._unsubscribeRouter?.();
|
|
208
|
+
this._unsubscribeRouter = void 0;
|
|
182
209
|
if (!this.element) return;
|
|
183
210
|
this.element.removeEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
|
|
184
211
|
this.element.removeEventListener(TRANSITION_STATE_CHANGE_EVENT, this.onTransitionStateChange);
|
|
185
212
|
this.element = null;
|
|
186
|
-
this._deregisterOnStart?.();
|
|
187
|
-
this._deregisterOnStart = void 0;
|
|
188
|
-
this._deregisterOnStatesChanged?.();
|
|
189
|
-
this._deregisterOnStatesChanged = void 0;
|
|
190
213
|
}
|
|
191
214
|
reconnected() {
|
|
192
215
|
this.element = this._partElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-sref-active.js","mappings":"AAMA,SAAS,gBAA6B;AACtC,SAAS,WAAqB,gBAAgB;AAE9C,SAAS,sBAAsB;AAG/B,SAAS,
|
|
1
|
+
{"version":3,"file":"ui-sref-active.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/ui-sref-active.ts"]}
|
|
@@ -2,7 +2,7 @@ import { noChange } from "lit";
|
|
|
2
2
|
import { directive, PartType } from "lit/directive.js";
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
4
|
import { inLitDevMode, warnMissingRouter } from "./dev-warn.js";
|
|
5
|
-
import {
|
|
5
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
6
6
|
import { UiView } from "./ui-view.js";
|
|
7
7
|
import { clickBelongsToBrowser, isNativeLink, sameTarget, srefTransitionOptions, uiSrefTargetEvent, uiSrefTargetRemovedEvent } from "./sref-internals.js";
|
|
8
8
|
export { inLitDevMode };
|
|
@@ -23,6 +23,13 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
23
23
|
this._ownsHref = false;
|
|
24
24
|
this._seekedRouter = false;
|
|
25
25
|
this._partElement = null;
|
|
26
|
+
this.onRouterReplaced = (router) => {
|
|
27
|
+
this._unsubscribeRouter = void 0;
|
|
28
|
+
this.unsubscribe?.();
|
|
29
|
+
this.uiRouter = router;
|
|
30
|
+
this.unsubscribe = router.stateRegistry.onStatesChanged(this.doRender);
|
|
31
|
+
this.doRender();
|
|
32
|
+
};
|
|
26
33
|
this.onClick = (event) => {
|
|
27
34
|
const { uiRouter: router, state, params } = this;
|
|
28
35
|
const options = this.getOptions();
|
|
@@ -85,7 +92,10 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
85
92
|
return true;
|
|
86
93
|
}
|
|
87
94
|
seekRouter() {
|
|
88
|
-
this.
|
|
95
|
+
this._unsubscribeRouter?.();
|
|
96
|
+
const { router, unsubscribe } = subscribeRouter(this.element, this.onRouterReplaced);
|
|
97
|
+
this.uiRouter = router;
|
|
98
|
+
this._unsubscribeRouter = unsubscribe;
|
|
89
99
|
this._seekedRouter = true;
|
|
90
100
|
}
|
|
91
101
|
warnMissingRouter(state) {
|
|
@@ -104,6 +114,8 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
104
114
|
this._ownsHref = false;
|
|
105
115
|
this.unsubscribe?.();
|
|
106
116
|
this.unsubscribe = void 0;
|
|
117
|
+
this._unsubscribeRouter?.();
|
|
118
|
+
this._unsubscribeRouter = void 0;
|
|
107
119
|
this._firstUpdated = false;
|
|
108
120
|
}
|
|
109
121
|
reconnected() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-sref.js","mappings":"AACA,SAAS,gBAA6B;AACtC,SAAS,WAAqB,gBAAgB;AAE9C,SAAS,sBAAsB;AAG/B,SAAS,cAAc,yBAAyB;AAChD,SAAS,
|
|
1
|
+
{"version":3,"file":"ui-sref.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/ui-sref.ts"]}
|
package/dist/sref-active.d.ts
CHANGED
|
@@ -59,6 +59,8 @@ export declare abstract class SrefStatusDirective<
|
|
|
59
59
|
protected readonly targets: SrefTargets;
|
|
60
60
|
private _firstUpdated;
|
|
61
61
|
private _deregister;
|
|
62
|
+
/** the hooks on the router itself, which a replacement router moves */
|
|
63
|
+
private _routerDeregister;
|
|
62
64
|
/** bumped on disconnect, so a settlement subscribed before it stays quiet */
|
|
63
65
|
private _connection;
|
|
64
66
|
/** the attribute this directive is bound in, for warnings */
|
|
@@ -93,6 +95,10 @@ export declare abstract class SrefStatusDirective<
|
|
|
93
95
|
update(part: AttributePart, [params]: [Params]): Rendered | typeof noChange;
|
|
94
96
|
/** @internal */
|
|
95
97
|
firstUpdated(): void;
|
|
98
|
+
private watch;
|
|
99
|
+
private unwatch;
|
|
100
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
101
|
+
private readonly onRouterReplaced;
|
|
96
102
|
/** @internal */
|
|
97
103
|
onUiSrefTargetEvent: (event: UiSrefTargetEvent) => void;
|
|
98
104
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sref-active.d.ts","mappings":"AAAA,SAAS,WAAW,YAAY,yBAAyB;AACzD,SAAS,UAAU,SAAS,qBAAqB;AACjD,SAGE,gBAEK;AACP,cAAc,uBAAuB;AACrC,cAAc,iBAAiB;AAC/B,SAAS,sBAAsB;AAG/B,SAAS,mBAAmB;
|
|
1
|
+
{"version":3,"file":"sref-active.d.ts","mappings":"AAAA,SAAS,WAAW,YAAY,yBAAyB;AACzD,SAAS,UAAU,SAAS,qBAAqB;AACjD,SAGE,gBAEK;AACP,cAAc,uBAAuB;AACrC,cAAc,iBAAiB;AAC/B,SAAS,sBAAsB;AAG/B,SAAS,mBAAmB;AAG5B,SAA6B,mBAAmB;AAChD,SAGE,yBACK;AACP,SACE,kBACA,mBACA,YACA,gBACK;AACP,cAAc,kBAAkB;;;;;;;;AAUhC,iBAAiB,iBAAiB;;CAEhC;;CAEA,SAAS;;CAET,UAAU;AACZ;;;;;;;;;;;;;;AAiBA,OAAO,uBAAe;CACpB,eAAe;CACf;UACQ,eAAe;CAmCrB;;CAjCF,SAAS;;CAET,UAAU;;CAEV,YAAY;;CAGZ,QAAQ;;CAER,QAAQ;;;;;CAMR,mBAAmB,SAAS;CAE5B,QAAQ;CACR,QAAQ;;CAER,QAAQ;;CAER,QAAQ;;CAGR,iBAAiB;;;;;CAMjB,YACE,UAAU,UACV,AAAmB;;CAcrB,SAAS,OAAO,QAAQ,SAAS;;;;;;;CAQjC,mBAAmB,UAAU;;;;;;;;;;;;CAa7B,UAAU,gBAAgB,QAAQ,SAAS;;CAc3C,OAAO,MAAM,eAAe,CAAC,UAAU,UAAU,kBAAkB;;CAuBnE;CA2DA,QAAQ;CAUR,QAAQ;;CAOR,iBAAiB;;CAUjB,sBAAuB,OAAO;;CAM9B,6BAA8B,OAAO;;;;;;;CAYrC;;CAMA,oBAAqB,OAAO;;;;;;CAuB5B,QAAQ,QAAQ;;CAUhB;;CAQA;AAOF;;;;;;AAOA,iBAAiB,8BAA8B,iBAAiB;;CAE9D;;CAEA;;;;;;;;CAQA,UAAU;AACZ;;;;;;;;;;;;;;;;;AAkBA,OAAO,cAAM,iCAAiC,oBAC5C,uCACgB,UAChB;;CAEA,QAAQ;;CAER,QAAQ;;CAGR,YAAY,UAAU;;CAatB,QAAQ;;;;;CA2BR,OAAO,QAAQ,wCAAwC;;CAmBvD,OACE,MAAM,eACN,OAAO,yCACU;;CAcnB,UAAU,0BAA0B;AA+CtC;;;;;;AAOA,iBAAiB,8BAA8B,iBAAiB;;;;;;CAM9D,QAAQ,mBAAmB;AAC7B;;;;;;;;;AAUA,OAAO,cAAM,iCAAiC,oBAC5C,uBACA,0BAA0B,iBAAiB,UAC3C;;CAEA,QAAQ;;CAGR,YAAY,UAAU;;CAYtB,UAAU,UAAU,0BAA0B,iBAAiB;;;;;CAc/D,OACE,QAAQ,wBACP,0BAA0B,iBAAiB;AAShD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDA,OAAO,cAAM,kBACX,QAAQ,0BACL,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8B5B,OAAO,cAAM,kBACX,QAAQ,0BACL,uBAAuB","names":[],"ignoreList":[],"sources":["../src/sref-active.ts"]}
|
package/dist/sref-active.js
CHANGED
|
@@ -3,8 +3,8 @@ import { directive, PartType } from "lit/directive.js";
|
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
4
|
import { getScopedRouter } from "./context.js";
|
|
5
5
|
import { warnMissingRouter } from "./dev-warn.js";
|
|
6
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
6
7
|
import { resolveAriaCurrent, SrefTargets } from "./sref-status.js";
|
|
7
|
-
import { UIRouterLitElement } from "./ui-router.js";
|
|
8
8
|
import { UI_SREF_TARGET_EVENT, UI_SREF_TARGET_REMOVED_EVENT } from "./ui-sref.js";
|
|
9
9
|
import { UiView } from "./ui-view.js";
|
|
10
10
|
export class SrefStatusDirective extends AsyncDirective {
|
|
@@ -16,7 +16,16 @@ export class SrefStatusDirective extends AsyncDirective {
|
|
|
16
16
|
this.targets = new SrefTargets();
|
|
17
17
|
this._firstUpdated = false;
|
|
18
18
|
this._deregister = [];
|
|
19
|
+
this._routerDeregister = [];
|
|
19
20
|
this._connection = 0;
|
|
21
|
+
this.onRouterReplaced = (router) => {
|
|
22
|
+
this.unwatch();
|
|
23
|
+
this.uiRouter = router;
|
|
24
|
+
this.targets.router = router;
|
|
25
|
+
this.targets.rebuild();
|
|
26
|
+
this.watch(router);
|
|
27
|
+
this.refresh();
|
|
28
|
+
};
|
|
20
29
|
this.onUiSrefTargetEvent = (event) => {
|
|
21
30
|
this.targets.onLink(event);
|
|
22
31
|
this.refresh();
|
|
@@ -74,7 +83,9 @@ export class SrefStatusDirective extends AsyncDirective {
|
|
|
74
83
|
firstUpdated() {
|
|
75
84
|
if (this._firstUpdated || !this.isConnected) return;
|
|
76
85
|
const element = this.element;
|
|
77
|
-
|
|
86
|
+
const { router, unsubscribe } = subscribeRouter(element, this.onRouterReplaced);
|
|
87
|
+
this.uiRouter = router;
|
|
88
|
+
if (unsubscribe) this._deregister.push(unsubscribe);
|
|
78
89
|
this.parentView = UiView.seekParentView(element);
|
|
79
90
|
this.targets.router = this.uiRouter;
|
|
80
91
|
this.targets.relative = this.parentView?.viewContext?.name;
|
|
@@ -85,19 +96,26 @@ export class SrefStatusDirective extends AsyncDirective {
|
|
|
85
96
|
element.removeEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
|
|
86
97
|
element.removeEventListener(UI_SREF_TARGET_REMOVED_EVENT, this.onUiSrefTargetRemovedEvent);
|
|
87
98
|
});
|
|
88
|
-
|
|
89
|
-
if (router) this._deregister.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
|
|
99
|
+
if (router) this.watch(router);
|
|
90
100
|
else warnMissingRouter(element, `<${element.localName} ${this.attributeName}=\${${this.directiveName}(...)}>`, "will never be marked active");
|
|
91
101
|
this._firstUpdated = true;
|
|
92
102
|
this.refresh();
|
|
93
103
|
}
|
|
104
|
+
watch(router) {
|
|
105
|
+
this._routerDeregister.push(router.transitionService.onStart({}, this.onTransitionStart, { priority: -Infinity }), router.stateRegistry.onStatesChanged(this.onStatesChanged));
|
|
106
|
+
}
|
|
107
|
+
unwatch() {
|
|
108
|
+
this._connection++;
|
|
109
|
+
this._routerDeregister.forEach((deregister) => deregister());
|
|
110
|
+
this._routerDeregister = [];
|
|
111
|
+
}
|
|
94
112
|
refresh(event) {
|
|
95
113
|
this.status = this.targets.status(event);
|
|
96
114
|
const value = this.commit();
|
|
97
115
|
if (value !== noChange && this.isConnected) this.setValue(value);
|
|
98
116
|
}
|
|
99
117
|
disconnected() {
|
|
100
|
-
this.
|
|
118
|
+
this.unwatch();
|
|
101
119
|
this._deregister.forEach((deregister) => deregister());
|
|
102
120
|
this._deregister = [];
|
|
103
121
|
this._firstUpdated = false;
|
package/dist/sref-active.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sref-active.js","mappings":"AACA,SAAS,UAAU,eAA8B;AACjD,SAEE,WAEA,gBACK;AAGP,SAAS,sBAAsB;AAE/B,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAClC,SAAS,oBAAoB,mBAAmB;AAChD,
|
|
1
|
+
{"version":3,"file":"sref-active.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/sref-active.ts"]}
|
package/dist/sref-href.d.ts
CHANGED
|
@@ -43,6 +43,8 @@ export declare class SrefHrefDirective extends AsyncDirective {
|
|
|
43
43
|
private _firstUpdated;
|
|
44
44
|
/** @internal */
|
|
45
45
|
unsubscribe: (() => void) | undefined;
|
|
46
|
+
/** drops the subscription to a provider that may still replace its router */
|
|
47
|
+
private _unsubscribeRouter;
|
|
46
48
|
/** @internal */
|
|
47
49
|
constructor(partInfo: PartInfo);
|
|
48
50
|
/** @internal */
|
|
@@ -60,6 +62,8 @@ export declare class SrefHrefDirective extends AsyncDirective {
|
|
|
60
62
|
update(part: AttributePart, [state, params, options]: [string, RawParams?, TransitionOptions?]): ReturnType<SrefHrefDirective["render"]>;
|
|
61
63
|
/** @internal */
|
|
62
64
|
firstUpdated(): void;
|
|
65
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
66
|
+
private readonly onRouterReplaced;
|
|
63
67
|
/** @internal */
|
|
64
68
|
doRender: () => void;
|
|
65
69
|
/** @internal */
|
package/dist/sref-href.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sref-href.d.ts","mappings":"AAAA,SAAS,WAAW,aAAa,yBAAyB;AAC1D,SAAS,UAAU,SAAS,qBAAqB;AACjD,SAAoB,gBAA0B;AAC9C,cAAc,uBAAuB;AACrC,SAAS,sBAAsB;AAG/B,SAAS,mBAAmB;AAU5B,cAAc,kBAAkB;;;;;;;;;;;;;;;;;AAmBhC,OAAO,cAAM,0BAA0B,eAAe;;CAEpD;;CAEA,QAAQ;;CAER,SAAS;;CAGT,SAAS;;CAGT,UAAU;;CAEV,YAAY;;CAGZ;;CAEA,aAAa;;CAGb,QAAQ;CACR,QAAQ;;CAGR;;CAGA,YAAY,UAAU;;CActB,WAAW,OAAM,oBAAmC;;;;;;;;;CAYpD,OACE,eACA,SAAS,WACT,UAAU,oCACO,iBAAiB;;CA4BpC,OACE,MAAM,eACN,CAAC,OAAO,QAAa,mBAEnB,YACA,sBAED,WAAW,kBAAkB;;CAkBhC;;
|
|
1
|
+
{"version":3,"file":"sref-href.d.ts","mappings":"AAAA,SAAS,WAAW,aAAa,yBAAyB;AAC1D,SAAS,UAAU,SAAS,qBAAqB;AACjD,SAAoB,gBAA0B;AAC9C,cAAc,uBAAuB;AACrC,SAAS,sBAAsB;AAG/B,SAAS,mBAAmB;AAU5B,cAAc,kBAAkB;;;;;;;;;;;;;;;;;AAmBhC,OAAO,cAAM,0BAA0B,eAAe;;CAEpD;;CAEA,QAAQ;;CAER,SAAS;;CAGT,SAAS;;CAGT,UAAU;;CAEV,YAAY;;CAGZ;;CAEA,aAAa;;CAGb,QAAQ;CACR,QAAQ;;CAGR;;CAGA,QAAQ;;CAGR,YAAY,UAAU;;CActB,WAAW,OAAM,oBAAmC;;;;;;;;;CAYpD,OACE,eACA,SAAS,WACT,UAAU,oCACO,iBAAiB;;CA4BpC,OACE,MAAM,eACN,CAAC,OAAO,QAAa,mBAEnB,YACA,sBAED,WAAW,kBAAkB;;CAkBhC;;CAgCA,iBAAiB;;CASjB;;CASA,UAAW,OAAO;CAsBlB,QAAQ;;CAYR;;CAeA;AAOF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,OAAO,cAAM,WACX,eACA,SAAS,WACT,UAAU,sBACP,uBAAuB","names":[],"ignoreList":[],"sources":["../src/sref-href.ts"]}
|
package/dist/sref-href.js
CHANGED
|
@@ -3,7 +3,7 @@ import { directive, PartType } from "lit/directive.js";
|
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
4
|
import { getScopedRouter } from "./context.js";
|
|
5
5
|
import { warnMissingRouter } from "./dev-warn.js";
|
|
6
|
-
import {
|
|
6
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
7
7
|
import { clickBelongsToBrowser, sameTarget, srefTransitionOptions, uiSrefTargetEvent, uiSrefTargetRemovedEvent } from "./sref-internals.js";
|
|
8
8
|
import { UiView } from "./ui-view.js";
|
|
9
9
|
export class SrefHrefDirective extends AsyncDirective {
|
|
@@ -18,6 +18,13 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
18
18
|
this.targetState = null;
|
|
19
19
|
this._seekedRouter = false;
|
|
20
20
|
this._firstUpdated = false;
|
|
21
|
+
this.onRouterReplaced = (router) => {
|
|
22
|
+
this._unsubscribeRouter = void 0;
|
|
23
|
+
this.unsubscribe?.();
|
|
24
|
+
this.uiRouter = router;
|
|
25
|
+
this.unsubscribe = router.stateRegistry.onStatesChanged(this.doRender);
|
|
26
|
+
this.doRender();
|
|
27
|
+
};
|
|
21
28
|
this.doRender = () => {
|
|
22
29
|
const value = this.render(this.state, this.params, this.options);
|
|
23
30
|
if (value !== noChange && this.isConnected) this.setValue(value);
|
|
@@ -67,7 +74,9 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
67
74
|
firstUpdated() {
|
|
68
75
|
if (this._firstUpdated || !this.isConnected) return;
|
|
69
76
|
const element = this.element;
|
|
70
|
-
|
|
77
|
+
const { router, unsubscribe } = subscribeRouter(element, this.onRouterReplaced);
|
|
78
|
+
this.uiRouter = router;
|
|
79
|
+
this._unsubscribeRouter = unsubscribe;
|
|
71
80
|
this._seekedRouter = true;
|
|
72
81
|
this.parentView = UiView.seekParentView(element);
|
|
73
82
|
element.addEventListener("click", this.onClick);
|
|
@@ -86,6 +95,8 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
86
95
|
this.targetState = null;
|
|
87
96
|
this.unsubscribe?.();
|
|
88
97
|
this.unsubscribe = void 0;
|
|
98
|
+
this._unsubscribeRouter?.();
|
|
99
|
+
this._unsubscribeRouter = void 0;
|
|
89
100
|
this._firstUpdated = false;
|
|
90
101
|
}
|
|
91
102
|
reconnected() {
|
package/dist/sref-href.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sref-href.js","mappings":"AACA,SAAS,UAAU,eAA8B;AACjD,SAAS,WAAqB,gBAAgB;AAE9C,SAAS,sBAAsB;AAE/B,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAClC,SAAS,
|
|
1
|
+
{"version":3,"file":"sref-href.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/sref-href.ts"]}
|
package/dist/ui-sref-active.d.ts
CHANGED
|
@@ -158,6 +158,8 @@ export declare class UiSrefActiveDirective extends AsyncDirective {
|
|
|
158
158
|
uiRouter: UIRouterLit | undefined;
|
|
159
159
|
/** @internal */
|
|
160
160
|
seekRouter(): void;
|
|
161
|
+
/** drops the subscription to a provider that may still replace its router */
|
|
162
|
+
private _unsubscribeRouter;
|
|
161
163
|
/** @internal */
|
|
162
164
|
parentView: ParentView | null;
|
|
163
165
|
/** @internal */
|
|
@@ -280,6 +282,11 @@ export declare class UiSrefActiveDirective extends AsyncDirective {
|
|
|
280
282
|
_firstUpdated: boolean;
|
|
281
283
|
/** @internal */
|
|
282
284
|
firstUpdated({ targetStates }: Partial<UiSrefActiveParams>): void;
|
|
285
|
+
private explicitTarget;
|
|
286
|
+
private watch;
|
|
287
|
+
private unwatch;
|
|
288
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
289
|
+
private readonly onRouterReplaced;
|
|
283
290
|
/** @internal */
|
|
284
291
|
disconnected(): void;
|
|
285
292
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-sref-active.d.ts","mappings":"AAAA,SACE,WACA,aACA,YACA,yBACK;AACP,SAAS,UAAU,mBAAmB;AACtC,SAAoB,gBAA0B;AAC9C,cAAc,uBAAuB;AACrC,SAAS,sBAAsB;AAE/B,SAAS,mBAAmB;AAG5B,SAKE,eACA,yBAEK;AACP,cAAc,kBAAkB;AAGhC;;;;;CAKE;;;;;CAKA,kBACK;;AAGP,iBAAiB,SAAS;CACxB;CACA,OAAO;CACP,SAAS;AACX;;;;;AAMA,OAAO,cAAM,gCAAgC;;;;;AAM7C,oBAAY,sBAAsB;;CAEhC;;CAEA;;CAEA;AACF;;;;;;;;;;;;AAaA,iBAAiB,WAAW;;CAE1B;;CAEA;;CAEA;;CAEA;;CAEA,cAAc;AAChB;;;;;;;;;AAUA,YAAY,mBACR,SACA,SACA,aACA,SACA,SACA;;;;;;;;;;;;;;AAeJ,iBAAiB,kBAAkB;;CAEjC,QAAQ,mBAAmB;;;;;CAK3B,SAAS,mBAAmB;AAC9B;;;;;;;;AAuBA,iBAAiB,mBAAmB;;CAElC;;CAEA;;;;;;;;;;;;;;;;;;CAkBA,mBAAmB,mBAAmB,QAAQ;;CAE9C;;CAEA,SAAS;;CAET,UAAU;;CAEV,cAAc;AAChB;KAKK;;;;;;;;;;;;;;;;;;AAmBL,OAAO,cAAM,8BAA8B,eAAe;;CAExD,SAAS;;CAGT,UAAU;;CAEV;;
|
|
1
|
+
{"version":3,"file":"ui-sref-active.d.ts","mappings":"AAAA,SACE,WACA,aACA,YACA,yBACK;AACP,SAAS,UAAU,mBAAmB;AACtC,SAAoB,gBAA0B;AAC9C,cAAc,uBAAuB;AACrC,SAAS,sBAAsB;AAE/B,SAAS,mBAAmB;AAG5B,SAKE,eACA,yBAEK;AACP,cAAc,kBAAkB;AAGhC;;;;;CAKE;;;;;CAKA,kBACK;;AAGP,iBAAiB,SAAS;CACxB;CACA,OAAO;CACP,SAAS;AACX;;;;;AAMA,OAAO,cAAM,gCAAgC;;;;;AAM7C,oBAAY,sBAAsB;;CAEhC;;CAEA;;CAEA;AACF;;;;;;;;;;;;AAaA,iBAAiB,WAAW;;CAE1B;;CAEA;;CAEA;;CAEA;;CAEA,cAAc;AAChB;;;;;;;;;AAUA,YAAY,mBACR,SACA,SACA,aACA,SACA,SACA;;;;;;;;;;;;;;AAeJ,iBAAiB,kBAAkB;;CAEjC,QAAQ,mBAAmB;;;;;CAK3B,SAAS,mBAAmB;AAC9B;;;;;;;;AAuBA,iBAAiB,mBAAmB;;CAElC;;CAEA;;;;;;;;;;;;;;;;;;CAkBA,mBAAmB,mBAAmB,QAAQ;;CAE9C;;CAEA,SAAS;;CAET,UAAU;;CAEV,cAAc;AAChB;KAKK;;;;;;;;;;;;;;;;;;AAmBL,OAAO,cAAM,8BAA8B,eAAe;;CAExD,SAAS;;CAGT,UAAU;;CAEV;;CAaA,QAAQ;;CAGR,YAAY;;CAEZ;;CAKA;;CAEA;;CAEA,kBAAkB,mBAAmB,QAAQ;;;;;;;CAO7C,QAAQ;;;;;;;;CAQR,QAAQ;;CAGR;;CAEA,QAAQ;;CAER,SAAS;;CAGT;;CAEA;;CAEA;;CAEA;;CAGA,cAAc,IAAI;;CAElB,SAAS,QAAQ,aAAa;;;;;CAS9B,iBAAiB;;CAGjB,oBAAoB;;CAEpB,4BAA4B;;;;;CAM5B,QAAQ;;;;;CAMR,QAAQ;;;;;CAMR,QAAQ;;CAGR,YAAY,UAAU;;CAatB,OAAO,EACL,eACA,cACA,oBACC,QAAQ,6BAA6B;;;;;;;;;;;CAoCxC,QAAQ;;;;;;;;;CAsBR,QAAQ;;;;;;;;;;;;CA+BR,QAAQ;;CAuBR,cAAc;;;;;;;;;CAgBd,cACE,OAAO,sBACP,YAAY,cACX;;CAKH,AAAM,OACJ,MAAM,aACN,CACE,EACE,eACA,cACA,kBACA,OACA,QACA,SACA,kBAEA,sBACH;;CAkCH,uBAAsB;;CAStB;;CAEA,aAAa,EAAE,gBAAgB,QAAQ;CAkDvC,QAAQ;CAIR,QAAQ;CAWR,QAAQ;;CASR,iBAAiB;;CAejB;;;;;CA2BA;;CAqBA,iCACE,KAAK,uBACL,OAAO,aACN,YAAY;;CAef,sBAAuB,OAAO;;CAmB9B,0BAA2B,GAAG;;CAkB9B,UAAU,WAAW,WAAW;;CAiBhC,oBAAqB,OAAO;;CAsB5B;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0HA,OAAO,cAAM,eACX,QAAQ,QAAQ,wBACb,uBAAuB","names":[],"ignoreList":[],"sources":["../src/ui-sref-active.ts"]}
|
package/dist/ui-sref-active.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { noChange } from "lit";
|
|
2
2
|
import { directive, PartType } from "lit/directive.js";
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
|
-
import { UIRouterLitElement } from "./ui-router.js";
|
|
5
4
|
import { warnMissingRouter } from "./dev-warn.js";
|
|
5
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
6
6
|
import { isNativeLink, mergeSrefStatus, srefStatus, toAriaCurrentValues, UI_SREF_TARGET_EVENT } from "./sref-internals.js";
|
|
7
7
|
import { UiView } from "./ui-view.js";
|
|
8
8
|
export { mergeSrefStatus, srefStatus } from "./sref-internals.js";
|
|
@@ -17,7 +17,10 @@ const isLinkElement = (element) => isNativeLink(element) || element.matches("[ro
|
|
|
17
17
|
let _first = null;
|
|
18
18
|
export class UiSrefActiveDirective extends AsyncDirective {
|
|
19
19
|
seekRouter() {
|
|
20
|
-
this.
|
|
20
|
+
this._unsubscribeRouter?.();
|
|
21
|
+
const { router, unsubscribe } = subscribeRouter(this.element, this.onRouterReplaced);
|
|
22
|
+
this.uiRouter = router;
|
|
23
|
+
this._unsubscribeRouter = unsubscribe;
|
|
21
24
|
}
|
|
22
25
|
seekParentView() {
|
|
23
26
|
this.parentView = UiView.seekParentView(this.element);
|
|
@@ -46,6 +49,17 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
46
49
|
});
|
|
47
50
|
};
|
|
48
51
|
this._firstUpdated = false;
|
|
52
|
+
this.onRouterReplaced = (router) => {
|
|
53
|
+
this._unsubscribeRouter = void 0;
|
|
54
|
+
this.unwatch();
|
|
55
|
+
this.uiRouter = router;
|
|
56
|
+
if (!this._lastTargetStates && this.state) {
|
|
57
|
+
this.targetStates.clear();
|
|
58
|
+
this.targetStates.add(this.explicitTarget(router, this.state));
|
|
59
|
+
}
|
|
60
|
+
this.watch(router);
|
|
61
|
+
this.onStatesChanged();
|
|
62
|
+
};
|
|
49
63
|
this.onUiSrefTargetEvent = (event) => {
|
|
50
64
|
const { targetState } = event.detail;
|
|
51
65
|
const previous = this._linkTargets.get(event.target);
|
|
@@ -154,13 +168,10 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
154
168
|
this.targetStates.add(targetState);
|
|
155
169
|
});
|
|
156
170
|
else if (this.state) {
|
|
157
|
-
if (this.uiRouter) this.targetStates.add(this.
|
|
171
|
+
if (this.uiRouter) this.targetStates.add(this.explicitTarget(this.uiRouter, this.state));
|
|
158
172
|
} else this.element.addEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
|
|
159
173
|
this.element.addEventListener(TRANSITION_STATE_CHANGE_EVENT, this.onTransitionStateChange);
|
|
160
|
-
if (this.uiRouter)
|
|
161
|
-
this._deregisterOnStart = this.uiRouter.transitionService.onStart({}, this.onTransitionStart);
|
|
162
|
-
this._deregisterOnStatesChanged = this.uiRouter.stateRegistry.onStatesChanged(this.onStatesChanged);
|
|
163
|
-
}
|
|
174
|
+
if (this.uiRouter) this.watch(this.uiRouter);
|
|
164
175
|
setTimeout(() => {
|
|
165
176
|
if (this.targetStates.size) {
|
|
166
177
|
const { active, exact } = this.getStatus() || {};
|
|
@@ -171,17 +182,29 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
171
182
|
}, 0);
|
|
172
183
|
this._firstUpdated = true;
|
|
173
184
|
}
|
|
185
|
+
explicitTarget(router, state) {
|
|
186
|
+
return router.stateService.target(state, this.params, this.getOptions());
|
|
187
|
+
}
|
|
188
|
+
watch(router) {
|
|
189
|
+
this._deregisterOnStart = router.transitionService.onStart({}, this.onTransitionStart);
|
|
190
|
+
this._deregisterOnStatesChanged = router.stateRegistry.onStatesChanged(this.onStatesChanged);
|
|
191
|
+
}
|
|
192
|
+
unwatch() {
|
|
193
|
+
this._connection++;
|
|
194
|
+
this._deregisterOnStart?.();
|
|
195
|
+
this._deregisterOnStart = void 0;
|
|
196
|
+
this._deregisterOnStatesChanged?.();
|
|
197
|
+
this._deregisterOnStatesChanged = void 0;
|
|
198
|
+
}
|
|
174
199
|
disconnected() {
|
|
175
200
|
this._firstUpdated = false;
|
|
176
|
-
this.
|
|
201
|
+
this.unwatch();
|
|
202
|
+
this._unsubscribeRouter?.();
|
|
203
|
+
this._unsubscribeRouter = void 0;
|
|
177
204
|
if (!this.element) return;
|
|
178
205
|
this.element.removeEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
|
|
179
206
|
this.element.removeEventListener(TRANSITION_STATE_CHANGE_EVENT, this.onTransitionStateChange);
|
|
180
207
|
this.element = null;
|
|
181
|
-
this._deregisterOnStart?.();
|
|
182
|
-
this._deregisterOnStart = void 0;
|
|
183
|
-
this._deregisterOnStatesChanged?.();
|
|
184
|
-
this._deregisterOnStatesChanged = void 0;
|
|
185
208
|
}
|
|
186
209
|
reconnected() {
|
|
187
210
|
this.element = this._partElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-sref-active.js","mappings":"AAMA,SAAS,gBAA6B;AACtC,SAAS,WAAqB,gBAAgB;AAE9C,SAAS,sBAAsB;AAG/B,
|
|
1
|
+
{"version":3,"file":"ui-sref-active.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/ui-sref-active.ts"]}
|
package/dist/ui-sref.d.ts
CHANGED
|
@@ -125,6 +125,8 @@ export declare class UiSrefDirective extends AsyncDirective {
|
|
|
125
125
|
private _seekedRouter;
|
|
126
126
|
/** @internal */
|
|
127
127
|
unsubscribe: (() => void) | undefined;
|
|
128
|
+
/** drops the subscription to a provider that may still replace its router */
|
|
129
|
+
private _unsubscribeRouter;
|
|
128
130
|
/**
|
|
129
131
|
* Kept across a disconnect so {@link reconnected} can re-arm.
|
|
130
132
|
* @internal
|
|
@@ -144,6 +146,8 @@ export declare class UiSrefDirective extends AsyncDirective {
|
|
|
144
146
|
shouldAssignHref(): boolean;
|
|
145
147
|
/** @internal */
|
|
146
148
|
seekRouter(): void;
|
|
149
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
150
|
+
private readonly onRouterReplaced;
|
|
147
151
|
/**
|
|
148
152
|
* Names this sref in the missing-provider warning. Shared by the two sites
|
|
149
153
|
* that observe the no-op — the render that writes no `href` and the click
|
package/dist/ui-sref.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-sref.d.ts","mappings":"AAAA,SAAS,WAAW,mBAAmB,mBAAmB;AAC1D,SAAS,UAAU,mBAAmB;AACtC,SAAoB,gBAA0B;AAC9C,cAAc,uBAAuB;AACrC,SAAS,sBAAsB;AAE/B,SAAS,mBAAmB;AAC5B,SAAS,oBAAuC;AAEhD,cAAc,kBAAkB;AAWhC,cAAc,qBAAqB;AAGnC,SAAS;AAET,SACE,sBACA,oCACK;AAEP,cAAc,eAAe,yBAAyB;AAEtD;;;;;CAKE;;;;;CAKA;;;;;CAKA;;;;;CAKA;;;;;CAKA;;;;;CAKA;;;;;CAKA,gCACK;;;;;;;AAQP,iBAAiB,cAAc;;;;;;;;;;;;;;;;;;;CAmB7B,uBAAuB;AACzB;;;;;;;AAQA,YAAY,0BAA0B,oBAAoB;;;;;;;;;;;;;;AAkB1D,OAAO,cAAM,wBAAwB,eAAe;;CAElD;;CAEA,QAAQ;;CAER,SAAS;;CAGT,SAAS;;CAGT,UAAU;;CAEV,YAAY;;CAGZ,eAAe;;CAGf;;CAEA,aAAa;;CAGb,QAAQ;;;;;;;;;CAUR,QAAQ;;CAGR;;;;;
|
|
1
|
+
{"version":3,"file":"ui-sref.d.ts","mappings":"AAAA,SAAS,WAAW,mBAAmB,mBAAmB;AAC1D,SAAS,UAAU,mBAAmB;AACtC,SAAoB,gBAA0B;AAC9C,cAAc,uBAAuB;AACrC,SAAS,sBAAsB;AAE/B,SAAS,mBAAmB;AAC5B,SAAS,oBAAuC;AAEhD,cAAc,kBAAkB;AAWhC,cAAc,qBAAqB;AAGnC,SAAS;AAET,SACE,sBACA,oCACK;AAEP,cAAc,eAAe,yBAAyB;AAEtD;;;;;CAKE;;;;;CAKA;;;;;CAKA;;;;;CAKA;;;;;CAKA;;;;;CAKA;;;;;CAKA,gCACK;;;;;;;AAQP,iBAAiB,cAAc;;;;;;;;;;;;;;;;;;;CAmB7B,uBAAuB;AACzB;;;;;;;AAQA,YAAY,0BAA0B,oBAAoB;;;;;;;;;;;;;;AAkB1D,OAAO,cAAM,wBAAwB,eAAe;;CAElD;;CAEA,QAAQ;;CAER,SAAS;;CAGT,SAAS;;CAGT,UAAU;;CAEV,YAAY;;CAGZ,eAAe;;CAGf;;CAEA,aAAa;;CAGb,QAAQ;;;;;;;;;CAUR,QAAQ;;CAGR;;CAGA,QAAQ;;;;;CAMR,QAAQ;;CAGR,YAAY,UAAU;;CAStB,WAAW,OAAM,oBAAmC;;CAKpD,OACE,eACA,SAAS,WACT,UAAU,2BACF;;;;;;CAqDV;;CA+BA;;CAcA,iBAAiB;;;;;;;;CAejB,QAAQ;;CAUR;;CAKA;;;;;CAqBA;;CASA,UAAW,OAAO;;CAwBlB,OACE,MAAM,aACN,CAAC,OAAO,QAAa,mBAEnB,YACA,mCAEM;;CAuBV,uBAAsB;CAItB,QAAQ;;;;CAIR;AAqBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,OAAO,cAAM,SACX,eACA,SAAS,WACT,UAAU,4BACP,uBAAuB","names":[],"ignoreList":[],"sources":["../src/ui-sref.ts"]}
|
package/dist/ui-sref.js
CHANGED
|
@@ -2,7 +2,7 @@ import { noChange } from "lit";
|
|
|
2
2
|
import { directive, PartType } from "lit/directive.js";
|
|
3
3
|
import { AsyncDirective } from "lit/async-directive.js";
|
|
4
4
|
import { inLitDevMode, warnMissingRouter } from "./dev-warn.js";
|
|
5
|
-
import {
|
|
5
|
+
import { subscribeRouter } from "./router-subscription.js";
|
|
6
6
|
import { UiView } from "./ui-view.js";
|
|
7
7
|
import { clickBelongsToBrowser, isNativeLink, sameTarget, srefTransitionOptions, uiSrefTargetEvent, uiSrefTargetRemovedEvent } from "./sref-internals.js";
|
|
8
8
|
export { inLitDevMode };
|
|
@@ -22,6 +22,13 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
22
22
|
this._ownsHref = false;
|
|
23
23
|
this._seekedRouter = false;
|
|
24
24
|
this._partElement = null;
|
|
25
|
+
this.onRouterReplaced = (router) => {
|
|
26
|
+
this._unsubscribeRouter = void 0;
|
|
27
|
+
this.unsubscribe?.();
|
|
28
|
+
this.uiRouter = router;
|
|
29
|
+
this.unsubscribe = router.stateRegistry.onStatesChanged(this.doRender);
|
|
30
|
+
this.doRender();
|
|
31
|
+
};
|
|
25
32
|
this.onClick = (event) => {
|
|
26
33
|
const { uiRouter: router, state, params } = this;
|
|
27
34
|
const options = this.getOptions();
|
|
@@ -80,7 +87,10 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
80
87
|
return true;
|
|
81
88
|
}
|
|
82
89
|
seekRouter() {
|
|
83
|
-
this.
|
|
90
|
+
this._unsubscribeRouter?.();
|
|
91
|
+
const { router, unsubscribe } = subscribeRouter(this.element, this.onRouterReplaced);
|
|
92
|
+
this.uiRouter = router;
|
|
93
|
+
this._unsubscribeRouter = unsubscribe;
|
|
84
94
|
this._seekedRouter = true;
|
|
85
95
|
}
|
|
86
96
|
warnMissingRouter(state) {
|
|
@@ -99,6 +109,8 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
99
109
|
this._ownsHref = false;
|
|
100
110
|
this.unsubscribe?.();
|
|
101
111
|
this.unsubscribe = void 0;
|
|
112
|
+
this._unsubscribeRouter?.();
|
|
113
|
+
this._unsubscribeRouter = void 0;
|
|
102
114
|
this._firstUpdated = false;
|
|
103
115
|
}
|
|
104
116
|
reconnected() {
|
package/dist/ui-sref.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-sref.js","mappings":"AACA,SAAS,gBAA6B;AACtC,SAAS,WAAqB,gBAAgB;AAE9C,SAAS,sBAAsB;AAG/B,SAAS,cAAc,yBAAyB;AAChD,SAAS,
|
|
1
|
+
{"version":3,"file":"ui-sref.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/ui-sref.ts"]}
|
package/package.json
CHANGED
package/src/sref-active.ts
CHANGED
|
@@ -13,8 +13,8 @@ import { AsyncDirective } from 'lit/async-directive.js';
|
|
|
13
13
|
import { getScopedRouter } from './context.js';
|
|
14
14
|
import { UIRouterLit } from './core.js';
|
|
15
15
|
import { warnMissingRouter } from './dev-warn.js';
|
|
16
|
+
import { subscribeRouter } from './router-subscription.js';
|
|
16
17
|
import { resolveAriaCurrent, SrefTargets } from './sref-status.js';
|
|
17
|
-
import { UIRouterLitElement } from './ui-router.js';
|
|
18
18
|
import {
|
|
19
19
|
UI_SREF_TARGET_EVENT,
|
|
20
20
|
UI_SREF_TARGET_REMOVED_EVENT,
|
|
@@ -84,6 +84,8 @@ export abstract class SrefStatusDirective<
|
|
|
84
84
|
|
|
85
85
|
private _firstUpdated = false;
|
|
86
86
|
private _deregister: deregisterFn[] = [];
|
|
87
|
+
/** the hooks on the router itself, which a replacement router moves */
|
|
88
|
+
private _routerDeregister: deregisterFn[] = [];
|
|
87
89
|
/** bumped on disconnect, so a settlement subscribed before it stays quiet */
|
|
88
90
|
private _connection = 0;
|
|
89
91
|
|
|
@@ -174,7 +176,18 @@ export abstract class SrefStatusDirective<
|
|
|
174
176
|
}
|
|
175
177
|
|
|
176
178
|
const element = this.element!;
|
|
177
|
-
|
|
179
|
+
|
|
180
|
+
const { router, unsubscribe } = subscribeRouter(
|
|
181
|
+
element,
|
|
182
|
+
this.onRouterReplaced,
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
this.uiRouter = router;
|
|
186
|
+
|
|
187
|
+
if (unsubscribe) {
|
|
188
|
+
this._deregister.push(unsubscribe);
|
|
189
|
+
}
|
|
190
|
+
|
|
178
191
|
this.parentView = UiView.seekParentView(element);
|
|
179
192
|
this.targets.router = this.uiRouter;
|
|
180
193
|
this.targets.relative = this.parentView?.viewContext?.name;
|
|
@@ -202,16 +215,8 @@ export abstract class SrefStatusDirective<
|
|
|
202
215
|
);
|
|
203
216
|
});
|
|
204
217
|
|
|
205
|
-
const router = this.uiRouter;
|
|
206
|
-
|
|
207
218
|
if (router) {
|
|
208
|
-
|
|
209
|
-
this._deregister.push(
|
|
210
|
-
router.transitionService.onStart({}, this.onTransitionStart, {
|
|
211
|
-
priority: -Infinity,
|
|
212
|
-
}) as deregisterFn,
|
|
213
|
-
router.stateRegistry.onStatesChanged(this.onStatesChanged),
|
|
214
|
-
);
|
|
219
|
+
this.watch(router);
|
|
215
220
|
} else {
|
|
216
221
|
warnMissingRouter(
|
|
217
222
|
element,
|
|
@@ -224,6 +229,32 @@ export abstract class SrefStatusDirective<
|
|
|
224
229
|
this.refresh();
|
|
225
230
|
}
|
|
226
231
|
|
|
232
|
+
private watch(router: UIRouterLit): void {
|
|
233
|
+
// SAFETY: hook registration returns its deregistration function
|
|
234
|
+
this._routerDeregister.push(
|
|
235
|
+
router.transitionService.onStart({}, this.onTransitionStart, {
|
|
236
|
+
priority: -Infinity,
|
|
237
|
+
}) as deregisterFn,
|
|
238
|
+
router.stateRegistry.onStatesChanged(this.onStatesChanged),
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private unwatch(): void {
|
|
243
|
+
this._connection++;
|
|
244
|
+
this._routerDeregister.forEach((deregister) => deregister());
|
|
245
|
+
this._routerDeregister = [];
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
249
|
+
private readonly onRouterReplaced = (router: UIRouterLit): void => {
|
|
250
|
+
this.unwatch();
|
|
251
|
+
this.uiRouter = router;
|
|
252
|
+
this.targets.router = router;
|
|
253
|
+
this.targets.rebuild();
|
|
254
|
+
this.watch(router);
|
|
255
|
+
this.refresh();
|
|
256
|
+
};
|
|
257
|
+
|
|
227
258
|
/** @internal */
|
|
228
259
|
onUiSrefTargetEvent = (event: UiSrefTargetEvent): void => {
|
|
229
260
|
this.targets.onLink(event);
|
|
@@ -283,7 +314,7 @@ export abstract class SrefStatusDirective<
|
|
|
283
314
|
|
|
284
315
|
/** @internal */
|
|
285
316
|
disconnected(): void {
|
|
286
|
-
this.
|
|
317
|
+
this.unwatch();
|
|
287
318
|
this._deregister.forEach((deregister) => deregister());
|
|
288
319
|
this._deregister = [];
|
|
289
320
|
this._firstUpdated = false;
|
package/src/sref-href.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { AsyncDirective } from 'lit/async-directive.js';
|
|
|
7
7
|
import { getScopedRouter } from './context.js';
|
|
8
8
|
import { UIRouterLit } from './core.js';
|
|
9
9
|
import { warnMissingRouter } from './dev-warn.js';
|
|
10
|
-
import {
|
|
10
|
+
import { subscribeRouter } from './router-subscription.js';
|
|
11
11
|
import {
|
|
12
12
|
clickBelongsToBrowser,
|
|
13
13
|
sameTarget,
|
|
@@ -62,6 +62,9 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
62
62
|
/** @internal */
|
|
63
63
|
unsubscribe: (() => void) | undefined;
|
|
64
64
|
|
|
65
|
+
/** drops the subscription to a provider that may still replace its router */
|
|
66
|
+
private _unsubscribeRouter: (() => void) | undefined;
|
|
67
|
+
|
|
65
68
|
/** @internal */
|
|
66
69
|
constructor(partInfo: PartInfo) {
|
|
67
70
|
super(partInfo);
|
|
@@ -152,7 +155,14 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
152
155
|
}
|
|
153
156
|
|
|
154
157
|
const element = this.element!;
|
|
155
|
-
|
|
158
|
+
|
|
159
|
+
const { router, unsubscribe } = subscribeRouter(
|
|
160
|
+
element,
|
|
161
|
+
this.onRouterReplaced,
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
this.uiRouter = router;
|
|
165
|
+
this._unsubscribeRouter = unsubscribe;
|
|
156
166
|
this._seekedRouter = true;
|
|
157
167
|
this.parentView = UiView.seekParentView(element);
|
|
158
168
|
// SAFETY: a 'click' event is a MouseEvent
|
|
@@ -170,6 +180,15 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
170
180
|
this._firstUpdated = true;
|
|
171
181
|
}
|
|
172
182
|
|
|
183
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
184
|
+
private readonly onRouterReplaced = (router: UIRouterLit): void => {
|
|
185
|
+
this._unsubscribeRouter = undefined;
|
|
186
|
+
this.unsubscribe?.();
|
|
187
|
+
this.uiRouter = router;
|
|
188
|
+
this.unsubscribe = router.stateRegistry.onStatesChanged(this.doRender);
|
|
189
|
+
this.doRender();
|
|
190
|
+
};
|
|
191
|
+
|
|
173
192
|
/** @internal */
|
|
174
193
|
doRender = (): void => {
|
|
175
194
|
const value = this.render(this.state!, this.params, this.options);
|
|
@@ -223,6 +242,8 @@ export class SrefHrefDirective extends AsyncDirective {
|
|
|
223
242
|
this.targetState = null;
|
|
224
243
|
this.unsubscribe?.();
|
|
225
244
|
this.unsubscribe = undefined;
|
|
245
|
+
this._unsubscribeRouter?.();
|
|
246
|
+
this._unsubscribeRouter = undefined;
|
|
226
247
|
this._firstUpdated = false;
|
|
227
248
|
}
|
|
228
249
|
|
package/src/ui-sref-active.ts
CHANGED
|
@@ -10,8 +10,8 @@ import type { DirectiveResult } from 'lit/directive.js';
|
|
|
10
10
|
import { AsyncDirective } from 'lit/async-directive.js';
|
|
11
11
|
|
|
12
12
|
import { UIRouterLit } from './core.js';
|
|
13
|
-
import { UIRouterLitElement } from './ui-router.js';
|
|
14
13
|
import { inLitDevMode, warnMissingRouter } from './dev-warn.js';
|
|
14
|
+
import { subscribeRouter } from './router-subscription.js';
|
|
15
15
|
import {
|
|
16
16
|
isNativeLink,
|
|
17
17
|
mergeSrefStatus,
|
|
@@ -210,9 +210,20 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
210
210
|
uiRouter: UIRouterLit | undefined;
|
|
211
211
|
/** @internal */
|
|
212
212
|
seekRouter(): void {
|
|
213
|
-
this.
|
|
213
|
+
this._unsubscribeRouter?.();
|
|
214
|
+
|
|
215
|
+
const { router, unsubscribe } = subscribeRouter(
|
|
216
|
+
this.element!,
|
|
217
|
+
this.onRouterReplaced,
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
this.uiRouter = router;
|
|
221
|
+
this._unsubscribeRouter = unsubscribe;
|
|
214
222
|
}
|
|
215
223
|
|
|
224
|
+
/** drops the subscription to a provider that may still replace its router */
|
|
225
|
+
private _unsubscribeRouter: deregisterFn | undefined;
|
|
226
|
+
|
|
216
227
|
/** @internal */
|
|
217
228
|
parentView: ParentView | null = null;
|
|
218
229
|
/** @internal */
|
|
@@ -524,13 +535,7 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
524
535
|
} else if (this.state) {
|
|
525
536
|
// no router: no target to resolve, and the update that follows reports it
|
|
526
537
|
if (this.uiRouter) {
|
|
527
|
-
this.targetStates.add(
|
|
528
|
-
this.uiRouter.stateService.target(
|
|
529
|
-
this.state,
|
|
530
|
-
this.params,
|
|
531
|
-
this.getOptions(),
|
|
532
|
-
),
|
|
533
|
-
);
|
|
538
|
+
this.targetStates.add(this.explicitTarget(this.uiRouter, this.state));
|
|
534
539
|
}
|
|
535
540
|
} else {
|
|
536
541
|
this.element!.addEventListener(
|
|
@@ -548,13 +553,7 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
548
553
|
// no router: nothing to subscribe to, and `_firstUpdated` still has to be
|
|
549
554
|
// reached so the next update can report the no-op
|
|
550
555
|
if (this.uiRouter) {
|
|
551
|
-
|
|
552
|
-
this._deregisterOnStart = this.uiRouter.transitionService.onStart(
|
|
553
|
-
{},
|
|
554
|
-
this.onTransitionStart,
|
|
555
|
-
) as deregisterFn;
|
|
556
|
-
this._deregisterOnStatesChanged =
|
|
557
|
-
this.uiRouter.stateRegistry.onStatesChanged(this.onStatesChanged);
|
|
556
|
+
this.watch(this.uiRouter);
|
|
558
557
|
}
|
|
559
558
|
|
|
560
559
|
setTimeout(() => {
|
|
@@ -569,11 +568,51 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
569
568
|
this._firstUpdated = true;
|
|
570
569
|
}
|
|
571
570
|
|
|
571
|
+
private explicitTarget(router: UIRouterLit, state: string): TargetState {
|
|
572
|
+
return router.stateService.target(state, this.params, this.getOptions());
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
private watch(router: UIRouterLit): void {
|
|
576
|
+
// SAFETY: hook registration returns its deregistration function
|
|
577
|
+
this._deregisterOnStart = router.transitionService.onStart(
|
|
578
|
+
{},
|
|
579
|
+
this.onTransitionStart,
|
|
580
|
+
) as deregisterFn;
|
|
581
|
+
this._deregisterOnStatesChanged = router.stateRegistry.onStatesChanged(
|
|
582
|
+
this.onStatesChanged,
|
|
583
|
+
);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
private unwatch(): void {
|
|
587
|
+
this._connection++;
|
|
588
|
+
this._deregisterOnStart?.();
|
|
589
|
+
this._deregisterOnStart = undefined;
|
|
590
|
+
this._deregisterOnStatesChanged?.();
|
|
591
|
+
this._deregisterOnStatesChanged = undefined;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
595
|
+
private readonly onRouterReplaced = (router: UIRouterLit): void => {
|
|
596
|
+
this._unsubscribeRouter = undefined;
|
|
597
|
+
this.unwatch();
|
|
598
|
+
this.uiRouter = router;
|
|
599
|
+
|
|
600
|
+
if (!this._lastTargetStates && this.state) {
|
|
601
|
+
this.targetStates.clear();
|
|
602
|
+
this.targetStates.add(this.explicitTarget(router, this.state));
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
this.watch(router);
|
|
606
|
+
this.onStatesChanged();
|
|
607
|
+
};
|
|
608
|
+
|
|
572
609
|
/** @internal */
|
|
573
610
|
disconnected(): void {
|
|
574
611
|
// re-arming is what `reconnected` does; without this it would no-op
|
|
575
612
|
this._firstUpdated = false;
|
|
576
|
-
this.
|
|
613
|
+
this.unwatch();
|
|
614
|
+
this._unsubscribeRouter?.();
|
|
615
|
+
this._unsubscribeRouter = undefined;
|
|
577
616
|
|
|
578
617
|
if (!this.element) {
|
|
579
618
|
return;
|
|
@@ -589,10 +628,6 @@ export class UiSrefActiveDirective extends AsyncDirective {
|
|
|
589
628
|
this.onTransitionStateChange,
|
|
590
629
|
);
|
|
591
630
|
this.element = null;
|
|
592
|
-
this._deregisterOnStart?.();
|
|
593
|
-
this._deregisterOnStart = undefined;
|
|
594
|
-
this._deregisterOnStatesChanged?.();
|
|
595
|
-
this._deregisterOnStatesChanged = undefined;
|
|
596
631
|
}
|
|
597
632
|
|
|
598
633
|
/**
|
package/src/ui-sref.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { AsyncDirective } from 'lit/async-directive.js';
|
|
|
6
6
|
|
|
7
7
|
import { UIRouterLit } from './core.js';
|
|
8
8
|
import { inLitDevMode, warnMissingRouter } from './dev-warn.js';
|
|
9
|
-
import {
|
|
9
|
+
import { subscribeRouter } from './router-subscription.js';
|
|
10
10
|
import type { ParentView } from './events.js';
|
|
11
11
|
import { UiView } from './ui-view.js';
|
|
12
12
|
|
|
@@ -160,6 +160,9 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
160
160
|
/** @internal */
|
|
161
161
|
unsubscribe: (() => void) | undefined;
|
|
162
162
|
|
|
163
|
+
/** drops the subscription to a provider that may still replace its router */
|
|
164
|
+
private _unsubscribeRouter: (() => void) | undefined;
|
|
165
|
+
|
|
163
166
|
/**
|
|
164
167
|
* Kept across a disconnect so {@link reconnected} can re-arm.
|
|
165
168
|
* @internal
|
|
@@ -270,10 +273,27 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
270
273
|
|
|
271
274
|
/** @internal */
|
|
272
275
|
seekRouter(): void {
|
|
273
|
-
this.
|
|
276
|
+
this._unsubscribeRouter?.();
|
|
277
|
+
|
|
278
|
+
const { router, unsubscribe } = subscribeRouter(
|
|
279
|
+
this.element!,
|
|
280
|
+
this.onRouterReplaced,
|
|
281
|
+
);
|
|
282
|
+
|
|
283
|
+
this.uiRouter = router;
|
|
284
|
+
this._unsubscribeRouter = unsubscribe;
|
|
274
285
|
this._seekedRouter = true;
|
|
275
286
|
}
|
|
276
287
|
|
|
288
|
+
/** What a disconnect and reconnect would do, for the router that replaced the one found. */
|
|
289
|
+
private readonly onRouterReplaced = (router: UIRouterLit): void => {
|
|
290
|
+
this._unsubscribeRouter = undefined;
|
|
291
|
+
this.unsubscribe?.();
|
|
292
|
+
this.uiRouter = router;
|
|
293
|
+
this.unsubscribe = router.stateRegistry.onStatesChanged(this.doRender);
|
|
294
|
+
this.doRender();
|
|
295
|
+
};
|
|
296
|
+
|
|
277
297
|
/**
|
|
278
298
|
* Names this sref in the missing-provider warning. Shared by the two sites
|
|
279
299
|
* that observe the no-op — the render that writes no `href` and the click
|
|
@@ -307,6 +327,8 @@ export class UiSrefDirective extends AsyncDirective {
|
|
|
307
327
|
this._ownsHref = false;
|
|
308
328
|
this.unsubscribe?.();
|
|
309
329
|
this.unsubscribe = undefined;
|
|
330
|
+
this._unsubscribeRouter?.();
|
|
331
|
+
this._unsubscribeRouter = undefined;
|
|
310
332
|
// re-arming is what `reconnected` does; without this it would no-op
|
|
311
333
|
this._firstUpdated = false;
|
|
312
334
|
}
|