neo.mjs 5.1.12 → 5.1.14

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 (34) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/form/Overwrites.mjs +13 -0
  3. package/apps/form/app.mjs +7 -0
  4. package/apps/form/index.html +11 -0
  5. package/apps/form/model/SideNav.mjs +38 -0
  6. package/apps/form/neo-config.json +6 -0
  7. package/apps/form/store/SideNav.mjs +24 -0
  8. package/apps/form/view/FormContainer.mjs +98 -0
  9. package/apps/form/view/FormContainerController.mjs +33 -0
  10. package/apps/form/view/FormPageContainer.mjs +34 -0
  11. package/apps/form/view/SideNavList.mjs +91 -0
  12. package/apps/form/view/Viewport.mjs +59 -0
  13. package/apps/form/view/ViewportController.mjs +37 -0
  14. package/apps/form/view/ViewportModel.mjs +50 -0
  15. package/apps/form/view/pages/Page1.mjs +34 -0
  16. package/apps/form/view/pages/Page10.mjs +33 -0
  17. package/apps/form/view/pages/Page2.mjs +28 -0
  18. package/apps/form/view/pages/Page3.mjs +33 -0
  19. package/apps/form/view/pages/Page4.mjs +33 -0
  20. package/apps/form/view/pages/Page5.mjs +33 -0
  21. package/apps/form/view/pages/Page6.mjs +33 -0
  22. package/apps/form/view/pages/Page7.mjs +33 -0
  23. package/apps/form/view/pages/Page8.mjs +33 -0
  24. package/apps/form/view/pages/Page9.mjs +33 -0
  25. package/buildScripts/createClass.mjs +0 -7
  26. package/buildScripts/webpack/json/myApps.template.json +1 -0
  27. package/examples/ServiceWorker.mjs +2 -2
  28. package/package.json +2 -2
  29. package/resources/examples/data/formSideNav.json +19 -0
  30. package/resources/scss/src/apps/form/FormContainer.scss +23 -0
  31. package/resources/scss/src/apps/form/SideNavList.scss +31 -0
  32. package/src/DefaultConfig.mjs +2 -2
  33. package/src/form/field/Date.mjs +11 -0
  34. package/src/form/field/Text.mjs +15 -8
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.1.12'
23
+ * @member {String} version='5.1.14'
24
24
  */
25
- version: '5.1.12'
25
+ version: '5.1.14'
26
26
  }
27
27
 
