@vaadin/password-field 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/password-field",
3
- "version": "24.2.0-alpha1",
3
+ "version": "24.2.0-alpha10",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -35,21 +35,21 @@
35
35
  ],
36
36
  "dependencies": {
37
37
  "@polymer/polymer": "^3.0.0",
38
- "@vaadin/button": "24.2.0-alpha1",
39
- "@vaadin/component-base": "24.2.0-alpha1",
40
- "@vaadin/text-field": "24.2.0-alpha1",
41
- "@vaadin/vaadin-lumo-styles": "24.2.0-alpha1",
42
- "@vaadin/vaadin-material-styles": "24.2.0-alpha1",
43
- "@vaadin/vaadin-themable-mixin": "24.2.0-alpha1"
38
+ "@vaadin/button": "24.2.0-alpha10",
39
+ "@vaadin/component-base": "24.2.0-alpha10",
40
+ "@vaadin/text-field": "24.2.0-alpha10",
41
+ "@vaadin/vaadin-lumo-styles": "24.2.0-alpha10",
42
+ "@vaadin/vaadin-material-styles": "24.2.0-alpha10",
43
+ "@vaadin/vaadin-themable-mixin": "24.2.0-alpha10"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@esm-bundle/chai": "^4.3.4",
47
- "@vaadin/testing-helpers": "^0.4.2",
47
+ "@vaadin/testing-helpers": "^0.5.0",
48
48
  "sinon": "^13.0.2"
49
49
  },
50
50
  "web-types": [
51
51
  "web-types.json",
52
52
  "web-types.lit.json"
53
53
  ],
54
- "gitHead": "0dbb118320203ab6c0c07450a3e718815367589f"
54
+ "gitHead": "ca16b5f88b00ae05fb6d7c7e9874525048e389f0"
55
55
  }
@@ -17,6 +17,11 @@ export type PasswordFieldChangeEvent = Event & {
17
17
  */
18
18
  export type PasswordFieldInvalidChangedEvent = CustomEvent<{ value: boolean }>;
19
19
 
20
+ /**
21
+ * Fired when the `dirty` property changes.
22
+ */
23
+ export type PasswordFieldDirtyChangedEvent = CustomEvent<{ value: boolean }>;
24
+
20
25
  /**
21
26
  * Fired when the `value` property changes.
22
27
  */
@@ -30,6 +35,8 @@ export type PasswordFieldValidatedEvent = CustomEvent<{ valid: boolean }>;
30
35
  export interface PasswordFieldCustomEventMap {
31
36
  'invalid-changed': PasswordFieldInvalidChangedEvent;
32
37
 
38
+ 'dirty-changed': PasswordFieldDirtyChangedEvent;
39
+
33
40
  'value-changed': PasswordFieldValueChangedEvent;
34
41
 
35
42
  validated: PasswordFieldValidatedEvent;
@@ -68,6 +75,7 @@ export interface PasswordFieldEventMap extends HTMLElementEventMap, PasswordFiel
68
75
  * @fires {Event} input - Fired when the value is changed by the user: on every typing keystroke, and the value is cleared using the clear button.
69
76
  * @fires {Event} change - Fired when the user commits a value change.
70
77
  * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.
78
+ * @fires {CustomEvent} dirty-changed - Fired when the `dirty` property changes.
71
79
  * @fires {CustomEvent} value-changed - Fired when the `value` property changes.
72
80
  * @fires {CustomEvent} validated - Fired whenever the field is validated.
73
81
  */
@@ -125,7 +125,8 @@ export class PasswordField extends TextField {
125
125
  super();
126
126
  this._setType('password');
127
127
  this.__boundRevealButtonClick = this._onRevealButtonClick.bind(this);
128
- this.__boundRevealButtonTouchend = this._onRevealButtonTouchend.bind(this);
128
+ this.__boundRevealButtonMouseDown = this._onRevealButtonMouseDown.bind(this);
129
+ this.__lastChange = '';
129
130
  }
130
131
 
131
132
  /** @protected */
@@ -157,7 +158,7 @@ export class PasswordField extends TextField {
157
158
  btn.disabled = this.disabled;
158
159
 
159
160
  btn.addEventListener('click', this.__boundRevealButtonClick);
160
- btn.addEventListener('touchend', this.__boundRevealButtonTouchend);
161
+ btn.addEventListener('mousedown', this.__boundRevealButtonMouseDown);
161
162
  },
162
163
  });
163
164
  this.addController(this._revealButtonController);
@@ -172,6 +173,19 @@ export class PasswordField extends TextField {
172
173
  }
173
174
  }
