neo.mjs 6.8.2 → 6.9.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.
Files changed (66) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +1 -1
  2. package/apps/ServiceWorker.mjs +2 -2
  3. package/apps/learnneo/app.mjs +6 -0
  4. package/apps/learnneo/index.html +11 -0
  5. package/apps/learnneo/model/Content.mjs +44 -0
  6. package/apps/learnneo/neo-config.json +6 -0
  7. package/apps/learnneo/store/Content.mjs +24 -0
  8. package/apps/learnneo/view/Viewport.mjs +34 -0
  9. package/apps/learnneo/view/ViewportController.mjs +19 -0
  10. package/apps/learnneo/view/home/ContentTreeList.mjs +41 -0
  11. package/apps/learnneo/view/home/MainContainer.mjs +51 -0
  12. package/apps/learnneo/view/home/MainContainerController.mjs +50 -0
  13. package/apps/route/app.mjs +6 -0
  14. package/apps/route/index.html +11 -0
  15. package/apps/route/neo-config.json +6 -0
  16. package/apps/route/view/ButtonBar.mjs +57 -0
  17. package/apps/route/view/CenterContainer.mjs +37 -0
  18. package/apps/route/view/FooterContainer.mjs +47 -0
  19. package/apps/route/view/HeaderContainer.mjs +47 -0
  20. package/apps/route/view/MainView.mjs +66 -0
  21. package/apps/route/view/MainViewController.mjs +210 -0
  22. package/apps/route/view/MetaContainer.mjs +52 -0
  23. package/apps/route/view/Viewport.mjs +15 -0
  24. package/apps/route/view/center/CardAdministration.mjs +36 -0
  25. package/apps/route/view/center/CardAdministrationDenied.mjs +26 -0
  26. package/apps/route/view/center/CardContact.mjs +29 -0
  27. package/apps/route/view/center/CardHome.mjs +26 -0
  28. package/apps/route/view/center/CardSection1.mjs +26 -0
  29. package/apps/route/view/center/CardSection2.mjs +27 -0
  30. package/examples/ConfigurationViewport.mjs +1 -1
  31. package/examples/ServiceWorker.mjs +2 -2
  32. package/examples/form/field/select/MainContainer.mjs +7 -2
  33. package/examples/table/container/MainContainer.mjs +4 -2
  34. package/examples/table/container/MainModel.mjs +3 -0
  35. package/examples/table/container/MainStore.mjs +10 -10
  36. package/examples/todoList/version1/MainComponent.mjs +5 -5
  37. package/examples/toolbar/paging/view/MainContainer.mjs +31 -3
  38. package/package.json +1 -1
  39. package/resources/data/learnneo/content.json +27 -0
  40. package/resources/data/learnneo/pages/whyneo.md +76 -0
  41. package/resources/scss/src/apps/route/CenterContainer.scss +29 -0
  42. package/resources/scss/src/apps/route/HeaderContainer.scss +122 -0
  43. package/resources/scss/src/apps/route/MainView.scss +3 -0
  44. package/resources/scss/src/apps/route/MetaContainer.scss +44 -0
  45. package/resources/scss/src/apps/route/_all.scss +1 -0
  46. package/resources/scss/src/form/field/Picker.scss +0 -1
  47. package/src/DefaultConfig.mjs +2 -2
  48. package/src/Neo.mjs +15 -14
  49. package/src/button/Base.mjs +2 -2
  50. package/src/component/Base.mjs +41 -50
  51. package/src/container/Base.mjs +59 -2
  52. package/src/controller/Base.mjs +84 -4
  53. package/src/controller/Component.mjs +22 -7
  54. package/src/core/Observable.mjs +50 -9
  55. package/src/dialog/Base.mjs +1 -4
  56. package/src/form/field/FileUpload.mjs +11 -0
  57. package/src/form/field/Picker.mjs +0 -17
  58. package/src/form/field/Range.mjs +8 -0
  59. package/src/form/field/Text.mjs +29 -0
  60. package/src/form/field/trigger/Picker.mjs +7 -0
  61. package/src/main/DomEvents.mjs +9 -3
  62. package/src/manager/DomEvent.mjs +3 -0
  63. package/src/menu/List.mjs +1 -1
  64. package/src/table/View.mjs +78 -53
  65. package/src/toolbar/Paging.mjs +68 -76
  66. package/src/tooltip/Base.mjs +111 -11
@@ -23,7 +23,7 @@ If yes, please describe the impact and migration path for existing applications:
23
23
 
24
24
  **The PR fulfills these requirements:**
25
25
 
