@vaadin/text-area 23.0.0-alpha4 → 23.0.0-beta3
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-
|
|
3
|
+
"version": "23.0.0-beta3",
|
|
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-
|
|
37
|
-
"@vaadin/field-base": "23.0.0-
|
|
38
|
-
"@vaadin/input-container": "23.0.0-
|
|
39
|
-
"@vaadin/vaadin-lumo-styles": "23.0.0-
|
|
40
|
-
"@vaadin/vaadin-material-styles": "23.0.0-
|
|
41
|
-
"@vaadin/vaadin-themable-mixin": "23.0.0-
|
|
36
|
+
"@vaadin/component-base": "23.0.0-beta3",
|
|
37
|
+
"@vaadin/field-base": "23.0.0-beta3",
|
|
38
|
+
"@vaadin/input-container": "23.0.0-beta3",
|
|
39
|
+
"@vaadin/vaadin-lumo-styles": "23.0.0-beta3",
|
|
40
|
+
"@vaadin/vaadin-material-styles": "23.0.0-beta3",
|
|
41
|
+
"@vaadin/vaadin-themable-mixin": "23.0.0-beta3"
|
|
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": "
|
|
48
|
+
"gitHead": "4c87216666541f9eb58f56c475964727822aad53"
|
|
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
|
*/
|
package/src/vaadin-text-area.js
CHANGED
|
@@ -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' });
|