regor 1.6.9 → 1.7.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.
@@ -1125,6 +1125,132 @@ var isScope = (value) => {
1125
1125
  return scopeSymbol2 in value;
1126
1126
  };
1127
1127
 
1128
+ // src/reactivity/unref.ts
1129
+ var unref = (value) => {
1130
+ const anyValue = value;
1131
+ return anyValue != null && anyValue[srefSymbol] > 0 ? anyValue() : anyValue;
1132
+ };
1133
+
1134
+ // src/directives/attr.ts
1135
+ var xlinkNS = "http://www.w3.org/1999/xlink";
1136
+ var booleanAttributes = {
1137
+ itemscope: 2,
1138
+ allowfullscreen: 2,
1139
+ formnovalidate: 2,
1140
+ ismap: 2,
1141
+ nomodule: 2,
1142
+ novalidate: 2,
1143
+ readonly: 2,
1144
+ async: 1,
1145
+ autofocus: 1,
1146
+ autoplay: 1,
1147
+ controls: 1,
1148
+ default: 1,
1149
+ defer: 1,
1150
+ disabled: 1,
1151
+ hidden: 1,
1152
+ inert: 1,
1153
+ loop: 1,
1154
+ open: 1,
1155
+ required: 1,
1156
+ reversed: 1,
1157
+ scoped: 1,
1158
+ seamless: 1,
1159
+ checked: 1,
1160
+ muted: 1,
1161
+ multiple: 1,
1162
+ selected: 1
1163
+ };
1164
+ var updateAttr = (el, values, previousValues, option, previousOption, flags) => {
1165
+ var _a;
1166
+ if (option) {
1167
+ option = unref(option);
1168
+ if (flags && flags.includes("camel")) option = camelize(option);
1169
+ patchAttr(
1170
+ el,
1171
+ option,
1172
+ unref(values[0]),
1173
+ unref(previousOption)
1174
+ );
1175
+ return;
1176
+ }
1177
+ const len = values.length;
1178
+ for (let i = 0; i < len; ++i) {
1179
+ const next = values[i];
1180
+ if (isArray(next)) {
1181
+ const previousKey = unref((_a = previousValues == null ? void 0 : previousValues[i]) == null ? void 0 : _a[0]);
1182
+ const key = unref(next[0]);
1183
+ const value = unref(next[1]);
1184
+ patchAttr(el, key, value, previousKey);
1185
+ } else if (isObject(next)) {
1186
+ for (const item of Object.entries(next)) {
1187
+ const key = item[0];
1188
+ const value = unref(item[1]);
1189
+ const p = unref(previousValues == null ? void 0 : previousValues[i]);
1190
+ const previousKey = p && key in p ? key : void 0;
1191
+ patchAttr(el, key, value, previousKey);
1192
+ }
1193
+ } else {
1194
+ const previousKey = unref(previousValues == null ? void 0 : previousValues[i]);
1195
+ const key = unref(values[i++]);
1196
+ const value = unref(values[i]);
1197
+ patchAttr(el, key, value, previousKey);
1198
+ }
1199
+ }
1200
+ };
1201
+ var attrDirective = {
1202
+ mount: () => ({
1203
+ update: ({ el, values, previousValues, option, previousOption, flags }) => {
1204
+ updateAttr(
1205
+ el,
1206
+ values,
1207
+ previousValues,
1208
+ option,
1209
+ previousOption,
1210
+ flags
1211
+ );
1212
+ }
1213
+ })
1214
+ };
1215
+ var patchAttr = (el, key, value, previousKey) => {
1216
+ if (previousKey && previousKey !== key) {
1217
+ el.removeAttribute(previousKey);
1218
+ }
1219
+ if (isNullOrUndefined(key)) {
1220
+ warning(3 /* KeyIsEmpty */, "r-bind", el);
1221
+ return;
1222
+ }
1223
+ if (!isString(key)) {
1224
+ warning(
1225
+ 6 /* ErrorLog */,
1226
+ `Attribute key is not string at ${el.outerHTML}`,
1227
+ key
1228
+ );
1229
+ return;
1230
+ }
1231
+ if (key.startsWith("xlink:")) {
1232
+ if (isNullOrUndefined(value)) {
1233
+ el.removeAttributeNS(xlinkNS, key.slice(6, key.length));
1234
+ } else {
1235
+ el.setAttributeNS(xlinkNS, key, value);
1236
+ }
1237
+ return;
1238
+ }
1239
+ if (isNullOrUndefined(value)) {
1240
+ el.removeAttribute(key);
1241
+ return;
1242
+ }
1243
+ if (key in booleanAttributes) {
1244
+ if (toBoolean(value)) {
1245
+ el.setAttribute(key, "");
1246
+ } else {
1247
+ el.removeAttribute(key);
1248
+ }
1249
+ return;
1250
+ }
1251
+ el.setAttribute(key, value);
1252
+ };
1253
+
1128
1254
  // src/directives/context.ts
