@masterteam/components 0.0.67 → 0.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +63 -63
  2. package/assets/cairo.css +70 -70
  3. package/assets/common.css +1 -1
  4. package/assets/i18n/ar.json +36 -36
  5. package/assets/i18n/en.json +36 -36
  6. package/assets/inter.css +418 -418
  7. package/fesm2022/masterteam-components-avatar-text.mjs +2 -2
  8. package/fesm2022/masterteam-components-avatar-text.mjs.map +1 -1
  9. package/fesm2022/masterteam-components-avatar.mjs +2 -2
  10. package/fesm2022/masterteam-components-avatar.mjs.map +1 -1
  11. package/fesm2022/masterteam-components-breadcrumb.mjs +2 -2
  12. package/fesm2022/masterteam-components-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/masterteam-components-button-group.mjs +2 -2
  14. package/fesm2022/masterteam-components-button-group.mjs.map +1 -1
  15. package/fesm2022/masterteam-components-button.mjs +2 -2
  16. package/fesm2022/masterteam-components-button.mjs.map +1 -1
  17. package/fesm2022/masterteam-components-card.mjs +2 -2
  18. package/fesm2022/masterteam-components-card.mjs.map +1 -1
  19. package/fesm2022/masterteam-components-checkbox-field.mjs +2 -2
  20. package/fesm2022/masterteam-components-checkbox-field.mjs.map +1 -1
  21. package/fesm2022/masterteam-components-chip.mjs +2 -2
  22. package/fesm2022/masterteam-components-chip.mjs.map +1 -1
  23. package/fesm2022/masterteam-components-color-picker-field.mjs +2 -2
  24. package/fesm2022/masterteam-components-color-picker-field.mjs.map +1 -1
  25. package/fesm2022/masterteam-components-confirmation.mjs +2 -2
  26. package/fesm2022/masterteam-components-confirmation.mjs.map +1 -1
  27. package/fesm2022/masterteam-components-date-field.mjs +2 -2
  28. package/fesm2022/masterteam-components-date-field.mjs.map +1 -1
  29. package/fesm2022/masterteam-components-dialog.mjs.map +1 -1
  30. package/fesm2022/masterteam-components-drawer.mjs +2 -2
  31. package/fesm2022/masterteam-components-drawer.mjs.map +1 -1
  32. package/fesm2022/masterteam-components-dynamic-drawer.mjs +152 -70
  33. package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -1
  34. package/fesm2022/masterteam-components-editor-field.mjs +2 -2
  35. package/fesm2022/masterteam-components-editor-field.mjs.map +1 -1
  36. package/fesm2022/masterteam-components-field-validation.mjs +20 -20
  37. package/fesm2022/masterteam-components-field-validation.mjs.map +1 -1
  38. package/fesm2022/masterteam-components-formula-builder.mjs +360 -0
  39. package/fesm2022/masterteam-components-formula-builder.mjs.map +1 -0
  40. package/fesm2022/masterteam-components-icon-field.mjs +2 -2
  41. package/fesm2022/masterteam-components-icon-field.mjs.map +1 -1
  42. package/fesm2022/masterteam-components-list.mjs +2 -2
  43. package/fesm2022/masterteam-components-list.mjs.map +1 -1
  44. package/fesm2022/masterteam-components-menu.mjs +2 -2
  45. package/fesm2022/masterteam-components-menu.mjs.map +1 -1
  46. package/fesm2022/masterteam-components-modal.mjs.map +1 -1
  47. package/fesm2022/masterteam-components-module-summary-card.mjs +2 -2
  48. package/fesm2022/masterteam-components-module-summary-card.mjs.map +1 -1
  49. package/fesm2022/masterteam-components-multi-select-field.mjs +2 -2
  50. package/fesm2022/masterteam-components-multi-select-field.mjs.map +1 -1
  51. package/fesm2022/masterteam-components-number-field.mjs +2 -2
  52. package/fesm2022/masterteam-components-number-field.mjs.map +1 -1
  53. package/fesm2022/masterteam-components-page-header.mjs +2 -2
  54. package/fesm2022/masterteam-components-page-header.mjs.map +1 -1
  55. package/fesm2022/masterteam-components-page.mjs +2 -2
  56. package/fesm2022/masterteam-components-page.mjs.map +1 -1
  57. package/fesm2022/masterteam-components-paginator.mjs +2 -2
  58. package/fesm2022/masterteam-components-paginator.mjs.map +1 -1
  59. package/fesm2022/masterteam-components-pick-list-field.mjs +2 -2
  60. package/fesm2022/masterteam-components-pick-list-field.mjs.map +1 -1
  61. package/fesm2022/masterteam-components-radio-button-field.mjs +2 -2
  62. package/fesm2022/masterteam-components-radio-button-field.mjs.map +1 -1
  63. package/fesm2022/masterteam-components-radio-cards-field.mjs +2 -2
  64. package/fesm2022/masterteam-components-radio-cards-field.mjs.map +1 -1
  65. package/fesm2022/masterteam-components-radio-cards.mjs +2 -2
  66. package/fesm2022/masterteam-components-radio-cards.mjs.map +1 -1
  67. package/fesm2022/masterteam-components-select-field.mjs +2 -2
  68. package/fesm2022/masterteam-components-select-field.mjs.map +1 -1
  69. package/fesm2022/masterteam-components-sidebar.mjs +2 -2
  70. package/fesm2022/masterteam-components-sidebar.mjs.map +1 -1
  71. package/fesm2022/masterteam-components-slider-field.mjs +2 -2
  72. package/fesm2022/masterteam-components-slider-field.mjs.map +1 -1
  73. package/fesm2022/masterteam-components-table.mjs +2 -2
  74. package/fesm2022/masterteam-components-table.mjs.map +1 -1
  75. package/fesm2022/masterteam-components-tabs.mjs +2 -2
  76. package/fesm2022/masterteam-components-tabs.mjs.map +1 -1
  77. package/fesm2022/masterteam-components-text-field.mjs +2 -2
  78. package/fesm2022/masterteam-components-text-field.mjs.map +1 -1
  79. package/fesm2022/masterteam-components-textarea-field.mjs +2 -2
  80. package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -1
  81. package/fesm2022/masterteam-components-toast.mjs +2 -2
  82. package/fesm2022/masterteam-components-toast.mjs.map +1 -1
  83. package/fesm2022/masterteam-components-toggle-field.mjs +2 -2
  84. package/fesm2022/masterteam-components-toggle-field.mjs.map +1 -1
  85. package/fesm2022/masterteam-components-tooltip.mjs.map +1 -1
  86. package/fesm2022/masterteam-components-topbar.mjs +2 -2
  87. package/fesm2022/masterteam-components-topbar.mjs.map +1 -1
  88. package/fesm2022/masterteam-components-upload-field.mjs +6 -6
  89. package/fesm2022/masterteam-components-upload-field.mjs.map +1 -1
  90. package/fesm2022/masterteam-components-user-search-field.mjs +2 -2
  91. package/fesm2022/masterteam-components-user-search-field.mjs.map +1 -1
  92. package/fesm2022/masterteam-components.mjs +61 -61
  93. package/fesm2022/masterteam-components.mjs.map +1 -1
  94. package/package.json +11 -7
  95. package/types/masterteam-components-dynamic-drawer.d.ts +37 -1
  96. package/types/masterteam-components-formula-builder.d.ts +69 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, model, signal, Injector, Input, Component, inject, ApplicationRef, EnvironmentInjector, DestroyRef, createComponent, Injectable } from '@angular/core';
