attrs-in-props 3.8.8 → 3.14.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/README.md CHANGED
@@ -47,7 +47,7 @@ Resolves a prop value: executes dynamic values and replaces `{{template}}` liter
47
47
  import { resolvePropValue } from 'attrs-in-props'
48
48
 
49
49
  // In an attr handler:
50
- const src = resolvePropValue(el, el.props.src)
50
+ const src = resolvePropValue(el, el.src)
51
51
  ```
52
52
 
53
53
  ### `ATTR_TRANSFORMS`
@@ -110,7 +110,7 @@ const Button = {
110
110
  // $ prefix: global case from context.cases
111
111
  '$isSafari': { disabled: true, 'aria-label': 'Safari' },
112
112
 
113
- // . prefix: truthy (props/state first, then context.cases)
113
+ // . prefix: truthy (element/state first, then context.cases)
114
114
  '.isActive': { aria: { expanded: true }, 'data-state': 'open' },
115
115
 
116
116
  // ! prefix: falsy
package/dist/cjs/index.js CHANGED
@@ -32,7 +32,7 @@ __export(index_exports, {
32
32
  resolvePropValue: () => resolvePropValue
33
33
  });
34
34
  module.exports = __toCommonJS(index_exports);
35
- var import_utils = require("@domql/utils");
35
+ var import_utils = require("@symbo.ls/utils");
36
36
  const ARIA_ROLES = [
37
37
  "alert",
38
38
  "alertdialog",
@@ -1069,7 +1069,7 @@ const resolvePropValue = (el, value) => {
1069
1069
  return resolved;
1070
1070
  };
1071
1071
  const resolveFileSource = (el, value) => {
1072
- let src = (el.props.preSrc || "") + (resolvePropValue(el, value) || "");
1072
+ let src = (el.preSrc || "") + (resolvePropValue(el, value) || "");
1073
1073
  if (!src) return;
1074
1074
  try {
1075
1075
  new URL(src);
@@ -1077,25 +1077,41 @@ const resolveFileSource = (el, value) => {
1077
1077
  } catch (e) {
1078
1078
  }
1079
1079
  const { context } = el;
1080
- if (!context.files) return src;
1081
- const fileSrc = src.startsWith("/files/") ? src.slice(7) : src;
1082
- const file = context.files[src] || context.files[fileSrc];
1083
- if (file && file.content) return file.content.src;
1080
+ if (!context.files && !context.assets) return src;
1081
+ if (src.startsWith("/assets/")) {
1082
+ const key = src.slice(8);
1083
+ const asset = context.assets && (context.assets[src] || context.assets[key]);
1084
+ if (asset && asset.content) return asset.content.src;
1085
+ return src;
1086
+ }
1087
+ if (src.startsWith("/files/")) {
1088
+ const key = src.slice(7);
1089
+ const file = context.files && (context.files[src] || context.files[key]);
1090
+ if (file && file.content) return file.content.src;
1091
+ return src;
1092
+ }
1093
+ if (context.assets) {
1094
+ const asset = context.assets[src];
1095
+ if (asset && asset.content) return asset.content.src;
1096
+ }
1097
+ if (context.files) {
1098
+ const file = context.files[src];
1099
+ if (file && file.content) return file.content.src;
1100
+ }
1084
1101
  return src;
1085
1102
  };
1086
1103
  const ATTR_TRANSFORMS = {
1087
- src: (el) => resolveFileSource(el, el.props.src),
1088
- href: (el) => resolvePropValue(el, el.props.href),
1089
- action: (el) => resolvePropValue(el, el.props.action),
1090
- poster: (el) => resolveFileSource(el, el.props.poster),
1091
- data: (el) => resolvePropValue(el, el.props.data)
1104
+ src: (el) => resolveFileSource(el, el.src),
1105
+ href: (el) => resolvePropValue(el, el.href),
1106
+ action: (el) => resolvePropValue(el, el.action),
1107
+ poster: (el) => resolveFileSource(el, el.poster),
1108
+ data: (el) => resolvePropValue(el, el.data)
1092
1109
  };
1093
1110
  const applyAttrTransforms = (element) => {
1094
1111
  const tag = element.tag || "div";
1095
- const { props } = element;
1096
1112
  const result = {};
1097
1113
  for (const attr in ATTR_TRANSFORMS) {
1098
- if (props[attr] !== void 0 && checkAttributeByTagName(tag, attr)) {
1114
+ if (element[attr] !== void 0 && checkAttributeByTagName(tag, attr)) {
1099
1115
  const val = ATTR_TRANSFORMS[attr](element);
1100
1116
  if (val !== void 0) result[attr] = val;
1101
1117
  }
@@ -1111,10 +1127,10 @@ const resolveCase = (caseKey, element) => {
1111
1127
  const evaluateCondition = (prefix, caseKey, element) => {
1112
1128
  if (prefix === "$") {
1113
1129
  let result = resolveCase(caseKey, element);
1114
- if (result === void 0) result = !!element.props?.[caseKey];
1130
+ if (result === void 0) result = !!element[caseKey];
1115
1131
  return result;
1116
1132
  }
1117
- let isTruthy = element.props[caseKey] === true || element.state[caseKey] || element[caseKey];
1133
+ let isTruthy = element[caseKey] === true || element.state[caseKey];
1118
1134
  if (!isTruthy) {
1119
1135
  const caseResult = resolveCase(caseKey, element);
1120
1136
  if (caseResult !== void 0) isTruthy = caseResult;
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { isDefined, isFunction, isString } from "@domql/utils";
1
+ import { isDefined, isFunction, isString } from "@symbo.ls/utils";
2
2
  const ARIA_ROLES = [
3
3
  "alert",
4
4
  "alertdialog",
@@ -1035,7 +1035,7 @@ const resolvePropValue = (el, value) => {
1035
1035
  return resolved;
1036
1036
  };
1037
1037
  const resolveFileSource = (el, value) => {
1038
- let src = (el.props.preSrc || "") + (resolvePropValue(el, value) || "");
1038
+ let src = (el.preSrc || "") + (resolvePropValue(el, value) || "");
1039
1039
  if (!src) return;
1040
1040
  try {
1041
1041
  new URL(src);
@@ -1043,25 +1043,41 @@ const resolveFileSource = (el, value) => {
1043
1043
  } catch (e) {
1044
1044
  }
1045
1045
  const { context } = el;
1046
- if (!context.files) return src;
1047
- const fileSrc = src.startsWith("/files/") ? src.slice(7) : src;
1048
- const file = context.files[src] || context.files[fileSrc];
1049
- if (file && file.content) return file.content.src;
1046
+ if (!context.files && !context.assets) return src;
1047
+ if (src.startsWith("/assets/")) {
1048
+ const key = src.slice(8);
1049
+ const asset = context.assets && (context.assets[src] || context.assets[key]);
1050
+ if (asset && asset.content) return asset.content.src;
1051
+ return src;
1052
+ }
1053
+ if (src.startsWith("/files/")) {
1054
+ const key = src.slice(7);
1055
+ const file = context.files && (context.files[src] || context.files[key]);
1056
+ if (file && file.content) return file.content.src;
1057
+ return src;
1058
+ }
1059
+ if (context.assets) {
1060
+ const asset = context.assets[src];
1061
+ if (asset && asset.content) return asset.content.src;
1062
+ }
1063
+ if (context.files) {
1064
+ const file = context.files[src];
1065
+ if (file && file.content) return file.content.src;
1066
+ }
1050
1067
  return src;
1051
1068
  };
1052
1069
  const ATTR_TRANSFORMS = {
1053
- src: (el) => resolveFileSource(el, el.props.src),
1054
- href: (el) => resolvePropValue(el, el.props.href),
1055
- action: (el) => resolvePropValue(el, el.props.action),
1056
- poster: (el) => resolveFileSource(el, el.props.poster),
1057
- data: (el) => resolvePropValue(el, el.props.data)
1070
+ src: (el) => resolveFileSource(el, el.src),
1071
+ href: (el) => resolvePropValue(el, el.href),
1072
+ action: (el) => resolvePropValue(el, el.action),
1073
+ poster: (el) => resolveFileSource(el, el.poster),
1074
+ data: (el) => resolvePropValue(el, el.data)
1058
1075
  };
1059
1076
  const applyAttrTransforms = (element) => {
1060
1077
  const tag = element.tag || "div";
1061
- const { props } = element;
1062
1078
  const result = {};
1063
1079
  for (const attr in ATTR_TRANSFORMS) {
1064
- if (props[attr] !== void 0 && checkAttributeByTagName(tag, attr)) {
1080
+ if (element[attr] !== void 0 && checkAttributeByTagName(tag, attr)) {
1065
1081
  const val = ATTR_TRANSFORMS[attr](element);
1066
1082
  if (val !== void 0) result[attr] = val;
1067
1083
  }
@@ -1077,10 +1093,10 @@ const resolveCase = (caseKey, element) => {
1077
1093
  const evaluateCondition = (prefix, caseKey, element) => {
1078
1094
  if (prefix === "$") {
1079
1095
  let result = resolveCase(caseKey, element);
1080
- if (result === void 0) result = !!element.props?.[caseKey];
1096
+ if (result === void 0) result = !!element[caseKey];
1081
1097
  return result;
1082
1098
  }
1083
- let isTruthy = element.props[caseKey] === true || element.state[caseKey] || element[caseKey];
1099
+ let isTruthy = element[caseKey] === true || element.state[caseKey];
1084
1100
  if (!isTruthy) {
1085
1101
  const caseResult = resolveCase(caseKey, element);
1086
1102
  if (caseResult !== void 0) isTruthy = caseResult;
@@ -21,47 +21,53 @@ var AttrsInProps = (() => {
21
21
  };
22
22
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
23
 
24
- // ../utils/dist/esm/globals.js
24
+ // ../utils/globals.js
25
25
  var window2, document2;
26
26
  var init_globals = __esm({
27
- "../utils/dist/esm/globals.js"() {
27
+ "../utils/globals.js"() {
28
+ "use strict";
28
29
  window2 = globalThis;
29
30
  document2 = window2.document;
30
31
  }
31
32
  });
32
33
 
33
- // ../utils/dist/esm/node.js
34
+ // ../utils/node.js
34
35
  var init_node = __esm({
35
- "../utils/dist/esm/node.js"() {
36
+ "../utils/node.js"() {
37
+ "use strict";
36
38
  }
37
39
  });
38
40
 
39
- // ../utils/dist/esm/types.js
41
+ // ../utils/types.js
40
42
  var isString, isFunction, isDefined;
41
43
  var init_types = __esm({
42
- "../utils/dist/esm/types.js"() {
44
+ "../utils/types.js"() {
45
+ "use strict";
43
46
  isString = (arg) => typeof arg === "string";
44
47
  isFunction = (arg) => typeof arg === "function";
45
48
  isDefined = (arg) => arg !== void 0;
46
49
  }
47
50
  });
48
51
 
49
- // ../utils/dist/esm/array.js
52
+ // ../utils/array.js
50
53
  var init_array = __esm({
51
- "../utils/dist/esm/array.js"() {
54
+ "../utils/array.js"() {
55
+ "use strict";
52
56
  }
53
57
  });
54
58
 
55
- // ../utils/dist/esm/string.js
59
+ // ../utils/string.js
56
60
  var init_string = __esm({
57
- "../utils/dist/esm/string.js"() {
61
+ "../utils/string.js"() {
62
+ "use strict";
58
63
  }
59
64
  });
60
65
 
61
- // ../utils/dist/esm/keys.js
66
+ // ../utils/keys.js
62
67
  var STATE_METHODS, PROPS_METHODS, METHODS, METHODS_EXL;
63
68
  var init_keys = __esm({
64
- "../utils/dist/esm/keys.js"() {
69
+ "../utils/keys.js"() {
70
+ "use strict";
65
71
  STATE_METHODS = /* @__PURE__ */ new Set([
66
72
  "update",
67
73
  "parse",
@@ -131,7 +137,9 @@ var AttrsInProps = (() => {
131
137
  "getContext",
132
138
  "getQuery",
133
139
  "getDB",
134
- "getChildren"
140
+ "getChildren",
141
+ "preventContentUpdate",
142
+ "preventContentRecreate"
135
143
  ]);
136
144
  METHODS_EXL = /* @__PURE__ */ new Set([
137
145
  "node",
@@ -146,119 +154,228 @@ var AttrsInProps = (() => {
146
154
  }
147
155
  });
148
156
 
149
- // ../utils/dist/esm/object.js
157
+ // ../utils/object.js
150
158
  var init_object = __esm({
151
- "../utils/dist/esm/object.js"() {
159
+ "../utils/object.js"() {
160
+ "use strict";
152
161
  }
153
162
  });
154
163
 
155
- // ../utils/dist/esm/key.js
164
+ // ../utils/key.js
156
165
  var init_key = __esm({
157
- "../utils/dist/esm/key.js"() {
166
+ "../utils/key.js"() {
167
+ "use strict";
158
168
  }
159
169
  });
160
170
 
161
- // ../utils/dist/esm/env.js
171
+ // ../utils/env.js
162
172
  var init_env = __esm({
163
- "../utils/dist/esm/env.js"() {
173
+ "../utils/env.js"() {
174
+ "use strict";
164
175
  }
165
176
  });
166
177
 
167
- // ../utils/dist/esm/function.js
178
+ // ../utils/function.js
168
179
  var init_function = __esm({
169
- "../utils/dist/esm/function.js"() {
180
+ "../utils/function.js"() {
181
+ "use strict";
170
182
  }
171
183
  });
172
184
 
173
- // ../utils/dist/esm/if.js
185
+ // ../utils/if.js
174
186
  var init_if = __esm({
175
- "../utils/dist/esm/if.js"() {
187
+ "../utils/if.js"() {
188
+ "use strict";
176
189
  }
177
190
  });
178
191
 
179
- // ../utils/dist/esm/log.js
192
+ // ../utils/log.js
180
193
  var init_log = __esm({
181
- "../utils/dist/esm/log.js"() {
194
+ "../utils/log.js"() {
195
+ "use strict";
182
196
  }
183
197
  });
184
198
 
185
- // ../utils/dist/esm/cookie.js
199
+ // ../utils/cookie.js
186
200
  var isMobile;
187
201
  var init_cookie = __esm({
188
- "../utils/dist/esm/cookie.js"() {
202
+ "../utils/cookie.js"() {
203
+ "use strict";
189
204
  isMobile = (() => typeof navigator === "undefined" ? false : /Mobi/.test(navigator.userAgent))();
190
205
  }
191
206
  });
192
207
 
193
- // ../utils/dist/esm/tags.js
208
+ // ../utils/tags.js
194
209
  var init_tags = __esm({
195
- "../utils/dist/esm/tags.js"() {
210
+ "../utils/tags.js"() {
211
+ "use strict";
196
212
  }
197
213
  });
198
214
 
199
- // ../utils/dist/esm/extends.js
215
+ // ../utils/extends.js
200
216
  var init_extends = __esm({
201
- "../utils/dist/esm/extends.js"() {
217
+ "../utils/extends.js"() {
218
+ "use strict";
202
219
  }
203
220
  });
204
221
 
205
- // ../utils/dist/esm/component.js
222
+ // ../utils/component.js
206
223
  var init_component = __esm({
207
- "../utils/dist/esm/component.js"() {
224
+ "../utils/component.js"() {
225
+ "use strict";
208
226
  }
209
227
  });
210
228
 
211
- // ../utils/dist/esm/props.js
229
+ // ../utils/props.js
212
230
  var init_props = __esm({
213
- "../utils/dist/esm/props.js"() {
231
+ "../utils/props.js"() {
232
+ "use strict";
214
233
  }
215
234
  });
216
235
 
217
- // ../utils/dist/esm/element.js
236
+ // ../utils/element.js
218
237
  var init_element = __esm({
219
- "../utils/dist/esm/element.js"() {
238
+ "../utils/element.js"() {
239
+ "use strict";
220
240
  }
221
241
  });
222
242
 
223
- // ../utils/dist/esm/state.js
243
+ // ../utils/state.js
224
244
  var init_state = __esm({
225
- "../utils/dist/esm/state.js"() {
245
+ "../utils/state.js"() {
246
+ "use strict";
226
247
  }
227
248
  });
228
249
 
229
- // ../utils/dist/esm/scope.js
250
+ // ../utils/scope.js
230
251
  var init_scope = __esm({
231
- "../utils/dist/esm/scope.js"() {
252
+ "../utils/scope.js"() {
253
+ "use strict";
232
254
  }
233
255
  });
234
256
 
235
- // ../utils/dist/esm/triggerEvent.js
257
+ // ../utils/triggerEvent.js
236
258
  var init_triggerEvent = __esm({
237
- "../utils/dist/esm/triggerEvent.js"() {
259
+ "../utils/triggerEvent.js"() {
260
+ "use strict";
238
261
  }
239
262
  });
240
263
 
241
- // ../utils/dist/esm/cache.js
264
+ // ../utils/cache.js
242
265
  var init_cache = __esm({
243
- "../utils/dist/esm/cache.js"() {
266
+ "../utils/cache.js"() {
267
+ "use strict";
244
268
  }
245
269
  });
246
270
 
247
- // ../utils/dist/esm/methods.js
271
+ // ../utils/methods.js
248
272
  var init_methods = __esm({
249
- "../utils/dist/esm/methods.js"() {
273
+ "../utils/methods.js"() {
274
+ "use strict";
250
275
  }
251
276
  });
252
277
 
253
- // ../utils/dist/esm/update.js
278
+ // ../utils/update.js
254
279
  var init_update = __esm({
255
- "../utils/dist/esm/update.js"() {
280
+ "../utils/update.js"() {
281
+ "use strict";
256
282
  }
257
283
  });
258
284
 
259
- // ../utils/dist/esm/index.js
260
- var init_esm = __esm({
261
- "../utils/dist/esm/index.js"() {
285
+ // ../utils/projectKeys.js
286
+ var init_projectKeys = __esm({
287
+ "../utils/projectKeys.js"() {
288
+ }
289
+ });
290
+
291
+ // ../utils/browser.js
292
+ var init_browser = __esm({
293
+ "../utils/browser.js"() {
294
+ "use strict";
295
+ }
296
+ });
297
+
298
+ // ../utils/cdn.js
299
+ var init_cdn = __esm({
300
+ "../utils/cdn.js"() {
301
+ "use strict";
302
+ }
303
+ });
304
+
305
+ // ../utils/date.js
306
+ var init_date = __esm({
307
+ "../utils/date.js"() {
308
+ "use strict";
309
+ }
310
+ });
311
+
312
+ // ../utils/detectHeight.js
313
+ var init_detectHeight = __esm({
314
+ "../utils/detectHeight.js"() {
315
+ "use strict";
316
+ }
317
+ });
318
+
319
+ // ../utils/fibonacci.js
320
+ var init_fibonacci = __esm({
321
+ "../utils/fibonacci.js"() {
322
+ "use strict";
323
+ }
324
+ });
325
+
326
+ // ../utils/files.js
327
+ var init_files = __esm({
328
+ "../utils/files.js"() {
329
+ "use strict";
330
+ }
331
+ });
332
+
333
+ // ../utils/load.js
334
+ var init_load = __esm({
335
+ "../utils/load.js"() {
336
+ "use strict";
337
+ }
338
+ });
339
+
340
+ // ../utils/metadata.js
341
+ var init_metadata = __esm({
342
+ "../utils/metadata.js"() {
343
+ "use strict";
344
+ }
345
+ });
346
+
347
+ // ../utils/scaling.js
348
+ var init_scaling = __esm({
349
+ "../utils/scaling.js"() {
350
+ "use strict";
351
+ }
352
+ });
353
+
354
+ // ../utils/sharedLibraries.js
355
+ var init_sharedLibraries = __esm({
356
+ "../utils/sharedLibraries.js"() {
357
+ "use strict";
358
+ }
359
+ });
360
+
361
+ // ../utils/string-extra.js
362
+ var init_string_extra = __esm({
363
+ "../utils/string-extra.js"() {
364
+ "use strict";
365
+ }
366
+ });
367
+
368
+ // ../utils/style.js
369
+ var init_style = __esm({
370
+ "../utils/style.js"() {
371
+ "use strict";
372
+ }
373
+ });
374
+
375
+ // ../utils/index.js
376
+ var init_utils = __esm({
377
+ "../utils/index.js"() {
378
+ "use strict";
262
379
  init_key();
263
380
  init_env();
264
381
  init_types();
@@ -283,6 +400,19 @@ var AttrsInProps = (() => {
283
400
  init_cache();
284
401
  init_update();
285
402
  init_triggerEvent();
403
+ init_projectKeys();
404
+ init_browser();
405
+ init_cdn();
406
+ init_date();
407
+ init_detectHeight();
408
+ init_fibonacci();
409
+ init_files();
410
+ init_load();
411
+ init_metadata();
412
+ init_scaling();
413
+ init_sharedLibraries();
414
+ init_string_extra();
415
+ init_style();
286
416
  }
287
417
  });
288
418
 
@@ -302,7 +432,7 @@ var AttrsInProps = (() => {
302
432
  resolveFileSource: () => resolveFileSource,
303
433
  resolvePropValue: () => resolvePropValue
304
434
  });
305
- init_esm();
435
+ init_utils();
306
436
  var ARIA_ROLES = [
307
437
  "alert",
308
438
  "alertdialog",
@@ -1339,7 +1469,7 @@ var AttrsInProps = (() => {
1339
1469
  return resolved;
1340
1470
  };
1341
1471
  var resolveFileSource = (el, value) => {
1342
- let src = (el.props.preSrc || "") + (resolvePropValue(el, value) || "");
1472
+ let src = (el.preSrc || "") + (resolvePropValue(el, value) || "");
1343
1473
  if (!src) return;
1344
1474
  try {
1345
1475
  new URL(src);
@@ -1347,25 +1477,41 @@ var AttrsInProps = (() => {
1347
1477
  } catch (e) {
1348
1478
  }
1349
1479
  const { context } = el;
1350
- if (!context.files) return src;
1351
- const fileSrc = src.startsWith("/files/") ? src.slice(7) : src;
1352
- const file = context.files[src] || context.files[fileSrc];
1353
- if (file && file.content) return file.content.src;
1480
+ if (!context.files && !context.assets) return src;
1481
+ if (src.startsWith("/assets/")) {
1482
+ const key = src.slice(8);
1483
+ const asset = context.assets && (context.assets[src] || context.assets[key]);
1484
+ if (asset && asset.content) return asset.content.src;
1485
+ return src;
1486
+ }
1487
+ if (src.startsWith("/files/")) {
1488
+ const key = src.slice(7);
1489
+ const file = context.files && (context.files[src] || context.files[key]);
1490
+ if (file && file.content) return file.content.src;
1491
+ return src;
1492
+ }
1493
+ if (context.assets) {
1494
+ const asset = context.assets[src];
1495
+ if (asset && asset.content) return asset.content.src;
1496
+ }
1497
+ if (context.files) {
1498
+ const file = context.files[src];
1499
+ if (file && file.content) return file.content.src;
1500
+ }
1354
1501
  return src;
1355
1502
  };
1356
1503
  var ATTR_TRANSFORMS = {
1357
- src: (el) => resolveFileSource(el, el.props.src),
1358
- href: (el) => resolvePropValue(el, el.props.href),
1359
- action: (el) => resolvePropValue(el, el.props.action),
1360
- poster: (el) => resolveFileSource(el, el.props.poster),
1361
- data: (el) => resolvePropValue(el, el.props.data)
1504
+ src: (el) => resolveFileSource(el, el.src),
1505
+ href: (el) => resolvePropValue(el, el.href),
1506
+ action: (el) => resolvePropValue(el, el.action),
1507
+ poster: (el) => resolveFileSource(el, el.poster),
1508
+ data: (el) => resolvePropValue(el, el.data)
1362
1509
  };
1363
1510
  var applyAttrTransforms = (element) => {
1364
1511
  const tag = element.tag || "div";
1365
- const { props } = element;
1366
1512
  const result = {};
1367
1513
  for (const attr in ATTR_TRANSFORMS) {
1368
- if (props[attr] !== void 0 && checkAttributeByTagName(tag, attr)) {
1514
+ if (element[attr] !== void 0 && checkAttributeByTagName(tag, attr)) {
1369
1515
  const val = ATTR_TRANSFORMS[attr](element);
1370
1516
  if (val !== void 0) result[attr] = val;
1371
1517
  }
@@ -1381,10 +1527,10 @@ var AttrsInProps = (() => {
1381
1527
  var evaluateCondition = (prefix, caseKey, element) => {
1382
1528
  if (prefix === "$") {
1383
1529
  let result = resolveCase(caseKey, element);
1384
- if (result === void 0) result = !!element.props?.[caseKey];
1530
+ if (result === void 0) result = !!element[caseKey];
1385
1531
  return result;
1386
1532
  }
1387
- let isTruthy = element.props[caseKey] === true || element.state[caseKey] || element[caseKey];
1533
+ let isTruthy = element[caseKey] === true || element.state[caseKey];
1388
1534
  if (!isTruthy) {
1389
1535
  const caseResult = resolveCase(caseKey, element);
1390
1536
  if (caseResult !== void 0) isTruthy = caseResult;
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- import { isDefined, isFunction, isString } from '@domql/utils'
3
+ import { isDefined, isFunction, isString } from '@symbo.ls/utils'
4
4
 
5
5
  export const ARIA_ROLES = [
6
6
  'alert',
@@ -1136,22 +1136,42 @@ export const resolvePropValue = (el, value) => {
1136
1136
  }
1137
1137
 
1138
1138
  /**
1139
- * Resolve a file URL from context.files.
1140
- * Handles absolute URLs (passthrough), /files/ prefix stripping,
1141
- * and file lookup for bundler-resolved paths.
1139
+ * Resolve a file URL from context.files or context.assets.
1140
+ * Handles absolute URLs (passthrough), /files/ and /assets/ prefix routing,
1141
+ * and lookup for bundler-resolved paths. An explicit `/files/` or `/assets/`
1142
+ * prefix is authoritative — we do NOT cross-route between the two maps.
1142
1143
  */
1143
1144
  export const resolveFileSource = (el, value) => {
1144
- let src = (el.props.preSrc || '') + (resolvePropValue(el, value) || '')
1145
+ let src = (el.preSrc || '') + (resolvePropValue(el, value) || '')
1145
1146
  if (!src) return
1146
1147
 
1147
1148
  try { new URL(src); return src } catch (e) { } // absolute URL — passthrough
1148
1149
 
1149
1150
  const { context } = el
1150
- if (!context.files) return src
1151
+ if (!context.files && !context.assets) return src
1151
1152
 
1152
- const fileSrc = src.startsWith('/files/') ? src.slice(7) : src
1153
- const file = context.files[src] || context.files[fileSrc]
1154
- if (file && file.content) return file.content.src
1153
+ if (src.startsWith('/assets/')) {
1154
+ const key = src.slice(8)
1155
+ const asset = context.assets && (context.assets[src] || context.assets[key])
1156
+ if (asset && asset.content) return asset.content.src
1157
+ return src
1158
+ }
1159
+ if (src.startsWith('/files/')) {
1160
+ const key = src.slice(7)
1161
+ const file = context.files && (context.files[src] || context.files[key])
1162
+ if (file && file.content) return file.content.src
1163
+ return src
1164
+ }
1165
+
1166
+ // Unprefixed: try assets first (newer system), then files.
1167
+ if (context.assets) {
1168
+ const asset = context.assets[src]
1169
+ if (asset && asset.content) return asset.content.src
1170
+ }
1171
+ if (context.files) {
1172
+ const file = context.files[src]
1173
+ if (file && file.content) return file.content.src
1174
+ }
1155
1175
 
1156
1176
  return src
1157
1177
  }
@@ -1163,11 +1183,11 @@ export const resolveFileSource = (el, value) => {
1163
1183
  * src and poster also resolve from context.files for media elements.
1164
1184
  */
1165
1185
  export const ATTR_TRANSFORMS = {
1166
- src: (el) => resolveFileSource(el, el.props.src),
1167
- href: (el) => resolvePropValue(el, el.props.href),
1168
- action: (el) => resolvePropValue(el, el.props.action),
1169
- poster: (el) => resolveFileSource(el, el.props.poster),
1170
- data: (el) => resolvePropValue(el, el.props.data)
1186
+ src: (el) => resolveFileSource(el, el.src),
1187
+ href: (el) => resolvePropValue(el, el.href),
1188
+ action: (el) => resolvePropValue(el, el.action),
1189
+ poster: (el) => resolveFileSource(el, el.poster),
1190
+ data: (el) => resolvePropValue(el, el.data)
1171
1191
  }
1172
1192
 
1173
1193
  /**
@@ -1176,10 +1196,9 @@ export const ATTR_TRANSFORMS = {
1176
1196
  */
1177
1197
  export const applyAttrTransforms = (element) => {
1178
1198
  const tag = element.tag || 'div'
1179
- const { props } = element
1180
1199
  const result = {}
1181
1200
  for (const attr in ATTR_TRANSFORMS) {
1182
- if (props[attr] !== undefined && checkAttributeByTagName(tag, attr)) {
1201
+ if (element[attr] !== undefined && checkAttributeByTagName(tag, attr)) {
1183
1202
  const val = ATTR_TRANSFORMS[attr](element)
1184
1203
  if (val !== undefined) result[attr] = val
1185
1204
  }
@@ -1205,12 +1224,12 @@ const resolveCase = (caseKey, element) => {
1205
1224
  const evaluateCondition = (prefix, caseKey, element) => {
1206
1225
  if (prefix === '$') {
1207
1226
  let result = resolveCase(caseKey, element)
1208
- if (result === undefined) result = !!element.props?.[caseKey]
1227
+ if (result === undefined) result = !!element[caseKey]
1209
1228
  return result
1210
1229
  }
1211
1230
 
1212
- // . and ! prefixes: check props/state/element first, then context.cases
1213
- let isTruthy = element.props[caseKey] === true || element.state[caseKey] || element[caseKey]
1231
+ // . and ! prefixes: check element/state first, then context.cases
1232
+ let isTruthy = element[caseKey] === true || element.state[caseKey]
1214
1233
  if (!isTruthy) {
1215
1234
  const caseResult = resolveCase(caseKey, element)
1216
1235
  if (caseResult !== undefined) isTruthy = caseResult
package/package.json CHANGED
@@ -2,34 +2,32 @@
2
2
  "name": "attrs-in-props",
3
3
  "description": "Utilize props as attributes",
4
4
  "author": "symbo.ls",
5
- "version": "3.8.8",
5
+ "version": "3.14.0",
6
6
  "repository": "https://github.com/symbo-ls/smbls",
7
7
  "type": "module",
8
- "module": "./dist/esm/index.js",
8
+ "module": "./index.js",
9
9
  "unpkg": "./dist/iife/index.js",
10
10
  "jsdelivr": "./dist/iife/index.js",
11
- "main": "./dist/cjs/index.js",
11
+ "main": "./index.js",
12
12
  "gitHead": "9fc1b79b41cdc725ca6b24aec64920a599634681",
13
13
  "dependencies": {
14
- "@domql/utils": "^3.8.8"
14
+ "@symbo.ls/utils": "^3.14.0"
15
15
  },
16
16
  "source": "index.js",
17
- "browser": "./dist/esm/index.js",
17
+ "browser": "./index.js",
18
18
  "sideEffects": false,
19
19
  "exports": {
20
- ".": {
21
- "import": "./dist/esm/index.js",
22
- "require": "./dist/cjs/index.js"
23
- }
20
+ ".": "./index.js",
21
+ "./package.json": "./package.json"
24
22
  },
25
23
  "files": [
26
24
  "dist",
27
25
  "*.js"
28
26
  ],
29
27
  "scripts": {
30
- "build:esm": "cross-env NODE_ENV=$NODE_ENV esbuild *.js --target=es2020 --format=esm --outdir=dist/esm --define:process.env.NODE_ENV=process.env.NODE_ENV",
31
- "build:cjs": "cross-env NODE_ENV=$NODE_ENV esbuild *.js --target=node18 --format=cjs --outdir=dist/cjs --define:process.env.NODE_ENV=process.env.NODE_ENV",
32
- "build:iife": "cross-env NODE_ENV=$NODE_ENV esbuild index.js --bundle --target=es2020 --format=iife --global-name=AttrsInProps --outfile=dist/iife/index.js --define:process.env.NODE_ENV=process.env.NODE_ENV",
28
+ "build:esm": "NODE_ENV=$NODE_ENV esbuild *.js --target=es2020 --format=esm --outdir=dist/esm --define:process.env.NODE_ENV=process.env.NODE_ENV",
29
+ "build:cjs": "NODE_ENV=$NODE_ENV esbuild *.js --target=node18 --format=cjs --outdir=dist/cjs --define:process.env.NODE_ENV=process.env.NODE_ENV",
30
+ "build:iife": "NODE_ENV=$NODE_ENV esbuild index.js --bundle --target=es2020 --format=iife --global-name=AttrsInProps --outfile=dist/iife/index.js --define:process.env.NODE_ENV=process.env.NODE_ENV",
33
31
  "build": "node ../../build/build.js",
34
32
  "copy:package:cjs": "cp ../../build/package-cjs.json dist/cjs/package.json",
35
33
  "prepublish": "npm run build && npm run copy:package:cjs"