@cuby-ui/cdk 0.0.487 → 0.0.489
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/constants/empty.d.ts +10 -0
- package/constants/handlers.d.ts +8 -0
- package/constants/index.d.ts +4 -0
- package/constants/svg-node-filter.d.ts +1 -0
- package/constants/units.d.ts +17 -0
- package/date-time/index.d.ts +1 -0
- package/date-time/time.d.ts +14 -0
- package/directives/active-zone/active-zone.directive.d.ts +22 -0
- package/directives/active-zone/index.d.ts +1 -0
- package/directives/auto-resizing.directive.d.ts +18 -0
- package/directives/click-outside.directive.d.ts +9 -0
- package/directives/content-editable-value-accessor.directive.d.ts +17 -0
- package/directives/dimensions-observer.directive.d.ts +13 -0
- package/directives/drag-drop/drag-drop.directive.d.ts +42 -0
- package/directives/drag-drop/drag-drop.options.d.ts +11 -0
- package/directives/drag-drop/drag-list.directive.d.ts +10 -0
- package/directives/drag-drop/drag-pointer.directive.d.ts +8 -0
- package/directives/drag-drop/index.d.ts +4 -0
- package/directives/element.directive.d.ts +8 -0
- package/directives/focus-trap.directive.d.ts +14 -0
- package/directives/handle-scroll.directive.d.ts +23 -0
- package/directives/hovered/hovered.directive.d.ts +7 -0
- package/directives/hovered/hovered.service.d.ts +12 -0
- package/directives/hovered/index.d.ts +2 -0
- package/directives/index.d.ts +17 -0
- package/directives/item.directive.d.ts +5 -0
- package/directives/ladder-list.directive.d.ts +13 -0
- package/directives/let.context.d.ts +9 -0
- package/directives/let.directive.d.ts +9 -0
- package/directives/target.directive.d.ts +14 -0
- package/directives/typed-template.directive.d.ts +13 -0
- package/directives/typed-template.options.d.ts +3 -0
- package/esm2022/constants/empty.mjs +24 -0
- package/esm2022/constants/handlers.mjs +11 -0
- package/esm2022/constants/index.mjs +5 -0
- package/esm2022/constants/svg-node-filter.mjs +6 -0
- package/esm2022/constants/units.mjs +64 -0
- package/esm2022/cuby-ui-cdk.mjs +5 -0
- package/esm2022/date-time/index.mjs +2 -0
- package/esm2022/date-time/time.mjs +72 -0
- package/esm2022/directives/active-zone/active-zone.directive.mjs +75 -0
- package/esm2022/directives/active-zone/index.mjs +2 -0
- package/esm2022/directives/auto-resizing.directive.mjs +64 -0
- package/esm2022/directives/click-outside.directive.mjs +29 -0
- package/esm2022/directives/content-editable-value-accessor.directive.mjs +44 -0
- package/esm2022/directives/dimensions-observer.directive.mjs +32 -0
- package/esm2022/directives/drag-drop/drag-drop.directive.mjs +184 -0
- package/esm2022/directives/drag-drop/drag-drop.options.mjs +2 -0
- package/esm2022/directives/drag-drop/drag-list.directive.mjs +22 -0
- package/esm2022/directives/drag-drop/drag-pointer.directive.mjs +20 -0
- package/esm2022/directives/drag-drop/index.mjs +4 -0
- package/esm2022/directives/element.directive.mjs +19 -0
- package/esm2022/directives/focus-trap.directive.mjs +50 -0
- package/esm2022/directives/handle-scroll.directive.mjs +81 -0
- package/esm2022/directives/hovered/hovered.directive.mjs +21 -0
- package/esm2022/directives/hovered/hovered.service.mjs +32 -0
- package/esm2022/directives/hovered/index.mjs +3 -0
- package/esm2022/directives/index.mjs +18 -0
- package/esm2022/directives/item.directive.mjs +14 -0
- package/esm2022/directives/ladder-list.directive.mjs +42 -0
- package/esm2022/directives/let.context.mjs +12 -0
- package/esm2022/directives/let.directive.mjs +23 -0
- package/esm2022/directives/target.directive.mjs +36 -0
- package/esm2022/directives/typed-template.directive.mjs +27 -0
- package/esm2022/directives/typed-template.options.mjs +2 -0
- package/esm2022/index.mjs +12 -0
- package/esm2022/interfaces/dimensions.mjs +2 -0
- package/esm2022/interfaces/index.mjs +4 -0
- package/esm2022/interfaces/on-change.mjs +2 -0
- package/esm2022/interfaces/on-touched.mjs +2 -0
- package/esm2022/models/consumption-units.mjs +2 -0
- package/esm2022/models/index.mjs +2 -0
- package/esm2022/observables/if-map.mjs +5 -0
- package/esm2022/observables/index.mjs +5 -0
- package/esm2022/observables/typed-from-event.mjs +9 -0
- package/esm2022/observables/watch.mjs +6 -0
- package/esm2022/observables/zone.mjs +34 -0
- package/esm2022/pipes/filter.pipe.mjs +17 -0
- package/esm2022/pipes/index.mjs +2 -0
- package/esm2022/services/consumption-units.service.mjs +67 -0
- package/esm2022/services/destroy.service.mjs +15 -0
- package/esm2022/services/id.service.mjs +21 -0
- package/esm2022/services/index.mjs +5 -0
- package/esm2022/services/popover.service.mjs +41 -0
- package/esm2022/tokens/active-element.mjs +52 -0
- package/esm2022/tokens/animation-frame.mjs +21 -0
- package/esm2022/tokens/environment.mjs +47 -0
- package/esm2022/tokens/history.mjs +5 -0
- package/esm2022/tokens/index.mjs +11 -0
- package/esm2022/tokens/local-storage.mjs +5 -0
- package/esm2022/tokens/navigator.mjs +6 -0
- package/esm2022/tokens/removed-element.mjs +19 -0
- package/esm2022/tokens/session-storage.mjs +5 -0
- package/esm2022/tokens/user-agent.mjs +6 -0
- package/esm2022/tokens/window.mjs +11 -0
- package/esm2022/types/context.mjs +2 -0
- package/esm2022/types/date-time.mjs +2 -0
- package/esm2022/types/handler.mjs +2 -0
- package/esm2022/types/index.mjs +9 -0
- package/esm2022/types/input-type.mjs +2 -0
- package/esm2022/types/mapper.mjs +2 -0
- package/esm2022/types/matcher.mjs +2 -0
- package/esm2022/types/nullable.mjs +2 -0
- package/esm2022/types/value-of.mjs +2 -0
- package/esm2022/utils/dom/contains-or-after.mjs +9 -0
- package/esm2022/utils/dom/element-checks.mjs +20 -0
- package/esm2022/utils/dom/get-actual-target.mjs +7 -0
- package/esm2022/utils/dom/get-document-or-shadow-root.mjs +6 -0
- package/esm2022/utils/dom/get-element-obscurers.mjs +42 -0
- package/esm2022/utils/dom/index.mjs +8 -0
- package/esm2022/utils/dom/inject-element.mjs +5 -0
- package/esm2022/utils/dom/point-to-client-rect.mjs +17 -0
- package/esm2022/utils/files/files.uploader.mjs +19 -0
- package/esm2022/utils/files/index.mjs +3 -0
- package/esm2022/utils/files/take-capture-from-video.mjs +25 -0
- package/esm2022/utils/focus/blur-native-focused.mjs +9 -0
- package/esm2022/utils/focus/get-closest-focusable.mjs +22 -0
- package/esm2022/utils/focus/get-native-focused.mjs +11 -0
- package/esm2022/utils/focus/index.mjs +7 -0
- package/esm2022/utils/focus/is-native-focused.mjs +13 -0
- package/esm2022/utils/focus/is-native-keyboard-focusable.mjs +26 -0
- package/esm2022/utils/focus/is-native-mouse-focusable.mjs +6 -0
- package/esm2022/utils/index.mjs +8 -0
- package/esm2022/utils/math/clamp.mjs +11 -0
- package/esm2022/utils/math/index.mjs +2 -0
- package/esm2022/utils/miscellaneous/array-remove.mjs +4 -0
- package/esm2022/utils/miscellaneous/index.mjs +6 -0
- package/esm2022/utils/miscellaneous/is-present.mjs +4 -0
- package/esm2022/utils/miscellaneous/move-item-in-array.mjs +10 -0
- package/esm2022/utils/miscellaneous/pure.mjs +81 -0
- package/esm2022/utils/miscellaneous/px.mjs +7 -0
- package/esm2022/utils/platform/index.mjs +2 -0
- package/esm2022/utils/platform/is-ios.mjs +6 -0
- package/esm2022/utils/token/create-token.mjs +8 -0
- package/esm2022/utils/token/index.mjs +3 -0
- package/esm2022/utils/token/provide.mjs +4 -0
- package/fesm2022/cuby-ui-cdk.mjs +1644 -0
- package/fesm2022/cuby-ui-cdk.mjs.map +1 -0
- package/index.d.ts +11 -0
- package/interfaces/dimensions.d.ts +4 -0
- package/interfaces/index.d.ts +3 -0
- package/interfaces/on-change.d.ts +3 -0
- package/interfaces/on-touched.d.ts +3 -0
- package/models/consumption-units.d.ts +14 -0
- package/models/index.d.ts +1 -0
- package/observables/if-map.d.ts +3 -0
- package/observables/index.d.ts +4 -0
- package/observables/typed-from-event.d.ts +16 -0
- package/observables/watch.d.ts +3 -0
- package/observables/zone.d.ts +7 -0
- package/package.json +1 -4
- package/pipes/filter.pipe.d.ts +8 -0
- package/pipes/index.d.ts +1 -0
- package/services/consumption-units.service.d.ts +13 -0
- package/services/destroy.service.d.ts +8 -0
- package/services/id.service.d.ts +8 -0
- package/services/index.d.ts +4 -0
- package/services/popover.service.d.ts +23 -0
- package/tokens/active-element.d.ts +5 -0
- package/tokens/animation-frame.d.ts +3 -0
- package/tokens/environment.d.ts +19 -0
- package/tokens/history.d.ts +1 -0
- package/tokens/index.d.ts +10 -0
- package/tokens/local-storage.d.ts +1 -0
- package/tokens/navigator.d.ts +2 -0
- package/tokens/removed-element.d.ts +4 -0
- package/tokens/session-storage.d.ts +1 -0
- package/tokens/user-agent.d.ts +2 -0
- package/tokens/window.d.ts +1 -0
- package/types/context.d.ts +3 -0
- package/types/date-time.d.ts +1 -0
- package/types/handler.d.ts +4 -0
- package/types/index.d.ts +8 -0
- package/types/input-type.d.ts +1 -0
- package/types/mapper.d.ts +1 -0
- package/types/matcher.d.ts +2 -0
- package/types/nullable.d.ts +1 -0
- package/types/value-of.d.ts +1 -0
- package/utils/dom/contains-or-after.d.ts +1 -0
- package/utils/dom/element-checks.d.ts +6 -0
- package/utils/dom/get-actual-target.d.ts +4 -0
- package/utils/dom/get-document-or-shadow-root.d.ts +1 -0
- package/utils/dom/get-element-obscurers.d.ts +9 -0
- package/utils/dom/index.d.ts +7 -0
- package/utils/dom/inject-element.d.ts +1 -0
- package/utils/dom/point-to-client-rect.d.ts +1 -0
- package/utils/files/files.uploader.d.ts +5 -0
- package/utils/files/index.d.ts +2 -0
- package/utils/files/take-capture-from-video.d.ts +1 -0
- package/utils/focus/blur-native-focused.d.ts +1 -0
- package/utils/focus/get-closest-focusable.d.ts +7 -0
- package/utils/focus/get-native-focused.d.ts +1 -0
- package/utils/focus/index.d.ts +6 -0
- package/utils/focus/is-native-focused.d.ts +9 -0
- package/utils/focus/is-native-keyboard-focusable.d.ts +1 -0
- package/utils/focus/is-native-mouse-focusable.d.ts +1 -0
- package/utils/index.d.ts +7 -0
- package/utils/math/clamp.d.ts +8 -0
- package/utils/math/index.d.ts +1 -0
- package/utils/miscellaneous/array-remove.d.ts +1 -0
- package/utils/miscellaneous/index.d.ts +5 -0
- package/utils/miscellaneous/is-present.d.ts +1 -0
- package/utils/miscellaneous/move-item-in-array.d.ts +1 -0
- package/utils/miscellaneous/pure.d.ts +21 -0
- package/utils/miscellaneous/px.d.ts +4 -0
- package/utils/platform/index.d.ts +1 -0
- package/utils/platform/is-ios.d.ts +3 -0
- package/utils/token/create-token.d.ts +3 -0
- package/utils/token/index.d.ts +2 -0
- package/utils/token/provide.d.ts +3 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export class CuiTime {
|
|
2
|
+
constructor(hours, minutes, seconds = 0, ms = 0) {
|
|
3
|
+
this.hours = hours;
|
|
4
|
+
this.minutes = minutes;
|
|
5
|
+
this.seconds = seconds;
|
|
6
|
+
this.ms = ms;
|
|
7
|
+
}
|
|
8
|
+
static fromString(time) {
|
|
9
|
+
const hours = this.parseHours(time);
|
|
10
|
+
const minutes = Number(time.slice(3, 5)) || 0;
|
|
11
|
+
const seconds = Number(time.slice(6, 8)) || 0;
|
|
12
|
+
const ms = Number(time.slice(9, 12)) || 0;
|
|
13
|
+
return new CuiTime(hours, minutes, seconds, ms);
|
|
14
|
+
}
|
|
15
|
+
static fromPT(time) {
|
|
16
|
+
let duration = time.trim().toUpperCase();
|
|
17
|
+
if (!duration.startsWith('P')) {
|
|
18
|
+
throw new Error('Invalid PT format: does not start with P');
|
|
19
|
+
}
|
|
20
|
+
duration = duration.substring(1);
|
|
21
|
+
if (duration.startsWith('T')) {
|
|
22
|
+
duration = duration.substring(1);
|
|
23
|
+
}
|
|
24
|
+
const regex = /(\d+(\.\d+)?)([HMS])/g;
|
|
25
|
+
let match;
|
|
26
|
+
let hours = 0, minutes = 0, seconds = 0, ms = 0;
|
|
27
|
+
while ((match = regex.exec(duration)) !== null) {
|
|
28
|
+
const value = parseFloat(match[1]);
|
|
29
|
+
const unit = match[3];
|
|
30
|
+
if (unit === 'H') {
|
|
31
|
+
hours = value;
|
|
32
|
+
}
|
|
33
|
+
else if (unit === 'M') {
|
|
34
|
+
minutes = value;
|
|
35
|
+
}
|
|
36
|
+
else if (unit === 'S') {
|
|
37
|
+
seconds = Math.floor(value);
|
|
38
|
+
ms = Math.round((value - seconds) * 1000);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return new CuiTime(hours, minutes, seconds, ms);
|
|
42
|
+
}
|
|
43
|
+
static parseHours(time) {
|
|
44
|
+
return Number(time.slice(0, 2));
|
|
45
|
+
}
|
|
46
|
+
toString(mode) {
|
|
47
|
+
const needAddMs = mode?.startsWith('HH:MM:SS.MSS') || (!mode && this.ms > 0);
|
|
48
|
+
const needAddSeconds = needAddMs || mode?.startsWith('HH:MM:SS') || (!mode && this.seconds > 0);
|
|
49
|
+
const hhMm = `${this.formatTime(this.hours)}:${this.formatTime(this.minutes)}`;
|
|
50
|
+
const ss = needAddSeconds ? `:${this.formatTime(this.seconds)}` : '';
|
|
51
|
+
const mss = needAddMs ? `.${this.formatTime(this.ms, 3)}` : '';
|
|
52
|
+
return `${hhMm}${ss}${mss}`;
|
|
53
|
+
}
|
|
54
|
+
toPT(mode) {
|
|
55
|
+
let duration = 'PT';
|
|
56
|
+
if (this.hours !== 0) {
|
|
57
|
+
duration += `${this.hours}H`;
|
|
58
|
+
}
|
|
59
|
+
if (this.minutes !== 0) {
|
|
60
|
+
duration += `${this.minutes}M`;
|
|
61
|
+
}
|
|
62
|
+
const totalSeconds = this.seconds + this.ms / 1000;
|
|
63
|
+
if (totalSeconds !== 0 || duration === 'PT') {
|
|
64
|
+
duration += `${parseFloat(totalSeconds.toFixed(3))}S`;
|
|
65
|
+
}
|
|
66
|
+
return duration;
|
|
67
|
+
}
|
|
68
|
+
formatTime(time, digits = 2) {
|
|
69
|
+
return String(time).padStart(digits, '0');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kYXRlLXRpbWUvdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sT0FBTztJQUNoQixZQUNvQixLQUFhLEVBQ2IsT0FBZSxFQUNmLFVBQVUsQ0FBQyxFQUNYLEtBQUssQ0FBQztRQUhOLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBSTtRQUNYLE9BQUUsR0FBRixFQUFFLENBQUk7SUFDdkIsQ0FBQztJQUVHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFDLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUM3QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxHQUFHLENBQUMsRUFDVCxPQUFPLEdBQUcsQ0FBQyxFQUNYLE9BQU8sR0FBRyxDQUFDLEVBQ1gsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVYLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2YsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNsQixDQUFDO2lCQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNsQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBa0I7UUFDOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0UsTUFBTSxjQUFjLEdBQUcsU0FBUyxJQUFJLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMvRSxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRS9ELE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxJQUFJLENBQUMsSUFBa0I7UUFDMUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUM7UUFDbkMsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFbkQsSUFBSSxZQUFZLEtBQUssQ0FBQyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxRQUFRLElBQUksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDMUQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWSxFQUFFLE1BQU0sR0FBRyxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDdWlUaW1lTW9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEN1aVRpbWUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaG91cnM6IG51bWJlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IG1pbnV0ZXM6IG51bWJlcixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHNlY29uZHMgPSAwLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbXMgPSAwXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nKHRpbWU6IHN0cmluZyk6IEN1aVRpbWUge1xuICAgICAgICBjb25zdCBob3VycyA9IHRoaXMucGFyc2VIb3Vycyh0aW1lKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE51bWJlcih0aW1lLnNsaWNlKDMsIDUpKSB8fCAwO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHRpbWUuc2xpY2UoNiwgOCkpIHx8IDA7XG4gICAgICAgIGNvbnN0IG1zID0gTnVtYmVyKHRpbWUuc2xpY2UoOSwgMTIpKSB8fCAwO1xuXG4gICAgICAgIHJldHVybiBuZXcgQ3VpVGltZShob3VycywgbWludXRlcywgc2Vjb25kcywgbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVBUKHRpbWU6IHN0cmluZyk6IEN1aVRpbWUge1xuICAgICAgICBsZXQgZHVyYXRpb24gPSB0aW1lLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGlmICghZHVyYXRpb24uc3RhcnRzV2l0aCgnUCcpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUFQgZm9ybWF0OiBkb2VzIG5vdCBzdGFydCB3aXRoIFAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24uc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgIGlmIChkdXJhdGlvbi5zdGFydHNXaXRoKCdUJykpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24uc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVnZXggPSAvKFxcZCsoXFwuXFxkKyk/KShbSE1TXSkvZztcbiAgICAgICAgbGV0IG1hdGNoO1xuICAgICAgICBsZXQgaG91cnMgPSAwLFxuICAgICAgICAgICAgbWludXRlcyA9IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gMCxcbiAgICAgICAgICAgIG1zID0gMDtcblxuICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhkdXJhdGlvbikpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgICAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoWzNdO1xuXG4gICAgICAgICAgICBpZiAodW5pdCA9PT0gJ0gnKSB7XG4gICAgICAgICAgICAgICAgaG91cnMgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gJ00nKSB7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1bml0ID09PSAnUycpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5mbG9vcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbXMgPSBNYXRoLnJvdW5kKCh2YWx1ZSAtIHNlY29uZHMpICogMTAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEN1aVRpbWUoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBwYXJzZUhvdXJzKHRpbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBOdW1iZXIodGltZS5zbGljZSgwLCAyKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKG1vZGU/OiBDdWlUaW1lTW9kZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG5lZWRBZGRNcyA9IG1vZGU/LnN0YXJ0c1dpdGgoJ0hIOk1NOlNTLk1TUycpIHx8ICghbW9kZSAmJiB0aGlzLm1zID4gMCk7XG4gICAgICAgIGNvbnN0IG5lZWRBZGRTZWNvbmRzID0gbmVlZEFkZE1zIHx8IG1vZGU/LnN0YXJ0c1dpdGgoJ0hIOk1NOlNTJykgfHwgKCFtb2RlICYmIHRoaXMuc2Vjb25kcyA+IDApO1xuICAgICAgICBjb25zdCBoaE1tID0gYCR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuaG91cnMpfToke3RoaXMuZm9ybWF0VGltZSh0aGlzLm1pbnV0ZXMpfWA7XG4gICAgICAgIGNvbnN0IHNzID0gbmVlZEFkZFNlY29uZHMgPyBgOiR7dGhpcy5mb3JtYXRUaW1lKHRoaXMuc2Vjb25kcyl9YCA6ICcnO1xuICAgICAgICBjb25zdCBtc3MgPSBuZWVkQWRkTXMgPyBgLiR7dGhpcy5mb3JtYXRUaW1lKHRoaXMubXMsIDMpfWAgOiAnJztcblxuICAgICAgICByZXR1cm4gYCR7aGhNbX0ke3NzfSR7bXNzfWA7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUFQobW9kZT86IEN1aVRpbWVNb2RlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gJ1BUJztcbiAgICAgICAgaWYgKHRoaXMuaG91cnMgIT09IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uICs9IGAke3RoaXMuaG91cnN9SGA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW51dGVzICE9PSAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiArPSBgJHt0aGlzLm1pbnV0ZXN9TWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbFNlY29uZHMgPSB0aGlzLnNlY29uZHMgKyB0aGlzLm1zIC8gMTAwMDtcblxuICAgICAgICBpZiAodG90YWxTZWNvbmRzICE9PSAwIHx8IGR1cmF0aW9uID09PSAnUFQnKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiArPSBgJHtwYXJzZUZsb2F0KHRvdGFsU2Vjb25kcy50b0ZpeGVkKDMpKX1TYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdFRpbWUodGltZTogbnVtYmVyLCBkaWdpdHMgPSAyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyh0aW1lKS5wYWRTdGFydChkaWdpdHMsICcwJyk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Directive, inject, Input, NgZone, Output } from '@angular/core';
|
|
3
|
+
import { NgControl } from '@angular/forms';
|
|
4
|
+
import { cuiZoneOptimized } from '../../observables';
|
|
5
|
+
import { CUI_ACTIVE_ELEMENT } from '../../tokens';
|
|
6
|
+
import { cuiArrayRemove, cuiInjectElement, cuiPure } from '../../utils';
|
|
7
|
+
import { distinctUntilChanged, map, skip, startWith, tap } from 'rxjs';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class CuiActiveZone {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.control = inject(NgControl, { self: true, optional: true });
|
|
12
|
+
this.active$ = inject(CUI_ACTIVE_ELEMENT);
|
|
13
|
+
this.zone = inject(NgZone);
|
|
14
|
+
this.el = cuiInjectElement();
|
|
15
|
+
this.cuiActiveZoneParent = null;
|
|
16
|
+
this.subActiveZones = [];
|
|
17
|
+
this.directParentActiveZone = inject(CuiActiveZone, {
|
|
18
|
+
skipSelf: true,
|
|
19
|
+
optional: true
|
|
20
|
+
});
|
|
21
|
+
this.cuiActiveZoneChange = this.active$.pipe(map((element) => !!element && this.contains(element)), startWith(false), distinctUntilChanged(), skip(1), tap((active) => {
|
|
22
|
+
if (!active && typeof this.control?.valueAccessor.onTouched === 'function') {
|
|
23
|
+
this.control.valueAccessor.onTouched();
|
|
24
|
+
}
|
|
25
|
+
}), cuiZoneOptimized(this.zone));
|
|
26
|
+
this.directParentActiveZone?.addSubActiveZone(this);
|
|
27
|
+
}
|
|
28
|
+
set cuiActiveZoneParentSetter(zone) {
|
|
29
|
+
this.setZone(zone);
|
|
30
|
+
}
|
|
31
|
+
ngOnDestroy() {
|
|
32
|
+
this.directParentActiveZone?.removeSubActiveZone(this);
|
|
33
|
+
this.cuiActiveZoneParent?.removeSubActiveZone(this);
|
|
34
|
+
}
|
|
35
|
+
contains(node) {
|
|
36
|
+
return (this.el.contains(node) ||
|
|
37
|
+
this.subActiveZones.some((item, index, array) => array.indexOf(item) === index && item.contains(node)));
|
|
38
|
+
}
|
|
39
|
+
setZone(zone) {
|
|
40
|
+
this.cuiActiveZoneParent?.removeSubActiveZone(this);
|
|
41
|
+
zone?.addSubActiveZone(this);
|
|
42
|
+
this.cuiActiveZoneParent = zone;
|
|
43
|
+
}
|
|
44
|
+
addSubActiveZone(activeZone) {
|
|
45
|
+
this.subActiveZones = [...this.subActiveZones, activeZone];
|
|
46
|
+
}
|
|
47
|
+
removeSubActiveZone(activeZone) {
|
|
48
|
+
this.subActiveZones = cuiArrayRemove(this.subActiveZones, this.subActiveZones.indexOf(activeZone));
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiActiveZone, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
51
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiActiveZone, isStandalone: true, selector: "[cuiActiveZone]:not(ng-container), [cuiActiveZoneChange]:not(ng-container), [cuiActiveZoneParent]:not(ng-container)", inputs: { cuiActiveZoneParentSetter: ["cuiActiveZoneParent", "cuiActiveZoneParentSetter"] }, outputs: { cuiActiveZoneChange: "cuiActiveZoneChange" }, host: { listeners: { "document:mousedown.silent": "(0)" } }, exportAs: ["cuiActiveZone"], ngImport: i0 }); }
|
|
52
|
+
}
|
|
53
|
+
__decorate([
|
|
54
|
+
cuiPure,
|
|
55
|
+
__metadata("design:type", Function),
|
|
56
|
+
__metadata("design:paramtypes", [Object]),
|
|
57
|
+
__metadata("design:returntype", void 0)
|
|
58
|
+
], CuiActiveZone.prototype, "setZone", null);
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiActiveZone, decorators: [{
|
|
60
|
+
type: Directive,
|
|
61
|
+
args: [{
|
|
62
|
+
standalone: true,
|
|
63
|
+
selector: '[cuiActiveZone]:not(ng-container), [cuiActiveZoneChange]:not(ng-container), [cuiActiveZoneParent]:not(ng-container)',
|
|
64
|
+
exportAs: 'cuiActiveZone',
|
|
65
|
+
host: {
|
|
66
|
+
'(document:mousedown.silent)': '(0)'
|
|
67
|
+
}
|
|
68
|
+
}]
|
|
69
|
+
}], ctorParameters: () => [], propDecorators: { cuiActiveZoneChange: [{
|
|
70
|
+
type: Output
|
|
71
|
+
}], cuiActiveZoneParentSetter: [{
|
|
72
|
+
type: Input,
|
|
73
|
+
args: ['cuiActiveZoneParent']
|
|
74
|
+
}], setZone: [] } });
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLXpvbmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RpcmVjdGl2ZXMvYWN0aXZlLXpvbmUvYWN0aXZlLXpvbmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBV3ZFLE1BQU0sT0FBTyxhQUFhO0lBMEJ0QjtRQXpCaUIsWUFBTyxHQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLFlBQU8sR0FBRyxNQUFNLENBQTZCLGtCQUFrQixDQUFDLENBQUM7UUFDakUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqQyx3QkFBbUIsR0FBeUIsSUFBSSxDQUFDO1FBQ2pELG1CQUFjLEdBQTZCLEVBQUUsQ0FBQztRQUNyQywyQkFBc0IsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQzVELFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBR2Esd0JBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3JELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFDaEIsb0JBQW9CLEVBQUUsRUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDOUIsQ0FBQztRQUdFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFDVyx5QkFBeUIsQ0FBQyxJQUEwQjtRQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVU7UUFDdEIsT0FBTyxDQUNILElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pHLENBQUM7SUFDTixDQUFDO0lBR08sT0FBTyxDQUFDLElBQTBCO1FBQ3RDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsVUFBeUI7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsVUFBeUI7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7K0dBNURRLGFBQWE7bUdBQWIsYUFBYTs7QUFnRGQ7SUFEUCxPQUFPOzs7OzRDQUtQOzRGQXBEUSxhQUFhO2tCQVR6QixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQ0oscUhBQXFIO29CQUN6SCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFO3dCQUNGLDZCQUE2QixFQUFFLEtBQUs7cUJBQ3ZDO2lCQUNKO3dEQWNtQixtQkFBbUI7c0JBRGxDLE1BQU07Z0JBbUJJLHlCQUF5QjtzQkFEbkMsS0FBSzt1QkFBQyxxQkFBcUI7Z0JBa0JwQixPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgTmdab25lLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGN1aVpvbmVPcHRpbWl6ZWQgfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBDVUlfQUNUSVZFX0VMRU1FTlQgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgY3VpQXJyYXlSZW1vdmUsIGN1aUluamVjdEVsZW1lbnQsIGN1aVB1cmUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNraXAsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6XG4gICAgICAgICdbY3VpQWN0aXZlWm9uZV06bm90KG5nLWNvbnRhaW5lciksIFtjdWlBY3RpdmVab25lQ2hhbmdlXTpub3QobmctY29udGFpbmVyKSwgW2N1aUFjdGl2ZVpvbmVQYXJlbnRdOm5vdChuZy1jb250YWluZXIpJyxcbiAgICBleHBvcnRBczogJ2N1aUFjdGl2ZVpvbmUnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhkb2N1bWVudDptb3VzZWRvd24uc2lsZW50KSc6ICcoMCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBDdWlBY3RpdmVab25lIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2w6IGFueSA9IGluamVjdChOZ0NvbnRyb2wsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmUkID0gaW5qZWN0PE9ic2VydmFibGU8RWxlbWVudCB8IG51bGw+PihDVUlfQUNUSVZFX0VMRU1FTlQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSBjdWlJbmplY3RFbGVtZW50KCk7XG4gICAgcHJpdmF0ZSBjdWlBY3RpdmVab25lUGFyZW50OiBDdWlBY3RpdmVab25lIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBzdWJBY3RpdmVab25lczogcmVhZG9ubHkgQ3VpQWN0aXZlWm9uZVtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3RQYXJlbnRBY3RpdmVab25lID0gaW5qZWN0KEN1aUFjdGl2ZVpvbmUsIHtcbiAgICAgICAgc2tpcFNlbGY6IHRydWUsXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3VpQWN0aXZlWm9uZUNoYW5nZSA9IHRoaXMuYWN0aXZlJC5waXBlKFxuICAgICAgICBtYXAoKGVsZW1lbnQpID0+ICEhZWxlbWVudCAmJiB0aGlzLmNvbnRhaW5zKGVsZW1lbnQpKSxcbiAgICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgdGFwKChhY3RpdmUpID0+IHtcbiAgICAgICAgICAgIGlmICghYWN0aXZlICYmIHR5cGVvZiB0aGlzLmNvbnRyb2w/LnZhbHVlQWNjZXNzb3Iub25Ub3VjaGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3Iub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjdWlab25lT3B0aW1pemVkKHRoaXMuem9uZSlcbiAgICApO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0UGFyZW50QWN0aXZlWm9uZT8uYWRkU3ViQWN0aXZlWm9uZSh0aGlzKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2N1aUFjdGl2ZVpvbmVQYXJlbnQnKVxuICAgIHB1YmxpYyBzZXQgY3VpQWN0aXZlWm9uZVBhcmVudFNldHRlcih6b25lOiBDdWlBY3RpdmVab25lIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnNldFpvbmUoem9uZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpcmVjdFBhcmVudEFjdGl2ZVpvbmU/LnJlbW92ZVN1YkFjdGl2ZVpvbmUodGhpcyk7XG4gICAgICAgIHRoaXMuY3VpQWN0aXZlWm9uZVBhcmVudD8ucmVtb3ZlU3ViQWN0aXZlWm9uZSh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGFpbnMobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5lbC5jb250YWlucyhub2RlKSB8fFxuICAgICAgICAgICAgdGhpcy5zdWJBY3RpdmVab25lcy5zb21lKChpdGVtLCBpbmRleCwgYXJyYXkpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4ICYmIGl0ZW0uY29udGFpbnMobm9kZSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQGN1aVB1cmVcbiAgICBwcml2YXRlIHNldFpvbmUoem9uZTogQ3VpQWN0aXZlWm9uZSB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdWlBY3RpdmVab25lUGFyZW50Py5yZW1vdmVTdWJBY3RpdmVab25lKHRoaXMpO1xuICAgICAgICB6b25lPy5hZGRTdWJBY3RpdmVab25lKHRoaXMpO1xuICAgICAgICB0aGlzLmN1aUFjdGl2ZVpvbmVQYXJlbnQgPSB6b25lO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU3ViQWN0aXZlWm9uZShhY3RpdmVab25lOiBDdWlBY3RpdmVab25lKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3ViQWN0aXZlWm9uZXMgPSBbLi4udGhpcy5zdWJBY3RpdmVab25lcywgYWN0aXZlWm9uZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTdWJBY3RpdmVab25lKGFjdGl2ZVpvbmU6IEN1aUFjdGl2ZVpvbmUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJBY3RpdmVab25lcyA9IGN1aUFycmF5UmVtb3ZlKHRoaXMuc3ViQWN0aXZlWm9uZXMsIHRoaXMuc3ViQWN0aXZlWm9uZXMuaW5kZXhPZihhY3RpdmVab25lKSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './active-zone.directive';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY3RpdmUtem9uZS5kaXJlY3RpdmUnO1xuIl19
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Directive, ElementRef, HostListener, inject } from '@angular/core';
|
|
2
|
+
import { NgControl, NgModel } from '@angular/forms';
|
|
3
|
+
import { takeUntil } from 'rxjs';
|
|
4
|
+
import { CUI_WINDOW } from '../tokens';
|
|
5
|
+
import { CuiDestroyService } from '../services';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class CuiAutoResizingDirective {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.window = inject(CUI_WINDOW);
|
|
10
|
+
this.element = inject(ElementRef).nativeElement;
|
|
11
|
+
this.ngControl = inject(NgControl, { self: true, optional: true });
|
|
12
|
+
this.ngModel = inject(NgModel, { self: true, optional: true });
|
|
13
|
+
this.destroy$ = inject(CuiDestroyService, { self: true });
|
|
14
|
+
this.elementStyles = this.element.style;
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
this.initNgControlValueChangeSubscription();
|
|
18
|
+
this.initNgModelValueChangeSubscription();
|
|
19
|
+
}
|
|
20
|
+
ngAfterViewChecked() {
|
|
21
|
+
this.resize();
|
|
22
|
+
}
|
|
23
|
+
onInput() {
|
|
24
|
+
this.resize();
|
|
25
|
+
}
|
|
26
|
+
initNgControlValueChangeSubscription() {
|
|
27
|
+
if (!this.ngControl) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.ngControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(this.resize.bind(this));
|
|
31
|
+
}
|
|
32
|
+
initNgModelValueChangeSubscription() {
|
|
33
|
+
if (!this.ngModel) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.ngModel.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(this.resize.bind(this));
|
|
37
|
+
}
|
|
38
|
+
resize() {
|
|
39
|
+
const { maxHeight: computedMaxHeight, borderTopWidth, borderBottomWidth } = this.window.getComputedStyle(this.element);
|
|
40
|
+
this.elementStyles.height = 'auto';
|
|
41
|
+
this.elementStyles.height =
|
|
42
|
+
this.element.scrollHeight + parseFloat(borderTopWidth) + parseFloat(borderBottomWidth) + 'px';
|
|
43
|
+
if (parseFloat(this.element.style.height) < parseFloat(computedMaxHeight)) {
|
|
44
|
+
this.elementStyles.overflow = 'hidden';
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.elementStyles.overflowY = 'scroll';
|
|
48
|
+
this.elementStyles.height = computedMaxHeight;
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiAutoResizingDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
51
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiAutoResizingDirective, isStandalone: true, selector: "textarea[cuiAutoResizing]", host: { listeners: { "input": "onInput()" } }, providers: [CuiDestroyService], ngImport: i0 }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiAutoResizingDirective, decorators: [{
|
|
54
|
+
type: Directive,
|
|
55
|
+
args: [{
|
|
56
|
+
standalone: true,
|
|
57
|
+
selector: 'textarea[cuiAutoResizing]',
|
|
58
|
+
providers: [CuiDestroyService]
|
|
59
|
+
}]
|
|
60
|
+
}], propDecorators: { onInput: [{
|
|
61
|
+
type: HostListener,
|
|
62
|
+
args: ['input']
|
|
63
|
+
}] } });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1yZXNpemluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9hdXRvLXJlc2l6aW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFPaEQsTUFBTSxPQUFPLHdCQUF3QjtJQUxyQztRQU1xQixXQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBNEIsQ0FBQztRQUMxRCxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFELGFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVyRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0tBb0R2RDtJQWxEVSxRQUFRO1FBQ1gsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUdTLE9BQU87UUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVPLG9DQUFvQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRU8sa0NBQWtDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFTyxNQUFNO1FBQ1YsTUFBTSxFQUNGLFNBQVMsRUFBRSxpQkFBaUIsRUFDNUIsY0FBYyxFQUNkLGlCQUFpQixFQUNwQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVsRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUV2QyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztJQUNsRCxDQUFDOytHQTFEUSx3QkFBd0I7bUdBQXhCLHdCQUF3Qix1SEFGdEIsQ0FBQyxpQkFBaUIsQ0FBQzs7NEZBRXJCLHdCQUF3QjtrQkFMcEMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQ2pDOzhCQW9CYSxPQUFPO3NCQURoQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFmdGVyVmlld0NoZWNrZWQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENVSV9XSU5ET1cgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgQ3VpRGVzdHJveVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0ZXh0YXJlYVtjdWlBdXRvUmVzaXppbmddJyxcbiAgICBwcm92aWRlcnM6IFtDdWlEZXN0cm95U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ3VpQXV0b1Jlc2l6aW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChDVUlfV0lORE9XKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nQ29udHJvbCA9IGluamVjdChOZ0NvbnRyb2wsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ01vZGVsID0gaW5qZWN0KE5nTW9kZWwsIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IGluamVjdChDdWlEZXN0cm95U2VydmljZSwgeyBzZWxmOiB0cnVlIH0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50U3R5bGVzID0gdGhpcy5lbGVtZW50LnN0eWxlO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXROZ0NvbnRyb2xWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmluaXROZ01vZGVsVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgICBwcm90ZWN0ZWQgb25JbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXROZ0NvbnRyb2xWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzIS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHRoaXMucmVzaXplLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE5nTW9kZWxWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5nTW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmdNb2RlbC52YWx1ZUNoYW5nZXMhLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodGhpcy5yZXNpemUuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1heEhlaWdodDogY29tcHV0ZWRNYXhIZWlnaHQsXG4gICAgICAgICAgICBib3JkZXJUb3BXaWR0aCxcbiAgICAgICAgICAgIGJvcmRlckJvdHRvbVdpZHRoXG4gICAgICAgIH0gPSB0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLmhlaWdodCA9XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgcGFyc2VGbG9hdChib3JkZXJUb3BXaWR0aCkgKyBwYXJzZUZsb2F0KGJvcmRlckJvdHRvbVdpZHRoKSArICdweCc7XG5cbiAgICAgICAgaWYgKHBhcnNlRmxvYXQodGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCkgPCBwYXJzZUZsb2F0KGNvbXB1dGVkTWF4SGVpZ2h0KSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWxlbWVudFN0eWxlcy5vdmVyZmxvd1kgPSAnc2Nyb2xsJztcbiAgICAgICAgdGhpcy5lbGVtZW50U3R5bGVzLmhlaWdodCA9IGNvbXB1dGVkTWF4SGVpZ2h0O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, HostListener, inject, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CuiClickOutsideDirective {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.element = inject(ElementRef).nativeElement;
|
|
6
|
+
this.cuiClickOutside = new EventEmitter();
|
|
7
|
+
}
|
|
8
|
+
onClickOutside(target) {
|
|
9
|
+
if (this.element.contains(target)) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
this.cuiClickOutside.emit(target);
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
15
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiClickOutsideDirective, isStandalone: true, selector: "(cuiClickOutside)", outputs: { cuiClickOutside: "cuiClickOutside" }, host: { listeners: { "document:click": "onClickOutside($event.target)" } }, ngImport: i0 }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiClickOutsideDirective, decorators: [{
|
|
18
|
+
type: Directive,
|
|
19
|
+
args: [{
|
|
20
|
+
standalone: true,
|
|
21
|
+
selector: '(cuiClickOutside)'
|
|
22
|
+
}]
|
|
23
|
+
}], propDecorators: { cuiClickOutside: [{
|
|
24
|
+
type: Output
|
|
25
|
+
}], onClickOutside: [{
|
|
26
|
+
type: HostListener,
|
|
27
|
+
args: ['document:click', ['$event.target']]
|
|
28
|
+
}] } });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTWxHLE1BQU0sT0FBTyx3QkFBd0I7SUFKckM7UUFLcUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFHckQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0tBVTVEO0lBUGEsY0FBYyxDQUFDLE1BQW1CO1FBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBYlEsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQkFBbUI7aUJBQ2hDOzhCQUtVLGVBQWU7c0JBRHJCLE1BQU07Z0JBSUcsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICcoY3VpQ2xpY2tPdXRzaWRlKSdcbn0pXG5leHBvcnQgY2xhc3MgQ3VpQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjdWlDbGlja091dHNpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPEhUTUxFbGVtZW50PigpO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudC50YXJnZXQnXSlcbiAgICBwcm90ZWN0ZWQgb25DbGlja091dHNpZGUodGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VpQ2xpY2tPdXRzaWRlLmVtaXQodGFyZ2V0KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Directive, ElementRef, HostListener, inject } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { cuiProvide } from '../utils/token';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class CuiContentEditableValueAccessorDirective {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.element = inject(ElementRef).nativeElement;
|
|
8
|
+
}
|
|
9
|
+
writeValue(value) {
|
|
10
|
+
this.element.innerText = value ?? '';
|
|
11
|
+
}
|
|
12
|
+
registerOnChange(fn) {
|
|
13
|
+
this.onChange = fn;
|
|
14
|
+
}
|
|
15
|
+
registerOnTouched(fn) {
|
|
16
|
+
this.onTouched = fn;
|
|
17
|
+
}
|
|
18
|
+
setDisabledState(isDisabled) {
|
|
19
|
+
this.element.contentEditable = String(!isDisabled);
|
|
20
|
+
}
|
|
21
|
+
onInput() {
|
|
22
|
+
this.onChange(this.element.innerHTML === '<br>' ? '' : this.element.innerText);
|
|
23
|
+
}
|
|
24
|
+
onBlur() {
|
|
25
|
+
this.onTouched();
|
|
26
|
+
}
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiContentEditableValueAccessorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
28
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiContentEditableValueAccessorDirective, isStandalone: true, selector: "[contenteditable][formControlName], [contenteditable][formControl], [contenteditable][ngModel]", host: { listeners: { "input": "onInput()", "blur": "onBlur()" } }, providers: [cuiProvide(NG_VALUE_ACCESSOR, CuiContentEditableValueAccessorDirective, true)], ngImport: i0 }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiContentEditableValueAccessorDirective, decorators: [{
|
|
31
|
+
type: Directive,
|
|
32
|
+
args: [{
|
|
33
|
+
standalone: true,
|
|
34
|
+
selector: '[contenteditable][formControlName], [contenteditable][formControl], [contenteditable][ngModel]',
|
|
35
|
+
providers: [cuiProvide(NG_VALUE_ACCESSOR, CuiContentEditableValueAccessorDirective, true)]
|
|
36
|
+
}]
|
|
37
|
+
}], propDecorators: { onInput: [{
|
|
38
|
+
type: HostListener,
|
|
39
|
+
args: ['input']
|
|
40
|
+
}], onBlur: [{
|
|
41
|
+
type: HostListener,
|
|
42
|
+
args: ['blur']
|
|
43
|
+
}] } });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1lZGl0YWJsZS12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9jb250ZW50LWVkaXRhYmxlLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSW5ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFPNUMsTUFBTSxPQUFPLHdDQUF3QztJQUxyRDtRQU1xQixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQTRCLENBQUM7S0E4QjlFO0lBekJVLFVBQVUsQ0FBQyxLQUEwQjtRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUF1QjtRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBZ0I7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFHUyxPQUFPO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBR1MsTUFBTTtRQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOytHQTlCUSx3Q0FBd0M7bUdBQXhDLHdDQUF3QyxnTkFGdEMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsd0NBQXdDLEVBQUUsSUFBSSxDQUFDLENBQUM7OzRGQUVqRix3Q0FBd0M7a0JBTHBELFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxnR0FBZ0c7b0JBQzFHLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsNENBQTRDLElBQUksQ0FBQyxDQUFDO2lCQUM3Rjs4QkF3QmEsT0FBTztzQkFEaEIsWUFBWTt1QkFBQyxPQUFPO2dCQU1YLE1BQU07c0JBRGYsWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDdWlPbkNoYW5nZSwgQ3VpT25Ub3VjaGVkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjdWlQcm92aWRlIH0gZnJvbSAnLi4vdXRpbHMvdG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2NvbnRlbnRlZGl0YWJsZV1bZm9ybUNvbnRyb2xOYW1lXSwgW2NvbnRlbnRlZGl0YWJsZV1bZm9ybUNvbnRyb2xdLCBbY29udGVudGVkaXRhYmxlXVtuZ01vZGVsXScsXG4gICAgcHJvdmlkZXJzOiBbY3VpUHJvdmlkZShOR19WQUxVRV9BQ0NFU1NPUiwgQ3VpQ29udGVudEVkaXRhYmxlVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZSwgdHJ1ZSldXG59KVxuZXhwb3J0IGNsYXNzIEN1aUNvbnRlbnRFZGl0YWJsZVZhbHVlQWNjZXNzb3JEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBwcm90ZWN0ZWQgb25DaGFuZ2UhOiBDdWlPbkNoYW5nZTxzdHJpbmc+O1xuICAgIHByb3RlY3RlZCBvblRvdWNoZWQhOiBDdWlPblRvdWNoZWQ7XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogQ3VpTnVsbGFibGU8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID0gdmFsdWUgPz8gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEN1aU9uQ2hhbmdlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogQ3VpT25Ub3VjaGVkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnQuY29udGVudEVkaXRhYmxlID0gU3RyaW5nKCFpc0Rpc2FibGVkKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXG4gICAgcHJvdGVjdGVkIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5lbGVtZW50LmlubmVySFRNTCA9PT0gJzxicj4nID8gJycgOiB0aGlzLmVsZW1lbnQuaW5uZXJUZXh0KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwcm90ZWN0ZWQgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, inject, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CuiDimensionsObserverDirective {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.element = inject(ElementRef).nativeElement;
|
|
6
|
+
this.observer = new ResizeObserver((entries) => {
|
|
7
|
+
entries.forEach(() => this.cuiResizeObserver.emit({
|
|
8
|
+
width: this.element.offsetWidth,
|
|
9
|
+
height: this.element.offsetHeight
|
|
10
|
+
}));
|
|
11
|
+
});
|
|
12
|
+
this.cuiResizeObserver = new EventEmitter();
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
this.observer.observe(this.element);
|
|
16
|
+
}
|
|
17
|
+
ngOnDestroy() {
|
|
18
|
+
this.observer.disconnect();
|
|
19
|
+
}
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDimensionsObserverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
21
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CuiDimensionsObserverDirective, isStandalone: true, selector: "[cuiResizeObserver]", outputs: { cuiResizeObserver: "cuiResizeObserver" }, ngImport: i0 }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDimensionsObserverDirective, decorators: [{
|
|
24
|
+
type: Directive,
|
|
25
|
+
args: [{
|
|
26
|
+
standalone: true,
|
|
27
|
+
selector: '[cuiResizeObserver]'
|
|
28
|
+
}]
|
|
29
|
+
}], propDecorators: { cuiResizeObserver: [{
|
|
30
|
+
type: Output
|
|
31
|
+
}] } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy1vYnNlcnZlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9kaW1lbnNpb25zLW9ic2VydmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFRcEYsTUFBTSxPQUFPLDhCQUE4QjtJQUozQztRQUtxQixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQTRCLENBQUM7UUFFMUQsYUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztnQkFDL0IsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTthQUNwQyxDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBR0ksc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7S0FTaEU7SUFQVSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDOytHQXJCUSw4QkFBOEI7bUdBQTlCLDhCQUE4Qjs7NEZBQTlCLDhCQUE4QjtrQkFKMUMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHFCQUFxQjtpQkFDbEM7OEJBY1UsaUJBQWlCO3NCQUR2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB0eXBlIHsgQ3VpRGltZW5zaW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2N1aVJlc2l6ZU9ic2VydmVyXSdcbn0pXG5leHBvcnQgY2xhc3MgQ3VpRGltZW5zaW9uc09ic2VydmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKCkgPT5cbiAgICAgICAgICAgIHRoaXMuY3VpUmVzaXplT2JzZXJ2ZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY3VpUmVzaXplT2JzZXJ2ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEN1aURpbWVuc2lvbnM+KCk7XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Directive, ElementRef, inject, input, NgZone, output, Renderer2, signal } from '@angular/core';
|
|
3
|
+
import { CuiDragListDirective } from './drag-list.directive';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class CuiDragDropDirective {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.zone = inject(NgZone);
|
|
8
|
+
this.document = inject(DOCUMENT);
|
|
9
|
+
this.renderer = inject(Renderer2);
|
|
10
|
+
this.element = inject(ElementRef).nativeElement;
|
|
11
|
+
this.dragListDirective = inject(CuiDragListDirective);
|
|
12
|
+
this.PLACEHOLDER_CLASS = 'cui-drag-drop-placeholder';
|
|
13
|
+
this.listId = this.dragListDirective.listId;
|
|
14
|
+
this.itemAttribute = `${this.listId}-drag-item`;
|
|
15
|
+
this.abortController = new AbortController();
|
|
16
|
+
this.hostAbortController = new AbortController();
|
|
17
|
+
this.draggingElement = signal(null);
|
|
18
|
+
this.placeholderElement = signal(null);
|
|
19
|
+
this.dragData = signal({});
|
|
20
|
+
this.disabled = input(false);
|
|
21
|
+
this.elementDragged = output();
|
|
22
|
+
this.initDragItem();
|
|
23
|
+
this.initPointerEvents(this.element);
|
|
24
|
+
}
|
|
25
|
+
ngOnDestroy() {
|
|
26
|
+
this.destroyEvents();
|
|
27
|
+
}
|
|
28
|
+
changePointerEvents(element) {
|
|
29
|
+
this.hostAbortController.abort();
|
|
30
|
+
this.hostAbortController = new AbortController();
|
|
31
|
+
this.initPointerEvents(element);
|
|
32
|
+
}
|
|
33
|
+
onDrag(clientX, clientY) {
|
|
34
|
+
if (!this.draggingElement()) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const elementsFromPoint = this.document.elementsFromPoint(clientX, clientY);
|
|
38
|
+
const elementFromPoint = elementsFromPoint.find((element) => element.closest(`#${this.listId}`));
|
|
39
|
+
if (!elementFromPoint) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const targetElement = elementFromPoint.closest(`[${this.itemAttribute}]`);
|
|
43
|
+
if (!targetElement || targetElement === this.draggingElement()) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.configurateDragData(targetElement, clientY);
|
|
47
|
+
}
|
|
48
|
+
onDragStart(event) {
|
|
49
|
+
if (this.disabled()) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let isClicked = true;
|
|
53
|
+
const elementClientRect = this.element.getBoundingClientRect();
|
|
54
|
+
const shiftX = event.clientX - elementClientRect.left;
|
|
55
|
+
const shiftY = event.clientY - elementClientRect.top;
|
|
56
|
+
this.prevIndex = this.calculatePreviousIndex();
|
|
57
|
+
this.document.addEventListener('pointermove', ({ clientX, clientY }) => {
|
|
58
|
+
if (isClicked) {
|
|
59
|
+
this.prepareMoving();
|
|
60
|
+
isClicked = false;
|
|
61
|
+
}
|
|
62
|
+
const draggingElement = this.draggingElement();
|
|
63
|
+
this.renderer.setStyle(draggingElement, 'left', clientX - shiftX + 'px');
|
|
64
|
+
this.renderer.setStyle(draggingElement, 'top', clientY - shiftY + 'px');
|
|
65
|
+
this.onDrag(clientX, clientY);
|
|
66
|
+
}, { signal: this.abortController.signal });
|
|
67
|
+
}
|
|
68
|
+
onDragEnd() {
|
|
69
|
+
const { targetElement, pointer } = this.dragData();
|
|
70
|
+
if (targetElement && pointer) {
|
|
71
|
+
this.elementDragged.emit({
|
|
72
|
+
index: this.index,
|
|
73
|
+
prevIndex: this.prevIndex,
|
|
74
|
+
targetElement,
|
|
75
|
+
pointer
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// remove document events
|
|
79
|
+
this.abortController.abort();
|
|
80
|
+
this.abortController = new AbortController();
|
|
81
|
+
this.removeDragElement();
|
|
82
|
+
this.removePlaceholder();
|
|
83
|
+
this.dragData.set({});
|
|
84
|
+
}
|
|
85
|
+
initDragItem() {
|
|
86
|
+
this.renderer.setAttribute(this.element, this.itemAttribute, 'true');
|
|
87
|
+
}
|
|
88
|
+
initPointerEvents(element) {
|
|
89
|
+
const signal = this.hostAbortController.signal;
|
|
90
|
+
this.zone.runOutsideAngular(() => {
|
|
91
|
+
element.addEventListener('pointerup', this.onDragEnd.bind(this), { signal });
|
|
92
|
+
element.addEventListener('pointerdown', this.onDragStart.bind(this), { signal });
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
destroyEvents() {
|
|
96
|
+
this.hostAbortController.abort();
|
|
97
|
+
this.abortController.abort();
|
|
98
|
+
}
|
|
99
|
+
prepareMoving() {
|
|
100
|
+
const placeholderElement = this.createPlaceholderElement();
|
|
101
|
+
const draggingElement = this.createDragElement();
|
|
102
|
+
this.document.addEventListener('pointerup', this.onDragEnd.bind(this), {
|
|
103
|
+
signal: this.abortController.signal
|
|
104
|
+
});
|
|
105
|
+
this.element.after(placeholderElement);
|
|
106
|
+
this.draggingElement.set(draggingElement);
|
|
107
|
+
this.element.remove();
|
|
108
|
+
this.document.body.append(draggingElement);
|
|
109
|
+
}
|
|
110
|
+
configurateDragData(targetElement, clientY) {
|
|
111
|
+
const placeholderElement = this.placeholderElement();
|
|
112
|
+
const boundingRect = targetElement.getBoundingClientRect();
|
|
113
|
+
const middleY = boundingRect.top + boundingRect.height / 2;
|
|
114
|
+
if (clientY < middleY) {
|
|
115
|
+
targetElement.before(placeholderElement);
|
|
116
|
+
this.dragData.set({ targetElement, pointer: 'BEFORE' });
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
targetElement.after(placeholderElement);
|
|
120
|
+
this.dragData.set({ targetElement, pointer: 'AFTER' });
|
|
121
|
+
}
|
|
122
|
+
this.index = this.calculateIndex(placeholderElement);
|
|
123
|
+
}
|
|
124
|
+
createDragElement() {
|
|
125
|
+
const width = this.element.clientWidth;
|
|
126
|
+
const draggingElement = this.element.cloneNode(true);
|
|
127
|
+
this.renderer.setStyle(draggingElement, 'position', 'fixed');
|
|
128
|
+
this.renderer.setStyle(draggingElement, 'display', 'block');
|
|
129
|
+
this.renderer.setStyle(draggingElement, 'margin', '0');
|
|
130
|
+
this.renderer.setStyle(draggingElement, 'width', `${width}px`);
|
|
131
|
+
return draggingElement;
|
|
132
|
+
}
|
|
133
|
+
createPlaceholderElement() {
|
|
134
|
+
const element = this.placeholderElement();
|
|
135
|
+
if (element) {
|
|
136
|
+
return element;
|
|
137
|
+
}
|
|
138
|
+
const placeholderElement = this.renderer.createElement('div');
|
|
139
|
+
this.renderer.addClass(placeholderElement, this.PLACEHOLDER_CLASS);
|
|
140
|
+
this.placeholderElement.set(placeholderElement);
|
|
141
|
+
return placeholderElement;
|
|
142
|
+
}
|
|
143
|
+
removeDragElement() {
|
|
144
|
+
const draggingElement = this.draggingElement();
|
|
145
|
+
if (!draggingElement) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
draggingElement.remove();
|
|
149
|
+
this.draggingElement.set(null);
|
|
150
|
+
}
|
|
151
|
+
removePlaceholder() {
|
|
152
|
+
const placeholderElement = this.placeholderElement();
|
|
153
|
+
if (!placeholderElement) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
placeholderElement.after(this.element);
|
|
157
|
+
placeholderElement.remove();
|
|
158
|
+
this.placeholderElement.set(null);
|
|
159
|
+
}
|
|
160
|
+
calculateIndex(placeholderElement) {
|
|
161
|
+
const childNodes = placeholderElement.parentElement.childNodes;
|
|
162
|
+
const elements = Array.from(childNodes).filter((node) => node instanceof HTMLElement);
|
|
163
|
+
return elements.indexOf(placeholderElement);
|
|
164
|
+
}
|
|
165
|
+
calculatePreviousIndex() {
|
|
166
|
+
let index = 0;
|
|
167
|
+
let currentElement = this.element;
|
|
168
|
+
while (currentElement && currentElement.previousElementSibling) {
|
|
169
|
+
index++;
|
|
170
|
+
currentElement = currentElement.previousElementSibling;
|
|
171
|
+
}
|
|
172
|
+
return index;
|
|
173
|
+
}
|
|
174
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDragDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
175
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: CuiDragDropDirective, isStandalone: true, selector: "[cuiDragDrop]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { elementDragged: "elementDragged" }, ngImport: i0 }); }
|
|
176
|
+
}
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CuiDragDropDirective, decorators: [{
|
|
178
|
+
type: Directive,
|
|
179
|
+
args: [{
|
|
180
|
+
selector: '[cuiDragDrop]',
|
|
181
|
+
standalone: true
|
|
182
|
+
}]
|
|
183
|
+
}], ctorParameters: () => [] });
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL2RyYWctZHJvcC9kcmFnLWRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl4RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNN0QsTUFBTSxPQUFPLG9CQUFvQjtJQXlCN0I7UUF4QmlCLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFlBQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQzNDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWpELHNCQUFpQixHQUFHLDJCQUEyQixDQUFDO1FBRWhELFdBQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUM7UUFJcEQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3hDLHdCQUFtQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFFakMsb0JBQWUsR0FBRyxNQUFNLENBQTJCLElBQUksQ0FBQyxDQUFDO1FBQ3pELHVCQUFrQixHQUFHLE1BQU0sQ0FBMkIsSUFBSSxDQUFD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QztRQUNoRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxZQUFZLFdBQVcsQ0FBQyxDQUFDO1FBRXRGLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxrQkFBbUIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxjQUFjLEdBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUUzQyxPQUFPLGNBQWMsSUFBSSxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM3RCxLQUFLLEVBQUUsQ0FBQztZQUNSLGNBQWMsR0FBRyxjQUFjLENBQUMsc0JBQXNCLENBQUM7UUFDM0QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7K0dBdk9RLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB0eXBlIHsgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgTmdab25lLCBvdXRwdXQsIFJlbmRlcmVyMiwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IEN1aURyYWdEYXRhLCBDdWlEcmFnRHJvcERhdGEgfSBmcm9tICcuL2RyYWctZHJvcC5vcHRpb25zJztcclxuaW1wb3J0IHsgQ3VpRHJhZ0xpc3REaXJlY3RpdmUgfSBmcm9tICcuL2RyYWctbGlzdC5kaXJlY3RpdmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tjdWlEcmFnRHJvcF0nLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VpRHJhZ0Ryb3BEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmFnTGlzdERpcmVjdGl2ZSA9IGluamVjdChDdWlEcmFnTGlzdERpcmVjdGl2ZSk7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBQTEFDRUhPTERFUl9DTEFTUyA9ICdjdWktZHJhZy1kcm9wLXBsYWNlaG9sZGVyJztcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RJZCA9IHRoaXMuZHJhZ0xpc3REaXJlY3RpdmUubGlzdElkO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtQXR0cmlidXRlID0gYCR7dGhpcy5saXN0SWR9LWRyYWctaXRlbWA7XHJcblxyXG4gICAgcHJpdmF0ZSBpbmRleCE6IG51bWJlcjtcclxuICAgIHByaXZhdGUgcHJldkluZGV4ITogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcbiAgICBwcml2YXRlIGhvc3RBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyYWdnaW5nRWxlbWVudCA9IHNpZ25hbDxDdWlOdWxsYWJsZTxIVE1MRWxlbWVudD4+KG51bGwpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYWNlaG9sZGVyRWxlbWVudCA9IHNpZ25hbDxDdWlOdWxsYWJsZTxIVE1MRWxlbWVudD4+KG51bGwpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyYWdEYXRhID0gc2lnbmFsPEN1aURyYWdEYXRhPih7fSk7XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50RHJhZ2dlZCA9IG91dHB1dDxDdWlEcmFnRHJvcERhdGE+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0RHJhZ0l0ZW0oKTtcclxuICAgICAgICB0aGlzLmluaXRQb2ludGVyRXZlbnRzKHRoaXMuZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VQb2ludGVyRXZlbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob3N0QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgdGhpcy5ob3N0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRQb2ludGVyRXZlbnRzKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25EcmFnKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nRWxlbWVudCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzRnJvbVBvaW50ID0gdGhpcy5kb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50RnJvbVBvaW50ID0gZWxlbWVudHNGcm9tUG9pbnQuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5jbG9zZXN0KGAjJHt0aGlzLmxpc3RJZH1gKSk7XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudEZyb21Qb2ludCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZWxlbWVudEZyb21Qb2ludC5jbG9zZXN0PEhUTUxFbGVtZW50PihgWyR7dGhpcy5pdGVtQXR0cmlidXRlfV1gKTtcclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXRFbGVtZW50IHx8IHRhcmdldEVsZW1lbnQgPT09IHRoaXMuZHJhZ2dpbmdFbGVtZW50KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0ZURyYWdEYXRhKHRhcmdldEVsZW1lbnQsIGNsaWVudFkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25EcmFnU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBpc0NsaWNrZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBzaGlmdFggPSBldmVudC5jbGllbnRYIC0gZWxlbWVudENsaWVudFJlY3QubGVmdDtcclxuICAgICAgICBjb25zdCBzaGlmdFkgPSBldmVudC5jbGllbnRZIC0gZWxlbWVudENsaWVudFJlY3QudG9wO1xyXG5cclxuICAgICAgICB0aGlzLnByZXZJbmRleCA9IHRoaXMuY2FsY3VsYXRlUHJldmlvdXNJbmRleCgpO1xyXG5cclxuICAgICAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICdwb2ludGVybW92ZScsXHJcbiAgICAgICAgICAgICh7IGNsaWVudFgsIGNsaWVudFkgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQ2xpY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZU1vdmluZygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpc0NsaWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnZ2luZ0VsZW1lbnQgPSB0aGlzLmRyYWdnaW5nRWxlbWVudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAnbGVmdCcsIGNsaWVudFggLSBzaGlmdFggKyAncHgnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAndG9wJywgY2xpZW50WSAtIHNoaWZ0WSArICdweCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWcoY2xpZW50WCwgY2xpZW50WSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHsgc2lnbmFsOiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkRyYWdFbmQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyB0YXJnZXRFbGVtZW50LCBwb2ludGVyIH0gPSB0aGlzLmRyYWdEYXRhKCk7XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXRFbGVtZW50ICYmIHBvaW50ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50RHJhZ2dlZC5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxyXG4gICAgICAgICAgICAgICAgcHJldkluZGV4OiB0aGlzLnByZXZJbmRleCxcclxuICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBwb2ludGVyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVtb3ZlIGRvY3VtZW50IGV2ZW50c1xyXG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlRHJhZ0VsZW1lbnQoKTtcclxuICAgICAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgICAgdGhpcy5kcmFnRGF0YS5zZXQoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdERyYWdJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhpcy5pdGVtQXR0cmlidXRlLCAndHJ1ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFBvaW50ZXJFdmVudHMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzaWduYWwgPSB0aGlzLmhvc3RBYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xyXG5cclxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMub25EcmFnRW5kLmJpbmQodGhpcyksIHsgc2lnbmFsIH0pO1xyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5vbkRyYWdTdGFydC5iaW5kKHRoaXMpLCB7IHNpZ25hbCB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlc3Ryb3lFdmVudHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob3N0QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByZXBhcmVNb3ZpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJFbGVtZW50ID0gdGhpcy5jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKTtcclxuICAgICAgICBjb25zdCBkcmFnZ2luZ0VsZW1lbnQgPSB0aGlzLmNyZWF0ZURyYWdFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5vbkRyYWdFbmQuYmluZCh0aGlzKSwge1xyXG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmVsZW1lbnQuYWZ0ZXIocGxhY2Vob2xkZXJFbGVtZW50KTtcclxuICAgICAgICB0aGlzLmRyYWdnaW5nRWxlbWVudC5zZXQoZHJhZ2dpbmdFbGVtZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmQoZHJhZ2dpbmdFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRlRHJhZ0RhdGEodGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsIGNsaWVudFk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRWxlbWVudCA9IHRoaXMucGxhY2Vob2xkZXJFbGVtZW50KCk7XHJcbiAgICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBtaWRkbGVZID0gYm91bmRpbmdSZWN0LnRvcCArIGJvdW5kaW5nUmVjdC5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICBpZiAoY2xpZW50WSA8IG1pZGRsZVkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5iZWZvcmUocGxhY2Vob2xkZXJFbGVtZW50ISk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ0RhdGEuc2V0KHsgdGFyZ2V0RWxlbWVudCwgcG9pbnRlcjogJ0JFRk9SRScgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudC5hZnRlcihwbGFjZWhvbGRlckVsZW1lbnQhKTtcclxuICAgICAgICAgICAgdGhpcy5kcmFnRGF0YS5zZXQoeyB0YXJnZXRFbGVtZW50LCBwb2ludGVyOiAnQUZURVInIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMuY2FsY3VsYXRlSW5kZXgocGxhY2Vob2xkZXJFbGVtZW50ISk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcmFnRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgY29uc3QgZHJhZ2dpbmdFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkcmFnZ2luZ0VsZW1lbnQsICdwb3NpdGlvbicsICdmaXhlZCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ2dpbmdFbGVtZW50LCAnbWFyZ2luJywgJzAnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRyYWdnaW5nRWxlbWVudCwgJ3dpZHRoJywgYCR7d2lkdGh9cHhgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRyYWdnaW5nRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGxhY2Vob2xkZXJFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhwbGFjZWhvbGRlckVsZW1lbnQsIHRoaXMuUExBQ0VIT0xERVJfQ0xBU1MpO1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJFbGVtZW50LnNldChwbGFjZWhvbGRlckVsZW1lbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXJFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlRHJhZ0VsZW1lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZHJhZ2dpbmdFbGVtZW50ID0gdGhpcy5kcmFnZ2luZ0VsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgaWYgKCFkcmFnZ2luZ0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZHJhZ2dpbmdFbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdFbGVtZW50LnNldChudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlbW92ZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRWxlbWVudCA9IHRoaXMucGxhY2Vob2xkZXJFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIGlmICghcGxhY2Vob2xkZXJFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBsYWNlaG9sZGVyRWxlbWVudC5hZnRlcih0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgIHBsYWNlaG9sZGVyRWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyRWxlbWVudC5zZXQobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVJbmRleChwbGFjZWhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gcGxhY2Vob2xkZXJFbGVtZW50LnBhcmVudEVsZW1lbnQhLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBBcnJheS5mcm9tKGNoaWxkTm9kZXMpLmZpbHRlcigobm9kZSkgPT4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmluZGV4T2YocGxhY2Vob2xkZXJFbGVtZW50ISk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVQcmV2aW91c0luZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQ6IEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLm9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLm9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ3VpRHJhZ0Ryb3BEYXRhIHtcclxuICAgIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XHJcbiAgICByZWFkb25seSBwcmV2SW5kZXg6IG51bWJlcjtcclxuICAgIHJlYWRvbmx5IHBvaW50ZXI6IEN1aURyb3BQb2ludGVyO1xyXG4gICAgcmVhZG9ubHkgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VpRHJhZ0RhdGEge1xyXG4gICAgcmVhZG9ubHkgcG9pbnRlcj86IEN1aURyb3BQb2ludGVyO1xyXG4gICAgcmVhZG9ubHkgdGFyZ2V0RWxlbWVudD86IEhUTUxFbGVtZW50O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDdWlEcm9wUG9pbnRlciA9ICdCRUZPUkUnIHwgJ0FGVEVSJztcclxuIl19
|