@everymatrix/general-registration 1.55.1 → 1.56.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.
@@ -157,13 +157,55 @@ const tooltipIconSvg = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD
157
157
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
158
158
  */
159
159
 
160
- function defineCustomElement(CustomElement, version = '24.5.10') {
160
+ window.Vaadin ||= {};
161
+ window.Vaadin.featureFlags ||= {};
162
+
163
+ function dashToCamelCase$1(dash) {
164
+ return dash.replace(/-[a-z]/gu, (m) => m[1].toUpperCase());
165
+ }
166
+
167
+ const experimentalMap = {};
168
+
169
+ function defineCustomElement(CustomElement, version = '24.6.5') {
161
170
  Object.defineProperty(CustomElement, 'version', {
162
171
  get() {
163
172
  return version;
164
173
  },
165
174
  });
166
175
 
176
+ if (CustomElement.experimental) {
177
+ const featureFlagKey =
178
+ typeof CustomElement.experimental === 'string'
179
+ ? CustomElement.experimental
180
+ : `${dashToCamelCase$1(CustomElement.is.split('-').slice(1).join('-'))}Component`;
181
+
182
+ if (!window.Vaadin.featureFlags[featureFlagKey] && !experimentalMap[featureFlagKey]) {
183
+ // Add setter to define experimental component when it's set to true
184
+ experimentalMap[featureFlagKey] = new Set();
185
+ experimentalMap[featureFlagKey].add(CustomElement);
186
+
187
+ Object.defineProperty(window.Vaadin.featureFlags, featureFlagKey, {
188
+ get() {
189
+ return experimentalMap[featureFlagKey].size === 0;
190
+ },
191
+ set(value) {
192
+ if (!!value && experimentalMap[featureFlagKey].size > 0) {
193
+ experimentalMap[featureFlagKey].forEach((elementClass) => {
194
+ customElements.define(elementClass.is, elementClass);
195
+ });
196
+ experimentalMap[featureFlagKey].clear();
197
+ }
198
+ },
199
+ });
200
+
201
+ return;
202
+ } else if (experimentalMap[featureFlagKey]) {
203
+ // Allow to register multiple components with single flag
204
+ experimentalMap[featureFlagKey].add(CustomElement);
205
+ return;
206
+ }
207
+ }
208
+
167
209
  const defined = customElements.get(CustomElement.is);
168
210
  if (!defined) {
169
211
  customElements.define(CustomElement.is, CustomElement);
@@ -912,7 +954,7 @@ registerStyles('', color, { moduleId: 'lumo-color' });
912
954
  const fontIcons = i$3`
913
955
  @font-face {
914
956
  font-family: 'lumo-icons';
915
- src: url(data:application/font-woff;charset=utf-8;base64,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)
957
+ src: url(data:application/font-woff;charset=utf-8;base64,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)
916
958
  format('woff');
917
959
  font-weight: normal;
918
960
  font-style: normal;
@@ -942,25 +984,27 @@ const fontIcons = i$3`
942
984
  --lumo-icons-cog: '\\ea15';
943
985
  --lumo-icons-cross: '\\ea16';
944
986
  --lumo-icons-download: '\\ea17';
945
- --lumo-icons-dropdown: '\\ea18';
946
- --lumo-icons-edit: '\\ea19';
947
- --lumo-icons-error: '\\ea1a';
948
- --lumo-icons-eye: '\\ea1b';
949
- --lumo-icons-eye-disabled: '\\ea1c';
950
- --lumo-icons-menu: '\\ea1d';
951
- --lumo-icons-minus: '\\ea1e';
952
- --lumo-icons-ordered-list: '\\ea1f';
953
- --lumo-icons-phone: '\\ea20';
954
- --lumo-icons-photo: '\\ea21';
955
- --lumo-icons-play: '\\ea22';
956
- --lumo-icons-plus: '\\ea23';
957
- --lumo-icons-redo: '\\ea24';
958
- --lumo-icons-reload: '\\ea25';
959
- --lumo-icons-search: '\\ea26';
960
- --lumo-icons-undo: '\\ea27';
961
- --lumo-icons-unordered-list: '\\ea28';
962
- --lumo-icons-upload: '\\ea29';
963
- --lumo-icons-user: '\\ea2a';
987
+ --lumo-icons-drag-handle: '\\ea18';
988
+ --lumo-icons-dropdown: '\\ea19';
989
+ --lumo-icons-edit: '\\ea1a';
990
+ --lumo-icons-error: '\\ea1b';
991
+ --lumo-icons-eye: '\\ea1c';
992
+ --lumo-icons-eye-disabled: '\\ea1d';
993
+ --lumo-icons-menu: '\\ea1e';
994
+ --lumo-icons-minus: '\\ea1f';
995
+ --lumo-icons-ordered-list: '\\ea20';
996
+ --lumo-icons-phone: '\\ea21';
997
+ --lumo-icons-photo: '\\ea22';
998
+ --lumo-icons-play: '\\ea23';
999
+ --lumo-icons-plus: '\\ea24';
1000
+ --lumo-icons-redo: '\\ea25';
1001
+ --lumo-icons-reload: '\\ea26';
1002
+ --lumo-icons-resize-handle: '\\ea27';
1003
+ --lumo-icons-search: '\\ea28';
1004
+ --lumo-icons-undo: '\\ea29';
1005
+ --lumo-icons-unordered-list: '\\ea2a';
1006
+ --lumo-icons-upload: '\\ea2b';
1007
+ --lumo-icons-user: '\\ea2c';
964
1008
  }
965
1009
  `;
966
1010
 
@@ -11305,6 +11349,7 @@ const DisabledMixin = dedupingMixin(
11305
11349
  value: false,
11306
11350
  observer: '_disabledChanged',
11307
11351
  reflectToAttribute: true,
11352
+ sync: true,
11308
11353
  },
11309
11354
  };
11310
11355
  }
@@ -12428,6 +12473,8 @@ const InputMixin = dedupingMixin(
12428
12473
  if (this.inputElement) {
12429
12474
  this.inputElement[this._inputElementValueProperty] = value;
12430
12475
  }
12476
+
12477
+ this._hasInputValue = value && value.length > 0;
12431
12478
  }
12432
12479
 
12433
12480
  /**
@@ -12621,6 +12668,7 @@ const CheckedMixin = dedupingMixin(
12621
12668
  value: false,
12622
12669
  notify: true,
12623
12670
  reflectToAttribute: true,
12671
+ sync: true,
12624
12672
  },
12625
12673
  };
12626
12674
  }
@@ -13656,6 +13704,22 @@ const ValidateMixin = dedupingMixin(
13656
13704
  value: false,
13657
13705
  },
13658
13706
 
13707
+ /**
13708
+ * Set to true to enable manual validation mode. This mode disables automatic
13709
+ * constraint validation, allowing you to control the validation process yourself.
13710
+ * You can still trigger constraint validation manually with the `validate()` method
13711
+ * or use `checkValidity()` to assess the component's validity without affecting
13712
+ * the invalid state. In manual validation mode, you can also manipulate
13713
+ * the `invalid` property directly through your application logic without conflicts
13714
+ * with the component's internal validation.
13715
+ *
13716
+ * @attr {boolean} manual-validation
13717
+ */
13718
+ manualValidation: {
13719
+ type: Boolean,
13720
+ value: false,
13721
+ },
13722
+
13659
13723
  /**
13660
13724
  * Specifies that the user must fill in a value.
13661
13725
  */
@@ -13710,6 +13774,14 @@ const ValidateMixin = dedupingMixin(
13710
13774
  return true;
13711
13775
  }
13712
13776
 
13777
+ /** @protected */
13778
+ _requestValidation() {
13779
+ if (!this.manualValidation) {
13780
+ // eslint-disable-next-line no-restricted-syntax
13781
+ this.validate();
13782
+ }
13783
+ }
13784
+
13713
13785
  /**
13714
13786
  * Fired whenever the field is validated.
13715
13787
  *
@@ -14232,14 +14304,14 @@ const CheckboxMixin = (superclass) =>
14232
14304
  // Do not validate when focusout is caused by document
14233
14305
  // losing focus, which happens on browser tab switch.
14234
14306
  if (!focused && document.hasFocus()) {
14235
- this.validate();
14307
+ this._requestValidation();
14236
14308
  }
14237
14309
  }
14238
14310
 
14239
14311
  /** @private */
14240
14312
  _checkedChanged(checked) {
14241
14313
  if (checked || this.__oldChecked) {
14242
- this.validate();
14314
+ this._requestValidation();
14243
14315
  }
14244
14316
 
14245
14317
  this.__oldChecked = checked;
@@ -14256,7 +14328,7 @@ const CheckboxMixin = (superclass) =>
14256
14328
  super._requiredChanged(required);
14257
14329
 
14258
14330
  if (required === false) {
14259
- this.validate();
14331
+ this._requestValidation();
14260
14332
  }
14261
14333
  }
14262
14334
 
@@ -14956,7 +15028,7 @@ const CheckboxGroupMixin = (superclass) =>
14956
15028
  });
14957
15029
 
14958
15030
  if (oldValue !== undefined) {
14959
- this.validate();
15031
+ this._requestValidation();
14960
15032
  }
14961
15033
  }
14962
15034
 
@@ -14996,7 +15068,7 @@ const CheckboxGroupMixin = (superclass) =>
14996
15068
  // Do not validate when focusout is caused by document
14997
15069
  // losing focus, which happens on browser tab switch.
14998
15070
  if (!focused && document.hasFocus()) {
14999
- this.validate();
15071
+ this._requestValidation();
15000
15072
  }
15001
15073
  }
15002
15074
  };
@@ -17674,6 +17746,7 @@ const OverlayMixin = (superClass) =>
17674
17746
  notify: true,
17675
17747
  observer: '_openedChanged',
17676
17748
  reflectToAttribute: true,
17749
+ sync: true,
17677
17750
  },
17678
17751
 
17679
17752
  /**
@@ -17682,6 +17755,7 @@ const OverlayMixin = (superClass) =>
17682
17755
  */
17683
17756
  owner: {
17684
17757
  type: Object,
17758
+ sync: true,
17685
17759
  },
17686
17760
 
17687
17761
  /**
@@ -17689,6 +17763,7 @@ const OverlayMixin = (superClass) =>
17689
17763
  */
17690
17764
  model: {
17691
17765
  type: Object,
17766
+ sync: true,
17692
17767
  },
17693
17768
 
17694
17769
  /**
@@ -17702,6 +17777,7 @@ const OverlayMixin = (superClass) =>
17702
17777
  */
17703
17778
  renderer: {
17704
17779
  type: Object,
17780
+ sync: true,
17705
17781
  },
17706
17782
 
17707
17783
  /**
@@ -17714,6 +17790,7 @@ const OverlayMixin = (superClass) =>
17714
17790
  value: false,
17715
17791
  reflectToAttribute: true,
17716
17792
  observer: '_modelessChanged',
17793
+ sync: true,
17717
17794
  },
17718
17795
 
17719
17796
  /**
@@ -17725,6 +17802,7 @@ const OverlayMixin = (superClass) =>
17725
17802
  type: Boolean,
17726
17803
  reflectToAttribute: true,
17727
17804
  observer: '_hiddenChanged',
17805
+ sync: true,
17728
17806
  },
17729
17807
 
17730
17808
  /**
@@ -17735,6 +17813,7 @@ const OverlayMixin = (superClass) =>
17735
17813
  type: Boolean,
17736
17814
  value: false,
17737
17815
  reflectToAttribute: true,
17816
+ sync: true,
17738
17817
  },
17739
17818
  };
17740
17819
  }
@@ -19563,6 +19642,21 @@ class InfiniteScroller extends HTMLElement {
19563
19642
  }
19564
19643
  }
19565
19644
 
19645
+ /** @protected */
19646
+ disconnectedCallback() {
19647
+ if (this._debouncerScrollFinish) {
19648
+ this._debouncerScrollFinish.cancel();
19649
+ }
19650
+
19651
+ if (this._debouncerUpdateClones) {
19652
+ this._debouncerUpdateClones.cancel();
19653
+ }
19654
+
19655
+ if (this.__pendingFinishInit) {
19656
+ cancelAnimationFrame(this.__pendingFinishInit);
19657
+ }
19658
+ }
19659
+
19566
19660
  /**
19567
19661
  * Force the scroller to update clones after a reset, without
19568
19662
  * waiting for the debouncer to resolve.
@@ -19710,8 +19804,9 @@ class InfiniteScroller extends HTMLElement {
19710
19804
  }
19711
19805
  });
19712
19806
 
19713
- requestAnimationFrame(() => {
19807
+ this.__pendingFinishInit = requestAnimationFrame(() => {
19714
19808
  this._finishInit();
19809
+ this.__pendingFinishInit = null;
19715
19810
  });
19716
19811
  }
19717
19812
 
@@ -19726,6 +19821,10 @@ class InfiniteScroller extends HTMLElement {
19726
19821
  itemWrapper.instance = this._createElement();
19727
19822
  itemWrapper.appendChild(itemWrapper.instance);
19728
19823
 
19824
+ if (itemWrapper.instance.performUpdate) {
19825
+ itemWrapper.instance.performUpdate();
19826
+ }
19827
+
19729
19828
  Object.keys(tmpInstance).forEach((prop) => {
19730
19829
  itemWrapper.instance[prop] = tmpInstance[prop];
19731
19830
  });
@@ -21743,6 +21842,10 @@ const MonthCalendarMixin = (superClass) =>
21743
21842
  value: () => false,
21744
21843
  },
21745
21844
 
21845
+ enteredDate: {
21846
+ type: Date,
21847
+ },
21848
+
21746
21849
  disabled: {
21747
21850
  type: Boolean,
21748
21851
  reflectToAttribute: true,
@@ -21762,6 +21865,11 @@ const MonthCalendarMixin = (superClass) =>
21762
21865
  _notTapping: {
21763
21866
  type: Boolean,
21764
21867
  },
21868
+
21869
+ /** @private */
21870
+ __hasFocus: {
21871
+ type: Boolean,
21872
+ },
21765
21873
  };
21766
21874
  }
21767
21875
 
@@ -21781,6 +21889,12 @@ const MonthCalendarMixin = (superClass) =>
21781
21889
  addListener(this.$.monthGrid, 'tap', this._handleTap.bind(this));
21782
21890
  }
21783
21891
 
21892
+ /** @override */
21893
+ _setFocused(focused) {
21894
+ super._setFocused(focused);
21895
+ this.__hasFocus = focused;
21896
+ }
21897
+
21784
21898
  /**
21785
21899
  * Returns true if all the dates in the month are out of the allowed range
21786
21900
  * @protected
@@ -22076,7 +22190,7 @@ class MonthCalendar extends MonthCalendarMixin(ThemableMixin(PolymerElement)) {
22076
22190
  <template is="dom-repeat" items="[[week]]">
22077
22191
  <td
22078
22192
  role="gridcell"
22079
- part$="[[__getDatePart(item, focusedDate, selectedDate, minDate, maxDate, isDateDisabled)]]"
22193
+ part$="[[__getDatePart(item, focusedDate, selectedDate, minDate, maxDate, isDateDisabled, enteredDate, __hasFocus)]]"
22080
22194
  date="[[item]]"
22081
22195
  tabindex$="[[__getDayTabindex(item, focusedDate)]]"
22082
22196
  disabled$="[[__isDayDisabled(item, minDate, maxDate, isDateDisabled)]]"
@@ -22134,7 +22248,7 @@ class MonthCalendar extends MonthCalendarMixin(ThemableMixin(PolymerElement)) {
22134
22248
 
22135
22249
  /** @private */
22136
22250
  // eslint-disable-next-line @typescript-eslint/max-params
22137
- __getDatePart(date, focusedDate, selectedDate, minDate, maxDate, isDateDisabled) {
22251
+ __getDatePart(date, focusedDate, selectedDate, minDate, maxDate, isDateDisabled, enteredDate, hasFocus) {
22138
22252
  const result = ['date'];
22139
22253
  const greaterThanToday = date > normalizeDate(new Date());
22140
22254
  const lessThanToday = date < normalizeDate(new Date());
@@ -22143,7 +22257,7 @@ class MonthCalendar extends MonthCalendarMixin(ThemableMixin(PolymerElement)) {
22143
22257
  result.push('disabled');
22144
22258
  }
22145
22259
 
22146
- if (this.__isDayFocused(date, focusedDate)) {
22260
+ if (dateEquals(date, focusedDate) && (hasFocus || dateEquals(date, enteredDate))) {
22147
22261
  result.push('focused');
22148
22262
  }
22149
22263
 
@@ -22166,11 +22280,6 @@ class MonthCalendar extends MonthCalendarMixin(ThemableMixin(PolymerElement)) {
22166
22280
  return result.join(' ');
22167
22281
  }
22168
22282
 
22169
- /** @private */
22170
- __isDayFocused(date, focusedDate) {
22171
- return dateEquals(date, focusedDate);
22172
- }
22173
-
22174
22283
  /** @private */
22175
22284
  __isDaySelected(date, selectedDate) {
22176
22285
  return dateEquals(date, selectedDate);
@@ -22201,11 +22310,7 @@ class MonthCalendar extends MonthCalendarMixin(ThemableMixin(PolymerElement)) {
22201
22310
 
22202
22311
  /** @private */
22203
22312
  __getDayTabindex(date, focusedDate) {
22204
- if (this.__isDayFocused(date, focusedDate)) {
22205
- return '0';
22206
- }
22207
-
22208
- return '-1';
22313
+ return dateEquals(date, focusedDate) ? '0' : '-1';
22209
22314
  }
22210
22315
  }
22211
22316
 
@@ -22324,6 +22429,7 @@ const DatePickerOverlayContentMixin = (superClass) =>
22324
22429
  initialPosition: {
22325
22430
  type: Object,
22326
22431
  observer: '_initialPositionChanged',
22432
+ sync: true,
22327
22433
  },
22328
22434
 
22329
22435
  _originDate: {
@@ -22391,6 +22497,11 @@ const DatePickerOverlayContentMixin = (superClass) =>
22391
22497
  type: Function,
22392
22498
  },
22393
22499
 
22500
+ enteredDate: {
22501
+ type: Date,
22502
+ sync: true,
22503
+ },
22504
+
22394
22505
  /**
22395
22506
  * Input label
22396
22507
  */
@@ -22418,7 +22529,7 @@ const DatePickerOverlayContentMixin = (superClass) =>
22418
22529
 
22419
22530
  static get observers() {
22420
22531
  return [
22421
- '__updateCalendars(calendars, i18n, minDate, maxDate, selectedDate, focusedDate, showWeekNumbers, _ignoreTaps, _theme, isDateDisabled)',
22532
+ '__updateCalendars(calendars, i18n, minDate, maxDate, selectedDate, focusedDate, showWeekNumbers, _ignoreTaps, _theme, isDateDisabled, enteredDate)',
22422
22533
  '__updateCancelButton(_cancelButton, i18n)',
22423
22534
  '__updateTodayButton(_todayButton, i18n, minDate, maxDate, isDateDisabled)',
22424
22535
  '__updateYears(years, selectedDate, _theme)',
@@ -22606,6 +22717,7 @@ const DatePickerOverlayContentMixin = (superClass) =>
22606
22717
  ignoreTaps,
22607
22718
  theme,
22608
22719
  isDateDisabled,
22720
+ enteredDate,
22609
22721
  ) {
22610
22722
  if (calendars && calendars.length) {
22611
22723
  calendars.forEach((calendar) => {
@@ -22617,6 +22729,7 @@ const DatePickerOverlayContentMixin = (superClass) =>
22617
22729
  calendar.selectedDate = selectedDate;
22618
22730
  calendar.showWeekNumbers = showWeekNumbers;
22619
22731
  calendar.ignoreTaps = ignoreTaps;
22732
+ calendar.enteredDate = enteredDate;
22620
22733
 
22621
22734
  if (theme) {
22622
22735
  calendar.setAttribute('theme', theme);
@@ -23725,8 +23838,8 @@ const InputConstraintsMixin = dedupingMixin(
23725
23838
  const isLastConstraintRemoved = this.__previousHasConstraints && !hasConstraints;
23726
23839
 
23727
23840
  if ((this._hasValue || this.invalid) && hasConstraints) {
23728
- this.validate();
23729
- } else if (isLastConstraintRemoved) {
23841
+ this._requestValidation();
23842
+ } else if (isLastConstraintRemoved && !this.manualValidation) {
23730
23843
  this._setInvalid(false);
23731
23844
  }
23732
23845
 
@@ -23744,7 +23857,7 @@ const InputConstraintsMixin = dedupingMixin(
23744
23857
  _onChange(event) {
23745
23858
  event.stopPropagation();
23746
23859
 
23747
- this.validate();
23860
+ this._requestValidation();
23748
23861
 
23749
23862
  this.dispatchEvent(
23750
23863
  new CustomEvent('change', {
@@ -23887,30 +24000,6 @@ const InputControlMixin = (superclass) =>
23887
24000
  }
23888
24001
  }
23889
24002
 
23890
- /**
23891
- * Override an event listener inherited from `InputMixin`
23892
- * to capture native `change` event and make sure that
23893
- * a new one is dispatched after validation runs.
23894
- * @param {Event} event
23895
- * @protected
23896
- * @override
23897
- */
23898
- _onChange(event) {
23899
- event.stopPropagation();
23900
-
23901
- this.validate();
23902
-
23903
- this.dispatchEvent(
23904
- new CustomEvent('change', {
23905
- detail: {
23906
- sourceEvent: event,
23907
- },
23908
- bubbles: event.bubbles,
23909
- cancelable: event.cancelable,
23910
- }),
23911
- );
23912
- }
23913
-
23914
24003
  /**
23915
24004
  * Override a method from `InputMixin`.
23916
24005
  * @param {!HTMLElement} input
@@ -24246,6 +24335,62 @@ class VirtualKeyboardController {
24246
24335
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
24247
24336
  */
24248
24337
 
24338
+ const datePickerI18nDefaults = Object.freeze({
24339
+ monthNames: [
24340
+ 'January',
24341
+ 'February',
24342
+ 'March',
24343
+ 'April',
24344
+ 'May',
24345
+ 'June',
24346
+ 'July',
24347
+ 'August',
24348
+ 'September',
24349
+ 'October',
24350
+ 'November',
24351
+ 'December',
24352
+ ],
24353
+ weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
24354
+ weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
24355
+ firstDayOfWeek: 0,
24356
+ today: 'Today',
24357
+ cancel: 'Cancel',
24358
+ referenceDate: '',
24359
+ formatDate(d) {
24360
+ const yearStr = String(d.year).replace(/\d+/u, (y) => '0000'.substr(y.length) + y);
24361
+ return [d.month + 1, d.day, yearStr].join('/');
24362
+ },
24363
+ parseDate(text) {
24364
+ const parts = text.split('/');
24365
+ const today = new Date();
24366
+ let date,
24367
+ month = today.getMonth(),
24368
+ year = today.getFullYear();
24369
+
24370
+ if (parts.length === 3) {
24371
+ month = parseInt(parts[0]) - 1;
24372
+ date = parseInt(parts[1]);
24373
+ year = parseInt(parts[2]);
24374
+ if (parts[2].length < 3 && year >= 0) {
24375
+ const usedReferenceDate = this.referenceDate ? parseDate(this.referenceDate) : new Date();
24376
+ year = getAdjustedYear(usedReferenceDate, year, month, date);
24377
+ }
24378
+ } else if (parts.length === 2) {
24379
+ month = parseInt(parts[0]) - 1;
24380
+ date = parseInt(parts[1]);
24381
+ } else if (parts.length === 1) {
24382
+ date = parseInt(parts[0]);
24383
+ }
24384
+
24385
+ if (date !== undefined) {
24386
+ return { day: date, month, year };
24387
+ }
24388
+ },
24389
+ formatTitle: (monthName, fullYear) => {
24390
+ return `${monthName} ${fullYear}`;
24391
+ },
24392
+ });
24393
+
24249
24394
  /**
24250
24395
  * @polymerMixin
24251
24396
  * @mixes ControllerMixin
@@ -24319,7 +24464,10 @@ const DatePickerMixin = (subclass) =>
24319
24464
  * Set true to prevent the overlay from opening automatically.
24320
24465
  * @attr {boolean} auto-open-disabled
24321
24466
  */
24322
- autoOpenDisabled: Boolean,
24467
+ autoOpenDisabled: {
24468
+ type: Boolean,
24469
+ sync: true,
24470
+ },
24323
24471
 
24324
24472
  /**
24325
24473
  * Set true to display ISO-8601 week numbers in the calendar. Notice that
@@ -24440,63 +24588,7 @@ const DatePickerMixin = (subclass) =>
24440
24588
  i18n: {
24441
24589
  type: Object,
24442
24590
  sync: true,
24443
- value: () => {
24444
- return {
24445
- monthNames: [
24446
- 'January',
24447
- 'February',
24448
- 'March',
24449
- 'April',
24450
- 'May',
24451
- 'June',
24452
- 'July',
24453
- 'August',
24454
- 'September',
24455
- 'October',
24456
- 'November',
24457
- 'December',
24458
- ],
24459
- weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
24460
- weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
24461
- firstDayOfWeek: 0,
24462
- today: 'Today',
24463
- cancel: 'Cancel',
24464
- referenceDate: '',
24465
- formatDate(d) {
24466
- const yearStr = String(d.year).replace(/\d+/u, (y) => '0000'.substr(y.length) + y);
24467
- return [d.month + 1, d.day, yearStr].join('/');
24468
- },
24469
- parseDate(text) {
24470
- const parts = text.split('/');
24471
- const today = new Date();
24472
- let date,
24473
- month = today.getMonth(),
24474
- year = today.getFullYear();
24475
-
24476
- if (parts.length === 3) {
24477
- month = parseInt(parts[0]) - 1;
24478
- date = parseInt(parts[1]);
24479
- year = parseInt(parts[2]);
24480
- if (parts[2].length < 3 && year >= 0) {
24481
- const usedReferenceDate = this.referenceDate ? parseDate(this.referenceDate) : new Date();
24482
- year = getAdjustedYear(usedReferenceDate, year, month, date);
24483
- }
24484
- } else if (parts.length === 2) {
24485
- month = parseInt(parts[0]) - 1;
24486
- date = parseInt(parts[1]);
24487
- } else if (parts.length === 1) {
24488
- date = parseInt(parts[0]);
24489
- }
24490
-
24491
- if (date !== undefined) {
24492
- return { day: date, month, year };
24493
- }
24494
- },
24495
- formatTitle: (monthName, fullYear) => {
24496
- return `${monthName} ${fullYear}`;
24497
- },
24498
- };
24499
- },
24591
+ value: () => ({ ...datePickerI18nDefaults }),
24500
24592
  },
24501
24593
 
24502
24594
  /**
@@ -24581,18 +24673,10 @@ const DatePickerMixin = (subclass) =>
24581
24673
  sync: true,
24582
24674
  },
24583
24675
 
24584
- /**
24585
- * In date-picker, unlike other components extending `InputMixin`,
24586
- * the property indicates true only if the input has been entered by the user.
24587
- * In the case of programmatic changes, the property is reset to false.
24588
- * Read more about why this workaround is needed:
24589
- * https://github.com/vaadin/web-components/issues/5639
24590
- *
24591
- * @protected
24592
- * @override
24593
- */
24594
- _hasInputValue: {
24595
- type: Boolean,
24676
+ /** @private */
24677
+ __enteredDate: {
24678
+ type: Date,
24679
+ sync: true,
24596
24680
  },
24597
24681
  };
24598
24682
  }
@@ -24601,7 +24685,7 @@ const DatePickerMixin = (subclass) =>
24601
24685
  return [
24602
24686
  '_selectedDateChanged(_selectedDate, i18n)',
24603
24687
  '_focusedDateChanged(_focusedDate, i18n)',
24604
- '__updateOverlayContent(_overlayContent, i18n, label, _minDate, _maxDate, _focusedDate, _selectedDate, showWeekNumbers, isDateDisabled)',
24688
+ '__updateOverlayContent(_overlayContent, i18n, label, _minDate, _maxDate, _focusedDate, _selectedDate, showWeekNumbers, isDateDisabled, __enteredDate)',
24605
24689
  '__updateOverlayContentTheme(_overlayContent, _theme)',
24606
24690
  '__updateOverlayContentFullScreen(_overlayContent, _fullscreen)',
24607
24691
  ];
@@ -24619,28 +24703,17 @@ const DatePickerMixin = (subclass) =>
24619
24703
  this._boundOverlayRenderer = this._overlayRenderer.bind(this);
24620
24704
  }
24621
24705
 
24622
- /**
24623
- * @override
24624
- * @protected
24625
- */
24706
+ /** @override */
24626
24707
  get _inputElementValue() {
24627
24708
  return super._inputElementValue;
24628
24709
  }
24629
24710
 
24630
- /**
24631
- * The setter is overridden to reset the `_hasInputValue` property
24632
- * to false when the input element's value is updated programmatically.
24633
- * In date-picker, `_hasInputValue` is supposed to indicate true only
24634
- * if the input has been entered by the user.
24635
- * Read more about why this workaround is needed:
24636
- * https://github.com/vaadin/web-components/issues/5639
24637
- *
24638
- * @override
24639
- * @protected
24640
- */
24711
+ /** @override */
24641
24712
  set _inputElementValue(value) {
24642
24713
  super._inputElementValue = value;
24643
- this._hasInputValue = false;
24714
+
24715
+ const parsedDate = this.__parseDate(value);
24716
+ this.__setEnteredDate(parsedDate);
24644
24717
  }
24645
24718
 
24646
24719
  /**
@@ -24702,7 +24775,7 @@ const DatePickerMixin = (subclass) =>
24702
24775
  // Do not validate when focusout is caused by document
24703
24776
  // losing focus, which happens on browser tab switch.
24704
24777
  if (document.hasFocus()) {
24705
- this.validate();
24778
+ this._requestValidation();
24706
24779
  }
24707
24780
  }
24708
24781
  }
@@ -24847,13 +24920,8 @@ const DatePickerMixin = (subclass) =>
24847
24920
  !this._selectedDate || dateAllowed(this._selectedDate, this._minDate, this._maxDate, this.isDateDisabled);
24848
24921
 
24849
24922
  let inputValidity = true;
24850
- if (this.inputElement) {
24851
- if (this.inputElement.checkValidity) {
24852
- inputValidity = this.inputElement.checkValidity();
24853
- } else if (this.inputElement.validate) {
24854
- // Iron-form-elements have the validate API
24855
- inputValidity = this.inputElement.validate();
24856
- }
24923
+ if (this.inputElement && this.inputElement.checkValidity) {
24924
+ inputValidity = this.inputElement.checkValidity();
24857
24925
  }
24858
24926
 
24859
24927
  return inputValid && isDateValid && inputValidity;
@@ -24940,10 +25008,10 @@ const DatePickerMixin = (subclass) =>
24940
25008
  const unparsableValue = this.__unparsableValue;
24941
25009
 
24942
25010
  if (this.__committedValue !== this.value) {
24943
- this.validate();
25011
+ this._requestValidation();
24944
25012
  this.dispatchEvent(new CustomEvent('change', { bubbles: true }));
24945
25013
  } else if (this.__committedUnparsableValue !== unparsableValue) {
24946
- this.validate();
25014
+ this._requestValidation();
24947
25015
  this.dispatchEvent(new CustomEvent('unparsable-change'));
24948
25016
  }
24949
25017
 
@@ -25072,7 +25140,7 @@ const DatePickerMixin = (subclass) =>
25072
25140
 
25073
25141
  if (oldValue !== undefined) {
25074
25142
  // Validate only if `value` changes after initialization.
25075
- this.validate();
25143
+ this._requestValidation();
25076
25144
  }
25077
25145
  }
25078
25146
  } else {
@@ -25099,6 +25167,7 @@ const DatePickerMixin = (subclass) =>
25099
25167
  selectedDate,
25100
25168
  showWeekNumbers,
25101
25169
  isDateDisabled,
25170
+ enteredDate,
25102
25171
  ) {
25103
25172
  if (overlayContent) {
25104
25173
  overlayContent.i18n = i18n;
@@ -25109,6 +25178,7 @@ const DatePickerMixin = (subclass) =>
25109
25178
  overlayContent.selectedDate = selectedDate;
25110
25179
  overlayContent.showWeekNumbers = showWeekNumbers;
25111
25180
  overlayContent.isDateDisabled = isDateDisabled;
25181
+ overlayContent.enteredDate = enteredDate;
25112
25182
  }
25113
25183
  }
25114
25184
 
@@ -25238,7 +25308,7 @@ const DatePickerMixin = (subclass) =>
25238
25308
  // Needed in case the value was not changed: open and close dropdown,
25239
25309
  // especially on outside click. On Esc key press, do not validate.
25240
25310
  if (!this.value && !this._keyboardActive) {
25241
- this.validate();
25311
+ this._requestValidation();
25242
25312
  }
25243
25313
  }
25244
25314
 
@@ -25430,15 +25500,32 @@ const DatePickerMixin = (subclass) =>
25430
25500
  this.open();
25431
25501
  }
25432
25502
 
25433
- if (this._inputElementValue) {
25434
- const parsedDate = this.__parseDate(this._inputElementValue);
25435
- if (parsedDate) {
25436
- this._ignoreFocusedDateChange = true;
25437
- if (!dateEquals(parsedDate, this._focusedDate)) {
25438
- this._focusedDate = parsedDate;
25439
- }
25440
- this._ignoreFocusedDateChange = false;
25503
+ const parsedDate = this.__parseDate(this._inputElementValue || '');
25504
+ if (parsedDate) {
25505
+ this._ignoreFocusedDateChange = true;
25506
+ if (!dateEquals(parsedDate, this._focusedDate)) {
25507
+ this._focusedDate = parsedDate;
25441
25508
  }
25509
+ this._ignoreFocusedDateChange = false;
25510
+ }
25511
+
25512
+ this.__setEnteredDate(parsedDate);
25513
+ }
25514
+
25515
+ /**
25516
+ * @param {Date} date
25517
+ * @private
25518
+ */
25519
+ __setEnteredDate(date) {
25520
+ if (date) {
25521
+ if (!dateEquals(this.__enteredDate, date)) {
25522
+ this.__enteredDate = date;
25523
+ }
25524
+ } else if (this.__enteredDate != null) {
25525
+ // Do not override initial undefined value with null
25526
+ // to avoid triggering a Lit update that can cause
25527
+ // other scheduled properties to flush too early.
25528
+ this.__enteredDate = null;
25442
25529
  }
25443
25530
  }
25444
25531
 
@@ -25722,6 +25809,7 @@ class DatePicker extends DatePickerMixin(InputControlMixin(ThemableMixin(Element
25722
25809
 
25723
25810
  /** @private */
25724
25811
  _onVaadinOverlayClose(e) {
25812
+ // Prevent closing the overlay on label element click
25725
25813
  if (e.detail.sourceEvent && e.detail.sourceEvent.composedPath().includes(this)) {
25726
25814
  e.preventDefault();
25727
25815
  }
@@ -38570,7 +38658,7 @@ const InputFieldMixin = (superclass) =>
38570
38658
  // Do not validate when focusout is caused by document
38571
38659
  // losing focus, which happens on browser tab switch.
38572
38660
  if (!focused && document.hasFocus()) {
38573
- this.validate();
38661
+ this._requestValidation();
38574
38662
  }
38575
38663
  }
38576
38664
 
@@ -38585,7 +38673,7 @@ const InputFieldMixin = (superclass) =>
38585
38673
  super._onInput(event);
38586
38674
 
38587
38675
  if (this.invalid) {
38588
- this.validate();
38676
+ this._requestValidation();
38589
38677
  }
38590
38678
  }
38591
38679
 
@@ -38606,7 +38694,7 @@ const InputFieldMixin = (superclass) =>
38606
38694
  }
38607
38695
 
38608
38696
  if (this.invalid) {
38609
- this.validate();
38697
+ this._requestValidation();
38610
38698
  }
38611
38699
  }
38612
38700
  };
@@ -38800,24 +38888,6 @@ class TextField extends TextFieldMixin(ThemableMixin(ElementMixin(PolymerElement
38800
38888
  `;
38801
38889
  }
38802
38890
 
38803
- static get properties() {
38804
- return {
38805
- /**
38806
- * Maximum number of characters (in Unicode code points) that the user can enter.
38807
- */
38808
- maxlength: {
38809
- type: Number,
38810
- },
38811
-
38812
- /**
38813
- * Minimum number of characters (in Unicode code points) that the user can enter.
38814
- */
38815
- minlength: {
38816
- type: Number,
38817
- },
38818
- };
38819
- }
38820
-
38821
38891
  /** @protected */
38822
38892
  ready() {
38823
38893
  super.ready();
@@ -43840,6 +43910,7 @@ const ComboBoxMixin = (subclass) =>
43840
43910
  /**
43841
43911
  * Override LitElement lifecycle callback to handle filter property change.
43842
43912
  * @param {Object} props
43913
+ * @protected
43843
43914
  */
43844
43915
  updated(props) {
43845
43916
  super.updated(props);
@@ -44561,7 +44632,7 @@ const ComboBoxMixin = (subclass) =>
44561
44632
  // Do not validate when focusout is caused by document
44562
44633
  // losing focus, which happens on browser tab switch.
44563
44634
  if (document.hasFocus()) {
44564
- this.validate();
44635
+ this._requestValidation();
44565
44636
  }
44566
44637
 
44567
44638
  if (this.value !== this._lastCommittedValue) {