neo.mjs 8.0.0 → 8.1.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 (89) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/portal/index.html +1 -1
  3. package/apps/portal/view/about/Container.mjs +0 -2
  4. package/apps/portal/view/about/MemberContainer.mjs +1 -20
  5. package/apps/portal/view/home/FooterContainer.mjs +1 -5
  6. package/examples/ConfigurationViewport.mjs +37 -32
  7. package/examples/ServiceWorker.mjs +2 -2
  8. package/examples/grid/cellEditing/MainContainer.mjs +175 -0
  9. package/examples/grid/cellEditing/MainContainerStateProvider.mjs +62 -0
  10. package/examples/grid/cellEditing/MainModel.mjs +30 -0
  11. package/examples/grid/cellEditing/MainStore.mjs +54 -0
  12. package/examples/grid/cellEditing/app.mjs +6 -0
  13. package/examples/grid/cellEditing/index.html +11 -0
  14. package/examples/grid/cellEditing/neo-config.json +6 -0
  15. package/examples/grid/container/MainContainer.mjs +7 -6
  16. package/examples/grid/covid/GridContainer.mjs +36 -36
  17. package/examples/grid/covid/Util.mjs +1 -1
  18. package/examples/grid/covid/neo-config.json +6 -5
  19. package/examples/table/cellEditing/MainContainer.mjs +174 -0
  20. package/examples/table/cellEditing/MainContainerStateProvider.mjs +62 -0
  21. package/examples/table/cellEditing/MainModel.mjs +30 -0
  22. package/examples/table/cellEditing/MainStore.mjs +54 -0
  23. package/examples/table/cellEditing/app.mjs +6 -0
  24. package/examples/table/cellEditing/index.html +11 -0
  25. package/examples/table/cellEditing/neo-config.json +6 -0
  26. package/examples/table/nestedRecordFields/MainContainerStateProvider.mjs +2 -1
  27. package/package.json +8 -8
  28. package/resources/scss/src/apps/portal/home/FooterContainer.scss +11 -2
  29. package/resources/scss/src/examples/grid/covid/GridContainer.scss +1 -1
  30. package/resources/scss/src/grid/Container.scss +13 -23
  31. package/resources/scss/src/grid/View.scss +45 -19
  32. package/resources/scss/src/grid/header/Button.scss +2 -4
  33. package/resources/scss/src/grid/header/Toolbar.scss +1 -2
  34. package/resources/scss/src/grid/plugin/CellEditing.scss +11 -0
  35. package/resources/scss/src/table/plugin/CellEditing.scss +11 -0
  36. package/src/DefaultConfig.mjs +2 -2
  37. package/src/Xhr.mjs +1 -1
  38. package/src/button/Base.mjs +2 -2
  39. package/src/collection/Base.mjs +5 -5
  40. package/src/component/Base.mjs +3 -3
  41. package/src/component/DateSelector.mjs +15 -0
  42. package/src/container/Base.mjs +2 -2
  43. package/src/controller/Base.mjs +3 -3
  44. package/src/dialog/Base.mjs +2 -2
  45. package/src/form/field/Base.mjs +3 -6
  46. package/src/form/field/CheckBox.mjs +2 -2
  47. package/src/form/field/ComboBox.mjs +18 -2
  48. package/src/form/field/Date.mjs +10 -4
  49. package/src/form/field/FileUpload.mjs +4 -4
  50. package/src/form/field/Hidden.mjs +2 -2
  51. package/src/form/field/Text.mjs +2 -2
  52. package/src/grid/Container.mjs +340 -43
  53. package/src/grid/View.mjs +599 -124
  54. package/src/grid/header/Button.mjs +331 -36
  55. package/src/grid/header/Toolbar.mjs +111 -4
  56. package/src/grid/plugin/CellEditing.mjs +30 -0
  57. package/src/layout/Base.mjs +3 -3
  58. package/src/list/Base.mjs +2 -2
  59. package/src/list/Circle.mjs +2 -2
  60. package/src/list/Color.mjs +2 -2
  61. package/src/list/Component.mjs +2 -2
  62. package/src/main/DomEvents.mjs +12 -3
  63. package/src/manager/Base.mjs +3 -3
  64. package/src/manager/Component.mjs +20 -11
  65. package/src/manager/DomEvent.mjs +5 -6
  66. package/src/manager/Focus.mjs +2 -2
  67. package/src/manager/Instance.mjs +4 -4
  68. package/src/manager/Task.mjs +2 -2
  69. package/src/manager/Toast.mjs +3 -3
  70. package/src/plugin/Base.mjs +18 -4
  71. package/src/plugin/Popover.mjs +3 -3
  72. package/src/plugin/PrefixField.mjs +2 -2
  73. package/src/plugin/Resizable.mjs +3 -7
  74. package/src/plugin/Responsive.mjs +2 -2
  75. package/src/selection/Model.mjs +17 -2
  76. package/src/selection/grid/CellColumnModel.mjs +1 -1
  77. package/src/selection/grid/CellColumnRowModel.mjs +1 -1
  78. package/src/selection/grid/CellModel.mjs +1 -1
  79. package/src/selection/grid/ColumnModel.mjs +2 -2
  80. package/src/table/Container.mjs +32 -3
  81. package/src/table/View.mjs +9 -4
  82. package/src/table/header/Toolbar.mjs +15 -1
  83. package/src/table/plugin/CellEditing.mjs +330 -0
  84. package/src/toolbar/Base.mjs +2 -2
  85. package/src/toolbar/Breadcrumb.mjs +1 -1
  86. package/src/tooltip/Base.mjs +2 -2
  87. package/src/util/KeyNavigation.mjs +14 -8
  88. package/src/worker/Base.mjs +3 -3
  89. package/src/grid/README.md +0 -3
