neo.mjs 8.18.1 → 8.19.1

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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.18.1'
23
+ * @member {String} version='8.19.1'
24
24
  */
25
- version: '8.18.1'
25
+ version: '8.19.1'
26
26
  }
27
27
 
28
28
  /**
@@ -16,7 +16,7 @@
16
16
  "@type": "Organization",
17
17
  "name": "Neo.mjs"
18
18
  },
19
- "datePublished": "2025-02-08",
19
+ "datePublished": "2025-02-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.18.1'
110
+ html : 'v8.19.1'
111
111
  }]
112
112
  }],
113
113
  /**
@@ -190,7 +190,7 @@ class ConfigurationViewport extends Viewport {
190
190
  let me = this,
191
191
  button = data.component,
192
192
  countThemes = themes.length,
193
- futureIndex, newTheme, oldIndex, oldTheme, themeIndex;
193
+ futureIndex, newTheme, themeIndex;
194
194
 
195
195
  themes.forEach((theme, index) => {
196
196
  if (button.text === theme.label) {
@@ -200,8 +200,6 @@ class ConfigurationViewport extends Viewport {
200
200
  });
201
201
 
202
202
  futureIndex = (themeIndex + countThemes +1) % countThemes;
203
- oldIndex = (themeIndex + countThemes -1) % countThemes;
204
- oldTheme = themes[oldIndex].name;
205
203
 
206
204
  button.text = themes[futureIndex].label;
207
205
 
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.18.1'
23
+ * @member {String} version='8.19.1'
24
24
  */
25
- version: '8.18.1'
25
+ version: '8.19.1'
26
26
  }
27
27
 
