neo.mjs 4.0.78 → 4.0.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "4.0.
|
3
|
+
"version": "4.0.79",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -50,12 +50,12 @@
|
|
50
50
|
"envinfo": "^7.8.1",
|
51
51
|
"fs-extra": "^10.1.0",
|
52
52
|
"highlightjs-line-numbers.js": "^2.8.0",
|
53
|
-
"inquirer": "^9.0.
|
53
|
+
"inquirer": "^9.0.2",
|
54
54
|
"neo-jsdoc": "^1.0.1",
|
55
55
|
"neo-jsdoc-x": "^1.0.4",
|
56
56
|
"postcss": "^8.4.14",
|
57
|
-
"sass": "^1.
|
58
|
-
"webpack": "^5.
|
57
|
+
"sass": "^1.54.0",
|
58
|
+
"webpack": "^5.74.0",
|
59
59
|
"webpack-cli": "^4.10.0",
|
60
60
|
"webpack-dev-server": "4.9.3",
|
61
61
|
"webpack-hook-plugin": "^1.0.7",
|
@@ -54,6 +54,7 @@
|
|
54
54
|
}
|
55
55
|
|
56
56
|
&.label-inline {
|
57
|
+
display : block;
|
57
58
|
font-size: 14px;
|
58
59
|
position : relative;
|
59
60
|
|
@@ -191,6 +192,12 @@
|
|
191
192
|
}
|
192
193
|
}
|
193
194
|
|
195
|
+
.neo-textfield-error {
|
196
|
+
color : v(textfield-border-color-invalid);
|
197
|
+
font-size : 11px;
|
198
|
+
margin-top: .3em;
|
199
|
+
}
|
200
|
+
|
194
201
|
.neo-textfield-input {
|
195
202
|
background-color: v(textfield-input-background-color);
|
196
203
|
border : 1px solid v(textfield-border-color);
|
package/src/form/field/Text.mjs
CHANGED
@@ -77,6 +77,10 @@ class Text extends Base {
|
|
77
77
|
* @member {String[]} cls=['neo-textfield']
|
78
78
|
*/
|
79
79
|
cls: ['neo-textfield'],
|
80
|
+
/**
|
81
|
+
* @member {String|null} error_=null
|
82
|
+
*/
|
83
|
+
error_: null,
|
80
84
|
/**
|
81
85
|
* @member {Boolean} hideLabel_=false
|
82
86
|
*/
|
@@ -136,7 +140,8 @@ class Text extends Base {
|
|
136
140
|
_vdom:
|
137
141
|
{cn: [
|
138
142
|
{tag: 'label', cls: ['neo-textfield-label'], style: {}},
|
139
|
-
{tag: 'input', cls: ['neo-textfield-input'], flag: 'neo-real-input', style: {}}
|
143
|
+
{tag: 'input', cls: ['neo-textfield-input'], flag: 'neo-real-input', style: {}},
|
144
|
+
{cls: ['neo-textfield-error'], removeDom: true}
|
140
145
|
]}
|
141
146
|
}}
|
142
147
|
|
@@ -224,6 +229,16 @@ class Text extends Base {
|
|
224
229
|
});
|
225
230
|
}
|
226
231
|
|
232
|
+
/**
|
233
|
+
* Triggered after the error config got changed
|
234
|
+
* @param {String|null} value
|
235
|
+
* @param {String|null} oldValue
|
236
|
+
* @protected
|
237
|
+
*/
|
238
|
+
afterSetError(value, oldValue) {
|
239
|
+
this.updateValidationIndicators(false);
|
240
|
+
}
|
241
|
+
|
227
242
|
/**
|
228
243
|
* Triggered after the hideLabel config got changed
|
229
244
|
* @param {Boolean} value
|
@@ -262,12 +277,12 @@ class Text extends Base {
|
|
262
277
|
|
263
278
|
/**
|
264
279
|
* Triggered after the inputPattern config got changed
|
265
|
-
* @param {RegExp|null} value
|
280
|
+
* @param {RegExp|null} value
|
266
281
|
* @param {RegExp|null} oldValue
|
267
282
|
* @protected
|
268
283
|
*/
|
269
284
|
afterSetInputPattern(value, oldValue) {
|
270
|
-
|
285
|
+
|
271
286
|
}
|
272
287
|
|
273
288
|
/**
|
@@ -550,7 +565,7 @@ class Text extends Base {
|
|
550
565
|
|
551
566
|
me.getInputEl().value = value;
|
552
567
|
|
553
|
-
if (!!value !== !!oldValue) { // change from empty to non
|
568
|
+
if (!!value !== !!oldValue) { // change from empty to non-empty
|
554
569
|
NeoArray[value && value.toString().length > 0 ? 'add' : 'remove'](me._cls, 'neo-has-content');
|
555
570
|
}
|
556
571
|
|
@@ -831,18 +846,23 @@ class Text extends Base {
|
|
831
846
|
*/
|
832
847
|
isValid() {
|
833
848
|
let me = this,
|
849
|
+
maxLength = me.maxLength,
|
850
|
+
minLength = me.minLength,
|
834
851
|
value = me.value,
|
835
852
|
valueLength = value?.toString().length;
|
836
853
|
|
837
854
|
if (me.required && (!value || valueLength < 1)) {
|
855
|
+
me._error = 'Required';
|
838
856
|
return false;
|
839
857
|
}
|
840
858
|
|
841
|
-
if (Neo.isNumber(
|
859
|
+
if (Neo.isNumber(maxLength) && valueLength > maxLength) {
|
860
|
+
me._error = `Max length violation: ${valueLength} / ${maxLength}`;
|
842
861
|
return false;
|
843
862
|
}
|
844
863
|
|
845
|
-
if (Neo.isNumber(
|
864
|
+
if (Neo.isNumber(minLength) && valueLength < minLength) {
|
865
|
+
me._error = `Min length violation: ${valueLength} / ${minLength}`;
|
846
866
|
return false;
|
847
867
|
}
|
848
868
|
|
@@ -925,7 +945,7 @@ class Text extends Base {
|
|
925
945
|
vnode.vnode.attributes.value = value;
|
926
946
|
}
|
927
947
|
|
928
|
-
if (me.inputPattern && !me.inputPattern.test(value) ) {
|
948
|
+
if (me.inputPattern && !me.inputPattern.test(value) ) {
|
929
949
|
me.afterSetValue(oldValue, value);
|
930
950
|
} else if (value !== oldValue) {
|
931
951
|
me.value = value;
|
@@ -1041,10 +1061,18 @@ class Text extends Base {
|
|
1041
1061
|
*/
|
1042
1062
|
updateValidationIndicators(silent=true) {
|
1043
1063
|
let me = this,
|
1044
|
-
vdom = me.vdom
|
1064
|
+
vdom = me.vdom,
|
1065
|
+
errorNode, isValid;
|
1045
1066
|
|
1046
1067
|
if (!(me.validBeforeMount && !me.mounted)) {
|
1047
|
-
|
1068
|
+
isValid = me.isValid();
|
1069
|
+
|
1070
|
+
NeoArray[!isValid ? 'add' : 'remove'](me._cls, 'neo-invalid');
|
1071
|
+
|
1072
|
+
errorNode = VDomUtil.findVdomChild(this.vdom, {cls: 'neo-textfield-error'}).vdom;
|
1073
|
+
|
1074
|
+
errorNode.html = me.error;
|
1075
|
+
errorNode.removeDom = isValid;
|
1048
1076
|
|
1049
1077
|
if (!silent) {
|
1050
1078
|
me.vdom = vdom;
|