neo.mjs 10.0.0-alpha.4 → 10.0.0-beta.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.
Files changed (98) hide show
  1. package/ServiceWorker.mjs +2 -2
  2. package/apps/portal/index.html +1 -1
  3. package/apps/portal/resources/data/examples_devmode.json +26 -27
  4. package/apps/portal/resources/data/examples_dist_dev.json +26 -27
  5. package/apps/portal/resources/data/examples_dist_esm.json +26 -27
  6. package/apps/portal/resources/data/examples_dist_prod.json +27 -28
  7. package/apps/portal/view/blog/List.mjs +1 -1
  8. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  9. package/apps/portal/view/learn/ContentComponent.mjs +102 -111
  10. package/buildScripts/buildThemes.mjs +1 -1
  11. package/examples/grid/animatedRowSorting/Viewport.mjs +4 -4
  12. package/examples/grid/bigData/ControlsContainer.mjs +3 -3
  13. package/examples/grid/bigData/GridContainer.mjs +8 -8
  14. package/examples/grid/cellEditing/MainContainer.mjs +5 -5
  15. package/examples/grid/container/MainContainer.mjs +4 -4
  16. package/examples/grid/nestedRecordFields/Viewport.mjs +5 -5
  17. package/examples/table/cellEditing/MainContainer.mjs +1 -1
  18. package/examples/table/container/MainContainer.mjs +3 -3
  19. package/examples/table/nestedRecordFields/Viewport.mjs +6 -6
  20. package/examples/tableFiltering/MainContainer.mjs +1 -1
  21. package/examples/tablePerformance/MainContainer.mjs +1 -1
  22. package/examples/tablePerformance/MainContainer2.mjs +1 -1
  23. package/examples/tablePerformance/MainContainer3.mjs +2 -2
  24. package/examples/tableStore/MainContainer.mjs +2 -2
  25. package/learn/UsingTheseTopics.md +2 -2
  26. package/learn/benefits/ConfigSystem.md +2 -2
  27. package/learn/benefits/FormsEngine.md +14 -14
  28. package/learn/benefits/MultiWindow.md +2 -2
  29. package/learn/benefits/OffTheMainThread.md +2 -2
  30. package/learn/benefits/Speed.md +2 -2
  31. package/learn/gettingstarted/ComponentModels.md +4 -4
  32. package/learn/gettingstarted/Config.md +6 -6
  33. package/learn/gettingstarted/DescribingTheUI.md +4 -4
  34. package/learn/gettingstarted/Events.md +6 -6
  35. package/learn/gettingstarted/Extending.md +4 -4
  36. package/learn/gettingstarted/References.md +6 -6
  37. package/learn/gettingstarted/Workspaces.md +6 -6
  38. package/learn/guides/ApplicationBootstrap.md +40 -42
  39. package/learn/guides/ComponentsAndContainers.md +12 -12
  40. package/learn/guides/CustomComponents.md +2 -2
  41. package/learn/guides/MainThreadAddonIntro.md +2 -2
  42. package/learn/guides/PortalApp.md +2 -2
  43. package/learn/guides/StateProviders.md +12 -12
  44. package/learn/guides/events/CustomEvents.md +16 -16
  45. package/learn/guides/events/DomEvents.md +12 -12
  46. package/learn/javascript/ClassFeatures.md +3 -2
  47. package/learn/javascript/Classes.md +8 -8
  48. package/learn/javascript/NewNode.md +4 -4
  49. package/learn/javascript/Overrides.md +8 -8
  50. package/learn/javascript/Super.md +10 -8
  51. package/learn/tutorials/Earthquakes.md +54 -57
  52. package/learn/tutorials/TodoList.md +4 -4
  53. package/package.json +1 -1
  54. package/resources/scss/src/apps/portal/learn/ContentComponent.scss +12 -0
  55. package/resources/scss/src/grid/{View.scss → Body.scss} +2 -2
  56. package/resources/scss/src/grid/VerticalScrollbar.scss +1 -1
  57. package/resources/scss/src/grid/plugin/AnimateRows.scss +1 -1
  58. package/resources/scss/src/grid/plugin/CellEditing.scss +1 -1
  59. package/resources/scss/src/table/{View.scss → Body.scss} +1 -1
  60. package/resources/scss/src/table/plugin/CellEditing.scss +1 -1
  61. package/resources/scss/theme-dark/grid/{View.scss → Body.scss} +1 -1
  62. package/resources/scss/theme-dark/table/{View.scss → Body.scss} +1 -1
  63. package/resources/scss/theme-light/grid/{View.scss → Body.scss} +1 -1
  64. package/resources/scss/theme-light/table/{View.scss → Body.scss} +1 -1
  65. package/resources/scss/theme-neo-light/Global.scss +1 -2
  66. package/resources/scss/theme-neo-light/grid/{View.scss → Body.scss} +1 -1
  67. package/resources/scss/theme-neo-light/table/{View.scss → Body.scss} +1 -1
  68. package/src/DefaultConfig.mjs +2 -2
  69. package/src/core/Base.mjs +59 -12
  70. package/src/core/Util.mjs +14 -2
  71. package/src/draggable/grid/header/toolbar/SortZone.mjs +21 -21
  72. package/src/draggable/table/header/toolbar/SortZone.mjs +1 -1
  73. package/src/grid/{View.mjs → Body.mjs} +19 -20
  74. package/src/grid/Container.mjs +58 -58
  75. package/src/grid/ScrollManager.mjs +56 -56
  76. package/src/grid/VerticalScrollbar.mjs +2 -2
  77. package/src/grid/_export.mjs +2 -2
  78. package/src/grid/column/AnimatedChange.mjs +5 -5
  79. package/src/grid/column/Base.mjs +1 -1
  80. package/src/grid/column/Component.mjs +6 -6
  81. package/src/grid/header/Toolbar.mjs +9 -9
  82. package/src/grid/plugin/AnimateRows.mjs +1 -2
  83. package/src/main/addon/AmCharts.mjs +8 -11
  84. package/src/main/addon/Base.mjs +150 -42
  85. package/src/main/addon/GoogleMaps.mjs +9 -16
  86. package/src/main/addon/HighlightJS.mjs +2 -13
  87. package/src/main/addon/IntersectionObserver.mjs +21 -21
  88. package/src/main/addon/MonacoEditor.mjs +1 -6
  89. package/src/table/{View.mjs → Body.mjs} +19 -20
  90. package/src/table/Container.mjs +43 -43
  91. package/src/table/_export.mjs +2 -2
  92. package/src/table/plugin/CellEditing.mjs +19 -19
  93. package/src/util/Style.mjs +2 -6
  94. package/src/vdom/Helper.mjs +10 -13
  95. package/src/worker/App.mjs +6 -18
  96. package/src/worker/Base.mjs +1 -1
  97. package/src/worker/Manager.mjs +4 -8
  98. package/src/worker/mixin/RemoteMethodAccess.mjs +1 -1
