neo.mjs 8.29.0 → 8.31.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 (37) hide show
  1. package/BACKERS.md +15 -15
  2. package/CONTRIBUTING.md +9 -9
  3. package/apps/ServiceWorker.mjs +2 -2
  4. package/apps/portal/index.html +1 -1
  5. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  6. package/examples/ServiceWorker.mjs +2 -2
  7. package/examples/grid/animatedRowSorting/MainModel.mjs +40 -0
  8. package/examples/grid/animatedRowSorting/MainStore.mjs +36 -0
  9. package/examples/grid/animatedRowSorting/Viewport.mjs +87 -0
  10. package/examples/grid/animatedRowSorting/app.mjs +6 -0
  11. package/examples/grid/animatedRowSorting/index.html +11 -0
  12. package/examples/grid/animatedRowSorting/neo-config.json +8 -0
  13. package/examples/grid/bigData/GridContainer.mjs +3 -2
  14. package/examples/grid/bigData/MainModel.mjs +3 -2
  15. package/examples/grid/bigData/MainStore.mjs +3 -2
  16. package/package.json +3 -3
  17. package/resources/scss/src/component/Progress.scss +1 -1
  18. package/resources/scss/src/grid/column/Progress.scss +34 -0
  19. package/resources/scss/theme-dark/grid/column/Progress.scss +6 -0
  20. package/resources/scss/theme-light/grid/column/Progress.scss +6 -0
  21. package/resources/scss/theme-neo-light/grid/column/Progress.scss +6 -0
  22. package/src/DefaultConfig.mjs +2 -2
  23. package/src/collection/Base.mjs +2 -1
  24. package/src/component/Base.mjs +1 -1
  25. package/src/component/Progress.mjs +26 -5
  26. package/src/data/Store.mjs +12 -9
  27. package/src/grid/Container.mjs +45 -68
  28. package/src/grid/ScrollManager.mjs +1 -1
  29. package/src/grid/View.mjs +81 -1
  30. package/src/grid/column/Component.mjs +50 -8
  31. package/src/grid/column/Progress.mjs +42 -0
  32. package/src/grid/column/_export.mjs +2 -1
  33. package/src/grid/header/Button.mjs +1 -2
  34. package/src/grid/plugin/AnimateRows.mjs +234 -0
  35. package/src/list/plugin/Animate.mjs +16 -7
  36. package/src/vdom/Helper.mjs +1 -1
  37. package/src/worker/Manager.mjs +6 -8
package/BACKERS.md CHANGED
@@ -1,22 +1,22 @@
1
1
  # Sponsors & Backers
2
2
 
3
- Truth to be told, the neo.mjs project is in need of sponsors & backers.
3
+ Truth to be told, the Neo.mjs project is in need of sponsors & backers.
4
4
 
5
5
  As an <a href="./LICENSE">MIT-licensed</a> open source project,
6
- you can use neo.mjs for free (as long as you stick to the license & copyright notice).
6
+ you can use Neo.mjs for free (as long as you stick to the license & copyright notice).
7
7
 
8
8
  Prior to the public release, the project was already at <a href=".github/NEOMJS_HISTORY.md">3720 commits</a>.
9
9
 
10
- To get neo.mjs to this point, I spent 3 years of my full and unpaid working time.
10
+ To get Neo.mjs to this point, I spent 3 years of my full and unpaid working time.
11
11
  This does not only include many 100h+ weeks and several sleepless nights,
12
12
  but I also burned most of my personal savings to get here.
13
13
 
14
- I did this, since I truly and deeply believe that neo.mjs has the potential to start a new era of UI development.
14
+ I did this, since I truly and deeply believe that Neo.mjs has the potential to start a new era of UI development.
15
15
 
16
16
  The current version is just a fraction of a much bigger picture I have in mind.
17
17
  Trust me, it is beautiful :)
18
18
 
19
- I can definitely say that I did use several other UI frameworks in the past and that neo.mjs boosted my productivity
19
+ I can definitely say that I did use several other UI frameworks in the past and that Neo.mjs boosted my productivity
20
20
  to an entire new level.
