jb-textarea 3.12.3 → 3.13.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.
Files changed (56) hide show
  1. package/README.md +240 -171
  2. package/index.js +1 -1
  3. package/package.json +20 -7
  4. package/react/README.md +93 -30
  5. package/react/dist/JBTextarea.cjs.js +65 -1
  6. package/react/dist/JBTextarea.cjs.js.map +1 -1
  7. package/react/dist/JBTextarea.d.ts +68 -30
  8. package/react/dist/JBTextarea.js +53 -1
  9. package/react/dist/JBTextarea.js.map +1 -1
  10. package/react/dist/JBTextarea.umd.js +70 -1
  11. package/react/dist/JBTextarea.umd.js.map +1 -1
  12. package/react/lib/JBTextarea.tsx +15 -32
  13. package/react/lib/attributes-hook.ts +5 -13
  14. package/react/lib/events-hook.ts +4 -4
  15. package/react/lib/module-declaration.ts +20 -0
  16. package/react/tsconfig.json +2 -2
  17. package/web-component/custom-elements.json +494 -0
  18. package/web-component/dist/jb-textarea.cjs.js +238 -0
  19. package/web-component/dist/jb-textarea.cjs.js.br +0 -0
  20. package/web-component/dist/jb-textarea.cjs.js.gz +0 -0
  21. package/web-component/dist/jb-textarea.cjs.js.map +1 -0
  22. package/web-component/dist/jb-textarea.d.ts +311 -0
  23. package/web-component/dist/jb-textarea.d.ts.map +1 -0
  24. package/web-component/dist/jb-textarea.js +241 -0
  25. package/web-component/dist/jb-textarea.js.br +0 -0
  26. package/web-component/dist/jb-textarea.js.gz +0 -0
  27. package/web-component/dist/jb-textarea.js.map +1 -0
  28. package/web-component/dist/jb-textarea.umd.js +247 -0
  29. package/web-component/dist/jb-textarea.umd.js.br +0 -0
  30. package/web-component/dist/jb-textarea.umd.js.gz +0 -0
  31. package/web-component/dist/jb-textarea.umd.js.map +1 -0
  32. package/{lib → web-component/lib}/jb-textarea.css +12 -15
  33. package/{lib → web-component/lib}/jb-textarea.ts +58 -29
  34. package/{lib → web-component/lib}/render.ts +5 -5
  35. package/web-component/lib/variables.css +99 -0
  36. package/dist/jb-textarea.cjs.js +0 -2
  37. package/dist/jb-textarea.cjs.js.br +0 -0
  38. package/dist/jb-textarea.cjs.js.gz +0 -0
  39. package/dist/jb-textarea.cjs.js.map +0 -1
  40. package/dist/jb-textarea.d.ts +0 -39
  41. package/dist/jb-textarea.d.ts.map +0 -1
  42. package/dist/jb-textarea.js +0 -2
  43. package/dist/jb-textarea.js.br +0 -0
  44. package/dist/jb-textarea.js.gz +0 -0
  45. package/dist/jb-textarea.js.map +0 -1
  46. package/dist/jb-textarea.umd.js +0 -2
  47. package/dist/jb-textarea.umd.js.br +0 -0
  48. package/dist/jb-textarea.umd.js.gz +0 -0
  49. package/dist/jb-textarea.umd.js.map +0 -1
  50. package/lib/global.d.ts +0 -15
  51. package/lib/variables.css +0 -39
  52. /package/{dist → web-component/dist}/render.d.ts +0 -0
  53. /package/{dist → web-component/dist}/render.d.ts.map +0 -0
  54. /package/{dist → web-component/dist}/types.d.ts +0 -0
  55. /package/{dist → web-component/dist}/types.d.ts.map +0 -0
  56. /package/{lib → web-component/lib}/types.ts +0 -0