1129
1255
  var contextDirective = {
1130
1256
  collectRefObj: true,
@@ -1863,10 +1989,11 @@ var ComponentBinder = class {
1863
1989
  } else if (attrName === ":style" || attrName === bindStyleName) {
1864
1990
  mergeBinding(":style", bindStyleName, value);
1865
1991
  } else {
1866
- inheritor.setAttribute(
1867
- normalizeAttributeName(attrName, binder.__config),
1868
- value
1992
+ const normalizedName = normalizeAttributeName(
1993
+ attrName,
1994
+ binder.__config
1869
1995
  );
1996
+ patchAttr(inheritor, normalizedName, value);
1870
1997
  }
1871
1998
  };
1872
1999
  for (const { name, value } of inheritedPropAttrs) {
@@ -2208,12 +2335,6 @@ var DynamicBinder = class {
2208
2335
  }
2209
2336
  };
2210
2337
 
2211
- // src/reactivity/unref.ts
2212
- var unref = (value) => {
2213
- const anyValue = value;
2214
- return anyValue != null && anyValue[srefSymbol] > 0 ? anyValue() : anyValue;
2215
- };
2216
-
2217
2338
  // src/directives/html.ts
2218
2339
  var updateHtml = (el, values) => {
2219
2340
  const [value, replacer] = values;
@@ -3163,116 +3284,6 @@ var Binder = class {
3163
3284
  }
3164
3285
  };
3165
3286
 
3166
- // src/directives/attr.ts
3167
- var xlinkNS = "http://www.w3.org/1999/xlink";
3168
- var booleanAttributes = {
3169
- itemscope: 2,
3170
- allowfullscreen: 2,
3171
- formnovalidate: 2,
3172
- ismap: 2,
3173
- nomodule: 2,
3174
- novalidate: 2,
3175
- readonly: 2,
3176
- async: 1,
3177
- autofocus: 1,
3178
- autoplay: 1,
3179
- controls: 1,
3180
- default: 1,
3181
- defer: 1,
3182
- disabled: 1,
3183
- hidden: 1,
3184
- inert: 1,
3185
- loop: 1,
3186
- open: 1,
3187
- required: 1,
3188
- reversed: 1,
3189
- scoped: 1,
3190
- seamless: 1,
3191
- checked: 1,
3192
- muted: 1,
3193
- multiple: 1,
3194
- selected: 1
3195
- };
3196
- function includeBooleanAttr(value) {
3197
- return !!value || value === "";
3198
- }
3199
- var updateAttr = (el, values, previousValues, option, previousOption, flags) => {
3200
- var _a;
3201
- if (option) {
3202
- if (flags && flags.includes("camel")) option = camelize(option);
3203
- patchAttribute(el, option, values[0], previousOption);
3204
- return;
3205
- }
3206
- const len = values.length;
3207
- for (let i = 0; i < len; ++i) {
3208
- const next = values[i];
3209
- if (isArray(next)) {
3210
- const previousKey = (_a = previousValues == null ? void 0 : previousValues[i]) == null ? void 0 : _a[0];
3211
- const key = next[0];
3212
- const value = next[1];
3213
- patchAttribute(el, key, value, previousKey);
3214
- } else if (isObject(next)) {
3215
- for (const item of Object.entries(next)) {
3216
- const key = item[0];
3217
- const value = item[1];
3218
- const p = previousValues == null ? void 0 : previousValues[i];
3219
- const previousKey = p && key in p ? key : void 0;
3220
- patchAttribute(el, key, value, previousKey);
3221
- }
3222
- } else {
3223
- const previousKey = previousValues == null ? void 0 : previousValues[i];
3224
- const key = values[i++];
3225
- const value = values[i];
3226
- patchAttribute(el, key, value, previousKey);
3227
- }
3228
- }
3229
- };
3230
- var attrDirective = {
3231
- mount: () => ({
3232
- update: ({ el, values, previousValues, option, previousOption, flags }) => {
3233
- updateAttr(
3234
- el,
3235
- values,
3236
- previousValues,
3237
- option,
3238
- previousOption,
3239
- flags
3240
- );
3241
- }
3242
- })
3243
- };
3244
- var patchAttribute = (el, key, value, previousKey) => {
3245
- if (previousKey && previousKey !== key) {
3246
- el.removeAttribute(previousKey);
3247
- }
3248
- if (isNullOrUndefined(key)) {
3249
- warning(3 /* KeyIsEmpty */, "r-bind", el);
3250
- return;
3251
- }
3252
- if (!isString(key)) {
3253
- warning(
3254
- 6 /* ErrorLog */,
3255
- `Attribute key is not string at ${el.outerHTML}`,
3256
- key
3257
- );
3258
- return;
3259
- }
3260
- if (key.startsWith("xlink:")) {
3261
- if (isNullOrUndefined(value)) {
3262
- el.removeAttributeNS(xlinkNS, key.slice(6, key.length));
3263
- } else {
3264
- el.setAttributeNS(xlinkNS, key, value);
3265
- }
3266
- return;
3267
- }
3268
- const isBoolean2 = key in booleanAttributes;
3269
- if (isNullOrUndefined(value) || isBoolean2 && !includeBooleanAttr(value)) {
3270
- el.removeAttribute(key);
3271
- } else {
3272
- el.setAttribute(key, isBoolean2 ? "" : value);
3273
- }
3274
- };
3275
-
3276
3287
  // src/directives/class.ts
3277
3288
  var updateClass = (el, values, previousValues) => {
3278
3289
  const len = values.length;
@@ -3654,8 +3665,10 @@ var handleRadio = (el, getModelRef) => {
3654
3665
  };
3655
3666
  var handleSelect = (el, getModelRef, parsedValue) => {
3656
3667
  const eventType = "change";
3668
+ const stopObservingOptions = observeSelectOptions(el, parsedValue);
3657
3669
  const unbinder = () => {
3658
3670
  el.removeEventListener(eventType, listener);
3671
+ stopObservingOptions();
3659
3672
  };
3660
3673
  const listener = () => {
3661
3674
  const modelRef = getModelRef();
@@ -3689,6 +3702,36 @@ var handleSelect = (el, getModelRef, parsedValue) => {
3689
3702
  el.addEventListener(eventType, listener);
3690
3703
  return unbinder;
3691
3704
  };
3705
+ var observeSelectOptions = (el, parsedValue) => {
3706
+ var _a, _b;
3707
+ const MutationObserverCtor = (_b = globalThis.MutationObserver) != null ? _b : (_a = globalThis.window) == null ? void 0 : _a.MutationObserver;
3708
+ if (!MutationObserverCtor) return () => {
3709
+ };
3710
+ let pending = false;
3711
+ let stopped = false;
3712
+ const flush = () => {
3713
+ pending = false;
3714
+ if (stopped) return;
3715
+ updateDomElementValue(el, parsedValue()[0]);
3716
+ };
3717
+ const scheduleFlush = () => {
3718
+ if (pending) return;
3719
+ pending = true;
3720
+ if (typeof queueMicrotask === "function") queueMicrotask(flush);
3721
+ else Promise.resolve().then(flush);
3722
+ };
3723
+ const observer = new MutationObserverCtor(scheduleFlush);
3724
+ observer.observe(el, {
3725
+ attributes: true,
3726
+ attributeFilter: ["value"],
3727
+ childList: true,
3728
+ subtree: true
3729
+ });
3730
+ return () => {
3731
+ stopped = true;
3732
+ observer.disconnect();
3733
+ };
3734
+ };
3692
3735
 
3693
3736
  // src/directives/on.ts
3694
3737
  var availableFlags = [
@@ -3887,7 +3930,7 @@ var propDirective = {
3887
3930
  }
3888
3931
  })
3889
3932
  };
3890
- function includeBooleanAttr2(value) {
3933
+ function includeBooleanAttr(value) {
3891
3934
  return !!value || value === "";
3892
3935
  }
3893
3936
  var patchProp = (el, key, value) => {
@@ -3919,7 +3962,7 @@ var patchProp = (el, key, value) => {
3919
3962
  if (value === "" || value == null) {
3920
3963
  const type = typeof el[key];
3921
3964
  if (type === "boolean") {
3922
- value = includeBooleanAttr2(value);
3965
+ value = includeBooleanAttr(value);
3923
3966
  } else if (value == null && type === "string") {
3924
3967
  value = "";
3925
3968
  needRemove = true;