28
28
  /**
@@ -0,0 +1,157 @@
1
+ import ComboBox from '../../../src/form/field/ComboBox.mjs';
2
+ import Container from '../../../src/container/Base.mjs';
3
+ import Radio from '../../../src/form/field/Radio.mjs';
4
+
5
+ /**
6
+ * @class Neo.examples.grid.bigData.ControlsContainer
7
+ * @extends Neo.container.Base
8
+ */
9
+ class ControlsContainer extends Container {
10
+ static config = {
11
+ /**
12
+ * @member {String} className='Neo.examples.grid.bigData.ControlsContainer'
13
+ * @protected
14
+ */
15
+ className: 'Neo.examples.grid.bigData.ControlsContainer',
16
+ /**
17
+ * @member {String[]} cls=['neo-examples-bigdata-controls-container']
18
+ */
19
+ cls: ['neo-examples-bigdata-controls-container'],
20
+ /**
21
+ * @member {Object[]} items
22
+ */
23
+ items: [{
24
+ ntype : 'button',
25
+ cls : ['sections-container-button'],
26
+ handler: 'up.onControlsToggleButtonClick',
27
+ iconCls: 'fas fa-bars'
28
+ }, {
29
+ module: Container,
30
+
31
+ itemDefaults: {
32
+ module : ComboBox,
33
+ clearable : false,
34
+ displayField: 'id',
35
+ editable : false
36
+ },
37
+
38
+ items: [{
39
+ labelText : 'Amount Rows',
40
+ labelWidth: 120,
41
+ listeners : {change: 'up.onAmountRowsChange'},
42
+ store : ['1000', '5000', '10000', '20000', '50000'],
43
+ value : '1000',
44
+ width : 200
45
+ }, {
46
+ labelText : 'Amount Columns',
47
+ labelWidth: 145,
48
+ listeners : {change: 'up.onAmountColumnsChange'},
49
+ store : ['10', '25', '50', '75', '100'],
50
+ value : '50',
51
+ width : 200
52
+ }, {
53
+ labelText : 'Buffer Rows',
54
+ labelWidth: 145,
55
+ listeners : {change: 'up.onBufferRowRangeChange'},
56
+ store : ['0', '3', '5', '10', '25', '50'],
57
+ value : '5',
58
+ width : 200
59
+ }, {
60
+ labelText : 'Buffer Columns',
61
+ labelWidth: 145,
62
+ listeners : {change: 'up.onBufferColumnRangeChange'},
63
+ store : ['0', '3', '5', '10', '20'],
64
+ value : '3',
65
+ width : 200
66
+ }, {
67
+ module : Radio,
68
+ checked : true,
69
+ labelText : 'Theme',
70
+ labelWidth : 70,
71
+ listeners : {change: 'up.onThemeRadioChange'},
72
+ name : 'theme',
73
+ style : {marginTop: '2em'},
74
+ value : 'neo-theme-dark',
75
+ valueLabelText: 'Dark'
76
+ }, {
77
+ module : Radio,
78
+ labelText : '',
79
+ labelWidth : 70,
80
+ listeners : {change: 'up.onThemeRadioChange'},
81
+ name : 'theme',
82
+ style : {marginTop: '.3em'},
83
+ value : 'neo-theme-light',
84
+ valueLabelText: 'Light'
85
+ }]
86
+ }],
87
+ /**
88
+ * @member {Object} layout={ntype:'vbox'}
89
+ */
90
+ layout: {ntype: 'vbox'},
91
+ /**
92
+ * @member {String} tag='aside'
93
+ */
94
+ tag: 'aside'
95
+ }
96
+
97
+ get grid() {
98
+ return this.parent.getItem('grid')
99
+ }
100
+
101
+ /**
102
+ * @param {Object} data
103
+ */
104
+ onAmountColumnsChange(data) {
105
+ if (data.oldValue) {
106
+ this.grid.isLoading = 'Is Loading';
107
+ this.grid.amountColumns = parseInt(data.value.id)
108
+ }
109
+ }
110
+
111
+ /**
112
+ * @param {Object} data
113
+ */
114
+ onAmountRowsChange(data) {
115
+ if (data.oldValue) {
116
+ this.grid.isLoading = 'Is Loading';
117
+ this.grid.store.amountRows = parseInt(data.value.id)
118
+ }
119
+ }
120
+
121
+ /**
122
+ * @param {Object} data
123
+ */
124
+ onBufferColumnRangeChange(data) {
125
+ if (data.oldValue) {
126
+ this.grid.view.bufferColumnRange = parseInt(data.value.id)
127
+ }
128
+ }
129
+
130
+ /**
131
+ * @param {Object} data
132
+ */
133
+ onBufferRowRangeChange(data) {
134
+ if (data.oldValue) {
135
+ this.grid.view.bufferRowRange = parseInt(data.value.id)
136
+ }
137
+ }
138
+
139
+ /**
140
+ * @param {Object} data
141
+ */
142
+ async onControlsToggleButtonClick(data) {
143
+ let me = this,
144
+ button = data.component;
145
+
146
+ // Custom flag to track the state
147
+ button.expanded = !button.expanded;
148
+
149
+ me.toggleCls('neo-expanded');
150
+
151
+ await me.timeout(button.expanded ? 250 : 0);
152
+
153
+ me.grid.toggleCls('neo-extend-margin-right');
154
+ }
155
+ }
156
+
157
+ export default Neo.setupClass(ControlsContainer);
@@ -28,7 +28,14 @@ class GridContainer extends BaseGridContainer {
28
28
  /**
29
29
  * @member {Object[]} store=MainStore
30
30
  */
31
- store: MainStore
31
+ store: MainStore,
32
+ /**
33
+ * @member {Object} viewConfig
34
+ */
35
+ viewConfig: {
36
+ bufferColumnRange: 3,
37
+ bufferRowRange : 5
38
+ }
32
39
  }
33
40
 
34
41
  /**
@@ -1,7 +1,6 @@
1
- import ComboBox from '../../../src/form/field/ComboBox.mjs';
2
- import GridContainer from './GridContainer.mjs';
3
- import Toolbar from '../../../src/toolbar/Base.mjs';
4
- import Viewport from '../../../src/container/Viewport.mjs';
1
+ import ControlsContainer from './ControlsContainer.mjs';
2
+ import GridContainer from './GridContainer.mjs';
3
+ import Viewport from '../../../src/container/Viewport.mjs';
5
4
 
6
5
  /**
7
6
  * @class Neo.examples.grid.bigData.MainContainer
@@ -22,104 +21,22 @@ class MainContainer extends Viewport {
22
21
  * @member {Object[]} items
23
22
  */