2
+ import { InjectionToken, signal, Injectable, model, computed, Injector, Input, Component, inject, ApplicationRef, EnvironmentInjector, DestroyRef, createComponent } from '@angular/core';
3
3
  import { NgComponentOutlet, DOCUMENT } from '@angular/common';
4
4
  import { DynamicDialogRef } from 'primeng/dynamicdialog';
5
5
  import * as i1 from 'primeng/drawer';
@@ -7,6 +7,68 @@ import { DrawerModule } from 'primeng/drawer';
7
7
  import { Button } from '@masterteam/components/button';
8
8
 
9
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
+ }] });
10
72
  class DynamicDrawerHost {
11
73
  visible = model(false, ...(ngDevMode ? [{ debugName: "visible" }] : []));
12
74
  cmp = signal(null, ...(ngDevMode ? [{ debugName: "cmp" }] : []));
@@ -14,6 +76,25 @@ class DynamicDrawerHost {
14
76
  cmpInputs = signal({}, ...(ngDevMode ? [{ debugName: "cmpInputs" }] : []));
15
77
  childInjector;
16
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
+ /** Computed header - controller overrides config if set */
87
+ computedHeader = computed(() => {
88
+ const dynamicHeader = this.drawerController.header();
89
+ return dynamicHeader || this.cfg()?.header || '';
90
+ }, ...(ngDevMode ? [{ debugName: "computedHeader" }] : []));
91
+ /** Computed fullScreen - controller overrides config if set */
92
+ computedFullScreen = computed(() => {
93
+ const dynamicFullScreen = this.drawerController.fullScreen();
94
+ return dynamicFullScreen !== undefined
95
+ ? dynamicFullScreen
96
+ : this.cfg()?.fullScreen;
97
+ }, ...(ngDevMode ? [{ debugName: "computedFullScreen" }] : []));
17
98
  connect(opts) {
18
99
  this.cmp.set(opts.component);
19
100
  this.cfg.set(opts.config ?? {});
@@ -24,6 +105,7 @@ class DynamicDrawerHost {
24
105
  providers: [
25
106
  { provide: DynamicDrawerConfig, useValue: opts.config ?? {} },
26
107
  { provide: DynamicDialogRef, useValue: opts.ref },
108
+ { provide: DrawerController, useValue: this.drawerController },
27
109
  ],
28
110
  });
29
111
  opts.ref.onClose.subscribe(() => {
@@ -36,40 +118,40 @@ class DynamicDrawerHost {
36
118
  this.ref?.close(data);
37
119
  }
38
120
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DynamicDrawerHost, deps: [], target: i0.ɵɵFactoryTarget.Component });
39
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.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: `
40
- <p-drawer
41
- [(visible)]="visible"
42
- [closable]="cfg()?.closable"
43
- [position]="cfg()?.position"
44
- [fullScreen]="cfg()?.fullScreen"
45
- [modal]="cfg()?.modal"
46
- [closeOnEscape]="cfg()?.closeOnEscape"
47
- [dismissible]="cfg()?.dismissible"
48
- [appendTo]="cfg()?.appendTo"
49
- [transitionOptions]="cfg()?.transitionOptions"
50
- [styleClass]="cfg()?.styleClass + ' mt-drawer'"
51
- >
52
- <ng-template #header>
53
- <div
54
- class="flex items-center justify-between px-5 w-full py-3 border-b border-surface"
55
- >
56
- <h3 class="text-xl font-semibold">{{ cfg()?.header }}</h3>
57
- <mt-button
58
- (onClick)="handleHide()"
59
- variant="outlined"
60
- styleClass="!bg-white"
61
- icon="general.x-close"
62
- severity="secondary"
63
- >
64
- </mt-button>
65
- </div>
66
- </ng-template>
67
-
68
- <ng-container
69
- *ngComponentOutlet="cmp(); injector: childInjector; inputs: cmpInputs()"
70
- >
71
- </ng-container>
72
- </p-drawer>
121
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.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: `
122
+ <p-drawer
123
+ [(visible)]="visible"
124
+ [closable]="cfg()?.closable"
125
+ [position]="cfg()?.position"
126
+ [fullScreen]="computedFullScreen()"
127
+ [modal]="cfg()?.modal"
128
+ [closeOnEscape]="cfg()?.closeOnEscape"
129
+ [dismissible]="cfg()?.dismissible"
130
+ [appendTo]="cfg()?.appendTo"
131
+ [transitionOptions]="cfg()?.transitionOptions"
132
+ [styleClass]="computedStyleClass()"
133
+ >
134
+ <ng-template #header>
135
+ <div
136
+ class="flex items-center justify-between px-5 w-full py-3 border-b border-surface"
137
+ >
138
+ <h3 class="text-xl font-semibold">{{ computedHeader() }}</h3>
139
+ <mt-button
140
+ (onClick)="handleHide()"
141
+ variant="outlined"
142
+ styleClass="!bg-white"
143
+ icon="general.x-close"
144
+ severity="secondary"
145
+ >
146
+ </mt-button>
147
+ </div>
148
+ </ng-template>
149
+
150
+ <ng-container
151
+ *ngComponentOutlet="cmp(); injector: childInjector; inputs: cmpInputs()"
152
+ >
153
+ </ng-container>
154
+ </p-drawer>
73
155
  `, 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"] }] });
74
156
  }
75
157
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DynamicDrawerHost, decorators: [{
@@ -78,40 +160,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
78
160
  selector: 'mt-dynamic-drawer-host',
79
161
  standalone: true,
80
162
  imports: [NgComponentOutlet, DrawerModule, Button],
81
- template: `
82
- <p-drawer
83
- [(visible)]="visible"
84
- [closable]="cfg()?.closable"
85
- [position]="cfg()?.position"
86
- [fullScreen]="cfg()?.fullScreen"
87
- [modal]="cfg()?.modal"
88
- [closeOnEscape]="cfg()?.closeOnEscape"
89
- [dismissible]="cfg()?.dismissible"
90
- [appendTo]="cfg()?.appendTo"
91
- [transitionOptions]="cfg()?.transitionOptions"
92
- [styleClass]="cfg()?.styleClass + ' mt-drawer'"
93
- >
94
- <ng-template #header>
95
- <div
96
- class="flex items-center justify-between px-5 w-full py-3 border-b border-surface"
97
- >
98
- <h3 class="text-xl font-semibold">{{ cfg()?.header }}</h3>
99
- <mt-button
100
- (onClick)="handleHide()"
101
- variant="outlined"
102
- styleClass="!bg-white"
103
- icon="general.x-close"
104
- severity="secondary"
105
- >
106
- </mt-button>
107
- </div>
108
- </ng-template>
109
-
110
- <ng-container
111
- *ngComponentOutlet="cmp(); injector: childInjector; inputs: cmpInputs()"
112
- >
113
- </ng-container>
114
- </p-drawer>
163
+ template: `
164
+ <p-drawer
165
+ [(visible)]="visible"
166
+ [closable]="cfg()?.closable"
167
+ [position]="cfg()?.position"
168
+ [fullScreen]="computedFullScreen()"
169
+ [modal]="cfg()?.modal"
170
+ [closeOnEscape]="cfg()?.closeOnEscape"
171
+ [dismissible]="cfg()?.dismissible"
172
+ [appendTo]="cfg()?.appendTo"
173
+ [transitionOptions]="cfg()?.transitionOptions"
174
+ [styleClass]="computedStyleClass()"
175
+ >
176
+ <ng-template #header>
177
+ <div
178
+ class="flex items-center justify-between px-5 w-full py-3 border-b border-surface"
179
+ >
180
+ <h3 class="text-xl font-semibold">{{ computedHeader() }}</h3>
181
+ <mt-button
182
+ (onClick)="handleHide()"
183
+ variant="outlined"
184
+ styleClass="!bg-white"
185
+ icon="general.x-close"
186
+ severity="secondary"
187
+ >
188
+ </mt-button>
189
+ </div>
190
+ </ng-template>
191
+
192
+ <ng-container
193
+ *ngComponentOutlet="cmp(); injector: childInjector; inputs: cmpInputs()"
194
+ >
195
+ </ng-container>
196
+ </p-drawer>
115
197
  `,
116
198
  }]
