@agnos-ui/angular-headless 0.0.1-alpha.1 → 0.0.1-alpha.10
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/components/accordion/accordion.d.ts +11 -0
- package/components/accordion/index.d.ts +1 -0
- package/components/alert/alert.d.ts +7 -0
- package/components/alert/index.d.ts +1 -0
- package/components/modal/index.d.ts +1 -0
- package/components/modal/modal.d.ts +7 -0
- package/components/pagination/index.d.ts +1 -0
- package/components/pagination/pagination.d.ts +8 -0
- package/components/progressbar/index.d.ts +1 -0
- package/components/progressbar/progressbar.d.ts +7 -0
- package/components/rating/index.d.ts +1 -0
- package/components/rating/rating.d.ts +6 -0
- package/components/select/index.d.ts +1 -0
- package/components/select/select.d.ts +8 -0
- package/components/slider/index.d.ts +1 -0
- package/components/slider/slider.d.ts +1 -0
- package/config.d.ts +44 -0
- package/esm2022/agnos-ui-angular-headless.mjs +2 -2
- package/esm2022/components/accordion/accordion.mjs +4 -0
- package/esm2022/components/accordion/index.mjs +2 -0
- package/esm2022/components/alert/alert.mjs +4 -0
- package/esm2022/components/alert/index.mjs +2 -0
- package/esm2022/components/modal/index.mjs +2 -0
- package/esm2022/components/modal/modal.mjs +4 -0
- package/esm2022/components/pagination/index.mjs +2 -0
- package/esm2022/components/pagination/pagination.mjs +4 -0
- package/esm2022/components/progressbar/index.mjs +2 -0
- package/esm2022/components/progressbar/progressbar.mjs +4 -0
- package/esm2022/components/rating/index.mjs +2 -0
- package/esm2022/components/rating/rating.mjs +4 -0
- package/esm2022/components/select/index.mjs +2 -0
- package/esm2022/components/select/select.mjs +4 -0
- package/esm2022/components/slider/index.mjs +2 -0
- package/esm2022/components/slider/slider.mjs +2 -0
- package/esm2022/config.mjs +112 -0
- package/esm2022/generated/config.mjs +2 -0
- package/esm2022/generated/index.mjs +23 -0
- package/esm2022/generated/services/extendWidget.mjs +2 -0
- package/esm2022/generated/services/floatingUI.mjs +2 -0
- package/esm2022/generated/services/focustrack.mjs +2 -0
- package/esm2022/generated/services/intersection.mjs +2 -0
- package/esm2022/generated/services/navManager.mjs +2 -0
- package/esm2022/generated/services/portal.mjs +2 -0
- package/esm2022/generated/services/siblingsInert.mjs +2 -0
- package/esm2022/generated/services/transitions/baseTransitions.mjs +2 -0
- package/esm2022/generated/services/transitions/bootstrap.mjs +2 -0
- package/esm2022/generated/services/transitions/collapse.mjs +2 -0
- package/esm2022/generated/services/transitions/cssTransitions.mjs +2 -0
- package/esm2022/generated/services/transitions/simpleClassTransition.mjs +2 -0
- package/esm2022/generated/slot.directive.mjs +2 -0
- package/esm2022/generated/slotDefault.directive.mjs +2 -0
- package/esm2022/generated/types.mjs +2 -0
- package/esm2022/generated/utils/coercion.mjs +2 -0
- package/esm2022/generated/utils/directive.mjs +2 -0
- package/esm2022/generated/utils/stores.mjs +2 -0
- package/esm2022/generated/utils/widget.mjs +2 -0
- package/esm2022/generated/utils/writables.mjs +2 -0
- package/esm2022/generated/utils/zone.mjs +2 -0
- package/esm2022/index.mjs +13 -0
- package/esm2022/slot.directive.mjs +201 -0
- package/esm2022/slotDefault.directive.mjs +21 -0
- package/esm2022/types.mjs +21 -0
- package/esm2022/utils/coercion.mjs +32 -0
- package/esm2022/utils/directive.mjs +72 -0
- package/esm2022/utils/stores.mjs +23 -0
- package/esm2022/utils/widget.mjs +131 -0
- package/esm2022/utils/zone.mjs +73 -0
- package/fesm2022/agnos-ui-angular-headless.mjs +486 -174
- package/fesm2022/agnos-ui-angular-headless.mjs.map +1 -1
- package/generated/config.d.ts +1 -0
- package/generated/index.d.ts +22 -0
- package/generated/services/extendWidget.d.ts +1 -0
- package/generated/services/floatingUI.d.ts +1 -0
- package/generated/services/focustrack.d.ts +1 -0
- package/generated/services/intersection.d.ts +1 -0
- package/generated/services/navManager.d.ts +1 -0
- package/generated/services/portal.d.ts +1 -0
- package/generated/services/siblingsInert.d.ts +1 -0
- package/generated/services/transitions/baseTransitions.d.ts +1 -0
- package/generated/services/transitions/bootstrap.d.ts +1 -0
- package/generated/services/transitions/collapse.d.ts +1 -0
- package/generated/services/transitions/cssTransitions.d.ts +1 -0
- package/generated/services/transitions/simpleClassTransition.d.ts +1 -0
- package/generated/slot.directive.d.ts +1 -0
- package/generated/slotDefault.directive.d.ts +1 -0
- package/generated/types.d.ts +1 -0
- package/generated/utils/coercion.d.ts +1 -0
- package/generated/utils/directive.d.ts +1 -0
- package/generated/utils/stores.d.ts +1 -0
- package/generated/utils/widget.d.ts +1 -0
- package/generated/utils/writables.d.ts +1 -0
- package/generated/utils/zone.d.ts +1 -0
- package/index.d.ts +9 -5
- package/package.json +14 -17
- package/{lib/slot.directive.d.ts → slot.directive.d.ts} +3 -1
- package/{lib/slotDefault.directive.d.ts → slotDefault.directive.d.ts} +2 -1
- package/types.d.ts +35 -0
- package/utils/coercion.d.ts +20 -0
- package/utils/directive.d.ts +23 -0
- package/utils/stores.d.ts +13 -0
- package/utils/widget.d.ts +44 -0
- package/utils/zone.d.ts +22 -0
- package/esm2022/lib/slot.directive.mjs +0 -199
- package/esm2022/lib/slotDefault.directive.mjs +0 -20
- package/esm2022/lib/use.directive.mjs +0 -57
- package/esm2022/lib/utils.mjs +0 -127
- package/esm2022/public-api.mjs +0 -9
- package/lib/use.directive.d.ts +0 -12
- package/lib/utils.d.ts +0 -95
- package/public-api.d.ts +0 -34
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Directive, EnvironmentInjector, Input, TemplateRef, ViewContainerRef, createComponent, inject, reflectComponentType } from '@angular/core';
|
|
3
|
+
import { ComponentTemplate } from './types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
class SlotHandler {
|
|
6
|
+
constructor(viewContainerRef, document) {
|
|
7
|
+
this.viewContainerRef = viewContainerRef;
|
|
8
|
+
this.document = document;
|
|
9
|
+
}
|
|
10
|
+
slotChange(slot, props) { }
|
|
11
|
+
propsChange(slot, props) { }
|
|
12
|
+
destroy() { }
|
|
13
|
+
}
|
|
14
|
+
class StringSlotHandler extends SlotHandler {
|
|
15
|
+
#nodeRef;
|
|
16
|
+
#previousText = '';
|
|
17
|
+
slotChange(slot) {
|
|
18
|
+
if (slot === this.#previousText) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.#previousText = slot;
|
|
22
|
+
if (this.#nodeRef) {
|
|
23
|
+
this.#nodeRef.textContent = slot;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const viewContainerElement = this.viewContainerRef.element.nativeElement;
|
|
27
|
+
if (this.document && viewContainerElement?.parentNode) {
|
|
28
|
+
this.#nodeRef = viewContainerElement.parentNode.insertBefore(this.document.createTextNode(slot), viewContainerElement);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
destroy() {
|
|
33
|
+
this.#nodeRef?.parentNode?.removeChild(this.#nodeRef);
|
|
34
|
+
this.#nodeRef = undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
class FunctionSlotHandler extends SlotHandler {
|
|
38
|
+
#stringSlotHandler = new StringSlotHandler(this.viewContainerRef, this.document);
|
|
39
|
+
slotChange(slot, props) {
|
|
40
|
+
this.#stringSlotHandler.slotChange(slot(props));
|
|
41
|
+
}
|
|
42
|
+
propsChange(slot, props) {
|
|
43
|
+
this.#stringSlotHandler.slotChange(slot(props));
|
|
44
|
+
}
|
|
45
|
+
destroy() {
|
|
46
|
+
this.#stringSlotHandler.destroy();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class ComponentSlotHandler extends SlotHandler {
|
|
50
|
+
#componentRef;
|
|
51
|
+
#properties;
|
|
52
|
+
slotChange(slot, props) {
|
|
53
|
+
if (this.#componentRef) {
|
|
54
|
+
this.destroy();
|
|
55
|
+
}
|
|
56
|
+
this.#componentRef = this.viewContainerRef.createComponent(slot);
|
|
57
|
+
this.#applyProperties(props);
|
|
58
|
+
}
|
|
59
|
+
#applyProperties(props, oldProperties) {
|
|
60
|
+
const properties = Object.keys(props);
|
|
61
|
+
this.#properties = properties;
|
|
62
|
+
const componentRef = this.#componentRef;
|
|
63
|
+
for (const property of properties) {
|
|
64
|
+
componentRef.setInput(property, props[property]);
|
|
65
|
+
oldProperties?.delete(property);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
propsChange(slot, props) {
|
|
69
|
+
const oldProperties = new Set(this.#properties);
|
|
70
|
+
this.#applyProperties(props, oldProperties);
|
|
71
|
+
const componentRef = this.#componentRef;
|
|
72
|
+
for (const property of oldProperties) {
|
|
73
|
+
componentRef.setInput(property, undefined);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
destroy() {
|
|
77
|
+
this.viewContainerRef.clear();
|
|
78
|
+
this.#componentRef = undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
class TemplateRefSlotHandler extends SlotHandler {
|
|
82
|
+
#viewRef;
|
|
83
|
+
#props;
|
|
84
|
+
slotChange(slot, props) {
|
|
85
|
+
if (this.#viewRef) {
|
|
86
|
+
this.destroy();
|
|
87
|
+
}
|
|
88
|
+
props = { ...props };
|
|
89
|
+
this.#props = props;
|
|
90
|
+
this.#viewRef = this.viewContainerRef.createEmbeddedView(slot, props);
|
|
91
|
+
}
|
|
92
|
+
propsChange(slot, props) {
|
|
93
|
+
if (this.#viewRef) {
|
|
94
|
+
const templateProps = this.#props;
|
|
95
|
+
const oldProperties = new Set(Object.keys(templateProps));
|
|
96
|
+
for (const property of Object.keys(props)) {
|
|
97
|
+
templateProps[property] = props[property];
|
|
98
|
+
oldProperties.delete(property);
|
|
99
|
+
}
|
|
100
|
+
for (const oldProperty of oldProperties) {
|
|
101
|
+
delete templateProps[oldProperty];
|
|
102
|
+
}
|
|
103
|
+
this.#viewRef.markForCheck();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
destroy() {
|
|
107
|
+
this.viewContainerRef.clear();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
class ComponentTemplateSlotHandler extends SlotHandler {
|
|
111
|
+
#componentRef;
|
|
112
|
+
#templateSlotHandler = new TemplateRefSlotHandler(this.viewContainerRef, this.document);
|
|
113
|
+
#templateRef;
|
|
114
|
+
slotChange(slot, props) {
|
|
115
|
+
if (this.#componentRef) {
|
|
116
|
+
this.destroy();
|
|
117
|
+
}
|
|
118
|
+
this.#componentRef = createComponent(slot.component, {
|
|
119
|
+
elementInjector: this.viewContainerRef.injector,
|
|
120
|
+
environmentInjector: this.viewContainerRef.injector.get(EnvironmentInjector),
|
|
121
|
+
});
|
|
122
|
+
this.#templateRef = this.#componentRef.instance[slot.templateProp];
|
|
123
|
+
this.#templateSlotHandler.slotChange(this.#templateRef, props);
|
|
124
|
+
}
|
|
125
|
+
propsChange(slot, props) {
|
|
126
|
+
this.#templateSlotHandler.propsChange(this.#templateRef, props);
|
|
127
|
+
}
|
|
128
|
+
destroy() {
|
|
129
|
+
this.#templateSlotHandler.destroy();
|
|
130
|
+
this.#componentRef?.destroy();
|
|
131
|
+
this.#componentRef = undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const getSlotType = (value) => {
|
|
135
|
+
if (!value)
|
|
136
|
+
return undefined;
|
|
137
|
+
const type = typeof value;
|
|
138
|
+
switch (type) {
|
|
139
|
+
case 'string':
|
|
140
|
+
return StringSlotHandler;
|
|
141
|
+
case 'function':
|
|
142
|
+
if (reflectComponentType(value)) {
|
|
143
|
+
return ComponentSlotHandler;
|
|
144
|
+
}
|
|
145
|
+
return FunctionSlotHandler;
|
|
146
|
+
case 'object':
|
|
147
|
+
if (value instanceof TemplateRef) {
|
|
148
|
+
return TemplateRefSlotHandler;
|
|
149
|
+
}
|
|
150
|
+
if (value instanceof ComponentTemplate) {
|
|
151
|
+
return ComponentTemplateSlotHandler;
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
return undefined;
|
|
156
|
+
};
|
|
157
|
+
export class SlotDirective {
|
|
158
|
+
constructor() {
|
|
159
|
+
this._viewContainerRef = inject(ViewContainerRef);
|
|
160
|
+
this._document = inject(DOCUMENT);
|
|
161
|
+
}
|
|
162
|
+
/** @inheritdoc */
|
|
163
|
+
ngOnChanges(changes) {
|
|
164
|
+
const slotChange = changes['slot'];
|
|
165
|
+
const propsChange = changes['props'];
|
|
166
|
+
const slot = this.slot;
|
|
167
|
+
if (slotChange) {
|
|
168
|
+
const newSlotType = getSlotType(slot);
|
|
169
|
+
if (newSlotType !== this._slotType) {
|
|
170
|
+
this._slotHandler?.destroy();
|
|
171
|
+
this._slotHandler = newSlotType ? new newSlotType(this._viewContainerRef, this._document) : undefined;
|
|
172
|
+
this._slotType = newSlotType;
|
|
173
|
+
}
|
|
174
|
+
this._slotHandler?.slotChange(slot, this.props);
|
|
175
|
+
}
|
|
176
|
+
else if (propsChange) {
|
|
177
|
+
this._slotHandler?.propsChange(slot, this.props);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/** @inheritdoc */
|
|
181
|
+
ngOnDestroy() {
|
|
182
|
+
this._slotHandler?.destroy();
|
|
183
|
+
this._slotHandler = undefined;
|
|
184
|
+
}
|
|
185
|
+
static { this.ɵfac = function SlotDirective_Factory(t) { return new (t || SlotDirective)(); }; }
|
|
186
|
+
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SlotDirective, selectors: [["", "auSlot", ""]], inputs: { slot: [i0.ɵɵInputFlags.None, "auSlot", "slot"], props: [i0.ɵɵInputFlags.None, "auSlotProps", "props"] }, standalone: true, features: [i0.ɵɵNgOnChangesFeature] }); }
|
|
187
|
+
}
|
|
188
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SlotDirective, [{
|
|
189
|
+
type: Directive,
|
|
190
|
+
args: [{
|
|
191
|
+
selector: '[auSlot]',
|
|
192
|
+
standalone: true,
|
|
193
|
+
}]
|
|
194
|
+
}], null, { slot: [{
|
|
195
|
+
type: Input,
|
|
196
|
+
args: ['auSlot']
|
|
197
|
+
}], props: [{
|
|
198
|
+
type: Input,
|
|
199
|
+
args: ['auSlotProps']
|
|
200
|
+
}] }); })();
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2xvdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWxKLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7QUFFMUMsTUFBZSxXQUFXO0lBQ3pCLFlBQ1EsZ0JBQWtDLEVBQ2xDLFFBQWtCO1FBRGxCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUN2QixDQUFDO0lBQ0osVUFBVSxDQUFDLElBQVUsRUFBRSxLQUFZLElBQUcsQ0FBQztJQUN2QyxXQUFXLENBQUMsSUFBVSxFQUFFLEtBQVksSUFBRyxDQUFDO0lBQ3hDLE9BQU8sS0FBSSxDQUFDO0NBQ1o7QUFFRCxNQUFNLGlCQUFxRCxTQUFRLFdBQTBCO0lBQzVGLFFBQVEsQ0FBbUI7SUFDM0IsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUVWLFVBQVUsQ0FBQyxJQUFZO1FBQy9CLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNQLE1BQU0sb0JBQW9CLEdBQXdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFB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LEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3RHLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7YUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNGLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVztRQUNWLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQzs4RUEvQlcsYUFBYTtvRUFBYixhQUFhOztpRkFBYixhQUFhO2NBSnpCLFNBQVM7ZUFBQztnQkFDVixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsVUFBVSxFQUFFLElBQUk7YUFDaEI7Z0JBRWlCLElBQUk7a0JBQXBCLEtBQUs7bUJBQUMsUUFBUTtZQUNPLEtBQUs7a0JBQTFCLEtBQUs7bUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7Q29tcG9uZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlyZWN0aXZlLCBFbnZpcm9ubWVudEluamVjdG9yLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGNyZWF0ZUNvbXBvbmVudCwgaW5qZWN0LCByZWZsZWN0Q29tcG9uZW50VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7U2xvdENvbnRlbnR9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtDb21wb25lbnRUZW1wbGF0ZX0gZnJvbSAnLi90eXBlcyc7XG5cbmFic3RyYWN0IGNsYXNzIFNsb3RIYW5kbGVyPFByb3BzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgU2xvdCBleHRlbmRzIFNsb3RDb250ZW50PFByb3BzPiA9IFNsb3RDb250ZW50PFByb3BzPj4ge1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcblx0XHRwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50LFxuXHQpIHt9XG5cdHNsb3RDaGFuZ2Uoc2xvdDogU2xvdCwgcHJvcHM6IFByb3BzKSB7fVxuXHRwcm9wc0NoYW5nZShzbG90OiBTbG90LCBwcm9wczogUHJvcHMpIHt9XG5cdGRlc3Ryb3koKSB7fVxufVxuXG5jbGFzcyBTdHJpbmdTbG90SGFuZGxlcjxQcm9wcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IGV4dGVuZHMgU2xvdEhhbmRsZXI8UHJvcHMsIHN0cmluZz4ge1xuXHQjbm9kZVJlZjogVGV4dCB8IHVuZGVmaW5lZDtcblx0I3ByZXZpb3VzVGV4dCA9ICcnO1xuXG5cdG92ZXJyaWRlIHNsb3RDaGFuZ2Uoc2xvdDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHNsb3QgPT09IHRoaXMuI3ByZXZpb3VzVGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLiNwcmV2aW91c1RleHQgPSBzbG90O1xuXHRcdGlmICh0aGlzLiNub2RlUmVmKSB7XG5cdFx0XHR0aGlzLiNub2RlUmVmLnRleHRDb250ZW50ID0gc2xvdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgdmlld0NvbnRhaW5lckVsZW1lbnQ6IENvbW1lbnQgfCB1bmRlZmluZWQgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKHRoaXMuZG9jdW1lbnQgJiYgdmlld0NvbnRhaW5lckVsZW1lbnQ/LnBhcmVudE5vZGUpIHtcblx0XHRcdFx0dGhpcy4jbm9kZVJlZiA9IHZpZXdDb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc2xvdCksIHZpZXdDb250YWluZXJFbGVtZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRvdmVycmlkZSBkZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuI25vZGVSZWY/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKHRoaXMuI25vZGVSZWYpO1xuXHRcdHRoaXMuI25vZGVSZWYgPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxuY2xhc3MgRnVuY3Rpb25TbG90SGFuZGxlcjxQcm9wcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IGV4dGVuZHMgU2xvdEhhbmRsZXI8UHJvcHMsIChwcm9wczogUHJvcHMpID0+IHN0cmluZz4ge1xuXHQjc3RyaW5nU2xvdEhhbmRsZXIgPSBuZXcgU3RyaW5nU2xvdEhhbmRsZXIodGhpcy52aWV3Q29udGFpbmVyUmVmLCB0aGlzLmRvY3VtZW50KTtcblxuXHRvdmVycmlkZSBzbG90Q2hhbmdlKHNsb3Q6IChwcm9wczogUHJvcHMpID0+IHN0cmluZywgcHJvcHM6IFByb3BzKTogdm9pZCB7XG5cdFx0dGhpcy4jc3RyaW5nU2xvdEhhbmRsZXIuc2xvdENoYW5nZShzbG90KHByb3BzKSk7XG5cdH1cblxuXHRvdmVycmlkZSBwcm9wc0NoYW5nZShzbG90OiAocHJvcHM6IFByb3BzKSA9PiBzdHJpbmcsIHByb3BzOiBQcm9wcyk6IHZvaWQge1xuXHRcdHRoaXMuI3N0cmluZ1Nsb3RIYW5kbGVyLnNsb3RDaGFuZ2Uoc2xvdChwcm9wcykpO1xuXHR9XG5cblx0b3ZlcnJpZGUgZGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLiNzdHJpbmdTbG90SGFuZGxlci5kZXN0cm95KCk7XG5cdH1cbn1cblxuY2xhc3MgQ29tcG9uZW50U2xvdEhhbmRsZXI8UHJvcHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiBleHRlbmRzIFNsb3RIYW5kbGVyPFByb3BzLCBUeXBlPHVua25vd24+PiB7XG5cdCNjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXHQjcHJvcGVydGllczogc3RyaW5nW107XG5cblx0b3ZlcnJpZGUgc2xvdENoYW5nZShzbG90OiBUeXBlPHVua25vd24+LCBwcm9wczogUHJvcHMpOiB2b2lkIHtcblx0XHRpZiAodGhpcy4jY29tcG9uZW50UmVmKSB7XG5cdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0dGhpcy4jY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChzbG90KTtcblx0XHR0aGlzLiNhcHBseVByb3BlcnRpZXMocHJvcHMpO1xuXHR9XG5cblx0I2FwcGx5UHJvcGVydGllcyhwcm9wczogUHJvcHMsIG9sZFByb3BlcnRpZXM/OiBTZXQ8c3RyaW5nPikge1xuXHRcdGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XG5cdFx0dGhpcy4jcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG5cdFx0Y29uc3QgY29tcG9uZW50UmVmID0gdGhpcy4jY29tcG9uZW50UmVmITtcblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcblx0XHRcdGNvbXBvbmVudFJlZi5zZXRJbnB1dChwcm9wZXJ0eSwgcHJvcHNbcHJvcGVydHldKTtcblx0XHRcdG9sZFByb3BlcnRpZXM/LmRlbGV0ZShwcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cblx0b3ZlcnJpZGUgcHJvcHNDaGFuZ2Uoc2xvdDogVHlwZTx1bmtub3duPiwgcHJvcHM6IFByb3BzKTogdm9pZCB7XG5cdFx0Y29uc3Qgb2xkUHJvcGVydGllcyA9IG5ldyBTZXQodGhpcy4jcHJvcGVydGllcyk7XG5cdFx0dGhpcy4jYXBwbHlQcm9wZXJ0aWVzKHByb3BzLCBvbGRQcm9wZXJ0aWVzKTtcblx0XHRjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLiNjb21wb25lbnRSZWYhO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHkgb2Ygb2xkUHJvcGVydGllcykge1xuXHRcdFx0Y29tcG9uZW50UmVmLnNldElucHV0KHByb3BlcnR5LCB1bmRlZmluZWQpO1xuXHRcdH1cblx0fVxuXG5cdG92ZXJyaWRlIGRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cdFx0dGhpcy4jY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmNsYXNzIFRlbXBsYXRlUmVmU2xvdEhhbmRsZXI8UHJvcHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiBleHRlbmRzIFNsb3RIYW5kbGVyPFByb3BzLCBUZW1wbGF0ZVJlZjxQcm9wcz4+IHtcblx0I3ZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxQcm9wcz4gfCB1bmRlZmluZWQ7XG5cdCNwcm9wczogUHJvcHM7XG5cblx0b3ZlcnJpZGUgc2xvdENoYW5nZShzbG90OiBUZW1wbGF0ZVJlZjxQcm9wcz4sIHByb3BzOiBQcm9wcyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLiN2aWV3UmVmKSB7XG5cdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0cHJvcHMgPSB7Li4ucHJvcHN9O1xuXHRcdHRoaXMuI3Byb3BzID0gcHJvcHM7XG5cdFx0dGhpcy4jdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoc2xvdCwgcHJvcHMpO1xuXHR9XG5cblx0b3ZlcnJpZGUgcHJvcHNDaGFuZ2Uoc2xvdDogVGVtcGxhdGVSZWY8UHJvcHM+LCBwcm9wczogUHJvcHMpOiB2b2lkIHtcblx0XHRpZiAodGhpcy4jdmlld1JlZikge1xuXHRcdFx0Y29uc3QgdGVtcGxhdGVQcm9wcyA9IHRoaXMuI3Byb3BzO1xuXHRcdFx0Y29uc3Qgb2xkUHJvcGVydGllcyA9IG5ldyBTZXQ8a2V5b2YgUHJvcHM+KE9iamVjdC5rZXlzKHRlbXBsYXRlUHJvcHMpKTtcblx0XHRcdGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXMocHJvcHMpIGFzIChrZXlvZiBQcm9wcylbXSkge1xuXHRcdFx0XHR0ZW1wbGF0ZVByb3BzW3Byb3BlcnR5XSA9IHByb3BzW3Byb3BlcnR5XTtcblx0XHRcdFx0b2xkUHJvcGVydGllcy5kZWxldGUocHJvcGVydHkpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yIChjb25zdCBvbGRQcm9wZXJ0eSBvZiBvbGRQcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGRlbGV0ZSB0ZW1wbGF0ZVByb3BzW29sZFByb3BlcnR5XTtcblx0XHRcdH1cblx0XHRcdHRoaXMuI3ZpZXdSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0b3ZlcnJpZGUgZGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblx0fVxufVxuXG5jbGFzcyBDb21wb25lbnRUZW1wbGF0ZVNsb3RIYW5kbGVyPFxuXHRQcm9wcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sXG5cdEsgZXh0ZW5kcyBzdHJpbmcsXG5cdFQgZXh0ZW5kcyB7W2tleSBpbiBLXTogVGVtcGxhdGVSZWY8UHJvcHM+fSxcbj4gZXh0ZW5kcyBTbG90SGFuZGxlcjxQcm9wcywgQ29tcG9uZW50VGVtcGxhdGU8UHJvcHMsIEssIFQ+PiB7XG5cdCNjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUPiB8IHVuZGVmaW5lZDtcblx0I3RlbXBsYXRlU2xvdEhhbmRsZXIgPSBuZXcgVGVtcGxhdGVSZWZTbG90SGFuZGxlcih0aGlzLnZpZXdDb250YWluZXJSZWYsIHRoaXMuZG9jdW1lbnQpO1xuXHQjdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPFByb3BzPiB8IHVuZGVmaW5lZDtcblxuXHRvdmVycmlkZSBzbG90Q2hhbmdlKHNsb3Q6IENvbXBvbmVudFRlbXBsYXRlPFByb3BzLCBLLCBUPiwgcHJvcHM6IFByb3BzKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuI2NvbXBvbmVudFJlZikge1xuXHRcdFx0dGhpcy5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHRoaXMuI2NvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudChzbG90LmNvbXBvbmVudCwge1xuXHRcdFx0ZWxlbWVudEluamVjdG9yOiB0aGlzLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IsXG5cdFx0XHRlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IuZ2V0KEVudmlyb25tZW50SW5qZWN0b3IpLFxuXHRcdH0pO1xuXHRcdHRoaXMuI3RlbXBsYXRlUmVmID0gdGhpcy4jY29tcG9uZW50UmVmLmluc3RhbmNlW3Nsb3QudGVtcGxhdGVQcm9wXTtcblx0XHR0aGlzLiN0ZW1wbGF0ZVNsb3RIYW5kbGVyLnNsb3RDaGFuZ2UodGhpcy4jdGVtcGxhdGVSZWYsIHByb3BzKTtcblx0fVxuXG5cdG92ZXJyaWRlIHByb3BzQ2hhbmdlKHNsb3Q6IENvbXBvbmVudFRlbXBsYXRlPFByb3BzLCBLLCBUPiwgcHJvcHM6IFByb3BzKTogdm9pZCB7XG5cdFx0dGhpcy4jdGVtcGxhdGVTbG90SGFuZGxlci5wcm9wc0NoYW5nZSh0aGlzLiN0ZW1wbGF0ZVJlZiEsIHByb3BzKTtcblx0fVxuXG5cdG92ZXJyaWRlIGRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy4jdGVtcGxhdGVTbG90SGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy4jY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG5cdFx0dGhpcy4jY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmNvbnN0IGdldFNsb3RUeXBlID0gKHZhbHVlOiBhbnkpOiB1bmRlZmluZWQgfCB7bmV3ICh2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBkb2N1bWVudDogRG9jdW1lbnQpOiBTbG90SGFuZGxlcjxhbnk+fSA9PiB7XG5cdGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG5cdGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgJ3N0cmluZyc6XG5cdFx0XHRyZXR1cm4gU3RyaW5nU2xvdEhhbmRsZXI7XG5cdFx0Y2FzZSAnZnVuY3Rpb24nOlxuXHRcdFx0aWYgKHJlZmxlY3RDb21wb25lbnRUeXBlKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gQ29tcG9uZW50U2xvdEhhbmRsZXI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gRnVuY3Rpb25TbG90SGFuZGxlcjtcblx0XHRjYXNlICdvYmplY3QnOlxuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlUmVmU2xvdEhhbmRsZXI7XG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBDb21wb25lbnRUZW1wbGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gQ29tcG9uZW50VGVtcGxhdGVTbG90SGFuZGxlcjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYXVTbG90XScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNsb3REaXJlY3RpdmU8UHJvcHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblx0QElucHV0KCdhdVNsb3QnKSBzbG90OiBTbG90Q29udGVudDxQcm9wcz47XG5cdEBJbnB1dCgnYXVTbG90UHJvcHMnKSBwcm9wczogUHJvcHM7XG5cblx0cHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0cHJpdmF0ZSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXHRwcml2YXRlIF9zbG90VHlwZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2xvdFR5cGU+O1xuXHRwcml2YXRlIF9zbG90SGFuZGxlcjogU2xvdEhhbmRsZXI8UHJvcHM+IHwgdW5kZWZpbmVkO1xuXG5cdC8qKiBAaW5oZXJpdGRvYyAqL1xuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2xvdENoYW5nZSA9IGNoYW5nZXNbJ3Nsb3QnXTtcblx0XHRjb25zdCBwcm9wc0NoYW5nZSA9IGNoYW5nZXNbJ3Byb3BzJ107XG5cdFx0Y29uc3Qgc2xvdCA9IHRoaXMuc2xvdDtcblx0XHRpZiAoc2xvdENoYW5nZSkge1xuXHRcdFx0Y29uc3QgbmV3U2xvdFR5cGUgPSBnZXRTbG90VHlwZShzbG90KTtcblx0XHRcdGlmIChuZXdTbG90VHlwZSAhPT0gdGhpcy5fc2xvdFR5cGUpIHtcblx0XHRcdFx0dGhpcy5fc2xvdEhhbmRsZXI/LmRlc3Ryb3koKTtcblx0XHRcdFx0dGhpcy5fc2xvdEhhbmRsZXIgPSBuZXdTbG90VHlwZSA/IG5ldyBuZXdTbG90VHlwZSh0aGlzLl92aWV3Q29udGFpbmVyUmVmLCB0aGlzLl9kb2N1bWVudCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdHRoaXMuX3Nsb3RUeXBlID0gbmV3U2xvdFR5cGU7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9zbG90SGFuZGxlcj8uc2xvdENoYW5nZShzbG90LCB0aGlzLnByb3BzKTtcblx0XHR9IGVsc2UgaWYgKHByb3BzQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLl9zbG90SGFuZGxlcj8ucHJvcHNDaGFuZ2Uoc2xvdCwgdGhpcy5wcm9wcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBpbmhlcml0ZG9jICovXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuX3Nsb3RIYW5kbGVyPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5fc2xvdEhhbmRsZXIgPSB1bmRlZmluZWQ7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Directive, Input, TemplateRef, inject } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SlotDefaultDirective {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.templateRef = inject((TemplateRef));
|
|
6
|
+
}
|
|
7
|
+
/** @inheritdoc */
|
|
8
|
+
ngOnInit() {
|
|
9
|
+
this.auSlotDefault.update((value) => ({ ...value, slotDefault: this.templateRef }));
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = function SlotDefaultDirective_Factory(t) { return new (t || SlotDefaultDirective)(); }; }
|
|
12
|
+
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SlotDefaultDirective, selectors: [["", "auSlotDefault", ""]], inputs: { auSlotDefault: "auSlotDefault" }, standalone: true }); }
|
|
13
|
+
}
|
|
14
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SlotDefaultDirective, [{
|
|
15
|
+
type: Directive,
|
|
16
|
+
args: [{ selector: '[auSlotDefault]', standalone: true }]
|
|
17
|
+
}], null, { auSlotDefault: [{
|
|
18
|
+
type: Input,
|
|
19
|
+
args: ['auSlotDefault']
|
|
20
|
+
}] }); })();
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdERlZmF1bHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nsb3REZWZhdWx0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUlwRSxNQUFNLE9BQU8sb0JBQW9CO0lBRGpDO1FBSUMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxXQUFjLENBQUEsQ0FBQyxDQUFDO0tBTXJDO0lBSkEsa0JBQWtCO0lBQ2xCLFFBQVE7UUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7cUZBUlcsb0JBQW9CO29FQUFwQixvQkFBb0I7O2lGQUFwQixvQkFBb0I7Y0FEaEMsU0FBUztlQUFDLEVBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUM7Z0JBRWpDLGFBQWE7a0JBQXBDLEtBQUs7bUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtXcml0YWJsZVNpZ25hbH0gZnJvbSAnQGFtYWRldXMtaXQtZ3JvdXAvdGFuc3UnO1xuaW1wb3J0IHR5cGUge09uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1Nsb3RDb250ZW50fSBmcm9tICcuL3R5cGVzJztcblxuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbYXVTbG90RGVmYXVsdF0nLCBzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBTbG90RGVmYXVsdERpcmVjdGl2ZTxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdEBJbnB1dCgnYXVTbG90RGVmYXVsdCcpIGF1U2xvdERlZmF1bHQ6IFdyaXRhYmxlU2lnbmFsPHtzbG90RGVmYXVsdD86IFNsb3RDb250ZW50PFQ+fT47XG5cblx0dGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8VD4pO1xuXG5cdC8qKiBAaW5oZXJpdGRvYyAqL1xuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmF1U2xvdERlZmF1bHQudXBkYXRlKCh2YWx1ZSkgPT4gKHsuLi52YWx1ZSwgc2xvdERlZmF1bHQ6IHRoaXMudGVtcGxhdGVSZWZ9KSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export * from '@agnos-ui/core/types';
|
|
4
|
+
export class ComponentTemplate {
|
|
5
|
+
constructor(component, templateProp) {
|
|
6
|
+
this.component = component;
|
|
7
|
+
this.templateProp = templateProp;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class SlotComponent {
|
|
11
|
+
static { this.ɵfac = function SlotComponent_Factory(t) { return new (t || SlotComponent)(); }; }
|
|
12
|
+
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SlotComponent, inputs: { state: "state", widget: "widget" } }); }
|
|
13
|
+
}
|
|
14
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SlotComponent, [{
|
|
15
|
+
type: Directive
|
|
16
|
+
}], null, { state: [{
|
|
17
|
+
type: Input
|
|
18
|
+
}], widget: [{
|
|
19
|
+
type: Input
|
|
20
|
+
}] }); })();
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBRS9DLGNBQWMsc0JBQXNCLENBQUM7QUFFckMsTUFBTSxPQUFPLGlCQUFpQjtJQUM3QixZQUNpQixTQUFrQixFQUNsQixZQUFlO1FBRGYsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixpQkFBWSxHQUFaLFlBQVksQ0FBRztJQUM3QixDQUFDO0NBQ0o7QUE4QkQsTUFBTSxPQUFnQixhQUFhOzhFQUFiLGFBQWE7b0VBQWIsYUFBYTs7aUZBQWIsYUFBYTtjQURsQyxTQUFTO2dCQUdULEtBQUs7a0JBREosS0FBSztZQUdOLE1BQU07a0JBREwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0Q29udGV4dFdpZGdldCxcblx0U2xvdENvbnRlbnQgYXMgQ29yZVNsb3RDb250ZW50LFxuXHRXaWRnZXQsXG5cdFdpZGdldEZhY3RvcnksXG5cdFdpZGdldFByb3BzLFxuXHRXaWRnZXRTbG90Q29udGV4dCxcblx0V2lkZ2V0U3RhdGUsXG59IGZyb20gJ0BhZ25vcy11aS9jb3JlL3R5cGVzJztcbmltcG9ydCB0eXBlIHtTaWduYWwsIFRlbXBsYXRlUmVmLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCAqIGZyb20gJ0BhZ25vcy11aS9jb3JlL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFRlbXBsYXRlPFByb3BzLCBLIGV4dGVuZHMgc3RyaW5nLCBUIGV4dGVuZHMge1trZXkgaW4gS106IFRlbXBsYXRlUmVmPFByb3BzPn0+IHtcblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIHJlYWRvbmx5IGNvbXBvbmVudDogVHlwZTxUPixcblx0XHRwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVQcm9wOiBLLFxuXHQpIHt9XG59XG5cbmV4cG9ydCB0eXBlIFNsb3RDb250ZW50PFByb3BzIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiA9XG5cdHwgQ29yZVNsb3RDb250ZW50PFByb3BzPlxuXHR8IFRlbXBsYXRlUmVmPFByb3BzPlxuXHR8IFR5cGU8dW5rbm93bj5cblx0fCBDb21wb25lbnRUZW1wbGF0ZTxQcm9wcywgYW55LCBhbnk+O1xuXG5leHBvcnQgdHlwZSBBZGFwdFNsb3RDb250ZW50UHJvcHM8UHJvcHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9XG5cdFByb3BzIGV4dGVuZHMgV2lkZ2V0U2xvdENvbnRleHQ8aW5mZXIgVT5cblx0XHQ/IFdpZGdldFNsb3RDb250ZXh0PEFkYXB0V2lkZ2V0U2xvdHM8VT4+ICYgQWRhcHRQcm9wc1Nsb3RzPE9taXQ8UHJvcHMsIGtleW9mIFdpZGdldFNsb3RDb250ZXh0PGFueT4+PlxuXHRcdDogQWRhcHRQcm9wc1Nsb3RzPFByb3BzPjtcblxuZXhwb3J0IHR5cGUgQWRhcHRQcm9wc1Nsb3RzPFByb3BzPiA9IE9taXQ8UHJvcHMsIGBzbG90JHtzdHJpbmd9YD4gJiB7XG5cdFtLIGluIGtleW9mIFByb3BzICYgYHNsb3Qke3N0cmluZ31gXTogUHJvcHNbS10gZXh0ZW5kcyBDb3JlU2xvdENvbnRlbnQ8aW5mZXIgVT4gPyBTbG90Q29udGVudDxBZGFwdFNsb3RDb250ZW50UHJvcHM8VT4+IDogUHJvcHNbS107XG59O1xuXG5leHBvcnQgdHlwZSBBZGFwdFdpZGdldEZhY3RvcmllczxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBXaWRnZXRGYWN0b3J5PGluZmVyIFU+ID8gV2lkZ2V0RmFjdG9yeTxBZGFwdFdpZGdldFNsb3RzPFU+PiA6IFRbS107XG59O1xuXG5leHBvcnQgdHlwZSBBZGFwdFdpZGdldFNsb3RzPFcgZXh0ZW5kcyBXaWRnZXQ+ID0gV2lkZ2V0PFxuXHRBZGFwdFByb3BzU2xvdHM8V2lkZ2V0UHJvcHM8Vz4+LFxuXHRBZGFwdFByb3BzU2xvdHM8V2lkZ2V0U3RhdGU8Vz4+LFxuXHRBZGFwdFdpZGdldEZhY3RvcmllczxXWydhcGknXT4sXG5cdFdbJ2FjdGlvbnMnXSxcblx0V1snZGlyZWN0aXZlcyddXG4+O1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbG90Q29tcG9uZW50PFcgZXh0ZW5kcyBXaWRnZXQ+IHtcblx0QElucHV0KClcblx0c3RhdGUhOiBXaWRnZXRTdGF0ZTxXPjtcblx0QElucHV0KClcblx0d2lkZ2V0ITogQ29udGV4dFdpZGdldDxXPjtcbn1cblxuZXhwb3J0IHR5cGUgQW5ndWxhcldpZGdldDxXIGV4dGVuZHMgV2lkZ2V0PiA9IFcgJiB7XG5cdGluaXRpYWxpemVkOiBQcm9taXNlPHZvaWQ+O1xuXHR3aWRnZXQ6IENvbnRleHRXaWRnZXQ8Vz47XG5cdG5nU3RhdGU6IFNpZ25hbDxXaWRnZXRTdGF0ZTxXPj47XG5cdG5nSW5pdDogKCkgPT4gdm9pZDtcblx0cGF0Y2hTbG90cyhzbG90czoge1xuXHRcdFtLIGluIGtleW9mIFdpZGdldFByb3BzPFc+ICYgYHNsb3Qke3N0cmluZ31gXTogV2lkZ2V0UHJvcHM8Vz5bS10gZXh0ZW5kcyBTbG90Q29udGVudDxpbmZlciBVPiA/IFRlbXBsYXRlUmVmPFU+IHwgdW5kZWZpbmVkIDogbmV2ZXI7XG5cdH0pOiB2b2lkO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { booleanAttribute, numberAttribute } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* Transforms a value (typically a string) to a boolean.
|
|
4
|
+
* Intended to be used as a transform function of an input.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```@Input({ transform: auBooleanAttribute }) status: boolean | undefined;```
|
|
8
|
+
* @param value - Value to be transformed.
|
|
9
|
+
* @returns the value transformed
|
|
10
|
+
*/
|
|
11
|
+
export function auBooleanAttribute(value) {
|
|
12
|
+
if (value === undefined) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return booleanAttribute(value);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Transforms a value (typically a string) to a number.
|
|
19
|
+
* Intended to be used as a transform function of an input.
|
|
20
|
+
* @param value - Value to be transformed.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```@Input({ transform: auNumberAttribute }) id: number | undefined;```
|
|
24
|
+
* @returns the value transformed
|
|
25
|
+
*/
|
|
26
|
+
export function auNumberAttribute(value) {
|
|
27
|
+
if (value === undefined) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
return numberAttribute(value);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvY29lcmNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVoRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFjO0lBQ2hELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFjO0lBQy9DLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtib29sZWFuQXR0cmlidXRlLCBudW1iZXJBdHRyaWJ1dGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSB2YWx1ZSAodHlwaWNhbGx5IGEgc3RyaW5nKSB0byBhIGJvb2xlYW4uXG4gKiBJbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIG9mIGFuIGlucHV0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBASW5wdXQoeyB0cmFuc2Zvcm06IGF1Qm9vbGVhbkF0dHJpYnV0ZSB9KSBzdGF0dXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7YGBgXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSB0cmFuc2Zvcm1lZC5cbiAqIEByZXR1cm5zIHRoZSB2YWx1ZSB0cmFuc2Zvcm1lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXVCb29sZWFuQXR0cmlidXRlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIHZhbHVlICh0eXBpY2FsbHkgYSBzdHJpbmcpIHRvIGEgbnVtYmVyLlxuICogSW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHRyYW5zZm9ybSBmdW5jdGlvbiBvZiBhbiBpbnB1dC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIHRyYW5zZm9ybWVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiAgYGBgQElucHV0KHsgdHJhbnNmb3JtOiBhdU51bWJlckF0dHJpYnV0ZSB9KSBpZDogbnVtYmVyIHwgdW5kZWZpbmVkO2BgYFxuICogQHJldHVybnMgdGhlIHZhbHVlIHRyYW5zZm9ybWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdU51bWJlckF0dHJpYnV0ZSh2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gbnVtYmVyQXR0cmlidXRlKHZhbHVlKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DestroyRef, Directive, ElementRef, Injector, Input, afterNextRender, inject, runInInjectionContext } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export * from '@agnos-ui/core/utils/directive';
|
|
4
|
+
/**
|
|
5
|
+
* Set up an agnos-ui directive as an angular host directive.
|
|
6
|
+
*
|
|
7
|
+
* @param directive - the directive
|
|
8
|
+
* @param params - the params to pass to the directive
|
|
9
|
+
* @returns the update function to change the directive or params
|
|
10
|
+
*/
|
|
11
|
+
export const useDirectiveForHost = (directive, params) => {
|
|
12
|
+
const injector = inject(Injector);
|
|
13
|
+
const ref = inject(ElementRef);
|
|
14
|
+
let instance;
|
|
15
|
+
let plannedCallDirective = false;
|
|
16
|
+
const callDirective = () => {
|
|
17
|
+
if (plannedCallDirective || !directive) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
plannedCallDirective = true;
|
|
21
|
+
runInInjectionContext(injector, () => {
|
|
22
|
+
afterNextRender(() => {
|
|
23
|
+
plannedCallDirective = false;
|
|
24
|
+
instance = directive?.(ref.nativeElement, params);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
function destroyDirectiveInstance() {
|
|
29
|
+
const oldInstance = instance;
|
|
30
|
+
instance = undefined;
|
|
31
|
+
directive = undefined;
|
|
32
|
+
oldInstance?.destroy?.();
|
|
33
|
+
}
|
|
34
|
+
inject(DestroyRef).onDestroy(destroyDirectiveInstance);
|
|
35
|
+
function update(newDirective, newParams) {
|
|
36
|
+
if (newDirective !== directive) {
|
|
37
|
+
void destroyDirectiveInstance();
|
|
38
|
+
directive = newDirective;
|
|
39
|
+
params = newParams;
|
|
40
|
+
callDirective();
|
|
41
|
+
}
|
|
42
|
+
else if (newParams != params) {
|
|
43
|
+
params = newParams;
|
|
44
|
+
instance?.update?.(params);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
callDirective();
|
|
48
|
+
return { update };
|
|
49
|
+
};
|
|
50
|
+
export class UseDirective {
|
|
51
|
+
#useDirective = useDirectiveForHost();
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
ngOnChanges() {
|
|
54
|
+
this.#useDirective.update(this.use, this.params);
|
|
55
|
+
}
|
|
56
|
+
static { this.ɵfac = function UseDirective_Factory(t) { return new (t || UseDirective)(); }; }
|
|
57
|
+
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: UseDirective, selectors: [["", "auUse", ""]], inputs: { use: [i0.ɵɵInputFlags.None, "auUse", "use"], params: [i0.ɵɵInputFlags.None, "auUseParams", "params"] }, standalone: true, features: [i0.ɵɵNgOnChangesFeature] }); }
|
|
58
|
+
}
|
|
59
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UseDirective, [{
|
|
60
|
+
type: Directive,
|
|
61
|
+
args: [{
|
|
62
|
+
standalone: true,
|
|
63
|
+
selector: '[auUse]',
|
|
64
|
+
}]
|
|
65
|
+
}], null, { use: [{
|
|
66
|
+
type: Input,
|
|
67
|
+
args: ['auUse']
|
|
68
|
+
}], params: [{
|
|
69
|
+
type: Input,
|
|
70
|
+
args: ['auUseParams']
|
|
71
|
+
}] }); })();
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2RpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUVqSSxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUksU0FBK0IsRUFBRSxNQUFVLEVBQUUsRUFBRTtJQUNyRixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9CLElBQUksUUFBcUQsQ0FBQztJQUMxRCxJQUFJLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDUixDQUFDO1FBQ0Qsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDcEMsZUFBZSxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUM3QixRQUFRLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFXLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsU0FBUyx3QkFBd0I7UUFDaEMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQzdCLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDckIsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBRXZELFNBQVMsTUFBTSxDQUFDLFlBQWtDLEVBQUUsU0FBYTtRQUNoRSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxLQUFLLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsU0FBUyxHQUFHLFlBQVksQ0FBQztZQUN6QixNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ25CLGFBQWEsRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ25CLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFXLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0YsQ0FBQztJQUVELGFBQWEsRUFBRSxDQUFDO0lBQ2hCLE9BQU8sRUFBQyxNQUFNLEVBQUMsQ0FBQztBQUNqQixDQUFDLENBQUM7QUFNRixNQUFNLE9BQU8sWUFBWTtJQU94QixhQUFhLEdBQUcsbUJBQW1CLEVBQUssQ0FBQztJQUV6QyxrQkFBa0I7SUFDbEIsV0FBVztRQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7NkVBWlcsWUFBWTtvRUFBWixZQUFZOztpRkFBWixZQUFZO2NBSnhCLFNBQVM7ZUFBQztnQkFDVixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsUUFBUSxFQUFFLFNBQVM7YUFDbkI7Z0JBR0EsR0FBRztrQkFERixLQUFLO21CQUFDLE9BQU87WUFJZCxNQUFNO2tCQURMLEtBQUs7bUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtEaXJlY3RpdmUgYXMgQWdub3NVSURpcmVjdGl2ZX0gZnJvbSAnQGFnbm9zLXVpL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHR5cGUge09uQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Rlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIElucHV0LCBhZnRlck5leHRSZW5kZXIsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0ICogZnJvbSAnQGFnbm9zLXVpL2NvcmUvdXRpbHMvZGlyZWN0aXZlJztcblxuLyoqXG4gKiBTZXQgdXAgYW4gYWdub3MtdWkgZGlyZWN0aXZlIGFzIGFuIGFuZ3VsYXIgaG9zdCBkaXJlY3RpdmUuXG4gKlxuICogQHBhcmFtIGRpcmVjdGl2ZSAtIHRoZSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBwYXJhbXMgLSB0aGUgcGFyYW1zIHRvIHBhc3MgdG8gdGhlIGRpcmVjdGl2ZVxuICogQHJldHVybnMgdGhlIHVwZGF0ZSBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIGRpcmVjdGl2ZSBvciBwYXJhbXNcbiAqL1xuZXhwb3J0IGNvbnN0IHVzZURpcmVjdGl2ZUZvckhvc3QgPSA8VD4oZGlyZWN0aXZlPzogQWdub3NVSURpcmVjdGl2ZTxUPiwgcGFyYW1zPzogVCkgPT4ge1xuXHRjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdGNvbnN0IHJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuXHRsZXQgaW5zdGFuY2U6IHVuZGVmaW5lZCB8IFJldHVyblR5cGU8QWdub3NVSURpcmVjdGl2ZTxUPj47XG5cdGxldCBwbGFubmVkQ2FsbERpcmVjdGl2ZSA9IGZhbHNlO1xuXG5cdGNvbnN0IGNhbGxEaXJlY3RpdmUgPSAoKSA9PiB7XG5cdFx0aWYgKHBsYW5uZWRDYWxsRGlyZWN0aXZlIHx8ICFkaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cGxhbm5lZENhbGxEaXJlY3RpdmUgPSB0cnVlO1xuXHRcdHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xuXHRcdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdFx0cGxhbm5lZENhbGxEaXJlY3RpdmUgPSBmYWxzZTtcblx0XHRcdFx0aW5zdGFuY2UgPSBkaXJlY3RpdmU/LihyZWYubmF0aXZlRWxlbWVudCwgcGFyYW1zIGFzIFQpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH07XG5cblx0ZnVuY3Rpb24gZGVzdHJveURpcmVjdGl2ZUluc3RhbmNlKCkge1xuXHRcdGNvbnN0IG9sZEluc3RhbmNlID0gaW5zdGFuY2U7XG5cdFx0aW5zdGFuY2UgPSB1bmRlZmluZWQ7XG5cdFx0ZGlyZWN0aXZlID0gdW5kZWZpbmVkO1xuXHRcdG9sZEluc3RhbmNlPy5kZXN0cm95Py4oKTtcblx0fVxuXG5cdGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koZGVzdHJveURpcmVjdGl2ZUluc3RhbmNlKTtcblxuXHRmdW5jdGlvbiB1cGRhdGUobmV3RGlyZWN0aXZlPzogQWdub3NVSURpcmVjdGl2ZTxUPiwgbmV3UGFyYW1zPzogVCkge1xuXHRcdGlmIChuZXdEaXJlY3RpdmUgIT09IGRpcmVjdGl2ZSkge1xuXHRcdFx0dm9pZCBkZXN0cm95RGlyZWN0aXZlSW5zdGFuY2UoKTtcblx0XHRcdGRpcmVjdGl2ZSA9IG5ld0RpcmVjdGl2ZTtcblx0XHRcdHBhcmFtcyA9IG5ld1BhcmFtcztcblx0XHRcdGNhbGxEaXJlY3RpdmUoKTtcblx0XHR9IGVsc2UgaWYgKG5ld1BhcmFtcyAhPSBwYXJhbXMpIHtcblx0XHRcdHBhcmFtcyA9IG5ld1BhcmFtcztcblx0XHRcdGluc3RhbmNlPy51cGRhdGU/LihwYXJhbXMgYXMgVCk7XG5cdFx0fVxuXHR9XG5cblx0Y2FsbERpcmVjdGl2ZSgpO1xuXHRyZXR1cm4ge3VwZGF0ZX07XG59O1xuXG5ARGlyZWN0aXZlKHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0c2VsZWN0b3I6ICdbYXVVc2VdJyxcbn0pXG5leHBvcnQgY2xhc3MgVXNlRGlyZWN0aXZlPFQ+IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblx0QElucHV0KCdhdVVzZScpXG5cdHVzZTogQWdub3NVSURpcmVjdGl2ZTxUPiB8IHVuZGVmaW5lZDtcblxuXHRASW5wdXQoJ2F1VXNlUGFyYW1zJylcblx0cGFyYW1zOiBUIHwgdW5kZWZpbmVkO1xuXG5cdCN1c2VEaXJlY3RpdmUgPSB1c2VEaXJlY3RpdmVGb3JIb3N0PFQ+KCk7XG5cblx0LyoqIEBpbmhlcml0ZG9jICovXG5cdG5nT25DaGFuZ2VzKCkge1xuXHRcdHRoaXMuI3VzZURpcmVjdGl2ZS51cGRhdGUodGhpcy51c2UsIHRoaXMucGFyYW1zKTtcblx0fVxufVxuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DestroyRef, inject, signal } from '@angular/core';
|
|
2
|
+
import { ZoneWrapper } from './zone';
|
|
3
|
+
export * from '@agnos-ui/core/utils/stores';
|
|
4
|
+
/**
|
|
5
|
+
* Convert a tansu readable signal into an Angular signal.
|
|
6
|
+
*
|
|
7
|
+
* @param tansuSignal - a tansu readable signal
|
|
8
|
+
* @returns an angular signal
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* Note that as it uses Angular's `inject`, this can only be called at component construction time.
|
|
12
|
+
*/
|
|
13
|
+
export const toAngularSignal = (tansuSignal) => {
|
|
14
|
+
const zoneWrapper = inject(ZoneWrapper);
|
|
15
|
+
const res = signal(undefined);
|
|
16
|
+
const subscription = zoneWrapper.outsideNgZone(tansuSignal.subscribe)((value) => {
|
|
17
|
+
res.set(value);
|
|
18
|
+
zoneWrapper.planNgZoneRun();
|
|
19
|
+
});
|
|
20
|
+
inject(DestroyRef).onDestroy(zoneWrapper.outsideNgZone(subscription));
|
|
21
|
+
return res;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3N0b3Jlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUksV0FBOEIsRUFBYSxFQUFFO0lBQy9FLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBcUIsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDL0UsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNmLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sR0FBRyxDQUFDO0FBQ1osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1JlYWRhYmxlU2lnbmFsfSBmcm9tICdAYW1hZGV1cy1pdC1ncm91cC90YW5zdSc7XG5pbXBvcnQgdHlwZSB7U2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGVzdHJveVJlZiwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtab25lV3JhcHBlcn0gZnJvbSAnLi96b25lJztcblxuZXhwb3J0ICogZnJvbSAnQGFnbm9zLXVpL2NvcmUvdXRpbHMvc3RvcmVzJztcblxuLyoqXG4gKiBDb252ZXJ0IGEgdGFuc3UgcmVhZGFibGUgc2lnbmFsIGludG8gYW4gQW5ndWxhciBzaWduYWwuXG4gKlxuICogQHBhcmFtIHRhbnN1U2lnbmFsIC0gYSB0YW5zdSByZWFkYWJsZSBzaWduYWxcbiAqIEByZXR1cm5zIGFuIGFuZ3VsYXIgc2lnbmFsXG4gKlxuICogQHJlbWFya3NcbiAqIE5vdGUgdGhhdCBhcyBpdCB1c2VzIEFuZ3VsYXIncyBgaW5qZWN0YCwgdGhpcyBjYW4gb25seSBiZSBjYWxsZWQgYXQgY29tcG9uZW50IGNvbnN0cnVjdGlvbiB0aW1lLlxuICovXG5leHBvcnQgY29uc3QgdG9Bbmd1bGFyU2lnbmFsID0gPFQ+KHRhbnN1U2lnbmFsOiBSZWFkYWJsZVNpZ25hbDxUPik6IFNpZ25hbDxUPiA9PiB7XG5cdGNvbnN0IHpvbmVXcmFwcGVyID0gaW5qZWN0KFpvbmVXcmFwcGVyKTtcblx0Y29uc3QgcmVzID0gc2lnbmFsKHVuZGVmaW5lZCBhcyBhbnkgYXMgVCk7XG5cdGNvbnN0IHN1YnNjcmlwdGlvbiA9IHpvbmVXcmFwcGVyLm91dHNpZGVOZ1pvbmUodGFuc3VTaWduYWwuc3Vic2NyaWJlKSgodmFsdWUpID0+IHtcblx0XHRyZXMuc2V0KHZhbHVlKTtcblx0XHR6b25lV3JhcHBlci5wbGFuTmdab25lUnVuKCk7XG5cdH0pO1xuXHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KHpvbmVXcmFwcGVyLm91dHNpZGVOZ1pvbmUoc3Vic2NyaXB0aW9uKSk7XG5cdHJldHVybiByZXM7XG59O1xuIl19
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { computed, writable } from '@amadeus-it-group/tansu';
|
|
2
|
+
import { Directive, Injector, inject, runInInjectionContext } from '@angular/core';
|
|
3
|
+
import { toSlotContextWidget, } from '../types';
|
|
4
|
+
import { toAngularSignal, toReadableStore } from './stores';
|
|
5
|
+
import { ZoneWrapper } from './zone';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const createPatchSlots = (set) => {
|
|
8
|
+
let lastValue = {};
|
|
9
|
+
return (object) => {
|
|
10
|
+
const newValue = {};
|
|
11
|
+
let hasChange = false;
|
|
12
|
+
for (const key of Object.keys(object)) {
|
|
13
|
+
const objectKey = object[key];
|
|
14
|
+
if (objectKey != null) {
|
|
15
|
+
// only use defined slots
|
|
16
|
+
newValue[key] = objectKey;
|
|
17
|
+
}
|
|
18
|
+
if (objectKey != lastValue[key]) {
|
|
19
|
+
hasChange = true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (hasChange) {
|
|
23
|
+
lastValue = newValue;
|
|
24
|
+
set(newValue);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Call a widget factory using provided configs.
|
|
30
|
+
*
|
|
31
|
+
* @param parameter - the parameter
|
|
32
|
+
* @param parameter.factory - the widget factory to call
|
|
33
|
+
* @param parameter.defaultConfig - the default config of the widget
|
|
34
|
+
* @param parameter.widgetConfig - the config of the widget, overriding the defaultConfig
|
|
35
|
+
* @param parameter.events - the events of the widget
|
|
36
|
+
* @param parameter.afterInit - a callback to call after successful setup of the widget
|
|
37
|
+
* @returns the widget
|
|
38
|
+
*/
|
|
39
|
+
export const callWidgetFactoryWithConfig = ({ factory, defaultConfig, widgetConfig, events, afterInit, }) => {
|
|
40
|
+
const injector = inject(Injector);
|
|
41
|
+
const slots$ = writable({});
|
|
42
|
+
const props = {};
|
|
43
|
+
let initDone;
|
|
44
|
+
const res = {
|
|
45
|
+
initialized: new Promise((resolve) => {
|
|
46
|
+
initDone = resolve;
|
|
47
|
+
}),
|
|
48
|
+
patchSlots: createPatchSlots(slots$.set),
|
|
49
|
+
patch(newProps) {
|
|
50
|
+
// temporary function replaced in ngInit
|
|
51
|
+
Object.assign(props, newProps);
|
|
52
|
+
},
|
|
53
|
+
ngInit() {
|
|
54
|
+
runInInjectionContext(injector, () => {
|
|
55
|
+
const zoneWrapper = inject(ZoneWrapper);
|
|
56
|
+
factory = zoneWrapper.outsideNgZone(factory);
|
|
57
|
+
const defaultConfig$ = toReadableStore(defaultConfig);
|
|
58
|
+
events = zoneWrapper.insideNgZoneWrapFunctionsObject(events);
|
|
59
|
+
const widget = factory({
|
|
60
|
+
config: computed(() => ({ ...defaultConfig$(), ...widgetConfig?.(), ...slots$(), ...events })),
|
|
61
|
+
props,
|
|
62
|
+
});
|
|
63
|
+
const wrappedWidget = {
|
|
64
|
+
...widget,
|
|
65
|
+
patch: zoneWrapper.outsideNgZone(widget.patch),
|
|
66
|
+
directives: zoneWrapper.outsideNgZoneWrapDirectivesObject(widget.directives),
|
|
67
|
+
actions: zoneWrapper.outsideNgZoneWrapFunctionsObject(widget.actions),
|
|
68
|
+
api: zoneWrapper.outsideNgZoneWrapFunctionsObject(widget.api),
|
|
69
|
+
};
|
|
70
|
+
Object.assign(res, wrappedWidget, {
|
|
71
|
+
widget: toSlotContextWidget(wrappedWidget),
|
|
72
|
+
ngState: toAngularSignal(wrappedWidget.state$),
|
|
73
|
+
});
|
|
74
|
+
afterInit?.();
|
|
75
|
+
initDone();
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
return res;
|
|
80
|
+
};
|
|
81
|
+
function patchSimpleChanges(patchFn, changes) {
|
|
82
|
+
const obj = {};
|
|
83
|
+
for (const [key, simpleChange] of Object.entries(changes)) {
|
|
84
|
+
if (simpleChange !== undefined) {
|
|
85
|
+
obj[key] = simpleChange.currentValue;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
patchFn(obj);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Stores the result of the first call to the getter and returns that result directly for subsequent calls
|
|
92
|
+
*
|
|
93
|
+
* Applies to: class getters
|
|
94
|
+
*
|
|
95
|
+
* @param target - the target
|
|
96
|
+
* @param property - the property
|
|
97
|
+
* @param descriptor - the property descriptor
|
|
98
|
+
*/
|
|
99
|
+
export const CachedProperty = (target, property, descriptor) => {
|
|
100
|
+
const originalGet = descriptor.get;
|
|
101
|
+
descriptor.get = function () {
|
|
102
|
+
const value = originalGet?.call(this);
|
|
103
|
+
Object.defineProperty(this, property, { value, writable: false });
|
|
104
|
+
return value;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
export class BaseWidgetDirective {
|
|
108
|
+
get api() {
|
|
109
|
+
return this._widget.api;
|
|
110
|
+
}
|
|
111
|
+
get state() {
|
|
112
|
+
return this._widget.ngState;
|
|
113
|
+
}
|
|
114
|
+
get widget() {
|
|
115
|
+
return this._widget.widget;
|
|
116
|
+
}
|
|
117
|
+
/** @inheritdoc */
|
|
118
|
+
ngOnChanges(changes) {
|
|
119
|
+
patchSimpleChanges(this._widget.patch, changes);
|
|
120
|
+
}
|
|
121
|
+
/** @inheritdoc */
|
|
122
|
+
ngOnInit() {
|
|
123
|
+
this._widget.ngInit();
|
|
124
|
+
}
|
|
125
|
+
static { this.ɵfac = function BaseWidgetDirective_Factory(t) { return new (t || BaseWidgetDirective)(); }; }
|
|
126
|
+
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseWidgetDirective, features: [i0.ɵɵNgOnChangesFeature] }); }
|
|
127
|
+
}
|
|
128
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseWidgetDirective, [{
|
|
129
|
+
type: Directive
|
|
130
|
+
}], null, null); })();
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3dpZGdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRixPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUNOLG1CQUFtQixHQU9uQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsZUFBZSxFQUFFLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMxRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sUUFBUSxDQUFDOztBQUVuQyxNQUFNLGdCQUFnQixHQUFHLENBQW1CLEdBQWlDLEVBQUUsRUFBRTtJQUNoRixJQUFJLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFDL0IsT0FBTyxDQUFDLE1BQVMsRUFBRSxFQUFFO1FBQ3BCLE1BQU0sUUFBUSxHQUFlLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBeUIsRUFBRSxDQUFDO1lBQy9ELE1BQU0sU0FBUyxHQUFJLE1BQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdkIseUJBQXlCO2dCQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNsQixDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZixTQUFTLEdBQUcs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bUI7O2lGQUFuQixtQkFBbUI7Y0FEeEMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29tcHV0ZWQsIHdyaXRhYmxlLCB0eXBlIFJlYWRhYmxlU2lnbmFsfSBmcm9tICdAYW1hZGV1cy1pdC1ncm91cC90YW5zdSc7XG5pbXBvcnQgdHlwZSB7T25DaGFuZ2VzLCBPbkluaXQsIFNpZ25hbCwgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5qZWN0b3IsIGluamVjdCwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdHRvU2xvdENvbnRleHRXaWRnZXQsXG5cdHR5cGUgQW5ndWxhcldpZGdldCxcblx0dHlwZSBDb250ZXh0V2lkZ2V0LFxuXHR0eXBlIFdpZGdldCxcblx0dHlwZSBXaWRnZXRGYWN0b3J5LFxuXHR0eXBlIFdpZGdldFByb3BzLFxuXHR0eXBlIFdpZGdldFN0YXRlLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge3RvQW5ndWxhclNpZ25hbCwgdG9SZWFkYWJsZVN0b3JlfSBmcm9tICcuL3N0b3Jlcyc7XG5pbXBvcnQge1pvbmVXcmFwcGVyfSBmcm9tICcuL3pvbmUnO1xuXG5jb25zdCBjcmVhdGVQYXRjaFNsb3RzID0gPFQgZXh0ZW5kcyBvYmplY3Q+KHNldDogKG9iamVjdDogUGFydGlhbDxUPikgPT4gdm9pZCkgPT4ge1xuXHRsZXQgbGFzdFZhbHVlOiBQYXJ0aWFsPFQ+ID0ge307XG5cdHJldHVybiAob2JqZWN0OiBUKSA9PiB7XG5cdFx0Y29uc3QgbmV3VmFsdWU6IFBhcnRpYWw8VD4gPSB7fTtcblx0XHRsZXQgaGFzQ2hhbmdlID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSBhcyAoc3RyaW5nICYga2V5b2YgVClbXSkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0S2V5ID0gKG9iamVjdCBhcyBhbnkpW2tleV07XG5cdFx0XHRpZiAob2JqZWN0S2V5ICE9IG51bGwpIHtcblx0XHRcdFx0Ly8gb25seSB1c2UgZGVmaW5lZCBzbG90c1xuXHRcdFx0XHRuZXdWYWx1ZVtrZXldID0gb2JqZWN0S2V5O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9iamVjdEtleSAhPSBsYXN0VmFsdWVba2V5XSkge1xuXHRcdFx0XHRoYXNDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaGFzQ2hhbmdlKSB7XG5cdFx0XHRsYXN0VmFsdWUgPSBuZXdWYWx1ZTtcblx0XHRcdHNldChuZXdWYWx1ZSk7XG5cdFx0fVxuXHR9O1xufTtcblxuLyoqXG4gKiBDYWxsIGEgd2lkZ2V0IGZhY3RvcnkgdXNpbmcgcHJvdmlkZWQgY29uZmlncy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1ldGVyIC0gdGhlIHBhcmFtZXRlclxuICogQHBhcmFtIHBhcmFtZXRlci5mYWN0b3J5IC0gdGhlIHdpZGdldCBmYWN0b3J5IHRvIGNhbGxcbiAqIEBwYXJhbSBwYXJhbWV0ZXIuZGVmYXVsdENvbmZpZyAtIHRoZSBkZWZhdWx0IGNvbmZpZyBvZiB0aGUgd2lkZ2V0XG4gKiBAcGFyYW0gcGFyYW1ldGVyLndpZGdldENvbmZpZyAtIHRoZSBjb25maWcgb2YgdGhlIHdpZGdldCwgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdENvbmZpZ1xuICogQHBhcmFtIHBhcmFtZXRlci5ldmVudHMgLSB0aGUgZXZlbnRzIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSBwYXJhbWV0ZXIuYWZ0ZXJJbml0IC0gYSBjYWxsYmFjayB0byBjYWxsIGFmdGVyIHN1Y2Nlc3NmdWwgc2V0dXAgb2YgdGhlIHdpZGdldFxuICogQHJldHVybnMgdGhlIHdpZGdldFxuICovXG5leHBvcnQgY29uc3QgY2FsbFdpZGdldEZhY3RvcnlXaXRoQ29uZmlnID0gPFcgZXh0ZW5kcyBXaWRnZXQ+KHtcblx0ZmFjdG9yeSxcblx0ZGVmYXVsdENvbmZpZyxcblx0d2lkZ2V0Q29uZmlnLFxuXHRldmVudHMsXG5cdGFmdGVySW5pdCxcbn06IHtcblx0ZmFjdG9yeTogV2lkZ2V0RmFjdG9yeTxXPjtcblx0ZGVmYXVsdENvbmZpZz86IFBhcnRpYWw8V2lkZ2V0UHJvcHM8Vz4+IHwgUmVhZGFibGVTaWduYWw8UGFydGlhbDxXaWRnZXRQcm9wczxXPj4gfCB1bmRlZmluZWQ+O1xuXHR3aWRnZXRDb25maWc/OiBudWxsIHwgdW5kZWZpbmVkIHwgUmVhZGFibGVTaWduYWw8UGFydGlhbDxXaWRnZXRQcm9wczxXPj4gfCB1bmRlZmluZWQ+O1xuXHRldmVudHM6IFBpY2s8V2lkZ2V0UHJvcHM8Vz4sIGtleW9mIFdpZGdldFByb3BzPFc+ICYgYG9uJHtzdHJpbmd9YD47XG5cdGFmdGVySW5pdD86ICgpID0+IHZvaWQ7XG59KTogQW5ndWxhcldpZGdldDxXPiA9PiB7XG5cdGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0Y29uc3Qgc2xvdHMkID0gd3JpdGFibGUoe30pO1xuXHRjb25zdCBwcm9wcyA9IHt9O1xuXHRsZXQgaW5pdERvbmU6ICgpID0+IHZvaWQ7XG5cdGNvbnN0IHJlcyA9IHtcblx0XHRpbml0aWFsaXplZDogbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGluaXREb25lID0gcmVzb2x2ZTtcblx0XHR9KSxcblx0XHRwYXRjaFNsb3RzOiBjcmVhdGVQYXRjaFNsb3RzKHNsb3RzJC5zZXQpLFxuXHRcdHBhdGNoKG5ld1Byb3BzKSB7XG5cdFx0XHQvLyB0ZW1wb3JhcnkgZnVuY3Rpb24gcmVwbGFjZWQgaW4gbmdJbml0XG5cdFx0XHRPYmplY3QuYXNzaWduKHByb3BzLCBuZXdQcm9wcyk7XG5cdFx0fSxcblx0XHRuZ0luaXQoKSB7XG5cdFx0XHRydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgem9uZVdyYXBwZXIgPSBpbmplY3QoWm9uZVdyYXBwZXIpO1xuXHRcdFx0XHRmYWN0b3J5ID0gem9uZVdyYXBwZXIub3V0c2lkZU5nWm9uZShmYWN0b3J5KTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdENvbmZpZyQgPSB0b1JlYWRhYmxlU3RvcmUoZGVmYXVsdENvbmZpZyk7XG5cdFx0XHRcdGV2ZW50cyA9IHpvbmVXcmFwcGVyLmluc2lkZU5nWm9uZVdyYXBGdW5jdGlvbnNPYmplY3QoZXZlbnRzKTtcblx0XHRcdFx0Y29uc3Qgd2lkZ2V0ID0gZmFjdG9yeSh7XG5cdFx0XHRcdFx0Y29uZmlnOiBjb21wdXRlZCgoKSA9PiAoey4uLmRlZmF1bHRDb25maWckKCksIC4uLndpZGdldENvbmZpZz8uKCksIC4uLnNsb3RzJCgpLCAuLi4oZXZlbnRzIGFzIFBhcnRpYWw8V2lkZ2V0UHJvcHM8Vz4+KX0pKSxcblx0XHRcdFx0XHRwcm9wcyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IHdyYXBwZWRXaWRnZXQ6IFcgPSB7XG5cdFx0XHRcdFx0Li4ud2lkZ2V0LFxuXHRcdFx0XHRcdHBhdGNoOiB6b25lV3JhcHBlci5vdXRzaWRlTmdab25lKHdpZGdldC5wYXRjaCksXG5cdFx0XHRcdFx0ZGlyZWN0aXZlczogem9uZVdyYXBwZXIub3V0c2lkZU5nWm9uZVdyYXBEaXJlY3RpdmVzT2JqZWN0KHdpZGdldC5kaXJlY3RpdmVzKSxcblx0XHRcdFx0XHRhY3Rpb25zOiB6b25lV3JhcHBlci5vdXRzaWRlTmdab25lV3JhcEZ1bmN0aW9uc09iamVjdCh3aWRnZXQuYWN0aW9ucyksXG5cdFx0XHRcdFx0YXBpOiB6b25lV3JhcHBlci5vdXRzaWRlTmdab25lV3JhcEZ1bmN0aW9uc09iamVjdCh3aWRnZXQuYXBpKSxcblx0XHRcdFx0fTtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihyZXMsIHdyYXBwZWRXaWRnZXQsIHtcblx0XHRcdFx0XHR3aWRnZXQ6IHRvU2xvdENvbnRleHRXaWRnZXQod3JhcHBlZFdpZGdldCksXG5cdFx0XHRcdFx0bmdTdGF0ZTogdG9Bbmd1bGFyU2lnbmFsKHdyYXBwZWRXaWRnZXQuc3RhdGUkIGFzIFJlYWRhYmxlU2lnbmFsPFdpZGdldFN0YXRlPFc+PiksXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRhZnRlckluaXQ/LigpO1xuXHRcdFx0XHRpbml0RG9uZSgpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0fSBhcyBBbmd1bGFyV2lkZ2V0PFc+O1xuXG5cdHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBwYXRjaFNpbXBsZUNoYW5nZXMocGF0Y2hGbjogKG9iajogYW55KSA9PiB2b2lkLCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdGNvbnN0IG9iajogYW55ID0ge307XG5cdGZvciAoY29uc3QgW2tleSwgc2ltcGxlQ2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyhjaGFuZ2VzKSkge1xuXHRcdGlmIChzaW1wbGVDaGFuZ2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqW2tleV0gPSBzaW1wbGVDaGFuZ2UuY3VycmVudFZhbHVlO1xuXHRcdH1cblx0fVxuXHRwYXRjaEZuKG9iaik7XG59XG5cbi8qKlxuICogU3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIGZpcnN0IGNhbGwgdG8gdGhlIGdldHRlciBhbmQgcmV0dXJucyB0aGF0IHJlc3VsdCBkaXJlY3RseSBmb3Igc3Vic2VxdWVudCBjYWxsc1xuICpcbiAqIEFwcGxpZXMgdG86IGNsYXNzIGdldHRlcnNcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gdGhlIHRhcmdldFxuICogQHBhcmFtIHByb3BlcnR5IC0gdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gZGVzY3JpcHRvciAtIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yXG4gKi9cbmV4cG9ydCBjb25zdCBDYWNoZWRQcm9wZXJ0eSA9ICh0YXJnZXQ6IGFueSwgcHJvcGVydHk6IFByb3BlcnR5S2V5LCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcblx0Y29uc3Qgb3JpZ2luYWxHZXQgPSBkZXNjcmlwdG9yLmdldDtcblx0ZGVzY3JpcHRvci5nZXQgPSBmdW5jdGlvbiAodGhpczogYW55KSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBvcmlnaW5hbEdldD8uY2FsbCh0aGlzKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHksIHt2YWx1ZSwgd3JpdGFibGU6IGZhbHNlfSk7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9O1xufTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVdpZGdldERpcmVjdGl2ZTxXIGV4dGVuZHMgV2lkZ2V0PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcblx0cHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IF93aWRnZXQ6IEFuZ3VsYXJXaWRnZXQ8Vz47XG5cblx0Z2V0IGFwaSgpOiBXWydhcGknXSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dpZGdldC5hcGk7XG5cdH1cblxuXHRnZXQgc3RhdGUoKTogU2lnbmFsPFdpZGdldFN0YXRlPFc+PiB7XG5cdFx0cmV0dXJuIHRoaXMuX3dpZGdldC5uZ1N0YXRlO1xuXHR9XG5cblx0Z2V0IHdpZGdldCgpOiBDb250ZXh0V2lkZ2V0PFc+IHtcblx0XHRyZXR1cm4gdGhpcy5fd2lkZ2V0LndpZGdldDtcblx0fVxuXG5cdC8qKiBAaW5oZXJpdGRvYyAqL1xuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0cGF0Y2hTaW1wbGVDaGFuZ2VzKHRoaXMuX3dpZGdldC5wYXRjaCwgY2hhbmdlcyk7XG5cdH1cblxuXHQvKiogQGluaGVyaXRkb2MgKi9cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fd2lkZ2V0Lm5nSW5pdCgpO1xuXHR9XG59XG4iXX0=
|