@dooboostore/simple-web-component 1.0.0 → 1.0.2

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 (100) hide show
  1. package/README.md +70 -78
  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 +126 -0
  15. package/dist/cjs/elements/SwcForOf.js.map +7 -0
  16. package/dist/cjs/elements/SwcHTMLElementBase.js +102 -0
  17. package/dist/cjs/elements/SwcHTMLElementBase.js.map +7 -0
  18. package/dist/cjs/elements/SwcIf.js +127 -0
  19. package/dist/cjs/elements/SwcIf.js.map +7 -0
  20. package/dist/cjs/elements/SwcObject.js +115 -0
  21. package/dist/cjs/elements/SwcObject.js.map +7 -0
  22. package/dist/cjs/elements/SwcOther.js +56 -0
  23. package/dist/cjs/elements/SwcOther.js.map +7 -0
  24. package/dist/cjs/elements/SwcWhen.js +56 -0
  25. package/dist/cjs/elements/SwcWhen.js.map +7 -0
  26. package/dist/cjs/index.js +11 -1
  27. package/dist/cjs/index.js.map +2 -2
  28. package/dist/esm/decorators/addEventListener.js +23 -0
  29. package/dist/esm/decorators/addEventListener.js.map +7 -0
  30. package/dist/esm/decorators/attributeChanged.js +24 -4
  31. package/dist/esm/decorators/attributeChanged.js.map +2 -2
  32. package/dist/esm/decorators/{element.js → elementDefind.js} +89 -11
  33. package/dist/esm/decorators/elementDefind.js.map +7 -0
  34. package/dist/esm/decorators/query.js +34 -0
  35. package/dist/esm/decorators/query.js.map +7 -0
  36. package/dist/esm/decorators/queryAll.js +34 -0
  37. package/dist/esm/decorators/queryAll.js.map +7 -0
  38. package/dist/esm/elements/SwcChoose.js +98 -0
  39. package/dist/esm/elements/SwcChoose.js.map +7 -0
  40. package/dist/esm/elements/SwcForOf.js +107 -0
  41. package/dist/esm/elements/SwcForOf.js.map +7 -0
  42. package/dist/esm/elements/SwcHTMLElementBase.js +83 -0
  43. package/dist/esm/elements/SwcHTMLElementBase.js.map +7 -0
  44. package/dist/esm/elements/SwcIf.js +108 -0
  45. package/dist/esm/elements/SwcIf.js.map +7 -0
  46. package/dist/esm/elements/SwcObject.js +96 -0
  47. package/dist/esm/elements/SwcObject.js.map +7 -0
  48. package/dist/esm/elements/SwcOther.js +37 -0
  49. package/dist/esm/elements/SwcOther.js.map +7 -0
  50. package/dist/esm/elements/SwcWhen.js +37 -0
  51. package/dist/esm/elements/SwcWhen.js.map +7 -0
  52. package/dist/esm/index.js +11 -1
  53. package/dist/esm/index.js.map +2 -2
  54. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +744 -14
  55. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  56. package/dist/types/decorators/addEventListener.d.ts +16 -0
  57. package/dist/types/decorators/addEventListener.d.ts.map +1 -0
  58. package/dist/types/decorators/attributeChanged.d.ts +3 -1
  59. package/dist/types/decorators/attributeChanged.d.ts.map +1 -1
  60. package/dist/types/decorators/{element.d.ts → elementDefind.d.ts} +2 -2
  61. package/dist/types/decorators/elementDefind.d.ts.map +1 -0
  62. package/dist/types/decorators/query.d.ts +13 -0
  63. package/dist/types/decorators/query.d.ts.map +1 -0
  64. package/dist/types/decorators/queryAll.d.ts +13 -0
  65. package/dist/types/decorators/queryAll.d.ts.map +1 -0
  66. package/dist/types/elements/SwcChoose.d.ts +12 -0
  67. package/dist/types/elements/SwcChoose.d.ts.map +1 -0
  68. package/dist/types/elements/SwcForOf.d.ts +14 -0
  69. package/dist/types/elements/SwcForOf.d.ts.map +1 -0
  70. package/dist/types/elements/SwcHTMLElementBase.d.ts +14 -0
  71. package/dist/types/elements/SwcHTMLElementBase.d.ts.map +1 -0
  72. package/dist/types/elements/SwcIf.d.ts +14 -0
  73. package/dist/types/elements/SwcIf.d.ts.map +1 -0
  74. package/dist/types/elements/SwcObject.d.ts +14 -0
  75. package/dist/types/elements/SwcObject.d.ts.map +1 -0
  76. package/dist/types/elements/SwcOther.d.ts +5 -0
  77. package/dist/types/elements/SwcOther.d.ts.map +1 -0
  78. package/dist/types/elements/SwcWhen.d.ts +5 -0
  79. package/dist/types/elements/SwcWhen.d.ts.map +1 -0
  80. package/dist/types/index.d.ts +11 -1
  81. package/dist/types/index.d.ts.map +1 -1
  82. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +744 -14
  83. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  84. package/package.json +1 -1
  85. package/src/decorators/addEventListener.ts +35 -0
  86. package/src/decorators/attributeChanged.ts +29 -6
  87. package/src/decorators/{element.ts → elementDefind.ts} +121 -11
  88. package/src/decorators/query.ts +46 -0
  89. package/src/decorators/queryAll.ts +46 -0
  90. package/src/elements/SwcChoose.ts +83 -0
  91. package/src/elements/SwcForOf.ts +95 -0
  92. package/src/elements/SwcHTMLElementBase.ts +93 -0
  93. package/src/elements/SwcIf.ts +92 -0
  94. package/src/elements/SwcObject.ts +78 -0
  95. package/src/elements/SwcOther.ts +14 -0
  96. package/src/elements/SwcWhen.ts +14 -0
  97. package/src/index.ts +12 -2
  98. package/dist/cjs/decorators/element.js.map +0 -7
  99. package/dist/esm/decorators/element.js.map +0 -7
  100. package/dist/types/decorators/element.d.ts.map +0 -1
