ng-primitives 0.34.0 → 0.36.0
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/a11y/index.d.ts +1 -1
- package/a11y/visually-hidden/visually-hidden-state.d.ts +52 -0
- package/a11y/visually-hidden/visually-hidden.d.ts +1 -0
- package/accordion/accordion/accordion-state.d.ts +1 -1
- package/accordion/accordion-item/accordion-item-state.d.ts +1 -1
- package/avatar/avatar/avatar-state.d.ts +1 -1
- package/avatar/avatar-image/avatar-image.d.ts +36 -1
- package/button/button/button-state.d.ts +12 -2
- package/button/button/button.d.ts +1 -2
- package/button/index.d.ts +1 -1
- package/checkbox/checkbox/checkbox-state.d.ts +1 -1
- package/checkbox/checkbox/checkbox.d.ts +3 -4
- package/date-picker/date-picker/date-picker-state.d.ts +1 -1
- package/date-picker/date-picker-date-button/date-picker-date-button.d.ts +1 -2
- package/date-picker/date-picker-next-month/date-picker-next-month.d.ts +2 -2
- package/date-picker/date-picker-previous-month/date-picker-previous-month.d.ts +2 -2
- package/date-picker/index.d.ts +5 -9
- package/dialog/dialog/dialog-state.d.ts +1 -1
- package/dialog/index.d.ts +0 -4
- package/fesm2022/ng-primitives-a11y.mjs +20 -9
- package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
- package/fesm2022/ng-primitives-avatar.mjs +3 -3
- package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/ng-primitives-button.mjs +18 -5
- package/fesm2022/ng-primitives-button.mjs.map +1 -1
- package/fesm2022/ng-primitives-checkbox.mjs +13 -8
- package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-date-picker.mjs +13 -65
- package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
- package/fesm2022/ng-primitives-dialog.mjs +5 -41
- package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/ng-primitives-file-upload.mjs +12 -5
- package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
- package/fesm2022/ng-primitives-focus-trap.mjs +3 -12
- package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
- package/fesm2022/ng-primitives-form-field.mjs +103 -93
- package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
- package/fesm2022/ng-primitives-input.mjs +34 -21
- package/fesm2022/ng-primitives-input.mjs.map +1 -1
- package/fesm2022/ng-primitives-interactions.mjs +14 -80
- package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
- package/fesm2022/ng-primitives-internal.mjs +93 -65
- package/fesm2022/ng-primitives-internal.mjs.map +1 -1
- package/fesm2022/ng-primitives-listbox.mjs +19 -48
- package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-menu.mjs +1 -5
- package/fesm2022/ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-pagination.mjs +53 -147
- package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
- package/fesm2022/ng-primitives-popover.mjs +105 -96
- package/fesm2022/ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/ng-primitives-progress.mjs +4 -18
- package/fesm2022/ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/ng-primitives-radio.mjs +9 -5
- package/fesm2022/ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/ng-primitives-roving-focus.mjs +2 -12
- package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/ng-primitives-select.mjs +35 -21
- package/fesm2022/ng-primitives-select.mjs.map +1 -1
- package/fesm2022/ng-primitives-separator.mjs +2 -11
- package/fesm2022/ng-primitives-separator.mjs.map +1 -1
- package/fesm2022/ng-primitives-slider.mjs +62 -120
- package/fesm2022/ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/ng-primitives-state.mjs +10 -3
- package/fesm2022/ng-primitives-state.mjs.map +1 -1
- package/fesm2022/ng-primitives-switch.mjs +22 -35
- package/fesm2022/ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/ng-primitives-tabs.mjs +17 -22
- package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/ng-primitives-textarea.mjs +34 -21
- package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
- package/fesm2022/ng-primitives-toast.mjs +27 -16
- package/fesm2022/ng-primitives-toast.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle-group.mjs +26 -49
- package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle.mjs +4 -18
- package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/ng-primitives-toolbar.mjs +3 -18
- package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/ng-primitives-tooltip.mjs +103 -82
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
- package/fesm2022/ng-primitives-utils.mjs +18 -0
- package/fesm2022/ng-primitives-utils.mjs.map +1 -1
- package/file-upload/file-dropzone/file-dropzone-state.d.ts +2 -2
- package/file-upload/file-dropzone/file-dropzone.d.ts +3 -2
- package/file-upload/file-upload/file-upload-state.d.ts +2 -2
- package/file-upload/file-upload/file-upload.d.ts +3 -2
- package/focus-trap/index.d.ts +0 -1
- package/form-field/description/description.d.ts +25 -1
- package/form-field/error/error.d.ts +25 -1
- package/form-field/form-control/form-control-state.d.ts +58 -0
- package/form-field/form-control/form-control.d.ts +36 -7
- package/form-field/form-field/form-field-state.d.ts +41 -0
- package/form-field/form-field/form-field.d.ts +4 -0
- package/form-field/index.d.ts +2 -5
- package/form-field/label/label.d.ts +26 -2
- package/input/index.d.ts +1 -1
- package/input/input/input-state.d.ts +30 -0
- package/input/input/input.d.ts +7 -5
- package/interactions/focus/focus.d.ts +0 -4
- package/interactions/focus-visible/focus-visible.d.ts +0 -4
- package/interactions/hover/hover.d.ts +0 -4
- package/interactions/index.d.ts +0 -5
- package/interactions/move/move.d.ts +0 -4
- package/interactions/press/press.d.ts +0 -4
- package/internal/exit-animation/exit-animation-manager.d.ts +17 -0
- package/internal/exit-animation/exit-animation.d.ts +4 -17
- package/internal/index.d.ts +3 -2
- package/internal/interactions/interactions.d.ts +5 -1
- package/internal/signals/sync-state.d.ts +2 -0
- package/listbox/index.d.ts +0 -4
- package/listbox/listbox/listbox-state.d.ts +2 -2
- package/package.json +9 -9
- package/pagination/index.d.ts +0 -6
- package/pagination/pagination/pagination-state.d.ts +2 -2
- package/pagination/pagination/pagination.d.ts +5 -5
- package/pagination/pagination-button/pagination-button.d.ts +4 -8
- package/pagination/pagination-first/pagination-first.d.ts +4 -8
- package/pagination/pagination-last/pagination-last.d.ts +3 -7
- package/pagination/pagination-next/pagination-next.d.ts +4 -8
- package/pagination/pagination-previous/pagination-previous.d.ts +4 -8
- package/popover/index.d.ts +1 -2
- package/popover/popover/popover-token.d.ts +8 -5
- package/popover/popover/popover.d.ts +3 -2
- package/popover/popover-trigger/popover-trigger-state.d.ts +5 -3
- package/popover/popover-trigger/popover-trigger.d.ts +27 -19
- package/progress/index.d.ts +0 -1
- package/progress/progress/progress-state.d.ts +1 -1
- package/radio/radio-group/radio-group-state.d.ts +1 -1
- package/radio/radio-group/radio-group.d.ts +2 -2
- package/radio/radio-item/radio-item-state.d.ts +1 -1
- package/roving-focus/index.d.ts +2 -3
- package/roving-focus/roving-focus-group/roving-focus-group-state.d.ts +1 -1
- package/schematics/ng-generate/schema.d.ts +4 -1
- package/schematics/ng-generate/schema.json +4 -1
- package/schematics/ng-generate/templates/toast/toast.__fileSuffix@dasherize__.ts.template +111 -0
- package/schematics/ng-generate/templates/toolbar/toolbar-button.__fileSuffix@dasherize__.ts.template +58 -0
- package/schematics/ng-generate/templates/toolbar/toolbar.__fileSuffix@dasherize__.ts.template +29 -0
- package/schematics/ng-generate/templates/tooltip/tooltip-trigger.__fileSuffix@dasherize__.ts.template +35 -0
- package/schematics/ng-generate/templates/tooltip/tooltip.__fileSuffix@dasherize__.ts.template +60 -0
- package/search/search/search-state.d.ts +1 -1
- package/select/index.d.ts +1 -1
- package/select/select/select-state.d.ts +20 -0
- package/select/select/select.d.ts +7 -4
- package/separator/index.d.ts +1 -2
- package/slider/index.d.ts +0 -4
- package/slider/slider/slider-state.d.ts +1 -1
- package/slider/slider/slider.d.ts +2 -2
- package/slider/slider-range/slider-range.d.ts +1 -1
- package/slider/slider-thumb/slider-thumb.d.ts +3 -7
- package/slider/slider-track/slider-track.d.ts +1 -5
- package/state/index.d.ts +7 -1
- package/switch/index.d.ts +0 -1
- package/switch/switch/switch-state.d.ts +1 -1
- package/switch/switch/switch.d.ts +3 -4
- package/switch/switch-thumb/switch-thumb.d.ts +2 -2
- package/tabs/index.d.ts +1 -2
- package/tabs/tab-button/tab-button.d.ts +2 -2
- package/tabs/tabset/tabset-state.d.ts +1 -1
- package/textarea/index.d.ts +1 -1
- package/textarea/textarea/textarea-state.d.ts +20 -0
- package/textarea/textarea/textarea.d.ts +7 -4
- package/toast/index.d.ts +0 -1
- package/toast/toast/toast.d.ts +21 -1
- package/toggle/index.d.ts +0 -1
- package/toggle/toggle/toggle-state.d.ts +1 -1
- package/toggle-group/index.d.ts +0 -2
- package/toggle-group/toggle-group/toggle-group-state.d.ts +1 -1
- package/toggle-group/toggle-group-item/toggle-group-item-state.d.ts +15 -2
- package/toggle-group/toggle-group-item/toggle-group-item.d.ts +1 -1
- package/toolbar/index.d.ts +0 -1
- package/tooltip/index.d.ts +1 -2
- package/tooltip/tooltip/tooltip-token.d.ts +8 -5
- package/tooltip/tooltip/tooltip.d.ts +2 -1
- package/tooltip/tooltip-trigger/tooltip-trigger-state.d.ts +3 -3
- package/tooltip/tooltip-trigger/tooltip-trigger.d.ts +43 -22
- package/a11y/visually-hidden/visually-hidden-token.d.ts +0 -7
- package/date-picker/date-picker-cell/date-picker-cell-token.d.ts +0 -7
- package/date-picker/date-picker-grid/date-picker-grid-token.d.ts +0 -7
- package/date-picker/date-picker-next-month/date-picker-next-month-token.d.ts +0 -7
- package/date-picker/date-picker-previous-month/date-picker-previous-month-token.d.ts +0 -7
- package/dialog/dialog-description/dialog-description-token.d.ts +0 -7
- package/dialog/dialog-overlay/dialog-overlay-token.d.ts +0 -7
- package/dialog/dialog-title/dialog-title-token.d.ts +0 -7
- package/dialog/dialog-trigger/dialog-trigger-token.d.ts +0 -7
- package/focus-trap/focus-trap/focus-trap-token.d.ts +0 -7
- package/form-field/description/description-token.d.ts +0 -7
- package/form-field/error/error-token.d.ts +0 -7
- package/form-field/form-control/form-control-token.d.ts +0 -7
- package/form-field/form-field/form-field-token.d.ts +0 -8
- package/form-field/label/label-token.d.ts +0 -7
- package/input/input/input-token.d.ts +0 -7
- package/interactions/focus/focus-token.d.ts +0 -7
- package/interactions/focus-visible/focus-visible-token.d.ts +0 -7
- package/interactions/hover/hover-token.d.ts +0 -8
- package/interactions/move/move-token.d.ts +0 -7
- package/interactions/press/press-token.d.ts +0 -7
- package/internal/disabled/disabled.d.ts +0 -14
- package/listbox/listbox/listbox-token.d.ts +0 -7
- package/listbox/listbox-option/listbox-option-token.d.ts +0 -7
- package/listbox/listbox-section/listbox-section-token.d.ts +0 -7
- package/listbox/listbox-trigger/listbox-trigger-token.d.ts +0 -7
- package/pagination/pagination/pagination-token.d.ts +0 -8
- package/pagination/pagination-button/pagination-button-token.d.ts +0 -7
- package/pagination/pagination-first/pagination-first-token.d.ts +0 -7
- package/pagination/pagination-last/pagination-last-token.d.ts +0 -7
- package/pagination/pagination-next/pagination-next-token.d.ts +0 -7
- package/pagination/pagination-previous/pagination-previous-token.d.ts +0 -7
- package/popover/popover-trigger/popover-trigger-token.d.ts +0 -12
- package/progress/progress/progress-token.d.ts +0 -11
- package/roving-focus/roving-focus-item/roving-focus-item-token.d.ts +0 -8
- package/select/select/select-token.d.ts +0 -7
- package/separator/separator/separator-token.d.ts +0 -7
- package/slider/slider/slider-token.d.ts +0 -8
- package/slider/slider-range/slider-range-token.d.ts +0 -8
- package/slider/slider-thumb/slider-thumb-token.d.ts +0 -8
- package/slider/slider-track/slider-track-token.d.ts +0 -8
- package/switch/switch/switch-token.d.ts +0 -11
- package/tabs/tabset/tabset-token.d.ts +0 -11
- package/textarea/textarea/textarea-token.d.ts +0 -7
- package/toast/toast/toast-token.d.ts +0 -7
- package/toggle/toggle/toggle-token.d.ts +0 -11
- package/toggle-group/toggle-group/toggle-group-token.d.ts +0 -11
- package/toggle-group/toggle-group-item/toggle-group-item-token.d.ts +0 -11
- package/toolbar/toolbar/toolbar-token.d.ts +0 -11
- package/tooltip/tooltip-trigger/tooltip-trigger-token.d.ts +0 -15
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { input, effect, Directive, computed, booleanAttribute, signal, contentChild, inject, ElementRef, HostListener } from '@angular/core';
|
|
3
3
|
import { uniqueId, onBooleanChange, onChange } from 'ng-primitives/utils';
|
|
4
|
-
import {
|
|
4
|
+
import { createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
|
|
5
|
+
import { syncState } from 'ng-primitives/internal';
|
|
5
6
|
import { NgControl } from '@angular/forms';
|
|
6
7
|
|
|
7
|
-
const NgpFormFieldToken = new InjectionToken('NgpFormFieldToken');
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
* @param primitive
|
|
9
|
+
* The state token for the FormField primitive.
|
|
11
10
|
*/
|
|
12
|
-
|
|
13
|
-
return inject(NgpFormFieldToken, { optional: true });
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const NgpDescriptionToken = new InjectionToken('NgpDescriptionToken');
|
|
11
|
+
const NgpFormFieldStateToken = createStateToken('FormField');
|
|
17
12
|
/**
|
|
18
|
-
*
|
|
13
|
+
* Provides the FormField state.
|
|
19
14
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
const provideFormFieldState = createStateProvider(NgpFormFieldStateToken);
|
|
16
|
+
/**
|
|
17
|
+
* Injects the FormField state.
|
|
18
|
+
*/
|
|
19
|
+
const injectFormFieldState = createStateInjector(NgpFormFieldStateToken);
|
|
20
|
+
/**
|
|
21
|
+
* The FormField state registration function.
|
|
22
|
+
*/
|
|
23
|
+
const formFieldState = createState(NgpFormFieldStateToken);
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* The `NgpDescription` directive is used to mark a description element within a form field. There may be multiple descriptions associated with a form control.
|
|
@@ -33,42 +34,33 @@ class NgpDescription {
|
|
|
33
34
|
/**
|
|
34
35
|
* Access the form field that the description is associated with.
|
|
35
36
|
*/
|
|
36
|
-
this.formField =
|
|
37
|
+
this.formField = injectFormFieldState({ optional: true });
|
|
37
38
|
effect(onCleanup => {
|
|
38
|
-
this.formField?.addDescription(this.id());
|
|
39
|
-
onCleanup(() => this.formField?.removeDescription(this.id()));
|
|
39
|
+
this.formField()?.addDescription(this.id());
|
|
40
|
+
onCleanup(() => this.formField()?.removeDescription(this.id()));
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
43
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
43
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpDescription, isStandalone: true, selector: "[ngpDescription]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField?.invalid() ? \"\" : null", "attr.data-valid": "formField?.valid() ? \"\" : null", "attr.data-touched": "formField?.touched() ? \"\" : null", "attr.data-pristine": "formField?.pristine() ? \"\" : null", "attr.data-dirty": "formField?.dirty() ? \"\" : null", "attr.data-pending": "formField?.pending() ? \"\" : null", "attr.data-disabled": "formField?.disabled() ? \"\" : null" } },
|
|
44
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpDescription, isStandalone: true, selector: "[ngpDescription]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField()?.invalid() ? \"\" : null", "attr.data-valid": "formField()?.valid() ? \"\" : null", "attr.data-touched": "formField()?.touched() ? \"\" : null", "attr.data-pristine": "formField()?.pristine() ? \"\" : null", "attr.data-dirty": "formField()?.dirty() ? \"\" : null", "attr.data-pending": "formField()?.pending() ? \"\" : null", "attr.data-disabled": "formField()?.disabled() ? \"\" : null" } }, exportAs: ["ngpDescription"], ngImport: i0 }); }
|
|
44
45
|
}
|
|
45
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpDescription, decorators: [{
|
|
46
47
|
type: Directive,
|
|
47
48
|
args: [{
|
|
48
49
|
selector: '[ngpDescription]',
|
|
49
50
|
exportAs: 'ngpDescription',
|
|
50
|
-
providers: [{ provide: NgpDescriptionToken, useExisting: NgpDescription }],
|
|
51
51
|
host: {
|
|
52
52
|
'[attr.id]': 'id()',
|
|
53
|
-
'[attr.data-invalid]': 'formField?.invalid() ? "" : null',
|
|
54
|
-
'[attr.data-valid]': 'formField?.valid() ? "" : null',
|
|
55
|
-
'[attr.data-touched]': 'formField?.touched() ? "" : null',
|
|
56
|
-
'[attr.data-pristine]': 'formField?.pristine() ? "" : null',
|
|
57
|
-
'[attr.data-dirty]': 'formField?.dirty() ? "" : null',
|
|
58
|
-
'[attr.data-pending]': 'formField?.pending() ? "" : null',
|
|
59
|
-
'[attr.data-disabled]': 'formField?.disabled() ? "" : null',
|
|
53
|
+
'[attr.data-invalid]': 'formField()?.invalid() ? "" : null',
|
|
54
|
+
'[attr.data-valid]': 'formField()?.valid() ? "" : null',
|
|
55
|
+
'[attr.data-touched]': 'formField()?.touched() ? "" : null',
|
|
56
|
+
'[attr.data-pristine]': 'formField()?.pristine() ? "" : null',
|
|
57
|
+
'[attr.data-dirty]': 'formField()?.dirty() ? "" : null',
|
|
58
|
+
'[attr.data-pending]': 'formField()?.pending() ? "" : null',
|
|
59
|
+
'[attr.data-disabled]': 'formField()?.disabled() ? "" : null',
|
|
60
60
|
},
|
|
61
61
|
}]
|
|
62
62
|
}], ctorParameters: () => [] });
|
|
63
63
|
|
|
64
|
-
const NgpErrorToken = new InjectionToken('NgpErrorToken');
|
|
65
|
-
/**
|
|
66
|
-
* Inject the Error directive instance
|
|
67
|
-
*/
|
|
68
|
-
function injectError() {
|
|
69
|
-
return inject(NgpErrorToken);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
64
|
/**
|
|
73
65
|
* The `NgpError` directive is used to mark an error message element within a form field. There may be multiple error messages associated with a form control.
|
|
74
66
|
*/
|
|
@@ -77,7 +69,7 @@ class NgpError {
|
|
|
77
69
|
/**
|
|
78
70
|
* Access the form field that the description is associated with.
|
|
79
71
|
*/
|
|
80
|
-
this.formField =
|
|
72
|
+
this.formField = injectFormFieldState({ optional: true });
|
|
81
73
|
/**
|
|
82
74
|
* The id of the error message. If not provided, a unique id will be generated.
|
|
83
75
|
*/
|
|
@@ -92,7 +84,7 @@ class NgpError {
|
|
|
92
84
|
* Determine if there is an error message.
|
|
93
85
|
*/
|
|
94
86
|
this.hasError = computed(() => {
|
|
95
|
-
const errors = this.formField?.errors() ?? [];
|
|
87
|
+
const errors = this.formField()?.errors() ?? [];
|
|
96
88
|
const validator = this.validator();
|
|
97
89
|
return validator ? errors?.includes(validator) : errors?.length > 0;
|
|
98
90
|
});
|
|
@@ -101,45 +93,61 @@ class NgpError {
|
|
|
101
93
|
*/
|
|
102
94
|
this.state = computed(() => (this.hasError() ? 'fail' : 'pass'));
|
|
103
95
|
// add or remove the error message when the error state changes
|
|
104
|
-
onBooleanChange(this.hasError, () => this.formField?.addDescription(this.id()), () => this.formField?.removeDescription(this.id()));
|
|
96
|
+
onBooleanChange(this.hasError, () => this.formField()?.addDescription(this.id()), () => this.formField()?.removeDescription(this.id()));
|
|
105
97
|
}
|
|
106
98
|
ngOnChanges(changes) {
|
|
107
99
|
if ('id' in changes) {
|
|
108
|
-
this.formField?.removeDescription(changes['id'].previousValue);
|
|
100
|
+
this.formField()?.removeDescription(changes['id'].previousValue);
|
|
109
101
|
}
|
|
110
102
|
}
|
|
111
103
|
ngOnDestroy() {
|
|
112
|
-
this.formField?.removeDescription(this.id());
|
|
104
|
+
this.formField()?.removeDescription(this.id());
|
|
113
105
|
}
|
|
114
106
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpError, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
115
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpError, isStandalone: true, selector: "[ngpError]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "ngpErrorValidator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField?.invalid() ? \"\" : null", "attr.data-valid": "formField?.valid() ? \"\" : null", "attr.data-touched": "formField?.touched() ? \"\" : null", "attr.data-pristine": "formField?.pristine() ? \"\" : null", "attr.data-dirty": "formField?.dirty() ? \"\" : null", "attr.data-pending": "formField?.pending() ? \"\" : null", "attr.data-disabled": "formField?.disabled() ? \"\" : null", "attr.data-validator": "state()" } },
|
|
107
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpError, isStandalone: true, selector: "[ngpError]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "ngpErrorValidator", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id()", "attr.data-invalid": "formField()?.invalid() ? \"\" : null", "attr.data-valid": "formField()?.valid() ? \"\" : null", "attr.data-touched": "formField()?.touched() ? \"\" : null", "attr.data-pristine": "formField()?.pristine() ? \"\" : null", "attr.data-dirty": "formField()?.dirty() ? \"\" : null", "attr.data-pending": "formField()?.pending() ? \"\" : null", "attr.data-disabled": "formField()?.disabled() ? \"\" : null", "attr.data-validator": "state()" } }, exportAs: ["ngpError"], usesOnChanges: true, ngImport: i0 }); }
|
|
116
108
|
}
|
|
117
109
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpError, decorators: [{
|
|
118
110
|
type: Directive,
|
|
119
111
|
args: [{
|
|
120
112
|
selector: '[ngpError]',
|
|
121
113
|
exportAs: 'ngpError',
|
|
122
|
-
providers: [{ provide: NgpErrorToken, useExisting: NgpError }],
|
|
123
114
|
host: {
|
|
124
115
|
'[attr.id]': 'id()',
|
|
125
|
-
'[attr.data-invalid]': 'formField?.invalid() ? "" : null',
|
|
126
|
-
'[attr.data-valid]': 'formField?.valid() ? "" : null',
|
|
127
|
-
'[attr.data-touched]': 'formField?.touched() ? "" : null',
|
|
128
|
-
'[attr.data-pristine]': 'formField?.pristine() ? "" : null',
|
|
129
|
-
'[attr.data-dirty]': 'formField?.dirty() ? "" : null',
|
|
130
|
-
'[attr.data-pending]': 'formField?.pending() ? "" : null',
|
|
131
|
-
'[attr.data-disabled]': 'formField?.disabled() ? "" : null',
|
|
116
|
+
'[attr.data-invalid]': 'formField()?.invalid() ? "" : null',
|
|
117
|
+
'[attr.data-valid]': 'formField()?.valid() ? "" : null',
|
|
118
|
+
'[attr.data-touched]': 'formField()?.touched() ? "" : null',
|
|
119
|
+
'[attr.data-pristine]': 'formField()?.pristine() ? "" : null',
|
|
120
|
+
'[attr.data-dirty]': 'formField()?.dirty() ? "" : null',
|
|
121
|
+
'[attr.data-pending]': 'formField()?.pending() ? "" : null',
|
|
122
|
+
'[attr.data-disabled]': 'formField()?.disabled() ? "" : null',
|
|
132
123
|
'[attr.data-validator]': 'state()',
|
|
133
124
|
},
|
|
134
125
|
}]
|
|
135
126
|
}], ctorParameters: () => [] });
|
|
136
127
|
|
|
137
|
-
const NgpFormControlToken = new InjectionToken('NgpFormControlToken');
|
|
138
128
|
/**
|
|
139
|
-
*
|
|
129
|
+
* The state token for the FormControl primitive.
|
|
130
|
+
*/
|
|
131
|
+
const NgpFormControlStateToken = createStateToken('FormControl');
|
|
132
|
+
/**
|
|
133
|
+
* Provides the FormControl state.
|
|
134
|
+
*/
|
|
135
|
+
const provideFormControlState = createStateProvider(NgpFormControlStateToken);
|
|
136
|
+
/**
|
|
137
|
+
* Injects the FormControl state.
|
|
138
|
+
*/
|
|
139
|
+
const injectFormControlState = createStateInjector(NgpFormControlStateToken);
|
|
140
|
+
/**
|
|
141
|
+
* The FormControl state registration function.
|
|
142
|
+
*/
|
|
143
|
+
const formControlState = createState(NgpFormControlStateToken);
|
|
144
|
+
/**
|
|
145
|
+
* Sync the form control state with control state.
|
|
146
|
+
* @param disabled The disabled state of the control.
|
|
140
147
|
*/
|
|
141
|
-
function
|
|
142
|
-
|
|
148
|
+
function syncFormControl({ disabled }) {
|
|
149
|
+
const formControl = injectFormControlState();
|
|
150
|
+
syncState(disabled, formControl().disabled);
|
|
143
151
|
}
|
|
144
152
|
|
|
145
153
|
/**
|
|
@@ -154,46 +162,53 @@ class NgpFormControl {
|
|
|
154
162
|
*/
|
|
155
163
|
this.id = input(uniqueId('ngp-form-control'));
|
|
156
164
|
/**
|
|
157
|
-
*
|
|
165
|
+
* Whether the form control is disabled by a parent.
|
|
158
166
|
*/
|
|
159
|
-
this.
|
|
167
|
+
this.disabled = input(false, {
|
|
168
|
+
alias: 'ngpFormControlDisabled',
|
|
169
|
+
transform: booleanAttribute,
|
|
170
|
+
});
|
|
160
171
|
/**
|
|
161
|
-
*
|
|
172
|
+
* Access the form field that the form control is associated with.
|
|
162
173
|
*/
|
|
163
|
-
this.
|
|
174
|
+
this.formField = injectFormFieldState({ optional: true });
|
|
164
175
|
/**
|
|
165
176
|
* Determine the aria-labelledby attribute value.
|
|
166
177
|
*/
|
|
167
|
-
this.ariaLabelledBy = computed(() => this.formField?.labels().join(' '));
|
|
178
|
+
this.ariaLabelledBy = computed(() => this.formField()?.labels().join(' '));
|
|
168
179
|
/**
|
|
169
180
|
* Determine the aria-describedby attribute value.
|
|
170
181
|
*/
|
|
171
|
-
this.ariaDescribedBy = computed(() => this.formField?.descriptions().join(' '));
|
|
182
|
+
this.ariaDescribedBy = computed(() => this.formField()?.descriptions().join(' '));
|
|
183
|
+
/**
|
|
184
|
+
* The state of the form control.
|
|
185
|
+
*/
|
|
186
|
+
this.state = formControlState(this);
|
|
172
187
|
effect(onCleanup => {
|
|
173
|
-
this.formField?.setFormControl(this.id());
|
|
174
|
-
onCleanup(() => this.formField?.removeFormControl());
|
|
188
|
+
this.formField()?.setFormControl(this.state.id());
|
|
189
|
+
onCleanup(() => this.formField()?.removeFormControl());
|
|
175
190
|
});
|
|
176
191
|
}
|
|
177
192
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpFormControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
178
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpFormControl, isStandalone: true, selector: "[ngpFormControl]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "id()", "attr.aria-labelledby": "ariaLabelledBy()", "attr.aria-describedby": "ariaDescribedBy()", "attr.data-invalid": "formField?.invalid() ? \"\" : null", "attr.data-valid": "formField?.valid() ? \"\" : null", "attr.data-touched": "formField?.touched() ? \"\" : null", "attr.data-pristine": "formField?.pristine() ? \"\" : null", "attr.data-dirty": "formField?.dirty() ? \"\" : null", "attr.data-pending": "formField?.pending() ? \"\" : null", "attr.data-disabled": "formField?.disabled() || disabled() ? \"\" : null" } }, providers: [
|
|
193
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpFormControl, isStandalone: true, selector: "[ngpFormControl]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpFormControlDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "id()", "attr.aria-labelledby": "ariaLabelledBy()", "attr.aria-describedby": "ariaDescribedBy()", "attr.data-invalid": "formField()?.invalid() ? \"\" : null", "attr.data-valid": "formField()?.valid() ? \"\" : null", "attr.data-touched": "formField()?.touched() ? \"\" : null", "attr.data-pristine": "formField()?.pristine() ? \"\" : null", "attr.data-dirty": "formField()?.dirty() ? \"\" : null", "attr.data-pending": "formField()?.pending() ? \"\" : null", "attr.data-disabled": "formField()?.disabled() || state.disabled() ? \"\" : null" } }, providers: [provideFormControlState()], exportAs: ["ngpFormControl"], ngImport: i0 }); }
|
|
179
194
|
}
|
|
180
195
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpFormControl, decorators: [{
|
|
181
196
|
type: Directive,
|
|
182
197
|
args: [{
|
|
183
198
|
selector: '[ngpFormControl]',
|
|
184
199
|
exportAs: 'ngpFormControl',
|
|
185
|
-
providers: [
|
|
200
|
+
providers: [provideFormControlState()],
|
|
186
201
|
host: {
|
|
187
202
|
'[id]': 'id()',
|
|
188
203
|
'[attr.aria-labelledby]': 'ariaLabelledBy()',
|
|
189
204
|
'[attr.aria-describedby]': 'ariaDescribedBy()',
|
|
190
|
-
'[attr.data-invalid]': 'formField?.invalid() ? "" : null',
|
|
191
|
-
'[attr.data-valid]': 'formField?.valid() ? "" : null',
|
|
192
|
-
'[attr.data-touched]': 'formField?.touched() ? "" : null',
|
|
193
|
-
'[attr.data-pristine]': 'formField?.pristine() ? "" : null',
|
|
194
|
-
'[attr.data-dirty]': 'formField?.dirty() ? "" : null',
|
|
195
|
-
'[attr.data-pending]': 'formField?.pending() ? "" : null',
|
|
196
|
-
'[attr.data-disabled]': 'formField?.disabled() || disabled() ? "" : null',
|
|
205
|
+
'[attr.data-invalid]': 'formField()?.invalid() ? "" : null',
|
|
206
|
+
'[attr.data-valid]': 'formField()?.valid() ? "" : null',
|
|
207
|
+
'[attr.data-touched]': 'formField()?.touched() ? "" : null',
|
|
208
|
+
'[attr.data-pristine]': 'formField()?.pristine() ? "" : null',
|
|
209
|
+
'[attr.data-dirty]': 'formField()?.dirty() ? "" : null',
|
|
210
|
+
'[attr.data-pending]': 'formField()?.pending() ? "" : null',
|
|
211
|
+
'[attr.data-disabled]': 'formField()?.disabled() || state.disabled() ? "" : null',
|
|
197
212
|
},
|
|
198
213
|
}]
|
|
199
214
|
}], ctorParameters: () => [] });
|
|
@@ -262,6 +277,10 @@ class NgpFormField {
|
|
|
262
277
|
* @internal
|
|
263
278
|
*/
|
|
264
279
|
this.disabled = signal(null);
|
|
280
|
+
/**
|
|
281
|
+
* The form field state.
|
|
282
|
+
*/
|
|
283
|
+
this.state = formFieldState(this);
|
|
265
284
|
// any time the ngControl changes, setup the subscriptions.
|
|
266
285
|
onChange(this.ngControl, this.setupSubscriptions.bind(this));
|
|
267
286
|
}
|
|
@@ -342,14 +361,14 @@ class NgpFormField {
|
|
|
342
361
|
this.descriptions.update(descriptions => descriptions.filter(d => d !== description));
|
|
343
362
|
}
|
|
344
363
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpFormField, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
345
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.0.7", type: NgpFormField, isStandalone: true, selector: "[ngpFormField]", host: { properties: { "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-valid": "valid() ? \"\" : null", "attr.data-touched": "touched() ? \"\" : null", "attr.data-pristine": "pristine() ? \"\" : null", "attr.data-dirty": "dirty() ? \"\" : null", "attr.data-pending": "pending() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null" } }, providers: [
|
|
364
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.0.7", type: NgpFormField, isStandalone: true, selector: "[ngpFormField]", host: { properties: { "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-valid": "valid() ? \"\" : null", "attr.data-touched": "touched() ? \"\" : null", "attr.data-pristine": "pristine() ? \"\" : null", "attr.data-dirty": "dirty() ? \"\" : null", "attr.data-pending": "pending() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null" } }, providers: [provideFormFieldState()], queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true, isSignal: true }], exportAs: ["ngpFormField"], ngImport: i0 }); }
|
|
346
365
|
}
|
|
347
366
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpFormField, decorators: [{
|
|
348
367
|
type: Directive,
|
|
349
368
|
args: [{
|
|
350
369
|
selector: '[ngpFormField]',
|
|
351
370
|
exportAs: 'ngpFormField',
|
|
352
|
-
providers: [
|
|
371
|
+
providers: [provideFormFieldState()],
|
|
353
372
|
host: {
|
|
354
373
|
'[attr.data-invalid]': 'invalid() ? "" : null',
|
|
355
374
|
'[attr.data-valid]': 'valid() ? "" : null',
|
|
@@ -362,14 +381,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImpor
|
|
|
362
381
|
}]
|
|
363
382
|
}], ctorParameters: () => [] });
|
|
364
383
|
|
|
365
|
-
const NgpLabelToken = new InjectionToken('NgpLabelToken');
|
|
366
|
-
/**
|
|
367
|
-
* Inject the Label directive instance
|
|
368
|
-
*/
|
|
369
|
-
function injectLabel() {
|
|
370
|
-
return inject(NgpLabelToken);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
384
|
/**
|
|
374
385
|
* The `NgpLabel` directive is used to mark a label element within a form field. Preferably, there should use an HTML `<label>` element.
|
|
375
386
|
*/
|
|
@@ -382,11 +393,11 @@ class NgpLabel {
|
|
|
382
393
|
/**
|
|
383
394
|
* Access the form field that the label is associated with.
|
|
384
395
|
*/
|
|
385
|
-
this.formField =
|
|
396
|
+
this.formField = injectFormFieldState({ optional: true });
|
|
386
397
|
/**
|
|
387
398
|
* Derive the for attribute value if the label is an HTML label element.
|
|
388
399
|
*/
|
|
389
|
-
this.htmlFor = computed(() => this.formField?.formControl());
|
|
400
|
+
this.htmlFor = computed(() => this.formField()?.formControl());
|
|
390
401
|
/**
|
|
391
402
|
* Access the element that the label is associated with.
|
|
392
403
|
*/
|
|
@@ -396,8 +407,8 @@ class NgpLabel {
|
|
|
396
407
|
*/
|
|
397
408
|
this.isLabel = this.elementRef.nativeElement instanceof HTMLLabelElement;
|
|
398
409
|
effect(onCleanup => {
|
|
399
|
-
this.formField?.addLabel(this.id());
|
|
400
|
-
onCleanup(() => this.formField?.removeLabel(this.id()));
|
|
410
|
+
this.formField()?.addLabel(this.id());
|
|
411
|
+
onCleanup(() => this.formField()?.removeLabel(this.id()));
|
|
401
412
|
});
|
|
402
413
|
}
|
|
403
414
|
onClick(event) {
|
|
@@ -437,24 +448,23 @@ class NgpLabel {
|
|
|
437
448
|
target.focus({ preventScroll: true });
|
|
438
449
|
}
|
|
439
450
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
440
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpLabel, isStandalone: true, selector: "[ngpLabel]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.id": "id()", "attr.for": "htmlFor()", "attr.data-invalid": "formField?.invalid() ? \"\" : null", "attr.data-valid": "formField?.valid() ? \"\" : null", "attr.data-touched": "formField?.touched() ? \"\" : null", "attr.data-pristine": "formField?.pristine() ? \"\" : null", "attr.data-dirty": "formField?.dirty() ? \"\" : null", "attr.data-pending": "formField?.pending() ? \"\" : null", "attr.data-disabled": "formField?.disabled() ? \"\" : null" } },
|
|
451
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.0.7", type: NgpLabel, isStandalone: true, selector: "[ngpLabel]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.id": "id()", "attr.for": "htmlFor()", "attr.data-invalid": "formField()?.invalid() ? \"\" : null", "attr.data-valid": "formField()?.valid() ? \"\" : null", "attr.data-touched": "formField()?.touched() ? \"\" : null", "attr.data-pristine": "formField()?.pristine() ? \"\" : null", "attr.data-dirty": "formField()?.dirty() ? \"\" : null", "attr.data-pending": "formField()?.pending() ? \"\" : null", "attr.data-disabled": "formField()?.disabled() ? \"\" : null" } }, exportAs: ["ngpLabel"], ngImport: i0 }); }
|
|
441
452
|
}
|
|
442
453
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NgpLabel, decorators: [{
|
|
443
454
|
type: Directive,
|
|
444
455
|
args: [{
|
|
445
456
|
selector: '[ngpLabel]',
|
|
446
457
|
exportAs: 'ngpLabel',
|
|
447
|
-
providers: [{ provide: NgpLabelToken, useExisting: NgpLabel }],
|
|
448
458
|
host: {
|
|
449
459
|
'[attr.id]': 'id()',
|
|
450
460
|
'[attr.for]': 'htmlFor()',
|
|
451
|
-
'[attr.data-invalid]': 'formField?.invalid() ? "" : null',
|
|
452
|
-
'[attr.data-valid]': 'formField?.valid() ? "" : null',
|
|
453
|
-
'[attr.data-touched]': 'formField?.touched() ? "" : null',
|
|
454
|
-
'[attr.data-pristine]': 'formField?.pristine() ? "" : null',
|
|
455
|
-
'[attr.data-dirty]': 'formField?.dirty() ? "" : null',
|
|
456
|
-
'[attr.data-pending]': 'formField?.pending() ? "" : null',
|
|
457
|
-
'[attr.data-disabled]': 'formField?.disabled() ? "" : null',
|
|
461
|
+
'[attr.data-invalid]': 'formField()?.invalid() ? "" : null',
|
|
462
|
+
'[attr.data-valid]': 'formField()?.valid() ? "" : null',
|
|
463
|
+
'[attr.data-touched]': 'formField()?.touched() ? "" : null',
|
|
464
|
+
'[attr.data-pristine]': 'formField()?.pristine() ? "" : null',
|
|
465
|
+
'[attr.data-dirty]': 'formField()?.dirty() ? "" : null',
|
|
466
|
+
'[attr.data-pending]': 'formField()?.pending() ? "" : null',
|
|
467
|
+
'[attr.data-disabled]': 'formField()?.disabled() ? "" : null',
|
|
458
468
|
},
|
|
459
469
|
}]
|
|
460
470
|
}], ctorParameters: () => [], propDecorators: { onClick: [{
|
|
@@ -466,5 +476,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImpor
|
|
|
466
476
|
* Generated bundle index. Do not edit.
|
|
467
477
|
*/
|
|
468
478
|
|
|
469
|
-
export { NgpDescription,
|
|
479
|
+
export { NgpDescription, NgpError, NgpFormControl, NgpFormField, NgpLabel, injectFormControlState, injectFormFieldState, provideFormControlState, provideFormFieldState, syncFormControl };
|
|
470
480
|
//# sourceMappingURL=ng-primitives-form-field.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-form-field.mjs","sources":["../../../../packages/ng-primitives/form-field/src/form-field/form-field-token.ts","../../../../packages/ng-primitives/form-field/src/description/description-token.ts","../../../../packages/ng-primitives/form-field/src/description/description.ts","../../../../packages/ng-primitives/form-field/src/error/error-token.ts","../../../../packages/ng-primitives/form-field/src/error/error.ts","../../../../packages/ng-primitives/form-field/src/form-control/form-control-token.ts","../../../../packages/ng-primitives/form-field/src/form-control/form-control.ts","../../../../packages/ng-primitives/form-field/src/form-field/form-field.ts","../../../../packages/ng-primitives/form-field/src/label/label-token.ts","../../../../packages/ng-primitives/form-field/src/label/label.ts","../../../../packages/ng-primitives/form-field/src/ng-primitives-form-field.ts"],"sourcesContent":["import { InjectionToken, inject } from '@angular/core';\nimport type { NgpFormField } from './form-field';\n\nexport const NgpFormFieldToken = new InjectionToken<NgpFormField>('NgpFormFieldToken');\n\n/**\n * Inject the FormField directive instance\n * @param primitive\n */\nexport function injectFormField(): NgpFormField | null {\n return inject(NgpFormFieldToken, { optional: true });\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport type { NgpDescription } from './description';\n\nexport const NgpDescriptionToken = new InjectionToken<NgpDescription>('NgpDescriptionToken');\n\n/**\n * Inject the Description directive instance\n */\nexport function injectDescription(): NgpDescription {\n return inject(NgpDescriptionToken);\n}\n","import { Directive, effect, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectFormField } from '../form-field/form-field-token';\nimport { NgpDescriptionToken } from './description-token';\n\n/**\n * The `NgpDescription` directive is used to mark a description element within a form field. There may be multiple descriptions associated with a form control.\n */\n@Directive({\n selector: '[ngpDescription]',\n exportAs: 'ngpDescription',\n providers: [{ provide: NgpDescriptionToken, useExisting: NgpDescription }],\n host: {\n '[attr.id]': 'id()',\n '[attr.data-invalid]': 'formField?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField?.disabled() ? \"\" : null',\n },\n})\nexport class NgpDescription {\n /**\n * The id of the description. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-description'));\n /**\n * Access the form field that the description is associated with.\n */\n protected readonly formField = injectFormField();\n\n constructor() {\n effect(onCleanup => {\n this.formField?.addDescription(this.id());\n onCleanup(() => this.formField?.removeDescription(this.id()));\n });\n }\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport type { NgpError } from './error';\n\nexport const NgpErrorToken = new InjectionToken<NgpError>('NgpErrorToken');\n\n/**\n * Inject the Error directive instance\n */\nexport function injectError(): NgpError {\n return inject(NgpErrorToken);\n}\n","import { Directive, OnChanges, OnDestroy, SimpleChanges, computed, input } from '@angular/core';\nimport { onBooleanChange, uniqueId } from 'ng-primitives/utils';\nimport { injectFormField } from '../form-field/form-field-token';\nimport { NgpErrorToken } from './error-token';\n\n/**\n * The `NgpError` directive is used to mark an error message element within a form field. There may be multiple error messages associated with a form control.\n */\n@Directive({\n selector: '[ngpError]',\n exportAs: 'ngpError',\n providers: [{ provide: NgpErrorToken, useExisting: NgpError }],\n host: {\n '[attr.id]': 'id()',\n '[attr.data-invalid]': 'formField?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField?.disabled() ? \"\" : null',\n '[attr.data-validator]': 'state()',\n },\n})\nexport class NgpError implements OnChanges, OnDestroy {\n /**\n * Access the form field that the description is associated with.\n */\n protected readonly formField = injectFormField();\n\n /**\n * The id of the error message. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-error'));\n\n /**\n * The validator associated with the error message.\n */\n readonly validator = input<string | null>(null, {\n alias: 'ngpErrorValidator',\n });\n\n /**\n * Determine if there is an error message.\n */\n protected readonly hasError = computed(() => {\n const errors = this.formField?.errors() ?? [];\n const validator = this.validator();\n\n return validator ? errors?.includes(validator) : errors?.length > 0;\n });\n\n /**\n * Determine whether the validator associated with this error is failing.\n */\n protected readonly state = computed(() => (this.hasError() ? 'fail' : 'pass'));\n\n constructor() {\n // add or remove the error message when the error state changes\n onBooleanChange(\n this.hasError,\n () => this.formField?.addDescription(this.id()),\n () => this.formField?.removeDescription(this.id()),\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('id' in changes) {\n this.formField?.removeDescription(changes['id'].previousValue);\n }\n }\n\n ngOnDestroy(): void {\n this.formField?.removeDescription(this.id());\n }\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport type { NgpFormControl } from './form-control';\n\nexport const NgpFormControlToken = new InjectionToken<NgpFormControl>('NgpFormControlToken');\n\n/**\n * Inject the FormControl directive instance\n */\nexport function injectFormControl(): NgpFormControl {\n return inject(NgpFormControlToken);\n}\n","import { computed, Directive, effect, input } from '@angular/core';\nimport { injectDisabled } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectFormField } from '../form-field/form-field-token';\nimport { NgpFormControlToken } from './form-control-token';\n\n/**\n * Typically this primitive would be not be used directly, but instead a more specific form control primitive would be used (e.g. `ngpInput`). All of our form control primitives use `ngpFormControl` internally so they will have the same accessibility features as described below.\n *\n * The `NgpFormControl` directive is used to mark a form control element within a form field. This element will have an `aria-labelledby` attribute set to the ID of the label element within the form field and an `aria-describedby` attribute set to the ID of the description elements within the form field.\n */\n@Directive({\n selector: '[ngpFormControl]',\n exportAs: 'ngpFormControl',\n providers: [{ provide: NgpFormControlToken, useExisting: NgpFormControl }],\n host: {\n '[id]': 'id()',\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\n '[attr.aria-describedby]': 'ariaDescribedBy()',\n '[attr.data-invalid]': 'formField?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField?.disabled() || disabled() ? \"\" : null',\n },\n})\nexport class NgpFormControl {\n /**\n * The id of the form control. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-form-control'));\n /**\n * Access the form field that the form control is associated with.\n */\n protected readonly formField = injectFormField();\n /**\n * Whether the form control is disabled by a parent.\n */\n protected readonly disabled = injectDisabled();\n /**\n * Determine the aria-labelledby attribute value.\n */\n protected readonly ariaLabelledBy = computed(() => this.formField?.labels().join(' '));\n\n /**\n * Determine the aria-describedby attribute value.\n */\n protected readonly ariaDescribedBy = computed(() => this.formField?.descriptions().join(' '));\n\n constructor() {\n effect(onCleanup => {\n this.formField?.setFormControl(this.id());\n onCleanup(() => this.formField?.removeFormControl());\n });\n }\n}\n","import { Directive, OnDestroy, contentChild, signal } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { onChange } from 'ng-primitives/utils';\nimport { Subscription } from 'rxjs';\nimport { NgpFormFieldToken } from './form-field-token';\n\n/**\n * The `NgpFormField` directive is a container for form field elements. Any labels, form controls, or descriptions should be placed within this directive.\n */\n@Directive({\n selector: '[ngpFormField]',\n exportAs: 'ngpFormField',\n providers: [{ provide: NgpFormFieldToken, useExisting: NgpFormField }],\n host: {\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\n '[attr.data-valid]': 'valid() ? \"\" : null',\n '[attr.data-touched]': 'touched() ? \"\" : null',\n '[attr.data-pristine]': 'pristine() ? \"\" : null',\n '[attr.data-dirty]': 'dirty() ? \"\" : null',\n '[attr.data-pending]': 'pending() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n})\nexport class NgpFormField implements OnDestroy {\n /**\n * Store the form label.\n * @internal\n */\n readonly labels = signal<string[]>([]);\n\n /**\n * Store the form descriptions.\n * @internal\n */\n readonly descriptions = signal<string[]>([]);\n\n /**\n * Store the id of the associated form control.\n * @internal\n */\n readonly formControl = signal<string | null>(null);\n\n /**\n * Find any NgControl within the form field.\n * @internal\n */\n private readonly ngControl = contentChild(NgControl);\n\n /**\n * Store the validation error messages.\n * @internal\n */\n readonly errors = signal<string[]>([]);\n\n /**\n * Whether the control is pristine.\n * @internal\n */\n readonly pristine = signal<boolean | null>(null);\n\n /**\n * Whether the control is touched.\n * @internal\n */\n readonly touched = signal<boolean | null>(null);\n\n /**\n * Whether the control is dirty.\n * @internal\n */\n readonly dirty = signal<boolean | null>(null);\n\n /**\n * Whether the control is valid.\n */\n readonly valid = signal<boolean | null>(null);\n\n /**\n * Whether the control is invalid.\n * @internal\n */\n readonly invalid = signal<boolean | null>(null);\n\n /**\n * Whether the control is pending.\n * @internal\n */\n readonly pending = signal<boolean | null>(null);\n\n /**\n * Whether the control is disabled.\n * @internal\n */\n readonly disabled = signal<boolean | null>(null);\n\n /**\n * Store the current status subscription.\n */\n private subscription?: Subscription;\n\n constructor() {\n // any time the ngControl changes, setup the subscriptions.\n onChange(this.ngControl, this.setupSubscriptions.bind(this));\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n /**\n * Setup a listener for the form control status.\n * @param control\n */\n private setupSubscriptions(control: NgControl | null | undefined): void {\n // Unsubscribe from the previous subscriptions.\n this.subscription?.unsubscribe();\n\n // set the initial values\n this.updateStatus();\n\n // Listen for changes to the form control.\n this.subscription = control?.valueChanges?.subscribe(this.updateStatus.bind(this));\n }\n\n private updateStatus(): void {\n const control = this.ngControl();\n\n if (!control) {\n return;\n }\n\n this.pristine.set(control.pristine);\n this.touched.set(control.touched);\n this.dirty.set(control.dirty);\n this.valid.set(control.valid);\n this.invalid.set(control.invalid);\n this.pending.set(control.pending);\n this.disabled.set(control.disabled);\n this.errors.set(control?.errors ? Object.keys(control.errors) : []);\n }\n\n /**\n * Register the id of the associated form control.\n * @param id\n * @internal\n */\n setFormControl(id: string): void {\n this.formControl.set(id);\n }\n\n /**\n * Register a label with the form field.\n * @param label\n * @internal\n */\n addLabel(label: string): void {\n this.labels.update(labels => [...labels, label]);\n }\n\n /**\n * Register a description with the form field.\n * @param description\n * @internal\n */\n addDescription(description: string): void {\n this.descriptions.update(descriptions => [...descriptions, description]);\n }\n\n /**\n * Remove the associated form control.\n * @internal\n */\n removeFormControl(): void {\n this.formControl.set(null);\n }\n\n /**\n * Remove a label from the form field.\n * @param label\n * @internal\n */\n removeLabel(label: string): void {\n this.labels.update(labels => labels.filter(l => l !== label));\n }\n\n /**\n * Remove a description from the form field.\n * @param description\n * @internal\n */\n removeDescription(description: string): void {\n this.descriptions.update(descriptions => descriptions.filter(d => d !== description));\n }\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport type { NgpLabel } from './label';\n\nexport const NgpLabelToken = new InjectionToken<NgpLabel>('NgpLabelToken');\n\n/**\n * Inject the Label directive instance\n */\nexport function injectLabel(): NgpLabel {\n return inject(NgpLabelToken);\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n} from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectFormField } from '../form-field/form-field-token';\nimport { NgpLabelToken } from './label-token';\n\n/**\n * The `NgpLabel` directive is used to mark a label element within a form field. Preferably, there should use an HTML `<label>` element.\n */\n@Directive({\n selector: '[ngpLabel]',\n exportAs: 'ngpLabel',\n providers: [{ provide: NgpLabelToken, useExisting: NgpLabel }],\n host: {\n '[attr.id]': 'id()',\n '[attr.for]': 'htmlFor()',\n '[attr.data-invalid]': 'formField?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField?.disabled() ? \"\" : null',\n },\n})\nexport class NgpLabel {\n /**\n * The id of the label. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-label'));\n /**\n * Access the form field that the label is associated with.\n */\n protected readonly formField = injectFormField();\n /**\n * Derive the for attribute value if the label is an HTML label element.\n */\n protected readonly htmlFor = computed(() => this.formField?.formControl());\n /**\n * Access the element that the label is associated with.\n */\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /**\n * Determine if the label is an HTML label element.\n */\n protected readonly isLabel = this.elementRef.nativeElement instanceof HTMLLabelElement;\n\n constructor() {\n effect(onCleanup => {\n this.formField?.addLabel(this.id());\n onCleanup(() => this.formField?.removeLabel(this.id()));\n });\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n // by default a label will perform a click on the associated form control, however\n // this only works if the associated form control is an input element which may not always\n // be the case, so we prevent the default behavior and handle the click event ourselves.\n // This was inspired by the HeadlessUI approach:\n // https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/components/label/label.tsx#L58\n if (this.isLabel) {\n event.preventDefault();\n }\n\n // to find the associated form control we can lookup via the known id\n const targetId = this.htmlFor();\n\n if (!targetId) {\n return;\n }\n\n const target = document.getElementById(targetId);\n\n if (!target) {\n return;\n }\n\n // if the target is disabled then do nothing\n const disabled = target.getAttribute('disabled');\n const ariaDisabled = target.getAttribute('aria-disabled');\n\n if (disabled === '' || disabled === 'true' || ariaDisabled === 'true') {\n return;\n }\n\n // radio buttons, checkboxes and switches should all be clicked immediately as they require state changes\n if (\n (target instanceof HTMLInputElement &&\n (target.type === 'radio' || target.type === 'checkbox')) ||\n target.role === 'radio' ||\n target.role === 'checkbox' ||\n target.role === 'switch'\n ) {\n target.click();\n }\n\n // Move focus to the element, this allows you to start using keyboard shortcuts since the\n // bound element is now focused.\n target.focus({ preventScroll: true });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-primitives-form-field.mjs","sources":["../../../../packages/ng-primitives/form-field/src/form-field/form-field-state.ts","../../../../packages/ng-primitives/form-field/src/description/description.ts","../../../../packages/ng-primitives/form-field/src/error/error.ts","../../../../packages/ng-primitives/form-field/src/form-control/form-control-state.ts","../../../../packages/ng-primitives/form-field/src/form-control/form-control.ts","../../../../packages/ng-primitives/form-field/src/form-field/form-field.ts","../../../../packages/ng-primitives/form-field/src/label/label.ts","../../../../packages/ng-primitives/form-field/src/ng-primitives-form-field.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpFormField } from './form-field';\n\n/**\n * The state token for the FormField primitive.\n */\nexport const NgpFormFieldStateToken = createStateToken<NgpFormField>('FormField');\n\n/**\n * Provides the FormField state.\n */\nexport const provideFormFieldState = createStateProvider(NgpFormFieldStateToken);\n\n/**\n * Injects the FormField state.\n */\nexport const injectFormFieldState = createStateInjector(NgpFormFieldStateToken);\n\n/**\n * The FormField state registration function.\n */\nexport const formFieldState = createState(NgpFormFieldStateToken);\n","import { Directive, effect, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectFormFieldState } from '../form-field/form-field-state';\n\n/**\n * The `NgpDescription` directive is used to mark a description element within a form field. There may be multiple descriptions associated with a form control.\n */\n@Directive({\n selector: '[ngpDescription]',\n exportAs: 'ngpDescription',\n host: {\n '[attr.id]': 'id()',\n '[attr.data-invalid]': 'formField()?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField()?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField()?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField()?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField()?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField()?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField()?.disabled() ? \"\" : null',\n },\n})\nexport class NgpDescription {\n /**\n * The id of the description. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-description'));\n /**\n * Access the form field that the description is associated with.\n */\n protected readonly formField = injectFormFieldState({ optional: true });\n\n constructor() {\n effect(onCleanup => {\n this.formField()?.addDescription(this.id());\n onCleanup(() => this.formField()?.removeDescription(this.id()));\n });\n }\n}\n","import { Directive, OnChanges, OnDestroy, SimpleChanges, computed, input } from '@angular/core';\nimport { onBooleanChange, uniqueId } from 'ng-primitives/utils';\nimport { injectFormFieldState } from '../form-field/form-field-state';\n\n/**\n * The `NgpError` directive is used to mark an error message element within a form field. There may be multiple error messages associated with a form control.\n */\n@Directive({\n selector: '[ngpError]',\n exportAs: 'ngpError',\n host: {\n '[attr.id]': 'id()',\n '[attr.data-invalid]': 'formField()?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField()?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField()?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField()?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField()?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField()?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField()?.disabled() ? \"\" : null',\n '[attr.data-validator]': 'state()',\n },\n})\nexport class NgpError implements OnChanges, OnDestroy {\n /**\n * Access the form field that the description is associated with.\n */\n protected readonly formField = injectFormFieldState({ optional: true });\n\n /**\n * The id of the error message. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-error'));\n\n /**\n * The validator associated with the error message.\n */\n readonly validator = input<string | null>(null, {\n alias: 'ngpErrorValidator',\n });\n\n /**\n * Determine if there is an error message.\n */\n protected readonly hasError = computed(() => {\n const errors = this.formField()?.errors() ?? [];\n const validator = this.validator();\n\n return validator ? errors?.includes(validator) : errors?.length > 0;\n });\n\n /**\n * Determine whether the validator associated with this error is failing.\n */\n protected readonly state = computed(() => (this.hasError() ? 'fail' : 'pass'));\n\n constructor() {\n // add or remove the error message when the error state changes\n onBooleanChange(\n this.hasError,\n () => this.formField()?.addDescription(this.id()),\n () => this.formField()?.removeDescription(this.id()),\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('id' in changes) {\n this.formField()?.removeDescription(changes['id'].previousValue);\n }\n }\n\n ngOnDestroy(): void {\n this.formField()?.removeDescription(this.id());\n }\n}\n","import { Signal } from '@angular/core';\nimport { syncState } from 'ng-primitives/internal';\nimport {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpFormControl } from './form-control';\n\n/**\n * The state token for the FormControl primitive.\n */\nexport const NgpFormControlStateToken = createStateToken<NgpFormControl>('FormControl');\n\n/**\n * Provides the FormControl state.\n */\nexport const provideFormControlState = createStateProvider(NgpFormControlStateToken);\n\n/**\n * Injects the FormControl state.\n */\nexport const injectFormControlState = createStateInjector(NgpFormControlStateToken);\n\n/**\n * The FormControl state registration function.\n */\nexport const formControlState = createState(NgpFormControlStateToken);\n\ninterface SyncFormControl {\n disabled: Signal<boolean>;\n}\n\n/**\n * Sync the form control state with control state.\n * @param disabled The disabled state of the control.\n */\nexport function syncFormControl({ disabled }: SyncFormControl) {\n const formControl = injectFormControlState();\n syncState(disabled, formControl().disabled);\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectFormFieldState } from '../form-field/form-field-state';\nimport { formControlState, provideFormControlState } from './form-control-state';\n\n/**\n * Typically this primitive would be not be used directly, but instead a more specific form control primitive would be used (e.g. `ngpInput`). All of our form control primitives use `ngpFormControl` internally so they will have the same accessibility features as described below.\n *\n * The `NgpFormControl` directive is used to mark a form control element within a form field. This element will have an `aria-labelledby` attribute set to the ID of the label element within the form field and an `aria-describedby` attribute set to the ID of the description elements within the form field.\n */\n@Directive({\n selector: '[ngpFormControl]',\n exportAs: 'ngpFormControl',\n providers: [provideFormControlState()],\n host: {\n '[id]': 'id()',\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\n '[attr.aria-describedby]': 'ariaDescribedBy()',\n '[attr.data-invalid]': 'formField()?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField()?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField()?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField()?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField()?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField()?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField()?.disabled() || state.disabled() ? \"\" : null',\n },\n})\nexport class NgpFormControl {\n /**\n * The id of the form control. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-form-control'));\n\n /**\n * Whether the form control is disabled by a parent.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpFormControlDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Access the form field that the form control is associated with.\n */\n protected readonly formField = injectFormFieldState({ optional: true });\n /**\n * Determine the aria-labelledby attribute value.\n */\n protected readonly ariaLabelledBy = computed(() => this.formField()?.labels().join(' '));\n\n /**\n * Determine the aria-describedby attribute value.\n */\n protected readonly ariaDescribedBy = computed(() => this.formField()?.descriptions().join(' '));\n\n /**\n * The state of the form control.\n */\n private readonly state = formControlState<NgpFormControl>(this);\n\n constructor() {\n effect(onCleanup => {\n this.formField()?.setFormControl(this.state.id());\n onCleanup(() => this.formField()?.removeFormControl());\n });\n }\n}\n","import { Directive, OnDestroy, contentChild, signal } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { onChange } from 'ng-primitives/utils';\nimport { Subscription } from 'rxjs';\nimport { formFieldState, provideFormFieldState } from './form-field-state';\n\n/**\n * The `NgpFormField` directive is a container for form field elements. Any labels, form controls, or descriptions should be placed within this directive.\n */\n@Directive({\n selector: '[ngpFormField]',\n exportAs: 'ngpFormField',\n providers: [provideFormFieldState()],\n host: {\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\n '[attr.data-valid]': 'valid() ? \"\" : null',\n '[attr.data-touched]': 'touched() ? \"\" : null',\n '[attr.data-pristine]': 'pristine() ? \"\" : null',\n '[attr.data-dirty]': 'dirty() ? \"\" : null',\n '[attr.data-pending]': 'pending() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n})\nexport class NgpFormField implements OnDestroy {\n /**\n * Store the form label.\n * @internal\n */\n readonly labels = signal<string[]>([]);\n\n /**\n * Store the form descriptions.\n * @internal\n */\n readonly descriptions = signal<string[]>([]);\n\n /**\n * Store the id of the associated form control.\n * @internal\n */\n readonly formControl = signal<string | null>(null);\n\n /**\n * Find any NgControl within the form field.\n * @internal\n */\n private readonly ngControl = contentChild(NgControl);\n\n /**\n * Store the validation error messages.\n * @internal\n */\n readonly errors = signal<string[]>([]);\n\n /**\n * Whether the control is pristine.\n * @internal\n */\n readonly pristine = signal<boolean | null>(null);\n\n /**\n * Whether the control is touched.\n * @internal\n */\n readonly touched = signal<boolean | null>(null);\n\n /**\n * Whether the control is dirty.\n * @internal\n */\n readonly dirty = signal<boolean | null>(null);\n\n /**\n * Whether the control is valid.\n */\n readonly valid = signal<boolean | null>(null);\n\n /**\n * Whether the control is invalid.\n * @internal\n */\n readonly invalid = signal<boolean | null>(null);\n\n /**\n * Whether the control is pending.\n * @internal\n */\n readonly pending = signal<boolean | null>(null);\n\n /**\n * Whether the control is disabled.\n * @internal\n */\n readonly disabled = signal<boolean | null>(null);\n\n /**\n * Store the current status subscription.\n */\n private subscription?: Subscription;\n\n /**\n * The form field state.\n */\n protected readonly state = formFieldState<NgpFormField>(this);\n\n constructor() {\n // any time the ngControl changes, setup the subscriptions.\n onChange(this.ngControl, this.setupSubscriptions.bind(this));\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n /**\n * Setup a listener for the form control status.\n * @param control\n */\n private setupSubscriptions(control: NgControl | null | undefined): void {\n // Unsubscribe from the previous subscriptions.\n this.subscription?.unsubscribe();\n\n // set the initial values\n this.updateStatus();\n\n // Listen for changes to the form control.\n this.subscription = control?.valueChanges?.subscribe(this.updateStatus.bind(this));\n }\n\n private updateStatus(): void {\n const control = this.ngControl();\n\n if (!control) {\n return;\n }\n\n this.pristine.set(control.pristine);\n this.touched.set(control.touched);\n this.dirty.set(control.dirty);\n this.valid.set(control.valid);\n this.invalid.set(control.invalid);\n this.pending.set(control.pending);\n this.disabled.set(control.disabled);\n this.errors.set(control?.errors ? Object.keys(control.errors) : []);\n }\n\n /**\n * Register the id of the associated form control.\n * @param id\n * @internal\n */\n setFormControl(id: string): void {\n this.formControl.set(id);\n }\n\n /**\n * Register a label with the form field.\n * @param label\n * @internal\n */\n addLabel(label: string): void {\n this.labels.update(labels => [...labels, label]);\n }\n\n /**\n * Register a description with the form field.\n * @param description\n * @internal\n */\n addDescription(description: string): void {\n this.descriptions.update(descriptions => [...descriptions, description]);\n }\n\n /**\n * Remove the associated form control.\n * @internal\n */\n removeFormControl(): void {\n this.formControl.set(null);\n }\n\n /**\n * Remove a label from the form field.\n * @param label\n * @internal\n */\n removeLabel(label: string): void {\n this.labels.update(labels => labels.filter(l => l !== label));\n }\n\n /**\n * Remove a description from the form field.\n * @param description\n * @internal\n */\n removeDescription(description: string): void {\n this.descriptions.update(descriptions => descriptions.filter(d => d !== description));\n }\n}\n","import {\n computed,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n} from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectFormFieldState } from '../form-field/form-field-state';\n\n/**\n * The `NgpLabel` directive is used to mark a label element within a form field. Preferably, there should use an HTML `<label>` element.\n */\n@Directive({\n selector: '[ngpLabel]',\n exportAs: 'ngpLabel',\n host: {\n '[attr.id]': 'id()',\n '[attr.for]': 'htmlFor()',\n '[attr.data-invalid]': 'formField()?.invalid() ? \"\" : null',\n '[attr.data-valid]': 'formField()?.valid() ? \"\" : null',\n '[attr.data-touched]': 'formField()?.touched() ? \"\" : null',\n '[attr.data-pristine]': 'formField()?.pristine() ? \"\" : null',\n '[attr.data-dirty]': 'formField()?.dirty() ? \"\" : null',\n '[attr.data-pending]': 'formField()?.pending() ? \"\" : null',\n '[attr.data-disabled]': 'formField()?.disabled() ? \"\" : null',\n },\n})\nexport class NgpLabel {\n /**\n * The id of the label. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-label'));\n /**\n * Access the form field that the label is associated with.\n */\n protected readonly formField = injectFormFieldState({ optional: true });\n /**\n * Derive the for attribute value if the label is an HTML label element.\n */\n protected readonly htmlFor = computed(() => this.formField()?.formControl());\n /**\n * Access the element that the label is associated with.\n */\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n /**\n * Determine if the label is an HTML label element.\n */\n protected readonly isLabel = this.elementRef.nativeElement instanceof HTMLLabelElement;\n\n constructor() {\n effect(onCleanup => {\n this.formField()?.addLabel(this.id());\n onCleanup(() => this.formField()?.removeLabel(this.id()));\n });\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n // by default a label will perform a click on the associated form control, however\n // this only works if the associated form control is an input element which may not always\n // be the case, so we prevent the default behavior and handle the click event ourselves.\n // This was inspired by the HeadlessUI approach:\n // https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/components/label/label.tsx#L58\n if (this.isLabel) {\n event.preventDefault();\n }\n\n // to find the associated form control we can lookup via the known id\n const targetId = this.htmlFor();\n\n if (!targetId) {\n return;\n }\n\n const target = document.getElementById(targetId);\n\n if (!target) {\n return;\n }\n\n // if the target is disabled then do nothing\n const disabled = target.getAttribute('disabled');\n const ariaDisabled = target.getAttribute('aria-disabled');\n\n if (disabled === '' || disabled === 'true' || ariaDisabled === 'true') {\n return;\n }\n\n // radio buttons, checkboxes and switches should all be clicked immediately as they require state changes\n if (\n (target instanceof HTMLInputElement &&\n (target.type === 'radio' || target.type === 'checkbox')) ||\n target.role === 'radio' ||\n target.role === 'checkbox' ||\n target.role === 'switch'\n ) {\n target.click();\n }\n\n // Move focus to the element, this allows you to start using keyboard shortcuts since the\n // bound element is now focused.\n target.focus({ preventScroll: true });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|