ng-primitives 0.0.7 → 0.2.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/README.md +14 -4
- package/accordion/accordion-trigger/accordion-trigger.directive.d.ts +2 -1
- package/autofill/README.md +3 -0
- package/autofill/autofill/autofill.directive.d.ts +19 -0
- package/{select/select-button/select-button.token.d.ts → autofill/autofill/autofill.token.d.ts} +4 -4
- package/autofill/index.d.ts +9 -0
- package/avatar/avatar/avatar.directive.d.ts +2 -1
- package/button/README.md +3 -0
- package/button/button/button.directive.d.ts +27 -0
- package/{select/select-option/select-option.token.d.ts → button/button/button.token.d.ts} +4 -4
- package/button/index.d.ts +9 -0
- package/checkbox/checkbox/checkbox.directive.d.ts +11 -61
- package/checkbox/index.d.ts +0 -4
- package/esm2022/a11y/visually-hidden/visually-hidden.directive.mjs +3 -3
- package/esm2022/accordion/accordion/accordion.directive.mjs +5 -4
- package/esm2022/accordion/accordion-content/accordion-content.directive.mjs +5 -6
- package/esm2022/accordion/accordion-item/accordion-item.directive.mjs +5 -5
- package/esm2022/accordion/accordion-trigger/accordion-trigger.directive.mjs +8 -5
- package/esm2022/autofill/autofill/autofill.directive.mjs +71 -0
- package/esm2022/autofill/autofill/autofill.token.mjs +16 -0
- package/esm2022/autofill/index.mjs +10 -0
- package/esm2022/autofill/ng-primitives-autofill.mjs +5 -0
- package/esm2022/avatar/avatar/avatar.directive.mjs +7 -4
- package/esm2022/avatar/avatar-fallback/avatar-fallback.directive.mjs +3 -3
- package/esm2022/avatar/avatar-image/avatar-image.directive.mjs +3 -3
- package/esm2022/button/button/button.directive.mjs +47 -0
- package/esm2022/button/button/button.token.mjs +16 -0
- package/esm2022/button/index.mjs +10 -0
- package/esm2022/button/ng-primitives-button.mjs +5 -0
- package/esm2022/checkbox/checkbox/checkbox.directive.mjs +29 -79
- package/esm2022/checkbox/index.mjs +1 -5
- package/esm2022/file-upload/file-upload/file-upload.directive.mjs +7 -4
- package/esm2022/focus-trap/focus-trap/focus-trap.directive.mjs +262 -0
- package/esm2022/focus-trap/focus-trap/focus-trap.token.mjs +16 -0
- package/esm2022/focus-trap/index.mjs +10 -0
- package/esm2022/focus-trap/ng-primitives-focus-trap.mjs +5 -0
- package/esm2022/form-field/description/description.directive.mjs +14 -14
- package/esm2022/form-field/error/error.directive.mjs +27 -29
- package/esm2022/form-field/form-control/form-control.directive.mjs +22 -16
- package/esm2022/form-field/form-field/form-field.directive.mjs +3 -3
- package/esm2022/form-field/form-field/form-field.token.mjs +3 -7
- package/esm2022/form-field/label/label.directive.mjs +56 -17
- package/esm2022/input/index.mjs +10 -0
- package/esm2022/input/input/input.directive.mjs +55 -0
- package/esm2022/input/input/input.token.mjs +16 -0
- package/esm2022/input/ng-primitives-input.mjs +5 -0
- package/esm2022/interactions/focus/focus.directive.mjs +15 -10
- package/esm2022/interactions/focus-visible/focus-visible.directive.mjs +12 -7
- package/esm2022/interactions/hover/hover.directive.mjs +16 -11
- package/esm2022/interactions/index.mjs +5 -1
- package/esm2022/interactions/move/move.directive.mjs +216 -0
- package/esm2022/interactions/move/move.token.mjs +16 -0
- package/esm2022/interactions/press/press.directive.mjs +118 -0
- package/esm2022/interactions/press/press.token.mjs +16 -0
- package/esm2022/internal/disabled/disabled.mjs +19 -0
- package/esm2022/internal/index.mjs +11 -0
- package/esm2022/internal/ng-primitives-internal.mjs +5 -0
- package/esm2022/internal/orientation/orientation.mjs +19 -0
- package/esm2022/internal/style-injector/style-injector.mjs +81 -0
- package/esm2022/progress/progress/progress.directive.mjs +3 -3
- package/esm2022/progress/progress-indicator/progress-indicator.directive.mjs +3 -3
- package/esm2022/radio/radio-group/radio-group.directive.mjs +14 -54
- package/esm2022/radio/radio-indicator/radio-indicator.directive.mjs +8 -5
- package/esm2022/radio/radio-item/radio-item.directive.mjs +8 -6
- package/esm2022/resize/resize/resize.directive.mjs +3 -3
- package/esm2022/roving-focus/roving-focus-group/roving-focus-group.directive.mjs +14 -9
- package/esm2022/roving-focus/roving-focus-item/roving-focus-item.directive.mjs +3 -3
- package/esm2022/search/index.mjs +10 -0
- package/esm2022/search/ng-primitives-search.mjs +5 -0
- package/esm2022/search/search-field/search-field.directive.mjs +47 -0
- package/esm2022/search/search-field/search-field.token.mjs +16 -0
- package/esm2022/select/index.mjs +1 -7
- package/esm2022/select/select/select.directive.mjs +23 -36
- package/esm2022/select/select/select.token.mjs +1 -1
- package/esm2022/slider/slider/slider.directive.mjs +18 -5
- package/esm2022/slider/slider-range/slider-range.directive.mjs +6 -5
- package/esm2022/slider/slider-thumb/slider-thumb.directive.mjs +7 -4
- package/esm2022/slider/slider-track/slider-track.directive.mjs +8 -4
- package/esm2022/switch/switch/switch.directive.mjs +18 -58
- package/esm2022/switch/switch-thumb/switch-thumb.directive.mjs +9 -6
- package/esm2022/tabs/tab-button/tab-button.directive.mjs +8 -6
- package/esm2022/tabs/tab-list/tab-list.directive.mjs +3 -3
- package/esm2022/tabs/tab-panel/tab-panel.directive.mjs +5 -6
- package/esm2022/tabs/tabset/tabset.directive.mjs +14 -18
- package/esm2022/textarea/index.mjs +10 -0
- package/esm2022/textarea/ng-primitives-textarea.mjs +5 -0
- package/esm2022/textarea/textarea/textarea.directive.mjs +37 -0
- package/esm2022/textarea/textarea/textarea.token.mjs +16 -0
- package/esm2022/toggle/toggle/toggle.directive.mjs +33 -13
- package/esm2022/tooltip/tooltip/tooltip.directive.mjs +3 -3
- package/esm2022/tooltip/tooltip-trigger/tooltip-trigger.directive.mjs +7 -7
- package/esm2022/utils/helpers/focus-manager.mjs +3 -3
- package/esm2022/utils/index.mjs +2 -2
- package/esm2022/utils/signals/async.mjs +11 -17
- package/fesm2022/ng-primitives-a11y.mjs +3 -3
- package/fesm2022/ng-primitives-accordion.mjs +19 -16
- package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/ng-primitives-autofill.mjs +100 -0
- package/fesm2022/ng-primitives-autofill.mjs.map +1 -0
- package/fesm2022/ng-primitives-avatar.mjs +13 -10
- package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/ng-primitives-button.mjs +76 -0
- package/fesm2022/ng-primitives-button.mjs.map +1 -0
- package/fesm2022/ng-primitives-checkbox.mjs +25 -203
- package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-file-upload.mjs +6 -3
- package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
- package/fesm2022/ng-primitives-focus-trap.mjs +291 -0
- package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -0
- package/fesm2022/ng-primitives-form-field.mjs +119 -80
- package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
- package/fesm2022/ng-primitives-input.mjs +84 -0
- package/fesm2022/ng-primitives-input.mjs.map +1 -0
- package/fesm2022/ng-primitives-interactions.mjs +394 -26
- package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
- package/fesm2022/ng-primitives-internal.mjs +132 -0
- package/fesm2022/ng-primitives-internal.mjs.map +1 -0
- package/fesm2022/ng-primitives-progress.mjs +6 -6
- package/fesm2022/ng-primitives-radio.mjs +25 -62
- package/fesm2022/ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/ng-primitives-resize.mjs +3 -3
- package/fesm2022/ng-primitives-roving-focus.mjs +15 -10
- package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/ng-primitives-search.mjs +76 -0
- package/fesm2022/ng-primitives-search.mjs.map +1 -0
- package/fesm2022/ng-primitives-select.mjs +23 -395
- package/fesm2022/ng-primitives-select.mjs.map +1 -1
- package/fesm2022/ng-primitives-slider.mjs +35 -14
- package/fesm2022/ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/ng-primitives-switch.mjs +23 -62
- package/fesm2022/ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/ng-primitives-tabs.mjs +27 -30
- package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/ng-primitives-textarea.mjs +66 -0
- package/fesm2022/ng-primitives-textarea.mjs.map +1 -0
- package/fesm2022/ng-primitives-toggle.mjs +32 -12
- package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/ng-primitives-tooltip.mjs +9 -9
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
- package/fesm2022/ng-primitives-utils.mjs +14 -20
- package/fesm2022/ng-primitives-utils.mjs.map +1 -1
- package/file-upload/file-upload/file-upload.directive.d.ts +2 -1
- package/focus-trap/README.md +3 -0
- package/focus-trap/focus-trap/focus-trap.directive.d.ts +64 -0
- package/{select/select-options/select-options.token.d.ts → focus-trap/focus-trap/focus-trap.token.d.ts} +4 -4
- package/focus-trap/index.d.ts +9 -0
- package/form-field/description/description.directive.d.ts +1 -1
- package/form-field/error/error.directive.d.ts +9 -5
- package/form-field/form-control/form-control.directive.d.ts +7 -3
- package/form-field/form-field/form-field.token.d.ts +1 -1
- package/form-field/label/label.directive.d.ts +3 -2
- package/input/README.md +3 -0
- package/input/index.d.ts +9 -0
- package/input/input/input.directive.d.ts +33 -0
- package/input/input/input.token.d.ts +14 -0
- package/interactions/focus/focus.directive.d.ts +6 -2
- package/interactions/focus-visible/focus-visible.directive.d.ts +5 -1
- package/interactions/hover/hover.directive.d.ts +5 -1
- package/interactions/index.d.ts +4 -0
- package/interactions/move/move.directive.d.ts +126 -0
- package/interactions/move/move.token.d.ts +14 -0
- package/interactions/press/press.directive.d.ts +59 -0
- package/interactions/press/press.token.d.ts +14 -0
- package/internal/README.md +3 -0
- package/internal/disabled/disabled.d.ts +21 -0
- package/internal/index.d.ts +10 -0
- package/internal/orientation/orientation.d.ts +22 -0
- package/internal/style-injector/style-injector.d.ts +36 -0
- package/package.json +49 -7
- package/radio/radio-group/radio-group.directive.d.ts +4 -41
- package/radio/radio-indicator/radio-indicator.directive.d.ts +2 -1
- package/radio/radio-item/radio-item.directive.d.ts +2 -1
- package/roving-focus/roving-focus-group/roving-focus-group.directive.d.ts +7 -2
- package/search/README.md +3 -0
- package/search/index.d.ts +9 -0
- package/search/search-field/search-field.directive.d.ts +15 -0
- package/search/search-field/search-field.token.d.ts +14 -0
- package/select/index.d.ts +0 -6
- package/select/select/select.directive.d.ts +7 -22
- package/select/select/select.token.d.ts +2 -2
- package/slider/slider/slider.directive.d.ts +4 -2
- package/slider/slider-thumb/slider-thumb.directive.d.ts +2 -1
- package/slider/slider-track/slider-track.directive.d.ts +1 -1
- package/switch/switch/switch.directive.d.ts +5 -45
- package/switch/switch-thumb/switch-thumb.directive.d.ts +2 -1
- package/tabs/tab-button/tab-button.directive.d.ts +2 -1
- package/tabs/tabset/tabset.directive.d.ts +3 -9
- package/textarea/README.md +3 -0
- package/textarea/index.d.ts +9 -0
- package/textarea/textarea/textarea.directive.d.ts +20 -0
- package/textarea/textarea/textarea.token.d.ts +14 -0
- package/toggle/toggle/toggle.directive.d.ts +16 -4
- package/utils/index.d.ts +1 -1
- package/utils/signals/async.d.ts +10 -12
- package/checkbox/checkbox-indicator/checkbox-indicator.directive.d.ts +0 -19
- package/checkbox/checkbox-indicator/checkbox-indicator.token.d.ts +0 -15
- package/checkbox/checkbox-input/checkbox-input.directive.d.ts +0 -10
- package/checkbox/checkbox-label/checkbox-label.directive.d.ts +0 -9
- package/esm2022/checkbox/checkbox-indicator/checkbox-indicator.directive.mjs +0 -51
- package/esm2022/checkbox/checkbox-indicator/checkbox-indicator.token.mjs +0 -17
- package/esm2022/checkbox/checkbox-input/checkbox-input.directive.mjs +0 -40
- package/esm2022/checkbox/checkbox-label/checkbox-label.directive.mjs +0 -32
- package/esm2022/select/select-button/select-button.directive.mjs +0 -84
- package/esm2022/select/select-button/select-button.token.mjs +0 -16
- package/esm2022/select/select-option/select-option.directive.mjs +0 -90
- package/esm2022/select/select-option/select-option.token.mjs +0 -16
- package/esm2022/select/select-options/select-options.directive.mjs +0 -157
- package/esm2022/select/select-options/select-options.token.mjs +0 -16
- package/select/select-button/select-button.directive.d.ts +0 -51
- package/select/select-option/select-option.directive.d.ts +0 -57
- package/select/select-options/select-options.directive.d.ts +0 -65
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
import { Directive, computed, effect, input } from '@angular/core';
|
|
9
|
+
import { injectDisabled } from 'ng-primitives/internal';
|
|
9
10
|
import { uniqueId } from 'ng-primitives/utils';
|
|
10
11
|
import { injectFormField } from '../form-field/form-field.token';
|
|
11
12
|
import { NgpFormControlToken } from './form-control.token';
|
|
@@ -15,7 +16,11 @@ export class NgpFormControl {
|
|
|
15
16
|
/**
|
|
16
17
|
* Access the form field that the form control is associated with.
|
|
17
18
|
*/
|
|
18
|
-
this.formField = injectFormField(
|
|
19
|
+
this.formField = injectFormField();
|
|
20
|
+
/**
|
|
21
|
+
* Whether the form control is disabled by a parent.
|
|
22
|
+
*/
|
|
23
|
+
this.disabled = injectDisabled();
|
|
19
24
|
/**
|
|
20
25
|
* The id of the form control. If not provided, a unique id will be generated.
|
|
21
26
|
*/
|
|
@@ -23,20 +28,20 @@ export class NgpFormControl {
|
|
|
23
28
|
/**
|
|
24
29
|
* Determine the aria-labelledby attribute value.
|
|
25
30
|
*/
|
|
26
|
-
this.ariaLabelledBy = computed(() => this.formField
|
|
31
|
+
this.ariaLabelledBy = computed(() => this.formField?.labels().join(' '));
|
|
27
32
|
/**
|
|
28
33
|
* Determine the aria-describedby attribute value.
|
|
29
34
|
*/
|
|
30
|
-
this.ariaDescribedBy = computed(() => this.formField
|
|
35
|
+
this.ariaDescribedBy = computed(() => this.formField?.descriptions().join(' '));
|
|
31
36
|
effect(onCleanup => {
|
|
32
|
-
this.formField
|
|
33
|
-
onCleanup(() => this.formField
|
|
37
|
+
this.formField?.setFormControl(this.id());
|
|
38
|
+
onCleanup(() => this.formField?.removeFormControl());
|
|
34
39
|
}, { allowSignalWrites: true });
|
|
35
40
|
}
|
|
36
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
37
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFormControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", 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()", "attr.data-valid": "formField?.valid()", "attr.data-touched": "formField?.touched()", "attr.data-pristine": "formField?.pristine()", "attr.data-dirty": "formField?.dirty()", "attr.data-pending": "formField?.pending()", "attr.data-disabled": "formField?.disabled() || disabled()" } }, providers: [{ provide: NgpFormControlToken, useExisting: NgpFormControl }], exportAs: ["ngpFormControl"], ngImport: i0 }); }
|
|
38
43
|
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFormControl, decorators: [{
|
|
40
45
|
type: Directive,
|
|
41
46
|
args: [{
|
|
42
47
|
standalone: true,
|
|
@@ -44,16 +49,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
44
49
|
exportAs: 'ngpFormControl',
|
|
45
50
|
providers: [{ provide: NgpFormControlToken, useExisting: NgpFormControl }],
|
|
46
51
|
host: {
|
|
52
|
+
'[id]': 'id()',
|
|
47
53
|
'[attr.aria-labelledby]': 'ariaLabelledBy()',
|
|
48
54
|
'[attr.aria-describedby]': 'ariaDescribedBy()',
|
|
49
|
-
'[attr.data-invalid]': 'formField
|
|
50
|
-
'[attr.data-valid]': 'formField
|
|
51
|
-
'[attr.data-touched]': 'formField
|
|
52
|
-
'[attr.data-pristine]': 'formField
|
|
53
|
-
'[attr.data-dirty]': 'formField
|
|
54
|
-
'[attr.data-pending]': 'formField
|
|
55
|
-
'[attr.data-disabled]': 'formField
|
|
55
|
+
'[attr.data-invalid]': 'formField?.invalid()',
|
|
56
|
+
'[attr.data-valid]': 'formField?.valid()',
|
|
57
|
+
'[attr.data-touched]': 'formField?.touched()',
|
|
58
|
+
'[attr.data-pristine]': 'formField?.pristine()',
|
|
59
|
+
'[attr.data-dirty]': 'formField?.dirty()',
|
|
60
|
+
'[attr.data-pending]': 'formField?.pending()',
|
|
61
|
+
'[attr.data-disabled]': 'formField?.disabled() || disabled()',
|
|
56
62
|
},
|
|
57
63
|
}]
|
|
58
64
|
}], ctorParameters: () => [] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvZm9ybS1maWVsZC9zcmMvZm9ybS1jb250cm9sL2Zvcm0tY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFvQjNELE1BQU0sT0FBTyxjQUFjO0lBMEJ6QjtRQXpCQTs7V0FFRztRQUNnQixjQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFFakQ7O1dBRUc7UUFDZ0IsYUFBUSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRS9DOztXQUVHO1FBQ00sT0FBRSxHQUFHLEtBQUssQ0FBUyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBRTFEOztXQUVHO1FBQ2dCLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdkY7O1dBRUc7UUFDZ0Isb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUc1RixNQUFNLENBQ0osU0FBUyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDOzhHQWxDVSxjQUFjO2tHQUFkLGNBQWMsaW9CQWRkLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDOzsyRkFjL0QsY0FBYztrQkFsQjFCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDMUUsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxNQUFNO3dCQUNkLHdCQUF3QixFQUFFLGtCQUFrQjt3QkFDNUMseUJBQXlCLEVBQUUsbUJBQW1CO3dCQUM5QyxxQkFBcUIsRUFBRSxzQkFBc0I7d0JBQzdDLG1CQUFtQixFQUFFLG9CQUFvQjt3QkFDekMscUJBQXFCLEVBQUUsc0JBQXNCO3dCQUM3QyxzQkFBc0IsRUFBRSx1QkFBdUI7d0JBQy9DLG1CQUFtQixFQUFFLG9CQUFvQjt3QkFDekMscUJBQXFCLEVBQUUsc0JBQXNCO3dCQUM3QyxzQkFBc0IsRUFBRSxxQ0FBcUM7cUJBQzlEO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmltcG9ydCB7IERpcmVjdGl2ZSwgY29tcHV0ZWQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdERpc2FibGVkIH0gZnJvbSAnbmctcHJpbWl0aXZlcy9pbnRlcm5hbCc7XG5pbXBvcnQgeyB1bmlxdWVJZCB9IGZyb20gJ25nLXByaW1pdGl2ZXMvdXRpbHMnO1xuaW1wb3J0IHsgaW5qZWN0Rm9ybUZpZWxkIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLnRva2VuJztcbmltcG9ydCB7IE5ncEZvcm1Db250cm9sVG9rZW4gfSBmcm9tICcuL2Zvcm0tY29udHJvbC50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tuZ3BGb3JtQ29udHJvbF0nLFxuICBleHBvcnRBczogJ25ncEZvcm1Db250cm9sJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOZ3BGb3JtQ29udHJvbFRva2VuLCB1c2VFeGlzdGluZzogTmdwRm9ybUNvbnRyb2wgfV0sXG4gIGhvc3Q6IHtcbiAgICAnW2lkXSc6ICdpZCgpJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdhcmlhTGFiZWxsZWRCeSgpJyxcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnYXJpYURlc2NyaWJlZEJ5KCknLFxuICAgICdbYXR0ci5kYXRhLWludmFsaWRdJzogJ2Zvcm1GaWVsZD8uaW52YWxpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS12YWxpZF0nOiAnZm9ybUZpZWxkPy52YWxpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS10b3VjaGVkXSc6ICdmb3JtRmllbGQ/LnRvdWNoZWQoKScsXG4gICAgJ1thdHRyLmRhdGEtcHJpc3RpbmVdJzogJ2Zvcm1GaWVsZD8ucHJpc3RpbmUoKScsXG4gICAgJ1thdHRyLmRhdGEtZGlydHldJzogJ2Zvcm1GaWVsZD8uZGlydHkoKScsXG4gICAgJ1thdHRyLmRhdGEtcGVuZGluZ10nOiAnZm9ybUZpZWxkPy5wZW5kaW5nKCknLFxuICAgICdbYXR0ci5kYXRhLWRpc2FibGVkXSc6ICdmb3JtRmllbGQ/LmRpc2FibGVkKCkgfHwgZGlzYWJsZWQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncEZvcm1Db250cm9sIHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZm9ybSBmaWVsZCB0aGF0IHRoZSBmb3JtIGNvbnRyb2wgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZvcm1GaWVsZCA9IGluamVjdEZvcm1GaWVsZCgpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb3JtIGNvbnRyb2wgaXMgZGlzYWJsZWQgYnkgYSBwYXJlbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbmplY3REaXNhYmxlZCgpO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGZvcm0gY29udHJvbC4gSWYgbm90IHByb3ZpZGVkLCBhIHVuaXF1ZSBpZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nPih1bmlxdWVJZCgnbmdwLWZvcm0tY29udHJvbCcpKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFyaWFMYWJlbGxlZEJ5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtRmllbGQ/LmxhYmVscygpLmpvaW4oJyAnKSk7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXJpYURlc2NyaWJlZEJ5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtRmllbGQ/LmRlc2NyaXB0aW9ucygpLmpvaW4oJyAnKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgb25DbGVhbnVwID0+IHtcbiAgICAgICAgdGhpcy5mb3JtRmllbGQ/LnNldEZvcm1Db250cm9sKHRoaXMuaWQoKSk7XG4gICAgICAgIG9uQ2xlYW51cCgoKSA9PiB0aGlzLmZvcm1GaWVsZD8ucmVtb3ZlRm9ybUNvbnRyb2woKSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -150,10 +150,10 @@ export class NgpFormField {
|
|
|
150
150
|
removeDescription(description) {
|
|
151
151
|
this.descriptions.update(descriptions => descriptions.filter(d => d !== description));
|
|
152
152
|
}
|
|
153
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
154
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.
|
|
153
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFormField, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
154
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.1.1", type: NgpFormField, isStandalone: true, selector: "[ngpFormField]", host: { properties: { "attr.data-invalid": "invalid()", "attr.data-valid": "valid()", "attr.data-touched": "touched()", "attr.data-pristine": "pristine()", "attr.data-dirty": "dirty()", "attr.data-pending": "pending()", "attr.data-disabled": "disabled()" } }, providers: [{ provide: NgpFormFieldToken, useExisting: NgpFormField }], queries: [{ propertyName: "ngControl", first: true, predicate: NgControl, descendants: true, isSignal: true }], exportAs: ["ngpFormField"], ngImport: i0 }); }
|
|
155
155
|
}
|
|
156
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFormField, decorators: [{
|
|
157
157
|
type: Directive,
|
|
158
158
|
args: [{
|
|
159
159
|
standalone: true,
|
|
@@ -11,11 +11,7 @@ export const NgpFormFieldToken = new InjectionToken('NgpFormFieldToken');
|
|
|
11
11
|
* Inject the FormField directive instance
|
|
12
12
|
* @param primitive
|
|
13
13
|
*/
|
|
14
|
-
export function injectFormField(
|
|
15
|
-
|
|
16
|
-
if (!formField) {
|
|
17
|
-
throw new Error(`The ${primitive} directive must be used within an NgpFormField.`);
|
|
18
|
-
}
|
|
19
|
-
return formField;
|
|
14
|
+
export function injectFormField() {
|
|
15
|
+
return inject(NgpFormFieldToken, { optional: true });
|
|
20
16
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvZm9ybS1maWVsZC9zcmMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFlLG1CQUFtQixDQUFDLENBQUM7QUFFdkY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGVBQWU7SUFDN0IsT0FBTyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmdwRm9ybUZpZWxkIH0gZnJvbSAnLi9mb3JtLWZpZWxkLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBOZ3BGb3JtRmllbGRUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3BGb3JtRmllbGQ+KCdOZ3BGb3JtRmllbGRUb2tlbicpO1xuXG4vKipcbiAqIEluamVjdCB0aGUgRm9ybUZpZWxkIGRpcmVjdGl2ZSBpbnN0YW5jZVxuICogQHBhcmFtIHByaW1pdGl2ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Rm9ybUZpZWxkKCk6IE5ncEZvcm1GaWVsZCB8IG51bGwge1xuICByZXR1cm4gaW5qZWN0KE5ncEZvcm1GaWVsZFRva2VuLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xufVxuIl19
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
|
-
import { Directive, ElementRef, computed, effect, inject, input } from '@angular/core';
|
|
8
|
+
import { Directive, ElementRef, HostListener, computed, effect, inject, input, } from '@angular/core';
|
|
9
9
|
import { uniqueId } from 'ng-primitives/utils';
|
|
10
10
|
import { injectFormField } from '../form-field/form-field.token';
|
|
11
11
|
import { NgpLabelToken } from './label.token';
|
|
@@ -19,7 +19,7 @@ export class NgpLabel {
|
|
|
19
19
|
/**
|
|
20
20
|
* Access the form field that the label is associated with.
|
|
21
21
|
*/
|
|
22
|
-
this.formField = injectFormField(
|
|
22
|
+
this.formField = injectFormField();
|
|
23
23
|
/**
|
|
24
24
|
* The id of the label. If not provided, a unique id will be generated.
|
|
25
25
|
*/
|
|
@@ -31,16 +31,52 @@ export class NgpLabel {
|
|
|
31
31
|
/**
|
|
32
32
|
* Derive the for attribute value if the label is an HTML label element.
|
|
33
33
|
*/
|
|
34
|
-
this.htmlFor = computed(() =>
|
|
34
|
+
this.htmlFor = computed(() => this.formField?.formControl());
|
|
35
35
|
effect(onCleanup => {
|
|
36
|
-
this.formField
|
|
37
|
-
onCleanup(() => this.formField
|
|
36
|
+
this.formField?.addLabel(this.id());
|
|
37
|
+
onCleanup(() => this.formField?.removeLabel(this.id()));
|
|
38
38
|
}, { allowSignalWrites: true });
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
onClick(event) {
|
|
41
|
+
// by default a label will perform a click on the associated form control, however
|
|
42
|
+
// this only works if the associated form control is an input element which may not always
|
|
43
|
+
// be the case, so we prevent the default behavior and handle the click event ourselves.
|
|
44
|
+
// This was inspired by the HeadlessUI approach:
|
|
45
|
+
// https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/components/label/label.tsx#L58
|
|
46
|
+
if (this.isLabel) {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
}
|
|
49
|
+
// to find the associated form control we can lookup via the known id
|
|
50
|
+
const targetId = this.htmlFor();
|
|
51
|
+
if (!targetId) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const target = document.getElementById(targetId);
|
|
55
|
+
if (!target) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// if the target is disabled then do nothing
|
|
59
|
+
const disabled = target.getAttribute('disabled');
|
|
60
|
+
const ariaDisabled = target.getAttribute('aria-disabled');
|
|
61
|
+
if (disabled === '' || disabled === 'true' || ariaDisabled === 'true') {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// radio buttons, checkboxes and switches should all be clicked immediately as they require state changes
|
|
65
|
+
if ((target instanceof HTMLInputElement &&
|
|
66
|
+
(target.type === 'radio' || target.type === 'checkbox')) ||
|
|
67
|
+
target.role === 'radio' ||
|
|
68
|
+
target.role === 'checkbox' ||
|
|
69
|
+
target.role === 'switch') {
|
|
70
|
+
target.click();
|
|
71
|
+
}
|
|
72
|
+
// Move focus to the element, this allows you to start using keyboard shortcuts since the
|
|
73
|
+
// bound element is now focused.
|
|
74
|
+
target.focus({ preventScroll: true });
|
|
75
|
+
}
|
|
76
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
77
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", 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()", "attr.data-valid": "formField?.valid()", "attr.data-touched": "formField?.touched()", "attr.data-pristine": "formField?.pristine()", "attr.data-dirty": "formField?.dirty()", "attr.data-pending": "formField?.pending()", "attr.data-disabled": "formField?.disabled()" } }, providers: [{ provide: NgpLabelToken, useExisting: NgpLabel }], exportAs: ["ngpLabel"], ngImport: i0 }); }
|
|
42
78
|
}
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpLabel, decorators: [{
|
|
44
80
|
type: Directive,
|
|
45
81
|
args: [{
|
|
46
82
|
standalone: true,
|
|
@@ -50,14 +86,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
50
86
|
host: {
|
|
51
87
|
'[attr.id]': 'id()',
|
|
52
88
|
'[attr.for]': 'htmlFor()',
|
|
53
|
-
'[attr.data-invalid]': 'formField
|
|
54
|
-
'[attr.data-valid]': 'formField
|
|
55
|
-
'[attr.data-touched]': 'formField
|
|
56
|
-
'[attr.data-pristine]': 'formField
|
|
57
|
-
'[attr.data-dirty]': 'formField
|
|
58
|
-
'[attr.data-pending]': 'formField
|
|
59
|
-
'[attr.data-disabled]': 'formField
|
|
89
|
+
'[attr.data-invalid]': 'formField?.invalid()',
|
|
90
|
+
'[attr.data-valid]': 'formField?.valid()',
|
|
91
|
+
'[attr.data-touched]': 'formField?.touched()',
|
|
92
|
+
'[attr.data-pristine]': 'formField?.pristine()',
|
|
93
|
+
'[attr.data-dirty]': 'formField?.dirty()',
|
|
94
|
+
'[attr.data-pending]': 'formField?.pending()',
|
|
95
|
+
'[attr.data-disabled]': 'formField?.disabled()',
|
|
60
96
|
},
|
|
61
97
|
}]
|
|
62
|
-
}], ctorParameters: () => []
|
|
63
|
-
|
|
98
|
+
}], ctorParameters: () => [], propDecorators: { onClick: [{
|
|
99
|
+
type: HostListener,
|
|
100
|
+
args: ['click', ['$event']]
|
|
101
|
+
}] } });
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9mb3JtLWZpZWxkL3NyYy9sYWJlbC9sYWJlbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBbUI5QyxNQUFNLE9BQU8sUUFBUTtJQTBCbkI7UUF6QkE7O1dBRUc7UUFDYyxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUUxRTs7V0FFRztRQUNnQixjQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFFakQ7O1dBRUc7UUFDTSxPQUFFLEdBQUcsS0FBSyxDQUFTLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRW5EOztXQUVHO1FBQ2dCLFlBQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsWUFBWSxnQkFBZ0IsQ0FBQztRQUV2Rjs7V0FFRztRQUNnQixZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUd6RSxNQUFNLENBQ0osU0FBUyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFHUyxPQUFPLENBQUMsS0FBaUI7UUFDakMsa0ZBQWtGO1FBQ2xGLDBGQUEwRjtRQUMxRix3RkFBd0Y7UUFDeEYsZ0RBQWdEO1FBQ2hELHVIQUF1SDtRQUN2SCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELHFFQUFxRTtRQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsNENBQTRDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxRCxJQUFJLFFBQVEsS0FBSyxFQUFFLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxZQUFZLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdEUsT0FBTztRQUNULENBQUM7UUFFRCx5R0FBeUc7UUFDekcsSUFDRSxDQUFDLE1BQU0sWUFBWSxnQkFBZ0I7WUFDakMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTztZQUN2QixNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVU7WUFDMUIsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQ3hCLENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELHlGQUF5RjtRQUN6RixnQ0FBZ0M7UUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7OEdBbEZVLFFBQVE7a0dBQVIsUUFBUSw0bEJBYlIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDOzsyRkFhbkQsUUFBUTtrQkFqQnBCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsVUFBVSxFQUFFLENBQUM7b0JBQzlELElBQUksRUFBRTt3QkFDSixXQUFXLEVBQUUsTUFBTTt3QkFDbkIsWUFBWSxFQUFFLFdBQVc7d0JBQ3pCLHFCQUFxQixFQUFFLHNCQUFzQjt3QkFDN0MsbUJBQW1CLEVBQUUsb0JBQW9CO3dCQUN6QyxxQkFBcUIsRUFBRSxzQkFBc0I7d0JBQzdDLHNCQUFzQixFQUFFLHVCQUF1Qjt3QkFDL0MsbUJBQW1CLEVBQUUsb0JBQW9CO3dCQUN6QyxxQkFBcUIsRUFBRSxzQkFBc0I7d0JBQzdDLHNCQUFzQixFQUFFLHVCQUF1QjtxQkFDaEQ7aUJBQ0Y7d0RBc0NXLE9BQU87c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHVuaXF1ZUlkIH0gZnJvbSAnbmctcHJpbWl0aXZlcy91dGlscyc7XG5pbXBvcnQgeyBpbmplY3RGb3JtRmllbGQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQudG9rZW4nO1xuaW1wb3J0IHsgTmdwTGFiZWxUb2tlbiB9IGZyb20gJy4vbGFiZWwudG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbbmdwTGFiZWxdJyxcbiAgZXhwb3J0QXM6ICduZ3BMYWJlbCcsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmdwTGFiZWxUb2tlbiwgdXNlRXhpc3Rpbmc6IE5ncExhYmVsIH1dLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCgpJyxcbiAgICAnW2F0dHIuZm9yXSc6ICdodG1sRm9yKCknLFxuICAgICdbYXR0ci5kYXRhLWludmFsaWRdJzogJ2Zvcm1GaWVsZD8uaW52YWxpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS12YWxpZF0nOiAnZm9ybUZpZWxkPy52YWxpZCgpJyxcbiAgICAnW2F0dHIuZGF0YS10b3VjaGVkXSc6ICdmb3JtRmllbGQ/LnRvdWNoZWQoKScsXG4gICAgJ1thdHRyLmRhdGEtcHJpc3RpbmVdJzogJ2Zvcm1GaWVsZD8ucHJpc3RpbmUoKScsXG4gICAgJ1thdHRyLmRhdGEtZGlydHldJzogJ2Zvcm1GaWVsZD8uZGlydHkoKScsXG4gICAgJ1thdHRyLmRhdGEtcGVuZGluZ10nOiAnZm9ybUZpZWxkPy5wZW5kaW5nKCknLFxuICAgICdbYXR0ci5kYXRhLWRpc2FibGVkXSc6ICdmb3JtRmllbGQ/LmRpc2FibGVkKCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ3BMYWJlbCB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGVsZW1lbnQgdGhhdCB0aGUgbGFiZWwgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAvKipcbiAgICogQWNjZXNzIHRoZSBmb3JtIGZpZWxkIHRoYXQgdGhlIGxhYmVsIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBmb3JtRmllbGQgPSBpbmplY3RGb3JtRmllbGQoKTtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBsYWJlbC4gSWYgbm90IHByb3ZpZGVkLCBhIHVuaXF1ZSBpZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nPih1bmlxdWVJZCgnbmdwLWxhYmVsJykpO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGxhYmVsIGlzIGFuIEhUTUwgbGFiZWwgZWxlbWVudC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBpc0xhYmVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBEZXJpdmUgdGhlIGZvciBhdHRyaWJ1dGUgdmFsdWUgaWYgdGhlIGxhYmVsIGlzIGFuIEhUTUwgbGFiZWwgZWxlbWVudC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBodG1sRm9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtRmllbGQ/LmZvcm1Db250cm9sKCkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgIG9uQ2xlYW51cCA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkPy5hZGRMYWJlbCh0aGlzLmlkKCkpO1xuICAgICAgICBvbkNsZWFudXAoKCkgPT4gdGhpcy5mb3JtRmllbGQ/LnJlbW92ZUxhYmVsKHRoaXMuaWQoKSkpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIGJ5IGRlZmF1bHQgYSBsYWJlbCB3aWxsIHBlcmZvcm0gYSBjbGljayBvbiB0aGUgYXNzb2NpYXRlZCBmb3JtIGNvbnRyb2wsIGhvd2V2ZXJcbiAgICAvLyB0aGlzIG9ubHkgd29ya3MgaWYgdGhlIGFzc29jaWF0ZWQgZm9ybSBjb250cm9sIGlzIGFuIGlucHV0IGVsZW1lbnQgd2hpY2ggbWF5IG5vdCBhbHdheXNcbiAgICAvLyBiZSB0aGUgY2FzZSwgc28gd2UgcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmQgaGFuZGxlIHRoZSBjbGljayBldmVudCBvdXJzZWx2ZXMuXG4gICAgLy8gVGhpcyB3YXMgaW5zcGlyZWQgYnkgdGhlIEhlYWRsZXNzVUkgYXBwcm9hY2g6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RhaWx3aW5kbGFicy9oZWFkbGVzc3VpL2Jsb2IvbWFpbi9wYWNrYWdlcy8lNDBoZWFkbGVzc3VpLXJlYWN0L3NyYy9jb21wb25lbnRzL2xhYmVsL2xhYmVsLnRzeCNMNThcbiAgICBpZiAodGhpcy5pc0xhYmVsKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIHRvIGZpbmQgdGhlIGFzc29jaWF0ZWQgZm9ybSBjb250cm9sIHdlIGNhbiBsb29rdXAgdmlhIHRoZSBrbm93biBpZFxuICAgIGNvbnN0IHRhcmdldElkID0gdGhpcy5odG1sRm9yKCk7XG5cbiAgICBpZiAoIXRhcmdldElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGlzIGRpc2FibGVkIHRoZW4gZG8gbm90aGluZ1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICBjb25zdCBhcmlhRGlzYWJsZWQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG5cbiAgICBpZiAoZGlzYWJsZWQgPT09ICcnIHx8IGRpc2FibGVkID09PSAndHJ1ZScgfHwgYXJpYURpc2FibGVkID09PSAndHJ1ZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByYWRpbyBidXR0b25zLCBjaGVja2JveGVzIGFuZCBzd2l0Y2hlcyBzaG91bGQgYWxsIGJlIGNsaWNrZWQgaW1tZWRpYXRlbHkgYXMgdGhleSByZXF1aXJlIHN0YXRlIGNoYW5nZXNcbiAgICBpZiAoXG4gICAgICAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJlxuICAgICAgICAodGFyZ2V0LnR5cGUgPT09ICdyYWRpbycgfHwgdGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpKSB8fFxuICAgICAgdGFyZ2V0LnJvbGUgPT09ICdyYWRpbycgfHxcbiAgICAgIHRhcmdldC5yb2xlID09PSAnY2hlY2tib3gnIHx8XG4gICAgICB0YXJnZXQucm9sZSA9PT0gJ3N3aXRjaCdcbiAgICApIHtcbiAgICAgIHRhcmdldC5jbGljaygpO1xuICAgIH1cblxuICAgIC8vIE1vdmUgZm9jdXMgdG8gdGhlIGVsZW1lbnQsIHRoaXMgYWxsb3dzIHlvdSB0byBzdGFydCB1c2luZyBrZXlib2FyZCBzaG9ydGN1dHMgc2luY2UgdGhlXG4gICAgLy8gYm91bmQgZWxlbWVudCBpcyBub3cgZm9jdXNlZC5cbiAgICB0YXJnZXQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
export { NgpInput } from './input/input.directive';
|
|
9
|
+
export { NgpInputToken } from './input/input.token';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2lucHV0L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuZXhwb3J0IHsgTmdwSW5wdXQgfSBmcm9tICcuL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBOZ3BJbnB1dFRva2VuIH0gZnJvbSAnLi9pbnB1dC9pbnB1dC50b2tlbic7XG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { booleanAttribute, Directive, ElementRef, HostListener, inject, input, signal, } from '@angular/core';
|
|
2
|
+
import { NgpAutofill } from 'ng-primitives/autofill';
|
|
3
|
+
import { NgpFormControl } from 'ng-primitives/form-field';
|
|
4
|
+
import { NgpFocus, NgpHover, NgpPress } from 'ng-primitives/interactions';
|
|
5
|
+
import { NgpDisabledToken } from 'ng-primitives/internal';
|
|
6
|
+
import { NgpInputToken } from './input.token';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "ng-primitives/form-field";
|
|
9
|
+
import * as i2 from "ng-primitives/interactions";
|
|
10
|
+
import * as i3 from "ng-primitives/autofill";
|
|
11
|
+
export class NgpInput {
|
|
12
|
+
constructor() {
|
|
13
|
+
/**
|
|
14
|
+
* Access the underlying input element.
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
this.element = inject(ElementRef);
|
|
18
|
+
/**
|
|
19
|
+
* Whether the element is disabled.
|
|
20
|
+
*/
|
|
21
|
+
this.disabled = input(false, {
|
|
22
|
+
transform: booleanAttribute,
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Sync the input value.
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
this.value = signal(this.element.nativeElement.value);
|
|
29
|
+
}
|
|
30
|
+
valueDidChange() {
|
|
31
|
+
this.value.set(this.element.nativeElement.value);
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
34
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", type: NgpInput, isStandalone: true, selector: "input[ngpInput]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "valueDidChange()" } }, providers: [
|
|
35
|
+
{ provide: NgpInputToken, useExisting: NgpInput },
|
|
36
|
+
{ provide: NgpDisabledToken, useExisting: NgpInput },
|
|
37
|
+
], exportAs: ["ngpInput"], hostDirectives: [{ directive: i1.NgpFormControl }, { directive: i2.NgpHover }, { directive: i2.NgpFocus }, { directive: i2.NgpPress }, { directive: i3.NgpAutofill }], ngImport: i0 }); }
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpInput, decorators: [{
|
|
40
|
+
type: Directive,
|
|
41
|
+
args: [{
|
|
42
|
+
standalone: true,
|
|
43
|
+
selector: 'input[ngpInput]',
|
|
44
|
+
exportAs: 'ngpInput',
|
|
45
|
+
providers: [
|
|
46
|
+
{ provide: NgpInputToken, useExisting: NgpInput },
|
|
47
|
+
{ provide: NgpDisabledToken, useExisting: NgpInput },
|
|
48
|
+
],
|
|
49
|
+
hostDirectives: [NgpFormControl, NgpHover, NgpFocus, NgpPress, NgpAutofill],
|
|
50
|
+
}]
|
|
51
|
+
}], propDecorators: { valueDidChange: [{
|
|
52
|
+
type: HostListener,
|
|
53
|
+
args: ['input']
|
|
54
|
+
}] } });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9pbnB1dC9zcmMvaW5wdXQvaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRSxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFZOUMsTUFBTSxPQUFPLFFBQVE7SUFWckI7UUFXRTs7O1dBR0c7UUFDTSxZQUFPLEdBQUcsTUFBTSxDQUErQixVQUFVLENBQUMsQ0FBQztRQUVwRTs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQXdCLEtBQUssRUFBRTtZQUN0RCxTQUFTLEVBQUUsZ0JBQWdCO1NBQzVCLENBQUMsQ0FBQztRQUVIOzs7V0FHRztRQUNNLFVBQUssR0FBRyxNQUFNLENBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7S0FNbkU7SUFIVyxjQUFjO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7OEdBdkJVLFFBQVE7a0dBQVIsUUFBUSxpUUFOUjtZQUNULEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFO1lBQ2pELEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUU7U0FDckQ7OzJGQUdVLFFBQVE7a0JBVnBCLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFFBQVEsRUFBRSxVQUFVO29CQUNwQixTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsVUFBVSxFQUFFO3dCQUNqRCxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLFVBQVUsRUFBRTtxQkFDckQ7b0JBQ0QsY0FBYyxFQUFFLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztpQkFDNUU7OEJBc0JXLGNBQWM7c0JBRHZCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZLU5EIDQuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3BBdXRvZmlsbCB9IGZyb20gJ25nLXByaW1pdGl2ZXMvYXV0b2ZpbGwnO1xuaW1wb3J0IHsgTmdwRm9ybUNvbnRyb2wgfSBmcm9tICduZy1wcmltaXRpdmVzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTmdwRm9jdXMsIE5ncEhvdmVyLCBOZ3BQcmVzcyB9IGZyb20gJ25nLXByaW1pdGl2ZXMvaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IE5ncENhbkRpc2FibGUsIE5ncERpc2FibGVkVG9rZW4gfSBmcm9tICduZy1wcmltaXRpdmVzL2ludGVybmFsJztcbmltcG9ydCB7IE5ncElucHV0VG9rZW4gfSBmcm9tICcuL2lucHV0LnRva2VuJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaW5wdXRbbmdwSW5wdXRdJyxcbiAgZXhwb3J0QXM6ICduZ3BJbnB1dCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTmdwSW5wdXRUb2tlbiwgdXNlRXhpc3Rpbmc6IE5ncElucHV0IH0sXG4gICAgeyBwcm92aWRlOiBOZ3BEaXNhYmxlZFRva2VuLCB1c2VFeGlzdGluZzogTmdwSW5wdXQgfSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtOZ3BGb3JtQ29udHJvbCwgTmdwSG92ZXIsIE5ncEZvY3VzLCBOZ3BQcmVzcywgTmdwQXV0b2ZpbGxdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3BJbnB1dCBpbXBsZW1lbnRzIE5ncENhbkRpc2FibGUge1xuICAvKipcbiAgICogQWNjZXNzIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwge1xuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFN5bmMgdGhlIGlucHV0IHZhbHVlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gc2lnbmFsPHN0cmluZz4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgcHJvdGVjdGVkIHZhbHVlRGlkQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUuc2V0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2024 Angular Primitives.
|
|
3
|
+
* https://github.com/ng-primitives/ng-primitives
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the CC BY-ND 4.0 license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
9
|
+
export const NgpInputToken = new InjectionToken('NgpInputToken');
|
|
10
|
+
/**
|
|
11
|
+
* Inject the Input directive instance
|
|
12
|
+
*/
|
|
13
|
+
export function injectInput() {
|
|
14
|
+
return inject(NgpInputToken);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2lucHV0L3NyYy9pbnB1dC9pbnB1dC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQVcsZUFBZSxDQUFDLENBQUM7QUFFM0U7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVztJQUN6QixPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgwqkgMjAyNCBBbmd1bGFyIFByaW1pdGl2ZXMuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmctcHJpbWl0aXZlcy9uZy1wcmltaXRpdmVzXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0MgQlktTkQgNC4wIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmdwSW5wdXQgfSBmcm9tICcuL2lucHV0LmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBOZ3BJbnB1dFRva2VuID0gbmV3IEluamVjdGlvblRva2VuPE5ncElucHV0PignTmdwSW5wdXRUb2tlbicpO1xuXG4vKipcbiAqIEluamVjdCB0aGUgSW5wdXQgZGlyZWN0aXZlIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnB1dCgpOiBOZ3BJbnB1dCB7XG4gIHJldHVybiBpbmplY3QoTmdwSW5wdXRUb2tlbik7XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcHJpbWl0aXZlcy1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXByaW1pdGl2ZXMvaW5wdXQvc3JjL25nLXByaW1pdGl2ZXMtaW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Directive, HostListener, booleanAttribute, input, output, signal } from '@angular/core';
|
|
2
|
+
import { injectDisabled } from 'ng-primitives/internal';
|
|
2
3
|
import { NgpFocusToken } from './focus.token';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
/**
|
|
@@ -18,23 +19,27 @@ export class NgpFocus {
|
|
|
18
19
|
alias: 'ngpFocusDisabled',
|
|
19
20
|
transform: booleanAttribute,
|
|
20
21
|
});
|
|
22
|
+
/**
|
|
23
|
+
* Access the disabled state from any parent.
|
|
24
|
+
*/
|
|
25
|
+
this.isDisabled = injectDisabled(this.disabled);
|
|
21
26
|
/**
|
|
22
27
|
* Emit when the focus state changes.
|
|
23
28
|
*/
|
|
24
|
-
this.
|
|
29
|
+
this.focus = output({ alias: 'ngpFocus' });
|
|
25
30
|
}
|
|
26
31
|
/**
|
|
27
32
|
* Listen for focus events.
|
|
28
33
|
* @param event
|
|
29
34
|
*/
|
|
30
35
|
onFocus(event) {
|
|
31
|
-
if (this.
|
|
36
|
+
if (this.isDisabled()) {
|
|
32
37
|
return;
|
|
33
38
|
}
|
|
34
39
|
const ownerDocument = event.target?.ownerDocument ?? document;
|
|
35
40
|
// ensure this element is still focused
|
|
36
41
|
if (ownerDocument.activeElement === event.target && event.currentTarget === event.target) {
|
|
37
|
-
this.
|
|
42
|
+
this.focus.emit(true);
|
|
38
43
|
this.isFocused.set(true);
|
|
39
44
|
}
|
|
40
45
|
}
|
|
@@ -43,18 +48,18 @@ export class NgpFocus {
|
|
|
43
48
|
* @param event
|
|
44
49
|
*/
|
|
45
50
|
onBlur(event) {
|
|
46
|
-
if (this.
|
|
51
|
+
if (this.isDisabled()) {
|
|
47
52
|
return;
|
|
48
53
|
}
|
|
49
54
|
if (event.currentTarget === event.target) {
|
|
50
|
-
this.
|
|
55
|
+
this.focus.emit(false);
|
|
51
56
|
this.isFocused.set(false);
|
|
52
57
|
}
|
|
53
58
|
}
|
|
54
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
55
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFocus, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
60
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", type: NgpFocus, isStandalone: true, selector: "[ngpFocus]", inputs: { disabled: { classPropertyName: "disabled", publicName: "ngpFocusDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { focus: "ngpFocus" }, host: { listeners: { "focus": "onFocus($event)", "blur": "onBlur($event)" }, properties: { "attr.data-focus": "isFocused()" } }, providers: [{ provide: NgpFocusToken, useExisting: NgpFocus }], exportAs: ["ngpFocus"], ngImport: i0 }); }
|
|
56
61
|
}
|
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFocus, decorators: [{
|
|
58
63
|
type: Directive,
|
|
59
64
|
args: [{
|
|
60
65
|
standalone: true,
|
|
@@ -62,7 +67,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
62
67
|
exportAs: 'ngpFocus',
|
|
63
68
|
providers: [{ provide: NgpFocusToken, useExisting: NgpFocus }],
|
|
64
69
|
host: {
|
|
65
|
-
'[attr.data-
|
|
70
|
+
'[attr.data-focus]': 'isFocused()',
|
|
66
71
|
},
|
|
67
72
|
}]
|
|
68
73
|
}], propDecorators: { onFocus: [{
|
|
@@ -72,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
72
77
|
type: HostListener,
|
|
73
78
|
args: ['blur', ['$event']]
|
|
74
79
|
}] } });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctcHJpbWl0aXZlcy9pbnRlcmFjdGlvbnMvc3JjL2ZvY3VzL2ZvY3VzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFOUM7OztHQUdHO0FBVUgsTUFBTSxPQUFPLFFBQVE7SUFUckI7UUFVRTs7V0FFRztRQUNPLGNBQVMsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFN0M7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUF3QixLQUFLLEVBQUU7WUFDdEQsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixTQUFTLEVBQUUsZ0JBQWdCO1NBQzVCLENBQUMsQ0FBQztRQUVIOztXQUVHO1FBQ2MsZUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUQ7O1dBRUc7UUFDTSxVQUFLLEdBQUcsTUFBTSxDQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7S0FvQ3pEO0lBbENDOzs7T0FHRztJQUVPLE9BQU8sQ0FBQyxLQUFpQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUksS0FBSyxDQUFDLE1BQXNCLEVBQUUsYUFBYSxJQUFJLFFBQVEsQ0FBQztRQUUvRSx1Q0FBdUM7UUFDdkMsSUFBSSxhQUFhLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekYsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFFTyxNQUFNLENBQUMsS0FBaUI7UUFDaEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7OEdBekRVLFFBQVE7a0dBQVIsUUFBUSwrV0FMUixDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUM7OzJGQUtuRCxRQUFRO2tCQVRwQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLFVBQVUsRUFBRSxDQUFDO29CQUM5RCxJQUFJLEVBQUU7d0JBQ0osbUJBQW1CLEVBQUUsYUFBYTtxQkFDbkM7aUJBQ0Y7OEJBOEJXLE9BQU87c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9CdkIsTUFBTTtzQkFEZixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IMKpIDIwMjQgQW5ndWxhciBQcmltaXRpdmVzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL25nLXByaW1pdGl2ZXMvbmctcHJpbWl0aXZlc1xuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDIEJZLU5EIDQuMCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIGJvb2xlYW5BdHRyaWJ1dGUsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0RGlzYWJsZWQgfSBmcm9tICduZy1wcmltaXRpdmVzL2ludGVybmFsJztcbmltcG9ydCB7IE5ncEZvY3VzVG9rZW4gfSBmcm9tICcuL2ZvY3VzLnRva2VuJztcblxuLyoqXG4gKiBUaGlzIHdhcyBpbnNwaXJlZCBieSB0aGUgUmVhY3QgQXJpYSB1c2VGb2N1cyBob29rLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2Fkb2JlL3JlYWN0LXNwZWN0cnVtL2Jsb2IvbWFpbi9wYWNrYWdlcy8lNDByZWFjdC1hcmlhL2ludGVyYWN0aW9ucy9zcmMvdXNlRm9jdXMudHMjTDIwXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tuZ3BGb2N1c10nLFxuICBleHBvcnRBczogJ25ncEZvY3VzJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOZ3BGb2N1c1Rva2VuLCB1c2VFeGlzdGluZzogTmdwRm9jdXMgfV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuZGF0YS1mb2N1c10nOiAnaXNGb2N1c2VkKCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBOZ3BGb2N1cyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGN1cnJlbnRseSBmb2N1c2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzRm9jdXNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbGlzdGVuaW5nIGZvciBmb2N1cyBldmVudHMgaXMgZGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIEJvb2xlYW5JbnB1dD4oZmFsc2UsIHtcbiAgICBhbGlhczogJ25ncEZvY3VzRGlzYWJsZWQnLFxuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgZGlzYWJsZWQgc3RhdGUgZnJvbSBhbnkgcGFyZW50LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpc0Rpc2FibGVkID0gaW5qZWN0RGlzYWJsZWQodGhpcy5kaXNhYmxlZCk7XG5cbiAgLyoqXG4gICAqIEVtaXQgd2hlbiB0aGUgZm9jdXMgc3RhdGUgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGZvY3VzID0gb3V0cHV0PGJvb2xlYW4+KHsgYWxpYXM6ICduZ3BGb2N1cycgfSk7XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3IgZm9jdXMgZXZlbnRzLlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvd25lckRvY3VtZW50ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm93bmVyRG9jdW1lbnQgPz8gZG9jdW1lbnQ7XG5cbiAgICAvLyBlbnN1cmUgdGhpcyBlbGVtZW50IGlzIHN0aWxsIGZvY3VzZWRcbiAgICBpZiAob3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBldmVudC50YXJnZXQgJiYgZXZlbnQuY3VycmVudFRhcmdldCA9PT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICB0aGlzLmZvY3VzLmVtaXQodHJ1ZSk7XG4gICAgICB0aGlzLmlzRm9jdXNlZC5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3IgYmx1ciBldmVudHMuXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCA9PT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICB0aGlzLmZvY3VzLmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5pc0ZvY3VzZWQuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
9
9
|
import { Directive, ElementRef, HostListener, booleanAttribute, inject, input, output, signal, } from '@angular/core';
|
|
10
10
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
11
|
+
import { injectDisabled } from 'ng-primitives/internal';
|
|
11
12
|
import { NgpFocusVisibleToken } from './focus-visible.token';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
export class NgpFocusVisible {
|
|
@@ -27,11 +28,15 @@ export class NgpFocusVisible {
|
|
|
27
28
|
alias: 'ngpFocusVisibleDisabled',
|
|
28
29
|
transform: booleanAttribute,
|
|
29
30
|
});
|
|
31
|
+
/**
|
|
32
|
+
* Access the disabled state from any parent.
|
|
33
|
+
*/
|
|
34
|
+
this.isDisabled = injectDisabled(this.disabled);
|
|
30
35
|
/**
|
|
31
36
|
* Emit when the element is visually focused.
|
|
32
37
|
*/
|
|
33
38
|
this.focusChange = output({
|
|
34
|
-
alias: '
|
|
39
|
+
alias: 'ngpFocusVisible',
|
|
35
40
|
});
|
|
36
41
|
/**
|
|
37
42
|
* Whether the element is currently focused.
|
|
@@ -43,7 +48,7 @@ export class NgpFocusVisible {
|
|
|
43
48
|
.subscribe(origin => this.onFocus(origin));
|
|
44
49
|
}
|
|
45
50
|
onFocus(origin) {
|
|
46
|
-
if (this.
|
|
51
|
+
if (this.isDisabled() || this.isFocused()) {
|
|
47
52
|
return;
|
|
48
53
|
}
|
|
49
54
|
// for some elements the focus visible state should always appear on focus
|
|
@@ -63,7 +68,7 @@ export class NgpFocusVisible {
|
|
|
63
68
|
* Listen for blur events.
|
|
64
69
|
*/
|
|
65
70
|
onBlur() {
|
|
66
|
-
if (this.
|
|
71
|
+
if (this.isDisabled() || !this.isFocused()) {
|
|
67
72
|
return;
|
|
68
73
|
}
|
|
69
74
|
this.isFocused.set(false);
|
|
@@ -97,10 +102,10 @@ export class NgpFocusVisible {
|
|
|
97
102
|
}
|
|
98
103
|
return false;
|
|
99
104
|
}
|
|
100
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
101
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFocusVisible, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
106
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.1.1", type: NgpFocusVisible, isStandalone: true, selector: "[ngpFocusVisible]", inputs: { disabled: { classPropertyName: "disabled", publicName: "ngpFocusVisibleDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { focusChange: "ngpFocusVisible" }, host: { listeners: { "blur": "onBlur()" }, properties: { "attr.data-focus-visible": "isFocused()" } }, providers: [{ provide: NgpFocusVisibleToken, useExisting: NgpFocusVisible }], exportAs: ["ngpFocusVisible"], ngImport: i0 }); }
|
|
102
107
|
}
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: NgpFocusVisible, decorators: [{
|
|
104
109
|
type: Directive,
|
|
105
110
|
args: [{
|
|
106
111
|
standalone: true,
|
|
@@ -115,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
115
120
|
type: HostListener,
|
|
116
121
|
args: ['blur']
|
|
117
122
|
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtdmlzaWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1wcmltaXRpdmVzL2ludGVyYWN0aW9ucy9zcmMvZm9jdXMtdmlzaWJsZS9mb2N1cy12aXNpYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQVc3RCxNQUFNLE9BQU8sZUFBZTtJQW9DMUI7UUFuQ0E7O1dBRUc7UUFDYyxlQUFVLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUUxRTs7V0FFRztRQUNjLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBd0IsS0FBSyxFQUFFO1lBQ3RELEtBQUssRUFBRSx5QkFBeUI7WUFDaEMsU0FBUyxFQUFFLGdCQUFnQjtTQUM1QixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNjLGVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVEOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxNQUFNLENBQVU7WUFDckMsS0FBSyxFQUFFLGlCQUFpQjtTQUN6QixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNnQixjQUFTLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBR3BELElBQUksQ0FBQyxZQUFZO2FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO2FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzFCLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sT0FBTyxDQUFDLE1BQW1CO1FBQ2pDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDVCxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFFTyxNQUFNO1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsVUFBVTtZQUNWLE9BQU87WUFDUCxPQUFPO1lBQ1AsT0FBTztZQUNQLE1BQU07WUFDTixPQUFPO1lBQ1AsUUFBUTtZQUNSLFFBQVE7WUFDUixPQUFPO1NBQ1IsQ0FBQztRQUVGLHFEQUFxRDtRQUNyRCxJQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxZQUFZLGdCQUFnQjtZQUN6RCxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFDL0QsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxZQUFZLG1CQUFtQixFQUFFLENBQUM7WUFDakUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLElBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsaUJBQWlCO1lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxFQUM3RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzhHQS9HVSxlQUFlO2tHQUFmLGVBQWUsZ1hBTGYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7OzJGQUtqRSxlQUFlO2tCQVQzQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLGlCQUFpQixFQUFFLENBQUM7b0JBQzVFLElBQUksRUFBRTt3QkFDSiwyQkFBMkIsRUFBRSxhQUFhO3FCQUMzQztpQkFDRjt3REFvRVcsTUFBTTtzQkFEZixZQUFZO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCDCqSAyMDI0IEFuZ3VsYXIgUHJpbWl0aXZlcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wcmltaXRpdmVzL25nLXByaW1pdGl2ZXNcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQyBCWS1ORCA0LjAgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuaW1wb3J0IHsgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgaW5qZWN0RGlzYWJsZWQgfSBmcm9tICduZy1wcmltaXRpdmVzL2ludGVybmFsJztcbmltcG9ydCB7IE5ncEZvY3VzVmlzaWJsZVRva2VuIH0gZnJvbSAnLi9mb2N1cy12aXNpYmxlLnRva2VuJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnW25ncEZvY3VzVmlzaWJsZV0nLFxuICBleHBvcnRBczogJ25ncEZvY3VzVmlzaWJsZScsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmdwRm9jdXNWaXNpYmxlVG9rZW4sIHVzZUV4aXN0aW5nOiBOZ3BGb2N1c1Zpc2libGUgfV0sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuZGF0YS1mb2N1cy12aXNpYmxlXSc6ICdpc0ZvY3VzZWQoKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIE5ncEZvY3VzVmlzaWJsZSB7XG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGVsZW1lbnQgdGhhdCB0aGUgZGlyZWN0aXZlIGlzIGFwcGxpZWQgdG8uXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGZvY3VzIG1vbml0b3IuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzTW9uaXRvciA9IGluamVjdChGb2N1c01vbml0b3IpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGZvY3VzIGV2ZW50cyBhcmUgbGlzdGVuZWQgdG8uXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIEJvb2xlYW5JbnB1dD4oZmFsc2UsIHtcbiAgICBhbGlhczogJ25ncEZvY3VzVmlzaWJsZURpc2FibGVkJyxcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdGhlIGRpc2FibGVkIHN0YXRlIGZyb20gYW55IHBhcmVudC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNEaXNhYmxlZCA9IGluamVjdERpc2FibGVkKHRoaXMuZGlzYWJsZWQpO1xuXG4gIC8qKlxuICAgKiBFbWl0IHdoZW4gdGhlIGVsZW1lbnQgaXMgdmlzdWFsbHkgZm9jdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvY3VzQ2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KHtcbiAgICBhbGlhczogJ25ncEZvY3VzVmlzaWJsZScsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGN1cnJlbnRseSBmb2N1c2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRm9jdXNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5mb2N1c01vbml0b3JcbiAgICAgIC5tb25pdG9yKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKG9yaWdpbiA9PiB0aGlzLm9uRm9jdXMob3JpZ2luKSk7XG4gIH1cblxuICBwcml2YXRlIG9uRm9jdXMob3JpZ2luOiBGb2N1c09yaWdpbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSB8fCB0aGlzLmlzRm9jdXNlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZm9yIHNvbWUgZWxlbWVudHMgdGhlIGZvY3VzIHZpc2libGUgc3RhdGUgc2hvdWxkIGFsd2F5cyBhcHBlYXIgb24gZm9jdXNcbiAgICBpZiAodGhpcy5hbHdheXNTaG93Rm9jdXMoKSkge1xuICAgICAgdGhpcy5pc0ZvY3VzZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBmb2N1cyBvcmlnaW4gaXMga2V5Ym9hcmQsIHRoZW4gdGhlIGZvY3VzIGlzIHZpc2libGVcbiAgICBpZiAob3JpZ2luID09PSAna2V5Ym9hcmQnKSB7XG4gICAgICB0aGlzLmlzRm9jdXNlZC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmZvY3VzQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBmb3IgYmx1ciBldmVudHMuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgcHJvdGVjdGVkIG9uQmx1cigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKCkgfHwgIXRoaXMuaXNGb2N1c2VkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzRm9jdXNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGFsd2F5c1Nob3dGb2N1cygpOiBib29sZWFuIHtcbiAgICBjb25zdCBub25UZXh0SW5wdXRUeXBlcyA9IFtcbiAgICAgICdjaGVja2JveCcsXG4gICAgICAncmFkaW8nLFxuICAgICAgJ3JhbmdlJyxcbiAgICAgICdjb2xvcicsXG4gICAgICAnZmlsZScsXG4gICAgICAnaW1hZ2UnLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnc3VibWl0JyxcbiAgICAgICdyZXNldCcsXG4gICAgXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gaW5wdXQgZWxlbWVudCBhbmQgaXQgaXMgYSB0ZXh0IGlucHV0XG4gICAgaWYgKFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmXG4gICAgICAhbm9uVGV4dElucHV0VHlwZXMuaW5jbHVkZXModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYSB0ZXh0YXJlYVxuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYW4gZWxlbWVudCB3aXRoIGNvbnRlbnRlZGl0YWJsZVxuICAgIGlmIChcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmlzQ29udGVudEVkaXRhYmxlIHx8XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|