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.
- package/README.md +240 -171
- package/index.js +1 -1
- package/package.json +20 -7
- package/react/README.md +93 -30
- package/react/dist/JBTextarea.cjs.js +65 -1
- package/react/dist/JBTextarea.cjs.js.map +1 -1
- package/react/dist/JBTextarea.d.ts +68 -30
- package/react/dist/JBTextarea.js +53 -1
- package/react/dist/JBTextarea.js.map +1 -1
- package/react/dist/JBTextarea.umd.js +70 -1
- package/react/dist/JBTextarea.umd.js.map +1 -1
- package/react/lib/JBTextarea.tsx +15 -32
- package/react/lib/attributes-hook.ts +5 -13
- package/react/lib/events-hook.ts +4 -4
- package/react/lib/module-declaration.ts +20 -0
- package/react/tsconfig.json +2 -2
- package/web-component/custom-elements.json +494 -0
- package/web-component/dist/jb-textarea.cjs.js +238 -0
- package/web-component/dist/jb-textarea.cjs.js.br +0 -0
- package/web-component/dist/jb-textarea.cjs.js.gz +0 -0
- package/web-component/dist/jb-textarea.cjs.js.map +1 -0
- package/web-component/dist/jb-textarea.d.ts +311 -0
- package/web-component/dist/jb-textarea.d.ts.map +1 -0
- package/web-component/dist/jb-textarea.js +241 -0
- package/web-component/dist/jb-textarea.js.br +0 -0
- package/web-component/dist/jb-textarea.js.gz +0 -0
- package/web-component/dist/jb-textarea.js.map +1 -0
- package/web-component/dist/jb-textarea.umd.js +247 -0
- package/web-component/dist/jb-textarea.umd.js.br +0 -0
- package/web-component/dist/jb-textarea.umd.js.gz +0 -0
- package/web-component/dist/jb-textarea.umd.js.map +1 -0
- package/{lib → web-component/lib}/jb-textarea.css +12 -15
- package/{lib → web-component/lib}/jb-textarea.ts +58 -29
- package/{lib → web-component/lib}/render.ts +5 -5
- package/web-component/lib/variables.css +99 -0
- package/dist/jb-textarea.cjs.js +0 -2
- package/dist/jb-textarea.cjs.js.br +0 -0
- package/dist/jb-textarea.cjs.js.gz +0 -0
- package/dist/jb-textarea.cjs.js.map +0 -1
- package/dist/jb-textarea.d.ts +0 -39
- package/dist/jb-textarea.d.ts.map +0 -1
- package/dist/jb-textarea.js +0 -2
- package/dist/jb-textarea.js.br +0 -0
- package/dist/jb-textarea.js.gz +0 -0
- package/dist/jb-textarea.js.map +0 -1
- package/dist/jb-textarea.umd.js +0 -2
- package/dist/jb-textarea.umd.js.br +0 -0
- package/dist/jb-textarea.umd.js.gz +0 -0
- package/dist/jb-textarea.umd.js.map +0 -1
- package/lib/global.d.ts +0 -15
- package/lib/variables.css +0 -39
- /package/{dist → web-component/dist}/render.d.ts +0 -0
- /package/{dist → web-component/dist}/render.d.ts.map +0 -0
- /package/{dist → web-component/dist}/types.d.ts +0 -0
- /package/{dist → web-component/dist}/types.d.ts.map +0 -0
- /package/{lib → web-component/lib}/types.ts +0 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let e = require("jb-validation"), t = require("jb-core/theme"), a = require("jb-core/i18n"), r = require("jb-core");
|
|
3
|
+
var i = class extends HTMLElement {
|
|
4
|
+
static get formAssociated() {
|
|
5
|
+
return !0;
|
|
6
|
+
}
|
|
7
|
+
#e;
|
|
8
|
+
get value() {
|
|
9
|
+
return this.#e;
|
|
10
|
+
}
|
|
11
|
+
set value(e) {
|
|
12
|
+
this.#e = e, this.#t.value = e, this.autoHeight && this.#a();
|
|
13
|
+
}
|
|
14
|
+
#r;
|
|
15
|
+
get isAutoValidationDisabled() {
|
|
16
|
+
return this.#r;
|
|
17
|
+
}
|
|
18
|
+
set isAutoValidationDisabled(e) {
|
|
19
|
+
this.#r = e;
|
|
20
|
+
}
|
|
21
|
+
#i;
|
|
22
|
+
get disabled() {
|
|
23
|
+
return this.#i;
|
|
24
|
+
}
|
|
25
|
+
set disabled(e) {
|
|
26
|
+
this.#i = e, this.#s.textarea.disabled = e, e ? this.#n.states?.add("disabled") : this.#n.states?.delete("disabled");
|
|
27
|
+
}
|
|
28
|
+
#o;
|
|
29
|
+
set required(e) {
|
|
30
|
+
this.#o = e, this.#s.textarea.required = e, this.#n && (this.#n.ariaRequired = e ? "true" : "false"), this.#l.checkValiditySync({ showError: !1 });
|
|
31
|
+
}
|
|
32
|
+
get required() {
|
|
33
|
+
return this.#o;
|
|
34
|
+
}
|
|
35
|
+
#n;
|
|
36
|
+
get name() {
|
|
37
|
+
return this.getAttribute("name") || "";
|
|
38
|
+
}
|
|
39
|
+
get form() {
|
|
40
|
+
return this.#n?.form ?? null;
|
|
41
|
+
}
|
|
42
|
+
set name(e) {
|
|
43
|
+
this.setAttribute("name", e);
|
|
44
|
+
}
|
|
45
|
+
formResetCallback() {
|
|
46
|
+
this.value = this.initialValue, this.#l.reset(), this.#n?.setValidity({}, "");
|
|
47
|
+
}
|
|
48
|
+
get isDirty() {
|
|
49
|
+
return this.#e !== this.initialValue;
|
|
50
|
+
}
|
|
51
|
+
constructor() {
|
|
52
|
+
super(), this.#e = "", this.#r = !1, this.#i = !1, this.#o = !1, this.initialValue = "", this.autoHeight = !1, this.#l = new e.ValidationHelper({
|
|
53
|
+
clearValidationError: this.clearValidationError.bind(this),
|
|
54
|
+
getValue: () => this.#e,
|
|
55
|
+
getValueString: () => this.value,
|
|
56
|
+
getValidations: this.#d.bind(this),
|
|
57
|
+
setValidationResult: this.#b.bind(this),
|
|
58
|
+
showValidationError: this.showValidationError.bind(this)
|
|
59
|
+
}), "function" == typeof this.attachInternals && (this.#n = this.attachInternals(), this.#n.role = "textbox"), this.#h(), this.#c();
|
|
60
|
+
}
|
|
61
|
+
#t;
|
|
62
|
+
#s;
|
|
63
|
+
#h() {
|
|
64
|
+
const e = this.attachShadow({
|
|
65
|
+
mode: "open",
|
|
66
|
+
delegatesFocus: !0,
|
|
67
|
+
clonable: !0,
|
|
68
|
+
serializable: !0
|
|
69
|
+
});
|
|
70
|
+
(0, t.registerDefaultVariables)();
|
|
71
|
+
const a = document.createElement("template");
|
|
72
|
+
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 = {
|
|
73
|
+
textarea: this.#t,
|
|
74
|
+
label: e.querySelector("label"),
|
|
75
|
+
labelValue: e.querySelector("label .label-value"),
|
|
76
|
+
messageBox: e.querySelector(".message-box")
|
|
77
|
+
}, this.#v();
|
|
78
|
+
}
|
|
79
|
+
#v() {
|
|
80
|
+
this.#s.textarea.addEventListener("change", (e) => this.#x(e)), this.#s.textarea.addEventListener("beforeinput", this.#u.bind(this)), this.#s.textarea.addEventListener("input", (e) => this.#m(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));
|
|
81
|
+
}
|
|
82
|
+
#g(e) {
|
|
83
|
+
this.#l.checkValidity({ showError: !0 });
|
|
84
|
+
}
|
|
85
|
+
#l;
|
|
86
|
+
get validation() {
|
|
87
|
+
return this.#l;
|
|
88
|
+
}
|
|
89
|
+
#c() {
|
|
90
|
+
this.value = this.getAttribute("value") || "";
|
|
91
|
+
}
|
|
92
|
+
static get observedAttributes() {
|
|
93
|
+
return [
|
|
94
|
+
"label",
|
|
95
|
+
"message",
|
|
96
|
+
"value",
|
|
97
|
+
"placeholder",
|
|
98
|
+
"required",
|
|
99
|
+
"error"
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
attributeChangedCallback(e, t, a) {
|
|
103
|
+
this.#w(e, a);
|
|
104
|
+
}
|
|
105
|
+
#w(e, t) {
|
|
106
|
+
switch (e) {
|
|
107
|
+
case "label":
|
|
108
|
+
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");
|
|
109
|
+
break;
|
|
110
|
+
case "message":
|
|
111
|
+
this.#n && (this.#n.ariaDescription = t), this.#s.messageBox.classList.contains("error") || (this.#s.messageBox.innerHTML = t);
|
|
112
|
+
break;
|
|
113
|
+
case "placeholder":
|
|
114
|
+
this.#t.setAttribute("placeholder", t), this.#n && (this.#n.ariaPlaceholder = t);
|
|
115
|
+
break;
|
|
116
|
+
case "value":
|
|
117
|
+
this.value = t;
|
|
118
|
+
break;
|
|
119
|
+
case "required":
|
|
120
|
+
this.required = "" === t || "true" === t;
|
|
121
|
+
break;
|
|
122
|
+
case "error": this.reportValidity();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
#a() {
|
|
126
|
+
this.#t.style.height = "4px", this.#t.style.height = this.#t.scrollHeight + "px";
|
|
127
|
+
}
|
|
128
|
+
#u(e) {
|
|
129
|
+
this.#y(e);
|
|
130
|
+
}
|
|
131
|
+
#y(e) {
|
|
132
|
+
const t = (0, r.createInputEvent)("beforeinput", e, { cancelable: !0 });
|
|
133
|
+
return this.dispatchEvent(t), t.defaultPrevented && e.preventDefault(), t.defaultPrevented;
|
|
134
|
+
}
|
|
135
|
+
#f(e) {
|
|
136
|
+
const t = (0, r.createKeyboardEvent)("keydown", e, { cancelable: !0 });
|
|
137
|
+
this.dispatchEvent(t) || e.preventDefault();
|
|
138
|
+
}
|
|
139
|
+
#p(e) {
|
|
140
|
+
const t = (0, r.createKeyboardEvent)("keypress", e, { cancelable: !0 });
|
|
141
|
+
this.dispatchEvent(t) ? "Enter" == e.key && this.#E(e) : e.preventDefault();
|
|
142
|
+
}
|
|
143
|
+
#m(e) {
|
|
144
|
+
const t = e.target.value;
|
|
145
|
+
this.#e = t, this.autoHeight && this.#a(), this.#z(e);
|
|
146
|
+
}
|
|
147
|
+
#z(e) {
|
|
148
|
+
const t = {
|
|
149
|
+
bubbles: e.bubbles,
|
|
150
|
+
cancelable: e.cancelable,
|
|
151
|
+
composed: e.composed,
|
|
152
|
+
data: e.data,
|
|
153
|
+
dataTransfer: e.dataTransfer,
|
|
154
|
+
detail: e.detail,
|
|
155
|
+
inputType: e.inputType,
|
|
156
|
+
isComposing: e.isComposing,
|
|
157
|
+
targetRanges: e.getTargetRanges(),
|
|
158
|
+
view: e.view
|
|
159
|
+
}, a = new InputEvent("input", t);
|
|
160
|
+
this.dispatchEvent(a);
|
|
161
|
+
}
|
|
162
|
+
#j(e) {
|
|
163
|
+
const t = e.target.value;
|
|
164
|
+
this.#e = t, this.#k(!1);
|
|
165
|
+
const a = (0, r.createKeyboardEvent)("keyup", e, { cancelable: !0 });
|
|
166
|
+
this.dispatchEvent(a), a.defaultPrevented && e.preventDefault();
|
|
167
|
+
}
|
|
168
|
+
#E(e) {
|
|
169
|
+
const t = (0, r.createKeyboardEvent)("enter", e, { cancelable: !0 });
|
|
170
|
+
this.dispatchEvent(t), t.defaultPrevented && e.preventDefault();
|
|
171
|
+
}
|
|
172
|
+
#x(e) {
|
|
173
|
+
const t = e.target.value;
|
|
174
|
+
this.#e = t, this.#k(!0), this.#V().defaultPrevented && e.preventDefault();
|
|
175
|
+
}
|
|
176
|
+
#V() {
|
|
177
|
+
const e = new Event("change", {
|
|
178
|
+
bubbles: !0,
|
|
179
|
+
cancelable: !0
|
|
180
|
+
});
|
|
181
|
+
return this.dispatchEvent(e), e;
|
|
182
|
+
}
|
|
183
|
+
showValidationError(e) {
|
|
184
|
+
const t = "string" == typeof e ? e : e.message;
|
|
185
|
+
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;
|
|
186
|
+
}
|
|
187
|
+
clearValidationError() {
|
|
188
|
+
const e = this.getAttribute("message") || "";
|
|
189
|
+
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;
|
|
190
|
+
}
|
|
191
|
+
#d() {
|
|
192
|
+
const e = [], t = this.getAttribute("error");
|
|
193
|
+
return null !== t && t.trim().length > 0 && e.push({
|
|
194
|
+
validator: void 0,
|
|
195
|
+
message: t,
|
|
196
|
+
stateType: "customError"
|
|
197
|
+
}), this.required && e.push({
|
|
198
|
+
validator: /.{1}/g,
|
|
199
|
+
message: (0, a.getRequiredMessage)(a.i18n, this.getAttribute("label")),
|
|
200
|
+
stateType: "valueMissing"
|
|
201
|
+
}), e;
|
|
202
|
+
}
|
|
203
|
+
#k(e) {
|
|
204
|
+
if (!this.isAutoValidationDisabled) return this.#n?.states.has("invalid") && (e = !0), this.#l.checkValidity({ showError: e });
|
|
205
|
+
}
|
|
206
|
+
#b(e) {
|
|
207
|
+
if (e.isAllValid) this.#n?.setValidity({}, "");
|
|
208
|
+
else {
|
|
209
|
+
const t = {};
|
|
210
|
+
let a = "";
|
|
211
|
+
e.validationList.forEach((e) => {
|
|
212
|
+
e.isValid || (e.validation.stateType && (t[e.validation.stateType] = !0), "" == a && (a = e.message ?? ""));
|
|
213
|
+
}), this.#n?.setValidity(t, a);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
get validationMessage() {
|
|
217
|
+
return this.#n?.validationMessage ?? "";
|
|
218
|
+
}
|
|
219
|
+
checkValidity() {
|
|
220
|
+
const e = this.#l.checkValiditySync({ showError: !1 });
|
|
221
|
+
if (!e.isAllValid) {
|
|
222
|
+
const e = new CustomEvent("invalid");
|
|
223
|
+
this.dispatchEvent(e);
|
|
224
|
+
}
|
|
225
|
+
return e.isAllValid;
|
|
226
|
+
}
|
|
227
|
+
reportValidity() {
|
|
228
|
+
const e = this.#l.checkValiditySync({ showError: !0 });
|
|
229
|
+
if (!e.isAllValid) {
|
|
230
|
+
const e = new CustomEvent("invalid");
|
|
231
|
+
this.dispatchEvent(e);
|
|
232
|
+
}
|
|
233
|
+
return e.isAllValid;
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
customElements.get("jb-textarea") || window.customElements.define("jb-textarea", i), exports.JBTextareaWebComponent = i;
|
|
237
|
+
|
|
238
|
+
//# sourceMappingURL=jb-textarea.cjs.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jb-textarea.cjs.js","names":["#value","#textareaElement","#changeHeightToContentSize","#isAutoValidationDisabled","#disabled","#elements","#internals","#required","#validation","ValidationHelper","#getInsideValidation","#setValidationResult","#initWebComponent","#initProp","CSS","VariablesCSS","#registerEventListener","#onInputChange","#onInputBeforeInput","#onInputInput","#onInputBlur","#onInputKeyPress","#onInputKeyup","#onInputKeyDown","#onAttributeChange","#dispatchBeforeInputEvent","#onInputEnter","#triggerInputEvent","#checkValidity","#dispatchChangeEvent","i18n"],"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,311 @@
|
|
|
1
|
+
import { ShowValidationErrorParameters, ValidationHelper, ValidationResult, ValidationResultSummary, WithValidation } from "jb-validation";
|
|
2
|
+
import { EventTypeWithTarget } from "jb-core";
|
|
3
|
+
|
|
4
|
+
//#region modules/jb-form/web-component/dist/jb-form.d.ts
|
|
5
|
+
//#region modules/jb-form/web-component/lib/virtual-element.d.ts
|
|
6
|
+
declare class VirtualElement<TValue, TValidationValue> {
|
|
7
|
+
#private;
|
|
8
|
+
name: string;
|
|
9
|
+
/**
|
|
10
|
+
* name maybe repeated but id must be unique
|
|
11
|
+
*/
|
|
12
|
+
id?: string;
|
|
13
|
+
validation?: ValidationHelper<TValidationValue>;
|
|
14
|
+
dom?: HTMLElement;
|
|
15
|
+
getValue?: () => TValue;
|
|
16
|
+
getDirtyStatus?: () => boolean;
|
|
17
|
+
setValue?: (value: TValue) => void;
|
|
18
|
+
setInitialValue?: (value: TValue) => void;
|
|
19
|
+
reset?: () => void;
|
|
20
|
+
get value(): TValue | undefined;
|
|
21
|
+
set Value(value: TValue);
|
|
22
|
+
constructor(config: VirtualElementConfig<TValue, TValidationValue>);
|
|
23
|
+
attachCallbacks(callbacks: VirtualElementCallbacks): void;
|
|
24
|
+
/**
|
|
25
|
+
* @public
|
|
26
|
+
* @description call this function when form value change so it can trigger dirty and validation check for form
|
|
27
|
+
*/
|
|
28
|
+
dispatchOnChange: () => void;
|
|
29
|
+
} //#endregion
|
|
30
|
+
//#region modules/jb-form/web-component/lib/collections.d.ts
|
|
31
|
+
/**
|
|
32
|
+
* @public this symbol will be putted in Map value to indicate that value is gathered from multiple fields and it's not a array value
|
|
33
|
+
*/
|
|
34
|
+
declare const ValueCollectionSymbol: unique symbol;
|
|
35
|
+
declare class TraverseCollection<T> extends Map<string | number, T> {
|
|
36
|
+
[ValueCollectionSymbol]: boolean;
|
|
37
|
+
constructor(...params: ConstructorParameters<typeof Map<string | number, T>>);
|
|
38
|
+
} //#endregion
|
|
39
|
+
//#region modules/jb-form/web-component/lib/types.d.ts
|
|
40
|
+
interface JBFormInputStandards<TValue = string> extends HTMLElement {
|
|
41
|
+
disabled: boolean;
|
|
42
|
+
required: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* name can't be null it must return empty string "" when it's not available (it's HTML standard)
|
|
45
|
+
*/
|
|
46
|
+
name: string;
|
|
47
|
+
value: TValue;
|
|
48
|
+
/**
|
|
49
|
+
* if id is not defined it return empty string
|
|
50
|
+
*/
|
|
51
|
+
id: string;
|
|
52
|
+
/**
|
|
53
|
+
* @description check if user change the value of component based on value provided from outside and return true if user change a initial value
|
|
54
|
+
*/
|
|
55
|
+
readonly isDirty: boolean;
|
|
56
|
+
initialValue: TValue;
|
|
57
|
+
get form(): HTMLFormElement | JBFormWebComponent | null;
|
|
58
|
+
/**
|
|
59
|
+
* calls when element form changed.
|
|
60
|
+
*/
|
|
61
|
+
formAssociatedCallback?: (form: HTMLFormElement | null) => void;
|
|
62
|
+
/**
|
|
63
|
+
* when reset method of the forms called
|
|
64
|
+
*/
|
|
65
|
+
formResetCallback: () => void;
|
|
66
|
+
/**
|
|
67
|
+
* when form disable or enable function called
|
|
68
|
+
*/
|
|
69
|
+
formDisabledCallback?: (disabled: boolean) => void;
|
|
70
|
+
/**
|
|
71
|
+
* when form restore or autocomplete called.
|
|
72
|
+
*/
|
|
73
|
+
formStateRestoreCallback?: (state: string | File | FormData | null, mode: 'autocomplete' | 'restore') => void;
|
|
74
|
+
}
|
|
75
|
+
type NativeFormElements = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | HTMLFieldSetElement | HTMLOutputElement | HTMLObjectElement;
|
|
76
|
+
type TraverseResult<T> = {
|
|
77
|
+
[key: string]: T | TraverseCollection<T>;
|
|
78
|
+
};
|
|
79
|
+
type FormValidationMessages = {
|
|
80
|
+
[key: string]: string | null | TraverseCollection<string | null>;
|
|
81
|
+
};
|
|
82
|
+
type FormValidationSummary = {
|
|
83
|
+
[key: string]: ValidationResultSummary | TraverseCollection<ValidationResultSummary | null> | null;
|
|
84
|
+
};
|
|
85
|
+
type FormValidationResult = {
|
|
86
|
+
[key: string]: ValidationResult<any> | TraverseCollection<ValidationResult<any> | null> | null;
|
|
87
|
+
};
|
|
88
|
+
type FormValues<TValue = any> = {
|
|
89
|
+
[key: string]: TValue;
|
|
90
|
+
};
|
|
91
|
+
type ValidationValue$1 = FormValues;
|
|
92
|
+
type VirtualElementConfig<TValue, TValidationValue> = {
|
|
93
|
+
/**
|
|
94
|
+
* @requires
|
|
95
|
+
* @property name of your virtual element
|
|
96
|
+
*/
|
|
97
|
+
name: string;
|
|
98
|
+
/**
|
|
99
|
+
* @property jb-validation ValidationHelper instance. if not provided, this virtual element will not be participated in validation methods and results
|
|
100
|
+
*/
|
|
101
|
+
validation?: ValidationHelper<TValidationValue>;
|
|
102
|
+
/**
|
|
103
|
+
* @property help you spot your virtual elements DOM so you could scroll to, in invalidate cases or use it any other way you see fit.
|
|
104
|
+
*/
|
|
105
|
+
dom?: HTMLElement;
|
|
106
|
+
/**
|
|
107
|
+
* @property we need your component value for value oriented methods like isDirty
|
|
108
|
+
*/
|
|
109
|
+
getValue?: () => TValue;
|
|
110
|
+
/**
|
|
111
|
+
* @property function that return true if your component value is changed from initialValue (write deep compare functions of value compare here)
|
|
112
|
+
*/
|
|
113
|
+
getDirtyStatus?: () => boolean;
|
|
114
|
+
/**
|
|
115
|
+
* @property this callback function will be called in case of form setValue called.
|
|
116
|
+
*/
|
|
117
|
+
setValue?: (value: TValue) => void;
|
|
118
|
+
/**
|
|
119
|
+
* @property this callback function will be called in case of form setInitialValue called.
|
|
120
|
+
*/
|
|
121
|
+
setInitialValue?: (value: TValue) => void;
|
|
122
|
+
/**
|
|
123
|
+
* Restore the virtual element to its initial value.
|
|
124
|
+
*/
|
|
125
|
+
reset?: () => void;
|
|
126
|
+
};
|
|
127
|
+
type VirtualElementCallbacks = {
|
|
128
|
+
onChange: () => void;
|
|
129
|
+
};
|
|
130
|
+
type JBCheckValidityParameter = {
|
|
131
|
+
/**
|
|
132
|
+
* @property in case of error do you want to show it or you just want to get result. true will show error
|
|
133
|
+
*/
|
|
134
|
+
showError: boolean;
|
|
135
|
+
};
|
|
136
|
+
type CheckValidityAsyncResult = {
|
|
137
|
+
/**
|
|
138
|
+
* @property result of all validations
|
|
139
|
+
*/
|
|
140
|
+
isAllValid: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* @property keep validation result of standard jb-validation form elements (nested elements not included)
|
|
143
|
+
*/
|
|
144
|
+
elements: Map<HTMLElement & WithValidation, ValidationResult<any>>;
|
|
145
|
+
/**
|
|
146
|
+
* @property keep validation result of virtual elements (nested elements not included)
|
|
147
|
+
*/
|
|
148
|
+
virtualElements: Map<VirtualElement<any, any>, ValidationResult<any>>;
|
|
149
|
+
/**
|
|
150
|
+
* @property keep validation result of sub forms and sub forms (you can access nested elements from here)
|
|
151
|
+
*/
|
|
152
|
+
subForms: Map<JBFormWebComponent, CheckValidityAsyncResult>;
|
|
153
|
+
};
|
|
154
|
+
//#endregion
|
|
155
|
+
//#region modules/jb-form/web-component/lib/form-elements.d.ts
|
|
156
|
+
declare class FormElements {
|
|
157
|
+
#private;
|
|
158
|
+
form: HTMLFormElement;
|
|
159
|
+
observer: MutationObserver;
|
|
160
|
+
customElements: Map<Partial<JBFormInputStandards<unknown>>, null>;
|
|
161
|
+
nativeElements: Map<NativeFormElements, null>;
|
|
162
|
+
get allElements(): (Partial<JBFormInputStandards<unknown>> | NativeFormElements)[];
|
|
163
|
+
reset(): void;
|
|
164
|
+
constructor(jbForm: JBFormWebComponent);
|
|
165
|
+
initElements(): void;
|
|
166
|
+
} //#endregion
|
|
167
|
+
//#region modules/jb-form/web-component/lib/utils.d.ts
|
|
168
|
+
/**
|
|
169
|
+
* get the jbCheckValidity method result and extract invalid elements dom, you can scroll to the dom or play some animation for dom
|
|
170
|
+
* @param result result of jbCheckValidity method
|
|
171
|
+
* @returns list of HTMLElement of invalid doms
|
|
172
|
+
*/
|
|
173
|
+
//#endregion
|
|
174
|
+
//#region modules/jb-form/web-component/lib/jb-form.d.ts
|
|
175
|
+
declare class JBFormWebComponent extends HTMLElement {
|
|
176
|
+
#private;
|
|
177
|
+
static get formAssociated(): boolean;
|
|
178
|
+
callbacks: {
|
|
179
|
+
showValidationError: (_message: ShowValidationErrorParameters) => void;
|
|
180
|
+
cleanValidationError: () => void;
|
|
181
|
+
setValidationResult: () => void;
|
|
182
|
+
};
|
|
183
|
+
get validElements(): (Partial<JBFormInputStandards<unknown>> | NativeFormElements)[];
|
|
184
|
+
get validation(): ValidationHelper<ValidationValue$1>;
|
|
185
|
+
get isDirty(): boolean;
|
|
186
|
+
get value(): FormValues;
|
|
187
|
+
set value(value: FormValues);
|
|
188
|
+
get name(): string;
|
|
189
|
+
set name(value: string | null | undefined);
|
|
190
|
+
get virtualElements(): {
|
|
191
|
+
list: ReadonlyArray<VirtualElement<any, any>>;
|
|
192
|
+
dictionary: Readonly<Record<string, VirtualElement<any, any>>>;
|
|
193
|
+
add: <TValue, TValidationValue>(config: VirtualElementConfig<TValue, TValidationValue>) => VirtualElement<TValue, TValidationValue>;
|
|
194
|
+
remove: <TValue, TValidationValue>({
|
|
195
|
+
virtualElement
|
|
196
|
+
}: {
|
|
197
|
+
virtualElement: VirtualElement<TValue, TValidationValue>;
|
|
198
|
+
}) => void;
|
|
199
|
+
};
|
|
200
|
+
get subForms(): {
|
|
201
|
+
list: readonly JBFormWebComponent[];
|
|
202
|
+
dictionary: Readonly<{
|
|
203
|
+
[x: string]: JBFormWebComponent | JBFormWebComponent[];
|
|
204
|
+
}>;
|
|
205
|
+
};
|
|
206
|
+
get formElements(): FormElements;
|
|
207
|
+
constructor();
|
|
208
|
+
initWebComponent(): void;
|
|
209
|
+
connectedCallback(): void;
|
|
210
|
+
static get observedAttributes(): string[];
|
|
211
|
+
attributeChangedCallback(name: string, _oldValue: string, newValue: string): void;
|
|
212
|
+
checkValidity(): boolean;
|
|
213
|
+
reportValidity(): boolean;
|
|
214
|
+
/**
|
|
215
|
+
* @description this function will check all standard jb validations includes async validations virtual elements and sub forms. it have most rich validation result betweens jb-form validation results methods
|
|
216
|
+
* @public
|
|
217
|
+
*/
|
|
218
|
+
jbCheckValidity(params: JBCheckValidityParameter): Promise<CheckValidityAsyncResult>;
|
|
219
|
+
/**
|
|
220
|
+
* @description returns key value object contains validation message of named element
|
|
221
|
+
* @returns @public
|
|
222
|
+
*/
|
|
223
|
+
getValidationMessages(): FormValidationMessages;
|
|
224
|
+
/**
|
|
225
|
+
* @description returns key value object contains validation summary result of named element
|
|
226
|
+
* @returns @public
|
|
227
|
+
*/
|
|
228
|
+
getValidationSummary(): FormValidationSummary;
|
|
229
|
+
/**
|
|
230
|
+
* @description returns key value object contains validation summary result of named element
|
|
231
|
+
* @returns @public
|
|
232
|
+
*/
|
|
233
|
+
getValidationResult(): FormValidationResult;
|
|
234
|
+
/**
|
|
235
|
+
* @description returns key value object contains value of named element
|
|
236
|
+
* @returns @public
|
|
237
|
+
*/
|
|
238
|
+
getFormValues<TFormValue extends FormValues = FormValues>(): TFormValue;
|
|
239
|
+
/**
|
|
240
|
+
* @description returns key value object contains dirty status of named element
|
|
241
|
+
* @returns @public
|
|
242
|
+
*/
|
|
243
|
+
getFormDirtyStatus(): TraverseResult<boolean>;
|
|
244
|
+
/**
|
|
245
|
+
* @description set value of named form input elements
|
|
246
|
+
* @param shouldUpdateInitialValue determine if we should also update initial value or not. pass false if you want initialValue remain untouched
|
|
247
|
+
*/
|
|
248
|
+
setFormValues<TFormValue extends FormValues = FormValues>(value: TFormValue, shouldUpdateInitialValue?: boolean): void;
|
|
249
|
+
/**
|
|
250
|
+
* @description set initial value of named form input elements used for dirty field detection
|
|
251
|
+
*/
|
|
252
|
+
setFormInitialValues<TFormValue extends FormValues = FormValues>(value: TFormValue, shouldUpdateValue?: boolean): void;
|
|
253
|
+
/**
|
|
254
|
+
* Restore all controls to their initial values and clear validation state.
|
|
255
|
+
*/
|
|
256
|
+
reset(): void;
|
|
257
|
+
formResetCallback(): void;
|
|
258
|
+
disconnectedCallback(): void;
|
|
259
|
+
} //#endregion
|
|
260
|
+
//#endregion
|
|
261
|
+
//#region modules/jb-textarea/web-component/lib/types.d.ts
|
|
262
|
+
type JBTextareaElements = {
|
|
263
|
+
textarea: HTMLTextAreaElement;
|
|
264
|
+
label: HTMLLabelElement;
|
|
265
|
+
labelValue: HTMLSpanElement;
|
|
266
|
+
messageBox: HTMLDivElement;
|
|
267
|
+
};
|
|
268
|
+
type ValidationValue = string;
|
|
269
|
+
type JBTextareaEventType<TEvent> = EventTypeWithTarget<TEvent, JBTextareaWebComponent>;
|
|
270
|
+
//#endregion
|
|
271
|
+
//#region modules/jb-textarea/web-component/lib/jb-textarea.d.ts
|
|
272
|
+
declare class JBTextareaWebComponent extends HTMLElement implements WithValidation, JBFormInputStandards<string> {
|
|
273
|
+
#private;
|
|
274
|
+
static get formAssociated(): boolean;
|
|
275
|
+
get value(): string;
|
|
276
|
+
set value(value: string);
|
|
277
|
+
get isAutoValidationDisabled(): boolean;
|
|
278
|
+
set isAutoValidationDisabled(value: boolean);
|
|
279
|
+
get disabled(): boolean;
|
|
280
|
+
set disabled(value: boolean);
|
|
281
|
+
set required(value: boolean);
|
|
282
|
+
get required(): boolean;
|
|
283
|
+
get name(): string;
|
|
284
|
+
get form(): HTMLFormElement | null;
|
|
285
|
+
set name(value: string);
|
|
286
|
+
initialValue: string;
|
|
287
|
+
formResetCallback(): void;
|
|
288
|
+
get isDirty(): boolean;
|
|
289
|
+
constructor();
|
|
290
|
+
autoHeight: boolean;
|
|
291
|
+
get validation(): ValidationHelper<string>;
|
|
292
|
+
static get observedAttributes(): string[];
|
|
293
|
+
attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
|
|
294
|
+
showValidationError(error: ShowValidationErrorParameters | string): void;
|
|
295
|
+
clearValidationError(): void;
|
|
296
|
+
get validationMessage(): string;
|
|
297
|
+
/**
|
|
298
|
+
* @public
|
|
299
|
+
* @description this method used to check for validity but doesn't show error to user and just return the result
|
|
300
|
+
* this method used by #internal of component
|
|
301
|
+
*/
|
|
302
|
+
checkValidity(): boolean;
|
|
303
|
+
/**
|
|
304
|
+
* @public
|
|
305
|
+
* @description this method used to check for validity and show error to user
|
|
306
|
+
*/
|
|
307
|
+
reportValidity(): boolean;
|
|
308
|
+
}
|
|
309
|
+
//#endregion
|
|
310
|
+
export { JBTextareaElements, JBTextareaEventType, JBTextareaWebComponent, ValidationValue };
|
|
311
|
+
//# sourceMappingURL=jb-textarea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jb-textarea.d.ts","names":["TValue","TValidationValue","private","name","id","validation","ValidationHelper","dom","HTMLElement","getValue","getDirtyStatus","setValue","value","setInitialValue","reset","Value","constructor","VirtualElementConfig","config","attachCallbacks","VirtualElementCallbacks","callbacks","dispatchOnChange","T","Map","ValueCollectionSymbol","params","ConstructorParameters","disabled","required","isDirty","initialValue","form","HTMLFormElement","JBFormWebComponent","formAssociatedCallback","formResetCallback","formDisabledCallback","formStateRestoreCallback","File","FormData","state","mode","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLFieldSetElement","HTMLOutputElement","HTMLObjectElement","key","TraverseCollection","ValidationResultSummary","ValidationResult","FormValues","Partial","WithValidation","JBFormInputStandards","formElement","VirtualElement","onChange","showError","isAllValid","elements","virtualElements","subForms","CheckValidityAsyncResult","TEvent","EventTypeWithTarget","observer","MutationObserver","customElements","nativeElements","NativeFormElements","allElements","jbForm","initElements","result","ValueType","TraverseResult","res","Record","idMap","valueCollection","namedFormElements","formAssociated","showValidationError","ShowValidationErrorParameters","_message","cleanValidationError","setValidationResult","validElements","ValidationValue","list","ReadonlyArray","dictionary","Readonly","add","remove","virtualElement","x","formElements","FormElements","initWebComponent","connectedCallback","observedAttributes","attributeChangedCallback","_oldValue","newValue","checkValidity","reportValidity","jbCheckValidity","JBCheckValidityParameter","Promise","getValidationMessages","FormValidationMessages","getValidationSummary","FormValidationSummary","getValidationResult","FormValidationResult","getFormValues","TFormValue","getFormDirtyStatus","setFormValues","shouldUpdateInitialValue","setFormInitialValues","shouldUpdateValue","disconnectedCallback"],"sources":["../../../jb-form/web-component/dist/jb-form.d.ts","../lib/types.ts","../lib/jb-textarea.ts"],"mappings":"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"}
|