@tolle_/tolle-ui 0.0.1-beta

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 (77) hide show
  1. package/README.md +35 -0
  2. package/esm2022/lib/accordion-item.component.mjs +78 -0
  3. package/esm2022/lib/accordion.component.mjs +60 -0
  4. package/esm2022/lib/badge.component.mjs +76 -0
  5. package/esm2022/lib/button-group.component.mjs +25 -0
  6. package/esm2022/lib/button.component.mjs +70 -0
  7. package/esm2022/lib/calendar.component.mjs +315 -0
  8. package/esm2022/lib/card.component.mjs +94 -0
  9. package/esm2022/lib/checkbox.component.mjs +100 -0
  10. package/esm2022/lib/data-table.component.mjs +332 -0
  11. package/esm2022/lib/date-picker.component.mjs +232 -0
  12. package/esm2022/lib/date-range-picker.component.mjs +208 -0
  13. package/esm2022/lib/input.component.mjs +134 -0
  14. package/esm2022/lib/masked-input.component.mjs +179 -0
  15. package/esm2022/lib/modal-ref.mjs +31 -0
  16. package/esm2022/lib/modal-stack.service.mjs +26 -0
  17. package/esm2022/lib/modal.component.mjs +98 -0
  18. package/esm2022/lib/modal.mjs +27 -0
  19. package/esm2022/lib/modal.service.mjs +65 -0
  20. package/esm2022/lib/multi-select.component.mjs +231 -0
  21. package/esm2022/lib/pagination.component.mjs +279 -0
  22. package/esm2022/lib/range-calendar.component.mjs +285 -0
  23. package/esm2022/lib/select-group.component.mjs +28 -0
  24. package/esm2022/lib/select-item.component.mjs +84 -0
  25. package/esm2022/lib/select-separator.component.mjs +24 -0
  26. package/esm2022/lib/select.component.mjs +261 -0
  27. package/esm2022/lib/select.service.mjs +21 -0
  28. package/esm2022/lib/skeleton.component.mjs +34 -0
  29. package/esm2022/lib/switch.component.mjs +133 -0
  30. package/esm2022/lib/toast.service.mjs +59 -0
  31. package/esm2022/lib/tolle-cell.directive.mjs +22 -0
  32. package/esm2022/lib/tolle-config.mjs +11 -0
  33. package/esm2022/lib/tooltip.directive.mjs +71 -0
  34. package/esm2022/lib/types/date-range.mjs +2 -0
  35. package/esm2022/lib/utils/cn.mjs +6 -0
  36. package/esm2022/public-api.mjs +36 -0
  37. package/esm2022/tolle_-tolle-ui.mjs +5 -0
  38. package/fesm2022/tolle_-tolle-ui.mjs +3553 -0
  39. package/fesm2022/tolle_-tolle-ui.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/accordion-item.component.d.ts +13 -0
  42. package/lib/accordion.component.d.ts +14 -0
  43. package/lib/badge.component.d.ts +14 -0
  44. package/lib/button-group.component.d.ts +8 -0
  45. package/lib/button.component.d.ts +16 -0
  46. package/lib/calendar.component.d.ts +35 -0
  47. package/lib/card.component.d.ts +32 -0
  48. package/lib/checkbox.component.d.ts +23 -0
  49. package/lib/data-table.component.d.ts +45 -0
  50. package/lib/date-picker.component.d.ts +35 -0
  51. package/lib/date-range-picker.component.d.ts +36 -0
  52. package/lib/input.component.d.ts +27 -0
  53. package/lib/masked-input.component.d.ts +36 -0
  54. package/lib/modal-ref.d.ts +16 -0
  55. package/lib/modal-stack.service.d.ts +12 -0
  56. package/lib/modal.component.d.ts +19 -0
  57. package/lib/modal.d.ts +29 -0
  58. package/lib/modal.service.d.ts +18 -0
  59. package/lib/multi-select.component.d.ts +47 -0
  60. package/lib/pagination.component.d.ts +36 -0
  61. package/lib/range-calendar.component.d.ts +37 -0
  62. package/lib/select-group.component.d.ts +8 -0
  63. package/lib/select-item.component.d.ts +18 -0
  64. package/lib/select-separator.component.d.ts +8 -0
  65. package/lib/select.component.d.ts +45 -0
  66. package/lib/select.service.d.ts +10 -0
  67. package/lib/skeleton.component.d.ts +10 -0
  68. package/lib/switch.component.d.ts +39 -0
  69. package/lib/toast.service.d.ts +24 -0
  70. package/lib/tolle-cell.directive.d.ts +9 -0
  71. package/lib/tolle-config.d.ts +9 -0
  72. package/lib/tooltip.directive.d.ts +15 -0
  73. package/lib/types/date-range.d.ts +4 -0
  74. package/lib/utils/cn.d.ts +2 -0
  75. package/package.json +32 -0
  76. package/public-api.d.ts +32 -0
  77. package/theme.css +211 -0