@@ -32,18 +32,18 @@ class GridContainer extends BaseGridContainer {
32
32
  * @member {Object[]} columns
33
33
  */
34
34
  columns: [{
35
- cls : ['neo-index-column'],
36
- dock : 'left',
37
- field : 'index',
38
- minWidth: 40,
39
- text : '#',
40
- renderer: Util.indexRenderer,
41
- width : 40
35
+ cls : ['neo-index-column'],
36
+ dataField: 'index',
37
+ dock : 'left',
38
+ minWidth : 40,
39
+ text : '#',
40
+ renderer : Util.indexRenderer,
41
+ width : 40
42
42
  }, {
43
43
  cellAlign : 'left',
44
+ dataField : 'country',
44
45
  defaultSortDirection: 'ASC',
45
46
  dock : 'left',
46
- field : 'country',
47
47
  text : 'Country',
48
48
  width : 200,
49
49
 
@@ -58,44 +58,44 @@ class GridContainer extends BaseGridContainer {
58
58
  };
59
59
  }
60
60
  }, {
61
- field: 'cases',
62
- text : 'Cases'
61
+ dataField: 'cases',
62
+ text : 'Cases'
63
63
  }, {
64
- field: 'casesPerOneMillion',
65
- text : 'Cases / 1M'
64
+ dataField: 'casesPerOneMillion',
65
+ text : 'Cases / 1M'
66
66
  }, {
67
- field : 'infected',
68
- text : 'Infected',
69
- renderer: data => Util.formatInfected(data)
67
+ dataField: 'infected',
68
+ text : 'Infected',
69
+ renderer : data => Util.formatInfected(data)
70
70
  }, {
71
- field : 'active',
72
- text : 'Active',
73
- renderer: data => Util.formatNumber(data, '#64B5F6')
71
+ dataField: 'active',
72
+ text : 'Active',
73
+ renderer : data => Util.formatNumber(data, '#64B5F6')
74
74
  }, {
75
- field : 'recovered',
76
- text : 'Recovered',
77
- renderer: data => Util.formatNumber(data, '#28ca68')
75
+ dataField: 'recovered',
76
+ text : 'Recovered',
77
+ renderer : data => Util.formatNumber(data, '#28ca68')
78
78
  }, {
79
- field : 'critical',
80
- text : 'Critical',
81
- renderer: data => Util.formatNumber(data, 'orange')
79
+ dataField: 'critical',
80
+ text : 'Critical',
81
+ renderer : data => Util.formatNumber(data, 'orange')
82
82
  }, {
83
- field : 'deaths',
84
- text : 'Deaths',
85
- renderer: data => Util.formatNumber(data, '#fb6767')
83
+ dataField: 'deaths',
84
+ text : 'Deaths',
85
+ renderer : data => Util.formatNumber(data, '#fb6767')
86
86
  }, {
87
- field: 'todayCases',
88
- text : 'Cases today'
87
+ dataField: 'todayCases',
88
+ text : 'Cases today'
89
89
  }, {
90
- field : 'todayDeaths',
91
- text : 'Deaths today',
92
- renderer: data => Util.formatNumber(data, '#fb6767')
90
+ dataField: 'todayDeaths',
91
+ text : 'Deaths today',
92
+ renderer : data => Util.formatNumber(data, '#fb6767')
93
93
  }, {
94
- field: 'tests',
95
- text : 'Tests'
94
+ dataField: 'tests',
95
+ text : 'Tests'
96
96
  }, {
97
- field: 'testsPerOneMillion',
98
- text : 'Tests / 1M'
97
+ dataField: 'testsPerOneMillion',
98
+ text : 'Tests / 1M'
99
99
  }],
