@masterteam/components 0.0.127 → 0.0.129
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/assets/common.css +2 -172
- package/fesm2022/masterteam-components-dialog.mjs +33 -0
- package/fesm2022/masterteam-components-dialog.mjs.map +1 -0
- package/fesm2022/masterteam-components-dynamic-drawer.mjs +321 -0
- package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -0
- package/fesm2022/masterteam-components-formula.mjs +3116 -0
- package/fesm2022/masterteam-components-formula.mjs.map +1 -0
- package/fesm2022/masterteam-components-icon-field.mjs +63 -0
- package/fesm2022/masterteam-components-icon-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-list.mjs +31 -0
- package/fesm2022/masterteam-components-list.mjs.map +1 -0
- package/fesm2022/masterteam-components-menu.mjs +135 -0
- package/fesm2022/masterteam-components-menu.mjs.map +1 -0
- package/fesm2022/masterteam-components-modal.mjs +50 -0
- package/fesm2022/masterteam-components-modal.mjs.map +1 -0
- package/fesm2022/masterteam-components-module-summary-card.mjs +32 -0
- package/fesm2022/masterteam-components-module-summary-card.mjs.map +1 -0
- package/fesm2022/masterteam-components-page-header.mjs +42 -0
- package/fesm2022/masterteam-components-page-header.mjs.map +1 -0
- package/fesm2022/masterteam-components-page.mjs +35 -0
- package/fesm2022/masterteam-components-page.mjs.map +1 -0
- package/fesm2022/masterteam-components-pick-list-field.mjs +204 -0
- package/fesm2022/masterteam-components-pick-list-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-property-filter-builder.mjs +386 -0
- package/fesm2022/masterteam-components-property-filter-builder.mjs.map +1 -0
- package/fesm2022/masterteam-components-radio-button-field.mjs +85 -0
- package/fesm2022/masterteam-components-radio-button-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-radio-cards-field.mjs +123 -0
- package/fesm2022/masterteam-components-radio-cards-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-radio-cards.mjs +74 -0
- package/fesm2022/masterteam-components-radio-cards.mjs.map +1 -0
- package/fesm2022/masterteam-components-sidebar.mjs +36 -0
- package/fesm2022/masterteam-components-sidebar.mjs.map +1 -0
- package/fesm2022/masterteam-components-slider-field.mjs +104 -0
- package/fesm2022/masterteam-components-slider-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-statistic-card.mjs +22 -0
- package/fesm2022/masterteam-components-statistic-card.mjs.map +1 -0
- package/fesm2022/masterteam-components-textarea-field.mjs +100 -0
- package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -0
- package/fesm2022/masterteam-components-toast.mjs +75 -0
- package/fesm2022/masterteam-components-toast.mjs.map +1 -0
- package/fesm2022/masterteam-components-topbar.mjs +28 -0
- package/fesm2022/masterteam-components-topbar.mjs.map +1 -0
- package/fesm2022/masterteam-components-tree.mjs +219 -0
- package/fesm2022/masterteam-components-tree.mjs.map +1 -0
- package/package.json +1 -1
- package/types/masterteam-components-dialog.d.ts +12 -0
- package/types/masterteam-components-dynamic-drawer.d.ts +93 -0
- package/types/masterteam-components-formula.d.ts +654 -0
- package/types/masterteam-components-icon-field.d.ts +27 -0
- package/types/masterteam-components-list.d.ts +18 -0
- package/types/masterteam-components-menu.d.ts +55 -0
- package/types/masterteam-components-modal.d.ts +18 -0
- package/types/masterteam-components-module-summary-card.d.ts +17 -0
- package/types/masterteam-components-page-header.d.ts +30 -0
- package/types/masterteam-components-page.d.ts +26 -0
- package/types/masterteam-components-pick-list-field.d.ts +60 -0
- package/types/masterteam-components-property-filter-builder.d.ts +90 -0
- package/types/masterteam-components-radio-button-field.d.ts +41 -0
- package/types/masterteam-components-radio-cards-field.d.ts +34 -0
- package/types/masterteam-components-radio-cards.d.ts +33 -0
- package/types/masterteam-components-sidebar.d.ts +28 -0
- package/types/masterteam-components-slider-field.d.ts +45 -0
- package/types/masterteam-components-statistic-card.d.ts +18 -0
- package/types/masterteam-components-textarea-field.d.ts +38 -0
- package/types/masterteam-components-toast.d.ts +26 -0
- package/types/masterteam-components-topbar.d.ts +17 -0
- package/types/masterteam-components-tree.d.ts +98 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, signal, Injectable, model, computed, Injector, Input, Component, inject, ApplicationRef, EnvironmentInjector, DestroyRef, createComponent } from '@angular/core';
|
|
3
|
+
import { NgComponentOutlet, DOCUMENT } from '@angular/common';
|
|
4
|
+
import { DynamicDialogRef } from 'primeng/dynamicdialog';
|
|
5
|
+
import * as i1 from 'primeng/drawer';
|
|
6
|
+
import { DrawerModule } from 'primeng/drawer';
|
|
7
|
+
import { Button } from '@masterteam/components/button';
|
|
8
|
+
|
|
9
|
+
const DynamicDrawerConfig = new InjectionToken('DynamicDrawerConfig');
|
|
10
|
+
/**
|
|
11
|
+
* Controller to dynamically update drawer properties from inside the child component.
|
|
12
|
+
* Inject this in your drawer content component to modify drawer behavior.
|
|
13
|
+
*/
|
|
14
|
+
class DrawerController {
|
|
15
|
+
_styleClass = signal('', ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
|
|
16
|
+
_header = signal('', ...(ngDevMode ? [{ debugName: "_header" }] : []));
|
|
17
|
+
_fullScreen = signal(undefined, ...(ngDevMode ? [{ debugName: "_fullScreen" }] : []));
|
|
18
|
+
/** Get the current additional styleClass */
|
|
19
|
+
get styleClass() {
|
|
20
|
+
return this._styleClass;
|
|
21
|
+
}
|
|
22
|
+
/** Get the current header */
|
|
23
|
+
get header() {
|
|
24
|
+
return this._header;
|
|
25
|
+
}
|
|
26
|
+
/** Get the current fullScreen state */
|
|
27
|
+
get fullScreen() {
|
|
28
|
+
return this._fullScreen;
|
|
29
|
+
}
|
|
30
|
+
/** Add or replace the dynamic styleClass */
|
|
31
|
+
setStyleClass(styleClass) {
|
|
32
|
+
this._styleClass.set(styleClass);
|
|
33
|
+
}
|
|
34
|
+
/** Append a class to the existing styleClass */
|
|
35
|
+
addClass(className) {
|
|
36
|
+
const current = this._styleClass();
|
|
37
|
+
if (!current.includes(className)) {
|
|
38
|
+
this._styleClass.set((current + ' ' + className).trim());
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Remove a class from the styleClass */
|
|
42
|
+
removeClass(className) {
|
|
43
|
+
const current = this._styleClass();
|
|
44
|
+
this._styleClass.set(current
|
|
45
|
+
.split(' ')
|
|
46
|
+
.filter((c) => c !== className)
|
|
47
|
+
.join(' '));
|
|
48
|
+
}
|
|
49
|
+
/** Toggle a class on/off */
|
|
50
|
+
toggleClass(className) {
|
|
51
|
+
if (this._styleClass().includes(className)) {
|
|
52
|
+
this.removeClass(className);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.addClass(className);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Update the drawer header */
|
|
59
|
+
setHeader(header) {
|
|
60
|
+
this._header.set(header);
|
|
61
|
+
}
|
|
62
|
+
/** Toggle fullScreen mode */
|
|
63
|
+
setFullScreen(fullScreen) {
|
|
64
|
+
this._fullScreen.set(fullScreen);
|
|
65
|
+
}
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DrawerController, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
67
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DrawerController });
|
|
68
|
+
}
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DrawerController, decorators: [{
|
|
70
|
+
type: Injectable
|
|
71
|
+
}] });
|
|
72
|
+
class DynamicDrawerHost {
|
|
73
|
+
visible = model(false, ...(ngDevMode ? [{ debugName: "visible" }] : []));
|
|
74
|
+
cmp = signal(null, ...(ngDevMode ? [{ debugName: "cmp" }] : []));
|
|
75
|
+
cfg = signal({ position: 'right' }, ...(ngDevMode ? [{ debugName: "cfg" }] : []));
|
|
76
|
+
cmpInputs = signal({}, ...(ngDevMode ? [{ debugName: "cmpInputs" }] : []));
|
|
77
|
+
childInjector;
|
|
78
|
+
ref;
|
|
79
|
+
drawerController = new DrawerController();
|
|
80
|
+
/** Computed styleClass combining config + dynamic controller class */
|
|
81
|
+
computedStyleClass = computed(() => {
|
|
82
|
+
const configClass = this.cfg()?.styleClass ?? '';
|
|
83
|
+
const dynamicClass = this.drawerController.styleClass();
|
|
84
|
+
return `${configClass} ${dynamicClass} mt-drawer`.trim();
|
|
85
|
+
}, ...(ngDevMode ? [{ debugName: "computedStyleClass" }] : []));
|
|
86
|
+
computedDrawerStyle = computed(() => {
|
|
87
|
+
const appendTo = this.cfg()?.appendTo;
|
|
88
|
+
if (!appendTo || appendTo === 'body') {
|
|
89
|
+
return { position: 'fixed' };
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}, ...(ngDevMode ? [{ debugName: "computedDrawerStyle" }] : []));
|
|
93
|
+
/** Computed header - controller overrides config if set */
|
|
94
|
+
computedHeader = computed(() => {
|
|
95
|
+
const dynamicHeader = this.drawerController.header();
|
|
96
|
+
return dynamicHeader || this.cfg()?.header || '';
|
|
97
|
+
}, ...(ngDevMode ? [{ debugName: "computedHeader" }] : []));
|
|
98
|
+
/** Computed fullScreen - controller overrides config if set */
|
|
99
|
+
computedFullScreen = computed(() => {
|
|
100
|
+
const dynamicFullScreen = this.drawerController.fullScreen();
|
|
101
|
+
return dynamicFullScreen !== undefined
|
|
102
|
+
? dynamicFullScreen
|
|
103
|
+
: this.cfg()?.fullScreen;
|
|
104
|
+
}, ...(ngDevMode ? [{ debugName: "computedFullScreen" }] : []));
|
|
105
|
+
connect(opts) {
|
|
106
|
+
this.cmp.set(opts.component);
|
|
107
|
+
this.cfg.set(opts.config ?? {});
|
|
108
|
+
this.cmpInputs.set(opts.config?.inputValues ?? {});
|
|
109
|
+
this.ref = opts.ref;
|
|
110
|
+
this.childInjector = Injector.create({
|
|
111
|
+
parent: opts.parent,
|
|
112
|
+
providers: [
|
|
113
|
+
{ provide: DynamicDrawerConfig, useValue: opts.config ?? {} },
|
|
114
|
+
{ provide: DynamicDialogRef, useValue: opts.ref },
|
|
115
|
+
{ provide: DrawerController, useValue: this.drawerController },
|
|
116
|
+
],
|
|
117
|
+
});
|
|
118
|
+
opts.ref.onClose.subscribe(() => {
|
|
119
|
+
this.visible.set(false);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
show() {
|
|
123
|
+
this.visible.set(true);
|
|
124
|
+
}
|
|
125
|
+
handleHide(data = null) {
|
|
126
|
+
this.visible.set(false);
|
|
127
|
+
this.ref?.close(data);
|
|
128
|
+
}
|
|
129
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DynamicDrawerHost, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
130
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: DynamicDrawerHost, isStandalone: true, selector: "mt-dynamic-drawer-host", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, connect: { classPropertyName: "connect", publicName: "connect", isSignal: false, isRequired: true, transformFunction: null } }, outputs: { visible: "visibleChange" }, ngImport: i0, template: `
|
|
131
|
+
<p-drawer
|
|
132
|
+
[(visible)]="visible"
|
|
133
|
+
[appendTo]="'self'"
|
|
134
|
+
[style]="computedDrawerStyle()"
|
|
135
|
+
[closable]="cfg()?.closable"
|
|
136
|
+
[position]="cfg()?.position"
|
|
137
|
+
[fullScreen]="computedFullScreen()"
|
|
138
|
+
[modal]="cfg()?.modal"
|
|
139
|
+
[closeOnEscape]="cfg()?.closeOnEscape"
|
|
140
|
+
[dismissible]="cfg()?.dismissible"
|
|
141
|
+
[transitionOptions]="cfg()?.transitionOptions"
|
|
142
|
+
[styleClass]="computedStyleClass()"
|
|
143
|
+
>
|
|
144
|
+
<ng-template #header>
|
|
145
|
+
<div
|
|
146
|
+
class="flex items-center justify-between px-5 w-full py-3 border-b border-surface"
|
|
147
|
+
>
|
|
148
|
+
<h3 class="text-xl font-semibold">{{ computedHeader() }}</h3>
|
|
149
|
+
<mt-button
|
|
150
|
+
(onClick)="handleHide()"
|
|
151
|
+
variant="outlined"
|
|
152
|
+
styleClass="!bg-white"
|
|
153
|
+
icon="general.x-close"
|
|
154
|
+
severity="secondary"
|
|
155
|
+
>
|
|
156
|
+
</mt-button>
|
|
157
|
+
</div>
|
|
158
|
+
</ng-template>
|
|
159
|
+
@if (childInjector) {
|
|
160
|
+
<ng-container
|
|
161
|
+
*ngComponentOutlet="
|
|
162
|
+
cmp();
|
|
163
|
+
injector: childInjector;
|
|
164
|
+
inputs: cmpInputs()
|
|
165
|
+
"
|
|
166
|
+
>
|
|
167
|
+
</ng-container>
|
|
168
|
+
}
|
|
169
|
+
</p-drawer>
|
|
170
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: DrawerModule }, { kind: "component", type: i1.Drawer, selector: "p-drawer", inputs: ["appendTo", "motionOptions", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "closeButtonProps", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen", "header", "maskStyle", "closable"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }] });
|
|
171
|
+
}
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DynamicDrawerHost, decorators: [{
|
|
173
|
+
type: Component,
|
|
174
|
+
args: [{
|
|
175
|
+
selector: 'mt-dynamic-drawer-host',
|
|
176
|
+
standalone: true,
|
|
177
|
+
imports: [NgComponentOutlet, DrawerModule, Button],
|
|
178
|
+
template: `
|
|
179
|
+
<p-drawer
|
|
180
|
+
[(visible)]="visible"
|
|
181
|
+
[appendTo]="'self'"
|
|
182
|
+
[style]="computedDrawerStyle()"
|
|
183
|
+
[closable]="cfg()?.closable"
|
|
184
|
+
[position]="cfg()?.position"
|
|
185
|
+
[fullScreen]="computedFullScreen()"
|
|
186
|
+
[modal]="cfg()?.modal"
|
|
187
|
+
[closeOnEscape]="cfg()?.closeOnEscape"
|
|
188
|
+
[dismissible]="cfg()?.dismissible"
|
|
189
|
+
[transitionOptions]="cfg()?.transitionOptions"
|
|
190
|
+
[styleClass]="computedStyleClass()"
|
|
191
|
+
>
|
|
192
|
+
<ng-template #header>
|
|
193
|
+
<div
|
|
194
|
+
class="flex items-center justify-between px-5 w-full py-3 border-b border-surface"
|
|
195
|
+
>
|
|
196
|
+
<h3 class="text-xl font-semibold">{{ computedHeader() }}</h3>
|
|
197
|
+
<mt-button
|
|
198
|
+
(onClick)="handleHide()"
|
|
199
|
+
variant="outlined"
|
|
200
|
+
styleClass="!bg-white"
|
|
201
|
+
icon="general.x-close"
|
|
202
|
+
severity="secondary"
|
|
203
|
+
>
|
|
204
|
+
</mt-button>
|
|
205
|
+
</div>
|
|
206
|
+
</ng-template>
|
|
207
|
+
@if (childInjector) {
|
|
208
|
+
<ng-container
|
|
209
|
+
*ngComponentOutlet="
|
|
210
|
+
cmp();
|
|
211
|
+
injector: childInjector;
|
|
212
|
+
inputs: cmpInputs()
|
|
213
|
+
"
|
|
214
|
+
>
|
|
215
|
+
</ng-container>
|
|
216
|
+
}
|
|
217
|
+
</p-drawer>
|
|
218
|
+
`,
|
|
219
|
+
}]
|
|
220
|
+
}], propDecorators: { visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }, { type: i0.Output, args: ["visibleChange"] }], connect: [{
|
|
221
|
+
type: Input,
|
|
222
|
+
args: [{ required: true }]
|
|
223
|
+
}] } });
|
|
224
|
+
|
|
225
|
+
// dynamic-drawer.service.ts
|
|
226
|
+
class DrawerService {
|
|
227
|
+
appRef = inject(ApplicationRef);
|
|
228
|
+
env = inject(EnvironmentInjector);
|
|
229
|
+
rootInjector = inject(Injector);
|
|
230
|
+
destroyRef = inject(DestroyRef);
|
|
231
|
+
doc = inject(DOCUMENT);
|
|
232
|
+
hostRef;
|
|
233
|
+
defauiltConfig = {
|
|
234
|
+
position: 'right',
|
|
235
|
+
modal: true,
|
|
236
|
+
closable: false,
|
|
237
|
+
transitionOptions: '200ms cubic-bezier(0, 0, 1, 1)',
|
|
238
|
+
inputValues: {},
|
|
239
|
+
};
|
|
240
|
+
constructor() {
|
|
241
|
+
this.preloadDrawerHost();
|
|
242
|
+
}
|
|
243
|
+
open(component, config = {}) {
|
|
244
|
+
config = { ...this.defauiltConfig, ...config };
|
|
245
|
+
const targetEl = this.resolveAppendTarget(config.appendTo);
|
|
246
|
+
this.hostRef = createComponent(DynamicDrawerHost, {
|
|
247
|
+
environmentInjector: this.env,
|
|
248
|
+
});
|
|
249
|
+
const ref = new DynamicDialogRef();
|
|
250
|
+
this.hostRef.instance.connect({
|
|
251
|
+
component,
|
|
252
|
+
config,
|
|
253
|
+
parent: this.rootInjector,
|
|
254
|
+
ref,
|
|
255
|
+
});
|
|
256
|
+
this.appRef.attachView(this.hostRef.hostView);
|
|
257
|
+
// 📌 append to target (NOT body when provided)
|
|
258
|
+
targetEl.appendChild(this.hostRef.location.nativeElement);
|
|
259
|
+
// 🧹 auto-clean if app destroyed (SSR / HMR safety)
|
|
260
|
+
this.destroyRef.onDestroy(() => {
|
|
261
|
+
this.appRef.detachView(this.hostRef.hostView);
|
|
262
|
+
this.hostRef.destroy();
|
|
263
|
+
this.hostRef = undefined;
|
|
264
|
+
});
|
|
265
|
+
const currentHostRef = this.hostRef;
|
|
266
|
+
const openDrawer = () => {
|
|
267
|
+
if (this.hostRef !== currentHostRef) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
currentHostRef.instance.show();
|
|
271
|
+
};
|
|
272
|
+
if (this.doc.defaultView?.requestAnimationFrame) {
|
|
273
|
+
this.doc.defaultView.requestAnimationFrame(openDrawer);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
setTimeout(openDrawer, 0);
|
|
277
|
+
}
|
|
278
|
+
return ref;
|
|
279
|
+
}
|
|
280
|
+
preloadDrawerHost() {
|
|
281
|
+
const preloadHostRef = createComponent(DynamicDrawerHost, {
|
|
282
|
+
environmentInjector: this.env,
|
|
283
|
+
});
|
|
284
|
+
const preloadElement = preloadHostRef.location.nativeElement;
|
|
285
|
+
preloadElement.style.display = 'none';
|
|
286
|
+
this.appRef.attachView(preloadHostRef.hostView);
|
|
287
|
+
this.doc.body.appendChild(preloadElement);
|
|
288
|
+
preloadHostRef.changeDetectorRef.detectChanges();
|
|
289
|
+
this.appRef.detachView(preloadHostRef.hostView);
|
|
290
|
+
preloadElement.remove();
|
|
291
|
+
preloadHostRef.destroy();
|
|
292
|
+
}
|
|
293
|
+
resolveAppendTarget(appendTo) {
|
|
294
|
+
if (!appendTo)
|
|
295
|
+
return this.doc.body;
|
|
296
|
+
if (typeof appendTo === 'string') {
|
|
297
|
+
const selector = appendTo.startsWith('#') || appendTo.startsWith('.')
|
|
298
|
+
? appendTo
|
|
299
|
+
: `#${appendTo}`;
|
|
300
|
+
const el = this.doc.querySelector(selector);
|
|
301
|
+
if (!el) {
|
|
302
|
+
return this.doc.body;
|
|
303
|
+
}
|
|
304
|
+
return el;
|
|
305
|
+
}
|
|
306
|
+
return appendTo; // HTMLElement passed directly
|
|
307
|
+
}
|
|
308
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
309
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DrawerService, providedIn: 'root' });
|
|
310
|
+
}
|
|
311
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DrawerService, decorators: [{
|
|
312
|
+
type: Injectable,
|
|
313
|
+
args: [{ providedIn: 'root' }]
|
|
314
|
+
}], ctorParameters: () => [] });
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Generated bundle index. Do not edit.
|
|
318
|
+
*/
|
|
319
|
+
|
|
320
|
+
export { DrawerController, DrawerService, DynamicDrawerConfig, DynamicDrawerHost };
|
|
321
|
+
//# sourceMappingURL=masterteam-components-dynamic-drawer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"masterteam-components-dynamic-drawer.mjs","sources":["../../../../packages/masterteam/components/dynamic-drawer/dynamic-drawer-host.ts","../../../../packages/masterteam/components/dynamic-drawer/dynamic-drawer.ts","../../../../packages/masterteam/components/dynamic-drawer/masterteam-components-dynamic-drawer.ts"],"sourcesContent":["import { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { DrawerModule } from 'primeng/drawer';\r\nimport {\r\n Component,\r\n Injector,\r\n Input,\r\n signal,\r\n InjectionToken,\r\n model,\r\n computed,\r\n Injectable,\r\n} from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\n\r\nexport const DynamicDrawerConfig = new InjectionToken<any>(\r\n 'DynamicDrawerConfig',\r\n);\r\n\r\n/**\r\n * Controller to dynamically update drawer properties from inside the child component.\r\n * Inject this in your drawer content component to modify drawer behavior.\r\n */\r\n@Injectable()\r\nexport class DrawerController {\r\n private _styleClass = signal<string>('');\r\n private _header = signal<string>('');\r\n private _fullScreen = signal<boolean | undefined>(undefined);\r\n\r\n /** Get the current additional styleClass */\r\n get styleClass() {\r\n return this._styleClass;\r\n }\r\n\r\n /** Get the current header */\r\n get header() {\r\n return this._header;\r\n }\r\n\r\n /** Get the current fullScreen state */\r\n get fullScreen() {\r\n return this._fullScreen;\r\n }\r\n\r\n /** Add or replace the dynamic styleClass */\r\n setStyleClass(styleClass: string) {\r\n this._styleClass.set(styleClass);\r\n }\r\n\r\n /** Append a class to the existing styleClass */\r\n addClass(className: string) {\r\n const current = this._styleClass();\r\n if (!current.includes(className)) {\r\n this._styleClass.set((current + ' ' + className).trim());\r\n }\r\n }\r\n\r\n /** Remove a class from the styleClass */\r\n removeClass(className: string) {\r\n const current = this._styleClass();\r\n this._styleClass.set(\r\n current\r\n .split(' ')\r\n .filter((c) => c !== className)\r\n .join(' '),\r\n );\r\n }\r\n\r\n /** Toggle a class on/off */\r\n toggleClass(className: string) {\r\n if (this._styleClass().includes(className)) {\r\n this.removeClass(className);\r\n } else {\r\n this.addClass(className);\r\n }\r\n }\r\n\r\n /** Update the drawer header */\r\n setHeader(header: string) {\r\n this._header.set(header);\r\n }\r\n\r\n /** Toggle fullScreen mode */\r\n setFullScreen(fullScreen: boolean) {\r\n this._fullScreen.set(fullScreen);\r\n }\r\n}\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-dynamic-drawer-host',\r\n standalone: true,\r\n imports: [NgComponentOutlet, DrawerModule, Button],\r\n template: `\r\n <p-drawer\r\n [(visible)]=\"visible\"\r\n [appendTo]=\"'self'\"\r\n [style]=\"computedDrawerStyle()\"\r\n [closable]=\"cfg()?.closable\"\r\n [position]=\"cfg()?.position\"\r\n [fullScreen]=\"computedFullScreen()\"\r\n [modal]=\"cfg()?.modal\"\r\n [closeOnEscape]=\"cfg()?.closeOnEscape\"\r\n [dismissible]=\"cfg()?.dismissible\"\r\n [transitionOptions]=\"cfg()?.transitionOptions\"\r\n [styleClass]=\"computedStyleClass()\"\r\n >\r\n <ng-template #header>\r\n <div\r\n class=\"flex items-center justify-between px-5 w-full py-3 border-b border-surface\"\r\n >\r\n <h3 class=\"text-xl font-semibold\">{{ computedHeader() }}</h3>\r\n <mt-button\r\n (onClick)=\"handleHide()\"\r\n variant=\"outlined\"\r\n styleClass=\"!bg-white\"\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n >\r\n </mt-button>\r\n </div>\r\n </ng-template>\r\n @if (childInjector) {\r\n <ng-container\r\n *ngComponentOutlet=\"\r\n cmp();\r\n injector: childInjector;\r\n inputs: cmpInputs()\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n </p-drawer>\r\n `,\r\n})\r\nexport class DynamicDrawerHost {\r\n public visible = model<boolean>(false);\r\n cmp = signal<any>(null);\r\n cfg = signal<any>({ position: 'right' });\r\n cmpInputs = signal<Record<string, unknown>>({});\r\n childInjector!: Injector;\r\n private ref?: DynamicDialogRef;\r\n private drawerController = new DrawerController();\r\n\r\n /** Computed styleClass combining config + dynamic controller class */\r\n computedStyleClass = computed(() => {\r\n const configClass = this.cfg()?.styleClass ?? '';\r\n const dynamicClass = this.drawerController.styleClass();\r\n return `${configClass} ${dynamicClass} mt-drawer`.trim();\r\n });\r\n\r\n computedDrawerStyle = computed<Record<string, string> | null>(() => {\r\n const appendTo = this.cfg()?.appendTo;\r\n if (!appendTo || appendTo === 'body') {\r\n return { position: 'fixed' };\r\n }\r\n\r\n return null;\r\n });\r\n\r\n /** Computed header - controller overrides config if set */\r\n computedHeader = computed(() => {\r\n const dynamicHeader = this.drawerController.header();\r\n return dynamicHeader || this.cfg()?.header || '';\r\n });\r\n\r\n /** Computed fullScreen - controller overrides config if set */\r\n computedFullScreen = computed(() => {\r\n const dynamicFullScreen = this.drawerController.fullScreen();\r\n return dynamicFullScreen !== undefined\r\n ? dynamicFullScreen\r\n : this.cfg()?.fullScreen;\r\n });\r\n\r\n @Input({ required: true })\r\n connect(opts: {\r\n component: any;\r\n config?: any;\r\n parent: Injector;\r\n ref: DynamicDialogRef;\r\n }) {\r\n this.cmp.set(opts.component);\r\n this.cfg.set(opts.config ?? {});\r\n this.cmpInputs.set(opts.config?.inputValues ?? {});\r\n this.ref = opts.ref;\r\n this.childInjector = Injector.create({\r\n parent: opts.parent,\r\n providers: [\r\n { provide: DynamicDrawerConfig, useValue: opts.config ?? {} },\r\n { provide: DynamicDialogRef, useValue: opts.ref },\r\n { provide: DrawerController, useValue: this.drawerController },\r\n ],\r\n });\r\n\r\n opts.ref.onClose.subscribe(() => {\r\n this.visible.set(false);\r\n });\r\n }\r\n\r\n show() {\r\n this.visible.set(true);\r\n }\r\n\r\n handleHide(data = null) {\r\n this.visible.set(false);\r\n this.ref?.close(data);\r\n }\r\n}\r\n","// dynamic-drawer.service.ts\r\nimport {\r\n Injectable,\r\n Type,\r\n createComponent,\r\n EnvironmentInjector,\r\n ApplicationRef,\r\n Injector,\r\n DestroyRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { DynamicDrawerHost } from './dynamic-drawer-host';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\n\r\nexport interface DynamicDrawerConfigInterface {\r\n header?: string;\r\n position?: string;\r\n data?: any;\r\n fullScreen?: boolean;\r\n modal?: boolean;\r\n closable?: boolean;\r\n closeOnEscape?: boolean;\r\n dismissible?: boolean;\r\n appendTo?: any;\r\n transitionOptions?: string;\r\n styleClass?: string;\r\n inputValues?: any;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DrawerService {\r\n private appRef = inject(ApplicationRef);\r\n private env = inject(EnvironmentInjector);\r\n private rootInjector = inject(Injector);\r\n private destroyRef = inject(DestroyRef);\r\n private doc = inject(DOCUMENT);\r\n private hostRef?: ReturnType<typeof createComponent<DynamicDrawerHost>>;\r\n defauiltConfig: DynamicDrawerConfigInterface = {\r\n position: 'right',\r\n modal: true,\r\n closable: false,\r\n transitionOptions: '200ms cubic-bezier(0, 0, 1, 1)',\r\n inputValues: {},\r\n };\r\n\r\n constructor() {\r\n this.preloadDrawerHost();\r\n }\r\n\r\n open<T>(\r\n component: Type<any>,\r\n config: DynamicDrawerConfigInterface = {},\r\n ): DynamicDialogRef<T> {\r\n config = { ...this.defauiltConfig, ...config };\r\n\r\n const targetEl = this.resolveAppendTarget(config.appendTo);\r\n\r\n this.hostRef = createComponent(DynamicDrawerHost, {\r\n environmentInjector: this.env,\r\n });\r\n\r\n const ref = new DynamicDialogRef<T>();\r\n this.hostRef.instance.connect({\r\n component,\r\n config,\r\n parent: this.rootInjector,\r\n ref,\r\n });\r\n\r\n this.appRef.attachView(this.hostRef.hostView);\r\n\r\n // 📌 append to target (NOT body when provided)\r\n targetEl.appendChild(this.hostRef.location.nativeElement);\r\n\r\n // 🧹 auto-clean if app destroyed (SSR / HMR safety)\r\n this.destroyRef.onDestroy(() => {\r\n this.appRef.detachView(this.hostRef!.hostView);\r\n this.hostRef!.destroy();\r\n this.hostRef = undefined;\r\n });\r\n\r\n const currentHostRef = this.hostRef;\r\n const openDrawer = () => {\r\n if (this.hostRef !== currentHostRef) {\r\n return;\r\n }\r\n\r\n currentHostRef.instance.show();\r\n };\r\n\r\n if (this.doc.defaultView?.requestAnimationFrame) {\r\n this.doc.defaultView.requestAnimationFrame(openDrawer);\r\n } else {\r\n setTimeout(openDrawer, 0);\r\n }\r\n\r\n return ref;\r\n }\r\n\r\n private preloadDrawerHost() {\r\n const preloadHostRef = createComponent(DynamicDrawerHost, {\r\n environmentInjector: this.env,\r\n });\r\n const preloadElement = preloadHostRef.location.nativeElement as HTMLElement;\r\n\r\n preloadElement.style.display = 'none';\r\n\r\n this.appRef.attachView(preloadHostRef.hostView);\r\n this.doc.body.appendChild(preloadElement);\r\n preloadHostRef.changeDetectorRef.detectChanges();\r\n this.appRef.detachView(preloadHostRef.hostView);\r\n preloadElement.remove();\r\n preloadHostRef.destroy();\r\n }\r\n\r\n private resolveAppendTarget(appendTo?: string | HTMLElement): HTMLElement {\r\n if (!appendTo) return this.doc.body;\r\n\r\n if (typeof appendTo === 'string') {\r\n const selector =\r\n appendTo.startsWith('#') || appendTo.startsWith('.')\r\n ? appendTo\r\n : `#${appendTo}`;\r\n const el = this.doc.querySelector(selector) as HTMLElement | null;\r\n if (!el) {\r\n return this.doc.body;\r\n }\r\n return el;\r\n }\r\n\r\n return appendTo; // HTMLElement passed directly\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAca,mBAAmB,GAAG,IAAI,cAAc,CACnD,qBAAqB;AAGvB;;;AAGG;MAEU,gBAAgB,CAAA;AACnB,IAAA,WAAW,GAAG,MAAM,CAAS,EAAE,uDAAC;AAChC,IAAA,OAAO,GAAG,MAAM,CAAS,EAAE,mDAAC;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAsB,SAAS,uDAAC;;AAG5D,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;;AAGA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;;AAGA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;;AAGA,IAAA,aAAa,CAAC,UAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;;AAGA,IAAA,QAAQ,CAAC,SAAiB,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;QAC1D;IACF;;AAGA,IAAA,WAAW,CAAC,SAAiB,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB;aACG,KAAK,CAAC,GAAG;aACT,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS;AAC7B,aAAA,IAAI,CAAC,GAAG,CAAC,CACb;IACH;;AAGA,IAAA,WAAW,CAAC,SAAiB,EAAA;QAC3B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1B;IACF;;AAGA,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;IAC1B;;AAGA,IAAA,aAAa,CAAC,UAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC;IAClC;uGA7DW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;MAgHY,iBAAiB,CAAA;AACrB,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;AACtC,IAAA,GAAG,GAAG,MAAM,CAAM,IAAI,+CAAC;IACvB,GAAG,GAAG,MAAM,CAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACxC,IAAA,SAAS,GAAG,MAAM,CAA0B,EAAE,qDAAC;AAC/C,IAAA,aAAa;AACL,IAAA,GAAG;AACH,IAAA,gBAAgB,GAAG,IAAI,gBAAgB,EAAE;;AAGjD,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,IAAI,EAAE;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;QACvD,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,YAAY,YAAY,CAAC,IAAI,EAAE;AAC1D,IAAA,CAAC,8DAAC;AAEF,IAAA,mBAAmB,GAAG,QAAQ,CAAgC,MAAK;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ;AACrC,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE;AACpC,YAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC9B;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,+DAAC;;AAGF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;QACpD,OAAO,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,IAAI,EAAE;AAClD,IAAA,CAAC,0DAAC;;AAGF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;QAC5D,OAAO,iBAAiB,KAAK;AAC3B,cAAE;AACF,cAAE,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU;AAC5B,IAAA,CAAC,8DAAC;AAGF,IAAA,OAAO,CAAC,IAKP,EAAA;QACC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACnB,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;gBAC7D,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;gBACjD,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAC/D,aAAA;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,CAAC,CAAC;IACJ;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;IAEA,UAAU,CAAC,IAAI,GAAG,IAAI,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;IACvB;uGAvEW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1ClB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzCS,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA2CtC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA9C7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,MAAM,CAAC;AAClD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA;AACF,iBAAA;;sBAwCE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;AC7K3B;MA+Ba,aAAa,CAAA;AAChB,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjC,IAAA,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,OAAO;AACf,IAAA,cAAc,GAAiC;AAC7C,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,iBAAiB,EAAE,gCAAgC;AACnD,QAAA,WAAW,EAAE,EAAE;KAChB;AAED,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEA,IAAA,IAAI,CACF,SAAoB,EACpB,MAAA,GAAuC,EAAE,EAAA;QAEzC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,MAAM,EAAE;QAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE1D,QAAA,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,iBAAiB,EAAE;YAChD,mBAAmB,EAAE,IAAI,CAAC,GAAG;AAC9B,SAAA,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,IAAI,gBAAgB,EAAK;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5B,SAAS;YACT,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,GAAG;AACJ,SAAA,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;;QAG7C,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;;AAGzD,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAQ,CAAC,QAAQ,CAAC;AAC9C,YAAA,IAAI,CAAC,OAAQ,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AAC1B,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO;QACnC,MAAM,UAAU,GAAG,MAAK;AACtB,YAAA,IAAI,IAAI,CAAC,OAAO,KAAK,cAAc,EAAE;gBACnC;YACF;AAEA,YAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE;AAChC,QAAA,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,qBAAqB,EAAE;YAC/C,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,CAAC;QACxD;aAAO;AACL,YAAA,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3B;AAEA,QAAA,OAAO,GAAG;IACZ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,iBAAiB,EAAE;YACxD,mBAAmB,EAAE,IAAI,CAAC,GAAG;AAC9B,SAAA,CAAC;AACF,QAAA,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,aAA4B;AAE3E,QAAA,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QAErC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACzC,QAAA,cAAc,CAAC,iBAAiB,CAAC,aAAa,EAAE;QAChD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC/C,cAAc,CAAC,MAAM,EAAE;QACvB,cAAc,CAAC,OAAO,EAAE;IAC1B;AAEQ,IAAA,mBAAmB,CAAC,QAA+B,EAAA;AACzD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI;AAEnC,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,YAAA,MAAM,QAAQ,GACZ,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG;AACjD,kBAAE;AACF,kBAAE,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAuB;YACjE,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI;YACtB;AACA,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,QAAQ,CAAC;IAClB;uGArGW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC9BlC;;AAEG;;;;"}
|