neo.mjs 5.2.15 → 5.3.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/apps/ServiceWorker.mjs +2 -2
- package/apps/form/view/FormContainer.mjs +2 -2
- package/apps/form/view/Viewport.mjs +1 -1
- package/apps/form/view/pages/Page6.mjs +14 -4
- package/apps/form/view/pages/Page8.mjs +6 -4
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +2 -2
- package/resources/examples/data/formSideNav.json +2 -2
- package/resources/scss/src/form/field/TextArea.scss +26 -2
- package/src/DefaultConfig.mjs +2 -2
- package/src/form/Container.mjs +32 -10
- package/src/form/field/Number.mjs +13 -20
- package/src/main/addon/Cookie.mjs +4 -3
package/apps/ServiceWorker.mjs
CHANGED
@@ -82,12 +82,12 @@ class FormContainer extends BaseFormContainer {
|
|
82
82
|
cls : ['form-footer'],
|
83
83
|
flex : 'none',
|
84
84
|
|
85
|
-
items: [
|
85
|
+
items: [{
|
86
86
|
bind : {disabled: data => data.activeIndex === 0},
|
87
87
|
handler: 'onPrevPageButtonClick',
|
88
88
|
iconCls: 'fas fa-chevron-left',
|
89
89
|
text : 'Back'
|
90
|
-
}, {
|
90
|
+
}, '->', {
|
91
91
|
bind : {disabled: data => data.activeIndex === data.maxIndex},
|
92
92
|
handler : 'onNextPageButtonClick',
|
93
93
|
iconCls : 'fas fa-chevron-right',
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import FormPageContainer from '../FormPageContainer.mjs';
|
2
|
-
import
|
2
|
+
import TextArea from '../../../../src/form/field/TextArea.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Form.view.pages.Page6
|
@@ -16,18 +16,28 @@ class Page6 extends FormPageContainer {
|
|
16
16
|
* @member {String} formGroup='page6'
|
17
17
|
*/
|
18
18
|
formGroup: 'page6',
|
19
|
+
/**
|
20
|
+
* @member {Object} itemDefaults
|
21
|
+
*/
|
22
|
+
itemDefaults: {
|
23
|
+
module: TextArea
|
24
|
+
},
|
19
25
|
/**
|
20
26
|
* @member {Object[]} items
|
21
27
|
*/
|
22
28
|
items: [{
|
23
|
-
|
29
|
+
height : 200,
|
24
30
|
labelText: 'Page 6 Field 1',
|
25
31
|
name : 'field1',
|
26
|
-
required : true
|
32
|
+
required : true,
|
33
|
+
value : 'Lorem ipsum'
|
27
34
|
}, {
|
28
|
-
|
35
|
+
height : 300,
|
29
36
|
labelText: 'Page 6 Field 2',
|
30
37
|
name : 'field2'
|
38
|
+
}, {
|
39
|
+
labelText: 'Page 6 Field 3',
|
40
|
+
name : 'field3'
|
31
41
|
}]
|
32
42
|
}
|
33
43
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import FormPageContainer from '../FormPageContainer.mjs';
|
2
|
-
import
|
2
|
+
import NumberField from '../../../../src/form/field/Number.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Form.view.pages.Page8
|
@@ -16,14 +16,16 @@ class Page8 extends FormPageContainer {
|
|
16
16
|
* @member {Object[]} items
|
17
17
|
*/
|
18
18
|
items: [{
|
19
|
-
module :
|
19
|
+
module : NumberField,
|
20
20
|
labelText: 'Page 8 Field 1',
|
21
21
|
name : 'page8field1',
|
22
22
|
required : true
|
23
23
|
}, {
|
24
|
-
module :
|
24
|
+
module : NumberField,
|
25
25
|
labelText: 'Page 8 Field 2',
|
26
|
-
name : 'page8field2'
|
26
|
+
name : 'page8field2',
|
27
|
+
stepSize : 0.01,
|
28
|
+
value : 0.02
|
27
29
|
}]
|
28
30
|
}
|
29
31
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "5.
|
3
|
+
"version": "5.3.0",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -56,7 +56,7 @@
|
|
56
56
|
"neo-jsdoc": "^1.0.1",
|
57
57
|
"neo-jsdoc-x": "^1.0.5",
|
58
58
|
"postcss": "^8.4.21",
|
59
|
-
"sass": "^1.
|
59
|
+
"sass": "^1.60.0",
|
60
60
|
"webpack": "^5.76.3",
|
61
61
|
"webpack-cli": "^5.0.1",
|
62
62
|
"webpack-dev-server": "4.13.1",
|
@@ -9,10 +9,10 @@
|
|
9
9
|
{"id": 5, "cardIndex": null, "isHeader": true, "isValid": null, "name": "2. Personal data"},
|
10
10
|
{"id": 6, "cardIndex": 3, "isHeader": false, "isValid": null, "name": "CheckBoxes"},
|
11
11
|
{"id": 7, "cardIndex": 4, "isHeader": false, "isValid": null, "name": "Radios"},
|
12
|
-
{"id": 8, "cardIndex": 5, "isHeader": false, "isValid": null, "name": "
|
12
|
+
{"id": 8, "cardIndex": 5, "isHeader": false, "isValid": null, "name": "TextAreas"},
|
13
13
|
{"id": 9, "cardIndex": 6, "isHeader": false, "isValid": null, "name": "Fieldsets"},
|
14
14
|
{"id": 10, "cardIndex": null, "isHeader": true, "isValid": null, "name": "3. More data"},
|
15
|
-
{"id": 11, "cardIndex": 7, "isHeader": false, "isValid": null, "name": "
|
15
|
+
{"id": 11, "cardIndex": 7, "isHeader": false, "isValid": null, "name": "NumberFields"},
|
16
16
|
{"id": 12, "cardIndex": 8, "isHeader": false, "isValid": null, "name": "Page 9"},
|
17
17
|
{"id": 13, "cardIndex": 9, "isHeader": false, "isValid": null, "name": "Page 10"},
|
18
18
|
{"id": 14, "cardIndex": null, "isHeader": true, "isValid": null, "name": "3. Optional data"},
|
@@ -1,11 +1,35 @@
|
|
1
1
|
.neo-textarea {
|
2
|
-
align-items: stretch;
|
2
|
+
align-items : stretch;
|
3
|
+
display : flex;
|
4
|
+
flex-direction: column;
|
3
5
|
|
4
6
|
.neo-input-wrapper {
|
5
|
-
|
7
|
+
flex: 1 0 auto;
|
8
|
+
}
|
9
|
+
|
10
|
+
.neo-label-wrapper {
|
11
|
+
height: 100%;
|
6
12
|
}
|
7
13
|
|
8
14
|
.neo-field-trigger {
|
9
15
|
border-bottom: 1px solid var(--textfield-border-color);
|
10
16
|
}
|
17
|
+
|
18
|
+
.neo-textfield-error {
|
19
|
+
height: 1.2em; // 1.5em - 0.3em => margin-top
|
20
|
+
}
|
21
|
+
|
22
|
+
&.label-inline {
|
23
|
+
display: flex;
|
24
|
+
|
25
|
+
.neo-label-wrapper {
|
26
|
+
height: 100%;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
&:has(.neo-textfield-error) {
|
31
|
+
.neo-label-wrapper {
|
32
|
+
height: calc(100% - 1.5em);
|
33
|
+
}
|
34
|
+
}
|
11
35
|
}
|
package/src/DefaultConfig.mjs
CHANGED
@@ -237,12 +237,12 @@ const DefaultConfig = {
|
|
237
237
|
useVdomWorker: true,
|
238
238
|
/**
|
239
239
|
* buildScripts/injectPackageVersion.mjs will update this value
|
240
|
-
* @default '5.
|
240
|
+
* @default '5.3.0'
|
241
241
|
* @memberOf! module:Neo
|
242
242
|
* @name config.version
|
243
243
|
* @type String
|
244
244
|
*/
|
245
|
-
version: '5.
|
245
|
+
version: '5.3.0'
|
246
246
|
};
|
247
247
|
|
248
248
|
Object.assign(DefaultConfig, {
|
package/src/form/Container.mjs
CHANGED
@@ -69,6 +69,18 @@ class Container extends BaseContainer {
|
|
69
69
|
return null;
|
70
70
|
}
|
71
71
|
|
72
|
+
/**
|
73
|
+
* @param {Neo.form.field.Base} field
|
74
|
+
* @returns {String}
|
75
|
+
*/
|
76
|
+
getFieldPath(field) {
|
77
|
+
let path = field.formGroup ? field.formGroup.split('.') : [];
|
78
|
+
|
79
|
+
path.push(field.name || field.id);
|
80
|
+
|
81
|
+
return path.join('.');
|
82
|
+
}
|
83
|
+
|
72
84
|
/**
|
73
85
|
* @returns {Promise<Neo.form.field.Base[]>} fields
|
74
86
|
*/
|
@@ -188,19 +200,29 @@ class Container extends BaseContainer {
|
|
188
200
|
* @param {Object} values={}
|
189
201
|
*/
|
190
202
|
async setValues(values={}) {
|
191
|
-
let
|
192
|
-
fields = await
|
193
|
-
|
203
|
+
let me = this,
|
204
|
+
fields = await me.getFields(),
|
205
|
+
isRadio, path, value;
|
194
206
|
|
195
207
|
fields.forEach(item => {
|
196
|
-
|
197
|
-
|
198
|
-
if (index < 0) {
|
199
|
-
index = keys.indexOf(item.id);
|
200
|
-
}
|
208
|
+
path = me.getFieldPath(item);
|
209
|
+
value = Neo.nsWithArrays(path, false, values);
|
201
210
|
|
202
|
-
if (
|
203
|
-
|
211
|
+
if (Neo.typeOf(value) === 'Array') {
|
212
|
+
// form.field.CheckBox
|
213
|
+
if (value.includes(item.value)) {
|
214
|
+
item.checked = true;
|
215
|
+
}
|
216
|
+
} else if (value !== undefined) {
|
217
|
+
isRadio = Neo.form.field?.Radio && item instanceof Neo.form.field.Radio;
|
218
|
+
|
219
|
+
if (isRadio) {
|
220
|
+
if (item.value === value) {
|
221
|
+
item.checked = true;
|
222
|
+
}
|
223
|
+
} else {
|
224
|
+
item.value = value;
|
225
|
+
}
|
204
226
|
}
|
205
227
|
})
|
206
228
|
}
|
@@ -229,30 +229,23 @@ class Number extends Text {
|
|
229
229
|
|
230
230
|
/**
|
231
231
|
* @param {Object} data
|
232
|
-
* @
|
232
|
+
* @param {Object[]} data.oldPath
|
233
|
+
* @protected
|
233
234
|
*/
|
234
|
-
|
235
|
-
let me
|
236
|
-
value
|
237
|
-
oldValue = me.value;
|
235
|
+
onFocusLeave(data) {
|
236
|
+
let me = this,
|
237
|
+
value = me.value;
|
238
238
|
|
239
|
-
if (
|
240
|
-
|
241
|
-
|
242
|
-
value =
|
243
|
-
|
244
|
-
if (!Neo.isNumber(value)) {
|
245
|
-
me._value = oldValue;
|
246
|
-
} else {
|
247
|
-
value = value - value % me.stepSize;
|
248
|
-
value = Math.max(me.minValue, value);
|
249
|
-
value = Math.min(me.maxValue, value);
|
239
|
+
if (value !== null) {
|
240
|
+
value = me.stepSizeDigits > 0 ? parseFloat(value) : parseInt(value);
|
241
|
+
value = value - value % me.stepSize;
|
242
|
+
value = Math.max(me.minValue, value);
|
243
|
+
value = Math.min(me.maxValue, value);
|
250
244
|
|
251
|
-
|
252
|
-
|
253
|
-
super.onInputValueChange(data);
|
254
|
-
}
|
245
|
+
me.value = value;
|
255
246
|
}
|
247
|
+
|
248
|
+
super.onFocusLeave(data)
|
256
249
|
}
|
257
250
|
|
258
251
|
/**
|
@@ -37,10 +37,11 @@ class Cookie extends Base {
|
|
37
37
|
* @returns {String}
|
38
38
|
*/
|
39
39
|
getCookie(name) {
|
40
|
-
|
40
|
+
let cookie = document.cookie
|
41
41
|
.split('; ')
|
42
|
-
.find(row => row.startsWith(name))
|
43
|
-
|
42
|
+
.find(row => row.startsWith(name));
|
43
|
+
|
44
|
+
return cookie ? cookie.split('=')[1] : null;
|
44
45
|
}
|
45
46
|
|
46
47
|
/**
|