@@ -0,0 +1,241 @@
1
+ import { ValidationHelper as e } from "jb-validation";
2
+ import { registerDefaultVariables as t } from "jb-core/theme";
3
+ import { getRequiredMessage as a, i18n as r } from "jb-core/i18n";
4
+ import { createInputEvent as i, createKeyboardEvent as s } from "jb-core";
5
+ var n = class extends HTMLElement {
6
+ static get formAssociated() {
7
+ return !0;
8
+ }
9
+ #e;
10
+ get value() {
11
+ return this.#e;
12
+ }
13
+ set value(e) {
14
+ this.#e = e, this.#t.value = e, this.autoHeight && this.#a();
15
+ }
16
+ #r;
17
+ get isAutoValidationDisabled() {
18
+ return this.#r;
19
+ }
20
+ set isAutoValidationDisabled(e) {
21
+ this.#r = e;
22
+ }
23
+ #i;
24
+ get disabled() {
25
+ return this.#i;
26
+ }
27
+ set disabled(e) {
28
+ this.#i = e, this.#s.textarea.disabled = e, e ? this.#n.states?.add("disabled") : this.#n.states?.delete("disabled");
29
+ }
30
+ #o;
31
+ set required(e) {
32
+ this.#o = e, this.#s.textarea.required = e, this.#n && (this.#n.ariaRequired = e ? "true" : "false"), this.#l.checkValiditySync({ showError: !1 });
33
+ }
34
+ get required() {
35
+ return this.#o;
36
+ }
37
+ #n;
38
+ get name() {
39
+ return this.getAttribute("name") || "";
40
+ }
41
+ get form() {
42
+ return this.#n?.form ?? null;
43
+ }
44
+ set name(e) {
45
+ this.setAttribute("name", e);
46
+ }
47
+ formResetCallback() {
48
+ this.value = this.initialValue, this.#l.reset(), this.#n?.setValidity({}, "");
49
+ }
50
+ get isDirty() {
51
+ return this.#e !== this.initialValue;
52
+ }
53
+ constructor() {
54
+ super(), this.#e = "", this.#r = !1, this.#i = !1, this.#o = !1, this.initialValue = "", this.autoHeight = !1, this.#l = new e({
55
+ clearValidationError: this.clearValidationError.bind(this),
56
+ getValue: () => this.#e,
57
+ getValueString: () => this.value,
58
+ getValidations: this.#d.bind(this),
59
+ setValidationResult: this.#b.bind(this),
60
+ showValidationError: this.showValidationError.bind(this)
61
+ }), "function" == typeof this.attachInternals && (this.#n = this.attachInternals(), this.#n.role = "textbox"), this.#h(), this.#c();
62
+ }
63
+ #t;
64
+ #s;
65
+ #h() {
66
+ const e = this.attachShadow({
67
+ mode: "open",
68
+ delegatesFocus: !0,
69
+ clonable: !0,
70
+ serializable: !0
71
+ });
72
+ t();
73
+ const a = document.createElement("template");
74
+ a.innerHTML = "<style>.jb-textarea-web-component{width:var(--width);margin:var(--margin)}.jb-textarea-web-component label{width:100%;margin:var(--label-margin);font-size:var(--label-font-size);font-weight:var(--label-font-weight);color:var(--label-color);display:block}.jb-textarea-web-component label.--hide{display:none}.jb-textarea-web-component .textarea-box{width:100%;margin:var(--box-margin);box-sizing:border-box;border:solid var(--border-width) var(--border-color);background-color:var(--input-box-bg-color);border-bottom:solid var(--border-bottom-width) var(--border-color);border-radius:var(--border-radius);overflow:var(--box-overflow);box-shadow:var(--box-shadow);grid-template:\"slot-block-start slot-block-start slot-block-start\"\"slot-inline-start textarea slot-inline-end\"1fr\"slot-block-end slot-block-end slot-block-end\"/auto 1fr auto;transition:all .3s;display:grid}.jb-textarea-web-component .textarea-box textarea{box-sizing:border-box;width:100%;min-height:var(--min-height);height:var(--height);max-height:var(--max-height);padding:var(--input-padding);font-family:inherit;font-size:var(--value-font-size);font-weight:var(--textarea-font-weight);text-align:var(--textarea-text-align);direction:var(--textarea-direction);resize:vertical;color:var(--value-color);background-color:#0000;border:none;border-radius:0;grid-area:textarea;margin:0;display:block}.jb-textarea-web-component .textarea-box textarea::placeholder{color:var(--placeholder-color);font-size:var(--placeholder-font-size)}.jb-textarea-web-component .textarea-box .block-start-section-wrapper{grid-area:slot-block-start}.jb-textarea-web-component .textarea-box .block-end-section-wrapper{grid-area:slot-block-end}.jb-textarea-web-component .textarea-box .inline-start-section-wrapper{grid-area:slot-inline-start}.jb-textarea-web-component .textarea-box .inline-end-section-wrapper{grid-area:slot-inline-end}.jb-textarea-web-component .textarea-box .block-start-section-wrapper,.jb-textarea-web-component .textarea-box .block-end-section-wrapper{justify-content:start;align-items:center;width:100%;height:auto;display:flex}.jb-textarea-web-component .textarea-box .inline-start-section-wrapper,.jb-textarea-web-component .textarea-box .inline-end-section-wrapper{justify-content:center;align-items:center;width:auto;height:100%;display:flex}.jb-textarea-web-component .textarea-box ::slotted([slot=block-start-section]),.jb-textarea-web-component .textarea-box ::slotted([slot=block-end-section]){box-sizing:border-box;background-color:#0000;justify-content:start;align-items:center;width:auto;max-width:100%;height:auto;padding:.5rem 1rem;display:flex;overflow-x:hidden}.jb-textarea-web-component .textarea-box ::slotted([slot=inline-start-section]),.jb-textarea-web-component .textarea-box ::slotted([slot=inline-end-section]){height:100%;max-height:100%;padding:var(--inline-slots-padding);box-sizing:border-box;background-color:#0000;justify-content:center;align-items:center;width:auto;display:flex;overflow-y:hidden}.jb-textarea-web-component .message-box{display:var(--message-box-display);font-size:var(--message-font-size);padding:var(--message-padding);color:var(--message-color)}.jb-textarea-web-component .message-box:empty{padding:0} :host{--width:var(--jb-textarea-width,100%);--border-radius:var(--jb-textarea-border-radius,var(--jb-radius));--height:var(--jb-textarea-height,5rem);--min-height:var(--jb-textarea-min-height,5rem);--max-height:var(--jb-textarea-max-height,none);--border-width:var(--jb-textarea-border-width,1px);--border-bottom-width:var(--jb-textarea-border-bottom-width,3px);--border-width-focus:var(--jb-textarea-border-width-focus,var(--border-width));--border-bottom-width-focus:var(--jb-textarea-border-bottom-width-focus,var(--border-bottom-width));--inline-space:var(--jb-textarea-inline-space,min(calc(var(--border-radius) / 1.75), calc(--height / 2)));--label-margin:var(--jb-textarea-label-margin,.125rem var(--inline-space));--label-font-size:var(--jb-textarea-label-font-size,.8rem);--value-font-size:var(--jb-textarea-value-font-size,1rem);--input-padding:var(--jb-textarea-input-padding,.125rem .75rem 0 .75rem);--placeholder-font-size:var(--jb-textarea-placeholder-font-size,var(--value-font-size));--message-font-size:var(--jb-textarea-message-font-size,.7rem);--message-padding:var(--jb-textarea-message-padding,.125rem var(--inline-space));--inline-slots-padding:var(--jb-textarea-inline-slots-padding,.375rem .625rem);--base-border-color:var(--jb-textarea-border-color,var(--jb-neutral-10));--border-color:var(--jb-textarea-border-color-current,var(--base-border-color));--message-color:var(--jb-textarea-message-color,var(--jb-text-secondary));--label-color:var(--jb-textarea-label-color,var(--jb-text-primary));--value-color:var(--jb-textarea-value-color,var(--jb-text-primary));--placeholder-color:var(--jb-textarea-placeholder-color,var(--jb-neutral-6));--base-bg-color:var(--jb-textarea-bg-color,var(--jb-neutral-10));--input-box-bg-color:var(--jb-textarea-input-box-bg-color,var(--base-bg-color));--margin:var(--jb-textarea-margin,.75rem 0);--label-font-weight:var(--jb-textarea-label-font-weight,300);--box-margin:var(--jb-textarea-box-margin,0px);--box-overflow:var(--jb-textarea-box-overflow,hidden);--box-shadow:var(--jb-textarea-box-shadow,none);--box-shadow-focus:var(--jb-textarea-box-shadow-focus,none);--textarea-text-align:var(--jb-textarea-textarea-text-align,initial);--textarea-direction:var(--jb-textarea-textarea-direction,inherit);--textarea-font-weight:var(--jb-textarea-textarea-font-weight,initial);--message-box-display:var(--jb-textarea-message-box-display,block)}:host(:state(invalid)){--message-color:var(--jb-textarea-message-color-error,var(--jb-red))}:host(:state(disabled)){--input-box-bg-color:var(--jb-textarea-bg-color-disabled,hsl(from var(--base-bg-color) h 12% 66.1));--border-color:var(--jb-textarea-border-color-disabled,hsl(from var(--base-border-color) h 12% 66.1));--value-color:var(--jb-textarea-value-color-disabled,var(--jb-neutral-3));--label-color:var(--jb-textarea-label-color-disabled,var(--jb-neutral-3))}:host(:focus-within){--border-color:var(--jb-textarea-border-color-focus,var(--jb-neutral))}:host([size=xs]){--height:var(--jb-textarea-height-xs,3rem);--min-height:var(--jb-textarea-min-height-xs,3rem);--value-font-size:var(--jb-textarea-value-font-size-xs,.75rem);--label-font-size:var(--jb-textarea-label-font-size-xs,.6rem);--message-font-size:var(--jb-textarea-message-font-size-xs,.525rem);--input-padding:var(--jb-textarea-input-padding-xs,.125rem .375rem 0 .375rem);--border-radius:var(--jb-textarea-border-radius-xs,var(--jb-radius-xs));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-xs,.125rem .25rem)}:host([size=sm]){--height:var(--jb-textarea-height-sm,4rem);--min-height:var(--jb-textarea-min-height-sm,4rem);--value-font-size:var(--jb-textarea-value-font-size-sm,.875rem);--label-font-size:var(--jb-textarea-label-font-size-sm,.7rem);--message-font-size:var(--jb-textarea-message-font-size-sm,.6125rem);--input-padding:var(--jb-textarea-input-padding-sm,.125rem .5625rem 0 .5625rem);--border-radius:var(--jb-textarea-border-radius-sm,var(--jb-radius-sm));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-sm,.25rem .5rem)}:host([size=lg]){--height:var(--jb-textarea-height-lg,7rem);--min-height:var(--jb-textarea-min-height-lg,7rem);--value-font-size:var(--jb-textarea-value-font-size-lg,1.125rem);--label-font-size:var(--jb-textarea-label-font-size-lg,.9rem);--message-font-size:var(--jb-textarea-message-font-size-lg,.7875rem);--input-padding:var(--jb-textarea-input-padding-lg,.125rem .9375rem 0 .9375rem);--border-radius:var(--jb-textarea-border-radius-lg,var(--jb-radius-lg));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-lg,.5rem .75rem)}:host([size=xl]){--height:var(--jb-textarea-height-xl,9rem);--min-height:var(--jb-textarea-min-height-xl,9rem);--value-font-size:var(--jb-textarea-value-font-size-xl,1.25rem);--label-font-size:var(--jb-textarea-label-font-size-xl,1rem);--message-font-size:var(--jb-textarea-message-font-size-xl,.875rem);--input-padding:var(--jb-textarea-input-padding-xl,.125rem 1.125rem 0 1.125rem);--border-radius:var(--jb-textarea-border-radius-xl,var(--jb-radius-xl));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-xl,.75rem 1rem)}</style>\n\n <div class=\"jb-textarea-web-component\" part=\"component\">\n <label for=\"textarea\" class=\"--hide\" part=\"label\"><span class=\"label-value\"></span><span aria-hidden=\"true\">:</span></label>\n <div class=\"textarea-box\" part=\"textarea-box\">\n <div class=\"block-start-section-wrapper\" part=\"block-start-section-wrapper\">\n <slot name=\"block-start-section\"></slot>\n </div>\n <div class=\"inline-start-section-wrapper\" part=\"inline-start-section-wrapper\">\n <slot name=\"inline-start-section\"></slot>\n </div>\n <textarea id=\"textarea\" class=\"textarea-input\" part=\"textarea\" aria-describedby=\"message\"></textarea>\n <div class=\"inline-end-section-wrapper\" part=\"inline-end-section-wrapper\">\n <slot name=\"inline-end-section\"></slot>\n </div>\n <div class=\"block-end-section-wrapper\" part=\"block-end-section-wrapper\">\n <slot name=\"block-end-section\"></slot>\n </div>\n </div>\n <div id=\"message\" class=\"message-box\" part=\"message\" aria-live=\"polite\" aria-atomic=\"true\"></div>\n </div>\n ", e.appendChild(a.content.cloneNode(!0)), this.#t = e.querySelector(".textarea-box textarea"), this.#s = {
75
+ textarea: this.#t,
76
+ label: e.querySelector("label"),
77
+ labelValue: e.querySelector("label .label-value"),
78
+ messageBox: e.querySelector(".message-box")
79
+ }, this.#v();
80
+ }
81
+ #v() {
82
+ this.#s.textarea.addEventListener("change", (e) => this.#x(e)), this.#s.textarea.addEventListener("beforeinput", this.#m.bind(this)), this.#s.textarea.addEventListener("input", (e) => this.#u(e)), this.#s.textarea.addEventListener("blur", (e) => this.#g(e)), this.#s.textarea.addEventListener("keypress", this.#p.bind(this)), this.#s.textarea.addEventListener("keyup", this.#j.bind(this)), this.#s.textarea.addEventListener("keydown", this.#f.bind(this));
83
+ }
84
+ #g(e) {
85
+ this.#l.checkValidity({ showError: !0 });
86
+ }
87
+ #l;
88
+ get validation() {
89
+ return this.#l;
90
+ }
91
+ #c() {
92
+ this.value = this.getAttribute("value") || "";
93
+ }
94
+ static get observedAttributes() {
95
+ return [
96
+ "label",
97
+ "message",
98
+ "value",
99
+ "placeholder",
100
+ "required",
101
+ "error"
102
+ ];
103
+ }
104
+ attributeChangedCallback(e, t, a) {
105
+ this.#w(e, a);
106
+ }
107
+ #w(e, t) {
108
+ switch (e) {
109
+ case "label":
110
+ this.#s.labelValue.innerHTML = t, this.#n && (this.#n.ariaLabel = t), null == t || null == t || "" == t ? this.#s.label.classList.add("--hide") : this.#s.label.classList.remove("--hide");
111
+ break;
112
+ case "message":
113
+ this.#n && (this.#n.ariaDescription = t), this.#s.messageBox.classList.contains("error") || (this.#s.messageBox.innerHTML = t);
114
+ break;
115
+ case "placeholder":
116
+ this.#t.setAttribute("placeholder", t), this.#n && (this.#n.ariaPlaceholder = t);
117
+ break;
118
+ case "value":
119
+ this.value = t;
120
+ break;
121
+ case "required":
122
+ this.required = "" === t || "true" === t;
123
+ break;
124
+ case "error": this.reportValidity();
125
+ }
126
+ }
127
+ #a() {
128
+ this.#t.style.height = "4px", this.#t.style.height = this.#t.scrollHeight + "px";
129
+ }
130
+ #m(e) {
131
+ this.#y(e);
132
+ }
133
+ #y(e) {
134
+ const t = i("beforeinput", e, { cancelable: !0 });
135
+ return this.dispatchEvent(t), t.defaultPrevented && e.preventDefault(), t.defaultPrevented;
136
+ }
137
+ #f(e) {
138
+ const t = s("keydown", e, { cancelable: !0 });
139
+ this.dispatchEvent(t) || e.preventDefault();
140
+ }
141
+ #p(e) {
142
+ const t = s("keypress", e, { cancelable: !0 });
143
+ this.dispatchEvent(t) ? "Enter" == e.key && this.#E(e) : e.preventDefault();
144
+ }
145
+ #u(e) {
146
+ const t = e.target.value;
147
+ this.#e = t, this.autoHeight && this.#a(), this.#z(e);
148
+ }
149
+ #z(e) {
150
+ const t = {
151
+ bubbles: e.bubbles,
152
+ cancelable: e.cancelable,
153
+ composed: e.composed,
154
+ data: e.data,
155
+ dataTransfer: e.dataTransfer,
156
+ detail: e.detail,
157
+ inputType: e.inputType,
158
+ isComposing: e.isComposing,
159
+ targetRanges: e.getTargetRanges(),
160
+ view: e.view
161
+ }, a = new InputEvent("input", t);
162
+ this.dispatchEvent(a);
163
+ }
164
+ #j(e) {
165
+ const t = e.target.value;
166
+ this.#e = t, this.#k(!1);
167
+ const a = s("keyup", e, { cancelable: !0 });
168
+ this.dispatchEvent(a), a.defaultPrevented && e.preventDefault();
169
+ }
170
+ #E(e) {
171
+ const t = s("enter", e, { cancelable: !0 });
172
+ this.dispatchEvent(t), t.defaultPrevented && e.preventDefault();
173
+ }
174
+ #x(e) {
175
+ const t = e.target.value;
176
+ this.#e = t, this.#k(!0), this.#V().defaultPrevented && e.preventDefault();
177
+ }
178
+ #V() {
179
+ const e = new Event("change", {
180
+ bubbles: !0,
181
+ cancelable: !0
182
+ });
183
+ return this.dispatchEvent(e), e;
184
+ }
185
+ showValidationError(e) {
186
+ const t = "string" == typeof e ? e : e.message;
187
+ this.#n?.states?.add("invalid"), this.#n && (this.#n.ariaInvalid = "true"), this.#s.textarea.setAttribute("aria-invalid", "true"), this.#s.textarea.setAttribute("aria-errormessage", "message"), this.#s.messageBox.innerHTML = t;
188
+ }
189
+ clearValidationError() {
190
+ const e = this.getAttribute("message") || "";
191
+ this.#n?.states?.delete("invalid"), this.#n && (this.#n.ariaInvalid = "false"), this.#s.textarea.setAttribute("aria-invalid", "false"), this.#s.textarea.removeAttribute("aria-errormessage"), this.#s.messageBox.innerHTML = e;
192
+ }
193
+ #d() {
194
+ const e = [], t = this.getAttribute("error");
195
+ return null !== t && t.trim().length > 0 && e.push({
196
+ validator: void 0,
197
+ message: t,
198
+ stateType: "customError"
199
+ }), this.required && e.push({
200
+ validator: /.{1}/g,
201
+ message: a(r, this.getAttribute("label")),
202
+ stateType: "valueMissing"
203
+ }), e;
204
+ }
205
+ #k(e) {
206
+ if (!this.isAutoValidationDisabled) return this.#n?.states.has("invalid") && (e = !0), this.#l.checkValidity({ showError: e });
207
+ }
208
+ #b(e) {
209
+ if (e.isAllValid) this.#n?.setValidity({}, "");
210
+ else {
211
+ const t = {};
212
+ let a = "";
213
+ e.validationList.forEach((e) => {
214
+ e.isValid || (e.validation.stateType && (t[e.validation.stateType] = !0), "" == a && (a = e.message ?? ""));
215
+ }), this.#n?.setValidity(t, a);
216
+ }
217
+ }
218
+ get validationMessage() {
219
+ return this.#n?.validationMessage ?? "";
220
+ }
221
+ checkValidity() {
222
+ const e = this.#l.checkValiditySync({ showError: !1 });
223
+ if (!e.isAllValid) {
224
+ const e = new CustomEvent("invalid");
225
+ this.dispatchEvent(e);
226
+ }
227
+ return e.isAllValid;
228
+ }
229
+ reportValidity() {
230
+ const e = this.#l.checkValiditySync({ showError: !0 });
231
+ if (!e.isAllValid) {
232
+ const e = new CustomEvent("invalid");
233
+ this.dispatchEvent(e);
234
+ }
235
+ return e.isAllValid;
236
+ }
237
+ };
238
+ customElements.get("jb-textarea") || window.customElements.define("jb-textarea", n);
239
+ export { n as JBTextareaWebComponent };
240
+
241
+ //# sourceMappingURL=jb-textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jb-textarea.js","names":["#value","#textareaElement","#changeHeightToContentSize","#isAutoValidationDisabled","#disabled","#elements","#internals","#required","#validation","#getInsideValidation","#setValidationResult","#initWebComponent","#initProp","CSS","VariablesCSS","#registerEventListener","#onInputChange","#onInputBeforeInput","#onInputInput","#onInputBlur","#onInputKeyPress","#onInputKeyup","#onInputKeyDown","#onAttributeChange","#dispatchBeforeInputEvent","#onInputEnter","#triggerInputEvent","#checkValidity","#dispatchChangeEvent"],"sources":["../lib/jb-textarea.css","../lib/variables.css","../lib/render.ts","../lib/jb-textarea.ts"],"sourcesContent":[".jb-textarea-web-component {\r\n width: var(--width);\r\n margin: var(--margin);\r\n\r\n label {\r\n width: 100%;\r\n margin: var(--label-margin);\r\n display: block;\r\n font-size: var(--label-font-size);\r\n font-weight: var(--label-font-weight);\r\n color: var(--label-color);\r\n\r\n &.--hide {\r\n display: none;\r\n }\r\n }\r\n\r\n .textarea-box {\r\n width: 100%;\r\n margin: var(--box-margin);\r\n box-sizing: border-box;\r\n border: solid var(--border-width) var(--border-color);\r\n background-color: var(--input-box-bg-color);\r\n border-bottom: solid var(--border-bottom-width) var(--border-color);\r\n border-radius: var(--border-radius);\r\n overflow: var(--box-overflow);\r\n box-shadow: var(--box-shadow);\r\n display: grid;\r\n grid-template-columns: auto 1fr auto;\r\n grid-template-rows: auto 1fr auto;\r\n grid-template-areas: \"slot-block-start slot-block-start slot-block-start\" \"slot-inline-start textarea slot-inline-end\" \"slot-block-end slot-block-end slot-block-end\";\r\n transition: ease 0.3s all;\r\n textarea {\r\n grid-area: textarea;\r\n border: none;\r\n width: 100%;\r\n box-sizing: border-box;\r\n min-height: var(--min-height);\r\n height: var(--height);\r\n max-height: var(--max-height);\r\n background-color: transparent;\r\n padding: var(--input-padding);\r\n display: block;\r\n font-family: inherit;\r\n font-size: var(--value-font-size);\r\n font-weight: var(--textarea-font-weight);\r\n text-align: var(--textarea-text-align);\r\n direction: var(--textarea-direction);\r\n margin: 0;\r\n border-radius: 0;\r\n resize: vertical;\r\n color: var(--value-color);\r\n\r\n &::placeholder {\r\n color: var(--placeholder-color);\r\n font-size: var(--placeholder-font-size);\r\n }\r\n }\r\n .block-start-section-wrapper{grid-area: slot-block-start;}\r\n .block-end-section-wrapper{grid-area: slot-block-end;}\r\n .inline-start-section-wrapper{grid-area: slot-inline-start;}\r\n .inline-end-section-wrapper{grid-area: slot-inline-end;}\r\n .block-start-section-wrapper, .block-end-section-wrapper{\r\n display: flex;\r\n height: auto;\r\n width: 100%;\r\n align-items: center;\r\n justify-content: start;\r\n }\r\n .inline-start-section-wrapper, .inline-end-section-wrapper {\r\n display: flex;\r\n height: 100%;\r\n width: auto;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n ::slotted([slot=\"block-start-section\"]),\r\n ::slotted([slot=\"block-end-section\"]) {\r\n height: auto;\r\n display: flex;\r\n justify-content: start;\r\n align-items: center;\r\n width: 100%;\r\n max-width: 100%;\r\n overflow-x: hidden;\r\n background-color: transparent;\r\n padding: 0.5rem 1rem;\r\n width: auto;\r\n box-sizing: border-box;\r\n }\r\n ::slotted([slot=\"inline-start-section\"]),\r\n ::slotted([slot=\"inline-end-section\"]) {\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n max-height: 100%;\r\n overflow-y: hidden;\r\n background-color: transparent;\r\n padding: var(--inline-slots-padding);\r\n width: auto;\r\n box-sizing: border-box;\r\n }\r\n }\r\n\r\n .message-box {\r\n display: var(--message-box-display);\r\n font-size: var(--message-font-size);\r\n padding: var(--message-padding);\r\n color: var(--message-color);\r\n\r\n &:empty {\r\n padding: 0;\r\n }\r\n }\r\n\r\n}",":host{\n /* Size */\n --width: var(--jb-textarea-width, 100%);\n --border-radius:var(--jb-textarea-border-radius , var(--jb-radius));\n --height:var(--jb-textarea-height, 5rem);\n --min-height:var(--jb-textarea-min-height, 5rem);\n --max-height:var(--jb-textarea-max-height, none);\n --border-width:var(--jb-textarea-border-width, 1px);\n --border-bottom-width:var(--jb-textarea-border-bottom-width, 3px);\n --border-width-focus: var(--jb-textarea-border-width-focus, var(--border-width));\n --border-bottom-width-focus: var(--jb-textarea-border-bottom-width-focus, var(--border-bottom-width));\n /* put message and label forward base on border radius*/\n --inline-space: var(--jb-textarea-inline-space, min(calc(var(--border-radius) / 1.75), calc(--height / 2)));\n --label-margin: var(--jb-textarea-label-margin, 0.125rem var(--inline-space));\n --label-font-size:var(--jb-textarea-label-font-size, 0.8rem);\n --value-font-size:var(--jb-textarea-value-font-size, 1rem);\n --input-padding:var(--jb-textarea-input-padding, 0.125rem 0.75rem 0 0.75rem);\n --placeholder-font-size:var(--jb-textarea-placeholder-font-size, var(--value-font-size));\n --message-font-size:var(--jb-textarea-message-font-size, 0.7rem);\n --message-padding: var(--jb-textarea-message-padding, 0.125rem var(--inline-space));\n --inline-slots-padding: var(--jb-textarea-inline-slots-padding, 0.375rem 0.625rem);\n /* Theme/Color */\n --base-border-color:var(--jb-textarea-border-color, var(--jb-neutral-10));\n --border-color: var(--jb-textarea-border-color-current, var(--base-border-color));\n --message-color:var(--jb-textarea-message-color, var(--jb-text-secondary));\n --label-color: var(--jb-textarea-label-color, var(--jb-text-primary));\n --value-color: var(--jb-textarea-value-color, var(--jb-text-primary));\n --placeholder-color: var(--jb-textarea-placeholder-color, var(--jb-neutral-6));\n --base-bg-color:var(--jb-textarea-bg-color, var(--jb-neutral-10));\n --input-box-bg-color: var(--jb-textarea-input-box-bg-color, var(--base-bg-color));\n /* Other */\n --margin: var(--jb-textarea-margin, 0.75rem 0);\n --label-font-weight: var(--jb-textarea-label-font-weight, 300);\n --box-margin: var(--jb-textarea-box-margin, 0px);\n --box-overflow: var(--jb-textarea-box-overflow, hidden);\n --box-shadow: var(--jb-textarea-box-shadow, none);\n --box-shadow-focus: var(--jb-textarea-box-shadow-focus, none);\n --textarea-text-align: var(--jb-textarea-textarea-text-align, initial);\n --textarea-direction: var(--jb-textarea-textarea-direction, inherit);\n --textarea-font-weight: var(--jb-textarea-textarea-font-weight, initial);\n --message-box-display: var(--jb-textarea-message-box-display, block);\n}\n:host(:state(invalid)){\n --message-color:var(--jb-textarea-message-color-error, var(--jb-red));\n}\n:host(:state(disabled)){\n --input-box-bg-color: var(--jb-textarea-bg-color-disabled, hsl(from var(--base-bg-color) h 12% 66.1));\n --border-color: var(--jb-textarea-border-color-disabled, hsl(from var(--base-border-color) h 12% 66.1));\n --value-color:var(--jb-textarea-value-color-disabled, var(--jb-neutral-3));\n --label-color:var(--jb-textarea-label-color-disabled, var(--jb-neutral-3));\n}\n:host(:focus-within){\n --border-color:var(--jb-textarea-border-color-focus, var(--jb-neutral));\n}\n\n/* Size */\n:host([size=\"xs\"]) {\n --height: var(--jb-textarea-height-xs, 3rem);\n --min-height: var(--jb-textarea-min-height-xs, 3rem);\n --value-font-size: var(--jb-textarea-value-font-size-xs, 0.75rem);\n --label-font-size: var(--jb-textarea-label-font-size-xs, 0.6rem);\n --message-font-size: var(--jb-textarea-message-font-size-xs, 0.525rem);\n --input-padding: var(--jb-textarea-input-padding-xs, 0.125rem 0.375rem 0 0.375rem);\n --border-radius: var(--jb-textarea-border-radius-xs, var(--jb-radius-xs));\n --inline-slots-padding: var(--jb-textarea-inline-slots-padding-xs, 0.125rem 0.25rem);\n}\n\n:host([size=\"sm\"]) {\n --height: var(--jb-textarea-height-sm, 4rem);\n --min-height: var(--jb-textarea-min-height-sm, 4rem);\n --value-font-size: var(--jb-textarea-value-font-size-sm, 0.875rem);\n --label-font-size: var(--jb-textarea-label-font-size-sm, 0.7rem);\n --message-font-size: var(--jb-textarea-message-font-size-sm, 0.6125rem);\n --input-padding: var(--jb-textarea-input-padding-sm, 0.125rem 0.5625rem 0 0.5625rem);\n --border-radius: var(--jb-textarea-border-radius-sm, var(--jb-radius-sm));\n --inline-slots-padding: var(--jb-textarea-inline-slots-padding-sm, 0.25rem 0.5rem);\n}\n\n:host([size=\"lg\"]) {\n --height: var(--jb-textarea-height-lg, 7rem);\n --min-height: var(--jb-textarea-min-height-lg, 7rem);\n --value-font-size: var(--jb-textarea-value-font-size-lg, 1.125rem);\n --label-font-size: var(--jb-textarea-label-font-size-lg, 0.9rem);\n --message-font-size: var(--jb-textarea-message-font-size-lg, 0.7875rem);\n --input-padding: var(--jb-textarea-input-padding-lg, 0.125rem 0.9375rem 0 0.9375rem);\n --border-radius: var(--jb-textarea-border-radius-lg, var(--jb-radius-lg));\n --inline-slots-padding: var(--jb-textarea-inline-slots-padding-lg, 0.5rem 0.75rem);\n}\n\n:host([size=\"xl\"]) {\n --height: var(--jb-textarea-height-xl, 9rem);\n --min-height: var(--jb-textarea-min-height-xl, 9rem);\n --value-font-size: var(--jb-textarea-value-font-size-xl, 1.25rem);\n --label-font-size: var(--jb-textarea-label-font-size-xl, 1rem);\n --message-font-size: var(--jb-textarea-message-font-size-xl, 0.875rem);\n --input-padding: var(--jb-textarea-input-padding-xl, 0.125rem 1.125rem 0 1.125rem);\n --border-radius: var(--jb-textarea-border-radius-xl, var(--jb-radius-xl));\n --inline-slots-padding: var(--jb-textarea-inline-slots-padding-xl, 0.75rem 1rem);\n}\n","export function renderHTML(): string {\r\n return /* html */ `\r\n <div class=\"jb-textarea-web-component\" part=\"component\">\n <label for=\"textarea\" class=\"--hide\" part=\"label\"><span class=\"label-value\"></span><span aria-hidden=\"true\">:</span></label>\n <div class=\"textarea-box\" part=\"textarea-box\">\r\n <div class=\"block-start-section-wrapper\" part=\"block-start-section-wrapper\">\r\n <slot name=\"block-start-section\"></slot>\r\n </div>\r\n <div class=\"inline-start-section-wrapper\" part=\"inline-start-section-wrapper\">\r\n <slot name=\"inline-start-section\"></slot>\r\n </div>\r\n <textarea id=\"textarea\" class=\"textarea-input\" part=\"textarea\" aria-describedby=\"message\"></textarea>\n <div class=\"inline-end-section-wrapper\" part=\"inline-end-section-wrapper\">\r\n <slot name=\"inline-end-section\"></slot>\r\n </div>\r\n <div class=\"block-end-section-wrapper\" part=\"block-end-section-wrapper\">\r\n <slot name=\"block-end-section\"></slot>\r\n </div>\r\n </div>\r\n <div id=\"message\" class=\"message-box\" part=\"message\" aria-live=\"polite\" aria-atomic=\"true\"></div>\n </div>\r\n `;\r\n}\n","import CSS from './jb-textarea.css';\r\nimport VariablesCSS from './variables.css';\r\nimport { ShowValidationErrorParameters, ValidationHelper, type ValidationItem, type ValidationResult, type WithValidation } from 'jb-validation';\r\nimport type { JBFormInputStandards } from 'jb-form';\r\nimport type { JBTextareaElements, ValidationValue } from './types';\r\nimport { registerDefaultVariables } from 'jb-core/theme';\r\nimport { getRequiredMessage, i18n } from 'jb-core/i18n';\r\nimport { createInputEvent, createKeyboardEvent } from 'jb-core';\r\nimport { renderHTML } from './render';\r\n//export all internal type for user easier access\r\nexport * from './types.js';\r\n\r\n\r\nexport class JBTextareaWebComponent extends HTMLElement implements WithValidation, JBFormInputStandards<string> {\r\n static get formAssociated() {\r\n return true;\r\n }\r\n #value = '';\r\n get value() {\r\n return this.#value;\r\n }\r\n set value(value) {\r\n this.#value = value;\r\n this.#textareaElement.value = value;\r\n if (this.autoHeight) {\r\n this.#changeHeightToContentSize();\r\n }\r\n }\r\n #isAutoValidationDisabled = false;\r\n get isAutoValidationDisabled(): boolean {\r\n return this.#isAutoValidationDisabled;\r\n }\r\n set isAutoValidationDisabled(value: boolean) {\r\n this.#isAutoValidationDisabled = value;\r\n }\r\n #disabled = false;\r\n get disabled() {\r\n return this.#disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this.#disabled = value;\r\n this.#elements.textarea.disabled = value;\r\n if (value) {\r\n //TODO: remove as any when typescript support\r\n (this.#internals as any).states?.add(\"disabled\");\r\n } else {\r\n (this.#internals as any).states?.delete(\"disabled\");\r\n }\r\n }\r\n #required = false;\r\n set required(value: boolean) {\n this.#required = value;\n this.#elements.textarea.required = value;\n if (this.#internals) this.#internals.ariaRequired = value ? \"true\" : \"false\";\n this.#validation.checkValiditySync({ showError: false });\n }\r\n get required() {\r\n return this.#required;\r\n }\r\n #internals?: ElementInternals;\r\n\r\n get name() {\r\n return this.getAttribute('name') || '';\r\n }\r\n get form() {\r\n return this.#internals?.form ?? null;\r\n }\r\n set name(value: string) {\r\n this.setAttribute('name', value);\r\n }\r\n initialValue = \"\";\n formResetCallback() {\n this.value = this.initialValue;\n this.#validation.reset();\n this.#internals?.setValidity({}, '');\n }\n get isDirty(): boolean {\n return this.#value !== this.initialValue;\r\n }\r\n constructor() {\r\n super();\r\n if (typeof this.attachInternals == \"function\") {\r\n //some browser dont support attachInternals\r\n this.#internals = this.attachInternals();\r\n this.#internals.role = \"textbox\"\r\n }\r\n this.#initWebComponent();\r\n this.#initProp();\r\n }\r\n #textareaElement!: HTMLTextAreaElement;\r\n #elements!: JBTextareaElements;\r\n #initWebComponent() {\r\n const shadowRoot = this.attachShadow({\r\n mode: 'open',\r\n delegatesFocus: true,\r\n clonable: true,\r\n serializable: true\r\n });\r\n registerDefaultVariables();\r\n const html = `<style>${CSS} ${VariablesCSS}</style>` + '\\n' + renderHTML();\r\n const element = document.createElement('template');\r\n element.innerHTML = html;\r\n shadowRoot.appendChild(element.content.cloneNode(true));\r\n this.#textareaElement = shadowRoot.querySelector('.textarea-box textarea')!;\r\n this.#elements = {\r\n textarea: this.#textareaElement,\r\n label: shadowRoot.querySelector('label')!,\r\n labelValue: shadowRoot.querySelector('label .label-value')!,\r\n messageBox: shadowRoot.querySelector('.message-box')!\r\n }\r\n this.#registerEventListener();\r\n }\r\n\r\n #registerEventListener() {\r\n this.#elements.textarea.addEventListener('change', (e) => this.#onInputChange(e));\r\n this.#elements.textarea.addEventListener('beforeinput', this.#onInputBeforeInput.bind(this));\r\n this.#elements.textarea.addEventListener('input', (e) => this.#onInputInput((e as unknown as InputEvent)));\r\n this.#elements.textarea.addEventListener('blur', (e) => this.#onInputBlur((e as unknown as FocusEvent)));\r\n this.#elements.textarea.addEventListener('keypress', this.#onInputKeyPress.bind(this));\r\n this.#elements.textarea.addEventListener('keyup', this.#onInputKeyup.bind(this));\r\n this.#elements.textarea.addEventListener('keydown', this.#onInputKeyDown.bind(this));\r\n }\r\n\r\n #onInputBlur(e: FocusEvent) {\r\n this.#validation.checkValidity({ showError: true })\r\n }\r\n\r\n autoHeight = false;\r\n #validation = new ValidationHelper<ValidationValue>({\r\n clearValidationError: this.clearValidationError.bind(this),\r\n getValue: () => this.#value,\r\n getValueString: () => this.value,\r\n getValidations: this.#getInsideValidation.bind(this),\r\n setValidationResult: this.#setValidationResult.bind(this),\r\n showValidationError: this.showValidationError.bind(this)\r\n });\r\n\r\n get validation() {\r\n return this.#validation;\r\n }\r\n\r\n #initProp() {\r\n this.value = this.getAttribute('value') || '';\r\n\r\n }\r\n\r\n static get observedAttributes() {\r\n return ['label', 'message', 'value', 'placeholder', \"required\", \"error\"];\r\n }\r\n\r\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\r\n // do something when an attribute has changed\r\n this.#onAttributeChange(name, newValue);\r\n }\r\n\r\n #onAttributeChange(name: string, value: string) {\r\n switch (name) {\r\n case 'label':\r\n this.#elements.labelValue.innerHTML = value;\r\n if (this.#internals) {\r\n this.#internals.ariaLabel = value;\r\n }\r\n if (value == null || value == undefined || value == \"\") {\r\n this.#elements.label.classList.add('--hide');\r\n } else {\r\n this.#elements.label.classList.remove('--hide');\r\n }\r\n break;\r\n case 'message':\r\n if (this.#internals) {\r\n this.#internals.ariaDescription = value;\r\n }\r\n if (!this.#elements.messageBox.classList.contains(\"error\")) {\r\n this.#elements.messageBox.innerHTML = value;\r\n }\r\n break;\r\n case 'placeholder':\r\n this.#textareaElement.setAttribute('placeholder', value);\r\n if (this.#internals) {\r\n this.#internals.ariaPlaceholder = value;\r\n }\r\n break;\r\n case 'value':\r\n this.value = value;\r\n break;\r\n case 'required':\r\n this.required = value === '' || value === 'true';\r\n break;\r\n case \"error\":\r\n this.reportValidity();\r\n }\r\n\r\n }\r\n\r\n #changeHeightToContentSize() {\r\n this.#textareaElement.style.height = \"4px\";\r\n this.#textareaElement.style.height = (this.#textareaElement.scrollHeight) + \"px\";\r\n }\r\n\r\n #onInputBeforeInput(e: InputEvent) {\r\n this.#dispatchBeforeInputEvent(e);\r\n }\r\n\r\n #dispatchBeforeInputEvent(e: InputEvent): boolean {\r\n const event = createInputEvent('beforeinput', e, { cancelable: true });\r\n this.dispatchEvent(event);\r\n if (event.defaultPrevented) {\r\n e.preventDefault();\r\n }\r\n return event.defaultPrevented;\r\n }\r\n\r\n #onInputKeyDown(e: KeyboardEvent) {\r\n const event = createKeyboardEvent(\"keydown\", e, { cancelable: true });\r\n const isEventNotPrevented = this.dispatchEvent(event);\r\n if (!isEventNotPrevented) {\r\n //if event prevented by e.preventDefault();\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n #onInputKeyPress(e: KeyboardEvent) {\r\n const event = createKeyboardEvent('keypress', e, { cancelable: true });\r\n const isEventNotPrevented = this.dispatchEvent(event);\r\n if (!isEventNotPrevented) {\r\n //if event prevented by e.preventDefault();\r\n e.preventDefault();\r\n } else {\r\n if (e.key == \"Enter\") {\r\n this.#onInputEnter(e);\r\n }\r\n }\r\n }\r\n #onInputInput(e: InputEvent) {\r\n const inputText = (e.target as HTMLTextAreaElement).value;\r\n //here is the rare time we update #value directly because we want trigger event that may read value directly from dom\r\n this.#value = inputText;\r\n if (this.autoHeight) {\r\n this.#changeHeightToContentSize();\r\n }\r\n this.#triggerInputEvent(e);\r\n }\r\n #triggerInputEvent(e: InputEvent) {\r\n const inputInitObject: InputEventInit = {\r\n bubbles: e.bubbles,\r\n cancelable: e.cancelable,\r\n composed: e.composed,\r\n data: e.data,\r\n dataTransfer: e.dataTransfer,\r\n detail: e.detail,\r\n inputType: e.inputType,\r\n isComposing: e.isComposing,\r\n targetRanges: e.getTargetRanges(),\r\n view: e.view\r\n };\r\n const event = new InputEvent(\"input\", inputInitObject);\r\n this.dispatchEvent(event);\r\n }\r\n #onInputKeyup(e: KeyboardEvent) {\r\n\r\n const inputText = (e.target as HTMLTextAreaElement).value;\r\n //here is the rare time we update #value directly because we want trigger event that may read value directly from dom\r\n this.#value = inputText;\r\n this.#checkValidity(false);\r\n const event = createKeyboardEvent('keyup', e, { cancelable: true });\r\n\r\n this.dispatchEvent(event);\r\n if (event.defaultPrevented) {\r\n //if event prevented by e.preventDefault();\r\n e.preventDefault();\r\n }\r\n\r\n }\r\n #onInputEnter(e: KeyboardEvent): void {\r\n const event = createKeyboardEvent(\"enter\", e, { cancelable: true });\r\n this.dispatchEvent(event);\r\n if (event.defaultPrevented) {\r\n e.preventDefault();\r\n }\r\n }\r\n #onInputChange(e: Event) {\r\n const inputText = (e.target as HTMLTextAreaElement).value;\r\n //here is the rare time we update #value directly because we want trigger event that may read value directly from dom\r\n this.#value = inputText;\r\n this.#checkValidity(true);\r\n const dispatchedEvent = this.#dispatchChangeEvent();\r\n if (dispatchedEvent.defaultPrevented) {\r\n e.preventDefault();\r\n }\r\n }\r\n #dispatchChangeEvent() {\r\n const event = new Event('change', { bubbles: true, cancelable: true });\r\n this.dispatchEvent(event);\r\n return event;\r\n }\r\n showValidationError(error: ShowValidationErrorParameters | string) {\n const message = typeof error == \"string\" ? error : error.message;\n this.#internals?.states?.add(\"invalid\");\n if (this.#internals) this.#internals.ariaInvalid = \"true\";\n this.#elements.textarea.setAttribute(\"aria-invalid\", \"true\");\n this.#elements.textarea.setAttribute(\"aria-errormessage\", \"message\");\n this.#elements.messageBox.innerHTML = message;\n }\r\n clearValidationError() {\n const text = this.getAttribute('message') || '';\r\n this.#internals?.states?.delete(\"invalid\");\n if (this.#internals) this.#internals.ariaInvalid = \"false\";\n this.#elements.textarea.setAttribute(\"aria-invalid\", \"false\");\n this.#elements.textarea.removeAttribute(\"aria-errormessage\");\n this.#elements.messageBox.innerHTML = text;\n }\r\n #getInsideValidation(): ValidationItem<ValidationValue>[] {\r\n const validationList: ValidationItem<ValidationValue>[] = [];\r\n const error = this.getAttribute(\"error\");\r\n if (error !== null && error.trim().length > 0) {\r\n validationList.push({\r\n validator: undefined,\r\n message: error,\r\n stateType: \"customError\"\r\n });\r\n }\r\n if (this.required) {\r\n validationList.push({\r\n validator: /.{1}/g,\r\n message: getRequiredMessage(i18n, this.getAttribute(\"label\")),\r\n stateType: \"valueMissing\"\r\n });\r\n }\r\n return validationList;\r\n }\r\n #checkValidity(showError: boolean) {\r\n if (!this.isAutoValidationDisabled) {\r\n if (this.#internals?.states.has(\"invalid\")) {\r\n // if we currently showing error to user it make sure error get updated (when failed validation changed of function return different string as an error) \r\n showError = true;\r\n }\r\n return this.#validation.checkValidity({ showError });\r\n }\r\n }\r\n /**\r\n * @description this method called on every checkValidity calls and update validation result of #internal\r\n */\r\n #setValidationResult(result: ValidationResult<ValidationValue>) {\r\n if (result.isAllValid) {\r\n this.#internals?.setValidity({}, '');\r\n } else {\r\n const states: ValidityStateFlags = {};\r\n let message = \"\";\r\n result.validationList.forEach((res) => {\r\n if (!res.isValid) {\r\n if (res.validation.stateType) { states[res.validation.stateType] = true; }\r\n if (message == '') { message = res.message ?? \"\"; }\r\n }\r\n });\r\n this.#internals?.setValidity(states, message);\r\n }\r\n }\r\n get validationMessage() {\r\n return this.#internals?.validationMessage ?? \"\";\r\n }\r\n /**\r\n * @public\r\n * @description this method used to check for validity but doesn't show error to user and just return the result\r\n * this method used by #internal of component\r\n */\r\n checkValidity(): boolean {\r\n const validationResult = this.#validation.checkValiditySync({ showError: false });\r\n if (!validationResult.isAllValid) {\r\n const event = new CustomEvent('invalid');\r\n this.dispatchEvent(event);\r\n }\r\n return validationResult.isAllValid;\r\n }\r\n /**\r\n * @public\r\n * @description this method used to check for validity and show error to user\r\n */\r\n reportValidity(): boolean {\r\n const validationResult = this.#validation.checkValiditySync({ showError: true });\r\n if (!validationResult.isAllValid) {\r\n const event = new CustomEvent('invalid');\r\n this.dispatchEvent(event);\r\n }\r\n return validationResult.isAllValid;\r\n }\r\n}\r\n\r\nconst myElementNotExists = !customElements.get('jb-textarea');\r\nif (myElementNotExists) {\r\n //prevent duplicate registering\r\n window.customElements.define('jb-textarea', JBTextareaWebComponent);\r\n}\r\n"],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ (function(e, t) {
2
+ "object" == typeof exports && "undefined" != typeof module ? t(exports, require("jb-validation"), require("jb-core/theme"), require("jb-core/i18n"), require("jb-core")) : "function" == typeof define && define.amd ? define([
3
+ "exports",
4
+ "jb-validation",
5
+ "jb-core/theme",
6
+ "jb-core/i18n",
7
+ "jb-core"
8
+ ], t) : t((e = "undefined" != typeof globalThis ? globalThis : e || self).JBTextarea = {}, e.JBValidation, e.JBCoreTheme, e.JBCoreI18N, e.JBCore);
9
+ })(this, function(e, t, a, r, i) {
10
+ Object.defineProperty(e, Symbol.toStringTag, { value: "Module" });
11
+ var n = class extends HTMLElement {
12
+ static get formAssociated() {
13
+ return !0;
14
+ }
15
+ #e;
16
+ get value() {
17
+ return this.#e;
18
+ }
19
+ set value(e) {
20
+ this.#e = e, this.#t.value = e, this.autoHeight && this.#a();
21
+ }
22
+ #r;
23
+ get isAutoValidationDisabled() {
24
+ return this.#r;
25
+ }
26
+ set isAutoValidationDisabled(e) {
27
+ this.#r = e;
28
+ }
29
+ #i;
30
+ get disabled() {
31
+ return this.#i;
32
+ }
33
+ set disabled(e) {
34
+ this.#i = e, this.#n.textarea.disabled = e, e ? this.#s.states?.add("disabled") : this.#s.states?.delete("disabled");
35
+ }
36
+ #o;
37
+ set required(e) {
38
+ this.#o = e, this.#n.textarea.required = e, this.#s && (this.#s.ariaRequired = e ? "true" : "false"), this.#l.checkValiditySync({ showError: !1 });
39
+ }
40
+ get required() {
41
+ return this.#o;
42
+ }
43
+ #s;
44
+ get name() {
45
+ return this.getAttribute("name") || "";
46
+ }
47
+ get form() {
48
+ return this.#s?.form ?? null;
49
+ }
50
+ set name(e) {
51
+ this.setAttribute("name", e);
52
+ }
53
+ formResetCallback() {
54
+ this.value = this.initialValue, this.#l.reset(), this.#s?.setValidity({}, "");
55
+ }
56
+ get isDirty() {
57
+ return this.#e !== this.initialValue;
58
+ }
59
+ constructor() {
60
+ super(), this.#e = "", this.#r = !1, this.#i = !1, this.#o = !1, this.initialValue = "", this.autoHeight = !1, this.#l = new t.ValidationHelper({
61
+ clearValidationError: this.clearValidationError.bind(this),
62
+ getValue: () => this.#e,
63
+ getValueString: () => this.value,
64
+ getValidations: this.#d.bind(this),
65
+ setValidationResult: this.#b.bind(this),
66
+ showValidationError: this.showValidationError.bind(this)
67
+ }), "function" == typeof this.attachInternals && (this.#s = this.attachInternals(), this.#s.role = "textbox"), this.#h(), this.#c();
68
+ }
69
+ #t;
70
+ #n;
71
+ #h() {
72
+ const e = this.attachShadow({
73
+ mode: "open",
74
+ delegatesFocus: !0,
75
+ clonable: !0,
76
+ serializable: !0
77
+ });
78
+ (0, a.registerDefaultVariables)();
79
+ const t = document.createElement("template");
80
+ t.innerHTML = "<style>.jb-textarea-web-component{width:var(--width);margin:var(--margin)}.jb-textarea-web-component label{width:100%;margin:var(--label-margin);font-size:var(--label-font-size);font-weight:var(--label-font-weight);color:var(--label-color);display:block}.jb-textarea-web-component label.--hide{display:none}.jb-textarea-web-component .textarea-box{width:100%;margin:var(--box-margin);box-sizing:border-box;border:solid var(--border-width) var(--border-color);background-color:var(--input-box-bg-color);border-bottom:solid var(--border-bottom-width) var(--border-color);border-radius:var(--border-radius);overflow:var(--box-overflow);box-shadow:var(--box-shadow);grid-template:\"slot-block-start slot-block-start slot-block-start\"\"slot-inline-start textarea slot-inline-end\"1fr\"slot-block-end slot-block-end slot-block-end\"/auto 1fr auto;transition:all .3s;display:grid}.jb-textarea-web-component .textarea-box textarea{box-sizing:border-box;width:100%;min-height:var(--min-height);height:var(--height);max-height:var(--max-height);padding:var(--input-padding);font-family:inherit;font-size:var(--value-font-size);font-weight:var(--textarea-font-weight);text-align:var(--textarea-text-align);direction:var(--textarea-direction);resize:vertical;color:var(--value-color);background-color:#0000;border:none;border-radius:0;grid-area:textarea;margin:0;display:block}.jb-textarea-web-component .textarea-box textarea::placeholder{color:var(--placeholder-color);font-size:var(--placeholder-font-size)}.jb-textarea-web-component .textarea-box .block-start-section-wrapper{grid-area:slot-block-start}.jb-textarea-web-component .textarea-box .block-end-section-wrapper{grid-area:slot-block-end}.jb-textarea-web-component .textarea-box .inline-start-section-wrapper{grid-area:slot-inline-start}.jb-textarea-web-component .textarea-box .inline-end-section-wrapper{grid-area:slot-inline-end}.jb-textarea-web-component .textarea-box .block-start-section-wrapper,.jb-textarea-web-component .textarea-box .block-end-section-wrapper{justify-content:start;align-items:center;width:100%;height:auto;display:flex}.jb-textarea-web-component .textarea-box .inline-start-section-wrapper,.jb-textarea-web-component .textarea-box .inline-end-section-wrapper{justify-content:center;align-items:center;width:auto;height:100%;display:flex}.jb-textarea-web-component .textarea-box ::slotted([slot=block-start-section]),.jb-textarea-web-component .textarea-box ::slotted([slot=block-end-section]){box-sizing:border-box;background-color:#0000;justify-content:start;align-items:center;width:auto;max-width:100%;height:auto;padding:.5rem 1rem;display:flex;overflow-x:hidden}.jb-textarea-web-component .textarea-box ::slotted([slot=inline-start-section]),.jb-textarea-web-component .textarea-box ::slotted([slot=inline-end-section]){height:100%;max-height:100%;padding:var(--inline-slots-padding);box-sizing:border-box;background-color:#0000;justify-content:center;align-items:center;width:auto;display:flex;overflow-y:hidden}.jb-textarea-web-component .message-box{display:var(--message-box-display);font-size:var(--message-font-size);padding:var(--message-padding);color:var(--message-color)}.jb-textarea-web-component .message-box:empty{padding:0} :host{--width:var(--jb-textarea-width,100%);--border-radius:var(--jb-textarea-border-radius,var(--jb-radius));--height:var(--jb-textarea-height,5rem);--min-height:var(--jb-textarea-min-height,5rem);--max-height:var(--jb-textarea-max-height,none);--border-width:var(--jb-textarea-border-width,1px);--border-bottom-width:var(--jb-textarea-border-bottom-width,3px);--border-width-focus:var(--jb-textarea-border-width-focus,var(--border-width));--border-bottom-width-focus:var(--jb-textarea-border-bottom-width-focus,var(--border-bottom-width));--inline-space:var(--jb-textarea-inline-space,min(calc(var(--border-radius) / 1.75), calc(--height / 2)));--label-margin:var(--jb-textarea-label-margin,.125rem var(--inline-space));--label-font-size:var(--jb-textarea-label-font-size,.8rem);--value-font-size:var(--jb-textarea-value-font-size,1rem);--input-padding:var(--jb-textarea-input-padding,.125rem .75rem 0 .75rem);--placeholder-font-size:var(--jb-textarea-placeholder-font-size,var(--value-font-size));--message-font-size:var(--jb-textarea-message-font-size,.7rem);--message-padding:var(--jb-textarea-message-padding,.125rem var(--inline-space));--inline-slots-padding:var(--jb-textarea-inline-slots-padding,.375rem .625rem);--base-border-color:var(--jb-textarea-border-color,var(--jb-neutral-10));--border-color:var(--jb-textarea-border-color-current,var(--base-border-color));--message-color:var(--jb-textarea-message-color,var(--jb-text-secondary));--label-color:var(--jb-textarea-label-color,var(--jb-text-primary));--value-color:var(--jb-textarea-value-color,var(--jb-text-primary));--placeholder-color:var(--jb-textarea-placeholder-color,var(--jb-neutral-6));--base-bg-color:var(--jb-textarea-bg-color,var(--jb-neutral-10));--input-box-bg-color:var(--jb-textarea-input-box-bg-color,var(--base-bg-color));--margin:var(--jb-textarea-margin,.75rem 0);--label-font-weight:var(--jb-textarea-label-font-weight,300);--box-margin:var(--jb-textarea-box-margin,0px);--box-overflow:var(--jb-textarea-box-overflow,hidden);--box-shadow:var(--jb-textarea-box-shadow,none);--box-shadow-focus:var(--jb-textarea-box-shadow-focus,none);--textarea-text-align:var(--jb-textarea-textarea-text-align,initial);--textarea-direction:var(--jb-textarea-textarea-direction,inherit);--textarea-font-weight:var(--jb-textarea-textarea-font-weight,initial);--message-box-display:var(--jb-textarea-message-box-display,block)}:host(:state(invalid)){--message-color:var(--jb-textarea-message-color-error,var(--jb-red))}:host(:state(disabled)){--input-box-bg-color:var(--jb-textarea-bg-color-disabled,hsl(from var(--base-bg-color) h 12% 66.1));--border-color:var(--jb-textarea-border-color-disabled,hsl(from var(--base-border-color) h 12% 66.1));--value-color:var(--jb-textarea-value-color-disabled,var(--jb-neutral-3));--label-color:var(--jb-textarea-label-color-disabled,var(--jb-neutral-3))}:host(:focus-within){--border-color:var(--jb-textarea-border-color-focus,var(--jb-neutral))}:host([size=xs]){--height:var(--jb-textarea-height-xs,3rem);--min-height:var(--jb-textarea-min-height-xs,3rem);--value-font-size:var(--jb-textarea-value-font-size-xs,.75rem);--label-font-size:var(--jb-textarea-label-font-size-xs,.6rem);--message-font-size:var(--jb-textarea-message-font-size-xs,.525rem);--input-padding:var(--jb-textarea-input-padding-xs,.125rem .375rem 0 .375rem);--border-radius:var(--jb-textarea-border-radius-xs,var(--jb-radius-xs));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-xs,.125rem .25rem)}:host([size=sm]){--height:var(--jb-textarea-height-sm,4rem);--min-height:var(--jb-textarea-min-height-sm,4rem);--value-font-size:var(--jb-textarea-value-font-size-sm,.875rem);--label-font-size:var(--jb-textarea-label-font-size-sm,.7rem);--message-font-size:var(--jb-textarea-message-font-size-sm,.6125rem);--input-padding:var(--jb-textarea-input-padding-sm,.125rem .5625rem 0 .5625rem);--border-radius:var(--jb-textarea-border-radius-sm,var(--jb-radius-sm));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-sm,.25rem .5rem)}:host([size=lg]){--height:var(--jb-textarea-height-lg,7rem);--min-height:var(--jb-textarea-min-height-lg,7rem);--value-font-size:var(--jb-textarea-value-font-size-lg,1.125rem);--label-font-size:var(--jb-textarea-label-font-size-lg,.9rem);--message-font-size:var(--jb-textarea-message-font-size-lg,.7875rem);--input-padding:var(--jb-textarea-input-padding-lg,.125rem .9375rem 0 .9375rem);--border-radius:var(--jb-textarea-border-radius-lg,var(--jb-radius-lg));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-lg,.5rem .75rem)}:host([size=xl]){--height:var(--jb-textarea-height-xl,9rem);--min-height:var(--jb-textarea-min-height-xl,9rem);--value-font-size:var(--jb-textarea-value-font-size-xl,1.25rem);--label-font-size:var(--jb-textarea-label-font-size-xl,1rem);--message-font-size:var(--jb-textarea-message-font-size-xl,.875rem);--input-padding:var(--jb-textarea-input-padding-xl,.125rem 1.125rem 0 1.125rem);--border-radius:var(--jb-textarea-border-radius-xl,var(--jb-radius-xl));--inline-slots-padding:var(--jb-textarea-inline-slots-padding-xl,.75rem 1rem)}</style>\n\n <div class=\"jb-textarea-web-component\" part=\"component\">\n <label for=\"textarea\" class=\"--hide\" part=\"label\"><span class=\"label-value\"></span><span aria-hidden=\"true\">:</span></label>\n <div class=\"textarea-box\" part=\"textarea-box\">\n <div class=\"block-start-section-wrapper\" part=\"block-start-section-wrapper\">\n <slot name=\"block-start-section\"></slot>\n </div>\n <div class=\"inline-start-section-wrapper\" part=\"inline-start-section-wrapper\">\n <slot name=\"inline-start-section\"></slot>\n </div>\n <textarea id=\"textarea\" class=\"textarea-input\" part=\"textarea\" aria-describedby=\"message\"></textarea>\n <div class=\"inline-end-section-wrapper\" part=\"inline-end-section-wrapper\">\n <slot name=\"inline-end-section\"></slot>\n </div>\n <div class=\"block-end-section-wrapper\" part=\"block-end-section-wrapper\">\n <slot name=\"block-end-section\"></slot>\n </div>\n </div>\n <div id=\"message\" class=\"message-box\" part=\"message\" aria-live=\"polite\" aria-atomic=\"true\"></div>\n </div>\n ", e.appendChild(t.content.cloneNode(!0)), this.#t = e.querySelector(".textarea-box textarea"), this.#n = {
81
+ textarea: this.#t,
82
+ label: e.querySelector("label"),
83
+ labelValue: e.querySelector("label .label-value"),
84
+ messageBox: e.querySelector(".message-box")
85
+ }, this.#v();
86
+ }
87
+ #v() {
88
+ this.#n.textarea.addEventListener("change", (e) => this.#u(e)), this.#n.textarea.addEventListener("beforeinput", this.#x.bind(this)), this.#n.textarea.addEventListener("input", (e) => this.#m(e)), this.#n.textarea.addEventListener("blur", (e) => this.#g(e)), this.#n.textarea.addEventListener("keypress", this.#p.bind(this)), this.#n.textarea.addEventListener("keyup", this.#f.bind(this)), this.#n.textarea.addEventListener("keydown", this.#j.bind(this));
89
+ }
90
+ #g(e) {
91
+ this.#l.checkValidity({ showError: !0 });
92
+ }
93
+ #l;
94
+ get validation() {
95
+ return this.#l;
96
+ }
97
+ #c() {
98
+ this.value = this.getAttribute("value") || "";
99
+ }
100
+ static get observedAttributes() {
101
+ return [
102
+ "label",
103
+ "message",
104
+ "value",
105
+ "placeholder",
106
+ "required",
107
+ "error"
108
+ ];
109
+ }
110
+ attributeChangedCallback(e, t, a) {
111
+ this.#w(e, a);
112
+ }
113
+ #w(e, t) {
114
+ switch (e) {
115
+ case "label":
116
+ this.#n.labelValue.innerHTML = t, this.#s && (this.#s.ariaLabel = t), null == t || null == t || "" == t ? this.#n.label.classList.add("--hide") : this.#n.label.classList.remove("--hide");
117
+ break;
118
+ case "message":
119
+ this.#s && (this.#s.ariaDescription = t), this.#n.messageBox.classList.contains("error") || (this.#n.messageBox.innerHTML = t);
120
+ break;
121
+ case "placeholder":
122
+ this.#t.setAttribute("placeholder", t), this.#s && (this.#s.ariaPlaceholder = t);
123
+ break;
124
+ case "value":
125
+ this.value = t;
126
+ break;
127
+ case "required":
128
+ this.required = "" === t || "true" === t;
129
+ break;
130
+ case "error": this.reportValidity();
131
+ }
132
+ }
133
+ #a() {
134
+ this.#t.style.height = "4px", this.#t.style.height = this.#t.scrollHeight + "px";
135
+ }
136
+ #x(e) {
137
+ this.#y(e);
138
+ }
139
+ #y(e) {
140
+ const t = (0, i.createInputEvent)("beforeinput", e, { cancelable: !0 });
141
+ return this.dispatchEvent(t), t.defaultPrevented && e.preventDefault(), t.defaultPrevented;
142
+ }
143
+ #j(e) {
144
+ const t = (0, i.createKeyboardEvent)("keydown", e, { cancelable: !0 });
145
+ this.dispatchEvent(t) || e.preventDefault();
146
+ }
147
+ #p(e) {
148
+ const t = (0, i.createKeyboardEvent)("keypress", e, { cancelable: !0 });
149
+ this.dispatchEvent(t) ? "Enter" == e.key && this.#E(e) : e.preventDefault();
150
+ }
151
+ #m(e) {
152
+ const t = e.target.value;
153
+ this.#e = t, this.autoHeight && this.#a(), this.#z(e);
154
+ }
155
+ #z(e) {
156
+ const t = {
157
+ bubbles: e.bubbles,
158
+ cancelable: e.cancelable,
159
+ composed: e.composed,
160
+ data: e.data,
161
+ dataTransfer: e.dataTransfer,
162
+ detail: e.detail,
163
+ inputType: e.inputType,
164
+ isComposing: e.isComposing,
165
+ targetRanges: e.getTargetRanges(),
166
+ view: e.view
167
+ }, a = new InputEvent("input", t);
168
+ this.dispatchEvent(a);
169
+ }
170
+ #f(e) {
171
+ const t = e.target.value;
172
+ this.#e = t, this.#k(!1);
173
+ const a = (0, i.createKeyboardEvent)("keyup", e, { cancelable: !0 });
174
+ this.dispatchEvent(a), a.defaultPrevented && e.preventDefault();
175
+ }
176
+ #E(e) {
177
+ const t = (0, i.createKeyboardEvent)("enter", e, { cancelable: !0 });
178
+ this.dispatchEvent(t), t.defaultPrevented && e.preventDefault();
179
+ }
180
+ #u(e) {
181
+ const t = e.target.value;
182
+ this.#e = t, this.#k(!0), this.#V().defaultPrevented && e.preventDefault();
183
+ }
184
+ #V() {
185
+ const e = new Event("change", {
186
+ bubbles: !0,
187
+ cancelable: !0
188
+ });
189
+ return this.dispatchEvent(e), e;
190
+ }
191
+ showValidationError(e) {
192
+ const t = "string" == typeof e ? e : e.message;
193
+ this.#s?.states?.add("invalid"), this.#s && (this.#s.ariaInvalid = "true"), this.#n.textarea.setAttribute("aria-invalid", "true"), this.#n.textarea.setAttribute("aria-errormessage", "message"), this.#n.messageBox.innerHTML = t;
194
+ }
195
+ clearValidationError() {
196
+ const e = this.getAttribute("message") || "";
197
+ this.#s?.states?.delete("invalid"), this.#s && (this.#s.ariaInvalid = "false"), this.#n.textarea.setAttribute("aria-invalid", "false"), this.#n.textarea.removeAttribute("aria-errormessage"), this.#n.messageBox.innerHTML = e;
198
+ }
199
+ #d() {
200
+ const e = [], t = this.getAttribute("error");
201
+ return null !== t && t.trim().length > 0 && e.push({
202
+ validator: void 0,
203
+ message: t,
204
+ stateType: "customError"
205
+ }), this.required && e.push({
206
+ validator: /.{1}/g,
207
+ message: (0, r.getRequiredMessage)(r.i18n, this.getAttribute("label")),
208
+ stateType: "valueMissing"
209
+ }), e;
210
+ }
211
+ #k(e) {
212
+ if (!this.isAutoValidationDisabled) return this.#s?.states.has("invalid") && (e = !0), this.#l.checkValidity({ showError: e });
213
+ }
214
+ #b(e) {
215
+ if (e.isAllValid) this.#s?.setValidity({}, "");
216
+ else {
217
+ const t = {};
218
+ let a = "";
219
+ e.validationList.forEach((e) => {
220
+ e.isValid || (e.validation.stateType && (t[e.validation.stateType] = !0), "" == a && (a = e.message ?? ""));
221
+ }), this.#s?.setValidity(t, a);
222
+ }
223
+ }
224
+ get validationMessage() {
225
+ return this.#s?.validationMessage ?? "";
226
+ }
227
+ checkValidity() {
228
+ const e = this.#l.checkValiditySync({ showError: !1 });
229
+ if (!e.isAllValid) {
230
+ const e = new CustomEvent("invalid");
231
+ this.dispatchEvent(e);
232
+ }
233
+ return e.isAllValid;
234
+ }
235
+ reportValidity() {
236
+ const e = this.#l.checkValiditySync({ showError: !0 });
237
+ if (!e.isAllValid) {
238
+ const e = new CustomEvent("invalid");
239
+ this.dispatchEvent(e);
240
+ }
241
+ return e.isAllValid;
242
+ }
243
+ };
244
+ customElements.get("jb-textarea") || window.customElements.define("jb-textarea", n), e.JBTextareaWebComponent = n;
245
+ });
246
+
247
+ //# sourceMappingURL=jb-textarea.umd.js.map