100
100
  /**
101
101
  * @member {Neo.controller.Component} controller=GridContainerController
@@ -133,7 +133,7 @@ class Util extends Base {
133
133
  imageName = map[imageName] || imageName;
134
134
 
135
135
  if (Neo.config.isGitHubPages) {
136
- let path = `../../../../resources/images/flaticon/country_flags/png/${imageName}.png`;
136
+ let path = `../../../../resources_pub/images/flaticon/country_flags/png/${imageName}.png`;
137
137
 
138
138
  if (Neo.config.environment !== 'development') {
139
139
  path = `../../${path}`
@@ -1,7 +1,8 @@
1
1
  {
2
- "appPath" : "examples/grid/covid/app.mjs",
3
- "basePath" : "../../../",
4
- "environment": "development",
5
- "mainPath" : "./Main.mjs",
6
- "themes" : ["neo-theme-dark", "neo-theme-light"]
2
+ "appPath" : "examples/grid/covid/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"]
7
8
  }
@@ -0,0 +1,174 @@
1
+ import CellColumnModel from '../../../src/selection/table/CellColumnModel.mjs';
2
+ import CellColumnRowModel from '../../../src/selection/table/CellColumnRowModel.mjs';
3
+ import CellModel from '../../../src/selection/table/CellModel.mjs';
4
+ import CellRowModel from '../../../src/selection/table/CellRowModel.mjs';
5
+ import CheckBox from '../../../src/form/field/CheckBox.mjs';
6
+ import CountryField from '../../../src/form/field/Country.mjs';
7
+ import ConfigurationViewport from '../../ConfigurationViewport.mjs';
8
+ import DateField from '../../../src/form/field/Date.mjs';
9
+ import MainContainerStateProvider from './MainContainerStateProvider.mjs';
10
+ import MainStore from './MainStore.mjs';
11
+ import NumberField from '../../../src/form/field/Number.mjs';
12
+ import Radio from '../../../src/form/field/Radio.mjs';
13
+ import TableContainer from '../../../src/table/Container.mjs';
14
+
15
+ /**
16
+ * @class Neo.examples.table.cellEditing.MainContainer
17
+ * @extends Neo.examples.ConfigurationViewport
18
+ */
19
+ class MainContainer extends ConfigurationViewport {
20
+ static config = {
21
+ className : 'Neo.examples.table.cellEditing.MainContainer',
22
+ autoMount : true,
23
+ configItemLabelWidth: 130,
24
+ configPanelFlex : 1.5,
25
+ exampleComponentFlex: 3,
26
+ layout : {ntype: 'hbox', align: 'stretch'},
27
+ stateProvider : MainContainerStateProvider
28
+ }
29
+
30
+ /**
31
+ * @param {Object} data
32
+ */
33
+ countryRenderer({record}) {
34
+ let countryStore = this.getStateProvider().getStore('countries');
35
+
36
+ if (countryStore.getCount() > 0) {
37
+ return countryStore.get(record.country).name
38
+ }
39
+
40
+ return ''
41
+ }
42
+
43
+ /**
44
+ * @returns {Object[]}
45
+ */
46
+ createConfigurationComponents() {
47
+ let me = this;
48
+
49
+ const selectionModelRadioDefaults = {
50
+ module : Radio,
51
+ hideValueLabel: false,
52
+ labelText : '',
53
+ name : 'selectionModel',
54
+ width : 350
55
+ };
56
+
57
+ return [{
58
+ module : NumberField,
59
+ labelText: 'height',
60
+ listeners: {change: me.onConfigChange.bind(me, 'height')},
61
+ maxValue : 800,
62
+ minValue : 225,
63
+ stepSize : 5,
64
+ value : me.exampleComponent.height
65
+ }, {
66
+ ...selectionModelRadioDefaults,
67
+ checked : me.exampleComponent.selectionModel.ntype === 'selection-table-cellmodel',
68
+ labelText : 'selectionModel',
69
+ listeners : {change: me.onRadioChange.bind(me, 'selectionModel', CellModel)},
70
+ style : {marginTop: '10px'},
71
+ valueLabelText: 'Cell'
72
+ }, {
73
+ ...selectionModelRadioDefaults,
74
+ checked : me.exampleComponent.selectionModel.ntype === 'selection-table-cellcolumnmodel',
75
+ listeners : {change: me.onRadioChange.bind(me, 'selectionModel', CellColumnModel)},
76
+ valueLabelText: 'Cell & Column'
77
+ }, {
78
+ ...selectionModelRadioDefaults,
79
+ checked : me.exampleComponent.selectionModel.ntype === 'selection-table-cellrowmodel',
80
+ listeners : {change: me.onRadioChange.bind(me, 'selectionModel', CellRowModel)},
81
+ valueLabelText: 'Cell & Row'
82
+ }, {
83
+ ...selectionModelRadioDefaults,
84
+ checked : me.exampleComponent.selectionModel.ntype === 'selection-table-cellcolumnrowmodel',
85
+ listeners : {change: me.onRadioChange.bind(me, 'selectionModel', CellColumnRowModel)},
86
+ valueLabelText: 'Cell & Column & Row'
87
+ }, {
88
+ module : CheckBox,
89
+ checked : me.exampleComponent.sortable,
90
+ hideLabel : true,
91
+ listeners : {change: me.onConfigChange.bind(me, 'sortable')},
92
+ style : {marginTop: '10px'},
93
+ valueLabelText: 'sortable'
94
+ }, {
95
+ module : CheckBox,
96
+ checked : false, // we can not access the lazy-loaded plugin yet
97
+ hideLabel : true,
98
+ listeners : {change: me.onPluginConfigChange.bind(me, 'disabled')},
99
+ style : {marginTop: '10px'},
100
+ valueLabelText: 'Disable CellEditing'
101
+ }]
102
+ }
103
+
104
+ /**
105
+ * @returns {Object}
106
+ */
107
+ createExampleComponent() {
108
+ return {
109
+ module : TableContainer,
110
+ bind : {store : 'stores.mainStore'},
111
+ cellEditing : true,
112
+ parentId : this.id,
113
+ selectionModel: CellModel,
114
+ store : MainStore,
115
+
116
+ columnDefaults: {
117
+ editable: true
118
+ },
119
+
120
+ columns: [{
121
+ dataField: 'firstname',
122
+ text : 'Firstname'
123
+ }, {
124
+ dataField: 'randomNumber',
125
+ text : 'Number (step 5)',
126
+
127
+ editor: {
128
+ module : NumberField,
129
+ clearable: false,
130
+ maxValue : 100,
131
+ minValue : 0,
132
+ stepSize : 5
133
+ }
134
+ }, {
135
+ dataField: 'randomDate',
136
+ renderer : ({value}) => new Intl.DateTimeFormat('default').format(value),
137
+ text : 'Random Date',
138
+
139
+ editor: {
140
+ module : DateField,
141
+ clearable: false,
142
+ maxValue : '2024-12-20',
143
+ minValue : '2024-12-10'
144
+ }
145
+ }, {
146
+ dataField: 'country',
147
+ renderer : 'up.countryRenderer',
148
+ text : 'Country',
149
+
150
+ editor: {
151
+ module : CountryField,
152
+ bind : {store: 'stores.countries'},
153
+ clearable : false,
154
+ forceSelection: true,
155
+ valueField : 'code'
156
+ }
157
+ }, {
158
+ dataField: 'githubId',
159
+ editable : false,
160
+ text : 'Github Id (Non-editable)'
161
+ }]
162
+ }
163
+ }
164
+
165
+ /**
166
+ * @param {String} config
167
+ * @param {Object} opts
168
+ */
169
+ onPluginConfigChange(config, opts) {
170
+ this.exampleComponent.getPlugin('table-cell-editing')[config] = opts.value
171
+ }
172
+ }
173
+
174
+ export default Neo.setupClass(MainContainer);
@@ -0,0 +1,62 @@
1
+ import MainStore from './MainStore.mjs';
2
+ import StateProvider from '../../../src/state/Provider.mjs';
3
+ import Store from '../../../src/data/Store.mjs';
4
+
5
+ const countrySymbol = Symbol.for('country');
6
+
7
+ /**
8
+ * @class Neo.examples.table.cellEditing.MainContainerStateProvider
9
+ * @extends Neo.state.Provider
10
+ */
11
+ class MainContainerStateProvider extends StateProvider {
12
+ static config = {
13
+ /**
14
+ * @member {String} className='Neo.examples.table.cellEditing.MainContainerStateProvider'
15
+ * @protected
16
+ */
17
+ className: 'Neo.examples.table.cellEditing.MainContainerStateProvider',
18
+ /**
19
+ * @member {Object} stores
20
+ */
21
+ stores: {
22
+ countries: {
23
+ module : Store,
24
+ autoLoad : true,
25
+ keyProperty: 'code',
26
+ listeners : {load: 'onCountryStoreLoad'},
27
+ url : '../../../resources/examples/data/countries.json',
28
+
29
+ model: {
30
+ fields: [
31
+ {name: 'code'},
32
+ {name: 'name'}
33
+ ]
34
+ }
35
+ },
36
+ mainStore: MainStore
37
+ }
38
+ }
39
+
40
+ /**
41
+ * @param {Record[]} items
42
+ */
43
+ onCountryStoreLoad(items) {
44
+ let me = this,
45
+ mainStore = me.getStore('mainStore'),
46
+ country;
47
+
48
+ // if the main table store is already loaded, the country field renderer had no data
49
+ if (mainStore.getCount() > 0) {
50
+ mainStore.items.forEach(record => {
51
+ country = record.country;
52
+
53
+ // hack resetting the current value to get a new record change
54
+ record[countrySymbol] = null;
55
+
56
+ record.country = country
57
+ })
58
+ }
59
+ }
60
+ }
61
+
62
+ export default Neo.setupClass(MainContainerStateProvider);
@@ -0,0 +1,30 @@
1
+ import Model from '../../../src/data/Model.mjs';
2
+
3
+ /**
4
+ * @class Neo.examples.table.cellEditing.MainModel
5
+ * @extends Neo.data.Model
6
+ */
7
+ class MainModel extends Model {
8
+ static config = {
9
+ className: 'Neo.examples.table.cellEditing.MainModel',
10
+
11
+ fields: [{
12
+ name: 'country',
13
+ type: 'String'
14
+ }, {
15
+ name: 'firstname',
16
+ type: 'String'
17
+ }, {
18
+ name: 'githubId',
19
+ type: 'String'
20
+ }, {
21
+ name: 'randomNumber',
22
+ type: 'Int'
23
+ }, {
24
+ name: 'randomDate',
25
+ type: 'Date'
26
+ }]
27
+ }
28
+ }
29
+
30
+ export default Neo.setupClass(MainModel);
@@ -0,0 +1,54 @@
1
+ import Model from './MainModel.mjs';
2
+ import Store from '../../../src/data/Store.mjs';
3
+
4
+ /**
5
+ * @class Neo.examples.table.cellEditing.MainStore
6
+ * @extends Neo.data.Store
7
+ */
8
+ class MainStore extends Store {
9
+ static config = {
10
+ className : 'Neo.examples.table.cellEditing.MainStore',
11
+ keyProperty: 'githubId',
12
+ model : Model,
13
+
14
+ data: [{
15
+ country : 'DE',
16
+ firstname : 'Tobias',
17
+ githubId : 'tobiu',
18
+ randomDate : '2024-12-20',
19
+ randomNumber: 100
20
+ }, {
21
+ country : 'US',
22
+ firstname : 'Rich',
23
+ githubId : 'rwaters',
24
+ randomDate : '2024-12-18',
25
+ randomNumber: 90
26
+ }, {
27
+ country : 'DE',
28
+ firstname : 'Nils',
29
+ githubId : 'mrsunshine',
30
+ randomDate : '2024-12-19',
31
+ randomNumber: 70
32
+ }, {
33
+ country : 'US',
34
+ firstname : 'Gerard',
35
+ githubId : 'camtnbikerrwc',
36
+ randomDate : '2024-12-17',
37
+ randomNumber: 80
38
+ }, {
39
+ country : 'SK',
40
+ firstname : 'Jozef',
41
+ githubId : 'jsakalos',
42
+ randomDate : '2024-12-16',
43
+ randomNumber: 60
44
+ }, {
45
+ country : 'DE',
46
+ firstname : 'Bastian',
47
+ githubId : 'bhaustein',
48
+ randomDate : '2024-12-15',
49
+ randomNumber: 50
50
+ }]
51
+ }
52
+ }
53
+
54
+ export default Neo.setupClass(MainStore);
@@ -0,0 +1,6 @@
1
+ import MainContainer from './MainContainer.mjs';
2
+
3
+ export const onStart = () => Neo.app({
4
+ mainView: MainContainer,
5
+ name : 'Neo.examples.table.cellEditing'
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 Table CellEditing</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" : "examples/table/cellEditing/app.mjs",
3
+ "basePath" : "../../../",
4
+ "environment": "development",
5
+ "mainPath" : "./Main.mjs"
6
+ }
@@ -30,7 +30,8 @@ class MainContainerStateProvider extends StateProvider {
30
30
  fields: [
31
31
  {name: 'code'},
32
32
  {name: 'name'}
33
- ]}
33
+ ]
34
+ }
34
35
  },