@@ -0,0 +1,117 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var SwcChoose_exports = {};
19
+ __export(SwcChoose_exports, {
20
+ SwcChoose: () => SwcChoose
21
+ });
22
+ module.exports = __toCommonJS(SwcChoose_exports);
23
+ var import__ = require("../index");
24
+ var __decorate = function(decorators, target, key, desc) {
25
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27
+ 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;
28
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
29
+ };
30
+ var __metadata = function(k, v) {
31
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
32
+ };
33
+ let SwcChoose = class SwcChoose2 extends HTMLElement {
34
+ constructor() {
35
+ super(...arguments);
36
+ this._observer = null;
37
+ this._value = void 0;
38
+ }
39
+ set value(val) {
40
+ this._value = val;
41
+ this.evaluate();
42
+ }
43
+ get value() {
44
+ return this._value;
45
+ }
46
+ styles() {
47
+ return `:host { display: contents; }`;
48
+ }
49
+ render() {
50
+ return `<slot id="choose-slot"></slot>`;
51
+ }
52
+ connectedCallback() {
53
+ this._observer = new MutationObserver(() => this.evaluate());
54
+ this._observer.observe(this, { attributes: true, subtree: true, childList: true });
55
+ this.evaluate();
56
+ }
57
+ disconnectedCallback() {
58
+ this._observer?.disconnect();
59
+ }
60
+ evaluate() {
61
+ const whens = Array.from(this.querySelectorAll("swc-when"));
62
+ const other = this.querySelector("swc-other");
63
+ let matched = false;
64
+ const chooseValue = this.getAttribute("value") ?? this._value;
65
+ whens.forEach((when) => {
66
+ if (matched) {
67
+ when.style.display = "none";
68
+ return;
69
+ }
70
+ const testAttr = when.getAttribute("test");
71
+ if (testAttr === null)
72
+ return;
73
+ if (testAttr.includes("{{"))
74
+ return;
75
+ let isConditionMet = false;
76
+ if (chooseValue !== void 0 && chooseValue !== null) {
77
+ isConditionMet = String(chooseValue) === String(testAttr);
78
+ } else {
79
+ try {
80
+ if (testAttr === "true")
81
+ isConditionMet = true;
82
+ else if (testAttr === "false")
83
+ isConditionMet = false;
84
+ else
85
+ isConditionMet = !!new Function(`return ${testAttr}`)();
86
+ } catch (e) {
87
+ isConditionMet = false;
88
+ }
89
+ }
90
+ if (isConditionMet) {
91
+ when.style.display = "";
92
+ matched = true;
93
+ } else {
94
+ when.style.display = "none";
95
+ }
96
+ });
97
+ if (other) {
98
+ other.style.display = matched ? "none" : "";
99
+ }
100
+ }
101
+ };
102
+ __decorate([
103
+ import__.style,
104
+ __metadata("design:type", Function),
105
+ __metadata("design:paramtypes", []),
106
+ __metadata("design:returntype", void 0)
107
+ ], SwcChoose.prototype, "styles", null);
108
+ __decorate([
109
+ import__.template,
110
+ __metadata("design:type", Function),
111
+ __metadata("design:paramtypes", []),
112
+ __metadata("design:returntype", void 0)
113
+ ], SwcChoose.prototype, "render", null);
114
+ SwcChoose = __decorate([
115
+ (0, import__.elementDefind)({ tagName: "swc-choose", useShadow: true })
116
+ ], SwcChoose);
117
+ //# sourceMappingURL=SwcChoose.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/elements/SwcChoose.ts"],
4
+ "sourcesContent": ["import { elementDefind, template, style } from '../index';\n\n@elementDefind({ tagName: 'swc-choose', useShadow: true })\nexport class SwcChoose extends HTMLElement {\n private _observer: MutationObserver | null = null;\n private _value: any = undefined;\n\n set value(val: any) {\n this._value = val;\n this.evaluate();\n }\n\n get value() {\n return this._value;\n }\n\n @style\n styles() {\n return `:host { display: contents; }`;\n }\n\n @template\n render() {\n return `<slot id=\"choose-slot\"></slot>`;\n }\n\n connectedCallback() {\n this._observer = new MutationObserver(() => this.evaluate());\n this._observer.observe(this, { attributes: true, subtree: true, childList: true });\n this.evaluate();\n }\n\n disconnectedCallback() {\n this._observer?.disconnect();\n }\n\n private evaluate() {\n const whens = Array.from(this.querySelectorAll('swc-when'));\n const other = this.querySelector('swc-other');\n let matched = false;\n\n // 현재 choose에 설정된 value (문자열인 경우 \"null\", \"undefined\" 등 처리)\n const chooseValue = this.getAttribute('value') ?? this._value;\n\n whens.forEach(when => {\n if (matched) {\n (when as HTMLElement).style.display = 'none';\n return;\n }\n\n const testAttr = when.getAttribute('test');\n if (testAttr === null) return;\n if (testAttr.includes('{{')) return; // 아직 치환 전이면 스킵\n\n let isConditionMet = false;\n\n if (chooseValue !== undefined && chooseValue !== null) {\n // 1. 매칭 모드: choose의 value와 when의 test값이 같은지 비교\n isConditionMet = String(chooseValue) === String(testAttr);\n } else {\n // 2. 표현식 모드: testAttr 자체가 실행 가능한 코드인 경우\n try {\n if (testAttr === 'true') isConditionMet = true;\n else if (testAttr === 'false') isConditionMet = false;\n else isConditionMet = !!new Function(`return ${testAttr}`)();\n } catch (e) {\n isConditionMet = false;\n }\n }\n\n if (isConditionMet) {\n (when as HTMLElement).style.display = '';\n matched = true;\n } else {\n (when as HTMLElement).style.display = 'none';\n }\n });\n\n if (other) {\n (other as HTMLElement).style.display = matched ? 'none' : '';\n }\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,eAA+C;;;;;;;;;;AAGxC,IAAM,YAAN,MAAMA,mBAAkB,YAAW;EAAnC,cAAA;;AACG,SAAA,YAAqC;AACrC,SAAA,SAAc;EA6ExB;EA3EE,IAAI,MAAM,KAAQ;AAChB,SAAK,SAAS;AACd,SAAK,SAAQ;EACf;EAEA,IAAI,QAAK;AACP,WAAO,KAAK;EACd;EAGA,SAAM;AACJ,WAAO;EACT;EAGA,SAAM;AACJ,WAAO;EACT;EAEA,oBAAiB;AACf,SAAK,YAAY,IAAI,iBAAiB,MAAM,KAAK,SAAQ,CAAE;AAC3D,SAAK,UAAU,QAAQ,MAAM,EAAE,YAAY,MAAM,SAAS,MAAM,WAAW,KAAI,CAAE;AACjF,SAAK,SAAQ;EACf;EAEA,uBAAoB;AAClB,SAAK,WAAW,WAAU;EAC5B;EAEQ,WAAQ;AACd,UAAM,QAAQ,MAAM,KAAK,KAAK,iBAAiB,UAAU,CAAC;AAC1D,UAAM,QAAQ,KAAK,cAAc,WAAW;AAC5C,QAAI,UAAU;AAGd,UAAM,cAAc,KAAK,aAAa,OAAO,KAAK,KAAK;AAEvD,UAAM,QAAQ,UAAO;AACnB,UAAI,SAAS;AACV,aAAqB,MAAM,UAAU;AACtC;MACF;AAEA,YAAM,WAAW,KAAK,aAAa,MAAM;AACzC,UAAI,aAAa;AAAM;AACvB,UAAI,SAAS,SAAS,IAAI;AAAG;AAE7B,UAAI,iBAAiB;AAErB,UAAI,gBAAgB,UAAa,gBAAgB,MAAM;AAErD,yBAAiB,OAAO,WAAW,MAAM,OAAO,QAAQ;MAC1D,OAAO;AAEL,YAAI;AACF,cAAI,aAAa;AAAQ,6BAAiB;mBACjC,aAAa;AAAS,6BAAiB;;AAC3C,6BAAiB,CAAC,CAAC,IAAI,SAAS,UAAU,QAAQ,EAAE,EAAC;QAC5D,SAAS,GAAG;AACV,2BAAiB;QACnB;MACF;AAEA,UAAI,gBAAgB;AACjB,aAAqB,MAAM,UAAU;AACtC,kBAAU;MACZ,OAAO;AACJ,aAAqB,MAAM,UAAU;MACxC;IACF,CAAC;AAED,QAAI,OAAO;AACR,YAAsB,MAAM,UAAU,UAAU,SAAS;IAC5D;EACF;;AAhEA,WAAA;EADC;;;;;AAMD,WAAA;EADC;;;;;AAlBU,YAAS,WAAA;MADrB,wBAAc,EAAE,SAAS,cAAc,WAAW,KAAI,CAAE;GAC5C,SAAS;",
6
+ "names": ["SwcChoose"]
7
+ }
@@ -0,0 +1,126 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var SwcForOf_exports = {};
19
+ __export(SwcForOf_exports, {
20
+ SwcForOf: () => SwcForOf
21
+ });
22
+ module.exports = __toCommonJS(SwcForOf_exports);
23
+ var import__ = require("../index");
24
+ var import_SwcHTMLElementBase = require("./SwcHTMLElementBase");
25
+ var __decorate = function(decorators, target, key, desc) {
26
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28
+ 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;
29
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
30
+ };
31
+ var __metadata = function(k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ let SwcForOf = class SwcForOf2 extends import_SwcHTMLElementBase.SwcHTMLElementBase {
35
+ constructor() {
36
+ super();
37
+ this._value = [];
38
+ }
39
+ set value(val) {
40
+ if (!Array.isArray(val))
41
+ val = [];
42
+ this._value = this.createReactiveProxy(val, () => this.renderAll(), (idx, v) => this.updateSingleRow(idx, v));
43
+ this.renderAll();
44
+ }
45
+ get value() {
46
+ return this._value;
47
+ }
48
+ styles() {
49
+ return `:host { display: contents; }`;
50
+ }
51
+ renderTemplate() {
52
+ return `<slot id="tpl-slot" style="display:none;"></slot>`;
53
+ }
54
+ connectedCallback() {
55
+ this.initCore();
56
+ this.renderAll();
57
+ }
58
+ updateSingleRow(index, newValue) {
59
+ const targets = this.querySelectorAll(`[slot="row-${index}"]`);
60
+ if (targets.length > 0) {
61
+ targets.forEach((target) => this.applyData(target, newValue, index));
62
+ } else {
63
+ this.renderRow(newValue, index);
64
+ }
65
+ }
66
+ renderRow(item, index) {
67
+ if (!this.shadowRoot || this._masterTplNodes.length === 0)
68
+ return;
69
+ const slotName = `row-${index}`;
70
+ if (!this.shadowRoot.querySelector(`slot[name="${slotName}"]`)) {
71
+ const slot = document.createElement("slot");
72
+ slot.name = slotName;
73
+ this.shadowRoot.appendChild(slot);
74
+ }
75
+ this._masterTplNodes.forEach((tplNode) => {
76
+ const clone = tplNode.cloneNode(true);
77
+ if (clone.nodeType === Node.ELEMENT_NODE) {
78
+ clone.setAttribute("slot", slotName);
79
+ clone.style.display = "";
80
+ } else if (clone.nodeType === Node.TEXT_NODE) {
81
+ if (clone.textContent?.trim().length === 0)
82
+ return;
83
+ const span = document.createElement("span");
84
+ span.setAttribute("slot", slotName);
85
+ span.appendChild(clone);
86
+ this.appendChild(span);
87
+ this.applyData(span, item, index);
88
+ return;
89
+ }
90
+ this.appendChild(clone);
91
+ this.applyData(clone, item, index);
92
+ });
93
+ }
94
+ renderAll() {
95
+ if (this._masterTplNodes.length === 0 || !this.shadowRoot)
96
+ return;
97
+ Array.from(this.children).forEach((c) => {
98
+ const slot = c.getAttribute("slot");
99
+ if (slot && slot.startsWith("row-")) {
100
+ c.remove();
101
+ }
102
+ });
103
+ Array.from(this.shadowRoot.querySelectorAll("slot")).forEach((s) => {
104
+ if (s.id !== "tpl-slot")
105
+ s.remove();
106
+ });
107
+ this._value.forEach((item, index) => this.renderRow(item, index));
108
+ }
109
+ };
110
+ __decorate([
111
+ import__.style,
112
+ __metadata("design:type", Function),
113
+ __metadata("design:paramtypes", []),
114
+ __metadata("design:returntype", void 0)
115
+ ], SwcForOf.prototype, "styles", null);
116
+ __decorate([
117
+ import__.template,
118
+ __metadata("design:type", Function),
119
+ __metadata("design:paramtypes", []),
120
+ __metadata("design:returntype", void 0)
121
+ ], SwcForOf.prototype, "renderTemplate", null);
122
+ SwcForOf = __decorate([
123
+ (0, import__.elementDefind)({ tagName: "swc-for-of", useShadow: true }),
124
+ __metadata("design:paramtypes", [])
125
+ ], SwcForOf);
126
+ //# sourceMappingURL=SwcForOf.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/elements/SwcForOf.ts"],
4
+ "sourcesContent": ["import { elementDefind, template, style } from '../index';\nimport { SwcHTMLElementBase } from './SwcHTMLElementBase';\n\n@elementDefind({ tagName: 'swc-for-of', useShadow: true })\nexport class SwcForOf extends SwcHTMLElementBase {\n private _value: any[] = [];\n\n constructor() {\n super();\n }\n\n set value(val: any[]) {\n if (!Array.isArray(val)) val = [];\n this._value = this.createReactiveProxy(\n val,\n () => this.renderAll(),\n (idx, v) => this.updateSingleRow(idx, v)\n );\n this.renderAll();\n }\n\n get value(): any[] {\n return this._value;\n }\n\n @style\n styles() {\n return `:host { display: contents; }`;\n }\n\n @template\n renderTemplate() {\n return `<slot id=\"tpl-slot\" style=\"display:none;\"></slot>`;\n }\n\n connectedCallback() {\n this.initCore();\n this.renderAll();\n }\n\n public updateSingleRow(index: number, newValue: any) {\n const targets = this.querySelectorAll(`[slot=\"row-${index}\"]`);\n if (targets.length > 0) {\n targets.forEach(target => this.applyData(target, newValue, index));\n } else {\n this.renderRow(newValue, index);\n }\n }\n\n private renderRow(item: any, index: number) {\n if (!this.shadowRoot || this._masterTplNodes.length === 0) return;\n\n const slotName = `row-${index}`;\n if (!this.shadowRoot.querySelector(`slot[name=\"${slotName}\"]`)) {\n const slot = document.createElement('slot');\n slot.name = slotName;\n this.shadowRoot.appendChild(slot);\n }\n\n this._masterTplNodes.forEach(tplNode => {\n const clone = tplNode.cloneNode(true);\n if (clone.nodeType === Node.ELEMENT_NODE) {\n (clone as HTMLElement).setAttribute('slot', slotName);\n (clone as HTMLElement).style.display = '';\n } else if (clone.nodeType === Node.TEXT_NODE) {\n if (clone.textContent?.trim().length === 0) return;\n const span = document.createElement('span');\n span.setAttribute('slot', slotName);\n span.appendChild(clone);\n this.appendChild(span);\n this.applyData(span, item, index);\n return;\n }\n this.appendChild(clone);\n this.applyData(clone, item, index);\n });\n }\n\n private renderAll() {\n if (this._masterTplNodes.length === 0 || !this.shadowRoot) return;\n\n Array.from(this.children).forEach(c => {\n const slot = c.getAttribute('slot');\n if (slot && slot.startsWith('row-')) {\n c.remove();\n }\n });\n\n Array.from(this.shadowRoot.querySelectorAll('slot')).forEach(s => {\n if (s.id !== 'tpl-slot') s.remove();\n });\n\n this._value.forEach((item, index) => this.renderRow(item, index));\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,eAA+C;AAC/C,gCAAmC;;;;;;;;;;AAG5B,IAAM,WAAN,MAAMA,kBAAiB,6CAAkB;EAG9C,cAAA;AACE,UAAK;AAHC,SAAA,SAAgB,CAAA;EAIxB;EAEA,IAAI,MAAM,KAAU;AAClB,QAAI,CAAC,MAAM,QAAQ,GAAG;AAAG,YAAM,CAAA;AAC/B,SAAK,SAAS,KAAK,oBACjB,KACA,MAAM,KAAK,UAAS,GACpB,CAAC,KAAK,MAAM,KAAK,gBAAgB,KAAK,CAAC,CAAC;AAE1C,SAAK,UAAS;EAChB;EAEA,IAAI,QAAK;AACP,WAAO,KAAK;EACd;EAGA,SAAM;AACJ,WAAO;EACT;EAGA,iBAAc;AACZ,WAAO;EACT;EAEA,oBAAiB;AACf,SAAK,SAAQ;AACb,SAAK,UAAS;EAChB;EAEO,gBAAgB,OAAe,UAAa;AACjD,UAAM,UAAU,KAAK,iBAAiB,cAAc,KAAK,IAAI;AAC7D,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,QAAQ,YAAU,KAAK,UAAU,QAAQ,UAAU,KAAK,CAAC;IACnE,OAAO;AACL,WAAK,UAAU,UAAU,KAAK;IAChC;EACF;EAEQ,UAAU,MAAW,OAAa;AACxC,QAAI,CAAC,KAAK,cAAc,KAAK,gBAAgB,WAAW;AAAG;AAE3D,UAAM,WAAW,OAAO,KAAK;AAC7B,QAAI,CAAC,KAAK,WAAW,cAAc,cAAc,QAAQ,IAAI,GAAG;AAC9D,YAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,WAAK,OAAO;AACZ,WAAK,WAAW,YAAY,IAAI;IAClC;AAEA,SAAK,gBAAgB,QAAQ,aAAU;AACrC,YAAM,QAAQ,QAAQ,UAAU,IAAI;AACpC,UAAI,MAAM,aAAa,KAAK,cAAc;AACvC,cAAsB,aAAa,QAAQ,QAAQ;AACnD,cAAsB,MAAM,UAAU;MACzC,WAAW,MAAM,aAAa,KAAK,WAAW;AAC5C,YAAI,MAAM,aAAa,KAAI,EAAG,WAAW;AAAG;AAC5C,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,aAAa,QAAQ,QAAQ;AAClC,aAAK,YAAY,KAAK;AACtB,aAAK,YAAY,IAAI;AACrB,aAAK,UAAU,MAAM,MAAM,KAAK;AAChC;MACF;AACA,WAAK,YAAY,KAAK;AACtB,WAAK,UAAU,OAAO,MAAM,KAAK;IACnC,CAAC;EACH;EAEQ,YAAS;AACf,QAAI,KAAK,gBAAgB,WAAW,KAAK,CAAC,KAAK;AAAY;AAE3D,UAAM,KAAK,KAAK,QAAQ,EAAE,QAAQ,OAAI;AACpC,YAAM,OAAO,EAAE,aAAa,MAAM;AAClC,UAAI,QAAQ,KAAK,WAAW,MAAM,GAAG;AACnC,UAAE,OAAM;MACV;IACF,CAAC;AAED,UAAM,KAAK,KAAK,WAAW,iBAAiB,MAAM,CAAC,EAAE,QAAQ,OAAI;AAC/D,UAAI,EAAE,OAAO;AAAY,UAAE,OAAM;IACnC,CAAC;AAED,SAAK,OAAO,QAAQ,CAAC,MAAM,UAAU,KAAK,UAAU,MAAM,KAAK,CAAC;EAClE;;AAnEA,WAAA;EADC;;;;;AAMD,WAAA;EADC;;;;;AA1BU,WAAQ,WAAA;MADpB,wBAAc,EAAE,SAAS,cAAc,WAAW,KAAI,CAAE;;GAC5C,QAAQ;",
6
+ "names": ["SwcForOf"]
7
+ }
@@ -0,0 +1,102 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var SwcHTMLElementBase_exports = {};
19
+ __export(SwcHTMLElementBase_exports, {
20
+ SwcHTMLElementBase: () => SwcHTMLElementBase
21
+ });
22
+ module.exports = __toCommonJS(SwcHTMLElementBase_exports);
23
+ class SwcHTMLElementBase extends HTMLElement {
24
+ constructor() {
25
+ super();
26
+ this._masterTplNodes = [];
27
+ this._asKey = "value";
28
+ this._asIndexKey = "index";
29
+ }
30
+ initCore() {
31
+ this._asKey = this.getAttribute("as") || "value";
32
+ this._asIndexKey = this.getAttribute("as-index") || "index";
33
+ const tplSlot = this.shadowRoot?.getElementById("tpl-slot");
34
+ if (tplSlot) {
35
+ this._masterTplNodes = tplSlot.assignedNodes().map((n) => n.cloneNode(true));
36
+ }
37
+ }
38
+ getValueByPath(obj, path) {
39
+ if (path === this._asKey) return obj;
40
+ if (path.startsWith(`${this._asKey}.`)) {
41
+ return path.split(".").slice(1).reduce((acc, part) => acc && acc[part], obj);
42
+ }
43
+ return void 0;
44
+ }
45
+ applyData(node, data, index) {
46
+ const context = {};
47
+ if (index !== void 0) {
48
+ context[this._asIndexKey] = index.toString();
49
+ }
50
+ const walk = (n) => {
51
+ if (n.nodeType === Node.TEXT_NODE) {
52
+ if (!n._original) n._original = n.textContent;
53
+ let text = n._original;
54
+ text = text.replace(/{{(.*?)}}/g, (match, path) => {
55
+ path = path.trim();
56
+ if (context[path] !== void 0) return context[path];
57
+ const val = this.getValueByPath(data, path);
58
+ return val !== void 0 ? val : match;
59
+ });
60
+ if (n.textContent !== text) n.textContent = text;
61
+ } else if (n.nodeType === Node.ELEMENT_NODE) {
62
+ const el = n;
63
+ Array.from(el.attributes).forEach((a) => {
64
+ if (!a._original) a._original = a.value;
65
+ let val = a._original;
66
+ val = val.replace(/{{(.*?)}}/g, (match, path) => {
67
+ path = path.trim();
68
+ if (context[path] !== void 0) return context[path];
69
+ const v = this.getValueByPath(data, path);
70
+ return v !== void 0 ? v : match;
71
+ });
72
+ if (a.value !== val) a.value = val;
73
+ });
74
+ el.childNodes.forEach(walk);
75
+ }
76
+ };
77
+ walk(node);
78
+ }
79
+ /**
80
+ * 객체/배열의 변경을 감지하는 Proxy 생성 유틸리티
81
+ */
82
+ createReactiveProxy(target, onChange, onIndexChange) {
83
+ return new Proxy(target, {
84
+ set: (t, prop, val) => {
85
+ const isIndex = !isNaN(Number(prop));
86
+ t[prop] = val;
87
+ if (isIndex && onIndexChange) {
88
+ onIndexChange(Number(prop), val);
89
+ } else {
90
+ onChange();
91
+ }
92
+ return true;
93
+ },
94
+ deleteProperty: (t, prop) => {
95
+ delete t[prop];
96
+ onChange();
97
+ return true;
98
+ }
99
+ });
100
+ }
101
+ }
102
+ //# sourceMappingURL=SwcHTMLElementBase.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/elements/SwcHTMLElementBase.ts"],
4
+ "sourcesContent": ["import { getTemplateMethod } from '../decorators/template';\nimport { getStyleMethod } from '../decorators/style';\n\nexport abstract class SwcHTMLElementBase extends HTMLElement {\n protected _masterTplNodes: Node[] = [];\n protected _asKey: string = 'value';\n protected _asIndexKey: string = 'index';\n\n constructor() {\n super();\n }\n\n protected initCore() {\n this._asKey = this.getAttribute('as') || 'value';\n this._asIndexKey = this.getAttribute('as-index') || 'index';\n const tplSlot = this.shadowRoot?.getElementById('tpl-slot') as HTMLSlotElement;\n if (tplSlot) {\n this._masterTplNodes = tplSlot.assignedNodes().map(n => n.cloneNode(true));\n }\n }\n\n protected getValueByPath(obj: any, path: string) {\n if (path === this._asKey) return obj;\n if (path.startsWith(`${this._asKey}.`)) {\n return path\n .split('.')\n .slice(1)\n .reduce((acc, part) => acc && acc[part], obj);\n }\n return undefined;\n }\n\n protected applyData(node: Node, data: any, index?: number) {\n const context: Record<string, any> = {};\n if (index !== undefined) {\n context[this._asIndexKey] = index.toString();\n }\n\n const walk = (n: Node) => {\n if (n.nodeType === Node.TEXT_NODE) {\n if (!(n as any)._original) (n as any)._original = n.textContent;\n let text = (n as any)._original;\n\n text = text.replace(/{{(.*?)}}/g, (match: string, path: string) => {\n path = path.trim();\n if (context[path] !== undefined) return context[path];\n const val = this.getValueByPath(data, path);\n return val !== undefined ? val : match;\n });\n if (n.textContent !== text) n.textContent = text;\n } else if (n.nodeType === Node.ELEMENT_NODE) {\n const el = n as Element;\n Array.from(el.attributes).forEach(a => {\n if (!(a as any)._original) (a as any)._original = a.value;\n let val = (a as any)._original;\n\n val = val.replace(/{{(.*?)}}/g, (match: string, path: string) => {\n path = path.trim();\n if (context[path] !== undefined) return context[path];\n const v = this.getValueByPath(data, path);\n return v !== undefined ? v : match;\n });\n if (a.value !== val) a.value = val;\n });\n el.childNodes.forEach(walk);\n }\n };\n walk(node);\n }\n\n /**\n * \uAC1D\uCCB4/\uBC30\uC5F4\uC758 \uBCC0\uACBD\uC744 \uAC10\uC9C0\uD558\uB294 Proxy \uC0DD\uC131 \uC720\uD2F8\uB9AC\uD2F0\n */\n protected createReactiveProxy(target: any, onChange: () => void, onIndexChange?: (index: number, val: any) => void) {\n return new Proxy(target, {\n set: (t, prop, val) => {\n const isIndex = !isNaN(Number(prop));\n t[prop] = val;\n if (isIndex && onIndexChange) {\n onIndexChange(Number(prop), val);\n } else {\n onChange();\n }\n return true;\n },\n deleteProperty: (t, prop) => {\n delete t[prop];\n onChange();\n return true;\n }\n });\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAe,2BAA2B,YAAY;AAAA,EAK3D,cAAc;AACZ,UAAM;AALR,SAAU,kBAA0B,CAAC;AACrC,SAAU,SAAiB;AAC3B,SAAU,cAAsB;AAAA,EAIhC;AAAA,EAEU,WAAW;AACnB,SAAK,SAAS,KAAK,aAAa,IAAI,KAAK;AACzC,SAAK,cAAc,KAAK,aAAa,UAAU,KAAK;AACpD,UAAM,UAAU,KAAK,YAAY,eAAe,UAAU;AAC1D,QAAI,SAAS;AACX,WAAK,kBAAkB,QAAQ,cAAc,EAAE,IAAI,OAAK,EAAE,UAAU,IAAI,CAAC;AAAA,IAC3E;AAAA,EACF;AAAA,EAEU,eAAe,KAAU,MAAc;AAC/C,QAAI,SAAS,KAAK,OAAQ,QAAO;AACjC,QAAI,KAAK,WAAW,GAAG,KAAK,MAAM,GAAG,GAAG;AACtC,aAAO,KACJ,MAAM,GAAG,EACT,MAAM,CAAC,EACP,OAAO,CAAC,KAAK,SAAS,OAAO,IAAI,IAAI,GAAG,GAAG;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAAA,EAEU,UAAU,MAAY,MAAW,OAAgB;AACzD,UAAM,UAA+B,CAAC;AACtC,QAAI,UAAU,QAAW;AACvB,cAAQ,KAAK,WAAW,IAAI,MAAM,SAAS;AAAA,IAC7C;AAEA,UAAM,OAAO,CAAC,MAAY;AACxB,UAAI,EAAE,aAAa,KAAK,WAAW;AACjC,YAAI,CAAE,EAAU,UAAW,CAAC,EAAU,YAAY,EAAE;AACpD,YAAI,OAAQ,EAAU;AAEtB,eAAO,KAAK,QAAQ,cAAc,CAAC,OAAe,SAAiB;AACjE,iBAAO,KAAK,KAAK;AACjB,cAAI,QAAQ,IAAI,MAAM,OAAW,QAAO,QAAQ,IAAI;AACpD,gBAAM,MAAM,KAAK,eAAe,MAAM,IAAI;AAC1C,iBAAO,QAAQ,SAAY,MAAM;AAAA,QACnC,CAAC;AACD,YAAI,EAAE,gBAAgB,KAAM,GAAE,cAAc;AAAA,MAC9C,WAAW,EAAE,aAAa,KAAK,cAAc;AAC3C,cAAM,KAAK;AACX,cAAM,KAAK,GAAG,UAAU,EAAE,QAAQ,OAAK;AACrC,cAAI,CAAE,EAAU,UAAW,CAAC,EAAU,YAAY,EAAE;AACpD,cAAI,MAAO,EAAU;AAErB,gBAAM,IAAI,QAAQ,cAAc,CAAC,OAAe,SAAiB;AAC/D,mBAAO,KAAK,KAAK;AACjB,gBAAI,QAAQ,IAAI,MAAM,OAAW,QAAO,QAAQ,IAAI;AACpD,kBAAM,IAAI,KAAK,eAAe,MAAM,IAAI;AACxC,mBAAO,MAAM,SAAY,IAAI;AAAA,UAC/B,CAAC;AACD,cAAI,EAAE,UAAU,IAAK,GAAE,QAAQ;AAAA,QACjC,CAAC;AACD,WAAG,WAAW,QAAQ,IAAI;AAAA,MAC5B;AAAA,IACF;AACA,SAAK,IAAI;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKU,oBAAoB,QAAa,UAAsB,eAAmD;AAClH,WAAO,IAAI,MAAM,QAAQ;AAAA,MACvB,KAAK,CAAC,GAAG,MAAM,QAAQ;AACrB,cAAM,UAAU,CAAC,MAAM,OAAO,IAAI,CAAC;AACnC,UAAE,IAAI,IAAI;AACV,YAAI,WAAW,eAAe;AAC5B,wBAAc,OAAO,IAAI,GAAG,GAAG;AAAA,QACjC,OAAO;AACL,mBAAS;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAAA,MACA,gBAAgB,CAAC,GAAG,SAAS;AAC3B,eAAO,EAAE,IAAI;AACb,iBAAS;AACT,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,127 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var SwcIf_exports = {};
19
+ __export(SwcIf_exports, {
20
+ SwcIf: () => SwcIf
21
+ });
22
+ module.exports = __toCommonJS(SwcIf_exports);
23
+ var import__ = require("../index");
24
+ var import_SwcHTMLElementBase = require("./SwcHTMLElementBase");
25
+ var __decorate = function(decorators, target, key, desc) {
26
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28
+ 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;
29
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
30
+ };
31
+ var __metadata = function(k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ let SwcIf = class SwcIf2 extends import_SwcHTMLElementBase.SwcHTMLElementBase {
35
+ constructor() {
36
+ super();
37
+ this._value = false;
38
+ this._observer = null;
39
+ }
40
+ set value(val) {
41
+ this._value = val;
42
+ this.render();
43
+ }
44
+ get value() {
45
+ return this._value;
46
+ }
47
+ styles() {
48
+ return `:host { display: contents; }`;
49
+ }
50
+ renderTemplate() {
51
+ return `<slot id="tpl-slot" style="display:none;"></slot>`;
52
+ }
53
+ connectedCallback() {
54
+ this.initCore();
55
+ this._observer = new MutationObserver(() => this.render());
56
+ this._observer.observe(this, { attributes: true });
57
+ this.render();
58
+ }
59
+ disconnectedCallback() {
60
+ this._observer?.disconnect();
61
+ }
62
+ render() {
63
+ if (!this.shadowRoot)
64
+ return;
65
+ const attrValue = this.getAttribute("value");
66
+ if (attrValue !== null && attrValue.includes("{{"))
67
+ return;
68
+ let displayValue = attrValue !== null ? attrValue : this._value;
69
+ let isTruthy = !!displayValue;
70
+ if (typeof displayValue === "string") {
71
+ if (displayValue === "false" || displayValue === "0" || displayValue === "")
72
+ isTruthy = false;
73
+ else {
74
+ try {
75
+ isTruthy = !!new Function(`return ${displayValue}`)();
76
+ } catch (e) {
77
+ isTruthy = true;
78
+ }
79
+ }
80
+ }
81
+ Array.from(this.children).forEach((c) => {
82
+ if (c.getAttribute("slot") === "if-content") {
83
+ c.remove();
84
+ }
85
+ });
86
+ const existingSlot = this.shadowRoot.querySelector('slot[name="if-content"]');
87
+ if (existingSlot)
88
+ existingSlot.remove();
89
+ if (isTruthy && this._masterTplNodes.length > 0) {
90
+ const contentSlot = document.createElement("slot");
91
+ contentSlot.name = "if-content";
92
+ this.shadowRoot.appendChild(contentSlot);
93
+ this._masterTplNodes.forEach((tplNode) => {
94
+ const clone = tplNode.cloneNode(true);
95
+ if (clone.nodeType === Node.ELEMENT_NODE) {
96
+ clone.setAttribute("slot", "if-content");
97
+ } else if (clone.nodeType === Node.TEXT_NODE) {
98
+ if (clone.textContent?.trim().length === 0)
99
+ return;
100
+ const span = document.createElement("span");
101
+ span.setAttribute("slot", "if-content");
102
+ span.appendChild(clone);
103
+ this.appendChild(span);
104
+ return;
105
+ }
106
+ this.appendChild(clone);
107
+ });
108
+ }
109
+ }
110
+ };
111
+ __decorate([
112
+ import__.style,
113
+ __metadata("design:type", Function),
114
+ __metadata("design:paramtypes", []),
115
+ __metadata("design:returntype", void 0)
116
+ ], SwcIf.prototype, "styles", null);
117
+ __decorate([
118
+ import__.template,
119
+ __metadata("design:type", Function),
120
+ __metadata("design:paramtypes", []),
121
+ __metadata("design:returntype", void 0)
122
+ ], SwcIf.prototype, "renderTemplate", null);
123
+ SwcIf = __decorate([
124
+ (0, import__.elementDefind)({ tagName: "swc-if", useShadow: true }),
125
+ __metadata("design:paramtypes", [])
126
+ ], SwcIf);
127
+ //# sourceMappingURL=SwcIf.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/elements/SwcIf.ts"],
4
+ "sourcesContent": ["import { elementDefind, template, style } from '../index';\nimport { SwcHTMLElementBase } from './SwcHTMLElementBase';\n\n@elementDefind({ tagName: 'swc-if', useShadow: true })\nexport class SwcIf extends SwcHTMLElementBase {\n private _value: any = false;\n private _observer: MutationObserver | null = null;\n\n constructor() {\n super();\n }\n\n set value(val: any) {\n this._value = val;\n this.render();\n }\n\n get value(): any {\n return this._value;\n }\n\n @style\n styles() {\n return `:host { display: contents; }`;\n }\n\n @template\n renderTemplate() {\n return `<slot id=\"tpl-slot\" style=\"display:none;\"></slot>`;\n }\n\n connectedCallback() {\n this.initCore();\n this._observer = new MutationObserver(() => this.render());\n this._observer.observe(this, { attributes: true });\n this.render();\n }\n\n disconnectedCallback() {\n this._observer?.disconnect();\n }\n\n private render() {\n if (!this.shadowRoot) return;\n\n const attrValue = this.getAttribute('value');\n if (attrValue !== null && attrValue.includes('{{')) return;\n\n let displayValue = attrValue !== null ? attrValue : this._value;\n let isTruthy = !!displayValue;\n if (typeof displayValue === 'string') {\n if (displayValue === 'false' || displayValue === '0' || displayValue === '') isTruthy = false;\n else {\n try {\n isTruthy = !!new Function(`return ${displayValue}`)();\n } catch (e) {\n isTruthy = true;\n }\n }\n }\n\n Array.from(this.children).forEach(c => {\n if (c.getAttribute('slot') === 'if-content') {\n c.remove();\n }\n });\n\n const existingSlot = this.shadowRoot.querySelector('slot[name=\"if-content\"]');\n if (existingSlot) existingSlot.remove();\n\n if (isTruthy && this._masterTplNodes.length > 0) {\n const contentSlot = document.createElement('slot');\n contentSlot.name = 'if-content';\n this.shadowRoot.appendChild(contentSlot);\n\n this._masterTplNodes.forEach(tplNode => {\n const clone = tplNode.cloneNode(true);\n if (clone.nodeType === Node.ELEMENT_NODE) {\n (clone as HTMLElement).setAttribute('slot', 'if-content');\n } else if (clone.nodeType === Node.TEXT_NODE) {\n if (clone.textContent?.trim().length === 0) return;\n const span = document.createElement('span');\n span.setAttribute('slot', 'if-content');\n span.appendChild(clone);\n this.appendChild(span);\n return;\n }\n this.appendChild(clone);\n });\n }\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,eAA+C;AAC/C,gCAAmC;;;;;;;;;;AAG5B,IAAM,QAAN,MAAMA,eAAc,6CAAkB;EAI3C,cAAA;AACE,UAAK;AAJC,SAAA,SAAc;AACd,SAAA,YAAqC;EAI7C;EAEA,IAAI,MAAM,KAAQ;AAChB,SAAK,SAAS;AACd,SAAK,OAAM;EACb;EAEA,IAAI,QAAK;AACP,WAAO,KAAK;EACd;EAGA,SAAM;AACJ,WAAO;EACT;EAGA,iBAAc;AACZ,WAAO;EACT;EAEA,oBAAiB;AACf,SAAK,SAAQ;AACb,SAAK,YAAY,IAAI,iBAAiB,MAAM,KAAK,OAAM,CAAE;AACzD,SAAK,UAAU,QAAQ,MAAM,EAAE,YAAY,KAAI,CAAE;AACjD,SAAK,OAAM;EACb;EAEA,uBAAoB;AAClB,SAAK,WAAW,WAAU;EAC5B;EAEQ,SAAM;AACZ,QAAI,CAAC,KAAK;AAAY;AAEtB,UAAM,YAAY,KAAK,aAAa,OAAO;AAC3C,QAAI,cAAc,QAAQ,UAAU,SAAS,IAAI;AAAG;AAEpD,QAAI,eAAe,cAAc,OAAO,YAAY,KAAK;AACzD,QAAI,WAAW,CAAC,CAAC;AACjB,QAAI,OAAO,iBAAiB,UAAU;AACpC,UAAI,iBAAiB,WAAW,iBAAiB,OAAO,iBAAiB;AAAI,mBAAW;WACnF;AACH,YAAI;AACF,qBAAW,CAAC,CAAC,IAAI,SAAS,UAAU,YAAY,EAAE,EAAC;QACrD,SAAS,GAAG;AACV,qBAAW;QACb;MACF;IACF;AAEA,UAAM,KAAK,KAAK,QAAQ,EAAE,QAAQ,OAAI;AACpC,UAAI,EAAE,aAAa,MAAM,MAAM,cAAc;AAC3C,UAAE,OAAM;MACV;IACF,CAAC;AAED,UAAM,eAAe,KAAK,WAAW,cAAc,yBAAyB;AAC5E,QAAI;AAAc,mBAAa,OAAM;AAErC,QAAI,YAAY,KAAK,gBAAgB,SAAS,GAAG;AAC/C,YAAM,cAAc,SAAS,cAAc,MAAM;AACjD,kBAAY,OAAO;AACnB,WAAK,WAAW,YAAY,WAAW;AAEvC,WAAK,gBAAgB,QAAQ,aAAU;AACrC,cAAM,QAAQ,QAAQ,UAAU,IAAI;AACpC,YAAI,MAAM,aAAa,KAAK,cAAc;AACvC,gBAAsB,aAAa,QAAQ,YAAY;QAC1D,WAAW,MAAM,aAAa,KAAK,WAAW;AAC5C,cAAI,MAAM,aAAa,KAAI,EAAG,WAAW;AAAG;AAC5C,gBAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,eAAK,aAAa,QAAQ,YAAY;AACtC,eAAK,YAAY,KAAK;AACtB,eAAK,YAAY,IAAI;AACrB;QACF;AACA,aAAK,YAAY,KAAK;MACxB,CAAC;IACH;EACF;;AApEA,WAAA;EADC;;;;;AAMD,WAAA;EADC;;;;;AAtBU,QAAK,WAAA;MADjB,wBAAc,EAAE,SAAS,UAAU,WAAW,KAAI,CAAE;;GACxC,KAAK;",
6
+ "names": ["SwcIf"]
7
+ }
@@ -0,0 +1,115 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var SwcObject_exports = {};
19
+ __export(SwcObject_exports, {
20
+ SwcObject: () => SwcObject
21
+ });
22
+ module.exports = __toCommonJS(SwcObject_exports);
23
+ var import__ = require("../index");
24
+ var import_SwcHTMLElementBase = require("./SwcHTMLElementBase");
25
+ var __decorate = function(decorators, target, key, desc) {
26
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28
+ 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;
29
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
30
+ };
31
+ var __metadata = function(k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ let SwcObject = class SwcObject2 extends import_SwcHTMLElementBase.SwcHTMLElementBase {
35
+ constructor() {
36
+ super();
37
+ this._value = {};
38
+ this._renderedNodes = [];
39
+ }
40
+ set value(val) {
41
+ if (typeof val !== "object" || val === null)
42
+ val = {};
43
+ this._value = this.createReactiveProxy(val, () => this.updateUI());
44
+ this.render();
45
+ }
46
+ get value() {
47
+ return this._value;
48
+ }
49
+ styles() {
50
+ return `:host { display: contents; }`;
51
+ }
52
+ renderTemplate() {
53
+ return `<slot id="tpl-slot" style="display:none;"></slot>`;
54
+ }
55
+ connectedCallback() {
56
+ this.initCore();
57
+ this.render();
58
+ }
59
+ updateUI() {
60
+ this._renderedNodes.forEach((node) => {
61
+ this.applyData(node, this._value);
62
+ });
63
+ }
64
+ render() {
65
+ if (!this.shadowRoot || this._masterTplNodes.length === 0)
66
+ return;
67
+ this._renderedNodes.forEach((n) => {
68
+ if (n.parentElement === this)
69
+ this.removeChild(n);
70
+ });
71
+ this._renderedNodes = [];
72
+ let slot = this.shadowRoot.querySelector('slot[name="obj-content"]');
73
+ if (!slot) {
74
+ slot = document.createElement("slot");
75
+ slot.name = "obj-content";
76
+ this.shadowRoot.appendChild(slot);
77
+ }
78
+ this._masterTplNodes.forEach((tplNode) => {
79
+ const clone = tplNode.cloneNode(true);
80
+ if (clone.nodeType === Node.ELEMENT_NODE) {
81
+ clone.setAttribute("slot", "obj-content");
82
+ } else if (clone.nodeType === Node.TEXT_NODE) {
83
+ if (clone.textContent?.trim().length === 0)
84
+ return;
85
+ const span = document.createElement("span");
86
+ span.setAttribute("slot", "obj-content");
87
+ span.appendChild(clone);
88
+ this.appendChild(span);
89
+ this._renderedNodes.push(span);
90
+ this.applyData(span, this._value);
91
+ return;
92
+ }
93
+ this.appendChild(clone);
94
+ this._renderedNodes.push(clone);
95
+ this.applyData(clone, this._value);
96
+ });
97
+ }
98
+ };
99
+ __decorate([
100
+ import__.style,
101
+ __metadata("design:type", Function),
102
+ __metadata("design:paramtypes", []),
103
+ __metadata("design:returntype", void 0)
104
+ ], SwcObject.prototype, "styles", null);
105
+ __decorate([
106
+ import__.template,
107
+ __metadata("design:type", Function),
108
+ __metadata("design:paramtypes", []),
109
+ __metadata("design:returntype", void 0)
110
+ ], SwcObject.prototype, "renderTemplate", null);
111
+ SwcObject = __decorate([
112
+ (0, import__.elementDefind)({ tagName: "swc-object", useShadow: true }),
113
+ __metadata("design:paramtypes", [])
114
+ ], SwcObject);
115
+ //# sourceMappingURL=SwcObject.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/elements/SwcObject.ts"],
4
+ "sourcesContent": ["import { elementDefind, template, style } from '../index';\nimport { SwcHTMLElementBase } from './SwcHTMLElementBase';\n\n@elementDefind({ tagName: 'swc-object', useShadow: true })\nexport class SwcObject extends SwcHTMLElementBase {\n private _value: any = {};\n private _renderedNodes: Node[] = [];\n\n constructor() {\n super();\n }\n\n set value(val: any) {\n if (typeof val !== 'object' || val === null) val = {};\n this._value = this.createReactiveProxy(val, () => this.updateUI());\n this.render();\n }\n\n get value(): any {\n return this._value;\n }\n\n @style\n styles() {\n return `:host { display: contents; }`;\n }\n\n @template\n renderTemplate() {\n return `<slot id=\"tpl-slot\" style=\"display:none;\"></slot>`;\n }\n\n connectedCallback() {\n this.initCore();\n this.render();\n }\n\n private updateUI() {\n this._renderedNodes.forEach(node => {\n this.applyData(node, this._value);\n });\n }\n\n private render() {\n if (!this.shadowRoot || this._masterTplNodes.length === 0) return;\n\n this._renderedNodes.forEach(n => {\n if (n.parentElement === this) this.removeChild(n);\n });\n this._renderedNodes = [];\n\n let slot = this.shadowRoot.querySelector('slot[name=\"obj-content\"]');\n if (!slot) {\n slot = document.createElement('slot');\n (slot as HTMLSlotElement).name = 'obj-content';\n this.shadowRoot.appendChild(slot);\n }\n\n this._masterTplNodes.forEach(tplNode => {\n const clone = tplNode.cloneNode(true);\n if (clone.nodeType === Node.ELEMENT_NODE) {\n (clone as HTMLElement).setAttribute('slot', 'obj-content');\n } else if (clone.nodeType === Node.TEXT_NODE) {\n if (clone.textContent?.trim().length === 0) return;\n const span = document.createElement('span');\n span.setAttribute('slot', 'obj-content');\n span.appendChild(clone);\n this.appendChild(span);\n this._renderedNodes.push(span);\n this.applyData(span, this._value);\n return;\n }\n this.appendChild(clone);\n this._renderedNodes.push(clone);\n this.applyData(clone, this._value);\n });\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,eAA+C;AAC/C,gCAAmC;;;;;;;;;;AAG5B,IAAM,YAAN,MAAMA,mBAAkB,6CAAkB;EAI/C,cAAA;AACE,UAAK;AAJC,SAAA,SAAc,CAAA;AACd,SAAA,iBAAyB,CAAA;EAIjC;EAEA,IAAI,MAAM,KAAQ;AAChB,QAAI,OAAO,QAAQ,YAAY,QAAQ;AAAM,YAAM,CAAA;AACnD,SAAK,SAAS,KAAK,oBAAoB,KAAK,MAAM,KAAK,SAAQ,CAAE;AACjE,SAAK,OAAM;EACb;EAEA,IAAI,QAAK;AACP,WAAO,KAAK;EACd;EAGA,SAAM;AACJ,WAAO;EACT;EAGA,iBAAc;AACZ,WAAO;EACT;EAEA,oBAAiB;AACf,SAAK,SAAQ;AACb,SAAK,OAAM;EACb;EAEQ,WAAQ;AACd,SAAK,eAAe,QAAQ,UAAO;AACjC,WAAK,UAAU,MAAM,KAAK,MAAM;IAClC,CAAC;EACH;EAEQ,SAAM;AACZ,QAAI,CAAC,KAAK,cAAc,KAAK,gBAAgB,WAAW;AAAG;AAE3D,SAAK,eAAe,QAAQ,OAAI;AAC9B,UAAI,EAAE,kBAAkB;AAAM,aAAK,YAAY,CAAC;IAClD,CAAC;AACD,SAAK,iBAAiB,CAAA;AAEtB,QAAI,OAAO,KAAK,WAAW,cAAc,0BAA0B;AACnE,QAAI,CAAC,MAAM;AACT,aAAO,SAAS,cAAc,MAAM;AACnC,WAAyB,OAAO;AACjC,WAAK,WAAW,YAAY,IAAI;IAClC;AAEA,SAAK,gBAAgB,QAAQ,aAAU;AACrC,YAAM,QAAQ,QAAQ,UAAU,IAAI;AACpC,UAAI,MAAM,aAAa,KAAK,cAAc;AACvC,cAAsB,aAAa,QAAQ,aAAa;MAC3D,WAAW,MAAM,aAAa,KAAK,WAAW;AAC5C,YAAI,MAAM,aAAa,KAAI,EAAG,WAAW;AAAG;AAC5C,cAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,aAAK,aAAa,QAAQ,aAAa;AACvC,aAAK,YAAY,KAAK;AACtB,aAAK,YAAY,IAAI;AACrB,aAAK,eAAe,KAAK,IAAI;AAC7B,aAAK,UAAU,MAAM,KAAK,MAAM;AAChC;MACF;AACA,WAAK,YAAY,KAAK;AACtB,WAAK,eAAe,KAAK,KAAK;AAC9B,WAAK,UAAU,OAAO,KAAK,MAAM;IACnC,CAAC;EACH;;AArDA,WAAA;EADC;;;;;AAMD,WAAA;EADC;;;;;AAvBU,YAAS,WAAA;MADrB,wBAAc,EAAE,SAAS,cAAc,WAAW,KAAI,CAAE;;GAC5C,SAAS;",
6
+ "names": ["SwcObject"]
7
+ }