@@ -1,4 +1,4 @@
1
- .neo-grid-view {
1
+ .neo-grid-body {
2
2
  .neo-grid-cell {
3
3
  &:has(.neo-grid-editor) {
4
4
  padding: 1px 4px 2px;
@@ -1,4 +1,4 @@
1
- .neo-table-view {
1
+ .neo-table-body {
2
2
  &:focus {
3
3
  outline: none;
4
4
  }
@@ -1,4 +1,4 @@
1
- .neo-table-view {
1
+ .neo-table-body {
2
2
  .neo-table-cell {
3
3
  &:has(.neo-table-editor) {
4
4
  padding: 1px 4px 2px;
@@ -1,4 +1,4 @@
1
- :root .neo-theme-dark { // .neo-grid-view
1
+ :root .neo-theme-dark { // .neo-grid-body
2
2
  --grid-cell-background-color-hover : #54595c;
3
3
  --grid-cell-ismodified-color : orange;
4
4
  --grid-cell-ismodified-size : 10px;
@@ -1,4 +1,4 @@
1
- :root .neo-theme-dark { // .neo-table-view
1
+ :root .neo-theme-dark { // .neo-table-body
2
2
  --table-cell-background-color-hover : #54595c;
3
3
  --table-cell-ismodified-color : orange;
4
4
  --table-cell-ismodified-size : 10px;
@@ -1,6 +1,6 @@
1
1
  @use "sass:color";
2
2
 
3
- :root .neo-theme-light { // .neo-grid-view
3
+ :root .neo-theme-light { // .neo-grid-body
4
4
  --grid-cell-background-color-hover : #{color.adjust(#33343d, $lightness: 70%)};
5
5
  --grid-cell-ismodified-color : orange;
6
6
  --grid-cell-ismodified-size : 10px;
@@ -1,6 +1,6 @@
1
1
  @use "sass:color";
2
2
 
3
- :root .neo-theme-light { // .neo-table-view
3
+ :root .neo-theme-light { // .neo-table-body
4
4
  --table-cell-background-color-hover : #{color.adjust(#33343d, $lightness: 70%)};
5
5
  --table-cell-ismodified-color : orange;
6
6
  --table-cell-ismodified-size : 10px;
@@ -53,11 +53,10 @@
53
53
  border-radius : 4px;
54
54
  color : var(--sem-color-fg-neutral-contrast);
55
55
  font-family : var(--core-fontfamily-mono);
56
- font-size : var(--core-fontsize-body);
56
+ font-size : 14px;
57
57
  font-weight : var(--core-fontweight-regular);
58
58
  line-height : var(--core-lineheight-headline);
59
59
  padding : 2px 0.3em;
60
- font-size : 16px;
61
60
  }
62
61
  }
63
62
 
@@ -1,6 +1,6 @@
1
1
  @use "sass:color";
2
2
 
3
- :root .neo-theme-neo-light { // .neo-grid-view
3
+ :root .neo-theme-neo-light { // .neo-grid-body
4
4
  --grid-cell-background-color-hover : #{color.adjust(#33343d, $lightness: 70%)};
5
5
  --grid-cell-ismodified-color : orange;
6
6
  --grid-cell-ismodified-size : 10px;
@@ -1,6 +1,6 @@
1
1
  @use "sass:color";
2
2
 
3
- :root .neo-theme-neo-light { // .neo-table-view
3
+ :root .neo-theme-neo-light { // .neo-table-body
4
4
  --table-cell-background-color-hover : #{color.adjust(#33343d, $lightness: 70%)};
5
5
  --table-cell-ismodified-color : orange;
6
6
  --table-cell-ismodified-size : 10px;
@@ -289,12 +289,12 @@ const DefaultConfig = {
289
289
  useVdomWorker: true,
290
290
  /**
291
291
  * buildScripts/injectPackageVersion.mjs will update this value
292
- * @default '10.0.0-alpha.4'
292
+ * @default '10.0.0-beta.1'
293
293
  * @memberOf! module:Neo
294
294
  * @name config.version
295
295
  * @type String
296
296
  */
297
- version: '10.0.0-alpha.4'
297
+ version: '10.0.0-beta.1'
298
298
  };
299
299
 
300
300
  Object.assign(DefaultConfig, {
package/src/core/Base.mjs CHANGED
@@ -86,6 +86,14 @@ class Base {
86
86
  * @protected
87
87
  */
88
88
  isConstructed: false,
89
+ /**
90
+ * The config will get set to `true` once the Promise of `async initAsync()` is resolved.
91
+ * You can use `afterSetIsReady()` to get notified once the ready state is reached.
92
+ * Since not all classes use the Observable mixin, Neo will not fire an event.
93
+ * method body.
94
+ * @member {Boolean} isReady=false
95
+ */
96
+ isReady_: false,
89
97
  /**
90
98
  * Add mixins as an array of classNames, imported modules or a mixed version
91
99
  * @member {String[]|Neo.core.Base[]|null} mixins=null
@@ -96,7 +104,17 @@ class Base {
96
104
  * @member {Class} module=null
97
105
  * @protected
98
106
  */
99
- module: null
107
+ module: null,
108
+ /**
109
+ * Remote method access for other threads. Example use case:
110
+ * remote: {app: ['myRemoteMethod']}
111
+ *
112
+ * ONLY supported for singletons.
113
+ *
114
+ * @member {Object|null} remote_=null
115
+ * @protected
116
+ */
117
+ remote_: null
100
118
  }
101
119
 
102
120
  /**
@@ -154,7 +172,11 @@ class Base {
154
172
  */
155
173
  intercept(me, 'destroy', me.isDestroyedCheck, me);
156
174
 
157
- me.remote && setTimeout(me.initRemote.bind(me), 1)
175
+ // Triggers async logic after the construction chain is done.
176
+ Promise.resolve().then(async () => {
177
+ await me.initAsync();
178
+ me.isReady = true
179
+ })
158
180
  }
159
181
 
160
182
  /**
@@ -255,6 +277,24 @@ class Base {
255
277
  return value
256
278
  }
257
279
 
280
+ /**
281
+ * Triggered before the remote config gets changed
282
+ * @param {Object|null} value
283
+ * @param {Object|null} oldValue
284
+ * @returns {Object|null}
285
+ * @protected
286
+ */
287
+ beforeSetRemote(value, oldValue) {
288
+ let me = this;
289
+
290
+ // Only allow remote access for singletons or main thread addons
291
+ if (value && !me.singleton && !me.isMainThreadAddon) {
292
+ throw new Error('Remote method access is only functional for Singleton classes ' + me.className)
293
+ }
294
+
295
+ return value
296
+ }
297
+
258
298
  /**
259
299
  * @param {String} fn The name of a function to find in the passed scope object.
260
300
  * @param {Object} originName The name of the method inside the originScope.
@@ -367,11 +407,23 @@ class Base {
367
407
 
368
408
  /**
369
409
  * Gets triggered after onConstructed() is done
370
- * @see {@link Neo.core.Base#onConstructed onConstructed}
371
- * @tutorial 02_ClassSystem
372
410
  */
373
411
  init() {}
374
412
 
413
+ /**
414
+ * You can use this method in subclasses to perform asynchronous initialization logic.
415
+ * Make sure to use the parent call `await super.initAsync()` at the beginning of their implementations,
416
+ * or the registration of remote methods will get delayed.
417
+ *
418
+ * A common use case is requiring conditional or optional dynamic imports or fetching initial data.
419
+ *
420
+ * Once the promise returned by this method is fulfilled, the `isReady` config will be set to `true`.
421
+ * @returns {Promise<void>} A promise that resolves when the asynchronous initialization is complete.
422
+ */
423
+ async initAsync() {
424
+ this.remote && this.initRemote()
425
+ }
426
+
375
427
  /**
376
428
  * Applies all class configs to this instance
377
429
  * @param {Object} config
@@ -393,19 +445,14 @@ class Base {
393
445
  * @protected
394
446
  */
395
447
  initRemote() {
396
- let me = this,
397
- {className, remote} = me,
448
+ let {className, remote} = this,
398
449
  {currentWorker} = Neo;
399
450
 
400
- if (!me.singleton && !me.isMainThreadAddon) {
401
- throw new Error('Remote method access is only functional for Singleton classes ' + className)
402
- }
403
-
404
- if (!Neo.config.unitTestMode && Neo.isObject(remote)) {
451
+ if (!Neo.config.unitTestMode) {
405
452
  if (Neo.workerId !== 'main' && currentWorker.isSharedWorker && !currentWorker.isConnected) {
406
453
  currentWorker.on('connected', () => {
407
454
  Base.sendRemotes(className, remote)
408
- }, me, {once: true})
455
+ }, this, {once: true})
409
456
  } else {
410
457
  Base.sendRemotes(className, remote)
411
458
  }
package/src/core/Util.mjs CHANGED
@@ -175,7 +175,18 @@ class Util extends Base {
175
175
  * @returns {Boolean}
176
176
  */
177
177
  static isObject(value) {
178
- return value?.constructor?.name === 'Object' || false
178
+ return value?.constructor?.name === 'Object'
179
+ }
180
+
181
+ /**
182
+ * Returns true if the passed value is a promise.
183
+ * We are intentionally not checking for `value instanceof Promise`,
184
+ * to support any "thenable" objects for flexibility.
185
+ * @param {Object} value The value to test
186
+ * @returns {Boolean}
187
+ */
188
+ static isPromise(value) {
189
+ return typeof value?.then === 'function'
179
190
  }
180
191
 
181
192
  /**
@@ -184,7 +195,7 @@ class Util extends Base {
184
195
  * @returns {Boolean}
185
196
  */
186
197
  static isRecord(value) {
187
- return value?.constructor?.name === 'Record' || false
198
+ return value?.constructor?.name === 'Record'
188
199
  }
189
200
 
190
201
  /**
@@ -233,6 +244,7 @@ Neo.applyFromNs(Neo, Util, {
233
244
  isFunction : 'isFunction',
234
245
  isNumber : 'isNumber',
235
246
  isObject : 'isObject',
247
+ isPromise : 'isPromise',
236
248
  isRecord : 'isRecord',
237
249
  isString : 'isString',
238
250
  toArray : 'toArray'
@@ -54,15 +54,15 @@ class SortZone extends BaseSortZone {
54
54
 
55
55
  let me = this,
56
56
  grid = me.owner.parent,
57
- {view} = grid,
58
- gridRows = view.getVdomRoot().cn,
57
+ {body} = grid,
58
+ bodyWrapperId = Neo.getId('grid-body-wrapper'),
59
+ gridRows = body.getVdomRoot().cn,
59
60
  columnIndex = me.dragElement['aria-colindex'] - 1,
60
- {dataField} = view.columnPositions.getAt(columnIndex),
61
- cells = view.getColumnCells(dataField),
61
+ {dataField} = body.columnPositions.getAt(columnIndex),
62
+ cells = body.getColumnCells(dataField),
62
63
  rows = [],
63
64
  config = await super.createDragProxy(data, false),
64
65
  rect = await grid.getDomRect(),
65
- viewWrapperId = Neo.getId('grid-view-wrapper'),
66
66
  row;
67
67
 
68
68
  config.cls = ['neo-grid-wrapper', me.owner.getTheme()];
@@ -85,9 +85,9 @@ class SortZone extends BaseSortZone {
85
85
  {cn: [
86
86
  {cls: ['neo-grid-container'], cn: [
87
87
  {...config.vdom, cls: ['neo-grid-header-toolbar', 'neo-toolbar']},
88
- {cls: ['neo-grid-view-wrapper'], id: viewWrapperId, cn: [
89
- {cls: ['neo-grid-view'], cn: rows},
90
- {cls: ['neo-grid-scrollbar'], style: {height: view.vdom.cn[0].height}}
88
+ {cls: ['neo-grid-body-wrapper'], id: bodyWrapperId, cn: [
89
+ {cls: ['neo-grid-body'], cn: rows},
90
+ {cls: ['neo-grid-scrollbar'], style: {height: body.vdom.cn[0].height}}
91
91
  ]}
92
92
  ]}
93
93
  ]};
@@ -95,8 +95,8 @@ class SortZone extends BaseSortZone {
95
95
  config.listeners = {
96
96
  mounted() {
97
97
  Neo.main.DomAccess.scrollTo({
98
- id : viewWrapperId,
99
- value : view.scrollTop,
98
+ id : bodyWrapperId,
99
+ value : body.scrollTop,
100
100
  windowId: this.windowId
101
101
  })
102
102
  }
@@ -133,11 +133,11 @@ class SortZone extends BaseSortZone {
133
133
  owner.updateDepth = 2;
134
134
  owner.update();
135
135
 
136
- await owner.passSizeToView();
136
+ await owner.passSizeToBody();
137
137
 
138
138
  await this.timeout(20);
139
139
 
140
- owner.parent.view.createViewData()
140
+ owner.parent.body.createViewData()
141
141
  }
142
142
 
143
143
  /**
@@ -148,11 +148,11 @@ class SortZone extends BaseSortZone {
148
148
 
149
149
  if (this.moveColumnContent) {
150
150
  let me = this,
151
- {view} = me.owner.parent,
151
+ {body} = me.owner.parent,
152
152
  columnIndex = me.dragElement['aria-colindex'] - 1,
153
- columnPosition = view.columnPositions.getAt(columnIndex),
153
+ columnPosition = body.columnPositions.getAt(columnIndex),
154
154
  {dataField} = columnPosition,
155
- cells = view.getColumnCells(dataField);
155
+ cells = body.getColumnCells(dataField);
156
156
 
157
157
  columnPosition.hidden = true;
158
158
 
@@ -160,7 +160,7 @@ class SortZone extends BaseSortZone {
160
160
  cell.style.visibility = 'hidden'
161
161
  });
162
162
 
163
- view.update()
163
+ body.update()
164
164
  }
165
165
  }
166
166
 
@@ -174,12 +174,12 @@ class SortZone extends BaseSortZone {
174
174
  if (this.moveColumnContent) {
175
175
  let me = this,
176
176
  {itemRects} = me,
177
- {view} = me.owner.parent,
178
- {columnPositions} = view,
177
+ {body} = me.owner.parent,
178
+ {columnPositions} = body,
179
179
  column1Position = columnPositions.getAt(index1),
180
180
  column2Position = columnPositions.getAt(index2),
181
- column1Cells = view.getColumnCells(column1Position.dataField),
182
- column2Cells = view.getColumnCells(column2Position.dataField);
181
+ column1Cells = body.getColumnCells(column1Position.dataField),
182
+ column2Cells = body.getColumnCells(column2Position.dataField);
183
183
 
184
184
  Object.assign(column1Position, {
185
185
  width: itemRects[index2].width,
@@ -203,7 +203,7 @@ class SortZone extends BaseSortZone {
203
203
  node.style.width = column2Position.width + 'px'
204
204
  });
205
205
 
206
- view.update()
206
+ body.update()
207
207
  }
208
208
  }
209
209
  }
@@ -63,7 +63,7 @@ class SortZone extends BaseSortZone {
63
63
  owner.updateDepth = 2;
64
64
  owner.update();
65
65
 
66
- owner.parent.view.createViewData()
66
+ owner.parent.body.createViewData()
67
67
  }
68
68
  }
69
69
 
@@ -6,21 +6,21 @@ import RowModel from '../selection/grid/RowModel.mjs';
6
6
  import VDomUtil from '../util/VDom.mjs';
7
7
 
8
8
  /**
9
- * @class Neo.grid.View
9
+ * @class Neo.grid.Body
10
10
  * @extends Neo.component.Base
11
11
  */
12
- class GridView extends Component {
12
+ class GridBody extends Component {
13
13
  static config = {
14
14
  /**
15
- * @member {String} className='Neo.grid.View'
15
+ * @member {String} className='Neo.grid.Body'
16
16
  * @protected
17
17
  */
18
- className: 'Neo.grid.View',
18
+ className: 'Neo.grid.Body',
19
19
  /**
20
- * @member {String} ntype='grid-view'
20
+ * @member {String} ntype='grid-body'
21
21
  * @protected
22
22
  */
23
- ntype: 'grid-view',
23
+ ntype: 'grid-body',
24
24
  /**
25
25
  * @member {Boolean} animatedRowSorting_=false
26
26
  */
@@ -36,23 +36,23 @@ class GridView extends Component {
36
36
  */
37
37
  availableRows_: 0,
38
38
  /**
39
- * Internal flag. Gets calculated after mounting grid.View rows
39
+ * Internal flag. Gets calculated after mounting grid.Body rows
40
40
  * @member {Number} availableWidth_=0
41
41
  */
42
42
  availableWidth_: 0,
43
43
  /**
44
- * @member {String[]} baseCls=['neo-grid-view']
44
+ * @member {String[]} baseCls=['neo-grid-body']
45
45
  * @protected
46
46
  */
47
- baseCls: ['neo-grid-view'],
47
+ baseCls: ['neo-grid-body'],
48
48
  /**
49
- * The amount of columns (cells) to paint before the first & after the last visible column,
49
+ * The number of columns (cells) to paint before the first and after the last visible column,
50
50
  * to enhance the scrolling performance
51
51
  * @member {Number} bufferColumnRange_=0
52
52
  */
53
53
  bufferColumnRange_: 0,
54
54
  /**
55
- * The amount of rows to paint before the first & after the last visible row,
55
+ * The number of rows to paint before the first and after the last visible row,
56
56
  * to enhance the scrolling performance
57
57
  * @member {Number} bufferRowRange_=3
58
58
  */
@@ -63,7 +63,7 @@ class GridView extends Component {
63
63
  */
64
64
  colspanField: 'colspan',
65
65
  /**
66
- * Internal flag. Gets calculated after mounting grid.View rows
66
+ * Internal flag. Gets calculated after mounting grid.Body rows
67
67
  * @member {Number} containerWidth_=0
68
68
  */
69
69
  containerWidth_: 0,
@@ -150,9 +150,9 @@ class GridView extends Component {
150
150
  */
151
151
  visibleRows: [0, 0],
152
152
  /**
153
- * @member {String[]} wrapperCls=[]
153
+ * @member {String[]} wrapperCls=['neo-grid-body-wrapper']
154
154
  */
155
- wrapperCls: ['neo-grid-view-wrapper'],
155
+ wrapperCls: ['neo-grid-body-wrapper'],
156
156
  /**
157
157
  * @member {Object} _vdom
158
158
  */
@@ -419,9 +419,8 @@ class GridView extends Component {
419
419
  * @param {Number} data.rowIndex
420
420
  * @returns {Object}
421
421
  */
422
- applyRendererOutput(data) {
423
- let {cellId, column, columnIndex, record, rowIndex} = data,
424
- me = this,
422
+ applyRendererOutput({cellId, column, columnIndex, record, rowIndex}) {
423
+ let me = this,
425
424
  gridContainer = me.parent,
426
425
  {selectedCells, store} = me,
427
426
  cellCls = ['neo-grid-cell'],
@@ -686,7 +685,7 @@ class GridView extends Component {
686
685
  dataField = me.getCellDataField(id),
687
686
  record = me.getRecord(id);
688
687
 
689
- me.parent.fire(eventName, {data, dataField, record, view: me})
688
+ me.parent.fire(eventName, {body: me, data, dataField, record})
690
689
  }
691
690
 
692
691
  /**
@@ -698,7 +697,7 @@ class GridView extends Component {
698
697
  id = data.currentTarget,
699
698
  record = me.getRecord(id);
700
699
 
701
- me.parent.fire(eventName, {data, record, view: me})
700
+ me.parent.fire(eventName, {body: me, data, record})
702
701
  }
703
702
 
704
703
  /**
@@ -1133,4 +1132,4 @@ class GridView extends Component {
1133
1132
  }
1134
1133
  }
1135
1134
 
1136
- export default Neo.setupClass(GridView);
1135
+ export default Neo.setupClass(GridBody);