21
21
 
22
22
  This is something I would love to share with you!
@@ -29,35 +29,35 @@ By default, the main Readme will only include sponsors starting at the Gold tier
29
29
  (*) Only valid as long as the sponsorship stays active.
30
30
 
31
31
  # What will I sponsor?
32
- Obviously the continuing of the development for the neo.mjs framework.
32
+ Obviously the continuing of the development for the Neo.mjs framework.
33
33
  To get the idea of what this means in detail, please take a look at the: <a href=".github/VISION.md">Project Vision</a>.
34
34
 
35
- # Why should I sponsor neo.mjs?
35
+ # Why should I sponsor Neo.mjs?
36
36
  I am in need to make up for the invested time, which means that going forward,
37
37
  I have to spend a lot of my time on billable projects.
38
- Of course I will do my best to continue pushing neo.mjs in my free time.
38
+ Of course I will do my best to continue pushing Neo.mjs in my free time.
39
39
 
40
- With active sponsors I could invest more time into neo.mjs,
40
+ With active sponsors I could invest more time into Neo.mjs,
41
41
  which means that you will get new features, guides and bug-fixes a lot faster.
42
42
 
43
43
  # For developers:
44
44
  You can select a Backer tier ($10 / month), which would equal a cup of coffee for me every month (after taxes).
45
- This will not cover my living costs (unless neo.mjs goes viral), but it does have an impact on
45
+ This will not cover my living costs (unless Neo.mjs goes viral), but it does have an impact on
46
46
  my motivation for sure.
47
47
 
48
48
  # For companies:
49
49
  Starting at the bronze tier (special offer), you will be able to place your company logo on the main repository landing page (Readme.md).
50
- This will have a high impact on the neo.mjs community and make it easier for you
51
- to find neo.mjs developers in the future.
50
+ This will have a high impact on the Neo.mjs community and make it easier for you
51
+ to find Neo.mjs developers in the future.
52
52
 
53
53
  Obviously, sponsoring open source projects in general will increase your companies reputation.
54
54
 
55
- As soon as the neo.mjs community grows, it will also increase your company visibility in a good way.
55
+ As soon as the Neo.mjs community grows, it will also increase your company visibility in a good way.
56
56
 
57
- Please make sure to create a feature request ticket inside the neo.mjs <a href="../../issues">Issues Tracker</a>
57
+ Please make sure to create a feature request ticket inside the Neo.mjs <a href="../../issues">Issues Tracker</a>
58
58
  after signing a sponsor program to provide your company logo!
59
59
 
60
- ### Thanks a lot for your support of the neo.mjs project!<br/>
60
+ ### Thanks a lot for your support of the Neo.mjs project!<br/>
61
61
  <a href="https://github.com/sponsors/tobiu">Sponsor Tobias Uhlig</a>
62
62
 
63
63
  <br><br>
package/CONTRIBUTING.md CHANGED
@@ -1,15 +1,15 @@
1
- # neo.mjs Contributing Guide
2
- We are very excited that you are interested in contributing to neo.mjs.<br>
1
+ # Neo.mjs Contributing Guide
2
+ We are very excited that you are interested in contributing to Neo.mjs.<br>
3
3
  No worries, you don't need to be a guru, ninja or rockstar to support the project.
4
4
 
5
5
  ## What you can do to help:
6
6
 
7
- ### 1. neo.mjs just got released, so the most important thing right now is to get more eyes on the project.
7
+ ### 1. Neo.mjs just got released, so the most important thing right now is to get more eyes on the project.
8
8
  1. Add a star to this repository. Ok, this one was easy. Thank you!
9
- 2. Tell your friends about neo.mjs.
9
+ 2. Tell your friends about Neo.mjs.
10
10
  3. Write blog posts or post on social media (Facebook, LinkedIn, Twitter, etc.)
11
11
  4. Please stick to our <a href=".github/CODE_OF_CONDUCT.md">Code of Conduct</a>
