@dooboostore/simple-web-component 1.0.0 → 1.0.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.
Files changed (86) hide show
  1. package/README.md +67 -70
  2. package/dist/cjs/decorators/addEventListener.js +42 -0
  3. package/dist/cjs/decorators/addEventListener.js.map +7 -0
  4. package/dist/cjs/decorators/attributeChanged.js +24 -4
  5. package/dist/cjs/decorators/attributeChanged.js.map +2 -2
  6. package/dist/cjs/decorators/{element.js → elementDefind.js} +91 -13
  7. package/dist/cjs/decorators/elementDefind.js.map +7 -0
  8. package/dist/cjs/decorators/query.js +53 -0
  9. package/dist/cjs/decorators/query.js.map +7 -0
  10. package/dist/cjs/decorators/queryAll.js +53 -0
  11. package/dist/cjs/decorators/queryAll.js.map +7 -0
  12. package/dist/cjs/elements/SwcChoose.js +117 -0
  13. package/dist/cjs/elements/SwcChoose.js.map +7 -0
  14. package/dist/cjs/elements/SwcForOf.js +196 -0
  15. package/dist/cjs/elements/SwcForOf.js.map +7 -0
  16. package/dist/cjs/elements/SwcIf.js +135 -0
  17. package/dist/cjs/elements/SwcIf.js.map +7 -0
  18. package/dist/cjs/elements/SwcOther.js +56 -0
  19. package/dist/cjs/elements/SwcOther.js.map +7 -0
  20. package/dist/cjs/elements/SwcWhen.js +56 -0
  21. package/dist/cjs/elements/SwcWhen.js.map +7 -0
  22. package/dist/cjs/index.js +9 -1
  23. package/dist/cjs/index.js.map +2 -2
  24. package/dist/esm/decorators/addEventListener.js +23 -0
  25. package/dist/esm/decorators/addEventListener.js.map +7 -0
  26. package/dist/esm/decorators/attributeChanged.js +24 -4
  27. package/dist/esm/decorators/attributeChanged.js.map +2 -2
  28. package/dist/esm/decorators/{element.js → elementDefind.js} +89 -11
  29. package/dist/esm/decorators/elementDefind.js.map +7 -0
  30. package/dist/esm/decorators/query.js +34 -0
  31. package/dist/esm/decorators/query.js.map +7 -0
  32. package/dist/esm/decorators/queryAll.js +34 -0
  33. package/dist/esm/decorators/queryAll.js.map +7 -0
  34. package/dist/esm/elements/SwcChoose.js +98 -0
  35. package/dist/esm/elements/SwcChoose.js.map +7 -0
  36. package/dist/esm/elements/SwcForOf.js +177 -0
  37. package/dist/esm/elements/SwcForOf.js.map +7 -0
  38. package/dist/esm/elements/SwcIf.js +116 -0
  39. package/dist/esm/elements/SwcIf.js.map +7 -0
  40. package/dist/esm/elements/SwcOther.js +37 -0
  41. package/dist/esm/elements/SwcOther.js.map +7 -0
  42. package/dist/esm/elements/SwcWhen.js +37 -0
  43. package/dist/esm/elements/SwcWhen.js.map +7 -0
  44. package/dist/esm/index.js +9 -1
  45. package/dist/esm/index.js.map +2 -2
  46. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +649 -14
  47. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  48. package/dist/types/decorators/addEventListener.d.ts +16 -0
  49. package/dist/types/decorators/addEventListener.d.ts.map +1 -0
  50. package/dist/types/decorators/attributeChanged.d.ts +3 -1
  51. package/dist/types/decorators/attributeChanged.d.ts.map +1 -1
  52. package/dist/types/decorators/{element.d.ts → elementDefind.d.ts} +2 -2
  53. package/dist/types/decorators/elementDefind.d.ts.map +1 -0
  54. package/dist/types/decorators/query.d.ts +13 -0
  55. package/dist/types/decorators/query.d.ts.map +1 -0
  56. package/dist/types/decorators/queryAll.d.ts +13 -0
  57. package/dist/types/decorators/queryAll.d.ts.map +1 -0
  58. package/dist/types/elements/SwcChoose.d.ts +12 -0
  59. package/dist/types/elements/SwcChoose.d.ts.map +1 -0
  60. package/dist/types/elements/SwcForOf.d.ts +16 -0
  61. package/dist/types/elements/SwcForOf.d.ts.map +1 -0
  62. package/dist/types/elements/SwcIf.d.ts +14 -0
  63. package/dist/types/elements/SwcIf.d.ts.map +1 -0
  64. package/dist/types/elements/SwcOther.d.ts +5 -0
  65. package/dist/types/elements/SwcOther.d.ts.map +1 -0
  66. package/dist/types/elements/SwcWhen.d.ts +5 -0
  67. package/dist/types/elements/SwcWhen.d.ts.map +1 -0
  68. package/dist/types/index.d.ts +9 -1
  69. package/dist/types/index.d.ts.map +1 -1
  70. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +649 -14
  71. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  72. package/package.json +1 -1
  73. package/src/decorators/addEventListener.ts +35 -0
  74. package/src/decorators/attributeChanged.ts +29 -6
  75. package/src/decorators/{element.ts → elementDefind.ts} +121 -11
  76. package/src/decorators/query.ts +46 -0
  77. package/src/decorators/queryAll.ts +46 -0
  78. package/src/elements/SwcChoose.ts +83 -0
  79. package/src/elements/SwcForOf.ts +170 -0
  80. package/src/elements/SwcIf.ts +111 -0
  81. package/src/elements/SwcOther.ts +14 -0
  82. package/src/elements/SwcWhen.ts +14 -0
  83. package/src/index.ts +10 -2
  84. package/dist/cjs/decorators/element.js.map +0 -7
  85. package/dist/esm/decorators/element.js.map +0 -7
  86. package/dist/types/decorators/element.d.ts.map +0 -1
