@energinet/watt 4.3.0 → 4.3.2

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.
@@ -1,9 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, input, output, signal, effect, untracked, ViewEncapsulation, Component, DestroyRef, ElementRef, HostBinding, Input, Directive } from '@angular/core';
2
+ import { inject, ChangeDetectorRef, input, output, signal, effect, untracked, ViewEncapsulation, Component, DestroyRef, ElementRef, computed, Directive } from '@angular/core';
3
3
  import { Maskito } from '@maskito/core';
4
4
  import { NgControl } from '@angular/forms';
5
5
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
6
- import { Subject } from 'rxjs';
7
6
 
8
7
  //#region License
9
8
  /**
@@ -34,8 +33,10 @@ class WattPlaceholderMaskComponent {
34
33
  primaryGhost = signal('', ...(ngDevMode ? [{ debugName: "primaryGhost" }] : []));
35
34
  primaryFiller = signal(null, ...(ngDevMode ? [{ debugName: "primaryFiller" }] : []));
36
35
  maskEffect = effect((onCleanup) => {
37
- const mask = this.mask();
38
36
  const placeholder = this.placeholder();
37
+ if (!placeholder)
38
+ return;
39
+ const mask = this.mask();
39
40
  const primaryMask = {
40
41
  ...mask,
41
42
  preprocessors: [
@@ -99,18 +100,11 @@ class WattPickerBase {
99
100
  static nextId = 0;
100
101
  id;
101
102
  initialValue = null;
102
- focused = false;
103
+ focused = signal(false, ...(ngDevMode ? [{ debugName: "focused" }] : []));
103
104
  controlType = 'mat-date-range-input'; // We keep the controlType of Material Date Range Input as is, to keep some styling.
104
- stateChanges = new Subject();
105
105
  // eslint-disable-next-line @angular-eslint/no-input-rename
106
106
  userAriaDescribedBy = input(undefined, ...(ngDevMode ? [{ debugName: "userAriaDescribedBy", alias: 'aria-describedby' }] : [{ alias: 'aria-describedby' }]));
107
- get placeholder() {
108
- return this._placeholder;
109
- }
110
- set placeholder(value) {
111
- this._placeholder = value;
112
- this.stateChanges.next();
113
- }
107
+ placeholder = signal('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
114
108
  get value() {
115
109
  if (this.ngControl?.valid) {
116
110
  const { value: { start, end }, } = this.ngControl;
@@ -118,16 +112,16 @@ class WattPickerBase {
118
112
  }
119
113
  return null;
120
114
  }
121
- set value(value) {
115
+ setValue(value) {
122
116
  const input = this.input();
123
117
  const startInput = this.startInput();
124
118
  const endInput = this.endInput();
125
- const inputNotToBeInTheDocument = !this.range ? !input : !startInput;
119
+ const inputNotToBeInTheDocument = !this.range() ? !input : !startInput;
126
120
  if (inputNotToBeInTheDocument) {
127
121
  this.initialValue = value;
128
122
  return;
129
123
  }
130
- if (this.range) {
124
+ if (this.range()) {
131
125
  if (!startInput || !endInput)
132
126
  return;
133
127
  this.setRangeValue(value, startInput.nativeElement, endInput.nativeElement);
@@ -137,33 +131,21 @@ class WattPickerBase {
137
131
  return;
138
132
  this.setSingleValue(value, input.nativeElement);
139
133
  }
140
- this.stateChanges.next();
141
- }
142
- set range(range) {
143
- this._range = coerceBooleanProperty(range);
144
- }
145
- get range() {
146
- return this._range;
147
134
  }
148
- _range = false;
149
- get required() {
150
- return this._required;
151
- }
152
- set required(value) {
153
- this._required = coerceBooleanProperty(value);
154
- this.stateChanges.next();
155
- }
156
- _required = false;
157
- get disabled() {
158
- return this._disabled;
159
- }
160
- set disabled(value) {
161
- this._disabled = coerceBooleanProperty(value);
162
- this.stateChanges.next();
163
- }
164
- _disabled = false;
135
+ range = input(false, ...(ngDevMode ? [{ debugName: "range", transform: coerceBooleanProperty }] : [{ transform: coerceBooleanProperty }]));
136
+ required = input(false, ...(ngDevMode ? [{ debugName: "required", transform: coerceBooleanProperty }] : [{ transform: coerceBooleanProperty }]));
137
+ disabledInput = input(false, ...(ngDevMode ? [{ debugName: "disabledInput",
138
+ // eslint-disable-next-line @angular-eslint/no-input-rename
139
+ alias: 'disabled',
140
+ transform: coerceBooleanProperty }] : [{
141
+ // eslint-disable-next-line @angular-eslint/no-input-rename
142
+ alias: 'disabled',
143
+ transform: coerceBooleanProperty,
144
+ }]));
145
+ disabledState = signal(false, ...(ngDevMode ? [{ debugName: "disabledState" }] : []));
146
+ disabled = computed(() => this.disabledInput() || this.disabledState(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
165
147
  get empty() {
166
- if (this.range) {
148
+ if (this.range()) {
167
149
  return !this.ngControl?.value?.start && !this.ngControl?.value?.end;
168
150
  }
169
151
  else {
@@ -173,9 +155,9 @@ class WattPickerBase {
173
155
  get errorState() {
174
156
  return !!this.ngControl?.invalid && !!this.ngControl?.touched;
175
157
  }
176
- get shouldLabelFloat() {
177
- return this.focused || !this.empty;
178
- }
158
+ shouldLabelFloat = computed(() => {
159
+ return this.focused() || !this.empty;
160
+ }, ...(ngDevMode ? [{ debugName: "shouldLabelFloat" }] : []));
179
161
  /**
180
162
  *
181
163
  * @ignore
@@ -195,16 +177,13 @@ class WattPickerBase {
195
177
  if (this.initialValue) {
196
178
  this.writeValue(this.initialValue);
197
179
  }
198
- if (this.range) {
180
+ if (this.range()) {
199
181
  this.initRangeInput();
200
182
  }
201
183
  else {
202
184
  this.initSingleInput();
203
185
  }
204
186
  }
205
- ngOnDestroy() {
206
- this.stateChanges.complete();
207
- }
208
187
  setDescribedByIds(ids) {
209
188
  this.elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));
210
189
  }
@@ -212,7 +191,7 @@ class WattPickerBase {
212
191
  // Intentionally left empty
213
192
  }
214
193
  writeValue(value) {
215
- this.value = value;
194
+ this.setValue(value);
216
195
  }
217
196
  registerOnChange(onChangeFn) {
218
197
  this.changeParentValue = onChangeFn;
@@ -221,13 +200,12 @@ class WattPickerBase {
221
200
  this.markParentControlAsTouched = onTouchFn;
222
201
  }
223
202
  setDisabledState(isDisabled) {
224
- this.disabled = isDisabled;
203
+ this.disabledState.set(isDisabled);
225
204
  this.changeDetectionRef.detectChanges();
226
205
  }
227
206
  onFocusIn() {
228
- if (!this.focused) {
229
- this.focused = true;
230
- this.stateChanges.next();
207
+ if (!this.focused()) {
208
+ this.focused.set(true);
231
209
  }
232
210
  }
233
211
  onFocusOut(event) {
@@ -235,9 +213,8 @@ class WattPickerBase {
235
213
  const overlay = id ? document.getElementById(id.value) : null;
236
214
  const isChild = overlay?.contains(event.relatedTarget);
237
215
  if (!this.elementRef.nativeElement.contains(event.relatedTarget) && !isChild) {
238
- this.focused = false;
216
+ this.focused.set(false);
239
217
  this.markParentControlAsTouched();
240
- this.stateChanges.next();
241
218
  }
242
219
  }
243
220
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -248,22 +225,16 @@ class WattPickerBase {
248
225
  // Intentionally left empty
249
226
  };
250
227
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: WattPickerBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
251
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: WattPickerBase, isStandalone: true, inputs: { userAriaDescribedBy: { classPropertyName: "userAriaDescribedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, range: { classPropertyName: "range", publicName: "range", isSignal: false, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null } }, host: { properties: { "attr.watt-field-disabled": "this.disabled" } }, ngImport: i0 });
228
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: WattPickerBase, isStandalone: true, inputs: { userAriaDescribedBy: { classPropertyName: "userAriaDescribedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.watt-field-disabled": "disabled()" } }, ngImport: i0 });
252
229
  }
253
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: WattPickerBase, decorators: [{
254
- type: Directive
255
- }], ctorParameters: () => [{ type: undefined }], propDecorators: { userAriaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], value: [{
256
- type: Input
257
- }], range: [{
258
- type: Input
259
- }], required: [{
260
- type: Input
261
- }], disabled: [{
262
- type: HostBinding,
263
- args: ['attr.watt-field-disabled']
264
- }, {
265
- type: Input
266
- }] } });
231
+ type: Directive,
232
+ args: [{
233
+ host: {
234
+ '[attr.watt-field-disabled]': 'disabled()',
235
+ },
236
+ }]
237
+ }], ctorParameters: () => [{ type: undefined }], propDecorators: { userAriaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], range: [{ type: i0.Input, args: [{ isSignal: true, alias: "range", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
267
238
 
268
239
  //#region License
269
240
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"energinet-watt-picker-__shared.mjs","sources":["../../../libs/watt/package/picker/__shared/placeholder-mask/watt-placeholder-mask.component.ts","../../../libs/watt/package/picker/__shared/placeholder-mask/watt-placeholder-mask.component.html","../../../libs/watt/package/picker/__shared/watt-picker-base.ts","../../../libs/watt/package/picker/__shared/index.ts","../../../libs/watt/package/picker/__shared/energinet-watt-picker-__shared.ts"],"sourcesContent":["//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport {\n ChangeDetectorRef,\n Component,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { Maskito, MaskitoOptions } from '@maskito/core';\n\n@Component({\n selector: 'watt-placeholder-mask',\n templateUrl: './watt-placeholder-mask.component.html',\n styleUrls: ['./watt-placeholder-mask.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class WattPlaceholderMaskComponent {\n cdr = inject(ChangeDetectorRef);\n primaryInputElement = input.required<HTMLInputElement>();\n secondaryInputElement = input<HTMLInputElement>();\n mask = input.required<MaskitoOptions>();\n placeholder = input.required<string>();\n maskApplied = output<string>();\n maskedInput = signal<Maskito | null>(null);\n primaryGhost = signal('');\n primaryFiller = signal<string | null>(null);\n\n maskEffect = effect((onCleanup) => {\n const mask = this.mask();\n const placeholder = this.placeholder();\n const primaryMask: MaskitoOptions = {\n ...mask,\n preprocessors: [\n ...(mask.preprocessors ?? []),\n (state) => {\n this.primaryGhost.set(state.elementState.value.slice(0, placeholder.length));\n this.primaryFiller.set(placeholder.slice(state.elementState.value.length));\n return state;\n },\n ],\n postprocessors: [\n (elementState) => {\n this.maskApplied.emit(elementState.value);\n return elementState;\n },\n ...(mask.postprocessors ?? []),\n ],\n };\n\n const maskedInput = new Maskito(this.primaryInputElement(), primaryMask);\n this.maskedInput.set(maskedInput);\n\n onCleanup(() => {\n maskedInput.destroy();\n this.maskedInput.set(null);\n });\n });\n\n inputEffect = effect(() => {\n const primaryInputElement = this.primaryInputElement();\n untracked(() => primaryInputElement.dispatchEvent(new InputEvent('input')));\n });\n}\n","<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<span class=\"ghost\">{{ primaryGhost() }}</span>\n<span class=\"filler\">{{ primaryFiller() ?? placeholder() }}</span>\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport {\n Input,\n OnInit,\n Signal,\n inject,\n Directive,\n OnDestroy,\n ElementRef,\n DestroyRef,\n HostBinding,\n AfterViewInit,\n ChangeDetectorRef,\n input,\n} from '@angular/core';\n\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { Subject } from 'rxjs';\n\nimport { WattDateRange } from '@energinet/watt/core/date';\n\nimport { WattPickerValue } from './watt-picker-value';\n@Directive()\nexport abstract class WattPickerBase\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor\n{\n protected destroyRef = inject(DestroyRef);\n protected changeDetectionRef = inject(ChangeDetectorRef);\n protected ngControl = inject(NgControl, { optional: true });\n protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n abstract input: Signal<ElementRef<HTMLInputElement> | undefined>;\n abstract endInput: Signal<ElementRef<HTMLInputElement> | undefined>;\n abstract startInput: Signal<ElementRef<HTMLInputElement> | undefined>;\n\n static nextId = 0;\n\n id: string;\n\n initialValue: WattPickerValue = null;\n\n focused = false;\n\n controlType = 'mat-date-range-input'; // We keep the controlType of Material Date Range Input as is, to keep some styling.\n\n stateChanges = new Subject<void>();\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n userAriaDescribedBy = input<string>(undefined, { alias: 'aria-describedby' });\n\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n\n protected abstract _placeholder: string;\n\n @Input()\n get value(): WattDateRange | null {\n if (this.ngControl?.valid) {\n const {\n value: { start, end },\n } = this.ngControl;\n\n return { start, end };\n }\n\n return null;\n }\n\n set value(value: WattPickerValue) {\n const input = this.input();\n const startInput = this.startInput();\n const endInput = this.endInput();\n\n const inputNotToBeInTheDocument = !this.range ? !input : !startInput;\n\n if (inputNotToBeInTheDocument) {\n this.initialValue = value;\n return;\n }\n\n if (this.range) {\n if (!startInput || !endInput) return;\n this.setRangeValue(value as WattDateRange, startInput.nativeElement, endInput.nativeElement);\n } else {\n if (!input) return;\n this.setSingleValue(value as Exclude<WattPickerValue, WattDateRange>, input.nativeElement);\n }\n\n this.stateChanges.next();\n }\n\n @Input()\n set range(range: boolean) {\n this._range = coerceBooleanProperty(range);\n }\n get range(): boolean {\n return this._range;\n }\n\n private _range = false;\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: BooleanInput) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @HostBinding('attr.watt-field-disabled')\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n private _disabled = false;\n\n get empty() {\n if (this.range) {\n return !this.ngControl?.value?.start && !this.ngControl?.value?.end;\n } else {\n return this.ngControl?.value?.length === 0;\n }\n }\n\n get errorState(): boolean {\n return !!this.ngControl?.invalid && !!this.ngControl?.touched;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n /**\n *\n * @ignore\n */\n control: FormControl | null = null;\n\n constructor(id: string) {\n this.id = id;\n this.elementRef.nativeElement.setAttribute('id', id);\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n this.control = this.ngControl?.control as FormControl;\n }\n\n ngAfterViewInit() {\n if (this.initialValue) {\n this.writeValue(this.initialValue);\n }\n\n if (this.range) {\n this.initRangeInput();\n } else {\n this.initSingleInput();\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n protected abstract initRangeInput(): void;\n\n protected abstract initSingleInput(): void;\n\n protected abstract setSingleValue(\n value: Exclude<WattPickerValue, WattDateRange>,\n input: HTMLInputElement\n ): void;\n\n protected abstract setRangeValue(\n value: WattDateRange,\n startInput: HTMLInputElement,\n endInput: HTMLInputElement\n ): void;\n\n setDescribedByIds(ids: string[]) {\n this.elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n }\n\n onContainerClick() {\n // Intentionally left empty\n }\n\n writeValue(value: WattPickerValue): void {\n this.value = value;\n }\n\n registerOnChange(onChangeFn: (value: string | WattDateRange) => void): void {\n this.changeParentValue = onChangeFn;\n }\n\n registerOnTouched(onTouchFn: () => void) {\n this.markParentControlAsTouched = onTouchFn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.changeDetectionRef.detectChanges();\n }\n\n onFocusIn() {\n if (!this.focused) {\n this.focused = true;\n this.stateChanges.next();\n }\n }\n\n onFocusOut(event: FocusEvent) {\n const id = this.elementRef.nativeElement.attributes.getNamedItem('aria-owns');\n const overlay = id ? document.getElementById(id.value) : null;\n const isChild = overlay?.contains(event.relatedTarget as Element);\n\n if (!this.elementRef.nativeElement.contains(event.relatedTarget as Element) && !isChild) {\n this.focused = false;\n this.markParentControlAsTouched();\n this.stateChanges.next();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected changeParentValue = (value: string | WattDateRange): void => {\n // Intentionally left empty\n };\n\n protected markParentControlAsTouched = (): void => {\n // Intentionally left empty\n };\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nexport { WattPlaceholderMaskComponent } from './placeholder-mask/watt-placeholder-mask.component';\nexport { WattPickerBase } from './watt-picker-base';\nexport { WattPickerValue } from './watt-picker-value';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"energinet-watt-picker-__shared.mjs","sources":["../../../libs/watt/package/picker/__shared/placeholder-mask/watt-placeholder-mask.component.ts","../../../libs/watt/package/picker/__shared/placeholder-mask/watt-placeholder-mask.component.html","../../../libs/watt/package/picker/__shared/watt-picker-base.ts","../../../libs/watt/package/picker/__shared/index.ts","../../../libs/watt/package/picker/__shared/energinet-watt-picker-__shared.ts"],"sourcesContent":["//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport {\n ChangeDetectorRef,\n Component,\n ViewEncapsulation,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { Maskito, MaskitoOptions } from '@maskito/core';\n\n@Component({\n selector: 'watt-placeholder-mask',\n templateUrl: './watt-placeholder-mask.component.html',\n styleUrls: ['./watt-placeholder-mask.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class WattPlaceholderMaskComponent {\n cdr = inject(ChangeDetectorRef);\n primaryInputElement = input.required<HTMLInputElement>();\n secondaryInputElement = input<HTMLInputElement>();\n mask = input.required<MaskitoOptions>();\n placeholder = input.required<string>();\n maskApplied = output<string>();\n maskedInput = signal<Maskito | null>(null);\n primaryGhost = signal('');\n primaryFiller = signal<string | null>(null);\n\n maskEffect = effect((onCleanup) => {\n const placeholder = this.placeholder();\n if (!placeholder) return;\n const mask = this.mask();\n const primaryMask: MaskitoOptions = {\n ...mask,\n preprocessors: [\n ...(mask.preprocessors ?? []),\n (state) => {\n this.primaryGhost.set(state.elementState.value.slice(0, placeholder.length));\n this.primaryFiller.set(placeholder.slice(state.elementState.value.length));\n return state;\n },\n ],\n postprocessors: [\n (elementState) => {\n this.maskApplied.emit(elementState.value);\n return elementState;\n },\n ...(mask.postprocessors ?? []),\n ],\n };\n\n const maskedInput = new Maskito(this.primaryInputElement(), primaryMask);\n this.maskedInput.set(maskedInput);\n\n onCleanup(() => {\n maskedInput.destroy();\n this.maskedInput.set(null);\n });\n });\n\n inputEffect = effect(() => {\n const primaryInputElement = this.primaryInputElement();\n untracked(() => primaryInputElement.dispatchEvent(new InputEvent('input')));\n });\n}\n","<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<span class=\"ghost\">{{ primaryGhost() }}</span>\n<span class=\"filler\">{{ primaryFiller() ?? placeholder() }}</span>\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nimport {\n Signal,\n OnInit,\n inject,\n signal,\n Directive,\n ElementRef,\n DestroyRef,\n AfterViewInit,\n ChangeDetectorRef,\n input,\n computed,\n} from '@angular/core';\n\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\n\nimport { WattDateRange } from '@energinet/watt/core/date';\n\nimport { WattPickerValue } from './watt-picker-value';\n\n@Directive({\n host: {\n '[attr.watt-field-disabled]': 'disabled()',\n },\n})\nexport abstract class WattPickerBase implements OnInit, AfterViewInit, ControlValueAccessor {\n protected destroyRef = inject(DestroyRef);\n protected changeDetectionRef = inject(ChangeDetectorRef);\n protected ngControl = inject(NgControl, { optional: true });\n protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n abstract input: Signal<ElementRef<HTMLInputElement> | undefined>;\n abstract endInput: Signal<ElementRef<HTMLInputElement> | undefined>;\n abstract startInput: Signal<ElementRef<HTMLInputElement> | undefined>;\n\n static nextId = 0;\n\n id: string;\n\n initialValue: WattPickerValue = null;\n\n focused = signal(false);\n\n controlType = 'mat-date-range-input'; // We keep the controlType of Material Date Range Input as is, to keep some styling.\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n userAriaDescribedBy = input<string>(undefined, { alias: 'aria-describedby' });\n\n placeholder = signal('');\n\n get value(): WattDateRange | null {\n if (this.ngControl?.valid) {\n const {\n value: { start, end },\n } = this.ngControl;\n\n return { start, end };\n }\n\n return null;\n }\n\n protected setValue(value: WattPickerValue) {\n const input = this.input();\n const startInput = this.startInput();\n const endInput = this.endInput();\n\n const inputNotToBeInTheDocument = !this.range() ? !input : !startInput;\n\n if (inputNotToBeInTheDocument) {\n this.initialValue = value;\n return;\n }\n\n if (this.range()) {\n if (!startInput || !endInput) return;\n this.setRangeValue(value as WattDateRange, startInput.nativeElement, endInput.nativeElement);\n } else {\n if (!input) return;\n this.setSingleValue(value as Exclude<WattPickerValue, WattDateRange>, input.nativeElement);\n }\n }\n\n range = input<boolean, BooleanInput>(false, { transform: coerceBooleanProperty });\n\n required = input<boolean, BooleanInput>(false, { transform: coerceBooleanProperty });\n\n disabledInput = input<boolean, BooleanInput>(false, {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'disabled',\n transform: coerceBooleanProperty,\n });\n protected disabledState = signal(false);\n disabled = computed(() => this.disabledInput() || this.disabledState());\n\n get empty(): boolean {\n if (this.range()) {\n return !this.ngControl?.value?.start && !this.ngControl?.value?.end;\n } else {\n return this.ngControl?.value?.length === 0;\n }\n }\n\n get errorState(): boolean {\n return !!this.ngControl?.invalid && !!this.ngControl?.touched;\n }\n\n shouldLabelFloat = computed(() => {\n return this.focused() || !this.empty;\n });\n\n /**\n *\n * @ignore\n */\n control: FormControl | null = null;\n\n constructor(id: string) {\n this.id = id;\n this.elementRef.nativeElement.setAttribute('id', id);\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n this.control = this.ngControl?.control as FormControl;\n }\n\n ngAfterViewInit(): void {\n if (this.initialValue) {\n this.writeValue(this.initialValue);\n }\n\n if (this.range()) {\n this.initRangeInput();\n } else {\n this.initSingleInput();\n }\n }\n\n protected abstract initRangeInput(): void;\n\n protected abstract initSingleInput(): void;\n\n protected abstract setSingleValue(\n value: Exclude<WattPickerValue, WattDateRange>,\n input: HTMLInputElement\n ): void;\n\n protected abstract setRangeValue(\n value: WattDateRange,\n startInput: HTMLInputElement,\n endInput: HTMLInputElement\n ): void;\n\n setDescribedByIds(ids: string[]) {\n this.elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n }\n\n onContainerClick() {\n // Intentionally left empty\n }\n\n writeValue(value: WattPickerValue): void {\n this.setValue(value);\n }\n\n registerOnChange(onChangeFn: (value: string | WattDateRange) => void): void {\n this.changeParentValue = onChangeFn;\n }\n\n registerOnTouched(onTouchFn: () => void) {\n this.markParentControlAsTouched = onTouchFn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabledState.set(isDisabled);\n this.changeDetectionRef.detectChanges();\n }\n\n onFocusIn() {\n if (!this.focused()) {\n this.focused.set(true);\n }\n }\n\n onFocusOut(event: FocusEvent) {\n const id = this.elementRef.nativeElement.attributes.getNamedItem('aria-owns');\n const overlay = id ? document.getElementById(id.value) : null;\n const isChild = overlay?.contains(event.relatedTarget as Element);\n\n if (!this.elementRef.nativeElement.contains(event.relatedTarget as Element) && !isChild) {\n this.focused.set(false);\n this.markParentControlAsTouched();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected changeParentValue = (value: string | WattDateRange): void => {\n // Intentionally left empty\n };\n\n protected markParentControlAsTouched = (): void => {\n // Intentionally left empty\n };\n}\n","//#region License\n/**\n * @license\n * Copyright 2020 Energinet DataHub A/S\n *\n * Licensed under the Apache License, Version 2.0 (the \"License2\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n//#endregion\nexport { WattPlaceholderMaskComponent } from './placeholder-mask/watt-placeholder-mask.component';\nexport { WattPickerBase } from './watt-picker-base';\nexport { WattPickerValue } from './watt-picker-value';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, ChangeDetectorRef, LOCALE_ID, input, booleanAttribute, viewChild, computed, linkedSignal, effect, ViewEncapsulation, Component, Injectable } from '@angular/core';
2
+ import { inject, ElementRef, ChangeDetectorRef, input, booleanAttribute, viewChild, signal, computed, linkedSignal, effect, ViewEncapsulation, Component, Injectable } from '@angular/core';
3
3
  import * as i1 from '@angular/material/input';
4
4
  import { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldControl } from '@angular/material/form-field';
@@ -44,7 +44,6 @@ class WattDatepickerComponent extends WattPickerBase {
44
44
  changeDetectionRef = inject(ChangeDetectorRef);
45
45
  ngControl = inject(NgControl, { optional: true, self: true });
46
46
  localeService = inject(WattLocaleService);
47
- locale = inject(LOCALE_ID);
48
47
  max = input(...(ngDevMode ? [undefined, { debugName: "max" }] : []));
49
48
  min = input(...(ngDevMode ? [undefined, { debugName: "min" }] : []));
50
49
  label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
@@ -61,9 +60,8 @@ class WattDatepickerComponent extends WattPickerBase {
61
60
  input = viewChild('dateInput', ...(ngDevMode ? [{ debugName: "input" }] : []));
62
61
  endInput = viewChild('endDateInput', ...(ngDevMode ? [{ debugName: "endInput" }] : []));
63
62
  startInput = viewChild('startDateInput', ...(ngDevMode ? [{ debugName: "startInput" }] : []));
64
- _placeholder = this.getPlaceholderByLocale(this.locale);
65
63
  rangeSeparator = ' - ';
66
- rangePlaceholder = this.getRangePlaceholder();
64
+ rangePlaceholder = signal('', ...(ngDevMode ? [{ debugName: "rangePlaceholder" }] : []));
67
65
  inputMask = computed(() => maskitoDateOptionsGenerator({
68
66
  mode: 'dd/mm/yyyy',
69
67
  separator: '-',
@@ -76,11 +74,9 @@ class WattDatepickerComponent extends WattPickerBase {
76
74
  max: this.max(),
77
75
  min: this.min(),
78
76
  }), ...(ngDevMode ? [{ debugName: "rangeInputMask" }] : []));
79
- getPlaceholderByLocale(locale) {
80
- return locale === 'da' ? 'dd-mm-åååå' : 'dd-mm-yyyy';
81
- }
77
+ getPlaceholderByLocale = (locale) => locale === 'da' ? 'dd-mm-åååå' : 'dd-mm-yyyy';
82
78
  getRangePlaceholder() {
83
- return this.placeholder + this.rangeSeparator + this.placeholder;
79
+ return this.placeholder() + this.rangeSeparator + this.placeholder();
84
80
  }
85
81
  isPrevDayButtonDisabled = linkedSignal(() => this.isPrevDayBeforeOrEqualToMinDate(), ...(ngDevMode ? [{ debugName: "isPrevDayButtonDisabled" }] : []));
86
82
  isNextDayButtonDisabled = linkedSignal(() => this.isNextDayAfterOrEqualToMaxDate(), ...(ngDevMode ? [{ debugName: "isNextDayButtonDisabled" }] : []));
@@ -88,8 +84,8 @@ class WattDatepickerComponent extends WattPickerBase {
88
84
  super(`watt-datepicker-${WattDatepickerComponent.nextId++}`);
89
85
  effect(() => {
90
86
  const locale = this.localeService.locale();
91
- this.placeholder = this.getPlaceholderByLocale(locale);
92
- this.rangePlaceholder = this.getRangePlaceholder();
87
+ this.placeholder.set(this.getPlaceholderByLocale(locale));
88
+ this.rangePlaceholder.set(this.getRangePlaceholder());
93
89
  });
94
90
  effect(() => {
95
91
  this.rangeMonthOnlyMode();
@@ -119,12 +115,12 @@ class WattDatepickerComponent extends WattPickerBase {
119
115
  }
120
116
  }
121
117
  inputChanged(value) {
122
- const dateString = value.slice(0, this.placeholder.length);
118
+ const dateString = value.slice(0, this.placeholder().length);
123
119
  if (dateString.length === 0) {
124
120
  this.control?.setValue(null);
125
121
  return;
126
122
  }
127
- if (dateString.length !== this.placeholder.length) {
123
+ if (dateString.length !== this.placeholder().length) {
128
124
  return;
129
125
  }
130
126
  const date = this.parseDateShortFormat(dateString);
@@ -173,16 +169,16 @@ class WattDatepickerComponent extends WattPickerBase {
173
169
  actualInput.nativeElement.dispatchEvent(new InputEvent('input'));
174
170
  }
175
171
  rangeInputChanged(value) {
176
- const startDateString = value.slice(0, this.placeholder.length);
172
+ const startDateString = value.slice(0, this.placeholder().length);
177
173
  if (startDateString.length === 0) {
178
174
  this.control?.setValue(null);
179
175
  return;
180
176
  }
181
- if (startDateString.length !== this.placeholder.length) {
177
+ if (startDateString.length !== this.placeholder().length) {
182
178
  return;
183
179
  }
184
180
  const start = this.parseDateShortFormat(startDateString);
185
- const endDateString = value.slice(this.placeholder.length + this.rangeSeparator.length);
181
+ const endDateString = value.slice(this.placeholder().length + this.rangeSeparator.length);
186
182
  let end = this.setEndDateToDanishTimeZone(endDateString);
187
183
  if (end !== null) {
188
184
  end = this.setToEndOfDay(end);
@@ -290,7 +286,7 @@ class WattDatepickerComponent extends WattPickerBase {
290
286
  return maybeDateInDanishTimeZone;
291
287
  }
292
288
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: WattDatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
293
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: WattDatepickerComponent, isStandalone: true, selector: "watt-datepicker", inputs: { max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, rangeMonthOnlyMode: { classPropertyName: "rangeMonthOnlyMode", publicName: "rangeMonthOnlyMode", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, canStepThroughDays: { classPropertyName: "canStepThroughDays", publicName: "canStepThroughDays", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: MatFormFieldControl, useExisting: WattDatepickerComponent }], viewQueries: [{ propertyName: "matEndDate", first: true, predicate: MatEndDate, descendants: true, isSignal: true }, { propertyName: "matStartDate", first: true, predicate: MatStartDate, descendants: true, isSignal: true }, { propertyName: "matDateRangeInput", first: true, predicate: MatDateRangeInput, descendants: true, isSignal: true }, { propertyName: "matDatepickerInput", first: true, predicate: MatDatepickerInput, descendants: true, isSignal: true }, { propertyName: "matDateRangePicker", first: true, predicate: MatDateRangePicker, descendants: true, isSignal: true }, { propertyName: "actualInput", first: true, predicate: ["actualInput"], descendants: true, isSignal: true }, { propertyName: "input", first: true, predicate: ["dateInput"], descendants: true, isSignal: true }, { propertyName: "endInput", first: true, predicate: ["endDateInput"], descendants: true, isSignal: true }, { propertyName: "startInput", first: true, predicate: ["startDateInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [control]=\"control\" [label]=\"label()\">\n @if (range) {\n <mat-date-range-input\n [disabled]=\"disabled\"\n [rangePicker]=\"rangeDatepicker\"\n [min]=\"min() ?? null\"\n [max]=\"max() ?? null\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-date-input\"\n matStartDate\n #startDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n\n <input\n inert\n aria-label=\"end-date-input\"\n matEndDate\n #endDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n </mat-date-range-input>\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"rangeInputMask()\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"false\"\n (click)=\"rangeDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-date-range-picker\n [panelClass]=\"rangeMonthOnlyMode() ? 'watt-datepicker-range__panel--month-only' : ''\"\n [startView]=\"rangeMonthOnlyMode() ? 'multi-year' : 'month'\"\n [startAt]=\"startAt()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (closed)=\"rangePickerClosed()\"\n #rangeDatepicker\n />\n } @else {\n <input\n inert\n matInput\n tabindex=\"-1\"\n aria-label=\"date-input\"\n #dateInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n [min]=\"min()\"\n [max]=\"max()\"\n [matDatepicker]=\"singleDatepicker\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"inputMask()\"\n [placeholder]=\"placeholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n\n <watt-button\n wattSuffix\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n (click)=\"singleDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-datepicker\n #singleDatepicker\n panelClass=\"watt-datepicker-single__panel\"\n [dateClass]=\"dateClass()\"\n [startAt]=\"startAt()\"\n (closed)=\"datepickerClosed()\"\n />\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n <ng-content ngProjectAs=\"watt-field-warning\" select=\"watt-field-warning\" />\n</watt-field>\n\n@if (!range && canStepThroughDays()) {\n <span\n class=\"watt-datepicker-single__step-through\"\n [class.watt-datepicker-single__has-label]=\"!!label()\"\n >\n <watt-button\n variant=\"icon\"\n icon=\"left\"\n (click)=\"prevDay()\"\n [disabled]=\"disabled || isPrevDayButtonDisabled()\"\n />\n <watt-button\n variant=\"icon\"\n icon=\"right\"\n (click)=\"nextDay()\"\n [disabled]=\"disabled || isNextDayButtonDisabled()\"\n />\n </span>\n}\n", styles: ["watt-datepicker{display:flex;align-items:center;width:100%}watt-datepicker watt-button[variant=icon]{margin-left:auto}watt-datepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-datepicker mat-datepicker,watt-datepicker mat-date-range-picker{display:none}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker .mat-date-range-input-mirror,watt-datepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-datepicker input.mask-input{color:#000}watt-datepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-datepicker input.mask-input:focus-visible{outline:none}watt-datepicker .mat-date-range-input-container{align-items:initial}watt-datepicker .mat-date-range-input-start-wrapper,watt-datepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-datepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-datepicker .mat-date-range-input-separator-hidden,watt-datepicker .mat-date-range-input-separator{opacity:0!important}watt-datepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}watt-datepicker watt-button .mat-button{background:transparent}watt-datepicker:has(.watt-datepicker-single__step-through){align-items:flex-start}watt-datepicker:has(.watt-datepicker-single__step-through) .watt-datepicker-single__step-through{display:flex;margin-top:1px}watt-datepicker:has(.watt-datepicker-single__has-label) .watt-datepicker-single__step-through{margin-top:28px}.watt-datepicker-range__panel--month-only .mat-calendar-period-button{pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName", "displayMode", "autoFocus", "showErrors"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }, { kind: "component", type: WattPlaceholderMaskComponent, selector: "watt-placeholder-mask", inputs: ["primaryInputElement", "secondaryInputElement", "mask", "placeholder"], outputs: ["maskApplied"] }], encapsulation: i0.ViewEncapsulation.None });
289
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: WattDatepickerComponent, isStandalone: true, selector: "watt-datepicker", inputs: { max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, rangeMonthOnlyMode: { classPropertyName: "rangeMonthOnlyMode", publicName: "rangeMonthOnlyMode", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, canStepThroughDays: { classPropertyName: "canStepThroughDays", publicName: "canStepThroughDays", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: MatFormFieldControl, useExisting: WattDatepickerComponent }], viewQueries: [{ propertyName: "matEndDate", first: true, predicate: MatEndDate, descendants: true, isSignal: true }, { propertyName: "matStartDate", first: true, predicate: MatStartDate, descendants: true, isSignal: true }, { propertyName: "matDateRangeInput", first: true, predicate: MatDateRangeInput, descendants: true, isSignal: true }, { propertyName: "matDatepickerInput", first: true, predicate: MatDatepickerInput, descendants: true, isSignal: true }, { propertyName: "matDateRangePicker", first: true, predicate: MatDateRangePicker, descendants: true, isSignal: true }, { propertyName: "actualInput", first: true, predicate: ["actualInput"], descendants: true, isSignal: true }, { propertyName: "input", first: true, predicate: ["dateInput"], descendants: true, isSignal: true }, { propertyName: "endInput", first: true, predicate: ["endDateInput"], descendants: true, isSignal: true }, { propertyName: "startInput", first: true, predicate: ["startDateInput"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [control]=\"control\" [label]=\"label()\">\n @if (range()) {\n <mat-date-range-input\n [disabled]=\"disabled()\"\n [rangePicker]=\"rangeDatepicker\"\n [min]=\"min() ?? null\"\n [max]=\"max() ?? null\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-date-input\"\n matStartDate\n #startDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n\n <input\n inert\n aria-label=\"end-date-input\"\n matEndDate\n #endDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n </mat-date-range-input>\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled()\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"rangeInputMask()\"\n [placeholder]=\"rangePlaceholder()\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled()\"\n [attr.aria-pressed]=\"false\"\n (click)=\"rangeDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-date-range-picker\n [panelClass]=\"rangeMonthOnlyMode() ? 'watt-datepicker-range__panel--month-only' : ''\"\n [startView]=\"rangeMonthOnlyMode() ? 'multi-year' : 'month'\"\n [startAt]=\"startAt()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (closed)=\"rangePickerClosed()\"\n #rangeDatepicker\n />\n } @else {\n <input\n inert\n matInput\n tabindex=\"-1\"\n aria-label=\"date-input\"\n #dateInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [matDatepicker]=\"singleDatepicker\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled()\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"inputMask()\"\n [placeholder]=\"placeholder()\"\n (maskApplied)=\"inputChanged($event)\"\n />\n\n <watt-button\n wattSuffix\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled()\"\n (click)=\"singleDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-datepicker\n #singleDatepicker\n panelClass=\"watt-datepicker-single__panel\"\n [dateClass]=\"dateClass()\"\n [startAt]=\"startAt()\"\n (closed)=\"datepickerClosed()\"\n />\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n <ng-content ngProjectAs=\"watt-field-warning\" select=\"watt-field-warning\" />\n</watt-field>\n\n@if (!range() && canStepThroughDays()) {\n <span\n class=\"watt-datepicker-single__step-through\"\n [class.watt-datepicker-single__has-label]=\"!!label()\"\n >\n <watt-button\n variant=\"icon\"\n icon=\"left\"\n (click)=\"prevDay()\"\n [disabled]=\"disabled() || isPrevDayButtonDisabled()\"\n />\n <watt-button\n variant=\"icon\"\n icon=\"right\"\n (click)=\"nextDay()\"\n [disabled]=\"disabled() || isNextDayButtonDisabled()\"\n />\n </span>\n}\n", styles: ["watt-datepicker{display:flex;align-items:center;width:100%}watt-datepicker watt-button[variant=icon]{margin-left:auto}watt-datepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-datepicker mat-datepicker,watt-datepicker mat-date-range-picker{display:none}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker .mat-date-range-input-mirror,watt-datepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-datepicker input.mask-input{color:#000}watt-datepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-datepicker input.mask-input:focus-visible{outline:none}watt-datepicker .mat-date-range-input-container{align-items:initial}watt-datepicker .mat-date-range-input-start-wrapper,watt-datepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-datepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-datepicker .mat-date-range-input-separator-hidden,watt-datepicker .mat-date-range-input-separator{opacity:0!important}watt-datepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}watt-datepicker watt-button .mat-button{background:transparent}watt-datepicker:has(.watt-datepicker-single__step-through){align-items:flex-start}watt-datepicker:has(.watt-datepicker-single__step-through) .watt-datepicker-single__step-through{display:flex;margin-top:1px}watt-datepicker:has(.watt-datepicker-single__has-label) .watt-datepicker-single__step-through{margin-top:28px}.watt-datepicker-range__panel--month-only .mat-calendar-period-button{pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: WattFieldComponent, selector: "watt-field", inputs: ["control", "label", "id", "chipMode", "tooltip", "placeholder", "anchorName", "displayMode", "autoFocus", "showErrors"] }, { kind: "component", type: WattButtonComponent, selector: "watt-button", inputs: ["icon", "variant", "size", "type", "formId", "disabled", "loading"] }, { kind: "component", type: WattPlaceholderMaskComponent, selector: "watt-placeholder-mask", inputs: ["primaryInputElement", "secondaryInputElement", "mask", "placeholder"], outputs: ["maskApplied"] }], encapsulation: i0.ViewEncapsulation.None });
294
290
  }
295
291
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: WattDatepickerComponent, decorators: [{
296
292
  type: Component,
@@ -300,7 +296,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
300
296
  WattFieldComponent,
301
297
  WattButtonComponent,
302
298
  WattPlaceholderMaskComponent,
303
- ], template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [control]=\"control\" [label]=\"label()\">\n @if (range) {\n <mat-date-range-input\n [disabled]=\"disabled\"\n [rangePicker]=\"rangeDatepicker\"\n [min]=\"min() ?? null\"\n [max]=\"max() ?? null\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-date-input\"\n matStartDate\n #startDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n\n <input\n inert\n aria-label=\"end-date-input\"\n matEndDate\n #endDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n </mat-date-range-input>\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"rangeInputMask()\"\n [placeholder]=\"rangePlaceholder\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n [attr.aria-pressed]=\"false\"\n (click)=\"rangeDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-date-range-picker\n [panelClass]=\"rangeMonthOnlyMode() ? 'watt-datepicker-range__panel--month-only' : ''\"\n [startView]=\"rangeMonthOnlyMode() ? 'multi-year' : 'month'\"\n [startAt]=\"startAt()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (closed)=\"rangePickerClosed()\"\n #rangeDatepicker\n />\n } @else {\n <input\n inert\n matInput\n tabindex=\"-1\"\n aria-label=\"date-input\"\n #dateInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled\"\n [min]=\"min()\"\n [max]=\"max()\"\n [matDatepicker]=\"singleDatepicker\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"inputMask()\"\n [placeholder]=\"placeholder\"\n (maskApplied)=\"inputChanged($event)\"\n />\n\n <watt-button\n wattSuffix\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled\"\n (click)=\"singleDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-datepicker\n #singleDatepicker\n panelClass=\"watt-datepicker-single__panel\"\n [dateClass]=\"dateClass()\"\n [startAt]=\"startAt()\"\n (closed)=\"datepickerClosed()\"\n />\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n <ng-content ngProjectAs=\"watt-field-warning\" select=\"watt-field-warning\" />\n</watt-field>\n\n@if (!range && canStepThroughDays()) {\n <span\n class=\"watt-datepicker-single__step-through\"\n [class.watt-datepicker-single__has-label]=\"!!label()\"\n >\n <watt-button\n variant=\"icon\"\n icon=\"left\"\n (click)=\"prevDay()\"\n [disabled]=\"disabled || isPrevDayButtonDisabled()\"\n />\n <watt-button\n variant=\"icon\"\n icon=\"right\"\n (click)=\"nextDay()\"\n [disabled]=\"disabled || isNextDayButtonDisabled()\"\n />\n </span>\n}\n", styles: ["watt-datepicker{display:flex;align-items:center;width:100%}watt-datepicker watt-button[variant=icon]{margin-left:auto}watt-datepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-datepicker mat-datepicker,watt-datepicker mat-date-range-picker{display:none}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker .mat-date-range-input-mirror,watt-datepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-datepicker input.mask-input{color:#000}watt-datepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-datepicker input.mask-input:focus-visible{outline:none}watt-datepicker .mat-date-range-input-container{align-items:initial}watt-datepicker .mat-date-range-input-start-wrapper,watt-datepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-datepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-datepicker .mat-date-range-input-separator-hidden,watt-datepicker .mat-date-range-input-separator{opacity:0!important}watt-datepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}watt-datepicker watt-button .mat-button{background:transparent}watt-datepicker:has(.watt-datepicker-single__step-through){align-items:flex-start}watt-datepicker:has(.watt-datepicker-single__step-through) .watt-datepicker-single__step-through{display:flex;margin-top:1px}watt-datepicker:has(.watt-datepicker-single__has-label) .watt-datepicker-single__step-through{margin-top:28px}.watt-datepicker-range__panel--month-only .mat-calendar-period-button{pointer-events:none}\n"] }]
299
+ ], template: "<!--\n@license\nCopyright 2020 Energinet DataHub A/S\n\nLicensed under the Apache License, Version 2.0 (the \"License2\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<watt-field [control]=\"control\" [label]=\"label()\">\n @if (range()) {\n <mat-date-range-input\n [disabled]=\"disabled()\"\n [rangePicker]=\"rangeDatepicker\"\n [min]=\"min() ?? null\"\n [max]=\"max() ?? null\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n inert\n aria-label=\"start-date-input\"\n matStartDate\n #startDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n\n <input\n inert\n aria-label=\"end-date-input\"\n matEndDate\n #endDateInput\n [readOnly]=\"rangeMonthOnlyMode()\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [hidden]=\"true\"\n />\n </mat-date-range-input>\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled()\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"rangeInputMask()\"\n [placeholder]=\"rangePlaceholder()\"\n (maskApplied)=\"rangeInputChanged($event)\"\n />\n\n <watt-button\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled()\"\n [attr.aria-pressed]=\"false\"\n (click)=\"rangeDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-date-range-picker\n [panelClass]=\"rangeMonthOnlyMode() ? 'watt-datepicker-range__panel--month-only' : ''\"\n [startView]=\"rangeMonthOnlyMode() ? 'multi-year' : 'month'\"\n [startAt]=\"startAt()\"\n (monthSelected)=\"onMonthSelected($event)\"\n (closed)=\"rangePickerClosed()\"\n #rangeDatepicker\n />\n } @else {\n <input\n inert\n matInput\n tabindex=\"-1\"\n aria-label=\"date-input\"\n #dateInput\n autocomplete=\"off\"\n spellcheck=\"false\"\n [disabled]=\"disabled()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [matDatepicker]=\"singleDatepicker\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n <input #actualInput class=\"mask-input\" [disabled]=\"disabled()\" />\n <watt-placeholder-mask\n [primaryInputElement]=\"actualInput\"\n [mask]=\"inputMask()\"\n [placeholder]=\"placeholder()\"\n (maskApplied)=\"inputChanged($event)\"\n />\n\n <watt-button\n wattSuffix\n variant=\"icon\"\n icon=\"date\"\n [disabled]=\"disabled()\"\n (click)=\"singleDatepicker.open()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n />\n\n <mat-datepicker\n #singleDatepicker\n panelClass=\"watt-datepicker-single__panel\"\n [dateClass]=\"dateClass()\"\n [startAt]=\"startAt()\"\n (closed)=\"datepickerClosed()\"\n />\n }\n\n <ng-content />\n <ng-content ngProjectAs=\"watt-field-hint\" select=\"watt-field-hint\" />\n <ng-content ngProjectAs=\"watt-field-error\" select=\"watt-field-error\" />\n <ng-content ngProjectAs=\"watt-field-warning\" select=\"watt-field-warning\" />\n</watt-field>\n\n@if (!range() && canStepThroughDays()) {\n <span\n class=\"watt-datepicker-single__step-through\"\n [class.watt-datepicker-single__has-label]=\"!!label()\"\n >\n <watt-button\n variant=\"icon\"\n icon=\"left\"\n (click)=\"prevDay()\"\n [disabled]=\"disabled() || isPrevDayButtonDisabled()\"\n />\n <watt-button\n variant=\"icon\"\n icon=\"right\"\n (click)=\"nextDay()\"\n [disabled]=\"disabled() || isNextDayButtonDisabled()\"\n />\n </span>\n}\n", styles: ["watt-datepicker{display:flex;align-items:center;width:100%}watt-datepicker watt-button[variant=icon]{margin-left:auto}watt-datepicker watt-button[variant=icon] .watt-button--icon{height:42px}watt-datepicker mat-datepicker,watt-datepicker mat-date-range-picker{display:none}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker .mat-date-range-input-mirror,watt-datepicker input.mask-input{font-family:Droid Sans Mono,monospace}watt-datepicker input.mat-date-range-input-inner,watt-datepicker input.mat-mdc-input-element,watt-datepicker input.mask-input{border:none;caret-color:var(--watt-color-neutral-black);letter-spacing:-.03em;-webkit-background-clip:text;-moz-background-clip:text;background-clip:text;color:transparent}watt-datepicker input.mask-input{color:#000}watt-datepicker input.mask-input{position:absolute;min-width:100%;padding:2px 1px}watt-datepicker input.mask-input:focus-visible{outline:none}watt-datepicker .mat-date-range-input-container{align-items:initial}watt-datepicker .mat-date-range-input-start-wrapper,watt-datepicker .mat-date-range-input-end-wrapper{max-width:calc(50% - var(--watt-space-s));overflow:visible;position:relative}watt-datepicker .mat-date-range-input-separator{display:flex;align-items:center}watt-datepicker .mat-date-range-input-separator-hidden,watt-datepicker .mat-date-range-input-separator{opacity:0!important}watt-datepicker .mat-date-range-input-inner::-webkit-input-placeholder{color:var(--watt-color-neutral-grey-500)!important;-webkit-text-fill-color:var(--watt-color-neutral-grey-500)}watt-datepicker watt-button .mat-button{background:transparent}watt-datepicker:has(.watt-datepicker-single__step-through){align-items:flex-start}watt-datepicker:has(.watt-datepicker-single__step-through) .watt-datepicker-single__step-through{display:flex;margin-top:1px}watt-datepicker:has(.watt-datepicker-single__has-label) .watt-datepicker-single__step-through{margin-top:28px}.watt-datepicker-range__panel--month-only .mat-calendar-period-button{pointer-events:none}\n"] }]
304
300
  }], ctorParameters: () => [], propDecorators: { max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], rangeMonthOnlyMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "rangeMonthOnlyMode", required: false }] }], startAt: [{ type: i0.Input, args: [{ isSignal: true, alias: "startAt", required: false }] }], dateClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateClass", required: false }] }], canStepThroughDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "canStepThroughDays", required: false }] }], matEndDate: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatEndDate), { isSignal: true }] }], matStartDate: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatStartDate), { isSignal: true }] }], matDateRangeInput: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatDateRangeInput), { isSignal: true }] }], matDatepickerInput: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatDatepickerInput), { isSignal: true }] }], matDateRangePicker: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatDateRangePicker), { isSignal: true }] }], actualInput: [{ type: i0.ViewChild, args: ['actualInput', { isSignal: true }] }], input: [{ type: i0.ViewChild, args: ['dateInput', { isSignal: true }] }], endInput: [{ type: i0.ViewChild, args: ['endDateInput', { isSignal: true }] }], startInput: [{ type: i0.ViewChild, args: ['startDateInput', { isSignal: true }] }] } });
305
301
 
306
302
  //#region License