@vaadin/field-base 24.2.0-alpha1 → 24.2.0-alpha10

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/field-base",
3
- "version": "24.2.0-alpha1",
3
+ "version": "24.2.0-alpha10",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -32,14 +32,14 @@
32
32
  "dependencies": {
33
33
  "@open-wc/dedupe-mixin": "^1.3.0",
34
34
  "@polymer/polymer": "^3.0.0",
35
- "@vaadin/a11y-base": "24.2.0-alpha1",
36
- "@vaadin/component-base": "24.2.0-alpha1",
35
+ "@vaadin/a11y-base": "24.2.0-alpha10",
36
+ "@vaadin/component-base": "24.2.0-alpha10",
37
37
  "lit": "^2.0.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@esm-bundle/chai": "^4.3.4",
41
- "@vaadin/testing-helpers": "^0.4.2",
41
+ "@vaadin/testing-helpers": "^0.5.0",
42
42
  "sinon": "^13.0.2"
43
43
  },
44
- "gitHead": "0dbb118320203ab6c0c07450a3e718815367589f"
44
+ "gitHead": "ca16b5f88b00ae05fb6d7c7e9874525048e389f0"
45
45
  }
@@ -47,6 +47,8 @@ export const CheckedMixin = dedupingMixin(
47
47
  _onChange(event) {
48
48
  const input = event.target;
49
49
 
50
+ this.dirty = true;
51
+
50
52
  this._toggleChecked(input.checked);
51
53
 
52
54
  // Clicking the checkbox or radio-button in Safari
@@ -4,6 +4,7 @@
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { KeyboardMixin } from '@vaadin/a11y-base/src/keyboard-mixin.js';
7
+ import { isTouch } from '@vaadin/component-base/src/browser-utils.js';
7
8
  import { InputMixin } from './input-mixin.js';
8
9
 
9
10
  /**
@@ -51,6 +52,7 @@ export const ClearButtonMixin = (superclass) =>
51
52
  super.ready();
52
53
 
53
54
  if (this.clearElement) {
55
+ this.clearElement.addEventListener('mousedown', (event) => this._onClearButtonMouseDown(event));
54
56
  this.clearElement.addEventListener('click', (event) => this._onClearButtonClick(event));
55
57
  }
56
58
  }
@@ -61,10 +63,20 @@ export const ClearButtonMixin = (superclass) =>
61
63
  */
62
64
  _onClearButtonClick(event) {
63
65
  event.preventDefault();
64
- this.inputElement.focus();
65
66
  this._onClearAction();
66
67
  }
67
68
 
69
+ /**
70
+ * @param {MouseEvent} event
71
+ * @protected
72
+ */
73
+ _onClearButtonMouseDown(event) {
74
+ event.preventDefault();
75
+ if (!isTouch) {
76
+ this.inputElement.focus();
77
+ }
78
+ }
79
+
68
80
  /**
69
81
  * Override an event listener inherited from `KeydownMixin` to clear on Esc.
70
82
  * Components that extend this mixin can prevent this behavior by overriding
@@ -94,7 +94,9 @@ export const InputFieldMixin = (superclass) =>
94
94
  _setFocused(focused) {
95
95
  super._setFocused(focused);
96
96
 
97
- if (!focused) {
97
+ // Do not validate when focusout is caused by document
98
+ // losing focus, which happens on browser tab switch.
99
+ if (!focused && document.hasFocus()) {
98
100
  this.validate();
99
101
  }
100
102
  }
@@ -28,6 +28,15 @@ export declare class InputMixinClass {
28
28
  */
29
29
  value: string;
30
30
 
31
+ /**
32
+ * Whether the field is dirty.
33
+ *
34
+ * The field is automatically marked as dirty once the user triggers
35
+ * an `input` or `change` event. Additionally, the field can be manually
36
+ * marked as dirty by setting the property to `true`.
37
+ */
38
+ dirty: boolean;
39
+
31
40
  /**
32
41
  * Indicates whether the value is different from the default one.
33
42
  * Override if the `value` property has a type other than `string`.
@@ -53,6 +53,19 @@ export const InputMixin = dedupingMixin(
53
53
  notify: true,
54
54
  },
55
55
 
56
+ /**
57
+ * Whether the field is dirty.
58
+ *
59
+ * The field is automatically marked as dirty once the user triggers
60
+ * an `input` or `change` event. Additionally, the field can be manually
61
+ * marked as dirty by setting the property to `true`.
62
+ */
63
+ dirty: {
64
+ type: Boolean,
65
+ value: false,
66
+ notify: true,
67
+ },
68
+
56
69
  /**
57
70
  * Whether the input element has a non-empty value.
58
71
  *
@@ -194,7 +207,7 @@ export const InputMixin = dedupingMixin(
194
207
  }
195
208
 
196
209
  /**
197
- * An input event listener used to update `_hasInputValue` property.
210
+ * An input event listener used to update `_hasInputValue` and `dirty` properties.
198
211
  * Do not override this method.
199
212
  *
200
213
  * @param {Event} event
@@ -202,6 +215,7 @@ export const InputMixin = dedupingMixin(
202
215
  */
203
216
  __onInput(event) {
204
217
  this._setHasInputValue(event);
218
+ this.dirty = true;
205
219
  this._onInput(event);
206
220
  }
207
221