@idea-ionic/uncommon 8.10.2 → 8.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,5 @@
1
- import * as i1$1 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
1
  import * as i0 from '@angular/core';
4
- import { EventEmitter, ViewChild, Input, Output, Component, inject, Injectable } from '@angular/core';
2
+ import { output, input, viewChild, Input, ChangeDetectionStrategy, Component, inject, Injectable, ChangeDetectorRef } from '@angular/core';
5
3
  import * as i1 from '@angular/forms';
6
4
  import { FormsModule } from '@angular/forms';
7
5
  import { IonText, IonList, IonInput, IonItem, IonAccordion, IonAccordionGroup, Platform, IonButton, IonIcon, IonLabel, IonSpinner, IonCardContent, IonCard, PopoverController, IonAvatar, IonContent, IonGrid, IonRow, IonCol, AlertController, ModalController, IonFooter, IonButtons, IonTitle, IonToolbar, IonHeader, IonCardTitle, IonCardHeader, IonImg, IonTextarea, IonListHeader, IonFab, IonFabButton, IonBadge, IonSegmentButton, IonSegment } from '@ionic/angular/standalone';
@@ -14,47 +12,78 @@ import { Camera, CameraResultType, CameraSource } from '@capacitor/camera';
14
12
  import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
15
13
  import { Observable } from 'rxjs';
16
14
  import { Network } from '@capacitor/network';
15
+ import * as i1$1 from '@angular/common';
16
+ import { CommonModule } from '@angular/common';
17
17
  import { ActivatedRoute } from '@angular/router';
18
18
  import { PushNotifications } from '@capacitor/push-notifications';
19
19
 
20
20
  class IDEAAddressComponent {
21
21
  constructor() {
22
- this.addressChange = new EventEmitter();
22
+ this.addressChange = output();
23
23
  /**
24
24
  * If true, show the field `contact`.
25
25
  */
26
- this.showContact = false;
26
+ this.showContact = input(false, /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "showContact" }] : /* istanbul ignore next */ []));
27
28
  /**
28
29
  * If true, show the field `address2`.
29
30
  */
30
- this.showAddress2 = false;
31
+ this.showAddress2 = input(false, /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "showAddress2" }] : /* istanbul ignore next */ []));
31
33
  /**
32
34
  * If true, show the field `phone`.
33
35
  */
34
- this.showPhone = false;
36
+ this.showPhone = input(false, /* @ts-ignore */
37
+ ...(ngDevMode ? [{ debugName: "showPhone" }] : /* istanbul ignore next */ []));
35
38
  /**
36
39
  * If true, show the field `email`.
37
40
  */
38
- this.showEmail = false;
41
+ this.showEmail = input(false, /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "showEmail" }] : /* istanbul ignore next */ []));
39
43
  /**
40
44
  * Whether the fields are editable or disabled.
41
45
  */
42
- this.editMode = true;
46
+ this.editMode = input(true, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "editMode" }] : /* istanbul ignore next */ []));
43
48
  /**
44
49
  * If true, show obligatory dots.
45
50
  */
