@clusterenvision/ui-framework 1.0.0

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 (193) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/ai-assistant-Db002XYC.d.ts +92 -0
  4. package/dist/ai-assistant-EobSUV70.d.cts +92 -0
  5. package/dist/browser-DnHpnWwE.d.cts +354 -0
  6. package/dist/browser-Dx4oKf5e.d.ts +354 -0
  7. package/dist/browser-signals-07qodpYT.d.cts +66 -0
  8. package/dist/browser-signals-07qodpYT.d.ts +66 -0
  9. package/dist/browser-signals.cjs +32 -0
  10. package/dist/browser-signals.cjs.map +1 -0
  11. package/dist/browser-signals.d.cts +1 -0
  12. package/dist/browser-signals.d.ts +1 -0
  13. package/dist/browser-signals.js +3 -0
  14. package/dist/browser-signals.js.map +1 -0
  15. package/dist/browser.cjs +197 -0
  16. package/dist/browser.cjs.map +1 -0
  17. package/dist/browser.d.cts +13 -0
  18. package/dist/browser.d.ts +13 -0
  19. package/dist/browser.js +12 -0
  20. package/dist/browser.js.map +1 -0
  21. package/dist/chunk-22HQL2Y4.js +568 -0
  22. package/dist/chunk-22HQL2Y4.js.map +1 -0
  23. package/dist/chunk-3ZBRNFEE.js +1525 -0
  24. package/dist/chunk-3ZBRNFEE.js.map +1 -0
  25. package/dist/chunk-4HRORR2Q.js +1953 -0
  26. package/dist/chunk-4HRORR2Q.js.map +1 -0
  27. package/dist/chunk-4L3UXVL5.cjs +68 -0
  28. package/dist/chunk-4L3UXVL5.cjs.map +1 -0
  29. package/dist/chunk-6BYWFGQY.cjs +226 -0
  30. package/dist/chunk-6BYWFGQY.cjs.map +1 -0
  31. package/dist/chunk-7SCIB5HP.js +57 -0
  32. package/dist/chunk-7SCIB5HP.js.map +1 -0
  33. package/dist/chunk-BBAUALNU.js +888 -0
  34. package/dist/chunk-BBAUALNU.js.map +1 -0
  35. package/dist/chunk-CHLDE4JQ.js +715 -0
  36. package/dist/chunk-CHLDE4JQ.js.map +1 -0
  37. package/dist/chunk-CXTAUXLG.cjs +71 -0
  38. package/dist/chunk-CXTAUXLG.cjs.map +1 -0
  39. package/dist/chunk-D2USIT6V.js +121 -0
  40. package/dist/chunk-D2USIT6V.js.map +1 -0
  41. package/dist/chunk-D3H5CGVD.js +36 -0
  42. package/dist/chunk-D3H5CGVD.js.map +1 -0
  43. package/dist/chunk-DQBX75NJ.js +92 -0
  44. package/dist/chunk-DQBX75NJ.js.map +1 -0
  45. package/dist/chunk-DRPG2DFX.js +208 -0
  46. package/dist/chunk-DRPG2DFX.js.map +1 -0
  47. package/dist/chunk-EFOOXCY7.cjs +41 -0
  48. package/dist/chunk-EFOOXCY7.cjs.map +1 -0
  49. package/dist/chunk-FFCZSYC7.cjs +906 -0
  50. package/dist/chunk-FFCZSYC7.cjs.map +1 -0
  51. package/dist/chunk-FNXIYAET.cjs +1593 -0
  52. package/dist/chunk-FNXIYAET.cjs.map +1 -0
  53. package/dist/chunk-I6GNUM3P.cjs +63 -0
  54. package/dist/chunk-I6GNUM3P.cjs.map +1 -0
  55. package/dist/chunk-IHAMVLRY.js +129 -0
  56. package/dist/chunk-IHAMVLRY.js.map +1 -0
  57. package/dist/chunk-IRBUKIRF.cjs +133 -0
  58. package/dist/chunk-IRBUKIRF.cjs.map +1 -0
  59. package/dist/chunk-KPG5HAHK.cjs +97 -0
  60. package/dist/chunk-KPG5HAHK.cjs.map +1 -0
  61. package/dist/chunk-N7Q2ESLG.cjs +130 -0
  62. package/dist/chunk-N7Q2ESLG.cjs.map +1 -0
  63. package/dist/chunk-PFBEIFVS.js +180 -0
  64. package/dist/chunk-PFBEIFVS.js.map +1 -0
  65. package/dist/chunk-PVZVFICK.cjs +318 -0
  66. package/dist/chunk-PVZVFICK.cjs.map +1 -0
  67. package/dist/chunk-Q3KH6HMU.js +305 -0
  68. package/dist/chunk-Q3KH6HMU.js.map +1 -0
  69. package/dist/chunk-QPAAV32J.cjs +1985 -0
  70. package/dist/chunk-QPAAV32J.cjs.map +1 -0
  71. package/dist/chunk-R6XQUMWT.cjs +61 -0
  72. package/dist/chunk-R6XQUMWT.cjs.map +1 -0
  73. package/dist/chunk-SA5UD5B6.js +92 -0
  74. package/dist/chunk-SA5UD5B6.js.map +1 -0
  75. package/dist/chunk-SM35JOYD.cjs +211 -0
  76. package/dist/chunk-SM35JOYD.cjs.map +1 -0
  77. package/dist/chunk-SZQNIMYI.cjs +592 -0
  78. package/dist/chunk-SZQNIMYI.cjs.map +1 -0
  79. package/dist/chunk-T6T7QE4J.js +224 -0
  80. package/dist/chunk-T6T7QE4J.js.map +1 -0
  81. package/dist/chunk-TIF372DZ.js +65 -0
  82. package/dist/chunk-TIF372DZ.js.map +1 -0
  83. package/dist/chunk-V6JCOBGY.js +69 -0
  84. package/dist/chunk-V6JCOBGY.js.map +1 -0
  85. package/dist/chunk-VHUXNDW2.cjs +189 -0
  86. package/dist/chunk-VHUXNDW2.cjs.map +1 -0
  87. package/dist/chunk-W3LNNY3U.cjs +729 -0
  88. package/dist/chunk-W3LNNY3U.cjs.map +1 -0
  89. package/dist/chunk-ZUWSU4OA.js +61 -0
  90. package/dist/chunk-ZUWSU4OA.js.map +1 -0
  91. package/dist/chunk-ZWUA2LPB.cjs +103 -0
  92. package/dist/chunk-ZWUA2LPB.cjs.map +1 -0
  93. package/dist/cli/index.cjs +566 -0
  94. package/dist/cli/index.cjs.map +1 -0
  95. package/dist/cli/index.d.cts +1 -0
  96. package/dist/cli/index.d.ts +1 -0
  97. package/dist/cli/index.js +558 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/compiler/index.cjs +80 -0
  100. package/dist/compiler/index.cjs.map +1 -0
  101. package/dist/compiler/index.d.cts +130 -0
  102. package/dist/compiler/index.d.ts +130 -0
  103. package/dist/compiler/index.js +3 -0
  104. package/dist/compiler/index.js.map +1 -0
  105. package/dist/component-BVzvepw9.d.cts +90 -0
  106. package/dist/component-wTxZ2BPD.d.ts +90 -0
  107. package/dist/index-CpxDa60m.d.cts +644 -0
  108. package/dist/index-CpxDa60m.d.ts +644 -0
  109. package/dist/index.cjs +1356 -0
  110. package/dist/index.cjs.map +1 -0
  111. package/dist/index.d.cts +165 -0
  112. package/dist/index.d.ts +165 -0
  113. package/dist/index.js +772 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/lib/dom.cjs +102 -0
  116. package/dist/lib/dom.cjs.map +1 -0
  117. package/dist/lib/dom.d.cts +373 -0
  118. package/dist/lib/dom.d.ts +373 -0
  119. package/dist/lib/dom.js +3 -0
  120. package/dist/lib/dom.js.map +1 -0
  121. package/dist/lib/icons.cjs +20 -0
  122. package/dist/lib/icons.cjs.map +1 -0
  123. package/dist/lib/icons.d.cts +64 -0
  124. package/dist/lib/icons.d.ts +64 -0
  125. package/dist/lib/icons.js +3 -0
  126. package/dist/lib/icons.js.map +1 -0
  127. package/dist/lib/index.cjs +247 -0
  128. package/dist/lib/index.cjs.map +1 -0
  129. package/dist/lib/index.d.cts +30 -0
  130. package/dist/lib/index.d.ts +30 -0
  131. package/dist/lib/index.js +92 -0
  132. package/dist/lib/index.js.map +1 -0
  133. package/dist/lib/theme.cjs +56 -0
  134. package/dist/lib/theme.cjs.map +1 -0
  135. package/dist/lib/theme.d.cts +27 -0
  136. package/dist/lib/theme.d.ts +27 -0
  137. package/dist/lib/theme.js +3 -0
  138. package/dist/lib/theme.js.map +1 -0
  139. package/dist/router-B9kms5XQ.d.ts +124 -0
  140. package/dist/router-YnpW_sIK.d.cts +124 -0
  141. package/dist/runtime/adapters/angular.cjs +48 -0
  142. package/dist/runtime/adapters/angular.cjs.map +1 -0
  143. package/dist/runtime/adapters/angular.d.cts +38 -0
  144. package/dist/runtime/adapters/angular.d.ts +38 -0
  145. package/dist/runtime/adapters/angular.js +46 -0
  146. package/dist/runtime/adapters/angular.js.map +1 -0
  147. package/dist/runtime/adapters/react.cjs +41 -0
  148. package/dist/runtime/adapters/react.cjs.map +1 -0
  149. package/dist/runtime/adapters/react.d.cts +26 -0
  150. package/dist/runtime/adapters/react.d.ts +26 -0
  151. package/dist/runtime/adapters/react.js +39 -0
  152. package/dist/runtime/adapters/react.js.map +1 -0
  153. package/dist/runtime/adapters/vue.cjs +44 -0
  154. package/dist/runtime/adapters/vue.cjs.map +1 -0
  155. package/dist/runtime/adapters/vue.d.cts +37 -0
  156. package/dist/runtime/adapters/vue.d.ts +37 -0
  157. package/dist/runtime/adapters/vue.js +42 -0
  158. package/dist/runtime/adapters/vue.js.map +1 -0
  159. package/dist/runtime/components/ai-assistant.cjs +18 -0
  160. package/dist/runtime/components/ai-assistant.cjs.map +1 -0
  161. package/dist/runtime/components/ai-assistant.d.cts +8 -0
  162. package/dist/runtime/components/ai-assistant.d.ts +8 -0
  163. package/dist/runtime/components/ai-assistant.js +9 -0
  164. package/dist/runtime/components/ai-assistant.js.map +1 -0
  165. package/dist/runtime/components/ai-summary-card.cjs +18 -0
  166. package/dist/runtime/components/ai-summary-card.cjs.map +1 -0
  167. package/dist/runtime/components/ai-summary-card.d.cts +19 -0
  168. package/dist/runtime/components/ai-summary-card.d.ts +19 -0
  169. package/dist/runtime/components/ai-summary-card.js +9 -0
  170. package/dist/runtime/components/ai-summary-card.js.map +1 -0
  171. package/dist/runtime/router.cjs +429 -0
  172. package/dist/runtime/router.cjs.map +1 -0
  173. package/dist/runtime/router.d.cts +2 -0
  174. package/dist/runtime/router.d.ts +2 -0
  175. package/dist/runtime/router.js +421 -0
  176. package/dist/runtime/router.js.map +1 -0
  177. package/dist/runtime/server.cjs +125 -0
  178. package/dist/runtime/server.cjs.map +1 -0
  179. package/dist/runtime/server.d.cts +27 -0
  180. package/dist/runtime/server.d.ts +27 -0
  181. package/dist/runtime/server.js +117 -0
  182. package/dist/runtime/server.js.map +1 -0
  183. package/dist/runtime/workflow/index.cjs +282 -0
  184. package/dist/runtime/workflow/index.cjs.map +1 -0
  185. package/dist/runtime/workflow/index.d.cts +1 -0
  186. package/dist/runtime/workflow/index.d.ts +1 -0
  187. package/dist/runtime/workflow/index.js +5 -0
  188. package/dist/runtime/workflow/index.js.map +1 -0
  189. package/dist/tracing-DGdvMCEl.d.cts +109 -0
  190. package/dist/tracing-DGdvMCEl.d.ts +109 -0
  191. package/dist/types-C4RXXKfk.d.cts +76 -0
  192. package/dist/types-C4RXXKfk.d.ts +76 -0
  193. package/package.json +166 -0
