@maro-tech/form 0.0.1

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.
@@ -0,0 +1,909 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, OnInit, OnChanges, OnDestroy, EventEmitter, SimpleChanges, Type, AfterViewInit, ElementRef } from '@angular/core';
3
+ import { Observable } from 'rxjs';
4
+ import { UiSelectOption as UiSelectOption$1 } from '@forms/inputs/select/ui-select.component';
5
+ import { UiFormContext as UiFormContext$1 } from '@forms/context/form-context.service';
6
+ import { UiDynamicFormFieldAction as UiDynamicFormFieldAction$1, UiDynamicFormField as UiDynamicFormField$1, UiDynamicFormValue as UiDynamicFormValue$1 } from '@forms/dynamic/ui-dynamic-form.models';
7
+ import { ControlValueAccessor } from '@angular/forms';
8
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
9
+ import * as lucide_angular from 'lucide-angular';
10
+ import { ConnectedPosition } from '@angular/cdk/overlay';
11
+
12
+ type UiFormValue = Record<string, unknown>;
13
+ type UiFormErrors = Record<string, string>;
14
+ interface UiFormSubmitState {
15
+ loading: boolean;
16
+ disabled: boolean;
17
+ }
18
+
19
+ declare class UiFormContext {
20
+ readonly value: i0.WritableSignal<UiFormValue>;
21
+ readonly errors: i0.WritableSignal<UiFormErrors>;
22
+ readonly loading: i0.WritableSignal<boolean>;
23
+ readonly disabled: i0.WritableSignal<boolean>;
24
+ setValue(value: UiFormValue): void;
25
+ patchValue(value: UiFormValue): void;
26
+ setErrors(errors: UiFormErrors): void;
27
+ reset(value?: UiFormValue): void;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFormContext, never>;
29
+ static ɵprov: i0.ɵɵInjectableDeclaration<UiFormContext>;
30
+ }
31
+
32
+ declare class MaroFormsApiService {
33
+ private readonly http;
34
+ getSuggestByName(name: string, query?: string): Observable<Array<Record<string, unknown>>>;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<MaroFormsApiService, never>;
36
+ static ɵprov: i0.ɵɵInjectableDeclaration<MaroFormsApiService>;
37
+ }
38
+
39
+ type ApiPluginMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
40
+ type ActionType = 'api' | 'submit' | 'navigate' | 'toggle';
41
+ type UiDynamicFieldType = 'text' | 'number' | 'date' | 'datetime' | 'email' | 'password' | 'textarea' | 'select' | 'barcode' | 'checkbox' | 'color' | 'range' | 'slug' | 'file' | 'photo' | 'container' | 'template';
42
+ interface UiDynamicFormFieldAction {
43
+ id: string;
44
+ type: ActionType;
45
+ label: string;
46
+ icon?: string;
47
+ formId?: string;
48
+ size?: 'sm' | 'md' | 'lg';
49
+ api?: string;
50
+ method?: ApiPluginMethod;
51
+ title?: string;
52
+ text?: string;
53
+ submit?: boolean | string;
54
+ payload?: Record<string, unknown>;
55
+ condition?: string;
56
+ variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
57
+ }
58
+ interface UiDynamicFormBaseField {
59
+ id: string;
60
+ type?: UiDynamicFieldType;
61
+ label?: string;
62
+ title?: string;
63
+ placeholder?: string;
64
+ hint?: string;
65
+ required?: boolean;
66
+ disabled?: boolean;
67
+ readonly?: boolean;
68
+ data?: string;
69
+ optionsSource?: string;
70
+ options?: UiSelectOption$1[];
71
+ searchable?: boolean;
72
+ rows?: number;
73
+ fullWidth?: boolean;
74
+ col?: number;
75
+ accept?: string;
76
+ multiple?: boolean;
77
+ limit?: number;
78
+ hidden?: boolean | string;
79
+ default?: string | number | boolean | string[] | null;
80
+ pattern?: string;
81
+ actions?: UiDynamicFormFieldAction[];
82
+ className?: string;
83
+ containerClassName?: string;
84
+ contentClassName?: string;
85
+ tag?: 'div' | 'section' | 'aside' | 'fieldset';
86
+ fields?: UiDynamicFormField[];
87
+ layout?: 'grid' | 'stack';
88
+ template?: string;
89
+ templateContext?: Record<string, unknown>;
90
+ autoOpen?: boolean;
91
+ searchButtonLabel?: string;
92
+ openCameraLabel?: string;
93
+ closeCameraLabel?: string;
94
+ cameraTitle?: string;
95
+ cameraStartingLabel?: string;
96
+ cameraHint?: string;
97
+ lookupApi?: string;
98
+ lookupMap?: Record<string, string>;
99
+ lookupErrorField?: string;
100
+ }
101
+ interface UiDynamicFormContainerField extends UiDynamicFormBaseField {
102
+ type: 'container';
103
+ fields: UiDynamicFormField[];
104
+ layout?: 'grid' | 'stack';
105
+ }
106
+ interface UiDynamicFormTemplateField extends UiDynamicFormBaseField {
107
+ type: 'template';
108
+ template: string;
109
+ templateContext?: Record<string, unknown>;
110
+ }
111
+ type UiDynamicFormField = UiDynamicFormBaseField | UiDynamicFormContainerField | UiDynamicFormTemplateField;
112
+ type UiDynamicFormValue = Record<string, string | number | boolean | string[] | File | File[] | null | undefined>;
113
+ declare const isDynamicFormContainerField: (field: UiDynamicFormField) => field is UiDynamicFormContainerField;
114
+ declare const isDynamicFormTemplateField: (field: UiDynamicFormField) => field is UiDynamicFormTemplateField;
115
+ declare const flattenDynamicFormFields: (fields: UiDynamicFormField[]) => UiDynamicFormField[];
116
+
117
+ declare class UiFormLookupService {
118
+ private readonly http;
119
+ lookup(field: UiDynamicFormField, value: string): Observable<Record<string, unknown>>;
120
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFormLookupService, never>;
121
+ static ɵprov: i0.ɵɵInjectableDeclaration<UiFormLookupService>;
122
+ }
123
+
124
+ interface UiDynamicFormOptionsSourceContext {
125
+ source: string;
126
+ field: UiDynamicFormField;
127
+ model: UiDynamicFormValue;
128
+ query?: string;
129
+ }
130
+ interface UiDynamicFormOptionsSourceResolver {
131
+ source: string;
132
+ resolve(context: UiDynamicFormOptionsSourceContext): Observable<UiSelectOption$1[]>;
133
+ }
134
+ declare const UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS: InjectionToken<UiDynamicFormOptionsSourceResolver[]>;
135
+
136
+ declare class UiDynamicFormComponent implements OnInit, OnChanges, OnDestroy {
137
+ private readonly formsApi;
138
+ private readonly lookupService;
139
+ readonly formContext: UiFormContext$1;
140
+ private readonly optionsSourceResolvers;
141
+ fields: UiDynamicFormField[];
142
+ value: UiDynamicFormValue;
143
+ errors: Record<string, string>;
144
+ submitLabel: string;
145
+ showSubmit: boolean;
146
+ disabled: boolean;
147
+ uploadPhoto: ((file: File) => Observable<{
148
+ imageId: string;
149
+ }>) | null;
150
+ valueChange: EventEmitter<UiDynamicFormValue>;
151
+ lookupCompleted: EventEmitter<{
152
+ fieldId: string;
153
+ response: Record<string, unknown>;
154
+ }>;
155
+ submitted: EventEmitter<UiDynamicFormValue>;
156
+ filesChange: EventEmitter<{
157
+ fieldId: string;
158
+ files: File[];
159
+ }>;
160
+ uploadingChange: EventEmitter<boolean>;
161
+ fieldActionTriggered: EventEmitter<{
162
+ fieldId: string;
163
+ action: UiDynamicFormFieldAction;
164
+ }>;
165
+ readonly modelSignal: i0.WritableSignal<UiDynamicFormValue>;
166
+ readonly dictionaryOptionsSignal: i0.WritableSignal<Record<string, UiSelectOption$1[]>>;
167
+ readonly lookupLoadingSignal: i0.WritableSignal<Record<string, boolean>>;
168
+ readonly lookupErrorsSignal: i0.WritableSignal<Record<string, string>>;
169
+ private readonly selectSearchChanges;
170
+ private readonly selectSearchSubscriptions;
171
+ private readonly optionsSourceRequestVersions;
172
+ ngOnInit(): void;
173
+ ngOnChanges(changes: SimpleChanges): void;
174
+ ngOnDestroy(): void;
175
+ updateField(fieldId: string, nextValue: UiDynamicFormValue[string]): void;
176
+ onBarcodeValueChange(field: UiDynamicFormField, value: string): void;
177
+ onBarcodeScanned(field: UiDynamicFormField, value: string): void;
178
+ onSelectValueChange(field: UiDynamicFormField, value: string | string[] | null): void;
179
+ runBarcodeLookup(field: UiDynamicFormField): void;
180
+ runFieldLookup(field: UiDynamicFormField, overrideValue?: string): void;
181
+ onFieldActionTriggered(fieldId: string, action: UiDynamicFormFieldAction): void;
182
+ resolveFieldActions(field: UiDynamicFormField): UiDynamicFormFieldAction[];
183
+ getActions(field: UiDynamicFormField): UiDynamicFormFieldAction[];
184
+ isFieldDisabled(field: UiDynamicFormField): boolean;
185
+ submitForm(): void;
186
+ isTextArea(field: UiDynamicFormField): boolean;
187
+ isInputField(field: UiDynamicFormField): boolean;
188
+ isBarcodeField(field: UiDynamicFormField): boolean;
189
+ getStringValue(fieldId: string): string;
190
+ getLookupError(fieldId: string): string;
191
+ isLookupLoading(fieldId: string): boolean;
192
+ resolveClassName(value: unknown): string;
193
+ isContainerField(field: UiDynamicFormField): boolean;
194
+ isTemplateField(field: UiDynamicFormField): boolean;
195
+ isFieldVisible(field: UiDynamicFormField): boolean;
196
+ resolveInputType(field: UiDynamicFormField): string;
197
+ resolveSelectOptions(field: UiDynamicFormField): UiSelectOption$1[];
198
+ renderTemplate(field: UiDynamicFormField): string;
199
+ getContainerTag(field: UiDynamicFormField): 'div' | 'section' | 'aside' | 'fieldset';
200
+ getContainerClass(field: UiDynamicFormField): string;
201
+ getContainerContentClass(field: UiDynamicFormField): string;
202
+ getFieldClass(field: UiDynamicFormField): Record<string, boolean>;
203
+ private resolveColSpanClass;
204
+ onSelectSearchChange(field: UiDynamicFormField, query: string): void;
205
+ private ensureOptionsSourceOptionsLoaded;
206
+ private getSelectSearchStream;
207
+ private cleanupSelectSearchStreams;
208
+ private applyLookupResponse;
209
+ private resolveTemplateValue;
210
+ private getFlatFields;
211
+ private getLeafFields;
212
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiDynamicFormComponent, never>;
213
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiDynamicFormComponent, "forms-dynamic-form", never, { "fields": { "alias": "fields"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errors": { "alias": "errors"; "required": false; }; "submitLabel": { "alias": "submitLabel"; "required": false; }; "showSubmit": { "alias": "showSubmit"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "uploadPhoto": { "alias": "uploadPhoto"; "required": false; }; }, { "valueChange": "valueChange"; "lookupCompleted": "lookupCompleted"; "submitted": "submitted"; "filesChange": "filesChange"; "uploadingChange": "uploadingChange"; "fieldActionTriggered": "fieldActionTriggered"; }, never, never, true, never>;
214
+ }
215
+
216
+ interface MaroFormViewAction extends UiDynamicFormFieldAction$1 {
217
+ redirectTo?: string;
218
+ }
219
+ interface MaroFormViewResponse {
220
+ title?: string;
221
+ api?: string;
222
+ defaults?: Record<string, unknown>;
223
+ redirectTo?: string;
224
+ fields: UiDynamicFormField$1[];
225
+ actions?: MaroFormViewAction[];
226
+ item?: Record<string, unknown> | null;
227
+ }
228
+ declare class UiActionFormModalComponent implements OnChanges {
229
+ readonly formId: i0.InputSignal<string>;
230
+ readonly recordId: i0.InputSignal<string>;
231
+ readonly isOpen: i0.InputSignal<boolean>;
232
+ readonly initialValue: i0.InputSignal<Record<string, unknown>>;
233
+ readonly uploadPhoto: i0.InputSignal<((file: File) => Observable<{
234
+ imageId: string;
235
+ }>) | null>;
236
+ readonly closed: i0.OutputEmitterRef<void>;
237
+ readonly completed: i0.OutputEmitterRef<unknown>;
238
+ readonly isLoading: i0.WritableSignal<boolean>;
239
+ readonly isSubmitting: i0.WritableSignal<boolean>;
240
+ readonly formConfig: i0.WritableSignal<MaroFormViewResponse | null>;
241
+ readonly formValue: i0.WritableSignal<UiDynamicFormValue$1>;
242
+ readonly fields: i0.Signal<UiDynamicFormField$1[]>;
243
+ readonly submitAction: i0.Signal<MaroFormViewAction | undefined>;
244
+ readonly submitLabel: i0.Signal<string | true>;
245
+ private readonly http;
246
+ private readonly router;
247
+ ngOnChanges(changes: SimpleChanges): void;
248
+ close(): void;
249
+ onValueChange(value: UiDynamicFormValue$1): void;
250
+ onFieldActionTriggered(event: {
251
+ fieldId: string;
252
+ action: UiDynamicFormFieldAction$1;
253
+ }): void;
254
+ confirm(): void;
255
+ private loadForm;
256
+ private resolveEndpoint;
257
+ private resolveMethod;
258
+ private extractData;
259
+ private navigateAfterSubmit;
260
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiActionFormModalComponent, never>;
261
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiActionFormModalComponent, "forms-action-form-modal", never, { "formId": { "alias": "formId"; "required": false; "isSignal": true; }; "recordId": { "alias": "recordId"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "initialValue": { "alias": "initialValue"; "required": false; "isSignal": true; }; "uploadPhoto": { "alias": "uploadPhoto"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "completed": "completed"; }, never, never, true, never>;
262
+ }
263
+
264
+ declare class UiFormInputHostComponent implements OnChanges {
265
+ field: UiDynamicFormField;
266
+ value: UiDynamicFormValue[string];
267
+ error: string;
268
+ disabled: boolean;
269
+ actions: UiDynamicFormFieldAction[];
270
+ options: Array<{
271
+ label: string;
272
+ value: string | null;
273
+ disabled?: boolean;
274
+ }>;
275
+ valueChange: EventEmitter<unknown>;
276
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction>;
277
+ private readonly viewContainer;
278
+ private componentRef?;
279
+ ngOnChanges(changes: SimpleChanges): void;
280
+ private render;
281
+ private syncInputs;
282
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFormInputHostComponent, never>;
283
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiFormInputHostComponent, "forms-form-input-host", never, { "field": { "alias": "field"; "required": false; }; "value": { "alias": "value"; "required": false; }; "error": { "alias": "error"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, { "valueChange": "valueChange"; "actionTriggered": "actionTriggered"; }, never, never, true, never>;
284
+ }
285
+
286
+ type UiFormInputType = 'text' | 'number' | 'date' | 'datetime' | 'email' | 'password' | 'textarea';
287
+ declare const UI_FORM_INPUT_REGISTRY: Record<UiFormInputType, Type<unknown>>;
288
+
289
+ declare class UiBarcodeScannerInputComponent implements OnChanges, AfterViewInit, OnDestroy {
290
+ readonly value: i0.InputSignal<string>;
291
+ readonly label: i0.InputSignal<string>;
292
+ readonly placeholder: i0.InputSignal<string>;
293
+ readonly hint: i0.InputSignal<string>;
294
+ readonly disabled: i0.InputSignal<boolean>;
295
+ readonly autoOpen: i0.InputSignal<boolean>;
296
+ readonly searchButtonLabel: i0.InputSignal<string>;
297
+ readonly openCameraLabel: i0.InputSignal<string>;
298
+ readonly closeCameraLabel: i0.InputSignal<string>;
299
+ readonly cameraTitle: i0.InputSignal<string>;
300
+ readonly cameraStartingLabel: i0.InputSignal<string>;
301
+ readonly cameraHint: i0.InputSignal<string>;
302
+ readonly valueChange: i0.OutputEmitterRef<string>;
303
+ readonly scanned: i0.OutputEmitterRef<string>;
304
+ readonly searchRequested: i0.OutputEmitterRef<void>;
305
+ readonly cameraStateChange: i0.OutputEmitterRef<"error" | "idle" | "starting" | "open">;
306
+ readonly isCameraOpen: i0.WritableSignal<boolean>;
307
+ readonly isCameraStarting: i0.WritableSignal<boolean>;
308
+ readonly cameraError: i0.WritableSignal<string>;
309
+ readonly cameraStatus: i0.WritableSignal<string>;
310
+ private cameraVideo?;
311
+ private readonly barcodeReader;
312
+ private nativeBarcodeDetector;
313
+ private cameraControls;
314
+ private cameraStream;
315
+ private scanLoopId;
316
+ private autoOpenQueued;
317
+ private openToken;
318
+ ngOnChanges(changes: SimpleChanges): void;
319
+ ngAfterViewInit(): void;
320
+ ngOnDestroy(): void;
321
+ onValueChange(nextValue: string): void;
322
+ requestSearch(): void;
323
+ openCamera(): Promise<void>;
324
+ closeCamera(): void;
325
+ private scheduleAutoOpen;
326
+ private onBarcodeDetected;
327
+ private stopCamera;
328
+ private tryOpenNativeCamera;
329
+ private openZxingCamera;
330
+ private scheduleNativeScan;
331
+ private createNativeBarcodeDetector;
332
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiBarcodeScannerInputComponent, never>;
333
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiBarcodeScannerInputComponent, "forms-barcode-scanner-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "autoOpen": { "alias": "autoOpen"; "required": false; "isSignal": true; }; "searchButtonLabel": { "alias": "searchButtonLabel"; "required": false; "isSignal": true; }; "openCameraLabel": { "alias": "openCameraLabel"; "required": false; "isSignal": true; }; "closeCameraLabel": { "alias": "closeCameraLabel"; "required": false; "isSignal": true; }; "cameraTitle": { "alias": "cameraTitle"; "required": false; "isSignal": true; }; "cameraStartingLabel": { "alias": "cameraStartingLabel"; "required": false; "isSignal": true; }; "cameraHint": { "alias": "cameraHint"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "scanned": "scanned"; "searchRequested": "searchRequested"; "cameraStateChange": "cameraStateChange"; }, never, never, true, never>;
334
+ }
335
+
336
+ declare class UiCheckboxInputComponent {
337
+ label?: string;
338
+ disabled: boolean;
339
+ value: boolean;
340
+ valueChange: EventEmitter<boolean>;
341
+ onValueChange(event: Event): void;
342
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCheckboxInputComponent, never>;
343
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiCheckboxInputComponent, "forms-checkbox-input", never, { "label": { "alias": "label"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
344
+ }
345
+
346
+ declare class UiColorInputComponent implements ControlValueAccessor {
347
+ private readonly cdr;
348
+ label?: string;
349
+ hint?: string;
350
+ name?: string;
351
+ id?: string;
352
+ required: boolean;
353
+ fullWidth: boolean;
354
+ error?: string;
355
+ disabled: boolean;
356
+ value: string;
357
+ private static nextId;
358
+ private readonly generatedId;
359
+ private onChange;
360
+ onTouched: () => void;
361
+ get controlId(): string;
362
+ get pickerValue(): string;
363
+ writeValue(value: string | null): void;
364
+ registerOnChange(fn: (value: string) => void): void;
365
+ registerOnTouched(fn: () => void): void;
366
+ setDisabledState(isDisabled: boolean): void;
367
+ onPickerChange(value: string): void;
368
+ onHexInput(value: string): void;
369
+ markTouched(): void;
370
+ private normalizeHexInput;
371
+ private isColorValue;
372
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiColorInputComponent, never>;
373
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiColorInputComponent, "forms-color-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "error": { "alias": "error"; "required": false; }; }, {}, never, never, true, never>;
374
+ }
375
+
376
+ type UiInputElement$7 = 'input' | 'textarea';
377
+ declare class UiDateInputComponent implements ControlValueAccessor {
378
+ private readonly cdr;
379
+ label?: string;
380
+ hint?: string;
381
+ placeholder?: string;
382
+ name?: string;
383
+ id?: string;
384
+ readonly type = "date";
385
+ readonly element: UiInputElement$7;
386
+ rows: number;
387
+ required: boolean;
388
+ fullWidth: boolean;
389
+ autocomplete?: string;
390
+ readonly: boolean;
391
+ pattern?: string;
392
+ error?: string;
393
+ actions: UiDynamicFormFieldAction$1[];
394
+ disabled: boolean;
395
+ value: string | number | null;
396
+ private static nextId;
397
+ private readonly generatedId;
398
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
399
+ get controlId(): string;
400
+ private onChange;
401
+ onTouched: () => void;
402
+ writeValue(value: string | number | null): void;
403
+ registerOnChange(fn: (value: string | number | null) => void): void;
404
+ registerOnTouched(fn: () => void): void;
405
+ setDisabledState(isDisabled: boolean): void;
406
+ onValueChange(value: string): void;
407
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
408
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiDateInputComponent, never>;
409
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiDateInputComponent, "forms-date-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
410
+ }
411
+
412
+ type UiInputElement$6 = 'input' | 'textarea';
413
+ declare class UiDatetimeInputComponent implements ControlValueAccessor {
414
+ private readonly cdr;
415
+ label?: string;
416
+ hint?: string;
417
+ placeholder?: string;
418
+ name?: string;
419
+ id?: string;
420
+ readonly type = "datetime-local";
421
+ readonly element: UiInputElement$6;
422
+ rows: number;
423
+ required: boolean;
424
+ fullWidth: boolean;
425
+ autocomplete?: string;
426
+ readonly: boolean;
427
+ pattern?: string;
428
+ error?: string;
429
+ actions: UiDynamicFormFieldAction$1[];
430
+ disabled: boolean;
431
+ value: string | number | null;
432
+ private static nextId;
433
+ private readonly generatedId;
434
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
435
+ get controlId(): string;
436
+ private onChange;
437
+ onTouched: () => void;
438
+ writeValue(value: string | number | null): void;
439
+ registerOnChange(fn: (value: string | number | null) => void): void;
440
+ registerOnTouched(fn: () => void): void;
441
+ setDisabledState(isDisabled: boolean): void;
442
+ onValueChange(value: string): void;
443
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
444
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiDatetimeInputComponent, never>;
445
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiDatetimeInputComponent, "forms-datetime-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
446
+ }
447
+
448
+ type UiInputElement$5 = 'input' | 'textarea';
449
+ declare class UiEmailInputComponent implements ControlValueAccessor {
450
+ private readonly cdr;
451
+ label?: string;
452
+ hint?: string;
453
+ placeholder?: string;
454
+ name?: string;
455
+ id?: string;
456
+ readonly type = "email";
457
+ readonly element: UiInputElement$5;
458
+ rows: number;
459
+ required: boolean;
460
+ fullWidth: boolean;
461
+ autocomplete?: string;
462
+ readonly: boolean;
463
+ pattern?: string;
464
+ error?: string;
465
+ actions: UiDynamicFormFieldAction$1[];
466
+ disabled: boolean;
467
+ value: string | number | null;
468
+ private static nextId;
469
+ private readonly generatedId;
470
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
471
+ get controlId(): string;
472
+ private onChange;
473
+ onTouched: () => void;
474
+ writeValue(value: string | number | null): void;
475
+ registerOnChange(fn: (value: string | number | null) => void): void;
476
+ registerOnTouched(fn: () => void): void;
477
+ setDisabledState(isDisabled: boolean): void;
478
+ onValueChange(value: string): void;
479
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
480
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiEmailInputComponent, never>;
481
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiEmailInputComponent, "forms-email-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
482
+ }
483
+
484
+ declare class UiFileInputComponent {
485
+ label?: string;
486
+ hint?: string;
487
+ accept?: string;
488
+ multiple: boolean;
489
+ disabled: boolean;
490
+ value: File | File[] | null;
491
+ valueChange: EventEmitter<File | File[] | null>;
492
+ filesChange: EventEmitter<File[]>;
493
+ get selectedFiles(): File[];
494
+ onFilesSelected(event: Event): void;
495
+ remove(index: number): void;
496
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFileInputComponent, never>;
497
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiFileInputComponent, "forms-file-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; "filesChange": "filesChange"; }, never, never, true, never>;
498
+ }
499
+
500
+ type UiInputElement$4 = 'input' | 'textarea';
501
+ declare class UiInputComponent implements ControlValueAccessor {
502
+ private readonly cdr;
503
+ label?: string;
504
+ hint?: string;
505
+ placeholder?: string;
506
+ name?: string;
507
+ id?: string;
508
+ type: string;
509
+ element: UiInputElement$4;
510
+ rows: number;
511
+ required: boolean;
512
+ fullWidth: boolean;
513
+ autocomplete?: string;
514
+ readonly: boolean;
515
+ pattern?: string;
516
+ error?: string;
517
+ actions: UiDynamicFormFieldAction$1[];
518
+ disabled: boolean;
519
+ value: string | number | null;
520
+ private static nextId;
521
+ private readonly generatedId;
522
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
523
+ get controlId(): string;
524
+ private onChange;
525
+ onTouched: () => void;
526
+ writeValue(value: string | number | null): void;
527
+ registerOnChange(fn: (value: string | number | null) => void): void;
528
+ registerOnTouched(fn: () => void): void;
529
+ setDisabledState(isDisabled: boolean): void;
530
+ onValueChange(value: string): void;
531
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
532
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiInputComponent, never>;
533
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiInputComponent, "forms-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "type": { "alias": "type"; "required": false; }; "element": { "alias": "element"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
534
+ }
535
+
536
+ type UiInputElement$3 = 'input' | 'textarea';
537
+ declare class UiNumberInputComponent implements ControlValueAccessor {
538
+ private readonly cdr;
539
+ label?: string;
540
+ hint?: string;
541
+ placeholder?: string;
542
+ name?: string;
543
+ id?: string;
544
+ readonly type = "number";
545
+ readonly element: UiInputElement$3;
546
+ rows: number;
547
+ required: boolean;
548
+ fullWidth: boolean;
549
+ autocomplete?: string;
550
+ readonly: boolean;
551
+ disabled: boolean;
552
+ pattern?: string;
553
+ error?: string;
554
+ actions: UiDynamicFormFieldAction$1[];
555
+ value: string | number | null;
556
+ private static nextId;
557
+ private readonly generatedId;
558
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
559
+ get controlId(): string;
560
+ private onChange;
561
+ onTouched: () => void;
562
+ writeValue(value: string | number | null): void;
563
+ registerOnChange(fn: (value: string | number | null) => void): void;
564
+ registerOnTouched(fn: () => void): void;
565
+ setDisabledState(isDisabled: boolean): void;
566
+ onValueChange(value: string): void;
567
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
568
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiNumberInputComponent, never>;
569
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiNumberInputComponent, "forms-number-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
570
+ }
571
+
572
+ type UiInputElement$2 = 'input' | 'textarea';
573
+ declare class UiPasswordInputComponent implements ControlValueAccessor {
574
+ private readonly cdr;
575
+ label?: string;
576
+ hint?: string;
577
+ placeholder?: string;
578
+ name?: string;
579
+ id?: string;
580
+ readonly type = "password";
581
+ readonly element: UiInputElement$2;
582
+ rows: number;
583
+ required: boolean;
584
+ fullWidth: boolean;
585
+ autocomplete?: string;
586
+ readonly: boolean;
587
+ pattern?: string;
588
+ error?: string;
589
+ actions: UiDynamicFormFieldAction$1[];
590
+ disabled: boolean;
591
+ value: string | number | null;
592
+ private static nextId;
593
+ private readonly generatedId;
594
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
595
+ get controlId(): string;
596
+ private onChange;
597
+ onTouched: () => void;
598
+ writeValue(value: string | number | null): void;
599
+ registerOnChange(fn: (value: string | number | null) => void): void;
600
+ registerOnTouched(fn: () => void): void;
601
+ setDisabledState(isDisabled: boolean): void;
602
+ onValueChange(value: string): void;
603
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
604
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiPasswordInputComponent, never>;
605
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiPasswordInputComponent, "forms-password-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
606
+ }
607
+
608
+ interface UiPhotoPreview {
609
+ name: string;
610
+ url: string;
611
+ isImage: boolean;
612
+ source: 'file' | 'id';
613
+ }
614
+ declare class UiPhotoInputComponent implements OnChanges, OnDestroy {
615
+ label?: string;
616
+ hint?: string;
617
+ accept: string;
618
+ multiple: boolean;
619
+ limit: number;
620
+ disabled: boolean;
621
+ value: string | string[] | null;
622
+ uploadPhoto: ((file: File) => Observable<{
623
+ imageId: string;
624
+ type?: string;
625
+ }>) | null;
626
+ valueChange: EventEmitter<string | string[] | null>;
627
+ filesChange: EventEmitter<File[]>;
628
+ uploadingChange: EventEmitter<boolean>;
629
+ pendingFiles: File[];
630
+ previews: UiPhotoPreview[];
631
+ uploading: boolean;
632
+ private readonly fileTypes;
633
+ ngOnChanges(changes: SimpleChanges): void;
634
+ ngOnDestroy(): void;
635
+ get canSelectMore(): boolean;
636
+ onFilesSelected(event: Event): void;
637
+ remove(index: number): void;
638
+ drop(event: CdkDragDrop<UiPhotoPreview[]>): void;
639
+ private get ids();
640
+ private get normalizedLimit();
641
+ private emitValue;
642
+ private uploadFiles;
643
+ private rebuildPreviews;
644
+ private revokeBlobUrls;
645
+ private resolveImageUrl;
646
+ private isPreviewableType;
647
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiPhotoInputComponent, never>;
648
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiPhotoInputComponent, "forms-photo-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "limit": { "alias": "limit"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; "uploadPhoto": { "alias": "uploadPhoto"; "required": false; }; }, { "valueChange": "valueChange"; "filesChange": "filesChange"; "uploadingChange": "uploadingChange"; }, never, never, true, never>;
649
+ }
650
+
651
+ interface UiPhotoGalleryEntry {
652
+ clientKey: string;
653
+ imageId?: string;
654
+ preview?: string;
655
+ file?: File;
656
+ isUploading?: boolean;
657
+ }
658
+ declare class UiPhotoGalleryFieldComponent implements OnInit, OnChanges, OnDestroy {
659
+ label: string;
660
+ orderLabel: string;
661
+ imageIds: string[];
662
+ disabled: boolean;
663
+ afterUpload: ((imageId: string) => Observable<unknown>) | null;
664
+ uploadPhoto: ((file: File) => Observable<{
665
+ imageId: string;
666
+ }>) | null;
667
+ resolveImageUrl: ((imageId: string) => string) | null;
668
+ notify: ((message: string, variant: 'success' | 'error' | 'warning', durationMs?: number) => void) | null;
669
+ imageIdsChange: EventEmitter<string[]>;
670
+ entries: UiPhotoGalleryEntry[];
671
+ private imageEntrySequence;
672
+ get photoCount(): number;
673
+ ngOnInit(): void;
674
+ ngOnChanges(changes: SimpleChanges): void;
675
+ ngOnDestroy(): void;
676
+ onFilesChange(event: Event, index: number): void;
677
+ openFilePicker(input: HTMLInputElement | null, event?: MouseEvent): void;
678
+ onDrop(event: CdkDragDrop<UiPhotoGalleryEntry[]>): void;
679
+ removeAt(index: number): void;
680
+ private createImageEntry;
681
+ private normalizeImageEntries;
682
+ private emitImageIds;
683
+ private uploadPendingImages;
684
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiPhotoGalleryFieldComponent, never>;
685
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiPhotoGalleryFieldComponent, "forms-photo-gallery-field", never, { "label": { "alias": "label"; "required": false; }; "orderLabel": { "alias": "orderLabel"; "required": false; }; "imageIds": { "alias": "imageIds"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "afterUpload": { "alias": "afterUpload"; "required": false; }; "uploadPhoto": { "alias": "uploadPhoto"; "required": false; }; "resolveImageUrl": { "alias": "resolveImageUrl"; "required": false; }; "notify": { "alias": "notify"; "required": false; }; }, { "imageIdsChange": "imageIdsChange"; }, never, never, true, never>;
686
+ }
687
+
688
+ declare class UiRangeSliderComponent implements OnChanges, AfterViewInit {
689
+ min: number;
690
+ max: number;
691
+ step: number;
692
+ startValue: number | null;
693
+ endValue: number | null;
694
+ startLabel: string;
695
+ endLabel: string;
696
+ startValueChange: EventEmitter<number>;
697
+ endValueChange: EventEmitter<number>;
698
+ interactionEnd: EventEmitter<void>;
699
+ private startInput?;
700
+ private endInput?;
701
+ get safeStart(): number;
702
+ get safeEnd(): number;
703
+ get startPercent(): number;
704
+ get endPercent(): number;
705
+ get rangePercent(): number;
706
+ get safeMin(): number;
707
+ get safeMax(): number;
708
+ get safeStep(): number;
709
+ ngOnChanges(_: SimpleChanges): void;
710
+ ngAfterViewInit(): void;
711
+ onStartInput(event: Event): void;
712
+ onEndInput(event: Event): void;
713
+ private toPercent;
714
+ private toFiniteNumber;
715
+ private syncNativeInputs;
716
+ private syncNativeInput;
717
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiRangeSliderComponent, never>;
718
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiRangeSliderComponent, "forms-range-slider", never, { "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "step": { "alias": "step"; "required": false; }; "startValue": { "alias": "startValue"; "required": false; }; "endValue": { "alias": "endValue"; "required": false; }; "startLabel": { "alias": "startLabel"; "required": false; }; "endLabel": { "alias": "endLabel"; "required": false; }; }, { "startValueChange": "startValueChange"; "endValueChange": "endValueChange"; "interactionEnd": "interactionEnd"; }, never, never, true, never>;
719
+ }
720
+
721
+ interface UiSelectOption {
722
+ label: string;
723
+ value: string | null;
724
+ disabled?: boolean;
725
+ imageUrl?: string;
726
+ }
727
+ type UiSelectValue = string | string[] | null;
728
+ declare class UiSelectComponent implements ControlValueAccessor, OnChanges {
729
+ readonly closeIcon: lucide_angular.LucideIconData;
730
+ readonly chevronDownIcon: lucide_angular.LucideIconData;
731
+ readonly checkIcon: lucide_angular.LucideIconData;
732
+ private static openInstance;
733
+ private readonly cdr;
734
+ private readonly destroyRef;
735
+ private readonly http;
736
+ label?: string;
737
+ placeholder?: string;
738
+ name?: string;
739
+ data?: string;
740
+ required: boolean;
741
+ fullWidth: boolean;
742
+ disabled: boolean;
743
+ multiple: boolean;
744
+ includeBlankOption: boolean;
745
+ blankOptionLabel: string;
746
+ emptyStateLabel: string;
747
+ searchable: boolean;
748
+ remoteSearch: boolean;
749
+ searchPlaceholder: string;
750
+ private _options;
751
+ set options(value: UiSelectOption[]);
752
+ get options(): UiSelectOption[];
753
+ error?: string;
754
+ hint?: string;
755
+ triggerClass: string;
756
+ panelClass: string;
757
+ valueChange: EventEmitter<UiSelectValue>;
758
+ searchChange: EventEmitter<string>;
759
+ dropdownTrigger?: ElementRef<HTMLButtonElement>;
760
+ readonly dropdownPositions: ConnectedPosition[];
761
+ isOpen: boolean;
762
+ triggerWidth: number;
763
+ value: string | null;
764
+ multiValue: string[];
765
+ selectedOptions: UiSelectOption[];
766
+ searchTerm: string;
767
+ isDictionaryLoading: boolean;
768
+ private readonly searchChanges$;
769
+ private readonly dictionaryRequestVersions;
770
+ private dictionaryOptions;
771
+ private onChange;
772
+ onTouched: () => void;
773
+ constructor();
774
+ ngOnChanges(changes: SimpleChanges): void;
775
+ writeValue(value: UiSelectValue): void;
776
+ registerOnChange(fn: (value: UiSelectValue) => void): void;
777
+ registerOnTouched(fn: () => void): void;
778
+ setDisabledState(isDisabled: boolean): void;
779
+ toggleDropdown(event: Event): void;
780
+ selectOption(option: UiSelectOption, event: Event): void;
781
+ markTouched(): void;
782
+ closeDropdown(): void;
783
+ get displayLabel(): string;
784
+ isSelected(option: UiSelectOption): boolean;
785
+ getOptionValue(option: UiSelectOption): string;
786
+ trackOption(index: number, option: UiSelectOption): string;
787
+ get visibleOptions(): UiSelectOption[];
788
+ onSearchChange(value: string): void;
789
+ removeOption(option: UiSelectOption, event: Event): void;
790
+ private updateSelectionFromValue;
791
+ private getRenderOptions;
792
+ private mergeOptions;
793
+ private isBlankOption;
794
+ private getDictionaryName;
795
+ private reloadDictionaryOptions;
796
+ private loadDictionaryOptions;
797
+ private ensureSelectedDictionaryOptionsLoaded;
798
+ private normalizeSuggestItems;
799
+ private normalizeSuggestItem;
800
+ private loadSuggestItems;
801
+ private loadSuggestItem;
802
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSelectComponent, never>;
803
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSelectComponent, "forms-select", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "data": { "alias": "data"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "includeBlankOption": { "alias": "includeBlankOption"; "required": false; }; "blankOptionLabel": { "alias": "blankOptionLabel"; "required": false; }; "emptyStateLabel": { "alias": "emptyStateLabel"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "remoteSearch": { "alias": "remoteSearch"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "error": { "alias": "error"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "triggerClass": { "alias": "triggerClass"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; }, { "valueChange": "valueChange"; "searchChange": "searchChange"; }, never, never, true, never>;
804
+ static ngAcceptInputType_multiple: unknown;
805
+ }
806
+
807
+ declare class UiSlugInputComponent implements ControlValueAccessor {
808
+ label?: string;
809
+ hint?: string;
810
+ placeholder?: string;
811
+ name?: string;
812
+ id?: string;
813
+ required: boolean;
814
+ fullWidth: boolean;
815
+ autocomplete: string;
816
+ readonly: boolean;
817
+ error?: string;
818
+ invalidInput: EventEmitter<void>;
819
+ disabled: boolean;
820
+ value: string;
821
+ private static nextId;
822
+ private readonly generatedId;
823
+ private onChange;
824
+ onTouched: () => void;
825
+ get controlId(): string;
826
+ writeValue(value: string | null): void;
827
+ registerOnChange(fn: (value: string) => void): void;
828
+ registerOnTouched(fn: () => void): void;
829
+ setDisabledState(isDisabled: boolean): void;
830
+ onValueChange(target: HTMLInputElement): void;
831
+ private normalizeSlug;
832
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSlugInputComponent, never>;
833
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSlugInputComponent, "forms-slug-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "error": { "alias": "error"; "required": false; }; }, { "invalidInput": "invalidInput"; }, never, never, true, never>;
834
+ }
835
+
836
+ type UiInputElement$1 = 'input' | 'textarea';
837
+ declare class UiTextInputComponent implements ControlValueAccessor {
838
+ private readonly cdr;
839
+ label?: string;
840
+ hint?: string;
841
+ placeholder?: string;
842
+ name?: string;
843
+ id?: string;
844
+ readonly type = "text";
845
+ readonly element: UiInputElement$1;
846
+ rows: number;
847
+ required: boolean;
848
+ fullWidth: boolean;
849
+ autocomplete?: string;
850
+ readonly: boolean;
851
+ pattern?: string;
852
+ error?: string;
853
+ actions: UiDynamicFormFieldAction$1[];
854
+ disabled: boolean;
855
+ value: string | number | null;
856
+ private static nextId;
857
+ private readonly generatedId;
858
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
859
+ get controlId(): string;
860
+ private onChange;
861
+ onTouched: () => void;
862
+ writeValue(value: string | number | null): void;
863
+ registerOnChange(fn: (value: string | number | null) => void): void;
864
+ registerOnTouched(fn: () => void): void;
865
+ setDisabledState(isDisabled: boolean): void;
866
+ onValueChange(value: string): void;
867
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
868
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTextInputComponent, never>;
869
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiTextInputComponent, "forms-text-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
870
+ }
871
+
872
+ type UiInputElement = 'input' | 'textarea';
873
+ declare class UiTextareaInputComponent implements ControlValueAccessor {
874
+ private readonly cdr;
875
+ label?: string;
876
+ hint?: string;
877
+ placeholder?: string;
878
+ name?: string;
879
+ id?: string;
880
+ readonly type = "text";
881
+ readonly element: UiInputElement;
882
+ rows: number;
883
+ required: boolean;
884
+ fullWidth: boolean;
885
+ autocomplete?: string;
886
+ readonly: boolean;
887
+ pattern?: string;
888
+ error?: string;
889
+ actions: UiDynamicFormFieldAction$1[];
890
+ disabled: boolean;
891
+ value: string | number | null;
892
+ private static nextId;
893
+ private readonly generatedId;
894
+ actionTriggered: EventEmitter<UiDynamicFormFieldAction$1>;
895
+ get controlId(): string;
896
+ private onChange;
897
+ onTouched: () => void;
898
+ writeValue(value: string | number | null): void;
899
+ registerOnChange(fn: (value: string | number | null) => void): void;
900
+ registerOnTouched(fn: () => void): void;
901
+ setDisabledState(isDisabled: boolean): void;
902
+ onValueChange(value: string): void;
903
+ triggerAction(action: UiDynamicFormFieldAction$1): void;
904
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTextareaInputComponent, never>;
905
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiTextareaInputComponent, "forms-textarea-input", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "required": { "alias": "required"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "error": { "alias": "error"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionTriggered": "actionTriggered"; }, never, never, true, never>;
906
+ }
907
+
908
+ export { MaroFormsApiService, UI_DYNAMIC_FORM_OPTIONS_SOURCE_RESOLVERS, UI_FORM_INPUT_REGISTRY, UiActionFormModalComponent, UiBarcodeScannerInputComponent, UiCheckboxInputComponent, UiColorInputComponent, UiDateInputComponent, UiDatetimeInputComponent, UiDynamicFormComponent, UiEmailInputComponent, UiFileInputComponent, UiFormContext, UiFormInputHostComponent, UiFormLookupService, UiInputComponent, UiNumberInputComponent, UiPasswordInputComponent, UiPhotoGalleryFieldComponent, UiPhotoInputComponent, UiRangeSliderComponent, UiSelectComponent, UiSlugInputComponent, UiTextInputComponent, UiTextareaInputComponent, flattenDynamicFormFields, isDynamicFormContainerField, isDynamicFormTemplateField };
909
+ export type { ActionType, ApiPluginMethod, MaroFormViewAction, MaroFormViewResponse, UiDynamicFieldType, UiDynamicFormBaseField, UiDynamicFormContainerField, UiDynamicFormField, UiDynamicFormFieldAction, UiDynamicFormOptionsSourceContext, UiDynamicFormOptionsSourceResolver, UiDynamicFormTemplateField, UiDynamicFormValue, UiFormErrors, UiFormInputType, UiFormSubmitState, UiFormValue, UiPhotoGalleryEntry, UiPhotoPreview, UiSelectOption, UiSelectValue };