neo.mjs 8.0.0 → 8.0.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.
- package/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/index.html +1 -1
- package/apps/portal/view/about/Container.mjs +0 -2
- package/apps/portal/view/about/MemberContainer.mjs +1 -20
- package/apps/portal/view/home/FooterContainer.mjs +1 -5
- package/examples/ConfigurationViewport.mjs +37 -32
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/grid/cellEditing/MainContainer.mjs +175 -0
- package/examples/grid/cellEditing/MainContainerStateProvider.mjs +62 -0
- package/examples/grid/cellEditing/MainModel.mjs +30 -0
- package/examples/grid/cellEditing/MainStore.mjs +54 -0
- package/examples/grid/cellEditing/app.mjs +6 -0
- package/examples/grid/cellEditing/index.html +11 -0
- package/examples/grid/cellEditing/neo-config.json +6 -0
- package/examples/grid/container/MainContainer.mjs +7 -6
- package/examples/grid/covid/GridContainer.mjs +36 -36
- package/examples/grid/covid/Util.mjs +1 -1
- package/examples/table/cellEditing/MainContainer.mjs +174 -0
- package/examples/table/cellEditing/MainContainerStateProvider.mjs +62 -0
- package/examples/table/cellEditing/MainModel.mjs +30 -0
- package/examples/table/cellEditing/MainStore.mjs +54 -0
- package/examples/table/cellEditing/app.mjs +6 -0
- package/examples/table/cellEditing/index.html +11 -0
- package/examples/table/cellEditing/neo-config.json +6 -0
- package/examples/table/nestedRecordFields/MainContainerStateProvider.mjs +2 -1
- package/package.json +5 -5
- package/resources/scss/src/apps/portal/home/FooterContainer.scss +11 -2
- package/resources/scss/src/grid/Container.scss +0 -13
- package/resources/scss/src/grid/plugin/CellEditing.scss +11 -0
- package/resources/scss/src/table/plugin/CellEditing.scss +11 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/component/DateSelector.mjs +15 -0
- package/src/form/field/Base.mjs +1 -4
- package/src/form/field/ComboBox.mjs +18 -2
- package/src/form/field/Date.mjs +10 -4
- package/src/grid/Container.mjs +242 -39
- package/src/grid/README.md +1 -1
- package/src/grid/View.mjs +282 -129
- package/src/grid/header/Button.mjs +327 -36
- package/src/grid/header/Toolbar.mjs +68 -4
- package/src/grid/plugin/CellEditing.mjs +30 -0
- package/src/main/DomEvents.mjs +12 -3
- package/src/manager/Focus.mjs +2 -2
- package/src/plugin/Base.mjs +15 -1
- package/src/plugin/Resizable.mjs +1 -5
- package/src/selection/Model.mjs +5 -1
- package/src/selection/grid/CellColumnModel.mjs +1 -1
- package/src/selection/grid/CellColumnRowModel.mjs +1 -1
- package/src/selection/grid/CellModel.mjs +1 -1
- package/src/selection/grid/ColumnModel.mjs +2 -2
- package/src/table/Container.mjs +32 -3
- package/src/table/View.mjs +9 -4
- package/src/table/header/Toolbar.mjs +15 -1
- package/src/table/plugin/CellEditing.mjs +330 -0
- package/src/util/KeyNavigation.mjs +14 -8
@@ -32,18 +32,18 @@ class GridContainer extends BaseGridContainer {
|
|
32
32
|
* @member {Object[]} columns
|
33
33
|
*/
|
34
34
|
columns: [{
|
35
|
-
cls
|
36
|
-
|
37
|
-
|
38
|
-
minWidth: 40,
|
39
|
-
text
|
40
|
-
renderer: Util.indexRenderer,
|
41
|
-
width
|
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
|
-
|
62
|
-
text
|
61
|
+
dataField: 'cases',
|
62
|
+
text : 'Cases'
|
63
63
|
}, {
|
64
|
-
|
65
|
-
text
|
64
|
+
dataField: 'casesPerOneMillion',
|
65
|
+
text : 'Cases / 1M'
|
66
66
|
}, {
|
67
|
-
|
68
|
-
text
|
69
|
-
renderer: data => Util.formatInfected(data)
|
67
|
+
dataField: 'infected',
|
68
|
+
text : 'Infected',
|
69
|
+
renderer : data => Util.formatInfected(data)
|
70
70
|
}, {
|
71
|
-
|
72
|
-
text
|
73
|
-
renderer: data => Util.formatNumber(data, '#64B5F6')
|
71
|
+
dataField: 'active',
|
72
|
+
text : 'Active',
|
73
|
+
renderer : data => Util.formatNumber(data, '#64B5F6')
|
74
74
|
}, {
|
75
|
-
|
76
|
-
text
|
77
|
-
renderer: data => Util.formatNumber(data, '#28ca68')
|
75
|
+
dataField: 'recovered',
|
76
|
+
text : 'Recovered',
|
77
|
+
renderer : data => Util.formatNumber(data, '#28ca68')
|
78
78
|
}, {
|
79
|
-
|
80
|
-
text
|
81
|
-
renderer: data => Util.formatNumber(data, 'orange')
|
79
|
+
dataField: 'critical',
|
80
|
+
text : 'Critical',
|
81
|
+
renderer : data => Util.formatNumber(data, 'orange')
|
82
82
|
}, {
|
83
|
-
|
84
|
-
text
|
85
|
-
renderer: data => Util.formatNumber(data, '#fb6767')
|
83
|
+
dataField: 'deaths',
|
84
|
+
text : 'Deaths',
|
85
|
+
renderer : data => Util.formatNumber(data, '#fb6767')
|
86
86
|
}, {
|
87
|
-
|
88
|
-
text
|
87
|
+
dataField: 'todayCases',
|
88
|
+
text : 'Cases today'
|
89
89
|
}, {
|
90
|
-
|
91
|
-
text
|
92
|
-
renderer: data => Util.formatNumber(data, '#fb6767')
|
90
|
+
dataField: 'todayDeaths',
|
91
|
+
text : 'Deaths today',
|
92
|
+
renderer : data => Util.formatNumber(data, '#fb6767')
|
93
93
|
}, {
|
94
|
-
|
95
|
-
text
|
94
|
+
dataField: 'tests',
|
95
|
+
text : 'Tests'
|
96
96
|
}, {
|
97
|
-
|
98
|
-
text
|
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 = `../../../../
|
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}`
|
@@ -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,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>
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "8.0.
|
3
|
+
"version": "8.0.1",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -45,17 +45,17 @@
|
|
45
45
|
},
|
46
46
|
"homepage": "https://neomjs.com/",
|
47
47
|
"devDependencies": {
|
48
|
-
"@fortawesome/fontawesome-free": "^6.7.
|
48
|
+
"@fortawesome/fontawesome-free": "^6.7.2",
|
49
49
|
"autoprefixer": "^10.4.20",
|
50
|
-
"chalk": "^5.
|
50
|
+
"chalk": "^5.4.1",
|
51
51
|
"clean-webpack-plugin": "^4.0.0",
|
52
52
|
"commander": "^12.1.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.
|
58
|
-
"marked": "^15.0.
|
57
|
+
"inquirer": "^12.3.0",
|
58
|
+
"marked": "^15.0.4",
|
59
59
|
"monaco-editor": "0.50.0",
|
60
60
|
"neo-jsdoc": "1.0.1",
|
61
61
|
"neo-jsdoc-x": "1.0.5",
|
@@ -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;
|
@@ -43,19 +43,6 @@
|
|
43
43
|
z-index : 5;
|
44
44
|
}
|
45
45
|
|
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
46
|
.neo-grid-cell, .neo-grid-header-cell {
|
60
47
|
border-bottom: 1px solid var(--grid-container-border-color);
|
61
48
|
border-right : 1px solid var(--grid-container-border-color);
|
package/src/DefaultConfig.mjs
CHANGED
@@ -262,12 +262,12 @@ const DefaultConfig = {
|
|
262
262
|
useVdomWorker: true,
|
263
263
|
/**
|
264
264
|
* buildScripts/injectPackageVersion.mjs will update this value
|
265
|
-
* @default '8.0.
|
265
|
+
* @default '8.0.1'
|
266
266
|
* @memberOf! module:Neo
|
267
267
|
* @name config.version
|
268
268
|
* @type String
|
269
269
|
*/
|
270
|
-
version: '8.0.
|
270
|
+
version: '8.0.1'
|
271
271
|
};
|
272
272
|
|
273
273
|
Object.assign(DefaultConfig, {
|
@@ -392,6 +392,21 @@ class DateSelector extends Component {
|
|
392
392
|
return ClassSystemUtil.beforeSetInstance(value, DateSelectorModel)
|
393
393
|
}
|
394
394
|
|
395
|
+
/**
|
396
|
+
* Triggered before the value config gets changed
|
397
|
+
* @param {String} value
|
398
|
+
* @param {String} oldValue
|
399
|
+
* @protected
|
400
|
+
*/
|
401
|
+
beforeSetValue(value, oldValue) {
|
402
|
+
// If the value is set as a Date, try to convert it into a string
|
403
|
+
if (Neo.typeOf(value) === 'Date') {
|
404
|
+
return DateUtil.convertToyyyymmdd(value)
|
405
|
+
}
|
406
|
+
|
407
|
+
return value
|
408
|
+
}
|
409
|
+
|
395
410
|
/**
|
396
411
|
* Triggered before the weekStartDay config gets changed
|
397
412
|
* @param {String} value
|
package/src/form/field/Base.mjs
CHANGED
@@ -78,10 +78,7 @@ class Base extends Component {
|
|
78
78
|
* @returns {Boolean}
|
79
79
|
*/
|
80
80
|
get isDirty() {
|
81
|
-
|
82
|
-
value = this.value;
|
83
|
-
|
84
|
-
return value !== originalValue && Neo.isEmpty(value) !== Neo.isEmpty(originalValue)
|
81
|
+
return !Neo.isEqual(this.getSubmitValue(), this.originalConfig.value)
|
85
82
|
}
|
86
83
|
/**
|
87
84
|
* An internal cache for formGroup(s) and the field name
|