@dooboostore/simple-web-component 1.0.16 → 1.0.17

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 (98) hide show
  1. package/README.md +93 -0
  2. package/dist/cjs/decorators/addEventListener.js.map +2 -2
  3. package/dist/cjs/decorators/elementDefine.js +133 -62
  4. package/dist/cjs/decorators/elementDefine.js.map +3 -3
  5. package/dist/cjs/decorators/query.js +22 -0
  6. package/dist/cjs/decorators/query.js.map +2 -2
  7. package/dist/cjs/decorators/queryAll.js +14 -0
  8. package/dist/cjs/decorators/queryAll.js.map +2 -2
  9. package/dist/cjs/elements/SwcAppEngine.js +2 -1
  10. package/dist/cjs/elements/SwcAppEngine.js.map +2 -2
  11. package/dist/cjs/elements/SwcAsync.js +188 -0
  12. package/dist/cjs/elements/SwcAsync.js.map +7 -0
  13. package/dist/cjs/elements/SwcChoose.js +155 -0
  14. package/dist/cjs/elements/SwcChoose.js.map +7 -0
  15. package/dist/cjs/elements/SwcIf.js +167 -0
  16. package/dist/cjs/elements/SwcIf.js.map +7 -0
  17. package/dist/cjs/elements/SwcLoop.js +246 -0
  18. package/dist/cjs/elements/SwcLoop.js.map +7 -0
  19. package/dist/cjs/elements/SwcSubTemplates.js +65 -0
  20. package/dist/cjs/elements/SwcSubTemplates.js.map +7 -0
  21. package/dist/cjs/elements/index.js +7 -0
  22. package/dist/cjs/elements/index.js.map +2 -2
  23. package/dist/cjs/index.js +1 -1
  24. package/dist/cjs/index.js.map +2 -2
  25. package/dist/cjs/types.js.map +1 -1
  26. package/dist/cjs/utils/Utils.js +74 -37
  27. package/dist/cjs/utils/Utils.js.map +3 -3
  28. package/dist/esm/decorators/addEventListener.js.map +2 -2
  29. package/dist/esm/decorators/elementDefine.js +133 -62
  30. package/dist/esm/decorators/elementDefine.js.map +3 -3
  31. package/dist/esm/decorators/query.js +22 -0
  32. package/dist/esm/decorators/query.js.map +2 -2
  33. package/dist/esm/decorators/queryAll.js +14 -0
  34. package/dist/esm/decorators/queryAll.js.map +2 -2
  35. package/dist/esm/elements/SwcAppEngine.js +2 -1
  36. package/dist/esm/elements/SwcAppEngine.js.map +2 -2
  37. package/dist/esm/elements/SwcAsync.js +169 -0
  38. package/dist/esm/elements/SwcAsync.js.map +7 -0
  39. package/dist/esm/elements/SwcChoose.js +136 -0
  40. package/dist/esm/elements/SwcChoose.js.map +7 -0
  41. package/dist/esm/elements/SwcIf.js +148 -0
  42. package/dist/esm/elements/SwcIf.js.map +7 -0
  43. package/dist/esm/elements/SwcLoop.js +227 -0
  44. package/dist/esm/elements/SwcLoop.js.map +7 -0
  45. package/dist/esm/elements/SwcSubTemplates.js +46 -0
  46. package/dist/esm/elements/SwcSubTemplates.js.map +7 -0
  47. package/dist/esm/elements/index.js +7 -0
  48. package/dist/esm/elements/index.js.map +2 -2
  49. package/dist/esm/index.js +1 -1
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/types.js.map +1 -1
  52. package/dist/esm/utils/Utils.js +74 -37
  53. package/dist/esm/utils/Utils.js.map +3 -3
  54. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +1047 -140
  55. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  56. package/dist/types/decorators/addEventListener.d.ts +1 -0
  57. package/dist/types/decorators/addEventListener.d.ts.map +1 -1
  58. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  59. package/dist/types/decorators/query.d.ts +0 -2
  60. package/dist/types/decorators/query.d.ts.map +1 -1
  61. package/dist/types/decorators/queryAll.d.ts +0 -2
  62. package/dist/types/decorators/queryAll.d.ts.map +1 -1
  63. package/dist/types/elements/SwcAppEngine.d.ts.map +1 -1
  64. package/dist/types/elements/SwcAsync.d.ts +16 -0
  65. package/dist/types/elements/SwcAsync.d.ts.map +1 -0
  66. package/dist/types/elements/SwcChoose.d.ts +13 -0
  67. package/dist/types/elements/SwcChoose.d.ts.map +1 -0
  68. package/dist/types/elements/SwcIf.d.ts +15 -0
  69. package/dist/types/elements/SwcIf.d.ts.map +1 -0
  70. package/dist/types/elements/SwcLoop.d.ts +20 -0
  71. package/dist/types/elements/SwcLoop.d.ts.map +1 -0
  72. package/dist/types/elements/SwcSubTemplates.d.ts +13 -0
  73. package/dist/types/elements/SwcSubTemplates.d.ts.map +1 -0
  74. package/dist/types/elements/index.d.ts +7 -0
  75. package/dist/types/elements/index.d.ts.map +1 -1
  76. package/dist/types/index.d.ts +1 -1
  77. package/dist/types/index.d.ts.map +1 -1
  78. package/dist/types/types.d.ts +8 -0
  79. package/dist/types/types.d.ts.map +1 -1
  80. package/dist/types/utils/Utils.d.ts +16 -10
  81. package/dist/types/utils/Utils.d.ts.map +1 -1
  82. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +1047 -140
  83. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  84. package/package.json +10 -3
  85. package/src/decorators/addEventListener.ts +1 -0
  86. package/src/decorators/elementDefine.ts +137 -66
  87. package/src/decorators/query.ts +20 -2
  88. package/src/decorators/queryAll.ts +16 -2
  89. package/src/elements/SwcAppEngine.ts +2 -1
  90. package/src/elements/SwcAsync.ts +163 -0
  91. package/src/elements/SwcChoose.ts +127 -0
  92. package/src/elements/SwcIf.ts +134 -0
  93. package/src/elements/SwcLoop.ts +215 -0
  94. package/src/elements/SwcSubTemplates.ts +19 -0
  95. package/src/elements/index.ts +8 -3
  96. package/src/index.ts +1 -1
  97. package/src/types.ts +9 -1
  98. package/src/utils/Utils.ts +86 -36