35
36
  mainStore: MainStore
36
37
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "8.0.0",
3
+ "version": "8.1.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -45,26 +45,26 @@
45
45
  },
46
46
  "homepage": "https://neomjs.com/",
47
47
  "devDependencies": {
48
- "@fortawesome/fontawesome-free": "^6.7.1",
48
+ "@fortawesome/fontawesome-free": "^6.7.2",
49
49
  "autoprefixer": "^10.4.20",
50
- "chalk": "^5.3.0",
50
+ "chalk": "^5.4.1",
51
51
  "clean-webpack-plugin": "^4.0.0",
52
- "commander": "^12.1.0",
52
+ "commander": "^13.0.0",
53
53
  "cssnano": "^7.0.6",
54
54
  "envinfo": "^7.14.0",
55
55
  "fs-extra": "^11.2.0",
56
56
  "highlightjs-line-numbers.js": "^2.9.0",
57
- "inquirer": "^12.2.0",
58
- "marked": "^15.0.3",
57
+ "inquirer": "^12.3.0",
58
+ "marked": "^15.0.6",
59
59
  "monaco-editor": "0.50.0",
60
60
  "neo-jsdoc": "1.0.1",
61
61
  "neo-jsdoc-x": "1.0.5",
62
62
  "postcss": "^8.4.49",
63
- "sass": "^1.83.0",
63
+ "sass": "^1.83.1",
64
64
  "siesta-lite": "5.5.2",
65
65
  "url": "^0.11.4",
66
66
  "webpack": "^5.97.1",
67
- "webpack-cli": "^5.1.4",
67
+ "webpack-cli": "^6.0.1",
68
68
  "webpack-dev-server": "^5.2.0",
69
69
  "webpack-hook-plugin": "^1.0.7",
70
70
  "webpack-node-externals": "^3.0.0"
@@ -31,17 +31,26 @@
31
31
  padding : var(--button-padding);
32
32
  }
