@vaadin/combo-box 23.0.0-alpha5 → 23.0.0-beta4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/combo-box",
3
- "version": "23.0.0-alpha5",
3
+ "version": "23.0.0-beta4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -34,23 +34,23 @@
34
34
  "dependencies": {
35
35
  "@open-wc/dedupe-mixin": "^1.3.0",
36
36
  "@polymer/polymer": "^3.0.0",
37
- "@vaadin/component-base": "23.0.0-alpha5",
38
- "@vaadin/field-base": "23.0.0-alpha5",
39
- "@vaadin/input-container": "23.0.0-alpha5",
40
- "@vaadin/item": "23.0.0-alpha5",
41
- "@vaadin/vaadin-lumo-styles": "23.0.0-alpha5",
42
- "@vaadin/vaadin-material-styles": "23.0.0-alpha5",
43
- "@vaadin/vaadin-overlay": "23.0.0-alpha5",
44
- "@vaadin/vaadin-themable-mixin": "23.0.0-alpha5"
37
+ "@vaadin/component-base": "23.0.0-beta4",
38
+ "@vaadin/field-base": "23.0.0-beta4",
39
+ "@vaadin/input-container": "23.0.0-beta4",
40
+ "@vaadin/item": "23.0.0-beta4",
41
+ "@vaadin/vaadin-lumo-styles": "23.0.0-beta4",
42
+ "@vaadin/vaadin-material-styles": "23.0.0-beta4",
43
+ "@vaadin/vaadin-overlay": "23.0.0-beta4",
44
+ "@vaadin/vaadin-themable-mixin": "23.0.0-beta4"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@esm-bundle/chai": "^4.3.4",
48
- "@vaadin/dialog": "23.0.0-alpha5",
49
- "@vaadin/polymer-legacy-adapter": "23.0.0-alpha5",
48
+ "@vaadin/dialog": "23.0.0-beta4",
49
+ "@vaadin/polymer-legacy-adapter": "23.0.0-beta4",
50
50
  "@vaadin/testing-helpers": "^0.3.2",
51
- "@vaadin/text-field": "23.0.0-alpha5",
51
+ "@vaadin/text-field": "23.0.0-beta4",
52
52
  "lit": "^2.0.0",
53
53
  "sinon": "^9.2.0"
54
54
  },
55
- "gitHead": "74f9294964eb8552d96578c14af6ad214f5257bc"
55
+ "gitHead": "d0b447f1c31ca4256a5e26f2dcd27784447ff79b"
56
56
  }
@@ -423,6 +423,16 @@ export const ComboBoxMixin = (subclass) =>
423
423
  }
424
424
  }
425
425
 
426
+ /**
427
+ * @param {Event} event
428
+ * @protected
429
+ */
430
+ _onHostClick(_event) {
431
+ if (!this.autoOpenDisabled) {
432
+ this.open();
433
+ }
434
+ }
435
+
426
436
  /** @private */
427
437
  _onClick(e) {
428
438
  this._closeOnBlurIsPrevented = true;
@@ -437,8 +447,8 @@ export const ComboBoxMixin = (subclass) =>
437
447
  } else {
438
448
  this.open();
439
449
  }
440
- } else if (!this.autoOpenDisabled) {
441
- this.open();
450
+ } else {
451
+ this._onHostClick(e);
442
452
  }
443
453
 
444
454
  this._closeOnBlurIsPrevented = false;
@@ -698,6 +708,7 @@ export const ComboBoxMixin = (subclass) =>
698
708
  this.selectedItem = null;
699
709
 
700
710
  if (this.allowCustomValue) {
711
+ delete this._lastCustomValue;
701
712
  this.value = '';
702
713
  }
703
714
  } else {
@@ -714,17 +725,27 @@ export const ComboBoxMixin = (subclass) =>
714
725
  // to prevent a repetitive input value being saved after pressing ESC and Tab.
715
726
  !itemMatchingByLabel
716
727
  ) {
728
+ const customValue = this._inputElementValue;
729
+
730
+ // User's logic in `custom-value-set` event listener might cause input to blur,
731
+ // which will result in attempting to commit the same custom value once again.
732
+ if (this._lastCustomValue === customValue) {
733
+ return;
734
+ }
735
+
736
+ // Store reference to the last custom value for checking it
737
+ this._lastCustomValue = customValue;
738
+
717
739
  // An item matching by label was not found, but custom values are allowed.
718
740
  // Dispatch a custom-value-set event with the input value.
719
741
  const e = new CustomEvent('custom-value-set', {
720
- detail: this._inputElementValue,
742
+ detail: customValue,
721
743
  composed: true,
722
744
  cancelable: true,
723
745
  bubbles: true
724
746
  });
725
747
  this.dispatchEvent(e);
726
748
  if (!e.defaultPrevented) {
727
- const customValue = this._inputElementValue;
728
749
  this._selectItemForValue(customValue);
729
750
  this.value = customValue;
730
751
  }
@@ -183,8 +183,8 @@ class ComboBox extends ComboBoxDataProviderMixin(
183
183
  >
184
184
  <slot name="prefix" slot="prefix"></slot>
185
185
  <slot name="input"></slot>
186
- <div id="clearButton" part="clear-button" slot="suffix"></div>
187
- <div id="toggleButton" part="toggle-button" slot="suffix"></div>
186
+ <div id="clearButton" part="clear-button" slot="suffix" aria-hidden="true"></div>
187
+ <div id="toggleButton" part="toggle-button" slot="suffix" aria-hidden="true"></div>
188
188
  </vaadin-input-container>
189
189
 
190
190
  <div part="helper-text">
@@ -293,6 +293,19 @@ class ComboBox extends ComboBoxDataProviderMixin(
293
293
 
294
294
  this._handleClearButtonClick(event);
295
295
  }
296
+
297
+ /**
298
+ * @param {Event} event
299
+ * @protected
300
+ */
301
+ _onHostClick(event) {
302
+ const path = event.composedPath();
303
+
304
+ // Open dropdown only when clicking on the label or input field
305
+ if (path.includes(this._labelNode) || path.includes(this._positionTarget)) {
306
+ super._onHostClick(event);
307
+ }
308
+ }
296
309
  }
297
310
 
298
311
  customElements.define(ComboBox.is, ComboBox);