@dooboostore/simple-web-component 1.0.48 → 1.0.50

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 (192) hide show
  1. package/README.md +189 -19
  2. package/dist/cjs/config/config.js +1 -1
  3. package/dist/cjs/config/config.js.map +2 -2
  4. package/dist/cjs/decorators/addEventListener.js +2373 -30
  5. package/dist/cjs/decorators/addEventListener.js.map +3 -3
  6. package/dist/cjs/decorators/applyAttribute.js +31 -0
  7. package/dist/cjs/decorators/applyAttribute.js.map +2 -2
  8. package/dist/cjs/decorators/applyClass.js +55 -18
  9. package/dist/cjs/decorators/applyClass.js.map +3 -3
  10. package/dist/cjs/decorators/applyNode.js +73 -1
  11. package/dist/cjs/decorators/applyNode.js.map +3 -3
  12. package/dist/cjs/decorators/applyProperty.js +107 -3
  13. package/dist/cjs/decorators/applyProperty.js.map +2 -2
  14. package/dist/cjs/decorators/applySlot.js +6 -5
  15. package/dist/cjs/decorators/applySlot.js.map +2 -2
  16. package/dist/cjs/decorators/applyStyle.js +42 -5
  17. package/dist/cjs/decorators/applyStyle.js.map +2 -2
  18. package/dist/cjs/decorators/changedAttribute.js +61 -13
  19. package/dist/cjs/decorators/changedAttribute.js.map +2 -2
  20. package/dist/cjs/decorators/elementDefine.js +254 -439
  21. package/dist/cjs/decorators/elementDefine.js.map +3 -3
  22. package/dist/cjs/decorators/emitCustomEvent.js +55 -0
  23. package/dist/cjs/decorators/emitCustomEvent.js.map +2 -2
  24. package/dist/cjs/decorators/eventMedia.js +84 -0
  25. package/dist/cjs/decorators/eventMedia.js.map +7 -0
  26. package/dist/cjs/decorators/index.js +6 -1
  27. package/dist/cjs/decorators/index.js.map +2 -2
  28. package/dist/cjs/decorators/intersectionObserver.js +200 -0
  29. package/dist/cjs/decorators/intersectionObserver.js.map +7 -0
  30. package/dist/cjs/decorators/mutationObserver.js +186 -55
  31. package/dist/cjs/decorators/mutationObserver.js.map +3 -3
  32. package/dist/cjs/decorators/parameter.js +73 -0
  33. package/dist/cjs/decorators/parameter.js.map +7 -0
  34. package/dist/cjs/decorators/query.js +117 -102
  35. package/dist/cjs/decorators/query.js.map +2 -2
  36. package/dist/cjs/decorators/requestAnimationFrame.js +124 -0
  37. package/dist/cjs/decorators/requestAnimationFrame.js.map +7 -0
  38. package/dist/cjs/decorators/resizeObserver.js +133 -55
  39. package/dist/cjs/decorators/resizeObserver.js.map +2 -2
  40. package/dist/cjs/decorators/setInterval.js +114 -0
  41. package/dist/cjs/decorators/setInterval.js.map +7 -0
  42. package/dist/cjs/decorators/setTimeout.js +117 -0
  43. package/dist/cjs/decorators/setTimeout.js.map +7 -0
  44. package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js +9 -0
  45. package/dist/cjs/decorators/subscribeSwcAppMessageWhileConnected.js.map +2 -2
  46. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js +9 -0
  47. package/dist/cjs/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  48. package/dist/cjs/elements/SwcAppMixin.js +19 -3
  49. package/dist/cjs/elements/SwcAppMixin.js.map +2 -2
  50. package/dist/cjs/types/index.js.map +1 -1
  51. package/dist/cjs/types/window.d.js.map +1 -1
  52. package/dist/esm/config/config.js +1 -1
  53. package/dist/esm/config/config.js.map +2 -2
  54. package/dist/esm/decorators/addEventListener.js +2374 -30
  55. package/dist/esm/decorators/addEventListener.js.map +3 -3
  56. package/dist/esm/decorators/applyAttribute.js +31 -0
  57. package/dist/esm/decorators/applyAttribute.js.map +2 -2
  58. package/dist/esm/decorators/applyClass.js +55 -18
  59. package/dist/esm/decorators/applyClass.js.map +3 -3
  60. package/dist/esm/decorators/applyNode.js +73 -1
  61. package/dist/esm/decorators/applyNode.js.map +3 -3
  62. package/dist/esm/decorators/applyProperty.js +107 -3
  63. package/dist/esm/decorators/applyProperty.js.map +2 -2
  64. package/dist/esm/decorators/applySlot.js +6 -5
  65. package/dist/esm/decorators/applySlot.js.map +2 -2
  66. package/dist/esm/decorators/applyStyle.js +42 -5
  67. package/dist/esm/decorators/applyStyle.js.map +2 -2
  68. package/dist/esm/decorators/changedAttribute.js +62 -13
  69. package/dist/esm/decorators/changedAttribute.js.map +2 -2
  70. package/dist/esm/decorators/elementDefine.js +261 -446
  71. package/dist/esm/decorators/elementDefine.js.map +3 -3
  72. package/dist/esm/decorators/emitCustomEvent.js +55 -0
  73. package/dist/esm/decorators/emitCustomEvent.js.map +2 -2
  74. package/dist/esm/decorators/eventMedia.js +66 -0
  75. package/dist/esm/decorators/eventMedia.js.map +7 -0
  76. package/dist/esm/decorators/index.js +6 -1
  77. package/dist/esm/decorators/index.js.map +2 -2
  78. package/dist/esm/decorators/intersectionObserver.js +182 -0
  79. package/dist/esm/decorators/intersectionObserver.js.map +7 -0
  80. package/dist/esm/decorators/mutationObserver.js +187 -55
  81. package/dist/esm/decorators/mutationObserver.js.map +3 -3
  82. package/dist/esm/decorators/parameter.js +54 -0
  83. package/dist/esm/decorators/parameter.js.map +7 -0
  84. package/dist/esm/decorators/query.js +117 -102
  85. package/dist/esm/decorators/query.js.map +2 -2
  86. package/dist/esm/decorators/requestAnimationFrame.js +105 -0
  87. package/dist/esm/decorators/requestAnimationFrame.js.map +7 -0
  88. package/dist/esm/decorators/resizeObserver.js +134 -55
  89. package/dist/esm/decorators/resizeObserver.js.map +2 -2
  90. package/dist/esm/decorators/setInterval.js +95 -0
  91. package/dist/esm/decorators/setInterval.js.map +7 -0
  92. package/dist/esm/decorators/setTimeout.js +98 -0
  93. package/dist/esm/decorators/setTimeout.js.map +7 -0
  94. package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js +9 -0
  95. package/dist/esm/decorators/subscribeSwcAppMessageWhileConnected.js.map +2 -2
  96. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js +9 -0
  97. package/dist/esm/decorators/subscribeSwcAppRouteChangeWhileConnected.js.map +2 -2
  98. package/dist/esm/elements/SwcAppMixin.js +20 -4
  99. package/dist/esm/elements/SwcAppMixin.js.map +2 -2
  100. package/dist/esm/types/index.js.map +1 -1
  101. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js +4961 -1628
  102. package/dist/esm-bundle/dooboostore-simple-web-component.esm.js.map +4 -4
  103. package/dist/types/config/config.d.ts.map +1 -1
  104. package/dist/types/decorators/addEventListener.d.ts +1046 -33
  105. package/dist/types/decorators/addEventListener.d.ts.map +1 -1
  106. package/dist/types/decorators/applyAttribute.d.ts +24 -34
  107. package/dist/types/decorators/applyAttribute.d.ts.map +1 -1
  108. package/dist/types/decorators/applyClass.d.ts +36 -34
  109. package/dist/types/decorators/applyClass.d.ts.map +1 -1
  110. package/dist/types/decorators/applyNode.d.ts +32 -20
  111. package/dist/types/decorators/applyNode.d.ts.map +1 -1
  112. package/dist/types/decorators/applyProperty.d.ts +61 -34
  113. package/dist/types/decorators/applyProperty.d.ts.map +1 -1
  114. package/dist/types/decorators/applySlot.d.ts.map +1 -1
  115. package/dist/types/decorators/applyStyle.d.ts +27 -12
  116. package/dist/types/decorators/applyStyle.d.ts.map +1 -1
  117. package/dist/types/decorators/changedAttribute.d.ts +12 -3
  118. package/dist/types/decorators/changedAttribute.d.ts.map +1 -1
  119. package/dist/types/decorators/elementDefine.d.ts +0 -14
  120. package/dist/types/decorators/elementDefine.d.ts.map +1 -1
  121. package/dist/types/decorators/emitCustomEvent.d.ts +28 -4
  122. package/dist/types/decorators/emitCustomEvent.d.ts.map +1 -1
  123. package/dist/types/decorators/eventMedia.d.ts +25 -0
  124. package/dist/types/decorators/eventMedia.d.ts.map +1 -0
  125. package/dist/types/decorators/index.d.ts +6 -1
  126. package/dist/types/decorators/index.d.ts.map +1 -1
  127. package/dist/types/decorators/intersectionObserver.d.ts +58 -0
  128. package/dist/types/decorators/intersectionObserver.d.ts.map +1 -0
  129. package/dist/types/decorators/mutationObserver.d.ts +44 -25
  130. package/dist/types/decorators/mutationObserver.d.ts.map +1 -1
  131. package/dist/types/decorators/parameter.d.ts +35 -0
  132. package/dist/types/decorators/parameter.d.ts.map +1 -0
  133. package/dist/types/decorators/query.d.ts +57 -14
  134. package/dist/types/decorators/query.d.ts.map +1 -1
  135. package/dist/types/decorators/requestAnimationFrame.d.ts +47 -0
  136. package/dist/types/decorators/requestAnimationFrame.d.ts.map +1 -0
  137. package/dist/types/decorators/resizeObserver.d.ts +43 -23
  138. package/dist/types/decorators/resizeObserver.d.ts.map +1 -1
  139. package/dist/types/decorators/setInterval.d.ts +41 -0
  140. package/dist/types/decorators/setInterval.d.ts.map +1 -0
  141. package/dist/types/decorators/setTimeout.d.ts +41 -0
  142. package/dist/types/decorators/setTimeout.d.ts.map +1 -0
  143. package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts +7 -1
  144. package/dist/types/decorators/subscribeSwcAppMessageWhileConnected.d.ts.map +1 -1
  145. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts +6 -0
  146. package/dist/types/decorators/subscribeSwcAppRouteChangeWhileConnected.d.ts.map +1 -1
  147. package/dist/types/elements/SwcAppMixin.d.ts.map +1 -1
  148. package/dist/types/types/index.d.ts +104 -0
  149. package/dist/types/types/index.d.ts.map +1 -1
  150. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js +4961 -1628
  151. package/dist/umd-bundle/dooboostore-simple-web-component.umd.js.map +4 -4
  152. package/package.json +7 -5
  153. package/src/config/config.ts +1 -1
  154. package/src/decorators/addEventListener.ts +1446 -34
  155. package/src/decorators/applyAttribute.ts +60 -36
  156. package/src/decorators/applyClass.ts +86 -26
  157. package/src/decorators/applyNode.ts +124 -36
  158. package/src/decorators/applyProperty.ts +172 -40
  159. package/src/decorators/applySlot.ts +6 -5
  160. package/src/decorators/applyStyle.ts +74 -17
  161. package/src/decorators/changedAttribute.ts +76 -15
  162. package/src/decorators/elementDefine.ts +310 -582
  163. package/src/decorators/emitCustomEvent.ts +73 -5
  164. package/src/decorators/eventMedia.ts +78 -0
  165. package/src/decorators/index.ts +6 -1
  166. package/src/decorators/intersectionObserver.ts +275 -0
  167. package/src/decorators/mutationObserver.ts +282 -89
  168. package/src/decorators/parameter.ts +81 -0
  169. package/src/decorators/query.ts +168 -126
  170. package/src/decorators/requestAnimationFrame.ts +158 -0
  171. package/src/decorators/resizeObserver.ts +211 -89
  172. package/src/decorators/setInterval.ts +136 -0
  173. package/src/decorators/setTimeout.ts +139 -0
  174. package/src/decorators/subscribeSwcAppMessageWhileConnected.ts +17 -0
  175. package/src/decorators/subscribeSwcAppRouteChangeWhileConnected.ts +19 -0
  176. package/src/elements/SwcAppMixin.ts +20 -5
  177. package/src/types/index.ts +141 -0
  178. package/src/types/window.d.ts +2 -18
  179. package/dist/cjs/decorators/queryAll.js +0 -181
  180. package/dist/cjs/decorators/queryAll.js.map +0 -7
  181. package/dist/cjs/examples/RxJSOperatorsExample.js +0 -285
  182. package/dist/cjs/examples/RxJSOperatorsExample.js.map +0 -7
  183. package/dist/esm/decorators/queryAll.js +0 -162
  184. package/dist/esm/decorators/queryAll.js.map +0 -7
  185. package/dist/esm/examples/RxJSOperatorsExample.js +0 -266
  186. package/dist/esm/examples/RxJSOperatorsExample.js.map +0 -7
  187. package/dist/types/decorators/queryAll.d.ts +0 -22
  188. package/dist/types/decorators/queryAll.d.ts.map +0 -1
  189. package/dist/types/examples/RxJSOperatorsExample.d.ts +0 -94
  190. package/dist/types/examples/RxJSOperatorsExample.d.ts.map +0 -1
  191. package/src/decorators/queryAll.ts +0 -186
  192. package/src/examples/RxJSOperatorsExample.ts +0 -279
