neo.mjs 4.0.77 → 4.0.80
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.80",
|
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,7 +54,9 @@
|
|
54
54
|
}
|
55
55
|
|
56
56
|
&.label-inline {
|
57
|
+
display : block;
|
57
58
|
font-size: 14px;
|
59
|
+
height : inherit;
|
58
60
|
position : relative;
|
59
61
|
|
60
62
|
&.neo-focus {
|
@@ -107,7 +109,7 @@
|
|
107
109
|
|
108
110
|
.neo-label-wrapper {
|
109
111
|
display : flex;
|
110
|
-
height :
|
112
|
+
height : 27px;
|
111
113
|
position: absolute;
|
112
114
|
width : 100%;
|
113
115
|
|
@@ -191,6 +193,12 @@
|
|
191
193
|
}
|
192
194
|
}
|
193
195
|
|
196
|
+
.neo-textfield-error {
|
197
|
+
color : v(textfield-border-color-invalid);
|
198
|
+
font-size : 11px;
|
199
|
+
margin-top: .3em;
|
200
|
+
}
|
201
|
+
|
194
202
|
.neo-textfield-input {
|
195
203
|
background-color: v(textfield-input-background-color);
|
196
204
|
border : 1px solid v(textfield-border-color);
|
package/src/form/field/Text.mjs
CHANGED
@@ -77,10 +77,18 @@ 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
|
*/
|
83
87
|
hideLabel_: false,
|
88
|
+
/**
|
89
|
+
* @member {RegExp|null} inputPattern=null
|
90
|
+
*/
|
91
|
+
inputPattern_: null,
|
84
92
|
/**
|
85
93
|
* @member {String} inputType_='text'
|
86
94
|
*/
|
@@ -132,7 +140,8 @@ class Text extends Base {
|
|
132
140
|
_vdom:
|
133
141
|
{cn: [
|
134
142
|
{tag: 'label', cls: ['neo-textfield-label'], style: {}},
|
135
|
-
{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}
|
136
145
|
]}
|
137
146
|
}}
|
138
147
|
|
@@ -220,6 +229,16 @@ class Text extends Base {
|
|
220
229
|
});
|
221
230
|
}
|
222
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
|
+
|
223
242
|
/**
|
224
243
|
* Triggered after the hideLabel config got changed
|
225
244
|
* @param {Boolean} value
|
@@ -256,6 +275,16 @@ class Text extends Base {
|
|
256
275
|
super.afterSetId(value, oldValue);
|
257
276
|
}
|
258
277
|
|
278
|
+
/**
|
279
|
+
* Triggered after the inputPattern config got changed
|
280
|
+
* @param {RegExp|null} value
|
281
|
+
* @param {RegExp|null} oldValue
|
282
|
+
* @protected
|
283
|
+
*/
|
284
|
+
afterSetInputPattern(value, oldValue) {
|
285
|
+
|
286
|
+
}
|
287
|
+
|
259
288
|
/**
|
260
289
|
* Triggered after the inputType config got changed
|
261
290
|
* @param {String} value
|
@@ -536,7 +565,7 @@ class Text extends Base {
|
|
536
565
|
|
537
566
|
me.getInputEl().value = value;
|
538
567
|
|
539
|
-
if (!!value !== !!oldValue) { // change from empty to non
|
568
|
+
if (!!value !== !!oldValue) { // change from empty to non-empty
|
540
569
|
NeoArray[value && value.toString().length > 0 ? 'add' : 'remove'](me._cls, 'neo-has-content');
|
541
570
|
}
|
542
571
|
|
@@ -817,18 +846,23 @@ class Text extends Base {
|
|
817
846
|
*/
|
818
847
|
isValid() {
|
819
848
|
let me = this,
|
849
|
+
maxLength = me.maxLength,
|
850
|
+
minLength = me.minLength,
|
820
851
|
value = me.value,
|
821
852
|
valueLength = value?.toString().length;
|
822
853
|
|
823
854
|
if (me.required && (!value || valueLength < 1)) {
|
855
|
+
me._error = 'Required';
|
824
856
|
return false;
|
825
857
|
}
|
826
858
|
|
827
|
-
if (Neo.isNumber(
|
859
|
+
if (Neo.isNumber(maxLength) && valueLength > maxLength) {
|
860
|
+
me._error = `Max length violation: ${valueLength} / ${maxLength}`;
|
828
861
|
return false;
|
829
862
|
}
|
830
863
|
|
831
|
-
if (Neo.isNumber(
|
864
|
+
if (Neo.isNumber(minLength) && valueLength < minLength) {
|
865
|
+
me._error = `Min length violation: ${valueLength} / ${minLength}`;
|
832
866
|
return false;
|
833
867
|
}
|
834
868
|
|
@@ -911,7 +945,9 @@ class Text extends Base {
|
|
911
945
|
vnode.vnode.attributes.value = value;
|
912
946
|
}
|
913
947
|
|
914
|
-
if (
|
948
|
+
if (me.inputPattern && !me.inputPattern.test(value) ) {
|
949
|
+
me.afterSetValue(oldValue, value);
|
950
|
+
} else if (value !== oldValue) {
|
915
951
|
me.value = value;
|
916
952
|
}
|
917
953
|
}
|
@@ -1025,10 +1061,18 @@ class Text extends Base {
|
|
1025
1061
|
*/
|
1026
1062
|
updateValidationIndicators(silent=true) {
|
1027
1063
|
let me = this,
|
1028
|
-
vdom = me.vdom
|
1064
|
+
vdom = me.vdom,
|
1065
|
+
errorNode, isValid;
|
1029
1066
|
|
1030
1067
|
if (!(me.validBeforeMount && !me.mounted)) {
|
1031
|
-
|
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;
|
1032
1076
|
|
1033
1077
|
if (!silent) {
|
1034
1078
|
me.vdom = vdom;
|
package/src/manager/Focus.mjs
CHANGED
@@ -13,11 +13,6 @@ class Focus extends CoreBase {
|
|
13
13
|
* @protected
|
14
14
|
*/
|
15
15
|
className: 'Neo.manager.Focus',
|
16
|
-
/**
|
17
|
-
* @member {Boolean} singleton=true
|
18
|
-
* @protected
|
19
|
-
*/
|
20
|
-
singleton: true,
|
21
16
|
/**
|
22
17
|
* An array containing opts objects.
|
23
18
|
* opts.componentPath
|
@@ -47,7 +42,12 @@ class Focus extends CoreBase {
|
|
47
42
|
* The maximum amount of items stored inside the history array
|
48
43
|
* @member {Number} maxHistoryLength=20
|
49
44
|
*/
|
50
|
-
maxHistoryLength: 20
|
45
|
+
maxHistoryLength: 20,
|
46
|
+
/**
|
47
|
+
* @member {Boolean} singleton=true
|
48
|
+
* @protected
|
49
|
+
*/
|
50
|
+
singleton: true
|
51
51
|
}}
|
52
52
|
|
53
53
|
/**
|