@@ -0,0 +1,568 @@
1
+ // src/lib/dom.ts
2
+ var DOM_CONFIG = {
3
+ /** Enable debug logging */
4
+ DEBUG: false};
5
+ function setDebugMode(enabled) {
6
+ DOM_CONFIG.DEBUG = enabled;
7
+ }
8
+ function log(message, ...args) {
9
+ if (DOM_CONFIG.DEBUG) {
10
+ console.log(`[DOM] ${message}`, ...args);
11
+ }
12
+ }
13
+ function safeQuerySelector(selector, context = document) {
14
+ try {
15
+ const found = context.querySelector(selector);
16
+ return found instanceof HTMLElement ? found : null;
17
+ } catch (error) {
18
+ log(`Invalid selector: ${selector}`, error);
19
+ return null;
20
+ }
21
+ }
22
+ function safeQuerySelectorAll(selector, context = document) {
23
+ try {
24
+ return Array.from(context.querySelectorAll(selector)).filter(
25
+ (node) => node instanceof HTMLElement
26
+ );
27
+ } catch (error) {
28
+ log(`Invalid selector: ${selector}`, error);
29
+ return [];
30
+ }
31
+ }
32
+ var DOMElementImpl = class _DOMElementImpl {
33
+ el;
34
+ constructor(element) {
35
+ this.el = element;
36
+ }
37
+ // Class manipulation
38
+ addClass(...classes) {
39
+ this.el?.classList.add(...classes.filter(Boolean));
40
+ return this;
41
+ }
42
+ removeClass(...classes) {
43
+ this.el?.classList.remove(...classes.filter(Boolean));
44
+ return this;
45
+ }
46
+ toggleClass(className, force) {
47
+ if (force === void 0) {
48
+ this.el?.classList.toggle(className);
49
+ } else {
50
+ this.el?.classList.toggle(className, force);
51
+ }
52
+ return this;
53
+ }
54
+ hasClass(className) {
55
+ return this.el?.classList.contains(className) ?? false;
56
+ }
57
+ attr(name, value) {
58
+ if (value === void 0) {
59
+ return this.el?.getAttribute(name) ?? null;
60
+ }
61
+ this.el?.setAttribute(name, String(value));
62
+ return this;
63
+ }
64
+ removeAttr(name) {
65
+ this.el?.removeAttribute(name);
66
+ return this;
67
+ }
68
+ data(key, value) {
69
+ const dataKey = `data-${key}`;
70
+ if (value === void 0) {
71
+ return this.el?.getAttribute(dataKey) ?? null;
72
+ }
73
+ this.el?.setAttribute(dataKey, String(value));
74
+ return this;
75
+ }
76
+ html(content) {
77
+ if (content === void 0) {
78
+ return this.el?.innerHTML ?? "";
79
+ }
80
+ if (this.el) this.el.innerHTML = content;
81
+ return this;
82
+ }
83
+ text(content) {
84
+ if (content === void 0) {
85
+ return this.el?.textContent ?? "";
86
+ }
87
+ if (this.el) this.el.textContent = content;
88
+ return this;
89
+ }
90
+ val(value) {
91
+ if (!(this.el instanceof HTMLInputElement || this.el instanceof HTMLTextAreaElement || this.el instanceof HTMLSelectElement)) {
92
+ return "";
93
+ }
94
+ if (value === void 0) {
95
+ return this.el.value;
96
+ }
97
+ this.el.value = value;
98
+ return this;
99
+ }
100
+ // Events
101
+ on(event, handler, options) {
102
+ this.el?.addEventListener(event, handler, options);
103
+ return this;
104
+ }
105
+ off(event, handler) {
106
+ this.el?.removeEventListener(event, handler);
107
+ return this;
108
+ }
109
+ once(event, handler) {
110
+ this.el?.addEventListener(event, handler, { once: true });
111
+ return this;
112
+ }
113
+ trigger(event, detail) {
114
+ if (this.el) {
115
+ const customEvent = new CustomEvent(event, { detail, bubbles: true, cancelable: true });
116
+ this.el.dispatchEvent(customEvent);
117
+ }
118
+ return this;
119
+ }
120
+ // DOM manipulation
121
+ append(content) {
122
+ const el = this.el;
123
+ if (!el) return this;
124
+ if (typeof content === "string") {
125
+ el.insertAdjacentHTML("beforeend", content);
126
+ } else if (Array.isArray(content)) {
127
+ content.forEach((node) => el.appendChild(node));
128
+ } else {
129
+ el.appendChild(content);
130
+ }
131
+ return this;
132
+ }
133
+ prepend(content) {
134
+ const el = this.el;
135
+ if (!el) return this;
136
+ if (typeof content === "string") {
137
+ el.insertAdjacentHTML("afterbegin", content);
138
+ } else if (Array.isArray(content)) {
139
+ content.reverse().forEach((node) => el.insertBefore(node, el.firstChild));
140
+ } else {
141
+ el.insertBefore(content, el.firstChild);
142
+ }
143
+ return this;
144
+ }
145
+ before(content) {
146
+ if (!this.el) return this;
147
+ if (typeof content === "string") {
148
+ this.el.insertAdjacentHTML("beforebegin", content);
149
+ } else {
150
+ this.el.parentElement?.insertBefore(content, this.el);
151
+ }
152
+ return this;
153
+ }
154
+ after(content) {
155
+ if (!this.el) return this;
156
+ if (typeof content === "string") {
157
+ this.el.insertAdjacentHTML("afterend", content);
158
+ } else {
159
+ this.el.parentElement?.insertBefore(content, this.el.nextSibling);
160
+ }
161
+ return this;
162
+ }
163
+ remove() {
164
+ this.el?.remove();
165
+ }
166
+ empty() {
167
+ if (this.el) this.el.innerHTML = "";
168
+ return this;
169
+ }
170
+ replace(newContent) {
171
+ if (!this.el) return;
172
+ if (typeof newContent === "string") {
173
+ this.el.outerHTML = newContent;
174
+ } else {
175
+ this.el.parentElement?.replaceChild(newContent, this.el);
176
+ }
177
+ }
178
+ // Traversal
179
+ parent() {
180
+ const el = this.el;
181
+ return new _DOMElementImpl(el ? el.parentElement : null);
182
+ }
183
+ children() {
184
+ const el = this.el;
185
+ return el ? Array.from(el.children).filter((child) => child instanceof HTMLElement) : [];
186
+ }
187
+ siblings() {
188
+ const el = this.el;
189
+ if (!el?.parentElement) return [];
190
+ return Array.from(el.parentElement.children).filter((child) => child !== el);
191
+ }
192
+ find(selector) {
193
+ const el = this.el;
194
+ if (!el) return new _DOMElementImpl(null);
195
+ const found = el.querySelector(selector);
196
+ return new _DOMElementImpl(found instanceof HTMLElement ? found : null);
197
+ }
198
+ findAll(selector) {
199
+ const el = this.el;
200
+ return el ? Array.from(el.querySelectorAll(selector)).filter((node) => node instanceof HTMLElement) : [];
201
+ }
202
+ closest(selector) {
203
+ const el = this.el;
204
+ if (!el) return new _DOMElementImpl(null);
205
+ const found = el.closest(selector);
206
+ return new _DOMElementImpl(found instanceof HTMLElement ? found : null);
207
+ }
208
+ next() {
209
+ const el = this.el?.nextElementSibling;
210
+ return new _DOMElementImpl(el instanceof HTMLElement ? el : null);
211
+ }
212
+ prev() {
213
+ const el = this.el?.previousElementSibling;
214
+ return new _DOMElementImpl(el instanceof HTMLElement ? el : null);
215
+ }
216
+ css(propertyOrProperties, value) {
217
+ const el = this.el;
218
+ if (!el) return typeof propertyOrProperties === "string" ? "" : this;
219
+ if (typeof propertyOrProperties === "string") {
220
+ if (value === void 0) {
221
+ return window.getComputedStyle(el).getPropertyValue(propertyOrProperties);
222
+ }
223
+ el.style.setProperty(propertyOrProperties, String(value));
224
+ return this;
225
+ }
226
+ Object.entries(propertyOrProperties).forEach(([prop, val]) => {
227
+ el.style.setProperty(prop, String(val));
228
+ });
229
+ return this;
230
+ }
231
+ show() {
232
+ if (this.el) this.el.style.display = "";
233
+ return this;
234
+ }
235
+ hide() {
236
+ if (this.el) this.el.style.display = "none";
237
+ return this;
238
+ }
239
+ toggle(force) {
240
+ if (!this.el) return this;
241
+ const shouldShow = force ?? this.isHidden();
242
+ return shouldShow ? this.show() : this.hide();
243
+ }
244
+ // Dimensions
245
+ width() {
246
+ return this.el?.offsetWidth ?? 0;
247
+ }
248
+ height() {
249
+ return this.el?.offsetHeight ?? 0;
250
+ }
251
+ offset() {
252
+ if (!this.el) return { top: 0, left: 0 };
253
+ const rect = this.el.getBoundingClientRect();
254
+ return {
255
+ top: rect.top + window.scrollY,
256
+ left: rect.left + window.scrollX
257
+ };
258
+ }
259
+ scrollTop(value) {
260
+ if (!this.el) return value === void 0 ? 0 : this;
261
+ if (value === void 0) {
262
+ return this.el.scrollTop;
263
+ }
264
+ this.el.scrollTop = value;
265
+ return this;
266
+ }
267
+ // State
268
+ isVisible() {
269
+ if (!this.el) return false;
270
+ return this.el.offsetParent !== null && window.getComputedStyle(this.el).display !== "none";
271
+ }
272
+ isHidden() {
273
+ return !this.isVisible();
274
+ }
275
+ exists() {
276
+ return this.el !== null;
277
+ }
278
+ // Focus
279
+ focus() {
280
+ this.el?.focus();
281
+ return this;
282
+ }
283
+ blur() {
284
+ this.el?.blur();
285
+ return this;
286
+ }
287
+ };
288
+ function $(selector) {
289
+ if (!selector) return new DOMElementImpl(null);
290
+ if (typeof selector === "string") {
291
+ return new DOMElementImpl(safeQuerySelector(selector));
292
+ }
293
+ return new DOMElementImpl(selector);
294
+ }
295
+ function $$(selector) {
296
+ return safeQuerySelectorAll(selector);
297
+ }
298
+ function $id(id) {
299
+ return new DOMElementImpl(document.getElementById(id));
300
+ }
301
+ function create(tag, options) {
302
+ const el = document.createElement(tag);
303
+ if (!options) return el;
304
+ if (options.className) el.className = options.className;
305
+ if (options.classes) {
306
+ const validClasses = options.classes.filter(Boolean);
307
+ if (validClasses.length > 0) {
308
+ el.classList.add(...validClasses);
309
+ }
310
+ }
311
+ if (options.id) el.id = options.id;
312
+ if (options.text !== void 0) el.textContent = options.text;
313
+ if (options.html !== void 0) {
314
+ log(`Setting innerHTML on ${tag} element`);
315
+ el.innerHTML = options.html;
316
+ }
317
+ if (options.attrs) {
318
+ Object.entries(options.attrs).forEach(([key, value]) => {
319
+ el.setAttribute(key, String(value));
320
+ });
321
+ }
322
+ if (options.data) {
323
+ Object.entries(options.data).forEach(([key, value]) => {
324
+ el.setAttribute(`data-${key}`, String(value));
325
+ });
326
+ }
327
+ if (options.styles) {
328
+ Object.entries(options.styles).forEach(([key, value]) => {
329
+ el.style.setProperty(key, String(value));
330
+ });
331
+ }
332
+ if (options.on) {
333
+ Object.entries(options.on).forEach(([event, handler]) => {
334
+ el.addEventListener(event, handler);
335
+ });
336
+ }
337
+ if (options.children) {
338
+ options.children.forEach((child) => {
339
+ if (typeof child === "string") {
340
+ el.appendChild(document.createTextNode(child));
341
+ return;
342
+ }
343
+ el.appendChild(child);
344
+ });
345
+ }
346
+ return el;
347
+ }
348
+ function fragment(html) {
349
+ const template = document.createElement("template");
350
+ template.innerHTML = html.trim();
351
+ return template.content;
352
+ }
353
+ function delegate(event, selector, handler, root = document) {
354
+ const delegatedHandler = (e) => {
355
+ const origin = e.target;
356
+ if (!(origin instanceof Element)) {
357
+ return;
358
+ }
359
+ const target = origin.closest(selector);
360
+ if (target instanceof HTMLElement) {
361
+ handler(e, target);
362
+ }
363
+ };
364
+ root.addEventListener(event, delegatedHandler);
365
+ log(`Delegated ${event} on ${selector}`);
366
+ return () => {
367
+ root.removeEventListener(event, delegatedHandler);
368
+ log(`Removed delegation for ${event} on ${selector}`);
369
+ };
370
+ }
371
+ function ready(callback) {
372
+ if (document.readyState === "loading") {
373
+ document.addEventListener("DOMContentLoaded", callback);
374
+ } else {
375
+ callback();
376
+ }
377
+ }
378
+ function clone(element, deep = true) {
379
+ return element.cloneNode(deep);
380
+ }
381
+ function matches(element, selector) {
382
+ return element.matches(selector);
383
+ }
384
+ var dataStore = /* @__PURE__ */ new WeakMap();
385
+ function elementData(element, key, value) {
386
+ if (value === void 0) {
387
+ const store2 = dataStore.get(element);
388
+ return store2?.[key];
389
+ }
390
+ let store = dataStore.get(element);
391
+ if (!store) {
392
+ store = {};
393
+ dataStore.set(element, store);
394
+ }
395
+ store[key] = value;
396
+ }
397
+ function serializeForm(form) {
398
+ const formData = new FormData(form);
399
+ const data = {};
400
+ formData.forEach((value, key) => {
401
+ data[key] = value instanceof File ? value.name : value;
402
+ });
403
+ return data;
404
+ }
405
+ var ARRAY_KEY = /^([^\[]+)\[([^\]]*)\]$/;
406
+ function getFormValues(form) {
407
+ const formData = new FormData(form);
408
+ const result = {};
409
+ formData.forEach((value, key) => {
410
+ const arrayMatch = ARRAY_KEY.exec(key);
411
+ if (arrayMatch) {
412
+ const [, name, index] = arrayMatch;
413
+ const existing = result[name];
414
+ const list = Array.isArray(existing) ? existing : [];
415
+ if (!Array.isArray(existing)) {
416
+ result[name] = list;
417
+ }
418
+ if (index) {
419
+ list[Number.parseInt(index, 10)] = value;
420
+ } else {
421
+ list.push(value);
422
+ }
423
+ return;
424
+ }
425
+ result[key] = value;
426
+ });
427
+ return result;
428
+ }
429
+ function debounce(func, wait) {
430
+ let timeout = null;
431
+ return function(...args) {
432
+ if (timeout) clearTimeout(timeout);
433
+ timeout = setTimeout(() => func.apply(this, args), wait);
434
+ };
435
+ }
436
+ function throttle(func, limit) {
437
+ let inThrottle = false;
438
+ return function(...args) {
439
+ if (!inThrottle) {
440
+ func.apply(this, args);
441
+ inThrottle = true;
442
+ setTimeout(() => {
443
+ inThrottle = false;
444
+ }, limit);
445
+ }
446
+ };
447
+ }
448
+ function waitForElement(selector, timeout = 5e3) {
449
+ return new Promise((resolve, reject) => {
450
+ const element = document.querySelector(selector);
451
+ if (element instanceof HTMLElement) {
452
+ resolve(element);
453
+ return;
454
+ }
455
+ const observer = new MutationObserver(() => {
456
+ const observed = document.querySelector(selector);
457
+ if (observed instanceof HTMLElement) {
458
+ observer.disconnect();
459
+ clearTimeout(timeoutId);
460
+ resolve(observed);
461
+ }
462
+ });
463
+ observer.observe(document.body, {
464
+ childList: true,
465
+ subtree: true
466
+ });
467
+ const timeoutId = setTimeout(() => {
468
+ observer.disconnect();
469
+ reject(new Error(`Element "${selector}" not found within ${String(timeout)}ms`));
470
+ }, timeout);
471
+ });
472
+ }
473
+ function onVisible(element, callback, options) {
474
+ const observer = new IntersectionObserver((entries) => {
475
+ entries.forEach((entry) => {
476
+ if (entry.isIntersecting) {
477
+ callback(entry);
478
+ }
479
+ });
480
+ }, options);
481
+ observer.observe(element);
482
+ return () => {
483
+ observer.disconnect();
484
+ };
485
+ }
486
+ function animate(element, properties, duration = 300, easing = "ease") {
487
+ return new Promise((resolve) => {
488
+ const originalTransition = element.style.transition;
489
+ element.style.transition = `all ${String(duration)}ms ${easing}`;
490
+ Object.entries(properties).forEach(([prop, value]) => {
491
+ element.style.setProperty(prop, value);
492
+ });
493
+ setTimeout(() => {
494
+ element.style.transition = originalTransition;
495
+ resolve();
496
+ }, duration);
497
+ });
498
+ }
499
+ function fadeIn(element, duration = 300) {
500
+ element.style.opacity = "0";
501
+ element.style.display = "";
502
+ return animate(element, { opacity: "1" }, duration);
503
+ }
504
+ function fadeOut(element, duration = 300) {
505
+ return animate(element, { opacity: "0" }, duration).then(() => {
506
+ element.style.display = "none";
507
+ });
508
+ }
509
+ function slideDown(element, duration = 300) {
510
+ element.style.display = "block";
511
+ const height = element.scrollHeight;
512
+ element.style.height = "0";
513
+ element.style.overflow = "hidden";
514
+ return animate(element, { height: `${String(height)}px` }, duration).then(() => {
515
+ element.style.height = "";
516
+ element.style.overflow = "";
517
+ });
518
+ }
519
+ function slideUp(element, duration = 300) {
520
+ const height = element.scrollHeight;
521
+ element.style.height = `${String(height)}px`;
522
+ element.style.overflow = "hidden";
523
+ return animate(element, { height: "0" }, duration).then(() => {
524
+ element.style.display = "none";
525
+ element.style.height = "";
526
+ element.style.overflow = "";
527
+ });
528
+ }
529
+ var DOMApi = {
530
+ // Version
531
+ version: "2.0.0",
532
+ // Core selectors
533
+ $,
534
+ $$,
535
+ $id,
536
+ // Element creation
537
+ create,
538
+ fragment,
539
+ // Event handling
540
+ delegate,
541
+ ready,
542
+ // Utilities
543
+ clone,
544
+ matches,
545
+ elementData,
546
+ // Form helpers
547
+ serializeForm,
548
+ getFormValues,
549
+ // Performance
550
+ debounce,
551
+ throttle,
552
+ // Async utilities
553
+ waitForElement,
554
+ onVisible,
555
+ // Animations
556
+ animate,
557
+ fadeIn,
558
+ fadeOut,
559
+ slideDown,
560
+ slideUp,
561
+ // Configuration
562
+ setDebugMode
563
+ };
564
+ var dom_default = DOMApi;
565
+
566
+ export { $, $$, $id, animate, clone, create, debounce, delegate, dom_default, elementData, fadeIn, fadeOut, fragment, getFormValues, matches, onVisible, ready, serializeForm, setDebugMode, slideDown, slideUp, throttle, waitForElement };
567
+ //# sourceMappingURL=chunk-22HQL2Y4.js.map
568
+ //# sourceMappingURL=chunk-22HQL2Y4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/dom.ts"],"names":["store"],"mappings":"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","file":"chunk-22HQL2Y4.js","sourcesContent":["/**\n * @fileoverview CE DOM Utilities\n * @description Comprehensive DOM manipulation library for TypeScript projects\n * @author ClusterEnvision\n * @version 2.0.0\n *\n * Provides a jQuery-like chainable API with full type safety, optimized for\n * modern browsers and production use. Includes performance optimizations,\n * error handling, and extensive utility functions.\n *\n * @example\n * ```typescript\n * import { $, create, delegate } from '@app/lib/dom';\n *\n * // Select and manipulate\n * $('.button').addClass('active').on('click', handler);\n *\n * // Create elements\n * const btn = create('button', {\n * text: 'Click me',\n * className: 'btn primary',\n * on: { click: () => console.log('clicked') }\n * });\n *\n * // Event delegation\n * delegate('click', '.dynamic-btn', (e, target) => {\n * console.log('Delegated click', target);\n * });\n * ```\n */\n\n// ============================================================================\n// CONSTANTS & CONFIGURATION\n// ============================================================================\n\nconst DOM_CONFIG: { DEBUG: boolean; ENABLE_CACHE: boolean; CACHE_SIZE: number } = {\n /** Enable debug logging */\n DEBUG: false,\n /** Cache selector results (experimental) */\n ENABLE_CACHE: false,\n /** Maximum cached selectors */\n CACHE_SIZE: 100,\n};\n\n/** Enable/disable debug mode */\nexport function setDebugMode(enabled: boolean): void {\n DOM_CONFIG.DEBUG = enabled;\n}\n\n// ============================================================================\n// TYPES & INTERFACES\n// ============================================================================\n\nexport type ElementInput = string | HTMLElement | null | undefined;\nexport type ElementsInput = string | HTMLElement[] | NodeListOf<Element>;\nexport type EventHandler<T extends Event = Event> = (event: T) => void;\nexport type DelegateHandler = (event: Event, target: HTMLElement) => void;\n\n/**\n * Options for creating elements\n * @template K - HTML element tag name type\n */\nexport interface CreateElementOptions {\n /** CSS class name */\n className?: string;\n /** Array of CSS classes */\n classes?: string[];\n /** Element ID */\n id?: string;\n /** Text content */\n text?: string;\n /** HTML content */\n html?: string;\n /** HTML attributes */\n attrs?: Record<string, string | number | boolean>;\n /** Data attributes (without 'data-' prefix) */\n data?: Record<string, string | number | boolean>;\n /** Inline styles */\n styles?: Record<string, string | number>;\n /** Event listeners */\n on?: Record<string, EventListener>;\n /** Child elements or text nodes */\n children?: (HTMLElement | string)[];\n}\n\n/**\n * Chainable DOM element wrapper\n * Provides jQuery-like API for DOM manipulation\n */\nexport interface DOMElement {\n /** The underlying HTMLElement */\n readonly el: HTMLElement | null;\n\n // Class manipulation\n addClass(...classes: string[]): DOMElement;\n removeClass(...classes: string[]): DOMElement;\n toggleClass(className: string, force?: boolean): DOMElement;\n hasClass(className: string): boolean;\n\n // Attributes\n attr(name: string): string | null;\n attr(name: string, value: string | number | boolean): DOMElement;\n removeAttr(name: string): DOMElement;\n data(key: string): string | null;\n data(key: string, value: string | number | boolean): DOMElement;\n\n // Content\n html(): string;\n html(content: string): DOMElement;\n text(): string;\n text(content: string): DOMElement;\n val(): string;\n val(value: string): DOMElement;\n\n // Events\n on(event: string, handler: EventListener, options?: AddEventListenerOptions): DOMElement;\n off(event: string, handler: EventListener): DOMElement;\n once(event: string, handler: EventListener): DOMElement;\n trigger(event: string, detail?: unknown): DOMElement;\n\n // DOM manipulation\n append(content: string | HTMLElement | HTMLElement[]): DOMElement;\n prepend(content: string | HTMLElement | HTMLElement[]): DOMElement;\n before(content: string | HTMLElement): DOMElement;\n after(content: string | HTMLElement): DOMElement;\n remove(): void;\n empty(): DOMElement;\n replace(newContent: string | HTMLElement): void;\n\n // Traversal\n parent(): DOMElement;\n children(): HTMLElement[];\n siblings(): HTMLElement[];\n find(selector: string): DOMElement;\n findAll(selector: string): HTMLElement[];\n closest(selector: string): DOMElement;\n next(): DOMElement;\n prev(): DOMElement;\n\n // Styles\n css(property: string): string;\n css(property: string, value: string | number): DOMElement;\n css(properties: Record<string, string | number>): DOMElement;\n show(): DOMElement;\n hide(): DOMElement;\n toggle(force?: boolean): DOMElement;\n\n // Dimensions\n width(): number;\n height(): number;\n offset(): { top: number; left: number };\n scrollTop(): number;\n scrollTop(value: number): DOMElement;\n\n // State\n isVisible(): boolean;\n isHidden(): boolean;\n exists(): boolean;\n\n // Focus\n focus(): DOMElement;\n blur(): DOMElement;\n}\n\n// ============================================================================\n// UTILITY FUNCTIONS\n// ============================================================================\n\n/**\n * Internal logging utility\n * @internal\n */\nfunction log(message: string, ...args: unknown[]): void {\n if (DOM_CONFIG.DEBUG) {\n console.log(`[DOM] ${message}`, ...args);\n }\n}\n\n/**\n * Safe selector query with error handling\n * @internal\n */\nfunction safeQuerySelector(selector: string, context: ParentNode = document): HTMLElement | null {\n try {\n const found = context.querySelector(selector);\n return found instanceof HTMLElement ? found : null;\n } catch (error) {\n log(`Invalid selector: ${selector}`, error);\n return null;\n }\n}\n\n/**\n * Safe querySelectorAll with error handling\n * @internal\n */\nfunction safeQuerySelectorAll(selector: string, context: ParentNode = document): HTMLElement[] {\n try {\n return Array.from(context.querySelectorAll(selector)).filter(\n (node): node is HTMLElement => node instanceof HTMLElement,\n );\n } catch (error) {\n log(`Invalid selector: ${selector}`, error);\n return [];\n }\n}\n\n// ============================================================================\n// CHAINABLE DOM ELEMENT IMPLEMENTATION\n// ============================================================================\n\n/**\n * Implementation of DOMElement interface\n * @internal\n */\nclass DOMElementImpl implements DOMElement {\n readonly el: HTMLElement | null;\n\n constructor(element: HTMLElement | null) {\n this.el = element;\n }\n\n // Class manipulation\n addClass(...classes: string[]): DOMElement {\n this.el?.classList.add(...classes.filter(Boolean));\n return this;\n }\n\n removeClass(...classes: string[]): DOMElement {\n this.el?.classList.remove(...classes.filter(Boolean));\n return this;\n }\n\n toggleClass(className: string, force?: boolean): DOMElement {\n if (force === undefined) {\n this.el?.classList.toggle(className);\n } else {\n this.el?.classList.toggle(className, force);\n }\n return this;\n }\n\n hasClass(className: string): boolean {\n return this.el?.classList.contains(className) ?? false;\n }\n\n // Attributes\n attr(name: string): string | null;\n attr(name: string, value: string | number | boolean): DOMElement;\n attr(name: string, value?: string | number | boolean): string | null | DOMElement {\n if (value === undefined) {\n return this.el?.getAttribute(name) ?? null;\n }\n this.el?.setAttribute(name, String(value));\n return this;\n }\n\n removeAttr(name: string): DOMElement {\n this.el?.removeAttribute(name);\n return this;\n }\n\n data(key: string): string | null;\n data(key: string, value: string | number | boolean): DOMElement;\n data(key: string, value?: string | number | boolean): string | null | DOMElement {\n const dataKey = `data-${key}`;\n if (value === undefined) {\n return this.el?.getAttribute(dataKey) ?? null;\n }\n this.el?.setAttribute(dataKey, String(value));\n return this;\n }\n\n // Content\n html(): string;\n html(content: string): DOMElement;\n html(content?: string): string | DOMElement {\n if (content === undefined) {\n return this.el?.innerHTML ?? '';\n }\n if (this.el) this.el.innerHTML = content;\n return this;\n }\n\n text(): string;\n text(content: string): DOMElement;\n text(content?: string): string | DOMElement {\n if (content === undefined) {\n return this.el?.textContent ?? '';\n }\n if (this.el) this.el.textContent = content;\n return this;\n }\n\n val(): string;\n val(value: string): DOMElement;\n val(value?: string): string | DOMElement {\n if (!(this.el instanceof HTMLInputElement || this.el instanceof HTMLTextAreaElement || this.el instanceof HTMLSelectElement)) {\n return '';\n }\n if (value === undefined) {\n return this.el.value;\n }\n this.el.value = value;\n return this;\n }\n\n // Events\n on(event: string, handler: EventListener, options?: AddEventListenerOptions): DOMElement {\n this.el?.addEventListener(event, handler, options);\n return this;\n }\n\n off(event: string, handler: EventListener): DOMElement {\n this.el?.removeEventListener(event, handler);\n return this;\n }\n\n once(event: string, handler: EventListener): DOMElement {\n this.el?.addEventListener(event, handler, { once: true });\n return this;\n }\n\n trigger(event: string, detail?: unknown): DOMElement {\n if (this.el) {\n const customEvent = new CustomEvent(event, { detail, bubbles: true, cancelable: true });\n this.el.dispatchEvent(customEvent);\n }\n return this;\n }\n\n // DOM manipulation\n append(content: string | HTMLElement | HTMLElement[]): DOMElement {\n const el = this.el;\n if (!el) return this;\n if (typeof content === 'string') {\n el.insertAdjacentHTML('beforeend', content);\n } else if (Array.isArray(content)) {\n content.forEach(node => el.appendChild(node));\n } else {\n el.appendChild(content);\n }\n return this;\n }\n\n prepend(content: string | HTMLElement | HTMLElement[]): DOMElement {\n const el = this.el;\n if (!el) return this;\n if (typeof content === 'string') {\n el.insertAdjacentHTML('afterbegin', content);\n } else if (Array.isArray(content)) {\n content.reverse().forEach(node => el.insertBefore(node, el.firstChild));\n } else {\n el.insertBefore(content, el.firstChild);\n }\n return this;\n }\n\n before(content: string | HTMLElement): DOMElement {\n if (!this.el) return this;\n if (typeof content === 'string') {\n this.el.insertAdjacentHTML('beforebegin', content);\n } else {\n this.el.parentElement?.insertBefore(content, this.el);\n }\n return this;\n }\n\n after(content: string | HTMLElement): DOMElement {\n if (!this.el) return this;\n if (typeof content === 'string') {\n this.el.insertAdjacentHTML('afterend', content);\n } else {\n this.el.parentElement?.insertBefore(content, this.el.nextSibling);\n }\n return this;\n }\n\n remove(): void {\n this.el?.remove();\n }\n\n empty(): DOMElement {\n if (this.el) this.el.innerHTML = '';\n return this;\n }\n\n replace(newContent: string | HTMLElement): void {\n if (!this.el) return;\n if (typeof newContent === 'string') {\n this.el.outerHTML = newContent;\n } else {\n this.el.parentElement?.replaceChild(newContent, this.el);\n }\n }\n\n // Traversal\n parent(): DOMElement {\n const el = this.el;\n return new DOMElementImpl(el ? el.parentElement : null);\n }\n\n children(): HTMLElement[] {\n const el = this.el;\n return el ? Array.from(el.children).filter((child): child is HTMLElement => child instanceof HTMLElement) : [];\n }\n\n siblings(): HTMLElement[] {\n const el = this.el;\n if (!el?.parentElement) return [];\n return Array.from(el.parentElement.children).filter(child => child !== el) as HTMLElement[];\n }\n\n find(selector: string): DOMElement {\n const el = this.el;\n if (!el) return new DOMElementImpl(null);\n const found = el.querySelector(selector);\n return new DOMElementImpl(found instanceof HTMLElement ? found : null);\n }\n\n findAll(selector: string): HTMLElement[] {\n const el = this.el;\n return el\n ? Array.from(el.querySelectorAll(selector)).filter((node): node is HTMLElement => node instanceof HTMLElement)\n : [];\n }\n\n closest(selector: string): DOMElement {\n const el = this.el;\n if (!el) return new DOMElementImpl(null);\n const found = el.closest(selector);\n return new DOMElementImpl(found instanceof HTMLElement ? found : null);\n }\n\n next(): DOMElement {\n const el = this.el?.nextElementSibling;\n return new DOMElementImpl(el instanceof HTMLElement ? el : null);\n }\n\n prev(): DOMElement {\n const el = this.el?.previousElementSibling;\n return new DOMElementImpl(el instanceof HTMLElement ? el : null);\n }\n\n // Styles\n css(property: string): string;\n css(property: string, value: string | number): DOMElement;\n css(properties: Record<string, string | number>): DOMElement;\n css(propertyOrProperties: string | Record<string, string | number>, value?: string | number): string | DOMElement {\n const el = this.el;\n if (!el) return typeof propertyOrProperties === 'string' ? '' : this;\n\n if (typeof propertyOrProperties === 'string') {\n if (value === undefined) {\n return window.getComputedStyle(el).getPropertyValue(propertyOrProperties);\n }\n el.style.setProperty(propertyOrProperties, String(value));\n return this;\n }\n\n Object.entries(propertyOrProperties).forEach(([prop, val]) => {\n el.style.setProperty(prop, String(val));\n });\n return this;\n }\n\n show(): DOMElement {\n if (this.el) this.el.style.display = '';\n return this;\n }\n\n hide(): DOMElement {\n if (this.el) this.el.style.display = 'none';\n return this;\n }\n\n toggle(force?: boolean): DOMElement {\n if (!this.el) return this;\n const shouldShow = force ?? this.isHidden();\n return shouldShow ? this.show() : this.hide();\n }\n\n // Dimensions\n width(): number {\n return this.el?.offsetWidth ?? 0;\n }\n\n height(): number {\n return this.el?.offsetHeight ?? 0;\n }\n\n offset(): { top: number; left: number } {\n if (!this.el) return { top: 0, left: 0 };\n const rect = this.el.getBoundingClientRect();\n return {\n top: rect.top + window.scrollY,\n left: rect.left + window.scrollX\n };\n }\n\n scrollTop(): number;\n scrollTop(value: number): DOMElement;\n scrollTop(value?: number): number | DOMElement {\n if (!this.el) return value === undefined ? 0 : this;\n if (value === undefined) {\n return this.el.scrollTop;\n }\n this.el.scrollTop = value;\n return this;\n }\n\n // State\n isVisible(): boolean {\n if (!this.el) return false;\n return this.el.offsetParent !== null && window.getComputedStyle(this.el).display !== 'none';\n }\n\n isHidden(): boolean {\n return !this.isVisible();\n }\n\n exists(): boolean {\n return this.el !== null;\n }\n\n // Focus\n focus(): DOMElement {\n this.el?.focus();\n return this;\n }\n\n blur(): DOMElement {\n this.el?.blur();\n return this;\n }\n}\n\n// ============================================================================\n// CORE SELECTORS\n// ============================================================================\n\n/**\n * Select a single element (jQuery-like $)\n *\n * @param selector - CSS selector string or HTMLElement\n * @returns DOMElement wrapper for chainable operations\n *\n * @example\n * ```typescript\n * // Select by CSS selector\n * $('button').addClass('active').on('click', handler);\n *\n * // Wrap existing element\n * const el = document.getElementById('app');\n * $(el).css('color', 'red');\n *\n * // Null-safe\n * $('.non-existent').addClass('foo'); // No error\n * ```\n */\nexport function $(selector: ElementInput): DOMElement {\n if (!selector) return new DOMElementImpl(null);\n\n if (typeof selector === 'string') {\n return new DOMElementImpl(safeQuerySelector(selector));\n }\n\n return new DOMElementImpl(selector);\n}\n\n/**\n * Select multiple elements\n *\n * @param selector - CSS selector string\n * @returns Array of HTMLElements (not wrapped)\n *\n * @example\n * ```typescript\n * // Get all matching elements\n * $$('.items').forEach(el => $(el).addClass('processed'));\n *\n * // Map and filter\n * const visible = $$('.item').filter(el => $(el).isVisible());\n * ```\n */\nexport function $$(selector: string): HTMLElement[] {\n return safeQuerySelectorAll(selector);\n}\n\n/**\n * Select by ID (faster than querySelector)\n *\n * @param id - Element ID (without # prefix)\n * @returns DOMElement wrapper\n *\n * @example\n * ```typescript\n * $id('app').html('<h1>Hello</h1>');\n * $id('sidebar').addClass('collapsed');\n * ```\n */\nexport function $id(id: string): DOMElement {\n return new DOMElementImpl(document.getElementById(id));\n}\n\n// ============================================================================\n// ELEMENT CREATION\n// ============================================================================\n\n/**\n * Create a new element with comprehensive options\n *\n * @template K - HTML element tag name type\n * @param tag - HTML tag name (e.g., 'div', 'button', 'input')\n * @param options - Configuration options for the element\n * @returns Created HTMLElement of the specified type\n *\n * @example\n * ```typescript\n * // Simple button\n * const btn = create('button', {\n * className: 'btn btn-primary',\n * text: 'Click me'\n * });\n *\n * // Complex form input\n * const input = create('input', {\n * classes: ['form-control', 'input-lg'],\n * attrs: { type: 'email', placeholder: 'Enter email', required: true },\n * data: { validation: 'email', maxLength: '255' },\n * on: {\n * input: (e) => console.log('Input changed:', e.target.value),\n * blur: validateEmail\n * }\n * });\n *\n * // Container with children\n * const card = create('div', {\n * className: 'card',\n * children: [\n * create('h3', { text: 'Card Title' }),\n * create('p', { text: 'Card content goes here' }),\n * create('button', { text: 'Action', className: 'btn' })\n * ]\n * });\n * ```\n */\nexport function create<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n options?: CreateElementOptions\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n\n if (!options) return el;\n\n // Set className (single string)\n if (options.className) el.className = options.className;\n\n // Add classes (array of strings)\n if (options.classes) {\n const validClasses = options.classes.filter(Boolean);\n if (validClasses.length > 0) {\n el.classList.add(...validClasses);\n }\n }\n\n // Set ID\n if (options.id) el.id = options.id;\n\n // Set text content (safe, no HTML injection)\n if (options.text !== undefined) el.textContent = options.text;\n\n // Set HTML content (use with caution)\n if (options.html !== undefined) {\n log(`Setting innerHTML on ${tag} element`);\n el.innerHTML = options.html;\n }\n\n // Set HTML attributes\n if (options.attrs) {\n Object.entries(options.attrs).forEach(([key, value]) => {\n el.setAttribute(key, String(value));\n });\n }\n\n // Set data attributes (automatically prefixed with 'data-')\n if (options.data) {\n Object.entries(options.data).forEach(([key, value]) => {\n el.setAttribute(`data-${key}`, String(value));\n });\n }\n\n // Apply inline styles\n if (options.styles) {\n Object.entries(options.styles).forEach(([key, value]) => {\n el.style.setProperty(key, String(value));\n });\n }\n\n // Attach event listeners\n if (options.on) {\n Object.entries(options.on).forEach(([event, handler]) => {\n el.addEventListener(event, handler);\n });\n }\n\n // Append children\n if (options.children) {\n options.children.forEach(child => {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child));\n return;\n }\n el.appendChild(child);\n });\n }\n\n return el;\n}\n\n/**\n * Create a document fragment from HTML string\n *\n * @param html - HTML string to parse\n * @returns DocumentFragment containing parsed elements\n *\n * @example\n * ```typescript\n * const frag = fragment(`\n * <div class=\"card\">\n * <h3>Title</h3>\n * <p>Content</p>\n * </div>\n * `);\n * document.body.appendChild(frag);\n * ```\n */\nexport function fragment(html: string): DocumentFragment {\n const template = document.createElement('template');\n template.innerHTML = html.trim();\n return template.content;\n}\n\n// ============================================================================\n// EVENT DELEGATION\n// ============================================================================\n\n/**\n * Event delegation helper for dynamic elements\n *\n * Attaches a single event listener to a root element and handles events\n * from matching child elements, even if they're added dynamically after\n * the listener is attached.\n *\n * @param event - Event type (e.g., 'click', 'input', 'change')\n * @param selector - CSS selector for target elements\n * @param handler - Callback function receiving event and matched target\n * @param root - Root element or document to attach listener to\n * @returns Cleanup function to remove the delegated listener\n *\n * @example\n * ```typescript\n * // Handle clicks on dynamically added buttons\n * const cleanup = delegate('click', '.btn-delete', (e, target) => {\n * const id = target.dataset.id;\n * deleteItem(id);\n * });\n *\n * // With custom root\n * delegate('click', '.item', handleClick, myContainer);\n *\n * // Clean up when done\n * cleanup();\n * ```\n */\nexport function delegate(\n event: string,\n selector: string,\n handler: DelegateHandler,\n root: HTMLElement | Document = document\n): () => void {\n const delegatedHandler = (e: Event) => {\n const origin = e.target;\n if (!(origin instanceof Element)) {\n return;\n }\n const target = origin.closest(selector);\n if (target instanceof HTMLElement) {\n handler(e, target);\n }\n };\n\n root.addEventListener(event, delegatedHandler);\n log(`Delegated ${event} on ${selector}`);\n\n // Return cleanup function\n return () => {\n root.removeEventListener(event, delegatedHandler);\n log(`Removed delegation for ${event} on ${selector}`);\n };\n}\n\n// ============================================================================\n// DOM READY\n// ============================================================================\n\n/**\n * Execute callback when DOM is ready\n *\n * Safely runs code when the DOM is fully loaded. If DOM is already ready,\n * executes callback immediately.\n *\n * @param callback - Function to execute when DOM is ready\n *\n * @example\n * ```typescript\n * ready(() => {\n * console.log('DOM is ready!');\n * initApp();\n * setupEventListeners();\n * });\n *\n * // Or with arrow function\n * ready(() => $('#app').html('<h1>Loaded</h1>'));\n * ```\n */\nexport function ready(callback: () => void): void {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback);\n } else {\n callback();\n }\n}\n\n// ============================================================================\n// UTILITY FUNCTIONS\n// ============================================================================\n\n/**\n * Clone an element deeply\n */\nexport function clone(element: HTMLElement, deep = true): HTMLElement {\n return element.cloneNode(deep) as HTMLElement;\n}\n\n/**\n * Check if element matches selector\n */\nexport function matches(element: HTMLElement, selector: string): boolean {\n return element.matches(selector);\n}\n\n/**\n * Get or set custom data on element (uses WeakMap for non-serializable data)\n */\nconst dataStore = new WeakMap<HTMLElement, Record<string, unknown>>();\n\nexport function elementData<T = unknown>(element: HTMLElement, key: string, value?: T): T | undefined {\n if (value === undefined) {\n const store = dataStore.get(element);\n return store?.[key] as T | undefined;\n }\n\n let store = dataStore.get(element);\n if (!store) {\n store = {};\n dataStore.set(element, store);\n }\n store[key] = value;\n}\n\n/**\n * Serialize form data to object\n */\nexport function serializeForm(form: HTMLFormElement): Record<string, string> {\n const formData = new FormData(form);\n const data: Record<string, string> = {};\n formData.forEach((value, key) => {\n data[key] = value instanceof File ? value.name : value;\n });\n return data;\n}\n\n/**\n * Get all form values including nested objects\n */\ntype FormValue = FormDataEntryValue | FormDataEntryValue[];\nconst ARRAY_KEY = /^([^\\[]+)\\[([^\\]]*)\\]$/;\n\nexport function getFormValues(form: HTMLFormElement): Record<string, FormValue> {\n const formData = new FormData(form);\n const result: Record<string, FormValue> = {};\n\n formData.forEach((value, key) => {\n // Handle array notation like \"items[0]\"\n const arrayMatch = ARRAY_KEY.exec(key);\n if (arrayMatch) {\n const [, name, index] = arrayMatch;\n const existing = result[name];\n const list = Array.isArray(existing) ? existing : [];\n if (!Array.isArray(existing)) {\n result[name] = list;\n }\n if (index) {\n list[Number.parseInt(index, 10)] = value;\n } else {\n list.push(value);\n }\n return;\n }\n\n result[key] = value;\n });\n\n return result;\n}\n\n/**\n * Debounce function for performance\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout> | null = null;\n\n return function(this: ThisParameterType<T>, ...args: Parameters<T>) {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n}\n\n/**\n * Throttle function for performance\n */\nexport function throttle<T extends (...args: unknown[]) => unknown>(\n func: T,\n limit: number\n): (...args: Parameters<T>) => void {\n let inThrottle = false;\n\n return function(this: ThisParameterType<T>, ...args: Parameters<T>) {\n if (!inThrottle) {\n func.apply(this, args);\n inThrottle = true;\n setTimeout(() => {\n inThrottle = false;\n }, limit);\n }\n };\n}\n\n/**\n * Wait for an element to appear in DOM\n */\nexport function waitForElement(selector: string, timeout = 5000): Promise<HTMLElement> {\n return new Promise((resolve, reject) => {\n const element = document.querySelector(selector);\n if (element instanceof HTMLElement) {\n resolve(element);\n return;\n }\n\n const observer = new MutationObserver(() => {\n const observed = document.querySelector(selector);\n if (observed instanceof HTMLElement) {\n observer.disconnect();\n clearTimeout(timeoutId);\n resolve(observed);\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n\n const timeoutId = setTimeout(() => {\n observer.disconnect();\n reject(new Error(`Element \"${selector}\" not found within ${String(timeout)}ms`));\n }, timeout);\n });\n}\n\n/**\n * Execute callback when element becomes visible (intersection observer)\n */\nexport function onVisible(\n element: HTMLElement,\n callback: (entry: IntersectionObserverEntry) => void,\n options?: IntersectionObserverInit\n): () => void {\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n callback(entry);\n }\n });\n }, options);\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n}\n\n/**\n * Animate element with CSS transitions\n */\nexport function animate(\n element: HTMLElement,\n properties: Record<string, string>,\n duration = 300,\n easing = 'ease'\n): Promise<void> {\n return new Promise((resolve) => {\n const originalTransition = element.style.transition;\n element.style.transition = `all ${String(duration)}ms ${easing}`;\n\n Object.entries(properties).forEach(([prop, value]) => {\n element.style.setProperty(prop, value);\n });\n\n setTimeout(() => {\n element.style.transition = originalTransition;\n resolve();\n }, duration);\n });\n}\n\n/**\n * Fade in element\n */\nexport function fadeIn(element: HTMLElement, duration = 300): Promise<void> {\n element.style.opacity = '0';\n element.style.display = '';\n return animate(element, { opacity: '1' }, duration);\n}\n\n/**\n * Fade out element\n */\nexport function fadeOut(element: HTMLElement, duration = 300): Promise<void> {\n return animate(element, { opacity: '0' }, duration).then(() => {\n element.style.display = 'none';\n });\n}\n\n/**\n * Slide down (show) element\n */\nexport function slideDown(element: HTMLElement, duration = 300): Promise<void> {\n element.style.display = 'block';\n const height = element.scrollHeight;\n element.style.height = '0';\n element.style.overflow = 'hidden';\n return animate(element, { height: `${String(height)}px` }, duration).then(() => {\n element.style.height = '';\n element.style.overflow = '';\n });\n}\n\n/**\n * Slide up (hide) element\n */\nexport function slideUp(element: HTMLElement, duration = 300): Promise<void> {\n const height = element.scrollHeight;\n element.style.height = `${String(height)}px`;\n element.style.overflow = 'hidden';\n return animate(element, { height: '0' }, duration).then(() => {\n element.style.display = 'none';\n element.style.height = '';\n element.style.overflow = '';\n });\n}\n\n// ============================================================================\n// EXPORTS & API\n// ============================================================================\n\n/**\n * Complete DOM utilities API\n *\n * @example\n * ```typescript\n * // Named imports (recommended)\n * import { $, create, delegate } from '@app/lib/dom';\n *\n * // Default import\n * import DOM from '@app/lib/dom';\n * DOM.$('.button').addClass('active');\n * ```\n */\nconst DOMApi = {\n // Version\n version: '2.0.0',\n\n // Core selectors\n $,\n $$,\n $id,\n\n // Element creation\n create,\n fragment,\n\n // Event handling\n delegate,\n ready,\n\n // Utilities\n clone,\n matches,\n elementData,\n\n // Form helpers\n serializeForm,\n getFormValues,\n\n // Performance\n debounce,\n throttle,\n\n // Async utilities\n waitForElement,\n onVisible,\n\n // Animations\n animate,\n fadeIn,\n fadeOut,\n slideDown,\n slideUp,\n\n // Configuration\n setDebugMode,\n};\n\nexport default DOMApi;\n"]}