28
28
  /**
@@ -0,0 +1,13 @@
1
+ Neo.overwrites = {
2
+ Neo: {
3
+ form: {
4
+ field: {
5
+ Text: {
6
+ labelPosition_: 'inline'
7
+ }
8
+ }
9
+ }
10
+ }
11
+ }
12
+
13
+ export default Neo.overwrites;
@@ -0,0 +1,7 @@
1
+ import Overwrites from './Overwrites.mjs';
2
+ import Viewport from './view/Viewport.mjs';
3
+
4
+ export const onStart = () => Neo.app({
5
+ mainView: Viewport,
6
+ name : 'Form'
7
+ });
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
+ <meta charset="UTF-8">
6
+ <title>Form</title>
7
+ </head>
8
+ <body>
9
+ <script src="../../src/MicroLoader.mjs" type="module"></script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,38 @@
1
+ import Model from '../../../src/data/Model.mjs';
2
+
3
+ /**
4
+ * @class Form.model.SideNav
5
+ * @extends Neo.data.Model
6
+ */
7
+ class SideNav extends Model {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Form.model.SideNav'
11
+ * @protected
12
+ */
13
+ className: 'Form.model.SideNav',
14
+ /**
15
+ * @member {Object[]} fields
16
+ */
17
+ fields: [{
18
+ name: 'cardIndex',
19
+ type: 'Integer'
20
+ }, {
21
+ name: 'id',
22
+ type: 'String'
23
+ }, {
24
+ name: 'isHeader',
25
+ type: 'Boolean'
26
+ }, {
27
+ name: 'isValid',
28
+ type: 'Boolean'
29
+ }, {
30
+ name: 'name',
31
+ type: 'String'
32
+ }]
33
+ }
34
+ }
35
+
36
+ Neo.applyClassConfig(SideNav);
37
+
38
+ export default SideNav;
@@ -0,0 +1,6 @@
1
+ {
2
+ "appPath": "apps/form/app.mjs",
3
+ "basePath": "../../",
4
+ "environment": "development",
5
+ "mainPath": "./Main.mjs"
6
+ }
@@ -0,0 +1,24 @@
1
+ import SideNavModel from '../model/SideNav.mjs'
2
+ import Store from '../../../src/data/Store.mjs';
3
+
4
+ /**
5
+ * @class Form.store.SideNav
6
+ * @extends Neo.data.Store
7
+ */
8
+ class SideNav extends Store {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.store.SideNav'
12
+ * @protected
13
+ */
14
+ className: 'Form.store.SideNav',
15
+ /**
16
+ * @member {Neo.data.Model} model=SideNavModel
17
+ */
18
+ model: SideNavModel
19
+ }
20
+ }
21
+
22
+ Neo.applyClassConfig(SideNav);
23
+
24
+ export default SideNav;
@@ -0,0 +1,98 @@
1
+ import BaseFormContainer from '../../../src/form/Container.mjs';
2
+ import Container from '../../../src/container/Base.mjs';
3
+ import FormContainerController from './FormContainerController.mjs';
4
+ import Label from '../../../src/component/Label.mjs';
5
+ import Toolbar from '../../../src/toolbar/Base.mjs';
6
+
7
+ /**
8
+ * @class Form.view.FormContainer
9
+ * @extends Neo.form.Container
10
+ */
11
+ class FormContainer extends BaseFormContainer {
12
+ static config = {
13
+ /**
14
+ * @member {String} className='Form.view.FormContainer'
15
+ * @protected
16
+ */
17
+ className: 'Form.view.FormContainer',
18
+ /**
19
+ * @member {String[]} baseCls=['form-form-container','neo-container'],
20
+ * @protected
21
+ */
22
+ baseCls: ['form-form-container', 'neo-container'],
23
+ /**
24
+ * @member {Neo.controller.Component} controller=FormContainerController
25
+ */
26
+ controller: FormContainerController,
27
+ /**
28
+ * @member {Object[]} items
29
+ */
30
+ items: [{
31
+ module: Toolbar,
32
+ cls : ['form-header'],
33
+ flex : 'none',
34
+
35
+ items: [{
36
+ module: Label,
37
+ bind : {text: data => data.activeTitle},
38
+ cls : ['form-header-label'],
39
+ flex : 'none'
40
+ }, '->', {
41
+ handler: 'onValidatePageButtonClick',
42
+ text : 'Validate Page'
43
+ }]
44
+ }, {
45
+ module : Container,
46
+ reference: 'pages-container',
47
+
48
+ layout: {
49
+ ntype: 'card',
50
+ bind : {activeIndex: data => data.activeIndex}
51
+ },
52
+
53
+ items: [{
54
+ module: () => import('./pages/Page1.mjs')
55
+ }, {
56
+ module: () => import('./pages/Page2.mjs')
57
+ }, {
58
+ module: () => import('./pages/Page3.mjs')
59
+ }, {
60
+ module: () => import('./pages/Page4.mjs')
61
+ }, {
62
+ module: () => import('./pages/Page5.mjs')
63
+ }, {
64
+ module: () => import('./pages/Page6.mjs')
65
+ }, {
66
+ module: () => import('./pages/Page7.mjs')
67
+ }, {
68
+ module: () => import('./pages/Page8.mjs')
69
+ }, {
70
+ module: () => import('./pages/Page9.mjs')
71
+ }, {
72
+ module: () => import('./pages/Page10.mjs')
73
+ }]
74
+ }, {
75
+ module: Toolbar,
76
+ cls : ['form-footer'],
77
+ flex : 'none',
78
+
79
+ items: ['->', {
80
+ bind : {disabled: data => data.activeIndex === 0},
81
+ handler: 'onPrevPageButtonClick',
82
+ iconCls: 'fas fa-chevron-left',
83
+ text : 'Back'
84
+ }, {
85
+ bind : {disabled: data => data.activeIndex === data.maxIndex},
86
+ handler : 'onNextPageButtonClick',
87
+ iconCls : 'fas fa-chevron-right',
88
+ iconPosition: 'right',
89
+ style : {marginLeft: '1em'},
90
+ text : 'Next page'
91
+ }]
92
+ }]
93
+ }
94
+ }
95
+
96
+ Neo.applyClassConfig(FormContainer);
97
+
98
+ export default FormContainer;
@@ -0,0 +1,33 @@
1
+ import Component from '../../../src/controller/Component.mjs';
2
+
3
+ /**
4
+ * @class Form.view.FormContainerController
5
+ * @extends Neo.controller.Component
6
+ */
7
+ class FormContainerController extends Component {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Form.view.FormContainerController'
11
+ * @protected
12
+ */
13
+ className: 'Form.view.FormContainerController'
14
+ }
15
+
16
+ /**
17
+ * @param {Object} data
18
+ */
19
+ onNextPageButtonClick(data) {
20
+ this.getModel().data.activeIndex++;
21
+ }
22
+
23
+ /**
24
+ * @param {Object} data
25
+ */
26
+ onPrevPageButtonClick(data) {
27
+ this.getModel().data.activeIndex--;
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(FormContainerController);
32
+
33
+ export default FormContainerController;
@@ -0,0 +1,34 @@
1
+ import FormContainer from '../../../src/form/Container.mjs';
2
+
3
+ /**
4
+ * @class Form.view.FormPageContainer
5
+ * @extends Neo.form.Container
6
+ */
7
+ class FormPageContainer extends FormContainer {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Form.view.FormPageContainer'
11
+ * @protected
12
+ */
13
+ className: 'Form.view.FormPageContainer',
14
+ /**
15
+ * @member {Object} itemDefaults
16
+ */
17
+ itemDefaults: {
18
+ style: {maxWidth: '300px'}
19
+ },
20
+ /**
21
+ * @member {Object} layout={ntype:'vbox'}
22
+ */
23
+ layout: {ntype: 'vbox'},
24
+ /**
25
+ * @member {Object} _vdom
26
+ */
27
+ vdom:
28
+ {cn: []} // using a div instead of a form tag
29
+ }
30
+ }
31
+
32
+ Neo.applyClassConfig(FormPageContainer);
33
+
34
+ export default FormPageContainer;
@@ -0,0 +1,91 @@
1
+ import List from '../../../src/list/Base.mjs';
2
+
3
+ /**
4
+ * @class Form.view.SideNavList
5
+ * @extends Neo.list.Base
6
+ */
7
+ class SideNavList extends List {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Form.view.SideNavList'
11
+ * @protected
12
+ */
13
+ className: 'Form.view.SideNavList',
14
+ /**
15
+ * @member {String[]} baseCls=['form-side-nav-list','neo-list']
16
+ * @protected
17
+ */
18
+ baseCls: ['form-side-nav-list', 'neo-list'],
19
+ /**
20
+ * @member {Boolean} useHeaders=true
21
+ */
22
+ useHeaders: true
23
+ }
24
+
25
+ /**
26
+ * @param {Object} record
27
+ * @param {Number} index
28
+ * @returns {Object|Object[]|String} Either a config object to assign to the item, a vdom cn array or a html string
29
+ */
30
+ createItemContent(record, index) {
31
+ let itemText = record[this.displayField];
32
+
33
+ return record.isHeader ? itemText : [
34
+ {tag: 'i', cls: this.getIconCls(record)},
35
+ {html: itemText}
36
+ ];
37
+ }
38
+
39
+ /**
40
+ * @param {Object} record
41
+ * @returns {String[]}
42
+ */
43
+ getIconCls(record) {
44
+ let cls = ['neo-list-icon'];
45
+
46
+ if (record.isValid === true) {
47
+ return [...cls, 'neo-color-green', 'far', 'fa-circle-check'];
48
+ }
49
+
50
+ if (record.isValid === false) {
51
+ return [...cls, 'neo-color-red', 'far', 'fa-circle-xmark'];
52
+ }
53
+
54
+ return [...cls, 'neo-color-blue', 'far', 'fa-circle'];
55
+ }
56
+
57
+ /**
58
+ * Saves activeIndex & activeTitle into the closest view model
59
+ * @param {String[]} items
60
+ */
61
+ onSelect(items) {
62
+ let me = this,
63
+ record = me.store.get(me.getItemRecordId(items[0]));
64
+
65
+ me.getModel().setData({
66
+ activeIndex: record.cardIndex,
67
+ activeTitle: record.name
68
+ })
69
+ }
70
+
71
+ /**
72
+ * Saves the amount of non-header items into the closest view model
73
+ */
74
+ onStoreLoad() {
75
+ let maxIndex = -1;
76
+
77
+ this.store.items.forEach(record => {
78
+ if (!record.isHeader) {
79
+ maxIndex++;
80
+ }
81
+ });
82
+
83
+ this.getModel().data.maxIndex = maxIndex;
84
+
85
+ super.onStoreLoad()
86
+ }
87
+ }
88
+
89
+ Neo.applyClassConfig(SideNavList);
90
+
91
+ export default SideNavList;
@@ -0,0 +1,59 @@
1
+ import BaseViewport from '../../../src/container/Viewport.mjs';
2
+ import FormContainer from './FormContainer.mjs';
3
+ import SideNavList from './SideNavList.mjs';
4
+ import ViewportController from './ViewportController.mjs';
5
+ import ViewportModel from './ViewportModel.mjs';
6
+
7
+ /**
8
+ * @class Form.view.Viewport
9
+ * @extends Neo.container.Viewport
10
+ */
11
+ class Viewport extends BaseViewport {
12
+ static config = {
13
+ /**
14
+ * @member {String} className='Form.view.Viewport'
15
+ * @protected
16
+ */
17
+ className: 'Form.view.Viewport',
18
+ /**
19
+ * @member {Neo.controller.Component} controller=ViewportController
20
+ */
21
+ controller: ViewportController,
22
+ /**
23
+ * @member {Object[]} items
24
+ */
25
+ items: [{
26
+ ntype: 'container',
27
+ style: {margin: '0 1em'},
28
+ width: '300',
29
+
30
+ items: [{
31
+ flex: 'none',
32
+ vdom: {tag: 'h1', innerHTML: 'My Form Header'}
33
+ }, {
34
+ module : SideNavList,
35
+ reference: 'side-nav',
36
+
37
+ bind: {
38
+ headerlessActiveIndex: data => data.activeIndex,
39
+ store : 'stores.sideNav'
40
+ }
41
+ }]
42
+ }, {
43
+ module: FormContainer,
44
+ style : {margin: '20px'}
45
+ }],
46
+ /**
47
+ * @member {Object} layout={ntype:'hbox',align:'stretch'}
48
+ */
49
+ layout: {ntype: 'hbox', align: 'stretch'},
50
+ /**
51
+ * @member {Neo.model.Component} model=ViewportModel
52
+ */
53
+ model: ViewportModel
54
+ }
55
+ }
56
+
57
+ Neo.applyClassConfig(Viewport);
58
+
59
+ export default Viewport;
@@ -0,0 +1,37 @@
1
+ import Component from '../../../src/controller/Component.mjs';
2
+
3
+ /**
4
+ * @class Form.view.ViewportController
5
+ * @extends Neo.controller.Component
6
+ */
7
+ class ViewportController extends Component {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Form.view.ViewportController'
11
+ * @protected
12
+ */
13
+ className: 'Form.view.ViewportController'
14
+ }
15
+
16
+ /**
17
+ * @param {Object} data
18
+ */
19
+ onValidatePageButtonClick(data) {
20
+ let me = this,
21
+ model = me.getModel(),
22
+ activeIndex = model.data.activeIndex,
23
+ pagesContainer = me.getReference('pages-container'),
24
+ store = model.getStore('sideNav'),
25
+ activeCard = pagesContainer.items[activeIndex],
26
+ listIndex = me.getReference('side-nav').getActiveIndex(activeIndex),
27
+ isValid = activeCard.validate();
28
+
29
+ console.log(`Current page: ${activeIndex + 1}`, activeCard.getValues());
30
+
31
+ store.getAt(listIndex).isValid = isValid;
32
+ }
33
+ }
34
+
35
+ Neo.applyClassConfig(ViewportController);
36
+
37
+ export default ViewportController;
@@ -0,0 +1,50 @@
1
+ import Component from '../../../src/model/Component.mjs';
2
+ import SideNavStore from '../store/SideNav.mjs'
3
+
4
+ /**
5
+ * @class Form.view.ViewportModel
6
+ * @extends Neo.model.Component
7
+ */
8
+ class ViewportModel extends Component {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.ViewportModel'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.ViewportModel',
15
+ /**
16
+ * @member {Object} data
17
+ */
18
+ data: {
19
+ /**
20
+ * The currently selected list item inside the SideNavList
21
+ * @member {Number} data.activeIndex
22
+ */
23
+ activeIndex: 0,
24
+ /**
25
+ * The name of the currently selected list item record
26
+ * @member {String} data.activeTitle
27
+ */
28
+ activeTitle: '',
29
+ /**
30
+ * The amount of non-header SideNavList items
31
+ * @member {Number} data.maxIndex
32
+ */
33
+ maxIndex: 0
34
+ },
35
+ /**
36
+ * @member {Object} stores
37
+ */
38
+ stores: {
39
+ sideNav: {
40
+ module : SideNavStore,
41
+ autoLoad: true,
42
+ url : '../../resources/examples/data/formSideNav.json'
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ Neo.applyClassConfig(ViewportModel);
49
+
50
+ export default ViewportModel;
@@ -0,0 +1,34 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page1
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page1 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page1'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page1',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Firstname',
21
+ minLength: 3,
22
+ name : 'firstname',
23
+ required : true
24
+ }, {
25
+ module : TextField,
26
+ labelText: 'Lastname',
27
+ name : 'lastname'
28
+ }]
29
+ }
30
+ }
31
+
32
+ Neo.applyClassConfig(Page1);
33
+
34
+ export default Page1;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page10
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page10 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page10'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page10',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 10 Field 1',
21
+ name : 'page10field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 10 Field 2',
26
+ name : 'page10field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page10);
32
+
33
+ export default Page10;
@@ -0,0 +1,28 @@
1
+ import DateField from '../../../../src/form/field/Date.mjs';
2
+ import FormPageContainer from '../FormPageContainer.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page2
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page2 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page2'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page2',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : DateField,
20
+ labelText: 'Birthday',
21
+ name : 'birthday'
22
+ }]
23
+ }
24
+ }
25
+
26
+ Neo.applyClassConfig(Page2);
27
+
28
+ export default Page2;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page3
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page3 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page3'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page3',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 3 Field 1',
21
+ name : 'page3field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 3 Field 2',
26
+ name : 'page3field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page3);
32
+
33
+ export default Page3;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page4
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page4 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page4'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page4',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 4 Field 1',
21
+ name : 'page4field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 4 Field 2',
26
+ name : 'page4field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page4);
32
+
33
+ export default Page4;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page5
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page5 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page5'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page5',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 5 Field 1',
21
+ name : 'page5field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 5 Field 2',
26
+ name : 'page5field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page5);
32
+
33
+ export default Page5;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page6
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page6 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page6'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page6',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 6 Field 1',
21
+ name : 'page6field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 6 Field 2',
26
+ name : 'page6field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page6);
32
+
33
+ export default Page6;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page7
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page7 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page7'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page7',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 7 Field 1',
21
+ name : 'page7field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 7 Field 2',
26
+ name : 'page7field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page7);
32
+
33
+ export default Page7;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page8
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page8 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page8'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page8',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 8 Field 1',
21
+ name : 'page8field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 8 Field 2',
26
+ name : 'page8field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page8);
32
+
33
+ export default Page8;
@@ -0,0 +1,33 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page9
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page9 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page9'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page9',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 9 Field 1',
21
+ name : 'page9field1',
22
+ required : true
23
+ }, {
24
+ module : TextField,
25
+ labelText: 'Page 9 Field 2',
26
+ name : 'page9field2'
27
+ }]
28
+ }
29
+ }
30
+
31
+ Neo.applyClassConfig(Page9);
32
+
33
+ export default Page9;
@@ -584,13 +584,6 @@ if (programOpts.info) {
584
584
  ` className: '${className}'`
585
585
  );
