@dooboostore/simple-web-component 1.0.15 → 1.0.16

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 (53) hide show
  1. package/README.md +183 -92
  2. package/dist/cjs/decorators/addEventListener.js +2 -3
  3. package/dist/cjs/decorators/addEventListener.js.map +2 -2
  4. package/dist/cjs/decorators/elementDefine.js +89 -33
  5. package/dist/cjs/decorators/elementDefine.js.map +2 -2
  6. package/dist/cjs/decorators/emitCustomEvent.js +2 -14
  7. package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
  8. package/dist/cjs/decorators/query.js +25 -36
  9. package/dist/cjs/decorators/query.js.map +2 -2
  10. package/dist/cjs/decorators/queryAll.js +28 -36
  11. package/dist/cjs/decorators/queryAll.js.map +2 -2
  12. package/dist/cjs/types.js +1 -0
  13. package/dist/cjs/types.js.map +2 -2
  14. package/dist/cjs/utils/Utils.js +36 -143
  15. package/dist/cjs/utils/Utils.js.map +2 -2
  16. package/dist/esm/decorators/addEventListener.js +2 -3
  17. package/dist/esm/decorators/addEventListener.js.map +2 -2
  18. package/dist/esm/decorators/elementDefine.js +89 -33
  19. package/dist/esm/decorators/elementDefine.js.map +2 -2
  20. package/dist/esm/decorators/emitCustomEvent.js +2 -14
  21. package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
  22. package/dist/esm/decorators/query.js +25 -36
  23. package/dist/esm/decorators/query.js.map +2 -2
  24. package/dist/esm/decorators/queryAll.js +28 -36
  25. package/dist/esm/decorators/queryAll.js.map +2 -2
  26. package/dist/esm/types.js +1 -0
  27. package/dist/esm/types.js.map +2 -2
  28. package/dist/esm/utils/Utils.js +36 -143
  29. package/dist/esm/utils/Utils.js.map +2 -2
  30. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +183 -266
  31. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +3 -3
  32. package/dist/types/decorators/addEventListener.d.ts +9 -4
  33. package/dist/types/decorators/addEventListener.d.ts.map +1 -1
  34. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  35. package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
  36. package/dist/types/decorators/query.d.ts +6 -5
  37. package/dist/types/decorators/query.d.ts.map +1 -1
  38. package/dist/types/decorators/queryAll.d.ts +6 -5
  39. package/dist/types/decorators/queryAll.d.ts.map +1 -1
  40. package/dist/types/types.d.ts +3 -1
  41. package/dist/types/types.d.ts.map +1 -1
  42. package/dist/types/utils/Utils.d.ts +6 -14
  43. package/dist/types/utils/Utils.d.ts.map +1 -1
  44. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +183 -266
  45. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +3 -3
  46. package/package.json +3 -3
  47. package/src/decorators/addEventListener.ts +10 -7
  48. package/src/decorators/elementDefine.ts +86 -31
  49. package/src/decorators/emitCustomEvent.ts +5 -21
  50. package/src/decorators/query.ts +33 -46
  51. package/src/decorators/queryAll.ts +36 -46
  52. package/src/types.ts +6 -4
  53. package/src/utils/Utils.ts +40 -176