@@ -0,0 +1,127 @@
1
+ import { elementDefine } from '../decorators/elementDefine';
2
+ import { changedAttribute } from '../decorators/changedAttribute';
3
+ import { SwcUtils } from '../utils/Utils';
4
+ import { FunctionUtils } from '@dooboostore/core/function/FunctionUtils';
5
+ import { SwcWhen, SwcOtherwise } from './SwcSubTemplates';
6
+
7
+ @elementDefine({ name: 'swc-choose', extends: 'template' })
8
+ export class SwcChoose extends HTMLTemplateElement {
9
+ private _nodes: Node[] = [];
10
+ private _value: any = null;
11
+
12
+ get value(): any {
13
+ return this._value;
14
+ }
15
+
16
+ set value(nv: any) {
17
+ this._value = nv;
18
+ this.render();
19
+ }
20
+
21
+ private _executeCallback(attrName: string, extraArgs: Record<string, any>) {
22
+ const script = this.getAttribute(attrName);
23
+ if (!script) return;
24
+ const helperHostSet = SwcUtils.getHelperAndHostSet(window, this);
25
+ try {
26
+ FunctionUtils.execute({ script, context: this, args: { ...helperHostSet, ...extraArgs } });
27
+ } catch (e) {
28
+ console.error(`[SwcChoose] Error in ${attrName}:`, e);
29
+ }
30
+ }
31
+
32
+ @changedAttribute('on-get-value')
33
+ private refresh(newValue?: string | null) {
34
+ const script = newValue !== undefined ? newValue : this.getAttribute('on-get-value');
35
+ if (!script) {
36
+ this.value = null;
37
+ return;
38
+ }
39
+ if (!this.parentElement) return;
40
+
41
+ const helperHostSet = SwcUtils.getHelperAndHostSet(window, this);
42
+ try {
43
+ const result = FunctionUtils.executeReturn({
44
+ script,
45
+ context: this,
46
+ args: helperHostSet
47
+ });
48
+ this.value = result;
49
+ } catch (e) {
50
+ console.error('[SwcChoose] Error in on-get-value:', e);
51
+ }
52
+ }
53
+
54
+ private render() {
55
+ this.cleanup();
56
+ if (!this.parentElement) return;
57
+
58
+ const templates = Array.from(this.content.querySelectorAll('template'));
59
+ let selected: HTMLTemplateElement | null = null;
60
+ let otherwise: HTMLTemplateElement | null = null;
61
+ let defaultTmp: HTMLTemplateElement | null = null;
62
+
63
+ for (const t of templates) {
64
+ const is = t.getAttribute('is');
65
+ if (is === 'swc-when') {
66
+ const whenVal = t.getAttribute('value');
67
+ if (String(whenVal) === String(this._value)) {
68
+ selected = t;
69
+ break;
70
+ }
71
+ } else if (is === 'swc-otherwise') {
72
+ otherwise = t;
73
+ } else if (is === 'swc-default') {
74
+ defaultTmp = t;
75
+ }
76
+ }
77
+
78
+ const targetTemplate = (this._value == null ? defaultTmp : selected) || otherwise || defaultTmp;
79
+ if (targetTemplate) {
80
+ const clone = targetTemplate.content.cloneNode(true) as DocumentFragment;
81
+ const nodes = Array.from(clone.childNodes);
82
+ const elements = nodes.filter(n => n.nodeType === 1) as HTMLElement[];
83
+
84
+ const ctx = {
85
+ $value: this._value,
86
+ $nodes: nodes,
87
+ $elements: elements,
88
+ $firstNode: nodes[0],
89
+ $lastNode: nodes[nodes.length - 1],
90
+ $firstElement: elements[0],
91
+ $lastElement: elements[elements.length - 1]
92
+ };
93
+
94
+ // Execution Callbacks
95
+ this._executeCallback('on-clone-nodes', ctx);
96
+ nodes.forEach((node, nodeIndex) => {
97
+ if (node instanceof HTMLElement) {
98
+ (node as any).__swc_host = this;
99
+ }
100
+ this._executeCallback('on-clone-node', {
101
+ ...ctx,
102
+ $node: node,
103
+ $nodeIndex: nodeIndex,
104
+ $isElement: node.nodeType === 1
105
+ });
106
+ });
107
+
108
+ this._nodes = nodes;
109
+ this.parentElement.insertBefore(clone, this.nextSibling);
110
+ }
111
+ }
112
+
113
+ private cleanup() {
114
+ this._nodes.forEach(n => {
115
+ if (n.parentElement) n.parentElement.removeChild(n);
116
+ });
117
+ this._nodes = [];
118
+ }
119
+
120
+ connectedCallback() {
121
+ this.refresh();
122
+ }
123
+
124
+ disconnectedCallback() {
125
+ this.cleanup();
126
+ }
127
+ }
@@ -0,0 +1,134 @@
1
+ import { elementDefine } from '../decorators/elementDefine';
2
+ import { changedAttribute } from '../decorators/changedAttribute';
3
+ import { SwcUtils } from '../utils/Utils';
4
+ import { FunctionUtils } from '@dooboostore/core/function/FunctionUtils';
5
+
6
+ @elementDefine({ name: 'swc-if', extends: 'template' })
7
+ export class SwcIf extends HTMLTemplateElement {
8
+ private _nodes: Node[] = [];
9
+ private _value: any = null;
10
+
11
+ get value(): any {
12
+ return this._value;
13
+ }
14
+
15
+ set value(nv: any) {
16
+ this._value = nv;
17
+ this.render();
18
+ }
19
+
20
+ private _getTarget(): Element | DocumentFragment | null {
21
+ const script = this.getAttribute('on-get-portal');
22
+ if (!script) return null;
23
+ try {
24
+ const res = FunctionUtils.executeReturn({
25
+ script,
26
+ context: this,
27
+ args: SwcUtils.getHelperAndHostSet(window, this)
28
+ });
29
+ if (typeof res === 'string') return document.querySelector(res);
30
+ if (res instanceof Node) return res as any;
31
+ } catch (e) {
32
+ console.error('[SwcIf] Portal target error:', e);
33
+ }
34
+ return null;
35
+ }
36
+
37
+ private _executeCallback(attrName: string, extraArgs: Record<string, any>) {
38
+ const script = this.getAttribute(attrName);
39
+ if (!script) return;
40
+ const helperHostSet = SwcUtils.getHelperAndHostSet(window, this);
41
+ try {
42
+ FunctionUtils.execute({ script, context: this, args: { ...helperHostSet, ...extraArgs } });
43
+ } catch (e) {
44
+ console.error(`[SwcIf] Error in ${attrName}:`, e);
45
+ }
46
+ }
47
+
48
+ @changedAttribute('on-get-value')
49
+ private refresh(newValue?: string | null) {
50
+ const script = newValue !== undefined ? newValue : this.getAttribute('on-get-value');
51
+ if (!script) {
52
+ this.value = null;
53
+ return;
54
+ }
55
+ if (!this.parentElement) return;
56
+
57
+ const helperHostSet = SwcUtils.getHelperAndHostSet(window, this);
58
+ try {
59
+ const result = FunctionUtils.executeReturn({
60
+ script,
61
+ context: this,
62
+ args: helperHostSet
63
+ });
64
+ this.value = result;
65
+ } catch (e) {
66
+ console.error('[SwcIf] Error in on-get-value:', e);
67
+ this.value = null;
68
+ }
69
+ }
70
+
71
+ private render() {
72
+ this.cleanup();
73
+ if (!this.parentElement) return;
74
+
75
+ let fragment: DocumentFragment | null = null;
76
+ const ctx: any = { $value: this._value, $nodes: [], $elements: [] };
77
+
78
+ if (this._value) {
79
+ const clone = this.content.cloneNode(true) as DocumentFragment;
80
+ Array.from(clone.querySelectorAll('template[is="swc-default"]')).forEach(t => t.remove());
81
+ fragment = clone;
82
+ } else {
83
+ const t = this.content.querySelector('template[is="swc-default"]') as HTMLTemplateElement;
84
+ if (t) fragment = t.content.cloneNode(true) as DocumentFragment;
85
+ }
86
+
87
+ if (fragment) {
88
+ this.mount(fragment, ctx);
89
+ }
90
+ }
91
+
92
+ private mount(fragment: DocumentFragment, ctx: any) {
93
+ const nodes = Array.from(fragment.childNodes);
94
+ const elements = nodes.filter(n => n.nodeType === 1) as HTMLElement[];
95
+
96
+ Object.assign(ctx, {
97
+ $nodes: nodes,
98
+ $elements: elements,
99
+ $firstNode: nodes[0],
100
+ $lastNode: nodes[nodes.length - 1],
101
+ $firstElement: elements[0],
102
+ $lastElement: elements[elements.length - 1]
103
+ });
104
+
105
+ this._executeCallback('on-clone-nodes', ctx);
106
+ nodes.forEach((node, nodeIndex) => {
107
+ if (node instanceof HTMLElement) (node as any).__swc_host = this;
108
+ this._executeCallback('on-clone-node', { ...ctx, $node: node, $nodeIndex: nodeIndex, $isElement: node.nodeType === 1 });
109
+ });
110
+
111
+ this._nodes = nodes;
112
+ const target = this._getTarget();
113
+ if (target) {
114
+ target.appendChild(fragment);
115
+ } else {
116
+ this.parentElement?.insertBefore(fragment, this.nextSibling);
117
+ }
118
+ }
119
+
120
+ private cleanup() {
121
+ this._nodes.forEach(n => {
122
+ if (n.parentElement) n.parentElement.removeChild(n);
123
+ });
124
+ this._nodes = [];
125
+ }
126
+
127
+ connectedCallback() {
128
+ this.refresh();
129
+ }
130
+
131
+ disconnectedCallback() {
132
+ this.cleanup();
133
+ }
134
+ }
@@ -0,0 +1,215 @@
1
+ import { elementDefine } from '../decorators/elementDefine';
2
+ import { changedAttribute } from '../decorators/changedAttribute';
3
+ import { SwcUtils } from '../utils/Utils';
4
+ import { FunctionUtils } from '@dooboostore/core/function/FunctionUtils';
5
+
6
+ @elementDefine({ name: 'swc-loop', extends: 'template' })
7
+ export class SwcLoop extends HTMLTemplateElement {
8
+ private _value: any[] = [];
9
+ private _nodes: (Node[] | null)[] = [];
10
+ private _defaultNodes: Node[] = [];
11
+
12
+ get value(): any[] {
13
+ return this._value;
14
+ }
15
+
16
+ set value(nv: any[]) {
17
+ this._value = Array.isArray(nv) ? [...nv] : [];
18
+ this.render();
19
+ }
20
+
21
+ getNodes(index: number): Node[] | null {
22
+ return this._nodes[index] || null;
23
+ }
24
+
25
+ private _getTarget(): Element | DocumentFragment | null {
26
+ const script = this.getAttribute('on-get-portal');
27
+ if (!script) return null;
28
+ try {
29
+ const res = FunctionUtils.executeReturn({
30
+ script,
31
+ context: this,
32
+ args: SwcUtils.getHelperAndHostSet(window, this)
33
+ });
34
+ if (typeof res === 'string') return document.querySelector(res);
35
+ if (res instanceof Node) return res as any;
36
+ } catch (e) {
37
+ console.error('[SwcLoop] Portal target error:', e);
38
+ }
39
+ return null;
40
+ }
41
+
42
+ append(...items: any[]) {
43
+ if (!items.length || !this.parentElement) return;
44
+ if (this._defaultNodes.length > 0) this._cleanupDefault();
45
+
46
+ const fragment = document.createDocumentFragment();
47
+ const startIndex = this._value.length;
48
+
49
+ items.forEach((item, i) => {
50
+ const index = startIndex + i;
51
+ const nodes = this._createItemNodes(item, index);
52
+ if (nodes) {
53
+ this._nodes.push(nodes);
54
+ nodes.forEach(n => fragment.appendChild(n));
55
+ this._value.push(item);
56
+ } else {
57
+ this._nodes.push(null);
58
+ this._value.push(null);
59
+ }
60
+ });
61
+
62
+ const target = this._getTarget();
63
+ if (target) {
64
+ target.appendChild(fragment);
65
+ } else {
66
+ const lastValidIdx = this._nodes.length - items.length - 1;
67
+ let refNode: Node = this;
68
+ for (let i = lastValidIdx; i >= 0; i--) {
69
+ const group = this._nodes[i];
70
+ if (group && group.length > 0) {
71
+ refNode = group[group.length - 1];
72
+ break;
73
+ }
74
+ }
75
+ this.parentElement.insertBefore(fragment, refNode.nextSibling);
76
+ }
77
+ }
78
+
79
+ remove(index?: number) {
80
+ const targetIdx = index !== undefined ? index : this._nodes.length - 1;
81
+ if (targetIdx < 0 || targetIdx >= this._nodes.length) return;
82
+
83
+ const nodes = this._nodes[targetIdx];
84
+ if (nodes) {
85
+ nodes.forEach(n => {
86
+ if (n.parentElement) n.parentElement.removeChild(n);
87
+ });
88
+ this._nodes[targetIdx] = null;
89
+ this._value[targetIdx] = null;
90
+ }
91
+
92
+ const activeRows = this._value.filter(v => v !== null);
93
+ if (activeRows.length === 0) {
94
+ this.render();
95
+ }
96
+ }
97
+
98
+ private _createItemNodes(item: any, index: number): Node[] {
99
+ const clone = this.content.cloneNode(true) as DocumentFragment;
100
+ Array.from(clone.querySelectorAll('template[is="swc-default"]')).forEach(t => t.remove());
101
+
102
+ const nodes = Array.from(clone.childNodes);
103
+ const elements = nodes.filter(n => n.nodeType === 1) as HTMLElement[];
104
+
105
+ const groupCtx = {
106
+ $index: index,
107
+ $item: item,
108
+ $nodes: nodes,
109
+ $elements: elements,
110
+ $firstNode: nodes[0],
111
+ $lastNode: nodes[nodes.length - 1],
112
+ $firstElement: elements[0],
113
+ $lastElement: elements[elements.length - 1],
114
+ $isFirst: index === 0,
115
+ $isLast: index === this._value.length - 1,
116
+ $isEven: index % 2 === 0,
117
+ $isOdd: index % 2 !== 0,
118
+ $count: this._value.length
119
+ };
120
+
121
+ this._executeCallback('on-clone-nodes', groupCtx);
122
+ nodes.forEach((node, nodeIndex) => {
123
+ if (node instanceof HTMLElement) (node as any).__swc_host = this;
124
+ this._executeCallback('on-clone-node', { ...groupCtx, $node: node, $nodeIndex: nodeIndex, $isElement: node.nodeType === 1 });
125
+ });
126
+
127
+ return nodes;
128
+ }
129
+
130
+ private _executeCallback(attrName: string, extraArgs: Record<string, any>) {
131
+ const script = this.getAttribute(attrName);
132
+ if (!script) return;
133
+ const helperHostSet = SwcUtils.getHelperAndHostSet(window, this);
134
+ try {
135
+ FunctionUtils.execute({ script, context: this, args: { ...helperHostSet, ...extraArgs } });
136
+ } catch (e) {
137
+ console.error(`[SwcLoop] Error in ${attrName}:`, e);
138
+ }
139
+ }
140
+
141
+ @changedAttribute('on-get-value')
142
+ private refreshValue(newValue?: string | null) {
143
+ const script = newValue !== undefined ? newValue : this.getAttribute('on-get-value');
144
+ if (!script) {
145
+ this.value = [];
146
+ return;
147
+ }
148
+ const helperHostSet = SwcUtils.getHelperAndHostSet(window, this);
149
+ try {
150
+ const res = FunctionUtils.executeReturn({ script, context: this, args: helperHostSet });
151
+ if (Array.isArray(res)) {
152
+ this.value = res;
153
+ }
154
+ } catch (e) {
155
+ console.error('[SwcLoop] Failed to get value from on-get-value script:', e);
156
+ this.value = [];
157
+ }
158
+ }
159
+
160
+ render() {
161
+ this._cleanup();
162
+ if (!this.parentElement) return;
163
+
164
+ const activeRows = this._value.filter(v => v !== null);
165
+ const target = this._getTarget();
166
+
167
+ if (activeRows.length === 0) {
168
+ const t = this.content.querySelector('template[is="swc-default"]') as HTMLTemplateElement;
169
+ if (t) {
170
+ const clone = t.content.cloneNode(true) as DocumentFragment;
171
+ this._defaultNodes = Array.from(clone.childNodes);
172
+ this._defaultNodes.forEach(n => {
173
+ if (n instanceof HTMLElement) (n as any).__swc_host = this;
174
+ });
175
+ if (target) target.appendChild(clone);
176
+ else this.parentElement.insertBefore(clone, this.nextSibling);
177
+ }
178
+ return;
179
+ }
180
+
181
+ const fragment = document.createDocumentFragment();
182
+ this._value.forEach((item, index) => {
183
+ if (item === null) {
184
+ this._nodes.push(null);
185
+ return;
186
+ }
187
+ const nodes = this._createItemNodes(item, index);
188
+ this._nodes.push(nodes);
189
+ nodes.forEach(n => fragment.appendChild(n));
190
+ });
191
+
192
+ if (target) target.appendChild(fragment);
193
+ else this.parentElement.insertBefore(fragment, this.nextSibling);
194
+ }
195
+
196
+ private _cleanup() {
197
+ this._nodes.forEach(group => {
198
+ if (group) group.forEach(node => node.parentElement?.removeChild(node));
199
+ });
200
+ this._nodes = [];
201
+ this._cleanupDefault();
202
+ }
203
+
204
+ private _cleanupDefault() {
205
+ this._defaultNodes.forEach(n => n.parentElement?.removeChild(n));
206
+ this._defaultNodes = [];
207
+ }
208
+
209
+ connectedCallback() {
210
+ this.refreshValue();
211
+ }
212
+ disconnectedCallback() {
213
+ this._cleanup();
214
+ }
215
+ }
@@ -0,0 +1,19 @@
1
+ import { elementDefine } from '../decorators/elementDefine';
2
+
3
+ @elementDefine({ name: 'swc-loading', extends: 'template' })
4
+ export class SwcLoading extends HTMLTemplateElement {}
5
+
6
+ @elementDefine({ name: 'swc-error', extends: 'template' })
7
+ export class SwcError extends HTMLTemplateElement {}
8
+
9
+ @elementDefine({ name: 'swc-success', extends: 'template' })
10
+ export class SwcSuccess extends HTMLTemplateElement {}
11
+
12
+ @elementDefine({ name: 'swc-when', extends: 'template' })
13
+ export class SwcWhen extends HTMLTemplateElement {}
14
+
15
+ @elementDefine({ name: 'swc-otherwise', extends: 'template' })
16
+ export class SwcOtherwise extends HTMLTemplateElement {}
17
+
18
+ @elementDefine({ name: 'swc-default', extends: 'template' })
19
+ export class SwcDefault extends HTMLTemplateElement {}
@@ -1,3 +1,8 @@
1
- // import {SwcHTMLElement} from "./SwcHTMLElement";
2
-
3
- export * from './is'
1
+ export * from './is';
2
+ export * from './SwcSubTemplates';
3
+ export * from './SwcLoop';
4
+ export * from './SwcIf';
5
+ export * from './SwcChoose';
6
+ export * from './SwcAsync';
7
+ export * from './SwcApp';
8
+ export * from './SwcAppEngine';
package/src/index.ts CHANGED
@@ -15,7 +15,7 @@ export * from './decorators/addEventListener';
15
15
  export * from './types';