586
586
 
587
- baseClass === 'container.Viewport' && addComma(classContent).push(
588
- " /**",
589
- " * @member {Boolean} autoMount=true",
590
- " */",
591
- " autoMount: true"
592
- );
593
-
594
587
  baseClass === 'table.Container' && addComma(classContent).push(
595
588
  " /**",
596
589
  " * @member {Object[]} columns",
@@ -2,6 +2,7 @@
2
2
  "apps": [
3
3
  "Covid",
4
4
  "Docs",
5
+ "Form",
5
6
  "Krausest",
6
7
  "RealWorld",
7
8
  "RealWorld2",
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.1.12'
23
+ * @member {String} version='5.1.14'
24
24
  */
25
- version: '5.1.12'
25
+ version: '5.1.14'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "5.1.12",
3
+ "version": "5.1.14",
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.58.1",
59
+ "sass": "^1.58.3",
60
60
  "webpack": "^5.75.0",
61
61
  "webpack-cli": "^5.0.1",
62
62
  "webpack-dev-server": "4.11.1",
@@ -0,0 +1,19 @@
1
+ {
2
+ "success": true,
3
+
4
+ "data": [
5
+ {"id": 1, "cardIndex": null, "isHeader": true, "isValid": null, "name": "1. Basic data"},
6
+ {"id": 2, "cardIndex": 0, "isHeader": false, "isValid": null, "name": "Page 1"},
7
+ {"id": 3, "cardIndex": 1, "isHeader": false, "isValid": null, "name": "Page 2"},
8
+ {"id": 4, "cardIndex": 2, "isHeader": false, "isValid": null, "name": "Page 3"},
9
+ {"id": 5, "cardIndex": null, "isHeader": true, "isValid": null, "name": "2. Personal data"},
10
+ {"id": 6, "cardIndex": 3, "isHeader": false, "isValid": null, "name": "Page 4"},
11
+ {"id": 7, "cardIndex": 4, "isHeader": false, "isValid": null, "name": "Page 5"},
12
+ {"id": 8, "cardIndex": 5, "isHeader": false, "isValid": null, "name": "Page 6"},
13
+ {"id": 9, "cardIndex": 6, "isHeader": false, "isValid": null, "name": "Page 7"},
14
+ {"id": 10, "cardIndex": null, "isHeader": true, "isValid": null, "name": "3. More data"},
15
+ {"id": 11, "cardIndex": 7, "isHeader": false, "isValid": null, "name": "Page 8"},
16
+ {"id": 12, "cardIndex": 8, "isHeader": false, "isValid": null, "name": "Page 9"},
17
+ {"id": 13, "cardIndex": 9, "isHeader": false, "isValid": null, "name": "Page 10"}
18
+ ]
19
+ }
@@ -0,0 +1,23 @@
1
+ .form-form-container.neo-container {
2
+ border : 1px solid #ddd;
3
+ border-radius: 5px;
4
+ max-width : 600px;
5
+
6
+ .form-footer {
7
+ border-top: 1px solid #ddd;
8
+ min-height: 50px;
9
+ padding : .5em 1em;
10
+ }
11
+
12
+ .form-header {
13
+ align-items : center;
14
+ border-bottom: 1px solid #ddd;
15
+ display : flex;
16
+ min-height : 50px;
17
+ padding : .5em 1em;
18
+ }
19
+
20
+ .form-header-label {
21
+ font-size: 24px;
22
+ }
23
+ }
@@ -0,0 +1,31 @@
1
+ .form-side-nav-list.neo-list {
2
+ .neo-list-header {
3
+ font-weight : bold;
4
+ text-transform: uppercase;
5
+ }
6
+
7
+ .neo-list-item {
8
+ .neo-color-blue {
9
+ color: #1c60a0;
10
+ }
11
+
12
+ .neo-color-green {
13
+ color: darkgreen;
14
+ }
15
+
16
+ .neo-color-red {
17
+ color: brown;
18
+ }
19
+
20
+ .neo-list-icon {
21
+ margin-right: .5em;
22
+ }
23
+
24
+ &:not(.neo-list-header) {
25
+ align-items : center;
26
+ display : flex;
27
+ flex-direction: row;
28
+ margin-left : 18px;
29
+ }
30
+ }
31
+ }
@@ -237,12 +237,12 @@ const DefaultConfig = {
237
237
  useVdomWorker: true,
238
238
  /**
239
239
  * buildScripts/injectPackageVersion.mjs will update this value
240
- * @default '5.1.12'
240
+ * @default '5.1.14'
241
241
  * @memberOf! module:Neo
242
242
  * @name config.version
243
243
  * @type String
244
244
  */
245
- version: '5.1.12'
245
+ version: '5.1.14'
246
246
  };
247
247
 
248
248
  Object.assign(DefaultConfig, {
@@ -90,6 +90,17 @@ class DateField extends Picker {
90
90
  return this.dateSelector;
91
91
  }
92
92
 
93
+ /**
94
+ * @returns {Boolean}
95
+ */
96
+ hasContent() {
97
+ if (this.labelPosition === 'inline') {
98
+ return true;
99
+ }
100
+
101
+ return super.hasContent()
102
+ }
103
+
93
104
  /**
94
105
  * @param {Object} data
95
106
  * @protected
@@ -696,19 +696,17 @@ class Text extends Base {
696
696
  * @protected
697
697
  */
698
698
  afterSetValue(value, oldValue) {
699
- let me = this,
700
- cls = me.cls,
701
- placeholderText = me.placeholderText,
702
- hasContent = placeholderText?.length > 0 || value !== null && value.toString().length > 0,
703
- originalValue = me.originalConfig.value,
704
- isDirty = value !== originalValue && Neo.isEmpty(value) !== Neo.isEmpty(originalValue);
699
+ let me = this,
700
+ cls = me.cls,
701
+ originalValue = me.originalConfig.value,
702
+ isDirty = value !== originalValue && Neo.isEmpty(value) !== Neo.isEmpty(originalValue);
705
703
 
706
704
  me.silentVdomUpdate = true;
707
705
 
708
706
  me.getInputEl().value = value;
709
707
 
710
- NeoArray[hasContent ? 'add' : 'remove'](cls, 'neo-has-content');
711
- NeoArray[isDirty ? 'add' : 'remove'](cls, 'neo-is-dirty');
708
+ NeoArray[me.hasContent() ? 'add' : 'remove'](cls, 'neo-has-content');
709
+ NeoArray[isDirty ? 'add' : 'remove'](cls, 'neo-is-dirty');
712
710
  me.cls = cls;
713
711
 
714
712
  me.validate(); // silent
@@ -998,6 +996,15 @@ class Text extends Base {
998
996
  return this.id + '-trigger-' + type;
999
997
  }
1000
998
 
999
+ /**
1000
+ * @returns {Boolean}
1001
+ */
1002
+ hasContent() {
1003
+ let value = this.value;
1004
+
1005
+ return this.placeholderText?.length > 0 || value !== null && value.toString().length > 0
1006
+ }
1007
+
1001
1008
  /**
1002
1009
  * Finds a trigger by a given type config
1003
1010
  * @param {String} type