@vaadin/text-area 23.0.0-beta1 → 23.0.0-beta5

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/text-area",
3
- "version": "23.0.0-beta1",
3
+ "version": "23.0.0-beta5",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -33,17 +33,17 @@
33
33
  ],
34
34
  "dependencies": {
35
35
  "@polymer/polymer": "^3.0.0",
36
- "@vaadin/component-base": "23.0.0-beta1",
37
- "@vaadin/field-base": "23.0.0-beta1",
38
- "@vaadin/input-container": "23.0.0-beta1",
39
- "@vaadin/vaadin-lumo-styles": "23.0.0-beta1",
40
- "@vaadin/vaadin-material-styles": "23.0.0-beta1",
41
- "@vaadin/vaadin-themable-mixin": "23.0.0-beta1"
36
+ "@vaadin/component-base": "23.0.0-beta5",
37
+ "@vaadin/field-base": "23.0.0-beta5",
38
+ "@vaadin/input-container": "23.0.0-beta5",
39
+ "@vaadin/vaadin-lumo-styles": "23.0.0-beta5",
40
+ "@vaadin/vaadin-material-styles": "23.0.0-beta5",
41
+ "@vaadin/vaadin-themable-mixin": "23.0.0-beta5"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@esm-bundle/chai": "^4.3.4",
45
45
  "@vaadin/testing-helpers": "^0.3.2",
46
46
  "sinon": "^9.2.1"
47
47
  },
48
- "gitHead": "467244b76021176c109df675799b07029b293e58"
48
+ "gitHead": "4c388aeec6623869c70896c909799804fc95d0f9"
49
49
  }
@@ -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 { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
7
+ import { ResizeMixin } from '@vaadin/component-base/src/resize-mixin.js';
7
8
  import { InputFieldMixin } from '@vaadin/field-base/src/input-field-mixin.js';
8
9
  import { PatternMixin } from '@vaadin/field-base/src/pattern-mixin.js';
9
10
  import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
@@ -76,7 +77,7 @@ export interface TextAreaEventMap extends HTMLElementEventMap, TextAreaCustomEve
76
77
  * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.
77
78
  * @fires {CustomEvent} value-changed - Fired when the `value` property changes.
78
79
  */
79
- declare class TextArea extends PatternMixin(InputFieldMixin(ThemableMixin(ElementMixin(HTMLElement)))) {
80
+ declare class TextArea extends ResizeMixin(PatternMixin(InputFieldMixin(ThemableMixin(ElementMixin(HTMLElement))))) {
80
81
  /**
81
82
  * Maximum number of characters (in Unicode code points) that the user can enter.
82
83
  */
@@ -6,6 +6,7 @@
6
6
  import '@vaadin/input-container/src/vaadin-input-container.js';
7
7
  import { html, PolymerElement } from '@polymer/polymer';
8
8
  import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
9
+ import { ResizeMixin } from '@vaadin/component-base/src/resize-mixin.js';
9
10
  import { InputFieldMixin } from '@vaadin/field-base/src/input-field-mixin.js';
10
11
  import { LabelledInputController } from '@vaadin/field-base/src/labelled-input-controller.js';
11
12
  import { PatternMixin } from '@vaadin/field-base/src/pattern-mixin.js';
@@ -59,8 +60,9 @@ registerStyles('vaadin-text-area', inputFieldShared, { moduleId: 'vaadin-text-ar
59
60
  * @mixes ElementMixin
60
61
  * @mixes PatternMixin
61
62
  * @mixes ThemableMixin
63
+ * @mixes ResizeMixin
62
64
  */
63
- export class TextArea extends PatternMixin(InputFieldMixin(ThemableMixin(ElementMixin(PolymerElement)))) {
65
+ export class TextArea extends ResizeMixin(PatternMixin(InputFieldMixin(ThemableMixin(ElementMixin(PolymerElement))))) {
64
66
  static get is() {
65
67
  return 'vaadin-text-area';
66
68
  }
@@ -140,11 +142,12 @@ export class TextArea extends PatternMixin(InputFieldMixin(ThemableMixin(Element
140
142
  disabled="[[disabled]]"
141
143
  invalid="[[invalid]]"
142
144
  theme$="[[theme]]"
145
+ on-scroll="__scrollPositionUpdated"
143
146
  >
144
147
  <slot name="prefix" slot="prefix"></slot>
145
148
  <slot name="textarea"></slot>
146
149
  <slot name="suffix" slot="suffix"></slot>
147
- <div id="clearButton" part="clear-button" slot="suffix"></div>
150
+ <div id="clearButton" part="clear-button" slot="suffix" aria-hidden="true"></div>
148
151
  </vaadin-input-container>
149
152
 
150
153
  <div part="helper-text">
@@ -197,7 +200,26 @@ export class TextArea extends PatternMixin(InputFieldMixin(ThemableMixin(Element
197
200
  super.connectedCallback();
198
201
 
199
202
  this._inputField = this.shadowRoot.querySelector('[part=input-field]');
203
+
204
+ // Wheel scrolling results in async scroll events. Preventing the wheel
205
+ // event, scrolling manually and then synchronously updating the scroll position CSS variable
206
+ // allows us to avoid some jumpy behavior that would occur on wheel otherwise.
207
+ this._inputField.addEventListener('wheel', (e) => {
208
+ e.preventDefault();
209
+ this._inputField.scrollTop += e.deltaY;
210
+ this.__scrollPositionUpdated();
211
+ });
212
+
200
213
  this._updateHeight();
214
+ this.__scrollPositionUpdated();
215
+ }
216
+
217
+ /**
218
+ * @protected
219
+ * @override
220
+ */
221
+ _onResize() {
222
+ this.__scrollPositionUpdated();
201
223
  }
202
224
 
203
225
  /** @protected */
@@ -216,6 +238,12 @@ export class TextArea extends PatternMixin(InputFieldMixin(ThemableMixin(Element
216
238
  this.addEventListener('animationend', this._onAnimationEnd);
217
239
  }
218
240
 
241
+ /** @private */
242
+ __scrollPositionUpdated() {
243
+ this._inputField.style.setProperty('--_text-area-vertical-scroll-position', '0px');
244
+ this._inputField.style.setProperty('--_text-area-vertical-scroll-position', this._inputField.scrollTop + 'px');
245
+ }
246
+
219
247
  /** @private */
220
248
  _onAnimationEnd(e) {
221
249
  if (e.animationName.indexOf('vaadin-text-area-appear') === 0) {
@@ -21,6 +21,11 @@ const textArea = css`
21
21
  white-space: pre-wrap; /* override "nowrap" from <vaadin-text-field> */
22
22
  align-self: stretch; /* override "baseline" from <vaadin-text-field> */
23
23
  }
24
+
25
+ [part='input-field']::before,
26
+ [part='input-field']::after {
27
+ bottom: calc(var(--_text-area-vertical-scroll-position) * -1);
28
+ }
24
29
  `;
25
30
 
26
31
  registerStyles('vaadin-text-area', [inputFieldShared, textArea], { moduleId: 'material-text-area' });