@@ -0,0 +1,208 @@
1
+ import { Component, Input, forwardRef, ViewChild, HostListener } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
+ import { computePosition, flip, shift, offset, autoUpdate } from '@floating-ui/dom';
5
+ import { cn } from './utils/cn';
6
+ import { RangeCalendarComponent } from './range-calendar.component';
7
+ import { InputComponent } from '@tolle/ui/input.component';
8
+ import { format } from 'date-fns';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/common";
11
+ import * as i2 from "@angular/forms";
12
+ export class DateRangePickerComponent {
13
+ cdr;
14
+ disabled = false;
15
+ placeholder = 'Pick a date range';
16
+ class = '';
17
+ disablePastDates = false;
18
+ // Standardized Sizes
19
+ size = 'default';
20
+ triggerContainer;
21
+ popover;
22
+ value = { start: null, end: null };
23
+ isOpen = false;
24
+ cleanupAutoUpdate;
25
+ constructor(cdr) {
26
+ this.cdr = cdr;
27
+ }
28
+ get displayValue() {
29
+ if (!this.value.start)
30
+ return '';
31
+ const startStr = format(this.value.start, 'MMM dd, yyyy'); // Using date-fns format
32
+ if (!this.value.end)
33
+ return startStr;
34
+ const endStr = format(this.value.end, 'MMM dd, yyyy');
35
+ return `${startStr} - ${endStr}`;
36
+ }
37
+ onCalendarSelect(range) {
38
+ this.value = range;
39
+ this.onChange(this.value);
40
+ // Close only if range is complete
41
+ if (range.start && range.end) {
42
+ this.onChange(this.value);
43
+ // Small delay for UX
44
+ setTimeout(() => this.close(), 150);
45
+ }
46
+ }
47
+ togglePopover(event) {
48
+ if (this.disabled)
49
+ return;
50
+ this.isOpen ? this.close() : this.open();
51
+ }
52
+ open() {
53
+ this.isOpen = true;
54
+ setTimeout(() => this.updatePosition());
55
+ }
56
+ close() {
57
+ this.isOpen = false;
58
+ if (this.cleanupAutoUpdate)
59
+ this.cleanupAutoUpdate();
60
+ }
61
+ clear(event) {
62
+ event.stopPropagation(); // Stop button click
63
+ this.value = { start: null, end: null };
64
+ this.onChange(this.value);
65
+ }
66
+ // --- Floating UI Positioning ---
67
+ updatePosition() {
68
+ if (!this.triggerContainer || !this.popover)
69
+ return;
70
+ this.cleanupAutoUpdate = autoUpdate(this.triggerContainer.nativeElement, this.popover.nativeElement, () => {
71
+ computePosition(this.triggerContainer.nativeElement, this.popover.nativeElement, {
72
+ placement: 'bottom-start', // Aligned to the right where the icon is
73
+ middleware: [offset(4), flip(), shift({ padding: 8 })],
74
+ }).then(({ x, y }) => {
75
+ Object.assign(this.popover.nativeElement.style, {
76
+ left: `${x}px`,
77
+ top: `${y}px`,
78
+ visibility: 'visible',
79
+ });
80
+ });
81
+ });
82
+ }
83
+ onClickOutside(event) {
84
+ if (this.isOpen &&
85
+ !this.triggerContainer.nativeElement.contains(event.target) &&
86
+ !this.popover.nativeElement.contains(event.target)) {
87
+ this.close();
88
+ }
89
+ }
90
+ // CVA
91
+ onChange = () => { };
92
+ onTouched = () => { };
93
+ writeValue(val) {
94
+ if (val) {
95
+ this.value = { ...val };
96
+ }
97
+ else {
98
+ this.value = { start: null, end: null };
99
+ }
100
+ this.cdr.markForCheck();
101
+ }
102
+ registerOnChange(fn) { this.onChange = fn; }
103
+ registerOnTouched(fn) { this.onTouched = fn; }
104
+ setDisabledState(isDisabled) { this.disabled = isDisabled; }
105
+ cn = cn;
106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateRangePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
107
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DateRangePickerComponent, isStandalone: true, selector: "tolle-date-range-picker", inputs: { disabled: "disabled", placeholder: "placeholder", class: "class", disablePastDates: "disablePastDates", size: "size" }, host: { listeners: { "document:mousedown": "onClickOutside($event)" } }, providers: [
108
+ {
109
+ provide: NG_VALUE_ACCESSOR,
110
+ useExisting: forwardRef(() => DateRangePickerComponent),
111
+ multi: true
112
+ }
113
+ ], viewQueries: [{ propertyName: "triggerContainer", first: true, predicate: ["triggerContainer"], descendants: true }, { propertyName: "popover", first: true, predicate: ["popover"], descendants: true }], ngImport: i0, template: `
114
+ <div class="relative w-full" #triggerContainer>
115
+ <tolle-input [placeholder]="placeholder" [disabled]="disabled" [ngModel]="displayValue">
116
+ <div suffix class="flex items-center gap-1.5 cursor-pointer">
117
+ <i
118
+ *ngIf="(value.start || value.end) && !disabled"
119
+ (click)="clear($event)"
120
+ class="ri-close-line cursor-pointer text-muted-foreground hover:text-foreground transition-colors"
121
+ ></i>
122
+
123
+ <i
124
+ (click)="togglePopover($event)"
125
+ class="ri-calendar-line cursor-pointer text-muted-foreground hover:text-primary transition-colors"
126
+ ></i>
127
+ </div>
128
+ </tolle-input>
129
+ <div
130
+ #popover
131
+ *ngIf="isOpen"
132
+ class="absolute z-50 min-w-72"
133
+ style="visibility: hidden; top: 0; left: 0;"
134
+ >
135
+ <tolle-range-calendar
136
+ [ngModel]="value"
137
+ (rangeSelect)="onCalendarSelect($event)"
138
+ [disablePastDates]="disablePastDates"
139
+ ></tolle-range-calendar>
140
+ </div>
141
+ </div>
142
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: RangeCalendarComponent, selector: "tolle-range-calendar", inputs: ["class", "disablePastDates"], outputs: ["rangeSelect"] }, { kind: "component", type: InputComponent, selector: "tolle-input", inputs: ["type", "placeholder", "disabled", "error", "size", "containerClass", "class"] }] });
143
+ }
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateRangePickerComponent, decorators: [{
145
+ type: Component,
146
+ args: [{
147
+ selector: 'tolle-date-range-picker',
148
+ standalone: true,
149
+ imports: [CommonModule, FormsModule, RangeCalendarComponent, InputComponent],
150
+ providers: [
151
+ {
152
+ provide: NG_VALUE_ACCESSOR,
153
+ useExisting: forwardRef(() => DateRangePickerComponent),
154
+ multi: true
155
+ }
156
+ ],
157
+ template: `
158
+ <div class="relative w-full" #triggerContainer>
159
+ <tolle-input [placeholder]="placeholder" [disabled]="disabled" [ngModel]="displayValue">
160
+ <div suffix class="flex items-center gap-1.5 cursor-pointer">
161
+ <i
162
+ *ngIf="(value.start || value.end) && !disabled"
163
+ (click)="clear($event)"
164
+ class="ri-close-line cursor-pointer text-muted-foreground hover:text-foreground transition-colors"
165
+ ></i>
166
+
167
+ <i
168
+ (click)="togglePopover($event)"
169
+ class="ri-calendar-line cursor-pointer text-muted-foreground hover:text-primary transition-colors"
170
+ ></i>
171
+ </div>
172
+ </tolle-input>
173
+ <div
174
+ #popover
175
+ *ngIf="isOpen"
176
+ class="absolute z-50 min-w-72"
177
+ style="visibility: hidden; top: 0; left: 0;"
178
+ >
179
+ <tolle-range-calendar
180
+ [ngModel]="value"
181
+ (rangeSelect)="onCalendarSelect($event)"
182
+ [disablePastDates]="disablePastDates"
183
+ ></tolle-range-calendar>
184
+ </div>
185
+ </div>
186
+ `
187
+ }]
188
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { disabled: [{
189
+ type: Input
190
+ }], placeholder: [{
191
+ type: Input
192
+ }], class: [{
193
+ type: Input
194
+ }], disablePastDates: [{
195
+ type: Input
196
+ }], size: [{
197
+ type: Input
198
+ }], triggerContainer: [{
199
+ type: ViewChild,
200
+ args: ['triggerContainer']
201
+ }], popover: [{
202
+ type: ViewChild,
203
+ args: ['popover']
204
+ }], onClickOutside: [{
205
+ type: HostListener,
206
+ args: ['document:mousedown', ['$event']]
207
+ }] } });
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFjLFNBQVMsRUFBRSxZQUFZLEVBQ2xFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQzs7OztBQTRDaEMsTUFBTSxPQUFPLHdCQUF3QjtJQWdCZjtJQWZYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsV0FBVyxHQUFHLG1CQUFtQixDQUFDO0lBQ2xDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFFbEMscUJBQXFCO0lBQ1osSUFBSSxHQUFtQyxTQUFTLENBQUM7SUFFM0IsZ0JBQWdCLENBQWM7SUFDdkMsT0FBTyxDQUFjO0lBRTNDLEtBQUssR0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzlDLE1BQU0sR0FBRyxL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QTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUNQLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkEwRXBCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyLCBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29tcHV0ZVBvc2l0aW9uLCBmbGlwLCBzaGlmdCwgb2Zmc2V0LCBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuaW1wb3J0IHsgUmFuZ2VDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7RGF0ZVJhbmdlfSBmcm9tICdAdG9sbGUvdWkvdHlwZXMvZGF0ZS1yYW5nZSc7XG5pbXBvcnQge0lucHV0Q29tcG9uZW50fSBmcm9tICdAdG9sbGUvdWkvaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7Zm9ybWF0fSBmcm9tICdkYXRlLWZucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWRhdGUtcmFuZ2UtcGlja2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJhbmdlQ2FsZW5kYXJDb21wb25lbnQsIElucHV0Q29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiICN0cmlnZ2VyQ29udGFpbmVyPlxuICAgICAgPHRvbGxlLWlucHV0IFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ01vZGVsXT1cImRpc3BsYXlWYWx1ZVwiPlxuICAgICAgICA8ZGl2IHN1ZmZpeCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgKm5nSWY9XCIodmFsdWUuc3RhcnQgfHwgdmFsdWUuZW5kKSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJyaS1jbG9zZS1saW5lIGN1cnNvci1wb2ludGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgID48L2k+XG5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBvcG92ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cInJpLWNhbGVuZGFyLWxpbmUgY3Vyc29yLXBvaW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RvbGxlLWlucHV0PlxuICAgICAgPGRpdlxuICAgICAgICAjcG9wb3ZlclxuICAgICAgICAqbmdJZj1cImlzT3BlblwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei01MCBtaW4tdy03MlwiXG4gICAgICAgIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyB0b3A6IDA7IGxlZnQ6IDA7XCJcbiAgICAgID5cbiAgICAgICAgPHRvbGxlLXJhbmdlLWNhbGVuZGFyXG4gICAgICAgICAgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgICAgIChyYW5nZVNlbGVjdCk9XCJvbkNhbGVuZGFyU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgIFtkaXNhYmxlUGFzdERhdGVzXT1cImRpc2FibGVQYXN0RGF0ZXNcIlxuICAgICAgICA+PC90b2xsZS1yYW5nZS1jYWxlbmRhcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnUGljayBhIGRhdGUgcmFuZ2UnO1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlUGFzdERhdGVzID0gZmFsc2U7XG5cbiAgLy8gU3RhbmRhcmRpemVkIFNpemVzXG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2RlZmF1bHQnIHwgJ2xnJyA9ICdkZWZhdWx0JztcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyQ29udGFpbmVyJykgdHJpZ2dlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXInKSBwb3BvdmVyITogRWxlbWVudFJlZjtcblxuICB2YWx1ZTogRGF0ZVJhbmdlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG4gIGlzT3BlbiA9IGZhbHNlO1xuICBjbGVhbnVwQXV0b1VwZGF0ZT86ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGdldCBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMudmFsdWUuc3RhcnQpIHJldHVybiAnJztcblxuICAgIGNvbnN0IHN0YXJ0U3RyID0gZm9ybWF0KHRoaXMudmFsdWUuc3RhcnQsICdNTU0gZGQsIHl5eXknKTsgLy8gVXNpbmcgZGF0ZS1mbnMgZm9ybWF0XG4gICAgaWYgKCF0aGlzLnZhbHVlLmVuZCkgcmV0dXJuIHN0YXJ0U3RyO1xuXG4gICAgY29uc3QgZW5kU3RyID0gZm9ybWF0KHRoaXMudmFsdWUuZW5kLCAnTU1NIGRkLCB5eXl5Jyk7XG4gICAgcmV0dXJuIGAke3N0YXJ0U3RyfSAtICR7ZW5kU3RyfWA7XG4gIH1cblxuICBvbkNhbGVuZGFyU2VsZWN0KHJhbmdlOiBEYXRlUmFuZ2UpIHtcbiAgICB0aGlzLnZhbHVlID0gcmFuZ2U7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcblxuICAgIC8vIENsb3NlIG9ubHkgaWYgcmFuZ2UgaXMgY29tcGxldGVcbiAgICBpZiAocmFuZ2Uuc3RhcnQgJiYgcmFuZ2UuZW5kKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgLy8gU21hbGwgZGVsYXkgZm9yIFVYXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xvc2UoKSwgMTUwKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVQb3BvdmVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmlzT3BlbiA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCkpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSkgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSgpO1xuICB9XG5cbiAgY2xlYXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gU3RvcCBidXR0b24gY2xpY2tcbiAgICB0aGlzLnZhbHVlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIC0tLSBGbG9hdGluZyBVSSBQb3NpdGlvbmluZyAtLS1cbiAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlckNvbnRhaW5lciB8fCAhdGhpcy5wb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlID0gYXV0b1VwZGF0ZShcbiAgICAgIHRoaXMudHJpZ2dlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbXB1dGVQb3NpdGlvbih0aGlzLnRyaWdnZXJDb250YWluZXIubmF0aXZlRWxlbWVudCwgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLCAvLyBBbGlnbmVkIHRvIHRoZSByaWdodCB3aGVyZSB0aGUgaWNvbiBpc1xuICAgICAgICAgIG1pZGRsZXdhcmU6IFtvZmZzZXQoNCksIGZsaXAoKSwgc2hpZnQoeyBwYWRkaW5nOiA4IH0pXSxcbiAgICAgICAgfSkudGhlbigoeyB4LCB5IH0pID0+IHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMucG9wb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLCB7XG4gICAgICAgICAgICBsZWZ0OiBgJHt4fXB4YCxcbiAgICAgICAgICAgIHRvcDogYCR7eX1weGAsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiAndmlzaWJsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzT3BlbiAmJlxuICAgICAgIXRoaXMudHJpZ2dlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLnBvcG92ZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ1ZBXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICB3cml0ZVZhbHVlKHZhbDogRGF0ZVJhbmdlIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB7IC4uLnZhbCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuIl19
@@ -0,0 +1,134 @@
1
+ import { Component, Input, forwardRef } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
+ import { cn } from './utils/cn';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ export class InputComponent {
8
+ cdr;
9
+ type = 'text';
10
+ placeholder = '';
11
+ disabled = false;
12
+ error = false;
13
+ size = 'default';
14
+ containerClass = '';
15
+ class = '';
16
+ // Internal State
17
+ value = '';
18
+ // CVA Callbacks
19
+ onChange = () => { };
20
+ onTouched = () => { };
21
+ constructor(cdr) {
22
+ this.cdr = cdr;
23
+ }
24
+ // --- ControlValueAccessor Implementation ---
25
+ writeValue(value) {
26
+ this.value = value;
27
+ this.cdr.markForCheck();
28
+ }
29
+ registerOnChange(fn) {
30
+ this.onChange = fn;
31
+ }
32
+ registerOnTouched(fn) {
33
+ this.onTouched = fn;
34
+ }
35
+ setDisabledState(isDisabled) {
36
+ this.disabled = isDisabled;
37
+ this.cdr.markForCheck();
38
+ }
39
+ onInputChange(event) {
40
+ const val = event.target.value;
41
+ this.value = val;
42
+ this.onChange(val);
43
+ }
44
+ // --- Styling Logic ---
45
+ cn = cn;
46
+ get computedInputClass() {
47
+ return cn("flex w-full rounded-md border border-input bg-background text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring focus-visible:ring-ring focus-visible:ring-offset-1 disabled:cursor-not-allowed disabled:opacity-50 transition-all", 'disabled:opacity-50 shadow-sm transition-shadow', this.size === 'xs' && "h-8 text-xs px-2", this.size === 'sm' && "h-9 px-3", this.size === 'default' && "h-10 px-3", this.size === 'lg' && "h-11 px-4 text-base", "group-has-[[prefix]]:pl-10 group-has-[[suffix]]:pr-10", this.size === 'xs' && "group-has-[[prefix]]:pl-8 group-has-[[suffix]]:pr-8", this.error && "border-destructive focus-visible:ring-destructive", this.class);
48
+ }
49
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
50
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InputComponent, isStandalone: true, selector: "tolle-input", inputs: { type: "type", placeholder: "placeholder", disabled: "disabled", error: "error", size: "size", containerClass: "containerClass", class: "class" }, providers: [
51
+ {
52
+ provide: NG_VALUE_ACCESSOR,
53
+ useExisting: forwardRef(() => InputComponent),
54
+ multi: true
55
+ }
56
+ ], ngImport: i0, template: `
57
+ <div [class]="cn('relative flex items-center w-full group', 'size-' + size, containerClass)">
58
+
59
+ <div class="absolute left-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
60
+ [class.left-2.5]="size === 'xs'">
61
+ <ng-content select="[prefix]"></ng-content>
62
+ </div>
63
+
64
+ <input
65
+ [type]="type"
66
+ [placeholder]="placeholder"
67
+ [disabled]="disabled"
68
+ [(ngModel)]="value"
69
+ (blur)="onTouched()"
70
+ (input)="onInputChange($event)"
71
+ [class]="computedInputClass"
72
+ />
73
+
74
+ <div class="absolute right-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
75
+ [class.right-2.5]="size === 'xs'">
76
+ <ng-content select="[suffix]"></ng-content>
77
+ </div>
78
+ </div>
79
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
80
+ }
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InputComponent, decorators: [{
82
+ type: Component,
83
+ args: [{
84
+ selector: 'tolle-input',
85
+ standalone: true,
86
+ imports: [CommonModule, FormsModule],
87
+ providers: [
88
+ {
89
+ provide: NG_VALUE_ACCESSOR,
90
+ useExisting: forwardRef(() => InputComponent),
91
+ multi: true
92
+ }
93
+ ],
94
+ template: `
95
+ <div [class]="cn('relative flex items-center w-full group', 'size-' + size, containerClass)">
96
+
97
+ <div class="absolute left-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
98
+ [class.left-2.5]="size === 'xs'">
99
+ <ng-content select="[prefix]"></ng-content>
100
+ </div>
101
+
102
+ <input
103
+ [type]="type"
104
+ [placeholder]="placeholder"
105
+ [disabled]="disabled"
106
+ [(ngModel)]="value"
107
+ (blur)="onTouched()"
108
+ (input)="onInputChange($event)"
109
+ [class]="computedInputClass"
110
+ />
111
+
112
+ <div class="absolute right-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
113
+ [class.right-2.5]="size === 'xs'">
114
+ <ng-content select="[suffix]"></ng-content>
115
+ </div>
116
+ </div>
117
+ `,
118
+ }]
119
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { type: [{
120
+ type: Input
121
+ }], placeholder: [{
122
+ type: Input
123
+ }], disabled: [{
124
+ type: Input
125
+ }], error: [{
126
+ type: Input
127
+ }], size: [{
128
+ type: Input
129
+ }], containerClass: [{
130
+ type: Input
131
+ }], class: [{
132
+ type: Input
133
+ }] } });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7QUFzQ2hDLE1BQU0sT0FBTyxjQUFjO0lBZ0JMO0lBZlgsSUFBSSxHQUFXLE1BQU0sQ0FBQztJQUN0QixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsS0FBSyxHQUFZLEtBQUssQ0FBQztJQUN2QixJQUFJLEdBQW1DLFNBQVMsQ0FBQztJQUNqRCxjQUFjLEdBQVcsRUFBRSxDQUFDO0lBQzVCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFFNUIsaUJBQWlCO0lBQ2pCLEtBQUssR0FBUSxFQUFFLENBQUM7SUFFaEIsZ0JBQWdCO0lBQ2hCLFFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDekIsU0FBUyxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUUxQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFHLENBQUM7SUFFOUMsOENBQThDO0lBRTlDLFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFZO1FBQ3hCLE1BQU0sR0FBRyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3QkFBd0I7SUFDTCxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRTNCLElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sRUFBRSxDQUNQLDRSQUE0UixFQUM1UixpREFBaUQsRUFDakQsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksa0JBQWtCLEVBQ3hDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLFVBQVUsRUFDaEMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksV0FBVyxFQUN0QyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxxQkFBcUIsRUFDM0MsdURBQXVELEVBQ3ZELElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLHFEQUFxRCxFQUMzRSxJQUFJLENBQUMsS0FBSyxJQUFJLG1EQUFtRCxFQUNqRSxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDO3dHQTVEVSxjQUFjOzRGQUFkLGNBQWMsc05BaENkO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0JBQzdDLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1QlQsMkRBL0JTLFlBQVksOEJBQUUsV0FBVzs7NEZBaUN4QixjQUFjO2tCQXBDMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7b0JBQ3BDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUM7NEJBQzdDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1QlQ7aUJBQ0Y7c0ZBRVUsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY24oJ3JlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIHctZnVsbCBncm91cCcsICdzaXplLScgKyBzaXplLCBjb250YWluZXJDbGFzcylcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGxlZnQtMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQgZ3JvdXAtZm9jdXMtd2l0aGluOnRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgIFtjbGFzcy5sZWZ0LTIuNV09XCJzaXplID09PSAneHMnXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtjbGFzc109XCJjb21wdXRlZElucHV0Q2xhc3NcIlxuICAgICAgLz5cblxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHJpZ2h0LTMgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGdyb3VwLWZvY3VzLXdpdGhpbjp0ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICBbY2xhc3MucmlnaHQtMi41XT1cInNpemUgPT09ICd4cydcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3N1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplOiAneHMnIHwgJ3NtJyB8ICdkZWZhdWx0JyB8ICdsZycgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIGNvbnRhaW5lckNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEludGVybmFsIFN0YXRlXG4gIHZhbHVlOiBhbnkgPSAnJztcblxuICAvLyBDVkEgQ2FsbGJhY2tzXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgLy8gLS0tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEltcGxlbWVudGF0aW9uIC0tLVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XG4gIH1cblxuICAvLyAtLS0gU3R5bGluZyBMb2dpYyAtLS1cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNuID0gY247XG5cbiAgZ2V0IGNvbXB1dGVkSW5wdXRDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcImZsZXggdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCB0cmFuc2l0aW9uLWFsbFwiLFxuICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgc2hhZG93LXNtIHRyYW5zaXRpb24tc2hhZG93JyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiBcImgtOCB0ZXh0LXhzIHB4LTJcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3NtJyAmJiBcImgtOSBweC0zXCIsXG4gICAgICB0aGlzLnNpemUgPT09ICdkZWZhdWx0JyAmJiBcImgtMTAgcHgtM1wiLFxuICAgICAgdGhpcy5zaXplID09PSAnbGcnICYmIFwiaC0xMSBweC00IHRleHQtYmFzZVwiLFxuICAgICAgXCJncm91cC1oYXMtW1twcmVmaXhdXTpwbC0xMCBncm91cC1oYXMtW1tzdWZmaXhdXTpwci0xMFwiLFxuICAgICAgdGhpcy5zaXplID09PSAneHMnICYmIFwiZ3JvdXAtaGFzLVtbcHJlZml4XV06cGwtOCBncm91cC1oYXMtW1tzdWZmaXhdXTpwci04XCIsXG4gICAgICB0aGlzLmVycm9yICYmIFwiYm9yZGVyLWRlc3RydWN0aXZlIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZVwiLFxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,179 @@
1
+ import { Component, Input, forwardRef, ViewChild } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
+ import { cn } from './utils/cn';
5
+ import * as i0 from "@angular/core";
6
+ export class MaskedInputComponent {
7
+ el;
8
+ cdr;
9
+ mask = '';
10
+ placeholder = '';
11
+ type = 'text';
12
+ disabled = false;
13
+ class = '';
14
+ error = false;
15
+ size = 'default';
16
+ returnRaw = false;
17
+ inputEl;
18
+ hasPrefix = false;
19
+ hasSuffix = false;
20
+ displayValue = '';
21
+ tokens = {
22
+ '0': /\d/, '9': /\d/, 'a': /[a-z]/i, 'A': /[a-z]/i, '*': /[a-z0-9]/i
23
+ };
24
+ onChange = () => { };
25
+ onTouched = () => { };
26
+ constructor(el, cdr) {
27
+ this.el = el;
28
+ this.cdr = cdr;
29
+ }
30
+ // FIXED DETECTION: Check the actual DOM nodes projected into the component
31
+ ngAfterContentChecked() {
32
+ const prefix = this.el.nativeElement.querySelector('[prefix]');
33
+ const suffix = this.el.nativeElement.querySelector('[suffix]');
34
+ if (this.hasPrefix !== !!prefix || this.hasSuffix !== !!suffix) {
35
+ this.hasPrefix = !!prefix;
36
+ this.hasSuffix = !!suffix;
37
+ this.cdr.detectChanges();
38
+ }
39
+ }
40
+ get computedInputClass() {
41
+ return cn("flex w-full rounded-md border border-input bg-background text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring focus-visible:ring-ring focus-visible:ring-offset-1 disabled:cursor-not-allowed disabled:opacity-50 transition-all", 'disabled:opacity-50 shadow-sm transition-shadow', this.size === 'xs' && "h-8 text-xs px-2", this.size === 'sm' && "h-9 px-3", this.size === 'default' && "h-10 px-3", this.size === 'lg' && "h-11 px-4 text-base", "group-has-[[prefix]]:pl-10 group-has-[[suffix]]:pr-10", this.size === 'xs' && "group-has-[[prefix]]:pl-8 group-has-[[suffix]]:pr-8", this.error && "border-destructive focus-visible:ring-destructive", this.class);
42
+ }
43
+ // --- Masking Logic ---
44
+ onInput(event) {
45
+ const input = event.target;
46
+ const raw = this.unmask(input.value);
47
+ const masked = this.applyMask(raw);
48
+ this.displayValue = masked;
49
+ input.value = masked;
50
+ this.returnRaw ? this.onChange(raw) : this.onChange(masked);
51
+ }
52
+ applyMask(rawValue) {
53
+ let rawIndex = 0;
54
+ let formatted = '';
55
+ for (let i = 0; i < this.mask.length; i++) {
56
+ if (rawIndex >= rawValue.length)
57
+ break;
58
+ const maskChar = this.mask[i];
59
+ const rawChar = rawValue[rawIndex];
60
+ if (this.tokens[maskChar]) {
61
+ if (this.tokens[maskChar].test(rawChar)) {
62
+ formatted += rawChar;
63
+ rawIndex++;
64
+ }
65
+ else {
66
+ rawIndex++;
67
+ i--;
68
+ }
69
+ }
70
+ else {
71
+ formatted += maskChar;
72
+ if (rawChar === maskChar)
73
+ rawIndex++;
74
+ }
75
+ }
76
+ return formatted;
77
+ }
78
+ unmask(val) { return val.replace(/[^a-zA-Z0-9]/g, ''); }
79
+ writeValue(value) {
80
+ this.displayValue = value ? this.applyMask(this.unmask(value.toString())) : '';
81
+ this.cdr.markForCheck();
82
+ }
83
+ registerOnChange(fn) { this.onChange = fn; }
84
+ registerOnTouched(fn) { this.onTouched = fn; }
85
+ setDisabledState(isDisabled) { this.disabled = isDisabled; }
86
+ cn = cn;
87
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MaskedInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
88
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MaskedInputComponent, isStandalone: true, selector: "tolle-masked-input", inputs: { mask: "mask", placeholder: "placeholder", type: "type", disabled: "disabled", class: "class", error: "error", size: "size", returnRaw: "returnRaw" }, providers: [
89
+ {
90
+ provide: NG_VALUE_ACCESSOR,
91
+ useExisting: forwardRef(() => MaskedInputComponent),
92
+ multi: true
93
+ }
94
+ ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, static: true }], ngImport: i0, template: `
95
+ <div [class]="cn('relative flex items-center w-full group', 'size-' + size, class)">
96
+
97
+ <div class="absolute left-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
98
+ [class.left-2.5]="size === 'xs'">
99
+ <ng-content select="[prefix]"></ng-content>
100
+ </div>
101
+
102
+ <input
103
+ #inputEl
104
+ [type]="type"
105
+ [placeholder]="placeholder"
106
+ [disabled]="disabled"
107
+ [value]="displayValue"
108
+ (input)="onInput($event)"
109
+ (blur)="onTouched()"
110
+ [class]="computedInputClass"
111
+ />
112
+
113
+ <div class="absolute right-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
114
+ [class.right-2.5]="size === 'xs'">
115
+ <ng-content select="[suffix]"></ng-content>
116
+ </div>
117
+ </div>
118
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] });
119
+ }
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MaskedInputComponent, decorators: [{
121
+ type: Component,
122
+ args: [{
123
+ selector: 'tolle-masked-input',
124
+ standalone: true,
125
+ imports: [CommonModule, FormsModule],
126
+ providers: [
127
+ {
128
+ provide: NG_VALUE_ACCESSOR,
129
+ useExisting: forwardRef(() => MaskedInputComponent),
130
+ multi: true
131
+ }
132
+ ],
133
+ template: `
134
+ <div [class]="cn('relative flex items-center w-full group', 'size-' + size, class)">
135
+
136
+ <div class="absolute left-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
137
+ [class.left-2.5]="size === 'xs'">
138
+ <ng-content select="[prefix]"></ng-content>
139
+ </div>
140
+
141
+ <input
142
+ #inputEl
143
+ [type]="type"
144
+ [placeholder]="placeholder"
145
+ [disabled]="disabled"
146
+ [value]="displayValue"
147
+ (input)="onInput($event)"
148
+ (blur)="onTouched()"
149
+ [class]="computedInputClass"
150
+ />
151
+
152
+ <div class="absolute right-3 flex items-center justify-center text-muted-foreground group-focus-within:text-primary transition-colors"
153
+ [class.right-2.5]="size === 'xs'">
154
+ <ng-content select="[suffix]"></ng-content>
155
+ </div>
156
+ </div>
157
+ `
158
+ }]
159
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { mask: [{
160
+ type: Input
161
+ }], placeholder: [{
162
+ type: Input
163
+ }], type: [{
164
+ type: Input
165
+ }], disabled: [{
166
+ type: Input
167
+ }], class: [{
168
+ type: Input
169
+ }], error: [{
170
+ type: Input
171
+ }], size: [{
172
+ type: Input
173
+ }], returnRaw: [{
174
+ type: Input
175
+ }], inputEl: [{
176
+ type: ViewChild,
177
+ args: ['inputEl', { static: true }]
178
+ }] } });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFza2VkLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvbWFza2VkLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWMsU0FBUyxFQUVwRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQXVDaEMsTUFBTSxPQUFPLG9CQUFvQjtJQXVCWDtJQUF3QjtJQXRCbkMsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUksR0FBRyxNQUFNLENBQUM7SUFDZCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxLQUFLLEdBQVksS0FBSyxDQUFDO0lBQ3ZCLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFYSxPQUFPLENBQWdDO0lBRS9FLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBRVYsTUFBTSxHQUE4QjtRQUMxQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXO0tBQ3JFLENBQUM7SUFFRixRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3pCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFMUIsWUFBb0IsRUFBYyxFQUFVLEdBQXNCO1FBQTlDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFHLENBQUM7SUFFdEUsMkVBQTJFO0lBQzNFLHFCQUFxQjtRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9ELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sRUFBRSxDQUNQLDRSQUE0UixFQUM1UixpREFBaUQsRUFDakQsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksa0JBQWtCLEVBQ3hDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLFVBQVUsRUFDaEMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksV0FBVyxFQUN0QyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxxQkFBcUIsRUFDM0MsdURBQXVELEVBQ3ZELElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLHFEQUFxRCxFQUMzRSxJQUFJLENBQUMsS0FBSyxJQUFJLG1EQUFtRCxFQUNqRSxJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLE9BQU8sQ0FBQyxLQUFZO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sU0FBUyxDQUFDLFFBQWdCO1FBQ2hDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUFDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTTtnQkFBRSxNQUFNO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztvQkFBQyxRQUFRLEVBQUUsQ0FBQztnQkFBQyxDQUFDO3FCQUN6RSxDQUFDO29CQUFDLFFBQVEsRUFBRSxDQUFDO29CQUFDLENBQUMsRUFBRSxDQUFDO2dCQUFDLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUFDLFNBQVMsSUFBSSxRQUFRLENBQUM7Z0JBQUMsSUFBSSxPQUFPLEtBQUssUUFBUTtvQkFBRSxRQUFRLEVBQUUsQ0FBQztZQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxNQUFNLENBQUMsR0FBVyxJQUFZLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhGLFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQU8sSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsaUJBQWlCLENBQUMsRUFBTyxJQUFVLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxnQkFBZ0IsQ0FBQyxVQUFtQixJQUFVLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqRSxFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQXJGUCxvQkFBb0I7NEZBQXBCLG9CQUFvQixpT0FqQ3BCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDRJQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3QlQsMkRBaENTLFlBQVksOEJBQUUsV0FBVzs7NEZBa0N4QixvQkFBb0I7a0JBckNoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO29CQUNwQyxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7NEJBQ25ELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JUO2lCQUNGOytHQUVVLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWtDLE9BQU87c0JBQTlDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCxcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLW1hc2tlZC1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXNrZWRJbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjbigncmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIGdyb3VwJywgJ3NpemUtJyArIHNpemUsIGNsYXNzKVwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgbGVmdC0zIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBncm91cC1mb2N1cy13aXRoaW46dGV4dC1wcmltYXJ5IHRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgW2NsYXNzLmxlZnQtMi41XT1cInNpemUgPT09ICd4cydcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3ByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGlucHV0XG4gICAgICAgICNpbnB1dEVsXG4gICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCJcbiAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkSW5wdXRDbGFzc1wiXG4gICAgICAvPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQgZ3JvdXAtZm9jdXMtd2l0aGluOnRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgIFtjbGFzcy5yaWdodC0yLjVdPVwic2l6ZSA9PT0gJ3hzJ1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIE1hc2tlZElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudENoZWNrZWQge1xuICBASW5wdXQoKSBtYXNrOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgQElucHV0KCkgdHlwZSA9ICd0ZXh0JztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSByZXR1cm5SYXcgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsJywgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXRFbCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgaGFzUHJlZml4ID0gZmFsc2U7XG4gIGhhc1N1ZmZpeCA9IGZhbHNlO1xuICBkaXNwbGF5VmFsdWUgPSAnJztcblxuICBwcml2YXRlIHRva2VuczogeyBba2V5OiBzdHJpbmddOiBSZWdFeHAgfSA9IHtcbiAgICAnMCc6IC9cXGQvLCAnOSc6IC9cXGQvLCAnYSc6IC9bYS16XS9pLCAnQSc6IC9bYS16XS9pLCAnKic6IC9bYS16MC05XS9pXG4gIH07XG5cbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAvLyBGSVhFRCBERVRFQ1RJT046IENoZWNrIHRoZSBhY3R1YWwgRE9NIG5vZGVzIHByb2plY3RlZCBpbnRvIHRoZSBjb21wb25lbnRcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcHJlZml4XScpO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbc3VmZml4XScpO1xuXG4gICAgaWYgKHRoaXMuaGFzUHJlZml4ICE9PSAhIXByZWZpeCB8fCB0aGlzLmhhc1N1ZmZpeCAhPT0gISFzdWZmaXgpIHtcbiAgICAgIHRoaXMuaGFzUHJlZml4ID0gISFwcmVmaXg7XG4gICAgICB0aGlzLmhhc1N1ZmZpeCA9ICEhc3VmZml4O1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb21wdXRlZElucHV0Q2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgXCJmbGV4IHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCB0ZXh0LXNtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTEgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgdHJhbnNpdGlvbi1hbGxcIixcbiAgICAgICdkaXNhYmxlZDpvcGFjaXR5LTUwIHNoYWRvdy1zbSB0cmFuc2l0aW9uLXNoYWRvdycsXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgJiYgXCJoLTggdGV4dC14cyBweC0yXCIsXG4gICAgICB0aGlzLnNpemUgPT09ICdzbScgJiYgXCJoLTkgcHgtM1wiLFxuICAgICAgdGhpcy5zaXplID09PSAnZGVmYXVsdCcgJiYgXCJoLTEwIHB4LTNcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiBcImgtMTEgcHgtNCB0ZXh0LWJhc2VcIixcbiAgICAgIFwiZ3JvdXAtaGFzLVtbcHJlZml4XV06cGwtMTAgZ3JvdXAtaGFzLVtbc3VmZml4XV06cHItMTBcIixcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiBcImdyb3VwLWhhcy1bW3ByZWZpeF1dOnBsLTggZ3JvdXAtaGFzLVtbc3VmZml4XV06cHItOFwiLFxuICAgICAgdGhpcy5lcnJvciAmJiBcImJvcmRlci1kZXN0cnVjdGl2ZSBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmVcIixcbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgLy8gLS0tIE1hc2tpbmcgTG9naWMgLS0tXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCByYXcgPSB0aGlzLnVubWFzayhpbnB1dC52YWx1ZSk7XG4gICAgY29uc3QgbWFza2VkID0gdGhpcy5hcHBseU1hc2socmF3KTtcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG1hc2tlZDtcbiAgICBpbnB1dC52YWx1ZSA9IG1hc2tlZDtcbiAgICB0aGlzLnJldHVyblJhdyA/IHRoaXMub25DaGFuZ2UocmF3KSA6IHRoaXMub25DaGFuZ2UobWFza2VkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlNYXNrKHJhd1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByYXdJbmRleCA9IDA7IGxldCBmb3JtYXR0ZWQgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJhd0luZGV4ID49IHJhd1ZhbHVlLmxlbmd0aCkgYnJlYWs7XG4gICAgICBjb25zdCBtYXNrQ2hhciA9IHRoaXMubWFza1tpXTtcbiAgICAgIGNvbnN0IHJhd0NoYXIgPSByYXdWYWx1ZVtyYXdJbmRleF07XG4gICAgICBpZiAodGhpcy50b2tlbnNbbWFza0NoYXJdKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2Vuc1ttYXNrQ2hhcl0udGVzdChyYXdDaGFyKSkgeyBmb3JtYXR0ZWQgKz0gcmF3Q2hhcjsgcmF3SW5kZXgrKzsgfVxuICAgICAgICBlbHNlIHsgcmF3SW5kZXgrKzsgaS0tOyB9XG4gICAgICB9IGVsc2UgeyBmb3JtYXR0ZWQgKz0gbWFza0NoYXI7IGlmIChyYXdDaGFyID09PSBtYXNrQ2hhcikgcmF3SW5kZXgrKzsgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVkO1xuICB9XG5cbiAgcHJpdmF0ZSB1bm1hc2sodmFsOiBzdHJpbmcpOiBzdHJpbmcgeyByZXR1cm4gdmFsLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAnJyk7IH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlID8gdGhpcy5hcHBseU1hc2sodGhpcy51bm1hc2sodmFsdWUudG9TdHJpbmcoKSkpIDogJyc7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuIl19
@@ -0,0 +1,31 @@
1
+ import { Subject } from 'rxjs';
2
+ export class ModalRef {
3
+ overlay;
4
+ modal;
5
+ stack;
6
+ _afterClosed$ = new Subject();
7
+ afterClosed$ = this._afterClosed$.asObservable();
8
+ constructor(overlay, modal, stack) {
9
+ this.overlay = overlay;
10
+ this.modal = modal;
11
+ this.stack = stack;
12
+ this.stack.register(this);
13
+ // Handle Backdrop Click
14
+ this.overlay.backdropClick().subscribe(() => {
15
+ if (this.modal.backdropClose) {
16
+ this.close();
17
+ }
18
+ });
19
+ }
20
+ /**
21
+ * Closes the modal instantly.
22
+ * @param result Data to pass back to the caller
23
+ */
24
+ close(result) {
25
+ this._afterClosed$.next(result);
26
+ this._afterClosed$.complete();
27
+ this.overlay.dispose(); // Instant disposal (No animation timer)
28
+ this.stack.unregister(this);
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9tb2RhbC1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixNQUFNLE9BQU8sUUFBUTtJQUtUO0lBQ0Q7SUFDQztJQU5PLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztJQUNyRSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVqRCxZQUNVLE9BQW1CLEVBQ3BCLEtBQVksRUFDWCxLQUF3QjtRQUZ4QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWCxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUVoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsd0NBQXdDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJy4vbW9kYWwnO1xuaW1wb3J0IHsgTW9kYWxTdGFja1NlcnZpY2UgfSBmcm9tICcuL21vZGFsLXN0YWNrLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgTW9kYWxSZWY8UiA9IGFueT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hZnRlckNsb3NlZCQgPSBuZXcgU3ViamVjdDxSIHwgdW5kZWZpbmVkIHwgbnVsbD4oKTtcbiAgYWZ0ZXJDbG9zZWQkID0gdGhpcy5fYWZ0ZXJDbG9zZWQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheVJlZixcbiAgICBwdWJsaWMgbW9kYWw6IE1vZGFsLFxuICAgIHByaXZhdGUgc3RhY2s6IE1vZGFsU3RhY2tTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhY2sucmVnaXN0ZXIodGhpcyk7XG5cbiAgICAvLyBIYW5kbGUgQmFja2Ryb3AgQ2xpY2tcbiAgICB0aGlzLm92ZXJsYXkuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tb2RhbC5iYWNrZHJvcENsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1vZGFsIGluc3RhbnRseS5cbiAgICogQHBhcmFtIHJlc3VsdCBEYXRhIHRvIHBhc3MgYmFjayB0byB0aGUgY2FsbGVyXG4gICAqL1xuICBjbG9zZShyZXN1bHQ/OiBSKTogdm9pZCB7XG4gICAgdGhpcy5fYWZ0ZXJDbG9zZWQkLm5leHQocmVzdWx0KTtcbiAgICB0aGlzLl9hZnRlckNsb3NlZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLm92ZXJsYXkuZGlzcG9zZSgpOyAvLyBJbnN0YW50IGRpc3Bvc2FsIChObyBhbmltYXRpb24gdGltZXIpXG4gICAgdGhpcy5zdGFjay51bnJlZ2lzdGVyKHRoaXMpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ModalStackService {
4
+ _stack = new Set();
5
+ register(ref) {
6
+ this._stack.add(ref);
7
+ }
8
+ unregister(ref) {
9
+ this._stack.delete(ref);
10
+ }
11
+ /** Instantly closes all open modals */
12
+ closeAll() {
13
+ this._stack.forEach(ref => ref.close());
14
+ this._stack.clear();
15
+ }
16
+ get activeCount() {
17
+ return this._stack.size;
18
+ }
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalStackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
20
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalStackService, providedIn: 'root' });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalStackService, decorators: [{
23
+ type: Injectable,
24
+ args: [{ providedIn: 'root' }]
25
+ }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvbW9kYWwtc3RhY2suc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUkzQyxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBWSxDQUFDO0lBRXJDLFFBQVEsQ0FBQyxHQUFhO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBYTtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQzt3R0FuQlUsaUJBQWlCOzRHQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1vZGFsU3RhY2tTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfc3RhY2sgPSBuZXcgU2V0PE1vZGFsUmVmPigpO1xuXG4gIHJlZ2lzdGVyKHJlZjogTW9kYWxSZWYpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFjay5hZGQocmVmKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXIocmVmOiBNb2RhbFJlZik6IHZvaWQge1xuICAgIHRoaXMuX3N0YWNrLmRlbGV0ZShyZWYpO1xuICB9XG5cbiAgLyoqIEluc3RhbnRseSBjbG9zZXMgYWxsIG9wZW4gbW9kYWxzICovXG4gIGNsb3NlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YWNrLmZvckVhY2gocmVmID0+IHJlZi5jbG9zZSgpKTtcbiAgICB0aGlzLl9zdGFjay5jbGVhcigpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrLnNpemU7XG4gIH1cbn1cbiJdfQ==