@@ -1,279 +0,0 @@
1
- /**
2
- * Example: Using RxJS-like Operators with @addEventListener
3
- *
4
- * This example demonstrates how to use debounceTime, throttleTime, and distinctUntilChanged
5
- * operators with the @addEventListener decorator.
6
- */
7
-
8
- import { elementDefine, addEventListener } from '../decorators';
9
-
10
- /**
11
- * Example 1: Search Component with Debounce
12
- *
13
- * Waits 1 second after user stops typing before performing search.
14
- * Prevents excessive API calls during typing.
15
- */
16
- @elementDefine('search-component')
17
- export class SearchComponent extends HTMLElement {
18
- private results: any[] = [];
19
-
20
- @addEventListener('$this', 'input', { debounceTime: 1000 })
21
- async onSearchInput(event: Event) {
22
- const input = event.target as HTMLInputElement;
23
- const query = input.value.trim();
24
-
25
- if (query.length > 2) {
26
- try {
27
- // Simulate API call
28
- const response = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
29
- this.results = await response.json();
30
- this.renderResults();
31
- } catch (error) {
32
- console.error('Search failed:', error);
33
- }
34
- } else {
35
- this.results = [];
36
- this.renderResults();
37
- }
38
- }
39
-
40
- private renderResults() {
41
- // Render search results
42
- console.log('Rendering results:', this.results);
43
- }
44
- }
45
-
46
- /**
47
- * Example 2: Window Resize Handler with Throttle
48
- *
49
- * Recalculates layout at most 4 times per second (every 250ms).
50
- * Prevents performance issues from excessive resize calculations.
51
- */
52
- @elementDefine('responsive-layout')
53
- export class ResponsiveLayout extends HTMLElement {
54
- @addEventListener('$window', 'resize', { throttleTime: 250 })
55
- onWindowResize(event: Event) {
56
- const width = window.innerWidth;
57
- const height = window.innerHeight;
58
-
59
- console.log(`Window resized to: ${width}x${height}`);
60
- this.updateLayout(width, height);
61
- }
62
-
63
- private updateLayout(width: number, height: number) {
64
- // Update layout based on new dimensions
65
- if (width < 768) {
66
- this.classList.add('mobile');
67
- this.classList.remove('desktop');
68
- } else {
69
- this.classList.add('desktop');
70
- this.classList.remove('mobile');
71
- }
72
- }
73
- }
74
-
75
- /**
76
- * Example 3: Form Input with Debounce + Distinct
77
- *
78
- * Validates field only when:
79
- * 1. User stops typing (debounce 300ms)
80
- * 2. AND the value actually changed (distinct)
81
- */
82
- @elementDefine('form-input')
83
- export class FormInput extends HTMLElement {
84
- @addEventListener('$this', 'input', {
85
- debounceTime: 300,
86
- distinctUntilChanged: true
87
- })
88
- onFormInput(event: Event) {
89
- const input = event.target as HTMLInputElement;
90
- const fieldName = input.name;
91
- const value = input.value;
92
-
93
- console.log(`Validating ${fieldName}: ${value}`);
94
- this.validateField(fieldName, value);
95
- }
96
-
97
- private validateField(name: string, value: string) {
98
- // Perform validation
99
- const isValid = value.length > 0;
100
- console.log(`Field ${name} is ${isValid ? 'valid' : 'invalid'}`);
101
- }
102
- }
103
-
104
- /**
105
- * Example 4: Scroll Event with Throttle
106
- *
107
- * Checks if user scrolled to bottom at most 10 times per second.
108
- * Prevents excessive "load more" API calls.
109
- */
110
- @elementDefine('infinite-scroll')
111
- export class InfiniteScroll extends HTMLElement {
112
- private isLoading = false;
113
-
114
- @addEventListener('$window', 'scroll', { throttleTime: 100 })
115
- onScroll(event: Event) {
116
- if (this.isLoading) return;
117
-
118
- if (this.isNearBottom()) {
119
- console.log('Near bottom, loading more content...');
120
- this.loadMoreContent();
121
- }
122
- }
123
-
124
- private isNearBottom(): boolean {
125
- const scrollTop = window.scrollY;
126
- const windowHeight = window.innerHeight;
127
- const documentHeight = document.documentElement.scrollHeight;
128
-
129
- return scrollTop + windowHeight >= documentHeight - 500;
130
- }
131
-
132
- private async loadMoreContent() {
133
- this.isLoading = true;
134
- try {
135
- // Simulate API call
136
- await new Promise(resolve => setTimeout(resolve, 1000));
137
- console.log('Content loaded');
138
- } finally {
139
- this.isLoading = false;
140
- }
141
- }
142
- }
143
-
144
- /**
145
- * Example 5: Custom Comparison with Distinct
146
- *
147
- * Only fires when the input value length changes.
148
- * Ignores changes that don't affect the length.
149
- */
150
- @elementDefine('length-tracker')
151
- export class LengthTracker extends HTMLElement {
152
- @addEventListener('$this', 'input', {
153
- distinctUntilChanged: (prev: any, curr: any) => {
154
- // Only consider it changed if the length differs
155
- return prev?.length === curr?.length;
156
- }
157
- })
158
- onInputChange(event: Event) {
159
- const input = event.target as HTMLInputElement;
160
- const length = input.value.length;
161
-
162
- console.log(`Input length changed to: ${length}`);
163
- this.updateLengthDisplay(length);
164
- }
165
-
166
- private updateLengthDisplay(length: number) {
167
- // Update UI with new length
168
- const display = this.querySelector('.length-display');
169
- if (display) {
170
- display.textContent = `${length} characters`;
171
- }
172
- }
173
- }
174
-
175
- /**
176
- * Example 6: Complex Scenario - Auto-save with Multiple Operators
177
- *
178
- * Combines debounce and distinct for intelligent auto-save:
179
- * - Waits 2 seconds after user stops typing
180
- * - Only saves if content actually changed
181
- * - Prevents unnecessary save operations
182
- */
183
- @elementDefine('auto-save-editor')
184
- export class AutoSaveEditor extends HTMLElement {
185
- private lastSavedContent = '';
186
-
187
- @addEventListener('$this', 'input', {
188
- debounceTime: 2000,
189
- distinctUntilChanged: (prev: any, curr: any) => {
190
- // Consider changed if the content is different
191
- return prev === curr;
192
- }
193
- })
194
- async onContentChange(event: Event) {
195
- const textarea = event.target as HTMLTextAreaElement;
196
- const content = textarea.value;
197
-
198
- if (content !== this.lastSavedContent) {
199
- console.log('Auto-saving content...');
200
- await this.saveContent(content);
201
- this.lastSavedContent = content;
202
- }
203
- }
204
-
205
- private async saveContent(content: string) {
206
- try {
207
- // Simulate API call
208
- const response = await fetch('/api/save', {
209
- method: 'POST',
210
- headers: { 'Content-Type': 'application/json' },
211
- body: JSON.stringify({ content })
212
- });
213
-
214
- if (response.ok) {
215
- console.log('Content saved successfully');
216
- this.showSaveIndicator();
217
- }
218
- } catch (error) {
219
- console.error('Save failed:', error);
220
- }
221
- }
222
-
223
- private showSaveIndicator() {
224
- const indicator = this.querySelector('.save-indicator');
225
- if (indicator) {
226
- indicator.classList.add('show');
227
- setTimeout(() => indicator.classList.remove('show'), 2000);
228
- }
229
- }
230
- }
231
-
232
- /**
233
- * Example 7: Keyboard Shortcut Handler with Throttle
234
- *
235
- * Prevents rapid repeated execution of keyboard shortcuts.
236
- */
237
- @elementDefine('keyboard-handler')
238
- export class KeyboardHandler extends HTMLElement {
239
- @addEventListener('$document', 'keydown', {
240
- throttleTime: 500,
241
- filter: (event: KeyboardEvent) => {
242
- // Only handle Ctrl+S or Cmd+S
243
- return (event.ctrlKey || event.metaKey) && event.key === 's';
244
- }
245
- })
246
- onSaveShortcut(event: KeyboardEvent) {
247
- event.preventDefault();
248
- console.log('Save shortcut triggered');
249
- this.handleSave();
250
- }
251
-
252
- private handleSave() {
253
- // Handle save operation
254
- console.log('Saving...');
255
- }
256
- }
257
-
258
- /**
259
- * Example 8: Mouse Move Tracking with Throttle
260
- *
261
- * Tracks mouse position at most 10 times per second.
262
- * Useful for analytics or interactive features.
263
- */
264
- @elementDefine('mouse-tracker')
265
- export class MouseTracker extends HTMLElement {
266
- @addEventListener('$document', 'mousemove', { throttleTime: 100 })
267
- onMouseMove(event: MouseEvent) {
268
- const x = event.clientX;
269
- const y = event.clientY;
270
-
271
- // Update cursor position indicator
272
- this.updateCursorPosition(x, y);
273
- }
274
-
275
- private updateCursorPosition(x: number, y: number) {
276
- // Update UI with cursor position
277
- console.log(`Cursor at: ${x}, ${y}`);
278
- }
279
- }