lit-ui-router 1.11.1 → 1.12.0
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/README.md +6 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +3 -10
- package/dist/core.js.map +1 -1
- package/dist/custom-elements.json +11 -1
- package/dist/development/core.js +3 -10
- package/dist/development/core.js.map +1 -1
- package/dist/development/routed-element.js +10 -0
- package/dist/development/routed-element.js.map +1 -0
- package/dist/development/ui-view.js +9 -8
- package/dist/development/ui-view.js.map +1 -1
- package/dist/interface.d.ts +6 -1
- package/dist/interface.d.ts.map +1 -1
- package/dist/routed-element.d.ts +11 -0
- package/dist/routed-element.d.ts.map +1 -0
- package/dist/routed-element.js +10 -0
- package/dist/routed-element.js.map +1 -0
- package/dist/ui-view.d.ts +1 -0
- package/dist/ui-view.d.ts.map +1 -1
- package/dist/ui-view.js +9 -8
- package/dist/ui-view.js.map +1 -1
- package/package.json +1 -1
- package/src/core.ts +14 -12
- package/src/interface.ts +6 -1
- package/src/routed-element.ts +27 -0
- package/src/ui-view.ts +14 -9
package/README.md
CHANGED
|
@@ -45,6 +45,12 @@ registries or custom tag names) without touching the global registry, and pair
|
|
|
45
45
|
it with `lit-ui-router/register` — or a single `*.register` entry — to opt
|
|
46
46
|
into registration explicitly.
|
|
47
47
|
|
|
48
|
+
## Development and Production Builds
|
|
49
|
+
|
|
50
|
+
Every entry point above publishes twice: `dist/development/*.js` alongside `dist/*.js`, picked by the `development` export condition, which bundlers resolve automatically. Nothing to configure.
|
|
51
|
+
|
|
52
|
+
The development build carries three console warnings — `uiSref` writing an inert `href`, `uiSrefActive` taking over an `aria-current` it did not set, and any binding finding no `<ui-router>` ancestor. Each is gated on lit's own development build as well, and none of them, message text included, is present in a production bundle. See the [Development & Production Builds guide](https://lit-ui-router.dev/guides/development-builds) for what each warning means and how the split is verified.
|
|
53
|
+
|
|
48
54
|
## Component Styles
|
|
49
55
|
|
|
50
56
|
| Style | Best For | Example |
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","mappings":"AAAA,SAGE,UAIA,aACA,UACA,YAEA,wBACK;AAGP,SACE,kBACA,oBACA,4BACA,
|
|
1
|
+
{"version":3,"file":"core.d.ts","mappings":"AAAA,SAGE,UAIA,aACA,UACA,YAEA,wBACK;AAGP,SACE,kBACA,oBACA,4BACA,8BACA,2BACA,2BACK;;;;;;;;;AA4BP,OAAO,cAAM,yBAAyB,WAAW;CAY7C,MAAa;CACb,UAAiB;;CAXnB;;CAEA;;;;;;CAOA,YACE,AAAO,MAAM,YACb,AAAO,UAAU;;;;;CAOnB,QAAQ;AAGV;;;;;;;;;;;;;AAcA,OAAO,iBAAS,6BACd,UAAU,sBAAsB,qBAEhC,QAAQ,mBAAmB,KAC1B,UAAU,2BAA2B,KAAK,0BAA0B;;;;;;;;AAWvE,OAAO,iBAAS,mBACd,UAAU,sBAAsB,qBAChC,sBAAsB,aAAa,iBAAiB;;;;;;;;;;;;;;AAiBtD,OAAO,iBAAS,gBACd,UAAU,sBAAsB,qBAChC,OAAO,cAAc,eAAe,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGnE,OAAO,cAAM,oBAAoB,SAAS;;;;;;;;;CASxC;;CASA,QAAQ;;;;;;;;;;;;;;;;;CAkBR;AAUF","names":[],"ignoreList":[],"sources":["../src/core.ts"]}
|
package/dist/core.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { forEach, isFunction, pick, servicesPlugin, UIRouter, ViewService } from "@uirouter/core";
|
|
2
|
-
import {
|
|
2
|
+
import { LitElement } from "lit";
|
|
3
|
+
import { routedLitElementRenderer } from "./routed-element.js";
|
|
3
4
|
const forEachValue = forEach;
|
|
4
5
|
let viewConfigIdCounter = 0;
|
|
5
6
|
export class LitViewConfig {
|
|
@@ -33,15 +34,7 @@ export function litViewsBuilder(state) {
|
|
|
33
34
|
const normalizedTarget = ViewService.normalizeUIViewTarget(normalizedConfig.$context, normalizedConfig.$name);
|
|
34
35
|
normalizedConfig.$uiViewName = normalizedTarget.uiViewName;
|
|
35
36
|
normalizedConfig.$uiViewContextAnchor = normalizedTarget.uiViewContextAnchor;
|
|
36
|
-
if (isRoutedLitElement(normalizedConfig.component))
|
|
37
|
-
const Component = normalizedConfig.component;
|
|
38
|
-
let component;
|
|
39
|
-
normalizedConfig.component = (props) => {
|
|
40
|
-
component = Component.sticky && component || new Component(props);
|
|
41
|
-
component._uiViewProps = props;
|
|
42
|
-
return html`${component}`;
|
|
43
|
-
};
|
|
44
|
-
}
|
|
37
|
+
if (isRoutedLitElement(normalizedConfig.component) && normalizedConfig.component.sticky) normalizedConfig.component = routedLitElementRenderer(normalizedConfig.component);
|
|
45
38
|
views[name] = viewsObject[name] = normalizedConfig;
|
|
46
39
|
});
|
|
47
40
|
return views;
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","mappings":"AAAA,SACE,SACA,YAEA,MACA,gBAGA,UAEA,mBAEK;AACP,SAAS,
|
|
1
|
+
{"version":3,"file":"core.js","mappings":"AAAA,SACE,SACA,YAEA,MACA,gBAGA,UAEA,mBAEK;AACP,SAAS,kBAAkB;AAU3B,SAAS,gCAAgC;AAQzC,MAAM,eAAe;AASrB,IAAI,sBAAsB;AAU1B,OAAO,MAAM,cAAoC;CAW/C,YACE,MACA,UACA;EAFO;EACA;aAXK;gBAEL;CAUN;CAMH,OAAsB;EACpB,OAAO,QAAQ,QAAQ,IAAI;CAC7B;AACF;AAcA,OAAO,SAAS,6BAGd,QACwE;CACxE,OAAO,WAAW,MAAM;AAC1B;AASA,OAAO,SAAS,mBAEd,WAAuD;CACvD,OAAQ,WAAsC,qBAAqB;AACrE;AAeA,OAAO,SAAS,gBAEd,OAAqE;CACrE,MAAM,QAAyD,CAAC,GAC9D,cAAc,MAAM,SAAS,EAC3B,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,EACrC;CAEF,aACE,aACA,SAAU,QAA+B,MAAc;EACrD,IAAI;EACJ,OAAO,QAAQ;EACf,IAAI,6BAAgC,MAAM,GACxC,mBAAmB,EAAE,WAAW,OAAO;OAEvC,mBAAmB;EAErB,IAAI,OAAO,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG;EAEtD,iBAAiB,QAAQ;EACzB,iBAAiB,WAAW;EAC5B,iBAAiB,QAAQ;EAEzB,MAAM,mBAAmB,YAAY,sBACnC,iBAAiB,UACjB,iBAAiB,KACnB;EACA,iBAAiB,cAAc,iBAAiB;EAChD,iBAAiB,uBACf,iBAAiB;EAKnB,IACE,mBAAsB,iBAAiB,SAAS,KAChD,iBAAiB,UAAU,QAE3B,iBAAiB,YAAY,yBAC3B,iBAAiB,SACnB;EAGF,MAAM,QAAQ,YAAY,QAAQ;CACpC,CACF;CACA,OAAO;AACT;AAMA,MAAM,qBAAqB,MAAkB,WAC3C,IAAI,cAAc,MAAM,MAAM;AAiDhC,OAAO,MAAM,oBAAoB,SAAS;CASxC,cAAc;EACZ,MAAM;iBAQU;EAPhB,KAAK,OAAuB,cAAc;EAE1C,KAAK,YAAY,WAAW,mBAAmB,OAAO,iBAAiB;EACvE,KAAK,cAAc,UAAU,SAAS,eAAe;CACvD;CAqBA,QAAc;EACZ,IAAI,KAAK,SACP,MAAM,IAAI,MAAM,+BAA+B;EAGjD,KAAK,kBAAkB,KAAK;EAC5B,KAAK,WAAW,OAAO;EACvB,KAAK,WAAW,KAAK;EACrB,KAAK,UAAU;CACjB;AACF","names":[],"ignoreList":[],"sources":["../src/core.ts"]}
|
|
@@ -43,7 +43,8 @@
|
|
|
43
43
|
"text": "RoutedLitTemplate | null"
|
|
44
44
|
},
|
|
45
45
|
"privacy": "private",
|
|
46
|
-
"default": "null"
|
|
46
|
+
"default": "null",
|
|
47
|
+
"description": "Replaced only by a real view config change, so a retained view keeps its subtree."
|
|
47
48
|
},
|
|
48
49
|
{
|
|
49
50
|
"kind": "field",
|
|
@@ -234,6 +235,15 @@
|
|
|
234
235
|
"summary": "This is the <code><ui-view></code> component.\n\nThe <code><ui-view></code> component is a viewport for routed components.\nRouted components will be rendered inside the <code><ui-view></code> viewport.",
|
|
235
236
|
"tagName": "ui-view",
|
|
236
237
|
"customElement": true
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"kind": "variable",
|
|
241
|
+
"name": "resolves"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"kind": "variable",
|
|
245
|
+
"name": "transition",
|
|
246
|
+
"default": "injector.get(Transition)"
|
|
237
247
|
}
|
|
238
248
|
],
|
|
239
249
|
"exports": [
|
package/dist/development/core.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { forEach, isFunction, pick, servicesPlugin, UIRouter, ViewService } from "@uirouter/core";
|
|
2
|
-
import {
|
|
2
|
+
import { LitElement } from "lit";
|
|
3
|
+
import { routedLitElementRenderer } from "./routed-element.js";
|
|
3
4
|
const forEachValue = forEach;
|
|
4
5
|
let viewConfigIdCounter = 0;
|
|
5
6
|
export class LitViewConfig {
|
|
@@ -33,15 +34,7 @@ export function litViewsBuilder(state) {
|
|
|
33
34
|
const normalizedTarget = ViewService.normalizeUIViewTarget(normalizedConfig.$context, normalizedConfig.$name);
|
|
34
35
|
normalizedConfig.$uiViewName = normalizedTarget.uiViewName;
|
|
35
36
|
normalizedConfig.$uiViewContextAnchor = normalizedTarget.uiViewContextAnchor;
|
|
36
|
-
if (isRoutedLitElement(normalizedConfig.component))
|
|
37
|
-
const Component = normalizedConfig.component;
|
|
38
|
-
let component;
|
|
39
|
-
normalizedConfig.component = (props) => {
|
|
40
|
-
component = Component.sticky && component || new Component(props);
|
|
41
|
-
component._uiViewProps = props;
|
|
42
|
-
return html`${component}`;
|
|
43
|
-
};
|
|
44
|
-
}
|
|
37
|
+
if (isRoutedLitElement(normalizedConfig.component) && normalizedConfig.component.sticky) normalizedConfig.component = routedLitElementRenderer(normalizedConfig.component);
|
|
45
38
|
views[name] = viewsObject[name] = normalizedConfig;
|
|
46
39
|
});
|
|
47
40
|
return views;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","mappings":"AAAA,SACE,SACA,YAEA,MACA,gBAGA,UAEA,mBAEK;AACP,SAAS,
|
|
1
|
+
{"version":3,"file":"core.js","mappings":"AAAA,SACE,SACA,YAEA,MACA,gBAGA,UAEA,mBAEK;AACP,SAAS,kBAAkB;AAU3B,SAAS,gCAAgC;AAQzC,MAAM,eAAe;AASrB,IAAI,sBAAsB;AAU1B,OAAO,MAAM,cAAoC;CAW/C,YACE,MACA,UACA;EAFO;EACA;aAXK;gBAEL;CAUN;CAMH,OAAsB;EACpB,OAAO,QAAQ,QAAQ,IAAI;CAC7B;AACF;AAcA,OAAO,SAAS,6BAGd,QACwE;CACxE,OAAO,WAAW,MAAM;AAC1B;AASA,OAAO,SAAS,mBAEd,WAAuD;CACvD,OAAQ,WAAsC,qBAAqB;AACrE;AAeA,OAAO,SAAS,gBAEd,OAAqE;CACrE,MAAM,QAAyD,CAAC,GAC9D,cAAc,MAAM,SAAS,EAC3B,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,EACrC;CAEF,aACE,aACA,SAAU,QAA+B,MAAc;EACrD,IAAI;EACJ,OAAO,QAAQ;EACf,IAAI,6BAAgC,MAAM,GACxC,mBAAmB,EAAE,WAAW,OAAO;OAEvC,mBAAmB;EAErB,IAAI,OAAO,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG;EAEtD,iBAAiB,QAAQ;EACzB,iBAAiB,WAAW;EAC5B,iBAAiB,QAAQ;EAEzB,MAAM,mBAAmB,YAAY,sBACnC,iBAAiB,UACjB,iBAAiB,KACnB;EACA,iBAAiB,cAAc,iBAAiB;EAChD,iBAAiB,uBACf,iBAAiB;EAKnB,IACE,mBAAsB,iBAAiB,SAAS,KAChD,iBAAiB,UAAU,QAE3B,iBAAiB,YAAY,yBAC3B,iBAAiB,SACnB;EAGF,MAAM,QAAQ,YAAY,QAAQ;CACpC,CACF;CACA,OAAO;AACT;AAMA,MAAM,qBAAqB,MAAkB,WAC3C,IAAI,cAAc,MAAM,MAAM;AAiDhC,OAAO,MAAM,oBAAoB,SAAS;CASxC,cAAc;EACZ,MAAM;iBAQU;EAPhB,KAAK,OAAuB,cAAc;EAE1C,KAAK,YAAY,WAAW,mBAAmB,OAAO,iBAAiB;EACvE,KAAK,cAAc,UAAU,SAAS,eAAe;CACvD;CAqBA,QAAc;EACZ,IAAI,KAAK,SACP,MAAM,IAAI,MAAM,+BAA+B;EAGjD,KAAK,kBAAkB,KAAK;EAC5B,KAAK,WAAW,OAAO;EACvB,KAAK,WAAW,KAAK;EACrB,KAAK,UAAU;CACjB;AACF","names":[],"ignoreList":[],"sources":["../../src/core.ts"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
export function routedLitElementRenderer(Component) {
|
|
3
|
+
let element;
|
|
4
|
+
return (props) => {
|
|
5
|
+
element ??= new Component(props);
|
|
6
|
+
element._uiViewProps = props;
|
|
7
|
+
return html`${element}`;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=routed-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routed-element.js","mappings":"AAAA,SAAS,YAAY;AAiBrB,OAAO,SAAS,yBAEd,WAAsD;CACtD,IAAI;CACJ,QAAQ,UAAkC;EACxC,YAAY,IAAI,UAAU,KAAK;EAC/B,QAAQ,eAAe;EACvB,OAAO,IAAI,GAAG;CAChB;AACF","names":[],"ignoreList":[],"sources":["../../src/routed-element.ts"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
2
|
import { property, state } from "lit/decorators.js";
|
|
3
3
|
import { ResolveContext, Transition, applyPairs, trace, isFunction, isString, unnestR, filter } from "@uirouter/core";
|
|
4
|
-
import { LitViewConfig } from "./core.js";
|
|
4
|
+
import { LitViewConfig, isRoutedLitElement } from "./core.js";
|
|
5
|
+
import { routedLitElementRenderer } from "./routed-element.js";
|
|
5
6
|
import { warnMissingRouter } from "./dev-warn.js";
|
|
6
7
|
import { UIRouterLitElement } from "./ui-router.js";
|
|
7
8
|
import _decorate from "@oxc-project/runtime/helpers/decorate";
|
|
@@ -44,7 +45,8 @@ export class UiView extends LitElement {
|
|
|
44
45
|
context: config.viewDecl.$context
|
|
45
46
|
};
|
|
46
47
|
this.resolveContext = new ResolveContext(config.path);
|
|
47
|
-
|
|
48
|
+
const { component } = config.viewDecl;
|
|
49
|
+
this.component = isRoutedLitElement(component) ? routedLitElementRenderer(component) : component;
|
|
48
50
|
this.requestUpdate();
|
|
49
51
|
}
|
|
50
52
|
connectedCallback() {
|
|
@@ -159,13 +161,12 @@ export class UiView extends LitElement {
|
|
|
159
161
|
if (!this.component || !this.viewAddress) return this.inner.cloneNode(true);
|
|
160
162
|
const { uiRouter: router } = this;
|
|
161
163
|
const injector = this.resolveContext.injector();
|
|
162
|
-
const
|
|
163
|
-
const transition = injector.get(Transition);
|
|
164
|
-
return this.component({
|
|
164
|
+
const props = {
|
|
165
165
|
router,
|
|
166
|
-
resolves,
|
|
167
|
-
transition
|
|
168
|
-
}
|
|
166
|
+
resolves: this.resolveContext.getTokens().filter((token) => isString(token)).map((token) => this.resolveContext.getResolvable(token)).filter((r) => r.resolved).map(({ token }) => [token, injector.get(token)]).reduce(applyPairs, {}),
|
|
167
|
+
transition: injector.get(Transition)
|
|
168
|
+
};
|
|
169
|
+
return this.component(props);
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
172
|
_decorate([property()], UiView.prototype, "name", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-view.js","mappings":"AAAA,SAAS,kBAAkB;AAE3B,SAAS,UAAU,aAAa;AAChC,SAEE,gBACA,YAEA,YAGA,OAEA,YACA,UACA,SAEA,cAGK;
|
|
1
|
+
{"version":3,"file":"ui-view.js","mappings":"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","names":[],"ignoreList":[],"sources":["../../src/ui-view.ts"]}
|
package/dist/interface.d.ts
CHANGED
|
@@ -364,6 +364,11 @@ export interface LitStateDeclaration<T extends DefaultResolvesType = DefaultReso
|
|
|
364
364
|
* @category types
|
|
365
365
|
*/
|
|
366
366
|
export interface NormalizedLitViewDeclaration<T extends DefaultResolvesType = DefaultResolvesType> extends _ViewDeclaration {
|
|
367
|
-
|
|
367
|
+
/**
|
|
368
|
+
* A template function, or a {@link RoutedLitElement} class that the rendering
|
|
369
|
+
* `<ui-view>` instantiates and owns. `sticky` classes are normalized to a
|
|
370
|
+
* template function so their single instance outlives any one `<ui-view>`.
|
|
371
|
+
*/
|
|
372
|
+
component: RoutedLitComponent<T>;
|
|
368
373
|
}
|
|
369
374
|
//# sourceMappingURL=interface.d.ts.map
|
package/dist/interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","mappings":"AAAA,SACE,YACA,YACA,kBACA,kBACA,UACA,iBACK;AACP,SAAS,gBAAgB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;AA0B3C,iBAAiB,kBAAkB;;;;;;;;;;;;;;;;;;;CAmBjC,kBAAkB,WAAW,WAAW,QAAQ;AAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,iBAAiB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;CAyBxB,UAAU,gBAAgB,aAAa;AACzC;;;;;;AAQA,YAAY,sBAAsB;;;;;;;;;;;;AAalC,YAAY,eACV,UAAU,sBAAsB,uBAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCJ,iBAAiB,oBACf,UAAU,sBAAsB,qBAChC;;CAEA,aAAa;;CAEb,UAAU,eAAe;;CAEzB,QAAQ;AACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,YAAY,kBACV,UAAU,sBAAsB,wBAC7B,OAAO,oBAAoB,OAAO;;;;;;;AAQvC,YAAY,2BACV,UAAU,sBAAsB,uBAC9B,kBAAkB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiD3B,iBAAiB,iBACf,UAAU,sBAAsB,qBAChC;;;;;MAKK,OAAO,oBAAoB,KAAK,aAAa;EAChD,eAAe,oBAAoB;CACrC;;CAGA;AACF;;;;;;;;;;AAWA,YAAY,mBACV,UAAU,sBAAsB,uBAC9B,kBAAkB,KAAK,iBAAiB;;;;AAK5C,iBAAiB,0BACf,UAAU,sBAAsB,6BAExB,iBAAiB,IAAI,iBAAiB,CAAC;;;;AAKjD,iBAAiB,yBACf,UAAU,sBAAsB,6BACxB,iBAAiB;CACzB,WAAW,mBAAmB;AAChC;;;;;;;;;AAUA,YAAY,mBACV,UAAU,sBAAsB,uBAE9B,yBAAyB,KACzB,0BAA0B,KAC1B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsD/B,iBAAiB,oBACf,UAAU,sBAAsB,6BACxB,iBAAiB;;CAEzB,YAAY,mBAAmB;;;;;;;;;;CAW/B,QAAQ;iBAAiB,mBAAmB;CAAG;AACjD;;;;;;AAOA,iBAAiB,6BACf,UAAU,sBAAsB,6BACxB,iBAAiB
|
|
1
|
+
{"version":3,"file":"interface.d.ts","mappings":"AAAA,SACE,YACA,YACA,kBACA,kBACA,UACA,iBACK;AACP,SAAS,gBAAgB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;AA0B3C,iBAAiB,kBAAkB;;;;;;;;;;;;;;;;;;;CAmBjC,kBAAkB,WAAW,WAAW,QAAQ;AAClD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,iBAAiB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;CAyBxB,UAAU,gBAAgB,aAAa;AACzC;;;;;;AAQA,YAAY,sBAAsB;;;;;;;;;;;;AAalC,YAAY,eACV,UAAU,sBAAsB,uBAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCJ,iBAAiB,oBACf,UAAU,sBAAsB,qBAChC;;CAEA,aAAa;;CAEb,UAAU,eAAe;;CAEzB,QAAQ;AACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,YAAY,kBACV,UAAU,sBAAsB,wBAC7B,OAAO,oBAAoB,OAAO;;;;;;;AAQvC,YAAY,2BACV,UAAU,sBAAsB,uBAC9B,kBAAkB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiD3B,iBAAiB,iBACf,UAAU,sBAAsB,qBAChC;;;;;MAKK,OAAO,oBAAoB,KAAK,aAAa;EAChD,eAAe,oBAAoB;CACrC;;CAGA;AACF;;;;;;;;;;AAWA,YAAY,mBACV,UAAU,sBAAsB,uBAC9B,kBAAkB,KAAK,iBAAiB;;;;AAK5C,iBAAiB,0BACf,UAAU,sBAAsB,6BAExB,iBAAiB,IAAI,iBAAiB,CAAC;;;;AAKjD,iBAAiB,yBACf,UAAU,sBAAsB,6BACxB,iBAAiB;CACzB,WAAW,mBAAmB;AAChC;;;;;;;;;AAUA,YAAY,mBACV,UAAU,sBAAsB,uBAE9B,yBAAyB,KACzB,0BAA0B,KAC1B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsD/B,iBAAiB,oBACf,UAAU,sBAAsB,6BACxB,iBAAiB;;CAEzB,YAAY,mBAAmB;;;;;;;;;;CAW/B,QAAQ;iBAAiB,mBAAmB;CAAG;AACjD;;;;;;AAOA,iBAAiB,6BACf,UAAU,sBAAsB,6BACxB,iBAAiB;;;;;;CAMzB,WAAW,mBAAmB;AAChC","names":[],"ignoreList":[],"sources":["../src/interface.ts"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DefaultResolvesType, RoutedLitElement, RoutedLitTemplate } from "./interface.js";
|
|
2
|
+
/**
|
|
3
|
+
* Binds a routed class to a single instance for as long as the returned renderer
|
|
4
|
+
* lives, so whoever holds the renderer decides how long the element survives.
|
|
5
|
+
*
|
|
6
|
+
* Not re-exported by `pure.ts`: this is plumbing shared by `core` and `ui-view`.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare function routedLitElementRenderer<T extends DefaultResolvesType = DefaultResolvesType>(Component: RoutedLitElement<T>): RoutedLitTemplate<T>;
|
|
11
|
+
//# sourceMappingURL=routed-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routed-element.d.ts","mappings":"AAEA,cACE,qBACA,kBACA,yBAEK;;;;;;;;;AAUP,OAAO,iBAAS,yBACd,UAAU,sBAAsB,qBAChC,WAAW,iBAAiB,KAAK,kBAAkB","names":[],"ignoreList":[],"sources":["../src/routed-element.ts"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
export function routedLitElementRenderer(Component) {
|
|
3
|
+
let element;
|
|
4
|
+
return (props) => {
|
|
5
|
+
element ??= new Component(props);
|
|
6
|
+
element._uiViewProps = props;
|
|
7
|
+
return html`${element}`;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=routed-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routed-element.js","mappings":"AAAA,SAAS,YAAY;AAiBrB,OAAO,SAAS,yBAEd,WAAsD;CACtD,IAAI;CACJ,QAAQ,UAAkC;EACxC,YAAY,IAAI,UAAU,KAAK;EAC/B,QAAQ,eAAe;EACvB,OAAO,IAAI,GAAG;CAChB;AACF","names":[],"ignoreList":[],"sources":["../src/routed-element.ts"]}
|
package/dist/ui-view.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export declare class UiView extends LitElement {
|
|
|
37
37
|
*/
|
|
38
38
|
uiRouter: UIRouterLit;
|
|
39
39
|
private viewAddress;
|
|
40
|
+
/** Replaced only by a real view config change, so a retained view keeps its subtree. */
|
|
40
41
|
private component;
|
|
41
42
|
private readonly inner;
|
|
42
43
|
/** @internal */
|
package/dist/ui-view.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-view.d.ts","mappings":"AAAA,SAAS,kBAAkB;AAC3B,cAAc,gBAAgB,sBAAsB;AAEpD,SAME,kBASA,aACA,mBACK;
|
|
1
|
+
{"version":3,"file":"ui-view.d.ts","mappings":"AAAA,SAAS,kBAAkB;AAC3B,cAAc,gBAAgB,sBAAsB;AAEpD,SAME,kBASA,aACA,mBACK;AASP,SAAwB,mBAAuC;;AAS/D,iBAAiB,cAAc;CAC7B,SAAS,cAAc;CACvB;AACF;;;;;;;;;;;;;;;;;;;;;;;AAgCA,OAAO,cAAM,eAAe,WAAW;CACrC,AACA;;;;;CAMA,AACA,UAAW;CAEX,QACQ;;CAGR,QACQ;CAER,iBAAiB;;CAGjB;CAIA,iBAAiB;CAEjB,QAAQ;CAER,QAAQ;CAER,QAAQ;CAoBR,QAAQ;CAoBR,QACQ;CAER,iBAAiB;;CAWjB;CAUA,wBAAwB;CAExB,eAAe;;CAWf,OAAO,eAAe,WAAW,UAAU;CAM3C,QAAQ;CAIR,iBAAiB;CAIjB,QAAQ;CAQR,QAAQ;CAIR,iBAAiB;CAEjB,QAAQ;;CA2CR;;;;;;;;;CAqBA,QAAQ;;CAeR,cAAc,GAAG,MAAM,WAAW,WAAW;;;;CAW7C,QAAQ;;CA2DR,IAAW,eAAe;;CAK1B,IAAW,SAAS;;;;;;;;;;;CAcpB,UAAU,aAAa,SAAS;;CAQhC,UAAU,OAAO;AAsBnB;AAEA,iBAAiB,OAAO;;CAEtB,oBAAoB;AACtB","names":[],"ignoreList":[],"sources":["../src/ui-view.ts"]}
|
package/dist/ui-view.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
2
|
import { property, state } from "lit/decorators.js";
|
|
3
3
|
import { ResolveContext, Transition, applyPairs, trace, isFunction, isString, unnestR, filter } from "@uirouter/core";
|
|
4
|
-
import { LitViewConfig } from "./core.js";
|
|
4
|
+
import { LitViewConfig, isRoutedLitElement } from "./core.js";
|
|
5
|
+
import { routedLitElementRenderer } from "./routed-element.js";
|
|
5
6
|
import { warnMissingRouter } from "./dev-warn.js";
|
|
6
7
|
import { UIRouterLitElement } from "./ui-router.js";
|
|
7
8
|
import _decorate from "@oxc-project/runtime/helpers/decorate";
|
|
@@ -44,7 +45,8 @@ export class UiView extends LitElement {
|
|
|
44
45
|
context: config.viewDecl.$context
|
|
45
46
|
};
|
|
46
47
|
this.resolveContext = new ResolveContext(config.path);
|
|
47
|
-
|
|
48
|
+
const { component } = config.viewDecl;
|
|
49
|
+
this.component = isRoutedLitElement(component) ? routedLitElementRenderer(component) : component;
|
|
48
50
|
this.requestUpdate();
|
|
49
51
|
}
|
|
50
52
|
connectedCallback() {
|
|
@@ -159,13 +161,12 @@ export class UiView extends LitElement {
|
|
|
159
161
|
if (!this.component || !this.viewAddress) return this.inner.cloneNode(true);
|
|
160
162
|
const { uiRouter: router } = this;
|
|
161
163
|
const injector = this.resolveContext.injector();
|
|
162
|
-
const
|
|
163
|
-
const transition = injector.get(Transition);
|
|
164
|
-
return this.component({
|
|
164
|
+
const props = {
|
|
165
165
|
router,
|
|
166
|
-
resolves,
|
|
167
|
-
transition
|
|
168
|
-
}
|
|
166
|
+
resolves: this.resolveContext.getTokens().filter((token) => isString(token)).map((token) => this.resolveContext.getResolvable(token)).filter((r) => r.resolved).map(({ token }) => [token, injector.get(token)]).reduce(applyPairs, {}),
|
|
167
|
+
transition: injector.get(Transition)
|
|
168
|
+
};
|
|
169
|
+
return this.component(props);
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
172
|
_decorate([property()], UiView.prototype, "name", void 0);
|
package/dist/ui-view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-view.js","mappings":"AAAA,SAAS,kBAAkB;AAE3B,SAAS,UAAU,aAAa;AAChC,SAEE,gBACA,YAEA,YAGA,OAEA,YACA,UACA,SAEA,cAGK;
|
|
1
|
+
{"version":3,"file":"ui-view.js","mappings":"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","names":[],"ignoreList":[],"sources":["../src/ui-view.ts"]}
|
package/package.json
CHANGED
package/src/core.ts
CHANGED
|
@@ -11,17 +11,17 @@ import {
|
|
|
11
11
|
ViewService,
|
|
12
12
|
_ViewDeclaration,
|
|
13
13
|
} from '@uirouter/core';
|
|
14
|
-
import {
|
|
14
|
+
import { LitElement } from 'lit';
|
|
15
15
|
|
|
16
16
|
import {
|
|
17
17
|
RoutedLitElement,
|
|
18
18
|
LitViewDeclaration,
|
|
19
19
|
LitViewDeclarationTemplate,
|
|
20
20
|
NormalizedLitViewDeclaration,
|
|
21
|
-
UIViewInjectedProps,
|
|
22
21
|
LitViewDeclarationElement,
|
|
23
22
|
DefaultResolvesType,
|
|
24
23
|
} from './interface.js';
|
|
24
|
+
import { routedLitElementRenderer } from './routed-element.js';
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* `@uirouter/core` types `forEach` as `any` because it resolves to
|
|
@@ -133,9 +133,9 @@ export function litViewsBuilder<
|
|
|
133
133
|
let normalizedConfig: NormalizedLitViewDeclaration<T>;
|
|
134
134
|
name = name || '$default'; // Account for views: { "": { template... } }
|
|
135
135
|
if (isLitViewDeclarationTemplate<T>(config)) {
|
|
136
|
-
normalizedConfig = { component: config
|
|
136
|
+
normalizedConfig = { component: config };
|
|
137
137
|
} else {
|
|
138
|
-
normalizedConfig = config
|
|
138
|
+
normalizedConfig = config;
|
|
139
139
|
}
|
|
140
140
|
if (Object.keys(normalizedConfig || {}).length === 0) return;
|
|
141
141
|
|
|
@@ -151,14 +151,16 @@ export function litViewsBuilder<
|
|
|
151
151
|
normalizedConfig.$uiViewContextAnchor =
|
|
152
152
|
normalizedTarget.uiViewContextAnchor;
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
154
|
+
// The declaration outlives every `<ui-view>` that renders it, so a renderer
|
|
155
|
+
// held here makes a `sticky` class survive exits. Other classes are left for
|
|
156
|
+
// `<ui-view>` to bind, which resets them when the view config changes.
|
|
157
|
+
if (
|
|
158
|
+
isRoutedLitElement<T>(normalizedConfig.component) &&
|
|
159
|
+
normalizedConfig.component.sticky
|
|
160
|
+
) {
|
|
161
|
+
normalizedConfig.component = routedLitElementRenderer<T>(
|
|
162
|
+
normalizedConfig.component,
|
|
163
|
+
);
|
|
162
164
|
}
|
|
163
165
|
|
|
164
166
|
views[name] = viewsObject[name] = normalizedConfig;
|
package/src/interface.ts
CHANGED
|
@@ -412,5 +412,10 @@ export interface LitStateDeclaration<
|
|
|
412
412
|
export interface NormalizedLitViewDeclaration<
|
|
413
413
|
T extends DefaultResolvesType = DefaultResolvesType,
|
|
414
414
|
> extends _ViewDeclaration {
|
|
415
|
-
|
|
415
|
+
/**
|
|
416
|
+
* A template function, or a {@link RoutedLitElement} class that the rendering
|
|
417
|
+
* `<ui-view>` instantiates and owns. `sticky` classes are normalized to a
|
|
418
|
+
* template function so their single instance outlives any one `<ui-view>`.
|
|
419
|
+
*/
|
|
420
|
+
component: RoutedLitComponent<T>;
|
|
416
421
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
DefaultResolvesType,
|
|
5
|
+
RoutedLitElement,
|
|
6
|
+
RoutedLitTemplate,
|
|
7
|
+
UIViewInjectedProps,
|
|
8
|
+
} from './interface.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Binds a routed class to a single instance for as long as the returned renderer
|
|
12
|
+
* lives, so whoever holds the renderer decides how long the element survives.
|
|
13
|
+
*
|
|
14
|
+
* Not re-exported by `pure.ts`: this is plumbing shared by `core` and `ui-view`.
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export function routedLitElementRenderer<
|
|
19
|
+
T extends DefaultResolvesType = DefaultResolvesType,
|
|
20
|
+
>(Component: RoutedLitElement<T>): RoutedLitTemplate<T> {
|
|
21
|
+
let element: InstanceType<RoutedLitElement<T>>;
|
|
22
|
+
return (props: UIViewInjectedProps<T>) => {
|
|
23
|
+
element ??= new Component(props);
|
|
24
|
+
element._uiViewProps = props;
|
|
25
|
+
return html`${element}`;
|
|
26
|
+
};
|
|
27
|
+
}
|
package/src/ui-view.ts
CHANGED
|
@@ -22,11 +22,13 @@ import {
|
|
|
22
22
|
|
|
23
23
|
import {
|
|
24
24
|
RoutedLitTemplate,
|
|
25
|
+
UIViewInjectedProps,
|
|
25
26
|
UiOnExit,
|
|
26
27
|
UiOnParamsChanged,
|
|
27
28
|
NormalizedLitViewDeclaration,
|
|
28
29
|
} from './interface.js';
|
|
29
|
-
import { LitViewConfig, UIRouterLit } from './core.js';
|
|
30
|
+
import { LitViewConfig, UIRouterLit, isRoutedLitElement } from './core.js';
|
|
31
|
+
import { routedLitElementRenderer } from './routed-element.js';
|
|
30
32
|
import { warnMissingRouter } from './dev-warn.js';
|
|
31
33
|
import { UIRouterLitElement, UiRouterContextEvent } from './ui-router.js';
|
|
32
34
|
|
|
@@ -83,6 +85,7 @@ export class UiView extends LitElement {
|
|
|
83
85
|
@state()
|
|
84
86
|
private viewAddress!: UiViewAddress;
|
|
85
87
|
|
|
88
|
+
/** Replaced only by a real view config change, so a retained view keeps its subtree. */
|
|
86
89
|
@state()
|
|
87
90
|
private component: RoutedLitTemplate | null = null;
|
|
88
91
|
|
|
@@ -130,9 +133,12 @@ export class UiView extends LitElement {
|
|
|
130
133
|
}
|
|
131
134
|
|
|
132
135
|
this.resolveContext = new ResolveContext(config.path);
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
+
// Past the identity gate, so the config genuinely changed: a fresh renderer
|
|
137
|
+
// here is what drops the old element.
|
|
138
|
+
const { component } = config.viewDecl as NormalizedLitViewDeclaration;
|
|
139
|
+
this.component = isRoutedLitElement(component)
|
|
140
|
+
? routedLitElementRenderer(component)
|
|
141
|
+
: component;
|
|
136
142
|
this.requestUpdate();
|
|
137
143
|
}
|
|
138
144
|
|
|
@@ -292,6 +298,7 @@ export class UiView extends LitElement {
|
|
|
292
298
|
* For each transition, checks if any param values changed and notify component
|
|
293
299
|
*/
|
|
294
300
|
private _invokeUiOnParamsChangedHook($transition$: Transition) {
|
|
301
|
+
// Fresh resolves need a re-render; `render` reuses the element rather than rebuilding it.
|
|
295
302
|
this.requestUpdate();
|
|
296
303
|
|
|
297
304
|
const instance = this.firstElementChild as UiOnParamsChanged & Element;
|
|
@@ -394,11 +401,9 @@ export class UiView extends LitElement {
|
|
|
394
401
|
.reduce(applyPairs, {});
|
|
395
402
|
const transition = injector.get(Transition) as Transition;
|
|
396
403
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
transition,
|
|
401
|
-
});
|
|
404
|
+
const props: UIViewInjectedProps = { router, resolves, transition };
|
|
405
|
+
|
|
406
|
+
return this.component(props);
|
|
402
407
|
}
|
|
403
408
|
}
|
|
404
409
|
|