ngx-com 0.0.21 → 0.0.22
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/fesm2022/ngx-com-components-calendar.mjs +341 -43
- package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-form-field.mjs +2 -2
- package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
- package/fesm2022/ngx-com-components-native-control.mjs +170 -0
- package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
- package/fesm2022/ngx-com-components-switch.mjs +16 -7
- package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
- package/package.json +5 -1
- package/types/ngx-com-components-calendar.d.ts +158 -22
- package/types/ngx-com-components-native-control.d.ts +99 -0
- package/types/ngx-com-components-switch.d.ts +7 -2
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, LOCALE_ID, Injectable, viewChild, input, output, computed, ChangeDetectionStrategy, Component, signal, afterEveryRender, Directive, viewChildren, linkedSignal, ElementRef, DestroyRef, ViewContainerRef, DOCUMENT, effect } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, LOCALE_ID, Injectable, viewChild, input, output, computed, ChangeDetectionStrategy, Component, signal, afterEveryRender, Directive, viewChildren, linkedSignal, model, forwardRef, ElementRef, DestroyRef, ViewContainerRef, DOCUMENT, effect } from '@angular/core';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
4
|
import { NgTemplateOutlet } from '@angular/common';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
-
import { NgControl } from '@angular/forms';
|
|
6
|
+
import { NgControl, NgForm, FormGroupDirective } from '@angular/forms';
|
|
7
7
|
import { Overlay, OverlayModule } from '@angular/cdk/overlay';
|
|
8
8
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
9
9
|
import * as i1 from '@angular/cdk/a11y';
|
|
10
10
|
import { A11yModule } from '@angular/cdk/a11y';
|
|
11
11
|
import { ComIcon } from 'ngx-com/components/icon';
|
|
12
|
+
import { mergeClasses } from 'ngx-com/utils';
|
|
13
|
+
import { ErrorStateMatcher, FormFieldControl } from 'ngx-com/components/form-field';
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* Calendar shared types and interfaces
|
|
@@ -3145,6 +3147,13 @@ const datepickerTriggerVariants = cva([
|
|
|
3145
3147
|
'bg-muted',
|
|
3146
3148
|
'hover:bg-muted-hover',
|
|
3147
3149
|
],
|
|
3150
|
+
naked: [
|
|
3151
|
+
'border-transparent',
|
|
3152
|
+
'bg-transparent',
|
|
3153
|
+
'shadow-none',
|
|
3154
|
+
'focus-within:outline-none',
|
|
3155
|
+
'rounded-none',
|
|
3156
|
+
],
|
|
3148
3157
|
},
|
|
3149
3158
|
size: {
|
|
3150
3159
|
sm: ['h-8', 'px-2', 'text-xs', 'gap-1'],
|
|
@@ -3178,6 +3187,24 @@ const datepickerTriggerVariants = cva([
|
|
|
3178
3187
|
variant: 'outline',
|
|
3179
3188
|
class: ['border-primary'],
|
|
3180
3189
|
},
|
|
3190
|
+
// Naked variant should not show ring when open (form-field provides focus styling)
|
|
3191
|
+
{
|
|
3192
|
+
open: true,
|
|
3193
|
+
variant: 'naked',
|
|
3194
|
+
class: ['outline-none', 'border-transparent'],
|
|
3195
|
+
},
|
|
3196
|
+
// Naked variant should not show error border (form-field provides error styling)
|
|
3197
|
+
{
|
|
3198
|
+
state: 'error',
|
|
3199
|
+
variant: 'naked',
|
|
3200
|
+
class: ['border-transparent', 'focus-within:outline-none'],
|
|
3201
|
+
},
|
|
3202
|
+
// Naked variant should not show success border (form-field provides styling)
|
|
3203
|
+
{
|
|
3204
|
+
state: 'success',
|
|
3205
|
+
variant: 'naked',
|
|
3206
|
+
class: ['border-transparent', 'focus-within:outline-none'],
|
|
3207
|
+
},
|
|
3181
3208
|
],
|
|
3182
3209
|
defaultVariants: {
|
|
3183
3210
|
variant: 'default',
|
|
@@ -3419,7 +3446,7 @@ const timepickerContainerVariants = cva([
|
|
|
3419
3446
|
'border-input-border',
|
|
3420
3447
|
'bg-input-background',
|
|
3421
3448
|
'text-input-foreground',
|
|
3422
|
-
'focus-within:outline-
|
|
3449
|
+
'focus-within:outline-1',
|
|
3423
3450
|
'focus-within:outline-offset-2',
|
|
3424
3451
|
'focus-within:outline-ring',
|
|
3425
3452
|
],
|
|
@@ -3428,6 +3455,13 @@ const timepickerContainerVariants = cva([
|
|
|
3428
3455
|
'bg-transparent',
|
|
3429
3456
|
'text-foreground',
|
|
3430
3457
|
],
|
|
3458
|
+
naked: [
|
|
3459
|
+
'border-transparent',
|
|
3460
|
+
'bg-transparent',
|
|
3461
|
+
'shadow-none',
|
|
3462
|
+
'focus-within:outline-none',
|
|
3463
|
+
'rounded-none',
|
|
3464
|
+
],
|
|
3431
3465
|
},
|
|
3432
3466
|
size: {
|
|
3433
3467
|
sm: ['h-8', 'px-2', 'text-xs', 'gap-0.5'],
|
|
@@ -3457,6 +3491,17 @@ const timepickerContainerVariants = cva([
|
|
|
3457
3491
|
state: 'success',
|
|
3458
3492
|
class: [],
|
|
3459
3493
|
},
|
|
3494
|
+
// Naked variant should not show ring (form-field provides focus styling)
|
|
3495
|
+
{
|
|
3496
|
+
variant: 'naked',
|
|
3497
|
+
state: 'error',
|
|
3498
|
+
class: ['border-transparent', 'focus-within:outline-none'],
|
|
3499
|
+
},
|
|
3500
|
+
{
|
|
3501
|
+
variant: 'naked',
|
|
3502
|
+
state: 'success',
|
|
3503
|
+
class: ['border-transparent', 'focus-within:outline-none'],
|
|
3504
|
+
},
|
|
3460
3505
|
],
|
|
3461
3506
|
defaultVariants: {
|
|
3462
3507
|
variant: 'standalone',
|
|
@@ -3537,10 +3582,11 @@ const timepickerPeriodVariants = cva([
|
|
|
3537
3582
|
'font-medium',
|
|
3538
3583
|
'transition-colors',
|
|
3539
3584
|
'select-none',
|
|
3585
|
+
'outline-none',
|
|
3540
3586
|
'bg-muted',
|
|
3541
3587
|
'text-muted-foreground',
|
|
3542
3588
|
'hover:bg-muted-hover',
|
|
3543
|
-
'focus-visible:outline-
|
|
3589
|
+
'focus-visible:outline-1',
|
|
3544
3590
|
'focus-visible:outline-offset-2',
|
|
3545
3591
|
'focus-visible:outline-ring',
|
|
3546
3592
|
], {
|
|
@@ -3651,6 +3697,9 @@ function generateTimePickerId() {
|
|
|
3651
3697
|
class ComTimePicker {
|
|
3652
3698
|
localeId = inject(LOCALE_ID);
|
|
3653
3699
|
ngControl = inject(NgControl, { optional: true, self: true });
|
|
3700
|
+
defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
3701
|
+
parentForm = inject(NgForm, { optional: true });
|
|
3702
|
+
parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
3654
3703
|
timepickerId = generateTimePickerId();
|
|
3655
3704
|
hoursInputRef = viewChild('hoursInput', ...(ngDevMode ? [{ debugName: "hoursInputRef" }] : []));
|
|
3656
3705
|
minutesInputRef = viewChild('minutesInput', ...(ngDevMode ? [{ debugName: "minutesInputRef" }] : []));
|
|
@@ -3658,9 +3707,9 @@ class ComTimePicker {
|
|
|
3658
3707
|
periodButtonRef = viewChild('periodButton', ...(ngDevMode ? [{ debugName: "periodButtonRef" }] : []));
|
|
3659
3708
|
// ============ INPUTS ============
|
|
3660
3709
|
/** Current time value. */
|
|
3661
|
-
value =
|
|
3710
|
+
value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
3662
3711
|
/** Whether the time picker is disabled. */
|
|
3663
|
-
disabled =
|
|
3712
|
+
disabled = model(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
3664
3713
|
/** Whether the time picker is required. */
|
|
3665
3714
|
required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
|
|
3666
3715
|
/** Whether to show the seconds segment. */
|
|
@@ -3687,6 +3736,12 @@ class ComTimePicker {
|
|
|
3687
3736
|
userClass = input('', { ...(ngDevMode ? { debugName: "userClass" } : {}), alias: 'class' });
|
|
3688
3737
|
/** Placeholder text for empty segments. */
|
|
3689
3738
|
placeholder = input('--', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
|
|
3739
|
+
/** Custom error state matcher for determining when to show errors. */
|
|
3740
|
+
errorStateMatcher = input(...(ngDevMode ? [undefined, { debugName: "errorStateMatcher" }] : []));
|
|
3741
|
+
// Signal Forms inputs — set automatically by [formField] via setInputOnDirectives
|
|
3742
|
+
touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
|
|
3743
|
+
invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
|
|
3744
|
+
sfErrors = input([], { ...(ngDevMode ? { debugName: "sfErrors" } : {}), alias: 'errors' });
|
|
3690
3745
|
// ============ OUTPUTS ============
|
|
3691
3746
|
/** Emitted when time value changes. */
|
|
3692
3747
|
timeChange = output();
|
|
@@ -3699,6 +3754,39 @@ class ComTimePicker {
|
|
|
3699
3754
|
pendingDigits = signal('', ...(ngDevMode ? [{ debugName: "pendingDigits" }] : []));
|
|
3700
3755
|
/** Live announcements for screen readers. */
|
|
3701
3756
|
liveAnnouncement = signal('', ...(ngDevMode ? [{ debugName: "liveAnnouncement" }] : []));
|
|
3757
|
+
/** IDs for aria-describedby (set by form-field). */
|
|
3758
|
+
_describedByIds = signal('', ...(ngDevMode ? [{ debugName: "_describedByIds" }] : []));
|
|
3759
|
+
/** Form field appearance (set by form-field). */
|
|
3760
|
+
_appearance = signal('outline', ...(ngDevMode ? [{ debugName: "_appearance" }] : []));
|
|
3761
|
+
// ============ FormFieldControl SIGNALS ============
|
|
3762
|
+
/** Whether the time picker is focused. Implements FormFieldControl. */
|
|
3763
|
+
focused = computed(() => this.activeSegment() !== null, ...(ngDevMode ? [{ debugName: "focused" }] : []));
|
|
3764
|
+
/** Whether the label should float. */
|
|
3765
|
+
shouldLabelFloat = computed(() => this.focused() || this.internalValue() !== null, ...(ngDevMode ? [{ debugName: "shouldLabelFloat" }] : []));
|
|
3766
|
+
/** Whether the control is in an error state. Implements FormFieldControl. */
|
|
3767
|
+
errorState = computed(() => {
|
|
3768
|
+
if (!this.ngControl) {
|
|
3769
|
+
return this.invalid() && this.touched();
|
|
3770
|
+
}
|
|
3771
|
+
const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;
|
|
3772
|
+
const form = this.parentFormGroup ?? this.parentForm;
|
|
3773
|
+
return matcher.isErrorState(this.ngControl.control ?? null, form);
|
|
3774
|
+
}, ...(ngDevMode ? [{ debugName: "errorState" }] : []));
|
|
3775
|
+
/** Structured validation errors from Signal Forms. */
|
|
3776
|
+
errors = computed(() => !this.ngControl ? this.sfErrors() : null, ...(ngDevMode ? [{ debugName: "errors" }] : []));
|
|
3777
|
+
/** Unique ID for the control (maps to hours input). Implements FormFieldControl. */
|
|
3778
|
+
id = computed(() => `${this.timepickerId}-hours`, ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
3779
|
+
/**
|
|
3780
|
+
* Effective state combining manual state with automatic error detection.
|
|
3781
|
+
*/
|
|
3782
|
+
effectiveState = computed(() => {
|
|
3783
|
+
const manualState = this.state();
|
|
3784
|
+
if (manualState !== 'default')
|
|
3785
|
+
return manualState;
|
|
3786
|
+
return this.errorState() ? 'error' : 'default';
|
|
3787
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveState" }] : []));
|
|
3788
|
+
/** Combined aria-describedby from form-field. */
|
|
3789
|
+
effectiveAriaDescribedBy = computed(() => this._describedByIds() || null, ...(ngDevMode ? [{ debugName: "effectiveAriaDescribedBy" }] : []));
|
|
3702
3790
|
// ============ COMPUTED STATE ============
|
|
3703
3791
|
/** Whether to use 12-hour format. */
|
|
3704
3792
|
is12Hour = computed(() => {
|
|
@@ -3756,10 +3844,15 @@ class ComTimePicker {
|
|
|
3756
3844
|
const base = timepickerContainerVariants({
|
|
3757
3845
|
variant: this.variant(),
|
|
3758
3846
|
size: this.size(),
|
|
3759
|
-
state: this.
|
|
3847
|
+
state: this.effectiveState(),
|
|
3760
3848
|
});
|
|
3761
3849
|
const disabled = this.disabled() ? timepickerDisabledVariants() : '';
|
|
3762
|
-
|
|
3850
|
+
// For naked variant, add padding based on form-field appearance
|
|
3851
|
+
let paddingClasses = '';
|
|
3852
|
+
if (this.variant() === 'naked') {
|
|
3853
|
+
paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';
|
|
3854
|
+
}
|
|
3855
|
+
return mergeClasses(base, disabled, paddingClasses, this.userClass());
|
|
3763
3856
|
}, ...(ngDevMode ? [{ debugName: "containerClasses" }] : []));
|
|
3764
3857
|
/** Segment input classes. */
|
|
3765
3858
|
segmentClasses = computed(() => {
|
|
@@ -3792,8 +3885,8 @@ class ComTimePicker {
|
|
|
3792
3885
|
registerOnTouched(fn) {
|
|
3793
3886
|
this.onTouched = fn;
|
|
3794
3887
|
}
|
|
3795
|
-
setDisabledState(
|
|
3796
|
-
|
|
3888
|
+
setDisabledState(isDisabled) {
|
|
3889
|
+
this.disabled.set(isDisabled);
|
|
3797
3890
|
}
|
|
3798
3891
|
// ============ VALIDATOR IMPLEMENTATION ============
|
|
3799
3892
|
validate() {
|
|
@@ -3826,11 +3919,11 @@ class ComTimePicker {
|
|
|
3826
3919
|
this.pendingDigits.set('');
|
|
3827
3920
|
this.snapToStep(segment);
|
|
3828
3921
|
this.onTouched();
|
|
3922
|
+
this.touched.set(true);
|
|
3829
3923
|
}
|
|
3830
3924
|
onSegmentInput(event, segment) {
|
|
3831
3925
|
// Prevent default browser input handling — we manage value via keydown
|
|
3832
3926
|
const input = event.target;
|
|
3833
|
-
const value = this.internalValue();
|
|
3834
3927
|
// Restore the formatted value to prevent browser from changing display
|
|
3835
3928
|
if (segment === 'hours') {
|
|
3836
3929
|
input.value = this.formattedHours();
|
|
@@ -3913,6 +4006,30 @@ class ComTimePicker {
|
|
|
3913
4006
|
const newHours = value.hours >= 12 ? value.hours - 12 : value.hours + 12;
|
|
3914
4007
|
this.updateValue({ ...value, hours: newHours });
|
|
3915
4008
|
}
|
|
4009
|
+
// ============ FormFieldControl IMPLEMENTATION ============
|
|
4010
|
+
/**
|
|
4011
|
+
* Called when the form field container is clicked.
|
|
4012
|
+
* Implements FormFieldControl.
|
|
4013
|
+
*/
|
|
4014
|
+
onContainerClick(_event) {
|
|
4015
|
+
if (!this.disabled()) {
|
|
4016
|
+
this.hoursInputRef()?.nativeElement.focus();
|
|
4017
|
+
}
|
|
4018
|
+
}
|
|
4019
|
+
/**
|
|
4020
|
+
* Sets the describedBy IDs from the form field.
|
|
4021
|
+
* Called by the parent form field component.
|
|
4022
|
+
*/
|
|
4023
|
+
setDescribedByIds(ids) {
|
|
4024
|
+
this._describedByIds.set(ids);
|
|
4025
|
+
}
|
|
4026
|
+
/**
|
|
4027
|
+
* Sets the appearance for styling.
|
|
4028
|
+
* Called by the parent form field component.
|
|
4029
|
+
*/
|
|
4030
|
+
setAppearance(appearance) {
|
|
4031
|
+
this._appearance.set(appearance);
|
|
4032
|
+
}
|
|
3916
4033
|
// ============ PRIVATE METHODS ============
|
|
3917
4034
|
setPeriod(period) {
|
|
3918
4035
|
const value = this.internalValue();
|
|
@@ -4132,7 +4249,7 @@ class ComTimePicker {
|
|
|
4132
4249
|
}
|
|
4133
4250
|
}
|
|
4134
4251
|
updateValue(value) {
|
|
4135
|
-
this.
|
|
4252
|
+
this.value.set(value);
|
|
4136
4253
|
this.onChange(value);
|
|
4137
4254
|
this.timeChange.emit(value);
|
|
4138
4255
|
this.onValidatorChange();
|
|
@@ -4144,7 +4261,7 @@ class ComTimePicker {
|
|
|
4144
4261
|
}
|
|
4145
4262
|
}
|
|
4146
4263
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComTimePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4147
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComTimePicker, isStandalone: true, selector: "com-time-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, use12HourFormat: { classPropertyName: "use12HourFormat", publicName: "use12HourFormat", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, secondStep: { classPropertyName: "secondStep", publicName: "secondStep", isSignal: true, isRequired: false, transformFunction: null }, minTime: { classPropertyName: "minTime", publicName: "minTime", isSignal: true, isRequired: false, transformFunction: null }, maxTime: { classPropertyName: "maxTime", publicName: "maxTime", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { timeChange: "timeChange" }, host: { properties: { "class.com-time-picker-disabled": "disabled()", "attr.role": "\"group\"", "attr.aria-label": "ariaLabel() || \"Time picker\"", "attr.aria-disabled": "disabled() || null" }, classAttribute: "com-time-picker-host inline-block" }, viewQueries: [{ propertyName: "hoursInputRef", first: true, predicate: ["hoursInput"], descendants: true, isSignal: true }, { propertyName: "minutesInputRef", first: true, predicate: ["minutesInput"], descendants: true, isSignal: true }, { propertyName: "secondsInputRef", first: true, predicate: ["secondsInput"], descendants: true, isSignal: true }, { propertyName: "periodButtonRef", first: true, predicate: ["periodButton"], descendants: true, isSignal: true }], exportAs: ["comTimePicker"], ngImport: i0, template: `
|
|
4264
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComTimePicker, isStandalone: true, selector: "com-time-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, use12HourFormat: { classPropertyName: "use12HourFormat", publicName: "use12HourFormat", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, secondStep: { classPropertyName: "secondStep", publicName: "secondStep", isSignal: true, isRequired: false, transformFunction: null }, minTime: { classPropertyName: "minTime", publicName: "minTime", isSignal: true, isRequired: false, transformFunction: null }, maxTime: { classPropertyName: "maxTime", publicName: "maxTime", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, sfErrors: { classPropertyName: "sfErrors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange", touched: "touchedChange", timeChange: "timeChange" }, host: { properties: { "class.com-time-picker-disabled": "disabled()", "attr.role": "\"group\"", "attr.aria-label": "ariaLabel() || \"Time picker\"", "attr.aria-disabled": "disabled() || null" }, classAttribute: "com-time-picker-host inline-block" }, providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComTimePicker) }], viewQueries: [{ propertyName: "hoursInputRef", first: true, predicate: ["hoursInput"], descendants: true, isSignal: true }, { propertyName: "minutesInputRef", first: true, predicate: ["minutesInput"], descendants: true, isSignal: true }, { propertyName: "secondsInputRef", first: true, predicate: ["secondsInput"], descendants: true, isSignal: true }, { propertyName: "periodButtonRef", first: true, predicate: ["periodButton"], descendants: true, isSignal: true }], exportAs: ["comTimePicker"], ngImport: i0, template: `
|
|
4148
4265
|
<div [class]="containerClasses()">
|
|
4149
4266
|
<!-- Hours -->
|
|
4150
4267
|
<input
|
|
@@ -4153,7 +4270,9 @@ class ComTimePicker {
|
|
|
4153
4270
|
inputmode="numeric"
|
|
4154
4271
|
role="spinbutton"
|
|
4155
4272
|
[class]="segmentClasses()"
|
|
4273
|
+
[attr.id]="id()"
|
|
4156
4274
|
[attr.aria-label]="'Hours'"
|
|
4275
|
+
[attr.aria-describedby]="effectiveAriaDescribedBy() || null"
|
|
4157
4276
|
[attr.aria-valuenow]="displayHours()"
|
|
4158
4277
|
[attr.aria-valuemin]="is12Hour() ? 1 : 0"
|
|
4159
4278
|
[attr.aria-valuemax]="is12Hour() ? 12 : 23"
|
|
@@ -4246,7 +4365,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
4246
4365
|
inputmode="numeric"
|
|
4247
4366
|
role="spinbutton"
|
|
4248
4367
|
[class]="segmentClasses()"
|
|
4368
|
+
[attr.id]="id()"
|
|
4249
4369
|
[attr.aria-label]="'Hours'"
|
|
4370
|
+
[attr.aria-describedby]="effectiveAriaDescribedBy() || null"
|
|
4250
4371
|
[attr.aria-valuenow]="displayHours()"
|
|
4251
4372
|
[attr.aria-valuemin]="is12Hour() ? 1 : 0"
|
|
4252
4373
|
[attr.aria-valuemax]="is12Hour() ? 12 : 23"
|
|
@@ -4326,14 +4447,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
4326
4447
|
<div class="sr-only" aria-live="polite" aria-atomic="true">
|
|
4327
4448
|
{{ liveAnnouncement() }}
|
|
4328
4449
|
</div>
|
|
4329
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4450
|
+
`, providers: [{ provide: FormFieldControl, useExisting: forwardRef(() => ComTimePicker) }], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4330
4451
|
class: 'com-time-picker-host inline-block',
|
|
4331
4452
|
'[class.com-time-picker-disabled]': 'disabled()',
|
|
4332
4453
|
'[attr.role]': '"group"',
|
|
4333
4454
|
'[attr.aria-label]': 'ariaLabel() || "Time picker"',
|
|
4334
4455
|
'[attr.aria-disabled]': 'disabled() || null',
|
|
4335
4456
|
}, styles: [".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
|
|
4336
|
-
}], ctorParameters: () => [], propDecorators: { hoursInputRef: [{ type: i0.ViewChild, args: ['hoursInput', { isSignal: true }] }], minutesInputRef: [{ type: i0.ViewChild, args: ['minutesInput', { isSignal: true }] }], secondsInputRef: [{ type: i0.ViewChild, args: ['secondsInput', { isSignal: true }] }], periodButtonRef: [{ type: i0.ViewChild, args: ['periodButton', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], use12HourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "use12HourFormat", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], secondStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "secondStep", required: false }] }], minTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "minTime", required: false }] }], maxTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxTime", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], timeChange: [{ type: i0.Output, args: ["timeChange"] }] } });
|
|
4457
|
+
}], ctorParameters: () => [], propDecorators: { hoursInputRef: [{ type: i0.ViewChild, args: ['hoursInput', { isSignal: true }] }], minutesInputRef: [{ type: i0.ViewChild, args: ['minutesInput', { isSignal: true }] }], secondsInputRef: [{ type: i0.ViewChild, args: ['secondsInput', { isSignal: true }] }], periodButtonRef: [{ type: i0.ViewChild, args: ['periodButton', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], use12HourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "use12HourFormat", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], secondStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "secondStep", required: false }] }], minTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "minTime", required: false }] }], maxTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxTime", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], errorStateMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorStateMatcher", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], sfErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], timeChange: [{ type: i0.Output, args: ["timeChange"] }] } });
|
|
4337
4458
|
|
|
4338
4459
|
/** Default position for the datepicker panel. */
|
|
4339
4460
|
const DEFAULT_POSITIONS$1 = [
|
|
@@ -4375,8 +4496,11 @@ class ComDatepicker {
|
|
|
4375
4496
|
viewContainerRef = inject(ViewContainerRef);
|
|
4376
4497
|
document = inject(DOCUMENT);
|
|
4377
4498
|
dateAdapter = inject(DATE_ADAPTER);
|
|
4378
|
-
/**
|
|
4499
|
+
/** NgControl bound to this datepicker (if using reactive forms). */
|
|
4379
4500
|
ngControl = inject(NgControl, { optional: true, self: true });
|
|
4501
|
+
defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
4502
|
+
parentForm = inject(NgForm, { optional: true });
|
|
4503
|
+
parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
4380
4504
|
/** Reference to the trigger element. */
|
|
4381
4505
|
triggerRef = viewChild.required('triggerElement');
|
|
4382
4506
|
/** Reference to the input element. */
|
|
@@ -4389,7 +4513,7 @@ class ComDatepicker {
|
|
|
4389
4513
|
datepickerId = generateDatepickerId();
|
|
4390
4514
|
// ============ INPUTS ============
|
|
4391
4515
|
/** Current value. */
|
|
4392
|
-
value =
|
|
4516
|
+
value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
4393
4517
|
/** Minimum selectable date. */
|
|
4394
4518
|
min = input(null, ...(ngDevMode ? [{ debugName: "min" }] : []));
|
|
4395
4519
|
/** Maximum selectable date. */
|
|
@@ -4436,6 +4560,12 @@ class ComDatepicker {
|
|
|
4436
4560
|
ariaLabel = input(null, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : []));
|
|
4437
4561
|
/** ID of element describing the input. */
|
|
4438
4562
|
ariaDescribedBy = input(null, ...(ngDevMode ? [{ debugName: "ariaDescribedBy" }] : []));
|
|
4563
|
+
/** Custom error state matcher for determining when to show errors. */
|
|
4564
|
+
errorStateMatcher = input(...(ngDevMode ? [undefined, { debugName: "errorStateMatcher" }] : []));
|
|
4565
|
+
// Signal Forms inputs — set automatically by [formField] via setInputOnDirectives
|
|
4566
|
+
touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
|
|
4567
|
+
invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
|
|
4568
|
+
sfErrors = input([], { ...(ngDevMode ? { debugName: "sfErrors" } : {}), alias: 'errors' });
|
|
4439
4569
|
/** Whether to show the time picker below the calendar. */
|
|
4440
4570
|
showTimePicker = input(false, ...(ngDevMode ? [{ debugName: "showTimePicker" }] : []));
|
|
4441
4571
|
/** 12h vs 24h format for the time picker. `null` = auto-detect. */
|
|
@@ -4460,9 +4590,49 @@ class ComDatepicker {
|
|
|
4460
4590
|
calendarActiveDate = signal(this.dateAdapter.today(), ...(ngDevMode ? [{ debugName: "calendarActiveDate" }] : []));
|
|
4461
4591
|
/** Live announcements for screen readers. */
|
|
4462
4592
|
liveAnnouncement = signal('', ...(ngDevMode ? [{ debugName: "liveAnnouncement" }] : []));
|
|
4593
|
+
/** Whether the input is focused (not panel). */
|
|
4594
|
+
_inputFocused = signal(false, ...(ngDevMode ? [{ debugName: "_inputFocused" }] : []));
|
|
4595
|
+
/** IDs for aria-describedby (set by form-field). */
|
|
4596
|
+
_describedByIds = signal('', ...(ngDevMode ? [{ debugName: "_describedByIds" }] : []));
|
|
4597
|
+
/** Form field appearance (set by form-field). */
|
|
4598
|
+
_appearance = signal('outline', ...(ngDevMode ? [{ debugName: "_appearance" }] : []));
|
|
4599
|
+
// ============ FormFieldControl SIGNALS ============
|
|
4600
|
+
/** Whether the datepicker is focused (input focused or panel open). Implements FormFieldControl. */
|
|
4601
|
+
focused = computed(() => this._inputFocused() || this.isOpen(), ...(ngDevMode ? [{ debugName: "focused" }] : []));
|
|
4602
|
+
/** Whether the label should float. Label floats when focused or has a value. */
|
|
4603
|
+
shouldLabelFloat = computed(() => this.focused() || this.hasValue(), ...(ngDevMode ? [{ debugName: "shouldLabelFloat" }] : []));
|
|
4604
|
+
/** Whether the control is in an error state. Implements FormFieldControl. */
|
|
4605
|
+
errorState = computed(() => {
|
|
4606
|
+
if (!this.ngControl) {
|
|
4607
|
+
// Signal Forms: gate on invalid AND touched
|
|
4608
|
+
return this.invalid() && this.touched();
|
|
4609
|
+
}
|
|
4610
|
+
// Reactive Forms: use ErrorStateMatcher
|
|
4611
|
+
this.isOpen();
|
|
4612
|
+
this.hasValue();
|
|
4613
|
+
const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;
|
|
4614
|
+
const form = this.parentFormGroup ?? this.parentForm;
|
|
4615
|
+
return matcher.isErrorState(this.ngControl.control ?? null, form);
|
|
4616
|
+
}, ...(ngDevMode ? [{ debugName: "errorState" }] : []));
|
|
4617
|
+
/** Structured validation errors from Signal Forms, exposed for the parent form field. */
|
|
4618
|
+
errors = computed(() => !this.ngControl ? this.sfErrors() : null, ...(ngDevMode ? [{ debugName: "errors" }] : []));
|
|
4619
|
+
/** Unique ID for the control. Implements FormFieldControl. */
|
|
4620
|
+
id = computed(() => `${this.datepickerId}-input`, ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
4621
|
+
/**
|
|
4622
|
+
* Effective state combining manual state with automatic error detection.
|
|
4623
|
+
* Manual state takes precedence over auto-detected error state.
|
|
4624
|
+
*/
|
|
4625
|
+
effectiveState = computed(() => {
|
|
4626
|
+
const manualState = this.state();
|
|
4627
|
+
if (manualState !== 'default')
|
|
4628
|
+
return manualState;
|
|
4629
|
+
return this.errorState() ? 'error' : 'default';
|
|
4630
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveState" }] : []));
|
|
4631
|
+
/** Combined aria-describedby from form-field and manual input. */
|
|
4632
|
+
effectiveAriaDescribedBy = computed(() => this._describedByIds() || this.ariaDescribedBy() || null, ...(ngDevMode ? [{ debugName: "effectiveAriaDescribedBy" }] : []));
|
|
4463
4633
|
// ============ COMPUTED STATE ============
|
|
4464
|
-
/** Input element ID. */
|
|
4465
|
-
inputId =
|
|
4634
|
+
/** Input element ID (alias for FormFieldControl id). */
|
|
4635
|
+
inputId = this.id;
|
|
4466
4636
|
/** Panel element ID. */
|
|
4467
4637
|
panelId = computed(() => `${this.datepickerId}-panel`, ...(ngDevMode ? [{ debugName: "panelId" }] : []));
|
|
4468
4638
|
/** Whether the datepicker has a value. */
|
|
@@ -4488,11 +4658,16 @@ class ComDatepicker {
|
|
|
4488
4658
|
const baseClasses = datepickerTriggerVariants({
|
|
4489
4659
|
variant: this.variant(),
|
|
4490
4660
|
size: this.size(),
|
|
4491
|
-
state: this.
|
|
4661
|
+
state: this.effectiveState(),
|
|
4492
4662
|
open: this.isOpen(),
|
|
4493
4663
|
});
|
|
4494
4664
|
const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';
|
|
4495
|
-
|
|
4665
|
+
// For naked variant, add padding based on form-field appearance
|
|
4666
|
+
let paddingClasses = '';
|
|
4667
|
+
if (this.variant() === 'naked') {
|
|
4668
|
+
paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';
|
|
4669
|
+
}
|
|
4670
|
+
return mergeClasses(baseClasses, disabledClasses, paddingClasses, this.userClass());
|
|
4496
4671
|
}, ...(ngDevMode ? [{ debugName: "triggerClasses" }] : []));
|
|
4497
4672
|
/** Computed input classes. */
|
|
4498
4673
|
inputClasses = computed(() => {
|
|
@@ -4634,6 +4809,7 @@ class ComDatepicker {
|
|
|
4634
4809
|
this.isOpen.set(false);
|
|
4635
4810
|
this.closed.emit();
|
|
4636
4811
|
this.onTouched();
|
|
4812
|
+
this.touched.set(true);
|
|
4637
4813
|
// Return focus to trigger
|
|
4638
4814
|
this.inputRef().nativeElement.focus();
|
|
4639
4815
|
}
|
|
@@ -4662,6 +4838,9 @@ class ComDatepicker {
|
|
|
4662
4838
|
}
|
|
4663
4839
|
}
|
|
4664
4840
|
// ============ EVENT HANDLERS ============
|
|
4841
|
+
onInputFocus() {
|
|
4842
|
+
this._inputFocused.set(true);
|
|
4843
|
+
}
|
|
4665
4844
|
onTriggerClick() {
|
|
4666
4845
|
if (!this.disabled()) {
|
|
4667
4846
|
this.toggle();
|
|
@@ -4717,10 +4896,12 @@ class ComDatepicker {
|
|
|
4717
4896
|
// For now, we just allow typing without immediate parsing
|
|
4718
4897
|
}
|
|
4719
4898
|
onInputBlur() {
|
|
4899
|
+
this._inputFocused.set(false);
|
|
4720
4900
|
if (this.allowManualInput()) {
|
|
4721
4901
|
this.parseAndSetValue(this.inputRef().nativeElement.value);
|
|
4722
4902
|
}
|
|
4723
4903
|
this.onTouched();
|
|
4904
|
+
this.touched.set(true);
|
|
4724
4905
|
}
|
|
4725
4906
|
onPanelKeydown(event) {
|
|
4726
4907
|
switch (event.key) {
|
|
@@ -4760,6 +4941,31 @@ class ComDatepicker {
|
|
|
4760
4941
|
onActiveDateChange(date) {
|
|
4761
4942
|
this.calendarActiveDate.set(date);
|
|
4762
4943
|
}
|
|
4944
|
+
// ============ FormFieldControl IMPLEMENTATION ============
|
|
4945
|
+
/**
|
|
4946
|
+
* Called when the form field container is clicked.
|
|
4947
|
+
* Implements FormFieldControl.
|
|
4948
|
+
*/
|
|
4949
|
+
onContainerClick(event) {
|
|
4950
|
+
const target = event.target;
|
|
4951
|
+
if (!this.disabled() && !this.triggerRef().nativeElement.contains(target)) {
|
|
4952
|
+
this.toggle();
|
|
4953
|
+
}
|
|
4954
|
+
}
|
|
4955
|
+
/**
|
|
4956
|
+
* Sets the describedBy IDs from the form field.
|
|
4957
|
+
* Called by the parent form field component.
|
|
4958
|
+
*/
|
|
4959
|
+
setDescribedByIds(ids) {
|
|
4960
|
+
this._describedByIds.set(ids);
|
|
4961
|
+
}
|
|
4962
|
+
/**
|
|
4963
|
+
* Sets the appearance for styling.
|
|
4964
|
+
* Called by the parent form field component.
|
|
4965
|
+
*/
|
|
4966
|
+
setAppearance(appearance) {
|
|
4967
|
+
this._appearance.set(appearance);
|
|
4968
|
+
}
|
|
4763
4969
|
// ============ PRIVATE METHODS ============
|
|
4764
4970
|
createOverlay() {
|
|
4765
4971
|
if (this.overlayRef) {
|
|
@@ -4799,7 +5005,7 @@ class ComDatepicker {
|
|
|
4799
5005
|
}
|
|
4800
5006
|
}
|
|
4801
5007
|
updateValue(value) {
|
|
4802
|
-
this.
|
|
5008
|
+
this.value.set(value);
|
|
4803
5009
|
this.onChange(value);
|
|
4804
5010
|
this.dateChange.emit(value);
|
|
4805
5011
|
this.onValidatorChange();
|
|
@@ -4847,9 +5053,10 @@ class ComDatepicker {
|
|
|
4847
5053
|
this.liveAnnouncement.set(message);
|
|
4848
5054
|
}
|
|
4849
5055
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComDatepicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4850
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComDatepicker, isStandalone: true, selector: "com-datepicker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: "showTodayButton", publicName: "showTodayButton", isSignal: true, isRequired: false, transformFunction: null }, showFooterClearButton: { classPropertyName: "showFooterClearButton", publicName: "showFooterClearButton", isSignal: true, isRequired: false, transformFunction: null }, keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null }, allowManualInput: { classPropertyName: "allowManualInput", publicName: "allowManualInput", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, panelWidth: { classPropertyName: "panelWidth", publicName: "panelWidth", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "ariaDescribedBy", isSignal: true, isRequired: false, transformFunction: null }, showTimePicker: { classPropertyName: "showTimePicker", publicName: "showTimePicker", isSignal: true, isRequired: false, transformFunction: null }, use12HourFormat: { classPropertyName: "use12HourFormat", publicName: "use12HourFormat", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateChange: "dateChange", opened: "opened", closed: "closed" }, host: { properties: { "class.com-datepicker-disabled": "disabled()", "class.com-datepicker-open": "isOpen()" }, classAttribute: "com-datepicker-host inline-block" }, providers: [
|
|
5056
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComDatepicker, isStandalone: true, selector: "com-datepicker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: "showTodayButton", publicName: "showTodayButton", isSignal: true, isRequired: false, transformFunction: null }, showFooterClearButton: { classPropertyName: "showFooterClearButton", publicName: "showFooterClearButton", isSignal: true, isRequired: false, transformFunction: null }, keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null }, allowManualInput: { classPropertyName: "allowManualInput", publicName: "allowManualInput", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, panelWidth: { classPropertyName: "panelWidth", publicName: "panelWidth", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "ariaDescribedBy", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, sfErrors: { classPropertyName: "sfErrors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, showTimePicker: { classPropertyName: "showTimePicker", publicName: "showTimePicker", isSignal: true, isRequired: false, transformFunction: null }, use12HourFormat: { classPropertyName: "use12HourFormat", publicName: "use12HourFormat", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", dateChange: "dateChange", opened: "opened", closed: "closed" }, host: { properties: { "class.com-datepicker-disabled": "disabled()", "class.com-datepicker-open": "isOpen()" }, classAttribute: "com-datepicker-host inline-block" }, providers: [
|
|
4851
5057
|
SingleSelectionStrategy,
|
|
4852
5058
|
{ provide: CALENDAR_SELECTION_STRATEGY, useExisting: SingleSelectionStrategy },
|
|
5059
|
+
{ provide: FormFieldControl, useExisting: forwardRef(() => ComDatepicker) },
|
|
4853
5060
|
], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerElement"], descendants: true, isSignal: true }, { propertyName: "inputRef", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }], exportAs: ["comDatepicker"], ngImport: i0, template: `
|
|
4854
5061
|
<!-- Trigger container -->
|
|
4855
5062
|
<div
|
|
@@ -4873,9 +5080,10 @@ class ComDatepicker {
|
|
|
4873
5080
|
[readonly]="!allowManualInput()"
|
|
4874
5081
|
[attr.id]="inputId()"
|
|
4875
5082
|
[attr.aria-label]="ariaLabel() || placeholder()"
|
|
4876
|
-
[attr.aria-describedby]="
|
|
4877
|
-
[attr.aria-invalid]="
|
|
5083
|
+
[attr.aria-describedby]="effectiveAriaDescribedBy() || null"
|
|
5084
|
+
[attr.aria-invalid]="effectiveState() === 'error' || null"
|
|
4878
5085
|
[attr.aria-required]="required() || null"
|
|
5086
|
+
(focus)="onInputFocus()"
|
|
4879
5087
|
(input)="onInputChange($event)"
|
|
4880
5088
|
(blur)="onInputBlur()"
|
|
4881
5089
|
(keydown)="onInputKeydown($event)"
|
|
@@ -4983,7 +5191,7 @@ class ComDatepicker {
|
|
|
4983
5191
|
<div class="sr-only" aria-live="polite" aria-atomic="true">
|
|
4984
5192
|
{{ liveAnnouncement() }}
|
|
4985
5193
|
</div>
|
|
4986
|
-
`, isInline: true, styles: [".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ComCalendar, selector: "com-calendar", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "cellTemplate"], outputs: ["selectedChange", "viewChanged", "activeDateChange"] }, { kind: "component", type: ComIcon, selector: "com-icon", inputs: ["name", "img", "color", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "component", type: ComTimePicker, selector: "com-time-picker", inputs: ["value", "disabled", "required", "showSeconds", "use12HourFormat", "minuteStep", "secondStep", "minTime", "maxTime", "variant", "size", "state", "ariaLabel", "class", "placeholder"], outputs: ["timeChange"], exportAs: ["comTimePicker"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5194
|
+
`, isInline: true, styles: [".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ComCalendar, selector: "com-calendar", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "cellTemplate"], outputs: ["selectedChange", "viewChanged", "activeDateChange"] }, { kind: "component", type: ComIcon, selector: "com-icon", inputs: ["name", "img", "color", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "component", type: ComTimePicker, selector: "com-time-picker", inputs: ["value", "disabled", "required", "showSeconds", "use12HourFormat", "minuteStep", "secondStep", "minTime", "maxTime", "variant", "size", "state", "ariaLabel", "class", "placeholder", "errorStateMatcher", "touched", "invalid", "errors"], outputs: ["valueChange", "disabledChange", "touchedChange", "timeChange"], exportAs: ["comTimePicker"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4987
5195
|
}
|
|
4988
5196
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComDatepicker, decorators: [{
|
|
4989
5197
|
type: Component,
|
|
@@ -5010,9 +5218,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
5010
5218
|
[readonly]="!allowManualInput()"
|
|
5011
5219
|
[attr.id]="inputId()"
|
|
5012
5220
|
[attr.aria-label]="ariaLabel() || placeholder()"
|
|
5013
|
-
[attr.aria-describedby]="
|
|
5014
|
-
[attr.aria-invalid]="
|
|
5221
|
+
[attr.aria-describedby]="effectiveAriaDescribedBy() || null"
|
|
5222
|
+
[attr.aria-invalid]="effectiveState() === 'error' || null"
|
|
5015
5223
|
[attr.aria-required]="required() || null"
|
|
5224
|
+
(focus)="onInputFocus()"
|
|
5016
5225
|
(input)="onInputChange($event)"
|
|
5017
5226
|
(blur)="onInputBlur()"
|
|
5018
5227
|
(keydown)="onInputKeydown($event)"
|
|
@@ -5129,12 +5338,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
5129
5338
|
], providers: [
|
|
5130
5339
|
SingleSelectionStrategy,
|
|
5131
5340
|
{ provide: CALENDAR_SELECTION_STRATEGY, useExisting: SingleSelectionStrategy },
|
|
5341
|
+
{ provide: FormFieldControl, useExisting: forwardRef(() => ComDatepicker) },
|
|
5132
5342
|
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
5133
5343
|
class: 'com-datepicker-host inline-block',
|
|
5134
5344
|
'[class.com-datepicker-disabled]': 'disabled()',
|
|
5135
5345
|
'[class.com-datepicker-open]': 'isOpen()',
|
|
5136
5346
|
}, styles: [".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
|
|
5137
|
-
}], ctorParameters: () => [], propDecorators: { triggerRef: [{ type: i0.ViewChild, args: ['triggerElement', { isSignal: true }] }], inputRef: [{ type: i0.ViewChild, args: ['inputElement', { isSignal: true }] }], panelTemplateRef: [{ type: i0.ViewChild, args: ['panelTemplate', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], dateFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFilter", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], startView: [{ type: i0.Input, args: [{ isSignal: true, alias: "startView", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], showClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClearButton", required: false }] }], showTodayButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTodayButton", required: false }] }], showFooterClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFooterClearButton", required: false }] }], keepOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepOpen", required: false }] }], allowManualInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowManualInput", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], panelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelWidth", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], showTimePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTimePicker", required: false }] }], use12HourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "use12HourFormat", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], dateChange: [{ type: i0.Output, args: ["dateChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
5347
|
+
}], ctorParameters: () => [], propDecorators: { triggerRef: [{ type: i0.ViewChild, args: ['triggerElement', { isSignal: true }] }], inputRef: [{ type: i0.ViewChild, args: ['inputElement', { isSignal: true }] }], panelTemplateRef: [{ type: i0.ViewChild, args: ['panelTemplate', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], dateFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFilter", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], startView: [{ type: i0.Input, args: [{ isSignal: true, alias: "startView", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], showClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClearButton", required: false }] }], showTodayButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTodayButton", required: false }] }], showFooterClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFooterClearButton", required: false }] }], keepOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepOpen", required: false }] }], allowManualInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowManualInput", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], panelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelWidth", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], errorStateMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorStateMatcher", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], sfErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], showTimePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTimePicker", required: false }] }], use12HourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "use12HourFormat", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], dateChange: [{ type: i0.Output, args: ["dateChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
5138
5348
|
|
|
5139
5349
|
/** Default position for the datepicker panel. */
|
|
5140
5350
|
const DEFAULT_POSITIONS = [
|
|
@@ -5177,8 +5387,11 @@ class ComDateRangePicker {
|
|
|
5177
5387
|
viewContainerRef = inject(ViewContainerRef);
|
|
5178
5388
|
document = inject(DOCUMENT);
|
|
5179
5389
|
dateAdapter = inject(DATE_ADAPTER);
|
|
5180
|
-
/**
|
|
5390
|
+
/** NgControl bound to this date range picker (if using reactive forms). */
|
|
5181
5391
|
ngControl = inject(NgControl, { optional: true, self: true });
|
|
5392
|
+
defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
5393
|
+
parentForm = inject(NgForm, { optional: true });
|
|
5394
|
+
parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
5182
5395
|
/** Reference to the trigger element. */
|
|
5183
5396
|
triggerRef = viewChild.required('triggerElement');
|
|
5184
5397
|
/** Reference to the start input element. */
|
|
@@ -5193,7 +5406,7 @@ class ComDateRangePicker {
|
|
|
5193
5406
|
datepickerId = generateDatepickerId();
|
|
5194
5407
|
// ============ INPUTS ============
|
|
5195
5408
|
/** Current value. */
|
|
5196
|
-
value =
|
|
5409
|
+
value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
5197
5410
|
/** Minimum selectable date. */
|
|
5198
5411
|
min = input(null, ...(ngDevMode ? [{ debugName: "min" }] : []));
|
|
5199
5412
|
/** Maximum selectable date. */
|
|
@@ -5242,6 +5455,12 @@ class ComDateRangePicker {
|
|
|
5242
5455
|
startAriaLabel = input(null, ...(ngDevMode ? [{ debugName: "startAriaLabel" }] : []));
|
|
5243
5456
|
/** Accessible label for the end input. */
|
|
5244
5457
|
endAriaLabel = input(null, ...(ngDevMode ? [{ debugName: "endAriaLabel" }] : []));
|
|
5458
|
+
/** Custom error state matcher for determining when to show errors. */
|
|
5459
|
+
errorStateMatcher = input(...(ngDevMode ? [undefined, { debugName: "errorStateMatcher" }] : []));
|
|
5460
|
+
// Signal Forms inputs — set automatically by [formField] via setInputOnDirectives
|
|
5461
|
+
touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
|
|
5462
|
+
invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
|
|
5463
|
+
sfErrors = input([], { ...(ngDevMode ? { debugName: "sfErrors" } : {}), alias: 'errors' });
|
|
5245
5464
|
/** Whether to show time pickers below the calendar. */
|
|
5246
5465
|
showTimePicker = input(false, ...(ngDevMode ? [{ debugName: "showTimePicker" }] : []));
|
|
5247
5466
|
/** 12h vs 24h format for the time pickers. `null` = auto-detect. */
|
|
@@ -5268,9 +5487,46 @@ class ComDateRangePicker {
|
|
|
5268
5487
|
calendarActiveDate = signal(this.dateAdapter.today(), ...(ngDevMode ? [{ debugName: "calendarActiveDate" }] : []));
|
|
5269
5488
|
/** Live announcements for screen readers. */
|
|
5270
5489
|
liveAnnouncement = signal('', ...(ngDevMode ? [{ debugName: "liveAnnouncement" }] : []));
|
|
5490
|
+
/** Whether any input is focused. */
|
|
5491
|
+
_inputFocused = signal(false, ...(ngDevMode ? [{ debugName: "_inputFocused" }] : []));
|
|
5492
|
+
/** IDs for aria-describedby (set by form-field). */
|
|
5493
|
+
_describedByIds = signal('', ...(ngDevMode ? [{ debugName: "_describedByIds" }] : []));
|
|
5494
|
+
/** Form field appearance (set by form-field). */
|
|
5495
|
+
_appearance = signal('outline', ...(ngDevMode ? [{ debugName: "_appearance" }] : []));
|
|
5496
|
+
// ============ FormFieldControl SIGNALS ============
|
|
5497
|
+
/** Whether the date range picker is focused. Implements FormFieldControl. */
|
|
5498
|
+
focused = computed(() => this._inputFocused() || this.isOpen(), ...(ngDevMode ? [{ debugName: "focused" }] : []));
|
|
5499
|
+
/** Whether the label should float. */
|
|
5500
|
+
shouldLabelFloat = computed(() => this.focused() || this.hasValue(), ...(ngDevMode ? [{ debugName: "shouldLabelFloat" }] : []));
|
|
5501
|
+
/** Whether the control is in an error state. Implements FormFieldControl. */
|
|
5502
|
+
errorState = computed(() => {
|
|
5503
|
+
if (!this.ngControl) {
|
|
5504
|
+
return this.invalid() && this.touched();
|
|
5505
|
+
}
|
|
5506
|
+
this.isOpen();
|
|
5507
|
+
this.hasValue();
|
|
5508
|
+
const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;
|
|
5509
|
+
const form = this.parentFormGroup ?? this.parentForm;
|
|
5510
|
+
return matcher.isErrorState(this.ngControl.control ?? null, form);
|
|
5511
|
+
}, ...(ngDevMode ? [{ debugName: "errorState" }] : []));
|
|
5512
|
+
/** Structured validation errors from Signal Forms. */
|
|
5513
|
+
errors = computed(() => !this.ngControl ? this.sfErrors() : null, ...(ngDevMode ? [{ debugName: "errors" }] : []));
|
|
5514
|
+
/** Unique ID for the control (maps to start input). Implements FormFieldControl. */
|
|
5515
|
+
id = computed(() => `${this.datepickerId}-start`, ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
5516
|
+
/**
|
|
5517
|
+
* Effective state combining manual state with automatic error detection.
|
|
5518
|
+
*/
|
|
5519
|
+
effectiveState = computed(() => {
|
|
5520
|
+
const manualState = this.state();
|
|
5521
|
+
if (manualState !== 'default')
|
|
5522
|
+
return manualState;
|
|
5523
|
+
return this.errorState() ? 'error' : 'default';
|
|
5524
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveState" }] : []));
|
|
5525
|
+
/** Combined aria-describedby from form-field. */
|
|
5526
|
+
effectiveAriaDescribedBy = computed(() => this._describedByIds() || null, ...(ngDevMode ? [{ debugName: "effectiveAriaDescribedBy" }] : []));
|
|
5271
5527
|
// ============ COMPUTED STATE ============
|
|
5272
|
-
/** Start input element ID. */
|
|
5273
|
-
startInputId =
|
|
5528
|
+
/** Start input element ID (alias for FormFieldControl id). */
|
|
5529
|
+
startInputId = this.id;
|
|
5274
5530
|
/** End input element ID. */
|
|
5275
5531
|
endInputId = computed(() => `${this.datepickerId}-end`, ...(ngDevMode ? [{ debugName: "endInputId" }] : []));
|
|
5276
5532
|
/** Panel element ID. */
|
|
@@ -5315,11 +5571,16 @@ class ComDateRangePicker {
|
|
|
5315
5571
|
const baseClasses = datepickerTriggerVariants({
|
|
5316
5572
|
variant: this.variant(),
|
|
5317
5573
|
size: this.size(),
|
|
5318
|
-
state: this.
|
|
5574
|
+
state: this.effectiveState(),
|
|
5319
5575
|
open: this.isOpen(),
|
|
5320
5576
|
});
|
|
5321
5577
|
const disabledClasses = this.disabled() ? datepickerDisabledVariants() : '';
|
|
5322
|
-
|
|
5578
|
+
// For naked variant, add padding based on form-field appearance
|
|
5579
|
+
let paddingClasses = '';
|
|
5580
|
+
if (this.variant() === 'naked') {
|
|
5581
|
+
paddingClasses = this._appearance() === 'fill' ? 'pt-5 pb-1.5 px-3' : 'py-2.5 px-3';
|
|
5582
|
+
}
|
|
5583
|
+
return mergeClasses(baseClasses, disabledClasses, paddingClasses, this.userClass());
|
|
5323
5584
|
}, ...(ngDevMode ? [{ debugName: "triggerClasses" }] : []));
|
|
5324
5585
|
/** Computed input classes. */
|
|
5325
5586
|
inputClasses = computed(() => {
|
|
@@ -5484,6 +5745,7 @@ class ComDateRangePicker {
|
|
|
5484
5745
|
this.isOpen.set(false);
|
|
5485
5746
|
this.closed.emit();
|
|
5486
5747
|
this.onTouched();
|
|
5748
|
+
this.touched.set(true);
|
|
5487
5749
|
// Return focus to appropriate input
|
|
5488
5750
|
const activeInput = this.activeInput();
|
|
5489
5751
|
if (activeInput === 'end') {
|
|
@@ -5547,9 +5809,11 @@ class ComDateRangePicker {
|
|
|
5547
5809
|
}
|
|
5548
5810
|
onStartInputFocus() {
|
|
5549
5811
|
this.activeInput.set('start');
|
|
5812
|
+
this._inputFocused.set(true);
|
|
5550
5813
|
}
|
|
5551
5814
|
onEndInputFocus() {
|
|
5552
5815
|
this.activeInput.set('end');
|
|
5816
|
+
this._inputFocused.set(true);
|
|
5553
5817
|
}
|
|
5554
5818
|
onInputKeydown(event, inputType) {
|
|
5555
5819
|
switch (event.key) {
|
|
@@ -5592,16 +5856,20 @@ class ComDateRangePicker {
|
|
|
5592
5856
|
// Debounced in blur handler
|
|
5593
5857
|
}
|
|
5594
5858
|
onStartInputBlur() {
|
|
5859
|
+
this._inputFocused.set(false);
|
|
5595
5860
|
if (this.allowManualInput()) {
|
|
5596
5861
|
this.parseAndSetStart(this.startInputRef().nativeElement.value);
|
|
5597
5862
|
}
|
|
5598
5863
|
this.onTouched();
|
|
5864
|
+
this.touched.set(true);
|
|
5599
5865
|
}
|
|
5600
5866
|
onEndInputBlur() {
|
|
5867
|
+
this._inputFocused.set(false);
|
|
5601
5868
|
if (this.allowManualInput()) {
|
|
5602
5869
|
this.parseAndSetEnd(this.endInputRef().nativeElement.value);
|
|
5603
5870
|
}
|
|
5604
5871
|
this.onTouched();
|
|
5872
|
+
this.touched.set(true);
|
|
5605
5873
|
}
|
|
5606
5874
|
onPanelKeydown(event) {
|
|
5607
5875
|
switch (event.key) {
|
|
@@ -5648,6 +5916,32 @@ class ComDateRangePicker {
|
|
|
5648
5916
|
const updated = this.dateAdapter.setTime(endDate, time.hours, time.minutes, time.seconds);
|
|
5649
5917
|
this.updateValue(createDateRangeValue(value?.start ?? null, updated));
|
|
5650
5918
|
}
|
|
5919
|
+
// ============ FormFieldControl IMPLEMENTATION ============
|
|
5920
|
+
/**
|
|
5921
|
+
* Called when the form field container is clicked.
|
|
5922
|
+
* Implements FormFieldControl.
|
|
5923
|
+
*/
|
|
5924
|
+
onContainerClick(event) {
|
|
5925
|
+
const target = event.target;
|
|
5926
|
+
if (!this.disabled() && !this.triggerRef().nativeElement.contains(target)) {
|
|
5927
|
+
this.open();
|
|
5928
|
+
this.startInputRef().nativeElement.focus();
|
|
5929
|
+
}
|
|
5930
|
+
}
|
|
5931
|
+
/**
|
|
5932
|
+
* Sets the describedBy IDs from the form field.
|
|
5933
|
+
* Called by the parent form field component.
|
|
5934
|
+
*/
|
|
5935
|
+
setDescribedByIds(ids) {
|
|
5936
|
+
this._describedByIds.set(ids);
|
|
5937
|
+
}
|
|
5938
|
+
/**
|
|
5939
|
+
* Sets the appearance for styling.
|
|
5940
|
+
* Called by the parent form field component.
|
|
5941
|
+
*/
|
|
5942
|
+
setAppearance(appearance) {
|
|
5943
|
+
this._appearance.set(appearance);
|
|
5944
|
+
}
|
|
5651
5945
|
// ============ PRIVATE METHODS ============
|
|
5652
5946
|
createOverlay() {
|
|
5653
5947
|
if (this.overlayRef) {
|
|
@@ -5687,7 +5981,7 @@ class ComDateRangePicker {
|
|
|
5687
5981
|
}
|
|
5688
5982
|
}
|
|
5689
5983
|
updateValue(value) {
|
|
5690
|
-
this.
|
|
5984
|
+
this.value.set(value);
|
|
5691
5985
|
this.onChange(value);
|
|
5692
5986
|
this.rangeChange.emit(value);
|
|
5693
5987
|
this.onValidatorChange();
|
|
@@ -5764,9 +6058,10 @@ class ComDateRangePicker {
|
|
|
5764
6058
|
this.liveAnnouncement.set(message);
|
|
5765
6059
|
}
|
|
5766
6060
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComDateRangePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5767
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComDateRangePicker, isStandalone: true, selector: "com-date-range-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, startPlaceholder: { classPropertyName: "startPlaceholder", publicName: "startPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, endPlaceholder: { classPropertyName: "endPlaceholder", publicName: "endPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: "showTodayButton", publicName: "showTodayButton", isSignal: true, isRequired: false, transformFunction: null }, showFooterClearButton: { classPropertyName: "showFooterClearButton", publicName: "showFooterClearButton", isSignal: true, isRequired: false, transformFunction: null }, keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null }, allowManualInput: { classPropertyName: "allowManualInput", publicName: "allowManualInput", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, panelWidth: { classPropertyName: "panelWidth", publicName: "panelWidth", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, startAriaLabel: { classPropertyName: "startAriaLabel", publicName: "startAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, endAriaLabel: { classPropertyName: "endAriaLabel", publicName: "endAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, showTimePicker: { classPropertyName: "showTimePicker", publicName: "showTimePicker", isSignal: true, isRequired: false, transformFunction: null }, use12HourFormat: { classPropertyName: "use12HourFormat", publicName: "use12HourFormat", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rangeChange: "rangeChange", opened: "opened", closed: "closed" }, host: { properties: { "class.com-date-range-picker-disabled": "disabled()", "class.com-date-range-picker-open": "isOpen()" }, classAttribute: "com-date-range-picker-host inline-block" }, providers: [
|
|
6061
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComDateRangePicker, isStandalone: true, selector: "com-date-range-picker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, startPlaceholder: { classPropertyName: "startPlaceholder", publicName: "startPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, endPlaceholder: { classPropertyName: "endPlaceholder", publicName: "endPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, showClearButton: { classPropertyName: "showClearButton", publicName: "showClearButton", isSignal: true, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: "showTodayButton", publicName: "showTodayButton", isSignal: true, isRequired: false, transformFunction: null }, showFooterClearButton: { classPropertyName: "showFooterClearButton", publicName: "showFooterClearButton", isSignal: true, isRequired: false, transformFunction: null }, keepOpen: { classPropertyName: "keepOpen", publicName: "keepOpen", isSignal: true, isRequired: false, transformFunction: null }, allowManualInput: { classPropertyName: "allowManualInput", publicName: "allowManualInput", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, panelWidth: { classPropertyName: "panelWidth", publicName: "panelWidth", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, startAriaLabel: { classPropertyName: "startAriaLabel", publicName: "startAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, endAriaLabel: { classPropertyName: "endAriaLabel", publicName: "endAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, sfErrors: { classPropertyName: "sfErrors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, showTimePicker: { classPropertyName: "showTimePicker", publicName: "showTimePicker", isSignal: true, isRequired: false, transformFunction: null }, use12HourFormat: { classPropertyName: "use12HourFormat", publicName: "use12HourFormat", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", rangeChange: "rangeChange", opened: "opened", closed: "closed" }, host: { properties: { "class.com-date-range-picker-disabled": "disabled()", "class.com-date-range-picker-open": "isOpen()" }, classAttribute: "com-date-range-picker-host inline-block" }, providers: [
|
|
5768
6062
|
RangeSelectionStrategy,
|
|
5769
6063
|
{ provide: CALENDAR_SELECTION_STRATEGY, useExisting: RangeSelectionStrategy },
|
|
6064
|
+
{ provide: FormFieldControl, useExisting: forwardRef(() => ComDateRangePicker) },
|
|
5770
6065
|
], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["triggerElement"], descendants: true, isSignal: true }, { propertyName: "startInputRef", first: true, predicate: ["startInputElement"], descendants: true, isSignal: true }, { propertyName: "endInputRef", first: true, predicate: ["endInputElement"], descendants: true, isSignal: true }, { propertyName: "panelTemplateRef", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }], exportAs: ["comDateRangePicker"], ngImport: i0, template: `
|
|
5771
6066
|
<!-- Trigger container -->
|
|
5772
6067
|
<div
|
|
@@ -5790,7 +6085,8 @@ class ComDateRangePicker {
|
|
|
5790
6085
|
[readonly]="!allowManualInput()"
|
|
5791
6086
|
[attr.id]="startInputId()"
|
|
5792
6087
|
[attr.aria-label]="startAriaLabel() || startPlaceholder()"
|
|
5793
|
-
[attr.aria-
|
|
6088
|
+
[attr.aria-describedby]="effectiveAriaDescribedBy() || null"
|
|
6089
|
+
[attr.aria-invalid]="effectiveState() === 'error' || null"
|
|
5794
6090
|
[attr.aria-required]="required() || null"
|
|
5795
6091
|
(focus)="onStartInputFocus()"
|
|
5796
6092
|
(input)="onStartInputChange($event)"
|
|
@@ -5814,7 +6110,7 @@ class ComDateRangePicker {
|
|
|
5814
6110
|
[readonly]="!allowManualInput()"
|
|
5815
6111
|
[attr.id]="endInputId()"
|
|
5816
6112
|
[attr.aria-label]="endAriaLabel() || endPlaceholder()"
|
|
5817
|
-
[attr.aria-invalid]="
|
|
6113
|
+
[attr.aria-invalid]="effectiveState() === 'error' || null"
|
|
5818
6114
|
(focus)="onEndInputFocus()"
|
|
5819
6115
|
(input)="onEndInputChange($event)"
|
|
5820
6116
|
(blur)="onEndInputBlur()"
|
|
@@ -5947,7 +6243,7 @@ class ComDateRangePicker {
|
|
|
5947
6243
|
<div class="sr-only" aria-live="polite" aria-atomic="true">
|
|
5948
6244
|
{{ liveAnnouncement() }}
|
|
5949
6245
|
</div>
|
|
5950
|
-
`, isInline: true, styles: [".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ComCalendar, selector: "com-calendar", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "cellTemplate"], outputs: ["selectedChange", "viewChanged", "activeDateChange"] }, { kind: "component", type: ComIcon, selector: "com-icon", inputs: ["name", "img", "color", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "component", type: ComTimePicker, selector: "com-time-picker", inputs: ["value", "disabled", "required", "showSeconds", "use12HourFormat", "minuteStep", "secondStep", "minTime", "maxTime", "variant", "size", "state", "ariaLabel", "class", "placeholder"], outputs: ["timeChange"], exportAs: ["comTimePicker"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6246
|
+
`, isInline: true, styles: [".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: ComCalendar, selector: "com-calendar", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "cellTemplate"], outputs: ["selectedChange", "viewChanged", "activeDateChange"] }, { kind: "component", type: ComIcon, selector: "com-icon", inputs: ["name", "img", "color", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "component", type: ComTimePicker, selector: "com-time-picker", inputs: ["value", "disabled", "required", "showSeconds", "use12HourFormat", "minuteStep", "secondStep", "minTime", "maxTime", "variant", "size", "state", "ariaLabel", "class", "placeholder", "errorStateMatcher", "touched", "invalid", "errors"], outputs: ["valueChange", "disabledChange", "touchedChange", "timeChange"], exportAs: ["comTimePicker"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5951
6247
|
}
|
|
5952
6248
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComDateRangePicker, decorators: [{
|
|
5953
6249
|
type: Component,
|
|
@@ -5974,7 +6270,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
5974
6270
|
[readonly]="!allowManualInput()"
|
|
5975
6271
|
[attr.id]="startInputId()"
|
|
5976
6272
|
[attr.aria-label]="startAriaLabel() || startPlaceholder()"
|
|
5977
|
-
[attr.aria-
|
|
6273
|
+
[attr.aria-describedby]="effectiveAriaDescribedBy() || null"
|
|
6274
|
+
[attr.aria-invalid]="effectiveState() === 'error' || null"
|
|
5978
6275
|
[attr.aria-required]="required() || null"
|
|
5979
6276
|
(focus)="onStartInputFocus()"
|
|
5980
6277
|
(input)="onStartInputChange($event)"
|
|
@@ -5998,7 +6295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
5998
6295
|
[readonly]="!allowManualInput()"
|
|
5999
6296
|
[attr.id]="endInputId()"
|
|
6000
6297
|
[attr.aria-label]="endAriaLabel() || endPlaceholder()"
|
|
6001
|
-
[attr.aria-invalid]="
|
|
6298
|
+
[attr.aria-invalid]="effectiveState() === 'error' || null"
|
|
6002
6299
|
(focus)="onEndInputFocus()"
|
|
6003
6300
|
(input)="onEndInputChange($event)"
|
|
6004
6301
|
(blur)="onEndInputBlur()"
|
|
@@ -6140,12 +6437,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
6140
6437
|
], providers: [
|
|
6141
6438
|
RangeSelectionStrategy,
|
|
6142
6439
|
{ provide: CALENDAR_SELECTION_STRATEGY, useExisting: RangeSelectionStrategy },
|
|
6440
|
+
{ provide: FormFieldControl, useExisting: forwardRef(() => ComDateRangePicker) },
|
|
6143
6441
|
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
6144
6442
|
class: 'com-date-range-picker-host inline-block',
|
|
6145
6443
|
'[class.com-date-range-picker-disabled]': 'disabled()',
|
|
6146
6444
|
'[class.com-date-range-picker-open]': 'isOpen()',
|
|
6147
6445
|
}, styles: [".sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
|
|
6148
|
-
}], ctorParameters: () => [], propDecorators: { triggerRef: [{ type: i0.ViewChild, args: ['triggerElement', { isSignal: true }] }], startInputRef: [{ type: i0.ViewChild, args: ['startInputElement', { isSignal: true }] }], endInputRef: [{ type: i0.ViewChild, args: ['endInputElement', { isSignal: true }] }], panelTemplateRef: [{ type: i0.ViewChild, args: ['panelTemplate', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], dateFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFilter", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], startView: [{ type: i0.Input, args: [{ isSignal: true, alias: "startView", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], startPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "startPlaceholder", required: false }] }], endPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "endPlaceholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], showClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClearButton", required: false }] }], showTodayButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTodayButton", required: false }] }], showFooterClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFooterClearButton", required: false }] }], keepOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepOpen", required: false }] }], allowManualInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowManualInput", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], panelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelWidth", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], startAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAriaLabel", required: false }] }], endAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "endAriaLabel", required: false }] }], showTimePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTimePicker", required: false }] }], use12HourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "use12HourFormat", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], rangeChange: [{ type: i0.Output, args: ["rangeChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
6446
|
+
}], ctorParameters: () => [], propDecorators: { triggerRef: [{ type: i0.ViewChild, args: ['triggerElement', { isSignal: true }] }], startInputRef: [{ type: i0.ViewChild, args: ['startInputElement', { isSignal: true }] }], endInputRef: [{ type: i0.ViewChild, args: ['endInputElement', { isSignal: true }] }], panelTemplateRef: [{ type: i0.ViewChild, args: ['panelTemplate', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], dateFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFilter", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], startView: [{ type: i0.Input, args: [{ isSignal: true, alias: "startView", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], startPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "startPlaceholder", required: false }] }], endPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "endPlaceholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], showClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClearButton", required: false }] }], showTodayButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTodayButton", required: false }] }], showFooterClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFooterClearButton", required: false }] }], keepOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "keepOpen", required: false }] }], allowManualInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowManualInput", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], panelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelWidth", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], startAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAriaLabel", required: false }] }], endAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "endAriaLabel", required: false }] }], errorStateMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorStateMatcher", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], sfErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], showTimePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTimePicker", required: false }] }], use12HourFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "use12HourFormat", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], minuteStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "minuteStep", required: false }] }], rangeChange: [{ type: i0.Output, args: ["rangeChange"] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
|
|
6149
6447
|
|
|
6150
6448
|
/**
|
|
6151
6449
|
* Datepicker components public API.
|