33
33
 
34
- .neo-version,
35
- .portal-home-footer-spacer {
34
+ .neo-version {
36
35
  height: var(--button-height);
37
36
  margin: var(--button-margin);
38
37
  }
39
38
 
39
+ .portal-home-footer-spacer {
40
+ height: calc(2 * var(--button-height));
41
+ margin: calc(2 * var(--button-margin));
42
+ }
43
+
40
44
  .portal-home-footer-section {
41
45
  background-color: transparent;
42
46
  color : white;
43
47
  }
44
48
 
49
+ .portal-home-footer-spacer {
50
+ height: calc(2 * var(--button-height));
51
+ margin: calc(2 * var(--button-margin));
52
+ }
53
+
45
54
  @media (max-width: 800px) {
46
55
  max-height: 18em;
47
56
  min-height: 18em;
@@ -4,13 +4,13 @@
4
4
 
5
5
  .neo-grid-container.covid-country-grid {
6
6
  .neo-country-column {
7
+ max-width: 200px;
7
8
  min-width: 200px;
8
9
  width : initial;
9
10
  }
10
11
 
11
12
  .neo-grid-cell {
12
13
  min-width: 100px;
13
- width : 300px;
14
14
  }
15
15
 
16
16
  .neo-index-column {
@@ -1,3 +1,9 @@
1
+ .neo-grid-wrapper {
2
+ overflow-x: auto;
3
+ overflow-y: hidden;
4
+ position : relative;
5
+ }
6
+
1
7
  .neo-grid-container {
2
8
  border : 1px solid var(--grid-container-border-color);
3
9
  border-spacing: 0;
@@ -6,13 +12,13 @@
6
12
  font-weight : 400;
7
13
  height : 100%;
8
14
  line-height : 19px;
9
- overflow : auto;
15
+ overflow-y : hidden;
16
+ position : absolute;
17
+ width : 100%;
10
18
 
11
19
  .neo-grid-row {
12
- display : flex;
13
- height : 32px !important;
14
- max-height: 32px !important;
15
- width : 100%;
20
+ display: flex;
21
+ width : 100%;
16
22
  }
17
23
 
18
24
  .neo-grid-header-toolbar .neo-grid-row:nth-child(1) .neo-grid-header-cell {
@@ -31,7 +37,7 @@
31
37
  }
32
38
  }
33
39
 
34
- .neo-grid-row:nth-child(even) {
40
+ .neo-grid-row.neo-even {
35
41
  .neo-grid-cell {
36
42
  background-color: var(--grid-container-cell-background-color-even);
37
43
  }
@@ -43,19 +49,6 @@
43
49
  z-index : 5;
44
50
  }
45
51
 
46
- .neo-grid-header-cell:nth-child(1) {
47
- position: sticky;
48
- left : 0;
49
- top : 0;
50
- z-index : 200 !important;
51
- }
52
-
53
- .neo-grid-cell:nth-child(1) {
54
- position: sticky;
55
- left : 0;
56
- z-index : 20;
57
- }
58
-
59
52
  .neo-grid-cell, .neo-grid-header-cell {
60
53
  border-bottom: 1px solid var(--grid-container-border-color);
61
54
  border-right : 1px solid var(--grid-container-border-color);
@@ -67,8 +60,7 @@
67
60
  }
68
61
 
69
62
  &.neo-locked {
70
- position: sticky;
71
- left : 0;
63
+ left: 0;
72
64
  }
73
65
  }
74
66
 
@@ -76,8 +68,6 @@
76
68
  align-items : center;
77
69
  background-color: var(--grid-container-cell-background-color);
78
70
  display : flex;
79
- height : 32px !important;
80
- max-height : 32px !important;
81
71
  padding : 2px 10px 2px;
82
72
  width : fit-content;
83
73
  }