neo.mjs 5.3.9 → 5.3.11

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='5.3.9'
23
+ * @member {String} version='5.3.11'
24
24
  */
25
- version: '5.3.9'
25
+ version: '5.3.11'
26
26
  }
27
27
 
28
28
  /**
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.3.9'
23
+ * @member {String} version='5.3.11'
24
24
  */
25
- version: '5.3.9'
25
+ version: '5.3.11'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "5.3.9",
3
+ "version": "5.3.11",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -104,8 +104,7 @@
104
104
  opacity : v(dateselector-cell-opacity-disabled);
105
105
  }
106
106
 
107
- &.neo-disabled,
108
- &.neo-selected {
107
+ &.neo-disabled {
109
108
  cursor : default;
110
109
  pointer-events: none;
111
110
  }
@@ -27,6 +27,12 @@
27
27
  }
28
28
  }
29
29
 
30
+ &.neo-invalid {
31
+ .neo-textfield-input {
32
+ border-color: v(textfield-border-color-invalid);
33
+ }
34
+ }
35
+
30
36
  &:has(.neo-textfield-error) {
31
37
  .neo-label-wrapper {
32
38
  height: calc(100% - 1.5em);
@@ -237,12 +237,12 @@ const DefaultConfig = {
237
237
  useVdomWorker: true,
238
238
  /**
239
239
  * buildScripts/injectPackageVersion.mjs will update this value
240
- * @default '5.3.9'
240
+ * @default '5.3.11'
241
241
  * @memberOf! module:Neo
242
242
  * @name config.version
243
243
  * @type String
244
244
  */
245
- version: '5.3.9'
245
+ version: '5.3.11'
246
246
  };
247
247
 
248
248
  Object.assign(DefaultConfig, {
package/src/Neo.mjs CHANGED
@@ -660,7 +660,7 @@ function autoGenerateGetSet(proto, key) {
660
660
  * @param {Boolean} create
661
661
  * @param {Object} current
662
662
  * @param {Object} prev
663
- * @returns {Object}
663
+ * @returns {Object|undefined}
664
664
  */
665
665
  function createArrayNs(create, current, prev) {
666
666
  let arrDetails = parseArrayFromString(current),
@@ -674,6 +674,10 @@ function createArrayNs(create, current, prev) {
674
674
  arrRoot = prev[arrDetails[0]];
675
675
  }
676
676
 
677
+ if (!arrRoot) {
678
+ return;
679
+ }
680
+
677
681
  for (; i < len; i++) {
678
682
  arrItem = parseInt(arrDetails[i]);
679
683
 
@@ -694,7 +694,12 @@ class DateSelector extends Component {
694
694
  date = me.currentDate; // cloned
695
695
 
696
696
  date.setDate(parseInt(cellEl.vdom.cn[0].html));
697
- me.value = DateUtil.convertToyyyymmdd(date);
697
+ date = DateUtil.convertToyyyymmdd(date);
698
+
699
+ // We want to always trigger a change event.
700
+ // Reason: A form.field.Date can have a null value and we want to select the current date.
701
+ me._value = date;
702
+ me.afterSetValue(date, null);
698
703
  }
699
704
 
700
705
  /**
@@ -751,6 +756,13 @@ class DateSelector extends Component {
751
756
  this.selectionModel?.register(this);
752
757
  }
753
758
 
759
+ /**
760
+ * @param {String[]} items
761
+ */
762
+ onSelect(items) {
763
+ this.value = items[0].split('__')[1]
764
+ }
765
+
754
766
  /**
755
767
  * Recreates the current centerEl, month & year el
756
768
  * @param {Number} monthIncrement
@@ -916,8 +928,6 @@ class DateSelector extends Component {
916
928
  */
917
929
  updateHeaderMonthTransitionCallback(opts) {
918
930
  let {data, headerCenterEl, increment, yearIncrement} = opts,
919
- me = this,
920
- vdom = me.vdom,
921
931
  slideDirection = yearIncrement > 0 ? 'bottom' : yearIncrement < 0 ? 'top' : increment < 0 ? 'top' : 'bottom',
922
932
  y;
923
933
 
@@ -935,8 +945,6 @@ class DateSelector extends Component {
935
945
  */
936
946
  updateHeaderMonthWrapperCallback(opts) {
937
947
  let {headerCenterEl, increment, yearIncrement} = opts,
938
- me = this,
939
- vdom = me.vdom,
940
948
  slideDirection = yearIncrement > 0 ? 'bottom' : yearIncrement < 0 ? 'top' : increment < 0 ? 'top' : 'bottom';
941
949
 
942
950
  headerCenterEl.cn[0] = headerCenterEl.cn[0].cn[0].cn[slideDirection === 'top' ? 1 : 0];
@@ -948,12 +956,11 @@ class DateSelector extends Component {
948
956
  */
949
957
  updateHeaderYear(increment, silent=false) {
950
958
  let me = this,
951
- vdom = me.vdom,
952
959
  yearEl = me.getHeaderYearEl();
953
960
 
954
961
  yearEl.html = me.currentDate.getFullYear();
955
962
 
956
- me[silent ? '_vdom' : 'vdom'] = vdom;
963
+ !silent && me.update()
957
964
  }
958
965
  }
959
966
 
@@ -1042,6 +1042,8 @@ class Text extends Base {
1042
1042
  * @returns {Boolean}
1043
1043
  */
1044
1044
  isValid() {
1045
+ this.validate(true); // silent
1046
+
1045
1047
  return this.error?.length > 0 ? false : super.isValid();
1046
1048
  }
1047
1049
 
@@ -1249,9 +1251,9 @@ class Text extends Base {
1249
1251
  isValid = !value || value === '';
1250
1252
 
1251
1253
  NeoArray[!isValid ? 'add' : 'remove'](cls, 'neo-invalid');
1252
- me.cls = cls; // todo: silent update
1254
+ me[silent ? '_cls' : 'cls'] = cls;
1253
1255
 
1254
- errorNode = VDomUtil.findVdomChild(this.vdom, {cls: 'neo-textfield-error'}).vdom;
1256
+ errorNode = VDomUtil.findVdomChild(me.vdom, {cls: 'neo-textfield-error'}).vdom;
1255
1257
 
1256
1258
  if (!isValid) {
1257
1259
  errorNode.html = me.error;
@@ -137,16 +137,16 @@ class DateSelectorModel extends Model {
137
137
  register(component) {
138
138
  super.register(component);
139
139
 
140
- let me = this,
141
- id = me.id,
142
- view = me.view;
140
+ let me = this,
141
+ scope = {scope: me.id},
142
+ view = me.view;
143
143
 
144
144
  if (view.keys) {
145
145
  view.keys._keys.push(
146
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
147
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
148
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
149
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
146
+ {fn: 'onKeyDownDown' ,key: 'Down' ,...scope},
147
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,...scope},
148
+ {fn: 'onKeyDownRight' ,key: 'Right' ,...scope},
149
+ {fn: 'onKeyDownUp' ,key: 'Up' ,...scope}
150
150
  );
151
151
  }
152
152
  }
@@ -155,16 +155,16 @@ class DateSelectorModel extends Model {
155
155
  *
156
156
  */
157
157
  unregister() {
158
- let me = this,
159
- id = me.id,
160
- view = me.view;
158
+ let me = this,
159
+ scope = {scope: me.id},
160
+ view = me.view;
161
161
 
162
162
  if (view.keys) {
163
163
  view.keys.removeKeys([
164
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
165
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
166
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
167
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
164
+ {fn: 'onKeyDownDown' ,key: 'Down' ,...scope},
165
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,...scope},
166
+ {fn: 'onKeyDownRight' ,key: 'Right' ,...scope},
167
+ {fn: 'onKeyDownUp' ,key: 'Up' ,...scope}
168
168
  ]);
169
169
  }
170
170