16
16
 
17
17
  // Apps (Customized Built-in Elements)
18
- export * from './elements/is';
18
+ export * from './elements';
19
19
 
20
20
  // Utilities
21
21
  export * from './utils/Utils';
package/src/types.ts CHANGED
@@ -13,7 +13,13 @@ export enum InjectSituationType {
13
13
  FIRST_APP_HOST = 'SIMPLE_WEB_COMPONENT://FIRSTAPPHOST',
14
14
  LAST_APP_HOST = 'SIMPLE_WEB_COMPONENT://LASTAPPHOST'
15
15
  }
16
-
16
+ export type HelperSet = {
17
+ $d: Document;
18
+ $w: Window;
19
+ $q: (selector: string, root?: Element | Document | ShadowRoot) => HTMLElement | null;
20
+ $qa: (selector: string, root?: Element | Document | ShadowRoot) => HTMLElement[];
21
+ $qi: (selector: string, root?: Element | Document | ShadowRoot) => HTMLElement | null;
22
+ }
17
23
  export type HostSet = {
18
24
  $host: HTMLElement; // Current component itself
19
25
  $parentHost: HTMLElement | null; // Nearest parent SWC component
@@ -26,6 +32,8 @@ export type HostSet = {
26
32
  $lastAppHost: SwcAppInterface | null;
27
33
  };
28
34
 
35
+ export type HelperHostSet = HelperSet & HostSet;
36
+
29
37
  export interface SwcAppInterface extends HTMLElement {
30
38
  simpleApplication?: SimpleApplication;
31
39
  router?: Router;