12
- 5. Interested to see a neo.mjs session at a developer conference? Definitely possible. Just reach out!
12
+ 5. Interested to see a Neo.mjs session at a developer conference? Definitely possible. Just reach out!
13
13
 
14
14
  ### 2. Use the issues tracker
15
15
  1. In case you got an idea for a new feature
@@ -17,9 +17,9 @@ No worries, you don't need to be a guru, ninja or rockstar to support the projec
17
17
  1. Ideally, you create a new breaking test inside the tests folder.
18
18
  This saves a lot of time and ensures the bug will stay fixed once the ticket is resolved.
19
19
  3. Please like or comment on current tickets.
20
- This is a great help to figure out which tickets are the most important ones for the neo.mjs community.
20
+ This is a great help to figure out which tickets are the most important ones for the Neo.mjs community.
21
21
 
22
- ### 3. Contribute to the neo.mjs code base
22
+ ### 3. Contribute to the Neo.mjs code base
23
23
  1. Please ***always*** create a new issue inside our <a href="../../issues">Issues Tracker</a> first and wait for approval.
24
24
  This ensures that your idea fits the scope of the project and makes it less likely to get a rejected PR.
25
25
  We will do our best to reply to new tickets within 7d max. In case we don't, feel free to bump the ticket.
@@ -27,12 +27,12 @@ No worries, you don't need to be a guru, ninja or rockstar to support the projec
27
27
  Otherwise multiple contributors could work on the same item in parallel.
28
28
  3. Please make sure that pull requests are always related to an issue inside our <a href="../../issues">Issues Tracker</a>.
29
29
  4. Please create PRs for the dev branch and not for master.
30
- 5. Please do not copy code from other frameworks / libraries. So far, the entire neo.mjs code base is written from scratch.
30
+ 5. Please do not copy code from other frameworks / libraries. So far, the entire Neo.mjs code base is written from scratch.
31
31
  1. It is simply impossible to verify if contributed code is self-written.
32
32
  2. Adding new npm packages => dependencies / devDependencies is fine, in case there are no licensing conflicts.
33
33
  6. Refer to the <a href="./.github/CODEBASE_OVERVIEW.md">codebase overview</a> to understand how our repository is structured.
34
34
 
35
- ### 4. In case you created a nice app or component using neo.mjs, please let us know about it.
35
+ ### 4. In case you created a nice app or component using Neo.mjs, please let us know about it.
36
36
  1. We are always interested to feature client projects in blog posts or on social media.
37
37
 
38
38
  <br><br>
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.29.0'
23
+ * @member {String} version='8.31.0'
24
24
  */
25
- version: '8.29.0'
25
+ version: '8.31.0'
26
26
  }
27
27
 
28
28
  /**
@@ -16,7 +16,7 @@
16
16
  "@type": "Organization",
17
17
  "name": "Neo.mjs"
18
18
  },
19
- "datePublished": "2025-03-03",
19
+ "datePublished": "2025-03-09",
20
20
  "publisher": {
21
21
  "@type": "Organization",
22
22
  "name": "Neo.mjs"
@@ -107,7 +107,7 @@ class FooterContainer extends Container {
107
107
  }, {
108
108
  module: Component,
109
109
  cls : ['neo-version'],
110
- html : 'v8.29.0'
110
+ html : 'v8.31.0'
111
111
  }]
112
112
  }],
113
113
  /**
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.29.0'
23
+ * @member {String} version='8.31.0'
24
24
  */
25
- version: '8.29.0'
25
+ version: '8.31.0'
26
26
  }
27
27
 