174
175
 
176
+ /**
177
+ * Override an event listener inherited from `InputControlMixin`
178
+ * to store the value at the moment of the native `change` event.
179
+ * @param {Event} event
180
+ * @protected
181
+ * @override
182
+ */
183
+ _onChange(event) {
184
+ super._onChange(event);
185
+
186
+ this.__lastChange = this.inputElement.value;
187
+ }
188
+
175
189
  /**
176
190
  * Override method inherited from `FocusMixin` to mark field as focused
177
191
  * when focus moves to the reveal button using Shift Tab.
@@ -208,6 +222,12 @@ export class PasswordField extends TextField {
208
222
 
209
223
  if (!focused) {
210
224
  this._setPasswordVisible(false);
225
+
226
+ // Detect if `focusout` was prevented and if so, dispatch `change` event manually.
227
+ if (this.__lastChange !== this.inputElement.value) {
228
+ this.__lastChange = this.inputElement.value;
229
+ this.dispatchEvent(new CustomEvent('change', { bubbles: true }));
230
+ }
211
231
  } else {
212
232
  const isButtonFocused = this.getRootNode().activeElement === this._revealNode;
213
233
  // Remove focus-ring from the field when the reveal button gets focused
@@ -243,10 +263,10 @@ export class PasswordField extends TextField {
243
263
  }
244
264
 
245
265
  /** @private */
