lit-ui-router 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,88 @@
1
+ import { TargetState, Transition, TransitionOptions } from '@uirouter/core';
2
+ import { ElementPart } from 'lit';
3
+ import { PartInfo } from 'lit/directive.js';
4
+ import { AsyncDirective } from 'lit/async-directive.js';
5
+ import { UIRouterLit } from './core.js';
6
+ import { UiSrefElement, UiSrefTargetEvent } from './ui-sref.js';
7
+ import { UiView } from './ui-view.js';
8
+ /** @internal */
9
+ interface TransEvt {
10
+ evt: string;
11
+ trans: Transition;
12
+ status?: SrefStatus;
13
+ }
14
+ export declare const TRANSITION_STATE_CHANGE_EVENT = "transitionStateChange";
15
+ export declare enum TransitionStateChange {
16
+ start = "start",
17
+ success = "success",
18
+ error = "error"
19
+ }
20
+ /**
21
+ * UISref status emitted from [[UISrefStatus]]
22
+ */
23
+ export interface SrefStatus {
24
+ /** The sref's target state (or one of its children) is currently active */
25
+ active: boolean;
26
+ /** The sref's target state is currently active */
27
+ exact: boolean;
28
+ /** A transition is entering the sref's target state */
29
+ entering: boolean;
30
+ /** A transition is exiting the sref's target state */
31
+ exiting: boolean;
32
+ /** The enclosed sref(s) target state(s) */
33
+ targetStates: TargetState[];
34
+ }
35
+ export interface UiSrefActiveParams {
36
+ activeClasses: string[];
37
+ exactClasses: string[];
38
+ state: string;
39
+ params: any;
40
+ options: TransitionOptions;
41
+ targetStates: TargetState[];
42
+ }
43
+ type deregisterFn = () => void;
44
+ export declare class UiSrefActiveDirective extends AsyncDirective {
45
+ element: Element | null;
46
+ uiRouter: UIRouterLit | undefined;
47
+ seekRouter(): void;
48
+ parentView: UiView | null;
49
+ seekParentView(): void;
50
+ activeClasses: string[];
51
+ exactClasses: string[];
52
+ state: string | undefined;
53
+ params: any;
54
+ options: TransitionOptions;
55
+ active: boolean | undefined;
56
+ exact: boolean | undefined;
57
+ entering: boolean | undefined;
58
+ exiting: boolean | undefined;
59
+ targetStates: Set<TargetState>;
60
+ uiSrefs: WeakMap<TargetState, UiSrefElement>;
61
+ _deregisterOnStart: deregisterFn | undefined;
62
+ _deregisterOnStatesChanged: deregisterFn | undefined;
63
+ constructor(partInfo: PartInfo);
64
+ render({ activeClasses, exactClasses }: Partial<UiSrefActiveParams>): symbol;
65
+ getOptions(): TransitionOptions;
66
+ /**
67
+ * Given a TransEvt (Transition event: started, success, error)
68
+ * and a UISref Target State, return a SrefStatus object
69
+ * which represents the current status of that Sref:
70
+ * active, activeEq (exact match), entering, exiting
71
+ *
72
+ * @internal
73
+ */
74
+ getSrefStatus(event: TransEvt | undefined, srefTarget: TargetState): SrefStatus;
75
+ update(part: ElementPart, [{ activeClasses, exactClasses, state, params, options, targetStates, },]: [UiSrefActiveParams]): Promise<void>;
76
+ doRender: () => symbol;
77
+ _firstUpdated: boolean;
78
+ firstUpdated({ targetStates }: Partial<UiSrefActiveParams>): Promise<void>;
79
+ disconnected(): void;
80
+ createTransitionStateChangeEvent(evt: TransitionStateChange, trans: Transition): CustomEvent<TransEvt>;
81
+ onUiSrefTargetEvent: (event: UiSrefTargetEvent) => void;
82
+ onTransitionStateChange: (e: Event) => Promise<void>;
83
+ getStatus(transEvt?: TransEvt): SrefStatus | undefined;
84
+ onTransitionStart: (trans: Transition) => void;
85
+ onStatesChanged: () => void;
86
+ }
87
+ export declare const uiSrefActive: (values_0: Partial<UiSrefActiveParams>) => import("lit/directive.js").DirectiveResult<typeof UiSrefActiveDirective>;
88
+ export {};
@@ -0,0 +1,273 @@
1
+ import { anyTrueR, extend, Param, PathUtils, tail, unnestR, } from '@uirouter/core';
2
+ import { noChange } from 'lit';
3
+ import { directive, PartType } from 'lit/directive.js';
4
+ import { AsyncDirective } from 'lit/async-directive.js';
5
+ import { UIRouterLitElement } from './ui-router.js';
6
+ import { UI_SREF_TARGET_EVENT, } from './ui-sref.js';
7
+ import { UiView } from './ui-view.js';
8
+ export const TRANSITION_STATE_CHANGE_EVENT = 'transitionStateChange';
9
+ export var TransitionStateChange;
10
+ (function (TransitionStateChange) {
11
+ TransitionStateChange["start"] = "start";
12
+ TransitionStateChange["success"] = "success";
13
+ TransitionStateChange["error"] = "error";
14
+ })(TransitionStateChange || (TransitionStateChange = {}));
15
+ /**
16
+ * Returns a Predicate<PathNode[]>
17
+ *
18
+ * The predicate returns true when the target state (and param values)
19
+ * match the (tail of) the path, and the path's param values
20
+ *
21
+ * @internal
22
+ */
23
+ const pathMatches = (target) => {
24
+ if (!target.exists())
25
+ return () => false;
26
+ const state = target.$state();
27
+ const targetParamVals = target.params();
28
+ const targetPath = PathUtils.buildPath(target);
29
+ const paramSchema = targetPath
30
+ .map((node) => node.paramSchema)
31
+ .reduce(unnestR, [])
32
+ .filter((param) => Object.prototype.hasOwnProperty.call(targetParamVals, param.id));
33
+ return (path = []) => {
34
+ const tailNode = tail(path);
35
+ if (!tailNode || tailNode.state !== state)
36
+ return false;
37
+ const paramValues = PathUtils.paramValues(path);
38
+ return Param.equals(paramSchema, paramValues, targetParamVals);
39
+ };
40
+ };
41
+ /**
42
+ * Given basePath: [a, b], appendPath: [c, d]),
43
+ * Expands the path to [c], [c, d]
44
+ * Then appends each to [a,b,] and returns: [a, b, c], [a, b, c, d]
45
+ *
46
+ * @internal
47
+ */
48
+ function spreadToSubPaths(basePath, appendPath) {
49
+ return appendPath.map((node) => basePath.concat(PathUtils.subPath(appendPath, (n) => n.state === node.state)));
50
+ }
51
+ /** @internal */
52
+ function mergeSrefStatus(left, right) {
53
+ return {
54
+ active: left.active || right.active,
55
+ exact: left.exact || right.exact,
56
+ entering: left.entering || right.entering,
57
+ exiting: left.exiting || right.exiting,
58
+ targetStates: [...left.targetStates, ...right.targetStates],
59
+ };
60
+ }
61
+ let _first = null;
62
+ export class UiSrefActiveDirective extends AsyncDirective {
63
+ seekRouter() {
64
+ this.uiRouter = UIRouterLitElement.seekRouter(this.element);
65
+ }
66
+ seekParentView() {
67
+ this.parentView = UiView.seekParentView(this.element);
68
+ }
69
+ constructor(partInfo) {
70
+ super(partInfo);
71
+ this.element = null;
72
+ this.parentView = null;
73
+ this.activeClasses = [];
74
+ this.exactClasses = [];
75
+ this.params = {};
76
+ this.options = {};
77
+ this.targetStates = new Set();
78
+ this.uiSrefs = new WeakMap();
79
+ this.doRender = () => {
80
+ return this.render({
81
+ activeClasses: this.activeClasses,
82
+ exactClasses: this.exactClasses,
83
+ });
84
+ };
85
+ this._firstUpdated = false;
86
+ this.onUiSrefTargetEvent = (event) => {
87
+ const { targetState } = event.detail;
88
+ this.targetStates.add(targetState);
89
+ this.uiSrefs.set(targetState, event.target);
90
+ };
91
+ this.onTransitionStateChange = async (e) => {
92
+ const event = e;
93
+ const status = this.getStatus(event.detail);
94
+ if (!status) {
95
+ return;
96
+ }
97
+ const { active, exact, entering, exiting } = status;
98
+ this.active = active;
99
+ this.exact = exact;
100
+ this.entering = entering;
101
+ this.exiting = exiting;
102
+ this.doRender();
103
+ };
104
+ this.onTransitionStart = (trans) => {
105
+ this.element.dispatchEvent(this.createTransitionStateChangeEvent(TransitionStateChange.start, trans));
106
+ trans.promise.then(() => {
107
+ this.element.dispatchEvent(this.createTransitionStateChangeEvent(TransitionStateChange.success, trans));
108
+ }, () => {
109
+ this.element.dispatchEvent(this.createTransitionStateChangeEvent(TransitionStateChange.error, trans));
110
+ });
111
+ };
112
+ this.onStatesChanged = () => {
113
+ const { active, exact } = this.getStatus() || {};
114
+ this.active = active;
115
+ this.exact = exact;
116
+ this.doRender();
117
+ };
118
+ if (partInfo.type !== PartType.ELEMENT) {
119
+ throw new Error('The `uiSrefActive` directive must be used as an element');
120
+ }
121
+ _first = _first || this;
122
+ }
123
+ render({ activeClasses, exactClasses }) {
124
+ if (!this._firstUpdated) {
125
+ return noChange;
126
+ }
127
+ activeClasses?.forEach((className) => {
128
+ if (this.active) {
129
+ this.element.classList.add(className);
130
+ }
131
+ else {
132
+ this.element.classList.remove(className);
133
+ }
134
+ });
135
+ exactClasses?.forEach((className) => {
136
+ if (this.exact) {
137
+ this.element.classList.add(className);
138
+ }
139
+ else {
140
+ this.element.classList.remove(className);
141
+ }
142
+ });
143
+ return noChange;
144
+ }
145
+ getOptions() {
146
+ const defaultOpts = {
147
+ relative: this.parentView?.viewContext?.name,
148
+ };
149
+ return extend(defaultOpts, this.options || {});
150
+ }
151
+ /**
152
+ * Given a TransEvt (Transition event: started, success, error)
153
+ * and a UISref Target State, return a SrefStatus object
154
+ * which represents the current status of that Sref:
155
+ * active, activeEq (exact match), entering, exiting
156
+ *
157
+ * @internal
158
+ */
159
+ getSrefStatus(event, srefTarget) {
160
+ const pathMatchesTarget = pathMatches(srefTarget);
161
+ const tc = event?.trans.treeChanges();
162
+ const isStartEvent = event?.evt === 'start';
163
+ const isSuccessEvent = event?.evt === 'success';
164
+ const activePath = isSuccessEvent
165
+ ? tc?.to
166
+ : tc?.from;
167
+ const isActive = () => activePath
168
+ ? spreadToSubPaths([], activePath)
169
+ .map(pathMatchesTarget)
170
+ .reduce(anyTrueR, false)
171
+ : this.uiRouter.stateService.includes(srefTarget.name(), srefTarget.params());
172
+ const isExact = () => activePath
173
+ ? pathMatchesTarget(activePath)
174
+ : this.uiRouter.stateService.is(srefTarget.name(), srefTarget.params());
175
+ const isEntering = () => spreadToSubPaths(tc.retained, tc.entering)
176
+ .map(pathMatchesTarget)
177
+ .reduce(anyTrueR, false);
178
+ const isExiting = () => spreadToSubPaths(tc.retained, tc.exiting)
179
+ .map(pathMatchesTarget)
180
+ .reduce(anyTrueR, false);
181
+ const result = {
182
+ active: isActive(),
183
+ exact: isExact(),
184
+ entering: isStartEvent ? isEntering() : false,
185
+ exiting: isStartEvent ? isExiting() : false,
186
+ targetStates: [srefTarget],
187
+ };
188
+ return result;
189
+ }
190
+ async update(part, [{ activeClasses, exactClasses, state, params = {}, options = {}, targetStates, },]) {
191
+ this.activeClasses = activeClasses;
192
+ this.exactClasses = exactClasses;
193
+ this.state = state;
194
+ this.params = params;
195
+ this.options = options;
196
+ const { element } = part;
197
+ if (this.element !== element) {
198
+ this.element = element;
199
+ this._firstUpdated = false;
200
+ await 0;
201
+ this.firstUpdated({ targetStates });
202
+ }
203
+ if (this.uiRouter && this._firstUpdated) {
204
+ this.doRender();
205
+ }
206
+ }
207
+ async firstUpdated({ targetStates }) {
208
+ if (this._firstUpdated || !this.isConnected) {
209
+ return;
210
+ }
211
+ this.seekRouter();
212
+ this.seekParentView();
213
+ this.targetStates.clear();
214
+ if (targetStates) {
215
+ Array.prototype.forEach.call(targetStates, (targetState) => {
216
+ this.targetStates.add(targetState);
217
+ });
218
+ }
219
+ else if (this.state) {
220
+ this.targetStates.add(this.uiRouter.stateService.target(this.state, this.params, this.getOptions()));
221
+ }
222
+ else {
223
+ this.element.addEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
224
+ }
225
+ this.element.addEventListener(TRANSITION_STATE_CHANGE_EVENT, this.onTransitionStateChange);
226
+ this._deregisterOnStart = this.uiRouter.transitionService.onStart({}, this.onTransitionStart);
227
+ this._deregisterOnStatesChanged =
228
+ this.uiRouter.stateRegistry.onStatesChanged(this.onStatesChanged);
229
+ setTimeout(() => {
230
+ if (this.targetStates.size) {
231
+ const { active, exact } = this.getStatus() || {};
232
+ this.active = active;
233
+ this.exact = exact;
234
+ this.doRender();
235
+ }
236
+ }, 0);
237
+ this._firstUpdated = true;
238
+ }
239
+ disconnected() {
240
+ if (!this.element) {
241
+ return;
242
+ }
243
+ this.element.removeEventListener(UI_SREF_TARGET_EVENT, this.onUiSrefTargetEvent);
244
+ this.element.removeEventListener(TRANSITION_STATE_CHANGE_EVENT, this.onTransitionStateChange);
245
+ this.element = null;
246
+ this._deregisterOnStart?.();
247
+ this._deregisterOnStatesChanged?.();
248
+ }
249
+ createTransitionStateChangeEvent(evt, trans) {
250
+ const detail = {
251
+ evt,
252
+ trans,
253
+ status: undefined,
254
+ };
255
+ detail.status = this.getStatus(detail);
256
+ return new CustomEvent(TRANSITION_STATE_CHANGE_EVENT, {
257
+ detail,
258
+ });
259
+ }
260
+ getStatus(transEvt) {
261
+ const { targetStates } = this;
262
+ if (!targetStates.size) {
263
+ return;
264
+ }
265
+ const statuses = [];
266
+ for (const target of targetStates) {
267
+ statuses.push(this.getSrefStatus(transEvt, target));
268
+ }
269
+ return statuses.reduce(mergeSrefStatus);
270
+ }
271
+ }
272
+ export const uiSrefActive = directive(UiSrefActiveDirective);
273
+ //# sourceMappingURL=ui-sref-active.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-sref-active.js","sourceRoot":"","sources":["../src/ui-sref-active.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { RawParams, TransitionOptions, TargetState } from '@uirouter/core';
2
+ import { ElementPart } from 'lit';
3
+ import { PartInfo } from 'lit/directive.js';
4
+ import { AsyncDirective } from 'lit/async-directive.js';
5
+ import { UIRouterLit } from './core.js';
6
+ import { UiView } from './ui-view.js';
7
+ export declare const UI_SREF_TARGET_EVENT = "uiSrefTarget";
8
+ export interface UiSrefElement extends Element {
9
+ href: string;
10
+ targetState: TargetState;
11
+ }
12
+ export interface UiSrefTargetEvent extends CustomEvent<{
13
+ targetState: TargetState;
14
+ }> {
15
+ target: UiSrefElement;
16
+ }
17
+ export declare function uiSrefTargetEvent(targetState: TargetState): UiSrefTargetEvent;
18
+ export declare class UiSrefDirective extends AsyncDirective {
19
+ state: string | null;
20
+ params: RawParams;
21
+ options: TransitionOptions;
22
+ element: UiSrefElement | null;
23
+ uiRouter: UIRouterLit | undefined;
24
+ parentView: UiView | null;
25
+ href: string | null;
26
+ targetState: TargetState | null;
27
+ unsubscribe: (() => void) | undefined;
28
+ constructor(partInfo: PartInfo);
29
+ getOptions(opts?: TransitionOptions): TransitionOptions;
30
+ render(state: string, params?: RawParams, options?: TransitionOptions): symbol;
31
+ seekRouter(): void;
32
+ seekParentView(): void;
33
+ disconnected(): void;
34
+ onClick: (event: MouseEvent) => void;
35
+ update(part: ElementPart, [state, params, options]: [string, RawParams, TransitionOptions]): symbol;
36
+ doRender: () => symbol;
37
+ _firstUpdated: boolean;
38
+ firstUpdated(): void;
39
+ }
40
+ export declare const uiSref: (state: string, params?: RawParams | undefined, options?: TransitionOptions | undefined) => import("lit/directive.js").DirectiveResult<typeof UiSrefDirective>;
@@ -0,0 +1,126 @@
1
+ import { extend, isNumber, } from '@uirouter/core';
2
+ import { noChange } from 'lit';
3
+ import { directive, PartType } from 'lit/directive.js';
4
+ import { AsyncDirective } from 'lit/async-directive.js';
5
+ import { UIRouterLitElement } from './ui-router.js';
6
+ import { UiView } from './ui-view.js';
7
+ export const UI_SREF_TARGET_EVENT = 'uiSrefTarget';
8
+ export function uiSrefTargetEvent(targetState) {
9
+ return new CustomEvent(UI_SREF_TARGET_EVENT, {
10
+ bubbles: true,
11
+ composed: true,
12
+ detail: { targetState },
13
+ });
14
+ }
15
+ export class UiSrefDirective extends AsyncDirective {
16
+ constructor(partInfo) {
17
+ super(partInfo);
18
+ this.state = null;
19
+ this.params = {};
20
+ this.options = {};
21
+ this.element = null;
22
+ this.parentView = null;
23
+ this.href = null;
24
+ this.targetState = null;
25
+ this.onClick = (event) => {
26
+ const { uiRouter: router, state, params } = this;
27
+ const options = this.getOptions();
28
+ const $state = router?.stateService;
29
+ if (!$state) {
30
+ return;
31
+ }
32
+ const { button, ctrlKey, metaKey, target } = event;
33
+ const openInNewTab = target.getAttribute('target') === '_blank';
34
+ const isExternal = target.getAttribute('rel') === 'external';
35
+ if (openInNewTab ||
36
+ isExternal ||
37
+ button ||
38
+ !isNumber(button) ||
39
+ ctrlKey ||
40
+ metaKey ||
41
+ !state) {
42
+ return;
43
+ }
44
+ $state.go(state, params, options);
45
+ event.preventDefault();
46
+ };
47
+ this.doRender = () => {
48
+ return this.render(this.state, this.params, this.options);
49
+ };
50
+ this._firstUpdated = false;
51
+ if (partInfo.type !== PartType.ELEMENT) {
52
+ throw new Error('The `uiSref` directive must be used as an element');
53
+ }
54
+ }
55
+ getOptions(opts = this.options) {
56
+ const defaultOpts = {
57
+ relative: this.parentView?.viewContext?.name,
58
+ inherit: true,
59
+ source: 'sref',
60
+ };
61
+ return extend(defaultOpts, opts || {});
62
+ }
63
+ render(state, params, options) {
64
+ if (!this.element) {
65
+ return noChange;
66
+ }
67
+ const { uiRouter: router } = this;
68
+ const $state = router?.stateService;
69
+ if (!$state) {
70
+ return noChange;
71
+ }
72
+ this.element.targetState = this.targetState = $state.target(state, params, this.getOptions(options));
73
+ this.href = $state.href(state, params, this.getOptions(options));
74
+ if (this.href === this.element.getAttribute('href')) {
75
+ return noChange;
76
+ }
77
+ if (this.href) {
78
+ this.element.setAttribute('href', this.href);
79
+ }
80
+ else {
81
+ this.element.removeAttribute('href');
82
+ }
83
+ this.element.dispatchEvent(uiSrefTargetEvent(this.targetState));
84
+ return noChange;
85
+ }
86
+ seekRouter() {
87
+ this.uiRouter = UIRouterLitElement.seekRouter(this.element);
88
+ }
89
+ seekParentView() {
90
+ this.parentView = UiView.seekParentView(this.element);
91
+ }
92
+ disconnected() {
93
+ this.element?.removeEventListener('click', this.onClick);
94
+ this.element = null;
95
+ this.targetState = null;
96
+ this.href = null;
97
+ this.unsubscribe?.();
98
+ }
99
+ update(part, [state, params = {}, options = {}]) {
100
+ this.state = state;
101
+ this.params = params;
102
+ this.options = options;
103
+ const uiSrefElement = part.element;
104
+ if (this.element !== uiSrefElement) {
105
+ this.element = uiSrefElement;
106
+ this._firstUpdated = false;
107
+ setTimeout(() => {
108
+ this.firstUpdated();
109
+ }, 0);
110
+ }
111
+ return this.doRender();
112
+ }
113
+ firstUpdated() {
114
+ if (this._firstUpdated || !this.isConnected) {
115
+ return;
116
+ }
117
+ this.seekRouter();
118
+ this.seekParentView();
119
+ this.element.addEventListener('click', this.onClick);
120
+ this.unsubscribe = this.uiRouter.stateRegistry.onStatesChanged(this.doRender);
121
+ this.doRender();
122
+ this._firstUpdated = true;
123
+ }
124
+ }
125
+ export const uiSref = directive(UiSrefDirective);
126
+ //# sourceMappingURL=ui-sref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-sref.js","sourceRoot":"","sources":["../src/ui-sref.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAGN,QAAQ,GAET,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAe,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAYnD,MAAM,UAAU,iBAAiB,CAAC,WAAwB;IACxD,OAAO,IAAI,WAAW,CAAC,oBAAoB,EAAE;QAC3C,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE,WAAW,EAAE;KACxB,CAAsB,CAAC;AAC1B,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAejD,YAAY,QAAkB;QAC5B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAflB,UAAK,GAAkB,IAAI,CAAC;QAC5B,WAAM,GAAc,EAAE,CAAC;QACvB,YAAO,GAAsB,EAAE,CAAC;QAEhC,YAAO,GAAyB,IAAI,CAAC;QAGrC,eAAU,GAAkB,IAAI,CAAC;QAEjC,SAAI,GAAkB,IAAI,CAAC;QAC3B,gBAAW,GAAuB,IAAI,CAAC;QAqEvC,YAAO,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC9B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,EAAE,YAAY,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YACnD,MAAM,YAAY,GACf,MAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC;YAC1D,MAAM,UAAU,GAAI,MAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC;YAC1E,IACE,YAAY;gBACZ,UAAU;gBACV,MAAM;gBACN,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACjB,OAAO;gBACP,OAAO;gBACP,CAAC,KAAK,EACN,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAClC,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC,CAAC;QAqBF,aAAQ,GAAG,GAAG,EAAE;YACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC;QAEF,kBAAa,GAAG,KAAK,CAAC;QAhHpB,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,UAAU,CAAC,OAA0B,IAAI,CAAC,OAAO;QAC/C,MAAM,WAAW,GAAsB;YACrC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI;YAC5C,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,MAAM;SACf,CAAC;QACF,OAAO,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,MAAkB,EAAE,OAA2B;QACnE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,EAAE,YAAY,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CACzD,KAAK,EACL,MAAM,EACN,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CACzB,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC;IACzD,CAAC;IAED,YAAY;QACV,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAwB,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACvB,CAAC;IA4BD,MAAM,CACJ,IAAiB,EACjB,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAyC;QAE1E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAmC,CAAC;QAC/D,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAOD,YAAY;QACV,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,OAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAwB,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,eAAe,CAC7D,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { LitElement } from 'lit';
2
+ import { StateDeclaration, ViewContext, StateObject } from '@uirouter/core';
3
+ import { UIRouterLit } from './core.js';
4
+ export interface UiViewAddress {
5
+ context: ViewContext | StateObject;
6
+ fqn: string;
7
+ }
8
+ /**
9
+ * @summary
10
+ *
11
+ * This is the <code>&lt;ui-view&gt;</code> component.
12
+ *
13
+ * The <code>&lt;ui-view&gt;</code> component is a viewport for routed components.
14
+ * Routed components will be rendered inside the <code>&lt;ui-view&gt;</code> viewport.
15
+ *
16
+ * @event {CustomEvent} ui-router-context
17
+ *
18
+ * This event is fired to obtain the <code>uiRouter</code> instance,
19
+ * when not directly provided.
20
+ * Once obtained, the <code>&lt;ui-view&gt;</code> listens and
21
+ * provides the <code>uiRouter</code> to descendants.
22
+ *
23
+ * @event {CustomEvent} ui-view-context
24
+ *
25
+ * This event is fired to obtain the parent <code>&lt;ui-view&gt;</code>.
26
+ */
27
+ export declare class UiView extends LitElement {
28
+ name: string;
29
+ /**
30
+ * <code>&lt;ui-view&gt;</code> can be used without <code>&lt;ui-router&gt;</code>
31
+ * by providing the <code>uiRouter</code> property directly.
32
+ */
33
+ uiRouter: UIRouterLit;
34
+ private viewAddress;
35
+ private component;
36
+ private inner;
37
+ /** @internal */
38
+ createRenderRoot(): this;
39
+ private viewId;
40
+ private _uiViewData;
41
+ private resolveContext;
42
+ private _viewConfigUpdated;
43
+ private _applyUpdatedConfig;
44
+ private parentView;
45
+ private onUiViewContextEvent;
46
+ connectedCallback(): void;
47
+ private static uiViewContextEventName;
48
+ private static uiViewContextEvent;
49
+ /** @internal */
50
+ static seekParentView(candidate: Element): UiView | null;
51
+ private seekParentView;
52
+ private onUiRouterContextEvent;
53
+ private seekRouter;
54
+ private captureContent;
55
+ private disconnectedHandlers;
56
+ private setupUiView;
57
+ disconnectedCallback(): void;
58
+ /**
59
+ * For each transition, checks the component loaded in the ui-view for:
60
+ *
61
+ * - has a uiCanExit() component hook
62
+ * - is being exited
63
+ *
64
+ * If both are true, adds the uiCanExit component function as a hook to that singular Transition.
65
+ */
66
+ private _invokeUiCanExitHook;
67
+ requestUpdate(...args: Parameters<LitElement['requestUpdate']>): void;
68
+ /**
69
+ * For each transition, checks if any param values changed and notify component
70
+ */
71
+ private _invokeUiOnParamsChangedHook;
72
+ /** @internal */
73
+ get viewContext(): ViewContext | undefined;
74
+ /** @internal */
75
+ get state(): StateDeclaration;
76
+ render(): import("lit").TemplateResult | Node;
77
+ }
78
+ export interface UiView {
79
+ constructor: typeof UiView;
80
+ }