@ngutil/aria 0.0.80 → 0.0.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/fesm2022/ngutil-aria.mjs +88 -65
  2. package/fesm2022/ngutil-aria.mjs.map +1 -1
  3. package/focus/focus-state.directive.d.ts +1 -2
  4. package/focus/focus.service.d.ts +1 -1
  5. package/focus/focusable.directive.d.ts +0 -1
  6. package/package.json +7 -9
  7. package/ui-state/abstract.d.ts +1 -1
  8. package/ui-state/dirty.directive.d.ts +9 -0
  9. package/ui-state/index.d.ts +5 -3
  10. package/ui-state/progress-state.d.ts +1 -1
  11. package/esm2022/activity/activity.service.mjs +0 -49
  12. package/esm2022/activity/index.mjs +0 -2
  13. package/esm2022/focus/focus-state.directive.mjs +0 -63
  14. package/esm2022/focus/focus-trap.directive.mjs +0 -25
  15. package/esm2022/focus/focus.service.mjs +0 -145
  16. package/esm2022/focus/focusable.directive.mjs +0 -52
  17. package/esm2022/focus/index.mjs +0 -5
  18. package/esm2022/gestures/gesture-drag.mjs +0 -81
  19. package/esm2022/gestures/gesture-event.mjs +0 -44
  20. package/esm2022/gestures/gesture-longtap.mjs +0 -34
  21. package/esm2022/gestures/gesture-tap.mjs +0 -37
  22. package/esm2022/gestures/gesture.mjs +0 -66
  23. package/esm2022/gestures/gesture.service.mjs +0 -279
  24. package/esm2022/gestures/index.mjs +0 -7
  25. package/esm2022/index.mjs +0 -6
  26. package/esm2022/keystroke/index.mjs +0 -2
  27. package/esm2022/keystroke/keystroke.service.mjs +0 -92
  28. package/esm2022/ngutil-aria.mjs +0 -5
  29. package/esm2022/ui-state/abstract.mjs +0 -41
  30. package/esm2022/ui-state/busy.directive.mjs +0 -27
  31. package/esm2022/ui-state/disabled.directive.mjs +0 -28
  32. package/esm2022/ui-state/index.mjs +0 -25
  33. package/esm2022/ui-state/progress-state.mjs +0 -141
  34. package/esm2022/ui-state/readonly.directive.mjs +0 -27
  35. package/esm2022/ui-state/selector.mjs +0 -308
  36. package/esm2022/ui-state/ui-state.mjs +0 -91