246
- _onRevealButtonTouchend(e) {
247
- // Cancel the following click event
266
+ _onRevealButtonMouseDown(e) {
267
+ // Cancel the following focusout event
248
268
  e.preventDefault();
249
- this._togglePasswordVisibility();
269
+
250
270
  // Focus the input to avoid problem with password still visible
251
271
  // when user clicks the reveal button and then clicks outside.
252
272
  this.inputElement.focus();
package/web-types.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/password-field",
4
- "version": "24.2.0-alpha1",
4
+ "version": "24.2.0-alpha10",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "elements": [
9
9
  {
10
10
  "name": "vaadin-password-field",
11
- "description": "`<vaadin-password-field>` is an extension of `<vaadin-text-field>` component for entering passwords.\n\n```html\n<vaadin-password-field label=\"Password\"></vaadin-password-field>\n```\n\n### Styling\n\n`<vaadin-password-field>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.\nSee [`<vaadin-text-field>`](https://cdn.vaadin.com/vaadin-web-components/24.2.0-alpha1/#/elements/vaadin-text-field) for the styling documentation.\n\nIn addition to `<vaadin-text-field>` parts, the following parts are available for theming:\n\nPart name | Description\n----------------|----------------------------------------------------\n`reveal-button` | The eye icon which toggles the password visibility\n\nIn addition to `<vaadin-text-field>` state attributes, the following state attributes are available for theming:\n\nAttribute | Description\n-------------------|---------------------------------\n`password-visible` | Set when the password is visible\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
11
+ "description": "`<vaadin-password-field>` is an extension of `<vaadin-text-field>` component for entering passwords.\n\n```html\n<vaadin-password-field label=\"Password\"></vaadin-password-field>\n```\n\n### Styling\n\n`<vaadin-password-field>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.\nSee [`<vaadin-text-field>`](https://cdn.vaadin.com/vaadin-web-components/24.2.0-alpha10/#/elements/vaadin-text-field) for the styling documentation.\n\nIn addition to `<vaadin-text-field>` parts, the following parts are available for theming:\n\nPart name | Description\n----------------|----------------------------------------------------\n`reveal-button` | The eye icon which toggles the password visibility\n\nIn addition to `<vaadin-text-field>` state attributes, the following state attributes are available for theming:\n\nAttribute | Description\n-------------------|---------------------------------\n`password-visible` | Set when the password is visible\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
12
12
  "attributes": [
13
13
  {
14
14
  "name": "disabled",
@@ -120,6 +120,17 @@
120
120
  ]
121
121
  }
122
122
  },
123
+ {
124
+ "name": "dirty",
125
+ "description": "Whether the field is dirty.\n\nThe field is automatically marked as dirty once the user triggers\nan `input` or `change` event. Additionally, the field can be manually\nmarked as dirty by setting the property to `true`.",
126
+ "value": {
127
+ "type": [
128
+ "boolean",
129
+ "null",
130
+ "undefined"
131
+ ]
132
+ }
133
+ },
123
134
  {
124
135
  "name": "clear-button-visible",
125
136
  "description": "Set to true to display the clear icon which clears the input.\n\nIt is up to the component to choose where to place the clear icon:\nin the Shadow DOM or in the light DOM. In any way, a reference to\nthe clear icon element should be provided via the `clearElement` getter.",
@@ -398,6 +409,17 @@
398
409
  ]
399
410
  }
400
411
  },
412
+ {
413
+ "name": "dirty",
414
+ "description": "Whether the field is dirty.\n\nThe field is automatically marked as dirty once the user triggers\nan `input` or `change` event. Additionally, the field can be manually\nmarked as dirty by setting the property to `true`.",
415
+ "value": {
416
+ "type": [
417
+ "boolean",
418
+ "null",
419
+ "undefined"
420
+ ]
421
+ }
422
+ },
401
423
  {
402
424
  "name": "clearButtonVisible",
403
425
  "description": "Set to true to display the clear icon which clears the input.\n\nIt is up to the component to choose where to place the clear icon:\nin the Shadow DOM or in the light DOM. In any way, a reference to\nthe clear icon element should be provided via the `clearElement` getter.",
@@ -584,6 +606,10 @@
584
606
  {
585
607
  "name": "value-changed",
586
608
  "description": "Fired when the `value` property changes."
609
+ },
610
+ {
611
+ "name": "dirty-changed",
612
+ "description": "Fired when the `dirty` property changes."
587
613
  }
588
614
  ]
589
615
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/password-field",
4
- "version": "24.2.0-alpha1",
4
+ "version": "24.2.0-alpha10",
5
5
  "description-markup": "markdown",
6
6
  "framework": "lit",
7
7
  "framework-config": {
@@ -16,7 +16,7 @@
16
16
  "elements": [
17
17
  {
18
18
  "name": "vaadin-password-field",
19
- "description": "`<vaadin-password-field>` is an extension of `<vaadin-text-field>` component for entering passwords.\n\n```html\n<vaadin-password-field label=\"Password\"></vaadin-password-field>\n```\n\n### Styling\n\n`<vaadin-password-field>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.\nSee [`<vaadin-text-field>`](https://cdn.vaadin.com/vaadin-web-components/24.2.0-alpha1/#/elements/vaadin-text-field) for the styling documentation.\n\nIn addition to `<vaadin-text-field>` parts, the following parts are available for theming:\n\nPart name | Description\n----------------|----------------------------------------------------\n`reveal-button` | The eye icon which toggles the password visibility\n\nIn addition to `<vaadin-text-field>` state attributes, the following state attributes are available for theming:\n\nAttribute | Description\n-------------------|---------------------------------\n`password-visible` | Set when the password is visible\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
19
+ "description": "`<vaadin-password-field>` is an extension of `<vaadin-text-field>` component for entering passwords.\n\n```html\n<vaadin-password-field label=\"Password\"></vaadin-password-field>\n```\n\n### Styling\n\n`<vaadin-password-field>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.\nSee [`<vaadin-text-field>`](https://cdn.vaadin.com/vaadin-web-components/24.2.0-alpha10/#/elements/vaadin-text-field) for the styling documentation.\n\nIn addition to `<vaadin-text-field>` parts, the following parts are available for theming:\n\nPart name | Description\n----------------|----------------------------------------------------\n`reveal-button` | The eye icon which toggles the password visibility\n\nIn addition to `<vaadin-text-field>` state attributes, the following state attributes are available for theming:\n\nAttribute | Description\n-------------------|---------------------------------\n`password-visible` | Set when the password is visible\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
20
20
  "extension": true,
21
21
  "attributes": [
22
22
  {
@@ -47,6 +47,13 @@
47
47
  "kind": "expression"
48
48
  }
49
49
  },
50
+ {
51
+ "name": "?dirty",
52
+ "description": "Whether the field is dirty.\n\nThe field is automatically marked as dirty once the user triggers\nan `input` or `change` event. Additionally, the field can be manually\nmarked as dirty by setting the property to `true`.",
53
+ "value": {
54
+ "kind": "expression"
55
+ }
56
+ },
50
57
  {
51
58
  "name": "?clearButtonVisible",
52
59
  "description": "Set to true to display the clear icon which clears the input.\n\nIt is up to the component to choose where to place the clear icon:\nin the Shadow DOM or in the light DOM. In any way, a reference to\nthe clear icon element should be provided via the `clearElement` getter.",
@@ -228,6 +235,13 @@
228
235
  "value": {
229
236
  "kind": "expression"
230
237
  }
238
+ },
239
+ {
240
+ "name": "@dirty-changed",
241
+ "description": "Fired when the `dirty` property changes.",
242
+ "value": {
243
+ "kind": "expression"
244
+ }
231
245
  }
232
246
  ]
233
247
  }