@optionfactory/ful 0.61.0 → 0.63.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.
package/dist/ful.mjs CHANGED
@@ -707,6 +707,19 @@ class Nodes {
707
707
  }
708
708
  }
709
709
 
710
+ class Events$1 {
711
+ static dispatchChange(el, value){
712
+ return el.dispatchEvent(new CustomEvent("change", {
713
+ bubbles: true,
714
+ cancelable: true,
715
+ detail: {
716
+ target: el,
717
+ value: value
718
+ }
719
+ }));
720
+ }
721
+ }
722
+
710
723
  class TemplatesRegistry {
711
724
  #idToFragment = {};
712
725
  #idToTemplate = {};
@@ -1104,7 +1117,12 @@ const makeInputFragment = (el, template, slots) => {
1104
1117
  return el;
1105
1118
  })();
1106
1119
  input.setAttribute('ful-validation-target', '');
1107
- input.addEventListener('change', (evt) => evt.stopPropagation());
1120
+ input.addEventListener('change', (evt) => {
1121
+ evt.stopPropagation();
1122
+ if(!Events$1.dispatchChange(el, el.value)){
1123
+ evt.preventDefault();
1124
+ }
1125
+ });
1108
1126
  const id = input.getAttribute('id') || el.getAttribute('input-id') || Attributes.uid('ful-input');
1109
1127
  Attributes.forward('input-', el, slots.input);
1110
1128
  Attributes.defaultValue(slots.input, "id", id);
@@ -1127,15 +1145,7 @@ class Input extends ParsedElement({
1127
1145
  return this.input.value;
1128
1146
  }
1129
1147
  set value(value) {
1130
- const success = this.dispatchEvent(new CustomEvent("change", {
1131
- bubbles: true,
1132
- cancelable: true,
1133
- detail: {
1134
- target: this,
1135
- value: value
1136
- }
1137
- }));
1138
- if(!success){
1148
+ if(!Events$1.dispatchChange(el, value)){
1139
1149
  return;
1140
1150
  }
1141
1151
  this.input.value = value;
@@ -1224,7 +1234,9 @@ class Select extends ParsedElement({
1224
1234
  shouldLoad: (query) => this.shouldLoad ? this.shouldLoad(query) : true
1225
1235
  } : {}, tsDefaultConfig, this.tsConfig));
1226
1236
  //we remove the input to move it
1227
- input.addEventListener('change', (evt) => evt.stopPropagation());
1237
+ input.addEventListener('change', (evt) => {
1238
+ evt.stopPropagation();
1239
+ });
1228
1240
  input.remove();
1229
1241
  template.renderTo(this, { id, tsId, name, input, slots });
1230
1242
  }
@@ -1236,16 +1248,12 @@ class Select extends ParsedElement({
1236
1248
  this.value = this.getAttribute("value");
1237
1249
  }
1238
1250
  }
1251
+ get value() {
1252
+ const v = this.ts.getValue();
1253
+ return v === '' ? null : v;
1254
+ }
1239
1255
  set value(value) {
1240
- const success = this.dispatchEvent(new CustomEvent("change", {
1241
- bubbles: true,
1242
- cancelable: true,
1243
- detail: {
1244
- target: this,
1245
- value: value
1246
- }
1247
- }));
1248
- if(!success){
1256
+ if(!Events.dispatchChange(this, value)){
1249
1257
  return;
1250
1258
  }
1251
1259
  (async () => {
@@ -1255,10 +1263,6 @@ class Select extends ParsedElement({
1255
1263
  this.ts.setValue(value);
1256
1264
  })();
1257
1265
  }
1258
- get value() {
1259
- const v = this.ts.getValue();
1260
- return v === '' ? null : v;
1261
- }
1262
1266
  }
1263
1267
 
1264
1268
  class RadioGroup extends ParsedElement({
@@ -1298,10 +1302,19 @@ class RadioGroup extends ParsedElement({
1298
1302
  input.setAttribute('name', `${name}-ignore`);
1299
1303
  input.setAttribute('ful-validation-target', '');
1300
1304
  input.dataset['fulBindInclude'] = 'never';
1305
+ input.addEventListener('change', (evt) => {
1306
+ evt.stopPropagation();
1307
+ console.log("stopped");
1308
+ });
1309
+ input.addEventListener('click', (evt) => {
1310
+ if(!Events.dispatchChange(this, this.value)){
1311
+ evt.preventDefault();
1312
+ }
1313
+ });
1301
1314
  const label = Fragments.fromChildNodes(el);
1302
1315
  return [input, label];
1303
1316
  });
1304
- radioEls.forEach(el => el.addEventListener('change', (evt) => evt.stopPropagation()));
1317
+
1305
1318
  radioEls.forEach(el => el.remove());
1306
1319
  template.renderTo(this, {name, slots, inputsAndLabels});
1307
1320
  }
@@ -1310,15 +1323,7 @@ class RadioGroup extends ParsedElement({
1310
1323
  return checked ? checked.value : null;
1311
1324
  }
1312
1325
  set value(value) {
1313
- const success = this.dispatchEvent(new CustomEvent("change", {
1314
- bubbles: true,
1315
- cancelable: true,
1316
- detail: {
1317
- target: this,
1318
- value: value
1319
- }
1320
- }));
1321
- if(!success){
1326
+ if(!Events.dispatchChange(this, value)){
1322
1327
  return;
1323
1328
  }
1324
1329
  this.querySelector(`input[type=radio][value=${CSS.escape(value)}]`).checked = true;