46
- this.obligatory = false;
51
+ this.obligatory = input(false, /* @ts-ignore */
52
+ ...(ngDevMode ? [{ debugName: "obligatory" }] : /* istanbul ignore next */ []));
53
+ /**
54
+ * The lines attribute of the item.
55
+ */
56
+ this.lines = input(/* @ts-ignore */
57
+ ...(ngDevMode ? [undefined, { debugName: "lines" }] : /* istanbul ignore next */ []));
58
+ /**
59
+ * The color for the component.
60
+ */
61
+ this.color = input(/* @ts-ignore */
62
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
63
+ /**
64
+ * The label to show for the field; if not set, it has a default value.
65
+ */
66
+ this.label = input(/* @ts-ignore */
67
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
68
+ /**
69
+ * The placeholder to show for the field.
70
+ */
71
+ this.placeholder = input(/* @ts-ignore */
72
+ ...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
47
73
  /**
48
74
  * To toggle the detailed view.
49
75
  */
50
- this.openByDefault = false;
76
+ this.openByDefault = input(false, /* @ts-ignore */
77
+ ...(ngDevMode ? [{ debugName: "openByDefault" }] : /* istanbul ignore next */ []));
51
78
  this.Countries = Countries;
79
+ this.accordion = viewChild('accordion', /* @ts-ignore */
80
+ ...(ngDevMode ? [{ debugName: "accordion" }] : /* istanbul ignore next */ []));
52
81
  }
53
82
  ngOnInit() {
54
83
  this.countriesSuggestions = Object.keys(Countries).map(k => new Suggestion({ value: Countries[k], name: k }));
55
84
  }
56
85
  isCollapsed() {
57
- return this.accordion?.value !== 'open';
86
+ return this.accordion()?.value !== 'open';
58
87
  }
59
88
  getCountryName(countryCode) {
60
89
  if (!countryCode)
@@ -68,32 +97,32 @@ class IDEAAddressComponent {
68
97
  this.address.country = suggestion.value;
69
98
  this.addressChange.emit(this.address);
70
99
  }
71
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAddressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
72
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAAddressComponent, isStandalone: true, selector: "idea-address", inputs: { address: "address", showContact: "showContact", showAddress2: "showAddress2", showPhone: "showPhone", showEmail: "showEmail", editMode: "editMode", obligatory: "obligatory", lines: "lines", color: "color", label: "label", placeholder: "placeholder", openByDefault: "openByDefault" }, outputs: { addressChange: "addressChange" }, viewQueries: [{ propertyName: "accordion", first: true, predicate: ["accordion"], descendants: true }], ngImport: i0, template: `
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAddressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAAddressComponent, isStandalone: true, selector: "idea-address", inputs: { address: { classPropertyName: "address", publicName: "address", isSignal: false, isRequired: false, transformFunction: null }, showContact: { classPropertyName: "showContact", publicName: "showContact", isSignal: true, isRequired: false, transformFunction: null }, showAddress2: { classPropertyName: "showAddress2", publicName: "showAddress2", isSignal: true, isRequired: false, transformFunction: null }, showPhone: { classPropertyName: "showPhone", publicName: "showPhone", isSignal: true, isRequired: false, transformFunction: null }, showEmail: { classPropertyName: "showEmail", publicName: "showEmail", isSignal: true, isRequired: false, transformFunction: null }, editMode: { classPropertyName: "editMode", publicName: "editMode", isSignal: true, isRequired: false, transformFunction: null }, obligatory: { classPropertyName: "obligatory", publicName: "obligatory", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, openByDefault: { classPropertyName: "openByDefault", publicName: "openByDefault", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addressChange: "addressChange" }, viewQueries: [{ propertyName: "accordion", first: true, predicate: ["accordion"], descendants: true, isSignal: true }], ngImport: i0, template: `
73
102
  @if (address) {
74
103
  <ion-accordion-group #accordion>
75
104
  <ion-accordion value="open">
76
- <ion-item slot="header" button [color]="color" [lines]="lines">
105
+ <ion-item slot="header" button [color]="color()" [lines]="lines()">
77
106
  @if (isCollapsed()) {
78
107
  <ion-input
79
108
  readonly
80
109
  [labelPlacement]="isCollapsed() ? 'stacked' : ''"
81
- [label]="label || ('IDEA_UNCOMMON.ADDRESS.COMPLETE_ADDRESS' | translate)"
110
+ [label]="label() || ('IDEA_UNCOMMON.ADDRESS.COMPLETE_ADDRESS' | translate)"
82
111
  [title]="'IDEA_UNCOMMON.ADDRESS.COMPLETE_ADDRESS_HINT' | translate"
83
- [placeholder]="placeholder"
112
+ [placeholder]="placeholder()"
84
113
  [value]="address.getFullAddress()"
85
114
  (ionChange)="addressChange.emit(address)"
86
115
  />
87
116
  }
88
117
  </ion-item>
89
118
  <ion-list slot="content">
90
- @if (showContact) {
91
- <ion-item [color]="color">
119
+ @if (showContact()) {
120
+ <ion-item [color]="color()">
92
121
  <ion-input
93
122
  autocomplete="new"
94
123
  labelPlacement="stacked"
95
124
  [label]="'IDEA_UNCOMMON.ADDRESS.CONTACT' | translate"
96
- [disabled]="!editMode"
125
+ [disabled]="!editMode()"
97
126
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.CONTACT_HINT' | translate"
98
127
  [title]="'IDEA_UNCOMMON.ADDRESS.CONTACT_HINT' | translate"
99
128
  [(ngModel)]="address.contact"
@@ -101,13 +130,13 @@ class IDEAAddressComponent {
101
130
  />
102
131
  </ion-item>
103
132
  }
104
- @if (showEmail) {
105
- <ion-item [color]="color">
133
+ @if (showEmail()) {
134
+ <ion-item [color]="color()">
106
135
  <ion-input
107
136
  autocomplete="new"
108
137
  labelPlacement="stacked"
109
138
  [label]="'IDEA_UNCOMMON.ADDRESS.EMAIL' | translate"
110
- [disabled]="!editMode"
139
+ [disabled]="!editMode()"
111
140
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.EMAIL_HINT' | translate"
112
141
  [title]="'IDEA_UNCOMMON.ADDRESS.EMAIL_HINT' | translate"
113
142
  [(ngModel)]="address.email"
@@ -115,13 +144,13 @@ class IDEAAddressComponent {
115
144
  />
116
145
  </ion-item>
117
146
  }
118
- @if (showPhone) {
119
- <ion-item [color]="color">
147
+ @if (showPhone()) {
148
+ <ion-item [color]="color()">
120
149
  <ion-input
121
150
  autocomplete="new"
122
151
  labelPlacement="stacked"
123
152
  [label]="'IDEA_UNCOMMON.ADDRESS.PHONE' | translate"
124
- [disabled]="!editMode"
153
+ [disabled]="!editMode()"
125
154
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.PHONE_HINT' | translate"
126
155
  [title]="'IDEA_UNCOMMON.ADDRESS.PHONE_HINT' | translate"
127
156
  [(ngModel)]="address.phone"
@@ -129,11 +158,11 @@ class IDEAAddressComponent {
129
158
  />
130
159
  </ion-item>
131
160
  }
132
- <ion-item [color]="color">
161
+ <ion-item [color]="color()">
133
162
  <ion-input
134
163
  autocomplete="new"
135
164
  labelPlacement="stacked"
136
- [disabled]="!editMode"
165
+ [disabled]="!editMode()"
137
166
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.ADDRESS_HINT' | translate"
138
167
  [title]="'IDEA_UNCOMMON.ADDRESS.ADDRESS_HINT' | translate"
139
168
  [(ngModel)]="address.address"
@@ -141,19 +170,19 @@ class IDEAAddressComponent {
141
170
  >
142
171
  <div slot="label">
143
172
  {{ 'IDEA_UNCOMMON.ADDRESS.ADDRESS' | translate }}
144
- @if (editMode && obligatory) {
173
+ @if (editMode() && obligatory()) {
145
174
  <ion-text class="obligatoryDot" />
146
175
  }
147
176
  </div>
148
177
  </ion-input>
149
178
  </ion-item>
150
- @if (showAddress2) {
151
- <ion-item [color]="color">
179
+ @if (showAddress2()) {
180
+ <ion-item [color]="color()">
152
181
  <ion-input
153
182
  autocomplete="new"
154
183
  labelPlacement="stacked"
155
184
  [label]="'IDEA_UNCOMMON.ADDRESS.ADDRESS2' | translate"
156
- [disabled]="!editMode"
185
+ [disabled]="!editMode()"
157
186
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.ADDRESS2_HINT' | translate"
158
187
  [title]="'IDEA_UNCOMMON.ADDRESS.ADDRESS2_HINT' | translate"
159
188
  [(ngModel)]="address.address2"
@@ -161,22 +190,22 @@ class IDEAAddressComponent {
161
190
  />
162
191
  </ion-item>
163
192
  }
164
- <ion-item [color]="color">
193
+ <ion-item [color]="color()">
165
194
  <ion-input
166
195
  autocomplete="new"
167
196
  labelPlacement="stacked"
168
197
  [label]="'IDEA_UNCOMMON.ADDRESS.POSTCODE' | translate"
169
- [disabled]="!editMode"
198
+ [disabled]="!editMode()"
170
199
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.POSTCODE_HINT' | translate"
171
200
  [title]="'IDEA_UNCOMMON.ADDRESS.POSTCODE_HINT' | translate"
172
201
  [(ngModel)]="address.postcode"
173
202
  (ionChange)="addressChange.emit(address)"
174
203
  />
175
204
  </ion-item>
176
- <ion-item [color]="color">
205
+ <ion-item [color]="color()">
177
206
  <ion-input
178
207
  autocomplete="new"
179
- [disabled]="!editMode"
208
+ [disabled]="!editMode()"
180
209
  labelPlacement="stacked"
181
210
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.CITY_HINT' | translate"
182
211
  [title]="'IDEA_UNCOMMON.ADDRESS.CITY_HINT' | translate"
@@ -185,18 +214,18 @@ class IDEAAddressComponent {
185
214
  >
186
215
  <div slot="label">
187
216
  {{ 'IDEA_UNCOMMON.ADDRESS.CITY' | translate }}
188
- @if (editMode && obligatory) {
217
+ @if (editMode() && obligatory()) {
189
218
  <ion-text class="obligatoryDot" />
190
219
  }
191
220
  </div>
192
221
  </ion-input>
193
222
  </ion-item>
194
- <ion-item [color]="color">
223
+ <ion-item [color]="color()">
195
224
  <ion-input
196
225
  autocomplete="new"
197
226
  labelPlacement="stacked"
198
227
  [label]="'IDEA_UNCOMMON.ADDRESS.PROVINCE' | translate"
199
- [disabled]="!editMode"
228
+ [disabled]="!editMode()"
200
229
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.PROVINCE_HINT' | translate"
201
230
  [title]="'IDEA_UNCOMMON.ADDRESS.PROVINCE_HINT' | translate"
202
231
  [(ngModel)]="address.province"
@@ -204,28 +233,27 @@ class IDEAAddressComponent {
204
233
  />
205
234
  </ion-item>
206
235
  <idea-select
207
- [color]="color"
236
+ [color]="color()"
208
237
  [data]="countriesSuggestions"
209
238
  [label]="'IDEA_UNCOMMON.ADDRESS.COUNTRY' | translate"
210
- [lines]="editMode ? lines : null"
239
+ [lines]="editMode() ? lines() : null"
211
240
  [description]="getCountryName(address.country)"
212
241
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.COUNTRY_HINT' | translate"
213
242
  [searchPlaceholder]="'IDEA_UNCOMMON.ADDRESS.COUNTRY_HINT' | translate"
214
243
  [hideIdFromUI]="true"
215
244
  [avoidAutoSelection]="true"
216
- [disabled]="!editMode"
245
+ [disabled]="!editMode()"
217
246
  (select)="setCountryFromSuggestion($event)"
218
247
  />
219
248
  </ion-list>
220
249
  </ion-accordion>
221
250
  </ion-accordion-group>
222
251
  }
223
- `, isInline: true, styles: ["ion-item[slot=header] ion-input{--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent}ion-list[slot=content]{padding-top:0;padding-left:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IDEASelectComponent, selector: "idea-select", inputs: ["description", "data", "dataProvider", "label", "icon", "iconColor", "placeholder", "searchPlaceholder", "noElementsFoundText", "disabled", "tappableWhenDisabled", "obligatory", "lines", "color", "allowUnlistedValues", "allowUnlistedValuesPrefix", "sortData", "clearValueAfterSelection", "hideIdFromUI", "hideClearButton", "mustChoose", "category1", "category2", "showCategoriesFilters", "avoidAutoSelection"], outputs: ["select", "iconSelect", "selectWhenDisabled"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonAccordion, selector: "ion-accordion", inputs: ["disabled", "mode", "readonly", "toggleIcon", "toggleIconSlot", "value"] }, { kind: "component", type: IonAccordionGroup, selector: "ion-accordion-group", inputs: ["animated", "disabled", "expand", "mode", "multiple", "readonly", "value"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
252
+ `, isInline: true, styles: ["ion-item[slot=header] ion-input{--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent}ion-list[slot=content]{padding-top:0;padding-left:20px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IDEASelectComponent, selector: "idea-select", inputs: ["description", "data", "dataProvider", "label", "icon", "iconColor", "placeholder", "searchPlaceholder", "noElementsFoundText", "disabled", "tappableWhenDisabled", "obligatory", "lines", "color", "allowUnlistedValues", "allowUnlistedValuesPrefix", "sortData", "clearValueAfterSelection", "hideIdFromUI", "hideClearButton", "mustChoose", "category1", "category2", "showCategoriesFilters", "avoidAutoSelection"], outputs: ["select", "iconSelect", "selectWhenDisabled"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonAccordion, selector: "ion-accordion", inputs: ["disabled", "mode", "readonly", "toggleIcon", "toggleIconSlot", "value"] }, { kind: "component", type: IonAccordionGroup, selector: "ion-accordion-group", inputs: ["animated", "disabled", "expand", "mode", "multiple", "readonly", "value"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
224
253
  }
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAddressComponent, decorators: [{
254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAddressComponent, decorators: [{
226
255
  type: Component,
227
256
  args: [{ selector: 'idea-address', imports: [
228
- CommonModule,
229
257
  FormsModule,
230
258
  IDEATranslatePipe,
231
259
  IDEASelectComponent,
@@ -235,31 +263,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
235
263
  IonItem,
236
264
  IonAccordion,
237
265
  IonAccordionGroup
238
- ], template: `
266
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: `
239
267
  @if (address) {
240
268
  <ion-accordion-group #accordion>
241
269
  <ion-accordion value="open">
242
- <ion-item slot="header" button [color]="color" [lines]="lines">
270
+ <ion-item slot="header" button [color]="color()" [lines]="lines()">
243
271
  @if (isCollapsed()) {
244
272
  <ion-input
245
273
  readonly
246
274
  [labelPlacement]="isCollapsed() ? 'stacked' : ''"
247
- [label]="label || ('IDEA_UNCOMMON.ADDRESS.COMPLETE_ADDRESS' | translate)"
275
+ [label]="label() || ('IDEA_UNCOMMON.ADDRESS.COMPLETE_ADDRESS' | translate)"
248
276
  [title]="'IDEA_UNCOMMON.ADDRESS.COMPLETE_ADDRESS_HINT' | translate"
249
- [placeholder]="placeholder"
277
+ [placeholder]="placeholder()"
250
278
  [value]="address.getFullAddress()"
251
279
  (ionChange)="addressChange.emit(address)"
252
280
  />
253
281
  }
254
282
  </ion-item>
255
283
  <ion-list slot="content">
256
- @if (showContact) {
257
- <ion-item [color]="color">
284
+ @if (showContact()) {
285
+ <ion-item [color]="color()">
258
286
  <ion-input
259
287
  autocomplete="new"
260
288
  labelPlacement="stacked"
261
289
  [label]="'IDEA_UNCOMMON.ADDRESS.CONTACT' | translate"
262
- [disabled]="!editMode"
290
+ [disabled]="!editMode()"
263
291
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.CONTACT_HINT' | translate"
264
292
  [title]="'IDEA_UNCOMMON.ADDRESS.CONTACT_HINT' | translate"
265
293
  [(ngModel)]="address.contact"
@@ -267,13 +295,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
267
295
  />
268
296
  </ion-item>
269
297
  }
270
- @if (showEmail) {
271
- <ion-item [color]="color">
298
+ @if (showEmail()) {
299
+ <ion-item [color]="color()">
272
300
  <ion-input
273
301
  autocomplete="new"
274
302
  labelPlacement="stacked"
275
303
  [label]="'IDEA_UNCOMMON.ADDRESS.EMAIL' | translate"
276
- [disabled]="!editMode"
304
+ [disabled]="!editMode()"
277
305
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.EMAIL_HINT' | translate"
278
306
  [title]="'IDEA_UNCOMMON.ADDRESS.EMAIL_HINT' | translate"
279
307
  [(ngModel)]="address.email"
@@ -281,13 +309,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
281
309
  />
282
310
  </ion-item>
283
311
  }
284
- @if (showPhone) {
285
- <ion-item [color]="color">
312
+ @if (showPhone()) {
313
+ <ion-item [color]="color()">
286
314
  <ion-input
287
315
  autocomplete="new"
288
316
  labelPlacement="stacked"
289
317
  [label]="'IDEA_UNCOMMON.ADDRESS.PHONE' | translate"
290
- [disabled]="!editMode"
318
+ [disabled]="!editMode()"
291
319
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.PHONE_HINT' | translate"
292
320
  [title]="'IDEA_UNCOMMON.ADDRESS.PHONE_HINT' | translate"
293
321
  [(ngModel)]="address.phone"
@@ -295,11 +323,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
295
323
  />
296
324
  </ion-item>
297
325
  }
298
- <ion-item [color]="color">
326
+ <ion-item [color]="color()">
299
327
  <ion-input
300
328
  autocomplete="new"
301
329
  labelPlacement="stacked"
302
- [disabled]="!editMode"
330
+ [disabled]="!editMode()"
303
331
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.ADDRESS_HINT' | translate"
304
332
  [title]="'IDEA_UNCOMMON.ADDRESS.ADDRESS_HINT' | translate"
305
333
  [(ngModel)]="address.address"
@@ -307,19 +335,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
307
335
  >
308
336
  <div slot="label">
309
337
  {{ 'IDEA_UNCOMMON.ADDRESS.ADDRESS' | translate }}
310
- @if (editMode && obligatory) {
338
+ @if (editMode() && obligatory()) {
311
339
  <ion-text class="obligatoryDot" />
312
340
  }
313
341
  </div>
314
342
  </ion-input>
315
343
  </ion-item>
316
- @if (showAddress2) {
317
- <ion-item [color]="color">
344
+ @if (showAddress2()) {
345
+ <ion-item [color]="color()">
318
346
  <ion-input
319
347
  autocomplete="new"
320
348
  labelPlacement="stacked"
321
349
  [label]="'IDEA_UNCOMMON.ADDRESS.ADDRESS2' | translate"
322
- [disabled]="!editMode"
350
+ [disabled]="!editMode()"
323
351
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.ADDRESS2_HINT' | translate"
324
352
  [title]="'IDEA_UNCOMMON.ADDRESS.ADDRESS2_HINT' | translate"
325
353
  [(ngModel)]="address.address2"
@@ -327,22 +355,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
327
355
  />
328
356
  </ion-item>
329
357
  }
330
- <ion-item [color]="color">
358
+ <ion-item [color]="color()">
331
359
  <ion-input
332
360
  autocomplete="new"
333
361
  labelPlacement="stacked"
334
362
  [label]="'IDEA_UNCOMMON.ADDRESS.POSTCODE' | translate"
335
- [disabled]="!editMode"
363
+ [disabled]="!editMode()"
336
364
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.POSTCODE_HINT' | translate"
337
365
  [title]="'IDEA_UNCOMMON.ADDRESS.POSTCODE_HINT' | translate"
338
366
  [(ngModel)]="address.postcode"
339
367
  (ionChange)="addressChange.emit(address)"
340
368
  />
341
369
  </ion-item>
342
- <ion-item [color]="color">
370
+ <ion-item [color]="color()">
343
371
  <ion-input
344
372
  autocomplete="new"
345
- [disabled]="!editMode"
373
+ [disabled]="!editMode()"
346
374
  labelPlacement="stacked"
347
375
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.CITY_HINT' | translate"
348
376
  [title]="'IDEA_UNCOMMON.ADDRESS.CITY_HINT' | translate"
@@ -351,18 +379,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
351
379
  >
352
380
  <div slot="label">
353
381
  {{ 'IDEA_UNCOMMON.ADDRESS.CITY' | translate }}
354
- @if (editMode && obligatory) {
382
+ @if (editMode() && obligatory()) {
355
383
  <ion-text class="obligatoryDot" />
356
384
  }
357
385
  </div>
358
386
  </ion-input>
359
387
  </ion-item>
360
- <ion-item [color]="color">
388
+ <ion-item [color]="color()">
361
389
  <ion-input
362
390
  autocomplete="new"
363
391
  labelPlacement="stacked"
364
392
  [label]="'IDEA_UNCOMMON.ADDRESS.PROVINCE' | translate"
365
- [disabled]="!editMode"
393
+ [disabled]="!editMode()"
366
394
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.PROVINCE_HINT' | translate"
367
395
  [title]="'IDEA_UNCOMMON.ADDRESS.PROVINCE_HINT' | translate"
368
396
  [(ngModel)]="address.province"
@@ -370,16 +398,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
370
398
  />
371
399
  </ion-item>
372
400
  <idea-select
373
- [color]="color"
401
+ [color]="color()"
374
402
  [data]="countriesSuggestions"
375
403
  [label]="'IDEA_UNCOMMON.ADDRESS.COUNTRY' | translate"
376
- [lines]="editMode ? lines : null"
404
+ [lines]="editMode() ? lines() : null"
377
405
  [description]="getCountryName(address.country)"
378
406
  [placeholder]="'IDEA_UNCOMMON.ADDRESS.COUNTRY_HINT' | translate"
379
407
  [searchPlaceholder]="'IDEA_UNCOMMON.ADDRESS.COUNTRY_HINT' | translate"
380
408
  [hideIdFromUI]="true"
381
409
  [avoidAutoSelection]="true"
382
- [disabled]="!editMode"
410
+ [disabled]="!editMode()"
383
411
  (select)="setCountryFromSuggestion($event)"
384
412
  />
385
413
  </ion-list>
@@ -389,34 +417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
389
417
  `, styles: ["ion-item[slot=header] ion-input{--highlight-color-focused: transparent;--highlight-color-valid: transparent;--highlight-color-invalid: transparent}ion-list[slot=content]{padding-top:0;padding-left:20px}\n"] }]
390
418
  }], propDecorators: { address: [{
391
419
  type: Input
392
- }], addressChange: [{
393
- type: Output
394
- }], showContact: [{
395
- type: Input
396
- }], showAddress2: [{
397
- type: Input
398
- }], showPhone: [{
399
- type: Input
400
- }], showEmail: [{
401
- type: Input
402
- }], editMode: [{
403
- type: Input
404
- }], obligatory: [{
405
- type: Input
406
- }], lines: [{
407
- type: Input
408
- }], color: [{
409
- type: Input
410
- }], label: [{
411
- type: Input
412
- }], placeholder: [{
413
- type: Input
414
- }], openByDefault: [{
415
- type: Input
416
- }], accordion: [{
417
- type: ViewChild,
418
- args: ['accordion']
419
- }] } });
420
+ }], addressChange: [{ type: i0.Output, args: ["addressChange"] }], showContact: [{ type: i0.Input, args: [{ isSignal: true, alias: "showContact", required: false }] }], showAddress2: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAddress2", required: false }] }], showPhone: [{ type: i0.Input, args: [{ isSignal: true, alias: "showPhone", required: false }] }], showEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEmail", required: false }] }], editMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "editMode", required: false }] }], obligatory: [{ type: i0.Input, args: [{ isSignal: true, alias: "obligatory", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], openByDefault: [{ type: i0.Input, args: [{ isSignal: true, alias: "openByDefault", required: false }] }], accordion: [{ type: i0.ViewChild, args: ['accordion', { isSignal: true }] }] } });
420
421
 
421
422
  class IDEAErrorReportingService {
422
423
  constructor() {
@@ -473,10 +474,10 @@ class IDEAErrorReportingService {
473
474
  userAgent: navigator.userAgent
474
475
  });
475
476
  }
476
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAErrorReportingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
477
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAErrorReportingService, providedIn: 'root' }); }
477
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAErrorReportingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
478
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAErrorReportingService, providedIn: 'root' }); }
478
479
  }
479
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAErrorReportingService, decorators: [{
480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAErrorReportingService, decorators: [{
480
481
  type: Injectable,
481
482
  args: [{ providedIn: 'root' }]
482
483
  }], ctorParameters: () => [] });
@@ -520,10 +521,10 @@ class IDEATinCanService {
520
521
  clear() {
521
522
  this.data = {};
522
523
  }
523
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEATinCanService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
524
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEATinCanService, providedIn: 'root' }); }
524
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEATinCanService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
525
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEATinCanService, providedIn: 'root' }); }
525
526
  }
526
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEATinCanService, decorators: [{
527
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEATinCanService, decorators: [{
527
528
  type: Injectable,
528
529
  args: [{ providedIn: 'root' }]
529
530
  }], ctorParameters: () => [] });
@@ -579,10 +580,10 @@ class IDEAOfflineService {
579
580
  this._isOffline = !status.connected;
580
581
  return status.connected;
581
582
  }
582
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
583
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineService, providedIn: 'root' }); }
583
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
584
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineService, providedIn: 'root' }); }
584
585
  }
585
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineService, decorators: [{
586
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineService, decorators: [{
586
587
  type: Injectable,
587
588
  args: [{ providedIn: 'root' }]
588
589
  }], ctorParameters: () => [] });
@@ -974,10 +975,10 @@ class IDEAAWSAPIService {
974
975
  deleteResource(resource, options) {
975
976
  return this.request(resource, 'DELETE', options);
976
977
  }
977
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAWSAPIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
978
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAWSAPIService, providedIn: 'root' }); }
978
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAWSAPIService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
979
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAWSAPIService, providedIn: 'root' }); }
979
980
  }
980
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAWSAPIService, decorators: [{
981
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAWSAPIService, decorators: [{
981
982
  type: Injectable,
982
983
  args: [{ providedIn: 'root' }]
983
984
  }], ctorParameters: () => [] });
@@ -1021,27 +1022,34 @@ class IDEAOldAttachmentsComponent {
1021
1022
  /**
1022
1023
  * The team from which we want to load the resources. Default: try to guess current team.
1023
1024
  */
1025
+ // TODO: Skipped for migration because:
1026
+ // Your application code writes to the input. This prevents migration.
1024
1027
  this.team = null;
1025
1028
  /**
1026
1029
  * The path to the online API resource, as an array. Don't include the team. E.g. `['entities', entityId]`.
1027
1030
  */
1028
- this.pathResource = [];
1031
+ this.pathResource = input([], /* @ts-ignore */
1032
+ ...(ngDevMode ? [{ debugName: "pathResource" }] : /* istanbul ignore next */ []));
1029
1033
  /**
1030
1034
  * The array in which we want to add/remove attachments.
1031
1035
  */
1032
- this.attachments = null;
1036
+ this.attachments = input(null, /* @ts-ignore */
1037
+ ...(ngDevMode ? [{ debugName: "attachments" }] : /* istanbul ignore next */ []));
1033
1038
  /**
1034
1039
  * Regulate the mode (view/edit).
1035
1040
  */
1041
+ // TODO: Skipped for migration because: This input is used in a control flow expression (e.g. `@if` or `*ngIf`) and migrating would break narrowing currently.
1036
1042
  this.editMode = false;
1037
1043
  /**
1038
1044
  * Show errors as reported from the parent component.
1039
1045
  */
1040
- this.errors = new Set();
1046
+ this.errors = input(new Set(), /* @ts-ignore */
1047
+ ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
1041
1048
  /**
1042
1049
  * The lines attribute of the item.
1043
1050
  */
1044
- this.lines = 'none';
1051
+ this.lines = input('none', /* @ts-ignore */
1052
+ ...(ngDevMode ? [{ debugName: "lines" }] : /* istanbul ignore next */ []));
1045
1053
  /**
1046
1054
  * Stack of errors from the last upload.
1047
1055
  */
@@ -1051,14 +1059,15 @@ class IDEAOldAttachmentsComponent {
1051
1059
  // if the team isn't specified, try to guess it in the usual IDEA's paths
1052
1060
  this.team = this.team || this._tc.get('membership').teamId || this._tc.get('teamId');
1053
1061
  this.requestURL = `teams/${this.team}/`;
1054
- if (this.pathResource && this.pathResource.length)
1055
- this.requestURL = this.requestURL.concat(this.pathResource.filter(x => x).join('/'));
1062
+ const pathResource = this.pathResource();
1063
+ if (pathResource && pathResource.length)
1064
+ this.requestURL = this.requestURL.concat(pathResource.filter(x => x).join('/'));
1056
1065
  }
1057
1066
  isCapacitor() {
1058
1067
  return this._platform.is('capacitor');
1059
1068
  }
1060
1069
  hasFieldAnError(field) {
1061
- return this.errors.has(field);
1070
+ return this.errors().has(field);
1062
1071
  }
1063
1072
  browseFiles() {
1064
1073
  document.getElementById('attachmentPicker').click();
@@ -1102,7 +1111,7 @@ class IDEAOldAttachmentsComponent {
1102
1111
  content = await heic2any({ blob: content, toType: 'image/jpeg' });
1103
1112
  }
1104
1113
  const attachment = new Attachment({ name, format });
1105
- this.attachments.push(attachment);
1114
+ this.attachments().push(attachment);
1106
1115
  try {
1107
1116
  const signedURL = await this._api.patchResource(this.requestURL, {
1108
1117
  body: { action: 'ATTACHMENTS_PUT', attachmentId: attachment.attachmentId }
@@ -1117,9 +1126,9 @@ class IDEAOldAttachmentsComponent {
1117
1126
  }
1118
1127
  }
1119
1128
  removeAttachment(attachment) {
1120
- const index = this.attachments.indexOf(attachment);
1129
+ const index = this.attachments().indexOf(attachment);
1121
1130
  if (index !== -1)
1122
- this.attachments.splice(index, 1);
1131
+ this.attachments().splice(index, 1);
1123
1132
  }
1124
1133
  async openAttachment(attachment) {
1125
1134
  try {
@@ -1148,14 +1157,14 @@ class IDEAOldAttachmentsComponent {
1148
1157
  return 'help';
1149
1158
  }
1150
1159
  }
1151
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOldAttachmentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1152
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAOldAttachmentsComponent, isStandalone: true, selector: "idea-old-attachments", inputs: { team: "team", pathResource: "pathResource", attachments: "attachments", editMode: "editMode", errors: "errors", lines: "lines" }, ngImport: i0, template: `
1153
- @for (att of attachments; track att; let index = $index; let odd = $odd) {
1160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOldAttachmentsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1161
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAOldAttachmentsComponent, isStandalone: true, selector: "idea-old-attachments", inputs: { team: { classPropertyName: "team", publicName: "team", isSignal: false, isRequired: false, transformFunction: null }, pathResource: { classPropertyName: "pathResource", publicName: "pathResource", isSignal: true, isRequired: false, transformFunction: null }, attachments: { classPropertyName: "attachments", publicName: "attachments", isSignal: true, isRequired: false, transformFunction: null }, editMode: { classPropertyName: "editMode", publicName: "editMode", isSignal: false, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1162
+ @for (att of attachments(); track att; let index = $index; let odd = $odd) {
1154
1163
  <ion-item
1155
1164
  class="attachments"
1156
1165
  [class.fieldHasError]="hasFieldAnError('attachments[' + index + '].attachmentId')"
1157
1166
  [class.odd]="odd"
1158
- [lines]="lines"
1167
+ [lines]="lines()"
1159
1168
  >
1160
1169
  @if (att.attachmentId && _offline.isOnline()) {
1161
1170
  <ion-button fill="clear" size="small" slot="start" (click)="openAttachment(att)">
@@ -1196,7 +1205,7 @@ class IDEAOldAttachmentsComponent {
1196
1205
  </ion-item>
1197
1206
  }
1198
1207
  <!----->
1199
- @if (!editMode && !attachments?.length) {
1208
+ @if (!editMode && !attachments()?.length) {
1200
1209
  <ion-item lines="none" class="noAttachments">
1201
1210
  <ion-label>
1202
1211
  {{ 'IDEA_TEAMS.ATTACHMENTS.NO_ATTACHMENT' | translate }}
@@ -1207,7 +1216,7 @@ class IDEAOldAttachmentsComponent {
1207
1216
  @if (editMode) {
1208
1217
  <div>
1209
1218
  @for (err of uploadErrors; track err) {
1210
- <ion-item class="attachments" [lines]="lines">
1219
+ <ion-item class="attachments" [lines]="lines()">
1211
1220
  <ion-icon name="alert-circle" slot="start" color="danger" />
1212
1221
  <ion-label color="danger">
1213
1222
  {{ err }}
@@ -1247,17 +1256,17 @@ class IDEAOldAttachmentsComponent {
1247
1256
  }
1248
1257
  </ion-item>
1249
1258
  }
1250
- `, isInline: true, styles: [".attachments ion-button[slot=start],.attachments ion-icon[slot=start]{margin-right:10px}.attachments .loadingWarning{font-style:italic;font-size:.8em;color:var(--ion-color-medium)}.noAttachments{font-style:italic}.selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.selectable{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
1259
+ `, isInline: true, styles: [".attachments ion-button[slot=start],.attachments ion-icon[slot=start]{margin-right:10px}.attachments .loadingWarning{font-style:italic;font-size:.8em;color:var(--ion-color-medium)}.noAttachments{font-style:italic}.selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.selectable{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1251
1260
  }
1252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOldAttachmentsComponent, decorators: [{
1261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOldAttachmentsComponent, decorators: [{
1253
1262
  type: Component,
1254
- args: [{ selector: 'idea-old-attachments', imports: [FormsModule, IDEATranslatePipe, IonItem, IonButton, IonIcon, IonInput, IonLabel, IonSpinner], template: `
1255
- @for (att of attachments; track att; let index = $index; let odd = $odd) {
1263
+ args: [{ selector: 'idea-old-attachments', imports: [FormsModule, IDEATranslatePipe, IonItem, IonButton, IonIcon, IonInput, IonLabel, IonSpinner], changeDetection: ChangeDetectionStrategy.OnPush, template: `
1264
+ @for (att of attachments(); track att; let index = $index; let odd = $odd) {
1256
1265
  <ion-item
1257
1266
  class="attachments"
1258
1267
  [class.fieldHasError]="hasFieldAnError('attachments[' + index + '].attachmentId')"
1259
1268
  [class.odd]="odd"
1260
- [lines]="lines"
1269
+ [lines]="lines()"
1261
1270
  >
1262
1271
  @if (att.attachmentId && _offline.isOnline()) {
1263
1272
  <ion-button fill="clear" size="small" slot="start" (click)="openAttachment(att)">
@@ -1298,7 +1307,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1298
1307
  </ion-item>
1299
1308
  }
1300
1309
  <!----->
1301
- @if (!editMode && !attachments?.length) {
1310
+ @if (!editMode && !attachments()?.length) {
1302
1311
  <ion-item lines="none" class="noAttachments">
1303
1312
  <ion-label>
1304
1313
  {{ 'IDEA_TEAMS.ATTACHMENTS.NO_ATTACHMENT' | translate }}
@@ -1309,7 +1318,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1309
1318
  @if (editMode) {
1310
1319
  <div>
1311
1320
  @for (err of uploadErrors; track err) {
1312
- <ion-item class="attachments" [lines]="lines">
1321
+ <ion-item class="attachments" [lines]="lines()">
1313
1322
  <ion-icon name="alert-circle" slot="start" color="danger" />
1314
1323
  <ion-label color="danger">
1315
1324
  {{ err }}
@@ -1352,17 +1361,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1352
1361
  `, styles: [".attachments ion-button[slot=start],.attachments ion-icon[slot=start]{margin-right:10px}.attachments .loadingWarning{font-style:italic;font-size:.8em;color:var(--ion-color-medium)}.noAttachments{font-style:italic}.selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.selectable{cursor:pointer}\n"] }]
1353
1362
  }], propDecorators: { team: [{
1354
1363
  type: Input
1355
- }], pathResource: [{
1356
- type: Input
1357
- }], attachments: [{
1358
- type: Input
1359
- }], editMode: [{
1364
+ }], pathResource: [{ type: i0.Input, args: [{ isSignal: true, alias: "pathResource", required: false }] }], attachments: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachments", required: false }] }], editMode: [{
1360
1365
  type: Input
1361
- }], errors: [{
1362
- type: Input
1363
- }], lines: [{
1364
- type: Input
1365
- }] } });
1366
+ }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }] } });
1366
1367
  /**
1367
1368
  * The possibile file types (formats).
1368
1369
  */
@@ -1383,6 +1384,7 @@ class IDEAAnnouncementComponent {
1383
1384
  this._env = inject(IDEAEnvironment);
1384
1385
  this._tc = inject(IDEATinCanService);
1385
1386
  this._storage = inject(IDEAStorageService);
1387
+ this._cdr = inject(ChangeDetectorRef);
1386
1388
  this.storageKey = (this._env.idea.project || 'app').concat('_LAST_ANNOUNCEMENT');
1387
1389
  this.color = 'dark';
1388
1390
  }
@@ -1393,14 +1395,16 @@ class IDEAAnnouncementComponent {
1393
1395
  const lastRead = await this._storage.get(this.storageKey);
1394
1396
  if (!lastRead || this.announcement.content !== lastRead)
1395
1397
  this.htmlContent = mdToHtml(this.announcement.content);
1398
+ this._cdr.markForCheck();
1396
1399
  }
1397
1400
  }
1398
1401
  async markAsRead() {
1399
1402
  await this._storage.set(this.storageKey, this.announcement.content);
1400
1403
  this.htmlContent = null;
1404
+ this._cdr.markForCheck();
1401
1405
  }
1402
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAnnouncementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1403
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAAnnouncementComponent, isStandalone: true, selector: "idea-announcement", inputs: { color: "color" }, ngImport: i0, template: `
1406
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAnnouncementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1407
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAAnnouncementComponent, isStandalone: true, selector: "idea-announcement", inputs: { color: "color" }, ngImport: i0, template: `
1404
1408
  @if (htmlContent) {
1405
1409
  <ion-card class="announcementCard" [color]="color">
1406
1410
  <ion-card-content>
@@ -1413,13 +1417,14 @@ class IDEAAnnouncementComponent {
1413
1417
  </ion-card-content>
1414
1418
  </ion-card>
1415
1419
  }
1416
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
1420
+ `, isInline: true, dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1417
1421
  }
1418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAnnouncementComponent, decorators: [{
1422
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAnnouncementComponent, decorators: [{
1419
1423
  type: Component,
1420
1424
  args: [{
1421
1425
  selector: 'idea-announcement',
1422
- imports: [CommonModule, IDEATranslatePipe, IonButton, IonCardContent, IonCard],
1426
+ imports: [IDEATranslatePipe, IonButton, IonCardContent, IonCard],
1427
+ changeDetection: ChangeDetectionStrategy.OnPush,
1423
1428
  template: `
1424
1429
  @if (htmlContent) {
1425
1430
  <ion-card class="announcementCard" [color]="color">
@@ -1447,21 +1452,67 @@ class IDEAColorPickerComponent {
1447
1452
  /**
1448
1453
  * The pickable colors.
1449
1454
  */
1450
- this.colors = COLORS;
1455
+ this.colors = input(COLORS, /* @ts-ignore */
1456
+ ...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
1457
+ /**
1458
+ * The current color.
1459
+ */
1460
+ this.current = input(/* @ts-ignore */
1461
+ ...(ngDevMode ? [undefined, { debugName: "current" }] : /* istanbul ignore next */ []));
1462
+ /**
1463
+ * The label for the field.
1464
+ */
1465
+ this.label = input(/* @ts-ignore */
1466
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
1467
+ /**
1468
+ * A placeholder for the field.
1469
+ */
1470
+ this.placeholder = input(/* @ts-ignore */
1471
+ ...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
1472
+ /**
1473
+ * The icon for the field.
1474
+ */
1475
+ this.icon = input(/* @ts-ignore */
1476
+ ...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
1477
+ /**
1478
+ * The color of the icon.
1479
+ */
1480
+ this.iconColor = input(/* @ts-ignore */
1481
+ ...(ngDevMode ? [undefined, { debugName: "iconColor" }] : /* istanbul ignore next */ []));
1482
+ /**
1483
+ * If true, the component is disabled.
1484
+ */
1485
+ this.disabled = input(/* @ts-ignore */
1486
+ ...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
1487
+ /**
1488
+ * If true, the obligatory dot is shown.
1489
+ */
1490
+ this.obligatory = input(/* @ts-ignore */
1491
+ ...(ngDevMode ? [undefined, { debugName: "obligatory" }] : /* istanbul ignore next */ []));
1492
+ /**
1493
+ * Lines preferences for the item.
1494
+ */
1495
+ this.lines = input(/* @ts-ignore */
1496
+ ...(ngDevMode ? [undefined, { debugName: "lines" }] : /* istanbul ignore next */ []));
1497
+ /**
1498
+ * The color for the component.
1499
+ */
1500
+ this.color = input(/* @ts-ignore */
1501
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
1451
1502
  /**
1452
1503
  * On select event.
1453
1504
  */
1454
- this.select = new EventEmitter();
1505
+ this.select = output();
1455
1506
  /**
1456
1507
  * Icon select.
1457
1508
  */
1458
- this.iconSelect = new EventEmitter();
1509
+ this.iconSelect = output();
1459
1510
  this._popover = inject(PopoverController);
1460
1511
  }
1461
1512
  async openPalette(event) {
1462
- if (this.disabled)
1513
+ if (this.disabled())
1463
1514
  return;
1464
- const componentProps = { colors: this.colors, current: this.current };
1515
+ const componentProps = { colors: this.colors(), current: this.current() };
1465
1516
  const popover = await this._popover.create({ component: ColorsPaletteComponent, componentProps, event });
1466
1517
  popover.onDidDismiss().then(res => {
1467
1518
  if (res && res.data)
@@ -1474,109 +1525,95 @@ class IDEAColorPickerComponent {
1474
1525
  event.stopPropagation();
1475
1526
  this.iconSelect.emit(event);
1476
1527
  }
1477
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1478
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAColorPickerComponent, isStandalone: true, selector: "idea-color-picker", inputs: { colors: "colors", current: "current", label: "label", placeholder: "placeholder", icon: "icon", iconColor: "iconColor", disabled: "disabled", obligatory: "obligatory", lines: "lines", color: "color" }, outputs: { select: "select", iconSelect: "iconSelect" }, ngImport: i0, template: `
1528
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1529
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAColorPickerComponent, isStandalone: true, selector: "idea-color-picker", inputs: { colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: false, transformFunction: null }, current: { classPropertyName: "current", publicName: "current", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, obligatory: { classPropertyName: "obligatory", publicName: "obligatory", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { select: "select", iconSelect: "iconSelect" }, ngImport: i0, template: `
1479
1530
  <ion-item
1480
1531
  class="colorPickerItem"
1481
- [color]="color"
1482
- [lines]="lines"
1483
- [button]="!disabled"
1484
- [title]="placeholder || ''"
1485
- [class.withLabel]="label"
1532
+ [color]="color()"
1533
+ [lines]="lines()"
1534
+ [button]="!disabled()"
1535
+ [title]="placeholder() || ''"
1536
+ [class.withLabel]="label()"
1486
1537
  (click)="openPalette($event)"
1487
1538
  >
1488
- @if (icon) {
1489
- <ion-button fill="clear" slot="start" [color]="iconColor" (click)="doIconSelect($event)">
1490
- <ion-icon [name]="icon" slot="icon-only" />
1539
+ @if (icon()) {
1540
+ <ion-button fill="clear" slot="start" [color]="iconColor()" (click)="doIconSelect($event)">
1541
+ <ion-icon [name]="icon()" slot="icon-only" />
1491
1542
  </ion-button>
1492
1543
  }
1493
- @if (label) {
1494
- <ion-label [class.selectable]="!disabled">
1495
- {{ label }}
1496
- @if (obligatory && !disabled) {
1544
+ @if (label()) {
1545
+ <ion-label [class.selectable]="!disabled()">
1546
+ {{ label() }}
1547
+ @if (obligatory() && !disabled()) {
1497
1548
  <ion-text class="obligatoryDot" />
1498
1549
  }
1499
1550
  </ion-label>
1500
1551
  }
1501
- <ion-avatar slot="end" class="colorCircle" [style.background-color]="current" />
1502
- @if (!disabled) {
1503
- <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled" />
1552
+ <ion-avatar slot="end" class="colorCircle" [style.background-color]="current()" />
1553
+ @if (!disabled()) {
1554
+ <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled()" />
1504
1555
  }
1505
1556
  </ion-item>
1506
- `, isInline: true, styles: [".colorPickerItem{min-height:48px;height:auto}.colorPickerItem .placeholder{color:var(--ion-color-medium)}.colorPickerItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.selectItem.withLabel{min-height:58px;height:auto}.selectItem.withLabel .selectIcon{padding-top:25px}.selectItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}ion-avatar.colorCircle{width:20px;height:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonAvatar, selector: "ion-avatar" }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }] }); }
1557
+ `, isInline: true, styles: [".colorPickerItem{min-height:48px;height:auto}.colorPickerItem .placeholder{color:var(--ion-color-medium)}.colorPickerItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.selectItem.withLabel{min-height:58px;height:auto}.selectItem.withLabel .selectIcon{padding-top:25px}.selectItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}ion-avatar.colorCircle{width:20px;height:20px}\n"], dependencies: [{ kind: "component", type: IonAvatar, selector: "ion-avatar" }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1507
1558
  }
1508
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAColorPickerComponent, decorators: [{
1559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAColorPickerComponent, decorators: [{
1509
1560
  type: Component,
1510
- args: [{ selector: 'idea-color-picker', imports: [CommonModule, IonAvatar, IonText, IonLabel, IonIcon, IonButton, IonItem], template: `
1561
+ args: [{ selector: 'idea-color-picker', imports: [IonAvatar, IonText, IonLabel, IonIcon, IonButton, IonItem], changeDetection: ChangeDetectionStrategy.OnPush, template: `
1511
1562
  <ion-item
1512
1563
  class="colorPickerItem"
1513
- [color]="color"
1514
- [lines]="lines"
1515
- [button]="!disabled"
1516
- [title]="placeholder || ''"
1517
- [class.withLabel]="label"
1564
+ [color]="color()"
1565
+ [lines]="lines()"
1566
+ [button]="!disabled()"
1567
+ [title]="placeholder() || ''"
1568
+ [class.withLabel]="label()"
1518
1569
  (click)="openPalette($event)"
1519
1570
  >
1520
- @if (icon) {
1521
- <ion-button fill="clear" slot="start" [color]="iconColor" (click)="doIconSelect($event)">
1522
- <ion-icon [name]="icon" slot="icon-only" />
1571
+ @if (icon()) {
1572
+ <ion-button fill="clear" slot="start" [color]="iconColor()" (click)="doIconSelect($event)">
1573
+ <ion-icon [name]="icon()" slot="icon-only" />
1523
1574
  </ion-button>
1524
1575
  }
1525
- @if (label) {
1526
- <ion-label [class.selectable]="!disabled">
1527
- {{ label }}
1528
- @if (obligatory && !disabled) {
1576
+ @if (label()) {
1577
+ <ion-label [class.selectable]="!disabled()">
1578
+ {{ label() }}
1579
+ @if (obligatory() && !disabled()) {
1529
1580
  <ion-text class="obligatoryDot" />
1530
1581
  }
1531
1582
  </ion-label>
1532
1583
  }
1533
- <ion-avatar slot="end" class="colorCircle" [style.background-color]="current" />
1534
- @if (!disabled) {
1535
- <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled" />
1584
+ <ion-avatar slot="end" class="colorCircle" [style.background-color]="current()" />
1585
+ @if (!disabled()) {
1586
+ <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled()" />
1536
1587
  }
1537
1588
  </ion-item>
1538
1589
  `, styles: [".colorPickerItem{min-height:48px;height:auto}.colorPickerItem .placeholder{color:var(--ion-color-medium)}.colorPickerItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.selectItem.withLabel{min-height:58px;height:auto}.selectItem.withLabel .selectIcon{padding-top:25px}.selectItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}ion-avatar.colorCircle{width:20px;height:20px}\n"] }]
1539
- }], propDecorators: { colors: [{
1540
- type: Input
1541
- }], current: [{
1542
- type: Input
1543
- }], label: [{
1544
- type: Input
1545
- }], placeholder: [{
1546
- type: Input
1547
- }], icon: [{
1548
- type: Input
1549
- }], iconColor: [{
1550
- type: Input
1551
- }], disabled: [{
1552
- type: Input
1553
- }], obligatory: [{
1554
- type: Input
1555
- }], lines: [{
1556
- type: Input
1557
- }], color: [{
1558
- type: Input
1559
- }], select: [{
1560
- type: Output
1561
- }], iconSelect: [{
1562
- type: Output
1563
- }] } });
1590
+ }], propDecorators: { colors: [{ type: i0.Input, args: [{ isSignal: true, alias: "colors", required: false }] }], current: [{ type: i0.Input, args: [{ isSignal: true, alias: "current", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], obligatory: [{ type: i0.Input, args: [{ isSignal: true, alias: "obligatory", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], select: [{ type: i0.Output, args: ["select"] }], iconSelect: [{ type: i0.Output, args: ["iconSelect"] }] } });
1564
1591
  /**
1565
1592
  * Component to open in a popover for displaying the colors available.
1566
1593
  */
1567
1594
  class ColorsPaletteComponent {
1568
1595
  constructor() {
1569
1596
  this._popover = inject(PopoverController);
1597
+ /**
1598
+ * The pickable colors.
1599
+ */
1600
+ this.colors = input(/* @ts-ignore */
1601
+ ...(ngDevMode ? [undefined, { debugName: "colors" }] : /* istanbul ignore next */ []));
1602
+ /**
1603
+ * The current color.
1604
+ */
1605
+ this.current = input(/* @ts-ignore */
1606
+ ...(ngDevMode ? [undefined, { debugName: "current" }] : /* istanbul ignore next */ []));
1570
1607
  }
1571
1608
  pick(color) {
1572
1609
  this._popover.dismiss(color);
1573
1610
  }
1574
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ColorsPaletteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1575
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ColorsPaletteComponent, isStandalone: true, selector: "idea-colors-palette", inputs: { colors: "colors", current: "current" }, ngImport: i0, template: `
1611
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ColorsPaletteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1612
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: ColorsPaletteComponent, isStandalone: true, selector: "idea-colors-palette", inputs: { colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: false, transformFunction: null }, current: { classPropertyName: "current", publicName: "current", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1576
1613
  <ion-content>
1577
1614
  <ion-grid>
1578
1615
  <ion-row>
1579
- @for (c of colors; track c) {
1616
+ @for (c of colors(); track c) {
1580
1617
  <ion-col [size]="2">
1581
1618
  <ion-avatar
1582
1619
  class="colorCircle tappable"
@@ -1584,7 +1621,7 @@ class ColorsPaletteComponent {
1584
1621
  [title]="c.name || c.hex"
1585
1622
  (click)="pick(c.hex)"
1586
1623
  >
1587
- @if (c.hex === current) {
1624
+ @if (c.hex === current()) {
1588
1625
  <ion-icon name="checkmark" />
1589
1626
  }
1590
1627
  </ion-avatar>
@@ -1593,15 +1630,15 @@ class ColorsPaletteComponent {
1593
1630
  </ion-row>
1594
1631
  </ion-grid>
1595
1632
  </ion-content>
1596
- `, isInline: true, styles: ["ion-content{--background: var(--ion-color-white)}ion-avatar.colorCircle{width:20px;height:20px}.tappable{cursor:pointer}ion-avatar.colorCircle ion-icon{color:#fff;font-size:1.2em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonAvatar, selector: "ion-avatar" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
1633
+ `, isInline: true, styles: ["ion-content{--background: var(--ion-color-white)}ion-avatar.colorCircle{width:20px;height:20px}.tappable{cursor:pointer}ion-avatar.colorCircle ion-icon{color:#fff;font-size:1.2em}\n"], dependencies: [{ kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonAvatar, selector: "ion-avatar" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1597
1634
  }
1598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ColorsPaletteComponent, decorators: [{
1635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ColorsPaletteComponent, decorators: [{
1599
1636
  type: Component,
1600
- args: [{ selector: 'idea-colors-palette', imports: [CommonModule, IonContent, IonGrid, IonRow, IonCol, IonAvatar, IonIcon], template: `
1637
+ args: [{ selector: 'idea-colors-palette', imports: [IonContent, IonGrid, IonRow, IonCol, IonAvatar, IonIcon], changeDetection: ChangeDetectionStrategy.OnPush, template: `
1601
1638
  <ion-content>
1602
1639
  <ion-grid>
1603
1640
  <ion-row>
1604
- @for (c of colors; track c) {
1641
+ @for (c of colors(); track c) {
1605
1642
  <ion-col [size]="2">
1606
1643
  <ion-avatar
1607
1644
  class="colorCircle tappable"
@@ -1609,7 +1646,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1609
1646
  [title]="c.name || c.hex"
1610
1647
  (click)="pick(c.hex)"
1611
1648
  >
1612
- @if (c.hex === current) {
1649
+ @if (c.hex === current()) {
1613
1650
  <ion-icon name="checkmark" />
1614
1651
  }
1615
1652
  </ion-avatar>
@@ -1619,11 +1656,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1619
1656
  </ion-grid>
1620
1657
  </ion-content>
1621
1658
  `, styles: ["ion-content{--background: var(--ion-color-white)}ion-avatar.colorCircle{width:20px;height:20px}.tappable{cursor:pointer}ion-avatar.colorCircle ion-icon{color:#fff;font-size:1.2em}\n"] }]
1622
- }], propDecorators: { colors: [{
1623
- type: Input
1624
- }], current: [{
1625
- type: Input
1626
- }] } });
1659
+ }], propDecorators: { colors: [{ type: i0.Input, args: [{ isSignal: true, alias: "colors", required: false }] }], current: [{ type: i0.Input, args: [{ isSignal: true, alias: "current", required: false }] }] } });
1627
1660
 
1628
1661
  class IDEAContactsComponent {
1629
1662
  constructor() {
@@ -1632,27 +1665,42 @@ class IDEAContactsComponent {
1632
1665
  /**
1633
1666
  * The contacts to manage.
1634
1667
  */
1635
- this.contacts = new Contacts();
1668
+ this.contacts = input(new Contacts(), /* @ts-ignore */
1669
+ ...(ngDevMode ? [{ debugName: "contacts" }] : /* istanbul ignore next */ []));
1636
1670
  /**
1637
1671
  * If true, show the field `name`.
1638
1672
  */
1639
- this.showName = false;
1673
+ this.showName = input(false, /* @ts-ignore */
1674
+ ...(ngDevMode ? [{ debugName: "showName" }] : /* istanbul ignore next */ []));
1640
1675
  /**
1641
1676
  * Whether the fields are editable or disabled.
1642
1677
  */
1643
- this.editMode = true;
1678
+ this.editMode = input(true, /* @ts-ignore */
1679
+ ...(ngDevMode ? [{ debugName: "editMode" }] : /* istanbul ignore next */ []));
1680
+ /**
1681
+ * The lines attribute of the item.
1682
+ */
1683
+ this.lines = input(/* @ts-ignore */
1684
+ ...(ngDevMode ? [undefined, { debugName: "lines" }] : /* istanbul ignore next */ []));
1685
+ /**
1686
+ * The color for the component.
1687
+ */
1688
+ this.color = input(/* @ts-ignore */
1689
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
1644
1690
  }
1645
1691
  sendEmail() {
1646
- if (!this.contacts.email)
1692
+ const contacts = this.contacts();
1693
+ if (!contacts.email)
1647
1694
  return;
1648
- const url = `mailto:${this.contacts.email}`;
1649
- this.preExternalAction(this.contacts.email, () => window.open(url, '_system'));
1695
+ const url = `mailto:${contacts.email}`;
1696
+ this.preExternalAction(contacts.email, () => window.open(url, '_system'));
1650
1697
  }
1651
1698
  call() {
1652
- if (!this.contacts.phone)
1699
+ const contacts = this.contacts();
1700
+ if (!contacts.phone)
1653
1701
  return;
1654
- const url = `tel:${this.contacts.phone}`;
1655
- this.preExternalAction(this.contacts.phone, () => window.open(url, '_system'));
1702
+ const url = `tel:${contacts.phone}`;
1703
+ this.preExternalAction(contacts.phone, () => window.open(url, '_system'));
1656
1704
  }
1657
1705
  preExternalAction(message, cb) {
1658
1706
  const header = this._translate._('COMMON.DO_YOU_WANT_TO_PROCEED');
@@ -1663,33 +1711,33 @@ class IDEAContactsComponent {
1663
1711
  const cssClass = 'selectableAlertMessage';
1664
1712
  this._alert.create({ header, message, buttons, cssClass }).then(alert => alert.present());
1665
1713
  }
1666
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAContactsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1667
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAContactsComponent, isStandalone: true, selector: "idea-contacts", inputs: { contacts: "contacts", showName: "showName", editMode: "editMode", lines: "lines", color: "color" }, ngImport: i0, template: `
1714
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAContactsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1715
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAContactsComponent, isStandalone: true, selector: "idea-contacts", inputs: { contacts: { classPropertyName: "contacts", publicName: "contacts", isSignal: true, isRequired: false, transformFunction: null }, showName: { classPropertyName: "showName", publicName: "showName", isSignal: true, isRequired: false, transformFunction: null }, editMode: { classPropertyName: "editMode", publicName: "editMode", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1668
1716
  <div class="contacts">
1669
- @if (showName) {
1670
- <ion-item [lines]="lines" [color]="color">
1717
+ @if (showName()) {
1718
+ <ion-item [lines]="lines()" [color]="color()">
1671
1719
  <ion-input
1672
1720
  autocomplete="new"
1673
1721
  labelPlacement="stacked"
1674
1722
  [label]="'IDEA_UNCOMMON.CONTACTS.NAME' | translate"
1675
- [disabled]="!editMode"
1723
+ [disabled]="!editMode()"
1676
1724
  [placeholder]="'IDEA_UNCOMMON.CONTACTS.NAME_HINT' | translate"
1677
1725
  [title]="'IDEA_UNCOMMON.CONTACTS.NAME_HINT' | translate"
1678
- [(ngModel)]="contacts.name"
1726
+ [(ngModel)]="contacts().name"
1679
1727
  />
1680
1728
  </ion-item>
1681
1729
  }
1682
- <ion-item [lines]="lines" [color]="color">
1730
+ <ion-item [lines]="lines()" [color]="color()">
1683
1731
  <ion-input
1684
1732
  autocomplete="new"
1685
1733
  labelPlacement="stacked"
1686
1734
  [label]="'IDEA_UNCOMMON.CONTACTS.PHONE' | translate"
1687
- [disabled]="!editMode"
1735
+ [disabled]="!editMode()"
1688
1736
  [placeholder]="'IDEA_UNCOMMON.CONTACTS.PHONE_HINT' | translate"
1689
1737
  [title]="'IDEA_UNCOMMON.CONTACTS.PHONE_HINT' | translate"
1690
- [(ngModel)]="contacts.phone"
1738
+ [(ngModel)]="contacts().phone"
1691
1739
  />
1692
- @if (!editMode) {
1740
+ @if (!editMode()) {
1693
1741
  <ion-button
1694
1742
  slot="end"
1695
1743
  fill="clear"
@@ -1702,17 +1750,17 @@ class IDEAContactsComponent {
1702
1750
  </ion-button>
1703
1751
  }
1704
1752
  </ion-item>
1705
- <ion-item [lines]="lines" [color]="color">
1753
+ <ion-item [lines]="lines()" [color]="color()">
1706
1754
  <ion-input
1707
1755
  autocomplete="new"
1708
1756
  labelPlacement="stacked"
1709
1757
  [label]="'IDEA_UNCOMMON.CONTACTS.EMAIL' | translate"
1710
- [disabled]="!editMode"
1758
+ [disabled]="!editMode()"
1711
1759
  [placeholder]="'IDEA_UNCOMMON.CONTACTS.EMAIL_HINT' | translate"
1712
1760
  [title]="'IDEA_UNCOMMON.CONTACTS.EMAIL_HINT' | translate"
1713
- [(ngModel)]="contacts.email"
1761
+ [(ngModel)]="contacts().email"
1714
1762
  />
1715
- @if (!editMode) {
1763
+ @if (!editMode()) {
1716
1764
  <ion-button
1717
1765
  slot="end"
1718
1766
  fill="clear"
@@ -1726,36 +1774,36 @@ class IDEAContactsComponent {
1726
1774
  }
1727
1775
  </ion-item>
1728
1776
  </div>
1729
- `, isInline: true, styles: [".marginTop{margin-top:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
1777
+ `, isInline: true, styles: [".marginTop{margin-top:14px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1730
1778
  }
1731
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAContactsComponent, decorators: [{
1779
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAContactsComponent, decorators: [{
1732
1780
  type: Component,
1733
- args: [{ selector: 'idea-contacts', imports: [CommonModule, FormsModule, IDEATranslatePipe, IonInput, IonIcon, IonButton, IonItem], template: `
1781
+ args: [{ selector: 'idea-contacts', imports: [FormsModule, IDEATranslatePipe, IonInput, IonIcon, IonButton, IonItem], changeDetection: ChangeDetectionStrategy.OnPush, template: `
1734
1782
  <div class="contacts">
1735
- @if (showName) {
1736
- <ion-item [lines]="lines" [color]="color">
1783
+ @if (showName()) {
1784
+ <ion-item [lines]="lines()" [color]="color()">
1737
1785
  <ion-input
1738
1786
  autocomplete="new"
1739
1787
  labelPlacement="stacked"
1740
1788
  [label]="'IDEA_UNCOMMON.CONTACTS.NAME' | translate"
1741
- [disabled]="!editMode"
1789
+ [disabled]="!editMode()"
1742
1790
  [placeholder]="'IDEA_UNCOMMON.CONTACTS.NAME_HINT' | translate"
1743
1791
  [title]="'IDEA_UNCOMMON.CONTACTS.NAME_HINT' | translate"
1744
- [(ngModel)]="contacts.name"
1792
+ [(ngModel)]="contacts().name"
1745
1793
  />
1746
1794
  </ion-item>
1747
1795
  }
1748
- <ion-item [lines]="lines" [color]="color">
1796
+ <ion-item [lines]="lines()" [color]="color()">
1749
1797
  <ion-input
1750
1798
  autocomplete="new"
1751
1799
  labelPlacement="stacked"
1752
1800
  [label]="'IDEA_UNCOMMON.CONTACTS.PHONE' | translate"
1753
- [disabled]="!editMode"
1801
+ [disabled]="!editMode()"
1754
1802
  [placeholder]="'IDEA_UNCOMMON.CONTACTS.PHONE_HINT' | translate"
1755
1803
  [title]="'IDEA_UNCOMMON.CONTACTS.PHONE_HINT' | translate"
1756
- [(ngModel)]="contacts.phone"
1804
+ [(ngModel)]="contacts().phone"
1757
1805
  />
1758
- @if (!editMode) {
1806
+ @if (!editMode()) {
1759
1807
  <ion-button
1760
1808
  slot="end"
1761
1809
  fill="clear"
@@ -1768,17 +1816,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1768
1816
  </ion-button>
1769
1817
  }
1770
1818
  </ion-item>
1771
- <ion-item [lines]="lines" [color]="color">
1819
+ <ion-item [lines]="lines()" [color]="color()">
1772
1820
  <ion-input
1773
1821
  autocomplete="new"
1774
1822
  labelPlacement="stacked"
1775
1823
  [label]="'IDEA_UNCOMMON.CONTACTS.EMAIL' | translate"
1776
- [disabled]="!editMode"
1824
+ [disabled]="!editMode()"
1777
1825
  [placeholder]="'IDEA_UNCOMMON.CONTACTS.EMAIL_HINT' | translate"
1778
1826
  [title]="'IDEA_UNCOMMON.CONTACTS.EMAIL_HINT' | translate"
1779
- [(ngModel)]="contacts.email"
1827
+ [(ngModel)]="contacts().email"
1780
1828
  />
1781
- @if (!editMode) {
1829
+ @if (!editMode()) {
1782
1830
  <ion-button
1783
1831
  slot="end"
1784
1832
  fill="clear"
@@ -1793,17 +1841,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1793
1841
  </ion-item>
1794
1842
  </div>
1795
1843
  `, styles: [".marginTop{margin-top:14px}\n"] }]
1796
- }], propDecorators: { contacts: [{
1797
- type: Input
1798
- }], showName: [{
1799
- type: Input
1800
- }], editMode: [{
1801
- type: Input
1802
- }], lines: [{
1803
- type: Input
1804
- }], color: [{
1805
- type: Input
1806
- }] } });
1844
+ }], propDecorators: { contacts: [{ type: i0.Input, args: [{ isSignal: true, alias: "contacts", required: false }] }], showName: [{ type: i0.Input, args: [{ isSignal: true, alias: "showName", required: false }] }], editMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "editMode", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
1807
1845
 
1808
1846
  /**
1809
1847
  * A random sunday, used as reference to calculate the week days.
@@ -1814,19 +1852,32 @@ class IDEACalendarPickerComponent {
1814
1852
  this._modal = inject(ModalController);
1815
1853
  this._alert = inject(AlertController);
1816
1854
  this._translate = inject(IDEATranslationsService);
1817
- this.timePicker = false;
1818
- this.manualTimePicker = false;
1819
- this.hideClearButton = false;
1855
+ this.inputDate = input(/* @ts-ignore */
1856
+ ...(ngDevMode ? [undefined, { debugName: "inputDate" }] : /* istanbul ignore next */ []));
1857
+ this.timePicker = input(false, /* @ts-ignore */
1858
+ ...(ngDevMode ? [{ debugName: "timePicker" }] : /* istanbul ignore next */ []));
1859
+ this.manualTimePicker = input(false, /* @ts-ignore */
1860
+ ...(ngDevMode ? [{ debugName: "manualTimePicker" }] : /* istanbul ignore next */ []));
1861
+ this.title = input(/* @ts-ignore */
1862
+ ...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
1863
+ this.hideClearButton = input(false, /* @ts-ignore */
1864
+ ...(ngDevMode ? [{ debugName: "hideClearButton" }] : /* istanbul ignore next */ []));
1865
+ this.min = input(/* @ts-ignore */
1866
+ ...(ngDevMode ? [undefined, { debugName: "min" }] : /* istanbul ignore next */ []));
1867
+ this.max = input(/* @ts-ignore */
1868
+ ...(ngDevMode ? [undefined, { debugName: "max" }] : /* istanbul ignore next */ []));
1820
1869
  }
1821
1870
  ngOnInit() {
1822
1871
  this.today = new Date();
1823
- this.refDate = this.inputDate ? new Date(this.inputDate) : new Date(this.today);
1872
+ const inputDate = this.inputDate();
1873
+ this.refDate = inputDate ? new Date(inputDate) : new Date(this.today);
1824
1874
  this.selectedDate = new Date(this.refDate);
1825
1875
  this.hour = 12; // to endure timezones
1826
1876
  this.minute = 0;
1827
- if (this.timePicker || this.manualTimePicker) {
1877
+ const manualTimePicker = this.manualTimePicker();
1878
+ if (this.timePicker() || manualTimePicker) {
1828
1879
  this.hour = this.selectedDate.getHours();
1829
- if (this.manualTimePicker)
1880
+ if (manualTimePicker)
1830
1881
  this.minute = this.selectedDate.getMinutes();
1831
1882
  else {
1832
1883
  // round the minutes a multiple of 5
@@ -1845,10 +1896,12 @@ class IDEACalendarPickerComponent {
1845
1896
  this.weekDays.push(refDateForWeekDays.toLocaleDateString(this._translate.getCurrentLang(), { weekday: 'short' }));
1846
1897
  refDateForWeekDays.setDate(refDateForWeekDays.getDate() + 1);
1847
1898
  }
1848
- if (this.min)
1849
- this.dateMin = new Date(this.min);
1850
- if (this.max)
1851
- this.dateMax = new Date(this.max);
1899
+ const min = this.min();
1900
+ if (min)
1901
+ this.dateMin = new Date(min);
1902
+ const max = this.max();
1903
+ if (max)
1904
+ this.dateMax = new Date(max);
1852
1905
  }
1853
1906
  getLocalisedDay(date) {
1854
1907
  let n = date.getDay();
@@ -1972,10 +2025,10 @@ class IDEACalendarPickerComponent {
1972
2025
  close() {
1973
2026
  this._modal.dismiss();
1974
2027
  }
1975
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1976
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEACalendarPickerComponent, isStandalone: true, selector: "idea-calendar-picker", inputs: { inputDate: "inputDate", timePicker: "timePicker", manualTimePicker: "manualTimePicker", title: "title", hideClearButton: "hideClearButton", min: "min", max: "max" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-title>{{ title }}</ion-title>\n <ion-buttons slot=\"end\">\n @if (!hideClearButton) {\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.RESET' | translate\" (click)=\"save(true)\">\n <ion-icon slot=\"icon-only\" name=\"arrow-undo\" />\n </ion-button>\n }\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.CLOSE_WITHOUT_SAVING' | translate\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid fixed class=\"ion-no-padding\">\n <ion-row>\n <h1 class=\"headerLabel\">{{ 'IDEA_UNCOMMON.CALENDAR.SET_DATE' | translate }}</h1>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\">\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"5\">\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\">\n <ion-input\n type=\"text\"\n [placeholder]=\"'IDEA_UNCOMMON.CALENDAR.YEAR' | translate\"\n [value]=\"refDate.getFullYear()\"\n (ionFocus)=\"$event.target.value = ''\"\n (ionChange)=\"setYear($event?.target?.value)\"\n >\n </ion-input>\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"7\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\" (click)=\"showMonths()\">\n {{ refDate | dateLocale: 'MMMM' }}\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\" class=\"headerLabel\">\n @for (ddd of weekDays; track ddd) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n {{ ddd }}\n </ion-col>\n }\n </ion-row>\n @for (row of calendarGrid; track row; let i = $index) {\n <ion-row class=\"ion-align-items-center\">\n @for (col of row; track col; let j = $index) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"\n isSameDay(calendarGrid[i][j], today) || isSameDay(calendarGrid[i][j], selectedDate)\n ? 'primary'\n : isSameMonth(calendarGrid[i][j], refDate)\n ? 'dark'\n : 'medium'\n \"\n [fill]=\"\n isSameDay(calendarGrid[i][j], selectedDate)\n ? 'solid'\n : isSameDay(calendarGrid[i][j], today)\n ? 'outline'\n : 'clear'\n \"\n [disabled]=\"!isDateSelectable(calendarGrid[i][j])\"\n (click)=\"selectDate(calendarGrid[i][j])\"\n >\n {{ calendarGrid[i][j] | date: 'd' }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n }\n @if (timePicker || manualTimePicker) {\n <ion-row>\n <h1 class=\"headerLabel\">\n {{ 'IDEA_UNCOMMON.CALENDAR.SET_TIME' | translate }}\n </h1>\n </ion-row>\n }\n @if (timePicker) {\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-no-padding\" [size]=\"7\">\n <ion-row>\n @for (hour of hours; track hour) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"2\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameHour(hour) ? 'primary' : 'dark'\"\n [fill]=\"isSameHour(hour) ? 'solid' : 'clear'\"\n (click)=\"selectHour(hour)\"\n >\n {{ hour }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"1\"> : </ion-col>\n <ion-col class=\"ion-no-padding\" [size]=\"4\">\n <ion-row>\n @for (minute of minutes; track minute) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"4\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameMinute(minute) ? 'primary' : 'dark'\"\n [fill]=\"isSameMinute(minute) ? 'solid' : 'clear'\"\n (click)=\"selectMinute(minute)\"\n >\n {{ minute }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n </ion-row>\n }\n @if (manualTimePicker) {\n <ion-row class=\"ion-align-items-center manualTimePicker\">\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <input type=\"number\" min=\"0\" max=\"23\" [value]=\"hour\" (change)=\"selectHour($event.target.value)\" />\n <span>:</span>\n <input type=\"number\" min=\"0\" max=\"59\" [value]=\"minute\" (change)=\"selectMinute($event.target.value)\" />\n </ion-col>\n </ion-row>\n }\n </ion-grid>\n</ion-content>\n<ion-footer>\n <ion-toolbar color=\"ideaToolbar\" class=\"tappable\" (click)=\"save()\">\n <ion-title class=\"ion-text-center\">\n <ion-icon name=\"checkmark\" />\n </ion-title>\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-content{--background: var(--ion-color-white)}h1{margin:10px}.headerLabel{font-size:.7em;font-weight:700;text-transform:uppercase}ion-col,ion-button{font-size:.95em}ion-button{margin:3px 0}ion-footer ion-toolbar{--min-height: 40px}.tappable{cursor:pointer}.manualTimePicker{padding:20px}.manualTimePicker input[type=number],.manualTimePicker span{font-size:2.5em}.manualTimePicker input[type=number]{border:none;border-bottom:2px solid var(--ion-color-dark);text-align:center}.manualTimePicker span{padding-left:4px;padding-right:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }, { kind: "pipe", type: IDEALocalizedDatePipe, name: "dateLocale" }] }); }
2028
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2029
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEACalendarPickerComponent, isStandalone: true, selector: "idea-calendar-picker", inputs: { inputDate: { classPropertyName: "inputDate", publicName: "inputDate", isSignal: true, isRequired: false, transformFunction: null }, timePicker: { classPropertyName: "timePicker", publicName: "timePicker", isSignal: true, isRequired: false, transformFunction: null }, manualTimePicker: { classPropertyName: "manualTimePicker", publicName: "manualTimePicker", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, hideClearButton: { classPropertyName: "hideClearButton", publicName: "hideClearButton", 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 } }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-title>{{ title() }}</ion-title>\n <ion-buttons slot=\"end\">\n @if (!hideClearButton()) {\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.RESET' | translate\" (click)=\"save(true)\">\n <ion-icon slot=\"icon-only\" name=\"arrow-undo\" />\n </ion-button>\n }\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.CLOSE_WITHOUT_SAVING' | translate\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid fixed class=\"ion-no-padding\">\n <ion-row>\n <h1 class=\"headerLabel\">{{ 'IDEA_UNCOMMON.CALENDAR.SET_DATE' | translate }}</h1>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\">\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"5\">\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\">\n <ion-input\n type=\"text\"\n [placeholder]=\"'IDEA_UNCOMMON.CALENDAR.YEAR' | translate\"\n [value]=\"refDate.getFullYear()\"\n (ionFocus)=\"$event.target.value = ''\"\n (ionChange)=\"setYear($event?.target?.value)\"\n >\n </ion-input>\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"7\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\" (click)=\"showMonths()\">\n {{ refDate | dateLocale: 'MMMM' }}\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\" class=\"headerLabel\">\n @for (ddd of weekDays; track ddd) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n {{ ddd }}\n </ion-col>\n }\n </ion-row>\n @for (row of calendarGrid; track row; let i = $index) {\n <ion-row class=\"ion-align-items-center\">\n @for (col of row; track col; let j = $index) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"\n isSameDay(calendarGrid[i][j], today) || isSameDay(calendarGrid[i][j], selectedDate)\n ? 'primary'\n : isSameMonth(calendarGrid[i][j], refDate)\n ? 'dark'\n : 'medium'\n \"\n [fill]=\"\n isSameDay(calendarGrid[i][j], selectedDate)\n ? 'solid'\n : isSameDay(calendarGrid[i][j], today)\n ? 'outline'\n : 'clear'\n \"\n [disabled]=\"!isDateSelectable(calendarGrid[i][j])\"\n (click)=\"selectDate(calendarGrid[i][j])\"\n >\n {{ calendarGrid[i][j] | date: 'd' }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n }\n @if (timePicker() || manualTimePicker()) {\n <ion-row>\n <h1 class=\"headerLabel\">\n {{ 'IDEA_UNCOMMON.CALENDAR.SET_TIME' | translate }}\n </h1>\n </ion-row>\n }\n @if (timePicker()) {\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-no-padding\" [size]=\"7\">\n <ion-row>\n @for (hour of hours; track hour) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"2\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameHour(hour) ? 'primary' : 'dark'\"\n [fill]=\"isSameHour(hour) ? 'solid' : 'clear'\"\n (click)=\"selectHour(hour)\"\n >\n {{ hour }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"1\"> : </ion-col>\n <ion-col class=\"ion-no-padding\" [size]=\"4\">\n <ion-row>\n @for (minute of minutes; track minute) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"4\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameMinute(minute) ? 'primary' : 'dark'\"\n [fill]=\"isSameMinute(minute) ? 'solid' : 'clear'\"\n (click)=\"selectMinute(minute)\"\n >\n {{ minute }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n </ion-row>\n }\n @if (manualTimePicker()) {\n <ion-row class=\"ion-align-items-center manualTimePicker\">\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <input type=\"number\" min=\"0\" max=\"23\" [value]=\"hour\" (change)=\"selectHour($event.target.value)\" />\n <span>:</span>\n <input type=\"number\" min=\"0\" max=\"59\" [value]=\"minute\" (change)=\"selectMinute($event.target.value)\" />\n </ion-col>\n </ion-row>\n }\n </ion-grid>\n</ion-content>\n<ion-footer>\n <ion-toolbar color=\"ideaToolbar\" class=\"tappable\" (click)=\"save()\">\n <ion-title class=\"ion-text-center\">\n <ion-icon name=\"checkmark\" />\n </ion-title>\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-content{--background: var(--ion-color-white)}h1{margin:10px}.headerLabel{font-size:.7em;font-weight:700;text-transform:uppercase}ion-col,ion-button{font-size:.95em}ion-button{margin:3px 0}ion-footer ion-toolbar{--min-height: 40px}.tappable{cursor:pointer}.manualTimePicker{padding:20px}.manualTimePicker input[type=number],.manualTimePicker span{font-size:2.5em}.manualTimePicker input[type=number]{border:none;border-bottom:2px solid var(--ion-color-dark);text-align:center}.manualTimePicker span{padding-left:4px;padding-right:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }, { kind: "pipe", type: IDEALocalizedDatePipe, name: "dateLocale" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1977
2030
  }
1978
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarPickerComponent, decorators: [{
2031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarPickerComponent, decorators: [{
1979
2032
  type: Component,
1980
2033
  args: [{ selector: 'idea-calendar-picker', imports: [
1981
2034
  CommonModule,
@@ -1994,58 +2047,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1994
2047
  IonTitle,
1995
2048
  IonToolbar,
1996
2049
  IonHeader
1997
- ], template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-title>{{ title }}</ion-title>\n <ion-buttons slot=\"end\">\n @if (!hideClearButton) {\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.RESET' | translate\" (click)=\"save(true)\">\n <ion-icon slot=\"icon-only\" name=\"arrow-undo\" />\n </ion-button>\n }\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.CLOSE_WITHOUT_SAVING' | translate\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid fixed class=\"ion-no-padding\">\n <ion-row>\n <h1 class=\"headerLabel\">{{ 'IDEA_UNCOMMON.CALENDAR.SET_DATE' | translate }}</h1>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\">\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"5\">\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\">\n <ion-input\n type=\"text\"\n [placeholder]=\"'IDEA_UNCOMMON.CALENDAR.YEAR' | translate\"\n [value]=\"refDate.getFullYear()\"\n (ionFocus)=\"$event.target.value = ''\"\n (ionChange)=\"setYear($event?.target?.value)\"\n >\n </ion-input>\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"7\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\" (click)=\"showMonths()\">\n {{ refDate | dateLocale: 'MMMM' }}\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\" class=\"headerLabel\">\n @for (ddd of weekDays; track ddd) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n {{ ddd }}\n </ion-col>\n }\n </ion-row>\n @for (row of calendarGrid; track row; let i = $index) {\n <ion-row class=\"ion-align-items-center\">\n @for (col of row; track col; let j = $index) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"\n isSameDay(calendarGrid[i][j], today) || isSameDay(calendarGrid[i][j], selectedDate)\n ? 'primary'\n : isSameMonth(calendarGrid[i][j], refDate)\n ? 'dark'\n : 'medium'\n \"\n [fill]=\"\n isSameDay(calendarGrid[i][j], selectedDate)\n ? 'solid'\n : isSameDay(calendarGrid[i][j], today)\n ? 'outline'\n : 'clear'\n \"\n [disabled]=\"!isDateSelectable(calendarGrid[i][j])\"\n (click)=\"selectDate(calendarGrid[i][j])\"\n >\n {{ calendarGrid[i][j] | date: 'd' }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n }\n @if (timePicker || manualTimePicker) {\n <ion-row>\n <h1 class=\"headerLabel\">\n {{ 'IDEA_UNCOMMON.CALENDAR.SET_TIME' | translate }}\n </h1>\n </ion-row>\n }\n @if (timePicker) {\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-no-padding\" [size]=\"7\">\n <ion-row>\n @for (hour of hours; track hour) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"2\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameHour(hour) ? 'primary' : 'dark'\"\n [fill]=\"isSameHour(hour) ? 'solid' : 'clear'\"\n (click)=\"selectHour(hour)\"\n >\n {{ hour }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"1\"> : </ion-col>\n <ion-col class=\"ion-no-padding\" [size]=\"4\">\n <ion-row>\n @for (minute of minutes; track minute) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"4\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameMinute(minute) ? 'primary' : 'dark'\"\n [fill]=\"isSameMinute(minute) ? 'solid' : 'clear'\"\n (click)=\"selectMinute(minute)\"\n >\n {{ minute }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n </ion-row>\n }\n @if (manualTimePicker) {\n <ion-row class=\"ion-align-items-center manualTimePicker\">\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <input type=\"number\" min=\"0\" max=\"23\" [value]=\"hour\" (change)=\"selectHour($event.target.value)\" />\n <span>:</span>\n <input type=\"number\" min=\"0\" max=\"59\" [value]=\"minute\" (change)=\"selectMinute($event.target.value)\" />\n </ion-col>\n </ion-row>\n }\n </ion-grid>\n</ion-content>\n<ion-footer>\n <ion-toolbar color=\"ideaToolbar\" class=\"tappable\" (click)=\"save()\">\n <ion-title class=\"ion-text-center\">\n <ion-icon name=\"checkmark\" />\n </ion-title>\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-content{--background: var(--ion-color-white)}h1{margin:10px}.headerLabel{font-size:.7em;font-weight:700;text-transform:uppercase}ion-col,ion-button{font-size:.95em}ion-button{margin:3px 0}ion-footer ion-toolbar{--min-height: 40px}.tappable{cursor:pointer}.manualTimePicker{padding:20px}.manualTimePicker input[type=number],.manualTimePicker span{font-size:2.5em}.manualTimePicker input[type=number]{border:none;border-bottom:2px solid var(--ion-color-dark);text-align:center}.manualTimePicker span{padding-left:4px;padding-right:4px}\n"] }]
1998
- }], propDecorators: { inputDate: [{
1999
- type: Input
2000
- }], timePicker: [{
2001
- type: Input
2002
- }], manualTimePicker: [{
2003
- type: Input
2004
- }], title: [{
2005
- type: Input
2006
- }], hideClearButton: [{
2007
- type: Input
2008
- }], min: [{
2009
- type: Input
2010
- }], max: [{
2011
- type: Input
2012
- }] } });
2050
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-title>{{ title() }}</ion-title>\n <ion-buttons slot=\"end\">\n @if (!hideClearButton()) {\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.RESET' | translate\" (click)=\"save(true)\">\n <ion-icon slot=\"icon-only\" name=\"arrow-undo\" />\n </ion-button>\n }\n <ion-button [title]=\"'IDEA_UNCOMMON.CALENDAR.CLOSE_WITHOUT_SAVING' | translate\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid fixed class=\"ion-no-padding\">\n <ion-row>\n <h1 class=\"headerLabel\">{{ 'IDEA_UNCOMMON.CALENDAR.SET_DATE' | translate }}</h1>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\">\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"5\">\n <ion-row class=\"ion-align-items-center ion-justify-content-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\">\n <ion-input\n type=\"text\"\n [placeholder]=\"'IDEA_UNCOMMON.CALENDAR.YEAR' | translate\"\n [value]=\"refDate.getFullYear()\"\n (ionFocus)=\"$event.target.value = ''\"\n (ionChange)=\"setYear($event?.target?.value)\"\n >\n </ion-input>\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addYears(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"7\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(-1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-back\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding tappable\" [size]=\"6\" (click)=\"showMonths()\">\n {{ refDate | dateLocale: 'MMMM' }}\n </ion-col>\n <ion-col class=\"ion-text-left ion-no-padding\" [size]=\"3\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"addMonths(+1)\">\n <ion-icon slot=\"icon-only\" name=\"chevron-forward\" />\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-col>\n </ion-row>\n <ion-row style=\"margin-bottom: 8px\" class=\"headerLabel\">\n @for (ddd of weekDays; track ddd) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n {{ ddd }}\n </ion-col>\n }\n </ion-row>\n @for (row of calendarGrid; track row; let i = $index) {\n <ion-row class=\"ion-align-items-center\">\n @for (col of row; track col; let j = $index) {\n <ion-col class=\"ion-text-center ion-no-padding\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"\n isSameDay(calendarGrid[i][j], today) || isSameDay(calendarGrid[i][j], selectedDate)\n ? 'primary'\n : isSameMonth(calendarGrid[i][j], refDate)\n ? 'dark'\n : 'medium'\n \"\n [fill]=\"\n isSameDay(calendarGrid[i][j], selectedDate)\n ? 'solid'\n : isSameDay(calendarGrid[i][j], today)\n ? 'outline'\n : 'clear'\n \"\n [disabled]=\"!isDateSelectable(calendarGrid[i][j])\"\n (click)=\"selectDate(calendarGrid[i][j])\"\n >\n {{ calendarGrid[i][j] | date: 'd' }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n }\n @if (timePicker() || manualTimePicker()) {\n <ion-row>\n <h1 class=\"headerLabel\">\n {{ 'IDEA_UNCOMMON.CALENDAR.SET_TIME' | translate }}\n </h1>\n </ion-row>\n }\n @if (timePicker()) {\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-no-padding\" [size]=\"7\">\n <ion-row>\n @for (hour of hours; track hour) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"2\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameHour(hour) ? 'primary' : 'dark'\"\n [fill]=\"isSameHour(hour) ? 'solid' : 'clear'\"\n (click)=\"selectHour(hour)\"\n >\n {{ hour }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"1\"> : </ion-col>\n <ion-col class=\"ion-no-padding\" [size]=\"4\">\n <ion-row>\n @for (minute of minutes; track minute) {\n <ion-col class=\"ion-text-center ion-no-padding\" [size]=\"4\">\n <ion-button\n size=\"small\"\n shape=\"round\"\n [color]=\"isSameMinute(minute) ? 'primary' : 'dark'\"\n [fill]=\"isSameMinute(minute) ? 'solid' : 'clear'\"\n (click)=\"selectMinute(minute)\"\n >\n {{ minute }}\n </ion-button>\n </ion-col>\n }\n </ion-row>\n </ion-col>\n </ion-row>\n }\n @if (manualTimePicker()) {\n <ion-row class=\"ion-align-items-center manualTimePicker\">\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <input type=\"number\" min=\"0\" max=\"23\" [value]=\"hour\" (change)=\"selectHour($event.target.value)\" />\n <span>:</span>\n <input type=\"number\" min=\"0\" max=\"59\" [value]=\"minute\" (change)=\"selectMinute($event.target.value)\" />\n </ion-col>\n </ion-row>\n }\n </ion-grid>\n</ion-content>\n<ion-footer>\n <ion-toolbar color=\"ideaToolbar\" class=\"tappable\" (click)=\"save()\">\n <ion-title class=\"ion-text-center\">\n <ion-icon name=\"checkmark\" />\n </ion-title>\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-content{--background: var(--ion-color-white)}h1{margin:10px}.headerLabel{font-size:.7em;font-weight:700;text-transform:uppercase}ion-col,ion-button{font-size:.95em}ion-button{margin:3px 0}ion-footer ion-toolbar{--min-height: 40px}.tappable{cursor:pointer}.manualTimePicker{padding:20px}.manualTimePicker input[type=number],.manualTimePicker span{font-size:2.5em}.manualTimePicker input[type=number]{border:none;border-bottom:2px solid var(--ion-color-dark);text-align:center}.manualTimePicker span{padding-left:4px;padding-right:4px}\n"] }]
2051
+ }], propDecorators: { inputDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputDate", required: false }] }], timePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "timePicker", required: false }] }], manualTimePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "manualTimePicker", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], hideClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideClearButton", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }] } });
2013
2052
 
2014
2053
  class IDEADateTimeComponent {
2015
2054
  constructor() {
2016
2055
  this._modal = inject(ModalController);
2017
2056
  this._translate = inject(IDEATranslationsService);
2057
+ this._cdr = inject(ChangeDetectorRef);
2058
+ /**
2059
+ * The date to show/pick.
2060
+ */
2061
+ this.date = input(/* @ts-ignore */
2062
+ ...(ngDevMode ? [undefined, { debugName: "date" }] : /* istanbul ignore next */ []));
2018
2063
  /**
2019
2064
  * Whether to show the time picker (datetime) or not (date).
2020
2065
  */
2021
- this.timePicker = false;
2066
+ this.timePicker = input(false, /* @ts-ignore */
2067
+ ...(ngDevMode ? [{ debugName: "timePicker" }] : /* istanbul ignore next */ []));
2022
2068
  /**
2023
2069
  * Whether to show the MANUAL time picker (datetime) or not (date).
2024
2070
  */
2025
- this.manualTimePicker = false;
2071
+ this.manualTimePicker = input(false, /* @ts-ignore */
2072
+ ...(ngDevMode ? [{ debugName: "manualTimePicker" }] : /* istanbul ignore next */ []));
2026
2073
  /**
2027
2074
  * Whether to use the `epochISOString` format instead of `epochDateTime`.
2028
2075
  */
2029
- this.useISOFormat = false;
2076
+ this.useISOFormat = input(false, /* @ts-ignore */
2077
+ ...(ngDevMode ? [{ debugName: "useISOFormat" }] : /* istanbul ignore next */ []));
2078
+ /**
2079
+ * The label for the field.
2080
+ */
2081
+ this.label = input(/* @ts-ignore */
2082
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
2083
+ /**
2084
+ * The icon for the field.
2085
+ */
2086
+ this.icon = input(/* @ts-ignore */
2087
+ ...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
2088
+ /**
2089
+ * The color of the icon.
2090
+ */
2091
+ this.iconColor = input(/* @ts-ignore */
2092
+ ...(ngDevMode ? [undefined, { debugName: "iconColor" }] : /* istanbul ignore next */ []));
2093
+ /**
2094
+ * Lines preferences for the item.
2095
+ */
2096
+ this.lines = input(/* @ts-ignore */
2097
+ ...(ngDevMode ? [undefined, { debugName: "lines" }] : /* istanbul ignore next */ []));
2098
+ /**
2099
+ * The color for the component.
2100
+ */
2101
+ this.color = input(/* @ts-ignore */
2102
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
2103
+ /**
2104
+ * A placeholder for the field.
2105
+ */
2106
+ this.placeholder = input(/* @ts-ignore */
2107
+ ...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
2030
2108
  /**
2031
2109
  * If true, the component is disabled.
2032
2110
  */
2033
- this.disabled = false;
2111
+ this.disabled = input(false, /* @ts-ignore */
2112
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
2034
2113
  /**
2035
2114
  * If true, the obligatory dot is shown.
2036
2115
  */
2037
- this.obligatory = false;
2116
+ this.obligatory = input(false, /* @ts-ignore */
2117
+ ...(ngDevMode ? [{ debugName: "obligatory" }] : /* istanbul ignore next */ []));
2038
2118
  /**
2039
2119
  * If true, hidew the clear button in the header.
2040
2120
  */
2041
- this.hideClearButton = false;
2042
- this.dateChange = new EventEmitter();
2043
- this.iconSelect = new EventEmitter();
2121
+ this.hideClearButton = input(false, /* @ts-ignore */
2122
+ ...(ngDevMode ? [{ debugName: "hideClearButton" }] : /* istanbul ignore next */ []));
2123
+ /**
2124
+ * If set, is the minimum date selectable.
2125
+ */
2126
+ this.min = input(/* @ts-ignore */
2127
+ ...(ngDevMode ? [undefined, { debugName: "min" }] : /* istanbul ignore next */ []));
2128
+ /**
2129
+ * If set, is the maximum date selectable.
2130
+ */
2131
+ this.max = input(/* @ts-ignore */
2132
+ ...(ngDevMode ? [undefined, { debugName: "max" }] : /* istanbul ignore next */ []));
2133
+ this.dateChange = output();
2134
+ this.iconSelect = output();
2044
2135
  this.isOpening = false;
2045
2136
  }
2046
2137
  ngOnInit() {
2047
2138
  this.langChangeSubscription = this._translate.onLangChange.subscribe(() => {
2048
- this.valueToDisplay = this.getValueToDisplay(this.date);
2139
+ this.valueToDisplay = this.getValueToDisplay(this.date());
2140
+ this._cdr.markForCheck();
2049
2141
  });
2050
2142
  }
2051
2143
  ngOnDestroy() {
@@ -2054,22 +2146,22 @@ class IDEADateTimeComponent {
2054
2146
  }
2055
2147
  ngOnChanges(changes) {
2056
2148
  if (changes.date || changes.timePicker)
2057
- this.valueToDisplay = this.getValueToDisplay(this.date);
2149
+ this.valueToDisplay = this.getValueToDisplay(this.date());
2058
2150
  }
2059
2151
  async openCalendarPicker() {
2060
- if (this.disabled || this.isOpening)
2152
+ if (this.disabled() || this.isOpening)
2061
2153
  return;
2062
2154
  this.isOpening = true;
2063
2155
  const modal = await this._modal.create({
2064
2156
  component: IDEACalendarPickerComponent,
2065
2157
  componentProps: {
2066
- inputDate: this.date,
2067
- title: this.label,
2068
- timePicker: this.timePicker,
2069
- manualTimePicker: this.manualTimePicker,
2070
- hideClearButton: this.hideClearButton,
2071
- min: this.min,
2072
- max: this.max
2158
+ inputDate: this.date(),
2159
+ title: this.label(),
2160
+ timePicker: this.timePicker(),
2161
+ manualTimePicker: this.manualTimePicker(),
2162
+ hideClearButton: this.hideClearButton(),
2163
+ min: this.min(),
2164
+ max: this.max()
2073
2165
  }
2074
2166
  });
2075
2167
  modal.onDidDismiss().then(({ data }) => {
@@ -2086,148 +2178,149 @@ class IDEADateTimeComponent {
2086
2178
  getValueToDisplay(date) {
2087
2179
  return !date
2088
2180
  ? ''
2089
- : this._translate.formatDate(date, this.timePicker || this.manualTimePicker ? 'd MMM yyyy, HH:mm' : 'mediumDate');
2181
+ : this._translate.formatDate(date, this.timePicker() || this.manualTimePicker() ? 'd MMM yyyy, HH:mm' : 'mediumDate');
2090
2182
  }
2091
2183
  doSelect(date) {
2092
- this.dateChange.emit(date ? (this.useISOFormat ? date.toISOString() : date.valueOf()) : null);
2184
+ this.dateChange.emit(date ? (this.useISOFormat() ? date.toISOString() : date.valueOf()) : null);
2093
2185
  }
2094
2186
  doIconSelect(event) {
2095
2187
  if (event)
2096
2188
  event.stopPropagation();
2097
2189
  this.iconSelect.emit();
2098
2190
  }
2099
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEADateTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2100
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEADateTimeComponent, isStandalone: true, selector: "idea-date-time", inputs: { date: "date", timePicker: "timePicker", manualTimePicker: "manualTimePicker", useISOFormat: "useISOFormat", label: "label", icon: "icon", iconColor: "iconColor", lines: "lines", color: "color", placeholder: "placeholder", disabled: "disabled", obligatory: "obligatory", hideClearButton: "hideClearButton", min: "min", max: "max" }, outputs: { dateChange: "dateChange", iconSelect: "iconSelect" }, usesOnChanges: true, ngImport: i0, template: `
2191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEADateTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2192
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEADateTimeComponent, isStandalone: true, selector: "idea-date-time", inputs: { date: { classPropertyName: "date", publicName: "date", isSignal: true, isRequired: false, transformFunction: null }, timePicker: { classPropertyName: "timePicker", publicName: "timePicker", isSignal: true, isRequired: false, transformFunction: null }, manualTimePicker: { classPropertyName: "manualTimePicker", publicName: "manualTimePicker", isSignal: true, isRequired: false, transformFunction: null }, useISOFormat: { classPropertyName: "useISOFormat", publicName: "useISOFormat", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", 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 }, obligatory: { classPropertyName: "obligatory", publicName: "obligatory", isSignal: true, isRequired: false, transformFunction: null }, hideClearButton: { classPropertyName: "hideClearButton", publicName: "hideClearButton", 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 } }, outputs: { dateChange: "dateChange", iconSelect: "iconSelect" }, usesOnChanges: true, ngImport: i0, template: `
2101
2193
  <ion-item
2102
2194
  class="dateTimeItem"
2103
- [color]="color"
2104
- [lines]="lines"
2105
- [title]="placeholder || label || ''"
2106
- [button]="!disabled"
2195
+ [color]="color()"
2196
+ [lines]="lines()"
2197
+ [title]="placeholder() || label() || ''"
2198
+ [button]="!disabled()"
2107
2199
  [disabled]="isOpening"
2108
- [class.withLabel]="label"
2200
+ [class.withLabel]="label()"
2109
2201
  (click)="openCalendarPicker()"
2110
2202
  >
2111
- @if (icon) {
2203
+ @if (icon()) {
2112
2204
  <ion-button
2113
2205
  fill="clear"
2114
2206
  slot="start"
2115
- [color]="iconColor"
2116
- [class.marginTop]="label"
2207
+ [color]="iconColor()"
2208
+ [class.marginTop]="label()"
2117
2209
  (click)="doIconSelect($event)"
2118
2210
  >
2119
- <ion-icon [icon]="icon" slot="icon-only" />
2211
+ <ion-icon [icon]="icon()" slot="icon-only" />
2120
2212
  </ion-button>
2121
2213
  }
2122
- @if (label) {
2123
- <ion-label position="stacked" [class.selectable]="!disabled">
2124
- {{ label }}
2125
- @if (obligatory && !disabled) {
2214
+ @if (label()) {
2215
+ <ion-label position="stacked" [class.selectable]="!disabled()">
2216
+ {{ label() }}
2217
+ @if (obligatory() && !disabled()) {
2126
2218
  <ion-text class="obligatoryDot" />
2127
2219
  }
2128
2220
  </ion-label>
2129
2221
  }
2130
- <ion-label class="value" [class.selectable]="!disabled">
2131
- @if (!valueToDisplay && !disabled) {
2132
- <ion-text class="placeholder" [class.selectable]="!disabled">
2133
- {{ placeholder }}
2222
+ <ion-label class="value" [class.selectable]="!disabled()">
2223
+ @if (!valueToDisplay && !disabled()) {
2224
+ <ion-text class="placeholder" [class.selectable]="!disabled()">
2225
+ {{ placeholder() }}
2134
2226
  </ion-text>
2135
2227
  }
2136
2228
  {{ valueToDisplay }}
2137
2229
  </ion-label>
2138
- @if (!disabled) {
2139
- <ion-icon slot="end" icon="caret-down" class="selectIcon" [class.selectable]="!disabled" />
2230
+ @if (!disabled()) {
2231
+ <ion-icon slot="end" icon="caret-down" class="selectIcon" [class.selectable]="!disabled()" />
2140
2232
  }
2141
2233
  </ion-item>
2142
- `, isInline: true, styles: [".dateTimeItem{min-height:48px;height:auto}.dateTimeItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.dateTimeItem .placeholder{color:var(--ion-color-medium)}.dateTimeItem .value{white-space:nowrap}.dateTimeItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.dateTimeItem.withLabel{min-height:58px;height:auto}.dateTimeItem.withLabel .selectIcon{padding-top:25px}.dateTimeItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }] }); }
2234
+ `, isInline: true, styles: [".dateTimeItem{min-height:48px;height:auto}.dateTimeItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.dateTimeItem .placeholder{color:var(--ion-color-medium)}.dateTimeItem .value{white-space:nowrap}.dateTimeItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.dateTimeItem.withLabel{min-height:58px;height:auto}.dateTimeItem.withLabel .selectIcon{padding-top:25px}.dateTimeItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2143
2235
  }
2144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEADateTimeComponent, decorators: [{
2236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEADateTimeComponent, decorators: [{
2145
2237
  type: Component,
2146
- args: [{ selector: 'idea-date-time', imports: [CommonModule, IonText, IonLabel, IonIcon, IonButton, IonItem], template: `
2238
+ args: [{ selector: 'idea-date-time', imports: [IonText, IonLabel, IonIcon, IonButton, IonItem], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2147
2239
  <ion-item
2148
2240
  class="dateTimeItem"
2149
- [color]="color"
2150
- [lines]="lines"
2151
- [title]="placeholder || label || ''"
2152
- [button]="!disabled"
2241
+ [color]="color()"
2242
+ [lines]="lines()"
2243
+ [title]="placeholder() || label() || ''"
2244
+ [button]="!disabled()"
2153
2245
  [disabled]="isOpening"
2154
- [class.withLabel]="label"
2246
+ [class.withLabel]="label()"
2155
2247
  (click)="openCalendarPicker()"
2156
2248
  >
2157
- @if (icon) {
2249
+ @if (icon()) {
2158
2250
  <ion-button
2159
2251
  fill="clear"
2160
2252
  slot="start"
2161
- [color]="iconColor"
2162
- [class.marginTop]="label"
2253
+ [color]="iconColor()"
2254
+ [class.marginTop]="label()"
2163
2255
  (click)="doIconSelect($event)"
2164
2256
  >
2165
- <ion-icon [icon]="icon" slot="icon-only" />
2257
+ <ion-icon [icon]="icon()" slot="icon-only" />
2166
2258
  </ion-button>
2167
2259
  }
2168
- @if (label) {
2169
- <ion-label position="stacked" [class.selectable]="!disabled">
2170
- {{ label }}
2171
- @if (obligatory && !disabled) {
2260
+ @if (label()) {
2261
+ <ion-label position="stacked" [class.selectable]="!disabled()">
2262
+ {{ label() }}
2263
+ @if (obligatory() && !disabled()) {
2172
2264
  <ion-text class="obligatoryDot" />
2173
2265
  }
2174
2266
  </ion-label>
2175
2267
  }
2176
- <ion-label class="value" [class.selectable]="!disabled">
2177
- @if (!valueToDisplay && !disabled) {
2178
- <ion-text class="placeholder" [class.selectable]="!disabled">
2179
- {{ placeholder }}
2268
+ <ion-label class="value" [class.selectable]="!disabled()">
2269
+ @if (!valueToDisplay && !disabled()) {
2270
+ <ion-text class="placeholder" [class.selectable]="!disabled()">
2271
+ {{ placeholder() }}
2180
2272
  </ion-text>
2181
2273
  }
2182
2274
  {{ valueToDisplay }}
2183
2275
  </ion-label>
2184
- @if (!disabled) {
2185
- <ion-icon slot="end" icon="caret-down" class="selectIcon" [class.selectable]="!disabled" />
2276
+ @if (!disabled()) {
2277
+ <ion-icon slot="end" icon="caret-down" class="selectIcon" [class.selectable]="!disabled()" />
2186
2278
  }
2187
2279
  </ion-item>
2188
2280
  `, styles: [".dateTimeItem{min-height:48px;height:auto}.dateTimeItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.dateTimeItem .placeholder{color:var(--ion-color-medium)}.dateTimeItem .value{white-space:nowrap}.dateTimeItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.dateTimeItem.withLabel{min-height:58px;height:auto}.dateTimeItem.withLabel .selectIcon{padding-top:25px}.dateTimeItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"] }]
2189
- }], propDecorators: { date: [{
2190
- type: Input
2191
- }], timePicker: [{
2192
- type: Input
2193
- }], manualTimePicker: [{
2194
- type: Input
2195
- }], useISOFormat: [{
2196
- type: Input
2197
- }], label: [{
2198
- type: Input
2199
- }], icon: [{
2200
- type: Input
2201
- }], iconColor: [{
2202
- type: Input
2203
- }], lines: [{
2204
- type: Input
2205
- }], color: [{
2206
- type: Input
2207
- }], placeholder: [{
2208
- type: Input
2209
- }], disabled: [{
2210
- type: Input
2211
- }], obligatory: [{
2212
- type: Input
2213
- }], hideClearButton: [{
2214
- type: Input
2215
- }], min: [{
2216
- type: Input
2217
- }], max: [{
2218
- type: Input
2219
- }], dateChange: [{
2220
- type: Output
2221
- }], iconSelect: [{
2222
- type: Output
2223
- }] } });
2281
+ }], propDecorators: { date: [{ type: i0.Input, args: [{ isSignal: true, alias: "date", required: false }] }], timePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "timePicker", required: false }] }], manualTimePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "manualTimePicker", required: false }] }], useISOFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "useISOFormat", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], obligatory: [{ type: i0.Input, args: [{ isSignal: true, alias: "obligatory", required: false }] }], hideClearButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideClearButton", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], dateChange: [{ type: i0.Output, args: ["dateChange"] }], iconSelect: [{ type: i0.Output, args: ["iconSelect"] }] } });
2224
2282
 
2225
2283
  class IDEADurationComponent {
2226
2284
  constructor() {
2285
+ /**
2286
+ * The title (hint) for the field.
2287
+ */
2288
+ this.title = input(/* @ts-ignore */
2289
+ ...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
2290
+ /**
2291
+ * If true, the component is disabled.
2292
+ */
2293
+ this.disabled = input(/* @ts-ignore */
2294
+ ...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
2295
+ /**
2296
+ * If true, the obligatory dot is shown.
2297
+ */
2298
+ this.obligatory = input(/* @ts-ignore */
2299
+ ...(ngDevMode ? [undefined, { debugName: "obligatory" }] : /* istanbul ignore next */ []));
2300
+ /**
2301
+ * Lines preferences for the item.
2302
+ */
2303
+ this.lines = input(/* @ts-ignore */
2304
+ ...(ngDevMode ? [undefined, { debugName: "lines" }] : /* istanbul ignore next */ []));
2305
+ /**
2306
+ * The color for the component.
2307
+ */
2308
+ this.color = input(/* @ts-ignore */
2309
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
2310
+ /**
2311
+ * Whether to show or hide the seconds input.
2312
+ */
2313
+ this.hideSeconds = input(/* @ts-ignore */
2314
+ ...(ngDevMode ? [undefined, { debugName: "hideSeconds" }] : /* istanbul ignore next */ []));
2315
+ /**
2316
+ * Whether to show a shortened version of the labels.
2317
+ */
2318
+ this.shortLabels = input(/* @ts-ignore */
2319
+ ...(ngDevMode ? [undefined, { debugName: "shortLabels" }] : /* istanbul ignore next */ []));
2227
2320
  /**
2228
2321
  * On change event. It emits a number of seconds representing the duration.
2229
2322
  */
2230
- this.set = new EventEmitter();
2323
+ this.set = output();
2231
2324
  this.default = this.hours = this.minutes = this.seconds = 0;
2232
2325
  }
2233
2326
  ngOnChanges(changes) {
@@ -2238,7 +2331,7 @@ class IDEADurationComponent {
2238
2331
  refDate.setSeconds(refDate.getSeconds() + this.default);
2239
2332
  this.hours = refDate.getHours();
2240
2333
  this.minutes = refDate.getMinutes();
2241
- this.seconds = this.hideSeconds ? 0 : refDate.getSeconds();
2334
+ this.seconds = this.hideSeconds() ? 0 : refDate.getSeconds();
2242
2335
  }
2243
2336
  }
2244
2337
  /**
@@ -2256,7 +2349,7 @@ class IDEADurationComponent {
2256
2349
  break;
2257
2350
  case 'seconds':
2258
2351
  const ss = Number(this.seconds) || 0;
2259
- if (this.hideSeconds)
2352
+ if (this.hideSeconds())
2260
2353
  this.seconds = 0;
2261
2354
  else
2262
2355
  this.seconds = ss > 59 ? 59 : ss < 0 ? 0 : ss;
@@ -2264,16 +2357,16 @@ class IDEADurationComponent {
2264
2357
  }
2265
2358
  this.set.emit(this.hours * 3600 + this.minutes * 60 + this.seconds);
2266
2359
  }
2267
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEADurationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2268
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEADurationComponent, isStandalone: true, selector: "idea-duration", inputs: { default: "default", label: "label", icon: "icon", title: "title", disabled: "disabled", obligatory: "obligatory", lines: "lines", color: "color", hideSeconds: "hideSeconds", shortLabels: "shortLabels" }, outputs: { set: "set" }, usesOnChanges: true, ngImport: i0, template: `
2269
- <ion-item class="durationItem" [lines]="lines" [color]="color" [title]="title || label">
2360
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEADurationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2361
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEADurationComponent, isStandalone: true, selector: "idea-duration", inputs: { default: { classPropertyName: "default", publicName: "default", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: false, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, obligatory: { classPropertyName: "obligatory", publicName: "obligatory", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, hideSeconds: { classPropertyName: "hideSeconds", publicName: "hideSeconds", isSignal: true, isRequired: false, transformFunction: null }, shortLabels: { classPropertyName: "shortLabels", publicName: "shortLabels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { set: "set" }, usesOnChanges: true, ngImport: i0, template: `
2362
+ <ion-item class="durationItem" [lines]="lines()" [color]="color()" [title]="title() || label">
2270
2363
  @if (icon) {
2271
2364
  <ion-icon slot="start" [name]="icon" />
2272
2365
  }
2273
2366
  @if (!icon && label) {
2274
2367
  <ion-label position="stacked">
2275
2368
  {{ label }}
2276
- @if (obligatory && !disabled) {
2369
+ @if (obligatory() && !disabled()) {
2277
2370
  <ion-text class="obligatoryDot" />
2278
2371
  }
2279
2372
  </ion-label>
@@ -2284,58 +2377,60 @@ class IDEADurationComponent {
2284
2377
  min="0"
2285
2378
  max="23"
2286
2379
  inputmode="numeric"
2287
- [disabled]="disabled"
2380
+ [disabled]="disabled()"
2288
2381
  [(ngModel)]="hours"
2289
2382
  (ionChange)="setDuration('hours')"
2290
2383
  />
2291
2384
  <ion-text>{{
2292
- ((shortLabels ? 'IDEA_UNCOMMON.DURATION.HH' : 'IDEA_UNCOMMON.DURATION.HOURS') | translate).toLowerCase()
2385
+ ((shortLabels() ? 'IDEA_UNCOMMON.DURATION.HH' : 'IDEA_UNCOMMON.DURATION.HOURS') | translate).toLowerCase()
2293
2386
  }}</ion-text>
2294
2387
  <ion-input
2295
2388
  type="number"
2296
2389
  min="0"
2297
2390
  max="59"
2298
2391
  inputmode="numeric"
2299
- [disabled]="disabled"
2392
+ [disabled]="disabled()"
2300
2393
  [(ngModel)]="minutes"
2301
2394
  (ionChange)="setDuration('minutes')"
2302
2395
  />
2303
2396
  <ion-text>{{
2304
- ((shortLabels ? 'IDEA_UNCOMMON.DURATION.MM' : 'IDEA_UNCOMMON.DURATION.MINUTES') | translate).toLowerCase()
2397
+ ((shortLabels() ? 'IDEA_UNCOMMON.DURATION.MM' : 'IDEA_UNCOMMON.DURATION.MINUTES') | translate).toLowerCase()
2305
2398
  }}</ion-text>
2306
- @if (!hideSeconds) {
2399
+ @if (!hideSeconds()) {
2307
2400
  <ion-input
2308
2401
  type="number"
2309
2402
  min="0"
2310
2403
  max="59"
2311
2404
  inputmode="numeric"
2312
- [disabled]="disabled"
2405
+ [disabled]="disabled()"
2313
2406
  [(ngModel)]="seconds"
2314
2407
  (ionChange)="setDuration('seconds')"
2315
2408
  />
2316
2409
  }
2317
- @if (!hideSeconds) {
2410
+ @if (!hideSeconds()) {
2318
2411
  <ion-text>
2319
2412
  {{
2320
- ((shortLabels ? 'IDEA_UNCOMMON.DURATION.SS' : 'IDEA_UNCOMMON.DURATION.SECONDS') | translate).toLowerCase()
2413
+ (
2414
+ (shortLabels() ? 'IDEA_UNCOMMON.DURATION.SS' : 'IDEA_UNCOMMON.DURATION.SECONDS') | translate
2415
+ ).toLowerCase()
2321
2416
  }}
2322
2417
  </ion-text>
2323
2418
  }
2324
2419
  </ion-label>
2325
2420
  </ion-item>
2326
- `, isInline: true, styles: [".durationItem .value{max-width:none;width:100%;pointer-events:all}.durationItem .value ion-input{display:inline-block;max-width:35px;text-align:right}.durationItem .value ion-text{margin-left:10px;margin-right:20px;font-size:.8em}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
2421
+ `, isInline: true, styles: [".durationItem .value{max-width:none;width:100%;pointer-events:all}.durationItem .value ion-input{display:inline-block;max-width:35px;text-align:right}.durationItem .value ion-text{margin-left:10px;margin-right:20px;font-size:.8em}\n"], dependencies: [{ kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2327
2422
  }
2328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEADurationComponent, decorators: [{
2423
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEADurationComponent, decorators: [{
2329
2424
  type: Component,
2330
- args: [{ selector: 'idea-duration', imports: [IonText, IonLabel, IonIcon, IonItem, CommonModule, FormsModule, IDEATranslatePipe], template: `
2331
- <ion-item class="durationItem" [lines]="lines" [color]="color" [title]="title || label">
2425
+ args: [{ selector: 'idea-duration', imports: [IonText, IonLabel, IonIcon, IonItem, FormsModule, IDEATranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2426
+ <ion-item class="durationItem" [lines]="lines()" [color]="color()" [title]="title() || label">
2332
2427
  @if (icon) {
2333
2428
  <ion-icon slot="start" [name]="icon" />
2334
2429
  }
2335
2430
  @if (!icon && label) {
2336
2431
  <ion-label position="stacked">
2337
2432
  {{ label }}
2338
- @if (obligatory && !disabled) {
2433
+ @if (obligatory() && !disabled()) {
2339
2434
  <ion-text class="obligatoryDot" />
2340
2435
  }
2341
2436
  </ion-label>
@@ -2346,40 +2441,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2346
2441
  min="0"
2347
2442
  max="23"
2348
2443
  inputmode="numeric"
2349
- [disabled]="disabled"
2444
+ [disabled]="disabled()"
2350
2445
  [(ngModel)]="hours"
2351
2446
  (ionChange)="setDuration('hours')"
2352
2447
  />
2353
2448
  <ion-text>{{
2354
- ((shortLabels ? 'IDEA_UNCOMMON.DURATION.HH' : 'IDEA_UNCOMMON.DURATION.HOURS') | translate).toLowerCase()
2449
+ ((shortLabels() ? 'IDEA_UNCOMMON.DURATION.HH' : 'IDEA_UNCOMMON.DURATION.HOURS') | translate).toLowerCase()
2355
2450
  }}</ion-text>
2356
2451
  <ion-input
2357
2452
  type="number"
2358
2453
  min="0"
2359
2454
  max="59"
2360
2455
  inputmode="numeric"
2361
- [disabled]="disabled"
2456
+ [disabled]="disabled()"
2362
2457
  [(ngModel)]="minutes"
2363
2458
  (ionChange)="setDuration('minutes')"
2364
2459
  />
2365
2460
  <ion-text>{{
2366
- ((shortLabels ? 'IDEA_UNCOMMON.DURATION.MM' : 'IDEA_UNCOMMON.DURATION.MINUTES') | translate).toLowerCase()
2461
+ ((shortLabels() ? 'IDEA_UNCOMMON.DURATION.MM' : 'IDEA_UNCOMMON.DURATION.MINUTES') | translate).toLowerCase()
2367
2462
  }}</ion-text>
2368
- @if (!hideSeconds) {
2463
+ @if (!hideSeconds()) {
2369
2464
  <ion-input
2370
2465
  type="number"
2371
2466
  min="0"
2372
2467
  max="59"
2373
2468
  inputmode="numeric"
2374
- [disabled]="disabled"
2469
+ [disabled]="disabled()"
2375
2470
  [(ngModel)]="seconds"
2376
2471
  (ionChange)="setDuration('seconds')"
2377
2472
  />
2378
2473
  }
2379
- @if (!hideSeconds) {
2474
+ @if (!hideSeconds()) {
2380
2475
  <ion-text>
2381
2476
  {{
2382
- ((shortLabels ? 'IDEA_UNCOMMON.DURATION.SS' : 'IDEA_UNCOMMON.DURATION.SECONDS') | translate).toLowerCase()
2477
+ (
2478
+ (shortLabels() ? 'IDEA_UNCOMMON.DURATION.SS' : 'IDEA_UNCOMMON.DURATION.SECONDS') | translate
2479
+ ).toLowerCase()
2383
2480
  }}
2384
2481
  </ion-text>
2385
2482
  }
@@ -2392,23 +2489,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2392
2489
  type: Input
2393
2490
  }], icon: [{
2394
2491
  type: Input
2395
- }], title: [{
2396
- type: Input
2397
- }], disabled: [{
2398
- type: Input
2399
- }], obligatory: [{
2400
- type: Input
2401
- }], lines: [{
2402
- type: Input
2403
- }], color: [{
2404
- type: Input
2405
- }], hideSeconds: [{
2406
- type: Input
2407
- }], shortLabels: [{
2408
- type: Input
2409
- }], set: [{
2410
- type: Output
2411
- }] } });
2492
+ }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], obligatory: [{ type: i0.Input, args: [{ isSignal: true, alias: "obligatory", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], hideSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideSeconds", required: false }] }], shortLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "shortLabels", required: false }] }], set: [{ type: i0.Output, args: ["set"] }] } });
2412
2493
 
2413
2494
  class IDEAEchoPage {
2414
2495
  constructor() {
@@ -2547,8 +2628,8 @@ class IDEAEchoPage {
2547
2628
  this._loading.hide();
2548
2629
  }
2549
2630
  }
2550
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAEchoPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2551
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAEchoPage, isStandalone: true, selector: "idea-echo", ngImport: i0, template: `
2631
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAEchoPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2632
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAEchoPage, isStandalone: true, selector: "idea-echo", ngImport: i0, template: `
2552
2633
  <ion-content>
2553
2634
  <div class="flexBox">
2554
2635
  <ion-card class="echoCard maxWidthContainer">
@@ -2577,21 +2658,11 @@ class IDEAEchoPage {
2577
2658
  </ion-card>
2578
2659
  </div>
2579
2660
  </ion-content>
2580
- `, isInline: true, styles: [".echoCard{min-width:300px;padding:30px 20px;text-align:center}.echoCard ion-img{width:80px;display:block;margin:0 auto}.echoCard ion-icon{font-size:1.8em}.echoCard ion-card-content{margin-bottom:20px;font-size:1.2em}.echoCard ion-card-content p.youCanCloseMe{margin-top:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
2661
+ `, isInline: true, styles: [".echoCard{min-width:300px;padding:30px 20px;text-align:center}.echoCard ion-img{width:80px;display:block;margin:0 auto}.echoCard ion-icon{font-size:1.8em}.echoCard ion-card-content{margin-bottom:20px;font-size:1.2em}.echoCard ion-card-content p.youCanCloseMe{margin-top:12px}\n"], dependencies: [{ kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2581
2662
  }
2582
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAEchoPage, decorators: [{
2663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAEchoPage, decorators: [{
2583
2664
  type: Component,
2584
- args: [{ selector: 'idea-echo', imports: [
2585
- CommonModule,
2586
- IDEATranslatePipe,
2587
- IonCardContent,
2588
- IonIcon,
2589
- IonCardTitle,
2590
- IonCardHeader,
2591
- IonImg,
2592
- IonCard,
2593
- IonContent
2594
- ], template: `
2665
+ args: [{ selector: 'idea-echo', imports: [IDEATranslatePipe, IonCardContent, IonIcon, IonCardTitle, IonCardHeader, IonImg, IonCard, IonContent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2595
2666
  <ion-content>
2596
2667
  <div class="flexBox">
2597
2668
  <ion-card class="echoCard maxWidthContainer">
@@ -2640,18 +2711,18 @@ const ideaEchoRoutes = [
2640
2711
  ];
2641
2712
 
2642
2713
  class IDEAMDEToolbarComponent {
2643
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAMDEToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2644
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: IDEAMDEToolbarComponent, isStandalone: true, selector: "idea-mde-toolbar", ngImport: i0, template: `
2714
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAMDEToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2715
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: IDEAMDEToolbarComponent, isStandalone: true, selector: "idea-mde-toolbar", ngImport: i0, template: `
2645
2716
  <div class="mdeToolbar">
2646
2717
  <b>**{{ 'IDEA_UNCOMMON.MDE.TOOLBAR.BOLD' | translate }}**</b>
2647
2718
  <i>*{{ 'IDEA_UNCOMMON.MDE.TOOLBAR.ITALIC' | translate }}*</i>
2648
2719
  ~{{ 'IDEA_UNCOMMON.MDE.TOOLBAR.STRIKE' | translate }}~
2649
2720
  </div>
2650
- `, isInline: true, styles: [".mdeToolbar{text-align:right;color:#aaa;padding:5px 0;font-size:.9em}.mdeToolbar b,.mdeToolbar i{padding-right:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
2721
+ `, isInline: true, styles: [".mdeToolbar{text-align:right;color:#aaa;padding:5px 0;font-size:.9em}.mdeToolbar b,.mdeToolbar i{padding-right:5px}\n"], dependencies: [{ kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2651
2722
  }
2652
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAMDEToolbarComponent, decorators: [{
2723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAMDEToolbarComponent, decorators: [{
2653
2724
  type: Component,
2654
- args: [{ selector: 'idea-mde-toolbar', imports: [CommonModule, IDEATranslatePipe], template: `
2725
+ args: [{ selector: 'idea-mde-toolbar', imports: [IDEATranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2655
2726
  <div class="mdeToolbar">
2656
2727
  <b>**{{ 'IDEA_UNCOMMON.MDE.TOOLBAR.BOLD' | translate }}**</b>
2657
2728
  <i>*{{ 'IDEA_UNCOMMON.MDE.TOOLBAR.ITALIC' | translate }}*</i>
@@ -2663,11 +2734,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2663
2734
  class IDEAMDEComponent {
2664
2735
  constructor() {
2665
2736
  this._modal = inject(ModalController);
2737
+ /**
2738
+ * The title of the modal.
2739
+ */
2740
+ this.title = input(/* @ts-ignore */
2741
+ ...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
2742
+ /**
2743
+ * If set, will customize the initial value of the editor.
2744
+ */
2745
+ this.initialValue = input(/* @ts-ignore */
2746
+ ...(ngDevMode ? [undefined, { debugName: "initialValue" }] : /* istanbul ignore next */ []));
2747
+ /**
2748
+ * Custom placeholder that should be displayed.
2749
+ */
2750
+ this.placeholder = input(/* @ts-ignore */
2751
+ ...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
2666
2752
  }
2667
2753
  ngOnInit() {
2668
2754
  this.id = this.id || 'mde';
2669
2755
  this.variables = this.variables || new Array();
2670
- this.value = this.initialValue;
2756
+ this.value = this.initialValue();
2671
2757
  }
2672
2758
  close() {
2673
2759
  this._modal.dismiss();
@@ -2675,8 +2761,8 @@ class IDEAMDEComponent {
2675
2761
  confirm() {
2676
2762
  this._modal.dismiss(this.value);
2677
2763
  }
2678
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAMDEComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2679
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAMDEComponent, isStandalone: true, selector: "idea-mde", inputs: { id: "id", title: "title", header: "header", description: "description", variables: "variables", initialValue: "initialValue", placeholder: "placeholder" }, ngImport: i0, template: `
2764
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAMDEComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2765
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAMDEComponent, isStandalone: true, selector: "idea-mde", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: false, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: false, isRequired: false, transformFunction: null }, variables: { classPropertyName: "variables", publicName: "variables", isSignal: false, isRequired: false, transformFunction: null }, initialValue: { classPropertyName: "initialValue", publicName: "initialValue", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
2680
2766
  <ion-header>
2681
2767
  <ion-toolbar color="ideaToolbar">
2682
2768
  <ion-buttons slot="start">
@@ -2685,7 +2771,7 @@ class IDEAMDEComponent {
2685
2771
  </ion-button>
2686
2772
  </ion-buttons>
2687
2773
  <ion-title>
2688
- {{ title || ('IDEA_UNCOMMON.MDE.TITLE' | translate) }}
2774
+ {{ title() || ('IDEA_UNCOMMON.MDE.TITLE' | translate) }}
2689
2775
  </ion-title>
2690
2776
  <ion-buttons slot="end">
2691
2777
  <ion-button [title]="'IDEA_UNCOMMON.MDE.SAVE_AND_CLOSE' | translate" (click)="confirm()">
@@ -2715,15 +2801,14 @@ class IDEAMDEComponent {
2715
2801
  }
2716
2802
  </p>
2717
2803
  }
2718
- <ion-textarea rows="12" [id]="id" [placeholder]="placeholder" [(ngModel)]="value" />
2804
+ <ion-textarea rows="12" [id]="id" [placeholder]="placeholder()" [(ngModel)]="value" />
2719
2805
  <idea-mde-toolbar />
2720
2806
  </ion-content>
2721
- `, isInline: true, styles: ["ion-content{--ion-background-color: #f4f4f4}h2.header{margin:0;font-size:.7em;font-weight:700;text-transform:uppercase}.description{margin-top:5px;margin-bottom:20px;font-size:.9em}.variables{margin:10px 5px;font-size:.8em}ion-textarea{--background: var(--ion-color-white);padding:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IDEAMDEToolbarComponent, selector: "idea-mde-toolbar" }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
2807
+ `, isInline: true, styles: ["ion-content{--ion-background-color: #f4f4f4}h2.header{margin:0;font-size:.7em;font-weight:700;text-transform:uppercase}.description{margin-top:5px;margin-bottom:20px;font-size:.9em}.variables{margin:10px 5px;font-size:.8em}ion-textarea{--background: var(--ion-color-white);padding:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IDEAMDEToolbarComponent, selector: "idea-mde-toolbar" }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2722
2808
  }
2723
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAMDEComponent, decorators: [{
2809
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAMDEComponent, decorators: [{
2724
2810
  type: Component,
2725
2811
  args: [{ selector: 'idea-mde', imports: [
2726
- CommonModule,
2727
2812
  FormsModule,
2728
2813
  IDEATranslatePipe,
2729
2814
  IDEAMDEToolbarComponent,
@@ -2736,7 +2821,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2736
2821
  IonButtons,
2737
2822
  IonToolbar,
2738
2823
  IonHeader
2739
- ], template: `
2824
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: `
2740
2825
  <ion-header>
2741
2826
  <ion-toolbar color="ideaToolbar">
2742
2827
  <ion-buttons slot="start">
@@ -2745,7 +2830,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2745
2830
  </ion-button>
2746
2831
  </ion-buttons>
2747
2832
  <ion-title>
2748
- {{ title || ('IDEA_UNCOMMON.MDE.TITLE' | translate) }}
2833
+ {{ title() || ('IDEA_UNCOMMON.MDE.TITLE' | translate) }}
2749
2834
  </ion-title>
2750
2835
  <ion-buttons slot="end">
2751
2836
  <ion-button [title]="'IDEA_UNCOMMON.MDE.SAVE_AND_CLOSE' | translate" (click)="confirm()">
@@ -2775,25 +2860,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2775
2860
  }
2776
2861
  </p>
2777
2862
  }
2778
- <ion-textarea rows="12" [id]="id" [placeholder]="placeholder" [(ngModel)]="value" />
2863
+ <ion-textarea rows="12" [id]="id" [placeholder]="placeholder()" [(ngModel)]="value" />
2779
2864
  <idea-mde-toolbar />
2780
2865
  </ion-content>
2781
2866
  `, styles: ["ion-content{--ion-background-color: #f4f4f4}h2.header{margin:0;font-size:.7em;font-weight:700;text-transform:uppercase}.description{margin-top:5px;margin-bottom:20px;font-size:.9em}.variables{margin:10px 5px;font-size:.8em}ion-textarea{--background: var(--ion-color-white);padding:10px}\n"] }]
2782
2867
  }], propDecorators: { id: [{
2783
2868
  type: Input
2784
- }], title: [{
2785
- type: Input
2786
- }], header: [{
2869
+ }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], header: [{
2787
2870
  type: Input
2788
2871
  }], description: [{
2789
2872
  type: Input
2790
2873
  }], variables: [{
2791
2874
  type: Input
2792
- }], initialValue: [{
2793
- type: Input
2794
- }], placeholder: [{
2795
- type: Input
2796
- }] } });
2875
+ }], initialValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialValue", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }] } });
2797
2876
 
2798
2877
  /**
2799
2878
  * After how much time we need to request a synchronisation to keep the contents up-to-date.
@@ -3249,10 +3328,10 @@ class IDEAOfflineDataService {
3249
3328
  forceFullSync() {
3250
3329
  this._storage.clear().then(() => this.synchronize(true));
3251
3330
  }
3252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3253
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineDataService, providedIn: 'root' }); }
3331
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3332
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineDataService, providedIn: 'root' }); }
3254
3333
  }
3255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineDataService, decorators: [{
3334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineDataService, decorators: [{
3256
3335
  type: Injectable,
3257
3336
  args: [{ providedIn: 'root' }]
3258
3337
  }], ctorParameters: () => [] });
@@ -3273,52 +3352,56 @@ class CacheableResource {
3273
3352
  class IDEACacheableResourceComponent {
3274
3353
  constructor() {
3275
3354
  this._offline = inject(IDEAOfflineDataService);
3355
+ /**
3356
+ * The resouece to manage.
3357
+ */
3358
+ this.resource = input(/* @ts-ignore */
3359
+ ...(ngDevMode ? [undefined, { debugName: "resource" }] : /* istanbul ignore next */ []));
3276
3360
  }
3277
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACacheableResourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3278
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEACacheableResourceComponent, isStandalone: true, selector: "idea-cacheable-resource", inputs: { resource: "resource" }, ngImport: i0, template: `
3361
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACacheableResourceComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3362
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEACacheableResourceComponent, isStandalone: true, selector: "idea-cacheable-resource", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3279
3363
  <ion-item class="cacheableResourceItem">
3280
- <ion-label>{{ resource.description }}</ion-label>
3281
- @if (resource.error) {
3364
+ <ion-label>{{ resource().description }}</ion-label>
3365
+ @if (resource().error) {
3282
3366
  <ion-icon slot="end" name="alert-circle" color="danger" />
3283
3367
  }
3284
- @if (!resource.error && _offline.synchronizing && resource.synchronizing) {
3368
+ @if (!resource().error && _offline.synchronizing && resource().synchronizing) {
3285
3369
  <ion-spinner slot="end" name="dots" />
3286
3370
  }
3287
- @if (!resource.error && !resource.synchronizing && !_offline.requiresManualConfirmation) {
3371
+ @if (!resource().error && !resource().synchronizing && !_offline.requiresManualConfirmation) {
3288
3372
  <ion-icon slot="end" name="checkmark" color="success" />
3289
3373
  }
3290
- @if (!resource.error && !resource.synchronizing && _offline.requiresManualConfirmation) {
3374
+ @if (!resource().error && !resource().synchronizing && _offline.requiresManualConfirmation) {
3291
3375
  <ion-icon slot="end" name="pause" color="dark" />
3292
3376
  }
3293
3377
  </ion-item>
3294
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }] }); }
3378
+ `, isInline: true, dependencies: [{ kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3295
3379
  }
3296
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACacheableResourceComponent, decorators: [{
3380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACacheableResourceComponent, decorators: [{
3297
3381
  type: Component,
3298
3382
  args: [{
3299
3383
  selector: 'idea-cacheable-resource',
3300
- imports: [CommonModule, IonSpinner, IonIcon, IonLabel, IonItem],
3384
+ imports: [IonSpinner, IonIcon, IonLabel, IonItem],
3385
+ changeDetection: ChangeDetectionStrategy.OnPush,
3301
3386
  template: `
3302
3387
  <ion-item class="cacheableResourceItem">
3303
- <ion-label>{{ resource.description }}</ion-label>
3304
- @if (resource.error) {
3388
+ <ion-label>{{ resource().description }}</ion-label>
3389
+ @if (resource().error) {
3305
3390
  <ion-icon slot="end" name="alert-circle" color="danger" />
3306
3391
  }
3307
- @if (!resource.error && _offline.synchronizing && resource.synchronizing) {
3392
+ @if (!resource().error && _offline.synchronizing && resource().synchronizing) {
3308
3393
  <ion-spinner slot="end" name="dots" />
3309
3394
  }
3310
- @if (!resource.error && !resource.synchronizing && !_offline.requiresManualConfirmation) {
3395
+ @if (!resource().error && !resource().synchronizing && !_offline.requiresManualConfirmation) {
3311
3396
  <ion-icon slot="end" name="checkmark" color="success" />
3312
3397
  }
3313
- @if (!resource.error && !resource.synchronizing && _offline.requiresManualConfirmation) {
3398
+ @if (!resource().error && !resource().synchronizing && _offline.requiresManualConfirmation) {
3314
3399
  <ion-icon slot="end" name="pause" color="dark" />
3315
3400
  }
3316
3401
  </ion-item>
3317
3402
  `
3318
3403
  }]
3319
- }], propDecorators: { resource: [{
3320
- type: Input
3321
- }] } });
3404
+ }], propDecorators: { resource: [{ type: i0.Input, args: [{ isSignal: true, alias: "resource", required: false }] }] } });
3322
3405
 
3323
3406
  class IDEAOfflineManagerComponent {
3324
3407
  constructor() {
@@ -3387,10 +3470,10 @@ class IDEAOfflineManagerComponent {
3387
3470
  close() {
3388
3471
  this._modal.dismiss();
3389
3472
  }
3390
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3391
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAOfflineManagerComponent, isStandalone: true, selector: "idea-offline-manager", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>\n {{ 'IDEA_UNCOMMON.OFFLINE.OFFLINE_MANAGER' | translate }}\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'IDEA_UNCOMMON.OFFLINE.ADVANCED_ACTIONS' | translate\" (click)=\"actions()\">\n <ion-icon slot=\"icon-only\" name=\"ellipsis-vertical\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list class=\"aList\">\n @if (!_offline.synchronizing && _offline.requiresManualConfirmation) {\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.HUGE_SYNC_NEED_MANUAL_CONFIRMATION' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n }\n @if (!_offline.synchronizing) {\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <h3 class=\"lastSyncAt\">\n {{ 'IDEA_UNCOMMON.OFFLINE.LAST_SYNC' | translate }}:\n <ion-text>\n {{\n _offline.lastSyncAt\n ? (_offline.lastSyncAt | dateLocale: 'medium')\n : ('IDEA_UNCOMMON.OFFLINE.NEVER' | translate)\n }}\n </ion-text>\n </h3>\n @if (_offline.errorInLastSync) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_DURING_LAST_SYNC' | translate }}</b>\n </ion-text>\n </p>\n }\n </ion-label>\n <ion-button\n size=\"small\"\n fill=\"solid\"\n [color]=\"_offline.errorInLastSync ? 'danger' : 'dark'\"\n [disabled]=\"_offline.isOffline()\"\n (click)=\"sync()\"\n >\n <ion-icon slot=\"start\" name=\"sync\" /> {{ 'IDEA_UNCOMMON.OFFLINE.SYNC_NOW' | translate }}\n </ion-button>\n </ion-list-header>\n }\n </ion-list>\n @if (_offline.synchronizing) {\n <ion-list class=\"aList\">\n <ion-item>\n <ion-label class=\"ion-text-center\">\n <ion-spinner name=\"crescent\" color=\"primary\" />\n </ion-label>\n </ion-item>\n </ion-list>\n }\n @if (_offline.useQueueAPIRequests) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD_QUEUE_REQUESTS_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @if (!_offline.queueAPIRequests.length) {\n <ion-item>\n <i>{{ 'IDEA_UNCOMMON.OFFLINE.NO_ELEMENTS_TO_UPLOAD' | translate }}</i>\n <ion-icon slot=\"end\" size=\"small\" name=\"checkmark\" color=\"success\" />\n </ion-item>\n }\n @for (r of _offline.queueAPIRequests; track r; let odd = $odd) {\n <ion-item [class.oddItem]=\"odd\">\n <ion-label class=\"ion-text-wrap\">\n {{ r.description }}\n @if (r.error) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_CODE' | translate }}: {{ r.error }}</b>\n </ion-text>\n <br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_I' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_II' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_III' | translate }}\n </p>\n }\n </ion-label>\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"danger\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.CANCEL_REQUEST' | translate\"\n (click)=\"deleteRequest(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"trash\" />\n </ion-button>\n }\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"medium\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_LOG' | translate\"\n (click)=\"downloadRequestLog(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"download\" />\n </ion-button>\n }\n @if (_offline.synchronizing) {\n <ion-spinner slot=\"end\" name=\"dots\" />\n }\n </ion-item>\n }\n </ion-list>\n }\n @if (_offline.getResources().length) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_RESOURCES_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @for (r of _offline.getResources(); track r) {\n <idea-cacheable-resource [resource]=\"_offline.getCacheableResource(r)\" />\n }\n </ion-list>\n }\n</ion-content>\n", styles: [".aList{max-width:500px;margin:0 auto}.aList ion-list-header{padding-right:10px}.aList ion-list-header h3.lastSyncAt{margin-top:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IDEACacheableResourceComponent, selector: "idea-cacheable-resource", inputs: ["resource"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }, { kind: "pipe", type: IDEALocalizedDatePipe, name: "dateLocale" }] }); }
3473
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3474
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAOfflineManagerComponent, isStandalone: true, selector: "idea-offline-manager", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>\n {{ 'IDEA_UNCOMMON.OFFLINE.OFFLINE_MANAGER' | translate }}\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'IDEA_UNCOMMON.OFFLINE.ADVANCED_ACTIONS' | translate\" (click)=\"actions()\">\n <ion-icon slot=\"icon-only\" name=\"ellipsis-vertical\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list class=\"aList\">\n @if (!_offline.synchronizing && _offline.requiresManualConfirmation) {\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.HUGE_SYNC_NEED_MANUAL_CONFIRMATION' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n }\n @if (!_offline.synchronizing) {\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <h3 class=\"lastSyncAt\">\n {{ 'IDEA_UNCOMMON.OFFLINE.LAST_SYNC' | translate }}:\n <ion-text>\n {{\n _offline.lastSyncAt\n ? (_offline.lastSyncAt | dateLocale: 'medium')\n : ('IDEA_UNCOMMON.OFFLINE.NEVER' | translate)\n }}\n </ion-text>\n </h3>\n @if (_offline.errorInLastSync) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_DURING_LAST_SYNC' | translate }}</b>\n </ion-text>\n </p>\n }\n </ion-label>\n <ion-button\n size=\"small\"\n fill=\"solid\"\n [color]=\"_offline.errorInLastSync ? 'danger' : 'dark'\"\n [disabled]=\"_offline.isOffline()\"\n (click)=\"sync()\"\n >\n <ion-icon slot=\"start\" name=\"sync\" /> {{ 'IDEA_UNCOMMON.OFFLINE.SYNC_NOW' | translate }}\n </ion-button>\n </ion-list-header>\n }\n </ion-list>\n @if (_offline.synchronizing) {\n <ion-list class=\"aList\">\n <ion-item>\n <ion-label class=\"ion-text-center\">\n <ion-spinner name=\"crescent\" color=\"primary\" />\n </ion-label>\n </ion-item>\n </ion-list>\n }\n @if (_offline.useQueueAPIRequests) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD_QUEUE_REQUESTS_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @if (!_offline.queueAPIRequests.length) {\n <ion-item>\n <i>{{ 'IDEA_UNCOMMON.OFFLINE.NO_ELEMENTS_TO_UPLOAD' | translate }}</i>\n <ion-icon slot=\"end\" size=\"small\" name=\"checkmark\" color=\"success\" />\n </ion-item>\n }\n @for (r of _offline.queueAPIRequests; track r; let odd = $odd) {\n <ion-item [class.oddItem]=\"odd\">\n <ion-label class=\"ion-text-wrap\">\n {{ r.description }}\n @if (r.error) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_CODE' | translate }}: {{ r.error }}</b>\n </ion-text>\n <br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_I' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_II' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_III' | translate }}\n </p>\n }\n </ion-label>\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"danger\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.CANCEL_REQUEST' | translate\"\n (click)=\"deleteRequest(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"trash\" />\n </ion-button>\n }\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"medium\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_LOG' | translate\"\n (click)=\"downloadRequestLog(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"download\" />\n </ion-button>\n }\n @if (_offline.synchronizing) {\n <ion-spinner slot=\"end\" name=\"dots\" />\n }\n </ion-item>\n }\n </ion-list>\n }\n @if (_offline.getResources().length) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_RESOURCES_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @for (r of _offline.getResources(); track r) {\n <idea-cacheable-resource [resource]=\"_offline.getCacheableResource(r)\" />\n }\n </ion-list>\n }\n</ion-content>\n", styles: [".aList{max-width:500px;margin:0 auto}.aList ion-list-header{padding-right:10px}.aList ion-list-header h3.lastSyncAt{margin-top:6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IDEACacheableResourceComponent, selector: "idea-cacheable-resource", inputs: ["resource"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }, { kind: "pipe", type: IDEALocalizedDatePipe, name: "dateLocale" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3392
3475
  }
3393
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineManagerComponent, decorators: [{
3476
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineManagerComponent, decorators: [{
3394
3477
  type: Component,
3395
3478
  args: [{ selector: 'idea-offline-manager', imports: [
3396
3479
  CommonModule,
@@ -3410,7 +3493,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3410
3493
  IonButton,
3411
3494
  IonToolbar,
3412
3495
  IonHeader
3413
- ], template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>\n {{ 'IDEA_UNCOMMON.OFFLINE.OFFLINE_MANAGER' | translate }}\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'IDEA_UNCOMMON.OFFLINE.ADVANCED_ACTIONS' | translate\" (click)=\"actions()\">\n <ion-icon slot=\"icon-only\" name=\"ellipsis-vertical\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list class=\"aList\">\n @if (!_offline.synchronizing && _offline.requiresManualConfirmation) {\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.HUGE_SYNC_NEED_MANUAL_CONFIRMATION' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n }\n @if (!_offline.synchronizing) {\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <h3 class=\"lastSyncAt\">\n {{ 'IDEA_UNCOMMON.OFFLINE.LAST_SYNC' | translate }}:\n <ion-text>\n {{\n _offline.lastSyncAt\n ? (_offline.lastSyncAt | dateLocale: 'medium')\n : ('IDEA_UNCOMMON.OFFLINE.NEVER' | translate)\n }}\n </ion-text>\n </h3>\n @if (_offline.errorInLastSync) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_DURING_LAST_SYNC' | translate }}</b>\n </ion-text>\n </p>\n }\n </ion-label>\n <ion-button\n size=\"small\"\n fill=\"solid\"\n [color]=\"_offline.errorInLastSync ? 'danger' : 'dark'\"\n [disabled]=\"_offline.isOffline()\"\n (click)=\"sync()\"\n >\n <ion-icon slot=\"start\" name=\"sync\" /> {{ 'IDEA_UNCOMMON.OFFLINE.SYNC_NOW' | translate }}\n </ion-button>\n </ion-list-header>\n }\n </ion-list>\n @if (_offline.synchronizing) {\n <ion-list class=\"aList\">\n <ion-item>\n <ion-label class=\"ion-text-center\">\n <ion-spinner name=\"crescent\" color=\"primary\" />\n </ion-label>\n </ion-item>\n </ion-list>\n }\n @if (_offline.useQueueAPIRequests) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD_QUEUE_REQUESTS_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @if (!_offline.queueAPIRequests.length) {\n <ion-item>\n <i>{{ 'IDEA_UNCOMMON.OFFLINE.NO_ELEMENTS_TO_UPLOAD' | translate }}</i>\n <ion-icon slot=\"end\" size=\"small\" name=\"checkmark\" color=\"success\" />\n </ion-item>\n }\n @for (r of _offline.queueAPIRequests; track r; let odd = $odd) {\n <ion-item [class.oddItem]=\"odd\">\n <ion-label class=\"ion-text-wrap\">\n {{ r.description }}\n @if (r.error) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_CODE' | translate }}: {{ r.error }}</b>\n </ion-text>\n <br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_I' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_II' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_III' | translate }}\n </p>\n }\n </ion-label>\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"danger\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.CANCEL_REQUEST' | translate\"\n (click)=\"deleteRequest(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"trash\" />\n </ion-button>\n }\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"medium\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_LOG' | translate\"\n (click)=\"downloadRequestLog(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"download\" />\n </ion-button>\n }\n @if (_offline.synchronizing) {\n <ion-spinner slot=\"end\" name=\"dots\" />\n }\n </ion-item>\n }\n </ion-list>\n }\n @if (_offline.getResources().length) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_RESOURCES_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @for (r of _offline.getResources(); track r) {\n <idea-cacheable-resource [resource]=\"_offline.getCacheableResource(r)\" />\n }\n </ion-list>\n }\n</ion-content>\n", styles: [".aList{max-width:500px;margin:0 auto}.aList ion-list-header{padding-right:10px}.aList ion-list-header h3.lastSyncAt{margin-top:6px}\n"] }]
3496
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>\n {{ 'IDEA_UNCOMMON.OFFLINE.OFFLINE_MANAGER' | translate }}\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'IDEA_UNCOMMON.OFFLINE.ADVANCED_ACTIONS' | translate\" (click)=\"actions()\">\n <ion-icon slot=\"icon-only\" name=\"ellipsis-vertical\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list class=\"aList\">\n @if (!_offline.synchronizing && _offline.requiresManualConfirmation) {\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.HUGE_SYNC_NEED_MANUAL_CONFIRMATION' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n }\n @if (!_offline.synchronizing) {\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <h3 class=\"lastSyncAt\">\n {{ 'IDEA_UNCOMMON.OFFLINE.LAST_SYNC' | translate }}:\n <ion-text>\n {{\n _offline.lastSyncAt\n ? (_offline.lastSyncAt | dateLocale: 'medium')\n : ('IDEA_UNCOMMON.OFFLINE.NEVER' | translate)\n }}\n </ion-text>\n </h3>\n @if (_offline.errorInLastSync) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_DURING_LAST_SYNC' | translate }}</b>\n </ion-text>\n </p>\n }\n </ion-label>\n <ion-button\n size=\"small\"\n fill=\"solid\"\n [color]=\"_offline.errorInLastSync ? 'danger' : 'dark'\"\n [disabled]=\"_offline.isOffline()\"\n (click)=\"sync()\"\n >\n <ion-icon slot=\"start\" name=\"sync\" /> {{ 'IDEA_UNCOMMON.OFFLINE.SYNC_NOW' | translate }}\n </ion-button>\n </ion-list-header>\n }\n </ion-list>\n @if (_offline.synchronizing) {\n <ion-list class=\"aList\">\n <ion-item>\n <ion-label class=\"ion-text-center\">\n <ion-spinner name=\"crescent\" color=\"primary\" />\n </ion-label>\n </ion-item>\n </ion-list>\n }\n @if (_offline.useQueueAPIRequests) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.UPLOAD_QUEUE_REQUESTS_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @if (!_offline.queueAPIRequests.length) {\n <ion-item>\n <i>{{ 'IDEA_UNCOMMON.OFFLINE.NO_ELEMENTS_TO_UPLOAD' | translate }}</i>\n <ion-icon slot=\"end\" size=\"small\" name=\"checkmark\" color=\"success\" />\n </ion-item>\n }\n @for (r of _offline.queueAPIRequests; track r; let odd = $odd) {\n <ion-item [class.oddItem]=\"odd\">\n <ion-label class=\"ion-text-wrap\">\n {{ r.description }}\n @if (r.error) {\n <p>\n <ion-text color=\"danger\">\n <b>{{ 'IDEA_UNCOMMON.OFFLINE.ERROR_CODE' | translate }}: {{ r.error }}</b>\n </ion-text>\n <br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_I' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_II' | translate }}<br />\n {{ 'IDEA_UNCOMMON.OFFLINE.REQUEST_FAILED_EXPLANATION_III' | translate }}\n </p>\n }\n </ion-label>\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"danger\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.CANCEL_REQUEST' | translate\"\n (click)=\"deleteRequest(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"trash\" />\n </ion-button>\n }\n @if (r.error) {\n <ion-button\n fill=\"clear\"\n slot=\"end\"\n color=\"medium\"\n [title]=\"'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_LOG' | translate\"\n (click)=\"downloadRequestLog(r)\"\n >\n <ion-icon slot=\"icon-only\" name=\"download\" />\n </ion-button>\n }\n @if (_offline.synchronizing) {\n <ion-spinner slot=\"end\" name=\"dots\" />\n }\n </ion-item>\n }\n </ion-list>\n }\n @if (_offline.getResources().length) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD' | translate }}</h2>\n <p>{{ 'IDEA_UNCOMMON.OFFLINE.DOWNLOAD_RESOURCES_EXPLANATION' | translate }}</p>\n </ion-label>\n </ion-list-header>\n @for (r of _offline.getResources(); track r) {\n <idea-cacheable-resource [resource]=\"_offline.getCacheableResource(r)\" />\n }\n </ion-list>\n }\n</ion-content>\n", styles: [".aList{max-width:500px;margin:0 auto}.aList ion-list-header{padding-right:10px}.aList ion-list-header h3.lastSyncAt{margin-top:6px}\n"] }]
3414
3497
  }] });
3415
3498
 
3416
3499
  class IDEAOfflineIndicatorComponent {
@@ -3423,15 +3506,18 @@ class IDEAOfflineIndicatorComponent {
3423
3506
  /**
3424
3507
  * Vertical position.
3425
3508
  */
3426
- this.vertical = 'bottom';
3509
+ this.vertical = input('bottom', /* @ts-ignore */
3510
+ ...(ngDevMode ? [{ debugName: "vertical" }] : /* istanbul ignore next */ []));
3427
3511
  /**
3428
3512
  * Horizontal position.
3429
3513
  */
3430
- this.horizontal = 'start';
3514
+ this.horizontal = input('start', /* @ts-ignore */
3515
+ ...(ngDevMode ? [{ debugName: "horizontal" }] : /* istanbul ignore next */ []));
3431
3516
  /**
3432
3517
  * Whether it is positionated on an edge.
3433
3518
  */
3434
- this.edge = false;
3519
+ this.edge = input(false, /* @ts-ignore */
3520
+ ...(ngDevMode ? [{ debugName: "edge" }] : /* istanbul ignore next */ []));
3435
3521
  }
3436
3522
  async showStatus() {
3437
3523
  if (this._offline.isOffline()) {
@@ -3450,12 +3536,12 @@ class IDEAOfflineIndicatorComponent {
3450
3536
  modal.present();
3451
3537
  }
3452
3538
  }
3453
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineIndicatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3454
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAOfflineIndicatorComponent, isStandalone: true, selector: "idea-offline-indicator", inputs: { vertical: "vertical", horizontal: "horizontal", edge: "edge" }, ngImport: i0, template: `
3539
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineIndicatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3540
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAOfflineIndicatorComponent, isStandalone: true, selector: "idea-offline-indicator", inputs: { vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, horizontal: { classPropertyName: "horizontal", publicName: "horizontal", isSignal: true, isRequired: false, transformFunction: null }, edge: { classPropertyName: "edge", publicName: "edge", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3455
3541
  @if (
3456
3542
  _platform.is('mobile') && (_offline.isOffline() || _offline.synchronizing || _offline.requiresManualConfirmation)
3457
3543
  ) {
3458
- <ion-fab [vertical]="vertical" [horizontal]="horizontal" [edge]="edge">
3544
+ <ion-fab [vertical]="vertical()" [horizontal]="horizontal()" [edge]="edge()">
3459
3545
  <ion-fab-button color="dark" size="small" (click)="showStatus()">
3460
3546
  <!-- OFFLINE -->
3461
3547
  @if (_offline.isOffline()) {
@@ -3472,18 +3558,19 @@ class IDEAOfflineIndicatorComponent {
3472
3558
  </ion-fab-button>
3473
3559
  </ion-fab>
3474
3560
  }
3475
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
3561
+ `, isInline: true, dependencies: [{ kind: "component", type: IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3476
3562
  }
3477
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAOfflineIndicatorComponent, decorators: [{
3563
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAOfflineIndicatorComponent, decorators: [{
3478
3564
  type: Component,
3479
3565
  args: [{
3480
3566
  selector: 'idea-offline-indicator',
3481
- imports: [CommonModule, IonFab, IonFabButton, IonIcon],
3567
+ imports: [IonFab, IonFabButton, IonIcon],
3568
+ changeDetection: ChangeDetectionStrategy.OnPush,
3482
3569
  template: `
3483
3570
  @if (
3484
3571
  _platform.is('mobile') && (_offline.isOffline() || _offline.synchronizing || _offline.requiresManualConfirmation)
3485
3572
  ) {
3486
- <ion-fab [vertical]="vertical" [horizontal]="horizontal" [edge]="edge">
3573
+ <ion-fab [vertical]="vertical()" [horizontal]="horizontal()" [edge]="edge()">
3487
3574
  <ion-fab-button color="dark" size="small" (click)="showStatus()">
3488
3575
  <!-- OFFLINE -->
3489
3576
  @if (_offline.isOffline()) {
@@ -3502,13 +3589,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3502
3589
  }
3503
3590
  `
3504
3591
  }]
3505
- }], propDecorators: { vertical: [{
3506
- type: Input
3507
- }], horizontal: [{
3508
- type: Input
3509
- }], edge: [{
3510
- type: Input
3511
- }] } });
3592
+ }], propDecorators: { vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], horizontal: [{ type: i0.Input, args: [{ isSignal: true, alias: "horizontal", required: false }] }], edge: [{ type: i0.Input, args: [{ isSignal: true, alias: "edge", required: false }] }] } });
3512
3593
 
3513
3594
  class IDEASentimentComponent {
3514
3595
  constructor() {
@@ -3516,10 +3597,25 @@ class IDEASentimentComponent {
3516
3597
  this._API = inject(IDEAAWSAPIService);
3517
3598
  this._translate = inject(IDEATranslationsService);
3518
3599
  this._offline = inject(IDEAOfflineService);
3600
+ /**
3601
+ * The input text.
3602
+ */
3603
+ this.text = input(/* @ts-ignore */
3604
+ ...(ngDevMode ? [undefined, { debugName: "text" }] : /* istanbul ignore next */ []));
3605
+ /**
3606
+ * Lines preferences for the item.
3607
+ */
3608
+ this.lines = input(/* @ts-ignore */
3609
+ ...(ngDevMode ? [undefined, { debugName: "lines" }] : /* istanbul ignore next */ []));
3610
+ /**
3611
+ * The color for the component.
3612
+ */
3613
+ this.color = input(/* @ts-ignore */
3614
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
3519
3615
  /**
3520
3616
  * Triggers when the sentiment change.
3521
3617
  */
3522
- this.change = new EventEmitter();
3618
+ this.change = output();
3523
3619
  }
3524
3620
  ngOnChanges(changes) {
3525
3621
  if (changes.text.previousValue !== changes.text.currentValue)
@@ -3532,7 +3628,7 @@ class IDEASentimentComponent {
3532
3628
  try {
3533
3629
  const { sentiment } = await this._API.postResource('sentiment', {
3534
3630
  idea: true,
3535
- body: { project: this._env.idea.project, language: this._translate.getCurrentLang(), text: this.text }
3631
+ body: { project: this._env.idea.project, language: this._translate.getCurrentLang(), text: this.text() }
3536
3632
  });
3537
3633
  this.sentiment = sentiment;
3538
3634
  this.change.emit(this.sentiment);
@@ -3557,10 +3653,10 @@ class IDEASentimentComponent {
3557
3653
  return 'light';
3558
3654
  }
3559
3655
  }
3560
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEASentimentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3561
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEASentimentComponent, isStandalone: true, selector: "idea-sentiment", inputs: { text: "text", lines: "lines", color: "color" }, outputs: { change: "change" }, usesOnChanges: true, ngImport: i0, template: `
3562
- @if (text && _offline.isOnline()) {
3563
- <ion-item [lines]="lines" [color]="color">
3656
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEASentimentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3657
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEASentimentComponent, isStandalone: true, selector: "idea-sentiment", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, usesOnChanges: true, ngImport: i0, template: `
3658
+ @if (text() && _offline.isOnline()) {
3659
+ <ion-item [lines]="lines()" [color]="color()">
3564
3660
  @if (!sentiment) {
3565
3661
  <ion-spinner slot="end" size="small" />
3566
3662
  }
@@ -3576,16 +3672,17 @@ class IDEASentimentComponent {
3576
3672
  }
3577
3673
  </ion-item>
3578
3674
  }
3579
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
3675
+ `, isInline: true, dependencies: [{ kind: "component", type: IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3580
3676
  }
3581
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEASentimentComponent, decorators: [{
3677
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEASentimentComponent, decorators: [{
3582
3678
  type: Component,
3583
3679
  args: [{
3584
3680
  selector: 'idea-sentiment',
3585
- imports: [CommonModule, IDEATranslatePipe, IonBadge, IonSpinner, IonItem],
3681
+ imports: [IDEATranslatePipe, IonBadge, IonSpinner, IonItem],
3682
+ changeDetection: ChangeDetectionStrategy.OnPush,
3586
3683
  template: `
3587
- @if (text && _offline.isOnline()) {
3588
- <ion-item [lines]="lines" [color]="color">
3684
+ @if (text() && _offline.isOnline()) {
3685
+ <ion-item [lines]="lines()" [color]="color()">
3589
3686
  @if (!sentiment) {
3590
3687
  <ion-spinner slot="end" size="small" />
3591
3688
  }
@@ -3603,31 +3700,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3603
3700
  }
3604
3701
  `
3605
3702
  }]
3606
- }], propDecorators: { text: [{
3607
- type: Input
3608
- }], lines: [{
3609
- type: Input
3610
- }], color: [{
3611
- type: Input
3612
- }], change: [{
3613
- type: Output
3614
- }] } });
3703
+ }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], change: [{ type: i0.Output, args: ["change"] }] } });
3615
3704
 
3616
3705
  class IDEAFromTimeToTimeComponent {
3617
3706
  constructor() {
3618
3707
  this._modal = inject(ModalController);
3619
3708
  this._translate = inject(IDEATranslationsService);
3709
+ /**
3710
+ * The time interval to set.
3711
+ */
3712
+ this.timeInterval = input(/* @ts-ignore */
3713
+ ...(ngDevMode ? [undefined, { debugName: "timeInterval" }] : /* istanbul ignore next */ []));
3620
3714
  /**
3621
3715
  * Whether we should start picking the time displaying the afternoon (PM) or the morning (AM, default).
3622
3716
  */
3717
+ // TODO: Skipped for migration because:
3718
+ // Your application code writes to the input. This prevents migration.
3623
3719
  this.period = Periods.AM;
3720
+ /**
3721
+ * A time to use as lower limit for the possible choices.
3722
+ */
3723
+ this.notEarlierThan = input(/* @ts-ignore */
3724
+ ...(ngDevMode ? [undefined, { debugName: "notEarlierThan" }] : /* istanbul ignore next */ []));
3725
+ /**
3726
+ * A time to use as upper limit for the possible choices.
3727
+ */
3728
+ this.notLaterThan = input(/* @ts-ignore */
3729
+ ...(ngDevMode ? [undefined, { debugName: "notLaterThan" }] : /* istanbul ignore next */ []));
3730
+ /**
3731
+ * The title of the component.
3732
+ */
3733
+ this.title = input(/* @ts-ignore */
3734
+ ...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
3624
3735
  this.Segments = Segments;
3625
3736
  this.Periods = Periods;
3626
3737
  }
3627
3738
  ngOnInit() {
3628
3739
  this.segment = Segments.FROM;
3629
3740
  this.minutes = 30;
3630
- this.timeIntervalWC = new TimeInterval(this.timeInterval);
3741
+ this.timeIntervalWC = new TimeInterval(this.timeInterval());
3631
3742
  }
3632
3743
  setInterval(hours, minutes) {
3633
3744
  // adjust the hour based on the start of the interval and the settings of am/pm
@@ -3690,10 +3801,10 @@ class IDEAFromTimeToTimeComponent {
3690
3801
  // adjust the hour based on the start of the interval and the settings of am/pm
3691
3802
  hours = this.contextualizeHour(hours, minutes);
3692
3803
  // check whether the selected time is inside the given boundaries
3693
- return ((!this.notEarlierThan ||
3694
- this.timeToMs(hours, minutes) >= this.notEarlierThan ||
3695
- this.timeToMs(hours, minutes) === 0) &&
3696
- (!this.notLaterThan || this.timeToMs(hours, minutes) <= this.notLaterThan));
3804
+ const notEarlierThan = this.notEarlierThan();
3805
+ const notLaterThan = this.notLaterThan();
3806
+ return ((!notEarlierThan || this.timeToMs(hours, minutes) >= notEarlierThan || this.timeToMs(hours, minutes) === 0) &&
3807
+ (!notLaterThan || this.timeToMs(hours, minutes) <= notLaterThan));
3697
3808
  }
3698
3809
  isHourOfOppositeMeridian(hours, minutes) {
3699
3810
  // if the start of the interval hasn't been selected yet, skip it
@@ -3717,23 +3828,22 @@ class IDEAFromTimeToTimeComponent {
3717
3828
  return refDate.toLocaleTimeString(this._translate.getCurrentLang(), dateOpts);
3718
3829
  }
3719
3830
  save() {
3720
- this.timeInterval.load(this.timeIntervalWC);
3831
+ this.timeInterval().load(this.timeIntervalWC);
3721
3832
  this._modal.dismiss(true);
3722
3833
  }
3723
3834
  reset() {
3724
- this.timeInterval.reset();
3835
+ this.timeInterval().reset();
3725
3836
  this._modal.dismiss(false);
3726
3837
  }
3727
3838
  close() {
3728
3839
  this._modal.dismiss();
3729
3840
  }
3730
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAFromTimeToTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3731
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAFromTimeToTimeComponent, isStandalone: true, selector: "idea-from-time-to-time", inputs: { timeInterval: "timeInterval", period: "period", notEarlierThan: "notEarlierThan", notLaterThan: "notLaterThan", title: "title" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ title }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.RESET' | translate\" (click)=\"reset()\">\n <ion-icon name=\"arrow-undo\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid class=\"clockGrid\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(12) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12)\"\n [disabled]=\"!isAllowed(12)\"\n (click)=\"setInterval(12)\"\n >\n {{ getClockButtonContent(12) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(12, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12, minutes)\"\n [disabled]=\"!isAllowed(12, minutes)\"\n (click)=\"setInterval(12, minutes)\"\n >\n {{ getClockButtonContent(12, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(11, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11, minutes)\"\n [disabled]=\"!isAllowed(11, minutes)\"\n (click)=\"setInterval(11, minutes)\"\n >\n {{ getClockButtonContent(11, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(11) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11)\"\n [disabled]=\"!isAllowed(11)\"\n (click)=\"setInterval(11)\"\n >\n {{ getClockButtonContent(11) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(1) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1)\"\n [disabled]=\"!isAllowed(1)\"\n (click)=\"setInterval(1)\"\n >\n {{ getClockButtonContent(1) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(1, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1, minutes)\"\n [disabled]=\"!isAllowed(1, minutes)\"\n (click)=\"setInterval(1, minutes)\"\n >\n {{ getClockButtonContent(1, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(10, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10, minutes)\"\n [disabled]=\"!isAllowed(10, minutes)\"\n (click)=\"setInterval(10, minutes)\"\n >\n {{ getClockButtonContent(10, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(10) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10)\"\n [disabled]=\"!isAllowed(10)\"\n (click)=\"setInterval(10)\"\n >\n {{ getClockButtonContent(10) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(2) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2)\"\n [disabled]=\"!isAllowed(2)\"\n (click)=\"setInterval(2)\"\n >\n {{ getClockButtonContent(2) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(2, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2, minutes)\"\n [disabled]=\"!isAllowed(2, minutes)\"\n (click)=\"setInterval(2, minutes)\"\n >\n {{ getClockButtonContent(2, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(9, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9, minutes)\"\n [disabled]=\"!isAllowed(9, minutes)\"\n (click)=\"setInterval(9, minutes)\"\n >\n {{ getClockButtonContent(9, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(9) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9)\"\n [disabled]=\"!isAllowed(9)\"\n (click)=\"setInterval(9)\"\n >\n {{ getClockButtonContent(9) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center displayText\" [size]=\"4\">\n <ion-text [class.fromSelected]=\"segment === Segments.TO\">\n {{ 'IDEA_UNCOMMON.FTTT.FROM' | translate }}\n @if (segment === Segments.TO) {\n <span>{{ msToTimeString(timeIntervalWC.from) }}</span>\n }\n </ion-text>\n @if (segment === Segments.TO) {\n <ion-text>{{ 'IDEA_UNCOMMON.FTTT.TO' | translate }}</ion-text>\n }\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(3) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3)\"\n [disabled]=\"!isAllowed(3)\"\n (click)=\"setInterval(3)\"\n >\n {{ getClockButtonContent(3) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(3, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3, minutes)\"\n [disabled]=\"!isAllowed(3, minutes)\"\n (click)=\"setInterval(3, minutes)\"\n >\n {{ getClockButtonContent(3, minutes) }}\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(8, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8, minutes)\"\n [disabled]=\"!isAllowed(8, minutes)\"\n (click)=\"setInterval(8, minutes)\"\n >\n {{ getClockButtonContent(8, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(8) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8)\"\n [disabled]=\"!isAllowed(8)\"\n (click)=\"setInterval(8)\"\n >\n {{ getClockButtonContent(8) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(4) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4)\"\n [disabled]=\"!isAllowed(4)\"\n (click)=\"setInterval(4)\"\n >\n {{ getClockButtonContent(4) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(4, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4, minutes)\"\n [disabled]=\"!isAllowed(4, minutes)\"\n (click)=\"setInterval(4, minutes)\"\n >\n {{ getClockButtonContent(4, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(7, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7, minutes)\"\n [disabled]=\"!isAllowed(7, minutes)\"\n (click)=\"setInterval(7, minutes)\"\n >\n {{ getClockButtonContent(7, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(7) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7)\"\n [disabled]=\"!isAllowed(7)\"\n (click)=\"setInterval(7)\"\n >\n {{ getClockButtonContent(7) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(5) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5)\"\n [disabled]=\"!isAllowed(5)\"\n (click)=\"setInterval(5)\"\n >\n {{ getClockButtonContent(5) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(5, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5, minutes)\"\n [disabled]=\"!isAllowed(5, minutes)\"\n (click)=\"setInterval(5, minutes)\"\n >\n {{ getClockButtonContent(5, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(6, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6, minutes)\"\n [disabled]=\"!isAllowed(6, minutes)\"\n (click)=\"setInterval(6, minutes)\"\n >\n {{ getClockButtonContent(6, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(6) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6)\"\n [disabled]=\"!isAllowed(6)\"\n (click)=\"setInterval(6)\"\n >\n {{ getClockButtonContent(6) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.PERIOD' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"period\" (ionChange)=\"period = $event?.detail?.value || period\">\n <ion-segment-button [value]=\"Periods.AM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.AM' | translate }}</ion-label>\n </ion-segment-button>\n <ion-segment-button [value]=\"Periods.PM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.PM' | translate }}</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.MINUTES_PREFERENCE' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"minutes\" (ionChange)=\"minutes = $event?.detail?.value || minutes\">\n <ion-segment-button value=\"15\">\n <ion-label>15</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"30\">\n <ion-label>30</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"45\">\n <ion-label>45</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n", styles: ["ion-grid.clockGrid ion-button[size=large]{width:50px;height:50px;font-size:1.1em;font-weight:700}ion-grid.clockGrid ion-button[size=small]{font-size:.75em}ion-grid.clockGrid ion-button.oppositeMeridian{--border-color: var(--ion-color-medium);--border-style: dashed;--border-width: 1px}ion-grid.clockGrid .displayText ion-text{font-size:1.3em;font-weight:700}ion-grid.clockGrid .displayText ion-text.fromSelected{display:block;padding-bottom:3px;font-size:.9em}ion-grid.clockGrid ion-segment ion-segment-button{min-width:50px;--color-checked: var(--ion-color-dark);--border-color: var(--ion-color-dark)}ion-grid.clockGrid .prefLabel{font-size:.6em;font-weight:700;text-transform:uppercase}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonSegmentButton, selector: "ion-segment-button", inputs: ["contentId", "disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }] }); }
3841
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAFromTimeToTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3842
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAFromTimeToTimeComponent, isStandalone: true, selector: "idea-from-time-to-time", inputs: { timeInterval: { classPropertyName: "timeInterval", publicName: "timeInterval", isSignal: true, isRequired: false, transformFunction: null }, period: { classPropertyName: "period", publicName: "period", isSignal: false, isRequired: false, transformFunction: null }, notEarlierThan: { classPropertyName: "notEarlierThan", publicName: "notEarlierThan", isSignal: true, isRequired: false, transformFunction: null }, notLaterThan: { classPropertyName: "notLaterThan", publicName: "notLaterThan", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ title() }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.RESET' | translate\" (click)=\"reset()\">\n <ion-icon name=\"arrow-undo\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid class=\"clockGrid\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(12) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12)\"\n [disabled]=\"!isAllowed(12)\"\n (click)=\"setInterval(12)\"\n >\n {{ getClockButtonContent(12) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(12, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12, minutes)\"\n [disabled]=\"!isAllowed(12, minutes)\"\n (click)=\"setInterval(12, minutes)\"\n >\n {{ getClockButtonContent(12, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(11, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11, minutes)\"\n [disabled]=\"!isAllowed(11, minutes)\"\n (click)=\"setInterval(11, minutes)\"\n >\n {{ getClockButtonContent(11, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(11) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11)\"\n [disabled]=\"!isAllowed(11)\"\n (click)=\"setInterval(11)\"\n >\n {{ getClockButtonContent(11) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(1) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1)\"\n [disabled]=\"!isAllowed(1)\"\n (click)=\"setInterval(1)\"\n >\n {{ getClockButtonContent(1) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(1, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1, minutes)\"\n [disabled]=\"!isAllowed(1, minutes)\"\n (click)=\"setInterval(1, minutes)\"\n >\n {{ getClockButtonContent(1, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(10, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10, minutes)\"\n [disabled]=\"!isAllowed(10, minutes)\"\n (click)=\"setInterval(10, minutes)\"\n >\n {{ getClockButtonContent(10, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(10) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10)\"\n [disabled]=\"!isAllowed(10)\"\n (click)=\"setInterval(10)\"\n >\n {{ getClockButtonContent(10) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(2) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2)\"\n [disabled]=\"!isAllowed(2)\"\n (click)=\"setInterval(2)\"\n >\n {{ getClockButtonContent(2) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(2, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2, minutes)\"\n [disabled]=\"!isAllowed(2, minutes)\"\n (click)=\"setInterval(2, minutes)\"\n >\n {{ getClockButtonContent(2, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(9, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9, minutes)\"\n [disabled]=\"!isAllowed(9, minutes)\"\n (click)=\"setInterval(9, minutes)\"\n >\n {{ getClockButtonContent(9, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(9) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9)\"\n [disabled]=\"!isAllowed(9)\"\n (click)=\"setInterval(9)\"\n >\n {{ getClockButtonContent(9) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center displayText\" [size]=\"4\">\n <ion-text [class.fromSelected]=\"segment === Segments.TO\">\n {{ 'IDEA_UNCOMMON.FTTT.FROM' | translate }}\n @if (segment === Segments.TO) {\n <span>{{ msToTimeString(timeIntervalWC.from) }}</span>\n }\n </ion-text>\n @if (segment === Segments.TO) {\n <ion-text>{{ 'IDEA_UNCOMMON.FTTT.TO' | translate }}</ion-text>\n }\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(3) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3)\"\n [disabled]=\"!isAllowed(3)\"\n (click)=\"setInterval(3)\"\n >\n {{ getClockButtonContent(3) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(3, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3, minutes)\"\n [disabled]=\"!isAllowed(3, minutes)\"\n (click)=\"setInterval(3, minutes)\"\n >\n {{ getClockButtonContent(3, minutes) }}\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(8, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8, minutes)\"\n [disabled]=\"!isAllowed(8, minutes)\"\n (click)=\"setInterval(8, minutes)\"\n >\n {{ getClockButtonContent(8, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(8) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8)\"\n [disabled]=\"!isAllowed(8)\"\n (click)=\"setInterval(8)\"\n >\n {{ getClockButtonContent(8) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(4) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4)\"\n [disabled]=\"!isAllowed(4)\"\n (click)=\"setInterval(4)\"\n >\n {{ getClockButtonContent(4) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(4, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4, minutes)\"\n [disabled]=\"!isAllowed(4, minutes)\"\n (click)=\"setInterval(4, minutes)\"\n >\n {{ getClockButtonContent(4, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(7, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7, minutes)\"\n [disabled]=\"!isAllowed(7, minutes)\"\n (click)=\"setInterval(7, minutes)\"\n >\n {{ getClockButtonContent(7, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(7) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7)\"\n [disabled]=\"!isAllowed(7)\"\n (click)=\"setInterval(7)\"\n >\n {{ getClockButtonContent(7) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(5) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5)\"\n [disabled]=\"!isAllowed(5)\"\n (click)=\"setInterval(5)\"\n >\n {{ getClockButtonContent(5) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(5, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5, minutes)\"\n [disabled]=\"!isAllowed(5, minutes)\"\n (click)=\"setInterval(5, minutes)\"\n >\n {{ getClockButtonContent(5, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(6, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6, minutes)\"\n [disabled]=\"!isAllowed(6, minutes)\"\n (click)=\"setInterval(6, minutes)\"\n >\n {{ getClockButtonContent(6, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(6) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6)\"\n [disabled]=\"!isAllowed(6)\"\n (click)=\"setInterval(6)\"\n >\n {{ getClockButtonContent(6) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.PERIOD' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"period\" (ionChange)=\"period = $any($event?.detail?.value) || period\">\n <ion-segment-button [value]=\"Periods.AM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.AM' | translate }}</ion-label>\n </ion-segment-button>\n <ion-segment-button [value]=\"Periods.PM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.PM' | translate }}</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.MINUTES_PREFERENCE' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"minutes\" (ionChange)=\"minutes = $any($event?.detail?.value) || minutes\">\n <ion-segment-button value=\"15\">\n <ion-label>15</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"30\">\n <ion-label>30</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"45\">\n <ion-label>45</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n", styles: ["ion-grid.clockGrid ion-button[size=large]{width:50px;height:50px;font-size:1.1em;font-weight:700}ion-grid.clockGrid ion-button[size=small]{font-size:.75em}ion-grid.clockGrid ion-button.oppositeMeridian{--border-color: var(--ion-color-medium);--border-style: dashed;--border-width: 1px}ion-grid.clockGrid .displayText ion-text{font-size:1.3em;font-weight:700}ion-grid.clockGrid .displayText ion-text.fromSelected{display:block;padding-bottom:3px;font-size:.9em}ion-grid.clockGrid ion-segment ion-segment-button{min-width:50px;--color-checked: var(--ion-color-dark);--border-color: var(--ion-color-dark)}ion-grid.clockGrid .prefLabel{font-size:.6em;font-weight:700;text-transform:uppercase}\n"], dependencies: [{ kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonSegmentButton, selector: "ion-segment-button", inputs: ["contentId", "disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: IonRow, selector: "ion-row" }, { kind: "component", type: IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "pipe", type: IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3732
3843
  }
3733
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAFromTimeToTimeComponent, decorators: [{
3844
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAFromTimeToTimeComponent, decorators: [{
3734
3845
  type: Component,
3735
3846
  args: [{ selector: 'idea-from-time-to-time', imports: [
3736
- CommonModule,
3737
3847
  IDEATranslatePipe,
3738
3848
  IonLabel,
3739
3849
  IonSegmentButton,
@@ -3749,18 +3859,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3749
3859
  IonButtons,
3750
3860
  IonToolbar,
3751
3861
  IonHeader
3752
- ], template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ title }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.RESET' | translate\" (click)=\"reset()\">\n <ion-icon name=\"arrow-undo\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid class=\"clockGrid\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(12) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12)\"\n [disabled]=\"!isAllowed(12)\"\n (click)=\"setInterval(12)\"\n >\n {{ getClockButtonContent(12) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(12, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12, minutes)\"\n [disabled]=\"!isAllowed(12, minutes)\"\n (click)=\"setInterval(12, minutes)\"\n >\n {{ getClockButtonContent(12, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(11, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11, minutes)\"\n [disabled]=\"!isAllowed(11, minutes)\"\n (click)=\"setInterval(11, minutes)\"\n >\n {{ getClockButtonContent(11, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(11) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11)\"\n [disabled]=\"!isAllowed(11)\"\n (click)=\"setInterval(11)\"\n >\n {{ getClockButtonContent(11) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(1) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1)\"\n [disabled]=\"!isAllowed(1)\"\n (click)=\"setInterval(1)\"\n >\n {{ getClockButtonContent(1) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(1, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1, minutes)\"\n [disabled]=\"!isAllowed(1, minutes)\"\n (click)=\"setInterval(1, minutes)\"\n >\n {{ getClockButtonContent(1, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(10, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10, minutes)\"\n [disabled]=\"!isAllowed(10, minutes)\"\n (click)=\"setInterval(10, minutes)\"\n >\n {{ getClockButtonContent(10, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(10) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10)\"\n [disabled]=\"!isAllowed(10)\"\n (click)=\"setInterval(10)\"\n >\n {{ getClockButtonContent(10) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(2) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2)\"\n [disabled]=\"!isAllowed(2)\"\n (click)=\"setInterval(2)\"\n >\n {{ getClockButtonContent(2) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(2, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2, minutes)\"\n [disabled]=\"!isAllowed(2, minutes)\"\n (click)=\"setInterval(2, minutes)\"\n >\n {{ getClockButtonContent(2, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(9, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9, minutes)\"\n [disabled]=\"!isAllowed(9, minutes)\"\n (click)=\"setInterval(9, minutes)\"\n >\n {{ getClockButtonContent(9, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(9) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9)\"\n [disabled]=\"!isAllowed(9)\"\n (click)=\"setInterval(9)\"\n >\n {{ getClockButtonContent(9) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center displayText\" [size]=\"4\">\n <ion-text [class.fromSelected]=\"segment === Segments.TO\">\n {{ 'IDEA_UNCOMMON.FTTT.FROM' | translate }}\n @if (segment === Segments.TO) {\n <span>{{ msToTimeString(timeIntervalWC.from) }}</span>\n }\n </ion-text>\n @if (segment === Segments.TO) {\n <ion-text>{{ 'IDEA_UNCOMMON.FTTT.TO' | translate }}</ion-text>\n }\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(3) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3)\"\n [disabled]=\"!isAllowed(3)\"\n (click)=\"setInterval(3)\"\n >\n {{ getClockButtonContent(3) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(3, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3, minutes)\"\n [disabled]=\"!isAllowed(3, minutes)\"\n (click)=\"setInterval(3, minutes)\"\n >\n {{ getClockButtonContent(3, minutes) }}\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(8, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8, minutes)\"\n [disabled]=\"!isAllowed(8, minutes)\"\n (click)=\"setInterval(8, minutes)\"\n >\n {{ getClockButtonContent(8, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(8) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8)\"\n [disabled]=\"!isAllowed(8)\"\n (click)=\"setInterval(8)\"\n >\n {{ getClockButtonContent(8) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(4) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4)\"\n [disabled]=\"!isAllowed(4)\"\n (click)=\"setInterval(4)\"\n >\n {{ getClockButtonContent(4) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(4, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4, minutes)\"\n [disabled]=\"!isAllowed(4, minutes)\"\n (click)=\"setInterval(4, minutes)\"\n >\n {{ getClockButtonContent(4, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(7, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7, minutes)\"\n [disabled]=\"!isAllowed(7, minutes)\"\n (click)=\"setInterval(7, minutes)\"\n >\n {{ getClockButtonContent(7, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(7) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7)\"\n [disabled]=\"!isAllowed(7)\"\n (click)=\"setInterval(7)\"\n >\n {{ getClockButtonContent(7) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(5) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5)\"\n [disabled]=\"!isAllowed(5)\"\n (click)=\"setInterval(5)\"\n >\n {{ getClockButtonContent(5) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(5, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5, minutes)\"\n [disabled]=\"!isAllowed(5, minutes)\"\n (click)=\"setInterval(5, minutes)\"\n >\n {{ getClockButtonContent(5, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(6, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6, minutes)\"\n [disabled]=\"!isAllowed(6, minutes)\"\n (click)=\"setInterval(6, minutes)\"\n >\n {{ getClockButtonContent(6, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(6) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6)\"\n [disabled]=\"!isAllowed(6)\"\n (click)=\"setInterval(6)\"\n >\n {{ getClockButtonContent(6) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.PERIOD' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"period\" (ionChange)=\"period = $event?.detail?.value || period\">\n <ion-segment-button [value]=\"Periods.AM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.AM' | translate }}</ion-label>\n </ion-segment-button>\n <ion-segment-button [value]=\"Periods.PM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.PM' | translate }}</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.MINUTES_PREFERENCE' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"minutes\" (ionChange)=\"minutes = $event?.detail?.value || minutes\">\n <ion-segment-button value=\"15\">\n <ion-label>15</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"30\">\n <ion-label>30</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"45\">\n <ion-label>45</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n", styles: ["ion-grid.clockGrid ion-button[size=large]{width:50px;height:50px;font-size:1.1em;font-weight:700}ion-grid.clockGrid ion-button[size=small]{font-size:.75em}ion-grid.clockGrid ion-button.oppositeMeridian{--border-color: var(--ion-color-medium);--border-style: dashed;--border-width: 1px}ion-grid.clockGrid .displayText ion-text{font-size:1.3em;font-weight:700}ion-grid.clockGrid .displayText ion-text.fromSelected{display:block;padding-bottom:3px;font-size:.9em}ion-grid.clockGrid ion-segment ion-segment-button{min-width:50px;--color-checked: var(--ion-color-dark);--border-color: var(--ion-color-dark)}ion-grid.clockGrid .prefLabel{font-size:.6em;font-weight:700;text-transform:uppercase}\n"] }]
3753
- }], propDecorators: { timeInterval: [{
3754
- type: Input
3755
- }], period: [{
3756
- type: Input
3757
- }], notEarlierThan: [{
3758
- type: Input
3759
- }], notLaterThan: [{
3760
- type: Input
3761
- }], title: [{
3862
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ title() }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.RESET' | translate\" (click)=\"reset()\">\n <ion-icon name=\"arrow-undo\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid class=\"clockGrid\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(12) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12)\"\n [disabled]=\"!isAllowed(12)\"\n (click)=\"setInterval(12)\"\n >\n {{ getClockButtonContent(12) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(12, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12, minutes)\"\n [disabled]=\"!isAllowed(12, minutes)\"\n (click)=\"setInterval(12, minutes)\"\n >\n {{ getClockButtonContent(12, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(11, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11, minutes)\"\n [disabled]=\"!isAllowed(11, minutes)\"\n (click)=\"setInterval(11, minutes)\"\n >\n {{ getClockButtonContent(11, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(11) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11)\"\n [disabled]=\"!isAllowed(11)\"\n (click)=\"setInterval(11)\"\n >\n {{ getClockButtonContent(11) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(1) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1)\"\n [disabled]=\"!isAllowed(1)\"\n (click)=\"setInterval(1)\"\n >\n {{ getClockButtonContent(1) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(1, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1, minutes)\"\n [disabled]=\"!isAllowed(1, minutes)\"\n (click)=\"setInterval(1, minutes)\"\n >\n {{ getClockButtonContent(1, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(10, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10, minutes)\"\n [disabled]=\"!isAllowed(10, minutes)\"\n (click)=\"setInterval(10, minutes)\"\n >\n {{ getClockButtonContent(10, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(10) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10)\"\n [disabled]=\"!isAllowed(10)\"\n (click)=\"setInterval(10)\"\n >\n {{ getClockButtonContent(10) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(2) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2)\"\n [disabled]=\"!isAllowed(2)\"\n (click)=\"setInterval(2)\"\n >\n {{ getClockButtonContent(2) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(2, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2, minutes)\"\n [disabled]=\"!isAllowed(2, minutes)\"\n (click)=\"setInterval(2, minutes)\"\n >\n {{ getClockButtonContent(2, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(9, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9, minutes)\"\n [disabled]=\"!isAllowed(9, minutes)\"\n (click)=\"setInterval(9, minutes)\"\n >\n {{ getClockButtonContent(9, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(9) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9)\"\n [disabled]=\"!isAllowed(9)\"\n (click)=\"setInterval(9)\"\n >\n {{ getClockButtonContent(9) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center displayText\" [size]=\"4\">\n <ion-text [class.fromSelected]=\"segment === Segments.TO\">\n {{ 'IDEA_UNCOMMON.FTTT.FROM' | translate }}\n @if (segment === Segments.TO) {\n <span>{{ msToTimeString(timeIntervalWC.from) }}</span>\n }\n </ion-text>\n @if (segment === Segments.TO) {\n <ion-text>{{ 'IDEA_UNCOMMON.FTTT.TO' | translate }}</ion-text>\n }\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(3) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3)\"\n [disabled]=\"!isAllowed(3)\"\n (click)=\"setInterval(3)\"\n >\n {{ getClockButtonContent(3) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(3, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3, minutes)\"\n [disabled]=\"!isAllowed(3, minutes)\"\n (click)=\"setInterval(3, minutes)\"\n >\n {{ getClockButtonContent(3, minutes) }}\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(8, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8, minutes)\"\n [disabled]=\"!isAllowed(8, minutes)\"\n (click)=\"setInterval(8, minutes)\"\n >\n {{ getClockButtonContent(8, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(8) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8)\"\n [disabled]=\"!isAllowed(8)\"\n (click)=\"setInterval(8)\"\n >\n {{ getClockButtonContent(8) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(4) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4)\"\n [disabled]=\"!isAllowed(4)\"\n (click)=\"setInterval(4)\"\n >\n {{ getClockButtonContent(4) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(4, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4, minutes)\"\n [disabled]=\"!isAllowed(4, minutes)\"\n (click)=\"setInterval(4, minutes)\"\n >\n {{ getClockButtonContent(4, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(7, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7, minutes)\"\n [disabled]=\"!isAllowed(7, minutes)\"\n (click)=\"setInterval(7, minutes)\"\n >\n {{ getClockButtonContent(7, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(7) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7)\"\n [disabled]=\"!isAllowed(7)\"\n (click)=\"setInterval(7)\"\n >\n {{ getClockButtonContent(7) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(5) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5)\"\n [disabled]=\"!isAllowed(5)\"\n (click)=\"setInterval(5)\"\n >\n {{ getClockButtonContent(5) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(5, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5, minutes)\"\n [disabled]=\"!isAllowed(5, minutes)\"\n (click)=\"setInterval(5, minutes)\"\n >\n {{ getClockButtonContent(5, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"3\">&nbsp;</ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(6, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6, minutes)\"\n [disabled]=\"!isAllowed(6, minutes)\"\n (click)=\"setInterval(6, minutes)\"\n >\n {{ getClockButtonContent(6, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(6) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6)\"\n [disabled]=\"!isAllowed(6)\"\n (click)=\"setInterval(6)\"\n >\n {{ getClockButtonContent(6) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"5\">&nbsp;</ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.PERIOD' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"period\" (ionChange)=\"period = $any($event?.detail?.value) || period\">\n <ion-segment-button [value]=\"Periods.AM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.AM' | translate }}</ion-label>\n </ion-segment-button>\n <ion-segment-button [value]=\"Periods.PM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.PM' | translate }}</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.MINUTES_PREFERENCE' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"minutes\" (ionChange)=\"minutes = $any($event?.detail?.value) || minutes\">\n <ion-segment-button value=\"15\">\n <ion-label>15</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"30\">\n <ion-label>30</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"45\">\n <ion-label>45</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n", styles: ["ion-grid.clockGrid ion-button[size=large]{width:50px;height:50px;font-size:1.1em;font-weight:700}ion-grid.clockGrid ion-button[size=small]{font-size:.75em}ion-grid.clockGrid ion-button.oppositeMeridian{--border-color: var(--ion-color-medium);--border-style: dashed;--border-width: 1px}ion-grid.clockGrid .displayText ion-text{font-size:1.3em;font-weight:700}ion-grid.clockGrid .displayText ion-text.fromSelected{display:block;padding-bottom:3px;font-size:.9em}ion-grid.clockGrid ion-segment ion-segment-button{min-width:50px;--color-checked: var(--ion-color-dark);--border-color: var(--ion-color-dark)}ion-grid.clockGrid .prefLabel{font-size:.6em;font-weight:700;text-transform:uppercase}\n"] }]
3863
+ }], propDecorators: { timeInterval: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeInterval", required: false }] }], period: [{
3762
3864
  type: Input
3763
- }] } });
3865
+ }], notEarlierThan: [{ type: i0.Input, args: [{ isSignal: true, alias: "notEarlierThan", required: false }] }], notLaterThan: [{ type: i0.Input, args: [{ isSignal: true, alias: "notLaterThan", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }] } });
3764
3866
  /**
3765
3867
  * The two stages of the component, to pick the start and the end of the interval.
3766
3868
  */
@@ -3782,28 +3884,91 @@ class IDEATimeIntervalComponent {
3782
3884
  constructor() {
3783
3885
  this._modal = inject(ModalController);
3784
3886
  this._translate = inject(IDEATranslationsService);
3887
+ this._cdr = inject(ChangeDetectorRef);
3888
+ /**
3889
+ * The time interval to set.
3890
+ */
3891
+ this.timeInterval = input(/* @ts-ignore */
3892
+ ...(ngDevMode ? [undefined, { debugName: "timeInterval" }] : /* istanbul ignore next */ []));
3785
3893
  /**
3786
3894
  * Whether we should start picking the time displaying the afternoon (PM) or the morning (AM, default).
3787
3895
  */
3788
- this.period = Periods.AM;
3896
+ this.period = input(Periods.AM, /* @ts-ignore */
3897
+ ...(ngDevMode ? [{ debugName: "period" }] : /* istanbul ignore next */ []));
3898
+ /**
3899
+ * A time to use as lower limit for the possible choices.
3900
+ */
3901
+ this.notEarlierThan = input(/* @ts-ignore */
3902
+ ...(ngDevMode ? [undefined, { debugName: "notEarlierThan" }] : /* istanbul ignore next */ []));
3903
+ /**
3904
+ * A time to use as upper limit for the possible choices.
3905
+ */
3906
+ this.notLaterThan = input(/* @ts-ignore */
3907
+ ...(ngDevMode ? [undefined, { debugName: "notLaterThan" }] : /* istanbul ignore next */ []));
3908
+ /**
3909
+ * The label for the field.
3910
+ */
3911
+ this.label = input(/* @ts-ignore */
3912
+ ...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
3913
+ /**
3914
+ * The icon for the field.
3915
+ */
3916
+ this.icon = input(/* @ts-ignore */
3917
+ ...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
3918
+ /**
3919
+ * The color of the icon.
3920
+ */
3921
+ this.iconColor = input(/* @ts-ignore */
3922
+ ...(ngDevMode ? [undefined, { debugName: "iconColor" }] : /* istanbul ignore next */ []));
3923
+ /**
3924
+ * A placeholder for the field.
3925
+ */
3926
+ this.placeholder = input(/* @ts-ignore */
3927
+ ...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
3928
+ /**
3929
+ * If true, the component is disabled.
3930
+ */
3931
+ this.disabled = input(/* @ts-ignore */
3932
+ ...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
3933
+ /**
3934
+ * If true, the field has a tappable effect when disabled.
3935
+ */
3936
+ this.tappableWhenDisabled = input(/* @ts-ignore */
3937
+ ...(ngDevMode ? [undefined, { debugName: "tappableWhenDisabled" }] : /* istanbul ignore next */ []));
3938
+ /**
3939
+ * If true, the obligatory dot is shown.
3940
+ */
3941
+ this.obligatory = input(/* @ts-ignore */
3942
+ ...(ngDevMode ? [undefined, { debugName: "obligatory" }] : /* istanbul ignore next */ []));
3943
+ /**
3944
+ * Lines preferences for the item.
3945
+ */
3946
+ this.lines = input(/* @ts-ignore */
3947
+ ...(ngDevMode ? [undefined, { debugName: "lines" }] : /* istanbul ignore next */ []));
3948
+ /**
3949
+ * The color for the component.
3950
+ */
3951
+ this.color = input(/* @ts-ignore */
3952
+ ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
3789
3953
  /**
3790
3954
  * On select event.
3791
3955
  */
3792
- this.select = new EventEmitter();
3956
+ this.select = output();
3793
3957
  /**
3794
3958
  * Icon select.
3795
3959
  */
3796
- this.iconSelect = new EventEmitter();
3960
+ this.iconSelect = output();
3797
3961
  /**
3798
3962
  * On select (with the field disabled) event.
3799
3963
  */
3800
- this.selectWhenDisabled = new EventEmitter();
3964
+ this.selectWhenDisabled = output();
3801
3965
  this.isOpening = false;
3802
3966
  }
3803
3967
  ngOnInit() {
3804
3968
  // when the language changes, set the locale
3805
3969
  this.langChangeSubscription = this._translate.onLangChange.subscribe(() => {
3806
- this.valueToDisplay = this.getValueToDisplay(this.timeInterval);
3970
+ this.valueToDisplay = this.getValueToDisplay(this.timeInterval());
3971
+ this._cdr.markForCheck();
3807
3972
  });
3808
3973
  }
3809
3974
  ngOnDestroy() {
@@ -3828,25 +3993,26 @@ class IDEATimeIntervalComponent {
3828
3993
  const modal = await this._modal.create({
3829
3994
  component: IDEAFromTimeToTimeComponent,
3830
3995
  componentProps: {
3831
- timeInterval: this.timeInterval,
3832
- period: this.period,
3833
- notEarlierThan: this.notEarlierThan,
3834
- notLaterThan: this.notLaterThan,
3835
- title: this.label
3996
+ timeInterval: this.timeInterval(),
3997
+ period: this.period(),
3998
+ notEarlierThan: this.notEarlierThan(),
3999
+ notLaterThan: this.notLaterThan(),
4000
+ title: this.label()
3836
4001
  }
3837
4002
  });
3838
4003
  modal.onDidDismiss().then((res) => {
3839
4004
  // if the content changed, update the internal values and notify the parent component
3840
4005
  if (res.data === true || res.data === false) {
3841
- this.valueToDisplay = this.getValueToDisplay(this.timeInterval);
4006
+ this.valueToDisplay = this.getValueToDisplay(this.timeInterval());
3842
4007
  this.select.emit();
4008
+ this._cdr.markForCheck();
3843
4009
  }
3844
4010
  });
3845
4011
  modal.present();
3846
4012
  this.isOpening = false;
3847
4013
  }
3848
4014
  doSelectWhenDisabled() {
3849
- if (this.disabled)
4015
+ if (this.disabled())
3850
4016
  this.selectWhenDisabled.emit();
3851
4017
  }
3852
4018
  doIconSelect(event) {
@@ -3854,129 +4020,97 @@ class IDEATimeIntervalComponent {
3854
4020
  event.stopPropagation();
3855
4021
  this.iconSelect.emit(event);
3856
4022
  }
3857
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEATimeIntervalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3858
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEATimeIntervalComponent, isStandalone: true, selector: "idea-time-interval", inputs: { timeInterval: "timeInterval", period: "period", notEarlierThan: "notEarlierThan", notLaterThan: "notLaterThan", label: "label", icon: "icon", iconColor: "iconColor", placeholder: "placeholder", disabled: "disabled", tappableWhenDisabled: "tappableWhenDisabled", obligatory: "obligatory", lines: "lines", color: "color" }, outputs: { select: "select", iconSelect: "iconSelect", selectWhenDisabled: "selectWhenDisabled" }, usesOnChanges: true, ngImport: i0, template: `
4023
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEATimeIntervalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4024
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEATimeIntervalComponent, isStandalone: true, selector: "idea-time-interval", inputs: { timeInterval: { classPropertyName: "timeInterval", publicName: "timeInterval", isSignal: true, isRequired: false, transformFunction: null }, period: { classPropertyName: "period", publicName: "period", isSignal: true, isRequired: false, transformFunction: null }, notEarlierThan: { classPropertyName: "notEarlierThan", publicName: "notEarlierThan", isSignal: true, isRequired: false, transformFunction: null }, notLaterThan: { classPropertyName: "notLaterThan", publicName: "notLaterThan", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconColor: { classPropertyName: "iconColor", publicName: "iconColor", 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 }, tappableWhenDisabled: { classPropertyName: "tappableWhenDisabled", publicName: "tappableWhenDisabled", isSignal: true, isRequired: false, transformFunction: null }, obligatory: { classPropertyName: "obligatory", publicName: "obligatory", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { select: "select", iconSelect: "iconSelect", selectWhenDisabled: "selectWhenDisabled" }, usesOnChanges: true, ngImport: i0, template: `
3859
4025
  <ion-item
3860
4026
  class="timeIntervalItem"
3861
- [color]="color"
3862
- [lines]="lines"
3863
- [button]="!disabled"
4027
+ [color]="color()"
4028
+ [lines]="lines()"
4029
+ [button]="!disabled()"
3864
4030
  [disabled]="isOpening"
3865
- [title]="placeholder || valueToDisplay || ''"
3866
- [class.withLabel]="label"
3867
- (click)="disabled ? doSelectWhenDisabled() : pickTimeInterval()"
4031
+ [title]="placeholder() || valueToDisplay || ''"
4032
+ [class.withLabel]="label()"
4033
+ (click)="disabled() ? doSelectWhenDisabled() : pickTimeInterval()"
3868
4034
  >
3869
- @if (icon) {
4035
+ @if (icon()) {
3870
4036
  <ion-button
3871
4037
  fill="clear"
3872
4038
  slot="start"
3873
- [color]="iconColor"
3874
- [class.marginTop]="label"
4039
+ [color]="iconColor()"
4040
+ [class.marginTop]="label()"
3875
4041
  (click)="doIconSelect($event)"
3876
4042
  >
3877
- <ion-icon [name]="icon" slot="icon-only" />
4043
+ <ion-icon [name]="icon()" slot="icon-only" />
3878
4044
  </ion-button>
3879
4045
  }
3880
- @if (label) {
3881
- <ion-label position="stacked" [class.selectable]="!disabled || tappableWhenDisabled">
3882
- {{ label }}
3883
- @if (obligatory && !disabled) {
4046
+ @if (label()) {
4047
+ <ion-label position="stacked" [class.selectable]="!disabled() || tappableWhenDisabled()">
4048
+ {{ label() }}
4049
+ @if (obligatory() && !disabled()) {
3884
4050
  <ion-text class="obligatoryDot" />
3885
4051
  }
3886
4052
  </ion-label>
3887
4053
  }
3888
- <ion-label class="description" [class.selectable]="!disabled || tappableWhenDisabled">
3889
- @if (!valueToDisplay && !disabled) {
3890
- <ion-text class="placeholder" [class.selectable]="!disabled">
3891
- {{ placeholder }}
4054
+ <ion-label class="description" [class.selectable]="!disabled() || tappableWhenDisabled()">
4055
+ @if (!valueToDisplay && !disabled()) {
4056
+ <ion-text class="placeholder" [class.selectable]="!disabled()">
4057
+ {{ placeholder() }}
3892
4058
  </ion-text>
3893
4059
  }
3894
4060
  {{ valueToDisplay }}
3895
4061
  </ion-label>
3896
- @if (!disabled) {
3897
- <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled" />
4062
+ @if (!disabled()) {
4063
+ <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled()" />
3898
4064
  }
3899
4065
  </ion-item>
3900
- `, isInline: true, styles: [".timeIntervalItem{min-height:48px;height:auto}.timeIntervalItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.timeIntervalItem .placeholder{color:var(--ion-color-medium)}.timeIntervalItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.timeIntervalItem.withLabel{min-height:58px;height:auto}.timeIntervalItem.withLabel .selectIcon{padding-top:25px}.timeIntervalItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"], dependencies: [{ kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "ngmodule", type: CommonModule }] }); }
4066
+ `, isInline: true, styles: [".timeIntervalItem{min-height:48px;height:auto}.timeIntervalItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.timeIntervalItem .placeholder{color:var(--ion-color-medium)}.timeIntervalItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.timeIntervalItem.withLabel{min-height:58px;height:auto}.timeIntervalItem.withLabel .selectIcon{padding-top:25px}.timeIntervalItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"], dependencies: [{ kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3901
4067
  }
3902
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEATimeIntervalComponent, decorators: [{
4068
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEATimeIntervalComponent, decorators: [{
3903
4069
  type: Component,
3904
- args: [{ selector: 'idea-time-interval', imports: [IonLabel, IonText, IonIcon, IonButton, IonItem, CommonModule], template: `
4070
+ args: [{ selector: 'idea-time-interval', imports: [IonLabel, IonText, IonIcon, IonButton, IonItem], changeDetection: ChangeDetectionStrategy.OnPush, template: `
3905
4071
  <ion-item
3906
4072
  class="timeIntervalItem"
3907
- [color]="color"
3908
- [lines]="lines"
3909
- [button]="!disabled"
4073
+ [color]="color()"
4074
+ [lines]="lines()"
4075
+ [button]="!disabled()"
3910
4076
  [disabled]="isOpening"
3911
- [title]="placeholder || valueToDisplay || ''"
3912
- [class.withLabel]="label"
3913
- (click)="disabled ? doSelectWhenDisabled() : pickTimeInterval()"
4077
+ [title]="placeholder() || valueToDisplay || ''"
4078
+ [class.withLabel]="label()"
4079
+ (click)="disabled() ? doSelectWhenDisabled() : pickTimeInterval()"
3914
4080
  >
3915
- @if (icon) {
4081
+ @if (icon()) {
3916
4082
  <ion-button
3917
4083
  fill="clear"
3918
4084
  slot="start"
3919
- [color]="iconColor"
3920
- [class.marginTop]="label"
4085
+ [color]="iconColor()"
4086
+ [class.marginTop]="label()"
3921
4087
  (click)="doIconSelect($event)"
3922
4088
  >
3923
- <ion-icon [name]="icon" slot="icon-only" />
4089
+ <ion-icon [name]="icon()" slot="icon-only" />
3924
4090
  </ion-button>
3925
4091
  }
3926
- @if (label) {
3927
- <ion-label position="stacked" [class.selectable]="!disabled || tappableWhenDisabled">
3928
- {{ label }}
3929
- @if (obligatory && !disabled) {
4092
+ @if (label()) {
4093
+ <ion-label position="stacked" [class.selectable]="!disabled() || tappableWhenDisabled()">
4094
+ {{ label() }}
4095
+ @if (obligatory() && !disabled()) {
3930
4096
  <ion-text class="obligatoryDot" />
3931
4097
  }
3932
4098
  </ion-label>
3933
4099
  }
3934
- <ion-label class="description" [class.selectable]="!disabled || tappableWhenDisabled">
3935
- @if (!valueToDisplay && !disabled) {
3936
- <ion-text class="placeholder" [class.selectable]="!disabled">
3937
- {{ placeholder }}
4100
+ <ion-label class="description" [class.selectable]="!disabled() || tappableWhenDisabled()">
4101
+ @if (!valueToDisplay && !disabled()) {
4102
+ <ion-text class="placeholder" [class.selectable]="!disabled()">
4103
+ {{ placeholder() }}
3938
4104
  </ion-text>
3939
4105
  }
3940
4106
  {{ valueToDisplay }}
3941
4107
  </ion-label>
3942
- @if (!disabled) {
3943
- <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled" />
4108
+ @if (!disabled()) {
4109
+ <ion-icon slot="end" name="caret-down" class="selectIcon" [class.selectable]="!disabled()" />
3944
4110
  }
3945
4111
  </ion-item>
3946
4112
  `, styles: [".timeIntervalItem{min-height:48px;height:auto}.timeIntervalItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.timeIntervalItem .placeholder{color:var(--ion-color-medium)}.timeIntervalItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.timeIntervalItem.withLabel{min-height:58px;height:auto}.timeIntervalItem.withLabel .selectIcon{padding-top:25px}.timeIntervalItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"] }]
3947
- }], propDecorators: { timeInterval: [{
3948
- type: Input
3949
- }], period: [{
3950
- type: Input
3951
- }], notEarlierThan: [{
3952
- type: Input
3953
- }], notLaterThan: [{
3954
- type: Input
3955
- }], label: [{
3956
- type: Input
3957
- }], icon: [{
3958
- type: Input
3959
- }], iconColor: [{
3960
- type: Input
3961
- }], placeholder: [{
3962
- type: Input
3963
- }], disabled: [{
3964
- type: Input
3965
- }], tappableWhenDisabled: [{
3966
- type: Input
3967
- }], obligatory: [{
3968
- type: Input
3969
- }], lines: [{
3970
- type: Input
3971
- }], color: [{
3972
- type: Input
3973
- }], select: [{
3974
- type: Output
3975
- }], iconSelect: [{
3976
- type: Output
3977
- }], selectWhenDisabled: [{
3978
- type: Output
3979
- }] } });
4113
+ }], propDecorators: { timeInterval: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeInterval", required: false }] }], period: [{ type: i0.Input, args: [{ isSignal: true, alias: "period", required: false }] }], notEarlierThan: [{ type: i0.Input, args: [{ isSignal: true, alias: "notEarlierThan", required: false }] }], notLaterThan: [{ type: i0.Input, args: [{ isSignal: true, alias: "notLaterThan", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconColor", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], tappableWhenDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "tappableWhenDisabled", required: false }] }], obligatory: [{ type: i0.Input, args: [{ isSignal: true, alias: "obligatory", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], select: [{ type: i0.Output, args: ["select"] }], iconSelect: [{ type: i0.Output, args: ["iconSelect"] }], selectWhenDisabled: [{ type: i0.Output, args: ["selectWhenDisabled"] }] } });
3980
4114
 
3981
4115
  /**
3982
4116
  * To communicate with an AWS API Gateway websocket istance.
@@ -4152,10 +4286,10 @@ class IDEAAWSAPISocketService {
4152
4286
  minutesToMS(minutes) {
4153
4287
  return minutes * 60 * 1000;
4154
4288
  }
4155
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAWSAPISocketService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4156
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAWSAPISocketService, providedIn: 'root' }); }
4289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAWSAPISocketService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4290
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAWSAPISocketService, providedIn: 'root' }); }
4157
4291
  }
4158
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAWSAPISocketService, decorators: [{
4292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAWSAPISocketService, decorators: [{
4159
4293
  type: Injectable,
4160
4294
  args: [{ providedIn: 'root' }]
4161
4295
  }], ctorParameters: () => [] });
@@ -4204,10 +4338,10 @@ class IDEACachedResourcesService {
4204
4338
  this.cacheKey = String(key);
4205
4339
  await this.storage.set(this.cacheKeyIndex, key);
4206
4340
  }
4207
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACachedResourcesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4208
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACachedResourcesService, providedIn: 'root' }); }
4341
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACachedResourcesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4342
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACachedResourcesService, providedIn: 'root' }); }
4209
4343
  }
4210
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACachedResourcesService, decorators: [{
4344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACachedResourcesService, decorators: [{
4211
4345
  type: Injectable,
4212
4346
  args: [{ providedIn: 'root' }]
4213
4347
  }], ctorParameters: () => [] });
@@ -4254,10 +4388,10 @@ class IDEAPushNotificationsService {
4254
4388
  if (permStatus.receive === 'granted')
4255
4389
  PushNotifications.register();
4256
4390
  }
4257
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAPushNotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4258
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAPushNotificationsService, providedIn: 'root' }); }
4391
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAPushNotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4392
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAPushNotificationsService, providedIn: 'root' }); }
4259
4393
  }
4260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAPushNotificationsService, decorators: [{
4394
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAPushNotificationsService, decorators: [{
4261
4395
  type: Injectable,
4262
4396
  args: [{ providedIn: 'root' }]
4263
4397
  }], ctorParameters: () => [] });