neo.mjs 4.7.6 → 4.8.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.
@@ -144,6 +144,12 @@ class MainContainer extends ConfigurationViewport {
144
144
  labelText: 'required',
145
145
  listeners: {change: me.onConfigChange.bind(me, 'required')},
146
146
  style : {marginTop: '10px'}
147
+ }, {
148
+ module : CheckBox,
149
+ checked : me.exampleComponent.showOptionalText,
150
+ labelText: 'showOptionalText',
151
+ listeners: {change: me.onConfigChange.bind(me, 'showOptionalText')},
152
+ style : {marginTop: '10px'}
147
153
  }, {
148
154
  module : CheckBox,
149
155
  checked : me.exampleComponent.spellCheck,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "4.7.6",
3
+ "version": "4.8.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -101,6 +101,10 @@ class Text extends Base {
101
101
  * @member {String[]} labelCls_=[]
102
102
  */
103
103
  labelCls_: [],
104
+ /**
105
+ * @member {String} labelOptionalText_=' (Optional)'
106
+ */
107
+ labelOptionalText_: ' (Optional)',
104
108
  /**
105
109
  * Valid values: 'bottom', 'inline', 'left', 'right', 'top'
106
110
  * @member {String} labelPosition_='left'
@@ -137,6 +141,10 @@ class Text extends Base {
137
141
  * @member {Boolean} required_=false
138
142
  */
139
143
  required_: false,
144
+ /**
145
+ * @member {Boolean} showOptionalText_=false
146
+ */
147
+ showOptionalText_: false,
140
148
  /**
141
149
  * null => Follow the element's default behavior for spell checking
142
150
  * @member {Boolean|null} spellCheck_=false
@@ -333,6 +341,16 @@ class Text extends Base {
333
341
  me.update();
334
342
  }
335
343
 
344
+ /**
345
+ * Triggered after the labelOptionalText config got changed
346
+ * @param {String} value
347
+ * @param {String} oldValue
348
+ * @protected
349
+ */
350
+ afterSetLabelOptionalText(value, oldValue) {
351
+ this.labelText = this.labelText; // triggers a vdom update
352
+ }
353
+
336
354
  /**
337
355
  * Triggered after the labelPosition config got changed
338
356
  * @param {String} value
@@ -405,7 +423,7 @@ class Text extends Base {
405
423
  if (!me.hideLabel) {
406
424
  if (me.labelPosition === 'inline') {
407
425
  if (!isEmpty) {
408
- delete me.getCenterBorderEl().width;
426
+ delete me.getCenterBorderEl()?.width;
409
427
  }
410
428
 
411
429
  me.promiseVdomUpdate().then(() => {
@@ -521,8 +539,21 @@ class Text extends Base {
521
539
  * @protected
522
540
  */
523
541
  afterSetRequired(value, oldValue) {
524
- this.validate(); // silent
525
- this.changeInputElKey('required', value ? value : null);
542
+ let me = this;
543
+
544
+ me.validate(); // silent
545
+ me.changeInputElKey('required', value ? value : null, true); // silent update
546
+ me.labelText = me.labelText;
547
+ }
548
+
549
+ /**
550
+ * Triggered after the showOptionalText config got changed
551
+ * @param {Boolean} value
552
+ * @param {Boolean} oldValue
553
+ * @protected
554
+ */
555
+ afterSetShowOptionalText(value, oldValue) {
556
+ this.labelText = this.labelText; // triggers a vdom update
526
557
  }
527
558
 
528
559
  /**
@@ -720,6 +751,26 @@ class Text extends Base {
720
751
  return this.beforeSetEnumValue(value, oldValue, 'labelPosition');
721
752
  }
722
753
 
754
+ /**
755
+ * Triggered before the labelText config gets changed
756
+ * @param {String|null} value
757
+ * @param {String|null} oldValue
758
+ * @protected
759
+ * @returns {String}
760
+ */
761
+ beforeSetLabelText(value, oldValue) {
762
+ let me = this,
763
+ labelOptionalText = me.labelOptionalText;
764
+
765
+ if (me.showOptionalText && !me.required) {
766
+ return value + labelOptionalText;
767
+ } else if (value && value.endsWith(labelOptionalText)) {
768
+ value = value.replace(labelOptionalText, '');
769
+ }
770
+
771
+ return value;
772
+ }
773
+
723
774
  /**
724
775
  * Triggered before the subLabelCls config gets changed
725
776
  * @param {String[]} value
@@ -780,8 +831,9 @@ class Text extends Base {
780
831
  * Changes the value of a inputEl vdom object attribute or removes it in case it has no value
781
832
  * @param {String} key
782
833
  * @param {Array|Number|Object|String|null} value
834
+ * @param {Boolean} silent=false
783
835
  */
784
- changeInputElKey(key, value) {
836
+ changeInputElKey(key, value, silent=false) {
785
837
  let me = this;
786
838
 
787
839
  if (value || Neo.isBoolean(value) || value === 0) {
@@ -790,7 +842,7 @@ class Text extends Base {
790
842
  delete me.getInputEl()[key];
791
843
  }
792
844
 
793
- me.update();
845
+ !silent && me.update();
794
846
  }
795
847
 
796
848
  /**
@@ -31,6 +31,7 @@ class Stylesheet extends Base {
31
31
  'createStyleSheet',
32
32
  'deleteCssRules',
33
33
  'insertCssRules',
34
+ 'setCssVariable',
34
35
  'swapStyleSheet'
35
36
  ]
36
37
  },
@@ -264,6 +265,37 @@ class Stylesheet extends Base {
264
265
  }
265
266
  }
266
267
 
268
+ /**
269
+ * @param {Object} data
270
+ * @param {String} data.key
271
+ * @param {String} [data.priority] optionally pass 'important'
272
+ * @param {String} data.theme
273
+ * @param {String} data.value
274
+ */
275
+ setCssVariable(data) {
276
+ let key = data.key,
277
+ rule, sheet;
278
+
279
+ if (!key.startsWith('--')) {
280
+ key = '--' + key;
281
+ }
282
+
283
+ for (sheet of document.styleSheets) {
284
+ if (sheet.href.includes(data.theme)) {
285
+ for (rule of sheet.cssRules) {
286
+ if (rule.type === 1) { // CSSRule.STYLE_RULE
287
+ if (rule.style.getPropertyValue(key) !== '') {
288
+ rule.style.setProperty(key, data.value, data.priority);
289
+ return true;
290
+ }
291
+ }
292
+ }
293
+ }
294
+ }
295
+
296
+ return false;
297
+ }
298
+
267
299
  /**
268
300
  * @param {Object} data
269
301
  * @param {String} data.href