24
23
  items: [{
25
- module: Toolbar,
26
- flex : 'none',
27
- layout: {ntype: 'hbox', align: 'stretch', wrap: 'wrap'},
28
- style : {marginBottom: '1em', padding: 0},
29
-
30
- itemDefaults: {
31
- module : ComboBox,
32
- clearable : false,
33
- displayField: 'id',
34
- editable : false
35
- },
36
-
37
- items: [{
38
- labelText : 'Amount Rows',
39
- labelWidth: 110,
40
- listeners : {change: 'up.onAmountRowsChange'},
41
- store : ['1000', '5000', '10000', '20000', '50000'],
42
- value : '10000',
43
- width : 200
44
- }, {
45
- labelText : 'Amount Columns',
46
- labelWidth: 135,
47
- listeners : {change: 'up.onAmountColumnsChange'},
48
- store : ['10', '25', '50', '75', '100'],
49
- value : '50',
50
- width : 200
51
- }, {
52
- labelText : 'Buffer Rows',
53
- labelWidth: 95,
54
- listeners : {change: 'up.ontBufferRowRangeChange'},
55
- store : ['0', '3', '5', '10', '25', '50'],
56
- value : '5',
57
- width : 160
58
- }, {
59
- labelText : 'Buffer Columns',
60
- labelWidth: 120,
61
- listeners : {change: 'up.ontBufferColumnRangeChange'},
62
- store : ['0', '3', '5', '10', '20'],
63
- value : '0',
64
- width : 185
65
- }]
24
+ module : GridContainer,
25
+ reference: 'grid'
66
26
  }, {
67
- module : GridContainer,
68
- reference : 'grid',
69
- viewConfig: {
70
- bufferRowRange: 5
71
- }
27
+ module: ControlsContainer
72
28
  }],
73
29
  /**
74
- * @member {Object} layout={ntype:'vbox',align:'stretch'}
30
+ * @member {Object} layout={ntype:'hbox',align:'stretch'}
75
31
  */
76
- layout: {ntype: 'vbox', align: 'stretch'},
77
- /**
78
- * @member {Object} style={padding:'20px'}
79
- */
80
- style: {padding: '20px'}
81
- }
82
-
83
- get grid() {
84
- return this.getItem('grid')
85
- }
86
-
87
- /**
88
- * @param {Object} data
89
- */
90
- onAmountColumnsChange(data) {
91
- if (data.oldValue) {
92
- this.grid.isLoading = 'Is Loading';
93
- this.grid.amountColumns = parseInt(data.value.id)
94
- }
95
- }
96
-
97
- /**
98
- * @param {Object} data
99
- */
100
- onAmountRowsChange(data) {
101
- if (data.oldValue) {
102
- this.grid.isLoading = 'Is Loading';
103
- this.grid.store.amountRows = parseInt(data.value.id)
104
- }
105
- }
106
-
107
- /**
108
- * @param {Object} data
109
- */
110
- ontBufferColumnRangeChange(data) {
111
- if (data.oldValue) {
112
- this.grid.view.bufferColumnRange = parseInt(data.value.id)
113
- }
32
+ layout: {ntype: 'hbox', align: 'stretch'}
114
33
  }
115
34
 
116
35
  /**
117
- * @param {Object} data
36
+ * @param {Object} opts
118
37
  */
119
- ontBufferRowRangeChange(data) {
120
- if (data.oldValue) {
121
- this.grid.view.bufferRowRange = parseInt(data.value.id)
122
- }
38
+ onThemeRadioChange({value}) {
39
+ this.theme = value
123
40
  }
124
41
  }
125
42
 