@@ -1362,16 +1362,15 @@ var dooboostoreSimpleWebComponent = (() => {
1362
1362
 
1363
1363
  // src/decorators/addEventListener.ts
1364
1364
  var ADD_EVENT_LISTENER_METADATA_KEY = Symbol("simple-web-component:add-event-listener");
1365
- function addEventListener(arg1, arg2) {
1365
+ function addEventListener(selector, type, options = {}) {
1366
1366
  return (target, propertyKey, descriptor) => {
1367
1367
  const constructor = target.constructor;
1368
- const options = typeof arg1 === "string" ? { type: arg1, query: arg2 } : arg1;
1369
1368
  let listeners = ReflectUtils.getMetadata(ADD_EVENT_LISTENER_METADATA_KEY, constructor);
1370
1369
  if (!listeners) {
1371
1370
  listeners = [];
1372
1371
  ReflectUtils.defineMetadata(ADD_EVENT_LISTENER_METADATA_KEY, listeners, constructor);
1373
1372
  }
1374
- listeners.push({ options, propertyKey });
1373
+ listeners.push({ selector, type, options, propertyKey });
1375
1374
  };
1376
1375
  }
1377
1376
  var getAddEventListenerMetadata = (target) => {
@@ -1417,11 +1416,11 @@ var dooboostoreSimpleWebComponent = (() => {
1417
1416
  // src/decorators/emitCustomEvent.ts
1418
1417
  var EMIT_CUSTOM_EVENT_METADATA_KEY = Symbol("simple-web-component:emit-custom-event");
1419
1418
  function emitCustomEvent(typeOrOptions) {
1420
- return (target, propertyKey, descriptor) => {
1419
+ return (target, propertyKey) => {
1421
1420
  const constructor = target.constructor;
1422
1421
  const options = typeof typeOrOptions === "string" ? { type: typeOrOptions } : typeOrOptions;
1423
1422
  if (!options.attributeName) {
1424
- options.attributeName = `on${options.type}`;
1423
+ options.attributeName = `swc-on-${options.type}`;
1425
1424
  }
1426
1425
  if (options.bubbles === void 0) options.bubbles = true;
1427
1426
  if (options.composed === void 0) options.composed = true;
@@ -1431,18 +1430,6 @@ var dooboostoreSimpleWebComponent = (() => {
1431
1430
  ReflectUtils.defineMetadata(EMIT_CUSTOM_EVENT_METADATA_KEY, list, constructor);
1432
1431
  }
1433
1432
  list.push({ propertyKey, options });
1434
- const originalMethod = descriptor.value;
1435
- descriptor.value = function(...args) {
1436
- const detail = originalMethod.apply(this, args);
1437
- const event = new CustomEvent(options.type, {
1438
- detail,
1439
- bubbles: options.bubbles,
1440
- composed: options.composed,
1441
- cancelable: options.cancelable
1442
- });
1443
- this.dispatchEvent(event);
1444
- return detail;
1445
- };
1446
1433
  };
1447
1434
  }
1448
1435
  var getEmitCustomEventMetadataList = (target) => {
@@ -1507,148 +1494,43 @@ var dooboostoreSimpleWebComponent = (() => {
1507
1494
 
1508
1495
  // src/utils/Utils.ts
1509
1496
  var SWC_NOT_FOUND = Symbol("SWC_NOT_FOUND");
1510
- var SwcUtils = class _SwcUtils {
1497
+ var SwcUtils = class {
1511
1498
  static getValueByPath(obj, path, rootName) {
1512
1499
  if (!obj || !path) return SWC_NOT_FOUND;
1513
1500
  const parts = path.split(".");
1514
- if (parts[0] === rootName && parts.length > 1) {
1515
- const subParts = parts.slice(1);
1516
- let subResult = obj;
1517
- for (const part of subParts) {
1518
- if (subResult === null || typeof subResult !== "object" || !(part in subResult)) return SWC_NOT_FOUND;
1519
- subResult = subResult[part];
1520
- }
1521
- return subResult;
1522
- }
1523
- let result = obj;
1501
+ let current = obj;
1524
1502
  for (const part of parts) {
1525
- if (result === null || typeof result !== "object" || !(part in result)) {
1526
- return SWC_NOT_FOUND;
1527
- }
1528
- result = result[part];
1529
- }
1530
- if (result !== obj && !(result instanceof HTMLElement)) {
1531
- return result;
1503
+ if (current === null || current === void 0) return SWC_NOT_FOUND;
1504
+ current = current[part];
1532
1505
  }
1533
- return SWC_NOT_FOUND;
1534
- }
1535
- static evalExpression(expr, context) {
1536
- try {
1537
- const keys = Object.keys(context);
1538
- const values = Object.values(context);
1539
- return new Function(...keys, `return (${expr})`).apply(null, values);
1540
- } catch {
1541
- return SWC_NOT_FOUND;
1542
- }
1543
- }
1544
- static applyData(node, data, options) {
1545
- const { asKey, asIndexKey, index, hostContext } = options;
1546
- const context = {};
1547
- if (index !== void 0) {
1548
- context[asIndexKey] = index;
1549
- }
1550
- if (data !== null && data !== void 0) {
1551
- context[asKey] = data;
1552
- context["value"] = data;
1553
- }
1554
- const fullContext = { ...hostContext || {}, ...context };
1555
- const resolveExpr = (expr, match) => {
1556
- expr = expr.trim();
1557
- const simpleVal = _SwcUtils.getValueByPath(data, expr, asKey);
1558
- if (simpleVal !== SWC_NOT_FOUND && typeof simpleVal !== "symbol") {
1559
- return simpleVal === null || simpleVal === void 0 ? "" : String(simpleVal);
1560
- }
1561
- const exprVal = _SwcUtils.evalExpression(expr, fullContext);
1562
- if (exprVal !== SWC_NOT_FOUND && typeof exprVal !== "symbol") {
1563
- return exprVal === null || exprVal === void 0 ? "" : String(exprVal);
1564
- }
1565
- return match;
1566
- };
1567
- const walk = (n) => {
1568
- if (n.nodeType === Node.TEXT_NODE) {
1569
- if (!n._original) n._original = n.textContent;
1570
- let text = n._original;
1571
- text = text.replace(/{{(.*?)}}/g, (match, path) => {
1572
- return resolveExpr(path, match);
1573
- });
1574
- if (n.textContent !== text) n.textContent = text;
1575
- } else if (n.nodeType === Node.ELEMENT_NODE) {
1576
- const el = n;
1577
- Array.from(el.attributes).forEach((a) => {
1578
- if (!a._original) a._original = a.value;
1579
- let val = a._original;
1580
- val = val.replace(/{{(.*?)}}/g, (match, path) => {
1581
- return resolveExpr(path, match);
1582
- });
1583
- if (a.value !== val) a.value = val;
1584
- });
1585
- el.childNodes.forEach(walk);
1586
- }
1587
- };
1588
- walk(node);
1589
- }
1590
- static createReactiveProxy(target, onChange, onIndexChange) {
1591
- const makeRecursiveProxy = (obj) => {
1592
- if (typeof obj !== "object" || obj === null || obj instanceof Node) return obj;
1593
- if (obj.__swc_is_proxy) return obj;
1594
- const IS_PROXY_KEY = "__swc_is_proxy";
1595
- const proxy = new Proxy(obj, {
1596
- get: (t, prop) => {
1597
- if (prop === IS_PROXY_KEY) return true;
1598
- if (typeof prop === "symbol") return t[prop];
1599
- return t[prop];
1600
- },
1601
- set: (t, prop, val) => {
1602
- if (prop === IS_PROXY_KEY) return true;
1603
- if (typeof prop === "symbol") {
1604
- t[prop] = val;
1605
- return true;
1606
- }
1607
- const oldVal = t[prop];
1608
- if (oldVal === val) return true;
1609
- t[prop] = makeRecursiveProxy(val);
1610
- const isIndex = !isNaN(Number(prop)) && Array.isArray(t);
1611
- if (isIndex && onIndexChange) {
1612
- onIndexChange(Number(prop), val);
1613
- } else {
1614
- onChange();
1615
- }
1616
- return true;
1617
- },
1618
- deleteProperty: (t, prop) => {
1619
- delete t[prop];
1620
- onChange();
1621
- return true;
1622
- }
1623
- });
1624
- return proxy;
1625
- };
1626
- return makeRecursiveProxy(target);
1506
+ return current;
1627
1507
  }
1628
1508
  static findNearestSwcHost(el) {
1629
- const hosts = this.findAllSwcHosts(el);
1630
- return hosts.length > 0 ? hosts[hosts.length - 1] : null;
1509
+ let current = el instanceof Node && !(el instanceof HTMLElement) ? el.host : el;
1510
+ current = current?.parentElement || current?.getRootNode()?.host;
1511
+ while (current) {
1512
+ if (getElementConfig(current)) return current;
1513
+ current = current.parentElement || current?.getRootNode()?.host;
1514
+ }
1515
+ return void 0;
1631
1516
  }
1517
+ /**
1518
+ * Returns all SWC ancestors (excluding self) in [root, ..., parent] order.
1519
+ */
1632
1520
  static findAllSwcHosts(el) {
1633
1521
  const hosts = [];
1634
- let curr = el instanceof Node && !(el instanceof HTMLElement) ? el.host : el;
1635
- curr = curr?.parentElement || curr?.getRootNode()?.host;
1636
- while (curr) {
1637
- if (curr._swcId) hosts.push(curr);
1638
- curr = curr.parentElement || curr?.getRootNode()?.host;
1522
+ let current = this.findNearestSwcHost(el);
1523
+ while (current) {
1524
+ hosts.push(current);
1525
+ current = this.findNearestSwcHost(current);
1639
1526
  }
1640
1527
  return hosts.reverse();
1641
1528
  }
1642
1529
  static getHosts(el) {
1643
- return this.findAllSwcHosts(el);
1530
+ return [...this.findAllSwcHosts(el), el];
1644
1531
  }
1645
1532
  static getHost(el) {
1646
- const hosts = this.getHosts(el);
1647
- return hosts.length > 0 ? hosts[hosts.length - 1] : void 0;
1648
- }
1649
- static getFirstHost(el) {
1650
- const hosts = this.getHosts(el);
1651
- return hosts.length > 0 ? hosts[0] : void 0;
1533
+ return el;
1652
1534
  }
1653
1535
  static getAppHosts(el) {
1654
1536
  const hosts = this.getHosts(el);
@@ -1656,31 +1538,28 @@ var dooboostoreSimpleWebComponent = (() => {
1656
1538
  }
1657
1539
  static getAppHost(el) {
1658
1540
  const appHosts = this.getAppHosts(el);
1659
- return appHosts.length > 0 ? appHosts[appHosts.length - 1] : void 0;
1660
- }
1661
- static getFirstAppHost(el) {
1662
- const appHosts = this.getAppHosts(el);
1663
- return appHosts.length > 0 ? appHosts[0] : void 0;
1664
- }
1665
- static getLastAppHost(el) {
1666
- return this.getAppHost(el);
1541
+ const appHostsWithoutSelf = appHosts.filter((h) => h !== el);
1542
+ return appHostsWithoutSelf.length > 0 ? appHostsWithoutSelf[appHostsWithoutSelf.length - 1] : void 0;
1667
1543
  }
1668
1544
  static getHostSet(el) {
1669
- const $hosts = this.getHosts(el);
1670
- const $appHosts = this.getAppHosts(el);
1671
- const $firstHost = $hosts[0] || null;
1672
- const $lastHost = $hosts[$hosts.length - 1] || null;
1673
- const $firstAppHost = $appHosts[0] || null;
1674
- const $lastAppHost = $appHosts[$appHosts.length - 1] || null;
1545
+ const ancestors = this.findAllSwcHosts(el);
1546
+ const $host = el;
1547
+ const $hosts = [...ancestors, $host];
1548
+ const $parentHost = ancestors.length > 0 ? ancestors[ancestors.length - 1] : null;
1549
+ const $firstHost = ancestors.length > 0 ? ancestors[0] : null;
1550
+ const $appHosts = $hosts.filter((h) => h.tagName.toLowerCase() === "swc-app" || h.getAttribute("is")?.startsWith("swc-app-"));
1551
+ const $appHost = $appHosts.length > 0 ? $appHosts[$appHosts.length - 1] === el ? $appHosts.length > 1 ? $appHosts[$appHosts.length - 2] : null : $appHosts[$appHosts.length - 1] : null;
1552
+ const $firstAppHost = $appHosts.length > 0 ? $appHosts[0] : null;
1675
1553
  return {
1676
- $host: $lastHost,
1554
+ $host,
1555
+ $parentHost,
1677
1556
  $hosts,
1678
1557
  $firstHost,
1679
- $lastHost,
1680
- $appHost: $lastAppHost,
1558
+ $lastHost: $parentHost,
1559
+ $appHost,
1681
1560
  $appHosts,
1682
1561
  $firstAppHost,
1683
- $lastAppHost
1562
+ $lastAppHost: $appHost
1684
1563
  };
1685
1564
  }
1686
1565
  };
@@ -1795,6 +1674,7 @@ var dooboostoreSimpleWebComponent = (() => {
1795
1674
  InjectSituationType2["APP_HOST"] = "SIMPLE_WEB_COMPONENT://APPHOST";
1796
1675
  InjectSituationType2["APP_HOSTS"] = "SIMPLE_WEB_COMPONENT://APPHOSTS";
1797
1676
  InjectSituationType2["HOST"] = "SIMPLE_WEB_COMPONENT://HOST";
1677
+ InjectSituationType2["PARENT_HOST"] = "SIMPLE_WEB_COMPONENT://PARENTHOST";
1798
1678
  InjectSituationType2["HOSTS"] = "SIMPLE_WEB_COMPONENT://HOSTS";
1799
1679
  InjectSituationType2["FIRST_HOST"] = "SIMPLE_WEB_COMPONENT://FIRSTHOST";
1800
1680
  InjectSituationType2["LAST_HOST"] = "SIMPLE_WEB_COMPONENT://LASTHOST";
@@ -1883,10 +1763,12 @@ var dooboostoreSimpleWebComponent = (() => {
1883
1763
  return this[methodName](...extraArgs);
1884
1764
  }
1885
1765
  }
1886
- _bindAttributeEvent(el, attrName, script) {
1887
- if (!attrName.startsWith("swc-on-"))
1888
- return;
1889
- const eventName = attrName.substring(7);
1766
+ _bindAttributeEvent(el, attrName, script, eventName) {
1767
+ if (!eventName) {
1768
+ if (!attrName.startsWith("swc-on-"))
1769
+ return;
1770
+ eventName = attrName.substring(7);
1771
+ }
1890
1772
  if (swcLifecycleAttributes.includes(attrName))
1891
1773
  return;
1892
1774
  const elHandlers = getHandlers(this);
@@ -1947,44 +1829,79 @@ var dooboostoreSimpleWebComponent = (() => {
1947
1829
  this.innerHTML = lContent;
1948
1830
  }
1949
1831
  addEventListenerList.forEach((meta) => {
1950
- const { type, query: query2, root, capture, once, passive, stopPropagation, stopImmediatePropagation, preventDefault } = meta.options;
1951
- const targetEls = [];
1952
- if (!query2) {
1953
- targetEls.push(this);
1954
- } else {
1955
- const searchRoots = [];
1832
+ const { selector, type, options } = meta;
1833
+ const { root, capture, once, passive, stopPropagation, stopImmediatePropagation, preventDefault, delegate } = options;
1834
+ if (delegate && selector && selector !== ":host") {
1835
+ const bindRoots = [];
1956
1836
  const r = root || "auto";
1957
1837
  if (r === "auto") {
1958
- searchRoots.push(this.shadowRoot || this);
1838
+ bindRoots.push(this.shadowRoot || this);
1959
1839
  } else if (r === "light") {
1960
- searchRoots.push(this);
1840
+ bindRoots.push(this);
1961
1841
  } else if (r === "shadow") {
1962
1842
  if (this.shadowRoot)
1963
- searchRoots.push(this.shadowRoot);
1843
+ bindRoots.push(this.shadowRoot);
1964
1844
  } else if (r === "all") {
1965
- searchRoots.push(this);
1845
+ bindRoots.push(this);
1966
1846
  if (this.shadowRoot)
1967
- searchRoots.push(this.shadowRoot);
1847
+ bindRoots.push(this.shadowRoot);
1968
1848
  }
1969
- searchRoots.forEach((sr) => {
1970
- const found = sr.querySelectorAll(query2);
1971
- found.forEach((el) => targetEls.push(el));
1849
+ bindRoots.forEach((bindRoot) => {
1850
+ const handler = (event) => {
1851
+ const target = event.target;
1852
+ const matchedEl = target.closest(selector);
1853
+ if (matchedEl && bindRoot.contains(matchedEl)) {
1854
+ if (stopPropagation)
1855
+ event.stopPropagation();
1856
+ if (stopImmediatePropagation)
1857
+ event.stopImmediatePropagation();
1858
+ if (preventDefault)
1859
+ event.preventDefault();
1860
+ const hostSet2 = SwcUtils.getHostSet(this);
1861
+ this._invokeLifecycleMethod(meta.propertyKey, hostSet2, [event, hostSet2, matchedEl]);
1862
+ }
1863
+ };
1864
+ bindRoot.addEventListener(type, handler, { capture, once, passive });
1865
+ });
1866
+ } else {
1867
+ const targetEls = [];
1868
+ if (!selector || selector === ":host") {
1869
+ targetEls.push(this);
1870
+ } else {
1871
+ const searchRoots = [];
1872
+ const r = root || "auto";
1873
+ if (r === "auto") {
1874
+ searchRoots.push(this.shadowRoot || this);
1875
+ } else if (r === "light") {
1876
+ searchRoots.push(this);
1877
+ } else if (r === "shadow") {
1878
+ if (this.shadowRoot)
1879
+ searchRoots.push(this.shadowRoot);
1880
+ } else if (r === "all") {
1881
+ searchRoots.push(this);
1882
+ if (this.shadowRoot)
1883
+ searchRoots.push(this.shadowRoot);
1884
+ }
1885
+ searchRoots.forEach((sr) => {
1886
+ const found = sr.querySelectorAll(selector);
1887
+ found.forEach((el) => targetEls.push(el));
1888
+ });
1889
+ }
1890
+ targetEls.forEach((el) => {
1891
+ const handler = (event) => {
1892
+ if (stopPropagation)
1893
+ event.stopPropagation();
1894
+ if (stopImmediatePropagation)
1895
+ event.stopImmediatePropagation();
1896
+ if (preventDefault)
1897
+ event.preventDefault();
1898
+ const hostSet2 = SwcUtils.getHostSet(this);
1899
+ this._invokeLifecycleMethod(meta.propertyKey, hostSet2, [event, hostSet2]);
1900
+ };
1901
+ const opts = { capture, once, passive };
1902
+ el.addEventListener(type, handler, opts);
1972
1903
  });
1973
1904
  }
1974
- targetEls.forEach((el) => {
1975
- const handler = (event) => {
1976
- if (stopPropagation)
1977
- event.stopPropagation();
1978
- if (stopImmediatePropagation)
1979
- event.stopImmediatePropagation();
1980
- if (preventDefault)
1981
- event.preventDefault();
1982
- const hostSet2 = SwcUtils.getHostSet(this);
1983
- this._invokeLifecycleMethod(meta.propertyKey, hostSet2, [event, hostSet2]);
1984
- };
1985
- const options = { capture, once, passive };
1986
- el.addEventListener(type, handler, options);
1987
- });
1988
1905
  });
1989
1906
  if (super.connectedCallback)
1990
1907
  await super.connectedCallback();
@@ -2029,7 +1946,9 @@ var dooboostoreSimpleWebComponent = (() => {
2029
1946
  super.attributeChangedCallback(name, old, newVal);
2030
1947
  if (name.startsWith("swc-on-") && !swcLifecycleAttributes.includes(name)) {
2031
1948
  if (newVal !== null) {
2032
- this._bindAttributeEvent(this, name, newVal);
1949
+ const customEventMeta = emitCustomEventList.find((it) => it.options.attributeName === name);
1950
+ const eventName = customEventMeta ? customEventMeta.options.type : name.substring(7);
1951
+ this._bindAttributeEvent(this, name, newVal, eventName);
2033
1952
  }
2034
1953
  }
2035
1954
  const mKeys = attrChangeMap.get(name);
@@ -2054,6 +1973,23 @@ var dooboostoreSimpleWebComponent = (() => {
2054
1973
  };
2055
1974
  }
2056
1975
  });
1976
+ emitCustomEventList.forEach((meta) => {
1977
+ const { propertyKey, options } = meta;
1978
+ const original = NewClass.prototype[propertyKey];
1979
+ if (typeof original === "function") {
1980
+ NewClass.prototype[propertyKey] = function(...args) {
1981
+ const detail = original.apply(this, args);
1982
+ const event = new CustomEvent(options.type, {
1983
+ detail,
1984
+ bubbles: options.bubbles,
1985
+ composed: options.composed,
1986
+ cancelable: options.cancelable
1987
+ });
1988
+ this.dispatchEvent(event);
1989
+ return detail;
1990
+ };
1991
+ }
1992
+ });
2057
1993
  const originalProto = constructor.prototype;
2058
1994
  const newProto = NewClass.prototype;
2059
1995
  Object.getOwnPropertyNames(originalProto).forEach((name) => {
@@ -2077,48 +2013,37 @@ var dooboostoreSimpleWebComponent = (() => {
2077
2013
 
2078
2014
  // src/decorators/query.ts
2079
2015
  var QUERY_METADATA_KEY = Symbol("simple-web-component:query");
2080
- function query(arg1, arg2) {
2081
- const decorator = (selector, options, target, propertyKey, descriptor) => {
2082
- const isMethod = !!descriptor;
2016
+ function query(selector, options = {}) {
2017
+ return (target, propertyKey, descriptor) => {
2018
+ if (descriptor !== void 0) {
2019
+ throw new Error(`@query decorator cannot be used on methods. (Method: ${String(propertyKey)})`);
2020
+ }
2083
2021
  const constructor = target.constructor;
2084
2022
  let queries = ReflectUtils.getMetadata(QUERY_METADATA_KEY, constructor);
2085
2023
  if (!queries) {
2086
2024
  queries = [];
2087
2025
  ReflectUtils.defineMetadata(QUERY_METADATA_KEY, queries, constructor);
2088
2026
  }
2089
- queries.push({ selector, options, propertyKey, isMethod });
2090
- if (!isMethod) {
2091
- Object.defineProperty(target, propertyKey, {
2092
- get() {
2093
- if (!selector)
2094
- return this;
2095
- let searchRoot = this;
2096
- if (options.root === "shadow")
2097
- searchRoot = this.shadowRoot || this;
2098
- else if (options.root === "light")
2099
- searchRoot = this;
2100
- else
2101
- searchRoot = this.shadowRoot || this;
2102
- return searchRoot.querySelector(selector);
2103
- },
2104
- enumerable: true,
2105
- configurable: true
2106
- });
2107
- }
2108
- };
2109
- if (arg1 && typeof arg2 === "string") {
2110
- return decorator("", {}, arg1, arg2);
2111
- }
2112
- return (target, propertyKey, descriptor) => {
2113
- let selector = "";
2114
- let options = {};
2115
- if (typeof arg1 === "string") {
2116
- selector = arg1;
2117
- } else if (typeof arg1 === "object") {
2118
- options = arg1;
2119
- selector = options.selector || "";
2120
- }
2121
- decorator(selector, options, target, propertyKey, descriptor);
2027
+ queries.push({ selector, options, propertyKey });
2028
+ Object.defineProperty(target, propertyKey, {
2029
+ get() {
2030
+ if (!selector || selector === ":host")
2031
+ return this;
2032
+ const r = options.root || "auto";
2033
+ if (r === "shadow") {
2034
+ return this.shadowRoot ? this.shadowRoot.querySelector(selector) : null;
2035
+ }
2036
+ if (r === "light") {
2037
+ return this.querySelector(selector);
2038
+ }
2039
+ if (r === "all") {
2040
+ return this.shadowRoot?.querySelector(selector) || this.querySelector(selector);
2041
+ }
2042
+ return (this.shadowRoot || this).querySelector(selector);
2043
+ },
2044
+ enumerable: true,
2045
+ configurable: true
2046
+ });
2122
2047
  };
2123
2048
  }
2124
2049
  var getQueryMetadata = (target) => {
@@ -2128,48 +2053,40 @@ var dooboostoreSimpleWebComponent = (() => {
2128
2053
 
2129
2054
  // src/decorators/queryAll.ts
2130
2055
  var QUERY_ALL_METADATA_KEY = Symbol("simple-web-component:query-all");
2131
- function queryAll(arg1, arg2) {
2132
- const decorator = (selector, options, target, propertyKey, descriptor) => {
2133
- const isMethod = !!descriptor;
2056
+ function queryAll(selector, options = {}) {
2057
+ return (target, propertyKey, descriptor) => {
2058
+ if (descriptor !== void 0) {
2059
+ throw new Error(`@queryAll decorator cannot be used on methods. (Method: ${String(propertyKey)})`);
2060
+ }
2134
2061
  const constructor = target.constructor;
2135
2062
  let queries = ReflectUtils.getMetadata(QUERY_ALL_METADATA_KEY, constructor);
2136
2063
  if (!queries) {
2137
2064
  queries = [];
2138
2065
  ReflectUtils.defineMetadata(QUERY_ALL_METADATA_KEY, queries, constructor);
2139
2066
  }
2140
- queries.push({ selector, options, propertyKey, isMethod });
2141
- if (!isMethod) {
2142
- Object.defineProperty(target, propertyKey, {
2143
- get() {
2144
- if (!selector)
2145
- return [this];
2146
- let searchRoot = this;
2147
- if (options.root === "shadow")
2148
- searchRoot = this.shadowRoot || this;
2149
- else if (options.root === "light")
2150
- searchRoot = this;
2151
- else
2152
- searchRoot = this.shadowRoot || this;
2153
- return searchRoot.querySelectorAll(selector);
2154
- },
2155
- enumerable: true,
2156
- configurable: true
2157
- });
2158
- }
2159
- };
2160
- if (arg1 && typeof arg2 === "string") {
2161
- return decorator("", {}, arg1, arg2);
2162
- }
2163
- return (target, propertyKey, descriptor) => {
2164
- let selector = "";
2165
- let options = {};
2166
- if (typeof arg1 === "string") {
2167
- selector = arg1;
2168
- } else if (typeof arg1 === "object") {
2169
- options = arg1;
2170
- selector = options.selector || "";
2171
- }
2172
- decorator(selector, options, target, propertyKey, descriptor);
2067
+ queries.push({ selector, options, propertyKey });
2068
+ Object.defineProperty(target, propertyKey, {
2069
+ get() {
2070
+ if (!selector || selector === ":host")
2071
+ return [this];
2072
+ const r = options.root || "auto";
2073
+ if (r === "shadow") {
2074
+ return this.shadowRoot ? this.shadowRoot.querySelectorAll(selector) : [];
2075
+ }
2076
+ if (r === "light") {
2077
+ return this.querySelectorAll(selector);
2078
+ }
2079
+ if (r === "all") {
2080
+ const sNodes = this.shadowRoot ? Array.from(this.shadowRoot.querySelectorAll(selector)) : [];
2081
+ const lNodes = Array.from(this.querySelectorAll(selector));
2082
+ return [...sNodes, ...lNodes];
2083
+ }
2084
+ const root = this.shadowRoot || this;
2085
+ return root.querySelectorAll(selector);
2086
+ },
2087
+ enumerable: true,
2088
+ configurable: true
2089
+ });
2173
2090
  };
2174
2091
  }
2175
2092
  var getQueryAllMetadata = (target) => {