117
199
  }], propDecorators: { visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }, { type: i0.Output, args: ["visibleChange"] }], connect: [{
@@ -185,5 +267,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
185
267
  * Generated bundle index. Do not edit.
186
268
  */
187
269
 
188
- export { DrawerService, DynamicDrawerConfig, DynamicDrawerHost };
270
+ export { DrawerController, DrawerService, DynamicDrawerConfig, DynamicDrawerHost };
189
271
  //# sourceMappingURL=masterteam-components-dynamic-drawer.mjs.map
@@ -1 +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} from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\n\r\nexport const DynamicDrawerConfig = new InjectionToken<any>(\r\n 'DynamicDrawerConfig',\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 [closable]=\"cfg()?.closable\"\r\n [position]=\"cfg()?.position\"\r\n [fullScreen]=\"cfg()?.fullScreen\"\r\n [modal]=\"cfg()?.modal\"\r\n [closeOnEscape]=\"cfg()?.closeOnEscape\"\r\n [dismissible]=\"cfg()?.dismissible\"\r\n [appendTo]=\"cfg()?.appendTo\"\r\n [transitionOptions]=\"cfg()?.transitionOptions\"\r\n [styleClass]=\"cfg()?.styleClass + ' mt-drawer'\"\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\">{{ cfg()?.header }}</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\r\n <ng-container\r\n *ngComponentOutlet=\"cmp(); injector: childInjector; inputs: cmpInputs()\"\r\n >\r\n </ng-container>\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>({});\r\n cmpInputs = signal<Record<string, unknown>>({});\r\n childInjector!: Injector;\r\n private ref?: DynamicDialogRef;\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 ],\r\n });\r\n opts.ref.onClose.subscribe(() => {\r\n this.visible.set(false);\r\n });\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 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 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 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 return ref;\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":"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"}
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';\nimport { DrawerModule } from 'primeng/drawer';\nimport {\n Component,\n Injector,\n Input,\n signal,\n InjectionToken,\n model,\n computed,\n Injectable,\n} from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\n\nexport const DynamicDrawerConfig = new InjectionToken<any>(\n 'DynamicDrawerConfig',\n);\n\n/**\n * Controller to dynamically update drawer properties from inside the child component.\n * Inject this in your drawer content component to modify drawer behavior.\n */\n@Injectable()\nexport class DrawerController {\n private _styleClass = signal<string>('');\n private _header = signal<string>('');\n private _fullScreen = signal<boolean | undefined>(undefined);\n\n /** Get the current additional styleClass */\n get styleClass() {\n return this._styleClass;\n }\n\n /** Get the current header */\n get header() {\n return this._header;\n }\n\n /** Get the current fullScreen state */\n get fullScreen() {\n return this._fullScreen;\n }\n\n /** Add or replace the dynamic styleClass */\n setStyleClass(styleClass: string) {\n this._styleClass.set(styleClass);\n }\n\n /** Append a class to the existing styleClass */\n addClass(className: string) {\n const current = this._styleClass();\n if (!current.includes(className)) {\n this._styleClass.set((current + ' ' + className).trim());\n }\n }\n\n /** Remove a class from the styleClass */\n removeClass(className: string) {\n const current = this._styleClass();\n this._styleClass.set(\n current\n .split(' ')\n .filter((c) => c !== className)\n .join(' '),\n );\n }\n\n /** Toggle a class on/off */\n toggleClass(className: string) {\n if (this._styleClass().includes(className)) {\n this.removeClass(className);\n } else {\n this.addClass(className);\n }\n }\n\n /** Update the drawer header */\n setHeader(header: string) {\n this._header.set(header);\n }\n\n /** Toggle fullScreen mode */\n setFullScreen(fullScreen: boolean) {\n this._fullScreen.set(fullScreen);\n }\n}\nimport { Button } from '@masterteam/components/button';\n\n@Component({\n selector: 'mt-dynamic-drawer-host',\n standalone: true,\n imports: [NgComponentOutlet, DrawerModule, Button],\n template: `\n <p-drawer\n [(visible)]=\"visible\"\n [closable]=\"cfg()?.closable\"\n [position]=\"cfg()?.position\"\n [fullScreen]=\"computedFullScreen()\"\n [modal]=\"cfg()?.modal\"\n [closeOnEscape]=\"cfg()?.closeOnEscape\"\n [dismissible]=\"cfg()?.dismissible\"\n [appendTo]=\"cfg()?.appendTo\"\n [transitionOptions]=\"cfg()?.transitionOptions\"\n [styleClass]=\"computedStyleClass()\"\n >\n <ng-template #header>\n <div\n class=\"flex items-center justify-between px-5 w-full py-3 border-b border-surface\"\n >\n <h3 class=\"text-xl font-semibold\">{{ computedHeader() }}</h3>\n <mt-button\n (onClick)=\"handleHide()\"\n variant=\"outlined\"\n styleClass=\"!bg-white\"\n icon=\"general.x-close\"\n severity=\"secondary\"\n >\n </mt-button>\n </div>\n </ng-template>\n\n <ng-container\n *ngComponentOutlet=\"cmp(); injector: childInjector; inputs: cmpInputs()\"\n >\n </ng-container>\n </p-drawer>\n `,\n})\nexport class DynamicDrawerHost {\n public visible = model<boolean>(false);\n cmp = signal<any>(null);\n cfg = signal<any>({});\n cmpInputs = signal<Record<string, unknown>>({});\n childInjector!: Injector;\n private ref?: DynamicDialogRef;\n private drawerController = new DrawerController();\n\n /** Computed styleClass combining config + dynamic controller class */\n computedStyleClass = computed(() => {\n const configClass = this.cfg()?.styleClass ?? '';\n const dynamicClass = this.drawerController.styleClass();\n return `${configClass} ${dynamicClass} mt-drawer`.trim();\n });\n\n /** Computed header - controller overrides config if set */\n computedHeader = computed(() => {\n const dynamicHeader = this.drawerController.header();\n return dynamicHeader || this.cfg()?.header || '';\n });\n\n /** Computed fullScreen - controller overrides config if set */\n computedFullScreen = computed(() => {\n const dynamicFullScreen = this.drawerController.fullScreen();\n return dynamicFullScreen !== undefined\n ? dynamicFullScreen\n : this.cfg()?.fullScreen;\n });\n\n @Input({ required: true })\n connect(opts: {\n component: any;\n config?: any;\n parent: Injector;\n ref: DynamicDialogRef;\n }) {\n this.cmp.set(opts.component);\n this.cfg.set(opts.config ?? {});\n this.cmpInputs.set(opts.config?.inputValues ?? {});\n this.ref = opts.ref;\n this.childInjector = Injector.create({\n parent: opts.parent,\n providers: [\n { provide: DynamicDrawerConfig, useValue: opts.config ?? {} },\n { provide: DynamicDialogRef, useValue: opts.ref },\n { provide: DrawerController, useValue: this.drawerController },\n ],\n });\n opts.ref.onClose.subscribe(() => {\n this.visible.set(false);\n });\n this.visible.set(true);\n }\n\n handleHide(data = null) {\n this.visible.set(false);\n this.ref?.close(data);\n }\n}\n","// dynamic-drawer.service.ts\nimport {\n Injectable,\n Type,\n createComponent,\n EnvironmentInjector,\n ApplicationRef,\n Injector,\n DestroyRef,\n inject,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DynamicDrawerHost } from './dynamic-drawer-host';\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\n\nexport interface DynamicDrawerConfigInterface {\n header?: string;\n position?: string;\n data?: any;\n fullScreen?: boolean;\n modal?: boolean;\n closable?: boolean;\n closeOnEscape?: boolean;\n dismissible?: boolean;\n appendTo?: any;\n transitionOptions?: string;\n styleClass?: string;\n inputValues?: any;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DrawerService {\n private appRef = inject(ApplicationRef);\n private env = inject(EnvironmentInjector);\n private rootInjector = inject(Injector);\n private destroyRef = inject(DestroyRef);\n private doc = inject(DOCUMENT);\n private hostRef?: ReturnType<typeof createComponent<DynamicDrawerHost>>;\n defauiltConfig: DynamicDrawerConfigInterface = {\n position: 'right',\n modal: true,\n closable: false,\n transitionOptions: '200ms cubic-bezier(0, 0, 1, 1)',\n inputValues: {},\n };\n open<T>(\n component: Type<any>,\n config: DynamicDrawerConfigInterface = {},\n ): DynamicDialogRef<T> {\n config = { ...this.defauiltConfig, ...config };\n\n const targetEl = this.resolveAppendTarget(config.appendTo);\n\n this.hostRef = createComponent(DynamicDrawerHost, {\n environmentInjector: this.env,\n });\n\n this.appRef.attachView(this.hostRef.hostView);\n\n // 📌 append to target (NOT body when provided)\n targetEl.appendChild(this.hostRef.location.nativeElement);\n\n // 🧹 auto-clean if app destroyed (SSR / HMR safety)\n this.destroyRef.onDestroy(() => {\n this.appRef.detachView(this.hostRef!.hostView);\n this.hostRef!.destroy();\n this.hostRef = undefined;\n });\n\n const ref = new DynamicDialogRef<T>();\n this.hostRef.instance.connect({\n component,\n config,\n parent: this.rootInjector,\n ref,\n });\n\n return ref;\n }\n\n private resolveAppendTarget(appendTo?: string | HTMLElement): HTMLElement {\n if (!appendTo) return this.doc.body;\n\n if (typeof appendTo === 'string') {\n const selector =\n appendTo.startsWith('#') || appendTo.startsWith('.')\n ? appendTo\n : `#${appendTo}`;\n const el = this.doc.querySelector(selector) as HTMLElement | null;\n if (!el) {\n return this.doc.body;\n }\n return el;\n }\n\n return appendTo; // HTMLElement passed directly\n }\n}\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;;MA0GY,iBAAiB,CAAA;AACrB,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;AACtC,IAAA,GAAG,GAAG,MAAM,CAAM,IAAI,+CAAC;AACvB,IAAA,GAAG,GAAG,MAAM,CAAM,EAAE,+CAAC;AACrB,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;;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;QACF,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,CAAC,CAAC;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;uGA1DW,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,EApClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnCS,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;;2FAqCtC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAxC7B,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,EAAA,CAAA;AACF,iBAAA;;sBA+BE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;AC9J3B;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;AACD,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;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,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;AAEF,QAAA,OAAO,GAAG;IACZ;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;uGAjEW,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;;;;"}