26
- - [ ] It's submitted to the `dev` branch, _not_ the `master` branch
26
+ - [ ] It's submitted to the `dev` branch, _not_ the `main` branch
27
27
  - [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number)
28
28
 
29
29
  If adding a **new feature**, the PR's description includes:
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='6.8.2'
23
+ * @member {String} version='6.9.0'
24
24
  */
25
- version: '6.8.2'
25
+ version: '6.9.0'
26
26
  }
27
27
 
28
28
  /**
@@ -0,0 +1,6 @@
1
+ import Viewport from './view/Viewport.mjs';
2
+
3
+ export const onStart = () => Neo.app({
4
+ mainView: Viewport,
5
+ name : 'LearnNeo'
6
+ })
@@ -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>LearnNeo</title>
7
+ </head>
8
+ <body>
9
+ <script src="../../src/MicroLoader.mjs" type="module"></script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,44 @@
1
+ import Model from '../../../src/data/Model.mjs';
2
+
3
+ /**
4
+ * @class LearnNeo.model.Content
5
+ * @extends Neo.data.Model
6
+ */
7
+ class Content extends Model {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='LearnNeo.model.Content'
11
+ * @protected
12
+ */
13
+ className: 'LearnNeo.model.Content',
14
+ /**
15
+ * @member {Object[]} fields
16
+ */
17
+ fields: [{
18
+ name: 'className',
19
+ type: 'String'
20
+ }, {
21
+ name: 'collapsed',
22
+ type: 'Boolean'
23
+ }, {
24
+ name: 'id',
25
+ type: 'Integer'
26
+ }, {
27
+ name: 'isLeaf',
28
+ type: 'Boolean'
29
+ }, {
30
+ name: 'name',
31
+ type: 'String'
32
+ }, {
33
+ name: 'parentId',
34
+ type: 'Integer'
35
+ }, {
36
+ name: 'path',
37
+ type: 'String'
38
+ }]
39
+ }
40
+ }
41
+
42
+ Neo.applyClassConfig(Content);
43
+
44
+ export default Content;
@@ -0,0 +1,6 @@
1
+ {
2
+ "appPath": "apps/learnneo/app.mjs",
3
+ "basePath": "../../",
4
+ "environment": "development",
5
+ "mainPath": "./Main.mjs"
6
+ }
@@ -0,0 +1,24 @@
1
+ import ContentModel from '../model/Content.mjs';
2
+ import Store from '../../../src/data/Store.mjs';
3
+
4
+ /**
5
+ * @class LearnNeo.store.Content
6
+ * @extends Neo.data.Store
7
+ */
8
+ class Content extends Store {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='LearnNeo.store.Content'
12
+ * @protected
13
+ */
14
+ className: 'LearnNeo.store.Content',
15
+ /**
16
+ * @member {Neo.data.Model} model=ContentModel
17
+ */
18
+ model: ContentModel
19
+ }
20
+ }
21
+
22
+ Neo.applyClassConfig(Content);
23
+
24
+ export default Content;
@@ -0,0 +1,34 @@
1
+ import BaseViewport from '../../../src/container/Viewport.mjs';
2
+ import ViewportController from './ViewportController.mjs';
3
+
4
+ /**
5
+ * @class LearnNeo.view.Viewport
6
+ * @extends Neo.container.Viewport
7
+ */
8
+ class Viewport extends BaseViewport {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='LearnNeo.view.Viewport'
12
+ * @protected
13
+ */
14
+ className: 'LearnNeo.view.Viewport',
15
+ /**
16
+ * @member {Neo.controller.Component} controller=ViewportController
17
+ */
18
+ controller: ViewportController,
19
+ /**
20
+ * @member {Object[]} items
21
+ */
22
+ items: [{
23
+ module: () => import('./home/MainContainer.mjs')
24
+ }],
25
+ /**
26
+ * @member {Object} layout={ntype:'card'}
27
+ */
28
+ layout: {ntype: 'card'}
29
+ }
30
+ }
31
+
32
+ Neo.applyClassConfig(Viewport);
33
+
34
+ export default Viewport;
@@ -0,0 +1,19 @@
1
+ import Component from '../../../src/controller/Component.mjs';
2
+
3
+ /**
4
+ * @class LearnNeo.view.ViewportController
5
+ * @extends Neo.controller.Component
6
+ */
7
+ class ViewportController extends Component {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='LearnNeo.view.ViewportController'
11
+ * @protected
12
+ */
13
+ className: 'LearnNeo.view.ViewportController'
14
+ }
15
+ }
16
+
17
+ Neo.applyClassConfig(ViewportController);
18
+
19
+ export default ViewportController;
@@ -0,0 +1,41 @@
1
+ import ContentStore from '../../store/Content.mjs'
2
+ import TreeList from '../../../../src/tree/List.mjs';
3
+
4
+ /**
5
+ * @class LearnNeo.view.home.ContentTreeList
6
+ * @extends Neo.container.Base
7
+ */
8
+ class ContentTreeList extends TreeList {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='LearnNeo.view.home.ContentTreeList'
12
+ * @protected
13
+ */
14
+ className: 'LearnNeo.view.home.ContentTreeList',
15
+ /**
16
+ * @member {Neo.data.Store} store=ContentStore
17
+ */
18
+ store: ContentStore
19
+ }
20
+
21
+ /**
22
+ * todo: createItems() should get triggered onStoreLoad()
23
+ */
24
+ onConstructed() {
25
+ super.onConstructed();
26
+
27
+ let me = this;
28
+
29
+ Neo.Xhr.promiseJson({
30
+ url: '../../../resources/data/learnneo/content.json'
31
+ }).then(data => {
32
+ me.store.data = data.json.data;
33
+ me.createItems(null, me.getListItemsRoot(), 0);
34
+ me.update();
35
+ })
36
+ }
37
+ }
38
+
39
+ Neo.applyClassConfig(ContentTreeList);
40
+
41
+ export default ContentTreeList;
@@ -0,0 +1,51 @@
1
+ import Container from '../../../../src/container/Base.mjs';
2
+ import ContentTreeList from './ContentTreeList.mjs';
3
+ import MainContainerController from './MainContainerController.mjs';
4
+ import Splitter from '../../../../src/component/Splitter.mjs';
5
+
6
+ /**
7
+ * @class LearnNeo.view.home.MainContainer
8
+ * @extends Neo.container.Base
9
+ */
10
+ class MainContainer extends Container {
11
+ static config = {
12
+ /**
13
+ * @member {String} className='LearnNeo.view.home.MainContainer'
14
+ * @protected
15
+ */
16
+ className: 'LearnNeo.view.home.MainContainer',
17
+ /**
18
+ * @member {Neo.controller.Component} controller=MainContainerController
19
+ */
20
+ controller: MainContainerController,
21
+ /**
22
+ * @member {Object[]} items
23
+ */
24
+ items: [{
25
+ module : Container,
26
+ layout : 'fit',
27
+ minWidth: 350,
28
+ width : 350,
29
+
30
+ items: [{
31
+ module : ContentTreeList,
32
+ listeners: {leafItemClick: 'onContentListLeafClick'}
33
+ }]
34
+ }, {
35
+ module : Splitter,
36
+ resizeTarget: 'previous'
37
+ }, {
38
+ module : Container,
39
+ layout : {ntype: 'card', activeIndex: null},
40
+ reference: 'content-container'
41
+ }],
42
+ /**
43
+ * @member {Object} layout={ntype:'hbox',align:'stretch'}
44
+ */
45
+ layout: {ntype: 'hbox', align: 'stretch'}
46
+ }
47
+ }
48
+
49
+ Neo.applyClassConfig(MainContainer);
50
+
51
+ export default MainContainer;
@@ -0,0 +1,50 @@
1
+ import Component from '../../../../src/controller/Component.mjs';
2
+
3
+ /**
4
+ * @class LearnNeo.view.home.MainContainerController
5
+ * @extends Neo.controller.Component
6
+ */
7
+ class MainContainerController extends Component {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='LearnNeo.view.home.MainContainerController'
11
+ * @protected
12
+ */
13
+ className: 'LearnNeo.view.home.MainContainerController'
14
+ }
15
+
16
+ /**
17
+ * @param {Object} record
18
+ */
19
+ async onContentListLeafClick(record) {
20
+ const
21
+ contentContainer = this.getReference('content-container'),
22
+ path = '../../../resources/data/learnneo/pages';
23
+
24
+ console.log('onContentListLeafClick', {contentContainer, record});
25
+ console.log('onContentListLeafClick', {contentContainer, record});
26
+
27
+ if (record.isLeaf && record.path) {
28
+ const data = await fetch(`${path}/${record.path}`);
29
+ const content = await data.text();
30
+
31
+ contentContainer.removeAll();
32
+
33
+ await this.timeout(50);
34
+
35
+ contentContainer.add({
36
+ ntype: 'component',
37
+ html : content
38
+ });
39
+
40
+ await this.timeout(50);
41
+
42
+
43
+ contentContainer.layout.activeIndex = 0;
44
+ }
45
+ }
46
+ }
47
+
48
+ Neo.applyClassConfig(MainContainerController);
49
+
50
+ export default MainContainerController;
@@ -0,0 +1,6 @@
1
+ import Viewport from './view/Viewport.mjs';
2
+
3
+ export const onStart = () => Neo.app({
4
+ mainView: Viewport,
5
+ name : 'Route'
6
+ });
@@ -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>Route</title>
7
+ </head>
8
+ <body>
9
+ <script src="../../src/MicroLoader.mjs" type="module"></script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,6 @@
1
+ {
2
+ "appPath": "apps/route/app.mjs",
3
+ "basePath": "../../",
4
+ "environment": "development",
5
+ "mainPath": "./Main.mjs"
6
+ }
@@ -0,0 +1,57 @@
1
+ import Base from '../../../src/container/Base.mjs';
2
+ import Button from '../../../src/button/Base.mjs';
3
+
4
+ /**
5
+ * @class Route.view.ButtonBar
6
+ * @extends Neo.container.Base
7
+ */
8
+ class ButtonBar extends Base {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Route.view.ButtonBar'
12
+ * @protected
13
+ */
14
+ className: 'Route.view.ButtonBar',
15
+ baseCls: ['route', 'neo-container'],
16
+ cls: ['route_buttonbar', 'centerPanel'],
17
+ /**
18
+ * @member {Object[]} items
19
+ */
20
+ items: [{
21
+ module: Button,
22
+ flex: 'none',
23
+ handler: 'onSwitchButtonCardHome',
24
+ cls: ['route_button', 'neo-button'],
25
+ iconCls: 'fa-solid fa-home',
26
+ reference: 'home_button',
27
+ text: 'Home',
28
+ }, {
29
+ module: Button,
30
+ flex: 'none',
31
+ handler: 'onSwitchButtonCardSection1',
32
+ cls: ['route_button', 'neo-button'],
33
+ iconCls: 'fa-solid fa-globe',
34
+ text: 'Section 1'
35
+ }, {
36
+ module: Button,
37
+ flex: 'none',
38
+ handler: 'onSwitchButtonCardSection2',
39
+ cls: ['route_button', 'neo-button'],
40
+ iconCls: 'fa-solid fa-globe',
41
+ text: 'Section 2'
42
+ },{
43
+ module: Button,
44
+ flex: 'none',
45
+ handler: 'onSwitchButtonAdministration',
46
+ cls: ['route_button', 'neo-button'],
47
+ iconCls: 'fa-solid fa-building-user',
48
+ text: 'Administration',
49
+ }],
50
+ layout: { ntype: 'flexbox', wrap: 'wrap' },
51
+
52
+ }
53
+ }
54
+
55
+ Neo.applyClassConfig(ButtonBar);
56
+
57
+ export default ButtonBar;
@@ -0,0 +1,37 @@
1
+ import Base from '../../../src/container/Base.mjs';
2
+
3
+ /**
4
+ * @class Route.view.CenterContainer
5
+ * @extends Neo.container.Base
6
+ */
7
+ class CenterContainer extends Base {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Route.view.CenterContainer'
11
+ * @protected
12
+ */
13
+ className: 'Route.view.CenterContainer',
14
+ baseCls: ['route_center', 'neo-container'],
15
+
16
+ /**
17
+ * @member {Object[]} items
18
+ */
19
+ items: [
20
+ {module: () => import('./center/CardContact.mjs')},
21
+ {module: () => import('./center/CardAdministration.mjs')},
22
+ {module: () => import('./center/CardSection1.mjs')},
23
+ {module: () => import('./center/CardSection2.mjs')},
24
+ {module: () => import('./center/CardHome.mjs')},
25
+ {module: () => import('./center/CardAdministrationDenied.mjs')},
26
+ ],
27
+
28
+ /**
29
+ * @member {Object} layout={ntype: 'vbox', align: 'stretch'}
30
+ */
31
+ layout: {ntype: 'card', align: 'stretch', activeIndex: 4},
32
+ }
33
+ }
34
+
35
+ Neo.applyClassConfig(CenterContainer);
36
+
37
+ export default CenterContainer;
@@ -0,0 +1,47 @@
1
+ import Container from '../../../src/container/Base.mjs';
2
+ import Button from '../../../src/button/Base.mjs';
3
+
4
+ /**
5
+ * @class Route.view.FooterContainer
6
+ * @extends Neo.container.Base
7
+ */
8
+ class FooterContainer extends Container {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Route.view.FooterContainer'
12
+ * @protected
13
+ */
14
+ className: 'Route.view.FooterContainer',
15
+
16
+ baseCls: ['route_footer', 'neo-container'],
17
+
18
+ height: 55,
19
+ /**
20
+ * @member {Object[]} items
21
+ */
22
+ items: [
23
+ {
24
+ module: Container,
25
+ reference: 'footer-container',
26
+ cls: ['centerPanel'],
27
+ items: [
28
+ {
29
+ module: Button,
30
+ flex: 'none',
31
+ handler: 'onSwitchButtonCardContact',
32
+ cls: ['route_button', 'neo-button'],
33
+ text: 'Contact'
34
+ }
35
+ ],
36
+ layout: { ntype: 'hbox', align: 'stretch' },
37
+
38
+ }
39
+
40
+ ],
41
+
42
+ }
43
+ }
44
+
45
+ Neo.applyClassConfig(FooterContainer);
46
+
47
+ export default FooterContainer;
@@ -0,0 +1,47 @@
1
+ import Container from '../../../src/container/Base.mjs';
2
+ import Label from '../../../src/component/Label.mjs';
3
+ import Button from '../../../src/button/Base.mjs';
4
+ import Component from '../../../src/component/Base.mjs';
5
+
6
+ /**
7
+ * @class Route.view.HeaderContainer
8
+ * @extends Neo.container.Base
9
+ */
10
+ class HeaderContainer extends Container {
11
+ static config = {
12
+ /**
13
+ * @member {String} className='Route.view.HeaderContainer'
14
+ * @protected
15
+ */
16
+ className: 'Route.view.HeaderContainer',
17
+ baseCls: ['route', 'neo-container', 'route_header'],
18
+ height: 242,
19
+ /**
20
+ * @member {Object[]} items
21
+ */
22
+ items: [
23
+ {
24
+ module: Component,
25
+ reference: 'logo',
26
+ width: 140,
27
+ height: 140,
28
+ cls: ['center'],
29
+ vdom: {
30
+ tag: 'img',
31
+ src: 'https://raw.githubusercontent.com/neomjs/pages/master/resources/images/logo_rounded.svg'
32
+ }
33
+ },
34
+ {
35
+ module: Label,
36
+ text: 'neo.mjs routes showcase',
37
+ cls: ['headline-caption']
38
+ },
39
+ ],
40
+ layout: { ntype: 'vbox', align: 'stretch' },
41
+
42
+ }
43
+ }
44
+
45
+ Neo.applyClassConfig(HeaderContainer);
46
+
47
+ export default HeaderContainer;
@@ -0,0 +1,66 @@
1
+ import MainViewController from './MainViewController.mjs';
2
+ import HeaderContainer from './HeaderContainer.mjs';
3
+ import FooterContainer from './FooterContainer.mjs';
4
+ import CenterContainer from './CenterContainer.mjs';
5
+ import ButtonBar from './ButtonBar.mjs';
6
+ import Panel from '../../../src/container/Panel.mjs';
7
+ import MetaContainer from './MetaContainer.mjs';
8
+
9
+ /**
10
+ * @class Route.view.MainContainer
11
+ * @extends Neo.container.Viewport
12
+ */
13
+ class MainContainer extends Panel {
14
+ static config = {
15
+ /**
16
+ * @member {String} className='Route.view.MainContainer'
17
+ * @protected
18
+ */
19
+ className: 'Route.view.MainView',
20
+ baseCls: ['route'],
21
+ /**
22
+ * @member {Boolean} autoMount=true
23
+ */
24
+ // autoMount: true,
25
+ /**
26
+ * @member {Neo.controller.Component} controller=MainViewController
27
+ */
28
+ controller: MainViewController,
29
+ /**
30
+ * @member {headers[]} items
31
+ */
32
+ headers: [
33
+ {
34
+ module: HeaderContainer,
35
+ dock: 'top'
36
+ },
37
+ {
38
+ module: ButtonBar,
39
+ dock: 'top',
40
+ reference: 'buttonbar',
41
+
42
+ },
43
+ {
44
+ module: FooterContainer,
45
+ dock: 'bottom'
46
+ },
47
+ {
48
+ module: MetaContainer,
49
+ dock: 'bottom',
50
+ reference: 'metabar',
51
+ }
52
+ ],
53
+ items: [
54
+ {
55
+ module: CenterContainer,
56
+ reference: 'center-container'
57
+
58
+ }
59
+ ],
60
+
61
+ }
62
+ }
63
+
64
+ Neo.applyClassConfig(MainContainer);
65
+
66
+ export default MainContainer;