@@ -20,16 +20,31 @@ var dooboostoreSimpleWebComponent = (() => {
20
20
  // src/bundle-entry.ts
21
21
  var bundle_entry_exports = {};
22
22
  __export(bundle_entry_exports, {
23
+ ADD_EVENT_LISTENER_METADATA_KEY: () => ADD_EVENT_LISTENER_METADATA_KEY,
23
24
  ATTRIBUTE_CHANGED_METADATA_KEY: () => ATTRIBUTE_CHANGED_METADATA_KEY,
25
+ ATTRIBUTE_CHANGED_WILDCARD: () => ATTRIBUTE_CHANGED_WILDCARD,
24
26
  ELEMENT_CONFIG_KEY: () => ELEMENT_CONFIG_KEY,
27
+ QUERY_ALL_METADATA_KEY: () => QUERY_ALL_METADATA_KEY,
28
+ QUERY_METADATA_KEY: () => QUERY_METADATA_KEY,
25
29
  STYLE_METHOD_KEY: () => STYLE_METHOD_KEY,
30
+ SwcChoose: () => SwcChoose,
31
+ SwcForOf: () => SwcForOf,
32
+ SwcIf: () => SwcIf,
33
+ SwcOther: () => SwcOther,
34
+ SwcWhen: () => SwcWhen,
26
35
  TEMPLATE_METHOD_KEY: () => TEMPLATE_METHOD_KEY,
36
+ addEventListener: () => addEventListener,
27
37
  attributeChanged: () => attributeChanged,
28
- element: () => element,
38
+ elementDefind: () => elementDefind,
39
+ getAddEventListenerMetadata: () => getAddEventListenerMetadata,
29
40
  getAttributeChangedMap: () => getAttributeChangedMap,
30
41
  getElementConfig: () => getElementConfig,
42
+ getQueryAllMetadata: () => getQueryAllMetadata,
43
+ getQueryMetadata: () => getQueryMetadata,
31
44
  getStyleMethod: () => getStyleMethod,
32
45
  getTemplateMethod: () => getTemplateMethod,
46
+ query: () => query,
47
+ queryAll: () => queryAll,
33
48
  style: () => style,
34
49
  template: () => template
35
50
  });
@@ -88,17 +103,36 @@ var dooboostoreSimpleWebComponent = (() => {
88
103
 
89
104
  // src/decorators/attributeChanged.ts
90
105
  var ATTRIBUTE_CHANGED_METADATA_KEY = Symbol("simple-web-component:attribute-changed");
91
- var attributeChanged = (attributeName) => {
92
- return (target, propertyKey, descriptor) => {
106
+ var ATTRIBUTE_CHANGED_WILDCARD = "*";
107
+ function attributeChanged(arg1, arg2, arg3) {
108
+ const decorator = (attributeName, target, propertyKey) => {
93
109
  const constructor = target.constructor;
94
110
  let meta = ReflectUtils.getMetadata(ATTRIBUTE_CHANGED_METADATA_KEY, constructor);
95
111
  if (!meta) {
96
112
  meta = /* @__PURE__ */ new Map();
97
113
  ReflectUtils.defineMetadata(ATTRIBUTE_CHANGED_METADATA_KEY, meta, constructor);
98
114
  }
99
- meta.set(attributeName, propertyKey);
115
+ let methods = meta.get(attributeName);
116
+ if (!methods) {
117
+ methods = [];
118
+ meta.set(attributeName, methods);
119
+ }
120
+ if (!methods.includes(propertyKey)) {
121
+ methods.push(propertyKey);
122
+ }
100
123
  };
101
- };
124
+ if (typeof arg1 === "string") {
125
+ return (target, propertyKey) => {
126
+ decorator(arg1, target, propertyKey);
127
+ };
128
+ } else if (Array.isArray(arg1)) {
129
+ return (target, propertyKey) => {
130
+ arg1.forEach((name) => decorator(name, target, propertyKey));
131
+ };
132
+ } else if (arg1 && arg2) {
133
+ decorator(ATTRIBUTE_CHANGED_WILDCARD, arg1, arg2);
134
+ }
135
+ }
102
136
  var getAttributeChangedMap = (target) => {
103
137
  const constructor = target instanceof Function ? target : target.constructor;
104
138
  return ReflectUtils.getMetadata(ATTRIBUTE_CHANGED_METADATA_KEY, constructor);
@@ -124,7 +158,83 @@ var dooboostoreSimpleWebComponent = (() => {
124
158
  return ReflectUtils.getMetadata(STYLE_METHOD_KEY, constructor);
125
159
  };
126
160
 
127
- // src/decorators/element.ts
161
+ // src/decorators/query.ts
162
+ var QUERY_METADATA_KEY = Symbol("simple-web-component:query");
163
+ var query = (selector, options = { useShadow: true }) => {
164
+ return (target, propertyKey, descriptor) => {
165
+ const isMethod = !!descriptor;
166
+ const constructor = target.constructor;
167
+ let queries = ReflectUtils.getMetadata(QUERY_METADATA_KEY, constructor);
168
+ if (!queries) {
169
+ queries = [];
170
+ ReflectUtils.defineMetadata(QUERY_METADATA_KEY, queries, constructor);
171
+ }
172
+ queries.push({ selector, options, propertyKey, isMethod });
173
+ if (!isMethod) {
174
+ Object.defineProperty(target, propertyKey, {
175
+ get() {
176
+ const root = options.useShadow !== false && this.shadowRoot ? this.shadowRoot : this;
177
+ return root.querySelector(selector);
178
+ },
179
+ enumerable: true,
180
+ configurable: true
181
+ });
182
+ }
183
+ };
184
+ };
185
+ var getQueryMetadata = (target) => {
186
+ const constructor = target instanceof Function ? target : target.constructor;
187
+ return ReflectUtils.getMetadata(QUERY_METADATA_KEY, constructor);
188
+ };
189
+
190
+ // src/decorators/queryAll.ts
191
+ var QUERY_ALL_METADATA_KEY = Symbol("simple-web-component:query-all");
192
+ var queryAll = (selector, options = { useShadow: true }) => {
193
+ return (target, propertyKey, descriptor) => {
194
+ const isMethod = !!descriptor;
195
+ const constructor = target.constructor;
196
+ let queries = ReflectUtils.getMetadata(QUERY_ALL_METADATA_KEY, constructor);
197
+ if (!queries) {
198
+ queries = [];
199
+ ReflectUtils.defineMetadata(QUERY_ALL_METADATA_KEY, queries, constructor);
200
+ }
201
+ queries.push({ selector, options, propertyKey, isMethod });
202
+ if (!isMethod) {
203
+ Object.defineProperty(target, propertyKey, {
204
+ get() {
205
+ const root = options.useShadow !== false && this.shadowRoot ? this.shadowRoot : this;
206
+ return root.querySelectorAll(selector);
207
+ },
208
+ enumerable: true,
209
+ configurable: true
210
+ });
211
+ }
212
+ };
213
+ };
214
+ var getQueryAllMetadata = (target) => {
215
+ const constructor = target instanceof Function ? target : target.constructor;
216
+ return ReflectUtils.getMetadata(QUERY_ALL_METADATA_KEY, constructor);
217
+ };
218
+
219
+ // src/decorators/addEventListener.ts
220
+ var ADD_EVENT_LISTENER_METADATA_KEY = Symbol("simple-web-component:add-event-listener");
221
+ var addEventListener = (options) => {
222
+ return (target, propertyKey, descriptor) => {
223
+ const constructor = target.constructor;
224
+ let listeners = ReflectUtils.getMetadata(ADD_EVENT_LISTENER_METADATA_KEY, constructor);
225
+ if (!listeners) {
226
+ listeners = [];
227
+ ReflectUtils.defineMetadata(ADD_EVENT_LISTENER_METADATA_KEY, listeners, constructor);
228
+ }
229
+ listeners.push({ options, propertyKey });
230
+ };
231
+ };
232
+ var getAddEventListenerMetadata = (target) => {
233
+ const constructor = target instanceof Function ? target : target.constructor;
234
+ return ReflectUtils.getMetadata(ADD_EVENT_LISTENER_METADATA_KEY, constructor);
235
+ };
236
+
237
+ // src/decorators/elementDefind.ts
128
238
  var ELEMENT_CONFIG_KEY = Symbol("simple-web-component:element-config");
129
239
  var BUILT_IN_TAG_MAP = /* @__PURE__ */ new Map();
130
240
  var registerTag = (className, tagName) => {
@@ -190,7 +300,7 @@ var dooboostoreSimpleWebComponent = (() => {
190
300
  ["HTMLVideoElement", "video"],
191
301
  ["HTMLHeadingElement", "h1"]
192
302
  ].forEach(([cls, tag]) => registerTag(cls, tag));
193
- var element = (inConfig) => (constructor) => {
303
+ var elementDefind = (inConfig) => (constructor) => {
194
304
  const config = typeof inConfig === "string" ? { tagName: inConfig } : inConfig;
195
305
  let extendsTagName = config.extends;
196
306
  if (!extendsTagName) {
@@ -203,7 +313,7 @@ var dooboostoreSimpleWebComponent = (() => {
203
313
  }
204
314
  }
205
315
  const attributeChangedMap = getAttributeChangedMap(constructor);
206
- const observedFromDecorators = attributeChangedMap ? Array.from(attributeChangedMap.keys()) : [];
316
+ const observedFromDecorators = attributeChangedMap ? Array.from(attributeChangedMap.keys()).filter((it) => it !== ATTRIBUTE_CHANGED_WILDCARD) : [];
207
317
  const mergedObservedAttributes = [.../* @__PURE__ */ new Set([...config.observedAttributes ?? [], ...observedFromDecorators])];
208
318
  const NewClass = class extends constructor {
209
319
  static get observedAttributes() {
@@ -211,11 +321,68 @@ var dooboostoreSimpleWebComponent = (() => {
211
321
  }
212
322
  constructor(...args) {
213
323
  super(...args);
324
+ this._observer = null;
325
+ this._boundElements = /* @__PURE__ */ new WeakMap();
214
326
  if (config.useShadow === true && !this.shadowRoot) {
215
327
  this.attachShadow({ mode: "open" });
216
328
  }
217
329
  }
330
+ _syncDecorators() {
331
+ const queryMetadata = getQueryMetadata(this);
332
+ if (queryMetadata) {
333
+ queryMetadata.filter((it) => it.isMethod).forEach((it) => {
334
+ const root = it.options.useShadow !== false && this.shadowRoot ? this.shadowRoot : this;
335
+ const element = root.querySelector(it.selector);
336
+ if (element) {
337
+ let bound = this._boundElements.get(element);
338
+ if (!bound) {
339
+ bound = /* @__PURE__ */ new Set();
340
+ this._boundElements.set(element, bound);
341
+ }
342
+ if (!bound.has(it.propertyKey)) {
343
+ this[it.propertyKey](element);
344
+ bound.add(it.propertyKey);
345
+ }
346
+ }
347
+ });
348
+ }
349
+ const queryAllMetadata = getQueryAllMetadata(this);
350
+ if (queryAllMetadata) {
351
+ queryAllMetadata.filter((it) => it.isMethod).forEach((it) => {
352
+ const root = it.options.useShadow !== false && this.shadowRoot ? this.shadowRoot : this;
353
+ const elements = root.querySelectorAll(it.selector);
354
+ this[it.propertyKey](elements);
355
+ });
356
+ }
357
+ const eventListeners = getAddEventListenerMetadata(this);
358
+ if (eventListeners) {
359
+ eventListeners.forEach((it) => {
360
+ const { selector, eventName, useShadow, ...options } = it.options;
361
+ const root = useShadow !== false && this.shadowRoot ? this.shadowRoot : this;
362
+ const targetElements = selector ? root.querySelectorAll(selector) : [this];
363
+ targetElements.forEach((targetElement) => {
364
+ if (targetElement) {
365
+ let bound = this._boundElements.get(targetElement);
366
+ if (!bound) {
367
+ bound = /* @__PURE__ */ new Set();
368
+ this._boundElements.set(targetElement, bound);
369
+ }
370
+ const eventKey = `event:${String(it.propertyKey)}:${eventName}`;
371
+ if (!bound.has(eventKey)) {
372
+ targetElement.addEventListener(eventName, (event) => {
373
+ this[it.propertyKey](event);
374
+ }, options);
375
+ bound.add(eventKey);
376
+ }
377
+ }
378
+ });
379
+ });
380
+ }
381
+ }
218
382
  disconnectedCallback() {
383
+ if (this._observer) {
384
+ this._observer.disconnect();
385
+ }
219
386
  if (super.disconnectedCallback) {
220
387
  super.disconnectedCallback();
221
388
  }
@@ -231,9 +398,6 @@ var dooboostoreSimpleWebComponent = (() => {
231
398
  }
232
399
  }
233
400
  async connectedCallback() {
234
- if (super.connectedCallback) {
235
- await super.connectedCallback();
236
- }
237
401
  const templateMethod = getTemplateMethod(this);
238
402
  const styleMethod = getStyleMethod(this);
239
403
  const template2 = templateMethod ? await this[templateMethod]() : void 0;
@@ -255,15 +419,36 @@ var dooboostoreSimpleWebComponent = (() => {
255
419
  } else {
256
420
  this.innerHTML = content;
257
421
  }
422
+ this._syncDecorators();
423
+ this._observer = new MutationObserver(() => {
424
+ this._syncDecorators();
425
+ });
426
+ const target = this.shadowRoot || this;
427
+ this._observer.observe(target, { childList: true, subtree: true });
428
+ if (super.connectedCallback) {
429
+ await super.connectedCallback();
430
+ }
258
431
  }
259
432
  // 4. Handle attribute changes and route to decorated methods
260
433
  attributeChangedCallback(name, oldValue, newValue) {
261
434
  if (super.attributeChangedCallback) {
262
435
  super.attributeChangedCallback(name, oldValue, newValue);
263
436
  }
264
- const methodKey = attributeChangedMap?.get(name);
265
- if (methodKey && typeof this[methodKey] === "function") {
266
- this[methodKey](newValue, oldValue);
437
+ const methodKeys = attributeChangedMap?.get(name);
438
+ if (methodKeys && Array.isArray(methodKeys)) {
439
+ methodKeys.forEach((key) => {
440
+ if (typeof this[key] === "function") {
441
+ this[key](newValue, oldValue, name);
442
+ }
443
+ });
444
+ }
445
+ const wildcardMethodKeys = attributeChangedMap?.get(ATTRIBUTE_CHANGED_WILDCARD);
446
+ if (wildcardMethodKeys && Array.isArray(wildcardMethodKeys)) {
447
+ wildcardMethodKeys.forEach((key) => {
448
+ if (typeof this[key] === "function") {
449
+ this[key](newValue, oldValue, name);
450
+ }
451
+ });
267
452
  }
268
453
  }
269
454
  };
@@ -279,6 +464,456 @@ var dooboostoreSimpleWebComponent = (() => {
279
464
  const constructor = target instanceof Function ? target : target.constructor;
280
465
  return ReflectUtils.getMetadata(ELEMENT_CONFIG_KEY, constructor);
281
466
  };
467
+
468
+ // src/elements/SwcForOf.ts
469
+ var __decorate = function(decorators, target, key, desc) {
470
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
471
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
472
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
473
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
474
+ };
475
+ var __metadata = function(k, v) {
476
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
477
+ };
478
+ var SwcForOf = class SwcForOf2 extends HTMLElement {
479
+ constructor() {
480
+ super();
481
+ this._value = [];
482
+ this._masterTplNodes = [];
483
+ }
484
+ set value(val) {
485
+ if (!Array.isArray(val))
486
+ val = [];
487
+ this._value = this.createProxy(val);
488
+ this.renderAll();
489
+ }
490
+ get value() {
491
+ return this._value;
492
+ }
493
+ createProxy(arr) {
494
+ return new Proxy(arr, {
495
+ set: (target, prop, val) => {
496
+ const isIndex = !isNaN(Number(prop));
497
+ target[prop] = val;
498
+ if (isIndex) {
499
+ this.updateSingleRow(Number(prop), val);
500
+ } else if (prop === "length" && val < target.length) {
501
+ this.renderAll();
502
+ }
503
+ return true;
504
+ },
505
+ deleteProperty: (target, prop) => {
506
+ const res = delete target[prop];
507
+ this.renderAll();
508
+ return res;
509
+ }
510
+ });
511
+ }
512
+ styles() {
513
+ return `
514
+ :host { display: contents; }
515
+ `;
516
+ }
517
+ renderTemplate() {
518
+ return `
519
+ <slot id="tpl-slot" style="display:none;"></slot>
520
+ `;
521
+ }
522
+ connectedCallback() {
523
+ const tplSlot = this.shadowRoot?.getElementById("tpl-slot");
524
+ if (tplSlot) {
525
+ this._masterTplNodes = tplSlot.assignedNodes().map((n) => n.cloneNode(true));
526
+ }
527
+ this.renderAll();
528
+ }
529
+ updateSingleRow(index, newValue) {
530
+ const targets = this.querySelectorAll(`[slot="row-${index}"]`);
531
+ if (targets.length > 0) {
532
+ targets.forEach((target) => this.applyData(target, newValue, index));
533
+ } else {
534
+ this.renderRow(newValue, index);
535
+ }
536
+ }
537
+ applyData(node, data, index) {
538
+ const getValueByPath = (obj, path) => {
539
+ if (path === "value")
540
+ return obj;
541
+ if (path.startsWith("value.")) {
542
+ return path.split(".").slice(1).reduce((acc, part) => acc && acc[part], obj);
543
+ }
544
+ return void 0;
545
+ };
546
+ const walk = (n) => {
547
+ if (n.nodeType === Node.TEXT_NODE) {
548
+ if (!n._original)
549
+ n._original = n.textContent;
550
+ let text = n._original;
551
+ text = text.replace(/{{(.*?)}}/g, (match, path) => {
552
+ path = path.trim();
553
+ if (path === "index")
554
+ return index.toString();
555
+ const val = getValueByPath(data, path);
556
+ return val !== void 0 ? val : match;
557
+ });
558
+ if (n.textContent !== text)
559
+ n.textContent = text;
560
+ } else if (n.nodeType === Node.ELEMENT_NODE) {
561
+ const el = n;
562
+ Array.from(el.attributes).forEach((a) => {
563
+ if (!a._original)
564
+ a._original = a.value;
565
+ let val = a._original;
566
+ val = val.replace(/{{(.*?)}}/g, (match, path) => {
567
+ path = path.trim();
568
+ if (path === "index")
569
+ return index.toString();
570
+ const v = getValueByPath(data, path);
571
+ return v !== void 0 ? v : match;
572
+ });
573
+ if (a.value !== val)
574
+ a.value = val;
575
+ });
576
+ el.childNodes.forEach(walk);
577
+ }
578
+ };
579
+ walk(node);
580
+ }
581
+ renderRow(item, index) {
582
+ if (!this.shadowRoot || this._masterTplNodes.length === 0)
583
+ return;
584
+ const slotName = `row-${index}`;
585
+ if (!this.shadowRoot.querySelector(`slot[name="${slotName}"]`)) {
586
+ const slot = document.createElement("slot");
587
+ slot.name = slotName;
588
+ this.shadowRoot.appendChild(slot);
589
+ }
590
+ this._masterTplNodes.forEach((tplNode) => {
591
+ const clone = tplNode.cloneNode(true);
592
+ if (clone.nodeType === Node.ELEMENT_NODE) {
593
+ clone.setAttribute("slot", slotName);
594
+ clone.style.display = "";
595
+ } else if (clone.nodeType === Node.TEXT_NODE) {
596
+ if (clone.textContent?.trim().length === 0)
597
+ return;
598
+ const span = document.createElement("span");
599
+ span.setAttribute("slot", slotName);
600
+ span.appendChild(clone);
601
+ this.appendChild(span);
602
+ this.applyData(span, item, index);
603
+ return;
604
+ }
605
+ this.appendChild(clone);
606
+ this.applyData(clone, item, index);
607
+ });
608
+ }
609
+ renderAll() {
610
+ if (this._masterTplNodes.length === 0 || !this.shadowRoot)
611
+ return;
612
+ Array.from(this.children).forEach((c) => {
613
+ const slot = c.getAttribute("slot");
614
+ if (slot && slot.startsWith("row-")) {
615
+ c.remove();
616
+ }
617
+ });
618
+ Array.from(this.shadowRoot.querySelectorAll("slot")).forEach((s) => {
619
+ if (s.id !== "tpl-slot")
620
+ s.remove();
621
+ });
622
+ this._value.forEach((item, index) => this.renderRow(item, index));
623
+ }
624
+ };
625
+ __decorate([
626
+ style,
627
+ __metadata("design:type", Function),
628
+ __metadata("design:paramtypes", []),
629
+ __metadata("design:returntype", void 0)
630
+ ], SwcForOf.prototype, "styles", null);
631
+ __decorate([
632
+ template,
633
+ __metadata("design:type", Function),
634
+ __metadata("design:paramtypes", []),
635
+ __metadata("design:returntype", void 0)
636
+ ], SwcForOf.prototype, "renderTemplate", null);
637
+ SwcForOf = __decorate([
638
+ elementDefind({ tagName: "swc-for-of", useShadow: true }),
639
+ __metadata("design:paramtypes", [])
640
+ ], SwcForOf);
641
+
642
+ // src/elements/SwcIf.ts
643
+ var __decorate2 = function(decorators, target, key, desc) {
644
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
645
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
646
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
647
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
648
+ };
649
+ var __metadata2 = function(k, v) {
650
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
651
+ };
652
+ var SwcIf = class SwcIf2 extends HTMLElement {
653
+ constructor() {
654
+ super();
655
+ this._value = false;
656
+ this._masterTplNodes = [];
657
+ this._observer = null;
658
+ }
659
+ set value(val) {
660
+ this._value = val;
661
+ this.render();
662
+ }
663
+ get value() {
664
+ return this._value;
665
+ }
666
+ styles() {
667
+ return `
668
+ :host { display: contents; }
669
+ `;
670
+ }
671
+ renderTemplate() {
672
+ return `
673
+ <slot id="tpl-slot" style="display:none;"></slot>
674
+ `;
675
+ }
676
+ connectedCallback() {
677
+ const tplSlot = this.shadowRoot?.getElementById("tpl-slot");
678
+ if (tplSlot) {
679
+ this._masterTplNodes = tplSlot.assignedNodes().map((n) => n.cloneNode(true));
680
+ }
681
+ this._observer = new MutationObserver(() => this.render());
682
+ this._observer.observe(this, { attributes: true });
683
+ this.render();
684
+ }
685
+ disconnectedCallback() {
686
+ this._observer?.disconnect();
687
+ }
688
+ render() {
689
+ if (!this.shadowRoot)
690
+ return;
691
+ const attrValue = this.getAttribute("value");
692
+ if (attrValue !== null && attrValue.includes("{{"))
693
+ return;
694
+ let displayValue = attrValue !== null ? attrValue : this._value;
695
+ let isTruthy = !!displayValue;
696
+ if (typeof displayValue === "string") {
697
+ if (displayValue === "false" || displayValue === "0" || displayValue === "")
698
+ isTruthy = false;
699
+ else {
700
+ try {
701
+ isTruthy = !!new Function(`return ${displayValue}`)();
702
+ } catch (e) {
703
+ isTruthy = true;
704
+ }
705
+ }
706
+ }
707
+ Array.from(this.children).forEach((c) => {
708
+ if (c.getAttribute("slot") === "if-content") {
709
+ c.remove();
710
+ }
711
+ });
712
+ const existingSlot = this.shadowRoot.querySelector('slot[name="if-content"]');
713
+ if (existingSlot)
714
+ existingSlot.remove();
715
+ if (isTruthy && this._masterTplNodes.length > 0) {
716
+ const contentSlot = document.createElement("slot");
717
+ contentSlot.name = "if-content";
718
+ this.shadowRoot.appendChild(contentSlot);
719
+ this._masterTplNodes.forEach((tplNode) => {
720
+ const clone = tplNode.cloneNode(true);
721
+ if (clone.nodeType === Node.ELEMENT_NODE) {
722
+ clone.setAttribute("slot", "if-content");
723
+ clone.style.display = "";
724
+ } else if (clone.nodeType === Node.TEXT_NODE) {
725
+ if (clone.textContent?.trim().length === 0)
726
+ return;
727
+ const span = document.createElement("span");
728
+ span.setAttribute("slot", "if-content");
729
+ span.appendChild(clone);
730
+ this.appendChild(span);
731
+ return;
732
+ }
733
+ this.appendChild(clone);
734
+ });
735
+ }
736
+ }
737
+ };
738
+ __decorate2([
739
+ style,
740
+ __metadata2("design:type", Function),
741
+ __metadata2("design:paramtypes", []),
742
+ __metadata2("design:returntype", void 0)
743
+ ], SwcIf.prototype, "styles", null);
744
+ __decorate2([
745
+ template,
746
+ __metadata2("design:type", Function),
747
+ __metadata2("design:paramtypes", []),
748
+ __metadata2("design:returntype", void 0)
749
+ ], SwcIf.prototype, "renderTemplate", null);
750
+ SwcIf = __decorate2([
751
+ elementDefind({ tagName: "swc-if", useShadow: true }),
752
+ __metadata2("design:paramtypes", [])
753
+ ], SwcIf);
754
+
755
+ // src/elements/SwcChoose.ts
756
+ var __decorate3 = function(decorators, target, key, desc) {
757
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
758
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
759
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
760
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
761
+ };
762
+ var __metadata3 = function(k, v) {
763
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
764
+ };
765
+ var SwcChoose = class SwcChoose2 extends HTMLElement {
766
+ constructor() {
767
+ super(...arguments);
768
+ this._observer = null;
769
+ this._value = void 0;
770
+ }
771
+ set value(val) {
772
+ this._value = val;
773
+ this.evaluate();
774
+ }
775
+ get value() {
776
+ return this._value;
777
+ }
778
+ styles() {
779
+ return `:host { display: contents; }`;
780
+ }
781
+ render() {
782
+ return `<slot id="choose-slot"></slot>`;
783
+ }
784
+ connectedCallback() {
785
+ this._observer = new MutationObserver(() => this.evaluate());
786
+ this._observer.observe(this, { attributes: true, subtree: true, childList: true });
787
+ this.evaluate();
788
+ }
789
+ disconnectedCallback() {
790
+ this._observer?.disconnect();
791
+ }
792
+ evaluate() {
793
+ const whens = Array.from(this.querySelectorAll("swc-when"));
794
+ const other = this.querySelector("swc-other");
795
+ let matched = false;
796
+ const chooseValue = this.getAttribute("value") ?? this._value;
797
+ whens.forEach((when) => {
798
+ if (matched) {
799
+ when.style.display = "none";
800
+ return;
801
+ }
802
+ const testAttr = when.getAttribute("test");
803
+ if (testAttr === null)
804
+ return;
805
+ if (testAttr.includes("{{"))
806
+ return;
807
+ let isConditionMet = false;
808
+ if (chooseValue !== void 0 && chooseValue !== null) {
809
+ isConditionMet = String(chooseValue) === String(testAttr);
810
+ } else {
811
+ try {
812
+ if (testAttr === "true")
813
+ isConditionMet = true;
814
+ else if (testAttr === "false")
815
+ isConditionMet = false;
816
+ else
817
+ isConditionMet = !!new Function(`return ${testAttr}`)();
818
+ } catch (e) {
819
+ isConditionMet = false;
820
+ }
821
+ }
822
+ if (isConditionMet) {
823
+ when.style.display = "";
824
+ matched = true;
825
+ } else {
826
+ when.style.display = "none";
827
+ }
828
+ });
829
+ if (other) {
830
+ other.style.display = matched ? "none" : "";
831
+ }
832
+ }
833
+ };
834
+ __decorate3([
835
+ style,
836
+ __metadata3("design:type", Function),
837
+ __metadata3("design:paramtypes", []),
838
+ __metadata3("design:returntype", void 0)
839
+ ], SwcChoose.prototype, "styles", null);
840
+ __decorate3([
841
+ template,
842
+ __metadata3("design:type", Function),
843
+ __metadata3("design:paramtypes", []),
844
+ __metadata3("design:returntype", void 0)
845
+ ], SwcChoose.prototype, "render", null);
846
+ SwcChoose = __decorate3([
847
+ elementDefind({ tagName: "swc-choose", useShadow: true })
848
+ ], SwcChoose);
849
+
850
+ // src/elements/SwcWhen.ts
851
+ var __decorate4 = function(decorators, target, key, desc) {
852
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
853
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
854
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
855
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
856
+ };
857
+ var __metadata4 = function(k, v) {
858
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
859
+ };
860
+ var SwcWhen = class SwcWhen2 extends HTMLElement {
861
+ styles() {
862
+ return `:host { display: contents; }`;
863
+ }
864
+ render() {
865
+ return `<slot></slot>`;
866
+ }
867
+ };
868
+ __decorate4([
869
+ style,
870
+ __metadata4("design:type", Function),
871
+ __metadata4("design:paramtypes", []),
872
+ __metadata4("design:returntype", void 0)
873
+ ], SwcWhen.prototype, "styles", null);
874
+ __decorate4([
875
+ template,
876
+ __metadata4("design:type", Function),
877
+ __metadata4("design:paramtypes", []),
878
+ __metadata4("design:returntype", void 0)
879
+ ], SwcWhen.prototype, "render", null);
880
+ SwcWhen = __decorate4([
881
+ elementDefind({ tagName: "swc-when", useShadow: true })
882
+ ], SwcWhen);
883
+
884
+ // src/elements/SwcOther.ts
885
+ var __decorate5 = function(decorators, target, key, desc) {
886
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
887
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
888
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
889
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
890
+ };
891
+ var __metadata5 = function(k, v) {
892
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
893
+ };
894
+ var SwcOther = class SwcOther2 extends HTMLElement {
895
+ styles() {
896
+ return `:host { display: contents; }`;
897
+ }
898
+ render() {
899
+ return `<slot></slot>`;
900
+ }
901
+ };
902
+ __decorate5([
903
+ style,
904
+ __metadata5("design:type", Function),
905
+ __metadata5("design:paramtypes", []),
906
+ __metadata5("design:returntype", void 0)
907
+ ], SwcOther.prototype, "styles", null);
908
+ __decorate5([
909
+ template,
910
+ __metadata5("design:type", Function),
911
+ __metadata5("design:paramtypes", []),
912
+ __metadata5("design:returntype", void 0)
913
+ ], SwcOther.prototype, "render", null);
914
+ SwcOther = __decorate5([
915
+ elementDefind({ tagName: "swc-other", useShadow: true })
916
+ ], SwcOther);
282
917
  return __toCommonJS(bundle_entry_exports);
283
918
  })();
284
919
  //# sourceMappingURL=dooboostore-simple-web-component.umd.js.map