@justeattakeaway/pie-textarea 0.8.0 → 0.10.0
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/custom-elements.json +17 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +103 -96
- package/dist/react.d.ts +5 -0
- package/package.json +1 -1
- package/src/defs.ts +6 -0
- package/src/index.ts +6 -0
- package/src/textarea.scss +14 -1
package/custom-elements.json
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"type": {
|
|
43
43
|
"text": "DefaultProps"
|
|
44
44
|
},
|
|
45
|
-
"default": "{\n disabled: false,\n size: 'medium',\n resize: 'auto',\n label: '',\n value: '',\n status: 'default',\n autoFocus: false,\n readonly: false,\n required: false,\n}",
|
|
45
|
+
"default": "{\n disabled: false,\n size: 'medium',\n resize: 'auto',\n label: '',\n value: '',\n placeholder: '',\n status: 'default',\n autoFocus: false,\n readonly: false,\n required: false,\n}",
|
|
46
46
|
"description": "Default values for optional properties that have default fallback values in the component."
|
|
47
47
|
}
|
|
48
48
|
],
|
|
@@ -199,6 +199,15 @@
|
|
|
199
199
|
"privacy": "public",
|
|
200
200
|
"attribute": "autocomplete"
|
|
201
201
|
},
|
|
202
|
+
{
|
|
203
|
+
"kind": "field",
|
|
204
|
+
"name": "placeholder",
|
|
205
|
+
"type": {
|
|
206
|
+
"text": "TextareaProps['placeholder']"
|
|
207
|
+
},
|
|
208
|
+
"privacy": "public",
|
|
209
|
+
"attribute": "placeholder"
|
|
210
|
+
},
|
|
202
211
|
{
|
|
203
212
|
"kind": "field",
|
|
204
213
|
"name": "_textarea",
|
|
@@ -404,6 +413,13 @@
|
|
|
404
413
|
"text": "TextareaProps['autocomplete']"
|
|
405
414
|
},
|
|
406
415
|
"fieldName": "autocomplete"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"name": "placeholder",
|
|
419
|
+
"type": {
|
|
420
|
+
"text": "TextareaProps['placeholder']"
|
|
421
|
+
},
|
|
422
|
+
"fieldName": "placeholder"
|
|
407
423
|
}
|
|
408
424
|
],
|
|
409
425
|
"mixins": [
|
package/dist/index.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ export declare class PieTextarea extends PieTextarea_base implements TextareaPro
|
|
|
44
44
|
assistiveText: TextareaProps['assistiveText'];
|
|
45
45
|
name: TextareaProps['name'];
|
|
46
46
|
autocomplete: TextareaProps['autocomplete'];
|
|
47
|
+
placeholder: TextareaProps['placeholder'];
|
|
47
48
|
private _textarea;
|
|
48
49
|
focusTarget: HTMLElement;
|
|
49
50
|
private _throttledResize;
|
|
@@ -154,6 +155,10 @@ export declare interface TextareaProps {
|
|
|
154
155
|
* If the `label` property is not set, this property will have no effect.
|
|
155
156
|
*/
|
|
156
157
|
maxLength?: number;
|
|
158
|
+
/**
|
|
159
|
+
* The placeholder text to display when the textarea is empty.
|
|
160
|
+
*/
|
|
161
|
+
placeholder?: string;
|
|
157
162
|
}
|
|
158
163
|
|
|
159
164
|
export { }
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { LitElement as
|
|
2
|
-
import { property as l, query as
|
|
1
|
+
import { LitElement as P, html as W, nothing as R, unsafeCSS as A } from "lit";
|
|
2
|
+
import { property as l, query as V } from "lit/decorators.js";
|
|
3
3
|
import { classMap as K } from "lit/directives/class-map.js";
|
|
4
4
|
import { ifDefined as b } from "lit/directives/if-defined.js";
|
|
5
5
|
import { live as G } from "lit/directives/live.js";
|
|
@@ -10,81 +10,81 @@ var T = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : ty
|
|
|
10
10
|
function Q(t) {
|
|
11
11
|
return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t;
|
|
12
12
|
}
|
|
13
|
-
var
|
|
14
|
-
return
|
|
13
|
+
var q = "Expected a function", D = 0 / 0, Y = "[object Symbol]", Z = /^\s+|\s+$/g, ee = /^[-+]0x[0-9a-f]+$/i, te = /^0b[01]+$/i, ae = /^0o[0-7]+$/i, re = parseInt, ie = typeof T == "object" && T && T.Object === Object && T, oe = typeof self == "object" && self && self.Object === Object && self, ne = ie || oe || Function("return this")(), se = Object.prototype, le = se.toString, de = Math.max, ce = Math.min, j = function() {
|
|
14
|
+
return ne.Date.now();
|
|
15
15
|
};
|
|
16
16
|
function ue(t, e, a) {
|
|
17
|
-
var
|
|
17
|
+
var i, o, p, u, d, h, f = 0, k = !1, v = !1, y = !0;
|
|
18
18
|
if (typeof t != "function")
|
|
19
|
-
throw new TypeError(
|
|
20
|
-
e =
|
|
21
|
-
function
|
|
22
|
-
var
|
|
23
|
-
return
|
|
19
|
+
throw new TypeError(q);
|
|
20
|
+
e = M(e) || 0, _(a) && (k = !!a.leading, v = "maxWait" in a, p = v ? de(M(a.maxWait) || 0, e) : p, y = "trailing" in a ? !!a.trailing : y);
|
|
21
|
+
function g(n) {
|
|
22
|
+
var x = i, z = o;
|
|
23
|
+
return i = o = void 0, f = n, u = t.apply(z, x), u;
|
|
24
24
|
}
|
|
25
|
-
function
|
|
26
|
-
return
|
|
25
|
+
function S(n) {
|
|
26
|
+
return f = n, d = setTimeout($, e), k ? g(n) : u;
|
|
27
27
|
}
|
|
28
|
-
function
|
|
29
|
-
var
|
|
30
|
-
return v ? ce(
|
|
28
|
+
function w(n) {
|
|
29
|
+
var x = n - h, z = n - f, F = e - x;
|
|
30
|
+
return v ? ce(F, p - z) : F;
|
|
31
31
|
}
|
|
32
32
|
function I(n) {
|
|
33
|
-
var
|
|
34
|
-
return
|
|
33
|
+
var x = n - h, z = n - f;
|
|
34
|
+
return h === void 0 || x >= e || x < 0 || v && z >= p;
|
|
35
35
|
}
|
|
36
36
|
function $() {
|
|
37
37
|
var n = j();
|
|
38
38
|
if (I(n))
|
|
39
|
-
return
|
|
40
|
-
d = setTimeout($,
|
|
39
|
+
return C(n);
|
|
40
|
+
d = setTimeout($, w(n));
|
|
41
41
|
}
|
|
42
|
-
function
|
|
43
|
-
return d = void 0,
|
|
42
|
+
function C(n) {
|
|
43
|
+
return d = void 0, y && i ? g(n) : (i = o = void 0, u);
|
|
44
44
|
}
|
|
45
45
|
function B() {
|
|
46
|
-
d !== void 0 && clearTimeout(d),
|
|
46
|
+
d !== void 0 && clearTimeout(d), f = 0, i = h = o = d = void 0;
|
|
47
47
|
}
|
|
48
48
|
function N() {
|
|
49
|
-
return d === void 0 ? u :
|
|
49
|
+
return d === void 0 ? u : C(j());
|
|
50
50
|
}
|
|
51
|
-
function
|
|
52
|
-
var n = j(),
|
|
53
|
-
if (
|
|
51
|
+
function L() {
|
|
52
|
+
var n = j(), x = I(n);
|
|
53
|
+
if (i = arguments, o = this, h = n, x) {
|
|
54
54
|
if (d === void 0)
|
|
55
|
-
return
|
|
55
|
+
return S(h);
|
|
56
56
|
if (v)
|
|
57
|
-
return d = setTimeout($, e),
|
|
57
|
+
return d = setTimeout($, e), g(h);
|
|
58
58
|
}
|
|
59
59
|
return d === void 0 && (d = setTimeout($, e)), u;
|
|
60
60
|
}
|
|
61
|
-
return
|
|
61
|
+
return L.cancel = B, L.flush = N, L;
|
|
62
62
|
}
|
|
63
|
-
function
|
|
64
|
-
var
|
|
63
|
+
function pe(t, e, a) {
|
|
64
|
+
var i = !0, o = !0;
|
|
65
65
|
if (typeof t != "function")
|
|
66
|
-
throw new TypeError(
|
|
67
|
-
return _(a) && (
|
|
68
|
-
leading:
|
|
66
|
+
throw new TypeError(q);
|
|
67
|
+
return _(a) && (i = "leading" in a ? !!a.leading : i, o = "trailing" in a ? !!a.trailing : o), ue(t, e, {
|
|
68
|
+
leading: i,
|
|
69
69
|
maxWait: e,
|
|
70
|
-
trailing:
|
|
70
|
+
trailing: o
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
function _(t) {
|
|
74
74
|
var e = typeof t;
|
|
75
75
|
return !!t && (e == "object" || e == "function");
|
|
76
76
|
}
|
|
77
|
-
function
|
|
77
|
+
function he(t) {
|
|
78
78
|
return !!t && typeof t == "object";
|
|
79
79
|
}
|
|
80
|
-
function
|
|
81
|
-
return typeof t == "symbol" ||
|
|
80
|
+
function xe(t) {
|
|
81
|
+
return typeof t == "symbol" || he(t) && le.call(t) == Y;
|
|
82
82
|
}
|
|
83
|
-
function
|
|
83
|
+
function M(t) {
|
|
84
84
|
if (typeof t == "number")
|
|
85
85
|
return t;
|
|
86
|
-
if (
|
|
87
|
-
return
|
|
86
|
+
if (xe(t))
|
|
87
|
+
return D;
|
|
88
88
|
if (_(t)) {
|
|
89
89
|
var e = typeof t.valueOf == "function" ? t.valueOf() : t;
|
|
90
90
|
t = _(e) ? e + "" : e;
|
|
@@ -93,28 +93,29 @@ function D(t) {
|
|
|
93
93
|
return t === 0 ? t : +t;
|
|
94
94
|
t = t.replace(Z, "");
|
|
95
95
|
var a = te.test(t);
|
|
96
|
-
return a || ae.test(t) ? re(t.slice(2), a ? 2 : 8) : ee.test(t) ?
|
|
96
|
+
return a || ae.test(t) ? re(t.slice(2), a ? 2 : 8) : ee.test(t) ? D : +t;
|
|
97
97
|
}
|
|
98
|
-
var
|
|
99
|
-
const ve = /* @__PURE__ */ Q(
|
|
100
|
-
`,
|
|
98
|
+
var fe = pe;
|
|
99
|
+
const ve = /* @__PURE__ */ Q(fe), ge = `*,*:after,*:before{box-sizing:inherit}.c-textareaWrapper{--textarea-line-height: calc(var(--dt-font-body-l-line-height) * 1px);--textarea-border-thickness: 1px;--textarea-resize: none;--textarea-padding-inline: var(--dt-spacing-c);--textarea-padding-block: var(--dt-spacing-b);--textarea-background-color: var(--dt-color-container-default);--textarea-border-color: var(--dt-color-interactive-form);--textarea-content-color: var(--dt-color-content-default);--textarea-placeholder-color: var(--dt-color-content-placeholder);--textarea-height: calc((var(--textarea-line-height) * 2) + (var(--textarea-padding-block) * 2));line-height:0;padding:var(--dt-spacing-a);border:var(--textarea-border-thickness) solid var(--textarea-border-color);background-color:var(--textarea-background-color);border-radius:var(--dt-radius-rounded-c);inline-size:100%}.c-textareaWrapper textarea{font-size:calc(var(--dt-font-body-l-size) * 1px);line-height:var(--textarea-line-height);font-family:var(--dt-font-body-l-family);resize:var(--textarea-resize);border:none;background-color:var(--textarea-background-color);color:var(--textarea-content-color);block-size:var(--textarea-height);max-block-size:var(--textarea-max-height);min-block-size:var(--textarea-min-height);inline-size:100%;padding-block-start:var(--textarea-padding-block);padding-block-end:var(--textarea-padding-block);padding-inline-start:var(--textarea-padding-inline);padding-inline-end:var(--textarea-padding-inline)}.c-textareaWrapper textarea:focus{box-shadow:none;outline:none}.c-textareaWrapper textarea::placeholder{color:var(--textarea-placeholder-color);opacity:1}.c-textareaWrapper.c-textarea--readonly{--textarea-background-color: var(--dt-color-container-subtle);--textarea-border-color: var(--dt-color-interactive-form)}.c-textareaWrapper.c-textarea--disabled{--textarea-background-color: var(--dt-color-disabled-01);--textarea-border-color: var(--dt-color-disabled-01);--textarea-content-color: var(--dt-color-content-disabled);--textarea-placeholder-color: var(--dt-color-content-disabled)}@media (hover: hover){.c-textareaWrapper:hover:not(.c-textarea--disabled,.c-textarea--readonly){--textarea-background-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-hover-01))))}}.c-textareaWrapper:focus-within{box-shadow:0 0 0 2px var(--dt-color-focus-inner),0 0 0 4px var(--dt-color-focus-outer);outline:none}.c-textareaWrapper.c-textarea--large{--textarea-padding-block: var(--dt-spacing-c)}.c-textareaWrapper.c-textarea--small{--textarea-padding-block: var(--dt-spacing-a)}.c-textareaWrapper.c-textarea--resize-manual{--textarea-resize: vertical;--textarea-min-height: calc((var(--textarea-line-height) * 1) + (var(--textarea-padding-block) * 2))}@media (pointer: coarse){.c-textareaWrapper.c-textarea--resize-manual{--textarea-height: calc((var(--textarea-line-height) * 6) + (var(--textarea-padding-block) * 2));--textarea-min-height: calc((var(--textarea-line-height) * 6) + (var(--textarea-padding-block) * 2));--textarea-max-height: calc((var(--textarea-line-height) * 6) + (var(--textarea-padding-block) * 2));--textarea-resize: none}}.c-textareaWrapper.c-textarea--resize-auto{--textarea-max-height: calc((var(--textarea-line-height) * 6) + (var(--textarea-padding-block) * 2));--textarea-min-height: var(--textarea-height)}.c-textareaWrapper.c-textarea--error{--textarea-border-color: var(--dt-color-support-error)}
|
|
100
|
+
`, be = ["small", "medium", "large"], me = ["auto", "manual"], ye = ["default", "success", "error"], c = {
|
|
101
101
|
disabled: !1,
|
|
102
102
|
size: "medium",
|
|
103
103
|
resize: "auto",
|
|
104
104
|
label: "",
|
|
105
105
|
value: "",
|
|
106
|
+
placeholder: "",
|
|
106
107
|
status: "default",
|
|
107
108
|
autoFocus: !1,
|
|
108
109
|
readonly: !1,
|
|
109
110
|
required: !1
|
|
110
111
|
};
|
|
111
|
-
var ze = Object.defineProperty, ke = Object.getOwnPropertyDescriptor, s = (t, e, a,
|
|
112
|
-
for (var
|
|
113
|
-
(u = t[
|
|
114
|
-
return
|
|
112
|
+
var ze = Object.defineProperty, ke = Object.getOwnPropertyDescriptor, s = (t, e, a, i) => {
|
|
113
|
+
for (var o = i > 1 ? void 0 : i ? ke(e, a) : e, p = t.length - 1, u; p >= 0; p--)
|
|
114
|
+
(u = t[p]) && (o = (i ? u(e, a, o) : u(o)) || o);
|
|
115
|
+
return i && o && ze(e, a, o), o;
|
|
115
116
|
};
|
|
116
117
|
const m = "pie-textarea", E = "assistive-text";
|
|
117
|
-
class
|
|
118
|
+
class r extends H(U(P)) {
|
|
118
119
|
constructor() {
|
|
119
120
|
super(...arguments), this.value = c.value, this.disabled = c.disabled, this.size = c.size, this.resize = c.resize, this.label = c.label, this.readonly = c.readonly, this.autoFocus = c.autoFocus, this.required = c.required, this.status = c.status, this._throttledResize = ve(() => {
|
|
120
121
|
this.resize === "auto" && (this._textarea.style.height = "auto", this._textarea.style.height = `${this._textarea.scrollHeight}px`);
|
|
@@ -169,43 +170,45 @@ class o extends H(U(M)) {
|
|
|
169
170
|
this._textarea.removeEventListener("keydown", this.handleKeyDown), window.removeEventListener("resize", () => this.handleResize());
|
|
170
171
|
}
|
|
171
172
|
renderLabel(e, a) {
|
|
172
|
-
const
|
|
173
|
-
return e != null && e.length ?
|
|
173
|
+
const i = a ? `${this.value.length}/${a}` : void 0;
|
|
174
|
+
return e != null && e.length ? W`<pie-form-label for="${m}" trailing=${b(i)}>${e}</pie-form-label>` : R;
|
|
174
175
|
}
|
|
175
176
|
renderAssistiveText() {
|
|
176
|
-
return this.assistiveText ?
|
|
177
|
+
return this.assistiveText ? W`
|
|
177
178
|
<pie-assistive-text
|
|
178
179
|
id="${E}"
|
|
179
180
|
variant=${b(this.status)}
|
|
180
181
|
data-test-id="pie-textarea-assistive-text">
|
|
181
182
|
${this.assistiveText}
|
|
182
183
|
</pie-assistive-text>
|
|
183
|
-
` :
|
|
184
|
+
` : R;
|
|
184
185
|
}
|
|
185
186
|
render() {
|
|
186
187
|
const {
|
|
187
188
|
disabled: e,
|
|
188
189
|
resize: a,
|
|
189
|
-
size:
|
|
190
|
-
autocomplete:
|
|
191
|
-
autoFocus:
|
|
190
|
+
size: i,
|
|
191
|
+
autocomplete: o,
|
|
192
|
+
autoFocus: p,
|
|
192
193
|
name: u,
|
|
193
194
|
readonly: d,
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
195
|
+
placeholder: h,
|
|
196
|
+
value: f,
|
|
197
|
+
required: k,
|
|
198
|
+
label: v,
|
|
199
|
+
maxLength: y,
|
|
198
200
|
status: g,
|
|
199
|
-
assistiveText:
|
|
201
|
+
assistiveText: S
|
|
200
202
|
} = this, w = {
|
|
201
203
|
"c-textareaWrapper": !0,
|
|
202
204
|
"c-textarea--disabled": e,
|
|
205
|
+
"c-textarea--readonly": d,
|
|
203
206
|
"c-textarea--error": g === "error",
|
|
204
207
|
[`c-textarea--resize-${a}`]: !0,
|
|
205
|
-
[`c-textarea--${
|
|
208
|
+
[`c-textarea--${i}`]: !0
|
|
206
209
|
};
|
|
207
|
-
return
|
|
208
|
-
${this.renderLabel(
|
|
210
|
+
return W`<div>
|
|
211
|
+
${this.renderLabel(v, y)}
|
|
209
212
|
<div
|
|
210
213
|
class="${K(w)}"
|
|
211
214
|
data-test-id="pie-textarea-wrapper">
|
|
@@ -213,13 +216,14 @@ class o extends H(U(M)) {
|
|
|
213
216
|
id="${m}"
|
|
214
217
|
data-test-id="${m}"
|
|
215
218
|
name=${b(u)}
|
|
216
|
-
autocomplete=${b(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
+
autocomplete=${b(o)}
|
|
220
|
+
placeholder=${b(h)}
|
|
221
|
+
.value=${G(f)}
|
|
222
|
+
?autofocus=${p}
|
|
219
223
|
?readonly=${d}
|
|
220
|
-
?required=${
|
|
224
|
+
?required=${k}
|
|
221
225
|
?disabled=${e}
|
|
222
|
-
aria-describedby=${b(
|
|
226
|
+
aria-describedby=${b(S ? E : void 0)}
|
|
223
227
|
aria-invalid=${g === "error" ? "true" : "false"}
|
|
224
228
|
aria-errormessage="${b(g === "error" ? E : void 0)}"
|
|
225
229
|
@input=${this.handleInput}
|
|
@@ -230,64 +234,67 @@ class o extends H(U(M)) {
|
|
|
230
234
|
</div>`;
|
|
231
235
|
}
|
|
232
236
|
}
|
|
233
|
-
|
|
234
|
-
|
|
237
|
+
r.shadowRootOptions = { ...P.shadowRootOptions, delegatesFocus: !0 };
|
|
238
|
+
r.styles = A(ge);
|
|
235
239
|
s([
|
|
236
240
|
l({ type: String })
|
|
237
|
-
],
|
|
241
|
+
], r.prototype, "value", 2);
|
|
238
242
|
s([
|
|
239
243
|
l({ type: String })
|
|
240
|
-
],
|
|
244
|
+
], r.prototype, "defaultValue", 2);
|
|
241
245
|
s([
|
|
242
246
|
l({ type: Boolean, reflect: !0 })
|
|
243
|
-
],
|
|
247
|
+
], r.prototype, "disabled", 2);
|
|
244
248
|
s([
|
|
245
249
|
l({ type: String }),
|
|
246
|
-
O(m,
|
|
247
|
-
],
|
|
250
|
+
O(m, be, c.size)
|
|
251
|
+
], r.prototype, "size", 2);
|
|
248
252
|
s([
|
|
249
253
|
l({ type: String }),
|
|
250
|
-
O(m,
|
|
251
|
-
],
|
|
254
|
+
O(m, me, c.resize)
|
|
255
|
+
], r.prototype, "resize", 2);
|
|
252
256
|
s([
|
|
253
257
|
l({ type: String })
|
|
254
|
-
],
|
|
258
|
+
], r.prototype, "label", 2);
|
|
255
259
|
s([
|
|
256
260
|
l({ type: Number })
|
|
257
|
-
],
|
|
261
|
+
], r.prototype, "maxLength", 2);
|
|
258
262
|
s([
|
|
259
263
|
l({ type: Boolean })
|
|
260
|
-
],
|
|
264
|
+
], r.prototype, "readonly", 2);
|
|
261
265
|
s([
|
|
262
266
|
l({ type: Boolean })
|
|
263
|
-
],
|
|
267
|
+
], r.prototype, "autoFocus", 2);
|
|
264
268
|
s([
|
|
265
269
|
l({ type: Boolean })
|
|
266
|
-
],
|
|
270
|
+
], r.prototype, "required", 2);
|
|
267
271
|
s([
|
|
268
272
|
l({ type: String }),
|
|
269
273
|
O(m, ye, c.status)
|
|
270
|
-
],
|
|
274
|
+
], r.prototype, "status", 2);
|
|
275
|
+
s([
|
|
276
|
+
l({ type: String })
|
|
277
|
+
], r.prototype, "assistiveText", 2);
|
|
271
278
|
s([
|
|
272
279
|
l({ type: String })
|
|
273
|
-
],
|
|
280
|
+
], r.prototype, "name", 2);
|
|
274
281
|
s([
|
|
275
282
|
l({ type: String })
|
|
276
|
-
],
|
|
283
|
+
], r.prototype, "autocomplete", 2);
|
|
277
284
|
s([
|
|
278
285
|
l({ type: String })
|
|
279
|
-
],
|
|
286
|
+
], r.prototype, "placeholder", 2);
|
|
280
287
|
s([
|
|
281
|
-
|
|
282
|
-
],
|
|
288
|
+
V("textarea")
|
|
289
|
+
], r.prototype, "_textarea", 2);
|
|
283
290
|
s([
|
|
284
|
-
|
|
285
|
-
],
|
|
286
|
-
J(m,
|
|
291
|
+
V("textarea")
|
|
292
|
+
], r.prototype, "focusTarget", 2);
|
|
293
|
+
J(m, r);
|
|
287
294
|
export {
|
|
288
|
-
|
|
295
|
+
r as PieTextarea,
|
|
289
296
|
c as defaultProps,
|
|
290
|
-
|
|
291
|
-
|
|
297
|
+
me as resizeModes,
|
|
298
|
+
be as sizes,
|
|
292
299
|
ye as statusTypes
|
|
293
300
|
};
|
package/dist/react.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ declare class PieTextarea_2 extends PieTextarea_base implements TextareaProps, P
|
|
|
47
47
|
assistiveText: TextareaProps['assistiveText'];
|
|
48
48
|
name: TextareaProps['name'];
|
|
49
49
|
autocomplete: TextareaProps['autocomplete'];
|
|
50
|
+
placeholder: TextareaProps['placeholder'];
|
|
50
51
|
private _textarea;
|
|
51
52
|
focusTarget: HTMLElement;
|
|
52
53
|
private _throttledResize;
|
|
@@ -164,6 +165,10 @@ export declare interface TextareaProps {
|
|
|
164
165
|
* If the `label` property is not set, this property will have no effect.
|
|
165
166
|
*/
|
|
166
167
|
maxLength?: number;
|
|
168
|
+
/**
|
|
169
|
+
* The placeholder text to display when the textarea is empty.
|
|
170
|
+
*/
|
|
171
|
+
placeholder?: string;
|
|
167
172
|
}
|
|
168
173
|
|
|
169
174
|
export { }
|
package/package.json
CHANGED
package/src/defs.ts
CHANGED
|
@@ -81,6 +81,11 @@ export interface TextareaProps {
|
|
|
81
81
|
* If the `label` property is not set, this property will have no effect.
|
|
82
82
|
*/
|
|
83
83
|
maxLength?: number;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The placeholder text to display when the textarea is empty.
|
|
87
|
+
*/
|
|
88
|
+
placeholder?: string;
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
/**
|
|
@@ -97,6 +102,7 @@ export const defaultProps: DefaultProps = {
|
|
|
97
102
|
resize: 'auto',
|
|
98
103
|
label: '',
|
|
99
104
|
value: '',
|
|
105
|
+
placeholder: '',
|
|
100
106
|
status: 'default',
|
|
101
107
|
autoFocus: false,
|
|
102
108
|
readonly: false,
|
package/src/index.ts
CHANGED
|
@@ -77,6 +77,9 @@ export class PieTextarea extends FormControlMixin(RtlMixin(LitElement)) implemen
|
|
|
77
77
|
@property({ type: String })
|
|
78
78
|
public autocomplete: TextareaProps['autocomplete'];
|
|
79
79
|
|
|
80
|
+
@property({ type: String })
|
|
81
|
+
public placeholder: TextareaProps['placeholder'];
|
|
82
|
+
|
|
80
83
|
@query('textarea')
|
|
81
84
|
private _textarea!: HTMLTextAreaElement;
|
|
82
85
|
|
|
@@ -216,6 +219,7 @@ export class PieTextarea extends FormControlMixin(RtlMixin(LitElement)) implemen
|
|
|
216
219
|
autoFocus,
|
|
217
220
|
name,
|
|
218
221
|
readonly,
|
|
222
|
+
placeholder,
|
|
219
223
|
value,
|
|
220
224
|
required,
|
|
221
225
|
label,
|
|
@@ -227,6 +231,7 @@ export class PieTextarea extends FormControlMixin(RtlMixin(LitElement)) implemen
|
|
|
227
231
|
const classes = {
|
|
228
232
|
'c-textareaWrapper': true,
|
|
229
233
|
'c-textarea--disabled': disabled,
|
|
234
|
+
'c-textarea--readonly': readonly,
|
|
230
235
|
'c-textarea--error': status === 'error',
|
|
231
236
|
[`c-textarea--resize-${resize}`]: true,
|
|
232
237
|
[`c-textarea--${size}`]: true,
|
|
@@ -242,6 +247,7 @@ export class PieTextarea extends FormControlMixin(RtlMixin(LitElement)) implemen
|
|
|
242
247
|
data-test-id="${componentSelector}"
|
|
243
248
|
name=${ifDefined(name)}
|
|
244
249
|
autocomplete=${ifDefined(autocomplete)}
|
|
250
|
+
placeholder=${ifDefined(placeholder)}
|
|
245
251
|
.value=${live(value)}
|
|
246
252
|
?autofocus=${autoFocus}
|
|
247
253
|
?readonly=${readonly}
|
package/src/textarea.scss
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
--textarea-background-color: var(--dt-color-container-default);
|
|
16
16
|
--textarea-border-color: var(--dt-color-interactive-form);
|
|
17
17
|
--textarea-content-color: var(--dt-color-content-default);
|
|
18
|
+
--textarea-placeholder-color: var(--dt-color-content-placeholder);
|
|
18
19
|
|
|
19
20
|
// Default height is two lines of text
|
|
20
21
|
--textarea-height: calc((var(--textarea-line-height) * 2) + (var(--textarea-padding-block) * 2));
|
|
@@ -49,16 +50,28 @@
|
|
|
49
50
|
box-shadow: none;
|
|
50
51
|
outline: none;
|
|
51
52
|
}
|
|
53
|
+
|
|
54
|
+
&::placeholder {
|
|
55
|
+
color: var(--textarea-placeholder-color);
|
|
56
|
+
|
|
57
|
+
opacity: 1; // normalize opacity for all browsers
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
&.c-textarea--readonly {
|
|
62
|
+
--textarea-background-color: var(--dt-color-container-subtle);
|
|
63
|
+
--textarea-border-color: var(--dt-color-interactive-form);
|
|
52
64
|
}
|
|
53
65
|
|
|
54
66
|
&.c-textarea--disabled {
|
|
55
67
|
--textarea-background-color: var(--dt-color-disabled-01);
|
|
56
68
|
--textarea-border-color: var(--dt-color-disabled-01);
|
|
57
69
|
--textarea-content-color: var(--dt-color-content-disabled);
|
|
70
|
+
--textarea-placeholder-color: var(--dt-color-content-disabled);
|
|
58
71
|
}
|
|
59
72
|
|
|
60
73
|
@media (hover: hover) {
|
|
61
|
-
&:hover:not(.c-textarea--disabled) {
|
|
74
|
+
&:hover:not(.c-textarea--disabled, .c-textarea--readonly) {
|
|
62
75
|
--textarea-background-color: hsl(var(--dt-color-container-default-h), var(--dt-color-container-default-s), calc(var(--dt-color-container-default-l) + calc(-1 * var(--dt-color-hover-01))));
|
|
63
76
|
}
|
|
64
77
|
}
|