@@ -17,9 +17,9 @@ class MainStore extends Store {
17
17
  */
18
18
  amountColumns_: 50,
19
19
  /**
20
- * @member {Number} amountRows_=10000
20
+ * @member {Number} amountRows_=1000
21
21
  */
22
- amountRows_: 10000,
22
+ amountRows_: 1000,
23
23
  /**
24
24
  * @member {Neo.data.Model} model=Model
25
25
  */
@@ -4,5 +4,5 @@
4
4
  "environment" : "development",
5
5
  "mainPath" : "./Main.mjs",
6
6
  "mainThreadAddons": ["DragDrop", "Navigator", "ResizeObserver", "Stylesheet"],
7
- "themes" : ["neo-theme-dark"]
7
+ "themes" : ["neo-theme-dark", "neo-theme-light"]
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "8.18.1",
3
+ "version": "8.19.1",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -0,0 +1,38 @@
1
+ .neo-examples-bigdata-controls-container {
2
+ border : none; // reset the default 1px
3
+ bottom : .5em;
4
+ box-shadow : 0 5px 10px rgba(75,75,75,.3);
5
+ display : block;
6
+ flex-shrink : 0;
7
+ min-width : 235px;
8
+ overflow : visible;
9
+ padding : .5em 1em;
10
+ position : absolute;
11
+ right : -235px;
12
+ top : .5em;
13
+ transition : right 250ms ease-out;
14
+ width : 235px;
15
+ z-index : 100;
16
+
17
+ &.neo-expanded {
18
+ right: 0;
19
+ }
20
+
21
+ .sections-container-button {
22
+ //background-color: #fff;
23
+ border-radius : 8px;
24
+ box-shadow : 0 5px 10px rgba(75,75,75,.3);
25
+ display : flex;
26
+ height : 35px;
27
+ min-width : 35px;
28
+ position : absolute;
29
+ left : -53px;
30
+ top : .2em;
31
+ width : 35px;
32
+
33
+ .neo-button-glyph {
34
+ // color : #000; // required for mobile
35
+ font-size: 13px;
36
+ }
37
+ }
38
+ }
@@ -1,7 +1,9 @@
1
1
  .neo-examples-bigdata-maincontainer {
2
- .neo-toolbar {
3
- .neo-combobox {
4
- margin: 2px 1em;
2
+ .neo-grid-wrapper {
3
+ margin: 3.5em 1em 1em 1em;
4
+
5
+ &:has(.neo-extend-margin-right) {
6
+ margin-right: calc(235px + 1em);
5
7
  }
6
8
  }
7
9
  }
@@ -9,15 +9,6 @@
9
9
  &:focus {
10
10
  outline: none;
11
11
  }
12
-
13
- .neo-grid-stretcher {
14
- height : 1px;
15
- position : absolute;
16
- top : 0;
17
- visibility : hidden;
18
- width : 1px;
19
- z-index : 1001; // Above the column dragProxy element
20
- }
21
12
  }
22
13
 
23
14
  .neo-grid-view {
@@ -262,12 +262,12 @@ const DefaultConfig = {
262
262
  useVdomWorker: true,
263
263
  /**
264
264
  * buildScripts/injectPackageVersion.mjs will update this value
265
- * @default '8.18.1'
265
+ * @default '8.19.1'
266
266
  * @memberOf! module:Neo
267
267
  * @name config.version
268
268
  * @type String
269
269
  */
270
- version: '8.18.1'
270
+ version: '8.19.1'
271
271
  };
272
272
 
273
273
  Object.assign(DefaultConfig, {
@@ -120,7 +120,7 @@ class DragZone extends BaseDragZone {
120
120
  * @param {String} data.id
121
121
  * @param {Neo.component.Base[]} data.items
122
122
  */
123
- onItemsCreated(data) {console.log('onItemsCreated');
123
+ onItemsCreated(data) {
124
124
  this.adjustToolbarItemCls(true)
125
125
  }
126
126
  }
@@ -452,7 +452,7 @@ class ComboBox extends Picker {
452
452
  FormContainer = Neo.form?.Container,
453
453
  params = {component: me, oldValue, value};
454
454
 
455
- await me.timeout(10);
455
+ await me.timeout(30);
456
456
 
457
457
  me.fire('change', params);
458
458
 
@@ -53,6 +53,7 @@ class GridScrollbar extends Component {
53
53
  ScrollSync.register({
54
54
  fromId: me.parent.view.vdom.id,
55
55
  toId : me.id,
56
+ twoWay: !Neo.config.useTouchEvents, // Syncing the scroller back to the view affects mobile scrolling
56
57
  ...params
57
58
  })
58
59
  } else {
package/src/grid/View.mjs CHANGED
@@ -125,8 +125,7 @@ class GridView extends Component {
125
125
  */
126
126
  _vdom:
127
127
  {tabIndex: '-1', cn: [
128
- {cn: []},
129
- {cls: 'neo-grid-stretcher'}
128
+ {cn: []}
130
129
  ]}
131
130
  }
132
131
 
@@ -207,7 +206,7 @@ class GridView extends Component {
207
206
  let me = this;
208
207
 
209
208
  me.vdom.width = value + 'px';
210
- me.vdom.cn[1].width = value + 'px';
209
+ me.vdom.cn[0].width = value + 'px';
211
210
  me.update()
212
211
  }
213
212
  }
@@ -905,7 +904,7 @@ class GridView extends Component {
905
904
  {rowHeight} = me;
906
905
 
907
906
  if (countRecords > 0 && rowHeight > 0) {
908
- me.vdom.cn[1].height = `${(countRecords + 1) * rowHeight}px`;
907
+ me.vdom.cn[0].height = `${(countRecords + 1) * rowHeight}px`;
909
908
  me.update()
910
909
  }
911
910
  }