@@ -1,279 +0,0 @@
1
- import { DOCUMENT } from "@angular/common";
2
- import { inject, Injectable, NgZone } from "@angular/core";
3
- import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
4
- import { combineLatest, connect, debounceTime, filter, finalize, map, merge, Observable, scan, share, startWith, Subject, switchMap, takeWhile, tap } from "rxjs";
5
- import { __zone_symbol__, coerceElement, isFalsy, isTruthy } from "@ngutil/common";
6
- import { Listeners } from "./gesture-event";
7
- import * as i0 from "@angular/core";
8
- const ADD_EVENT_LISTENER = __zone_symbol__("addEventListener");
9
- const REMOVE_EVENT_LISTENER = __zone_symbol__("removeEventListener");
10
- const DISPATCH_EVENT = __zone_symbol__("dispatchEvent");
11
- const SCROLL_LISTENER_OPTIONS = { passive: true, capture: true };
12
- export class GestureService {
13
- #zone = inject(NgZone);
14
- #document = inject(DOCUMENT);
15
- #watchers = [];
16
- #trigger = new Subject();
17
- #moving = merge(...Object.keys(Listeners)
18
- .filter(name => Listeners[name].phase === "moving" /* GesturePhase.Moving */)
19
- .map(name => this.#listen(name, Listeners[name]))).pipe(share());
20
- #end = merge(...Object.keys(Listeners)
21
- .filter(name => Listeners[name].phase === "end" /* GesturePhase.End */)
22
- .map(name => this.#listen(name, Listeners[name]))).pipe(share());
23
- #eventStream = merge(this.#moving, this.#end).pipe(share());
24
- #begin = new Observable((dst) => {
25
- let pointerType;
26
- return this.#trigger
27
- .pipe(filter(event => {
28
- if (pointerType == null) {
29
- pointerType = event.pointerType;
30
- }
31
- return event.pointerType === pointerType;
32
- }), connect(events => merge(events,
33
- // reset pointerType on end, after 200ms, because touchend is maybe followed by a mouse event
34
- this.#end.pipe(debounceTime(200), tap(() => {
35
- pointerType = undefined;
36
- this.#enableTouchAction();
37
- }), filter(() => false)))),
38
- // Select active watchers
39
- map((detail) => {
40
- updatePointers(detail);
41
- const eventTarget = detail.origin.target;
42
- detail.target = eventTarget;
43
- let includeScrollDistance = false;
44
- const gestures = this.#watchers
45
- .filter(({ gesture, el }) => (el === eventTarget || ("contains" in el && el.contains(eventTarget))) &&
46
- gesture.shouldCapture(detail))
47
- .reduce((gestures, { gesture }) => {
48
- if (!gestures.has(gesture)) {
49
- includeScrollDistance = includeScrollDistance || gesture.includeScrollDistance;
50
- gestures.set(gesture, 0 /* GestureCaptureState.Unchecked */);
51
- }
52
- return gestures;
53
- }, new Map());
54
- return { detail: detail, gestures, includeScrollDistance };
55
- }), filter(({ gestures }) => gestures.size > 0), tap(this.#disableTouchAction)
56
- // finalize(() => console.log("FINALIZE BEGIN"))
57
- )
58
- .subscribe(dst);
59
- });
60
- #gesture = this.#begin.pipe(switchMap(({ detail: startEvent, gestures, includeScrollDistance }) => {
61
- const pointerType = startEvent.pointerType;
62
- const startAt = startEvent.origin.timeStamp;
63
- const targetEl = startEvent.origin.target;
64
- const dispatchEvent = targetEl[DISPATCH_EVENT].bind(targetEl);
65
- const eventStreamInit = this.#eventStream.pipe(startWith(startEvent), filter(event => event.pointerType === pointerType));
66
- const eventStreamSource = !includeScrollDistance
67
- ? eventStreamInit
68
- : combineLatest([eventStreamInit, this.#scrollDistance(targetEl)]).pipe(map(([src, distance]) => {
69
- ;
70
- src.scrollDistance = distance;
71
- return src;
72
- }));
73
- const eventStream = eventStreamSource.pipe(scan((state, curr) => updatePointers({
74
- ...state,
75
- ...curr,
76
- target: targetEl,
77
- elapsed: curr.origin.timeStamp - startAt
78
- }), startEvent), takeWhile(event => event.phase !== "end" /* GesturePhase.End */, true),
79
- // finalize(() => console.log("FINALIZE STREAM")),
80
- share());
81
- const captureState = eventStream.pipe(connect(src => {
82
- const state = { events: [], gestures, includeScrollDistance };
83
- return merge(src.pipe(tap(event => state.events.push(event))), ...Array.from(gestures.keys())
84
- .sort(sortByPripority)
85
- .map(gesture => gesture.capture(src.pipe(filter(gesture.shouldCapture.bind(gesture)))).pipe(takeWhile(result => result !== 2 /* GestureCaptureState.Skip */, true), tap(result => gestures.set(gesture, result))))).pipe(map(() => state));
86
- })
87
- // finalize(() => console.log("FINALIZE CAPTURE"))
88
- );
89
- const selectGesture = captureState.pipe(map(state => {
90
- const partitions = {};
91
- for (const [gesture, captureState] of state.gestures) {
92
- const partition = (partitions[captureState] ??= []);
93
- partition.push(gesture);
94
- }
95
- if (partitions[4 /* GestureCaptureState.Instant */] != null) {
96
- return {
97
- gesture: partitions[4 /* GestureCaptureState.Instant */].sort(sortByPripority)[0],
98
- events: state.events
99
- };
100
- }
101
- // while not all gestures return from Gesture.capture
102
- if (partitions[0 /* GestureCaptureState.Unchecked */] != null) {
103
- return null;
104
- }
105
- // while has pending, the capture is continued
106
- if (partitions[1 /* GestureCaptureState.Pending */] != null) {
107
- return null;
108
- }
109
- // no pendig & has maybe
110
- if (partitions[3 /* GestureCaptureState.Maybe */] != null) {
111
- return {
112
- gesture: partitions[3 /* GestureCaptureState.Maybe */].sort(sortByPripority)[0],
113
- events: state.events
114
- };
115
- }
116
- // no pending & no maybe & no terminate
117
- // so, nothign matched
118
- return { events: state.events };
119
- }), takeWhile(isFalsy, true), filter(isTruthy), takeWhile(v => v.gesture != null, false)
120
- // tap((v: CaptureSelectState) => v.events.forEach(({ origin }) => preventDefault(origin)))
121
- // finalize(() => console.log("FINALIZE SELECT"))
122
- );
123
- return selectGesture.pipe(switchMap(({ events, gesture }) => gesture
124
- .handle(eventStream.pipe(startWith(...events), tap(({ origin }) => preventDefault(origin)), filter(gesture.isRelevantEvent.bind(gesture))))
125
- .pipe(takeWhile(v => v.phase !== "end" /* GesturePhase.End */, true), tap(detail => dispatchEvent(new CustomEvent(gesture.type, { detail, bubbles: true, cancelable: true })))
126
- // finalize(() => console.log("GESTURE FINALIZE"))
127
- )),
128
- // finalize(() => console.log("FINALIZE RESULT")),
129
- finalize(this.#enableTouchAction));
130
- }), share());
131
- constructor() {
132
- const triggers = merge(...Object.keys(Listeners)
133
- .filter(name => Listeners[name].phase === "start" /* GesturePhase.Start */)
134
- .map(name => this.#listen(name, Listeners[name])));
135
- triggers.pipe(takeUntilDestroyed()).subscribe(this.#trigger);
136
- }
137
- listen(el, ...gestures) {
138
- return new Observable((dst) => this.#zone.runOutsideAngular(() => {
139
- const element = coerceElement(el);
140
- const next = dst.next.bind(dst);
141
- for (const gesture of gestures) {
142
- element[ADD_EVENT_LISTENER](gesture.type, next);
143
- dst.add(element[REMOVE_EVENT_LISTENER].bind(element, gesture.type, next));
144
- }
145
- dst.add(this.#watch(element, ...gestures).subscribe());
146
- }));
147
- }
148
- #watch(el, ...gestures) {
149
- return new Observable((dst) => this.#zone.runOutsideAngular(() => {
150
- const element = coerceElement(el);
151
- const watchers = gestures.map(gesture => {
152
- return { gesture, el: element };
153
- });
154
- this.#add(watchers);
155
- dst.add(this.#gesture.subscribe(dst));
156
- return () => {
157
- this.#remove(watchers);
158
- };
159
- }));
160
- }
161
- #add(watchers) {
162
- this.#watchers = this.#watchers.concat(watchers);
163
- }
164
- #remove(watchers) {
165
- this.#watchers = this.#watchers.filter(v => !watchers.includes(v));
166
- }
167
- #listen(name, config) {
168
- const { phase, pointerType, options } = config;
169
- return new Observable((dst) => this.#zone.runOutsideAngular(() => {
170
- const listener = (origin) => {
171
- if (origin.defaultPrevented) {
172
- return;
173
- }
174
- dst.next({ origin, phase, pointerType });
175
- };
176
- // console.log("addEventListener", name)
177
- this.#document[ADD_EVENT_LISTENER](name, listener, options);
178
- return () => {
179
- // console.log("removeEventListener", name)
180
- this.#document[REMOVE_EVENT_LISTENER](name, listener, options);
181
- };
182
- }));
183
- }
184
- #scrollDistance(element) {
185
- const scrollPosition = () => {
186
- let x = 0;
187
- let y = 0;
188
- let p = element;
189
- do {
190
- x += p.scrollLeft ?? 0;
191
- y += p.scrollTop ?? 0;
192
- p = p.parentNode;
193
- } while (p != null);
194
- return { x, y };
195
- };
196
- return new Observable((dst) => this.#zone.runOutsideAngular(() => {
197
- const initial = scrollPosition();
198
- const listener = () => {
199
- const current = scrollPosition();
200
- dst.next({ x: current.x - initial.x, y: current.y - initial.y });
201
- };
202
- dst.next({ x: 0, y: 0 });
203
- this.#document[ADD_EVENT_LISTENER]("scroll", listener, SCROLL_LISTENER_OPTIONS);
204
- return () => {
205
- this.#document[REMOVE_EVENT_LISTENER]("scroll", listener, SCROLL_LISTENER_OPTIONS);
206
- };
207
- }));
208
- }
209
- #lastTouchAction;
210
- #disableTouchAction = () => {
211
- if (this.#lastTouchAction == null) {
212
- this.#lastTouchAction = window.getComputedStyle(this.#document.body).touchAction;
213
- this.#document.body.style.touchAction = "none";
214
- }
215
- };
216
- #enableTouchAction = () => {
217
- if (this.#lastTouchAction != null) {
218
- this.#document.body.style.touchAction = this.#lastTouchAction;
219
- this.#lastTouchAction = undefined;
220
- }
221
- };
222
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: GestureService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
223
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: GestureService, providedIn: "root" }); }
224
- }
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: GestureService, decorators: [{
226
- type: Injectable,
227
- args: [{ providedIn: "root" }]
228
- }], ctorParameters: () => [] });
229
- function sortByPripority(a, b) {
230
- return b.priority - a.priority;
231
- }
232
- function pointersFromEvent(event) {
233
- if (event instanceof MouseEvent) {
234
- return [
235
- {
236
- x: event.clientX,
237
- y: event.clientY
238
- }
239
- ];
240
- }
241
- else {
242
- return Array.from(event.touches).map(t => {
243
- return { x: t.clientX, y: t.clientY };
244
- });
245
- }
246
- }
247
- function updatePointers(state) {
248
- if (state.phase === "start" /* GesturePhase.Start */) {
249
- state.pointers = pointersFromEvent(state.origin).map(v => {
250
- return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } };
251
- });
252
- }
253
- else if (state.pointers) {
254
- const pointers = pointersFromEvent(state.origin);
255
- if (pointers.length === 0) {
256
- return state;
257
- }
258
- state.pointers = state.pointers.map((v, i) => {
259
- const p = pointers[i];
260
- return {
261
- start: v.start,
262
- current: p,
263
- distance: { x: p.x - v.start.x, y: p.y - v.start.y },
264
- direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }
265
- };
266
- });
267
- }
268
- return state;
269
- }
270
- function direction(prev, curr) {
271
- return curr > prev ? 1 : curr < prev ? -1 : 0;
272
- }
273
- function preventDefault(event) {
274
- if (event.cancelable && !event.defaultPrevented) {
275
- // console.log(`PREVENT ${event.type}`)
276
- event.preventDefault();
277
- }
278
- }
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VzdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXJpYS9zcmMvZ2VzdHVyZXMvZ2VzdHVyZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFL0QsT0FBTyxFQUNILGFBQWEsRUFDYixPQUFPLEVBQ1AsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEVBQ1YsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLEVBQ1QsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNOLE1BQU0sTUFBTSxDQUFBO0FBSWIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUloRyxPQUFPLEVBTUgsU0FBUyxFQUNaLE1BQU0saUJBQWlCLENBQUE7O0FBRXhCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFDOUQsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUNwRSxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUE7QUFvQ3ZELE1BQU0sdUJBQXVCLEdBQTRCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFHekYsTUFBTSxPQUFPLGNBQWM7SUFDZCxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RCLFNBQVMsR0FBRyxN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RCxTQUFTLGNBQWMsQ0FBQyxLQUFZO0lBQ2hDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLHVDQUF1QztRQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUE7SUFDMUIsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIlxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQge1xuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgY29ubmVjdCxcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZmlsdGVyLFxuICAgIGZpbmFsaXplLFxuICAgIG1hcCxcbiAgICBtZXJnZSxcbiAgICBPYnNlcnZhYmxlLFxuICAgIHNjYW4sXG4gICAgc2hhcmUsXG4gICAgc3RhcnRXaXRoLFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaWJlcixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVdoaWxlLFxuICAgIHRhcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IE11dGFibGUgfSBmcm9tIFwidXRpbGl0eS10eXBlc1wiXG5cbmltcG9ydCB7IF9fem9uZV9zeW1ib2xfXywgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0LCBpc0ZhbHN5LCBpc1RydXRoeSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gXCJAbmd1dGlsL3N0eWxlXCJcblxuaW1wb3J0IHsgR2VzdHVyZSwgR2VzdHVyZUNhcHR1cmVTdGF0ZSwgR2VzdHVyZUV2ZW50IH0gZnJvbSBcIi4vZ2VzdHVyZVwiXG5pbXBvcnQge1xuICAgIEdlc3R1cmVEZXRhaWwsXG4gICAgR2VzdHVyZUxpc3RlbmVyQ29uZmlnLFxuICAgIEdlc3R1cmVPcmlnaW4sXG4gICAgR2VzdHVyZVBoYXNlLFxuICAgIEdlc3R1cmVQb2ludGVyVHlwZSxcbiAgICBMaXN0ZW5lcnNcbn0gZnJvbSBcIi4vZ2VzdHVyZS1ldmVudFwiXG5cbmNvbnN0IEFERF9FVkVOVF9MSVNURU5FUiA9IF9fem9uZV9zeW1ib2xfXyhcImFkZEV2ZW50TGlzdGVuZXJcIilcbmNvbnN0IFJFTU9WRV9FVkVOVF9MSVNURU5FUiA9IF9fem9uZV9zeW1ib2xfXyhcInJlbW92ZUV2ZW50TGlzdGVuZXJcIilcbmNvbnN0IERJU1BBVENIX0VWRU5UID0gX196b25lX3N5bWJvbF9fKFwiZGlzcGF0Y2hFdmVudFwiKVxuXG50eXBlIEdlc3R1cmVzVG9FdmVudHNUeXBlPFQgZXh0ZW5kcyBBcnJheTxHZXN0dXJlPj4gPVxuICAgIFQgZXh0ZW5kcyBBcnJheTxpbmZlciBHPiA/IChHIGV4dGVuZHMgR2VzdHVyZSA/IEdlc3R1cmVFdmVudDxHPiA6IG5ldmVyKSA6IG5ldmVyXG5cbnR5cGUgR2VzdHVyZUV2ZW50RGlzY3JpbWluYXRvcjxUPiA9IFQgZXh0ZW5kcyB7IHR5cGU6IGluZmVyIE4gfSA/IHsgdHlwZTogTiB9ICYgVCA6IG5ldmVyXG5cbmV4cG9ydCB0eXBlIEdlc3R1cmVXYXRjaFJldHVybnM8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PiA9IE9ic2VydmFibGU8XG4gICAgR2VzdHVyZUV2ZW50RGlzY3JpbWluYXRvcjxHZXN0dXJlc1RvRXZlbnRzVHlwZTxUPj5cbj5cblxuZXhwb3J0IHR5cGUgR2VzdHVyZUxpc3RlblJldHVybnM8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PiA9IE9ic2VydmFibGU8R2VzdHVyZXNUb0V2ZW50c1R5cGU8VD4+XG5cbmludGVyZmFjZSBCZWdpblN0YXRlIHtcbiAgICBkZXRhaWw6IEdlc3R1cmVEZXRhaWxcbiAgICBnZXN0dXJlczogTWFwPEdlc3R1cmUsIEdlc3R1cmVDYXB0dXJlU3RhdGU+XG4gICAgaW5jbHVkZVNjcm9sbERpc3RhbmNlOiBib29sZWFuXG59XG5cbmludGVyZmFjZSBDYXB0dXJlU3RhdGUge1xuICAgIGV2ZW50czogR2VzdHVyZURldGFpbFtdXG4gICAgZ2VzdHVyZXM6IEJlZ2luU3RhdGVbXCJnZXN0dXJlc1wiXVxuICAgIGluY2x1ZGVTY3JvbGxEaXN0YW5jZTogQmVnaW5TdGF0ZVtcImluY2x1ZGVTY3JvbGxEaXN0YW5jZVwiXVxufVxuXG5pbnRlcmZhY2UgQ2FwdHVyZVNlbGVjdFN0YXRlIHtcbiAgICBldmVudHM6IEdlc3R1cmVEZXRhaWxbXVxuICAgIGdlc3R1cmU/OiBHZXN0dXJlXG4gICAgd2F0Y2hlcnM/OiBBcnJheTxXYXRjaGVyPlxufVxuXG5pbnRlcmZhY2UgV2F0Y2hlciB7XG4gICAgcmVhZG9ubHkgZWw6IEhUTUxFbGVtZW50XG4gICAgcmVhZG9ubHkgZ2VzdHVyZTogR2VzdHVyZVxufVxuXG5jb25zdCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7IHBhc3NpdmU6IHRydWUsIGNhcHR1cmU6IHRydWUgfVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgR2VzdHVyZVNlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSlcbiAgICByZWFkb25seSAjZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpXG5cbiAgICAjd2F0Y2hlcnM6IFdhdGNoZXJbXSA9IFtdXG4gICAgcmVhZG9ubHkgI3RyaWdnZXIgPSBuZXcgU3ViamVjdDxHZXN0dXJlRGV0YWlsPigpXG5cbiAgICByZWFkb25seSAjbW92aW5nOiBPYnNlcnZhYmxlPEdlc3R1cmVEZXRhaWw+ID0gbWVyZ2UoXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKExpc3RlbmVycylcbiAgICAgICAgICAgIC5maWx0ZXIobmFtZSA9PiBMaXN0ZW5lcnNbbmFtZV0ucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5Nb3ZpbmcpXG4gICAgICAgICAgICAubWFwKG5hbWUgPT4gdGhpcy4jbGlzdGVuKG5hbWUsIExpc3RlbmVyc1tuYW1lXSkpXG4gICAgKS5waXBlKHNoYXJlKCkpXG5cbiAgICByZWFkb25seSAjZW5kOiBPYnNlcnZhYmxlPEdlc3R1cmVEZXRhaWw+ID0gbWVyZ2UoXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKExpc3RlbmVycylcbiAgICAgICAgICAgIC5maWx0ZXIobmFtZSA9PiBMaXN0ZW5lcnNbbmFtZV0ucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5FbmQpXG4gICAgICAgICAgICAubWFwKG5hbWUgPT4gdGhpcy4jbGlzdGVuKG5hbWUsIExpc3RlbmVyc1tuYW1lXSkpXG4gICAgKS5waXBlKHNoYXJlKCkpXG5cbiAgICByZWFkb25seSAjZXZlbnRTdHJlYW0gPSBtZXJnZSh0aGlzLiNtb3ZpbmcsIHRoaXMuI2VuZCkucGlwZShzaGFyZSgpKVxuXG4gICAgcmVhZG9ubHkgI2JlZ2luID0gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxCZWdpblN0YXRlPikgPT4ge1xuICAgICAgICBsZXQgcG9pbnRlclR5cGU6IEdlc3R1cmVQb2ludGVyVHlwZSB8IHVuZGVmaW5lZFxuXG4gICAgICAgIHJldHVybiB0aGlzLiN0cmlnZ2VyXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRlclR5cGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUgPSBldmVudC5wb2ludGVyVHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnBvaW50ZXJUeXBlID09PSBwb2ludGVyVHlwZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNvbm5lY3QoZXZlbnRzID0+XG4gICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgcG9pbnRlclR5cGUgb24gZW5kLCBhZnRlciAyMDBtcywgYmVjYXVzZSB0b3VjaGVuZCBpcyBtYXliZSBmb2xsb3dlZCBieSBhIG1vdXNlIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNlbmQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNlbmFibGVUb3VjaEFjdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAvLyBTZWxlY3QgYWN0aXZlIHdhdGNoZXJzXG4gICAgICAgICAgICAgICAgbWFwKChkZXRhaWw6IE11dGFibGU8R2VzdHVyZURldGFpbD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUG9pbnRlcnMoZGV0YWlsKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGRldGFpbC5vcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbC50YXJnZXQgPSBldmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5jbHVkZVNjcm9sbERpc3RhbmNlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VzdHVyZXMgPSB0aGlzLiN3YXRjaGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeyBnZXN0dXJlLCBlbCB9KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWwgPT09IGV2ZW50VGFyZ2V0IHx8IChcImNvbnRhaW5zXCIgaW4gZWwgJiYgZWwuY29udGFpbnMoZXZlbnRUYXJnZXQpKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZS5zaG91bGRDYXB0dXJlKGRldGFpbClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdlc3R1cmVzLCB7IGdlc3R1cmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdlc3R1cmVzLmhhcyhnZXN0dXJlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZVNjcm9sbERpc3RhbmNlID0gaW5jbHVkZVNjcm9sbERpc3RhbmNlIHx8IGdlc3R1cmUuaW5jbHVkZVNjcm9sbERpc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlcy5zZXQoZ2VzdHVyZSwgR2VzdHVyZUNhcHR1cmVTdGF0ZS5VbmNoZWNrZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTWFwKCkgYXMgQmVnaW5TdGF0ZVtcImdlc3R1cmVzXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGV0YWlsOiBkZXRhaWwsIGdlc3R1cmVzLCBpbmNsdWRlU2Nyb2xsRGlzdGFuY2UgfSBzYXRpc2ZpZXMgQmVnaW5TdGF0ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoeyBnZXN0dXJlcyB9KSA9PiBnZXN0dXJlcy5zaXplID4gMCksXG4gICAgICAgICAgICAgICAgdGFwKHRoaXMuI2Rpc2FibGVUb3VjaEFjdGlvbilcbiAgICAgICAgICAgICAgICAvLyBmaW5hbGl6ZSgoKSA9PiBjb25zb2xlLmxvZyhcIkZJTkFMSVpFIEJFR0lOXCIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkc3QpXG4gICAgfSlcblxuICAgIHJlYWRvbmx5ICNnZXN0dXJlID0gdGhpcy4jYmVnaW4ucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh7IGRldGFpbDogc3RhcnRFdmVudCwgZ2VzdHVyZXMsIGluY2x1ZGVTY3JvbGxEaXN0YW5jZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2ludGVyVHlwZSA9IHN0YXJ0RXZlbnQucG9pbnRlclR5cGVcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXQgPSBzdGFydEV2ZW50Lm9yaWdpbi50aW1lU3RhbXBcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsID0gc3RhcnRFdmVudC5vcmlnaW4udGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICBjb25zdCBkaXNwYXRjaEV2ZW50ID0gdGFyZ2V0RWxbRElTUEFUQ0hfRVZFTlRdLmJpbmQodGFyZ2V0RWwpXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50U3RyZWFtSW5pdCA9IHRoaXMuI2V2ZW50U3RyZWFtLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHN0YXJ0RXZlbnQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5wb2ludGVyVHlwZSA9PT0gcG9pbnRlclR5cGUpXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50U3RyZWFtU291cmNlID0gIWluY2x1ZGVTY3JvbGxEaXN0YW5jZVxuICAgICAgICAgICAgICAgID8gZXZlbnRTdHJlYW1Jbml0XG4gICAgICAgICAgICAgICAgOiBjb21iaW5lTGF0ZXN0KFtldmVudFN0cmVhbUluaXQsIHRoaXMuI3Njcm9sbERpc3RhbmNlKHRhcmdldEVsKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFwKChbc3JjLCBkaXN0YW5jZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOyhzcmMgYXMgTXV0YWJsZTxHZXN0dXJlRGV0YWlsPikuc2Nyb2xsRGlzdGFuY2UgPSBkaXN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3QgZXZlbnRTdHJlYW0gPSBldmVudFN0cmVhbVNvdXJjZS5waXBlKFxuICAgICAgICAgICAgICAgIHNjYW4oXG4gICAgICAgICAgICAgICAgICAgIChzdGF0ZSwgY3VycikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBvaW50ZXJzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZDogY3Vyci5vcmlnaW4udGltZVN0YW1wIC0gc3RhcnRBdCFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzdGFydEV2ZW50XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlV2hpbGUoZXZlbnQgPT4gZXZlbnQucGhhc2UgIT09IEdlc3R1cmVQaGFzZS5FbmQsIHRydWUpLFxuICAgICAgICAgICAgICAgIC8vIGZpbmFsaXplKCgpID0+IGNvbnNvbGUubG9nKFwiRklOQUxJWkUgU1RSRUFNXCIpKSxcbiAgICAgICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVTdGF0ZSA9IGV2ZW50U3RyZWFtLnBpcGUoXG4gICAgICAgICAgICAgICAgY29ubmVjdChzcmMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZTogQ2FwdHVyZVN0YXRlID0geyBldmVudHM6IFtdLCBnZXN0dXJlcywgaW5jbHVkZVNjcm9sbERpc3RhbmNlIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjLnBpcGUodGFwKGV2ZW50ID0+IHN0YXRlLmV2ZW50cy5wdXNoKGV2ZW50KSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShnZXN0dXJlcy5rZXlzKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZ2VzdHVyZSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlLmNhcHR1cmUoc3JjLnBpcGUoZmlsdGVyKGdlc3R1cmUuc2hvdWxkQ2FwdHVyZS5iaW5kKGdlc3R1cmUpKSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlV2hpbGUocmVzdWx0ID0+IHJlc3VsdCAhPT0gR2VzdHVyZUNhcHR1cmVTdGF0ZS5Ta2lwLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcChyZXN1bHQgPT4gZ2VzdHVyZXMuc2V0KGdlc3R1cmUsIHJlc3VsdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkucGlwZShtYXAoKCkgPT4gc3RhdGUpKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBDQVBUVVJFXCIpKVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RHZXN0dXJlID0gY2FwdHVyZVN0YXRlLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGl0aW9uczogeyBbayBpbiBHZXN0dXJlQ2FwdHVyZVN0YXRlXT86IEdlc3R1cmVbXSB9ID0ge31cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtnZXN0dXJlLCBjYXB0dXJlU3RhdGVdIG9mIHN0YXRlLmdlc3R1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aXRpb24gPSAocGFydGl0aW9uc1tjYXB0dXJlU3RhdGVdID8/PSBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbi5wdXNoKGdlc3R1cmUpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLkluc3RhbnRdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZTogcGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLkluc3RhbnRdLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHN0YXRlLmV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDYXB0dXJlU2VsZWN0U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIG5vdCBhbGwgZ2VzdHVyZXMgcmV0dXJuIGZyb20gR2VzdHVyZS5jYXB0dXJlXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0aXRpb25zW0dlc3R1cmVDYXB0dXJlU3RhdGUuVW5jaGVja2VkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgaGFzIHBlbmRpbmcsIHRoZSBjYXB0dXJlIGlzIGNvbnRpbnVlZFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFydGl0aW9uc1tHZXN0dXJlQ2FwdHVyZVN0YXRlLlBlbmRpbmddICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBubyBwZW5kaWcgJiBoYXMgbWF5YmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRpdGlvbnNbR2VzdHVyZUNhcHR1cmVTdGF0ZS5NYXliZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXN0dXJlOiBwYXJ0aXRpb25zW0dlc3R1cmVDYXB0dXJlU3RhdGUuTWF5YmVdLnNvcnQoc29ydEJ5UHJpcG9yaXR5KVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHN0YXRlLmV2ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBDYXB0dXJlU2VsZWN0U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vIHBlbmRpbmcgJiBubyBtYXliZSAmIG5vIHRlcm1pbmF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyBzbywgbm90aGlnbiBtYXRjaGVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGV2ZW50czogc3RhdGUuZXZlbnRzIH0gYXMgQ2FwdHVyZVNlbGVjdFN0YXRlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKGlzRmFsc3ksIHRydWUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcihpc1RydXRoeSksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKHYgPT4gdiEuZ2VzdHVyZSAhPSBudWxsLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAvLyB0YXAoKHY6IENhcHR1cmVTZWxlY3RTdGF0ZSkgPT4gdi5ldmVudHMuZm9yRWFjaCgoeyBvcmlnaW4gfSkgPT4gcHJldmVudERlZmF1bHQob3JpZ2luKSkpXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBTRUxFQ1RcIikpXG4gICAgICAgICAgICApIGFzIE9ic2VydmFibGU8UmVxdWlyZWQ8Q2FwdHVyZVNlbGVjdFN0YXRlPj5cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdEdlc3R1cmUucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgZXZlbnRzLCBnZXN0dXJlIH0pID0+XG4gICAgICAgICAgICAgICAgICAgIGdlc3R1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5oYW5kbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTdHJlYW0ucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKC4uLmV2ZW50cyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoeyBvcmlnaW4gfSkgPT4gcHJldmVudERlZmF1bHQob3JpZ2luKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihnZXN0dXJlLmlzUmVsZXZhbnRFdmVudC5iaW5kKGdlc3R1cmUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VXaGlsZSh2ID0+IHYucGhhc2UgIT09IEdlc3R1cmVQaGFzZS5FbmQsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcChkZXRhaWwgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudChnZXN0dXJlLnR5cGUsIHsgZGV0YWlsLCBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJHRVNUVVJFIEZJTkFMSVpFXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gY29uc29sZS5sb2coXCJGSU5BTElaRSBSRVNVTFRcIikpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKHRoaXMuI2VuYWJsZVRvdWNoQWN0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmUoKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCB0cmlnZ2VycyA9IG1lcmdlKFxuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoTGlzdGVuZXJzKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIobmFtZSA9PiBMaXN0ZW5lcnNbbmFtZV0ucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5TdGFydClcbiAgICAgICAgICAgICAgICAubWFwKG5hbWUgPT4gdGhpcy4jbGlzdGVuKG5hbWUsIExpc3RlbmVyc1tuYW1lXSkpXG4gICAgICAgIClcbiAgICAgICAgdHJpZ2dlcnMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKHRoaXMuI3RyaWdnZXIpXG4gICAgfVxuXG4gICAgbGlzdGVuPFQgZXh0ZW5kcyBBcnJheTxHZXN0dXJlPj4oZWw6IEVsZW1lbnRJbnB1dCwgLi4uZ2VzdHVyZXM6IFQpOiBHZXN0dXJlTGlzdGVuUmV0dXJuczxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPEdlc3R1cmVEZXRhaWw+KSA9PlxuICAgICAgICAgICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvZXJjZUVsZW1lbnQoZWwpXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IGRzdC5uZXh0LmJpbmQoZHN0KVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ2VzdHVyZSBvZiBnZXN0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50W0FERF9FVkVOVF9MSVNURU5FUl0oZ2VzdHVyZS50eXBlIGFzIGFueSwgbmV4dClcbiAgICAgICAgICAgICAgICAgICAgZHN0LmFkZChlbGVtZW50W1JFTU9WRV9FVkVOVF9MSVNURU5FUl0uYmluZChlbGVtZW50LCBnZXN0dXJlLnR5cGUgYXMgYW55LCBuZXh0IGFzIGFueSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRzdC5hZGQodGhpcy4jd2F0Y2goZWxlbWVudCwgLi4uZ2VzdHVyZXMpLnN1YnNjcmliZSgpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKSBhcyBhbnlcbiAgICB9XG5cbiAgICAjd2F0Y2g8VCBleHRlbmRzIEFycmF5PEdlc3R1cmU+PihlbDogRWxlbWVudElucHV0LCAuLi5nZXN0dXJlczogVCk6IEdlc3R1cmVXYXRjaFJldHVybnM8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxHZXN0dXJlRGV0YWlsPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGVsKVxuICAgICAgICAgICAgICAgIGNvbnN0IHdhdGNoZXJzID0gZ2VzdHVyZXMubWFwKGdlc3R1cmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBnZXN0dXJlLCBlbDogZWxlbWVudCB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB0aGlzLiNhZGQod2F0Y2hlcnMpXG4gICAgICAgICAgICAgICAgZHN0LmFkZCh0aGlzLiNnZXN0dXJlLnN1YnNjcmliZShkc3QpKVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlbW92ZSh3YXRjaGVycylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApIGFzIGFueVxuICAgIH1cblxuICAgICNhZGQod2F0Y2hlcnM6IFdhdGNoZXJbXSkge1xuICAgICAgICB0aGlzLiN3YXRjaGVycyA9IHRoaXMuI3dhdGNoZXJzLmNvbmNhdCh3YXRjaGVycylcbiAgICB9XG5cbiAgICAjcmVtb3ZlKHdhdGNoZXJzOiBXYXRjaGVyW10pIHtcbiAgICAgICAgdGhpcy4jd2F0Y2hlcnMgPSB0aGlzLiN3YXRjaGVycy5maWx0ZXIodiA9PiAhd2F0Y2hlcnMuaW5jbHVkZXModikpXG4gICAgfVxuXG4gICAgI2xpc3RlbihuYW1lOiBzdHJpbmcsIGNvbmZpZzogR2VzdHVyZUxpc3RlbmVyQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHsgcGhhc2UsIHBvaW50ZXJUeXBlLCBvcHRpb25zIH0gPSBjb25maWdcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxHZXN0dXJlRGV0YWlsPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG9yaWdpbjogR2VzdHVyZU9yaWdpbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRzdC5uZXh0KHsgb3JpZ2luLCBwaGFzZSwgcG9pbnRlclR5cGUgfSBhcyBHZXN0dXJlRGV0YWlsKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkRXZlbnRMaXN0ZW5lclwiLCBuYW1lKVxuICAgICAgICAgICAgICAgIHRoaXMuI2RvY3VtZW50W0FERF9FVkVOVF9MSVNURU5FUl0obmFtZSBhcyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwLCBsaXN0ZW5lciBhcyBhbnksIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1vdmVFdmVudExpc3RlbmVyXCIsIG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI2RvY3VtZW50W1JFTU9WRV9FVkVOVF9MSVNURU5FUl0obmFtZSBhcyBrZXlvZiBEb2N1bWVudEV2ZW50TWFwLCBsaXN0ZW5lciBhcyBhbnksIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNzY3JvbGxEaXN0YW5jZShlbGVtZW50OiBFbGVtZW50KTogT2JzZXJ2YWJsZTxQb3NpdGlvbj4ge1xuICAgICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCB4ID0gMFxuICAgICAgICAgICAgbGV0IHkgPSAwXG4gICAgICAgICAgICBsZXQgcCA9IGVsZW1lbnRcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICB4ICs9IHAuc2Nyb2xsTGVmdCA/PyAwXG4gICAgICAgICAgICAgICAgeSArPSBwLnNjcm9sbFRvcCA/PyAwXG4gICAgICAgICAgICAgICAgcCA9IHAucGFyZW50Tm9kZSBhcyBFbGVtZW50XG4gICAgICAgICAgICB9IHdoaWxlIChwICE9IG51bGwpXG4gICAgICAgICAgICByZXR1cm4geyB4LCB5IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoZHN0OiBTdWJzY3JpYmVyPFBvc2l0aW9uPikgPT5cbiAgICAgICAgICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluaXRpYWwgPSBzY3JvbGxQb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzY3JvbGxQb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIGRzdC5uZXh0KHsgeDogY3VycmVudC54IC0gaW5pdGlhbC54LCB5OiBjdXJyZW50LnkgLSBpbml0aWFsLnkgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZHN0Lm5leHQoeyB4OiAwLCB5OiAwIH0pXG4gICAgICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRbQUREX0VWRU5UX0xJU1RFTkVSXShcInNjcm9sbFwiLCBsaXN0ZW5lciwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZG9jdW1lbnRbUkVNT1ZFX0VWRU5UX0xJU1RFTkVSXShcInNjcm9sbFwiLCBsaXN0ZW5lciwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNsYXN0VG91Y2hBY3Rpb24/OiBzdHJpbmdcbiAgICAjZGlzYWJsZVRvdWNoQWN0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy4jbGFzdFRvdWNoQWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuI2xhc3RUb3VjaEFjdGlvbiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuI2RvY3VtZW50LmJvZHkpLnRvdWNoQWN0aW9uXG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudC5ib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gXCJub25lXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNlbmFibGVUb3VjaEFjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuI2xhc3RUb3VjaEFjdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNkb2N1bWVudC5ib2R5LnN0eWxlLnRvdWNoQWN0aW9uID0gdGhpcy4jbGFzdFRvdWNoQWN0aW9uXG4gICAgICAgICAgICB0aGlzLiNsYXN0VG91Y2hBY3Rpb24gPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ydEJ5UHJpcG9yaXR5KGE6IEdlc3R1cmUsIGI6IEdlc3R1cmUpIHtcbiAgICByZXR1cm4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHlcbn1cblxuZnVuY3Rpb24gcG9pbnRlcnNGcm9tRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogUG9zaXRpb25bXSB7XG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZXZlbnQudG91Y2hlcykubWFwKHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogdC5jbGllbnRYLCB5OiB0LmNsaWVudFkgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9pbnRlcnMoc3RhdGU6IE11dGFibGU8R2VzdHVyZURldGFpbD4pOiBHZXN0dXJlRGV0YWlsIHtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09IEdlc3R1cmVQaGFzZS5TdGFydCkge1xuICAgICAgICBzdGF0ZS5wb2ludGVycyA9IHBvaW50ZXJzRnJvbUV2ZW50KHN0YXRlLm9yaWdpbikubWFwKHYgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHYsIGN1cnJlbnQ6IHYsIGRpc3RhbmNlOiB7IHg6IDAsIHk6IDAgfSwgZGlyZWN0aW9uOiB7IHg6IDAsIHk6IDAgfSB9XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChzdGF0ZS5wb2ludGVycykge1xuICAgICAgICBjb25zdCBwb2ludGVycyA9IHBvaW50ZXJzRnJvbUV2ZW50KHN0YXRlLm9yaWdpbilcbiAgICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5wb2ludGVycyA9IHN0YXRlLnBvaW50ZXJzLm1hcCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcCA9IHBvaW50ZXJzW2ldXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB2LnN0YXJ0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHAsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2U6IHsgeDogcC54IC0gdi5zdGFydC54LCB5OiBwLnkgLSB2LnN0YXJ0LnkgfSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IHsgeDogZGlyZWN0aW9uKHYuc3RhcnQueCwgcC54KSwgeTogZGlyZWN0aW9uKHYuc3RhcnQueSwgcC55KSB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlXG59XG5cbmZ1bmN0aW9uIGRpcmVjdGlvbihwcmV2OiBudW1iZXIsIGN1cnI6IG51bWJlcik6IC0xIHwgMCB8IDEge1xuICAgIHJldHVybiBjdXJyID4gcHJldiA/IDEgOiBjdXJyIDwgcHJldiA/IC0xIDogMFxufVxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgUFJFVkVOVCAke2V2ZW50LnR5cGV9YClcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cbn1cbiJdfQ==
@@ -1,7 +0,0 @@
1
- export * from "./gesture-drag";
2
- export * from "./gesture-event";
3
- export * from "./gesture-longtap";
4
- export * from "./gesture-tap";
5
- export * from "./gesture.service";
6
- export * from "./gesture";
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9nZXN0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFBO0FBQzlCLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLGVBQWUsQ0FBQTtBQUM3QixjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsV0FBVyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZ2VzdHVyZS1kcmFnXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlc3R1cmUtZXZlbnRcIlxuZXhwb3J0ICogZnJvbSBcIi4vZ2VzdHVyZS1sb25ndGFwXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlc3R1cmUtdGFwXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlc3R1cmUuc2VydmljZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9nZXN0dXJlXCJcbiJdfQ==
package/esm2022/index.mjs DELETED
@@ -1,6 +0,0 @@
1
- export { ActivityService } from "./activity";
2
- export { FocusService, FocusTrap, Focusable, FocusState } from "./focus";
3
- export { KeystrokeService } from "./keystroke";
4
- export * from "./gestures";
5
- export * from "./ui-state";
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMzRSxPQUFPLEVBQWUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFnQyxNQUFNLFNBQVMsQ0FBQTtBQUNuSCxPQUFPLEVBQTZCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3pFLGNBQWMsWUFBWSxDQUFBO0FBQzFCLGNBQWMsWUFBWSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQWN0aXZpdHlFdmVudCwgQWN0aXZpdHlPcmlnaW4sIEFjdGl2aXR5U2VydmljZSB9IGZyb20gXCIuL2FjdGl2aXR5XCJcbmV4cG9ydCB7IEZvY3VzT3JpZ2luLCBGb2N1c1NlcnZpY2UsIEZvY3VzVHJhcCwgRm9jdXNhYmxlLCBGb2N1c1N0YXRlLCBGb2N1c2FibGVFdmVudCwgRm9jdXNDaGFuZ2VzIH0gZnJvbSBcIi4vZm9jdXNcIlxuZXhwb3J0IHsgS2V5c3Ryb2tlLCBLZXlzdHJva2VFdmVudCwgS2V5c3Ryb2tlU2VydmljZSB9IGZyb20gXCIuL2tleXN0cm9rZVwiXG5leHBvcnQgKiBmcm9tIFwiLi9nZXN0dXJlc1wiXG5leHBvcnQgKiBmcm9tIFwiLi91aS1zdGF0ZVwiXG4iXX0=
@@ -1,2 +0,0 @@
1
- export * from "./keystroke.service";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9rZXlzdHJva2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2tleXN0cm9rZS5zZXJ2aWNlXCJcbiJdfQ==
@@ -1,92 +0,0 @@
1
- import { DOCUMENT } from "@angular/common";
2
- import { inject, Injectable, NgZone } from "@angular/core";
3
- import { distinctUntilChanged, EMPTY, filter, from, fromEvent, map, merge, Observable, of, share, shareReplay, startWith, switchMap } from "rxjs";
4
- import { coerceElement, isElementInput } from "@ngutil/common";
5
- import { FocusState } from "../focus";
6
- import * as i0 from "@angular/core";
7
- export class KeystrokeService {
8
- #document = inject(DOCUMENT);
9
- #zone = inject(NgZone);
10
- #keyEvent = this.#zone.runOutsideAngular(() => merge(fromEvent(this.#document, "keydown", { capture: true, passive: false }), fromEvent(this.#document, "keyup", { capture: true, passive: false })).pipe(filter(event => event.defaultPrevented === false), share()));
11
- #focusEvent = this.#zone.runOutsideAngular(() => fromEvent(this.#document, "focus", { capture: true, passive: true }).pipe(startWith(null), map(() => this.#document.activeElement), shareReplay(1)));
12
- watch(activation, ...keystrokes) {
13
- return new Observable((dst) => this.#trigger(activation)
14
- .pipe(distinctUntilChanged(), switchMap(enabled => {
15
- if (enabled) {
16
- return this.#keyEvent;
17
- }
18
- else {
19
- return EMPTY;
20
- }
21
- }), map(event => {
22
- if (event.defaultPrevented) {
23
- return [];
24
- }
25
- const idFromEvent = keystrokeId(eventToKeystroke(event));
26
- const matches = keystrokes
27
- .filter(ks => keystrokeId(ks) === idFromEvent)
28
- .map(ks => {
29
- return {
30
- original: event,
31
- keystroke: ks
32
- };
33
- });
34
- if (matches.length > 0) {
35
- event.preventDefault();
36
- }
37
- return matches;
38
- }), filter(matches => matches.length > 0), switchMap(matches => of(...matches)))
39
- .subscribe(dst));
40
- }
41
- #trigger(activation) {
42
- if (isElementInput(activation)) {
43
- return this.#focusActivation(coerceElement(activation));
44
- }
45
- else if (activation instanceof FocusState) {
46
- return activation.origin$.pipe(map(origin => origin != null));
47
- }
48
- else {
49
- return from(activation).pipe(switchMap(value => {
50
- if (isElementInput(value) || value instanceof FocusState) {
51
- return this.#trigger(value);
52
- }
53
- else {
54
- return of(value);
55
- }
56
- }));
57
- }
58
- }
59
- #focusActivation(element) {
60
- return this.#focusEvent.pipe(map(focused => focused === element || element.contains(focused)));
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KeystrokeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KeystrokeService, providedIn: "root" }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KeystrokeService, decorators: [{
66
- type: Injectable,
67
- args: [{ providedIn: "root" }]
68
- }] });
69
- function keystrokeId(ks) {
70
- let res = ks.key;
71
- if (ks.shift) {
72
- res += "+shift";
73
- }
74
- if (ks.ctrl) {
75
- res += "+ctrl";
76
- }
77
- if (ks.alt) {
78
- res += "+alt";
79
- }
80
- res += `${ks.state}`;
81
- return res;
82
- }
83
- function eventToKeystroke(event) {
84
- return {
85
- key: event.key,
86
- shift: event.shiftKey,
87
- ctrl: event.ctrlKey,
88
- alt: event.altKey,
89
- state: event.type === "keyup" ? "up" : "down"
90
- };
91
- }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c3Ryb2tlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9rZXlzdHJva2Uva2V5c3Ryb2tlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxRCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBQ0YsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBRVQsU0FBUyxFQUNaLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7QUFtQnJDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDaEIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM1QixLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRXRCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUNuRCxLQUFLLENBQ0QsU0FBUyxDQUFnQixJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3RGLFNBQVMsQ0FBZ0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUN2RixDQUFD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LElBQUksRUFBRSxLQUFLLENBQUMsT0FBTztRQUNuQixHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU07S0FDaEQsQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIlxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7XG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgRU1QVFksXG4gICAgZmlsdGVyLFxuICAgIGZyb20sXG4gICAgZnJvbUV2ZW50LFxuICAgIG1hcCxcbiAgICBtZXJnZSxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIHNoYXJlLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHN0YXJ0V2l0aCxcbiAgICBTdWJzY3JpYmVyLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCwgaXNFbGVtZW50SW5wdXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBGb2N1c1N0YXRlIH0gZnJvbSBcIi4uL2ZvY3VzXCJcblxuZXhwb3J0IGludGVyZmFjZSBLZXlzdHJva2Uge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VSV9FdmVudHMvS2V5Ym9hcmRfZXZlbnRfa2V5X3ZhbHVlc1xuICAgIGtleTogS2V5Ym9hcmRFdmVudFtcImtleVwiXVxuICAgIHNoaWZ0PzogYm9vbGVhblxuICAgIGN0cmw/OiBib29sZWFuXG4gICAgYWx0PzogYm9vbGVhblxuICAgIHN0YXRlOiBcImRvd25cIiB8IFwidXBcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleXN0cm9rZUV2ZW50IHtcbiAgICBvcmlnaW5hbDogS2V5Ym9hcmRFdmVudFxuICAgIGtleXN0cm9rZTogS2V5c3Ryb2tlXG59XG5cbmV4cG9ydCB0eXBlIEtleXN0cm9rZUFjdGl2YXRpb24gPSBFbGVtZW50SW5wdXQgfCBGb2N1c1N0YXRlIHwgT2JzZXJ2YWJsZTxFbGVtZW50SW5wdXQgfCBGb2N1c1N0YXRlIHwgYm9vbGVhbj5cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEtleXN0cm9rZVNlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICNkb2N1bWVudCA9IGluamVjdChET0NVTUVOVClcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgICByZWFkb25seSAja2V5RXZlbnQgPSB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHRoaXMuI2RvY3VtZW50LCBcImtleWRvd25cIiwgeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiBmYWxzZSB9KSxcbiAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLiNkb2N1bWVudCwgXCJrZXl1cFwiLCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGZhbHNlIH0pXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudC5kZWZhdWx0UHJldmVudGVkID09PSBmYWxzZSksXG4gICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgIClcbiAgICApXG5cbiAgICByZWFkb25seSAjZm9jdXNFdmVudCA9IHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuI2RvY3VtZW50LCBcImZvY3VzXCIsIHsgY2FwdHVyZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9KS5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuI2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKVxuICAgIClcblxuICAgIHdhdGNoKGFjdGl2YXRpb246IEtleXN0cm9rZUFjdGl2YXRpb24sIC4uLmtleXN0cm9rZXM6IEtleXN0cm9rZVtdKTogT2JzZXJ2YWJsZTxLZXlzdHJva2VFdmVudD4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKGRzdDogU3Vic2NyaWJlcjxLZXlzdHJva2VFdmVudD4pID0+XG4gICAgICAgICAgICB0aGlzLiN0cmlnZ2VyKGFjdGl2YXRpb24pXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChlbmFibGVkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2tleUV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkRnJvbUV2ZW50ID0ga2V5c3Ryb2tlSWQoZXZlbnRUb0tleXN0cm9rZShldmVudCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0ga2V5c3Ryb2tlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoa3MgPT4ga2V5c3Ryb2tlSWQoa3MpID09PSBpZEZyb21FdmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGtzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0cm9rZToga3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobWF0Y2hlcyA9PiBtYXRjaGVzLmxlbmd0aCA+IDApLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobWF0Y2hlcyA9PiBvZiguLi5tYXRjaGVzKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShkc3QpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjdHJpZ2dlcihhY3RpdmF0aW9uOiBLZXlzdHJva2VBY3RpdmF0aW9uKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgSFRNTEVsZW1lbnQ+IHtcbiAgICAgICAgaWYgKGlzRWxlbWVudElucHV0KGFjdGl2YXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZm9jdXNBY3RpdmF0aW9uKGNvZXJjZUVsZW1lbnQoYWN0aXZhdGlvbikpXG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aXZhdGlvbiBpbnN0YW5jZW9mIEZvY3VzU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uLm9yaWdpbiQucGlwZShtYXAob3JpZ2luID0+IG9yaWdpbiAhPSBudWxsKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tKGFjdGl2YXRpb24pLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRWxlbWVudElucHV0KHZhbHVlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEZvY3VzU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiN0cmlnZ2VyKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNmb2N1c0FjdGl2YXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZvY3VzRXZlbnQucGlwZShtYXAoZm9jdXNlZCA9PiBmb2N1c2VkID09PSBlbGVtZW50IHx8IGVsZW1lbnQuY29udGFpbnMoZm9jdXNlZCkpKVxuICAgIH1cbn1cblxuZnVuY3Rpb24ga2V5c3Ryb2tlSWQoa3M6IEtleXN0cm9rZSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcyA9IGtzLmtleVxuICAgIGlmIChrcy5zaGlmdCkge1xuICAgICAgICByZXMgKz0gXCIrc2hpZnRcIlxuICAgIH1cbiAgICBpZiAoa3MuY3RybCkge1xuICAgICAgICByZXMgKz0gXCIrY3RybFwiXG4gICAgfVxuICAgIGlmIChrcy5hbHQpIHtcbiAgICAgICAgcmVzICs9IFwiK2FsdFwiXG4gICAgfVxuICAgIHJlcyArPSBgJHtrcy5zdGF0ZX1gXG4gICAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBldmVudFRvS2V5c3Ryb2tlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogS2V5c3Ryb2tlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgc2hpZnQ6IGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICBjdHJsOiBldmVudC5jdHJsS2V5LFxuICAgICAgICBhbHQ6IGV2ZW50LmFsdEtleSxcbiAgICAgICAgc3RhdGU6IGV2ZW50LnR5cGUgPT09IFwia2V5dXBcIiA/IFwidXBcIiA6IFwiZG93blwiXG4gICAgfVxufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1dGlsLWFyaWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy9uZ3V0aWwtYXJpYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -1,41 +0,0 @@
1
- import { computed, Directive, effect, inject } from "@angular/core";
2
- import { coerceBoolAttr } from "@ngutil/common";
3
- import { UiState } from "./ui-state";
4
- import * as i0 from "@angular/core";
5
- export const NOTSET = Symbol("NOTSET");
6
- export class AbstractUiState {
7
- constructor(name) {
8
- this.name = name;
9
- this.state = inject(UiState);
10
- this.yes = computed(() => {
11
- const when = this.when();
12
- if (when !== NOTSET) {
13
- // TODO: add prefix if only provide loading, or simething simple selector
14
- return this.state.is(`${this.name}.self || (${when})`);
15
- }
16
- return this.state.is(this.name);
17
- });
18
- this.no = computed(() => !this.yes());
19
- effect(() => {
20
- const input = this.input();
21
- if (input !== NOTSET) {
22
- this.state.set(name, !!coerceBoolAttr(input));
23
- }
24
- }, { allowSignalWrites: true });
25
- }
26
- set(value, source) {
27
- this.state.set(this.name, value, source);
28
- }
29
- intercept(source) {
30
- return this.state.intercept(this.name, source);
31
- }
32
- wrap(observable, source) {
33
- return this.state.wrap(observable, this.name, source);
34
- }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: AbstractUiState, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
36
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: AbstractUiState, ngImport: i0 }); }
37
- }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: AbstractUiState, decorators: [{
39
- type: Directive
40
- }], ctorParameters: () => [{ type: undefined }] });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS9hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFBO0FBSTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFBOztBQUVwQyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBRzNDLE1BQU0sT0FBZ0IsZUFBZTtJQWdCakMsWUFBcUIsSUFBTztRQUFQLFNBQUksR0FBSixJQUFJLENBQUc7UUFmbkIsVUFBSyxHQUFlLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUtuQyxRQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDeEIsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLHlFQUF5RTtnQkFDekUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxHQUFHLENBQUMsQ0FBQTtZQUMxRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbkMsQ0FBQyxDQUFDLENBQUE7UUFDTyxPQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFHckMsTUFBTSxDQUNGLEdBQUcsRUFBRTtZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMxQixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUNqRCxDQUFDO1FBQ0wsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzlCLENBQUE7SUFDTCxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQWMsRUFBRSxNQUFjO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELElBQUksQ0FBSSxVQUF5QixFQUFFLE1BQWM7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN6RCxDQUFDOzhHQXRDaUIsZUFBZTtrR0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQURwQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIERpcmVjdGl2ZSwgZWZmZWN0LCBpbmplY3QsIFNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgY29lcmNlQm9vbEF0dHIgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBVaVN0YXRlIH0gZnJvbSBcIi4vdWktc3RhdGVcIlxuXG5leHBvcnQgY29uc3QgTk9UU0VUOiBhbnkgPSBTeW1ib2woXCJOT1RTRVRcIilcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVaVN0YXRlPE4gZXh0ZW5kcyBzdHJpbmc+IHtcbiAgICByZWFkb25seSBzdGF0ZTogVWlTdGF0ZTxOPiA9IGluamVjdChVaVN0YXRlKVxuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgaW5wdXQ6IFNpZ25hbDxib29sZWFuPlxuICAgIGFic3RyYWN0IHJlYWRvbmx5IHdoZW46IFNpZ25hbDxzdHJpbmc+XG5cbiAgICByZWFkb25seSB5ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdoZW4gPSB0aGlzLndoZW4oKVxuICAgICAgICBpZiAod2hlbiAhPT0gTk9UU0VUKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBhZGQgcHJlZml4IGlmIG9ubHkgcHJvdmlkZSBsb2FkaW5nLCBvciBzaW1ldGhpbmcgc2ltcGxlIHNlbGVjdG9yXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pcyhgJHt0aGlzLm5hbWV9LnNlbGYgfHwgKCR7d2hlbn0pYClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pcyh0aGlzLm5hbWUpXG4gICAgfSlcbiAgICByZWFkb25seSBubyA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLnllcygpKVxuXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgbmFtZTogTikge1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0KClcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgIT09IE5PVFNFVCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnNldChuYW1lLCAhIWNvZXJjZUJvb2xBdHRyKGlucHV0KSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBzZXQodmFsdWU6IGJvb2xlYW4sIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0KHRoaXMubmFtZSwgdmFsdWUsIHNvdXJjZSlcbiAgICB9XG5cbiAgICBpbnRlcmNlcHQoc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaW50ZXJjZXB0KHRoaXMubmFtZSwgc291cmNlKVxuICAgIH1cblxuICAgIHdyYXA8VD4ob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxUPiwgc291cmNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUud3JhcChvYnNlcnZhYmxlLCB0aGlzLm5hbWUsIHNvdXJjZSlcbiAgICB9XG59XG4iXX0=
@@ -1,27 +0,0 @@
1
- import { Directive, input } from "@angular/core";
2
- import { AbstractUiState, NOTSET } from "./abstract";
3
- import { UiState } from "./ui-state";
4
- import * as i0 from "@angular/core";
5
- export class BusyDirective extends AbstractUiState {
6
- constructor() {
7
- super("busy");
8
- this.input = input(NOTSET, { alias: "nuBusy" });
9
- this.when = input(NOTSET, { alias: "nuBusyWhen" });
10
- }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BusyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: BusyDirective, isStandalone: true, selector: "[nuBusy], [nuBusyWhen]", inputs: { input: { classPropertyName: "input", publicName: "nuBusy", isSignal: true, isRequired: false, transformFunction: null }, when: { classPropertyName: "when", publicName: "nuBusyWhen", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-busy": "yes() ? 'true' : 'false'", "attr.inert": "state.isInert() ? '' : null" } }, providers: [UiState], exportAs: ["busy"], usesInheritance: true, ngImport: i0 }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BusyDirective, decorators: [{
15
- type: Directive,
16
- args: [{
17
- selector: "[nuBusy], [nuBusyWhen]",
18
- exportAs: "busy",
19
- standalone: true,
20
- host: {
21
- "[attr.aria-busy]": "yes() ? 'true' : 'false'",
22
- "[attr.inert]": "state.isInert() ? '' : null"
23
- },
24
- providers: [UiState]
25
- }]
26
- }], ctorParameters: () => [] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzeS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hcmlhL3NyYy91aS1zdGF0ZS9idXN5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFBOztBQVlwQyxNQUFNLE9BQU8sYUFBYyxTQUFRLGVBQXVCO0lBSXREO1FBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBSlIsVUFBSyxHQUFHLEtBQUssQ0FBQyxNQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDckQsU0FBSSxHQUFHLEtBQUssQ0FBQyxNQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFJaEUsQ0FBQzs4R0FOUSxhQUFhO2tHQUFiLGFBQWEsMGJBRlgsQ0FBQyxPQUFPLENBQUM7OzJGQUVYLGFBQWE7a0JBVnpCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0Ysa0JBQWtCLEVBQUUsMEJBQTBCO3dCQUM5QyxjQUFjLEVBQUUsNkJBQTZCO3FCQUNoRDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgQWJzdHJhY3RVaVN0YXRlLCBOT1RTRVQgfSBmcm9tIFwiLi9hYnN0cmFjdFwiXG5pbXBvcnQgeyBVaVN0YXRlIH0gZnJvbSBcIi4vdWktc3RhdGVcIlxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbbnVCdXN5XSwgW251QnVzeVdoZW5dXCIsXG4gICAgZXhwb3J0QXM6IFwiYnVzeVwiLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDoge1xuICAgICAgICBcIlthdHRyLmFyaWEtYnVzeV1cIjogXCJ5ZXMoKSA/ICd0cnVlJyA6ICdmYWxzZSdcIixcbiAgICAgICAgXCJbYXR0ci5pbmVydF1cIjogXCJzdGF0ZS5pc0luZXJ0KCkgPyAnJyA6IG51bGxcIlxuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbVWlTdGF0ZV1cbn0pXG5leHBvcnQgY2xhc3MgQnVzeURpcmVjdGl2ZSBleHRlbmRzIEFic3RyYWN0VWlTdGF0ZTxcImJ1c3lcIj4ge1xuICAgIHJlYWRvbmx5IGlucHV0ID0gaW5wdXQoTk9UU0VUIGFzIGJvb2xlYW4sIHsgYWxpYXM6IFwibnVCdXN5XCIgfSlcbiAgICByZWFkb25seSB3aGVuID0gaW5wdXQoTk9UU0VUIGFzIHN0cmluZywgeyBhbGlhczogXCJudUJ1c3lXaGVuXCIgfSlcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcImJ1c3lcIilcbiAgICB9XG59XG4iXX0=
@@ -1,28 +0,0 @@
1
- import { Directive, input } from "@angular/core";
2
- import { AbstractUiState, NOTSET } from "./abstract";
3
- import { UiState } from "./ui-state";
4
- import * as i0 from "@angular/core";
5
- export class DisabledDirective extends AbstractUiState {
6
- constructor() {
7
- super("disabled");
8
- this.input = input(NOTSET, { alias: "nuDisabled" });
9
- this.when = input(NOTSET, { alias: "nuDisabledWhen" });
10
- }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DisabledDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.6", type: DisabledDirective, isStandalone: true, selector: "[nuDisabled], [nuDisabledWhen]", inputs: { input: { classPropertyName: "input", publicName: "nuDisabled", isSignal: true, isRequired: false, transformFunction: null }, when: { classPropertyName: "when", publicName: "nuDisabledWhen", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-disabled": "yes() ? 'true' : 'false'", "attr.disabled": "yes() ? '' : null", "attr.inert": "state.isInert() ? '' : null" } }, providers: [UiState], exportAs: ["disabled"], usesInheritance: true, ngImport: i0 }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DisabledDirective, decorators: [{
15
- type: Directive,
16
- args: [{
17
- selector: "[nuDisabled], [nuDisabledWhen]",
18
- exportAs: "disabled",
19
- standalone: true,
20
- host: {
21
- "[attr.aria-disabled]": "yes() ? 'true' : 'false'",
22
- "[attr.disabled]": "yes() ? '' : null",
23
- "[attr.inert]": "state.isInert() ? '' : null"
24
- },
25
- providers: [UiState]
26
- }]
27
- }], ctorParameters: () => [] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZWQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYXJpYS9zcmMvdWktc3RhdGUvZGlzYWJsZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7O0FBYXBDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUEyQjtJQUk5RDtRQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUpaLFVBQUssR0FBRyxLQUFLLENBQUMsTUFBaUIsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO1FBQ3pELFNBQUksR0FBRyxLQUFLLENBQUMsTUFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUE7SUFJcEUsQ0FBQzs4R0FOUSxpQkFBaUI7a0dBQWpCLGlCQUFpQixvZkFGZixDQUFDLE9BQU8sQ0FBQzs7MkZBRVgsaUJBQWlCO2tCQVg3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNGLHNCQUFzQixFQUFFLDBCQUEwQjt3QkFDbEQsaUJBQWlCLEVBQUUsbUJBQW1CO3dCQUN0QyxjQUFjLEVBQUUsNkJBQTZCO3FCQUNoRDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgQWJzdHJhY3RVaVN0YXRlLCBOT1RTRVQgfSBmcm9tIFwiLi9hYnN0cmFjdFwiXG5pbXBvcnQgeyBVaVN0YXRlIH0gZnJvbSBcIi4vdWktc3RhdGVcIlxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbbnVEaXNhYmxlZF0sIFtudURpc2FibGVkV2hlbl1cIixcbiAgICBleHBvcnRBczogXCJkaXNhYmxlZFwiLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDoge1xuICAgICAgICBcIlthdHRyLmFyaWEtZGlzYWJsZWRdXCI6IFwieWVzKCkgPyAndHJ1ZScgOiAnZmFsc2UnXCIsXG4gICAgICAgIFwiW2F0dHIuZGlzYWJsZWRdXCI6IFwieWVzKCkgPyAnJyA6IG51bGxcIixcbiAgICAgICAgXCJbYXR0ci5pbmVydF1cIjogXCJzdGF0ZS5pc0luZXJ0KCkgPyAnJyA6IG51bGxcIlxuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbVWlTdGF0ZV1cbn0pXG5leHBvcnQgY2xhc3MgRGlzYWJsZWREaXJlY3RpdmUgZXh0ZW5kcyBBYnN0cmFjdFVpU3RhdGU8XCJkaXNhYmxlZFwiPiB7XG4gICAgcmVhZG9ubHkgaW5wdXQgPSBpbnB1dChOT1RTRVQgYXMgYm9vbGVhbiwgeyBhbGlhczogXCJudURpc2FibGVkXCIgfSlcbiAgICByZWFkb25seSB3aGVuID0gaW5wdXQoTk9UU0VUIGFzIHN0cmluZywgeyBhbGlhczogXCJudURpc2FibGVkV2hlblwiIH0pXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJkaXNhYmxlZFwiKVxuICAgIH1cbn1cbiJdfQ==