28
28
  /**
@@ -0,0 +1,40 @@
1
+ import Model from '../../../src/data/Model.mjs';
2
+
3
+ /**
4
+ * @class Neo.examples.grid.animatedRowSorting.MainModel
5
+ * @extends Neo.data.Model
6
+ */
7
+ class MainModel extends Model {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Neo.examples.grid.animatedRowSorting.MainModel'
11
+ * @protected
12
+ */
13
+ className: 'Neo.examples.grid.animatedRowSorting.MainModel',
14
+ /**
15
+ * @member {Object[]} fields
16
+ */
17
+ fields: [{
18
+ name: 'country',
19
+ type: 'String'
20
+ }, {
21
+ name: 'firstname',
22
+ type: 'String'
23
+ }, {
24
+ name: 'id',
25
+ type: 'Int'
26
+ }, {
27
+ name: 'lastname',
28
+ type: 'String'
29
+ }, {
30
+ name: 'progress',
31
+ type: 'Int'
32
+ }],
33
+ /**
34
+ * @member {Boolean} trackModifiedFields=true
35
+ */
36
+ trackModifiedFields: true
37
+ }
38
+ }
39
+
40
+ export default Neo.setupClass(MainModel);
@@ -0,0 +1,36 @@
1
+ import Model from './MainModel.mjs';
2
+ import Store from '../../../src/data/Store.mjs';
3
+
4
+ /**
5
+ * @class Neo.examples.grid.animatedRowSorting.MainStore
6
+ * @extends Neo.data.Store
7
+ */
8
+ class MainStore extends Store {
9
+ static config = {
10
+ className: 'Neo.examples.grid.animatedRowSorting.MainStore',
11
+ model : Model,
12
+
13
+ data: [
14
+ {country : 'DE', firstname: 'Max', id: 1, lastname : 'Johnson', progress : 50},
15
+ {country : 'UK', firstname: 'Paul', id: 2, lastname : 'Walker', progress : 10},
16
+ {country : 'US', firstname: 'Sam', id: 3, lastname : 'Anderson', progress : 90},
17
+ {country : 'GR', firstname: 'William', id: 4, lastname : 'Wilson', progress : 30},
18
+ {country : 'AT', firstname: 'Carol', id: 5, lastname : 'Jackson', progress : 70},
19
+ {country : 'NL', firstname: 'Amanda', id: 6, lastname : 'King', progress : 100},
20
+ {country : 'FR', firstname: 'Sarah', id: 7, lastname : 'Scott', progress : 35}
21
+ ],
22
+
23
+ filters: [{
24
+ property: 'firstname',
25
+ operator: 'like',
26
+ value : null
27
+ }],
28
+
29
+ sorters: [{
30
+ property : 'id',
31
+ direction: 'ASC'
32
+ }]
33
+ }
34
+ }
35
+
36
+ export default Neo.setupClass(MainStore);
@@ -0,0 +1,87 @@
1
+ import BaseViewport from '../../../src/container/Viewport.mjs';
2
+ import GridContainer from '../../../src/grid/Container.mjs';
3
+ import MainStore from './MainStore.mjs';
4
+ import NumberField from '../../../src/form/field/Number.mjs';
5
+ import Toolbar from '../../../src/toolbar/Base.mjs';
6
+
7
+ /**
8
+ * @class Neo.examples.grid.animatedRowSorting.Viewport
9
+ * @extends Neo.container.Viewport
10
+ */
11
+ class Viewport extends BaseViewport {
12
+ static config = {
13
+ /**
14
+ * @member {String} className='Neo.examples.grid.animatedRowSorting.Viewport'
15
+ * @protected
16
+ */
17
+ className: 'Neo.examples.grid.animatedRowSorting.Viewport',
18
+ /**
19
+ * @member {Object} style={padding:'1em'}
20
+ */
21
+ style: {padding: '1em'},
22
+ /**
23
+ * @member {Object[]} items
24
+ */
25
+ items: [{
26
+ module: Toolbar,
27
+ flex : 'none',
28
+ style : {marginBottom: '1em', maxWidth: 'fit-content'},
29
+
30
+ items : [{
31
+ ntype : 'textfield',
32
+ labelPosition: 'inline',
33
+ labelText : 'Firstname',
34
+ listeners : {change: 'up.onFirstnameFieldChange'},
35
+ width : 120
36
+ },{
37
+ module : NumberField,
38
+ clearable : false,
39
+ labelPosition: 'inline',
40
+ labelText : 'Transition Duration',
41
+ listeners : {change: 'up.onTransitionDurationFieldChange'},
42
+ maxValue : 1000,
43
+ minValue : 200,
44
+ stepSize : 100,
45
+ style : {marginLeft: '1em'},
46
+ value : 500,
47
+ width : 180
48
+ }]
49
+ }, {
50
+ module : GridContainer,
51
+ reference: 'grid',
52
+ store : MainStore,
53
+
54
+ columnDefaults: {
55
+ width: 200
56
+ },
57
+
58
+ viewConfig: {
59
+ animatedRowSorting: true
60
+ },
61
+
62
+ columns: [
63
+ {dataField: 'id', text: 'Id', width: 100},
64
+ {dataField: 'firstname', text: 'Firstname'},
65
+ {dataField: 'lastname', text: 'Lastname'},
66
+ {dataField: 'progress', text: 'Progress', type: 'progress'},
67
+ {dataField: 'country', text: 'Country'}
68
+ ]
69
+ }]
70
+ }
71
+
72
+ /**
73
+ * @param {Object} data
74
+ */
75
+ onFirstnameFieldChange(data) {
76
+ this.getReference('grid').store.getFilter('firstname').value = data.value
77
+ }
78
+
79
+ /**
80
+ * @param {Object} data
81
+ */
82
+ onTransitionDurationFieldChange(data) {
83
+ this.getReference('grid').view.getPlugin('grid-animate-rows').transitionDuration = data.value
84
+ }
85
+ }
86
+
87
+ export default Neo.setupClass(Viewport);
@@ -0,0 +1,6 @@
1
+ import Viewport from './Viewport.mjs';
2
+
3
+ export const onStart = () => Neo.app({
4
+ mainView: Viewport,
5
+ name : 'Neo.examples.grid.animatedRowSorting'
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>Neo Grid: Animated Row Sorting</title>
7
+ </head>
8
+ <body>
9
+ <script src="../../../src/MicroLoader.mjs" type="module"></script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,8 @@
1
+ {
2
+ "appPath" : "examples/grid/animatedRowSorting/app.mjs",
3
+ "basePath" : "../../../",
4
+ "environment" : "development",
5
+ "mainPath" : "./Main.mjs",
6
+ "mainThreadAddons": ["DragDrop", "Navigator", "ResizeObserver", "Stylesheet"],
7
+ "themes" : ["neo-theme-dark", "neo-theme-light"]
8
+ }
@@ -46,7 +46,7 @@ class GridContainer extends BaseGridContainer {
46
46
  * @protected
47
47
  */
48
48
  afterSetAmountColumns(value, oldValue) {
49
- let i = 6,
49
+ let i = 7,
50
50
  columns = [
51
51
  {type: 'index', dataField: 'id', text: '#', width: 60},
52
52
  {cellAlign: 'left', dataField: 'firstname', defaultSortDirection: 'ASC', text: 'Firstname', width: 150},
@@ -57,7 +57,8 @@ class GridContainer extends BaseGridContainer {
57
57
  text : record.firstname + ' ++',
58
58
  width : 130
59
59
  })},
60
- {type: 'animatedChange', dataField: 'counter', text: 'Counter'}
60
+ {type: 'animatedChange', dataField: 'counter', text: 'Counter'},
61
+ {type: 'progress', dataField: 'progress', text: 'Progress', width: 150}
61
62
  ];
62
63
 
63
64
  for (; i <= value; i++) {
@@ -24,13 +24,14 @@ class MainModel extends Model {
24
24
  * @protected
25
25
  */
26
26
  afterSetAmountColumns(value, oldValue) {
27
- let i = 6,
27
+ let i = 7,
28
28
  fields = [
29
29
  {name: 'id', type: 'Int'},
30
30
  {name: 'countAction'},
31
31
  {name: 'counter', type: 'Int'},
32
32
  {name: 'firstname', type: 'String'},
33
- {name: 'lastname', type: 'String'}
33
+ {name: 'lastname', type: 'String'},
34
+ {name: 'progress', type: 'Int'}
34
35
  ];
35
36
 
36
37
  for (; i <= value; i++) {
@@ -113,12 +113,13 @@ class MainStore extends Store {
113
113
  column, record;
114
114
 
115
115
  for (; row < amountRows; row++) {
116
- column = 5;
116
+ column = 7;
117
117
  record = {
118
118
  id : row + 1,
119
119
  counter : Math.round(Math.random() * 100),
120
120
  firstname: me.firstnames[Math.floor(Math.random() * amountFirstnames)],
121
- lastname : me.lastnames[ Math.floor(Math.random() * amountLastnames)]
121
+ lastname : me.lastnames[ Math.floor(Math.random() * amountLastnames)],
122
+ progress : Math.round(Math.random() * 100)
122
123
  };
123
124
 
124
125
  for (; column <= amountColumns; column++) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "8.29.0",
3
+ "version": "8.31.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -48,7 +48,7 @@
48
48
  "homepage": "https://neomjs.com/",
49
49
  "devDependencies": {
50
50
  "@fortawesome/fontawesome-free": "^6.7.2",
51
- "autoprefixer": "^10.4.20",
51
+ "autoprefixer": "^10.4.21",
52
52
  "chalk": "^5.4.1",
53
53
  "clean-webpack-plugin": "^4.0.0",
54
54
  "commander": "^13.1.0",
@@ -56,7 +56,7 @@
56
56
  "envinfo": "^7.14.0",
57
57
  "fs-extra": "^11.3.0",
58
58
  "highlightjs-line-numbers.js": "^2.9.0",
59
- "inquirer": "^12.4.2",
59
+ "inquirer": "^12.4.3",
60
60
  "marked": "^15.0.7",
61
61
  "monaco-editor": "0.50.0",
62
62
  "neo-jsdoc": "1.0.1",
@@ -1,3 +1,3 @@
1
- .neo-progress {
1
+ .neo-progress-wrapper {
2
2
  color: var(--progress-label-color);
3
3
  }
@@ -0,0 +1,34 @@
1
+ .neo-grid-cell {
2
+ .neo-progress-wrapper {
3
+ progress[value] {
4
+ appearance: none;
5
+ border : none;
6
+ display : flex;
7
+ height : var(--grid-cell-progress-height);
8
+
9
+ @-moz-document url-prefix() {
10
+ background-color: var(--grid-cell-progress-track-color);
11
+ border-radius : var(--grid-cell-progress-border-radius);
12
+ box-shadow : 0 2px 5px rgba(0, 0, 0, 0.25) inset;
13
+ }
14
+
15
+ // for webkit the progress-bar is the track
16
+ &::-webkit-progress-bar {
17
+ background-color: var(--grid-cell-progress-track-color);
18
+ border-radius : var(--grid-cell-progress-border-radius);
19
+ box-shadow : 0 2px 5px rgba(0, 0, 0, 0.25) inset;
20
+ }
21
+
22
+ // for mozilla the progress-bar is the active range
23
+ &::-moz-progress-bar {
24
+ background-color: var(--grid-cell-progress-active-color);
25
+ border-radius : var(--grid-cell-progress-border-radius);
26
+ }
27
+
28
+ &::-webkit-progress-value {
29
+ background-color: var(--grid-cell-progress-active-color);
30
+ border-radius : var(--grid-cell-progress-border-radius);
31
+ }
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,6 @@
1
+ :root .neo-theme-dark { // .neo-grid-cell
2
+ --grid-cell-progress-active-color : #5d83a7;
3
+ --grid-cell-progress-border-radius: 2px;
4
+ --grid-cell-progress-height : 10px;
5
+ --grid-cell-progress-track-color : #333;
6
+ }
@@ -0,0 +1,6 @@
1
+ :root .neo-theme-light { // .neo-grid-cell
2
+ --grid-cell-progress-active-color : #5d83a7;
3
+ --grid-cell-progress-border-radius: 2px;
4
+ --grid-cell-progress-height : 10px;
5
+ --grid-cell-progress-track-color : #eee;
6
+ }
@@ -0,0 +1,6 @@
1
+ :root .neo-theme-neo-light { // .neo-grid-cell
2
+ --grid-cell-progress-active-color : #5d83a7;
3
+ --grid-cell-progress-border-radius: 2px;
4
+ --grid-cell-progress-height : 10px;
5
+ --grid-cell-progress-track-color : #eee;
6
+ }
@@ -263,12 +263,12 @@ const DefaultConfig = {
263
263
  useVdomWorker: true,
264
264
  /**
265
265
  * buildScripts/injectPackageVersion.mjs will update this value
266
- * @default '8.29.0'
266
+ * @default '8.31.0'
267
267
  * @memberOf! module:Neo
268
268
  * @name config.version
269
269
  * @type String
270
270
  */
271
- version: '8.29.0'
271
+ version: '8.31.0'
272
272
  };
273
273
 
274
274
  Object.assign(DefaultConfig, {
@@ -360,7 +360,8 @@ class Collection extends Base {
360
360
  * @protected
361
361
  */
362
362
  cacheUpdate(opts) {
363
- console.log('cacheUpdate', opts, this[toAddArray]);
363
+ // disabled for now
364
+ // console.log('cacheUpdate', opts, this[toAddArray]);
364
365
  return;
365
366
 
366
367
  let me = this,
@@ -451,7 +451,7 @@ class Component extends Base {
451
451
  get parent() {
452
452
  let me = this;
453
453
 
454
- return me.parentComponent || me.parentId === 'document.body' ? null : Neo.getComponent(me.parentId)
454
+ return me.parentComponent || (me.parentId === 'document.body' ? null : Neo.getComponent(me.parentId))
455
455
  }
456
456
 
457
457
  /**
@@ -37,12 +37,25 @@ class Progress extends Base {
37
37
  * @member {Object} _vdom
38
38
  */
39
39
  _vdom:
40
- {tag: 'div', cls: ['neo-progress'], cn: [
40
+ {tag: 'div', cls: ['neo-progress-wrapper'], cn: [
41
41
  {tag: 'label'},
42
42
  {tag: 'progress'}
43
43
  ]}
44
44
  }
45
45
 
46
+ /**
47
+ * @member {Object} label
48
+ */
49
+ get label() {
50
+ return this.vdom.cn[0]
51
+ }
52
+ /**
53
+ * @member {Object} progress
54
+ */
55
+ get progress() {
56
+ return this.vdom.cn[1]
57
+ }
58
+
46
59
  /**
47
60
  * Triggered after the id config got changed
48
61
  * @param {String} value
@@ -52,7 +65,7 @@ class Progress extends Base {
52
65
  afterSetId(value, oldValue) {
53
66
  super.afterSetId(value, oldValue);
54
67
 
55
- this.vdom.cn[0].for = value;
68
+ this.label.for = value;
56
69
  this.update()
57
70
  }
58
71
 
@@ -63,7 +76,15 @@ class Progress extends Base {
63
76
  * @protected
64
77
  */
65
78
  afterSetLabelText(value, oldValue) {
66
- this.vdom.cn[0].html = value;
79
+ let {label} = this;
80
+
81
+ if (!value) {
82
+ label.removeDom = true
83
+ } else {
84
+ delete label.removeDom
85
+ }
86
+
87
+ label.html = value;
67
88
  this.update()
68
89
  }
69
90
 
@@ -74,7 +95,7 @@ class Progress extends Base {
74
95
  * @protected
75
96
  */
76
97
  afterSetMax(value, oldValue) {
77
- this.vdom.cn[1].max = value;
98
+ this.progress.max = value;
78
99
  this.update()
79
100
  }
80
101
 
@@ -85,7 +106,7 @@ class Progress extends Base {
85
106
  * @protected
86
107
  */
87
108
  afterSetValue(value, oldValue) {
88
- this.vdom.cn[1].value = value;
109
+ this.progress.value = value;
89
110
  this.update()
90
111
  }
91
112