@frame-kit/ui-ng 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.
- package/COMPONENTS.md +683 -0
- package/DEVELOPMENT_GUIDE.md +1102 -0
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/THEMING.md +130 -0
- package/core/headline/README.md +121 -0
- package/core/icon/README.md +173 -0
- package/core/image/README.md +210 -0
- package/core/link/README.md +297 -0
- package/core/separator/README.md +145 -0
- package/core/text/README.md +240 -0
- package/directives/infinite-scroll/README.md +102 -0
- package/directives/spotlight/README.md +154 -0
- package/directives/tooltip/README.md +147 -0
- package/docs/endpoint-link/README.md +142 -0
- package/docs/method-badge/README.md +154 -0
- package/fesm2022/frame-kit-ui-ng-core-headline.mjs +122 -0
- package/fesm2022/frame-kit-ui-ng-core-headline.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-icon.mjs +189 -0
- package/fesm2022/frame-kit-ui-ng-core-icon.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-image.mjs +123 -0
- package/fesm2022/frame-kit-ui-ng-core-image.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-link.mjs +369 -0
- package/fesm2022/frame-kit-ui-ng-core-link.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-separator.mjs +59 -0
- package/fesm2022/frame-kit-ui-ng-core-separator.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-text.mjs +204 -0
- package/fesm2022/frame-kit-ui-ng-core-text.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-directives-infinite-scroll.mjs +74 -0
- package/fesm2022/frame-kit-ui-ng-directives-infinite-scroll.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-directives-spotlight.mjs +76 -0
- package/fesm2022/frame-kit-ui-ng-directives-spotlight.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-directives-tooltip.mjs +425 -0
- package/fesm2022/frame-kit-ui-ng-directives-tooltip.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-docs-endpoint-link.mjs +63 -0
- package/fesm2022/frame-kit-ui-ng-docs-endpoint-link.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-docs-method-badge.mjs +43 -0
- package/fesm2022/frame-kit-ui-ng-docs-method-badge.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-forms.mjs +3632 -0
- package/fesm2022/frame-kit-ui-ng-forms.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-layouts-app-shell.mjs +239 -0
- package/fesm2022/frame-kit-ui-ng-layouts-app-shell.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-layouts-content-split.mjs +132 -0
- package/fesm2022/frame-kit-ui-ng-layouts-content-split.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-services-overlay-orchestrator.mjs +133 -0
- package/fesm2022/frame-kit-ui-ng-services-overlay-orchestrator.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-services-spotlight.mjs +60 -0
- package/fesm2022/frame-kit-ui-ng-services-spotlight.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-services-toast.mjs +166 -0
- package/fesm2022/frame-kit-ui-ng-services-toast.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-accordion.mjs +214 -0
- package/fesm2022/frame-kit-ui-ng-ui-accordion.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-alert.mjs +82 -0
- package/fesm2022/frame-kit-ui-ng-ui-alert.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar-stack.mjs +76 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar-stack.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-badge.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-badge.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-breadcrumb.mjs +68 -0
- package/fesm2022/frame-kit-ui-ng-ui-breadcrumb.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-button.mjs +108 -0
- package/fesm2022/frame-kit-ui-ng-ui-button.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-callout.mjs +58 -0
- package/fesm2022/frame-kit-ui-ng-ui-callout.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-card.mjs +70 -0
- package/fesm2022/frame-kit-ui-ng-ui-card.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-copyable-field.mjs +113 -0
- package/fesm2022/frame-kit-ui-ng-ui-copyable-field.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-data-table.mjs +1288 -0
- package/fesm2022/frame-kit-ui-ng-ui-data-table.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-dialog.mjs +456 -0
- package/fesm2022/frame-kit-ui-ng-ui-dialog.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-drawer.mjs +398 -0
- package/fesm2022/frame-kit-ui-ng-ui-drawer.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-dropdown-menu.mjs +398 -0
- package/fesm2022/frame-kit-ui-ng-ui-dropdown-menu.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-editable-field.mjs +125 -0
- package/fesm2022/frame-kit-ui-ng-ui-editable-field.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-badge.mjs +113 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-badge.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-list.mjs +111 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-list.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-inline-edit.mjs +103 -0
- package/fesm2022/frame-kit-ui-ng-ui-inline-edit.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-list-editor.mjs +135 -0
- package/fesm2022/frame-kit-ui-ng-ui-list-editor.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-loader.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-loader.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-menu-item.mjs +79 -0
- package/fesm2022/frame-kit-ui-ng-ui-menu-item.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-brand.mjs +40 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-brand.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-group.mjs +110 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-group.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-separator.mjs +91 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-separator.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree-breadcrumb.mjs +86 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree-breadcrumb.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree.mjs +443 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-note.mjs +56 -0
- package/fesm2022/frame-kit-ui-ng-ui-note.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-numbered-list.mjs +105 -0
- package/fesm2022/frame-kit-ui-ng-ui-numbered-list.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-pagination.mjs +110 -0
- package/fesm2022/frame-kit-ui-ng-ui-pagination.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-progress-bar.mjs +129 -0
- package/fesm2022/frame-kit-ui-ng-ui-progress-bar.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-sidenav-link.mjs +42 -0
- package/fesm2022/frame-kit-ui-ng-ui-sidenav-link.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs +894 -0
- package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-timeline.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-timeline.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-toast.mjs +179 -0
- package/fesm2022/frame-kit-ui-ng-ui-toast.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-user-menu.mjs +143 -0
- package/fesm2022/frame-kit-ui-ng-ui-user-menu.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-wizard-dialog.mjs +191 -0
- package/fesm2022/frame-kit-ui-ng-ui-wizard-dialog.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng.mjs +58 -0
- package/fesm2022/frame-kit-ui-ng.mjs.map +1 -0
- package/layouts/app-shell/README.md +357 -0
- package/layouts/content-split/README.md +180 -0
- package/package.json +253 -0
- package/services/overlay-orchestrator/README.md +184 -0
- package/services/spotlight/README.md +61 -0
- package/services/toast/README.md +118 -0
- package/types/frame-kit-ui-ng-core-headline.d.ts +38 -0
- package/types/frame-kit-ui-ng-core-icon.d.ts +74 -0
- package/types/frame-kit-ui-ng-core-image.d.ts +93 -0
- package/types/frame-kit-ui-ng-core-link.d.ts +251 -0
- package/types/frame-kit-ui-ng-core-separator.d.ts +28 -0
- package/types/frame-kit-ui-ng-core-text.d.ts +186 -0
- package/types/frame-kit-ui-ng-directives-infinite-scroll.d.ts +42 -0
- package/types/frame-kit-ui-ng-directives-spotlight.d.ts +51 -0
- package/types/frame-kit-ui-ng-directives-tooltip.d.ts +70 -0
- package/types/frame-kit-ui-ng-docs-endpoint-link.d.ts +43 -0
- package/types/frame-kit-ui-ng-docs-method-badge.d.ts +30 -0
- package/types/frame-kit-ui-ng-forms.d.ts +1674 -0
- package/types/frame-kit-ui-ng-layouts-app-shell.d.ts +75 -0
- package/types/frame-kit-ui-ng-layouts-content-split.d.ts +43 -0
- package/types/frame-kit-ui-ng-services-overlay-orchestrator.d.ts +96 -0
- package/types/frame-kit-ui-ng-services-spotlight.d.ts +32 -0
- package/types/frame-kit-ui-ng-services-toast.d.ts +100 -0
- package/types/frame-kit-ui-ng-ui-accordion.d.ts +86 -0
- package/types/frame-kit-ui-ng-ui-alert.d.ts +34 -0
- package/types/frame-kit-ui-ng-ui-avatar-stack.d.ts +38 -0
- package/types/frame-kit-ui-ng-ui-avatar.d.ts +36 -0
- package/types/frame-kit-ui-ng-ui-badge.d.ts +33 -0
- package/types/frame-kit-ui-ng-ui-breadcrumb.d.ts +45 -0
- package/types/frame-kit-ui-ng-ui-button.d.ts +48 -0
- package/types/frame-kit-ui-ng-ui-callout.d.ts +26 -0
- package/types/frame-kit-ui-ng-ui-card.d.ts +30 -0
- package/types/frame-kit-ui-ng-ui-copyable-field.d.ts +62 -0
- package/types/frame-kit-ui-ng-ui-data-table.d.ts +482 -0
- package/types/frame-kit-ui-ng-ui-dialog.d.ts +166 -0
- package/types/frame-kit-ui-ng-ui-drawer.d.ts +130 -0
- package/types/frame-kit-ui-ng-ui-dropdown-menu.d.ts +77 -0
- package/types/frame-kit-ui-ng-ui-editable-field.d.ts +65 -0
- package/types/frame-kit-ui-ng-ui-icon-badge.d.ts +45 -0
- package/types/frame-kit-ui-ng-ui-icon-list.d.ts +67 -0
- package/types/frame-kit-ui-ng-ui-inline-edit.d.ts +44 -0
- package/types/frame-kit-ui-ng-ui-list-editor.d.ts +56 -0
- package/types/frame-kit-ui-ng-ui-loader.d.ts +32 -0
- package/types/frame-kit-ui-ng-ui-menu-item.d.ts +27 -0
- package/types/frame-kit-ui-ng-ui-nav-brand.d.ts +25 -0
- package/types/frame-kit-ui-ng-ui-nav-group.d.ts +60 -0
- package/types/frame-kit-ui-ng-ui-nav-separator.d.ts +33 -0
- package/types/frame-kit-ui-ng-ui-node-tree-breadcrumb.d.ts +35 -0
- package/types/frame-kit-ui-ng-ui-node-tree.d.ts +135 -0
- package/types/frame-kit-ui-ng-ui-note.d.ts +22 -0
- package/types/frame-kit-ui-ng-ui-numbered-list.d.ts +52 -0
- package/types/frame-kit-ui-ng-ui-pagination.d.ts +49 -0
- package/types/frame-kit-ui-ng-ui-progress-bar.d.ts +50 -0
- package/types/frame-kit-ui-ng-ui-sidenav-link.d.ts +24 -0
- package/types/frame-kit-ui-ng-ui-tabs.d.ts +266 -0
- package/types/frame-kit-ui-ng-ui-timeline.d.ts +42 -0
- package/types/frame-kit-ui-ng-ui-toast.d.ts +56 -0
- package/types/frame-kit-ui-ng-ui-user-menu.d.ts +87 -0
- package/types/frame-kit-ui-ng-ui-wizard-dialog.d.ts +116 -0
- package/types/frame-kit-ui-ng.d.ts +53 -0
- package/ui/accordion/README.md +261 -0
- package/ui/alert/README.md +211 -0
- package/ui/avatar/README.md +167 -0
- package/ui/avatar-stack/README.md +164 -0
- package/ui/badge/README.md +162 -0
- package/ui/breadcrumb/README.md +240 -0
- package/ui/button/README.md +184 -0
- package/ui/callout/README.md +159 -0
- package/ui/card/README.md +174 -0
- package/ui/copyable-field/README.md +235 -0
- package/ui/data-table/README.md +408 -0
- package/ui/dialog/README.md +222 -0
- package/ui/drawer/README.md +274 -0
- package/ui/dropdown-menu/README.md +336 -0
- package/ui/editable-field/README.md +171 -0
- package/ui/icon-badge/README.md +131 -0
- package/ui/icon-list/README.md +205 -0
- package/ui/inline-edit/README.md +135 -0
- package/ui/list-editor/README.md +162 -0
- package/ui/loader/README.md +160 -0
- package/ui/menu-item/README.md +204 -0
- package/ui/nav-brand/README.md +111 -0
- package/ui/nav-group/README.md +145 -0
- package/ui/nav-separator/README.md +44 -0
- package/ui/node-tree/README.md +278 -0
- package/ui/node-tree-breadcrumb/README.md +164 -0
- package/ui/note/README.md +146 -0
- package/ui/numbered-list/README.md +187 -0
- package/ui/pagination/README.md +174 -0
- package/ui/progress-bar/README.md +223 -0
- package/ui/sidenav-link/README.md +214 -0
- package/ui/tabs/README.md +204 -0
- package/ui/timeline/README.md +285 -0
- package/ui/toast/README.md +243 -0
- package/ui/user-menu/README.md +260 -0
- package/ui/wizard-dialog/README.md +283 -0
|
@@ -0,0 +1,1674 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, Type, OnInit, ElementRef, TemplateRef } from '@angular/core';
|
|
3
|
+
import { NgControl, AsyncValidatorFn, ValidatorFn, AbstractControl, FormArray, FormGroup, FormControl, ControlValueAccessor } from '@angular/forms';
|
|
4
|
+
import { IconSize, IconColor } from '@frame-kit/ui-ng/core/icon';
|
|
5
|
+
|
|
6
|
+
declare class ErrorComponent {
|
|
7
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
8
|
+
/** Stable element ID wired to the field's aria-describedby. */
|
|
9
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
10
|
+
readonly classes: _angular_core.Signal<string>;
|
|
11
|
+
get hostClass(): string;
|
|
12
|
+
get hostId(): string;
|
|
13
|
+
get hostRole(): string;
|
|
14
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ErrorComponent, never>;
|
|
15
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ErrorComponent, "fk-error", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type FieldGroupLayout = 'stack' | 'inline';
|
|
19
|
+
|
|
20
|
+
declare class FieldGroupComponent {
|
|
21
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
22
|
+
/** Optional group label rendered as a fieldset legend. */
|
|
23
|
+
readonly label: _angular_core.InputSignal<string | null>;
|
|
24
|
+
/** Layout direction for child fields. */
|
|
25
|
+
readonly layout: _angular_core.InputSignal<FieldGroupLayout>;
|
|
26
|
+
readonly classes: _angular_core.Signal<string>;
|
|
27
|
+
get hostClass(): string;
|
|
28
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldGroupComponent, never>;
|
|
29
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldGroupComponent, "fk-field-group", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Submission status for the form lifecycle.
|
|
34
|
+
*/
|
|
35
|
+
type FormStatus = 'idle' | 'submitting' | 'success' | 'error';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Token that child fk-form-field components can inject to read
|
|
39
|
+
* the form's submitted state.
|
|
40
|
+
*/
|
|
41
|
+
declare const FORM: InjectionToken<FormComponent>;
|
|
42
|
+
declare class FormComponent {
|
|
43
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
44
|
+
/** Whether the form has been submitted at least once. */
|
|
45
|
+
readonly submitted: _angular_core.WritableSignal<boolean>;
|
|
46
|
+
/** Current submission status. */
|
|
47
|
+
readonly status: _angular_core.WritableSignal<FormStatus>;
|
|
48
|
+
/** Derived convenience signals. */
|
|
49
|
+
readonly isSubmitting: _angular_core.Signal<boolean>;
|
|
50
|
+
readonly isSuccess: _angular_core.Signal<boolean>;
|
|
51
|
+
readonly isError: _angular_core.Signal<boolean>;
|
|
52
|
+
readonly isIdle: _angular_core.Signal<boolean>;
|
|
53
|
+
readonly classes: _angular_core.Signal<string>;
|
|
54
|
+
get hostClass(): string;
|
|
55
|
+
/** Emits when the form is submitted. */
|
|
56
|
+
readonly formSubmit: _angular_core.OutputEmitterRef<void>;
|
|
57
|
+
onSubmit(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Sets the form status to 'submitting'.
|
|
60
|
+
* Call this before starting an async submission.
|
|
61
|
+
*/
|
|
62
|
+
startSubmitting(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Sets the form status to 'success'.
|
|
65
|
+
* Call this when the submission succeeds.
|
|
66
|
+
*/
|
|
67
|
+
setSuccess(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Sets the form status to 'error'.
|
|
70
|
+
* Call this when the submission fails.
|
|
71
|
+
*/
|
|
72
|
+
setError(): void;
|
|
73
|
+
/** Resets the submitted state and status to idle. */
|
|
74
|
+
reset(): void;
|
|
75
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormComponent, never>;
|
|
76
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormComponent, "fk-form", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; }, { "formSubmit": "formSubmit"; }, never, ["*"], true, never>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
interface FieldControl {
|
|
80
|
+
/** Stable ID for the control element. */
|
|
81
|
+
id: string;
|
|
82
|
+
/** IDs currently set as aria-describedby on the control. */
|
|
83
|
+
describedByIds: string[];
|
|
84
|
+
/** Whether the control is currently focused. */
|
|
85
|
+
focused: boolean;
|
|
86
|
+
/** Whether the control has no value. */
|
|
87
|
+
empty: boolean;
|
|
88
|
+
/** Whether the control is disabled. */
|
|
89
|
+
disabled: boolean;
|
|
90
|
+
/** Whether the control is required. */
|
|
91
|
+
required: boolean;
|
|
92
|
+
/** Whether the control is readonly. */
|
|
93
|
+
readonly?: boolean;
|
|
94
|
+
/** Reference to the NgControl, if bound. */
|
|
95
|
+
ngControl: NgControl | null;
|
|
96
|
+
/** Called by fk-form-field to push composed described-by IDs down to the control. */
|
|
97
|
+
setDescribedByIds(ids: string[]): void;
|
|
98
|
+
/** Called when the wrapper container is clicked (forwards focus to custom controls). */
|
|
99
|
+
onContainerClick?(event: MouseEvent): void;
|
|
100
|
+
}
|
|
101
|
+
declare const FIELD_CONTROL: InjectionToken<FieldControl>;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Configuration for a single validator, used by the schema engine
|
|
105
|
+
* and validation registry.
|
|
106
|
+
*/
|
|
107
|
+
interface ValidatorConfig {
|
|
108
|
+
/** Validator type key (e.g. 'required', 'minLength', 'email'). */
|
|
109
|
+
type: string;
|
|
110
|
+
/** Parameter value for parameterized validators (e.g. 3 for minLength). */
|
|
111
|
+
value?: unknown;
|
|
112
|
+
/** Custom error message override for this validator. */
|
|
113
|
+
message?: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Configuration for an async validator.
|
|
117
|
+
*/
|
|
118
|
+
interface AsyncValidatorConfig {
|
|
119
|
+
/** Async validator type key. */
|
|
120
|
+
type: string;
|
|
121
|
+
/** Parameter value for the async validator. */
|
|
122
|
+
value?: unknown;
|
|
123
|
+
/** Custom error message override. */
|
|
124
|
+
message?: string;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A factory that creates a ValidatorFn, optionally parameterized.
|
|
128
|
+
*/
|
|
129
|
+
type ValidatorFactory = (value?: unknown) => ValidatorFn;
|
|
130
|
+
/**
|
|
131
|
+
* A factory that creates an AsyncValidatorFn, optionally parameterized.
|
|
132
|
+
*/
|
|
133
|
+
type AsyncValidatorFactory = (value?: unknown) => AsyncValidatorFn;
|
|
134
|
+
/**
|
|
135
|
+
* Map of error keys to human-readable message templates.
|
|
136
|
+
* Templates may contain `{key}` placeholders for interpolation.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* const messages: ErrorMessages = {
|
|
141
|
+
* required: 'This field is required',
|
|
142
|
+
* minlength: 'Must be at least {requiredLength} characters',
|
|
143
|
+
* email: 'Please enter a valid email address',
|
|
144
|
+
* };
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
type ErrorMessages = Record<string, string>;
|
|
148
|
+
|
|
149
|
+
declare class HintComponent {
|
|
150
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
151
|
+
/** Stable element ID wired to the field's aria-describedby. */
|
|
152
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
153
|
+
readonly classes: _angular_core.Signal<string>;
|
|
154
|
+
get hostClass(): string;
|
|
155
|
+
get hostId(): string;
|
|
156
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HintComponent, never>;
|
|
157
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HintComponent, "fk-hint", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
declare class LabelComponent {
|
|
161
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
162
|
+
/** Stable element ID used to reference this label from other elements. */
|
|
163
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
164
|
+
/** ID of the form control this label describes; renders as the `for` attribute. */
|
|
165
|
+
readonly for: _angular_core.InputSignal<string | null>;
|
|
166
|
+
readonly classes: _angular_core.Signal<string>;
|
|
167
|
+
get hostClass(): string;
|
|
168
|
+
get hostId(): string;
|
|
169
|
+
get hostFor(): string | null;
|
|
170
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LabelComponent, never>;
|
|
171
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LabelComponent, "fk-label", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
type ShowErrorsOn = 'touched' | 'dirty' | 'submit';
|
|
175
|
+
|
|
176
|
+
declare const FK_PREFIX: InjectionToken<FkPrefixDirective>;
|
|
177
|
+
declare class FkPrefixDirective {
|
|
178
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FkPrefixDirective, never>;
|
|
179
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FkPrefixDirective, "[fkPrefix]", never, {}, {}, never, never, true, never>;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
declare const FK_SUFFIX: InjectionToken<FkSuffixDirective>;
|
|
183
|
+
declare class FkSuffixDirective {
|
|
184
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FkSuffixDirective, never>;
|
|
185
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FkSuffixDirective, "[fkSuffix]", never, {}, {}, never, never, true, never>;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
declare class FormFieldComponent {
|
|
189
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
190
|
+
/** Text label rendered above the field; forwarded to the projected fk-label when present. */
|
|
191
|
+
readonly label: _angular_core.InputSignal<string | null>;
|
|
192
|
+
/** Condition under which validation errors are displayed. */
|
|
193
|
+
readonly showErrorsOn: _angular_core.InputSignal<ShowErrorsOn>;
|
|
194
|
+
/** Whether the parent form has been submitted; used when showErrorsOn is "submit". */
|
|
195
|
+
readonly submitted: _angular_core.InputSignal<boolean>;
|
|
196
|
+
/** Additional aria-describedby ID to append to the field's accessibility wiring. */
|
|
197
|
+
readonly externalDescribedBy: _angular_core.InputSignal<string | null>;
|
|
198
|
+
/**
|
|
199
|
+
* Fallback AbstractControl for dynamically created fields
|
|
200
|
+
* where NgControl is not available.
|
|
201
|
+
*/
|
|
202
|
+
readonly fallbackControl: _angular_core.InputSignal<AbstractControl<any, any, any> | null>;
|
|
203
|
+
/**
|
|
204
|
+
* Per-field error message overrides.
|
|
205
|
+
* Keys are validation error keys (e.g. 'required', 'minlength').
|
|
206
|
+
* Values are message templates supporting `{key}` interpolation.
|
|
207
|
+
*
|
|
208
|
+
* When provided, these take priority over global error messages.
|
|
209
|
+
* When neither field-level nor global messages are provided for
|
|
210
|
+
* an error key, the key itself is used as the message.
|
|
211
|
+
*/
|
|
212
|
+
readonly errorMessages: _angular_core.InputSignal<ErrorMessages | null>;
|
|
213
|
+
readonly control: _angular_core.Signal<FieldControl | undefined>;
|
|
214
|
+
readonly hintRef: _angular_core.Signal<HintComponent | undefined>;
|
|
215
|
+
readonly errorRef: _angular_core.Signal<ErrorComponent | undefined>;
|
|
216
|
+
readonly labelRef: _angular_core.Signal<LabelComponent | undefined>;
|
|
217
|
+
readonly prefixRef: _angular_core.Signal<FkPrefixDirective | undefined>;
|
|
218
|
+
readonly suffixRef: _angular_core.Signal<FkSuffixDirective | undefined>;
|
|
219
|
+
private readonly globalErrorMessages;
|
|
220
|
+
private readonly cdr;
|
|
221
|
+
get hostClass(): string;
|
|
222
|
+
readonly fieldId: string;
|
|
223
|
+
readonly labelId: string;
|
|
224
|
+
readonly autoErrorId: string;
|
|
225
|
+
/**
|
|
226
|
+
* Whether this field uses auto error messages (no projected fk-error).
|
|
227
|
+
*/
|
|
228
|
+
get hasAutoError(): boolean;
|
|
229
|
+
/**
|
|
230
|
+
* Resolves the AbstractControl to use for validation checks.
|
|
231
|
+
* Prefers NgControl from the projected FieldControl, falls back
|
|
232
|
+
* to the explicitly provided AbstractControl (for dynamic fields).
|
|
233
|
+
*/
|
|
234
|
+
private resolveControl;
|
|
235
|
+
/** Returns true when the field's validation error should be displayed. */
|
|
236
|
+
showError(): boolean;
|
|
237
|
+
/**
|
|
238
|
+
* Resolves the auto error message from the control's validation errors.
|
|
239
|
+
* Uses field-level overrides first, then global messages, then the error key.
|
|
240
|
+
*/
|
|
241
|
+
autoErrorMessage(): string | null;
|
|
242
|
+
/** Returns true when the projected field control currently has focus. */
|
|
243
|
+
isFocused(): boolean;
|
|
244
|
+
/** Returns true when the projected field control has no value. */
|
|
245
|
+
isEmpty(): boolean;
|
|
246
|
+
/** Returns true when the projected field control is disabled. */
|
|
247
|
+
isDisabled(): boolean;
|
|
248
|
+
/** Returns true when the field is marked required by the control or validator. */
|
|
249
|
+
isRequired(): boolean;
|
|
250
|
+
/** Returns true when the projected field control is read-only. */
|
|
251
|
+
isReadonly(): boolean;
|
|
252
|
+
/** Returns true when the field is in an invalid state that should be shown. */
|
|
253
|
+
isInvalid(): boolean;
|
|
254
|
+
constructor();
|
|
255
|
+
private syncDescribedByIds;
|
|
256
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldComponent, never>;
|
|
257
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldComponent, "fk-form-field", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showErrorsOn": { "alias": "showErrorsOn"; "required": false; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; "externalDescribedBy": { "alias": "externalDescribedBy"; "required": false; "isSignal": true; }; "fallbackControl": { "alias": "fallbackControl"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; "isSignal": true; }; }, {}, ["control", "hintRef", "errorRef", "labelRef", "prefixRef", "suffixRef"], ["fk-label", "[fkPrefix]", "*", "[fkSuffix]", "fk-error", "fk-hint"], true, never>;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Option for select, radio, and multi-select controls.
|
|
262
|
+
*/
|
|
263
|
+
interface Option {
|
|
264
|
+
label: string;
|
|
265
|
+
value: string | number;
|
|
266
|
+
disabled?: boolean;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* UI configuration for a field rendered via schema.
|
|
270
|
+
*/
|
|
271
|
+
/**
|
|
272
|
+
* Configuration for an inline link rendered at the end of a field's label row.
|
|
273
|
+
*/
|
|
274
|
+
interface LabelEndLink {
|
|
275
|
+
/** Display text for the link. */
|
|
276
|
+
text: string;
|
|
277
|
+
/** Angular router link target. */
|
|
278
|
+
route: string;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* UI configuration for a field rendered via schema.
|
|
282
|
+
*/
|
|
283
|
+
interface FieldUiConfig {
|
|
284
|
+
appearance?: 'default' | 'quiet';
|
|
285
|
+
size?: 'sm' | 'md' | 'lg';
|
|
286
|
+
width?: string;
|
|
287
|
+
hint?: string;
|
|
288
|
+
prefixIcon?: string;
|
|
289
|
+
suffixIcon?: string;
|
|
290
|
+
/** Optional link rendered on the right side of the field's label row. */
|
|
291
|
+
labelEndLink?: LabelEndLink;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Rule for conditional field visibility.
|
|
295
|
+
*
|
|
296
|
+
* @example
|
|
297
|
+
* ```ts
|
|
298
|
+
* visibleWhen: { field: 'country', equals: 'US' }
|
|
299
|
+
* visibleWhen: { field: 'age', notEquals: '' }
|
|
300
|
+
* ```
|
|
301
|
+
*/
|
|
302
|
+
interface VisibilityRule {
|
|
303
|
+
/** Key of the field to observe. */
|
|
304
|
+
field: string;
|
|
305
|
+
/** Show this field when the observed field equals this value. */
|
|
306
|
+
equals?: unknown;
|
|
307
|
+
/** Show this field when the observed field does NOT equal this value. */
|
|
308
|
+
notEquals?: unknown;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Schema definition for a single form field.
|
|
312
|
+
*/
|
|
313
|
+
interface FieldSchema {
|
|
314
|
+
/** Unique key for the form control (maps to FormGroup control name). */
|
|
315
|
+
key: string;
|
|
316
|
+
/** Field type key (must be registered in FieldRegistry). */
|
|
317
|
+
type: string;
|
|
318
|
+
/** Label text displayed above the field. */
|
|
319
|
+
label?: string;
|
|
320
|
+
/** Description text (currently unused, reserved for future layout). */
|
|
321
|
+
description?: string;
|
|
322
|
+
/** Placeholder text for the control. */
|
|
323
|
+
placeholder?: string;
|
|
324
|
+
/**
|
|
325
|
+
* Native `autocomplete` attribute token (e.g. "username", "email",
|
|
326
|
+
* "current-password", "new-password"). Forwarded to controls that
|
|
327
|
+
* accept an `autocomplete` input (fk-input, fk-password-input).
|
|
328
|
+
*/
|
|
329
|
+
autocomplete?: string;
|
|
330
|
+
/** Default value for the control. */
|
|
331
|
+
defaultValue?: unknown;
|
|
332
|
+
/** Whether the control starts disabled. */
|
|
333
|
+
disabled?: boolean;
|
|
334
|
+
/** Whether the control is readonly. */
|
|
335
|
+
readonly?: boolean;
|
|
336
|
+
/** Whether the field is required (adds Validators.required automatically). */
|
|
337
|
+
required?: boolean;
|
|
338
|
+
/** Synchronous validator configurations. */
|
|
339
|
+
validators?: ValidatorConfig[];
|
|
340
|
+
/** Async validator configurations. */
|
|
341
|
+
asyncValidators?: AsyncValidatorConfig[];
|
|
342
|
+
/** Options for select, radio, multi-select controls. */
|
|
343
|
+
options?: Option[];
|
|
344
|
+
/** UI display configuration. */
|
|
345
|
+
ui?: FieldUiConfig;
|
|
346
|
+
/** Conditional visibility rule. */
|
|
347
|
+
visibleWhen?: VisibilityRule;
|
|
348
|
+
/** Per-field error message overrides. */
|
|
349
|
+
errorMessages?: Record<string, string>;
|
|
350
|
+
/**
|
|
351
|
+
* Child fields for nested FormGroups.
|
|
352
|
+
* When set, this field creates a nested FormGroup instead of a FormControl.
|
|
353
|
+
*/
|
|
354
|
+
children?: FieldSchema[];
|
|
355
|
+
/**
|
|
356
|
+
* Field definitions for a FormArray.
|
|
357
|
+
* When set, this field creates a FormArray of FormGroups.
|
|
358
|
+
* Each row is a FormGroup built from these field definitions.
|
|
359
|
+
*/
|
|
360
|
+
arrayFields?: FieldSchema[];
|
|
361
|
+
/** Minimum number of rows for field arrays. */
|
|
362
|
+
minRows?: number;
|
|
363
|
+
/** Maximum number of rows for field arrays. */
|
|
364
|
+
maxRows?: number;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Layout column definition for responsive form layouts.
|
|
368
|
+
*/
|
|
369
|
+
interface LayoutColumn {
|
|
370
|
+
/** Field key to render in this column. */
|
|
371
|
+
fieldKey: string;
|
|
372
|
+
/** Column span (1-12 grid). */
|
|
373
|
+
span?: number;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Layout row definition (one or more columns).
|
|
377
|
+
*/
|
|
378
|
+
interface LayoutRow {
|
|
379
|
+
/** Columns in this row. */
|
|
380
|
+
columns: LayoutColumn[];
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* A section groups related fields with an optional heading.
|
|
384
|
+
*/
|
|
385
|
+
interface FormSchemaSection {
|
|
386
|
+
/** Section heading. */
|
|
387
|
+
title?: string;
|
|
388
|
+
/** Optional description below the heading. */
|
|
389
|
+
description?: string;
|
|
390
|
+
/** Fields in this section. */
|
|
391
|
+
fields: FieldSchema[];
|
|
392
|
+
/** Optional layout rows for this section. */
|
|
393
|
+
layout?: LayoutRow[];
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Schema definition for a complete form.
|
|
397
|
+
*/
|
|
398
|
+
interface FormSchema {
|
|
399
|
+
/** Array of field definitions (flat fields at the top level). */
|
|
400
|
+
fields: FieldSchema[];
|
|
401
|
+
/** Optional sections for organized layout. */
|
|
402
|
+
sections?: FormSchemaSection[];
|
|
403
|
+
/** Optional top-level layout rows (for flat fields). */
|
|
404
|
+
layout?: LayoutRow[];
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Renders a FormArray as repeatable rows of fields.
|
|
409
|
+
*
|
|
410
|
+
* Each row is a FormGroup built from the field's `arrayFields` definition.
|
|
411
|
+
* Provides add/remove row functionality with min/max constraints.
|
|
412
|
+
*
|
|
413
|
+
* @example
|
|
414
|
+
* ```html
|
|
415
|
+
* <fk-field-array-outlet
|
|
416
|
+
* [field]="phoneNumbersField"
|
|
417
|
+
* [formArray]="form.get('phones') as FormArray"
|
|
418
|
+
* [submitted]="submitted()"
|
|
419
|
+
* />
|
|
420
|
+
* ```
|
|
421
|
+
*/
|
|
422
|
+
declare class FieldArrayOutletComponent {
|
|
423
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
424
|
+
/** Schema definition for the repeating field, including arrayFields and row constraints. */
|
|
425
|
+
readonly field: _angular_core.InputSignal<FieldSchema>;
|
|
426
|
+
/** The FormArray backing the repeatable rows. */
|
|
427
|
+
readonly formArray: _angular_core.InputSignal<FormArray<any>>;
|
|
428
|
+
/** Whether the parent form has been submitted; propagated to each fk-field-outlet. */
|
|
429
|
+
readonly submitted: _angular_core.InputSignal<boolean>;
|
|
430
|
+
/** Fires with the index of the newly added row. */
|
|
431
|
+
readonly rowAdded: _angular_core.OutputEmitterRef<number>;
|
|
432
|
+
/** Fires with the index of the removed row. */
|
|
433
|
+
readonly rowRemoved: _angular_core.OutputEmitterRef<number>;
|
|
434
|
+
readonly classes: _angular_core.Signal<string>;
|
|
435
|
+
get hostClass(): string;
|
|
436
|
+
private readonly schemaParser;
|
|
437
|
+
/** Returns the current FormGroups for each rendered row. */
|
|
438
|
+
rows(): FormGroup[];
|
|
439
|
+
/** Returns true when another row can be added without exceeding maxRows. */
|
|
440
|
+
canAdd(): boolean;
|
|
441
|
+
/** Returns true when a row can be removed without going below minRows. */
|
|
442
|
+
canRemove(): boolean;
|
|
443
|
+
/** Appends a new blank row to the FormArray. */
|
|
444
|
+
addRow(): void;
|
|
445
|
+
/** Removes the row at the given index from the FormArray. */
|
|
446
|
+
removeRow(index: number): void;
|
|
447
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldArrayOutletComponent, never>;
|
|
448
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldArrayOutletComponent, "fk-field-array-outlet", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; "formArray": { "alias": "formArray"; "required": true; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; }, { "rowAdded": "rowAdded"; "rowRemoved": "rowRemoved"; }, never, never, true, never>;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Dynamically renders a single field from a schema definition.
|
|
453
|
+
*
|
|
454
|
+
* Wraps the control in a `fk-form-field` for consistent layout,
|
|
455
|
+
* accessibility, and error handling. Uses `ViewContainerRef` to
|
|
456
|
+
* instantiate the appropriate control component from the field registry.
|
|
457
|
+
*
|
|
458
|
+
* @example
|
|
459
|
+
* ```html
|
|
460
|
+
* <fk-field-outlet
|
|
461
|
+
* [field]="fieldSchema"
|
|
462
|
+
* [form]="formGroup"
|
|
463
|
+
* [submitted]="submitted()"
|
|
464
|
+
* />
|
|
465
|
+
* ```
|
|
466
|
+
*/
|
|
467
|
+
declare class FieldOutletComponent {
|
|
468
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
469
|
+
/** Schema definition for the field to render. */
|
|
470
|
+
readonly field: _angular_core.InputSignal<FieldSchema>;
|
|
471
|
+
/** Parent FormGroup used to bind the field's reactive control. */
|
|
472
|
+
readonly form: _angular_core.InputSignal<FormGroup<any>>;
|
|
473
|
+
/** Whether the parent form has been submitted; propagated to fk-form-field. */
|
|
474
|
+
readonly submitted: _angular_core.InputSignal<boolean>;
|
|
475
|
+
/** Whether this field is visible (for conditional visibility). */
|
|
476
|
+
readonly visible: _angular_core.WritableSignal<boolean>;
|
|
477
|
+
readonly classes: _angular_core.Signal<string>;
|
|
478
|
+
get hostClass(): string;
|
|
479
|
+
get hostDisplay(): "" | "none";
|
|
480
|
+
private readonly fieldRegistry;
|
|
481
|
+
private readonly destroyRef;
|
|
482
|
+
private readonly controlHostRef;
|
|
483
|
+
/** Track what was last rendered to avoid unnecessary re-creation. */
|
|
484
|
+
private renderedField;
|
|
485
|
+
private renderedForm;
|
|
486
|
+
private renderedType;
|
|
487
|
+
/** Subscription to statusChanges for disabled sync — cleaned up on re-render. */
|
|
488
|
+
private statusSub;
|
|
489
|
+
/** Resolved component type from the registry. */
|
|
490
|
+
readonly componentType: _angular_core.Signal<Type<any>>;
|
|
491
|
+
constructor();
|
|
492
|
+
private renderControl;
|
|
493
|
+
private setupVisibility;
|
|
494
|
+
private evaluateVisibility;
|
|
495
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldOutletComponent, never>;
|
|
496
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldOutletComponent, "fk-field-outlet", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; "form": { "alias": "form"; "required": true; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Renders a complete form from a schema definition.
|
|
501
|
+
*
|
|
502
|
+
* Generates a FormGroup from the schema, wraps it in a `fk-form`,
|
|
503
|
+
* and renders each field via `fk-field-outlet`. Supports layout
|
|
504
|
+
* sections for organized field grouping.
|
|
505
|
+
*
|
|
506
|
+
* @example
|
|
507
|
+
* ```ts
|
|
508
|
+
* schema: FormSchema = {
|
|
509
|
+
* fields: [
|
|
510
|
+
* { key: 'email', type: 'input', label: 'Email', required: true },
|
|
511
|
+
* { key: 'password', type: 'password', label: 'Password', required: true },
|
|
512
|
+
* ],
|
|
513
|
+
* };
|
|
514
|
+
* ```
|
|
515
|
+
*
|
|
516
|
+
* ```html
|
|
517
|
+
* <fk-form-renderer
|
|
518
|
+
* [schema]="schema"
|
|
519
|
+
* (formSubmit)="onSubmit($event)"
|
|
520
|
+
* />
|
|
521
|
+
* ```
|
|
522
|
+
*/
|
|
523
|
+
declare class FormRendererComponent implements OnInit {
|
|
524
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
525
|
+
/** The form schema to render. */
|
|
526
|
+
readonly schema: _angular_core.InputSignal<FormSchema>;
|
|
527
|
+
/**
|
|
528
|
+
* Optional externally provided FormGroup.
|
|
529
|
+
* If not provided, one is auto-generated from the schema.
|
|
530
|
+
*/
|
|
531
|
+
readonly form: _angular_core.InputSignal<FormGroup<any> | null>;
|
|
532
|
+
/** Emits the FormGroup value when the form is submitted. */
|
|
533
|
+
readonly formSubmit: _angular_core.OutputEmitterRef<Record<string, unknown>>;
|
|
534
|
+
/** The resolved FormGroup (either provided or auto-generated). */
|
|
535
|
+
readonly resolvedForm: _angular_core.WritableSignal<FormGroup<any> | null>;
|
|
536
|
+
/** Reference to the inner fk-form for submission state. */
|
|
537
|
+
readonly formRef: _angular_core.WritableSignal<FormComponent | null>;
|
|
538
|
+
readonly classes: _angular_core.Signal<string>;
|
|
539
|
+
get hostClass(): string;
|
|
540
|
+
private readonly schemaParser;
|
|
541
|
+
private readonly el;
|
|
542
|
+
ngOnInit(): void;
|
|
543
|
+
/** Looks up a schema field definition by its key. */
|
|
544
|
+
getField(key: string): FormSchema['fields'][number] | undefined;
|
|
545
|
+
/** Returns the FormArray for a repeating field at the given key. */
|
|
546
|
+
getFormArray(key: string): FormArray;
|
|
547
|
+
onFormSubmit(): void;
|
|
548
|
+
/**
|
|
549
|
+
* Finds the first invalid field in schema order and focuses its input.
|
|
550
|
+
* Call this after markAllAsTouched() to direct the user to the first error.
|
|
551
|
+
*/
|
|
552
|
+
focusFirstInvalidField(): void;
|
|
553
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormRendererComponent, never>;
|
|
554
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormRendererComponent, "fk-form-renderer", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "schema": { "alias": "schema"; "required": true; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; }, { "formSubmit": "formSubmit"; }, never, ["*"], true, never>;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Public types for `fk-form-renderer`.
|
|
559
|
+
*
|
|
560
|
+
* The renderer is a thin presentation layer over the schema engine —
|
|
561
|
+
* its public type contract is the engine's schema vocabulary
|
|
562
|
+
* (`FormSchema`, `FieldSchema`, `FieldUiConfig`, `Option`, etc.) plus
|
|
563
|
+
* the runtime emit shape. Re-exporting from here gives consumers a
|
|
564
|
+
* single discoverable surface (`@frame-kit/ui-ng`) without forcing them
|
|
565
|
+
* to know which layer the types live in.
|
|
566
|
+
*/
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Shape emitted by `(formSubmit)` — the form's raw value keyed by
|
|
570
|
+
* field key. Cast to a more specific shape at the consumer when the
|
|
571
|
+
* schema is known statically.
|
|
572
|
+
*/
|
|
573
|
+
type FormRendererSubmitValue = Record<string, unknown>;
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* Renders a form section with an optional title, description,
|
|
577
|
+
* and layout-aware field rendering.
|
|
578
|
+
*
|
|
579
|
+
* @example
|
|
580
|
+
* ```html
|
|
581
|
+
* <fk-section-outlet
|
|
582
|
+
* [section]="section"
|
|
583
|
+
* [form]="formGroup"
|
|
584
|
+
* [submitted]="submitted()"
|
|
585
|
+
* />
|
|
586
|
+
* ```
|
|
587
|
+
*/
|
|
588
|
+
declare class SectionOutletComponent {
|
|
589
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
590
|
+
/** Schema section definition including its title, description, and field list. */
|
|
591
|
+
readonly section: _angular_core.InputSignal<FormSchemaSection>;
|
|
592
|
+
/** Parent FormGroup used to bind each field's reactive control. */
|
|
593
|
+
readonly form: _angular_core.InputSignal<FormGroup<any>>;
|
|
594
|
+
/** Whether the parent form has been submitted; propagated to each fk-field-outlet. */
|
|
595
|
+
readonly submitted: _angular_core.InputSignal<boolean>;
|
|
596
|
+
readonly classes: _angular_core.Signal<string>;
|
|
597
|
+
get hostClass(): string;
|
|
598
|
+
/** Looks up a field definition within this section by its key. */
|
|
599
|
+
getField(key: string): FormSchemaSection['fields'][number] | undefined;
|
|
600
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SectionOutletComponent, never>;
|
|
601
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SectionOutletComponent, "fk-section-outlet", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "section": { "alias": "section"; "required": true; "isSignal": true; }; "form": { "alias": "form"; "required": true; "isSignal": true; }; "submitted": { "alias": "submitted"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
declare class FormSectionComponent {
|
|
605
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
606
|
+
/** Section heading. */
|
|
607
|
+
readonly title: _angular_core.InputSignal<string | null>;
|
|
608
|
+
/** Optional description below the heading. */
|
|
609
|
+
readonly description: _angular_core.InputSignal<string | null>;
|
|
610
|
+
readonly classes: _angular_core.Signal<string>;
|
|
611
|
+
get hostClass(): string;
|
|
612
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormSectionComponent, never>;
|
|
613
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormSectionComponent, "fk-form-section", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* Default error messages for common Angular validators.
|
|
618
|
+
*
|
|
619
|
+
* Keys match the error keys emitted by Angular's built-in Validators
|
|
620
|
+
* (lowercase: 'required', 'minlength', 'maxlength', 'email', 'min', 'max', 'pattern').
|
|
621
|
+
*
|
|
622
|
+
* Templates use `{key}` syntax for interpolation with the validation
|
|
623
|
+
* error object properties.
|
|
624
|
+
*/
|
|
625
|
+
declare const DEFAULT_ERROR_MESSAGES: ErrorMessages;
|
|
626
|
+
/**
|
|
627
|
+
* Injection token for providing custom error messages.
|
|
628
|
+
*
|
|
629
|
+
* Provide at the root or module level to override default messages globally,
|
|
630
|
+
* or at a component level for scoped overrides.
|
|
631
|
+
*
|
|
632
|
+
* @example
|
|
633
|
+
* ```ts
|
|
634
|
+
* providers: [
|
|
635
|
+
* {
|
|
636
|
+
* provide: ERROR_MESSAGES,
|
|
637
|
+
* useValue: {
|
|
638
|
+
* required: 'Required',
|
|
639
|
+
* email: 'Invalid email',
|
|
640
|
+
* },
|
|
641
|
+
* },
|
|
642
|
+
* ]
|
|
643
|
+
* ```
|
|
644
|
+
*/
|
|
645
|
+
declare const ERROR_MESSAGES: InjectionToken<ErrorMessages>;
|
|
646
|
+
/**
|
|
647
|
+
* Interpolates a message template with values from a validation error object.
|
|
648
|
+
*
|
|
649
|
+
* Replaces `{key}` placeholders with corresponding values from the error details.
|
|
650
|
+
*
|
|
651
|
+
* @example
|
|
652
|
+
* ```ts
|
|
653
|
+
* interpolateMessage('Must be at least {requiredLength} characters', { requiredLength: 3 });
|
|
654
|
+
* // => 'Must be at least 3 characters'
|
|
655
|
+
* ```
|
|
656
|
+
*/
|
|
657
|
+
declare function interpolateMessage(template: string, errorValue: Record<string, unknown>): string;
|
|
658
|
+
/**
|
|
659
|
+
* Resolves the first error message for a control's current validation errors.
|
|
660
|
+
*
|
|
661
|
+
* Resolution order:
|
|
662
|
+
* 1. Field-level overrides (`fieldMessages`)
|
|
663
|
+
* 2. Global messages (injected via `ERROR_MESSAGES`)
|
|
664
|
+
* 3. Falls back to the error key itself
|
|
665
|
+
*
|
|
666
|
+
* @param errors - The validation errors object from `AbstractControl.errors`
|
|
667
|
+
* @param globalMessages - Global error message map
|
|
668
|
+
* @param fieldMessages - Per-field error message overrides
|
|
669
|
+
* @returns The resolved, interpolated error message, or `null` if no errors
|
|
670
|
+
*/
|
|
671
|
+
declare function resolveErrorMessage(errors: Record<string, unknown> | null, globalMessages: ErrorMessages, fieldMessages?: ErrorMessages): string | null;
|
|
672
|
+
|
|
673
|
+
/**
|
|
674
|
+
* Registry that maps field type strings to Angular component classes.
|
|
675
|
+
*
|
|
676
|
+
* Built-in field types are registered by default. Custom field types
|
|
677
|
+
* can be registered at any time to extend the schema engine.
|
|
678
|
+
*
|
|
679
|
+
* @example
|
|
680
|
+
* ```ts
|
|
681
|
+
* // Register a custom field type
|
|
682
|
+
* registry.register('currency', CurrencyInputComponent);
|
|
683
|
+
*
|
|
684
|
+
* // Use in schema
|
|
685
|
+
* { key: 'price', type: 'currency', label: 'Price' }
|
|
686
|
+
* ```
|
|
687
|
+
*/
|
|
688
|
+
declare class FieldRegistry {
|
|
689
|
+
private readonly components;
|
|
690
|
+
constructor();
|
|
691
|
+
/**
|
|
692
|
+
* Registers a component class for a field type key.
|
|
693
|
+
*/
|
|
694
|
+
register(type: string, component: Type<any>): void;
|
|
695
|
+
/**
|
|
696
|
+
* Returns the component class for a field type key.
|
|
697
|
+
*
|
|
698
|
+
* @throws Error if the type is not registered
|
|
699
|
+
*/
|
|
700
|
+
get(type: string): Type<any>;
|
|
701
|
+
/**
|
|
702
|
+
* Checks if a field type is registered.
|
|
703
|
+
*/
|
|
704
|
+
has(type: string): boolean;
|
|
705
|
+
private registerDefaults;
|
|
706
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldRegistry, never>;
|
|
707
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<FieldRegistry>;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* Snapshot of a single field's state.
|
|
712
|
+
*/
|
|
713
|
+
interface FieldState {
|
|
714
|
+
touched: boolean;
|
|
715
|
+
dirty: boolean;
|
|
716
|
+
invalid: boolean;
|
|
717
|
+
valid: boolean;
|
|
718
|
+
pending: boolean;
|
|
719
|
+
disabled: boolean;
|
|
720
|
+
enabled: boolean;
|
|
721
|
+
pristine: boolean;
|
|
722
|
+
untouched: boolean;
|
|
723
|
+
errors: Record<string, unknown> | null;
|
|
724
|
+
value: unknown;
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* Returns a snapshot of a control's state.
|
|
728
|
+
*
|
|
729
|
+
* @example
|
|
730
|
+
* ```ts
|
|
731
|
+
* const state = getFieldState(form.get('email'));
|
|
732
|
+
* if (state.invalid && state.touched) {
|
|
733
|
+
* // show error
|
|
734
|
+
* }
|
|
735
|
+
* ```
|
|
736
|
+
*/
|
|
737
|
+
declare function getFieldState(control: AbstractControl | null): FieldState | null;
|
|
738
|
+
/**
|
|
739
|
+
* Returns whether a control has a specific validation error.
|
|
740
|
+
*
|
|
741
|
+
* @example
|
|
742
|
+
* ```ts
|
|
743
|
+
* if (hasError(form.get('email'), 'required')) {
|
|
744
|
+
* // ...
|
|
745
|
+
* }
|
|
746
|
+
* ```
|
|
747
|
+
*/
|
|
748
|
+
declare function hasError(control: AbstractControl | null, errorKey: string): boolean;
|
|
749
|
+
/**
|
|
750
|
+
* Returns the error value for a specific validation error key.
|
|
751
|
+
*
|
|
752
|
+
* @example
|
|
753
|
+
* ```ts
|
|
754
|
+
* const minErr = getError(form.get('age'), 'min');
|
|
755
|
+
* // { min: 18, actual: 12 }
|
|
756
|
+
* ```
|
|
757
|
+
*/
|
|
758
|
+
declare function getError(control: AbstractControl | null, errorKey: string): unknown | null;
|
|
759
|
+
/**
|
|
760
|
+
* Marks all controls in a FormGroup as touched.
|
|
761
|
+
* Useful for triggering validation display on form submission.
|
|
762
|
+
*
|
|
763
|
+
* @example
|
|
764
|
+
* ```ts
|
|
765
|
+
* if (form.invalid) {
|
|
766
|
+
* markAllTouched(form);
|
|
767
|
+
* return;
|
|
768
|
+
* }
|
|
769
|
+
* ```
|
|
770
|
+
*/
|
|
771
|
+
declare function markAllTouched(group: FormGroup): void;
|
|
772
|
+
/**
|
|
773
|
+
* Returns whether all controls in a FormGroup are valid.
|
|
774
|
+
*/
|
|
775
|
+
declare function isFormValid(group: FormGroup): boolean;
|
|
776
|
+
/**
|
|
777
|
+
* Returns all invalid control keys in a FormGroup (top-level only).
|
|
778
|
+
*
|
|
779
|
+
* @example
|
|
780
|
+
* ```ts
|
|
781
|
+
* const invalid = getInvalidFields(form);
|
|
782
|
+
* // ['email', 'password']
|
|
783
|
+
* ```
|
|
784
|
+
*/
|
|
785
|
+
declare function getInvalidFields(group: FormGroup): string[];
|
|
786
|
+
|
|
787
|
+
/**
|
|
788
|
+
* Parses a FormSchema into an Angular FormGroup.
|
|
789
|
+
*
|
|
790
|
+
* Resolves validators from the validation registry and applies
|
|
791
|
+
* default values, disabled state, and required constraints.
|
|
792
|
+
*
|
|
793
|
+
* @example
|
|
794
|
+
* ```ts
|
|
795
|
+
* const schema: FormSchema = {
|
|
796
|
+
* fields: [
|
|
797
|
+
* { key: 'email', type: 'input', required: true, validators: [{ type: 'email' }] },
|
|
798
|
+
* { key: 'name', type: 'input', defaultValue: 'John' },
|
|
799
|
+
* ],
|
|
800
|
+
* };
|
|
801
|
+
*
|
|
802
|
+
* const form = parser.buildFormGroup(schema);
|
|
803
|
+
* // form.get('email') => FormControl with required + email validators
|
|
804
|
+
* // form.get('name') => FormControl with value 'John'
|
|
805
|
+
* ```
|
|
806
|
+
*/
|
|
807
|
+
declare class SchemaParser {
|
|
808
|
+
private readonly validationRegistry;
|
|
809
|
+
/**
|
|
810
|
+
* Builds a FormGroup from a form schema.
|
|
811
|
+
*
|
|
812
|
+
* Supports flat fields, nested groups (via `children`),
|
|
813
|
+
* field arrays (via `arrayFields`), and layout sections.
|
|
814
|
+
*/
|
|
815
|
+
buildFormGroup(schema: FormSchema): FormGroup;
|
|
816
|
+
/**
|
|
817
|
+
* Builds a single FormControl from a field schema.
|
|
818
|
+
*/
|
|
819
|
+
buildControl(field: FieldSchema): FormControl;
|
|
820
|
+
/**
|
|
821
|
+
* Builds a nested FormGroup from a field with `children`.
|
|
822
|
+
*/
|
|
823
|
+
buildNestedGroup(field: FieldSchema): FormGroup;
|
|
824
|
+
/**
|
|
825
|
+
* Builds a FormArray from a field with `arrayFields`.
|
|
826
|
+
*
|
|
827
|
+
* Creates one initial row from the array field definitions.
|
|
828
|
+
* Additional rows can be added programmatically.
|
|
829
|
+
*/
|
|
830
|
+
buildFieldArray(field: FieldSchema): FormArray;
|
|
831
|
+
/**
|
|
832
|
+
* Creates a new row FormGroup for a field array.
|
|
833
|
+
*/
|
|
834
|
+
buildArrayRow(field: FieldSchema): FormGroup;
|
|
835
|
+
private buildGroupFromFields;
|
|
836
|
+
/**
|
|
837
|
+
* Collects all fields from a schema, including fields
|
|
838
|
+
* within layout sections.
|
|
839
|
+
*/
|
|
840
|
+
private collectFields;
|
|
841
|
+
private resolveValidators;
|
|
842
|
+
private resolveAsyncValidators;
|
|
843
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SchemaParser, never>;
|
|
844
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SchemaParser>;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Registry that maps validator type names to factory functions.
|
|
849
|
+
*
|
|
850
|
+
* Built-in validators (required, minLength, maxLength, email, min, max, pattern)
|
|
851
|
+
* are registered by default. Custom validators can be registered at any time.
|
|
852
|
+
*
|
|
853
|
+
* Used by the schema engine (Phase 3) to create ValidatorFn arrays from
|
|
854
|
+
* schema configurations, and available for programmatic use.
|
|
855
|
+
*
|
|
856
|
+
* @example
|
|
857
|
+
* ```ts
|
|
858
|
+
* // Register a custom validator
|
|
859
|
+
* registry.register('phone', () =>
|
|
860
|
+
* Validators.pattern(/^\+?[\d\s-]{10,}$/)
|
|
861
|
+
* );
|
|
862
|
+
*
|
|
863
|
+
* // Resolve validators from config
|
|
864
|
+
* const validators = registry.resolve([
|
|
865
|
+
* { type: 'required' },
|
|
866
|
+
* { type: 'minLength', value: 3 },
|
|
867
|
+
* { type: 'phone' },
|
|
868
|
+
* ]);
|
|
869
|
+
* ```
|
|
870
|
+
*/
|
|
871
|
+
declare class ValidationRegistry {
|
|
872
|
+
private readonly validators;
|
|
873
|
+
private readonly asyncValidators;
|
|
874
|
+
constructor();
|
|
875
|
+
/**
|
|
876
|
+
* Registers a synchronous validator factory.
|
|
877
|
+
*
|
|
878
|
+
* @param type - The validator type key
|
|
879
|
+
* @param factory - Factory function that creates a ValidatorFn
|
|
880
|
+
*/
|
|
881
|
+
register(type: string, factory: ValidatorFactory): void;
|
|
882
|
+
/**
|
|
883
|
+
* Registers an asynchronous validator factory.
|
|
884
|
+
*
|
|
885
|
+
* @param type - The async validator type key
|
|
886
|
+
* @param factory - Factory function that creates an AsyncValidatorFn
|
|
887
|
+
*/
|
|
888
|
+
registerAsync(type: string, factory: AsyncValidatorFactory): void;
|
|
889
|
+
/**
|
|
890
|
+
* Checks if a synchronous validator type is registered.
|
|
891
|
+
*/
|
|
892
|
+
has(type: string): boolean;
|
|
893
|
+
/**
|
|
894
|
+
* Checks if an asynchronous validator type is registered.
|
|
895
|
+
*/
|
|
896
|
+
hasAsync(type: string): boolean;
|
|
897
|
+
/**
|
|
898
|
+
* Resolves an array of validator configs into ValidatorFn instances.
|
|
899
|
+
*
|
|
900
|
+
* @throws Error if a validator type is not registered
|
|
901
|
+
*/
|
|
902
|
+
resolve(configs: ValidatorConfig[]): ValidatorFn[];
|
|
903
|
+
/**
|
|
904
|
+
* Resolves an array of async validator configs into AsyncValidatorFn instances.
|
|
905
|
+
*
|
|
906
|
+
* @throws Error if an async validator type is not registered
|
|
907
|
+
*/
|
|
908
|
+
resolveAsync(configs: AsyncValidatorConfig[]): AsyncValidatorFn[];
|
|
909
|
+
private registerDefaults;
|
|
910
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ValidationRegistry, never>;
|
|
911
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ValidationRegistry>;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
interface AutocompleteOption<T = unknown> {
|
|
915
|
+
label: string;
|
|
916
|
+
value: string | number;
|
|
917
|
+
data?: T;
|
|
918
|
+
}
|
|
919
|
+
type AutocompleteFilterMode = 'local' | 'manual';
|
|
920
|
+
|
|
921
|
+
declare const FK_AUTOCOMPLETE_OPTION_TPL: InjectionToken<FkAutocompleteOptionTplDirective>;
|
|
922
|
+
declare class FkAutocompleteOptionTplDirective {
|
|
923
|
+
readonly templateRef: TemplateRef<any>;
|
|
924
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FkAutocompleteOptionTplDirective, never>;
|
|
925
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FkAutocompleteOptionTplDirective, "[fkAutocompleteOption]", never, {}, {}, never, never, true, never>;
|
|
926
|
+
}
|
|
927
|
+
declare class AutocompleteComponent implements ControlValueAccessor, FieldControl {
|
|
928
|
+
private readonly cdr;
|
|
929
|
+
readonly ngControl: NgControl | null;
|
|
930
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
931
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
932
|
+
/** Placeholder text shown in the text input when no value is selected. */
|
|
933
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
934
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
935
|
+
/** List of selectable options rendered in the dropdown. */
|
|
936
|
+
readonly options: _angular_core.InputSignal<AutocompleteOption<unknown>[]>;
|
|
937
|
+
/**
|
|
938
|
+
* 'local' (default): filters options client-side.
|
|
939
|
+
* 'manual': skips internal filtering — renders options as-is.
|
|
940
|
+
* Use with searchChange output for server-side search.
|
|
941
|
+
*/
|
|
942
|
+
readonly filterMode: _angular_core.InputSignal<AutocompleteFilterMode>;
|
|
943
|
+
/** Whether async options are currently loading. */
|
|
944
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
945
|
+
/**
|
|
946
|
+
* Emits the current input value on each keystroke.
|
|
947
|
+
* Use in manual filterMode for server-side search.
|
|
948
|
+
*/
|
|
949
|
+
readonly searchChange: _angular_core.OutputEmitterRef<string>;
|
|
950
|
+
/** Custom template for rendering each option in the dropdown. */
|
|
951
|
+
readonly optionTpl: _angular_core.Signal<FkAutocompleteOptionTplDirective | undefined>;
|
|
952
|
+
readonly id: string;
|
|
953
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
954
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
955
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
956
|
+
readonly showDropdown: _angular_core.WritableSignal<boolean>;
|
|
957
|
+
readonly classes: _angular_core.Signal<string>;
|
|
958
|
+
get hostClass(): string;
|
|
959
|
+
readonly filteredOptions: _angular_core.WritableSignal<AutocompleteOption<unknown>[]>;
|
|
960
|
+
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
961
|
+
/** The options to render in the dropdown — filtered or raw depending on mode. */
|
|
962
|
+
readonly visibleOptions: _angular_core.Signal<AutocompleteOption<unknown>[]>;
|
|
963
|
+
private displayValue;
|
|
964
|
+
get focused(): boolean;
|
|
965
|
+
get empty(): boolean;
|
|
966
|
+
get disabled(): boolean;
|
|
967
|
+
get required(): boolean;
|
|
968
|
+
get describedByIds(): string[];
|
|
969
|
+
constructor();
|
|
970
|
+
setDescribedByIds(ids: string[]): void;
|
|
971
|
+
onContainerClick(_event: MouseEvent): void;
|
|
972
|
+
private selectedValue;
|
|
973
|
+
private onChange;
|
|
974
|
+
private onTouched;
|
|
975
|
+
writeValue(value: string | number | null): void;
|
|
976
|
+
registerOnChange(fn: (value: string | number | null) => void): void;
|
|
977
|
+
registerOnTouched(fn: () => void): void;
|
|
978
|
+
setDisabledState(isDisabled: boolean): void;
|
|
979
|
+
/** Commits the given option as the selected value and closes the dropdown. */
|
|
980
|
+
selectOption(option: AutocompleteOption): void;
|
|
981
|
+
private filterOptions;
|
|
982
|
+
onInput(event: Event): void;
|
|
983
|
+
onKeydown(event: KeyboardEvent): void;
|
|
984
|
+
onFocus(): void;
|
|
985
|
+
onBlur(): void;
|
|
986
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AutocompleteComponent, never>;
|
|
987
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AutocompleteComponent, "fk-autocomplete", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "filterMode": { "alias": "filterMode"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "searchChange": "searchChange"; }, ["optionTpl"], never, true, never>;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
declare class CheckboxComponent implements ControlValueAccessor, FieldControl {
|
|
991
|
+
private readonly cdr;
|
|
992
|
+
readonly ngControl: NgControl | null;
|
|
993
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
994
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
995
|
+
/** Text label rendered alongside the checkbox. */
|
|
996
|
+
readonly label: _angular_core.InputSignal<string | null>;
|
|
997
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
998
|
+
readonly checked: _angular_core.WritableSignal<boolean>;
|
|
999
|
+
readonly id: string;
|
|
1000
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1001
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1002
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1003
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1004
|
+
get hostClass(): string;
|
|
1005
|
+
get focused(): boolean;
|
|
1006
|
+
get empty(): boolean;
|
|
1007
|
+
get disabled(): boolean;
|
|
1008
|
+
get required(): boolean;
|
|
1009
|
+
get describedByIds(): string[];
|
|
1010
|
+
constructor();
|
|
1011
|
+
setDescribedByIds(ids: string[]): void;
|
|
1012
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1013
|
+
private onChange;
|
|
1014
|
+
private onTouched;
|
|
1015
|
+
writeValue(value: boolean): void;
|
|
1016
|
+
registerOnChange(fn: (value: boolean) => void): void;
|
|
1017
|
+
registerOnTouched(fn: () => void): void;
|
|
1018
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1019
|
+
onChanged(event: Event): void;
|
|
1020
|
+
onFocus(): void;
|
|
1021
|
+
onBlur(): void;
|
|
1022
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxComponent, never>;
|
|
1023
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "fk-checkbox", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
declare class DateInputComponent implements ControlValueAccessor, FieldControl {
|
|
1027
|
+
private readonly cdr;
|
|
1028
|
+
readonly ngControl: NgControl | null;
|
|
1029
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1030
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1031
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1032
|
+
readonly isReadonly: _angular_core.InputSignal<boolean>;
|
|
1033
|
+
/** Earliest selectable date as an ISO 8601 date string (YYYY-MM-DD). */
|
|
1034
|
+
readonly min: _angular_core.InputSignal<string | null>;
|
|
1035
|
+
/** Latest selectable date as an ISO 8601 date string (YYYY-MM-DD). */
|
|
1036
|
+
readonly max: _angular_core.InputSignal<string | null>;
|
|
1037
|
+
readonly id: string;
|
|
1038
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1039
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1040
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1041
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1042
|
+
get hostClass(): string;
|
|
1043
|
+
get focused(): boolean;
|
|
1044
|
+
get empty(): boolean;
|
|
1045
|
+
get disabled(): boolean;
|
|
1046
|
+
get required(): boolean;
|
|
1047
|
+
get readonly(): boolean;
|
|
1048
|
+
get describedByIds(): string[];
|
|
1049
|
+
constructor();
|
|
1050
|
+
setDescribedByIds(ids: string[]): void;
|
|
1051
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1052
|
+
private value;
|
|
1053
|
+
private onChange;
|
|
1054
|
+
private onTouched;
|
|
1055
|
+
writeValue(value: string): void;
|
|
1056
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1057
|
+
registerOnTouched(fn: () => void): void;
|
|
1058
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1059
|
+
onInput(event: Event): void;
|
|
1060
|
+
onFocus(): void;
|
|
1061
|
+
onBlur(): void;
|
|
1062
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateInputComponent, never>;
|
|
1063
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateInputComponent, "fk-date-input", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
declare class DatetimeInputComponent implements ControlValueAccessor, FieldControl {
|
|
1067
|
+
private readonly cdr;
|
|
1068
|
+
readonly ngControl: NgControl | null;
|
|
1069
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1070
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1071
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1072
|
+
readonly isReadonly: _angular_core.InputSignal<boolean>;
|
|
1073
|
+
/** Earliest selectable datetime as an ISO 8601 local datetime string. */
|
|
1074
|
+
readonly min: _angular_core.InputSignal<string | null>;
|
|
1075
|
+
/** Latest selectable datetime as an ISO 8601 local datetime string. */
|
|
1076
|
+
readonly max: _angular_core.InputSignal<string | null>;
|
|
1077
|
+
readonly id: string;
|
|
1078
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1079
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1080
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1081
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1082
|
+
get hostClass(): string;
|
|
1083
|
+
get focused(): boolean;
|
|
1084
|
+
get empty(): boolean;
|
|
1085
|
+
get disabled(): boolean;
|
|
1086
|
+
get required(): boolean;
|
|
1087
|
+
get readonly(): boolean;
|
|
1088
|
+
get describedByIds(): string[];
|
|
1089
|
+
constructor();
|
|
1090
|
+
setDescribedByIds(ids: string[]): void;
|
|
1091
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1092
|
+
private value;
|
|
1093
|
+
private onChange;
|
|
1094
|
+
private onTouched;
|
|
1095
|
+
writeValue(value: string): void;
|
|
1096
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1097
|
+
registerOnTouched(fn: () => void): void;
|
|
1098
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1099
|
+
onInput(event: Event): void;
|
|
1100
|
+
onFocus(): void;
|
|
1101
|
+
onBlur(): void;
|
|
1102
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatetimeInputComponent, never>;
|
|
1103
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatetimeInputComponent, "fk-datetime-input", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
/**
|
|
1107
|
+
* Files emitted from `fk-file-dropzone`. Always an array even when
|
|
1108
|
+
* `multiple` is false — consumers in single-file mode just read
|
|
1109
|
+
* `files[0]`. Empty arrays are never emitted (the component swallows
|
|
1110
|
+
* empty drop/change events).
|
|
1111
|
+
*/
|
|
1112
|
+
type FkFileDropzoneSelection = readonly File[];
|
|
1113
|
+
|
|
1114
|
+
/**
|
|
1115
|
+
* A drag-and-drop file input. Pairs a styled, tokenized "drop here or
|
|
1116
|
+
* click to browse" surface with a hidden native file input so the
|
|
1117
|
+
* component remains keyboard-, click-, and drag-accessible without
|
|
1118
|
+
* any consumer wiring.
|
|
1119
|
+
*
|
|
1120
|
+
* Event-out (not CVA-bound) — emits a `File[]` from `(filesSelected)`
|
|
1121
|
+
* for both drop and browse paths. Use `fk-file-upload` instead when
|
|
1122
|
+
* you need a reactive-forms control with `FileList` value semantics.
|
|
1123
|
+
*/
|
|
1124
|
+
declare class FileDropzoneComponent {
|
|
1125
|
+
/** MIME types or file extensions the native file picker should accept (e.g. "image/*,.pdf"). */
|
|
1126
|
+
readonly accept: _angular_core.InputSignal<string | null>;
|
|
1127
|
+
/** Whether the user can select more than one file at a time. */
|
|
1128
|
+
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
1129
|
+
/** When true, prevents drag-and-drop and click-to-browse interaction. */
|
|
1130
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1131
|
+
/** Icon name rendered inside the dropzone surface. */
|
|
1132
|
+
readonly icon: _angular_core.InputSignal<string>;
|
|
1133
|
+
/** Primary prompt text displayed inside the dropzone. */
|
|
1134
|
+
readonly prompt: _angular_core.InputSignal<string>;
|
|
1135
|
+
/** Secondary hint text shown below the prompt. */
|
|
1136
|
+
readonly hint: _angular_core.InputSignal<string | null>;
|
|
1137
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1138
|
+
readonly id: _angular_core.InputSignal<string | null>;
|
|
1139
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
1140
|
+
/** Fires with the selected File array whenever the user drops or browses files. */
|
|
1141
|
+
readonly filesSelected: _angular_core.OutputEmitterRef<FkFileDropzoneSelection>;
|
|
1142
|
+
protected readonly isDragging: _angular_core.WritableSignal<boolean>;
|
|
1143
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1144
|
+
get hostClass(): string;
|
|
1145
|
+
onDragOver(event: DragEvent): void;
|
|
1146
|
+
onDragLeave(event: DragEvent): void;
|
|
1147
|
+
onDrop(event: DragEvent): void;
|
|
1148
|
+
onChange(event: Event): void;
|
|
1149
|
+
private emit;
|
|
1150
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileDropzoneComponent, never>;
|
|
1151
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileDropzoneComponent, "fk-file-dropzone", never, { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "prompt": { "alias": "prompt"; "required": true; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; }, never, never, true, never>;
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
declare class FileUploadComponent implements ControlValueAccessor, FieldControl {
|
|
1155
|
+
private readonly cdr;
|
|
1156
|
+
readonly ngControl: NgControl | null;
|
|
1157
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1158
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1159
|
+
/** Placeholder text shown when no file has been selected. */
|
|
1160
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1161
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1162
|
+
/** MIME types or file extensions the native file picker should accept. */
|
|
1163
|
+
readonly accept: _angular_core.InputSignal<string | null>;
|
|
1164
|
+
/** Whether the user can select more than one file at a time. */
|
|
1165
|
+
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
1166
|
+
readonly id: string;
|
|
1167
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1168
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1169
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1170
|
+
readonly fileNames: _angular_core.WritableSignal<string[]>;
|
|
1171
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1172
|
+
get hostClass(): string;
|
|
1173
|
+
private files;
|
|
1174
|
+
get focused(): boolean;
|
|
1175
|
+
get empty(): boolean;
|
|
1176
|
+
get disabled(): boolean;
|
|
1177
|
+
get required(): boolean;
|
|
1178
|
+
get describedByIds(): string[];
|
|
1179
|
+
constructor();
|
|
1180
|
+
setDescribedByIds(ids: string[]): void;
|
|
1181
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1182
|
+
private onChange;
|
|
1183
|
+
private onTouched;
|
|
1184
|
+
writeValue(value: FileList | null): void;
|
|
1185
|
+
registerOnChange(fn: (value: FileList | null) => void): void;
|
|
1186
|
+
registerOnTouched(fn: () => void): void;
|
|
1187
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1188
|
+
onFileChange(event: Event): void;
|
|
1189
|
+
onFocus(): void;
|
|
1190
|
+
onBlur(): void;
|
|
1191
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploadComponent, never>;
|
|
1192
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUploadComponent, "fk-file-upload", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
type InputType = 'text' | 'email' | 'tel' | 'url' | 'search';
|
|
1196
|
+
|
|
1197
|
+
declare class InputComponent implements ControlValueAccessor, FieldControl {
|
|
1198
|
+
private readonly cdr;
|
|
1199
|
+
readonly ngControl: NgControl | null;
|
|
1200
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1201
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1202
|
+
/** HTML input type attribute (e.g. "text", "email", "search"). */
|
|
1203
|
+
readonly type: _angular_core.InputSignal<InputType>;
|
|
1204
|
+
/** Placeholder text shown when the input has no value. */
|
|
1205
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1206
|
+
/**
|
|
1207
|
+
* Native `autocomplete` attribute token (e.g. "username", "email",
|
|
1208
|
+
* "name", "off"). Null omits the attribute entirely. Set this on
|
|
1209
|
+
* identifying fields (login email, name) so browsers and password
|
|
1210
|
+
* managers behave correctly — see fk-password-input for the password
|
|
1211
|
+
* counterpart.
|
|
1212
|
+
*/
|
|
1213
|
+
readonly autocomplete: _angular_core.InputSignal<string | null>;
|
|
1214
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1215
|
+
readonly isReadonly: _angular_core.InputSignal<boolean>;
|
|
1216
|
+
readonly id: string;
|
|
1217
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1218
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1219
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1220
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1221
|
+
get hostClass(): string;
|
|
1222
|
+
get focused(): boolean;
|
|
1223
|
+
get empty(): boolean;
|
|
1224
|
+
get disabled(): boolean;
|
|
1225
|
+
get required(): boolean;
|
|
1226
|
+
get readonly(): boolean;
|
|
1227
|
+
constructor();
|
|
1228
|
+
get describedByIds(): string[];
|
|
1229
|
+
setDescribedByIds(ids: string[]): void;
|
|
1230
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1231
|
+
private value;
|
|
1232
|
+
private onChange;
|
|
1233
|
+
private onTouched;
|
|
1234
|
+
writeValue(value: string): void;
|
|
1235
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1236
|
+
registerOnTouched(fn: () => void): void;
|
|
1237
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1238
|
+
onInput(event: Event): void;
|
|
1239
|
+
onFocus(): void;
|
|
1240
|
+
onBlur(): void;
|
|
1241
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
|
|
1242
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "fk-input", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
declare class NumberInputComponent implements ControlValueAccessor, FieldControl {
|
|
1246
|
+
private readonly cdr;
|
|
1247
|
+
readonly ngControl: NgControl | null;
|
|
1248
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1249
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1250
|
+
/** Placeholder text shown when the input has no value. */
|
|
1251
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1252
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1253
|
+
readonly isReadonly: _angular_core.InputSignal<boolean>;
|
|
1254
|
+
/** Minimum allowed numeric value. */
|
|
1255
|
+
readonly min: _angular_core.InputSignal<number | null>;
|
|
1256
|
+
/** Maximum allowed numeric value. */
|
|
1257
|
+
readonly max: _angular_core.InputSignal<number | null>;
|
|
1258
|
+
/** Increment step for the native number input spinner. */
|
|
1259
|
+
readonly step: _angular_core.InputSignal<number | null>;
|
|
1260
|
+
readonly id: string;
|
|
1261
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1262
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1263
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1264
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1265
|
+
get hostClass(): string;
|
|
1266
|
+
get focused(): boolean;
|
|
1267
|
+
get empty(): boolean;
|
|
1268
|
+
get disabled(): boolean;
|
|
1269
|
+
get required(): boolean;
|
|
1270
|
+
get readonly(): boolean;
|
|
1271
|
+
get describedByIds(): string[];
|
|
1272
|
+
constructor();
|
|
1273
|
+
setDescribedByIds(ids: string[]): void;
|
|
1274
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1275
|
+
private value;
|
|
1276
|
+
private onChange;
|
|
1277
|
+
private onTouched;
|
|
1278
|
+
writeValue(value: number | null): void;
|
|
1279
|
+
registerOnChange(fn: (value: number | null) => void): void;
|
|
1280
|
+
registerOnTouched(fn: () => void): void;
|
|
1281
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1282
|
+
onInput(event: Event): void;
|
|
1283
|
+
onFocus(): void;
|
|
1284
|
+
onBlur(): void;
|
|
1285
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NumberInputComponent, never>;
|
|
1286
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NumberInputComponent, "fk-number-input", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
type PasswordAutoComplete = 'current-password' | 'new-password';
|
|
1290
|
+
|
|
1291
|
+
declare class PasswordInputComponent implements ControlValueAccessor, FieldControl {
|
|
1292
|
+
private readonly cdr;
|
|
1293
|
+
readonly ngControl: NgControl | null;
|
|
1294
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1295
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1296
|
+
/** Placeholder text shown when the input has no value. */
|
|
1297
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1298
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1299
|
+
/** Autocomplete hint passed to the native input — use "current-password" or "new-password". */
|
|
1300
|
+
readonly autocomplete: _angular_core.InputSignal<PasswordAutoComplete>;
|
|
1301
|
+
/** Whether the show/hide password toggle button is rendered. */
|
|
1302
|
+
readonly showToggle: _angular_core.InputSignal<boolean>;
|
|
1303
|
+
/** Icon size for the visibility toggle button. */
|
|
1304
|
+
readonly toggleIconSize: _angular_core.InputSignal<IconSize>;
|
|
1305
|
+
/** Icon color for the visibility toggle button. */
|
|
1306
|
+
readonly toggleIconColor: _angular_core.InputSignal<IconColor>;
|
|
1307
|
+
readonly visible: _angular_core.WritableSignal<boolean>;
|
|
1308
|
+
readonly id: string;
|
|
1309
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1310
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1311
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1312
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1313
|
+
readonly toggleSizeStyle: _angular_core.Signal<string>;
|
|
1314
|
+
readonly toggleColorStyle: _angular_core.Signal<string | null>;
|
|
1315
|
+
get hostClass(): string;
|
|
1316
|
+
get focused(): boolean;
|
|
1317
|
+
get empty(): boolean;
|
|
1318
|
+
get disabled(): boolean;
|
|
1319
|
+
get required(): boolean;
|
|
1320
|
+
get describedByIds(): string[];
|
|
1321
|
+
constructor();
|
|
1322
|
+
setDescribedByIds(ids: string[]): void;
|
|
1323
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1324
|
+
/** Toggles the password field between visible plain text and masked mode. */
|
|
1325
|
+
toggleVisibility(): void;
|
|
1326
|
+
private value;
|
|
1327
|
+
private onChange;
|
|
1328
|
+
private onTouched;
|
|
1329
|
+
writeValue(value: string): void;
|
|
1330
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1331
|
+
registerOnTouched(fn: () => void): void;
|
|
1332
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1333
|
+
onInput(event: Event): void;
|
|
1334
|
+
onFocus(): void;
|
|
1335
|
+
onBlur(): void;
|
|
1336
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordInputComponent, never>;
|
|
1337
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordInputComponent, "fk-password-input", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "showToggle": { "alias": "showToggle"; "required": false; "isSignal": true; }; "toggleIconSize": { "alias": "toggleIconSize"; "required": false; "isSignal": true; }; "toggleIconColor": { "alias": "toggleIconColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
interface RadioOption {
|
|
1341
|
+
label: string;
|
|
1342
|
+
value: string | number;
|
|
1343
|
+
disabled?: boolean;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
declare class RadioComponent implements ControlValueAccessor, FieldControl {
|
|
1347
|
+
private readonly cdr;
|
|
1348
|
+
readonly ngControl: NgControl | null;
|
|
1349
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1350
|
+
/** List of radio options to render. */
|
|
1351
|
+
readonly options: _angular_core.InputSignal<RadioOption[]>;
|
|
1352
|
+
/** HTML name attribute shared across all radio buttons in the group. */
|
|
1353
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
1354
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1355
|
+
readonly id: string;
|
|
1356
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1357
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1358
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1359
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1360
|
+
get hostClass(): string;
|
|
1361
|
+
value: string | number;
|
|
1362
|
+
get focused(): boolean;
|
|
1363
|
+
get empty(): boolean;
|
|
1364
|
+
get disabled(): boolean;
|
|
1365
|
+
get required(): boolean;
|
|
1366
|
+
get describedByIds(): string[];
|
|
1367
|
+
constructor();
|
|
1368
|
+
setDescribedByIds(ids: string[]): void;
|
|
1369
|
+
private onChange;
|
|
1370
|
+
private onTouched;
|
|
1371
|
+
writeValue(value: string | number): void;
|
|
1372
|
+
registerOnChange(fn: (value: string | number) => void): void;
|
|
1373
|
+
registerOnTouched(fn: () => void): void;
|
|
1374
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1375
|
+
onSelectionChange(value: string | number): void;
|
|
1376
|
+
onFocus(): void;
|
|
1377
|
+
onBlur(): void;
|
|
1378
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioComponent, never>;
|
|
1379
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioComponent, "fk-radio", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
interface ProgressSegment {
|
|
1383
|
+
value: number;
|
|
1384
|
+
color?: string;
|
|
1385
|
+
label?: string;
|
|
1386
|
+
}
|
|
1387
|
+
type SegmentedBarSize = 'sm' | 'md' | 'lg';
|
|
1388
|
+
|
|
1389
|
+
declare class SegmentedBarComponent {
|
|
1390
|
+
/** Segments to render, each with a value, optional label, and color. */
|
|
1391
|
+
readonly segments: _angular_core.InputSignal<ProgressSegment[]>;
|
|
1392
|
+
/** Total maximum value; defaults to the sum of all segment values when null. */
|
|
1393
|
+
readonly max: _angular_core.InputSignal<number | null>;
|
|
1394
|
+
/** Size variant controlling bar height via design tokens. */
|
|
1395
|
+
readonly size: _angular_core.InputSignal<SegmentedBarSize>;
|
|
1396
|
+
/** CSS color for the unfilled track; defaults to the theme token when null. */
|
|
1397
|
+
readonly trackColor: _angular_core.InputSignal<string | null>;
|
|
1398
|
+
/** Explicit bar height that overrides the size-token value. */
|
|
1399
|
+
readonly height: _angular_core.InputSignal<string | null>;
|
|
1400
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
1401
|
+
readonly ariaDescribedBy: _angular_core.InputSignal<string | null>;
|
|
1402
|
+
readonly id: _angular_core.InputSignal<string | null>;
|
|
1403
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1404
|
+
readonly segmentTotal: _angular_core.Signal<number>;
|
|
1405
|
+
readonly effectiveMax: _angular_core.Signal<number>;
|
|
1406
|
+
readonly normalizedSegments: _angular_core.Signal<{
|
|
1407
|
+
percentage: number;
|
|
1408
|
+
value: number;
|
|
1409
|
+
color?: string;
|
|
1410
|
+
label?: string;
|
|
1411
|
+
}[]>;
|
|
1412
|
+
readonly valueText: _angular_core.Signal<string>;
|
|
1413
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1414
|
+
get hostClass(): string;
|
|
1415
|
+
get hostRole(): string;
|
|
1416
|
+
get hostAriaValueMin(): number;
|
|
1417
|
+
get hostAriaValueMax(): number;
|
|
1418
|
+
get hostAriaValueNow(): number;
|
|
1419
|
+
get hostAriaValueText(): string;
|
|
1420
|
+
get hostAriaLabel(): string | null;
|
|
1421
|
+
get hostAriaDescribedBy(): string | null;
|
|
1422
|
+
get hostId(): string | null;
|
|
1423
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedBarComponent, never>;
|
|
1424
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedBarComponent, "fk-segmented-bar", never, { "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "trackColor": { "alias": "trackColor"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
interface SelectOption {
|
|
1428
|
+
label: string;
|
|
1429
|
+
value: string | number;
|
|
1430
|
+
disabled?: boolean;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
declare class SelectComponent implements ControlValueAccessor, FieldControl {
|
|
1434
|
+
private readonly cdr;
|
|
1435
|
+
readonly ngControl: NgControl | null;
|
|
1436
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLSelectElement> | undefined>;
|
|
1437
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1438
|
+
/** List of options to render inside the native select element. */
|
|
1439
|
+
readonly options: _angular_core.InputSignal<SelectOption[]>;
|
|
1440
|
+
/** Placeholder option displayed when no value is selected. */
|
|
1441
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1442
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1443
|
+
readonly id: string;
|
|
1444
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1445
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1446
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1447
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1448
|
+
get hostClass(): string;
|
|
1449
|
+
value: string | number;
|
|
1450
|
+
get focused(): boolean;
|
|
1451
|
+
get empty(): boolean;
|
|
1452
|
+
get disabled(): boolean;
|
|
1453
|
+
get required(): boolean;
|
|
1454
|
+
get describedByIds(): string[];
|
|
1455
|
+
constructor();
|
|
1456
|
+
setDescribedByIds(ids: string[]): void;
|
|
1457
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1458
|
+
private onChange;
|
|
1459
|
+
private onTouched;
|
|
1460
|
+
writeValue(value: string | number): void;
|
|
1461
|
+
registerOnChange(fn: (value: string | number) => void): void;
|
|
1462
|
+
registerOnTouched(fn: () => void): void;
|
|
1463
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1464
|
+
onSelectionChange(event: Event): void;
|
|
1465
|
+
onFocus(): void;
|
|
1466
|
+
onBlur(): void;
|
|
1467
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
|
|
1468
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "fk-select", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
declare class SliderComponent implements ControlValueAccessor, FieldControl {
|
|
1472
|
+
private readonly cdr;
|
|
1473
|
+
readonly ngControl: NgControl | null;
|
|
1474
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1475
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1476
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1477
|
+
/** Minimum value of the slider range. */
|
|
1478
|
+
readonly min: _angular_core.InputSignal<number>;
|
|
1479
|
+
/** Maximum value of the slider range. */
|
|
1480
|
+
readonly max: _angular_core.InputSignal<number>;
|
|
1481
|
+
/** Increment step between slider positions. */
|
|
1482
|
+
readonly step: _angular_core.InputSignal<number>;
|
|
1483
|
+
/** Whether the current numeric value is displayed alongside the thumb. */
|
|
1484
|
+
readonly showValue: _angular_core.InputSignal<boolean>;
|
|
1485
|
+
readonly id: string;
|
|
1486
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1487
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1488
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1489
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1490
|
+
get hostClass(): string;
|
|
1491
|
+
currentValue: number;
|
|
1492
|
+
get focused(): boolean;
|
|
1493
|
+
get empty(): boolean;
|
|
1494
|
+
get disabled(): boolean;
|
|
1495
|
+
get required(): boolean;
|
|
1496
|
+
get describedByIds(): string[];
|
|
1497
|
+
constructor();
|
|
1498
|
+
setDescribedByIds(ids: string[]): void;
|
|
1499
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1500
|
+
private onChange;
|
|
1501
|
+
private onTouched;
|
|
1502
|
+
writeValue(value: number): void;
|
|
1503
|
+
registerOnChange(fn: (value: number) => void): void;
|
|
1504
|
+
registerOnTouched(fn: () => void): void;
|
|
1505
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1506
|
+
onInput(event: Event): void;
|
|
1507
|
+
onFocus(): void;
|
|
1508
|
+
onBlur(): void;
|
|
1509
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SliderComponent, never>;
|
|
1510
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SliderComponent, "fk-slider", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
declare class SwitchComponent implements ControlValueAccessor, FieldControl {
|
|
1514
|
+
private readonly cdr;
|
|
1515
|
+
readonly ngControl: NgControl | null;
|
|
1516
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1517
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1518
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1519
|
+
readonly checked: _angular_core.WritableSignal<boolean>;
|
|
1520
|
+
readonly id: string;
|
|
1521
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1522
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1523
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1524
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1525
|
+
get hostClass(): string;
|
|
1526
|
+
get focused(): boolean;
|
|
1527
|
+
get empty(): boolean;
|
|
1528
|
+
get disabled(): boolean;
|
|
1529
|
+
get required(): boolean;
|
|
1530
|
+
get describedByIds(): string[];
|
|
1531
|
+
constructor();
|
|
1532
|
+
setDescribedByIds(ids: string[]): void;
|
|
1533
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1534
|
+
private onChange;
|
|
1535
|
+
private onTouched;
|
|
1536
|
+
writeValue(value: boolean): void;
|
|
1537
|
+
registerOnChange(fn: (value: boolean) => void): void;
|
|
1538
|
+
registerOnTouched(fn: () => void): void;
|
|
1539
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1540
|
+
onChanged(event: Event): void;
|
|
1541
|
+
onFocus(): void;
|
|
1542
|
+
onBlur(): void;
|
|
1543
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SwitchComponent, never>;
|
|
1544
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SwitchComponent, "fk-switch", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
declare class TagInputComponent implements ControlValueAccessor, FieldControl {
|
|
1548
|
+
private readonly cdr;
|
|
1549
|
+
readonly ngControl: NgControl | null;
|
|
1550
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1551
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1552
|
+
/** Placeholder text shown in the text input when there are no tags. */
|
|
1553
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1554
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1555
|
+
/** Character(s) that commit the current input as a new tag (default: comma). */
|
|
1556
|
+
readonly separator: _angular_core.InputSignal<string>;
|
|
1557
|
+
readonly id: string;
|
|
1558
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1559
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1560
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1561
|
+
readonly tags: _angular_core.WritableSignal<string[]>;
|
|
1562
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1563
|
+
get hostClass(): string;
|
|
1564
|
+
get focused(): boolean;
|
|
1565
|
+
get empty(): boolean;
|
|
1566
|
+
get disabled(): boolean;
|
|
1567
|
+
get required(): boolean;
|
|
1568
|
+
get describedByIds(): string[];
|
|
1569
|
+
constructor();
|
|
1570
|
+
setDescribedByIds(ids: string[]): void;
|
|
1571
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1572
|
+
/** Focuses the inner text input element. */
|
|
1573
|
+
focusInput(): void;
|
|
1574
|
+
private onChange;
|
|
1575
|
+
private onTouched;
|
|
1576
|
+
writeValue(value: string[]): void;
|
|
1577
|
+
registerOnChange(fn: (value: string[]) => void): void;
|
|
1578
|
+
registerOnTouched(fn: () => void): void;
|
|
1579
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1580
|
+
/** Adds a tag to the list if it is non-empty and not already present. */
|
|
1581
|
+
addTag(tag: string): void;
|
|
1582
|
+
/** Removes the given tag from the list. */
|
|
1583
|
+
removeTag(tag: string, event?: Event): void;
|
|
1584
|
+
onKeydown(event: KeyboardEvent): void;
|
|
1585
|
+
onFocus(): void;
|
|
1586
|
+
onBlur(): void;
|
|
1587
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagInputComponent, never>;
|
|
1588
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagInputComponent, "fk-tag-input", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1591
|
+
declare class TextareaComponent implements ControlValueAccessor, FieldControl {
|
|
1592
|
+
private readonly cdr;
|
|
1593
|
+
readonly ngControl: NgControl | null;
|
|
1594
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLTextAreaElement> | undefined>;
|
|
1595
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1596
|
+
/** Placeholder text shown when the textarea has no value. */
|
|
1597
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1598
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1599
|
+
readonly isReadonly: _angular_core.InputSignal<boolean>;
|
|
1600
|
+
/** Number of visible text rows for the initial textarea height. */
|
|
1601
|
+
readonly rows: _angular_core.InputSignal<number>;
|
|
1602
|
+
readonly id: string;
|
|
1603
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1604
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1605
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1606
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1607
|
+
get hostClass(): string;
|
|
1608
|
+
get focused(): boolean;
|
|
1609
|
+
get empty(): boolean;
|
|
1610
|
+
get disabled(): boolean;
|
|
1611
|
+
get required(): boolean;
|
|
1612
|
+
get readonly(): boolean;
|
|
1613
|
+
get describedByIds(): string[];
|
|
1614
|
+
constructor();
|
|
1615
|
+
setDescribedByIds(ids: string[]): void;
|
|
1616
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1617
|
+
private value;
|
|
1618
|
+
private onChange;
|
|
1619
|
+
private onTouched;
|
|
1620
|
+
writeValue(value: string): void;
|
|
1621
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1622
|
+
registerOnTouched(fn: () => void): void;
|
|
1623
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1624
|
+
onInput(event: Event): void;
|
|
1625
|
+
onFocus(): void;
|
|
1626
|
+
onBlur(): void;
|
|
1627
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
|
|
1628
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "fk-textarea", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
declare class TimeInputComponent implements ControlValueAccessor, FieldControl {
|
|
1632
|
+
private readonly cdr;
|
|
1633
|
+
readonly ngControl: NgControl | null;
|
|
1634
|
+
readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
1635
|
+
readonly className: _angular_core.InputSignal<string>;
|
|
1636
|
+
readonly isRequired: _angular_core.InputSignal<boolean>;
|
|
1637
|
+
readonly isReadonly: _angular_core.InputSignal<boolean>;
|
|
1638
|
+
/** Earliest selectable time as an HH:MM string. */
|
|
1639
|
+
readonly min: _angular_core.InputSignal<string | null>;
|
|
1640
|
+
/** Latest selectable time as an HH:MM string. */
|
|
1641
|
+
readonly max: _angular_core.InputSignal<string | null>;
|
|
1642
|
+
/** Step in seconds between selectable time values. */
|
|
1643
|
+
readonly step: _angular_core.InputSignal<number | null>;
|
|
1644
|
+
readonly id: string;
|
|
1645
|
+
readonly describedByIdsSignal: _angular_core.WritableSignal<string[]>;
|
|
1646
|
+
readonly isFocused: _angular_core.WritableSignal<boolean>;
|
|
1647
|
+
readonly isDisabledSignal: _angular_core.WritableSignal<boolean>;
|
|
1648
|
+
readonly classes: _angular_core.Signal<string>;
|
|
1649
|
+
get hostClass(): string;
|
|
1650
|
+
get focused(): boolean;
|
|
1651
|
+
get empty(): boolean;
|
|
1652
|
+
get disabled(): boolean;
|
|
1653
|
+
get required(): boolean;
|
|
1654
|
+
get readonly(): boolean;
|
|
1655
|
+
get describedByIds(): string[];
|
|
1656
|
+
constructor();
|
|
1657
|
+
setDescribedByIds(ids: string[]): void;
|
|
1658
|
+
onContainerClick(_event: MouseEvent): void;
|
|
1659
|
+
private value;
|
|
1660
|
+
private onChange;
|
|
1661
|
+
private onTouched;
|
|
1662
|
+
writeValue(value: string): void;
|
|
1663
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1664
|
+
registerOnTouched(fn: () => void): void;
|
|
1665
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1666
|
+
onInput(event: Event): void;
|
|
1667
|
+
onFocus(): void;
|
|
1668
|
+
onBlur(): void;
|
|
1669
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimeInputComponent, never>;
|
|
1670
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimeInputComponent, "fk-time-input", never, { "className": { "alias": "className"; "required": false; "isSignal": true; }; "isRequired": { "alias": "required"; "required": false; "isSignal": true; }; "isReadonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
export { AutocompleteComponent, CheckboxComponent, DEFAULT_ERROR_MESSAGES, DateInputComponent, DatetimeInputComponent, ERROR_MESSAGES, ErrorComponent, FIELD_CONTROL, FK_AUTOCOMPLETE_OPTION_TPL, FK_PREFIX, FK_SUFFIX, FORM, FieldArrayOutletComponent, FieldGroupComponent, FieldOutletComponent, FieldRegistry, FileDropzoneComponent, FileUploadComponent, FkAutocompleteOptionTplDirective, FkPrefixDirective, FkSuffixDirective, FormComponent, FormFieldComponent, FormRendererComponent, FormSectionComponent, HintComponent, InputComponent, LabelComponent, NumberInputComponent, PasswordInputComponent, RadioComponent, SchemaParser, SectionOutletComponent, SegmentedBarComponent, SelectComponent, SliderComponent, SwitchComponent, TagInputComponent, TextareaComponent, TimeInputComponent, ValidationRegistry, getError, getFieldState, getInvalidFields, hasError, interpolateMessage, isFormValid, markAllTouched, resolveErrorMessage };
|
|
1674
|
+
export type { AsyncValidatorConfig, AsyncValidatorFactory, AutocompleteFilterMode, AutocompleteOption, ErrorMessages, FieldControl, FieldGroupLayout, FieldSchema, FieldState, FieldUiConfig, FkFileDropzoneSelection, FormRendererSubmitValue, FormSchema, FormSchemaSection, FormStatus, InputType, LabelEndLink, LayoutColumn, LayoutRow, Option, PasswordAutoComplete, ProgressSegment, RadioOption, SegmentedBarSize, SelectOption, ShowErrorsOn, ValidatorConfig, ValidatorFactory, VisibilityRule };
|