@kupola/kupola 1.2.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 (354) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/INTEGRATION.md +440 -0
  3. package/PROJECT_SUMMARY.md +312 -0
  4. package/README.md +286 -0
  5. package/SKILL.md +572 -0
  6. package/css/accessibility.css +119 -0
  7. package/css/animations.css +224 -0
  8. package/css/brand-themes.css +300 -0
  9. package/css/colors_and_type.css +441 -0
  10. package/css/components-ext.css +4165 -0
  11. package/css/components.css +1483 -0
  12. package/css/kupola.css +12 -0
  13. package/css/responsive.css +697 -0
  14. package/css/scaffold.css +145 -0
  15. package/css/states.css +316 -0
  16. package/css/theme-dark.css +296 -0
  17. package/css/theme-light.css +296 -0
  18. package/css/utilities.css +171 -0
  19. package/dist/css/kupola.css +12 -0
  20. package/dist/icons/icons/activity.svg +3 -0
  21. package/dist/icons/icons/alert-circle.svg +1 -0
  22. package/dist/icons/icons/alert-triangle.svg +1 -0
  23. package/dist/icons/icons/alert.d27e24.svg +1 -0
  24. package/dist/icons/icons/alert.svg +1 -0
  25. package/dist/icons/icons/apple.svg +1 -0
  26. package/dist/icons/icons/arrow-down.svg +1 -0
  27. package/dist/icons/icons/arrow-expand.svg +1 -0
  28. package/dist/icons/icons/arrow-left.svg +1 -0
  29. package/dist/icons/icons/arrow-minimize.svg +1 -0
  30. package/dist/icons/icons/arrow-right-to-line.svg +1 -0
  31. package/dist/icons/icons/arrow-right.svg +1 -0
  32. package/dist/icons/icons/arrow-up-right.svg +1 -0
  33. package/dist/icons/icons/arrow-up.0c0c0d.svg +1 -0
  34. package/dist/icons/icons/arrow-up.svg +1 -0
  35. package/dist/icons/icons/at.svg +1 -0
  36. package/dist/icons/icons/atom.0c0c0d.svg +1 -0
  37. package/dist/icons/icons/atom.svg +1 -0
  38. package/dist/icons/icons/bar-chart-2.svg +1 -0
  39. package/dist/icons/icons/bar.svg +1 -0
  40. package/dist/icons/icons/bell.svg +1 -0
  41. package/dist/icons/icons/box.svg +1 -0
  42. package/dist/icons/icons/bug.svg +1 -0
  43. package/dist/icons/icons/button.svg +1 -0
  44. package/dist/icons/icons/calendar.svg +1 -0
  45. package/dist/icons/icons/check-circle.33c192.svg +1 -0
  46. package/dist/icons/icons/check-circle.svg +1 -0
  47. package/dist/icons/icons/check-square.svg +4 -0
  48. package/dist/icons/icons/check.d1d3db.svg +1 -0
  49. package/dist/icons/icons/check.svg +1 -0
  50. package/dist/icons/icons/chevron-down.svg +1 -0
  51. package/dist/icons/icons/chevron-left.svg +1 -0
  52. package/dist/icons/icons/chevron-right.svg +1 -0
  53. package/dist/icons/icons/chevron-up.svg +1 -0
  54. package/dist/icons/icons/circle.svg +1 -0
  55. package/dist/icons/icons/clock.svg +1 -0
  56. package/dist/icons/icons/cmd.svg +1 -0
  57. package/dist/icons/icons/code.svg +1 -0
  58. package/dist/icons/icons/columns.svg +1 -0
  59. package/dist/icons/icons/copy.svg +1 -0
  60. package/dist/icons/icons/cpu.svg +1 -0
  61. package/dist/icons/icons/dashboard.0c0c0d.svg +1 -0
  62. package/dist/icons/icons/dashboard.svg +1 -0
  63. package/dist/icons/icons/dollar.svg +1 -0
  64. package/dist/icons/icons/download.svg +1 -0
  65. package/dist/icons/icons/edit.svg +1 -0
  66. package/dist/icons/icons/extensions.svg +1 -0
  67. package/dist/icons/icons/external.svg +1 -0
  68. package/dist/icons/icons/eye.svg +1 -0
  69. package/dist/icons/icons/file-text.svg +1 -0
  70. package/dist/icons/icons/file.svg +1 -0
  71. package/dist/icons/icons/files.svg +1 -0
  72. package/dist/icons/icons/filter.svg +1 -0
  73. package/dist/icons/icons/folder-open.svg +4 -0
  74. package/dist/icons/icons/folder.svg +1 -0
  75. package/dist/icons/icons/gear.svg +1 -0
  76. package/dist/icons/icons/git.svg +1 -0
  77. package/dist/icons/icons/github.svg +1 -0
  78. package/dist/icons/icons/globe.svg +1 -0
  79. package/dist/icons/icons/grid-2x2.svg +1 -0
  80. package/dist/icons/icons/hash.svg +1 -0
  81. package/dist/icons/icons/heart.svg +1 -0
  82. package/dist/icons/icons/help-circle.svg +5 -0
  83. package/dist/icons/icons/help.svg +1 -0
  84. package/dist/icons/icons/home.svg +1 -0
  85. package/dist/icons/icons/icons.svg +153 -0
  86. package/dist/icons/icons/image.svg +1 -0
  87. package/dist/icons/icons/info-circle.svg +1 -0
  88. package/dist/icons/icons/info-square.svg +1 -0
  89. package/dist/icons/icons/info.387bff.svg +1 -0
  90. package/dist/icons/icons/info.svg +1 -0
  91. package/dist/icons/icons/input.svg +1 -0
  92. package/dist/icons/icons/key.svg +1 -0
  93. package/dist/icons/icons/layers.svg +1 -0
  94. package/dist/icons/icons/layout-grid.svg +6 -0
  95. package/dist/icons/icons/layout.svg +1 -0
  96. package/dist/icons/icons/link.svg +1 -0
  97. package/dist/icons/icons/list.svg +1 -0
  98. package/dist/icons/icons/lock.svg +1 -0
  99. package/dist/icons/icons/log-out.svg +1 -0
  100. package/dist/icons/icons/logo.svg +1 -0
  101. package/dist/icons/icons/mail.svg +1 -0
  102. package/dist/icons/icons/menu.svg +1 -0
  103. package/dist/icons/icons/message-circle.svg +1 -0
  104. package/dist/icons/icons/message-plus.svg +1 -0
  105. package/dist/icons/icons/message-square.svg +1 -0
  106. package/dist/icons/icons/mic.svg +1 -0
  107. package/dist/icons/icons/minus.svg +1 -0
  108. package/dist/icons/icons/moon.svg +1 -0
  109. package/dist/icons/icons/more-h.svg +1 -0
  110. package/dist/icons/icons/mouse.svg +1 -0
  111. package/dist/icons/icons/palette.svg +1 -0
  112. package/dist/icons/icons/panel-bottom.svg +1 -0
  113. package/dist/icons/icons/pause.svg +1 -0
  114. package/dist/icons/icons/play.svg +1 -0
  115. package/dist/icons/icons/plug.svg +1 -0
  116. package/dist/icons/icons/plus.0c0c0d.svg +1 -0
  117. package/dist/icons/icons/plus.svg +1 -0
  118. package/dist/icons/icons/refresh.svg +1 -0
  119. package/dist/icons/icons/ruler.svg +1 -0
  120. package/dist/icons/icons/scroll-text.svg +1 -0
  121. package/dist/icons/icons/search-menu.svg +1 -0
  122. package/dist/icons/icons/search.svg +1 -0
  123. package/dist/icons/icons/send.0c0c0d.svg +1 -0
  124. package/dist/icons/icons/send.svg +1 -0
  125. package/dist/icons/icons/settings.0c0c0d.svg +1 -0
  126. package/dist/icons/icons/settings.svg +1 -0
  127. package/dist/icons/icons/shield.svg +1 -0
  128. package/dist/icons/icons/sidebar-left.svg +1 -0
  129. package/dist/icons/icons/sidebar-right.svg +1 -0
  130. package/dist/icons/icons/sliders.svg +1 -0
  131. package/dist/icons/icons/sparkles.32f08c.svg +1 -0
  132. package/dist/icons/icons/sparkles.svg +1 -0
  133. package/dist/icons/icons/square.svg +1 -0
  134. package/dist/icons/icons/star.svg +1 -0
  135. package/dist/icons/icons/sun.svg +1 -0
  136. package/dist/icons/icons/table.svg +1 -0
  137. package/dist/icons/icons/terminal.svg +1 -0
  138. package/dist/icons/icons/trash.svg +1 -0
  139. package/dist/icons/icons/trending-down.svg +1 -0
  140. package/dist/icons/icons/trending-up.svg +1 -0
  141. package/dist/icons/icons/type.svg +1 -0
  142. package/dist/icons/icons/upload.svg +1 -0
  143. package/dist/icons/icons/user-circle.svg +1 -0
  144. package/dist/icons/icons/user-plus.svg +6 -0
  145. package/dist/icons/icons/user.svg +1 -0
  146. package/dist/icons/icons/users.svg +1 -0
  147. package/dist/icons/icons/warning.svg +1 -0
  148. package/dist/icons/icons/wrench.svg +1 -0
  149. package/dist/icons/icons/x-circle.svg +1 -0
  150. package/dist/icons/icons/x.svg +1 -0
  151. package/dist/icons/icons/zap.0c0c0d.svg +1 -0
  152. package/dist/icons/icons/zap.svg +1 -0
  153. package/dist/kupola.cjs.js +258 -0
  154. package/dist/kupola.cjs.js.map +1 -0
  155. package/dist/kupola.esm.js +7640 -0
  156. package/dist/kupola.esm.js.map +1 -0
  157. package/dist/kupola.umd.js +258 -0
  158. package/dist/kupola.umd.js.map +1 -0
  159. package/dist/types/kupola.d.ts +1359 -0
  160. package/dist/utils/utils/Kupola.cs +77 -0
  161. package/dist/utils/utils/Kupola.java +104 -0
  162. package/dist/utils/utils/kupola.go +120 -0
  163. package/dist/utils/utils/kupola.js +63 -0
  164. package/dist/utils/utils/kupola.py +1392 -0
  165. package/dist/utils/utils/kupola.rb +69 -0
  166. package/icons/activity.svg +3 -0
  167. package/icons/alert-circle.svg +1 -0
  168. package/icons/alert-triangle.svg +1 -0
  169. package/icons/alert.d27e24.svg +1 -0
  170. package/icons/alert.svg +1 -0
  171. package/icons/apple.svg +1 -0
  172. package/icons/arrow-down.svg +1 -0
  173. package/icons/arrow-expand.svg +1 -0
  174. package/icons/arrow-left.svg +1 -0
  175. package/icons/arrow-minimize.svg +1 -0
  176. package/icons/arrow-right-to-line.svg +1 -0
  177. package/icons/arrow-right.svg +1 -0
  178. package/icons/arrow-up-right.svg +1 -0
  179. package/icons/arrow-up.0c0c0d.svg +1 -0
  180. package/icons/arrow-up.svg +1 -0
  181. package/icons/at.svg +1 -0
  182. package/icons/atom.0c0c0d.svg +1 -0
  183. package/icons/atom.svg +1 -0
  184. package/icons/bar-chart-2.svg +1 -0
  185. package/icons/bar.svg +1 -0
  186. package/icons/bell.svg +1 -0
  187. package/icons/box.svg +1 -0
  188. package/icons/bug.svg +1 -0
  189. package/icons/button.svg +1 -0
  190. package/icons/calendar.svg +1 -0
  191. package/icons/check-circle.33c192.svg +1 -0
  192. package/icons/check-circle.svg +1 -0
  193. package/icons/check-square.svg +4 -0
  194. package/icons/check.d1d3db.svg +1 -0
  195. package/icons/check.svg +1 -0
  196. package/icons/chevron-down.svg +1 -0
  197. package/icons/chevron-left.svg +1 -0
  198. package/icons/chevron-right.svg +1 -0
  199. package/icons/chevron-up.svg +1 -0
  200. package/icons/circle.svg +1 -0
  201. package/icons/clock.svg +1 -0
  202. package/icons/cmd.svg +1 -0
  203. package/icons/code.svg +1 -0
  204. package/icons/columns.svg +1 -0
  205. package/icons/copy.svg +1 -0
  206. package/icons/cpu.svg +1 -0
  207. package/icons/dashboard.0c0c0d.svg +1 -0
  208. package/icons/dashboard.svg +1 -0
  209. package/icons/dollar.svg +1 -0
  210. package/icons/download.svg +1 -0
  211. package/icons/edit.svg +1 -0
  212. package/icons/extensions.svg +1 -0
  213. package/icons/external.svg +1 -0
  214. package/icons/eye.svg +1 -0
  215. package/icons/file-text.svg +1 -0
  216. package/icons/file.svg +1 -0
  217. package/icons/files.svg +1 -0
  218. package/icons/filter.svg +1 -0
  219. package/icons/folder-open.svg +4 -0
  220. package/icons/folder.svg +1 -0
  221. package/icons/gear.svg +1 -0
  222. package/icons/git.svg +1 -0
  223. package/icons/github.svg +1 -0
  224. package/icons/globe.svg +1 -0
  225. package/icons/grid-2x2.svg +1 -0
  226. package/icons/hash.svg +1 -0
  227. package/icons/heart.svg +1 -0
  228. package/icons/help-circle.svg +5 -0
  229. package/icons/help.svg +1 -0
  230. package/icons/home.svg +1 -0
  231. package/icons/icons.svg +153 -0
  232. package/icons/image.svg +1 -0
  233. package/icons/info-circle.svg +1 -0
  234. package/icons/info-square.svg +1 -0
  235. package/icons/info.387bff.svg +1 -0
  236. package/icons/info.svg +1 -0
  237. package/icons/input.svg +1 -0
  238. package/icons/key.svg +1 -0
  239. package/icons/layers.svg +1 -0
  240. package/icons/layout-grid.svg +6 -0
  241. package/icons/layout.svg +1 -0
  242. package/icons/link.svg +1 -0
  243. package/icons/list.svg +1 -0
  244. package/icons/lock.svg +1 -0
  245. package/icons/log-out.svg +1 -0
  246. package/icons/logo.svg +1 -0
  247. package/icons/mail.svg +1 -0
  248. package/icons/menu.svg +1 -0
  249. package/icons/message-circle.svg +1 -0
  250. package/icons/message-plus.svg +1 -0
  251. package/icons/message-square.svg +1 -0
  252. package/icons/mic.svg +1 -0
  253. package/icons/minus.svg +1 -0
  254. package/icons/moon.svg +1 -0
  255. package/icons/more-h.svg +1 -0
  256. package/icons/mouse.svg +1 -0
  257. package/icons/palette.svg +1 -0
  258. package/icons/panel-bottom.svg +1 -0
  259. package/icons/pause.svg +1 -0
  260. package/icons/play.svg +1 -0
  261. package/icons/plug.svg +1 -0
  262. package/icons/plus.0c0c0d.svg +1 -0
  263. package/icons/plus.svg +1 -0
  264. package/icons/refresh.svg +1 -0
  265. package/icons/ruler.svg +1 -0
  266. package/icons/scroll-text.svg +1 -0
  267. package/icons/search-menu.svg +1 -0
  268. package/icons/search.svg +1 -0
  269. package/icons/send.0c0c0d.svg +1 -0
  270. package/icons/send.svg +1 -0
  271. package/icons/settings.0c0c0d.svg +1 -0
  272. package/icons/settings.svg +1 -0
  273. package/icons/shield.svg +1 -0
  274. package/icons/sidebar-left.svg +1 -0
  275. package/icons/sidebar-right.svg +1 -0
  276. package/icons/sliders.svg +1 -0
  277. package/icons/sparkles.32f08c.svg +1 -0
  278. package/icons/sparkles.svg +1 -0
  279. package/icons/square.svg +1 -0
  280. package/icons/star.svg +1 -0
  281. package/icons/sun.svg +1 -0
  282. package/icons/table.svg +1 -0
  283. package/icons/terminal.svg +1 -0
  284. package/icons/trash.svg +1 -0
  285. package/icons/trending-down.svg +1 -0
  286. package/icons/trending-up.svg +1 -0
  287. package/icons/type.svg +1 -0
  288. package/icons/upload.svg +1 -0
  289. package/icons/user-circle.svg +1 -0
  290. package/icons/user-plus.svg +6 -0
  291. package/icons/user.svg +1 -0
  292. package/icons/users.svg +1 -0
  293. package/icons/warning.svg +1 -0
  294. package/icons/wrench.svg +1 -0
  295. package/icons/x-circle.svg +1 -0
  296. package/icons/x.svg +1 -0
  297. package/icons/zap.0c0c0d.svg +1 -0
  298. package/icons/zap.svg +1 -0
  299. package/js/calendar.js +184 -0
  300. package/js/carousel.js +173 -0
  301. package/js/collapse.js +127 -0
  302. package/js/color-picker.js +144 -0
  303. package/js/component.js +276 -0
  304. package/js/composition-api.js +458 -0
  305. package/js/countdown.js +144 -0
  306. package/js/data-bind.js +1286 -0
  307. package/js/datepicker.js +270 -0
  308. package/js/dialog.js +131 -0
  309. package/js/drawer.js +118 -0
  310. package/js/dropdown.js +122 -0
  311. package/js/dynamic-tags.js +156 -0
  312. package/js/error-handler.js +181 -0
  313. package/js/fileupload.js +392 -0
  314. package/js/form.js +291 -0
  315. package/js/global-events.js +203 -0
  316. package/js/heatmap.js +405 -0
  317. package/js/http.js +419 -0
  318. package/js/i18n.js +228 -0
  319. package/js/icons.js +165 -0
  320. package/js/image-preview.js +218 -0
  321. package/js/initializer.js +162 -0
  322. package/js/kupola-core.js +66 -0
  323. package/js/kupola-devtools.js +598 -0
  324. package/js/kupola-lifecycle.js +510 -0
  325. package/js/message.js +60 -0
  326. package/js/modal.js +191 -0
  327. package/js/notification.js +73 -0
  328. package/js/numberinput.js +146 -0
  329. package/js/performance.js +250 -0
  330. package/js/registry.js +205 -0
  331. package/js/router.js +396 -0
  332. package/js/security.js +189 -0
  333. package/js/select.js +143 -0
  334. package/js/slide-captcha.js +504 -0
  335. package/js/slider.js +94 -0
  336. package/js/statcard.js +219 -0
  337. package/js/tag.js +83 -0
  338. package/js/test-utils.js +251 -0
  339. package/js/theme.js +363 -0
  340. package/js/timepicker.js +238 -0
  341. package/js/tooltip.js +122 -0
  342. package/js/utils.js +1458 -0
  343. package/js/validation.js +553 -0
  344. package/js/virtual-list.js +593 -0
  345. package/package.json +105 -0
  346. package/templates/base.html +30 -0
  347. package/templates/base_dashboard.html +99 -0
  348. package/types/kupola.d.ts +1359 -0
  349. package/utils/Kupola.cs +77 -0
  350. package/utils/Kupola.java +104 -0
  351. package/utils/kupola.go +120 -0
  352. package/utils/kupola.js +63 -0
  353. package/utils/kupola.py +1392 -0
  354. package/utils/kupola.rb +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kupola.esm.js","sources":["../js/component.js","../js/registry.js","../js/router.js","../js/http.js","../js/initializer.js","../js/kupola-core.js","../js/kupola-lifecycle.js","../js/utils.js","../js/data-bind.js","../js/theme.js","../js/dropdown.js","../js/select.js","../js/datepicker.js","../js/timepicker.js","../js/slider.js","../js/carousel.js","../js/drawer.js","../js/modal.js","../js/dialog.js","../js/fileupload.js","../js/collapse.js","../js/color-picker.js","../js/calendar.js","../js/dynamic-tags.js","../js/image-preview.js","../js/tag.js","../js/statcard.js","../js/heatmap.js","../js/tooltip.js","../js/validation.js","../js/virtual-list.js","../js/kupola-devtools.js","../js/icons.js","../js/countdown.js","../js/numberinput.js","../js/slide-captcha.js","../js/composition-api.js","../js/form.js","../js/test-utils.js","../js/i18n.js","../js/global-events.js","../js/security.js","../js/error-handler.js","../js/performance.js","../src/index.js"],"sourcesContent":["class KupolaComponent {\r\n constructor(element) {\r\n this.element = element;\r\n this.isMounted = false;\r\n this.isDestroyed = false;\r\n this.props = this._parseProps();\r\n this.state = {};\r\n this.slots = this._parseSlots();\r\n this._eventListeners = {};\r\n this._appliedMixins = [];\r\n this.lifecycle = window.KupolaLifecycle \r\n ? new window.KupolaLifecycle()\r\n : {\r\n on: () => () => {},\r\n emit: () => {},\r\n bootstrap: () => {},\r\n mount: () => {},\r\n update: () => {},\r\n unmount: () => {},\r\n destroy: () => {},\r\n state: 'created'\r\n };\r\n this.setupContext = null;\r\n }\r\n\r\n _parseProps() {\r\n const props = {};\r\n for (const attr of this.element.attributes) {\r\n if (attr.name.startsWith('data-prop-')) {\r\n const name = attr.name.replace('data-prop-', '');\r\n let value = attr.value;\r\n try {\r\n value = JSON.parse(value);\r\n } catch (e) {}\r\n props[name] = value;\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n _parseSlots() {\r\n const slots = {};\r\n const slotElements = this.element.querySelectorAll('[data-slot]');\r\n \r\n slotElements.forEach(slotEl => {\r\n const slotName = slotEl.getAttribute('data-slot') || 'default';\r\n slots[slotName] = slotEl.innerHTML.trim();\r\n slotEl.remove();\r\n });\r\n \r\n if (!slots.default && this.element.children.length > 0) {\r\n slots.default = this.element.innerHTML.trim();\r\n }\r\n \r\n return slots;\r\n }\r\n\r\n $slot(name = 'default') {\r\n return this.slots[name] || '';\r\n }\r\n\r\n $emit(eventName, data) {\r\n const handlers = this._eventListeners[eventName] || [];\r\n handlers.forEach(handler => {\r\n try {\r\n handler(data);\r\n } catch (e) {\r\n console.error(`Error in event handler for ${eventName}:`, e);\r\n }\r\n });\r\n \r\n if (this.element) {\r\n const customEvent = new CustomEvent(`kupola:${eventName}`, {\r\n detail: data,\r\n bubbles: true,\r\n cancelable: true\r\n });\r\n this.element.dispatchEvent(customEvent);\r\n }\r\n }\r\n\r\n $on(eventName, handler) {\r\n if (!this._eventListeners[eventName]) {\r\n this._eventListeners[eventName] = [];\r\n }\r\n this._eventListeners[eventName].push(handler);\r\n return handler;\r\n }\r\n\r\n $off(eventName, handler) {\r\n if (this._eventListeners[eventName]) {\r\n this._eventListeners[eventName] = this._eventListeners[eventName].filter(cb => cb !== handler);\r\n }\r\n }\r\n\r\n async setProps(newProps) {\r\n try {\r\n this.props = { ...this.props, ...newProps };\r\n await this.lifecycle.update();\r\n this.setupContext?._executeUpdated();\r\n } catch (error) {\r\n console.error(`[KupolaComponent] Error in setProps for \"${this.constructor.name}\":`, error);\r\n \r\n if (this.lifecycle && typeof this.lifecycle._handleError === 'function') {\r\n await this.lifecycle._handleError({ phase: 'update', hook: 'setProps', error, args: [newProps] });\r\n }\r\n }\r\n }\r\n\r\n async setState(newState) {\r\n try {\r\n this.state = { ...this.state, ...newState };\r\n await this.lifecycle.update();\r\n this.setupContext?._executeUpdated();\r\n } catch (error) {\r\n console.error(`[KupolaComponent] Error in setState for \"${this.constructor.name}\":`, error);\r\n \r\n if (this.lifecycle && typeof this.lifecycle._handleError === 'function') {\r\n await this.lifecycle._handleError({ phase: 'update', hook: 'setState', error, args: [newState] });\r\n }\r\n }\r\n }\r\n\r\n async mount() {\r\n if (this.isMounted || this.isDestroyed) return;\r\n\r\n try {\r\n this._bindLifecycleHooks();\r\n\r\n await this.lifecycle.bootstrap();\r\n\r\n if (window._setCurrentSetupContext && window.SetupContext) {\r\n this.setupContext = new window.SetupContext(this);\r\n window._setCurrentSetupContext(this.setupContext);\r\n \r\n if (typeof this.setup === 'function') {\r\n const result = this.setup();\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n }\r\n }\r\n\r\n this.isMounted = true;\r\n await this.lifecycle.mount();\r\n\r\n this.setupContext?._executeMounted();\r\n \r\n if (window._clearSetupContext) {\r\n window._clearSetupContext();\r\n }\r\n } catch (error) {\r\n console.error(`[KupolaComponent] Error mounting component \"${this.constructor.name}\":`, error);\r\n \r\n if (this.lifecycle && typeof this.lifecycle._handleError === 'function') {\r\n await this.lifecycle._handleError({ phase: 'mount', hook: 'component', error, args: [] });\r\n }\r\n \r\n if (typeof this.renderError === 'function') {\r\n try {\r\n this.renderError(error);\r\n } catch (e) {\r\n console.error(`[KupolaComponent] Error in renderError for \"${this.constructor.name}\":`, e);\r\n }\r\n } else {\r\n this.element.innerHTML = `\r\n <div style=\"padding: 16px; background: #fee2e2; border: 1px solid #fecaca; border-radius: 8px; color: #991b1b;\">\r\n <div style=\"font-weight: bold; margin-bottom: 8px;\">Component Error</div>\r\n <div style=\"font-size: 12px; white-space: pre-wrap;\">${error.message}</div>\r\n </div>\r\n `;\r\n }\r\n }\r\n }\r\n\r\n _bindLifecycleHooks() {\r\n if (this._hooksBound) return;\r\n \r\n const hookMap = {\r\n beforeMount: 'beforeMount',\r\n render: ['mount', 'update'],\r\n afterMount: 'afterMount',\r\n updated: 'afterUpdate',\r\n beforeUnmount: 'beforeUnmount',\r\n afterUnmount: 'afterUnmount',\r\n renderError: 'errorBoundary'\r\n };\r\n \r\n let proto = Object.getPrototypeOf(this);\r\n const registeredHooks = new Set();\r\n \r\n while (proto && proto.constructor !== Object && proto.constructor !== KupolaComponent) {\r\n for (const [methodName, lifecyclePhase] of Object.entries(hookMap)) {\r\n if (registeredHooks.has(methodName)) continue;\r\n \r\n if (proto.hasOwnProperty(methodName)) {\r\n if (Array.isArray(lifecyclePhase)) {\r\n lifecyclePhase.forEach(phase => {\r\n if (methodName === 'render') {\r\n this.lifecycle.on(phase, () => this.render?.());\r\n }\r\n });\r\n } else if (methodName === 'renderError') {\r\n this.lifecycle.on(lifecyclePhase, (errorInfo) => {\r\n this.renderError(errorInfo.error);\r\n return 'handled';\r\n });\r\n } else {\r\n this.lifecycle.on(lifecyclePhase, () => this[methodName]?.());\r\n }\r\n registeredHooks.add(methodName);\r\n }\r\n }\r\n proto = Object.getPrototypeOf(proto);\r\n }\r\n \r\n this._hooksBound = true;\r\n }\r\n\r\n async unmount() {\r\n if (!this.isMounted || this.isDestroyed) return;\r\n\r\n try {\r\n this.setupContext?._executeUnmounted();\r\n \r\n await this.lifecycle.unmount();\r\n this.isMounted = false;\r\n this.isDestroyed = true;\r\n await this.lifecycle.destroy();\r\n } catch (error) {\r\n console.error(`[KupolaComponent] Error unmounting component \"${this.constructor.name}\":`, error);\r\n \r\n if (this.lifecycle && typeof this.lifecycle._handleError === 'function') {\r\n await this.lifecycle._handleError({ phase: 'unmount', hook: 'component', error, args: [] });\r\n }\r\n \r\n this.isMounted = false;\r\n this.isDestroyed = true;\r\n }\r\n }\r\n\r\n beforeMount() {}\r\n afterMount() {}\r\n beforeUnmount() {}\r\n afterUnmount() {}\r\n render() {}\r\n renderError(error) {}\r\n updated() {}\r\n setup() {}\r\n}\r\n\r\nfunction applyMixin(componentClass, mixin) {\r\n Object.keys(mixin).forEach(key => {\r\n if (key === 'constructor') return;\r\n if (typeof mixin[key] === 'function') {\r\n const original = componentClass.prototype[key];\r\n if (original) {\r\n componentClass.prototype[key] = function(...args) {\r\n mixin[key].apply(this, args);\r\n return original.apply(this, args);\r\n };\r\n } else {\r\n componentClass.prototype[key] = mixin[key];\r\n }\r\n } else {\r\n componentClass.prototype[key] = mixin[key];\r\n }\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { KupolaComponent, applyMixin };\r\n} else {\r\n window.KupolaComponent = KupolaComponent;\r\n window.applyMixin = applyMixin;\r\n}","class KupolaComponentRegistry {\r\n constructor() {\r\n this.components = new Map();\r\n this.lazyComponents = new Map();\r\n this.loadedComponents = new Map();\r\n this.instances = new Map();\r\n this.observer = null;\r\n this.mixins = new Map();\r\n this.loadingPromises = new Map();\r\n }\r\n\r\n register(name, componentClass) {\r\n if (!(componentClass.prototype instanceof window.KupolaComponent)) {\r\n throw new Error(`Component ${name} must extend KupolaComponent`);\r\n }\r\n this.components.set(name, componentClass);\r\n }\r\n\r\n registerLazy(name, loader) {\r\n this.lazyComponents.set(name, loader);\r\n }\r\n\r\n unregister(name) {\r\n this.components.delete(name);\r\n this.lazyComponents.delete(name);\r\n this.loadedComponents.delete(name);\r\n this.loadingPromises.delete(name);\r\n }\r\n\r\n get(name) {\r\n return this.components.get(name) || this.loadedComponents.get(name);\r\n }\r\n\r\n async getAsync(name) {\r\n const cached = this.components.get(name) || this.loadedComponents.get(name);\r\n if (cached) return cached;\r\n\r\n if (this.loadingPromises.has(name)) {\r\n return this.loadingPromises.get(name);\r\n }\r\n\r\n const loader = this.lazyComponents.get(name);\r\n if (!loader) {\r\n throw new Error(`Component ${name} not found`);\r\n }\r\n\r\n const loadingPromise = (async () => {\r\n try {\r\n const result = await loader();\r\n const componentClass = result.default || result;\r\n if (!(componentClass.prototype instanceof window.KupolaComponent)) {\r\n throw new Error(`Component ${name} must extend KupolaComponent`);\r\n }\r\n this.loadedComponents.set(name, componentClass);\r\n return componentClass;\r\n } catch (e) {\r\n this.loadingPromises.delete(name);\r\n throw e;\r\n }\r\n })();\r\n\r\n this.loadingPromises.set(name, loadingPromise);\r\n return loadingPromise;\r\n }\r\n\r\n defineMixin(name, mixin) {\r\n this.mixins.set(name, mixin);\r\n }\r\n\r\n useMixin(componentClass, ...mixinNames) {\r\n mixinNames.forEach(name => {\r\n const mixin = this.mixins.get(name);\r\n if (mixin && window.applyMixin) {\r\n window.applyMixin(componentClass, mixin);\r\n }\r\n });\r\n }\r\n\r\n async bootstrap(root = document) {\r\n await this._upgradeElements(root);\r\n this._startObserver(root);\r\n }\r\n\r\n async _upgradeElements(root) {\r\n const elements = root.querySelectorAll('[data-component]');\r\n const promises = [];\r\n elements.forEach(element => {\r\n promises.push(this._upgradeElement(element));\r\n });\r\n await Promise.all(promises);\r\n }\r\n\r\n async _upgradeElement(element) {\r\n if (element.__kupolaInstance || element.__kupolaUpgrading) return;\r\n \r\n element.__kupolaUpgrading = true;\r\n \r\n try {\r\n const componentName = element.getAttribute('data-component');\r\n \r\n if (window.kupolaInitializer && componentName) {\r\n const initializer = window.kupolaInitializer.get(componentName);\r\n if (initializer) {\r\n try {\r\n await initializer(element);\r\n return;\r\n } catch (e) {\r\n console.warn(`[KupolaComponentRegistry] Initializer for \"${componentName}\" failed, trying component class:`, e);\r\n }\r\n }\r\n }\r\n \r\n let ComponentClass = this.components.get(componentName);\r\n \r\n if (!ComponentClass) {\r\n try {\r\n ComponentClass = await this.getAsync(componentName);\r\n } catch (e) {\r\n console.error(`Failed to load component ${componentName}:`, e);\r\n return;\r\n }\r\n \r\n if (!element.isConnected) {\r\n return;\r\n }\r\n }\r\n \r\n const mixinNames = element.getAttribute('data-mixins');\r\n const componentClass = ComponentClass;\r\n if (mixinNames && window.applyMixin) {\r\n mixinNames.split(',').forEach(name => {\r\n const mixin = this.mixins.get(name.trim());\r\n if (mixin) {\r\n window.applyMixin(componentClass, mixin);\r\n }\r\n });\r\n }\r\n \r\n const instance = new componentClass(element);\r\n element.__kupolaInstance = instance;\r\n this.instances.set(element, instance);\r\n instance.mount();\r\n } finally {\r\n element.__kupolaUpgrading = false;\r\n }\r\n }\r\n\r\n _startObserver(root) {\r\n if (this.observer) return;\r\n \r\n this.observer = new MutationObserver((mutations) => {\r\n mutations.forEach(mutation => {\r\n mutation.addedNodes.forEach(node => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n if (node.hasAttribute('data-component')) {\r\n this._upgradeElement(node).catch(e => console.error(e));\r\n }\r\n this._upgradeElements(node).catch(e => console.error(e));\r\n }\r\n });\r\n \r\n mutation.removedNodes.forEach(node => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const instance = this.instances.get(node);\r\n if (instance) {\r\n instance.unmount();\r\n this.instances.delete(node);\r\n }\r\n node.querySelectorAll('[data-component]').forEach(child => {\r\n const childInstance = this.instances.get(child);\r\n if (childInstance) {\r\n childInstance.unmount();\r\n this.instances.delete(child);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n });\r\n\r\n this.observer.observe(root, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n\r\n destroy() {\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n this.instances.forEach(instance => {\r\n instance.unmount();\r\n });\r\n this.instances.clear();\r\n this.components.clear();\r\n this.mixins.clear();\r\n }\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { KupolaComponentRegistry };\r\n} else {\r\n window.KupolaComponentRegistry = KupolaComponentRegistry;\r\n}","class KupolaRouter {\r\n constructor(options = {}) {\r\n this.mode = options.mode || 'hash';\r\n this.routes = options.routes || [];\r\n this.base = options.base || '';\r\n this.currentRoute = null;\r\n this.beforeEachHandlers = [];\r\n this.afterEachHandlers = [];\r\n this.isStarted = false;\r\n this.animationClass = 'fade';\r\n this.componentCache = new Map();\r\n this._routeHandler = () => this._handleRoute();\r\n \r\n this._setupRoutes();\r\n this._bindEvents();\r\n }\r\n\r\n _setupRoutes() {\r\n this.routeMap = new Map();\r\n this._registerRoutes(this.routes, '');\r\n }\r\n\r\n _registerRoutes(routes, parentPath) {\r\n routes.forEach(route => {\r\n const fullPath = route.path.startsWith('/') \r\n ? route.path \r\n : parentPath + (parentPath && !route.path.startsWith('/') ? '/' : '') + route.path;\r\n const pathRegex = this._pathToRegex(fullPath);\r\n this.routeMap.set(fullPath, { ...route, regex: pathRegex, parentPath });\r\n \r\n if (route.children && route.children.length > 0) {\r\n this._registerRoutes(route.children, fullPath);\r\n }\r\n });\r\n }\r\n\r\n _pathToRegex(path) {\r\n const regexStr = path\r\n .replace(/:(\\w+)/g, '([^/]+)')\r\n .replace(/\\*/g, '.*');\r\n return new RegExp(`^${regexStr}$`);\r\n }\r\n\r\n _bindEvents() {\r\n if (this.mode === 'hash') {\r\n window.addEventListener('hashchange', this._routeHandler);\r\n } else {\r\n window.addEventListener('popstate', this._routeHandler);\r\n }\r\n }\r\n\r\n _handleRoute() {\r\n const path = this._getCurrentPath();\r\n this.navigate(path);\r\n }\r\n\r\n _getCurrentPath() {\r\n if (this.mode === 'hash') {\r\n return location.hash.slice(1) || '/';\r\n }\r\n return location.pathname.replace(this.base, '') || '/';\r\n }\r\n\r\n async navigate(path, replace = false) {\r\n const route = this._matchRoute(path);\r\n if (!route) return;\r\n\r\n const from = this.currentRoute;\r\n \r\n for (const handler of this.beforeEachHandlers) {\r\n const result = await handler(route, from);\r\n if (result === false) return;\r\n }\r\n\r\n this.currentRoute = route;\r\n this._updateURL(path, replace);\r\n await this._renderRoute(route);\r\n\r\n for (const handler of this.afterEachHandlers) {\r\n handler(route);\r\n }\r\n }\r\n\r\n _matchRoute(path) {\r\n for (const [, route] of this.routeMap) {\r\n const match = path.match(route.regex);\r\n if (match) {\r\n const params = {};\r\n const paramNames = route.path.match(/:(\\w+)/g) || [];\r\n paramNames.forEach((name, index) => {\r\n params[name.slice(1)] = match[index + 1];\r\n });\r\n \r\n const query = this._parseQuery();\r\n \r\n return {\r\n ...route,\r\n params,\r\n query,\r\n fullPath: path\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _parseQuery() {\r\n const search = location.search.slice(1);\r\n const params = {};\r\n if (search) {\r\n search.split('&').forEach(pair => {\r\n const [key, value] = pair.split('=');\r\n params[key] = decodeURIComponent(value || '');\r\n });\r\n }\r\n return params;\r\n }\r\n\r\n _updateURL(path, replace) {\r\n if (this.mode === 'hash') {\r\n const url = `#${path}`;\r\n if (replace) {\r\n location.replace(url);\r\n } else {\r\n location.hash = path;\r\n }\r\n } else {\r\n const url = this.base + path + location.search;\r\n if (replace) {\r\n history.replaceState({}, '', url);\r\n } else {\r\n history.pushState({}, '', url);\r\n }\r\n }\r\n }\r\n\r\n async _renderRoute(route) {\r\n if (route.parentPath && route.parentPath !== '') {\r\n await this._renderNestedRoute(route);\r\n } else {\r\n await this._renderRootRoute(route);\r\n }\r\n }\r\n\r\n async _renderRootRoute(route) {\r\n const container = document.querySelector('[data-router-view]');\r\n if (!container || !route.component) return;\r\n \r\n this._cleanupContainerComponents(container);\r\n \r\n container.classList.add('router-view-leave');\r\n container.classList.remove('router-view-enter');\r\n \r\n await this._waitForAnimation(container);\r\n \r\n const componentName = await this._resolveComponent(route.component);\r\n if (!componentName) return;\r\n \r\n const componentElement = document.createElement('div');\r\n componentElement.setAttribute('data-component', componentName);\r\n componentElement.classList.add('router-view-enter');\r\n \r\n Object.keys(route.params).forEach(key => {\r\n componentElement.setAttribute(`data-prop-${key}`, route.params[key]);\r\n });\r\n \r\n container.innerHTML = '';\r\n container.appendChild(componentElement);\r\n \r\n if (window.kupolaRegistry) {\r\n await window.kupolaRegistry.bootstrap(container);\r\n }\r\n \r\n setTimeout(() => {\r\n container.classList.remove('router-view-leave');\r\n componentElement.classList.remove('router-view-enter');\r\n }, 10);\r\n }\r\n\r\n async _renderNestedRoute(route) {\r\n const parentRoute = this.routeMap.get(route.parentPath);\r\n if (!parentRoute) return;\r\n \r\n const rootContainer = document.querySelector('[data-router-view]');\r\n if (!rootContainer) return;\r\n \r\n const existingParent = document.querySelector(`[data-component=\"${parentRoute.component}\"]`);\r\n \r\n if (!existingParent) {\r\n this._cleanupContainerComponents(rootContainer);\r\n \r\n rootContainer.classList.add('router-view-leave');\r\n rootContainer.classList.remove('router-view-enter');\r\n \r\n await this._waitForAnimation(rootContainer);\r\n \r\n const parentName = await this._resolveComponent(parentRoute.component);\r\n if (!parentName) return;\r\n \r\n const parentElement = document.createElement('div');\r\n parentElement.setAttribute('data-component', parentName);\r\n \r\n rootContainer.innerHTML = '';\r\n rootContainer.appendChild(parentElement);\r\n \r\n if (window.kupolaRegistry) {\r\n await window.kupolaRegistry.bootstrap(rootContainer);\r\n }\r\n \r\n setTimeout(() => {\r\n rootContainer.classList.remove('router-view-leave');\r\n }, 50);\r\n \r\n await this._renderChildComponent(route);\r\n } else {\r\n await this._renderChildComponent(route);\r\n }\r\n }\r\n\r\n async _renderChildComponent(route) {\r\n const parentElement = document.querySelector(`[data-component=\"${this._getParentComponent(route.parentPath)}\"]`);\r\n if (!parentElement) return;\r\n \r\n const container = parentElement.querySelector('[data-router-view]');\r\n if (!container || !route.component) return;\r\n \r\n const componentName = await this._resolveComponent(route.component);\r\n if (!componentName) return;\r\n \r\n const componentElement = document.createElement('div');\r\n componentElement.setAttribute('data-component', componentName);\r\n componentElement.classList.add('router-view-enter');\r\n \r\n Object.keys(route.params).forEach(key => {\r\n componentElement.setAttribute(`data-prop-${key}`, route.params[key]);\r\n });\r\n \r\n container.innerHTML = '';\r\n container.appendChild(componentElement);\r\n \r\n if (window.kupolaRegistry) {\r\n await window.kupolaRegistry.bootstrap(container);\r\n }\r\n \r\n setTimeout(() => {\r\n componentElement.classList.remove('router-view-enter');\r\n }, 10);\r\n }\r\n\r\n async _resolveComponent(component) {\r\n if (typeof component === 'function') {\r\n const cacheKey = component.toString();\r\n if (this.componentCache.has(cacheKey)) {\r\n return this.componentCache.get(cacheKey);\r\n }\r\n \r\n try {\r\n const result = await component();\r\n const componentClass = result.default || result;\r\n \r\n const componentName = `lazy-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n if (window.kupolaRegistry) {\r\n window.kupolaRegistry.register(componentName, componentClass);\r\n }\r\n \r\n this.componentCache.set(cacheKey, componentName);\r\n return componentName;\r\n } catch (e) {\r\n console.error('Failed to load lazy component:', e);\r\n return null;\r\n }\r\n }\r\n \r\n if (typeof component === 'string' && component.startsWith('lazy:')) {\r\n const componentName = component.slice(5);\r\n if (window.kupolaRegistry) {\r\n try {\r\n await window.kupolaRegistry.getAsync(componentName);\r\n } catch (e) {\r\n console.error(`Failed to load lazy component ${componentName}:`, e);\r\n return null;\r\n }\r\n }\r\n return componentName;\r\n }\r\n \r\n return component;\r\n }\r\n\r\n _getParentComponent(parentPath) {\r\n for (const [path, route] of this.routeMap) {\r\n if (path === parentPath) {\r\n return route.component;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n setAnimation(name) {\r\n this.animationClass = name;\r\n }\r\n\r\n push(path) {\r\n this.navigate(path, false);\r\n }\r\n\r\n replace(path) {\r\n this.navigate(path, true);\r\n }\r\n\r\n go(delta) {\r\n history.go(delta);\r\n }\r\n\r\n back() {\r\n history.back();\r\n }\r\n\r\n forward() {\r\n history.forward();\r\n }\r\n\r\n beforeEach(handler) {\r\n this.beforeEachHandlers.push(handler);\r\n }\r\n\r\n afterEach(handler) {\r\n this.afterEachHandlers.push(handler);\r\n }\r\n\r\n _waitForAnimation(element) {\r\n return new Promise(resolve => {\r\n const transitionDuration = this._getTransitionDuration(element);\r\n if (transitionDuration > 0) {\r\n const cleanup = () => {\r\n element.removeEventListener('transitionend', cleanup);\r\n element.removeEventListener('animationend', cleanup);\r\n resolve();\r\n };\r\n element.addEventListener('transitionend', cleanup);\r\n element.addEventListener('animationend', cleanup);\r\n setTimeout(cleanup, transitionDuration + 100);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n _getTransitionDuration(element) {\r\n const style = window.getComputedStyle(element);\r\n const transitionDuration = parseFloat(style.transitionDuration) || 0;\r\n const animationDuration = parseFloat(style.animationDuration) || 0;\r\n return Math.max(transitionDuration, animationDuration) * 1000;\r\n }\r\n\r\n _cleanupContainerComponents(container) {\r\n const components = container.querySelectorAll('[data-component]');\r\n components.forEach(element => {\r\n const instance = element.__kupolaInstance;\r\n if (instance && typeof instance.unmount === 'function') {\r\n instance.unmount().catch(e => console.error(`Error unmounting component:`, e));\r\n }\r\n });\r\n \r\n if (window.kupolaInitializer) {\r\n const allElements = container.querySelectorAll('[data-component], [data-dropdown], [data-select], [data-datepicker], [data-timepicker], [data-slider], [data-carousel], [data-drawer], [data-modal], [data-dialog], [data-color-picker], [data-calendar], [data-slide-captcha], [data-heatmap]');\r\n allElements.forEach(element => {\r\n window.kupolaInitializer.cleanup(element);\r\n });\r\n }\r\n }\r\n\r\n destroy() {\r\n if (this.mode === 'hash') {\r\n window.removeEventListener('hashchange', this._routeHandler);\r\n } else {\r\n window.removeEventListener('popstate', this._routeHandler);\r\n }\r\n this.routes = [];\r\n this.routeMap.clear();\r\n this.beforeEachHandlers = [];\r\n this.afterEachHandlers = [];\r\n }\r\n}\r\n\r\nfunction createRouter(options) {\r\n return new KupolaRouter(options);\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { KupolaRouter, createRouter };\r\n} else {\r\n window.KupolaRouter = KupolaRouter;\r\n window.createRouter = createRouter;\r\n}","class KupolaHttp {\r\n constructor(options = {}) {\r\n this.baseURL = options.baseURL || '';\r\n this.timeout = options.timeout || 30000;\r\n this.headers = options.headers || {};\r\n this.cache = new Map();\r\n this.cacheTTL = options.cacheTTL || 60000;\r\n this.maxRetries = options.maxRetries || 0;\r\n this.retryDelay = options.retryDelay || 1000;\r\n this.activeRequests = new Map();\r\n this.withCredentials = options.withCredentials || false;\r\n\r\n this._useAxios = typeof axios !== 'undefined';\r\n if (this._useAxios) {\r\n this._initAxios(options);\r\n }\r\n \r\n if (options.interceptors) {\r\n this.interceptors = options.interceptors;\r\n }\r\n }\r\n\r\n _initAxios(options) {\r\n this.axios = axios.create({\r\n baseURL: this.baseURL,\r\n timeout: this.timeout,\r\n headers: this.headers\r\n });\r\n \r\n this.axios.defaults.withCredentials = options.withCredentials || false;\r\n }\r\n\r\n _generateCacheKey(config) {\r\n const { url, method = 'GET', params = {}, data = null } = config;\r\n const query = params ? new URLSearchParams(params).toString() : '';\r\n const dataKey = data ? JSON.stringify(data) : '';\r\n return `${method}:${url}:${query}:${dataKey}`;\r\n }\r\n\r\n _getCache(key) {\r\n const cached = this.cache.get(key);\r\n if (cached && Date.now() - cached.timestamp < this.cacheTTL) {\r\n return cached.data;\r\n }\r\n this.cache.delete(key);\r\n return null;\r\n }\r\n\r\n _setCache(key, data) {\r\n this.cache.set(key, { data, timestamp: Date.now() });\r\n }\r\n\r\n async _requestWithRetry(config, retryCount = 0) {\r\n try {\r\n return await this._request(config);\r\n } catch (error) {\r\n if (retryCount < this.maxRetries) {\r\n await new Promise(resolve => setTimeout(resolve, this.retryDelay * Math.pow(2, retryCount)));\r\n return this._requestWithRetry(config, retryCount + 1);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async _request(config) {\r\n const { \r\n url, \r\n method = 'GET', \r\n headers = {}, \r\n params = {}, \r\n data = null, \r\n timeout = this.timeout,\r\n cache = false\r\n } = config;\r\n\r\n const cacheKey = this._generateCacheKey({ url, method, params, data });\r\n \r\n if (cache && method === 'GET') {\r\n const cached = this._getCache(cacheKey);\r\n if (cached) {\r\n return cached;\r\n }\r\n }\r\n\r\n const controller = new AbortController();\r\n this.activeRequests.set(cacheKey, controller);\r\n\r\n const requestHeaders = { ...this.headers, ...headers };\r\n \r\n if (!requestHeaders['Content-Type'] && data && !(data instanceof FormData)) {\r\n requestHeaders['Content-Type'] = 'application/json';\r\n }\r\n\r\n let requestConfig = {\r\n url: this.baseURL ? new URL(url, this.baseURL).toString() : url,\r\n method,\r\n headers: requestHeaders,\r\n signal: controller.signal,\r\n credentials: this.withCredentials ? 'include' : 'same-origin'\r\n };\r\n\r\n if (Object.keys(params).length > 0) {\r\n const urlObj = new URL(requestConfig.url);\r\n Object.keys(params).forEach(key => {\r\n urlObj.searchParams.append(key, params[key]);\r\n });\r\n requestConfig.url = urlObj.toString();\r\n }\r\n\r\n if (data !== null) {\r\n requestConfig.body = data instanceof FormData ? data : JSON.stringify(data);\r\n }\r\n\r\n if (this.interceptors && this.interceptors.request) {\r\n try {\r\n const intercepted = await this.interceptors.request(requestConfig);\r\n if (intercepted) requestConfig = intercepted;\r\n } catch (error) {\r\n this.activeRequests.delete(cacheKey);\r\n if (this.interceptors.requestError) {\r\n return this.interceptors.requestError(error);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n try {\r\n let response;\r\n if (this._useAxios) {\r\n const axiosConfig = {\r\n url: requestConfig.url.replace(this.baseURL, ''),\r\n method: requestConfig.method,\r\n headers: requestConfig.headers,\r\n signal: requestConfig.signal,\r\n timeout\r\n };\r\n if (data !== null) axiosConfig.data = data;\r\n if (params && Object.keys(params).length > 0) axiosConfig.params = params;\r\n \r\n response = await this.axios(axiosConfig);\r\n } else {\r\n response = await this._fetchWithTimeout(requestConfig, timeout);\r\n \r\n if (!response.ok) {\r\n const error = new Error(`HTTP error! status: ${response.status}`);\r\n error.status = response.status;\r\n error.statusText = response.statusText;\r\n throw error;\r\n }\r\n }\r\n \r\n const result = {\r\n data: this._useAxios ? response.data : await this._parseResponse(response),\r\n status: this._useAxios ? response.status : response.status,\r\n statusText: this._useAxios ? response.statusText : response.statusText,\r\n headers: this._useAxios ? response.headers : this._parseHeaders(response.headers),\r\n config: requestConfig\r\n };\r\n \r\n if (this.interceptors && this.interceptors.response) {\r\n return this.interceptors.response(result);\r\n }\r\n \r\n if (cache && method === 'GET') {\r\n this._setCache(cacheKey, result);\r\n }\r\n \r\n return result;\r\n } catch (error) {\r\n if (error.name === 'AbortError' || (this._useAxios && error.code === 'ERR_CANCELED')) {\r\n return null;\r\n }\r\n if (this.interceptors && this.interceptors.responseError) {\r\n return this.interceptors.responseError(error);\r\n }\r\n throw error;\r\n } finally {\r\n this.activeRequests.delete(cacheKey);\r\n }\r\n }\r\n\r\n async _fetchWithTimeout(config, timeout) {\r\n const controller = new AbortController();\r\n const signal = controller.signal;\r\n \r\n const timeoutPromise = new Promise((_, reject) => {\r\n const timerId = setTimeout(() => {\r\n controller.abort();\r\n reject(new Error('Request timeout'));\r\n }, timeout);\r\n \r\n signal.addEventListener('abort', () => {\r\n clearTimeout(timerId);\r\n });\r\n });\r\n \r\n const fetchPromise = fetch({ ...config, signal });\r\n \r\n return Promise.race([fetchPromise, timeoutPromise]);\r\n }\r\n\r\n async _parseResponse(response) {\r\n const contentType = response.headers.get('content-type');\r\n if (contentType && contentType.includes('application/json')) {\r\n return response.json();\r\n }\r\n return response.text();\r\n }\r\n\r\n _parseHeaders(headers) {\r\n const result = {};\r\n headers.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n }\r\n\r\n cancelRequest(url, params = {}, method = 'GET', data = null) {\r\n const cacheKey = this._generateCacheKey({ url, method, params, data });\r\n if (this.activeRequests.has(cacheKey)) {\r\n this.activeRequests.get(cacheKey).abort();\r\n this.activeRequests.delete(cacheKey);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n cancelAllRequests() {\r\n this.activeRequests.forEach((controller) => {\r\n controller.abort();\r\n });\r\n this.activeRequests.clear();\r\n }\r\n\r\n clearCache() {\r\n this.cache.clear();\r\n }\r\n\r\n clearCacheByUrl(url) {\r\n this.cache.forEach((_, key) => {\r\n if (key.startsWith(`GET:${url}`)) {\r\n this.cache.delete(key);\r\n }\r\n });\r\n }\r\n\r\n get(url, config = {}) {\r\n const useCache = config.cache ?? true;\r\n const useRetry = config.retry ?? this.maxRetries > 0;\r\n \r\n const requestConfig = { ...config, url, method: 'GET', cache: useCache };\r\n \r\n if (useRetry) {\r\n return this._requestWithRetry(requestConfig);\r\n }\r\n return this._request(requestConfig);\r\n }\r\n\r\n post(url, data = null, config = {}) {\r\n const useRetry = config.retry ?? this.maxRetries > 0;\r\n const requestConfig = { ...config, url, method: 'POST', data, cache: false };\r\n \r\n if (useRetry) {\r\n return this._requestWithRetry(requestConfig);\r\n }\r\n return this._request(requestConfig);\r\n }\r\n\r\n async uploadFile(url, file, options = {}) {\r\n const {\r\n chunkSize = 2 * 1024 * 1024,\r\n onProgress,\r\n headers = {},\r\n parallel = false\r\n } = options;\r\n\r\n const totalChunks = Math.ceil(file.size / chunkSize);\r\n let uploadedChunks = 0;\r\n let progress = 0;\r\n\r\n const fileId = this._generateFileId(file);\r\n\r\n if (parallel) {\r\n const promises = [];\r\n for (let i = 0; i < totalChunks; i++) {\r\n const promise = this._uploadChunk(url, file, i, totalChunks, chunkSize, fileId, headers)\r\n .then(() => {\r\n uploadedChunks++;\r\n progress = Math.round((uploadedChunks / totalChunks) * 100);\r\n \r\n if (onProgress) {\r\n onProgress({\r\n progress,\r\n uploaded: uploadedChunks * chunkSize,\r\n total: file.size,\r\n currentChunk: uploadedChunks,\r\n totalChunks\r\n });\r\n }\r\n });\r\n promises.push(promise);\r\n }\r\n await Promise.all(promises);\r\n return this._completeUpload(url, fileId, totalChunks, file.name);\r\n }\r\n\r\n for (let i = 0; i < totalChunks; i++) {\r\n await this._uploadChunk(url, file, i, totalChunks, chunkSize, fileId, headers);\r\n \r\n uploadedChunks++;\r\n progress = Math.round((uploadedChunks / totalChunks) * 100);\r\n \r\n if (onProgress) {\r\n onProgress({\r\n progress,\r\n uploaded: uploadedChunks * chunkSize,\r\n total: file.size,\r\n currentChunk: i + 1,\r\n totalChunks\r\n });\r\n }\r\n }\r\n\r\n return this._completeUpload(url, fileId, totalChunks, file.name);\r\n }\r\n\r\n async _uploadChunk(url, file, chunkIndex, totalChunks, chunkSize, fileId, headers) {\r\n const start = chunkIndex * chunkSize;\r\n const end = Math.min(start + chunkSize, file.size);\r\n const chunk = file.slice(start, end);\r\n\r\n const formData = new FormData();\r\n formData.append('chunk', chunk);\r\n formData.append('chunkIndex', chunkIndex);\r\n formData.append('totalChunks', totalChunks);\r\n formData.append('fileId', fileId);\r\n formData.append('fileName', file.name);\r\n formData.append('fileSize', file.size);\r\n\r\n return this.post(`${url}/chunk`, formData, { headers });\r\n }\r\n\r\n async _completeUpload(url, fileId, totalChunks, fileName) {\r\n return this.post(`${url}/complete`, { fileId, totalChunks, fileName });\r\n }\r\n\r\n _generateFileId(file) {\r\n const hash = `${file.name}-${file.size}-${file.lastModified}`;\r\n let result = 0;\r\n for (let i = 0; i < hash.length; i++) {\r\n result = ((result << 5) - result) + hash.charCodeAt(i);\r\n result |= 0;\r\n }\r\n return Math.abs(result).toString(36) + Date.now().toString(36);\r\n }\r\n\r\n put(url, data = null, config = {}) {\r\n const useRetry = config.retry ?? this.maxRetries > 0;\r\n const requestConfig = { ...config, url, method: 'PUT', data, cache: false };\r\n \r\n if (useRetry) {\r\n return this._requestWithRetry(requestConfig);\r\n }\r\n return this._request(requestConfig);\r\n }\r\n\r\n delete(url, config = {}) {\r\n const useRetry = config.retry ?? this.maxRetries > 0;\r\n const requestConfig = { ...config, url, method: 'DELETE', cache: false };\r\n \r\n if (useRetry) {\r\n return this._requestWithRetry(requestConfig);\r\n }\r\n return this._request(requestConfig);\r\n }\r\n\r\n patch(url, data = null, config = {}) {\r\n const useRetry = config.retry ?? this.maxRetries > 0;\r\n const requestConfig = { ...config, url, method: 'PATCH', data, cache: false };\r\n \r\n if (useRetry) {\r\n return this._requestWithRetry(requestConfig);\r\n }\r\n return this._request(requestConfig);\r\n }\r\n\r\n setHeader(name, value) {\r\n this.headers[name] = value;\r\n if (this.axios) {\r\n this.axios.defaults.headers.common[name] = value;\r\n }\r\n }\r\n\r\n setToken(token, type = 'Bearer') {\r\n this.headers['Authorization'] = `${type} ${token}`;\r\n if (this.axios) {\r\n this.axios.defaults.headers.common['Authorization'] = `${type} ${token}`;\r\n }\r\n }\r\n\r\n setCacheTTL(ttl) {\r\n this.cacheTTL = ttl;\r\n }\r\n\r\n setMaxRetries(retries) {\r\n this.maxRetries = retries;\r\n }\r\n}\r\n\r\nfunction createHttp(options) {\r\n return new KupolaHttp(options);\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { KupolaHttp, createHttp };\r\n} else {\r\n window.KupolaHttp = KupolaHttp;\r\n window.createHttp = createHttp;\r\n}","class ComponentInitializerRegistry {\r\n constructor() {\r\n this.initializers = new Map();\r\n this.cleanupFunctions = new Map();\r\n this.processedElements = new WeakSet();\r\n }\r\n\r\n register(name, initFn, cleanupFn = null) {\r\n this.initializers.set(name, initFn);\r\n if (cleanupFn) {\r\n this.cleanupFunctions.set(name, cleanupFn);\r\n }\r\n }\r\n\r\n unregister(name) {\r\n this.initializers.delete(name);\r\n this.cleanupFunctions.delete(name);\r\n }\r\n\r\n has(name) {\r\n return this.initializers.has(name);\r\n }\r\n\r\n get(name) {\r\n return this.initializers.get(name);\r\n }\r\n\r\n async initialize(element) {\r\n if (this.processedElements.has(element)) return;\r\n\r\n const dataAttrs = ['data-component', 'data-dropdown', 'data-select', 'data-datepicker', \r\n 'data-timepicker', 'data-slider', 'data-carousel', 'data-drawer', \r\n 'data-modal', 'data-dialog', 'data-color-picker', 'data-calendar',\r\n 'data-slide-captcha', 'data-heatmap'];\r\n\r\n for (const attr of dataAttrs) {\r\n const value = element.getAttribute(attr);\r\n if (value) {\r\n const name = value || attr.replace('data-', '');\r\n const initFn = this.initializers.get(name) || this.initializers.get(attr.replace('data-', ''));\r\n \r\n if (initFn) {\r\n try {\r\n await initFn(element);\r\n this.processedElements.add(element);\r\n } catch (error) {\r\n console.error(`[ComponentInitializerRegistry] Error initializing \"${name}\":`, error);\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const className = element.className;\r\n const classSelectors = [\r\n '.ds-dropdown', '.ds-select', '.ds-datepicker', '.ds-timepicker', \r\n '.ds-slider', '.ds-carousel', '.ds-drawer', '.ds-modal', '.ds-dialog',\r\n '.ds-color-picker', '.ds-calendar', '.ds-slider-captcha', '.ds-heatmap',\r\n '.ds-tooltip', '.ds-tag', '.ds-statcard', '.ds-collapse', '.ds-fileupload',\r\n '.ds-notification', '.ds-message'\r\n ];\r\n\r\n for (const selector of classSelectors) {\r\n const classNamePart = selector.replace('.', '');\r\n if (className.includes(classNamePart)) {\r\n const name = classNamePart.replace('ds-', '');\r\n const initFn = this.initializers.get(name) || this.initializers.get(classNamePart);\r\n \r\n if (initFn) {\r\n try {\r\n await initFn(element);\r\n this.processedElements.add(element);\r\n } catch (error) {\r\n console.error(`[ComponentInitializerRegistry] Error initializing \"${name}\":`, error);\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n cleanup(element) {\r\n const dataAttrs = ['data-component', 'data-dropdown', 'data-select', 'data-datepicker', \r\n 'data-timepicker', 'data-slider', 'data-carousel', 'data-drawer', \r\n 'data-modal', 'data-dialog', 'data-color-picker', 'data-calendar',\r\n 'data-slide-captcha', 'data-heatmap'];\r\n\r\n for (const attr of dataAttrs) {\r\n const value = element.getAttribute(attr);\r\n if (value) {\r\n const name = value || attr.replace('data-', '');\r\n const cleanupFn = this.cleanupFunctions.get(name) || this.cleanupFunctions.get(attr.replace('data-', ''));\r\n \r\n if (cleanupFn) {\r\n try {\r\n cleanupFn(element);\r\n } catch (error) {\r\n console.error(`[ComponentInitializerRegistry] Error cleaning up \"${name}\":`, error);\r\n }\r\n this.processedElements.delete(element);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const className = element.className;\r\n const classSelectors = [\r\n '.ds-dropdown', '.ds-select', '.ds-datepicker', '.ds-timepicker', \r\n '.ds-slider', '.ds-carousel', '.ds-drawer', '.ds-modal', '.ds-dialog',\r\n '.ds-color-picker', '.ds-calendar', '.ds-slider-captcha', '.ds-heatmap',\r\n '.ds-tooltip', '.ds-tag', '.ds-statcard', '.ds-collapse', '.ds-fileupload',\r\n '.ds-notification', '.ds-message'\r\n ];\r\n\r\n for (const selector of classSelectors) {\r\n const classNamePart = selector.replace('.', '');\r\n if (className.includes(classNamePart)) {\r\n const name = classNamePart.replace('ds-', '');\r\n const cleanupFn = this.cleanupFunctions.get(name) || this.cleanupFunctions.get(classNamePart);\r\n \r\n if (cleanupFn) {\r\n try {\r\n cleanupFn(element);\r\n } catch (error) {\r\n console.error(`[ComponentInitializerRegistry] Error cleaning up \"${name}\":`, error);\r\n }\r\n this.processedElements.delete(element);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n async initializeAll(root = document) {\r\n const elements = root.querySelectorAll('[data-component], [data-dropdown], [data-select], ' +\r\n '[data-datepicker], [data-timepicker], [data-slider], [data-carousel], ' +\r\n '[data-drawer], [data-modal], [data-dialog], [data-color-picker], ' +\r\n '[data-calendar], [data-slide-captcha], [data-heatmap], ' +\r\n '.ds-dropdown, .ds-select, .ds-datepicker, .ds-timepicker, ' +\r\n '.ds-slider, .ds-carousel, .ds-drawer, .ds-modal, .ds-dialog, ' +\r\n '.ds-color-picker, .ds-calendar, .ds-slider-captcha, .ds-heatmap, ' +\r\n '.ds-tooltip, .ds-tag, .ds-statcard, .ds-collapse, .ds-fileupload, ' +\r\n '.ds-notification, .ds-message');\r\n\r\n const promises = [];\r\n elements.forEach(element => {\r\n if (!this.processedElements.has(element)) {\r\n promises.push(this.initialize(element));\r\n }\r\n });\r\n await Promise.all(promises);\r\n }\r\n}\r\n\r\nconst kupolaInitializer = new ComponentInitializerRegistry();\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { ComponentInitializerRegistry, kupolaInitializer };\r\n} else {\r\n window.ComponentInitializerRegistry = ComponentInitializerRegistry;\r\n window.kupolaInitializer = kupolaInitializer;\r\n}","if (typeof window === 'undefined') {\r\n const { KupolaComponent, applyMixin } = require('./component.js');\r\n const { KupolaComponentRegistry } = require('./registry.js');\r\n const { KupolaRouter, createRouter } = require('./router.js');\r\n const { KupolaHttp, createHttp } = require('./http.js');\r\n \r\n module.exports = {\r\n KupolaComponent,\r\n applyMixin,\r\n KupolaComponentRegistry,\r\n KupolaRouter,\r\n KupolaHttp,\r\n createRouter,\r\n createHttp\r\n };\r\n}\r\n\r\nif (window.KupolaComponentRegistry) {\r\n window.kupolaRegistry = new window.KupolaComponentRegistry();\r\n}\r\n\r\nasync function kupolaBootstrap() {\r\n if (window.kupolaData) {\r\n window.kupolaData.loadPersisted();\r\n }\r\n if (window.kupolaRegistry) {\r\n await window.kupolaRegistry.bootstrap();\r\n }\r\n}\r\n\r\nif (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', kupolaBootstrap);\r\n} else {\r\n setTimeout(kupolaBootstrap, 0);\r\n}\r\n\r\nwindow.registerComponent = function(name, componentClass) {\r\n if (window.kupolaRegistry) {\r\n window.kupolaRegistry.register(name, componentClass);\r\n }\r\n};\r\n\r\nwindow.registerLazyComponent = function(name, loader) {\r\n if (window.kupolaRegistry) {\r\n window.kupolaRegistry.registerLazy(name, loader);\r\n }\r\n};\r\n\r\nwindow.bootstrapComponents = function(root) {\r\n if (window.kupolaRegistry) {\r\n return window.kupolaRegistry.bootstrap(root);\r\n }\r\n return Promise.resolve();\r\n};\r\n\r\nwindow.defineMixin = function(name, mixin) {\r\n if (window.kupolaRegistry) {\r\n window.kupolaRegistry.defineMixin(name, mixin);\r\n }\r\n};\r\n\r\nwindow.useMixin = function(componentClass, ...mixinNames) {\r\n if (window.kupolaRegistry) {\r\n window.kupolaRegistry.useMixin(componentClass, ...mixinNames);\r\n }\r\n};","class KupolaLifecycle {\r\n constructor(scope = 'app') {\r\n this.scope = scope;\r\n this.hooks = new Map();\r\n this.state = 'created';\r\n this.stateHistory = ['created'];\r\n this.transitions = new Map([\r\n ['created', ['bootstrapped', 'destroyed']],\r\n ['bootstrapped', ['mounted', 'destroyed']],\r\n ['mounted', ['updated', 'unmounted', 'destroyed']],\r\n ['updated', ['updated', 'unmounted', 'destroyed']],\r\n ['unmounted', ['mounted', 'destroyed']],\r\n ['destroyed', []]\r\n ]);\r\n \r\n this.phaseStateMap = {\r\n 'bootstrap': { from: 'created', to: 'bootstrapped' },\r\n 'mount': { from: ['bootstrapped', 'unmounted'], to: 'mounted' },\r\n 'update': { from: ['mounted', 'updated'], to: 'updated' },\r\n 'unmount': { from: ['mounted', 'updated'], to: 'unmounted' },\r\n 'destroy': { from: ['bootstrapped', 'mounted', 'updated', 'unmounted'], to: 'destroyed' }\r\n };\r\n\r\n this.basePhases = ['bootstrap', 'mount', 'update', 'unmount', 'destroy'];\r\n this.allPhases = ['error', 'errorBoundary'];\r\n \r\n this.basePhases.forEach(phase => {\r\n this.allPhases.push(`before${phase.charAt(0).toUpperCase() + phase.slice(1)}`);\r\n this.allPhases.push(phase);\r\n this.allPhases.push(`after${phase.charAt(0).toUpperCase() + phase.slice(1)}`);\r\n });\r\n \r\n this.allPhases.forEach(phase => {\r\n this.hooks.set(phase, []);\r\n });\r\n \r\n this.pendingHooks = new Set();\r\n this.trace = [];\r\n this.errorHandler = null;\r\n this.errorBoundary = null;\r\n this.lastError = null;\r\n this.errorCount = 0;\r\n this.maxErrors = 10;\r\n this._onErrorCallback = null;\r\n }\r\n\r\n _validateTransition(nextState) {\r\n const allowed = this.transitions.get(this.state);\r\n if (!allowed || !allowed.includes(nextState)) {\r\n throw new Error(`Invalid state transition: ${this.state} -> ${nextState}`);\r\n }\r\n return true;\r\n }\r\n\r\n _updateState(nextState) {\r\n this._validateTransition(nextState);\r\n this.state = nextState;\r\n this.stateHistory.push(nextState);\r\n }\r\n\r\n _resetResolved(phase) {\r\n const handlers = this.hooks.get(phase);\r\n if (handlers) {\r\n handlers.forEach(hook => {\r\n hook.resolved = false;\r\n });\r\n }\r\n }\r\n\r\n on(phase, handler, options = {}) {\r\n if (!this.allPhases.includes(phase)) {\r\n throw new Error(`Unknown lifecycle phase: ${phase}`);\r\n }\r\n \r\n const hooks = this.hooks.get(phase);\r\n hooks.push({\r\n handler,\r\n priority: options.priority || 0,\r\n depends: options.depends || [],\r\n name: options.name || handler.name || `anonymous_${hooks.length}`\r\n });\r\n \r\n hooks.sort((a, b) => b.priority - a.priority);\r\n \r\n return () => {\r\n const index = hooks.findIndex(h => h.handler === handler);\r\n if (index > -1) {\r\n hooks.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n async _resolveDepends(depends, phase) {\r\n if (!depends || depends.length === 0) return;\r\n \r\n for (const depName of depends) {\r\n const phaseHooks = this.hooks.get(phase);\r\n const depHook = phaseHooks.find(h => h.name === depName);\r\n if (depHook && !depHook.resolved) {\r\n await depHook.handler();\r\n depHook.resolved = true;\r\n }\r\n }\r\n }\r\n\r\n async emit(phase, ...args) {\r\n if (this.state === 'destroyed' && phase !== 'error') return;\r\n \r\n const handlers = this.hooks.get(phase);\r\n if (!handlers || handlers.length === 0) return;\r\n\r\n const emitId = `${phase}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n this.pendingHooks.add(emitId);\r\n\r\n const startTime = performance.now();\r\n \r\n try {\r\n for (const hook of handlers) {\r\n await this._resolveDepends(hook.depends, phase);\r\n \r\n const hookStartTime = performance.now();\r\n let hookResult, hookError;\r\n \r\n try {\r\n hookResult = hook.handler(...args);\r\n if (hookResult instanceof Promise) {\r\n await hookResult;\r\n }\r\n hook.resolved = true;\r\n } catch (error) {\r\n hookError = error;\r\n console.error(`[KupolaLifecycle] Error in ${phase} hook \"${hook.name}\":`, error);\r\n \r\n if (phase !== 'error') {\r\n await this._handleError({ phase, hook: hook.name, error, args });\r\n }\r\n }\r\n \r\n const hookDuration = performance.now() - hookStartTime;\r\n \r\n this.trace.push({\r\n emitId,\r\n phase,\r\n hookName: hook.name,\r\n duration: hookDuration,\r\n status: hookError ? 'error' : 'success',\r\n error: hookError ? hookError.message : null,\r\n timestamp: Date.now()\r\n });\r\n }\r\n \r\n const totalDuration = performance.now() - startTime;\r\n console.debug(`[KupolaLifecycle] ${phase} completed in ${totalDuration.toFixed(2)}ms (${this.scope})`);\r\n } finally {\r\n this.pendingHooks.delete(emitId);\r\n }\r\n }\r\n\r\n async runPhase(phase, ...args) {\r\n if (!this.basePhases.includes(phase)) {\r\n throw new Error(`Unknown base phase: ${phase}`);\r\n }\r\n\r\n const stateMap = this.phaseStateMap[phase];\r\n if (stateMap) {\r\n if (Array.isArray(stateMap.from)) {\r\n if (!stateMap.from.includes(this.state)) {\r\n throw new Error(`Cannot ${phase} from state ${this.state}, expected one of: ${stateMap.from.join(', ')}`);\r\n }\r\n } else {\r\n if (this.state !== stateMap.from) {\r\n throw new Error(`Cannot ${phase} from state ${this.state}, expected ${stateMap.from}`);\r\n }\r\n }\r\n }\r\n\r\n const beforePhase = `before${phase.charAt(0).toUpperCase() + phase.slice(1)}`;\r\n const afterPhase = `after${phase.charAt(0).toUpperCase() + phase.slice(1)}`;\r\n \r\n this._resetResolved(beforePhase);\r\n this._resetResolved(phase);\r\n this._resetResolved(afterPhase);\r\n\r\n if (this.allPhases.includes(beforePhase)) {\r\n await this.emit(beforePhase, ...args);\r\n }\r\n\r\n await this.emit(phase, ...args);\r\n\r\n if (stateMap) {\r\n this._updateState(stateMap.to);\r\n }\r\n\r\n if (this.allPhases.includes(afterPhase)) {\r\n await this.emit(afterPhase, ...args);\r\n }\r\n }\r\n\r\n async bootstrap(...args) {\r\n await this.runPhase('bootstrap', ...args);\r\n }\r\n\r\n async _waitForDOMReady() {\r\n return new Promise((resolve) => {\r\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\r\n resolve();\r\n return;\r\n }\r\n \r\n const onReady = () => {\r\n document.removeEventListener('DOMContentLoaded', onReady);\r\n window.removeEventListener('load', onReady);\r\n resolve();\r\n };\r\n \r\n document.addEventListener('DOMContentLoaded', onReady);\r\n window.addEventListener('load', onReady);\r\n });\r\n }\r\n\r\n async mount(...args) {\r\n await this.runPhase('mount', ...args);\r\n }\r\n\r\n async mountWithDOMReady(...args) {\r\n await this._waitForDOMReady();\r\n await this.runPhase('mount', ...args);\r\n }\r\n\r\n async update(...args) {\r\n await this.runPhase('update', ...args);\r\n }\r\n\r\n async unmount(...args) {\r\n await this.runPhase('unmount', ...args);\r\n }\r\n\r\n async destroy(...args) {\r\n await this.runPhase('destroy', ...args);\r\n \r\n this.hooks.forEach(handlers => {\r\n handlers.length = 0;\r\n });\r\n }\r\n\r\n getPhaseHandlers(phase) {\r\n return this.hooks.get(phase) || [];\r\n }\r\n\r\n hasHandlers(phase) {\r\n const handlers = this.hooks.get(phase);\r\n return handlers && handlers.length > 0;\r\n }\r\n\r\n getTrace() {\r\n return [...this.trace];\r\n }\r\n\r\n clearTrace() {\r\n this.trace = [];\r\n }\r\n\r\n getState() {\r\n return this.state;\r\n }\r\n\r\n getStateHistory() {\r\n return [...this.stateHistory];\r\n }\r\n\r\n isInState(targetState) {\r\n return this.state === targetState;\r\n }\r\n\r\n onError(handler) {\r\n this._onErrorCallback = handler;\r\n return this.on('error', handler);\r\n }\r\n\r\n setErrorBoundary(boundary) {\r\n this.errorBoundary = boundary;\r\n return this.on('errorBoundary', (errorInfo) => {\r\n if (typeof boundary === 'function') {\r\n return boundary(errorInfo);\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n setMaxErrors(max) {\r\n this.maxErrors = max;\r\n }\r\n\r\n getErrorCount() {\r\n return this.errorCount;\r\n }\r\n\r\n getLastError() {\r\n return this.lastError;\r\n }\r\n\r\n resetErrorCount() {\r\n this.errorCount = 0;\r\n this.lastError = null;\r\n }\r\n\r\n async _handleError(errorInfo) {\r\n this.errorCount++;\r\n this.lastError = errorInfo.error;\r\n\r\n if (this.errorCount >= this.maxErrors) {\r\n console.error(`[KupolaLifecycle] Error limit reached (${this.maxErrors}), stopping error handling`);\r\n return;\r\n }\r\n\r\n await this.emit('error', errorInfo);\r\n\r\n if (typeof this._onErrorCallback === 'function') {\r\n try {\r\n await this._onErrorCallback(errorInfo);\r\n } catch (e) {\r\n console.error('[KupolaLifecycle] Error in onError callback:', e);\r\n }\r\n }\r\n\r\n const boundaryHandlers = this.hooks.get('errorBoundary');\r\n if (boundaryHandlers && boundaryHandlers.length > 0) {\r\n for (const hook of boundaryHandlers) {\r\n try {\r\n const result = hook.handler(errorInfo);\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n if (result === 'handled') {\r\n console.debug(`[KupolaLifecycle] Error handled by errorBoundary hook \"${hook.name}\"`);\r\n return;\r\n }\r\n } catch (e) {\r\n console.error(`[KupolaLifecycle] Error in errorBoundary hook \"${hook.name}\":`, e);\r\n }\r\n }\r\n }\r\n\r\n console.error(`[KupolaLifecycle] Unhandled error in ${errorInfo.phase}:`, errorInfo.error);\r\n }\r\n}\r\n\r\nclass KupolaPluginManager {\r\n constructor() {\r\n this.plugins = new Map();\r\n this.enabledPlugins = new Set();\r\n this.pluginHooks = new Map();\r\n }\r\n\r\n register(name, plugin) {\r\n if (this.plugins.has(name)) {\r\n console.warn(`Plugin ${name} already registered, overriding`);\r\n }\r\n \r\n this.plugins.set(name, {\r\n ...plugin,\r\n name,\r\n enabled: false,\r\n instance: null,\r\n lifecycle: new KupolaLifecycle(`plugin:${name}`)\r\n });\r\n }\r\n\r\n async enable(name) {\r\n const plugin = this.plugins.get(name);\r\n if (!plugin) {\r\n throw new Error(`Plugin ${name} not found`);\r\n }\r\n \r\n if (plugin.enabled) return;\r\n \r\n try {\r\n await plugin.lifecycle.bootstrap();\r\n \r\n if (plugin.install) {\r\n plugin.instance = await plugin.install();\r\n }\r\n plugin.enabled = true;\r\n this.enabledPlugins.add(name);\r\n \r\n await plugin.lifecycle.mount();\r\n \r\n if (plugin.hooks) {\r\n this._registerPluginHooks(name, plugin.hooks);\r\n }\r\n \r\n console.log(`Plugin ${name} enabled`);\r\n } catch (error) {\r\n console.error(`Failed to enable plugin ${name}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n async disable(name) {\r\n const plugin = this.plugins.get(name);\r\n if (!plugin || !plugin.enabled) return;\r\n \r\n try {\r\n await plugin.lifecycle.unmount();\r\n \r\n if (plugin.uninstall) {\r\n await plugin.uninstall(plugin.instance);\r\n }\r\n \r\n if (plugin.hooks) {\r\n this._unregisterPluginHooks(name);\r\n }\r\n \r\n plugin.enabled = false;\r\n this.enabledPlugins.delete(name);\r\n plugin.instance = null;\r\n \r\n await plugin.lifecycle.destroy();\r\n \r\n console.log(`Plugin ${name} disabled`);\r\n } catch (error) {\r\n console.error(`Failed to disable plugin ${name}:`, error);\r\n throw error;\r\n }\r\n }\r\n\r\n get(name) {\r\n const plugin = this.plugins.get(name);\r\n return plugin?.instance || null;\r\n }\r\n\r\n getAll() {\r\n const result = {};\r\n this.plugins.forEach((plugin, name) => {\r\n result[name] = {\r\n name: plugin.name,\r\n enabled: plugin.enabled,\r\n instance: plugin.instance,\r\n state: plugin.lifecycle.getState()\r\n };\r\n });\r\n return result;\r\n }\r\n\r\n getEnabled() {\r\n const result = {};\r\n this.enabledPlugins.forEach(name => {\r\n const plugin = this.plugins.get(name);\r\n if (plugin) {\r\n result[name] = plugin.instance;\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n async enableAll() {\r\n const promises = [];\r\n this.plugins.forEach((_, name) => {\r\n promises.push(this.enable(name));\r\n });\r\n await Promise.all(promises);\r\n }\r\n\r\n async disableAll() {\r\n const promises = [];\r\n this.enabledPlugins.forEach(name => {\r\n promises.push(this.disable(name));\r\n });\r\n await Promise.all(promises);\r\n }\r\n\r\n _registerPluginHooks(pluginName, hooks) {\r\n if (!this.pluginHooks.has(pluginName)) {\r\n this.pluginHooks.set(pluginName, []);\r\n }\r\n \r\n const pluginHooks = this.pluginHooks.get(pluginName);\r\n \r\n Object.keys(hooks).forEach(phase => {\r\n const unsubscribe = window.kupolaLifecycle?.on(phase, hooks[phase], { name: `${pluginName}:${phase}` });\r\n if (unsubscribe) {\r\n pluginHooks.push({ phase, unsubscribe });\r\n }\r\n });\r\n }\r\n\r\n _unregisterPluginHooks(pluginName) {\r\n const pluginHooks = this.pluginHooks.get(pluginName);\r\n if (!pluginHooks) return;\r\n \r\n pluginHooks.forEach(({ unsubscribe }) => {\r\n if (unsubscribe) unsubscribe();\r\n });\r\n \r\n this.pluginHooks.delete(pluginName);\r\n }\r\n}\r\n\r\nconst kupolaLifecycle = new KupolaLifecycle('app');\r\nconst kupolaPluginManager = new KupolaPluginManager();\r\n\r\nfunction createLifecycle(scope = 'app') {\r\n return new KupolaLifecycle(scope);\r\n}\r\n\r\nwindow.KupolaLifecycle = KupolaLifecycle;\r\nwindow.KupolaPluginManager = KupolaPluginManager;\r\nwindow.kupolaLifecycle = kupolaLifecycle;\r\nwindow.kupolaPluginManager = kupolaPluginManager;\r\nwindow.createLifecycle = createLifecycle;","const KupolaUtils = {\r\n string: {\r\n trim(str) {\r\n return str ? str.trim() : '';\r\n },\r\n trimLeft(str) {\r\n return str ? str.replace(/^\\s+/, '') : '';\r\n },\r\n trimRight(str) {\r\n return str ? str.replace(/\\s+$/, '') : '';\r\n },\r\n toUpperCase(str) {\r\n return str ? str.toUpperCase() : '';\r\n },\r\n toLowerCase(str) {\r\n return str ? str.toLowerCase() : '';\r\n },\r\n capitalize(str) {\r\n if (!str) return '';\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n },\r\n camelize(str) {\r\n if (!str) return '';\r\n return str.replace(/-(\\w)/g, (_, c) => c ? c.toUpperCase() : '');\r\n },\r\n hyphenate(str) {\r\n if (!str) return '';\r\n return str.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, '');\r\n },\r\n padStart(str, length, padChar = ' ') {\r\n return (String(str) || '').padStart(length, padChar);\r\n },\r\n padEnd(str, length, padChar = ' ') {\r\n return (String(str) || '').padEnd(length, padChar);\r\n },\r\n truncate(str, maxLength, suffix = '...') {\r\n if (!str || str.length <= maxLength) return str || '';\r\n return str.slice(0, maxLength) + suffix;\r\n },\r\n replaceAll(str, search, replacement) {\r\n if (!str) return '';\r\n return str.split(search).join(replacement);\r\n },\r\n format(template, data) {\r\n if (!template) return '';\r\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => data[key] !== undefined ? data[key] : `{{${key}}}`);\r\n },\r\n startsWith(str, prefix) {\r\n return (str || '').startsWith(prefix);\r\n },\r\n endsWith(str, suffix) {\r\n return (str || '').endsWith(suffix);\r\n },\r\n includes(str, search) {\r\n return (str || '').includes(search);\r\n },\r\n repeat(str, times) {\r\n return (str || '').repeat(times);\r\n },\r\n reverse(str) {\r\n return (str || '').split('').reverse().join('');\r\n },\r\n countOccurrences(str, search) {\r\n if (!str || !search) return 0;\r\n return str.split(search).length - 1;\r\n },\r\n escapeHtml(str) {\r\n if (!str) return '';\r\n const div = document.createElement('div');\r\n div.textContent = str;\r\n return div.innerHTML;\r\n },\r\n unescapeHtml(str) {\r\n if (!str) return '';\r\n const div = document.createElement('div');\r\n div.innerHTML = str;\r\n return div.textContent;\r\n },\r\n generateRandom(length = 8) {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let result = '';\r\n for (let i = 0; i < length; i++) {\r\n result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n return result;\r\n },\r\n generateUUID() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n },\r\n\r\n array: {\r\n isArray(arr) {\r\n return Array.isArray(arr);\r\n },\r\n isEmpty(arr) {\r\n return !arr || arr.length === 0;\r\n },\r\n size(arr) {\r\n return arr ? arr.length : 0;\r\n },\r\n first(arr, defaultValue) {\r\n return arr && arr.length > 0 ? arr[0] : defaultValue;\r\n },\r\n last(arr, defaultValue) {\r\n return arr && arr.length > 0 ? arr[arr.length - 1] : defaultValue;\r\n },\r\n get(arr, index, defaultValue) {\r\n return arr && arr[index] !== undefined ? arr[index] : defaultValue;\r\n },\r\n slice(arr, start, end) {\r\n return arr ? arr.slice(start, end) : [];\r\n },\r\n concat(...args) {\r\n return args.reduce((result, arg) => result.concat(arg || []), []);\r\n },\r\n join(arr, separator = ',') {\r\n return arr ? arr.join(separator) : '';\r\n },\r\n indexOf(arr, item, fromIndex = 0) {\r\n return arr ? arr.indexOf(item, fromIndex) : -1;\r\n },\r\n lastIndexOf(arr, item, fromIndex) {\r\n return arr ? arr.lastIndexOf(item, fromIndex) : -1;\r\n },\r\n includes(arr, item) {\r\n return arr ? arr.includes(item) : false;\r\n },\r\n push(arr, ...items) {\r\n if (arr) arr.push(...items);\r\n return arr;\r\n },\r\n pop(arr) {\r\n return arr ? arr.pop() : undefined;\r\n },\r\n shift(arr) {\r\n return arr ? arr.shift() : undefined;\r\n },\r\n unshift(arr, ...items) {\r\n if (arr) arr.unshift(...items);\r\n return arr;\r\n },\r\n remove(arr, item) {\r\n if (!arr) return arr;\r\n const index = arr.indexOf(item);\r\n if (index > -1) arr.splice(index, 1);\r\n return arr;\r\n },\r\n removeAt(arr, index) {\r\n if (!arr || index < 0 || index >= arr.length) return arr;\r\n arr.splice(index, 1);\r\n return arr;\r\n },\r\n insert(arr, index, item) {\r\n if (!arr) return arr;\r\n arr.splice(index, 0, item);\r\n return arr;\r\n },\r\n reverse(arr) {\r\n return arr ? arr.slice().reverse() : [];\r\n },\r\n sort(arr, compareFn) {\r\n return arr ? arr.slice().sort(compareFn) : [];\r\n },\r\n sortBy(arr, key, order = 'asc') {\r\n if (!arr) return [];\r\n return arr.slice().sort((a, b) => {\r\n const valA = typeof a === 'object' ? a[key] : a;\r\n const valB = typeof b === 'object' ? b[key] : b;\r\n if (valA < valB) return order === 'asc' ? -1 : 1;\r\n if (valA > valB) return order === 'asc' ? 1 : -1;\r\n return 0;\r\n });\r\n },\r\n filter(arr, predicate) {\r\n return arr ? arr.filter(predicate) : [];\r\n },\r\n map(arr, fn) {\r\n return arr ? arr.map(fn) : [];\r\n },\r\n reduce(arr, fn, initialValue) {\r\n return arr ? arr.reduce(fn, initialValue) : initialValue;\r\n },\r\n forEach(arr, fn) {\r\n if (arr) arr.forEach(fn);\r\n },\r\n every(arr, predicate) {\r\n return arr ? arr.every(predicate) : true;\r\n },\r\n some(arr, predicate) {\r\n return arr ? arr.some(predicate) : false;\r\n },\r\n find(arr, predicate) {\r\n return arr ? arr.find(predicate) : undefined;\r\n },\r\n findIndex(arr, predicate) {\r\n return arr ? arr.findIndex(predicate) : -1;\r\n },\r\n flat(arr, depth = 1) {\r\n return arr ? arr.flat(depth) : [];\r\n },\r\n flattenDeep(arr) {\r\n return arr ? arr.reduce((acc, item) => \r\n Array.isArray(item) ? acc.concat(this.flattenDeep(item)) : acc.concat(item), []) : [];\r\n },\r\n unique(arr) {\r\n return arr ? [...new Set(arr)] : [];\r\n },\r\n uniqueBy(arr, key) {\r\n if (!arr) return [];\r\n const seen = new Set();\r\n return arr.filter(item => {\r\n const value = typeof item === 'object' ? item[key] : item;\r\n if (seen.has(value)) return false;\r\n seen.add(value);\r\n return true;\r\n });\r\n },\r\n chunk(arr, size) {\r\n if (!arr || size <= 0) return [];\r\n const chunks = [];\r\n for (let i = 0; i < arr.length; i += size) {\r\n chunks.push(arr.slice(i, i + size));\r\n }\r\n return chunks;\r\n },\r\n shuffle(arr) {\r\n if (!arr) return [];\r\n const result = arr.slice();\r\n for (let i = result.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [result[i], result[j]] = [result[j], result[i]];\r\n }\r\n return result;\r\n },\r\n sum(arr) {\r\n return arr ? arr.reduce((acc, val) => acc + (Number(val) || 0), 0) : 0;\r\n },\r\n average(arr) {\r\n if (!arr || arr.length === 0) return 0;\r\n return this.sum(arr) / arr.length;\r\n },\r\n max(arr) {\r\n return arr && arr.length > 0 ? Math.max(...arr) : -Infinity;\r\n },\r\n min(arr) {\r\n return arr && arr.length > 0 ? Math.min(...arr) : Infinity;\r\n },\r\n intersection(...args) {\r\n if (args.length === 0) return [];\r\n return args.reduce((result, arr) => \r\n result.filter(item => arr && arr.includes(item)));\r\n },\r\n union(...args) {\r\n return [...new Set(args.flat().filter(Boolean))];\r\n },\r\n difference(arr1, arr2) {\r\n return arr1 ? arr1.filter(item => !arr2 || !arr2.includes(item)) : [];\r\n },\r\n zip(...args) {\r\n if (args.length === 0) return [];\r\n const maxLength = Math.max(...args.map(arr => arr ? arr.length : 0));\r\n return Array.from({ length: maxLength }, (_, i) => \r\n args.map(arr => arr && arr[i]));\r\n }\r\n },\r\n\r\n object: {\r\n isObject(obj) {\r\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj);\r\n },\r\n isEmpty(obj) {\r\n if (!obj || typeof obj !== 'object') return true;\r\n return Object.keys(obj).length === 0;\r\n },\r\n keys(obj) {\r\n return obj ? Object.keys(obj) : [];\r\n },\r\n values(obj) {\r\n return obj ? Object.values(obj) : [];\r\n },\r\n entries(obj) {\r\n return obj ? Object.entries(obj) : [];\r\n },\r\n has(obj, key) {\r\n return obj ? Object.prototype.hasOwnProperty.call(obj, key) : false;\r\n },\r\n get(obj, path, defaultValue) {\r\n if (!obj) return defaultValue;\r\n const keys = path.split('.');\r\n return keys.reduce((current, key) => current && current[key], obj) || defaultValue;\r\n },\r\n set(obj, path, value) {\r\n if (!obj || typeof obj !== 'object') return obj;\r\n const keys = path.split('.');\r\n const lastKey = keys.pop();\r\n let current = obj;\r\n keys.forEach(key => {\r\n if (!current[key]) current[key] = {};\r\n current = current[key];\r\n });\r\n current[lastKey] = value;\r\n return obj;\r\n },\r\n pick(obj, keys) {\r\n if (!obj) return {};\r\n return keys.reduce((result, key) => {\r\n if (obj[key] !== undefined) result[key] = obj[key];\r\n return result;\r\n }, {});\r\n },\r\n omit(obj, keys) {\r\n if (!obj) return {};\r\n return Object.keys(obj).reduce((result, key) => {\r\n if (!keys.includes(key)) result[key] = obj[key];\r\n return result;\r\n }, {});\r\n },\r\n merge(...args) {\r\n return args.reduce((result, obj) => {\r\n if (obj && typeof obj === 'object') {\r\n Object.keys(obj).forEach(key => {\r\n if (this.isObject(obj[key]) && this.isObject(result[key])) {\r\n result[key] = this.merge(result[key], obj[key]);\r\n } else {\r\n result[key] = obj[key];\r\n }\r\n });\r\n }\r\n return result;\r\n }, {});\r\n },\r\n clone(obj) {\r\n return obj ? JSON.parse(JSON.stringify(obj)) : obj;\r\n },\r\n deepClone(obj, hash = new WeakMap()) {\r\n if (!obj || typeof obj !== 'object') return obj;\r\n if (hash.has(obj)) return hash.get(obj);\r\n if (obj instanceof Date) return new Date(obj);\r\n if (obj instanceof RegExp) return new RegExp(obj);\r\n if (obj instanceof Map) {\r\n const map = new Map();\r\n hash.set(obj, map);\r\n obj.forEach((val, key) => map.set(key, this.deepClone(val, hash)));\r\n return map;\r\n }\r\n if (obj instanceof Set) {\r\n const set = new Set();\r\n hash.set(obj, set);\r\n obj.forEach(val => set.add(this.deepClone(val, hash)));\r\n return set;\r\n }\r\n if (Array.isArray(obj)) {\r\n const arr = [];\r\n hash.set(obj, arr);\r\n obj.forEach(item => arr.push(this.deepClone(item, hash)));\r\n return arr;\r\n }\r\n const clone = {};\r\n hash.set(obj, clone);\r\n Object.keys(obj).forEach(key => {\r\n clone[key] = this.deepClone(obj[key], hash);\r\n });\r\n return clone;\r\n },\r\n forEach(obj, fn) {\r\n if (!obj) return;\r\n Object.keys(obj).forEach(key => fn(obj[key], key, obj));\r\n },\r\n map(obj, fn) {\r\n if (!obj) return {};\r\n const result = {};\r\n Object.keys(obj).forEach(key => {\r\n result[key] = fn(obj[key], key, obj);\r\n });\r\n return result;\r\n },\r\n filter(obj, fn) {\r\n if (!obj) return {};\r\n const result = {};\r\n Object.keys(obj).forEach(key => {\r\n if (fn(obj[key], key, obj)) result[key] = obj[key];\r\n });\r\n return result;\r\n },\r\n reduce(obj, fn, initialValue) {\r\n if (!obj) return initialValue;\r\n return Object.keys(obj).reduce((acc, key) => \r\n fn(acc, obj[key], key, obj), initialValue);\r\n },\r\n toArray(obj) {\r\n if (!obj) return [];\r\n return Object.keys(obj).map(key => ({ key, value: obj[key] }));\r\n },\r\n fromArray(arr, keyField, valueField) {\r\n if (!arr) return {};\r\n return arr.reduce((result, item) => {\r\n const key = typeof item === 'object' ? item[keyField] : item;\r\n const value = valueField ? item[valueField] : item;\r\n if (key !== undefined) result[key] = value;\r\n return result;\r\n }, {});\r\n },\r\n size(obj) {\r\n return obj ? Object.keys(obj).length : 0;\r\n },\r\n invert(obj) {\r\n if (!obj) return {};\r\n const result = {};\r\n Object.keys(obj).forEach(key => {\r\n result[obj[key]] = key;\r\n });\r\n return result;\r\n },\r\n isEqual(obj1, obj2) {\r\n if (obj1 === obj2) return true;\r\n if (!obj1 || !obj2 || typeof obj1 !== 'object' || typeof obj2 !== 'object') return false;\r\n const keys1 = Object.keys(obj1);\r\n const keys2 = Object.keys(obj2);\r\n if (keys1.length !== keys2.length) return false;\r\n return keys1.every(key => this.isEqual(obj1[key], obj2[key]));\r\n },\r\n freeze(obj) {\r\n if (!obj) return obj;\r\n Object.freeze(obj);\r\n Object.keys(obj).forEach(key => {\r\n if (typeof obj[key] === 'object') this.freeze(obj[key]);\r\n });\r\n return obj;\r\n },\r\n seal(obj) {\r\n return obj ? Object.seal(obj) : obj;\r\n }\r\n },\r\n\r\n number: {\r\n isNumber(val) {\r\n return typeof val === 'number' && !isNaN(val);\r\n },\r\n isInteger(val) {\r\n return Number.isInteger(val);\r\n },\r\n isFloat(val) {\r\n return this.isNumber(val) && !Number.isInteger(val);\r\n },\r\n isPositive(val) {\r\n return this.isNumber(val) && val > 0;\r\n },\r\n isNegative(val) {\r\n return this.isNumber(val) && val < 0;\r\n },\r\n isZero(val) {\r\n return this.isNumber(val) && val === 0;\r\n },\r\n clamp(val, min, max) {\r\n if (!this.isNumber(val)) return val;\r\n return Math.min(Math.max(val, min), max);\r\n },\r\n round(val, precision = 0) {\r\n if (!this.isNumber(val)) return val;\r\n const factor = Math.pow(10, precision);\r\n return Math.round(val * factor) / factor;\r\n },\r\n floor(val) {\r\n return this.isNumber(val) ? Math.floor(val) : val;\r\n },\r\n ceil(val) {\r\n return this.isNumber(val) ? Math.ceil(val) : val;\r\n },\r\n abs(val) {\r\n return this.isNumber(val) ? Math.abs(val) : val;\r\n },\r\n min(...args) {\r\n const nums = args.filter(this.isNumber);\r\n return nums.length > 0 ? Math.min(...nums) : undefined;\r\n },\r\n max(...args) {\r\n const nums = args.filter(this.isNumber);\r\n return nums.length > 0 ? Math.max(...nums) : undefined;\r\n },\r\n sum(...args) {\r\n const nums = args.flat().filter(this.isNumber);\r\n return nums.reduce((acc, val) => acc + val, 0);\r\n },\r\n average(...args) {\r\n const nums = args.flat().filter(this.isNumber);\r\n return nums.length > 0 ? this.sum(nums) / nums.length : 0;\r\n },\r\n random(min = 0, max = 1) {\r\n return Math.random() * (max - min) + min;\r\n },\r\n randomInt(min, max) {\r\n return Math.floor(this.random(min, max + 1));\r\n },\r\n format(val, decimals = 2) {\r\n if (!this.isNumber(val)) return String(val);\r\n return val.toFixed(decimals);\r\n },\r\n formatCurrency(val, currency = 'CNY', decimals = 2) {\r\n if (!this.isNumber(val)) return String(val);\r\n const formatter = new Intl.NumberFormat('zh-CN', {\r\n style: 'currency',\r\n currency,\r\n minimumFractionDigits: decimals,\r\n maximumFractionDigits: decimals\r\n });\r\n return formatter.format(val);\r\n },\r\n formatPercent(val, decimals = 0) {\r\n if (!this.isNumber(val)) return String(val);\r\n return `${(val * 100).toFixed(decimals)}%`;\r\n },\r\n toFixed(val, decimals = 0) {\r\n if (!this.isNumber(val)) return String(val);\r\n return val.toFixed(decimals);\r\n },\r\n toPrecision(val, precision = 6) {\r\n if (!this.isNumber(val)) return String(val);\r\n return val.toPrecision(precision);\r\n },\r\n isNaN(val) {\r\n return Number.isNaN(val);\r\n },\r\n isFinite(val) {\r\n return Number.isFinite(val);\r\n },\r\n parseInt(val, radix = 10) {\r\n return Number.parseInt(val, radix);\r\n },\r\n parseFloat(val) {\r\n return Number.parseFloat(val);\r\n },\r\n toNumber(val, defaultValue = 0) {\r\n const num = Number(val);\r\n return isNaN(num) ? defaultValue : num;\r\n },\r\n safeDivide(a, b, defaultValue = 0) {\r\n if (!this.isNumber(a) || !this.isNumber(b) || b === 0) return defaultValue;\r\n return a / b;\r\n },\r\n safeMultiply(...args) {\r\n return args.reduce((result, val) => {\r\n if (!this.isNumber(result) || !this.isNumber(val)) return 0;\r\n return result * val;\r\n }, 1);\r\n }\r\n },\r\n\r\n date: {\r\n now() {\r\n return Date.now();\r\n },\r\n today() {\r\n const now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n return now;\r\n },\r\n tomorrow() {\r\n const date = this.today();\r\n date.setDate(date.getDate() + 1);\r\n return date;\r\n },\r\n yesterday() {\r\n const date = this.today();\r\n date.setDate(date.getDate() - 1);\r\n return date;\r\n },\r\n isDate(val) {\r\n return val instanceof Date && !isNaN(val.getTime());\r\n },\r\n isValid(date) {\r\n return this.isDate(date);\r\n },\r\n parse(str) {\r\n const date = new Date(str);\r\n return this.isValid(date) ? date : null;\r\n },\r\n format(date, formatStr = 'YYYY-MM-DD HH:mm:ss') {\r\n if (!this.isDate(date)) return '';\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const hours = String(date.getHours()).padStart(2, '0');\r\n const minutes = String(date.getMinutes()).padStart(2, '0');\r\n const seconds = String(date.getSeconds()).padStart(2, '0');\r\n const milliseconds = String(date.getMilliseconds()).padStart(3, '0');\r\n const weekDays = ['日', '一', '二', '三', '四', '五', '六'];\r\n const weekDay = weekDays[date.getDay()];\r\n \r\n return formatStr\r\n .replace('YYYY', year)\r\n .replace('MM', month)\r\n .replace('DD', day)\r\n .replace('HH', hours)\r\n .replace('mm', minutes)\r\n .replace('ss', seconds)\r\n .replace('SSS', milliseconds)\r\n .replace('D', date.getDate())\r\n .replace('M', date.getMonth() + 1)\r\n .replace('H', date.getHours())\r\n .replace('m', date.getMinutes())\r\n .replace('s', date.getSeconds())\r\n .replace('W', weekDay);\r\n },\r\n toISO(date) {\r\n return this.isDate(date) ? date.toISOString() : '';\r\n },\r\n toUTC(date) {\r\n return this.isDate(date) ? new Date(date.toUTCString()) : null;\r\n },\r\n addDays(date, days) {\r\n if (!this.isDate(date)) return date;\r\n const newDate = new Date(date);\r\n newDate.setDate(newDate.getDate() + days);\r\n return newDate;\r\n },\r\n addHours(date, hours) {\r\n if (!this.isDate(date)) return date;\r\n const newDate = new Date(date);\r\n newDate.setHours(newDate.getHours() + hours);\r\n return newDate;\r\n },\r\n addMinutes(date, minutes) {\r\n if (!this.isDate(date)) return date;\r\n const newDate = new Date(date);\r\n newDate.setMinutes(newDate.getMinutes() + minutes);\r\n return newDate;\r\n },\r\n addSeconds(date, seconds) {\r\n if (!this.isDate(date)) return date;\r\n const newDate = new Date(date);\r\n newDate.setSeconds(newDate.getSeconds() + seconds);\r\n return newDate;\r\n },\r\n diffDays(date1, date2) {\r\n if (!this.isDate(date1) || !this.isDate(date2)) return 0;\r\n const d1 = this.today();\r\n const d2 = this.today();\r\n d1.setTime(date1.getTime());\r\n d2.setTime(date2.getTime());\r\n return Math.floor((d1.getTime() - d2.getTime()) / (1000 * 60 * 60 * 24));\r\n },\r\n diffHours(date1, date2) {\r\n if (!this.isDate(date1) || !this.isDate(date2)) return 0;\r\n return Math.floor((date1.getTime() - date2.getTime()) / (1000 * 60 * 60));\r\n },\r\n diffMinutes(date1, date2) {\r\n if (!this.isDate(date1) || !this.isDate(date2)) return 0;\r\n return Math.floor((date1.getTime() - date2.getTime()) / (1000 * 60));\r\n },\r\n diffSeconds(date1, date2) {\r\n if (!this.isDate(date1) || !this.isDate(date2)) return 0;\r\n return Math.floor((date1.getTime() - date2.getTime()) / 1000);\r\n },\r\n isToday(date) {\r\n if (!this.isDate(date)) return false;\r\n return this.diffDays(date, this.today()) === 0;\r\n },\r\n isYesterday(date) {\r\n if (!this.isDate(date)) return false;\r\n return this.diffDays(date, this.today()) === -1;\r\n },\r\n isTomorrow(date) {\r\n if (!this.isDate(date)) return false;\r\n return this.diffDays(date, this.today()) === 1;\r\n },\r\n isFuture(date) {\r\n if (!this.isDate(date)) return false;\r\n return date.getTime() > this.now();\r\n },\r\n isPast(date) {\r\n if (!this.isDate(date)) return false;\r\n return date.getTime() < this.now();\r\n },\r\n isLeapYear(date) {\r\n if (!this.isDate(date)) return false;\r\n const year = date.getFullYear();\r\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\r\n },\r\n getDaysInMonth(date) {\r\n if (!this.isDate(date)) return 0;\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n return new Date(year, month + 1, 0).getDate();\r\n },\r\n getWeekOfYear(date) {\r\n if (!this.isDate(date)) return 0;\r\n const startOfYear = new Date(date.getFullYear(), 0, 1);\r\n const diff = date.getTime() - startOfYear.getTime();\r\n return Math.ceil(diff / (1000 * 60 * 60 * 24 * 7));\r\n },\r\n getQuarter(date) {\r\n if (!this.isDate(date)) return 0;\r\n return Math.ceil((date.getMonth() + 1) / 3);\r\n },\r\n startOfDay(date) {\r\n if (!this.isDate(date)) return date;\r\n const newDate = new Date(date);\r\n newDate.setHours(0, 0, 0, 0);\r\n return newDate;\r\n },\r\n endOfDay(date) {\r\n if (!this.isDate(date)) return date;\r\n const newDate = new Date(date);\r\n newDate.setHours(23, 59, 59, 999);\r\n return newDate;\r\n },\r\n startOfMonth(date) {\r\n if (!this.isDate(date)) return date;\r\n return new Date(date.getFullYear(), date.getMonth(), 1);\r\n },\r\n endOfMonth(date) {\r\n if (!this.isDate(date)) return date;\r\n return new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59, 999);\r\n },\r\n startOfWeek(date, startDay = 1) {\r\n if (!this.isDate(date)) return date;\r\n const newDate = new Date(date);\r\n const day = newDate.getDay();\r\n const diff = day >= startDay ? day - startDay : day + (7 - startDay);\r\n newDate.setDate(newDate.getDate() - diff);\r\n newDate.setHours(0, 0, 0, 0);\r\n return newDate;\r\n },\r\n endOfWeek(date, startDay = 1) {\r\n if (!this.isDate(date)) return date;\r\n const start = this.startOfWeek(date, startDay);\r\n const end = new Date(start);\r\n end.setDate(end.getDate() + 6);\r\n end.setHours(23, 59, 59, 999);\r\n return end;\r\n },\r\n getAge(birthDate) {\r\n if (!this.isDate(birthDate)) return 0;\r\n const now = new Date();\r\n let age = now.getFullYear() - birthDate.getFullYear();\r\n if (now.getMonth() < birthDate.getMonth() || \r\n (now.getMonth() === birthDate.getMonth() && now.getDate() < birthDate.getDate())) {\r\n age--;\r\n }\r\n return Math.max(0, age);\r\n },\r\n fromNow(date) {\r\n if (!this.isDate(date)) return '';\r\n const now = this.now();\r\n const diff = now - date.getTime();\r\n const minute = 60 * 1000;\r\n const hour = 60 * minute;\r\n const day = 24 * hour;\r\n const week = 7 * day;\r\n const month = 30 * day;\r\n const year = 365 * day;\r\n \r\n if (diff < minute) return '刚刚';\r\n if (diff < hour) return `${Math.floor(diff / minute)}分钟前`;\r\n if (diff < day) return `${Math.floor(diff / hour)}小时前`;\r\n if (diff < week) return `${Math.floor(diff / day)}天前`;\r\n if (diff < month) return `${Math.floor(diff / week)}周前`;\r\n if (diff < year) return `${Math.floor(diff / month)}个月前`;\r\n return `${Math.floor(diff / year)}年前`;\r\n }\r\n },\r\n\r\n debounce(func, wait, options = {}) {\r\n let timeout = null;\r\n let lastArgs = null;\r\n let lastThis = null;\r\n let lastCallTime = 0;\r\n \r\n const leading = options.leading || false;\r\n const trailing = options.trailing !== false;\r\n \r\n function invokeFunc() {\r\n func.apply(lastThis, lastArgs);\r\n }\r\n \r\n function leadingEdge() {\r\n lastCallTime = Date.now();\r\n if (leading) {\r\n timeout = setTimeout(trailingEdge, wait);\r\n invokeFunc();\r\n } else {\r\n timeout = setTimeout(trailingEdge, wait);\r\n }\r\n }\r\n \r\n function trailingEdge() {\r\n timeout = null;\r\n if (trailing && lastArgs) {\r\n invokeFunc();\r\n }\r\n lastArgs = null;\r\n lastThis = null;\r\n }\r\n \r\n function remainingWait() {\r\n const timeSinceLastCall = Date.now() - lastCallTime;\r\n return Math.max(0, wait - timeSinceLastCall);\r\n }\r\n \r\n return function(...args) {\r\n lastArgs = args;\r\n lastThis = this;\r\n lastCallTime = Date.now();\r\n \r\n if (!timeout) {\r\n leadingEdge();\r\n } else {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(trailingEdge, remainingWait());\r\n }\r\n };\r\n },\r\n\r\n throttle(func, limit, options = {}) {\r\n let inThrottle = false;\r\n const trailing = options.trailing || false;\r\n let lastArgs = null;\r\n let lastThis = null;\r\n \r\n function invokeFunc() {\r\n func.apply(lastThis, lastArgs);\r\n lastArgs = null;\r\n lastThis = null;\r\n }\r\n \r\n return function(...args) {\r\n if (!inThrottle) {\r\n inThrottle = true;\r\n lastArgs = args;\r\n lastThis = this;\r\n invokeFunc();\r\n setTimeout(() => {\r\n inThrottle = false;\r\n if (trailing && lastArgs) {\r\n invokeFunc();\r\n }\r\n }, limit);\r\n } else if (trailing) {\r\n lastArgs = args;\r\n lastThis = this;\r\n }\r\n };\r\n },\r\n\r\n validator: {\r\n isEmail(str) {\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n return regex.test(str || '');\r\n },\r\n isPhone(str) {\r\n const regex = /^1[3-9]\\d{9}$/;\r\n return regex.test(str || '');\r\n },\r\n isURL(str) {\r\n const regex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w.-]*)*\\/?$/;\r\n return regex.test(str || '');\r\n },\r\n isIPv4(str) {\r\n const regex = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\r\n return regex.test(str || '');\r\n },\r\n isIPv6(str) {\r\n const regex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;\r\n return regex.test(str || '');\r\n },\r\n isIP(str) {\r\n return this.isIPv4(str) || this.isIPv6(str);\r\n },\r\n isIDCard(str) {\r\n const regex = /^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$/;\r\n return regex.test(str || '');\r\n },\r\n isPassport(str) {\r\n const regex = /^[A-Z][0-9]{8}$|^[A-Z]{2}[0-9]{7}$/;\r\n return regex.test(str || '');\r\n },\r\n isCreditCard(str) {\r\n const regex = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9]{2})[0-9]{12}|3[47][0-9]{13})$/;\r\n const cleanStr = str.replace(/\\s/g, '');\r\n if (!regex.test(cleanStr)) return false;\r\n let sum = 0;\r\n let alternate = false;\r\n for (let i = cleanStr.length - 1; i >= 0; i--) {\r\n let digit = parseInt(cleanStr[i], 10);\r\n if (alternate) {\r\n digit *= 2;\r\n if (digit > 9) digit -= 9;\r\n }\r\n sum += digit;\r\n alternate = !alternate;\r\n }\r\n return sum % 10 === 0;\r\n },\r\n isHexColor(str) {\r\n const regex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\r\n return regex.test(str || '');\r\n },\r\n isRGB(str) {\r\n const regex = /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/;\r\n const match = regex.exec(str || '');\r\n if (!match) return false;\r\n return match.slice(1).every(val => parseInt(val) >= 0 && parseInt(val) <= 255);\r\n },\r\n isRGBA(str) {\r\n const regex = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*([01]|0\\.\\d+)\\)$/;\r\n const match = regex.exec(str || '');\r\n if (!match) return false;\r\n const [, r, g, b, a] = match;\r\n return parseInt(r) >= 0 && parseInt(r) <= 255 &&\r\n parseInt(g) >= 0 && parseInt(g) <= 255 &&\r\n parseInt(b) >= 0 && parseInt(b) <= 255 &&\r\n parseFloat(a) >= 0 && parseFloat(a) <= 1;\r\n },\r\n isColor(str) {\r\n return this.isHexColor(str) || this.isRGB(str) || this.isRGBA(str);\r\n },\r\n isDate(str) {\r\n return !isNaN(new Date(str).getTime());\r\n },\r\n isJSON(str) {\r\n try {\r\n JSON.parse(str);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n },\r\n isEmpty(str) {\r\n return !str || str.trim() === '';\r\n },\r\n isWhitespace(str) {\r\n return /^\\s+$/.test(str || '');\r\n },\r\n isNumber(str) {\r\n return !isNaN(parseFloat(str)) && isFinite(str);\r\n },\r\n isInteger(str) {\r\n return /^-?\\d+$/.test(str || '');\r\n },\r\n isFloat(str) {\r\n return /^-?\\d+\\.\\d+$/.test(str || '');\r\n },\r\n isPositive(str) {\r\n const num = parseFloat(str);\r\n return !isNaN(num) && num > 0;\r\n },\r\n isNegative(str) {\r\n const num = parseFloat(str);\r\n return !isNaN(num) && num < 0;\r\n },\r\n isAlpha(str) {\r\n return /^[a-zA-Z]+$/.test(str || '');\r\n },\r\n isAlphaNumeric(str) {\r\n return /^[a-zA-Z0-9]+$/.test(str || '');\r\n },\r\n isChinese(str) {\r\n return /^[\\u4e00-\\u9fa5]+$/.test(str || '');\r\n },\r\n isLength(str, min, max) {\r\n const len = (str || '').length;\r\n return len >= min && (max === undefined || len <= max);\r\n },\r\n minLength(str, min) {\r\n return (str || '').length >= min;\r\n },\r\n maxLength(str, max) {\r\n return (str || '').length <= max;\r\n },\r\n matches(str, regex) {\r\n return (regex instanceof RegExp) ? regex.test(str || '') : false;\r\n },\r\n equals(str1, str2) {\r\n return String(str1) === String(str2);\r\n },\r\n contains(str, substring) {\r\n return (str || '').includes(substring);\r\n },\r\n notContains(str, substring) {\r\n return !this.contains(str, substring);\r\n },\r\n isArray(arr) {\r\n return Array.isArray(arr);\r\n },\r\n arrayLength(arr, min, max) {\r\n const len = arr ? arr.length : 0;\r\n return len >= min && (max === undefined || len <= max);\r\n },\r\n arrayMinLength(arr, min) {\r\n return arr ? arr.length >= min : false;\r\n },\r\n arrayMaxLength(arr, max) {\r\n return arr ? arr.length <= max : false;\r\n },\r\n isObject(obj) {\r\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj);\r\n },\r\n hasKeys(obj, keys) {\r\n if (!obj || !keys || !Array.isArray(keys)) return false;\r\n return keys.every(key => Object.prototype.hasOwnProperty.call(obj, key));\r\n },\r\n validate(obj, rules) {\r\n const errors = {};\r\n Object.keys(rules).forEach(key => {\r\n const value = obj[key];\r\n const fieldRules = rules[key];\r\n const fieldErrors = [];\r\n \r\n fieldRules.forEach(rule => {\r\n if (typeof rule === 'string') {\r\n const [name, ...params] = rule.split(':');\r\n if (!this[name](value, ...params)) {\r\n fieldErrors.push(name);\r\n }\r\n } else if (typeof rule === 'function') {\r\n const result = rule(value, obj);\r\n if (result !== true) {\r\n fieldErrors.push(result || 'validation_failed');\r\n }\r\n }\r\n });\r\n \r\n if (fieldErrors.length > 0) {\r\n errors[key] = fieldErrors;\r\n }\r\n });\r\n \r\n return {\r\n valid: Object.keys(errors).length === 0,\r\n errors\r\n };\r\n }\r\n },\r\n\r\n crypto: {\r\n md5(str) {\r\n const message = str ? String(str) : '';\r\n const md5Array = [\r\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476\r\n ];\r\n \r\n const K = [\r\n 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,\r\n 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,\r\n 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,\r\n 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,\r\n 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,\r\n 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,\r\n 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,\r\n 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,\r\n 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,\r\n 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,\r\n 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,\r\n 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,\r\n 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,\r\n 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,\r\n 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,\r\n 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391\r\n ];\r\n \r\n const S = [\r\n [7, 12, 17, 22], [5, 9, 14, 20], [4, 11, 16, 23], [6, 10, 15, 21]\r\n ];\r\n \r\n function leftRotate(value, shift) {\r\n return (value << shift) | (value >>> (32 - shift));\r\n }\r\n \r\n function addPadding(message) {\r\n const bitLength = message.length * 8;\r\n message += '\\x80';\r\n while ((message.length % 64) !== 56) {\r\n message += '\\x00';\r\n }\r\n const lowBytes = bitLength & 0xffffffff;\r\n const highBytes = (bitLength >>> 32) & 0xffffffff;\r\n for (let i = 0; i < 4; i++) {\r\n message += String.fromCharCode((lowBytes >>> (8 * i)) & 0xff);\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n message += String.fromCharCode((highBytes >>> (8 * i)) & 0xff);\r\n }\r\n return message;\r\n }\r\n \r\n function processBlock(block, state) {\r\n const [a, b, c, d] = state;\r\n const words = [];\r\n for (let i = 0; i < 16; i++) {\r\n words[i] = (block.charCodeAt(i * 4) & 0xff) |\r\n ((block.charCodeAt(i * 4 + 1) & 0xff) << 8) |\r\n ((block.charCodeAt(i * 4 + 2) & 0xff) << 16) |\r\n ((block.charCodeAt(i * 4 + 3) & 0xff) << 24);\r\n }\r\n \r\n let AA = a, BB = b, CC = c, DD = d;\r\n \r\n for (let i = 0; i < 64; i++) {\r\n let f, g;\r\n const round = Math.floor(i / 16);\r\n const wordIndex = i % 16;\r\n \r\n if (round === 0) {\r\n f = (BB & CC) | (~BB & DD);\r\n g = wordIndex;\r\n } else if (round === 1) {\r\n f = (DD & BB) | (~DD & CC);\r\n g = (5 * wordIndex + 1) % 16;\r\n } else if (round === 2) {\r\n f = BB ^ CC ^ DD;\r\n g = (3 * wordIndex + 5) % 16;\r\n } else {\r\n f = CC ^ (BB | ~DD);\r\n g = (7 * wordIndex) % 16;\r\n }\r\n \r\n const temp = DD;\r\n DD = CC;\r\n CC = BB;\r\n BB = BB + leftRotate((AA + f + K[i] + words[g]) & 0xffffffff, S[round][i % 4]);\r\n AA = temp;\r\n }\r\n \r\n return [\r\n (a + AA) & 0xffffffff,\r\n (b + BB) & 0xffffffff,\r\n (c + CC) & 0xffffffff,\r\n (d + DD) & 0xffffffff\r\n ];\r\n }\r\n \r\n const paddedMessage = addPadding(message);\r\n let state = [...md5Array];\r\n \r\n for (let i = 0; i < paddedMessage.length; i += 64) {\r\n state = processBlock(paddedMessage.substring(i, i + 64), state);\r\n }\r\n \r\n let result = '';\r\n state.forEach(word => {\r\n for (let i = 0; i < 4; i++) {\r\n result += ((word >>> (8 * i)) & 0xff).toString(16).padStart(2, '0');\r\n }\r\n });\r\n \r\n return result;\r\n },\r\n \r\n sha256(str) {\r\n const message = str ? String(str) : '';\r\n const K = [\r\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\r\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\r\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\r\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\r\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\r\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\r\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\r\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\r\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\r\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\r\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\r\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\r\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\r\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\r\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\r\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\r\n ];\r\n \r\n function rightRotate(value, shift) {\r\n return (value >>> shift) | (value << (32 - shift));\r\n }\r\n \r\n function addPadding(message) {\r\n const bitLength = message.length * 8;\r\n message += '\\x80';\r\n while ((message.length % 64) !== 56) {\r\n message += '\\x00';\r\n }\r\n const lowBytes = bitLength & 0xffffffff;\r\n const highBytes = (bitLength >>> 32) & 0xffffffff;\r\n for (let i = 0; i < 4; i++) {\r\n message += String.fromCharCode((highBytes >>> (8 * i)) & 0xff);\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n message += String.fromCharCode((lowBytes >>> (8 * i)) & 0xff);\r\n }\r\n return message;\r\n }\r\n \r\n function processBlock(block, state) {\r\n const words = [];\r\n for (let i = 0; i < 16; i++) {\r\n words[i] = (block.charCodeAt(i * 4) & 0xff) |\r\n ((block.charCodeAt(i * 4 + 1) & 0xff) << 8) |\r\n ((block.charCodeAt(i * 4 + 2) & 0xff) << 16) |\r\n ((block.charCodeAt(i * 4 + 3) & 0xff) << 24);\r\n }\r\n \r\n for (let i = 16; i < 64; i++) {\r\n const s0 = rightRotate(words[i - 15], 7) ^ rightRotate(words[i - 15], 18) ^ (words[i - 15] >>> 3);\r\n const s1 = rightRotate(words[i - 2], 17) ^ rightRotate(words[i - 2], 19) ^ (words[i - 2] >>> 10);\r\n words[i] = (words[i - 16] + s0 + words[i - 7] + s1) & 0xffffffff;\r\n }\r\n \r\n let [a, b, c, d, e, f, g, h] = state;\r\n \r\n for (let i = 0; i < 64; i++) {\r\n const S1 = rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25);\r\n const ch = (e & f) ^ (~e & g);\r\n const temp1 = (h + S1 + ch + K[i] + words[i]) & 0xffffffff;\r\n const S0 = rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22);\r\n const maj = (a & b) ^ (a & c) ^ (b & c);\r\n const temp2 = (S0 + maj) & 0xffffffff;\r\n \r\n h = g;\r\n g = f;\r\n f = e;\r\n e = (d + temp1) & 0xffffffff;\r\n d = c;\r\n c = b;\r\n b = a;\r\n a = (temp1 + temp2) & 0xffffffff;\r\n }\r\n \r\n return [\r\n (state[0] + a) & 0xffffffff,\r\n (state[1] + b) & 0xffffffff,\r\n (state[2] + c) & 0xffffffff,\r\n (state[3] + d) & 0xffffffff,\r\n (state[4] + e) & 0xffffffff,\r\n (state[5] + f) & 0xffffffff,\r\n (state[6] + g) & 0xffffffff,\r\n (state[7] + h) & 0xffffffff\r\n ];\r\n }\r\n \r\n const paddedMessage = addPadding(message);\r\n let state = [\r\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\r\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\r\n ];\r\n \r\n for (let i = 0; i < paddedMessage.length; i += 64) {\r\n state = processBlock(paddedMessage.substring(i, i + 64), state);\r\n }\r\n \r\n let result = '';\r\n state.forEach(word => {\r\n for (let i = 3; i >= 0; i--) {\r\n result += ((word >>> (8 * i)) & 0xff).toString(16).padStart(2, '0');\r\n }\r\n });\r\n \r\n return result;\r\n },\r\n \r\n base64Encode(str) {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n let result = '';\r\n let i = 0;\r\n const bytes = str ? str.split('').map(c => c.charCodeAt(0)) : [];\r\n \r\n while (i < bytes.length) {\r\n const byte1 = bytes[i++];\r\n const byte2 = bytes[i++] || 0;\r\n const byte3 = bytes[i++] || 0;\r\n \r\n const enc1 = byte1 >> 2;\r\n const enc2 = ((byte1 & 3) << 4) | (byte2 >> 4);\r\n const enc3 = ((byte2 & 15) << 2) | (byte3 >> 6);\r\n const enc4 = byte3 & 63;\r\n \r\n result += chars[enc1] + chars[enc2] + \r\n (i > bytes.length + 1 ? '=' : chars[enc3]) + \r\n (i > bytes.length ? '=' : chars[enc4]);\r\n }\r\n \r\n return result;\r\n },\r\n \r\n base64Decode(str) {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n let result = '';\r\n let i = 0;\r\n str = str.replace(/[^A-Za-z0-9+/=]/g, '');\r\n \r\n while (i < str.length) {\r\n const enc1 = chars.indexOf(str.charAt(i++));\r\n const enc2 = chars.indexOf(str.charAt(i++));\r\n const enc3 = chars.indexOf(str.charAt(i++));\r\n const enc4 = chars.indexOf(str.charAt(i++));\r\n \r\n const byte1 = (enc1 << 2) | (enc2 >> 4);\r\n const byte2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n const byte3 = ((enc3 & 3) << 6) | enc4;\r\n \r\n result += String.fromCharCode(byte1);\r\n if (enc3 !== 64) result += String.fromCharCode(byte2);\r\n if (enc4 !== 64) result += String.fromCharCode(byte3);\r\n }\r\n \r\n return result;\r\n },\r\n \r\n uuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n },\r\n\r\n preload: {\r\n cache: new Map(),\r\n\r\n async loadImage(url, options = {}) {\r\n const { crossOrigin = 'anonymous' } = options;\r\n \r\n if (this.cache.has(url)) {\r\n return this.cache.get(url);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.crossOrigin = crossOrigin;\r\n \r\n img.onload = () => {\r\n this.cache.set(url, img);\r\n resolve(img);\r\n };\r\n \r\n img.onerror = () => {\r\n reject(new Error(`Failed to load image: ${url}`));\r\n };\r\n \r\n img.src = url;\r\n });\r\n },\r\n\r\n async loadImages(urls, options = {}) {\r\n const { parallel = true } = options;\r\n \r\n if (parallel) {\r\n return Promise.all(urls.map(url => this.loadImage(url, options)));\r\n }\r\n \r\n const results = [];\r\n for (const url of urls) {\r\n results.push(await this.loadImage(url, options));\r\n }\r\n return results;\r\n },\r\n\r\n async loadScript(url, options = {}) {\r\n const { type = 'text/javascript', async = true, defer = false } = options;\r\n \r\n if (this.cache.has(url)) {\r\n return this.cache.get(url);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.type = type;\r\n script.async = async;\r\n script.defer = defer;\r\n \r\n script.onload = () => {\r\n this.cache.set(url, script);\r\n resolve(script);\r\n };\r\n \r\n script.onerror = () => {\r\n script.remove();\r\n reject(new Error(`Failed to load script: ${url}`));\r\n };\r\n \r\n script.src = url;\r\n document.head.appendChild(script);\r\n });\r\n },\r\n\r\n async loadStylesheet(url, options = {}) {\r\n const { media = 'all' } = options;\r\n \r\n if (this.cache.has(url)) {\r\n return this.cache.get(url);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = url;\r\n link.media = media;\r\n \r\n link.onload = () => {\r\n this.cache.set(url, link);\r\n resolve(link);\r\n };\r\n \r\n link.onerror = () => {\r\n link.remove();\r\n reject(new Error(`Failed to load stylesheet: ${url}`));\r\n };\r\n \r\n document.head.appendChild(link);\r\n });\r\n },\r\n\r\n async loadFont(fontFamily, src, options = {}) {\r\n const { weight = 'normal', style = 'normal' } = options;\r\n const fontFace = new FontFace(fontFamily, `url(${src})`, { weight, style });\r\n \r\n try {\r\n await fontFace.load();\r\n document.fonts.add(fontFace);\r\n return fontFace;\r\n } catch (e) {\r\n throw new Error(`Failed to load font: ${fontFamily}`);\r\n }\r\n },\r\n\r\n async preload(url, type = 'image') {\r\n switch (type) {\r\n case 'image':\r\n return this.loadImage(url);\r\n case 'script':\r\n return this.loadScript(url);\r\n case 'stylesheet':\r\n case 'style':\r\n return this.loadStylesheet(url);\r\n default:\r\n throw new Error(`Unsupported preload type: ${type}`);\r\n }\r\n },\r\n\r\n isLoaded(url) {\r\n return this.cache.has(url);\r\n },\r\n\r\n clearCache() {\r\n this.cache.clear();\r\n },\r\n\r\n clearCacheByUrl(url) {\r\n this.cache.delete(url);\r\n }\r\n }\r\n};\r\n\r\nwindow.KupolaUtils = KupolaUtils;\r\nwindow.kupolaUtils = KupolaUtils;","class TrieNode {\r\n constructor() {\r\n this.children = {};\r\n this.keys = [];\r\n }\r\n}\r\n\r\nclass PathTrie {\r\n constructor() {\r\n this.root = new TrieNode();\r\n }\r\n\r\n insert(key) {\r\n let node = this.root;\r\n const parts = key.split('.');\r\n \r\n parts.forEach((part, index) => {\r\n if (!node.children[part]) {\r\n node.children[part] = new TrieNode();\r\n }\r\n node = node.children[part];\r\n if (index === parts.length - 1) {\r\n node.keys.push(key);\r\n }\r\n });\r\n }\r\n\r\n getSubKeys(key) {\r\n let node = this.root;\r\n const parts = key.split('.');\r\n const result = [];\r\n\r\n for (let i = 0; i < parts.length; i++) {\r\n const part = parts[i];\r\n if (!node.children[part]) {\r\n break;\r\n }\r\n node = node.children[part];\r\n \r\n const collectKeys = (n) => {\r\n if (n.keys.length > 0) {\r\n result.push(...n.keys);\r\n }\r\n Object.values(n.children).forEach(child => collectKeys(child));\r\n };\r\n collectKeys(node);\r\n }\r\n\r\n return [...new Set(result)];\r\n }\r\n\r\n getParentKeys(key) {\r\n const parts = key.split('.');\r\n const result = [];\r\n \r\n for (let i = 1; i <= parts.length; i++) {\r\n const parentPath = parts.slice(0, i).join('.');\r\n result.push(parentPath);\r\n }\r\n \r\n return result;\r\n }\r\n}\r\n\r\nconst REACTIVE_SYMBOLS = {\r\n parent: Symbol('reactive_parent'),\r\n path: Symbol('reactive_path'),\r\n isReactive: Symbol('reactive_is_reactive')\r\n};\r\n\r\nclass KupolaDataBind {\r\n constructor() {\r\n this.rawData = {};\r\n this.data = null;\r\n this.observers = {};\r\n this.elements = {};\r\n this.computedProperties = {};\r\n this.pathTrie = new PathTrie();\r\n this.updateQueue = new Map();\r\n this.isProcessing = false;\r\n this.pendingComputed = new Set();\r\n this.persistedKeys = new Map();\r\n this.snapshots = [];\r\n this.snapshotLimit = 10;\r\n this._proxyCache = new WeakMap();\r\n \r\n this.createReactiveData();\r\n }\r\n\r\n createReactiveData() {\r\n const handler = {\r\n get: (target, key, receiver) => {\r\n if (key === '__raw__') return target;\r\n const result = Reflect.get(target, key, receiver);\r\n if (result && typeof result === 'object' && !Array.isArray(result)) {\r\n return this.wrapReactive(result, key);\r\n }\r\n return result;\r\n },\r\n set: (target, key, value, receiver) => {\r\n const oldValue = Reflect.get(target, key, receiver);\r\n const result = Reflect.set(target, key, value, receiver);\r\n \r\n const fullPath = this.resolvePath(target, key);\r\n this.notify(fullPath, value, oldValue);\r\n this.queueUpdate(fullPath, value);\r\n \r\n return result;\r\n },\r\n deleteProperty: (target, key) => {\r\n const oldValue = Reflect.get(target, key, receiver);\r\n const result = Reflect.deleteProperty(target, key);\r\n \r\n const fullPath = this.resolvePath(target, key);\r\n this.notify(fullPath, undefined, oldValue);\r\n this.queueUpdate(fullPath, undefined);\r\n \r\n return result;\r\n }\r\n };\r\n\r\n this.data = new Proxy(this.rawData, handler);\r\n this.data.__parent__ = null;\r\n this.data.__path__ = '';\r\n }\r\n\r\n wrapReactive(obj, parentKey) {\r\n if (obj[REACTIVE_SYMBOLS.isReactive]) return obj;\r\n \r\n if (this._proxyCache.has(obj)) {\r\n return this._proxyCache.get(obj);\r\n }\r\n \r\n const handler = {\r\n get: (target, key, receiver) => {\r\n if (key === '__raw__') return target;\r\n if (key === REACTIVE_SYMBOLS.parent || key === '__parent__') return target[REACTIVE_SYMBOLS.parent];\r\n if (key === REACTIVE_SYMBOLS.path || key === '__path__') return target[REACTIVE_SYMBOLS.path];\r\n if (key === REACTIVE_SYMBOLS.isReactive || key === '__isReactive__') return true;\r\n \r\n const result = Reflect.get(target, key, receiver);\r\n if (result && typeof result === 'object' && !Array.isArray(result)) {\r\n return this.wrapReactive(result, `${target[REACTIVE_SYMBOLS.path]}${target[REACTIVE_SYMBOLS.path] ? '.' : ''}${key}`);\r\n }\r\n return result;\r\n },\r\n set: (target, key, value, receiver) => {\r\n if (key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive ||\r\n key === '__parent__' ||\r\n key === '__path__' ||\r\n key === '__isReactive__') {\r\n return true;\r\n }\r\n \r\n const oldValue = Reflect.get(target, key, receiver);\r\n const result = Reflect.set(target, key, value, receiver);\r\n \r\n const fullPath = `${target[REACTIVE_SYMBOLS.path]}${target[REACTIVE_SYMBOLS.path] ? '.' : ''}${key}`;\r\n this.notify(fullPath, value, oldValue);\r\n this.queueUpdate(fullPath, value);\r\n \r\n return result;\r\n },\r\n deleteProperty: (target, key) => {\r\n if (key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive) {\r\n return false;\r\n }\r\n \r\n const oldValue = Reflect.get(target, key);\r\n const result = Reflect.deleteProperty(target, key);\r\n \r\n const fullPath = `${target[REACTIVE_SYMBOLS.path]}${target[REACTIVE_SYMBOLS.path] ? '.' : ''}${key}`;\r\n this.notify(fullPath, undefined, oldValue);\r\n this.queueUpdate(fullPath, undefined);\r\n \r\n return result;\r\n },\r\n has: (target, key) => {\r\n if (key === '__raw__' || \r\n key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive ||\r\n key === '__parent__' ||\r\n key === '__path__' ||\r\n key === '__isReactive__') {\r\n return true;\r\n }\r\n return key in target;\r\n },\r\n ownKeys: (target) => {\r\n return Reflect.ownKeys(target).filter(key => \r\n key !== REACTIVE_SYMBOLS.parent && \r\n key !== REACTIVE_SYMBOLS.path && \r\n key !== REACTIVE_SYMBOLS.isReactive\r\n );\r\n },\r\n getOwnPropertyDescriptor: (target, key) => {\r\n if (key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive) {\r\n return {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: target[key]\r\n };\r\n }\r\n return Reflect.getOwnPropertyDescriptor(target, key);\r\n }\r\n };\r\n \r\n const proxy = new Proxy(obj, handler);\r\n obj[REACTIVE_SYMBOLS.parent] = obj;\r\n obj[REACTIVE_SYMBOLS.path] = parentKey;\r\n obj[REACTIVE_SYMBOLS.isReactive] = true;\r\n this._proxyCache.set(obj, proxy);\r\n \r\n Object.keys(obj).forEach(key => {\r\n if (obj[key] && typeof obj[key] === 'object' && !Array.isArray(obj[key])) {\r\n obj[key] = this.wrapReactive(obj[key], `${parentKey}${parentKey ? '.' : ''}${key}`);\r\n }\r\n });\r\n \r\n return proxy;\r\n }\r\n\r\n resolvePath(target, key) {\r\n if (target[REACTIVE_SYMBOLS.path]) {\r\n return `${target[REACTIVE_SYMBOLS.path]}.${key}`;\r\n }\r\n return key;\r\n }\r\n\r\n queueUpdate(key, value) {\r\n this.updateQueue.set(key, value);\r\n \r\n if (!this.isProcessing) {\r\n this.isProcessing = true;\r\n requestAnimationFrame(() => {\r\n this.processQueue();\r\n });\r\n }\r\n }\r\n\r\n processQueue() {\r\n const updatedKeys = new Set();\r\n \r\n this.updateQueue.forEach((value, key) => {\r\n updatedKeys.add(key);\r\n this.updateElementsDirect(key, value);\r\n \r\n const subKeys = this.pathTrie.getSubKeys(key);\r\n subKeys.forEach(subKey => {\r\n if (!updatedKeys.has(subKey)) {\r\n const subValue = this.get(subKey);\r\n this.updateElementsDirect(subKey, subValue);\r\n updatedKeys.add(subKey);\r\n }\r\n });\r\n });\r\n \r\n this.updateQueue.clear();\r\n this.processComputed();\r\n this.isProcessing = false;\r\n }\r\n\r\n updateElementsDirect(key, value) {\r\n if (this.elements[key]) {\r\n this.elements[key].forEach(element => {\r\n this.updateElement(element, value);\r\n });\r\n }\r\n }\r\n\r\n processComputed() {\r\n const computedKeys = Object.keys(this.computedProperties);\r\n \r\n computedKeys.forEach(name => {\r\n const prop = this.computedProperties[name];\r\n const depsChanged = prop.deps.some(dep => {\r\n return this.updateQueue.has(dep) || \r\n this.pathTrie.getSubKeys(dep).some(k => this.updateQueue.has(k));\r\n });\r\n \r\n if (depsChanged) {\r\n this.updateComputedProperty(name);\r\n }\r\n });\r\n }\r\n\r\n set(key, value, silent = false) {\r\n const oldValue = this.get(key);\r\n \r\n if (typeof key === 'object') {\r\n Object.assign(this.rawData, key);\r\n Object.keys(key).forEach(k => {\r\n if (!silent) {\r\n this.notify(k, key[k], oldValue?.[k]);\r\n this.queueUpdate(k, key[k]);\r\n }\r\n });\r\n } else {\r\n if (key.includes('.')) {\r\n this.setNested(key, value);\r\n } else {\r\n this.rawData[key] = value;\r\n }\r\n \r\n if (!silent) {\r\n this.notify(key, value, oldValue);\r\n this.queueUpdate(key, value);\r\n }\r\n }\r\n \r\n if (!silent) {\r\n this.processComputed();\r\n }\r\n }\r\n\r\n get(key) {\r\n if (!key) return undefined;\r\n if (key.includes('.')) {\r\n return this.getNested(key);\r\n }\r\n return this.rawData[key];\r\n }\r\n\r\n getNested(path) {\r\n if (!path) return undefined;\r\n return path.split('.').reduce((obj, key) => obj?.[key], this.rawData);\r\n }\r\n\r\n setNested(path, value) {\r\n const keys = path.split('.');\r\n const lastKey = keys.pop();\r\n const parent = keys.reduce((obj, key) => {\r\n if (!obj[key]) obj[key] = {};\r\n return obj[key];\r\n }, this.rawData);\r\n \r\n const oldValue = parent[lastKey];\r\n parent[lastKey] = value;\r\n this.notify(path, value, oldValue);\r\n this.queueUpdate(path, value);\r\n }\r\n\r\n observe(key, callback) {\r\n if (!this.observers[key]) {\r\n this.observers[key] = [];\r\n }\r\n this.observers[key].push(callback);\r\n }\r\n\r\n unobserve(key, callback) {\r\n if (this.observers[key]) {\r\n this.observers[key] = this.observers[key].filter(cb => cb !== callback);\r\n }\r\n }\r\n\r\n notify(key, value, oldValue) {\r\n if (this.observers[key]) {\r\n this.observers[key].forEach(callback => {\r\n try {\r\n callback(value, oldValue);\r\n } catch (e) {\r\n console.error(`Observer error for ${key}:`, e);\r\n }\r\n });\r\n }\r\n \r\n this.observers['*']?.forEach(callback => {\r\n try {\r\n callback(key, value, oldValue);\r\n } catch (e) {\r\n console.error('Wildcard observer error:', e);\r\n }\r\n });\r\n }\r\n\r\n updateElement(element, value) {\r\n const binding = element.getAttribute('data-bind');\r\n if (!binding) return;\r\n\r\n const bindings = binding.split('|');\r\n \r\n bindings.forEach(b => {\r\n const parts = b.split(':');\r\n const type = parts[0].trim();\r\n const target = parts[1]?.trim();\r\n\r\n switch (type) {\r\n case 'text':\r\n if (element.textContent !== String(value ?? '')) {\r\n element.textContent = value ?? '';\r\n }\r\n break;\r\n case 'html':\r\n if (element.innerHTML !== String(value ?? '')) {\r\n element.innerHTML = value ?? '';\r\n }\r\n break;\r\n case 'value':\r\n if (element.type === 'checkbox') {\r\n if (element.checked !== !!value) {\r\n element.checked = !!value;\r\n }\r\n } else if (element.value !== String(value ?? '')) {\r\n element.value = value ?? '';\r\n }\r\n break;\r\n case 'checked':\r\n if (element.checked !== !!value) {\r\n element.checked = !!value;\r\n }\r\n break;\r\n case 'disabled':\r\n if (element.disabled !== !!value) {\r\n element.disabled = !!value;\r\n }\r\n break;\r\n case 'hidden':\r\n const display = value ? 'none' : '';\r\n if (element.style.display !== display) {\r\n element.style.display = display;\r\n }\r\n break;\r\n case 'class':\r\n if (target) {\r\n if (value) {\r\n element.classList.add(target);\r\n } else {\r\n element.classList.remove(target);\r\n }\r\n }\r\n break;\r\n case 'style':\r\n if (target && element.style[target] !== String(value ?? '')) {\r\n element.style[target] = value ?? '';\r\n }\r\n break;\r\n case 'attr':\r\n if (target) {\r\n const current = element.getAttribute(target);\r\n if (current !== String(value ?? '')) {\r\n element.setAttribute(target, value ?? '');\r\n }\r\n }\r\n break;\r\n case 'src':\r\n if (element.src !== String(value ?? '')) {\r\n element.src = value ?? '';\r\n }\r\n break;\r\n case 'href':\r\n if (element.href !== String(value ?? '')) {\r\n element.href = value ?? '';\r\n }\r\n break;\r\n case 'placeholder':\r\n if (element.placeholder !== String(value ?? '')) {\r\n element.placeholder = value ?? '';\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n\r\n computed(name, deps, callback) {\r\n this.computedProperties[name] = { deps, callback };\r\n \r\n deps.forEach(dep => {\r\n this.pathTrie.insert(dep);\r\n });\r\n \r\n this.updateComputedProperty(name);\r\n }\r\n\r\n updateComputedProperty(name) {\r\n const prop = this.computedProperties[name];\r\n if (!prop) return;\r\n \r\n try {\r\n const values = prop.deps.map(dep => this.get(dep));\r\n const result = prop.callback(...values);\r\n this.set(name, result, true);\r\n } catch (e) {\r\n console.error(`Computed error for ${name}:`, e);\r\n }\r\n }\r\n\r\n load(data) {\r\n Object.keys(data).forEach(key => {\r\n if (data[key] && typeof data[key] === 'object' && !Array.isArray(data[key])) {\r\n this.rawData[key] = this.wrapReactive(data[key], key);\r\n } else {\r\n this.rawData[key] = data[key];\r\n }\r\n this.queueUpdate(key, this.rawData[key]);\r\n });\r\n \r\n this.processComputed();\r\n }\r\n\r\n reset() {\r\n this.rawData = {};\r\n this.observers = {};\r\n this.elements = {};\r\n this.computedProperties = {};\r\n this.pathTrie = new PathTrie();\r\n this.updateQueue.clear();\r\n this.snapshots = [];\r\n this.createReactiveData();\r\n this.bind();\r\n }\r\n\r\n persist(key, options = {}) {\r\n const {\r\n storage: storageType = 'local',\r\n debounce = 0,\r\n version = 1,\r\n encrypt = false,\r\n encryptionKey = null\r\n } = options;\r\n\r\n const storage = storageType === 'session' ? sessionStorage : localStorage;\r\n \r\n this.persistedKeys.set(key, { \r\n storage, \r\n debounce, \r\n timeout: null,\r\n version,\r\n encrypt,\r\n encryptionKey\r\n });\r\n \r\n const value = this.get(key);\r\n if (value !== undefined) {\r\n this._persistSave(key, value, storage, { version, encrypt, encryptionKey });\r\n }\r\n \r\n this.observe(key, (newValue) => {\r\n const config = this.persistedKeys.get(key);\r\n if (!config) return;\r\n \r\n if (config.debounce > 0) {\r\n if (config.timeout) clearTimeout(config.timeout);\r\n config.timeout = setTimeout(() => {\r\n this._persistSave(key, newValue, config.storage, { \r\n version: config.version, \r\n encrypt: config.encrypt, \r\n encryptionKey: config.encryptionKey \r\n });\r\n }, config.debounce);\r\n } else {\r\n this._persistSave(key, newValue, config.storage, { \r\n version: config.version, \r\n encrypt: config.encrypt, \r\n encryptionKey: config.encryptionKey \r\n });\r\n }\r\n });\r\n }\r\n\r\n _persistSave(key, value, storage, options = {}) {\r\n try {\r\n const { version = 1, encrypt = false, encryptionKey = null } = options;\r\n \r\n const dataToStore = {\r\n value,\r\n version,\r\n timestamp: Date.now()\r\n };\r\n \r\n let serialized = JSON.stringify(dataToStore);\r\n \r\n if (encrypt && encryptionKey) {\r\n serialized = this._encrypt(serialized, encryptionKey);\r\n }\r\n \r\n this._ensureStorageCapacity(storage);\r\n storage.setItem(`kupola:${key}`, serialized);\r\n } catch (e) {\r\n console.warn(`Failed to persist key ${key}:`, e);\r\n \r\n if (e.name === 'QuotaExceededError' && storage === localStorage) {\r\n console.warn(`localStorage quota exceeded, trying sessionStorage for key ${key}`);\r\n try {\r\n sessionStorage.setItem(`kupola:${key}`, JSON.stringify({ value, version: 1 }));\r\n } catch (e2) {\r\n console.warn(`sessionStorage also failed for key ${key}:`, e2);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _ensureStorageCapacity(storage) {\r\n try {\r\n const testKey = `kupola:__storage_test__`;\r\n storage.setItem(testKey, 'test');\r\n storage.removeItem(testKey);\r\n } catch (e) {\r\n if (e.name === 'QuotaExceededError') {\r\n this._cleanupOldStorage(storage);\r\n }\r\n }\r\n }\r\n\r\n _cleanupOldStorage(storage) {\r\n const now = Date.now();\r\n const maxAge = 30 * 24 * 60 * 60 * 1000;\r\n \r\n for (let i = 0; i < storage.length; i++) {\r\n const key = storage.key(i);\r\n if (key?.startsWith('kupola:')) {\r\n try {\r\n const data = JSON.parse(storage.getItem(key));\r\n if (data.timestamp && now - data.timestamp > maxAge) {\r\n storage.removeItem(key);\r\n }\r\n } catch (e) {\r\n storage.removeItem(key);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _encrypt(text, key) {\r\n if (!window.CryptoJS) {\r\n console.warn('CryptoJS not available, encryption skipped');\r\n return text;\r\n }\r\n return window.CryptoJS.AES.encrypt(text, key).toString();\r\n }\r\n\r\n _decrypt(ciphertext, key) {\r\n if (!window.CryptoJS) {\r\n console.warn('CryptoJS not available, decryption skipped');\r\n return ciphertext;\r\n }\r\n try {\r\n const bytes = window.CryptoJS.AES.decrypt(ciphertext, key);\r\n return bytes.toString(window.CryptoJS.enc.Utf8);\r\n } catch (e) {\r\n console.warn('Decryption failed:', e);\r\n return ciphertext;\r\n }\r\n }\r\n\r\n unpersist(key) {\r\n const config = this.persistedKeys.get(key);\r\n if (config) {\r\n if (config.timeout) clearTimeout(config.timeout);\r\n config.storage.removeItem(`kupola:${key}`);\r\n this.persistedKeys.delete(key);\r\n }\r\n }\r\n\r\n loadPersisted(options = {}) {\r\n const persisted = {};\r\n const { encryptionKey = null } = options;\r\n \r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key?.startsWith('kupola:')) {\r\n const dataKey = key.replace('kupola:', '');\r\n try {\r\n const stored = localStorage.getItem(key);\r\n let parsed;\r\n \r\n if (encryptionKey) {\r\n const decrypted = this._decrypt(stored, encryptionKey);\r\n parsed = JSON.parse(decrypted);\r\n } else {\r\n parsed = JSON.parse(stored);\r\n }\r\n \r\n if (parsed.version !== undefined && parsed.version !== options.version) {\r\n console.debug(`Skipping outdated data for ${dataKey} (version ${parsed.version})`);\r\n continue;\r\n }\r\n \r\n persisted[dataKey] = parsed.value !== undefined ? parsed.value : parsed;\r\n } catch (e) {\r\n console.warn(`Failed to load persisted key ${dataKey}:`, e);\r\n }\r\n }\r\n }\r\n \r\n for (let i = 0; i < sessionStorage.length; i++) {\r\n const key = sessionStorage.key(i);\r\n if (key?.startsWith('kupola:')) {\r\n const dataKey = key.replace('kupola:', '');\r\n try {\r\n const stored = sessionStorage.getItem(key);\r\n let parsed;\r\n \r\n if (encryptionKey) {\r\n const decrypted = this._decrypt(stored, encryptionKey);\r\n parsed = JSON.parse(decrypted);\r\n } else {\r\n parsed = JSON.parse(stored);\r\n }\r\n \r\n if (parsed.version !== undefined && parsed.version !== options.version) {\r\n console.debug(`Skipping outdated data for ${dataKey} (version ${parsed.version})`);\r\n continue;\r\n }\r\n \r\n persisted[dataKey] = parsed.value !== undefined ? parsed.value : parsed;\r\n } catch (e) {}\r\n }\r\n }\r\n \r\n if (Object.keys(persisted).length > 0) {\r\n this.load(persisted);\r\n }\r\n \r\n return persisted;\r\n }\r\n\r\n _clone(data) {\r\n if (typeof structuredClone === 'function') {\r\n try {\r\n return structuredClone(data);\r\n } catch (e) {\r\n console.warn('structuredClone failed, falling back to JSON:', e);\r\n }\r\n }\r\n return JSON.parse(JSON.stringify(data));\r\n }\r\n\r\n snapshot() {\r\n const snapshot = this._clone(this.rawData);\r\n this.snapshots.push(snapshot);\r\n if (this.snapshots.length > this.snapshotLimit) {\r\n this.snapshots.shift();\r\n }\r\n return this.snapshots.length - 1;\r\n }\r\n\r\n rollback(index = -1) {\r\n if (this.snapshots.length === 0) return false;\r\n \r\n const snapshotIndex = index >= 0 ? index : this.snapshots.length - 1;\r\n const snapshot = this.snapshots[snapshotIndex];\r\n \r\n if (!snapshot) return false;\r\n \r\n this.rawData = this._clone(snapshot);\r\n this.createReactiveData();\r\n \r\n Object.keys(this.rawData).forEach(key => {\r\n this.queueUpdate(key, this.rawData[key]);\r\n });\r\n \r\n this.processComputed();\r\n return true;\r\n }\r\n\r\n getSnapshotCount() {\r\n return this.snapshots.length;\r\n }\r\n\r\n clearSnapshots() {\r\n this.snapshots = [];\r\n }\r\n\r\n serializeForm(formElement) {\r\n const data = {};\r\n \r\n formElement.querySelectorAll('input, select, textarea').forEach(element => {\r\n const name = element.getAttribute('data-bind');\r\n if (!name) return;\r\n \r\n const parts = name.split(':');\r\n const key = parts[1]?.trim();\r\n if (!key) return;\r\n \r\n if (element.type === 'checkbox') {\r\n if (!data[key]) data[key] = [];\r\n if (element.checked) {\r\n data[key].push(element.value);\r\n }\r\n } else if (element.type === 'radio') {\r\n if (element.checked) {\r\n data[key] = element.value;\r\n }\r\n } else {\r\n data[key] = element.value;\r\n }\r\n });\r\n \r\n return data;\r\n }\r\n\r\n fillForm(formElement, data) {\r\n Object.keys(data).forEach(key => {\r\n formElement.querySelectorAll('[data-bind*=\":' + key + '\"]').forEach(element => {\r\n if (element.type === 'checkbox') {\r\n element.checked = Array.isArray(data[key]) \r\n ? data[key].includes(element.value) \r\n : !!data[key];\r\n } else if (element.type === 'radio') {\r\n element.checked = element.value === data[key];\r\n } else {\r\n element.value = data[key] ?? '';\r\n }\r\n });\r\n });\r\n }\r\n\r\n createReactive(target, path = '') {\r\n if (target[REACTIVE_SYMBOLS.isReactive]) return target;\r\n \r\n if (this._proxyCache.has(target)) {\r\n return this._proxyCache.get(target);\r\n }\r\n \r\n const handler = {\r\n get: (target, key, receiver) => {\r\n if (key === '__raw__') return target;\r\n if (key === REACTIVE_SYMBOLS.parent || key === '__parent__') return target[REACTIVE_SYMBOLS.parent];\r\n if (key === REACTIVE_SYMBOLS.path || key === '__path__') return target[REACTIVE_SYMBOLS.path];\r\n if (key === REACTIVE_SYMBOLS.isReactive || key === '__isReactive__') return true;\r\n \r\n const result = Reflect.get(target, key, receiver);\r\n if (result && typeof result === 'object' && !Array.isArray(result)) {\r\n return this.wrapReactive(result, `${target[REACTIVE_SYMBOLS.path]}${target[REACTIVE_SYMBOLS.path] ? '.' : ''}${key}`);\r\n }\r\n return result;\r\n },\r\n set: (target, key, value, receiver) => {\r\n if (key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive ||\r\n key === '__parent__' ||\r\n key === '__path__' ||\r\n key === '__isReactive__') {\r\n return true;\r\n }\r\n \r\n const oldValue = Reflect.get(target, key, receiver);\r\n const result = Reflect.set(target, key, value, receiver);\r\n \r\n const fullPath = `${target[REACTIVE_SYMBOLS.path]}${target[REACTIVE_SYMBOLS.path] ? '.' : ''}${key}`;\r\n this.notify(fullPath, value, oldValue);\r\n this.queueUpdate(fullPath, value);\r\n \r\n return result;\r\n },\r\n deleteProperty: (target, key) => {\r\n if (key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive) {\r\n return false;\r\n }\r\n \r\n const oldValue = Reflect.get(target, key);\r\n const result = Reflect.deleteProperty(target, key);\r\n \r\n const fullPath = `${target[REACTIVE_SYMBOLS.path]}${target[REACTIVE_SYMBOLS.path] ? '.' : ''}${key}`;\r\n this.notify(fullPath, undefined, oldValue);\r\n this.queueUpdate(fullPath, undefined);\r\n \r\n return result;\r\n },\r\n has: (target, key) => {\r\n if (key === '__raw__' || \r\n key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive ||\r\n key === '__parent__' ||\r\n key === '__path__' ||\r\n key === '__isReactive__') {\r\n return true;\r\n }\r\n return key in target;\r\n },\r\n ownKeys: (target) => {\r\n return Reflect.ownKeys(target).filter(key => \r\n key !== REACTIVE_SYMBOLS.parent && \r\n key !== REACTIVE_SYMBOLS.path && \r\n key !== REACTIVE_SYMBOLS.isReactive\r\n );\r\n },\r\n getOwnPropertyDescriptor: (target, key) => {\r\n if (key === REACTIVE_SYMBOLS.parent || \r\n key === REACTIVE_SYMBOLS.path || \r\n key === REACTIVE_SYMBOLS.isReactive) {\r\n return {\r\n configurable: false,\r\n enumerable: false,\r\n writable: false,\r\n value: target[key]\r\n };\r\n }\r\n return Reflect.getOwnPropertyDescriptor(target, key);\r\n }\r\n };\r\n \r\n const proxy = new Proxy(target, handler);\r\n target[REACTIVE_SYMBOLS.parent] = target;\r\n target[REACTIVE_SYMBOLS.path] = path;\r\n target[REACTIVE_SYMBOLS.isReactive] = true;\r\n this._proxyCache.set(target, proxy);\r\n \r\n Object.keys(target).forEach(key => {\r\n if (target[key] && typeof target[key] === 'object' && !Array.isArray(target[key])) {\r\n target[key] = this.wrapReactive(target[key], `${path}${path ? '.' : ''}${key}`);\r\n }\r\n });\r\n \r\n return proxy;\r\n }\r\n\r\n bind() {\r\n document.querySelectorAll('[data-bind]').forEach(element => {\r\n this._bindElement(element);\r\n });\r\n \r\n if (!this._mutationObserver) {\r\n this._mutationObserver = new MutationObserver((mutations) => {\r\n mutations.forEach(mutation => {\r\n mutation.addedNodes.forEach(node => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const bindElements = node.querySelectorAll('[data-bind]');\r\n bindElements.forEach(element => this._bindElement(element));\r\n if (node.hasAttribute && node.hasAttribute('data-bind')) {\r\n this._bindElement(node);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n \r\n this._mutationObserver.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n }\r\n\r\n _bindElement(element) {\r\n const binding = element.getAttribute('data-bind');\r\n const parts = binding.split(':');\r\n const typePart = parts[0].split('|')[0].trim();\r\n const key = parts[1]?.trim();\r\n \r\n if (!key) return;\r\n \r\n this.pathTrie.insert(key);\r\n \r\n if (!this.elements[key]) {\r\n this.elements[key] = [];\r\n }\r\n \r\n if (!this.elements[key].includes(element)) {\r\n this.elements[key].push(element);\r\n }\r\n \r\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {\r\n const existingHandler = element.__kupolaBindHandler;\r\n if (existingHandler) {\r\n element.removeEventListener('input', existingHandler);\r\n }\r\n \r\n const handler = () => {\r\n const value = element.type === 'checkbox' ? element.checked : element.value;\r\n if (key.includes('.')) {\r\n this.setNested(key, value);\r\n } else {\r\n this.set(key, value);\r\n }\r\n };\r\n \r\n element.__kupolaBindHandler = handler;\r\n element.addEventListener('input', handler);\r\n }\r\n \r\n if (this.rawData[key] !== undefined) {\r\n this.updateElement(element, this.rawData[key]);\r\n }\r\n }\r\n\r\n destroy() {\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n this._mutationObserver = null;\r\n }\r\n \r\n Object.values(this.elements).forEach(elements => {\r\n elements.forEach(element => {\r\n const handler = element.__kupolaBindHandler;\r\n if (handler) {\r\n element.removeEventListener('input', handler);\r\n delete element.__kupolaBindHandler;\r\n }\r\n });\r\n });\r\n \r\n this.persistedKeys.forEach((config, key) => {\r\n if (config.timeout) clearTimeout(config.timeout);\r\n });\r\n this.persistedKeys.clear();\r\n \r\n this.rawData = {};\r\n this.observers = {};\r\n this.elements = {};\r\n this.computedProperties = {};\r\n this.pathTrie = new PathTrie();\r\n this.updateQueue.clear();\r\n this.snapshots = [];\r\n }\r\n}\r\n\r\nclass KupolaStore {\r\n constructor(name, options = {}) {\r\n this.name = name;\r\n this._stateKey = `__store_${name}__`;\r\n \r\n const initialState = options.state ? options.state() : {};\r\n this.getters = options.getters || {};\r\n this.actions = options.actions || {};\r\n this.mutations = options.mutations || {};\r\n \r\n this.observers = {};\r\n \r\n if (window.kupolaData) {\r\n window.kupolaData.set(this._stateKey, initialState);\r\n this.state = window.kupolaData.data?.[this._stateKey] || \r\n window.kupolaData.createReactive(initialState, this._stateKey);\r\n \r\n window.kupolaData.observe(this._stateKey, (newState) => {\r\n this.notify(newState);\r\n });\r\n } else {\r\n this.state = initialState;\r\n }\r\n \r\n this._bindGetters();\r\n this._bindActions();\r\n }\r\n\r\n _bindGetters() {\r\n Object.keys(this.getters).forEach(name => {\r\n Object.defineProperty(this, name, {\r\n get: () => this.getters[name](this.state),\r\n enumerable: true\r\n });\r\n });\r\n }\r\n\r\n _bindActions() {\r\n Object.keys(this.actions).forEach(name => {\r\n this[name] = (...args) => {\r\n return this.actions[name]({\r\n state: this.state,\r\n commit: this.commit.bind(this),\r\n dispatch: this.dispatch.bind(this),\r\n getters: this\r\n }, ...args);\r\n };\r\n });\r\n }\r\n\r\n commit(type, payload) {\r\n const mutation = this.mutations[type];\r\n if (!mutation) {\r\n console.warn(`Mutation ${type} not found in store ${this.name}`);\r\n return;\r\n }\r\n \r\n mutation(this.state, payload);\r\n }\r\n\r\n dispatch(type, payload) {\r\n const action = this.actions[type];\r\n if (!action) {\r\n console.warn(`Action ${type} not found in store ${this.name}`);\r\n return;\r\n }\r\n \r\n return action({\r\n state: this.state,\r\n commit: this.commit.bind(this),\r\n dispatch: this.dispatch.bind(this),\r\n getters: this\r\n }, payload);\r\n }\r\n\r\n observe(callback) {\r\n if (!this.observers['*']) {\r\n this.observers['*'] = [];\r\n }\r\n this.observers['*'].push(callback);\r\n return callback;\r\n }\r\n\r\n unobserve(callback) {\r\n if (this.observers['*']) {\r\n this.observers['*'] = this.observers['*'].filter(cb => cb !== callback);\r\n }\r\n }\r\n\r\n notify(newState) {\r\n if (this.observers['*']) {\r\n this.observers['*'].forEach(callback => {\r\n try {\r\n callback(newState);\r\n } catch (e) {\r\n console.error(`Observer error for store ${this.name}:`, e);\r\n }\r\n });\r\n }\r\n \r\n if (window.kupolaData) {\r\n window.kupolaData.set(this.name, newState);\r\n }\r\n }\r\n\r\n toJSON() {\r\n return {\r\n name: this.name,\r\n state: this.state,\r\n getters: Object.keys(this.getters).reduce((acc, name) => {\r\n acc[name] = this[name];\r\n return acc;\r\n }, {})\r\n };\r\n }\r\n}\r\n\r\nclass KupolaStoreManager {\r\n constructor() {\r\n this.stores = new Map();\r\n }\r\n\r\n createStore(name, options) {\r\n const store = new KupolaStore(name, options);\r\n this.stores.set(name, store);\r\n return store;\r\n }\r\n\r\n getStore(name) {\r\n return this.stores.get(name);\r\n }\r\n\r\n registerStore(store) {\r\n if (store instanceof KupolaStore) {\r\n this.stores.set(store.name, store);\r\n }\r\n }\r\n\r\n dispose() {\r\n this.stores.clear();\r\n }\r\n}\r\n\r\nclass KupolaEventBus {\r\n constructor() {\r\n this.events = {};\r\n this.delegatedEvents = {};\r\n this.eventListeners = {};\r\n }\r\n\r\n on(eventName, callback) {\r\n if (!this.events[eventName]) {\r\n this.events[eventName] = [];\r\n }\r\n this.events[eventName].push(callback);\r\n return callback;\r\n }\r\n\r\n off(eventName, callback) {\r\n if (this.events[eventName]) {\r\n this.events[eventName] = this.events[eventName].filter(cb => cb !== callback);\r\n }\r\n }\r\n\r\n emit(eventName, data) {\r\n if (this.events[eventName]) {\r\n this.events[eventName].forEach(callback => {\r\n try {\r\n callback(data);\r\n } catch (e) {\r\n console.error(`Error in event handler for ${eventName}:`, e);\r\n }\r\n });\r\n }\r\n \r\n this.events['*']?.forEach(callback => {\r\n try {\r\n callback(eventName, data);\r\n } catch (e) {\r\n console.error(`Error in wildcard event handler:`, e);\r\n }\r\n });\r\n }\r\n\r\n once(eventName, callback) {\r\n const onceCallback = (data) => {\r\n callback(data);\r\n this.off(eventName, onceCallback);\r\n };\r\n this.on(eventName, onceCallback);\r\n return onceCallback;\r\n }\r\n\r\n delegate(selector, eventName, callback) {\r\n if (!this.delegatedEvents[eventName]) {\r\n this.delegatedEvents[eventName] = [];\r\n \r\n const listener = (e) => {\r\n this.delegatedEvents[eventName].forEach(({ selector: sel, cb }) => {\r\n if (e.target.matches(sel) || e.target.closest(sel)) {\r\n cb(e);\r\n }\r\n });\r\n };\r\n \r\n document.addEventListener(eventName, listener);\r\n this.eventListeners[eventName] = listener;\r\n }\r\n \r\n this.delegatedEvents[eventName].push({ selector, cb: callback });\r\n return callback;\r\n }\r\n\r\n undelegate(selector, eventName) {\r\n if (this.delegatedEvents[eventName]) {\r\n this.delegatedEvents[eventName] = this.delegatedEvents[eventName].filter(\r\n item => item.selector !== selector\r\n );\r\n \r\n if (this.delegatedEvents[eventName].length === 0) {\r\n const listener = this.eventListeners[eventName];\r\n if (listener) {\r\n document.removeEventListener(eventName, listener);\r\n delete this.eventListeners[eventName];\r\n }\r\n delete this.delegatedEvents[eventName];\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n Object.entries(this.eventListeners).forEach(([eventName, listener]) => {\r\n document.removeEventListener(eventName, listener);\r\n });\r\n \r\n this.events = {};\r\n this.delegatedEvents = {};\r\n this.eventListeners = {};\r\n }\r\n}\r\n\r\nconst kupolaData = new KupolaDataBind();\r\nconst kupolaEvents = new KupolaEventBus();\r\nconst kupolaStoreManager = new KupolaStoreManager();\r\n\r\nfunction createStore(name, options) {\r\n return kupolaStoreManager.createStore(name, options);\r\n}\r\n\r\nfunction getStore(name) {\r\n return kupolaStoreManager.getStore(name);\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n kupolaData.loadPersisted();\r\n kupolaData.bind();\r\n});\r\n\r\nwindow.KupolaDataBind = KupolaDataBind;\r\nwindow.KupolaEventBus = KupolaEventBus;\r\nwindow.KupolaStore = KupolaStore;\r\nwindow.KupolaStoreManager = KupolaStoreManager;\r\nwindow.kupolaData = kupolaData;\r\nwindow.kupolaEvents = kupolaEvents;\r\nwindow.kupolaStoreManager = kupolaStoreManager;\r\nwindow.createStore = createStore;\r\nwindow.getStore = getStore;\r\n","const THEME_KEY = 'kupola-theme';\r\nconst BRAND_KEY = 'kupola-brand';\r\n\r\nconst BRAND_OPTIONS = [\r\n { id: 'green', name: '翠绿', color: '#32F08C' },\r\n { id: 'xionghuang', name: '雄黄', color: '#FF9900' },\r\n { id: 'jianghuang', name: '姜黄', color: '#E2C027' },\r\n { id: 'lanlv', name: '蓝绿', color: '#12A182' },\r\n { id: 'kongquelan', name: '孔雀蓝', color: '#0EB0C9' },\r\n { id: 'meiguizi', name: '玫瑰紫', color: '#BA2F7B' },\r\n { id: 'shihong', name: '柿红', color: '#F2481B' },\r\n { id: 'quhong', name: '紫云', color: '#B1A6CC' },\r\n { id: 'shanchahong', name: '山茶红', color: '#F05A46' },\r\n { id: 'zengqing', name: '曾青', color: '#535164' },\r\n { id: 'roulan', name: '柔蓝', color: '#106898' }\r\n];\r\n\r\nfunction getTheme() {\r\n return localStorage.getItem(THEME_KEY) || 'dark';\r\n}\r\n\r\nfunction setTheme(theme) {\r\n if (theme !== 'dark' && theme !== 'light') return;\r\n \r\n document.documentElement.setAttribute('data-theme', theme);\r\n localStorage.setItem(THEME_KEY, theme);\r\n \r\n const toggleBtn = document.querySelector('[data-theme-toggle]');\r\n if (toggleBtn) {\r\n toggleBtn.setAttribute('data-current-theme', theme);\r\n const icon = toggleBtn.querySelector('.theme-icon');\r\n if (icon) {\r\n const iconPath = icon.src.substring(0, icon.src.lastIndexOf('/') + 1);\r\n icon.src = theme === 'dark' \r\n ? iconPath + 'sun.svg' \r\n : iconPath + 'moon.svg';\r\n }\r\n }\r\n}\r\n\r\nfunction getBrand() {\r\n return localStorage.getItem(BRAND_KEY) || 'zengqing';\r\n}\r\n\r\nfunction setBrand(brandId) {\r\n const brand = BRAND_OPTIONS.find(b => b.id === brandId);\r\n if (!brand) return;\r\n \r\n document.documentElement.setAttribute('data-brand', brandId);\r\n localStorage.setItem(BRAND_KEY, brandId);\r\n \r\n const brandToggle = document.querySelector('[data-brand-toggle]');\r\n if (brandToggle) {\r\n brandToggle.setAttribute('data-current-brand', brandId);\r\n const brandIcon = brandToggle.querySelector('.brand-icon');\r\n if (brandIcon) {\r\n brandIcon.style.backgroundColor = brand.color;\r\n }\r\n const brandName = brandToggle.querySelector('.brand-name');\r\n if (brandName) {\r\n brandName.textContent = brand.name;\r\n }\r\n }\r\n \r\n const brandButtons = document.querySelectorAll('[data-brand-btn]');\r\n brandButtons.forEach(btn => {\r\n if (btn.getAttribute('data-brand-btn') === brandId) {\r\n btn.classList.add('is-active');\r\n } else {\r\n btn.classList.remove('is-active');\r\n }\r\n });\r\n}\r\n\r\nfunction initTheme() {\r\n \r\n const savedTheme = getTheme();\r\n setTheme(savedTheme);\r\n \r\n const savedBrand = getBrand();\r\n setBrand(savedBrand);\r\n \r\n const toggleBtn = document.querySelector('[data-theme-toggle]');\r\n if (toggleBtn) {\r\n toggleBtn.addEventListener('click', () => {\r\n const currentTheme = getTheme();\r\n const newTheme = currentTheme === 'dark' ? 'light' : 'dark';\r\n setTheme(newTheme);\r\n });\r\n }\r\n \r\n let brandPicker = document.getElementById('brand-picker');\r\n if (!brandPicker) {\r\n brandPicker = document.createElement('div');\r\n brandPicker.id = 'brand-picker';\r\n brandPicker.style.position = 'fixed';\r\n brandPicker.style.top = '64px';\r\n brandPicker.style.right = '16px';\r\n brandPicker.style.zIndex = '9998';\r\n brandPicker.style.display = 'none';\r\n brandPicker.style.padding = '12px';\r\n brandPicker.style.width = '200px';\r\n brandPicker.style.gridTemplateColumns = 'repeat(3, 1fr)';\r\n brandPicker.style.gap = '6px';\r\n brandPicker.style.backgroundColor = 'var(--bg-base-secondary)';\r\n brandPicker.style.border = '1px solid var(--border-neutral-l1)';\r\n brandPicker.style.borderRadius = '8px';\r\n brandPicker.style.boxShadow = '0 4px 20px rgba(0, 0, 0, 0.2)';\r\n brandPicker.style.overflow = 'hidden';\r\n \r\n BRAND_OPTIONS.forEach(brand => {\r\n const btn = document.createElement('button');\r\n btn.setAttribute('data-brand-btn', brand.id);\r\n btn.style.display = 'flex';\r\n btn.style.justifyContent = 'center';\r\n btn.style.alignItems = 'center';\r\n btn.style.height = '60px';\r\n btn.style.backgroundColor = brand.color;\r\n btn.style.color = ['#32F08C', '#FF9900', '#E2C027', '#0EB0C9', '#B1A6CC'].includes(brand.color) ? '#0C0C0D' : '#FFFFFF';\r\n btn.style.fontWeight = '500';\r\n btn.style.borderRadius = '4px';\r\n btn.style.border = 'none';\r\n btn.style.cursor = 'pointer';\r\n btn.style.margin = '0';\r\n btn.style.padding = '0';\r\n btn.textContent = brand.name;\r\n brandPicker.appendChild(btn);\r\n });\r\n \r\n document.body.appendChild(brandPicker);\r\n }\r\n \r\n const brandToggle = document.querySelector('[data-brand-toggle]');\r\n \r\n if (brandToggle && brandPicker) {\r\n brandToggle.onclick = function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const isHidden = brandPicker.style.display === 'none';\r\n brandPicker.style.display = isHidden ? 'grid' : 'none';\r\n \r\n if (isHidden) {\r\n setTimeout(() => {\r\n document.addEventListener('click', closeBrandPicker, true);\r\n }, 0);\r\n } else {\r\n document.removeEventListener('click', closeBrandPicker, true);\r\n }\r\n };\r\n \r\n brandPicker.onclick = function(e) {\r\n e.stopPropagation();\r\n };\r\n }\r\n \r\n function closeBrandPicker(e) {\r\n if (brandPicker && brandToggle) {\r\n if (!brandPicker.contains(e.target) && !brandToggle.contains(e.target)) {\r\n brandPicker.style.display = 'none';\r\n document.removeEventListener('click', closeBrandPicker, true);\r\n }\r\n }\r\n }\r\n \r\n const brandButtons = document.querySelectorAll('[data-brand-btn]');\r\n \r\n brandButtons.forEach(btn => {\r\n btn.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n const brandId = btn.getAttribute('data-brand-btn');\r\n setBrand(brandId);\r\n if (brandPicker) {\r\n brandPicker.style.display = 'none';\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction createThemeToggle() {\r\n const btn = document.createElement('button');\r\n btn.setAttribute('data-theme-toggle', '');\r\n btn.setAttribute('data-current-theme', getTheme());\r\n btn.className = 'ds-btn ds-btn--ghost ds-btn--sm ds-btn--icon';\r\n btn.style.position = 'fixed';\r\n btn.style.top = '16px';\r\n btn.style.right = '16px';\r\n btn.style.zIndex = '9999';\r\n \r\n const icon = document.createElement('img');\r\n icon.className = 'theme-icon';\r\n const scripts = document.getElementsByTagName('script');\r\n const currentScript = scripts[scripts.length - 1];\r\n const scriptPath = currentScript.src.substring(0, currentScript.src.lastIndexOf('/') + 1);\r\n icon.src = getTheme() === 'dark' \r\n ? scriptPath + '../icons/sun.svg' \r\n : scriptPath + '../icons/moon.svg';\r\n icon.width = 14;\r\n icon.height = 14;\r\n icon.alt = 'Toggle theme';\r\n \r\n btn.appendChild(icon);\r\n document.body.appendChild(btn);\r\n \r\n btn.addEventListener('click', () => {\r\n const currentTheme = getTheme();\r\n const newTheme = currentTheme === 'dark' ? 'light' : 'dark';\r\n setTheme(newTheme);\r\n });\r\n \r\n return btn;\r\n}\r\n\r\nfunction createBrandPicker() {\r\n const container = document.createElement('div');\r\n container.id = 'brand-picker-auto';\r\n container.style.position = 'fixed';\r\n container.style.top = '56px';\r\n container.style.right = '16px';\r\n container.style.zIndex = '9998';\r\n container.style.display = 'none';\r\n container.style.padding = '12px';\r\n container.style.width = '200px';\r\n container.style.gridTemplateColumns = 'repeat(3, 1fr)';\r\n container.style.gap = '6px';\r\n container.style.backgroundColor = 'var(--bg-base-secondary)';\r\n container.style.border = '1px solid var(--border-neutral-l1)';\r\n container.style.borderRadius = '8px';\r\n container.style.boxShadow = '0 4px 20px rgba(0, 0, 0, 0.2)';\r\n container.style.overflow = 'hidden';\r\n \r\n BRAND_OPTIONS.forEach(brand => {\r\n const btn = document.createElement('button');\r\n btn.setAttribute('data-brand-btn', brand.id);\r\n btn.style.display = 'flex';\r\n btn.style.justifyContent = 'center';\r\n btn.style.alignItems = 'center';\r\n btn.style.height = '60px';\r\n btn.style.backgroundColor = brand.color;\r\n btn.style.color = ['#32F08C', '#FF9900', '#E2C027', '#0EB0C9', '#B1A6CC'].includes(brand.color) ? '#0C0C0D' : '#FFFFFF';\r\n btn.style.fontWeight = '500';\r\n btn.style.borderRadius = '4px';\r\n btn.style.border = 'none';\r\n btn.style.cursor = 'pointer';\r\n btn.style.margin = '0';\r\n btn.style.padding = '0';\r\n btn.textContent = brand.name;\r\n container.appendChild(btn);\r\n });\r\n \r\n document.body.appendChild(container);\r\n \r\n const toggleBtn = document.createElement('button');\r\n toggleBtn.setAttribute('data-brand-toggle', '');\r\n toggleBtn.setAttribute('data-current-brand', getBrand());\r\n toggleBtn.className = 'ds-btn ds-btn--ghost ds-btn--sm';\r\n toggleBtn.style.position = 'fixed';\r\n toggleBtn.style.top = '16px';\r\n toggleBtn.style.right = '56px';\r\n toggleBtn.style.zIndex = '9999';\r\n toggleBtn.style.display = 'flex';\r\n toggleBtn.style.alignItems = 'center';\r\n toggleBtn.style.gap = '6px';\r\n \r\n const brandIcon = document.createElement('span');\r\n brandIcon.className = 'brand-icon';\r\n brandIcon.style.width = '12px';\r\n brandIcon.style.height = '12px';\r\n brandIcon.style.borderRadius = '50%';\r\n brandIcon.style.backgroundColor = BRAND_OPTIONS.find(b => b.id === getBrand()).color;\r\n \r\n const brandName = document.createElement('span');\r\n brandName.className = 'brand-name';\r\n brandName.style.fontSize = '11px';\r\n brandName.textContent = BRAND_OPTIONS.find(b => b.id === getBrand()).name;\r\n \r\n toggleBtn.appendChild(brandIcon);\r\n toggleBtn.appendChild(brandName);\r\n document.body.appendChild(toggleBtn);\r\n \r\n toggleBtn.onclick = function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n const isHidden = container.style.display === 'none';\r\n container.style.display = isHidden ? 'grid' : 'none';\r\n \r\n if (isHidden) {\r\n setTimeout(() => {\r\n document.addEventListener('click', closeBrandPickerAuto, true);\r\n }, 0);\r\n } else {\r\n document.removeEventListener('click', closeBrandPickerAuto, true);\r\n }\r\n };\r\n \r\n container.onclick = function(e) {\r\n e.stopPropagation();\r\n };\r\n \r\n function closeBrandPickerAuto(e) {\r\n if (!container.contains(e.target) && !toggleBtn.contains(e.target)) {\r\n container.style.display = 'none';\r\n document.removeEventListener('click', closeBrandPickerAuto, true);\r\n }\r\n }\r\n \r\n const brandButtons = container.querySelectorAll('[data-brand-btn]');\r\n brandButtons.forEach(btn => {\r\n btn.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n const brandId = btn.getAttribute('data-brand-btn');\r\n setBrand(brandId);\r\n container.style.display = 'none';\r\n });\r\n });\r\n \r\n return { toggleBtn, container };\r\n}\r\n\r\nfunction loadDevTools() {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const enabled = urlParams.has('dev') || urlParams.has('debug');\r\n \r\n if (!enabled) return;\r\n \r\n const themeScript = document.querySelector('script[src*=\"theme.js\"]');\r\n if (!themeScript || !themeScript.src) return;\r\n \r\n const scriptPath = themeScript.src.substring(0, themeScript.src.lastIndexOf('/') + 1);\r\n \r\n const devToolsScript = document.createElement('script');\r\n devToolsScript.src = scriptPath + 'kupola-devtools.js?v=15';\r\n devToolsScript.async = true;\r\n \r\n document.head.appendChild(devToolsScript);\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { \r\n getTheme, setTheme, initTheme, createThemeToggle,\r\n getBrand, setBrand, BRAND_OPTIONS, createBrandPicker,\r\n loadDevTools\r\n };\r\n} else {\r\n if (!window.__kupolaThemeInitialized) {\r\n window.__kupolaThemeInitialized = true;\r\n \r\n function runInit() {\r\n initTheme();\r\n loadDevTools();\r\n }\r\n \r\n if (document.readyState === 'loading') {\r\n document.addEventListener('readystatechange', function readyStateHandler() {\r\n if (document.readyState !== 'loading') {\r\n document.removeEventListener('readystatechange', readyStateHandler);\r\n runInit();\r\n }\r\n });\r\n } else {\r\n setTimeout(runInit, 0);\r\n }\r\n }\r\n}","class Dropdown {\r\n constructor(element) {\r\n this.element = element;\r\n this.trigger = element.querySelector('.ds-dropdown__trigger');\r\n this.menu = element.querySelector('.ds-dropdown__menu');\r\n this.triggerText = this.trigger ? this.trigger.querySelector('span') : null;\r\n this.scope = `dropdown-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n this._triggerClickHandler = null;\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._itemClickHandler = null;\r\n }\r\n\r\n init() {\r\n if (!this.trigger || !this.menu) return;\r\n if (this.element.__kupolaInitialized) return;\r\n\r\n this._itemClickHandler = (e) => {\r\n const item = e.currentTarget;\r\n if (this.triggerText) {\r\n this.triggerText.textContent = item.textContent.trim();\r\n }\r\n this.hideMenu();\r\n };\r\n\r\n this.menu.querySelectorAll('.ds-dropdown__item').forEach(item => {\r\n item.addEventListener('click', this._itemClickHandler);\r\n item._dropdownItemClickHandler = this._itemClickHandler;\r\n });\r\n\r\n this._triggerClickHandler = (e) => {\r\n e.stopPropagation();\r\n this.toggleMenu();\r\n };\r\n\r\n this.trigger.addEventListener('click', this._triggerClickHandler);\r\n\r\n this._documentClickHandler = (e) => {\r\n if (!this.element.contains(e.target)) {\r\n this.hideMenu();\r\n }\r\n };\r\n\r\n if (window.globalEvents) {\r\n this._documentClickListener = window.globalEvents.on(document, 'click', this._documentClickHandler, { scope: this.scope });\r\n } else {\r\n document.addEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n this.menu.style.display = 'none';\r\n this.element.__kupolaInitialized = true;\r\n }\r\n\r\n toggleMenu() {\r\n const isOpen = this.menu.style.display === 'block';\r\n this.menu.style.display = isOpen ? 'none' : 'block';\r\n this.element.classList.toggle('is-open', !isOpen);\r\n }\r\n\r\n hideMenu() {\r\n this.menu.style.display = 'none';\r\n this.element.classList.remove('is-open');\r\n }\r\n\r\n destroy() {\r\n if (!this.element.__kupolaInitialized) return;\r\n\r\n if (this.trigger && this._triggerClickHandler) {\r\n this.trigger.removeEventListener('click', this._triggerClickHandler);\r\n }\r\n\r\n if (this.menu) {\r\n this.menu.querySelectorAll('.ds-dropdown__item').forEach(item => {\r\n if (item._dropdownItemClickHandler) {\r\n item.removeEventListener('click', item._dropdownItemClickHandler);\r\n }\r\n });\r\n }\r\n\r\n if (this._documentClickListener && this._documentClickListener.unsubscribe) {\r\n this._documentClickListener.unsubscribe();\r\n } else if (this._documentClickHandler) {\r\n document.removeEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._triggerClickHandler = null;\r\n this._itemClickHandler = null;\r\n this.element.__kupolaInitialized = false;\r\n }\r\n}\r\n\r\nfunction initDropdown(element) {\r\n const dropdown = new Dropdown(element);\r\n dropdown.init();\r\n element._kupolaDropdown = dropdown;\r\n}\r\n\r\nfunction initDropdowns(root = document) {\r\n root.querySelectorAll('.ds-dropdown').forEach(dropdown => {\r\n initDropdown(dropdown);\r\n });\r\n}\r\n\r\nfunction cleanupDropdown(dropdown) {\r\n if (dropdown._kupolaDropdown) {\r\n dropdown._kupolaDropdown.destroy();\r\n dropdown._kupolaDropdown = null;\r\n }\r\n}\r\n\r\nfunction cleanupAllDropdowns() {\r\n document.querySelectorAll('.ds-dropdown').forEach(dropdown => {\r\n cleanupDropdown(dropdown);\r\n });\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('dropdown', initDropdown, cleanupDropdown);\r\n}","class Select {\r\n constructor(element) {\r\n this.element = element;\r\n this.trigger = element.querySelector('.ds-select__trigger');\r\n this.valueEl = element.querySelector('.ds-select__value') || element.querySelector('.ds-select__trigger span');\r\n this.optionsEl = element.querySelector('.ds-select__options') || element.querySelector('.ds-select__menu');\r\n this.nativeSelect = element.querySelector('select');\r\n this.icon = element.querySelector('.ds-select__icon');\r\n this.scope = `select-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n this._triggerClickHandler = null;\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._optionClickHandler = null;\r\n }\r\n\r\n init() {\r\n if (!this.trigger || !this.optionsEl) return;\r\n if (this.element.__kupolaInitialized) return;\r\n\r\n this._optionClickHandler = (e) => {\r\n const option = e.currentTarget;\r\n const value = option.getAttribute('data-value');\r\n if (this.nativeSelect) {\r\n this.nativeSelect.value = value;\r\n }\r\n this.optionsEl.querySelectorAll('.ds-select__option, .ds-select__item').forEach(o => o.classList.remove('is-selected'));\r\n option.classList.add('is-selected');\r\n this.updateValue(option.textContent.trim());\r\n this.hideOptions();\r\n if (this.nativeSelect) {\r\n this.nativeSelect.dispatchEvent(new Event('change'));\r\n }\r\n };\r\n\r\n this.optionsEl.querySelectorAll('.ds-select__option, .ds-select__item').forEach(option => {\r\n option.addEventListener('click', this._optionClickHandler);\r\n option._selectOptionClickHandler = this._optionClickHandler;\r\n });\r\n\r\n this._triggerClickHandler = (e) => {\r\n e.stopPropagation();\r\n this.showOptions();\r\n };\r\n\r\n this.trigger.addEventListener('click', this._triggerClickHandler);\r\n\r\n this._documentClickHandler = (e) => {\r\n if (!this.element.contains(e.target)) {\r\n this.hideOptions();\r\n }\r\n };\r\n\r\n if (window.globalEvents) {\r\n this._documentClickListener = window.globalEvents.on(document, 'click', this._documentClickHandler, { scope: this.scope });\r\n } else {\r\n document.addEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n this.optionsEl.style.display = 'none';\r\n this.element.__kupolaInitialized = true;\r\n }\r\n\r\n updateValue(text) {\r\n if (this.valueEl) {\r\n this.valueEl.textContent = text || this.valueEl.textContent;\r\n }\r\n }\r\n\r\n showOptions() {\r\n const isOpen = this.optionsEl.style.display === 'block';\r\n this.optionsEl.style.display = isOpen ? 'none' : 'block';\r\n if (this.icon) {\r\n this.icon.style.transform = isOpen ? 'rotate(0deg)' : 'rotate(180deg)';\r\n }\r\n this.element.classList.toggle('is-open', !isOpen);\r\n }\r\n\r\n hideOptions() {\r\n this.optionsEl.style.display = 'none';\r\n if (this.icon) {\r\n this.icon.style.transform = 'rotate(0deg)';\r\n }\r\n this.element.classList.remove('is-open');\r\n }\r\n\r\n destroy() {\r\n if (!this.element.__kupolaInitialized) return;\r\n\r\n if (this.trigger && this._triggerClickHandler) {\r\n this.trigger.removeEventListener('click', this._triggerClickHandler);\r\n }\r\n\r\n if (this.optionsEl) {\r\n this.optionsEl.querySelectorAll('.ds-select__option, .ds-select__item').forEach(option => {\r\n if (option._selectOptionClickHandler) {\r\n option.removeEventListener('click', option._selectOptionClickHandler);\r\n }\r\n });\r\n }\r\n\r\n if (this._documentClickListener && this._documentClickListener.unsubscribe) {\r\n this._documentClickListener.unsubscribe();\r\n } else if (this._documentClickHandler) {\r\n document.removeEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._triggerClickHandler = null;\r\n this._optionClickHandler = null;\r\n this.element.__kupolaInitialized = false;\r\n }\r\n}\r\n\r\nfunction initSelect(element) {\r\n const select = new Select(element);\r\n select.init();\r\n element._kupolaSelect = select;\r\n}\r\n\r\nfunction initSelects(root = document) {\r\n root.querySelectorAll('.ds-select').forEach(select => {\r\n initSelect(select);\r\n });\r\n}\r\n\r\nfunction cleanupSelect(select) {\r\n if (select._kupolaSelect) {\r\n select._kupolaSelect.destroy();\r\n select._kupolaSelect = null;\r\n }\r\n}\r\n\r\nfunction cleanupAllSelects() {\r\n document.querySelectorAll('.ds-select').forEach(select => {\r\n cleanupSelect(select);\r\n });\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('select', initSelect, cleanupSelect);\r\n}","class Datepicker {\r\n constructor(element) {\r\n this.element = element;\r\n this.input = element.querySelector('input');\r\n this.icon = element.querySelector('.ds-datepicker__icon');\r\n this.calendarEl = element.querySelector('.ds-datepicker__calendar');\r\n this.scope = `datepicker-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n this._iconClickHandler = null;\r\n this._inputClickHandler = null;\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._resizeHandler = null;\r\n this._resizeListener = null;\r\n }\r\n\r\n init() {\r\n if (!this.calendarEl) return;\r\n if (this.element.__kupolaInitialized) return;\r\n\r\n this._iconClickHandler = (e) => this.toggleCalendar(e);\r\n this._inputClickHandler = (e) => this.toggleCalendar(e);\r\n\r\n if (this.icon) {\r\n this.icon.addEventListener('click', this._iconClickHandler);\r\n }\r\n\r\n this.input.addEventListener('click', this._inputClickHandler);\r\n\r\n if (window.globalEvents) {\r\n this._documentClickListener = window.globalEvents.on(document, 'click', (e) => this.hideCalendar(e), { scope: this.scope });\r\n this._resizeListener = window.globalEvents.on(window, 'resize', () => this.resizeHandler(), { scope: this.scope });\r\n } else {\r\n document.addEventListener('click', (e) => this.hideCalendar(e));\r\n window.addEventListener('resize', () => this.resizeHandler());\r\n this._documentClickHandler = (e) => this.hideCalendar(e);\r\n this._resizeHandler = () => this.resizeHandler();\r\n }\r\n\r\n this.element.__kupolaInitialized = true;\r\n this.initCalendar();\r\n }\r\n\r\n calculatePosition() {\r\n const pickerRect = this.element.getBoundingClientRect();\r\n const calendarRect = this.calendarEl.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n \r\n const spaceBelow = viewportHeight - pickerRect.bottom;\r\n const spaceAbove = pickerRect.top;\r\n const calendarHeight = calendarRect.height || 280;\r\n \r\n if (spaceBelow >= calendarHeight) {\r\n this.calendarEl.style.top = 'calc(100% + 4px)';\r\n this.calendarEl.style.bottom = 'auto';\r\n } else if (spaceAbove >= calendarHeight) {\r\n this.calendarEl.style.top = 'auto';\r\n this.calendarEl.style.bottom = 'calc(100% + 4px)';\r\n } else {\r\n this.calendarEl.style.top = 'calc(100% + 4px)';\r\n this.calendarEl.style.bottom = 'auto';\r\n }\r\n }\r\n\r\n toggleCalendar(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n \r\n const isVisible = this.calendarEl.style.display === 'block';\r\n \r\n document.querySelectorAll('.ds-datepicker__calendar').forEach(c => {\r\n c.style.display = 'none';\r\n c.setAttribute('hidden', '');\r\n });\r\n \r\n if (!isVisible) {\r\n this.calendarEl.style.display = 'block';\r\n this.calendarEl.removeAttribute('hidden');\r\n this.calculatePosition();\r\n }\r\n }\r\n\r\n hideCalendar(e) {\r\n if (!this.element.contains(e.target)) {\r\n this.calendarEl.style.display = 'none';\r\n this.calendarEl.setAttribute('hidden', '');\r\n }\r\n }\r\n\r\n resizeHandler() {\r\n if (this.calendarEl.style.display === 'block') {\r\n this.calculatePosition();\r\n }\r\n }\r\n\r\n initCalendar() {\r\n const calendar = this.calendarEl;\r\n const input = this.input;\r\n const titleEl = calendar.querySelector('.ds-datepicker__title');\r\n const daysEl = calendar.querySelector('.ds-datepicker__days');\r\n const prevBtn = calendar.querySelector('.ds-datepicker__nav--prev');\r\n const nextBtn = calendar.querySelector('.ds-datepicker__nav--next');\r\n \r\n let currentDate = new Date();\r\n if (input.value) {\r\n const parts = input.value.split('-');\r\n if (parts.length === 3) {\r\n currentDate = new Date(parts[0], parts[1] - 1, parts[2]);\r\n }\r\n }\r\n \r\n function renderCalendar() {\r\n daysEl.querySelectorAll('.ds-datepicker__day').forEach(dayEl => {\r\n if (dayEl._dayClickHandler) {\r\n dayEl.removeEventListener('click', dayEl._dayClickHandler);\r\n }\r\n });\r\n \r\n daysEl.innerHTML = '';\r\n \r\n const year = currentDate.getFullYear();\r\n const month = currentDate.getMonth();\r\n \r\n titleEl.textContent = `${year} ${['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][month]}`;\r\n \r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n \r\n for (let i = 0; i < firstDay; i++) {\r\n const emptyDay = document.createElement('span');\r\n emptyDay.className = 'ds-datepicker__day--empty';\r\n daysEl.appendChild(emptyDay);\r\n }\r\n \r\n for (let day = 1; day <= daysInMonth; day++) {\r\n const dayEl = document.createElement('button');\r\n dayEl.className = 'ds-datepicker__day';\r\n dayEl.textContent = day;\r\n \r\n const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\r\n if (input.value === dateStr) {\r\n dayEl.classList.add('is-selected');\r\n }\r\n \r\n const today = new Date();\r\n const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\r\n if (dateStr === todayStr) {\r\n dayEl.classList.add('is-today');\r\n }\r\n \r\n const dayClickHandler = () => {\r\n input.value = dateStr;\r\n calendar.style.display = 'none';\r\n calendar.setAttribute('hidden', '');\r\n input.dispatchEvent(new Event('change'));\r\n };\r\n \r\n dayEl.addEventListener('click', dayClickHandler);\r\n dayEl._dayClickHandler = dayClickHandler;\r\n \r\n daysEl.appendChild(dayEl);\r\n }\r\n }\r\n \r\n const prevClickHandler = (e) => {\r\n e.stopPropagation();\r\n currentDate.setMonth(currentDate.getMonth() - 1);\r\n renderCalendar();\r\n };\r\n \r\n const nextClickHandler = (e) => {\r\n e.stopPropagation();\r\n currentDate.setMonth(currentDate.getMonth() + 1);\r\n renderCalendar();\r\n };\r\n \r\n if (prevBtn) {\r\n prevBtn.addEventListener('click', prevClickHandler);\r\n prevBtn._prevClickHandler = prevClickHandler;\r\n }\r\n \r\n if (nextBtn) {\r\n nextBtn.addEventListener('click', nextClickHandler);\r\n nextBtn._nextClickHandler = nextClickHandler;\r\n }\r\n \r\n calendar._calendarInitialized = true;\r\n renderCalendar();\r\n }\r\n\r\n destroy() {\r\n if (!this.element.__kupolaInitialized) return;\r\n\r\n if (this.icon && this._iconClickHandler) {\r\n this.icon.removeEventListener('click', this._iconClickHandler);\r\n }\r\n\r\n if (this.input && this._inputClickHandler) {\r\n this.input.removeEventListener('click', this._inputClickHandler);\r\n }\r\n\r\n if (this._documentClickListener && this._documentClickListener.unsubscribe) {\r\n this._documentClickListener.unsubscribe();\r\n } else if (this._documentClickHandler) {\r\n document.removeEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n if (this._resizeListener && this._resizeListener.unsubscribe) {\r\n this._resizeListener.unsubscribe();\r\n } else if (this._resizeHandler) {\r\n window.removeEventListener('resize', this._resizeHandler);\r\n }\r\n\r\n if (this.calendarEl) {\r\n const daysEl = this.calendarEl.querySelector('.ds-datepicker__days');\r\n if (daysEl) {\r\n daysEl.querySelectorAll('.ds-datepicker__day').forEach(dayEl => {\r\n if (dayEl._dayClickHandler) {\r\n dayEl.removeEventListener('click', dayEl._dayClickHandler);\r\n }\r\n });\r\n }\r\n const prevBtn = this.calendarEl.querySelector('.ds-datepicker__nav--prev');\r\n const nextBtn = this.calendarEl.querySelector('.ds-datepicker__nav--next');\r\n if (prevBtn && prevBtn._prevClickHandler) {\r\n prevBtn.removeEventListener('click', prevBtn._prevClickHandler);\r\n }\r\n if (nextBtn && nextBtn._nextClickHandler) {\r\n nextBtn.removeEventListener('click', nextBtn._nextClickHandler);\r\n }\r\n }\r\n\r\n this._documentClickHandler = null;\r\n this._resizeHandler = null;\r\n this._documentClickListener = null;\r\n this._resizeListener = null;\r\n this._iconClickHandler = null;\r\n this._inputClickHandler = null;\r\n this.element.__kupolaInitialized = false;\r\n }\r\n}\r\n\r\nfunction initDatepicker(element) {\r\n const picker = new Datepicker(element);\r\n picker.init();\r\n element._kupolaDatepicker = picker;\r\n}\r\n\r\nfunction initDatepickers(root = document) {\r\n root.querySelectorAll('.ds-datepicker').forEach(picker => {\r\n initDatepicker(picker);\r\n });\r\n}\r\n\r\nfunction cleanupDatepicker(picker) {\r\n if (picker._kupolaDatepicker) {\r\n picker._kupolaDatepicker.destroy();\r\n picker._kupolaDatepicker = null;\r\n }\r\n}\r\n\r\nfunction cleanupAllDatepickers() {\r\n document.querySelectorAll('.ds-datepicker').forEach(picker => {\r\n cleanupDatepicker(picker);\r\n });\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('datepicker', initDatepicker, cleanupDatepicker);\r\n}","class Timepicker {\r\n constructor(element) {\r\n this.element = element;\r\n this.input = element.querySelector('input');\r\n this.inputWrap = element.querySelector('.ds-timepicker__input-wrap');\r\n this.panelEl = null;\r\n this.scope = `timepicker-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n this._inputWrapClickHandler = null;\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._resizeHandler = null;\r\n this._resizeListener = null;\r\n \r\n this.selectedHour = 12;\r\n this.selectedMinute = 0;\r\n }\r\n\r\n init() {\r\n if (this.element.__kupolaInitialized) return;\r\n\r\n this._inputWrapClickHandler = (e) => {\r\n e.stopPropagation();\r\n if (this.panelEl && this.panelEl.style.display === 'block') {\r\n this.panelEl.style.display = 'none';\r\n } else {\r\n this.showTimepicker();\r\n }\r\n };\r\n\r\n this.inputWrap.addEventListener('click', this._inputWrapClickHandler);\r\n\r\n if (window.globalEvents) {\r\n this._documentClickListener = window.globalEvents.on(document, 'click', (e) => this.hideTimepicker(e), { scope: this.scope });\r\n this._resizeListener = window.globalEvents.on(window, 'resize', () => this.resizeHandler(), { scope: this.scope });\r\n } else {\r\n document.addEventListener('click', (e) => this.hideTimepicker(e));\r\n window.addEventListener('resize', () => this.resizeHandler());\r\n this._documentClickHandler = (e) => this.hideTimepicker(e);\r\n this._resizeHandler = () => this.resizeHandler();\r\n }\r\n\r\n this.element.__kupolaInitialized = true;\r\n }\r\n\r\n calculatePosition() {\r\n if (!this.panelEl) return;\r\n \r\n const pickerRect = this.element.getBoundingClientRect();\r\n const panelRect = this.panelEl.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n \r\n const spaceBelow = viewportHeight - pickerRect.bottom;\r\n const spaceAbove = pickerRect.top;\r\n const panelHeight = panelRect.height || 320;\r\n \r\n if (spaceBelow >= panelHeight) {\r\n this.panelEl.style.top = 'calc(100% + 4px)';\r\n this.panelEl.style.bottom = 'auto';\r\n } else if (spaceAbove >= panelHeight) {\r\n this.panelEl.style.top = 'auto';\r\n this.panelEl.style.bottom = 'calc(100% + 4px)';\r\n } else {\r\n this.panelEl.style.top = 'calc(100% + 4px)';\r\n this.panelEl.style.bottom = 'auto';\r\n }\r\n }\r\n\r\n showTimepicker() {\r\n if (this.panelEl) {\r\n this.panelEl.style.display = 'block';\r\n this.calculatePosition();\r\n return;\r\n }\r\n \r\n this.panelEl = document.createElement('div');\r\n this.panelEl.className = 'ds-timepicker__panel';\r\n this.panelEl.innerHTML = `\r\n <div class=\"ds-timepicker__header\">\r\n <div class=\"ds-timepicker__display\">\r\n <span class=\"ds-timepicker__display-hour\">12</span>\r\n <span class=\"ds-timepicker__separator\">:</span>\r\n <span class=\"ds-timepicker__display-minute\">00</span>\r\n </div>\r\n </div>\r\n <div class=\"ds-timepicker__body\">\r\n <div class=\"ds-timepicker__section\">\r\n <div class=\"ds-timepicker__section-label\">Hour</div>\r\n <div class=\"ds-timepicker__grid ds-timepicker__grid--hour\" data-type=\"hour\"></div>\r\n </div>\r\n <div class=\"ds-timepicker__section\">\r\n <div class=\"ds-timepicker__section-label\">Minute</div>\r\n <div class=\"ds-timepicker__grid ds-timepicker__grid--minute\" data-type=\"minute\"></div>\r\n </div>\r\n </div>\r\n `;\r\n this.element.appendChild(this.panelEl);\r\n \r\n if (this.input.value) {\r\n const timeParts = this.input.value.split(':');\r\n if (timeParts.length >= 2) {\r\n this.selectedHour = parseInt(timeParts[0]) || 0;\r\n this.selectedMinute = parseInt(timeParts[1]) || 0;\r\n }\r\n }\r\n \r\n const displayHour = this.panelEl.querySelector('.ds-timepicker__display-hour');\r\n const displayMinute = this.panelEl.querySelector('.ds-timepicker__display-minute');\r\n \r\n function updateDisplay() {\r\n displayHour.textContent = String(this.selectedHour).padStart(2, '0');\r\n displayMinute.textContent = String(this.selectedMinute).padStart(2, '0');\r\n }\r\n \r\n function updateInput() {\r\n this.input.value = `${String(this.selectedHour).padStart(2, '0')}:${String(this.selectedMinute).padStart(2, '0')}`;\r\n }\r\n \r\n function selectTimeAndClose() {\r\n updateInput.call(this);\r\n this.panelEl.style.display = 'none';\r\n this.input.dispatchEvent(new Event('change'));\r\n }\r\n \r\n const hourGrid = this.panelEl.querySelector('[data-type=\"hour\"]');\r\n const minuteGrid = this.panelEl.querySelector('[data-type=\"minute\"]');\r\n \r\n for (let i = 0; i < 24; i++) {\r\n const btn = document.createElement('button');\r\n btn.className = 'ds-timepicker__item';\r\n btn.textContent = String(i).padStart(2, '0');\r\n if (i === this.selectedHour) btn.classList.add('is-selected');\r\n btn.addEventListener('click', () => {\r\n hourGrid.querySelectorAll('.ds-timepicker__item').forEach(b => b.classList.remove('is-selected'));\r\n btn.classList.add('is-selected');\r\n this.selectedHour = i;\r\n updateDisplay.call(this);\r\n selectTimeAndClose.call(this);\r\n });\r\n hourGrid.appendChild(btn);\r\n }\r\n \r\n for (let i = 0; i < 60; i += 5) {\r\n const btn = document.createElement('button');\r\n btn.className = 'ds-timepicker__item';\r\n btn.textContent = String(i).padStart(2, '0');\r\n if (i === this.selectedMinute) btn.classList.add('is-selected');\r\n btn.addEventListener('click', () => {\r\n minuteGrid.querySelectorAll('.ds-timepicker__item').forEach(b => b.classList.remove('is-selected'));\r\n btn.classList.add('is-selected');\r\n this.selectedMinute = i;\r\n updateDisplay.call(this);\r\n selectTimeAndClose.call(this);\r\n });\r\n minuteGrid.appendChild(btn);\r\n }\r\n \r\n this.panelEl.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n });\r\n \r\n updateDisplay.call(this);\r\n updateInput.call(this);\r\n \r\n setTimeout(() => {\r\n this.calculatePosition();\r\n }, 0);\r\n }\r\n\r\n hideTimepicker(e) {\r\n if (this.panelEl && this.panelEl.style.display === 'block') {\r\n if (!this.element.contains(e.target)) {\r\n this.panelEl.style.display = 'none';\r\n }\r\n }\r\n }\r\n\r\n resizeHandler() {\r\n if (this.panelEl && this.panelEl.style.display === 'block') {\r\n this.calculatePosition();\r\n }\r\n }\r\n\r\n destroy() {\r\n if (!this.element.__kupolaInitialized) return;\r\n\r\n if (this.inputWrap && this._inputWrapClickHandler) {\r\n this.inputWrap.removeEventListener('click', this._inputWrapClickHandler);\r\n }\r\n\r\n if (this._documentClickListener && this._documentClickListener.unsubscribe) {\r\n this._documentClickListener.unsubscribe();\r\n } else if (this._documentClickHandler) {\r\n document.removeEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n if (this._resizeListener && this._resizeListener.unsubscribe) {\r\n this._resizeListener.unsubscribe();\r\n } else if (this._resizeHandler) {\r\n window.removeEventListener('resize', this._resizeHandler);\r\n }\r\n\r\n if (this.panelEl) {\r\n this.panelEl.remove();\r\n this.panelEl = null;\r\n }\r\n\r\n this._inputWrapClickHandler = null;\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._resizeHandler = null;\r\n this._resizeListener = null;\r\n this.element.__kupolaInitialized = false;\r\n }\r\n}\r\n\r\nfunction initTimepicker(element) {\r\n const picker = new Timepicker(element);\r\n picker.init();\r\n element._kupolaTimepicker = picker;\r\n}\r\n\r\nfunction initTimepickers(root = document) {\r\n root.querySelectorAll('.ds-timepicker').forEach(picker => {\r\n initTimepicker(picker);\r\n });\r\n}\r\n\r\nfunction cleanupTimepicker(element) {\r\n if (element._kupolaTimepicker) {\r\n element._kupolaTimepicker.destroy();\r\n element._kupolaTimepicker = null;\r\n }\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('timepicker', initTimepicker, cleanupTimepicker);\r\n}","class Slider {\r\n constructor(element) {\r\n this.element = element;\r\n this.track = element.querySelector('.ds-slider__track');\r\n this.fill = element.querySelector('.ds-slider__fill');\r\n this.input = element.querySelector('.ds-slider__input');\r\n this.valueEl = element.querySelector('.ds-slider__value');\r\n\r\n if (!this.track || !this.fill || !this.input) {\r\n throw new Error('Slider: Missing required elements');\r\n }\r\n\r\n this._bindEvents();\r\n this.updateSlider();\r\n }\r\n\r\n _bindEvents() {\r\n this.updateSlider = () => {\r\n const value = this.input.value;\r\n const min = this.input.min || 0;\r\n const max = this.input.max || 100;\r\n const percentage = ((value - min) / (max - min)) * 100;\r\n\r\n this.fill.style.width = `${percentage}%`;\r\n if (this.valueEl) {\r\n this.valueEl.textContent = value;\r\n }\r\n this.element.setAttribute('aria-valuenow', value);\r\n };\r\n\r\n this.input.addEventListener('input', this.updateSlider);\r\n this.input.addEventListener('change', this.updateSlider);\r\n\r\n this._listeners = [\r\n { el: this.input, event: 'input', handler: this.updateSlider },\r\n { el: this.input, event: 'change', handler: this.updateSlider }\r\n ];\r\n }\r\n\r\n destroy() {\r\n this._listeners?.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.track = null;\r\n this.fill = null;\r\n this.input = null;\r\n this.valueEl = null;\r\n this.element = null;\r\n }\r\n\r\n setValue(value) {\r\n if (this.input) {\r\n this.input.value = value;\r\n this.updateSlider();\r\n }\r\n }\r\n\r\n getValue() {\r\n return this.input?.value;\r\n }\r\n}\r\n\r\nfunction initSlider(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n try {\r\n const slider = new Slider(element);\r\n element.__kupolaInstance = slider;\r\n element.__kupolaInitialized = true;\r\n } catch (error) {\r\n console.error('[Slider] Error initializing:', error);\r\n }\r\n}\r\n\r\nfunction cleanupSlider(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const slider = element.__kupolaInstance;\r\n slider.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initSliders() {\r\n document.querySelectorAll('.ds-slider').forEach(slider => {\r\n initSlider(slider);\r\n });\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('slider', initSlider, cleanupSlider);\r\n}","class Carousel {\r\n constructor(element) {\r\n this.element = element;\r\n this.track = element.querySelector('.ds-carousel__track');\r\n this.items = element.querySelectorAll('.ds-carousel__item');\r\n this.prevBtn = element.querySelector('.ds-carousel__prev');\r\n this.nextBtn = element.querySelector('.ds-carousel__next');\r\n this.indicators = element.querySelectorAll('.ds-carousel__indicator');\r\n this.autoBtn = element.querySelector('.ds-carousel__auto');\r\n \r\n this.currentIndex = 0;\r\n this.totalItems = this.items.length;\r\n this.autoPlayTimer = null;\r\n this.isAutoPlaying = false;\r\n \r\n this._mouseEnterHandler = () => this.stopAutoPlay();\r\n this._mouseLeaveHandler = () => { if (this.isAutoPlaying) this.startAutoPlay(); };\r\n \r\n this.init();\r\n }\r\n \r\n init() {\r\n this._prevClickHandler = () => this.prev();\r\n this._nextClickHandler = () => this.next();\r\n this._autoClickHandler = () => this.toggleAutoPlay();\r\n this._indicatorClickHandlers = [];\r\n \r\n if (this.prevBtn) {\r\n this.prevBtn.addEventListener('click', this._prevClickHandler);\r\n }\r\n if (this.nextBtn) {\r\n this.nextBtn.addEventListener('click', this._nextClickHandler);\r\n }\r\n \r\n this.indicators.forEach((indicator, index) => {\r\n const handler = () => this.goTo(index);\r\n this._indicatorClickHandlers.push(handler);\r\n indicator.addEventListener('click', handler);\r\n });\r\n \r\n if (this.autoBtn) {\r\n this.autoBtn.addEventListener('click', this._autoClickHandler);\r\n }\r\n \r\n this.updateIndicators();\r\n this.startAutoPlay();\r\n \r\n this.element.addEventListener('mouseenter', this._mouseEnterHandler);\r\n this.element.addEventListener('mouseleave', this._mouseLeaveHandler);\r\n }\r\n \r\n goTo(index) {\r\n if (index < 0 || index >= this.totalItems) return;\r\n \r\n this.currentIndex = index;\r\n const offset = -index * 100;\r\n this.track.style.transform = `translateX(${offset}%)`;\r\n this.updateIndicators();\r\n }\r\n \r\n prev() {\r\n const newIndex = this.currentIndex > 0 ? this.currentIndex - 1 : this.totalItems - 1;\r\n this.goTo(newIndex);\r\n }\r\n \r\n next() {\r\n const newIndex = this.currentIndex < this.totalItems - 1 ? this.currentIndex + 1 : 0;\r\n this.goTo(newIndex);\r\n }\r\n \r\n updateIndicators() {\r\n this.indicators.forEach((indicator, index) => {\r\n if (index === this.currentIndex) {\r\n indicator.classList.add('is-active');\r\n } else {\r\n indicator.classList.remove('is-active');\r\n }\r\n });\r\n }\r\n \r\n startAutoPlay() {\r\n if (this.totalItems <= 1) return;\r\n this.stopAutoPlay();\r\n this.isAutoPlaying = true;\r\n if (this.autoBtn) {\r\n this.autoBtn.classList.add('is-active');\r\n }\r\n this.autoPlayTimer = setInterval(() => this.next(), 3000);\r\n }\r\n \r\n stopAutoPlay() {\r\n if (this.autoPlayTimer) {\r\n clearInterval(this.autoPlayTimer);\r\n this.autoPlayTimer = null;\r\n }\r\n if (this.autoBtn) {\r\n this.autoBtn.classList.remove('is-active');\r\n }\r\n }\r\n \r\n toggleAutoPlay() {\r\n if (this.isAutoPlaying) {\r\n this.isAutoPlaying = false;\r\n this.stopAutoPlay();\r\n } else {\r\n this.startAutoPlay();\r\n }\r\n }\r\n \r\n destroy() {\r\n this.stopAutoPlay();\r\n this.element.removeEventListener('mouseenter', this._mouseEnterHandler);\r\n this.element.removeEventListener('mouseleave', this._mouseLeaveHandler);\r\n \r\n if (this.prevBtn && this._prevClickHandler) {\r\n this.prevBtn.removeEventListener('click', this._prevClickHandler);\r\n }\r\n if (this.nextBtn && this._nextClickHandler) {\r\n this.nextBtn.removeEventListener('click', this._nextClickHandler);\r\n }\r\n if (this.autoBtn && this._autoClickHandler) {\r\n this.autoBtn.removeEventListener('click', this._autoClickHandler);\r\n }\r\n \r\n this.indicators.forEach((indicator, index) => {\r\n const handler = this._indicatorClickHandlers[index];\r\n if (handler) {\r\n indicator.removeEventListener('click', handler);\r\n }\r\n });\r\n \r\n this._prevClickHandler = null;\r\n this._nextClickHandler = null;\r\n this._autoClickHandler = null;\r\n this._indicatorClickHandlers = null;\r\n }\r\n}\r\n\r\nfunction initCarousel(element) {\r\n if (element.__kupolaInitialized) return;\r\n \r\n const carousel = new Carousel(element);\r\n element.__kupolaInstance = carousel;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction initCarousels(root = document) {\r\n root.querySelectorAll('.ds-carousel').forEach(carousel => {\r\n initCarousel(carousel);\r\n });\r\n}\r\n\r\nfunction cleanupCarousel(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n \r\n const carousel = element.__kupolaInstance;\r\n carousel.destroy();\r\n \r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { Carousel, initCarousel, initCarousels, cleanupCarousel };\r\n} else {\r\n window.Carousel = Carousel;\r\n window.initCarousel = initCarousel;\r\n window.initCarousels = initCarousels;\r\n \r\n if (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('carousel', initCarousel, cleanupCarousel);\r\n }\r\n}\r\n","class Drawer {\r\n constructor(element) {\r\n this.element = element;\r\n this.mask = element.querySelector('.ds-drawer-mask');\r\n this.drawerEl = element.querySelector('.ds-drawer');\r\n this._bindEvents();\r\n }\r\n\r\n _bindEvents() {\r\n const closeBtn = this.mask?.querySelector('.ds-drawer__close');\r\n const cancelBtn = this.mask?.querySelector('.ds-drawer__footer .ds-btn--ghost');\r\n const confirmBtn = this.mask?.querySelector('.ds-drawer__footer .ds-btn--brand');\r\n\r\n this.closeDrawer = () => {\r\n if (this.mask) {\r\n this.mask.classList.remove('is-visible');\r\n }\r\n if (this.drawerEl) {\r\n this.drawerEl.classList.remove('is-visible');\r\n }\r\n };\r\n\r\n this.handleMaskClick = (e) => {\r\n if (e.target === this.mask) {\r\n this.closeDrawer();\r\n }\r\n };\r\n\r\n if (this.mask) {\r\n this.mask.addEventListener('click', this.handleMaskClick);\r\n }\r\n\r\n if (closeBtn) {\r\n closeBtn.addEventListener('click', this.closeDrawer);\r\n }\r\n\r\n if (cancelBtn) {\r\n cancelBtn.addEventListener('click', this.closeDrawer);\r\n }\r\n\r\n if (confirmBtn) {\r\n confirmBtn.addEventListener('click', this.closeDrawer);\r\n }\r\n\r\n this._listeners = [\r\n { el: this.mask, event: 'click', handler: this.handleMaskClick },\r\n { el: closeBtn, event: 'click', handler: this.closeDrawer },\r\n { el: cancelBtn, event: 'click', handler: this.closeDrawer },\r\n { el: confirmBtn, event: 'click', handler: this.closeDrawer }\r\n ].filter(item => item.el);\r\n }\r\n\r\n destroy() {\r\n this._listeners?.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.mask = null;\r\n this.drawerEl = null;\r\n this.element = null;\r\n }\r\n\r\n open() {\r\n if (this.mask) {\r\n this.mask.classList.add('is-visible');\r\n }\r\n if (this.drawerEl) {\r\n this.drawerEl.classList.add('is-visible');\r\n }\r\n }\r\n\r\n close() {\r\n this.closeDrawer();\r\n }\r\n}\r\n\r\nfunction initDrawer(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const drawer = new Drawer(element);\r\n element.__kupolaInstance = drawer;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupDrawer(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const drawer = element.__kupolaInstance;\r\n drawer.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initDrawers() {\r\n document.querySelectorAll('[data-drawer]').forEach(trigger => {\r\n trigger.addEventListener('click', () => {\r\n const drawerId = trigger.getAttribute('data-drawer');\r\n const drawer = document.getElementById(drawerId);\r\n\r\n if (!drawer) return;\r\n\r\n initDrawer(drawer);\r\n drawer.__kupolaInstance?.open();\r\n });\r\n });\r\n\r\n document.querySelectorAll('.ds-drawer-mask').forEach(mask => {\r\n const drawerEl = mask.parentElement;\r\n if (drawerEl) {\r\n initDrawer(drawerEl);\r\n }\r\n });\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('drawer', initDrawer, cleanupDrawer);\r\n}","class Modal {\r\n constructor(element) {\r\n this.element = element;\r\n this.mask = element.querySelector('.ds-modal-mask');\r\n this.modal = element.querySelector('.ds-modal');\r\n this.closeBtn = element.querySelector('.ds-modal__close');\r\n \r\n this._keydownHandler = (e) => {\r\n if (e.key === 'Escape' && this.isVisible()) {\r\n this.close();\r\n }\r\n };\r\n \r\n this._closeBtnClickHandler = () => this.close();\r\n \r\n this._maskClickHandler = (e) => {\r\n if (e.target === this.mask) {\r\n this.close();\r\n }\r\n };\r\n \r\n this.init();\r\n }\r\n \r\n init() {\r\n if (this.closeBtn) {\r\n this.closeBtn.addEventListener('click', this._closeBtnClickHandler);\r\n }\r\n \r\n if (this.mask) {\r\n this.mask.addEventListener('click', this._maskClickHandler);\r\n }\r\n \r\n document.addEventListener('keydown', this._keydownHandler);\r\n }\r\n \r\n open() {\r\n this.mask.classList.add('is-visible');\r\n Modal._openCount = (Modal._openCount || 0) + 1;\r\n document.body.style.overflow = 'hidden';\r\n }\r\n \r\n close() {\r\n this.mask.classList.remove('is-visible');\r\n Modal._openCount = Math.max(0, (Modal._openCount || 0) - 1);\r\n if (Modal._openCount === 0) {\r\n document.body.style.overflow = '';\r\n }\r\n }\r\n \r\n isVisible() {\r\n return this.mask.classList.contains('is-visible');\r\n }\r\n \r\n destroy() {\r\n document.removeEventListener('keydown', this._keydownHandler);\r\n if (this.closeBtn) {\r\n this.closeBtn.removeEventListener('click', this._closeBtnClickHandler);\r\n }\r\n if (this.mask) {\r\n this.mask.removeEventListener('click', this._maskClickHandler);\r\n }\r\n if (this.isVisible()) {\r\n this.close();\r\n }\r\n }\r\n}\r\n\r\nModal._openCount = 0;\r\n\r\nfunction createModal(options = {}) {\r\n const {\r\n title = '',\r\n content = '',\r\n width = '480px',\r\n onConfirm,\r\n onCancel\r\n } = options;\r\n \r\n const container = document.createElement('div');\r\n container.className = 'ds-modal-container';\r\n container.innerHTML = `\r\n <div class=\"ds-modal-mask\">\r\n <div class=\"ds-modal\" style=\"max-width: ${width}\">\r\n <div class=\"ds-modal__header\">\r\n <span class=\"ds-modal__title\"></span>\r\n <button class=\"ds-modal__close\" aria-label=\"Close\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M18 6L6 18M6 6l12 12\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"ds-modal__body\"></div>\r\n ${onConfirm || onCancel ? `\r\n <div class=\"ds-modal__footer\">\r\n ${onCancel ? `<button class=\"ds-btn ds-btn--ghost\" data-modal-cancel>Cancel</button>` : ''}\r\n ${onConfirm ? `<button class=\"ds-btn ds-btn--brand\" data-modal-confirm>OK</button>` : ''}\r\n </div>\r\n ` : ''}\r\n </div>\r\n </div>\r\n `;\r\n \r\n document.body.appendChild(container);\r\n \r\n const modal = new Modal(container);\r\n \r\n const titleEl = container.querySelector('.ds-modal__title');\r\n if (titleEl) titleEl.textContent = title;\r\n const bodyEl = container.querySelector('.ds-modal__body');\r\n if (bodyEl) bodyEl.textContent = content;\r\n \r\n const confirmBtn = container.querySelector('[data-modal-confirm]');\r\n const cancelBtn = container.querySelector('[data-modal-cancel]');\r\n \r\n const confirmHandler = () => {\r\n if (onConfirm) onConfirm();\r\n modal.close();\r\n };\r\n \r\n const cancelHandler = () => {\r\n if (onCancel) onCancel();\r\n modal.close();\r\n };\r\n \r\n if (confirmBtn) {\r\n confirmBtn.addEventListener('click', confirmHandler);\r\n }\r\n \r\n if (cancelBtn) {\r\n cancelBtn.addEventListener('click', cancelHandler);\r\n }\r\n \r\n const closeAndDestroy = () => {\r\n setTimeout(() => {\r\n if (confirmBtn) {\r\n confirmBtn.removeEventListener('click', confirmHandler);\r\n }\r\n if (cancelBtn) {\r\n cancelBtn.removeEventListener('click', cancelHandler);\r\n }\r\n modal.destroy();\r\n container.remove();\r\n }, 300);\r\n };\r\n \r\n const originalClose = modal.close.bind(modal);\r\n modal.close = () => {\r\n originalClose();\r\n closeAndDestroy();\r\n };\r\n \r\n modal.open();\r\n \r\n return modal;\r\n}\r\n\r\nfunction initModal(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const modal = new Modal(element);\r\n element.__kupolaInstance = modal;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupModal(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const modal = element.__kupolaInstance;\r\n modal.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initModals() {\r\n document.querySelectorAll('.ds-modal-container').forEach(container => {\r\n initModal(container);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { Modal, initModals, initModal, cleanupModal, createModal };\r\n} else {\r\n window.initModal = initModal;\r\n window.cleanupModal = cleanupModal;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('modal', initModal, cleanupModal);\r\n}\r\n","class Dialog {\r\n static normal(options = {}) {\r\n return this._create({ type: 'normal', ...options });\r\n }\r\n \r\n static success(options = {}) {\r\n return this._create({ type: 'success', ...options });\r\n }\r\n \r\n static warning(options = {}) {\r\n return this._create({ type: 'warning', ...options });\r\n }\r\n \r\n static error(options = {}) {\r\n return this._create({ type: 'error', ...options });\r\n }\r\n \r\n static info(options = {}) {\r\n return this._create({ type: 'info', ...options });\r\n }\r\n \r\n static confirm(options = {}) {\r\n return this._create({ type: 'confirm', ...options });\r\n }\r\n \r\n static _create(options) {\r\n const {\r\n type = 'normal',\r\n title = '',\r\n content = '',\r\n onConfirm,\r\n onCancel\r\n } = options;\r\n \r\n const icons = {\r\n normal: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/></svg>`,\r\n success: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"20 6 9 17 4 12\"/></svg>`,\r\n warning: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 9v4M12 17h.01\"/><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/></svg>`,\r\n error: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/></svg>`,\r\n info: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/></svg>`,\r\n confirm: `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 9v4M12 17h.01\"/><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"/></svg>`\r\n };\r\n \r\n const container = document.createElement('div');\r\n container.className = 'ds-modal-container';\r\n container.innerHTML = `\r\n <div class=\"ds-modal-mask\">\r\n <div class=\"ds-modal\" style=\"max-width: 360px\">\r\n <div class=\"ds-modal__body\" style=\"text-align: center; padding: 24px 16px;\">\r\n <div class=\"ds-dialog__icon ds-dialog__icon--${type}\">${icons[type]}</div>\r\n ${title ? '<div class=\"ds-dialog__title\"></div>' : ''}\r\n <div class=\"ds-dialog__content\"></div>\r\n <div class=\"ds-dialog__actions\">\r\n ${type === 'confirm' || onCancel ? `<button class=\"ds-btn ds-btn--ghost\" data-dialog-cancel>Cancel</button>` : ''}\r\n <button class=\"ds-btn ${type === 'confirm' ? 'ds-btn--brand' : 'ds-btn--ghost'}\" data-dialog-confirm>\r\n ${type === 'confirm' ? 'Confirm' : 'OK'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n \r\n document.body.appendChild(container);\r\n \r\n if (title) container.querySelector('.ds-dialog__title').textContent = title;\r\n container.querySelector('.ds-dialog__content').textContent = content;\r\n \r\n const mask = container.querySelector('.ds-modal-mask');\r\n const confirmBtn = container.querySelector('[data-dialog-confirm]');\r\n const cancelBtn = container.querySelector('[data-dialog-cancel]');\r\n \r\n const keydownHandler = function(e) {\r\n if (e.key === 'Escape') {\r\n if (onCancel) onCancel();\r\n close();\r\n }\r\n };\r\n \r\n const maskClickHandler = function(e) {\r\n if (e.target === mask) {\r\n if (onCancel) onCancel();\r\n close();\r\n }\r\n };\r\n \r\n const confirmClickHandler = function() {\r\n if (onConfirm) onConfirm();\r\n close();\r\n };\r\n \r\n const cancelClickHandler = function() {\r\n if (onCancel) onCancel();\r\n close();\r\n };\r\n \r\n const close = () => {\r\n mask.classList.remove('is-visible');\r\n document.body.style.overflow = '';\r\n document.removeEventListener('keydown', keydownHandler);\r\n mask.removeEventListener('click', maskClickHandler);\r\n if (confirmBtn) {\r\n confirmBtn.removeEventListener('click', confirmClickHandler);\r\n }\r\n if (cancelBtn) {\r\n cancelBtn.removeEventListener('click', cancelClickHandler);\r\n }\r\n setTimeout(() => container.remove(), 300);\r\n };\r\n \r\n mask.classList.add('is-visible');\r\n document.body.style.overflow = 'hidden';\r\n \r\n if (confirmBtn) {\r\n confirmBtn.addEventListener('click', confirmClickHandler);\r\n }\r\n \r\n if (cancelBtn) {\r\n cancelBtn.addEventListener('click', cancelClickHandler);\r\n }\r\n \r\n mask.addEventListener('click', maskClickHandler);\r\n document.addEventListener('keydown', keydownHandler);\r\n \r\n return { close };\r\n }\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = Dialog;\r\n}","class FileUpload {\r\n constructor(element) {\r\n this.element = element;\r\n this.dropzone = element.querySelector('.ds-fileupload__dropzone');\r\n this.input = element.querySelector('.ds-fileupload__input');\r\n this.list = element.querySelector('.ds-fileupload__list');\r\n this.progress = element.querySelector('.ds-fileupload__preview');\r\n \r\n this.files = [];\r\n this.maxSize = parseInt(element.getAttribute('data-max-size')) || 0;\r\n this.maxCount = parseInt(element.getAttribute('data-max-count')) || 0;\r\n this._listeners = [];\r\n \r\n this.init();\r\n }\r\n\r\n init() {\r\n this.bindEvents();\r\n }\r\n\r\n bindEvents() {\r\n const clickHandler = (e) => {\r\n if (e.target === this.input || this.input.contains(e.target)) return;\r\n this.input.click();\r\n };\r\n\r\n const changeHandler = (e) => {\r\n const files = Array.from(e.target.files);\r\n this.addFiles(files);\r\n e.target.value = '';\r\n };\r\n\r\n const dragoverHandler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.dropzone.classList.add('is-dragging');\r\n };\r\n\r\n const dragleaveHandler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.dropzone.classList.remove('is-dragging');\r\n };\r\n\r\n const dropHandler = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.dropzone.classList.remove('is-dragging');\r\n \r\n const files = Array.from(e.dataTransfer.files);\r\n this.addFiles(files);\r\n };\r\n\r\n this.dropzone.addEventListener('click', clickHandler);\r\n this.input.addEventListener('change', changeHandler);\r\n this.dropzone.addEventListener('dragover', dragoverHandler);\r\n this.dropzone.addEventListener('dragleave', dragleaveHandler);\r\n this.dropzone.addEventListener('drop', dropHandler);\r\n\r\n this._listeners.push(\r\n { el: this.dropzone, event: 'click', handler: clickHandler },\r\n { el: this.input, event: 'change', handler: changeHandler },\r\n { el: this.dropzone, event: 'dragover', handler: dragoverHandler },\r\n { el: this.dropzone, event: 'dragleave', handler: dragleaveHandler },\r\n { el: this.dropzone, event: 'drop', handler: dropHandler }\r\n );\r\n }\r\n\r\n addFiles(files) {\r\n files.forEach(file => {\r\n if (this.maxCount > 0 && this.files.length >= this.maxCount) {\r\n this.showError(`Maximum ${this.maxCount} files allowed`);\r\n return;\r\n }\r\n if (this.isValidFile(file)) {\r\n this.files.push(file);\r\n this.renderFileItem(file);\r\n this.showPreview(file);\r\n }\r\n });\r\n \r\n this.dispatchChange();\r\n }\r\n\r\n isValidFile(file) {\r\n const accept = this.input.getAttribute('accept');\r\n if (accept && accept !== '') {\r\n const types = accept.split(',').map(t => t.trim());\r\n const fileType = file.type;\r\n const fileName = file.name.toLowerCase();\r\n \r\n const isValidType = types.some(type => {\r\n if (type.startsWith('.')) {\r\n return fileName.endsWith(type);\r\n } else if (type.includes('/')) {\r\n if (type.endsWith('/*')) {\r\n return fileType.startsWith(type.replace('/*', ''));\r\n }\r\n return fileType === type;\r\n }\r\n return true;\r\n });\r\n \r\n if (!isValidType) {\r\n this.showError(`File type not allowed: ${file.type}`);\r\n return false;\r\n }\r\n }\r\n \r\n if (this.maxSize > 0 && file.size > this.maxSize) {\r\n this.showError(`File size exceeds ${this.formatSize(this.maxSize)}`);\r\n return false;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n renderFileItem(file) {\r\n const item = document.createElement('div');\r\n item.className = 'ds-fileupload__item';\r\n item.dataset.filename = file.name;\r\n \r\n const fileIcon = this.getFileIcon(file.type);\r\n \r\n item.innerHTML = `\r\n <div class=\"ds-fileupload__icon\" style=\"width: 24px; height: 24px; border-radius: 4px;\">\r\n ${fileIcon}\r\n </div>\r\n <span class=\"ds-fileupload__filename\">${this.truncateFilename(file.name)}</span>\r\n <span class=\"ds-fileupload__size\">${this.formatSize(file.size)}</span>\r\n <button class=\"ds-fileupload__remove\" type=\"button\" aria-label=\"Remove file\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M18 6L6 18\"/>\r\n <path d=\"M6 6l12 12\"/>\r\n </svg>\r\n </button>\r\n `;\r\n \r\n const removeBtn = item.querySelector('.ds-fileupload__remove');\r\n const removeHandler = () => {\r\n this.removeFile(file, item);\r\n };\r\n removeBtn.addEventListener('click', removeHandler);\r\n \r\n this._listeners.push({ el: removeBtn, event: 'click', handler: removeHandler });\r\n \r\n if (!this.list) {\r\n this.list = document.createElement('div');\r\n this.list.className = 'ds-fileupload__list';\r\n this.element.appendChild(this.list);\r\n }\r\n \r\n this.list.appendChild(item);\r\n }\r\n\r\n getFileIcon(type) {\r\n if (type.startsWith('image/')) {\r\n return '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"/><polyline points=\"21 15 16 10 5 21\"/></svg>';\r\n }\r\n if (type.startsWith('video/')) {\r\n return '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"23 7 16 12 23 17 23 7\"/><rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\"/></svg>';\r\n }\r\n if (type.startsWith('audio/')) {\r\n return '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\"/></svg>';\r\n }\r\n if (type.includes('pdf')) {\r\n return '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/><polyline points=\"10 9 9 9 8 9\"/></svg>';\r\n }\r\n if (type.includes('document') || type.includes('text')) {\r\n return '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/><polyline points=\"10 9 9 9 8 9\"/></svg>';\r\n }\r\n if (type.includes('zip') || type.includes('archive')) {\r\n return '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M16 11V7a4 4 0 0 0-8 0v4\"/><polyline points=\"10 14 8 16 6 14\"/></svg>';\r\n }\r\n return '<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/><polyline points=\"14 2 14 8 20 8\"/></svg>';\r\n }\r\n\r\n truncateFilename(name, maxLength = 20) {\r\n if (name.length <= maxLength) return name;\r\n const extension = name.substring(name.lastIndexOf('.'));\r\n const nameWithoutExt = name.substring(0, name.lastIndexOf('.'));\r\n const truncated = nameWithoutExt.substring(0, maxLength - extension.length - 3) + '...';\r\n return truncated + extension;\r\n }\r\n\r\n formatSize(bytes) {\r\n if (bytes === 0) return '0 B';\r\n const k = 1024;\r\n const sizes = ['B', 'KB', 'MB', 'GB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\r\n }\r\n\r\n removeFile(file, itemElement) {\r\n this.files = this.files.filter(f => f !== file);\r\n if (itemElement) {\r\n itemElement.remove();\r\n }\r\n if (this.files.length === 0 && this.list) {\r\n this.list.remove();\r\n this.list = null;\r\n }\r\n this.dispatchChange();\r\n }\r\n\r\n clearFiles() {\r\n this.files = [];\r\n if (this.list) {\r\n this.list.remove();\r\n this.list = null;\r\n }\r\n if (this.preview) {\r\n this.preview.innerHTML = '';\r\n }\r\n this.clearError();\r\n this.dispatchChange();\r\n }\r\n\r\n showError(message) {\r\n this.clearError();\r\n this.dropzone.classList.add('is-error');\r\n \r\n const errorElement = document.createElement('div');\r\n errorElement.className = 'ds-fileupload__error';\r\n errorElement.textContent = message;\r\n errorElement.setAttribute('role', 'alert');\r\n errorElement.setAttribute('aria-live', 'polite');\r\n this.dropzone.appendChild(errorElement);\r\n \r\n setTimeout(() => {\r\n this.clearError();\r\n }, 5000);\r\n }\r\n\r\n clearError() {\r\n this.dropzone.classList.remove('is-error');\r\n const errorElement = this.dropzone.querySelector('.ds-fileupload__error');\r\n if (errorElement) {\r\n errorElement.remove();\r\n }\r\n }\r\n\r\n showPreview(file) {\r\n if (!file.type.startsWith('image/')) return;\r\n \r\n if (!this.preview) {\r\n this.preview = document.createElement('div');\r\n this.preview.className = 'ds-fileupload__preview';\r\n this.element.insertBefore(this.preview, this.list || null);\r\n }\r\n \r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n const previewItem = document.createElement('div');\r\n previewItem.className = 'ds-fileupload__preview-item';\r\n previewItem.innerHTML = `\r\n <img src=\"${e.target.result}\" alt=\"${file.name}\">\r\n <button class=\"ds-fileupload__preview-remove\" type=\"button\" aria-label=\"Remove preview\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M18 6L6 18\"/>\r\n <path d=\"M6 6l12 12\"/>\r\n </svg>\r\n </button>\r\n `;\r\n \r\n const previewRemoveBtn = previewItem.querySelector('.ds-fileupload__preview-remove');\r\n const previewRemoveHandler = () => {\r\n this.removeFile(file, this.list?.querySelector(`[data-filename=\"${file.name}\"]`));\r\n previewItem.remove();\r\n if (this.preview && this.preview.children.length === 0) {\r\n this.preview.remove();\r\n this.preview = null;\r\n }\r\n };\r\n previewRemoveBtn.addEventListener('click', previewRemoveHandler);\r\n this._listeners.push({ el: previewRemoveBtn, event: 'click', handler: previewRemoveHandler });\r\n \r\n this.preview.appendChild(previewItem);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n updateProgress(percent) {\r\n if (!this.progress) {\r\n this.progress = document.createElement('div');\r\n this.progress.className = 'ds-fileupload__progress';\r\n this.element.insertBefore(this.progress, this.list || null);\r\n }\r\n \r\n this.progress.style.display = 'block';\r\n \r\n const bar = this.progress.querySelector('.ds-fileupload__progress-bar') || document.createElement('div');\r\n bar.className = 'ds-fileupload__progress-bar';\r\n bar.style.width = `${percent}%`;\r\n \r\n if (!this.progress.querySelector('.ds-fileupload__progress-bar')) {\r\n this.progress.appendChild(bar);\r\n }\r\n \r\n if (percent >= 100) {\r\n setTimeout(() => {\r\n if (this.progress) {\r\n this.progress.remove();\r\n this.progress = null;\r\n }\r\n }, 500);\r\n }\r\n }\r\n\r\n simulateUpload(file) {\r\n this.updateProgress(0);\r\n const totalChunks = 100;\r\n let currentChunk = 0;\r\n const chunkSize = Math.max(1, Math.floor(file.size / totalChunks));\r\n \r\n const uploadInterval = setInterval(() => {\r\n currentChunk++;\r\n const percent = Math.min(100, Math.floor((currentChunk / totalChunks) * 100));\r\n this.updateProgress(percent);\r\n \r\n if (currentChunk >= totalChunks) {\r\n clearInterval(uploadInterval);\r\n this.updateProgress(100);\r\n }\r\n }, Math.max(50, Math.floor(5000 / totalChunks)));\r\n \r\n return uploadInterval;\r\n }\r\n\r\n getFiles() {\r\n return [...this.files];\r\n }\r\n\r\n dispatchChange() {\r\n this.element.dispatchEvent(new CustomEvent('ds-fileupload-change', {\r\n detail: {\r\n files: this.getFiles(),\r\n count: this.files.length\r\n }\r\n }));\r\n }\r\n\r\n destroy() {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.files = [];\r\n this.dropzone = null;\r\n this.input = null;\r\n this.list = null;\r\n this.progress = null;\r\n this.preview = null;\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction initFileUpload(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const instance = new FileUpload(element);\r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupFileUpload(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initFileUploads() {\r\n document.querySelectorAll('.ds-fileupload').forEach(el => {\r\n initFileUpload(el);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { FileUpload, initFileUploads, initFileUpload, cleanupFileUpload };\r\n} else {\r\n window.FileUpload = FileUpload;\r\n window.initFileUpload = initFileUpload;\r\n window.cleanupFileUpload = cleanupFileUpload;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('fileupload', initFileUpload, cleanupFileUpload);\r\n}","class Collapse {\r\n constructor(element) {\r\n this.element = element;\r\n this.headers = [];\r\n this._listeners = [];\r\n this._init();\r\n }\r\n\r\n _init() {\r\n const headers = this.element.querySelectorAll('.ds-collapse__header');\r\n \r\n headers.forEach(header => {\r\n const item = header.closest('.ds-collapse__item');\r\n const content = header.nextElementSibling;\r\n \r\n if (!item || !content || !content.classList.contains('ds-collapse__content')) return;\r\n \r\n const isActive = item.classList.contains('is-active');\r\n content.style.height = isActive ? content.scrollHeight + 'px' : '0';\r\n \r\n const clickHandler = () => {\r\n const isExpanded = content.style.height !== '0px';\r\n \r\n if (isExpanded) {\r\n content.style.height = '0';\r\n item.classList.remove('is-active');\r\n } else {\r\n content.style.height = content.scrollHeight + 'px';\r\n item.classList.add('is-active');\r\n \r\n const transitionHandler = function onTransitionEnd() {\r\n content.removeEventListener('transitionend', transitionHandler);\r\n content.style.height = '';\r\n };\r\n content.addEventListener('transitionend', transitionHandler);\r\n this._listeners.push({ el: content, event: 'transitionend', handler: transitionHandler });\r\n }\r\n };\r\n \r\n header.addEventListener('click', clickHandler);\r\n this.headers.push({ header, item, content, clickHandler });\r\n this._listeners.push({ el: header, event: 'click', handler: clickHandler });\r\n });\r\n }\r\n\r\n destroy() {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.headers = null;\r\n this.element = null;\r\n }\r\n\r\n toggle(index) {\r\n const headerInfo = this.headers[index];\r\n if (headerInfo) {\r\n headerInfo.clickHandler();\r\n }\r\n }\r\n\r\n expand(index) {\r\n const headerInfo = this.headers[index];\r\n if (headerInfo && !headerInfo.item.classList.contains('is-active')) {\r\n headerInfo.clickHandler();\r\n }\r\n }\r\n\r\n collapse(index) {\r\n const headerInfo = this.headers[index];\r\n if (headerInfo && headerInfo.item.classList.contains('is-active')) {\r\n headerInfo.clickHandler();\r\n }\r\n }\r\n\r\n expandAll() {\r\n this.headers.forEach((headerInfo, index) => {\r\n if (!headerInfo.item.classList.contains('is-active')) {\r\n this.toggle(index);\r\n }\r\n });\r\n }\r\n\r\n collapseAll() {\r\n this.headers.forEach((headerInfo, index) => {\r\n if (headerInfo.item.classList.contains('is-active')) {\r\n this.toggle(index);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction initCollapse(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const collapse = new Collapse(element);\r\n element.__kupolaInstance = collapse;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupCollapse(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const collapse = element.__kupolaInstance;\r\n collapse.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initCollapses() {\r\n document.querySelectorAll('.ds-collapse').forEach(collapse => {\r\n initCollapse(collapse);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { Collapse, initCollapses, initCollapse, cleanupCollapse };\r\n} else {\r\n window.Collapse = Collapse;\r\n window.initCollapse = initCollapse;\r\n window.cleanupCollapse = cleanupCollapse;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('collapse', initCollapse, cleanupCollapse);\r\n}","class ColorPicker {\r\n constructor(element) {\r\n this.element = element;\r\n this.trigger = element.querySelector('.ds-color-picker__trigger');\r\n this.panel = element.querySelector('.ds-color-picker__panel');\r\n this.valueSpan = element.querySelector('.ds-color-picker__value');\r\n this.customInput = element.querySelector('.ds-color-picker__input');\r\n this.scope = `colorpicker-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n this._triggerClickHandler = null;\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._colorClickHandler = null;\r\n this._inputInputHandler = null;\r\n }\r\n\r\n init() {\r\n if (!this.trigger || !this.panel) return;\r\n if (this.element.__kupolaInitialized) return;\r\n\r\n this._triggerClickHandler = (e) => {\r\n e.stopPropagation();\r\n this.togglePanel();\r\n };\r\n\r\n this._colorClickHandler = (e) => {\r\n const colorBtn = e.currentTarget;\r\n const color = colorBtn.getAttribute('data-color');\r\n this.updateColor(color);\r\n this.hidePanel();\r\n };\r\n\r\n this._inputInputHandler = (e) => {\r\n this.updateColor(e.target.value);\r\n };\r\n\r\n this._documentClickHandler = (e) => {\r\n if (!this.element.contains(e.target)) {\r\n this.hidePanel();\r\n }\r\n };\r\n\r\n this.trigger.addEventListener('click', this._triggerClickHandler);\r\n\r\n this.panel.querySelectorAll('.ds-color-picker__color').forEach(colorBtn => {\r\n colorBtn.addEventListener('click', this._colorClickHandler);\r\n colorBtn._colorPickerColorHandler = this._colorClickHandler;\r\n });\r\n\r\n if (this.customInput) {\r\n this.customInput.addEventListener('input', this._inputInputHandler);\r\n this.customInput._colorPickerInputHandler = this._inputInputHandler;\r\n }\r\n\r\n if (window.globalEvents) {\r\n this._documentClickListener = window.globalEvents.on(document, 'click', this._documentClickHandler, { scope: this.scope });\r\n } else {\r\n document.addEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n this.element.__kupolaInitialized = true;\r\n }\r\n\r\n togglePanel() {\r\n this.panel.classList.toggle('is-visible');\r\n }\r\n\r\n hidePanel() {\r\n this.panel.classList.remove('is-visible');\r\n }\r\n\r\n updateColor(color) {\r\n this.trigger.style.backgroundColor = color;\r\n if (this.valueSpan) {\r\n this.valueSpan.textContent = color.toUpperCase();\r\n }\r\n if (this.customInput) {\r\n this.customInput.value = color;\r\n }\r\n this.element.dispatchEvent(new CustomEvent('colorchange', { detail: { color } }));\r\n }\r\n\r\n destroy() {\r\n if (!this.element.__kupolaInitialized) return;\r\n\r\n if (this.trigger && this._triggerClickHandler) {\r\n this.trigger.removeEventListener('click', this._triggerClickHandler);\r\n }\r\n\r\n if (this.panel) {\r\n this.panel.querySelectorAll('.ds-color-picker__color').forEach(colorBtn => {\r\n if (colorBtn._colorPickerColorHandler) {\r\n colorBtn.removeEventListener('click', colorBtn._colorPickerColorHandler);\r\n }\r\n });\r\n }\r\n\r\n if (this.customInput && this._inputInputHandler) {\r\n this.customInput.removeEventListener('input', this._inputInputHandler);\r\n }\r\n\r\n if (this._documentClickListener && this._documentClickListener.unsubscribe) {\r\n this._documentClickListener.unsubscribe();\r\n } else if (this._documentClickHandler) {\r\n document.removeEventListener('click', this._documentClickHandler);\r\n }\r\n\r\n this._documentClickHandler = null;\r\n this._documentClickListener = null;\r\n this._triggerClickHandler = null;\r\n this._colorClickHandler = null;\r\n this._inputInputHandler = null;\r\n this.element.__kupolaInitialized = false;\r\n }\r\n}\r\n\r\nfunction initColorPicker(element) {\r\n const picker = new ColorPicker(element);\r\n picker.init();\r\n element._kupolaColorPicker = picker;\r\n}\r\n\r\nfunction initColorPickers(root = document) {\r\n root.querySelectorAll('.ds-color-picker').forEach(picker => {\r\n initColorPicker(picker);\r\n });\r\n}\r\n\r\nfunction cleanupColorPicker(picker) {\r\n if (picker._kupolaColorPicker) {\r\n picker._kupolaColorPicker.destroy();\r\n picker._kupolaColorPicker = null;\r\n }\r\n}\r\n\r\nfunction cleanupAllColorPickers() {\r\n document.querySelectorAll('.ds-color-picker').forEach(picker => {\r\n cleanupColorPicker(picker);\r\n });\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('color-picker', initColorPicker, cleanupColorPicker);\r\n}","class Calendar {\r\n constructor(element) {\r\n this.element = element;\r\n this.titleEl = element.querySelector('.ds-calendar__title');\r\n this.daysEl = element.querySelector('.ds-calendar__days');\r\n this.prevBtn = element.querySelector('.ds-calendar__nav--prev');\r\n this.nextBtn = element.querySelector('.ds-calendar__nav--next');\r\n this.todayBtn = element.querySelector('.ds-calendar__nav--today');\r\n this._listeners = [];\r\n \r\n if (!this.titleEl || !this.daysEl) {\r\n throw new Error('Calendar: Missing required elements');\r\n }\r\n\r\n this.currentDate = new Date();\r\n this._init();\r\n }\r\n\r\n _init() {\r\n this.render();\r\n\r\n const prevHandler = () => {\r\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\r\n this.render();\r\n };\r\n\r\n const nextHandler = () => {\r\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\r\n this.render();\r\n };\r\n\r\n const todayHandler = () => {\r\n this.currentDate = new Date();\r\n this.render();\r\n };\r\n\r\n if (this.prevBtn) {\r\n this.prevBtn.addEventListener('click', prevHandler);\r\n this._listeners.push({ el: this.prevBtn, event: 'click', handler: prevHandler });\r\n }\r\n\r\n if (this.nextBtn) {\r\n this.nextBtn.addEventListener('click', nextHandler);\r\n this._listeners.push({ el: this.nextBtn, event: 'click', handler: nextHandler });\r\n }\r\n\r\n if (this.todayBtn) {\r\n this.todayBtn.addEventListener('click', todayHandler);\r\n this._listeners.push({ el: this.todayBtn, event: 'click', handler: todayHandler });\r\n }\r\n }\r\n\r\n render() {\r\n const year = this.currentDate.getFullYear();\r\n const month = this.currentDate.getMonth();\r\n \r\n this.titleEl.textContent = `${year} ${['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][month]}`;\r\n \r\n const firstDay = new Date(year, month, 1).getDay();\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n \r\n this.daysEl.innerHTML = '';\r\n \r\n for (let i = 0; i < firstDay; i++) {\r\n const emptyDay = document.createElement('span');\r\n emptyDay.className = 'ds-calendar__day ds-calendar__day--empty';\r\n this.daysEl.appendChild(emptyDay);\r\n }\r\n \r\n const today = new Date();\r\n const todayStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;\r\n \r\n for (let day = 1; day <= daysInMonth; day++) {\r\n const dayEl = document.createElement('button');\r\n dayEl.className = 'ds-calendar__day';\r\n dayEl.textContent = day;\r\n \r\n const dayStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\r\n \r\n if (dayStr === todayStr) {\r\n dayEl.classList.add('is-today');\r\n }\r\n \r\n const clickHandler = () => {\r\n this.element.querySelectorAll('.ds-calendar__day').forEach(d => d.classList.remove('is-selected'));\r\n dayEl.classList.add('is-selected');\r\n this.$emit('select', { date: new Date(year, month, day), dateStr: dayStr });\r\n };\r\n \r\n dayEl.addEventListener('click', clickHandler);\r\n this._listeners.push({ el: dayEl, event: 'click', handler: clickHandler });\r\n \r\n this.daysEl.appendChild(dayEl);\r\n }\r\n }\r\n\r\n destroy() {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.titleEl = null;\r\n this.daysEl = null;\r\n this.prevBtn = null;\r\n this.nextBtn = null;\r\n this.todayBtn = null;\r\n this.element = null;\r\n }\r\n\r\n setDate(date) {\r\n this.currentDate = new Date(date);\r\n this.render();\r\n }\r\n\r\n getDate() {\r\n return this.currentDate;\r\n }\r\n\r\n prevMonth() {\r\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\r\n this.render();\r\n }\r\n\r\n nextMonth() {\r\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\r\n this.render();\r\n }\r\n\r\n goToToday() {\r\n this.currentDate = new Date();\r\n this.render();\r\n }\r\n\r\n $emit(eventName, data) {\r\n if (this.element) {\r\n const customEvent = new CustomEvent(`kupola:calendar:${eventName}`, {\r\n detail: data,\r\n bubbles: true,\r\n cancelable: true\r\n });\r\n this.element.dispatchEvent(customEvent);\r\n }\r\n }\r\n}\r\n\r\nfunction initCalendar(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n try {\r\n const calendar = new Calendar(element);\r\n element.__kupolaInstance = calendar;\r\n element.__kupolaInitialized = true;\r\n } catch (error) {\r\n console.error('[Calendar] Error initializing:', error);\r\n }\r\n}\r\n\r\nfunction cleanupCalendar(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const calendar = element.__kupolaInstance;\r\n calendar.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initCalendars() {\r\n document.querySelectorAll('.ds-calendar').forEach(calendar => {\r\n initCalendar(calendar);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { Calendar, initCalendars, initCalendar, cleanupCalendar };\r\n} else {\r\n window.Calendar = Calendar;\r\n window.initCalendar = initCalendar;\r\n window.cleanupCalendar = cleanupCalendar;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('calendar', initCalendar, cleanupCalendar);\r\n}","class DynamicTags {\r\n constructor(element) {\r\n this.element = element;\r\n this.input = element.querySelector('.ds-dynamic-tags__input');\r\n this._listeners = [];\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.bindEvents();\r\n }\r\n\r\n bindEvents() {\r\n this.element.querySelectorAll('.ds-dynamic-tags__remove').forEach(removeBtn => {\r\n const removeHandler = (e) => {\r\n e.stopPropagation();\r\n const tag = removeBtn.closest('.ds-dynamic-tags__tag');\r\n if (tag) {\r\n tag.remove();\r\n this.dispatchChange();\r\n }\r\n };\r\n removeBtn.addEventListener('click', removeHandler);\r\n this._listeners.push({ el: removeBtn, event: 'click', handler: removeHandler });\r\n });\r\n\r\n if (this.input) {\r\n const addTag = () => {\r\n const value = this.input.value.trim();\r\n if (!value) return;\r\n\r\n const tag = document.createElement('span');\r\n tag.className = 'ds-dynamic-tags__tag';\r\n const textNode = document.createTextNode(value);\r\n tag.appendChild(textNode);\r\n const removeBtn = document.createElement('button');\r\n removeBtn.className = 'ds-dynamic-tags__remove';\r\n removeBtn.innerHTML = '<svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>';\r\n tag.appendChild(removeBtn);\r\n\r\n const tagRemoveHandler = (e) => {\r\n e.stopPropagation();\r\n tag.remove();\r\n this.dispatchChange();\r\n };\r\n removeBtn.addEventListener('click', tagRemoveHandler);\r\n this._listeners.push({ el: removeBtn, event: 'click', handler: tagRemoveHandler });\r\n\r\n this.element.insertBefore(tag, this.input);\r\n this.input.value = '';\r\n this.input.focus();\r\n this.dispatchChange();\r\n };\r\n\r\n const keydownHandler = (e) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n addTag();\r\n }\r\n };\r\n this.input.addEventListener('keydown', keydownHandler);\r\n this._listeners.push({ el: this.input, event: 'keydown', handler: keydownHandler });\r\n\r\n const clickHandler = () => {\r\n this.input.focus();\r\n };\r\n this.element.addEventListener('click', clickHandler);\r\n this._listeners.push({ el: this.element, event: 'click', handler: clickHandler });\r\n }\r\n }\r\n\r\n addTag(value) {\r\n if (!value || !this.input) return;\r\n this.input.value = value;\r\n this.input.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));\r\n }\r\n\r\n removeTag(index) {\r\n const tags = this.element.querySelectorAll('.ds-dynamic-tags__tag');\r\n const tag = tags[index];\r\n if (tag) {\r\n tag.remove();\r\n this.dispatchChange();\r\n }\r\n }\r\n\r\n getTags() {\r\n const tags = [];\r\n this.element.querySelectorAll('.ds-dynamic-tags__tag').forEach(tag => {\r\n tags.push(tag.textContent);\r\n });\r\n return tags;\r\n }\r\n\r\n clearTags() {\r\n this.element.querySelectorAll('.ds-dynamic-tags__tag').forEach(tag => {\r\n tag.remove();\r\n });\r\n this.dispatchChange();\r\n }\r\n\r\n dispatchChange() {\r\n this.element.dispatchEvent(new CustomEvent('ds-dynamic-tags-change', {\r\n detail: {\r\n tags: this.getTags(),\r\n count: this.getTags().length\r\n }\r\n }));\r\n }\r\n\r\n destroy() {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.input = null;\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction initDynamicTags(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const instance = new DynamicTags(element);\r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupDynamicTags(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initDynamicTagsAll() {\r\n document.querySelectorAll('.ds-dynamic-tags').forEach(tags => {\r\n initDynamicTags(tags);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { DynamicTags, initDynamicTagsAll, initDynamicTags, cleanupDynamicTags };\r\n} else {\r\n window.DynamicTags = DynamicTags;\r\n window.initDynamicTags = initDynamicTags;\r\n window.cleanupDynamicTags = cleanupDynamicTags;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('dynamic-tags', initDynamicTags, cleanupDynamicTags);\r\n}","class ImagePreview {\r\n constructor(options = {}) {\r\n this.images = options.images || [];\r\n this.currentIndex = options.currentIndex || 0;\r\n this.overlay = null;\r\n this.closeHandler = this.close.bind(this);\r\n this.keyHandler = this.handleKeydown.bind(this);\r\n this.clickHandler = this.handleOverlayClick.bind(this);\r\n \r\n this.init();\r\n }\r\n\r\n init() {\r\n this.createOverlay();\r\n }\r\n\r\n createOverlay() {\r\n this.overlay = document.createElement('div');\r\n this.overlay.className = 'ds-image-preview-overlay';\r\n this.overlay.innerHTML = `\r\n <button class=\"ds-image-preview__close\" type=\"button\" aria-label=\"Close preview\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M18 6L6 18\"/>\r\n <path d=\"M6 6l12 12\"/>\r\n </svg>\r\n </button>\r\n <div class=\"ds-image-preview__nav\">\r\n <button class=\"ds-image-preview__nav-btn ds-image-preview__nav-btn--prev\" type=\"button\" aria-label=\"Previous image\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\"/>\r\n </svg>\r\n </button>\r\n <button class=\"ds-image-preview__nav-btn ds-image-preview__nav-btn--next\" type=\"button\" aria-label=\"Next image\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <polyline points=\"9 18 15 12 9 6\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"ds-image-preview__content\">\r\n <img src=\"\" alt=\"\" />\r\n </div>\r\n <div class=\"ds-image-preview__info\">\r\n <div class=\"ds-image-preview__title\"></div>\r\n <div class=\"ds-image-preview__meta\"></div>\r\n </div>\r\n <div class=\"ds-image-preview__indicators\"></div>\r\n `;\r\n \r\n document.body.appendChild(this.overlay);\r\n \r\n this.bindEvents();\r\n }\r\n\r\n bindEvents() {\r\n const closeBtn = this.overlay.querySelector('.ds-image-preview__close');\r\n const prevBtn = this.overlay.querySelector('.ds-image-preview__nav-btn--prev');\r\n const nextBtn = this.overlay.querySelector('.ds-image-preview__nav-btn--next');\r\n \r\n this._prevHandler = () => this.prev();\r\n this._nextHandler = () => this.next();\r\n \r\n closeBtn.addEventListener('click', this.closeHandler);\r\n prevBtn.addEventListener('click', this._prevHandler);\r\n nextBtn.addEventListener('click', this._nextHandler);\r\n }\r\n\r\n handleKeydown(e) {\r\n if (!this.overlay.classList.contains('is-visible')) return;\r\n \r\n switch (e.key) {\r\n case 'Escape':\r\n this.close();\r\n break;\r\n case 'ArrowLeft':\r\n this.prev();\r\n break;\r\n case 'ArrowRight':\r\n this.next();\r\n break;\r\n }\r\n }\r\n\r\n handleOverlayClick(e) {\r\n if (e.target === this.overlay) {\r\n this.close();\r\n }\r\n }\r\n\r\n show(images, index = 0) {\r\n this.images = images;\r\n this.currentIndex = Math.min(Math.max(index, 0), images.length - 1);\r\n \r\n this.render();\r\n this.overlay.classList.add('is-visible');\r\n \r\n document.addEventListener('keydown', this.keyHandler);\r\n this.overlay.addEventListener('click', this.clickHandler);\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n close() {\r\n this.overlay.classList.remove('is-visible');\r\n \r\n document.removeEventListener('keydown', this.keyHandler);\r\n this.overlay.removeEventListener('click', this.clickHandler);\r\n document.body.style.overflow = '';\r\n }\r\n\r\n prev() {\r\n if (this.currentIndex > 0) {\r\n this.currentIndex--;\r\n this.render();\r\n }\r\n }\r\n\r\n next() {\r\n if (this.currentIndex < this.images.length - 1) {\r\n this.currentIndex++;\r\n this.render();\r\n }\r\n }\r\n\r\n goTo(index) {\r\n if (index >= 0 && index < this.images.length) {\r\n this.currentIndex = index;\r\n this.render();\r\n }\r\n }\r\n\r\n render() {\r\n const img = this.overlay.querySelector('.ds-image-preview__content img');\r\n const title = this.overlay.querySelector('.ds-image-preview__title');\r\n const meta = this.overlay.querySelector('.ds-image-preview__meta');\r\n const indicators = this.overlay.querySelector('.ds-image-preview__indicators');\r\n const prevBtn = this.overlay.querySelector('.ds-image-preview__nav-btn--prev');\r\n const nextBtn = this.overlay.querySelector('.ds-image-preview__nav-btn--next');\r\n \r\n const currentImage = this.images[this.currentIndex];\r\n \r\n img.src = currentImage.src;\r\n img.alt = currentImage.alt || '';\r\n title.textContent = currentImage.title || '';\r\n meta.textContent = currentImage.meta || `${this.currentIndex + 1} / ${this.images.length}`;\r\n \r\n prevBtn.disabled = this.currentIndex === 0;\r\n nextBtn.disabled = this.currentIndex === this.images.length - 1;\r\n \r\n indicators.innerHTML = this.images.map((_, i) => `\r\n <button class=\"ds-image-preview__indicator${i === this.currentIndex ? ' is-active' : ''}\" type=\"button\" data-index=\"${i}\" aria-label=\"Go to image ${i + 1}\"></button>\r\n `).join('');\r\n \r\n indicators.querySelectorAll('.ds-image-preview__indicator').forEach(indicator => {\r\n const clickHandler = () => {\r\n this.goTo(parseInt(indicator.dataset.index));\r\n };\r\n indicator.addEventListener('click', clickHandler);\r\n indicator._clickHandler = clickHandler;\r\n });\r\n }\r\n\r\n destroy() {\r\n this.close();\r\n \r\n const indicators = this.overlay?.querySelector('.ds-image-preview__indicators');\r\n if (indicators) {\r\n indicators.querySelectorAll('.ds-image-preview__indicator').forEach(indicator => {\r\n if (indicator._clickHandler) {\r\n indicator.removeEventListener('click', indicator._clickHandler);\r\n }\r\n });\r\n }\r\n \r\n const closeBtn = this.overlay?.querySelector('.ds-image-preview__close');\r\n const prevBtn = this.overlay?.querySelector('.ds-image-preview__nav-btn--prev');\r\n const nextBtn = this.overlay?.querySelector('.ds-image-preview__nav-btn--next');\r\n \r\n if (closeBtn) {\r\n closeBtn.removeEventListener('click', this.closeHandler);\r\n }\r\n if (prevBtn && this._prevHandler) {\r\n prevBtn.removeEventListener('click', this._prevHandler);\r\n }\r\n if (nextBtn && this._nextHandler) {\r\n nextBtn.removeEventListener('click', this._nextHandler);\r\n }\r\n \r\n if (this.overlay && this.overlay.parentNode) {\r\n this.overlay.parentNode.removeChild(this.overlay);\r\n }\r\n }\r\n}\r\n\r\nlet imagePreviewInstance = null;\r\n\r\nfunction initImagePreview() {\r\n if (!imagePreviewInstance) {\r\n imagePreviewInstance = new ImagePreview();\r\n }\r\n \r\n document.querySelectorAll('[data-image-preview]').forEach(trigger => {\r\n trigger.addEventListener('click', () => {\r\n const images = JSON.parse(trigger.getAttribute('data-image-preview'));\r\n const index = parseInt(trigger.getAttribute('data-image-index')) || 0;\r\n imagePreviewInstance.show(images, index);\r\n });\r\n });\r\n}\r\n\r\nfunction showImagePreview(images, index = 0) {\r\n if (!imagePreviewInstance) {\r\n imagePreviewInstance = new ImagePreview();\r\n }\r\n imagePreviewInstance.show(images, index);\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { ImagePreview, initImagePreview, showImagePreview };\r\n}","class Tag {\r\n constructor(element) {\r\n this.element = element;\r\n this.closeBtn = element.querySelector('.ds-tag__close');\r\n this._listeners = [];\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.closeBtn) {\r\n const closeHandler = (e) => {\r\n e.stopPropagation();\r\n this.element.dispatchEvent(new CustomEvent('ds-tag-remove', {\r\n detail: { tag: this.element },\r\n bubbles: true\r\n }));\r\n this.element.remove();\r\n };\r\n this.closeBtn.addEventListener('click', closeHandler);\r\n this._listeners.push({ el: this.closeBtn, event: 'click', handler: closeHandler });\r\n }\r\n }\r\n\r\n setContent(content) {\r\n const textNodes = [];\r\n this.element.childNodes.forEach(node => {\r\n if (node.nodeType === Node.TEXT_NODE) {\r\n textNodes.push(node);\r\n }\r\n });\r\n textNodes.forEach(node => node.remove());\r\n this.element.insertBefore(document.createTextNode(content), this.closeBtn || null);\r\n }\r\n\r\n getContent() {\r\n return this.element.textContent.trim();\r\n }\r\n\r\n destroy() {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.closeBtn = null;\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction initTag(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const instance = new Tag(element);\r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupTag(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initTags() {\r\n document.querySelectorAll('.ds-tag').forEach(tag => {\r\n initTag(tag);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { Tag, initTags, initTag, cleanupTag };\r\n} else {\r\n window.Tag = Tag;\r\n window.initTag = initTag;\r\n window.cleanupTag = cleanupTag;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('tag', initTag, cleanupTag);\r\n}","class StatCard {\r\n constructor(element) {\r\n this.element = element;\r\n this.valueElement = element.querySelector('.ds-statcard__value');\r\n this.progressFill = element.querySelector('.ds-statcard__progress-fill');\r\n this.animated = false;\r\n this._observer = null;\r\n \r\n this.init();\r\n }\r\n\r\n init() {\r\n this.animateValue();\r\n this.animateProgress();\r\n \r\n this._observer = new IntersectionObserver((entries) => {\r\n entries.forEach(entry => {\r\n if (entry.isIntersecting && !this.animated) {\r\n this.animateValue();\r\n this.animateProgress();\r\n this.animated = true;\r\n }\r\n });\r\n }, { threshold: 0.3 });\r\n \r\n this._observer.observe(this.element);\r\n }\r\n\r\n animateValue() {\r\n if (!this.valueElement) return;\r\n \r\n const text = this.valueElement.textContent;\r\n const match = text.match(/[\\d.,]+/);\r\n if (!match) return;\r\n \r\n const targetValue = parseFloat(match[0].replace(',', ''));\r\n const prefix = text.substring(0, match.index);\r\n const suffix = text.substring(match.index + match[0].length);\r\n \r\n const duration = 1500;\r\n const startTime = performance.now();\r\n const startValue = 0;\r\n \r\n const animate = (currentTime) => {\r\n const elapsed = currentTime - startTime;\r\n const progress = Math.min(elapsed / duration, 1);\r\n const easeProgress = 1 - Math.pow(1 - progress, 3);\r\n \r\n const currentValue = startValue + (targetValue - startValue) * easeProgress;\r\n \r\n let formattedValue;\r\n if (targetValue >= 1000000) {\r\n formattedValue = (currentValue / 1000000).toFixed(1) + 'M';\r\n } else if (targetValue >= 1000) {\r\n formattedValue = (currentValue / 1000).toFixed(1) + 'K';\r\n } else if (Number.isInteger(targetValue)) {\r\n formattedValue = Math.floor(currentValue).toLocaleString();\r\n } else {\r\n formattedValue = currentValue.toFixed(2);\r\n }\r\n \r\n this.valueElement.textContent = prefix + formattedValue + suffix;\r\n \r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n };\r\n \r\n requestAnimationFrame(animate);\r\n }\r\n\r\n animateProgress() {\r\n if (!this.progressFill) return;\r\n \r\n const width = this.progressFill.getAttribute('data-width') || '0%';\r\n this.progressFill.style.width = width;\r\n }\r\n\r\n updateValue(newValue, options = {}) {\r\n if (!this.valueElement) return;\r\n \r\n const duration = options.duration || 800;\r\n const text = this.valueElement.textContent;\r\n const match = text.match(/[\\d.,]+/);\r\n \r\n if (!match) {\r\n this.valueElement.textContent = newValue;\r\n return;\r\n }\r\n \r\n const prefix = text.substring(0, match.index);\r\n const suffix = text.substring(match.index + match[0].length);\r\n const startValue = parseFloat(match[0].replace(',', ''));\r\n const targetValue = parseFloat(newValue);\r\n \r\n const startTime = performance.now();\r\n \r\n const animate = (currentTime) => {\r\n const elapsed = currentTime - startTime;\r\n const progress = Math.min(elapsed / duration, 1);\r\n const easeProgress = 1 - Math.pow(1 - progress, 3);\r\n \r\n const currentValue = startValue + (targetValue - startValue) * easeProgress;\r\n \r\n let formattedValue;\r\n if (targetValue >= 1000000) {\r\n formattedValue = (currentValue / 1000000).toFixed(1) + 'M';\r\n } else if (targetValue >= 1000) {\r\n formattedValue = (currentValue / 1000).toFixed(1) + 'K';\r\n } else if (Number.isInteger(targetValue)) {\r\n formattedValue = Math.floor(currentValue).toLocaleString();\r\n } else {\r\n formattedValue = currentValue.toFixed(2);\r\n }\r\n \r\n this.valueElement.textContent = prefix + formattedValue + suffix;\r\n \r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n };\r\n \r\n requestAnimationFrame(animate);\r\n }\r\n\r\n updateProgress(percent, options = {}) {\r\n if (!this.progressFill) return;\r\n \r\n const duration = options.duration || 600;\r\n const currentWidth = parseFloat(this.progressFill.style.width || '0');\r\n const targetWidth = Math.min(Math.max(percent, 0), 100);\r\n \r\n const startTime = performance.now();\r\n \r\n const animate = (currentTime) => {\r\n const elapsed = currentTime - startTime;\r\n const progress = Math.min(elapsed / duration, 1);\r\n const easeProgress = 1 - Math.pow(1 - progress, 3);\r\n \r\n const currentWidthValue = currentWidth + (targetWidth - currentWidth) * easeProgress;\r\n this.progressFill.style.width = currentWidthValue + '%';\r\n \r\n if (progress < 1) {\r\n requestAnimationFrame(animate);\r\n }\r\n };\r\n \r\n requestAnimationFrame(animate);\r\n }\r\n\r\n setTrend(direction, value) {\r\n const trendElement = this.element.querySelector('.ds-statcard__trend');\r\n if (!trendElement) return;\r\n \r\n trendElement.className = `ds-statcard__trend ds-statcard__trend--${direction}`;\r\n \r\n const iconSvg = direction === 'up' \r\n ? '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"/></svg>'\r\n : direction === 'down'\r\n ? '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"1 18 10.5 8.5 15.5 13.5 23 6\"/></svg>'\r\n : '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"12 19 18 13 12 7 6 13\"/></svg>';\r\n \r\n trendElement.innerHTML = iconSvg + value;\r\n }\r\n\r\n destroy() {\r\n if (this._observer) {\r\n this._observer.disconnect();\r\n this._observer = null;\r\n }\r\n this.animated = false;\r\n this.valueElement = null;\r\n this.progressFill = null;\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction initStatCard(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const instance = new StatCard(element);\r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupStatCard(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initStatCards() {\r\n document.querySelectorAll('.ds-statcard').forEach(card => {\r\n initStatCard(card);\r\n });\r\n}\r\n\r\nfunction updateStatCard(selector, newValue) {\r\n const card = document.querySelector(selector);\r\n if (card && card.__kupolaInstance) {\r\n card.__kupolaInstance.updateValue(newValue);\r\n }\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { StatCard, initStatCards, initStatCard, cleanupStatCard, updateStatCard };\r\n} else {\r\n window.StatCard = StatCard;\r\n window.initStatCard = initStatCard;\r\n window.cleanupStatCard = cleanupStatCard;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('statcard', initStatCard, cleanupStatCard);\r\n}","class Heatmap {\r\n constructor(element, options = {}) {\r\n this.element = element;\r\n this.data = options.data || [];\r\n this.startDate = options.startDate || this.getOneYearAgo();\r\n this.endDate = options.endDate || new Date();\r\n this.cellSize = options.cellSize || 14;\r\n this.onCellClick = options.onCellClick || null;\r\n this.tooltip = null;\r\n this.baseColor = options.color || element.getAttribute('data-color') || '#22c55e';\r\n this._listeners = [];\r\n \r\n this.init();\r\n }\r\n\r\n getOneYearAgo() {\r\n const date = new Date();\r\n date.setFullYear(date.getFullYear() - 1);\r\n return date;\r\n }\r\n\r\n init() {\r\n this.render();\r\n this.createTooltip();\r\n }\r\n\r\n getDataByDate(date) {\r\n const dateStr = this.formatDate(date);\r\n const item = this.data.find(d => d.date === dateStr);\r\n return item ? item.value : 0;\r\n }\r\n\r\n formatDate(date) {\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n getLevel(value, maxValue) {\r\n if (value === 0) return 0;\r\n if (!maxValue || maxValue === 0) maxValue = Math.max(...this.data.map(d => d.value), 1);\r\n const ratio = value / maxValue;\r\n if (ratio < 0.2) return 1;\r\n if (ratio < 0.4) return 2;\r\n if (ratio < 0.6) return 3;\r\n if (ratio < 0.8) return 4;\r\n return 5;\r\n }\r\n\r\n hexToRgb(hex) {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n } : { r: 34, g: 197, b: 94 };\r\n }\r\n\r\n getCellColor(level) {\r\n const rgb = this.hexToRgb(this.baseColor);\r\n if (level === 0) return 'rgba(0, 0, 0, 0.1)';\r\n const opacity = [0.2, 0.4, 0.6, 0.8, 1][level - 1];\r\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})`;\r\n }\r\n\r\n getWeekdayLabels() {\r\n return ['', '一', '', '三', '', '五', ''];\r\n }\r\n\r\n getMonthLabels() {\r\n const months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];\r\n const result = [];\r\n let currentMonth = -1;\r\n \r\n for (let d = new Date(this.startDate); d <= this.endDate; d.setDate(d.getDate() + 1)) {\r\n const month = d.getMonth();\r\n const day = d.getDate();\r\n if (month !== currentMonth && day === 1) {\r\n result.push({ month, label: months[month], offset: Math.floor((d - this.startDate) / (1000 * 60 * 60 * 24)) });\r\n currentMonth = month;\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n getWeekCount() {\r\n let weeks = 0;\r\n let firstDate = new Date(this.startDate);\r\n const firstDayOfWeek = firstDate.getDay();\r\n \r\n for (let d = new Date(this.startDate); d <= this.endDate; d.setDate(d.getDate() + 1)) {\r\n if (d.getDay() === 0) {\r\n weeks++;\r\n }\r\n }\r\n \r\n if (firstDayOfWeek !== 0) {\r\n weeks++;\r\n }\r\n \r\n return weeks;\r\n }\r\n\r\n render() {\r\n const body = this.element.querySelector('.ds-heatmap__body');\r\n if (!body) return;\r\n \r\n body.innerHTML = '';\r\n \r\n const weeks = [];\r\n let currentWeek = [];\r\n \r\n let firstDate = new Date(this.startDate);\r\n const firstDayOfWeek = firstDate.getDay();\r\n for (let i = 1; i < firstDayOfWeek; i++) {\r\n currentWeek.push(null);\r\n }\r\n \r\n for (let d = new Date(this.startDate); d <= this.endDate; d.setDate(d.getDate() + 1)) {\r\n currentWeek.push(new Date(d));\r\n if (d.getDay() === 6 || d.getTime() === this.endDate.getTime()) {\r\n weeks.push(currentWeek);\r\n currentWeek = [];\r\n }\r\n }\r\n \r\n const weekCount = weeks.length;\r\n const cellWidth = this.element.classList.contains('ds-heatmap--compact') ? 12 : 16;\r\n const totalGridWidth = weekCount * cellWidth;\r\n \r\n const container = document.createElement('div');\r\n container.className = 'ds-heatmap__container';\r\n \r\n const labelsAndGrid = document.createElement('div');\r\n labelsAndGrid.className = 'ds-heatmap__labels-and-grid';\r\n \r\n const weekdayLabels = document.createElement('div');\r\n weekdayLabels.className = 'ds-heatmap__weekday-labels';\r\n const weekdayLabelHeight = this.element.classList.contains('ds-heatmap--compact') ? 12 : 16;\r\n this.getWeekdayLabels().forEach(label => {\r\n const el = document.createElement('div');\r\n el.className = 'ds-heatmap__weekday-label';\r\n el.textContent = label;\r\n el.style.height = weekdayLabelHeight + 'px';\r\n el.style.lineHeight = weekdayLabelHeight + 'px';\r\n weekdayLabels.appendChild(el);\r\n });\r\n labelsAndGrid.appendChild(weekdayLabels);\r\n \r\n const gridContainer = document.createElement('div');\r\n gridContainer.className = 'ds-heatmap__grid-container';\r\n \r\n const monthLabels = document.createElement('div');\r\n monthLabels.className = 'ds-heatmap__month-labels';\r\n monthLabels.style.width = totalGridWidth + 'px';\r\n \r\n const monthInfo = this.getMonthLabels();\r\n monthInfo.forEach((item, index) => {\r\n const el = document.createElement('div');\r\n el.className = 'ds-heatmap__month-label';\r\n el.textContent = item.label;\r\n \r\n const nextMonth = monthInfo[index + 1];\r\n let weekSpan;\r\n if (nextMonth) {\r\n weekSpan = Math.ceil((nextMonth.offset - item.offset) / 7);\r\n } else {\r\n weekSpan = weekCount - Math.floor(item.offset / 7);\r\n }\r\n \r\n el.style.width = (weekSpan * cellWidth) + 'px';\r\n monthLabels.appendChild(el);\r\n });\r\n gridContainer.appendChild(monthLabels);\r\n \r\n const grid = document.createElement('div');\r\n grid.className = 'ds-heatmap__grid';\r\n \r\n weeks.forEach((week) => {\r\n const weekColumn = document.createElement('div');\r\n weekColumn.className = 'ds-heatmap__week-column';\r\n \r\n week.forEach(date => {\r\n if (date === null) {\r\n const emptyCell = document.createElement('div');\r\n emptyCell.className = 'ds-heatmap__cell';\r\n emptyCell.style.visibility = 'hidden';\r\n weekColumn.appendChild(emptyCell);\r\n } else {\r\n const value = this.getDataByDate(date);\r\n const maxValue = Math.max(...this.data.map(d => d.value), 1);\r\n const level = this.getLevel(value, maxValue);\r\n \r\n const cell = document.createElement('div');\r\n cell.className = 'ds-heatmap__cell';\r\n cell.dataset.date = this.formatDate(date);\r\n cell.dataset.value = value;\r\n cell.style.backgroundColor = this.getCellColor(level);\r\n \r\n const mouseenterHandler = (e) => this.showTooltip(e, date, value);\r\n const mouseleaveHandler = () => this.hideTooltip();\r\n const clickHandler = () => {\r\n if (this.onCellClick) {\r\n this.onCellClick({ date: this.formatDate(date), value });\r\n }\r\n };\r\n \r\n cell.addEventListener('mouseenter', mouseenterHandler);\r\n cell.addEventListener('mouseleave', mouseleaveHandler);\r\n cell.addEventListener('click', clickHandler);\r\n \r\n this._listeners.push(\r\n { el: cell, event: 'mouseenter', handler: mouseenterHandler },\r\n { el: cell, event: 'mouseleave', handler: mouseleaveHandler },\r\n { el: cell, event: 'click', handler: clickHandler }\r\n );\r\n \r\n weekColumn.appendChild(cell);\r\n }\r\n });\r\n \r\n grid.appendChild(weekColumn);\r\n });\r\n \r\n gridContainer.appendChild(grid);\r\n labelsAndGrid.appendChild(gridContainer);\r\n container.appendChild(labelsAndGrid);\r\n \r\n body.appendChild(container);\r\n this.renderLegend(body);\r\n }\r\n\r\n renderLegend(parent) {\r\n const legend = document.createElement('div');\r\n legend.className = 'ds-heatmap__legend';\r\n \r\n const label = document.createElement('span');\r\n label.className = 'ds-heatmap__legend-label';\r\n label.textContent = '少';\r\n \r\n const cells = document.createElement('div');\r\n cells.className = 'ds-heatmap__legend-cells';\r\n \r\n for (let i = 0; i <= 5; i++) {\r\n const cell = document.createElement('div');\r\n cell.className = 'ds-heatmap__legend-cell';\r\n cell.style.backgroundColor = this.getCellColor(i);\r\n cells.appendChild(cell);\r\n }\r\n \r\n const label2 = document.createElement('span');\r\n label2.className = 'ds-heatmap__legend-label';\r\n label2.textContent = '多';\r\n \r\n legend.appendChild(label);\r\n legend.appendChild(cells);\r\n legend.appendChild(label2);\r\n parent.appendChild(legend);\r\n }\r\n\r\n createTooltip() {\r\n this.tooltip = document.createElement('div');\r\n this.tooltip.className = 'ds-heatmap__tooltip';\r\n document.body.appendChild(this.tooltip);\r\n }\r\n\r\n showTooltip(e, date, value) {\r\n const rect = e.target.getBoundingClientRect();\r\n const tooltipWidth = 150;\r\n \r\n this.tooltip.innerHTML = `\r\n <div class=\"ds-heatmap__tooltip-date\">${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日</div>\r\n <div class=\"ds-heatmap__tooltip-value\">${value} contributions</div>\r\n `;\r\n \r\n this.tooltip.style.left = Math.min(rect.left + rect.width / 2 - tooltipWidth / 2, window.innerWidth - tooltipWidth - 16) + 'px';\r\n this.tooltip.style.top = (rect.top - 50) + 'px';\r\n this.tooltip.classList.add('is-visible');\r\n }\r\n\r\n hideTooltip() {\r\n this.tooltip.classList.remove('is-visible');\r\n }\r\n\r\n updateData(data) {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = [];\r\n this.data = data;\r\n this.render();\r\n }\r\n\r\n setDateRange(startDate, endDate) {\r\n this.startDate = startDate;\r\n this.endDate = endDate;\r\n this.render();\r\n }\r\n\r\n destroy() {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n \r\n if (this.tooltip && this.tooltip.parentNode) {\r\n this.tooltip.parentNode.removeChild(this.tooltip);\r\n }\r\n this.tooltip = null;\r\n this.data = [];\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction initHeatmap(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const dataAttr = element.getAttribute('data-heatmap-data');\r\n let data = [];\r\n \r\n if (dataAttr) {\r\n try {\r\n data = JSON.parse(dataAttr);\r\n } catch (e) {\r\n data = generateMockHeatmapData();\r\n }\r\n } else {\r\n data = generateMockHeatmapData();\r\n }\r\n \r\n const instance = new Heatmap(element, {\r\n data: data,\r\n onCellClick: (info) => {\r\n }\r\n });\r\n \r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupHeatmap(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initHeatmaps() {\r\n document.querySelectorAll('.ds-heatmap').forEach(element => {\r\n initHeatmap(element);\r\n });\r\n}\r\n\r\nfunction generateMockHeatmapData() {\r\n const data = [];\r\n const today = new Date();\r\n const oneYearAgo = new Date();\r\n oneYearAgo.setFullYear(oneYearAgo.getFullYear() - 1);\r\n \r\n for (let d = new Date(oneYearAgo); d <= today; d.setDate(d.getDate() + 1)) {\r\n const year = d.getFullYear();\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n \r\n const isWeekend = d.getDay() === 0 || d.getDay() === 6;\r\n const baseValue = isWeekend ? Math.random() * 20 : Math.random() * 50;\r\n const value = Math.floor(baseValue);\r\n \r\n data.push({\r\n date: `${year}-${month}-${day}`,\r\n value: value > 0 ? value : Math.floor(Math.random() * 30) + 1\r\n });\r\n }\r\n \r\n return data;\r\n}\r\n\r\nfunction createHeatmap(selector, options = {}) {\r\n const element = document.querySelector(selector);\r\n if (element) {\r\n const data = options.data || generateMockHeatmapData();\r\n return new Heatmap(element, {\r\n data: data,\r\n ...options\r\n });\r\n }\r\n return null;\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { Heatmap, initHeatmaps, initHeatmap, cleanupHeatmap, createHeatmap, generateMockHeatmapData };\r\n} else {\r\n window.Heatmap = Heatmap;\r\n window.initHeatmap = initHeatmap;\r\n window.cleanupHeatmap = cleanupHeatmap;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('heatmap', initHeatmap, cleanupHeatmap);\r\n}","class Tooltip {\r\n constructor(element) {\r\n this.element = element;\r\n this.tooltipEl = null;\r\n \r\n this._showTooltip = null;\r\n this._hideTooltip = null;\r\n }\r\n\r\n init() {\r\n if (this.element.__kupolaInitialized) return;\r\n\r\n this._showTooltip = () => {\r\n const text = this.element.getAttribute('data-tooltip');\r\n const position = this.element.getAttribute('data-tooltip-position') || 'top';\r\n if (!text) return;\r\n \r\n this.tooltipEl = document.createElement('div');\r\n this.tooltipEl.className = 'ds-tooltip is-visible';\r\n this.tooltipEl.textContent = text;\r\n \r\n document.body.appendChild(this.tooltipEl);\r\n \r\n requestAnimationFrame(() => {\r\n const rect = this.element.getBoundingClientRect();\r\n const tooltipRect = this.tooltipEl.getBoundingClientRect();\r\n const viewportWidth = window.innerWidth;\r\n const viewportHeight = window.innerHeight;\r\n \r\n let left, top;\r\n \r\n switch (position) {\r\n case 'bottom':\r\n left = rect.left + rect.width / 2 - tooltipRect.width / 2;\r\n top = rect.bottom + 8;\r\n break;\r\n case 'right':\r\n left = rect.right + 8;\r\n top = rect.top + rect.height / 2 - tooltipRect.height / 2;\r\n break;\r\n case 'left':\r\n left = rect.left - tooltipRect.width - 8;\r\n top = rect.top + rect.height / 2 - tooltipRect.height / 2;\r\n break;\r\n case 'top':\r\n default:\r\n left = rect.left + rect.width / 2 - tooltipRect.width / 2;\r\n top = rect.top - tooltipRect.height - 8;\r\n break;\r\n }\r\n \r\n if (left < 8) left = 8;\r\n if (left + tooltipRect.width > viewportWidth) left = viewportWidth - tooltipRect.width - 8;\r\n if (top < 8) top = 8;\r\n if (top + tooltipRect.height > viewportHeight) top = viewportHeight - tooltipRect.height - 8;\r\n \r\n this.tooltipEl.style.left = `${left}px`;\r\n this.tooltipEl.style.top = `${top}px`;\r\n this.tooltipEl.style.position = 'fixed';\r\n });\r\n };\r\n\r\n this._hideTooltip = () => {\r\n if (this.tooltipEl) {\r\n this.tooltipEl.remove();\r\n this.tooltipEl = null;\r\n }\r\n };\r\n\r\n this.element.addEventListener('mouseenter', this._showTooltip);\r\n this.element.addEventListener('mouseleave', this._hideTooltip);\r\n this.element.addEventListener('focus', this._showTooltip);\r\n this.element.addEventListener('blur', this._hideTooltip);\r\n \r\n this.element.__kupolaInitialized = true;\r\n }\r\n\r\n destroy() {\r\n if (!this.element.__kupolaInitialized) return;\r\n\r\n if (this._showTooltip) {\r\n this.element.removeEventListener('mouseenter', this._showTooltip);\r\n this.element.removeEventListener('focus', this._showTooltip);\r\n }\r\n \r\n if (this._hideTooltip) {\r\n this.element.removeEventListener('mouseleave', this._hideTooltip);\r\n this.element.removeEventListener('blur', this._hideTooltip);\r\n }\r\n \r\n if (this._showTooltip && this._hideTooltip) {\r\n this._hideTooltip();\r\n }\r\n \r\n this._showTooltip = null;\r\n this._hideTooltip = null;\r\n this.element.__kupolaInitialized = false;\r\n }\r\n}\r\n\r\nfunction initTooltip(element) {\r\n const tooltip = new Tooltip(element);\r\n tooltip.init();\r\n element._kupolaTooltip = tooltip;\r\n}\r\n\r\nfunction initTooltips(root = document) {\r\n root.querySelectorAll('[data-tooltip]').forEach(element => {\r\n initTooltip(element);\r\n });\r\n}\r\n\r\nfunction cleanupTooltip(element) {\r\n if (element._kupolaTooltip) {\r\n element._kupolaTooltip.destroy();\r\n element._kupolaTooltip = null;\r\n }\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('tooltip', initTooltip, cleanupTooltip);\r\n}","class KupolaValidator {\r\n constructor() {\r\n this.validators = {\r\n required: this.validateRequired,\r\n email: this.validateEmail,\r\n url: this.validateUrl,\r\n minLength: this.validateMinLength,\r\n maxLength: this.validateMaxLength,\r\n pattern: this.validatePattern,\r\n min: this.validateMin,\r\n max: this.validateMax,\r\n equalTo: this.validateEqualTo,\r\n phone: this.validatePhone,\r\n date: this.validateDate,\r\n number: this.validateNumber\r\n };\r\n \r\n this.customValidators = {};\r\n this.asyncValidators = {};\r\n this.customAsyncValidators = {};\r\n this.formStates = {};\r\n this.submitting = new Set();\r\n }\r\n\r\n addValidator(name, callback) {\r\n this.customValidators[name] = callback;\r\n }\r\n\r\n addAsyncValidator(name, callback) {\r\n this.customAsyncValidators[name] = callback;\r\n }\r\n\r\n validate(form) {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n const errors = {};\r\n const inputs = form.querySelectorAll('[data-validate]');\r\n let hasError = false;\r\n \r\n inputs.forEach(input => {\r\n const name = input.name || input.id;\r\n const rules = this.parseRules(input.getAttribute('data-validate'));\r\n const value = this.getValue(input);\r\n \r\n for (const [rule, params] of Object.entries(rules)) {\r\n const validatorFunc = this.customValidators[rule] || this.validators[rule];\r\n const isValid = validatorFunc?.(value, params);\r\n if (!isValid) {\r\n errors[name] = this.getErrorMessage(rule, params, input);\r\n this.showError(input, errors[name]);\r\n hasError = true;\r\n break;\r\n } else {\r\n this.clearError(input);\r\n }\r\n }\r\n });\r\n \r\n this.formStates[formId] = {\r\n valid: !hasError,\r\n errors: errors,\r\n errorCount: Object.keys(errors).length\r\n };\r\n \r\n this.updateFormState(form);\r\n \r\n return !hasError;\r\n }\r\n\r\n getValue(input) {\r\n if (input.classList.contains('ds-datepicker__input') || input.classList.contains('ds-timepicker__input')) {\r\n return input.value.trim();\r\n }\r\n \r\n if (input.closest('.ds-select')) {\r\n const select = input.closest('.ds-select');\r\n const valueEl = select.querySelector('.ds-select__value') || select.querySelector('.ds-select__trigger span');\r\n return valueEl ? valueEl.textContent.trim() : '';\r\n }\r\n \r\n if (input.closest('.ds-fileupload')) {\r\n const upload = input.closest('.ds-fileupload');\r\n const uploadInstance = upload.__fileUploadInstance;\r\n return uploadInstance && uploadInstance.getFiles().length > 0 ? 'has-files' : '';\r\n }\r\n \r\n return input.value.trim();\r\n }\r\n\r\n validateInput(input) {\r\n const rules = this.parseRules(input.getAttribute('data-validate'));\r\n const value = this.getValue(input);\r\n \r\n for (const [rule, params] of Object.entries(rules)) {\r\n const validatorFunc = this.customValidators[rule] || this.validators[rule];\r\n const isValid = validatorFunc?.(value, params);\r\n if (!isValid) {\r\n this.showError(input, this.getErrorMessage(rule, params, input));\r\n return false;\r\n }\r\n }\r\n \r\n this.clearError(input);\r\n return true;\r\n }\r\n\r\n validateAll() {\r\n const forms = document.querySelectorAll('form[data-validation]');\r\n let allValid = true;\r\n \r\n forms.forEach(form => {\r\n if (!this.validate(form)) {\r\n allValid = false;\r\n }\r\n });\r\n \r\n return allValid;\r\n }\r\n\r\n async validateAsync(form, options = {}) {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n const errors = {};\r\n const group = options.group;\r\n const inputs = group \r\n ? form.querySelectorAll(`[data-validate][data-validate-group=\"${group}\"]`)\r\n : form.querySelectorAll('[data-validate]');\r\n \r\n let hasError = false;\r\n \r\n for (const input of inputs) {\r\n const isValid = await this.validateInputAsync(input);\r\n if (!isValid) {\r\n hasError = true;\r\n }\r\n }\r\n \r\n const formErrors = {};\r\n inputs.forEach(input => {\r\n const name = input.name || input.id;\r\n const errorElement = input.parentElement.querySelector('.ds-input__error');\r\n if (errorElement) {\r\n formErrors[name] = errorElement.textContent;\r\n }\r\n });\r\n \r\n this.formStates[formId] = {\r\n valid: !hasError,\r\n errors: formErrors,\r\n errorCount: Object.keys(formErrors).length\r\n };\r\n \r\n this.updateFormState(form);\r\n \r\n return !hasError;\r\n }\r\n\r\n async validateInputAsync(input) {\r\n const rules = this.parseRules(input.getAttribute('data-validate'));\r\n const asyncRules = this.parseRules(input.getAttribute('data-validate-async') || '');\r\n const value = this.getValue(input);\r\n \r\n for (const [rule, params] of Object.entries(rules)) {\r\n const validatorFunc = this.customValidators[rule] || this.validators[rule];\r\n const isValid = validatorFunc?.(value, params);\r\n if (!isValid) {\r\n this.showError(input, this.getErrorMessage(rule, params, input));\r\n return false;\r\n }\r\n }\r\n \r\n for (const [rule, params] of Object.entries(asyncRules)) {\r\n const validatorFunc = this.customAsyncValidators[rule] || this.asyncValidators[rule];\r\n if (validatorFunc) {\r\n try {\r\n const isValid = await validatorFunc(value, params, input);\r\n if (!isValid) {\r\n this.showError(input, this.getErrorMessage(rule, params, input));\r\n return false;\r\n }\r\n } catch (e) {\r\n this.showError(input, e.message || 'Validation error');\r\n return false;\r\n }\r\n }\r\n }\r\n \r\n this.clearError(input);\r\n return true;\r\n }\r\n\r\n async validateGroup(form, groupName) {\r\n const inputs = form.querySelectorAll(`[data-validate][data-validate-group=\"${groupName}\"]`);\r\n let hasError = false;\r\n \r\n for (const input of inputs) {\r\n const isValid = await this.validateInputAsync(input);\r\n if (!isValid) {\r\n hasError = true;\r\n }\r\n }\r\n \r\n return !hasError;\r\n }\r\n\r\n getGroups(form) {\r\n const groups = new Set();\r\n form.querySelectorAll('[data-validate-group]').forEach(input => {\r\n groups.add(input.getAttribute('data-validate-group'));\r\n });\r\n return Array.from(groups);\r\n }\r\n\r\n getFormState(form) {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n return this.formStates[formId] || { valid: true, errors: {}, errorCount: 0, loading: false, submitting: false, disabled: false };\r\n }\r\n\r\n updateFormState(form) {\r\n const state = this.getFormState(form);\r\n \r\n if (state.valid) {\r\n form.classList.remove('ds-form--invalid');\r\n form.classList.add('ds-form--valid');\r\n } else {\r\n form.classList.remove('ds-form--valid');\r\n form.classList.add('ds-form--invalid');\r\n }\r\n \r\n if (state.loading) {\r\n form.classList.add('ds-form--loading');\r\n } else {\r\n form.classList.remove('ds-form--loading');\r\n }\r\n \r\n if (state.submitting) {\r\n form.classList.add('ds-form--submitting');\r\n } else {\r\n form.classList.remove('ds-form--submitting');\r\n }\r\n \r\n if (state.disabled) {\r\n form.classList.add('ds-form--disabled');\r\n form.querySelectorAll('input, select, textarea, button').forEach(el => el.disabled = true);\r\n } else {\r\n form.classList.remove('ds-form--disabled');\r\n form.querySelectorAll('input, select, textarea, button').forEach(el => {\r\n if (!el.hasAttribute('data-permanent-disabled')) {\r\n el.disabled = false;\r\n }\r\n });\r\n }\r\n \r\n const statusElement = form.querySelector('.ds-form__status');\r\n if (statusElement) {\r\n if (state.errorCount > 0) {\r\n statusElement.textContent = `${state.errorCount} ${state.errorCount === 1 ? 'error' : 'errors'} found`;\r\n statusElement.classList.add('ds-form__status--error');\r\n } else {\r\n statusElement.textContent = 'All fields are valid';\r\n statusElement.classList.remove('ds-form__status--error');\r\n }\r\n }\r\n }\r\n\r\n setFormLoading(form, loading) {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n if (!this.formStates[formId]) {\r\n this.formStates[formId] = { valid: true, errors: {}, errorCount: 0, loading: false, submitting: false, disabled: false };\r\n }\r\n this.formStates[formId].loading = loading;\r\n this.updateFormState(form);\r\n }\r\n\r\n setFormSubmitting(form, submitting) {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n if (!this.formStates[formId]) {\r\n this.formStates[formId] = { valid: true, errors: {}, errorCount: 0, loading: false, submitting: false, disabled: false };\r\n }\r\n this.formStates[formId].submitting = submitting;\r\n this.updateFormState(form);\r\n }\r\n\r\n setFormDisabled(form, disabled) {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n if (!this.formStates[formId]) {\r\n this.formStates[formId] = { valid: true, errors: {}, errorCount: 0, loading: false, submitting: false, disabled: false };\r\n }\r\n this.formStates[formId].disabled = disabled;\r\n this.updateFormState(form);\r\n }\r\n\r\n resetForm(form) {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n this.formStates[formId] = { valid: true, errors: {}, errorCount: 0, loading: false, submitting: false, disabled: false };\r\n form.reset();\r\n form.querySelectorAll('.ds-input--error').forEach(el => {\r\n el.classList.remove('ds-input--error');\r\n const errorElement = el.parentElement?.querySelector('.ds-input__error');\r\n if (errorElement) {\r\n errorElement.textContent = '';\r\n }\r\n });\r\n this.updateFormState(form);\r\n }\r\n\r\n parseRules(rulesString) {\r\n const rules = {};\r\n const parts = rulesString.split('|');\r\n \r\n parts.forEach(part => {\r\n const [rule, params] = part.split(':');\r\n rules[rule] = params ? params.split(',') : [];\r\n });\r\n \r\n return rules;\r\n }\r\n\r\n validateRequired(value) {\r\n return value !== '';\r\n }\r\n\r\n validateEmail(value) {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(value);\r\n }\r\n\r\n validateUrl(value) {\r\n const urlRegex = /^(https?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/;\r\n return urlRegex.test(value);\r\n }\r\n\r\n validateMinLength(value, [min]) {\r\n return value.length >= parseInt(min);\r\n }\r\n\r\n validateMaxLength(value, [max]) {\r\n return value.length <= parseInt(max);\r\n }\r\n\r\n validatePattern(value, [pattern]) {\r\n const regex = new RegExp(pattern);\r\n return regex.test(value);\r\n }\r\n\r\n validateMin(value, [min]) {\r\n return parseFloat(value) >= parseFloat(min);\r\n }\r\n\r\n validateMax(value, [max]) {\r\n return parseFloat(value) <= parseFloat(max);\r\n }\r\n\r\n validateEqualTo(value, [targetId]) {\r\n const target = document.getElementById(targetId);\r\n return target && value === target.value;\r\n }\r\n\r\n validatePhone(value) {\r\n const phoneRegex = /^[\\d\\s\\-\\+\\(\\)]{7,20}$/;\r\n return phoneRegex.test(value);\r\n }\r\n\r\n validateDate(value) {\r\n const dateRegex = /^\\d{4}[-/]\\d{2}[-/]\\d{2}$/;\r\n return dateRegex.test(value) && !isNaN(Date.parse(value));\r\n }\r\n\r\n validateNumber(value) {\r\n return !isNaN(parseFloat(value)) && isFinite(value);\r\n }\r\n\r\n showError(input, message) {\r\n input.classList.add('ds-input--error');\r\n input.classList.remove('ds-input--success');\r\n input.setAttribute('aria-invalid', 'true');\r\n \r\n let errorElement = input.parentElement.querySelector('.ds-input__error');\r\n if (!errorElement) {\r\n errorElement = document.createElement('span');\r\n errorElement.className = 'ds-input__error';\r\n errorElement.setAttribute('role', 'alert');\r\n errorElement.setAttribute('aria-live', 'polite');\r\n input.parentElement.appendChild(errorElement);\r\n }\r\n errorElement.textContent = message;\r\n \r\n this.removeStatusIcon(input);\r\n \r\n input.dispatchEvent(new CustomEvent('validation-error', { detail: { message } }));\r\n }\r\n\r\n clearError(input) {\r\n input.classList.remove('ds-input--error');\r\n input.setAttribute('aria-invalid', 'false');\r\n \r\n const errorElement = input.parentElement.querySelector('.ds-input__error');\r\n if (errorElement) {\r\n errorElement.remove();\r\n }\r\n \r\n input.dispatchEvent(new CustomEvent('validation-success'));\r\n }\r\n\r\n showSuccess(input) {\r\n input.classList.add('ds-input--success');\r\n input.classList.remove('ds-input--error');\r\n input.setAttribute('aria-invalid', 'false');\r\n \r\n this.removeStatusIcon(input);\r\n \r\n const icon = document.createElement('span');\r\n icon.className = 'ds-input__status-icon ds-input__status-icon--success';\r\n icon.innerHTML = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"20 6 9 17 4 12\"/></svg>';\r\n \r\n input.parentElement.appendChild(icon);\r\n }\r\n\r\n removeStatusIcon(input) {\r\n const icon = input.parentElement.querySelector('.ds-input__status-icon');\r\n if (icon) {\r\n icon.remove();\r\n }\r\n }\r\n\r\n getErrorMessage(rule, params, input) {\r\n const customMessage = input.getAttribute(`data-message-${rule}`);\r\n if (customMessage) return customMessage;\r\n \r\n const messages = {\r\n required: 'This field is required',\r\n email: 'Please enter a valid email address',\r\n url: 'Please enter a valid URL',\r\n minLength: `Minimum length is ${params[0]} characters`,\r\n maxLength: `Maximum length is ${params[0]} characters`,\r\n pattern: 'Please enter a valid value',\r\n min: `Minimum value is ${params[0]}`,\r\n max: `Maximum value is ${params[0]}`,\r\n equalTo: 'Values do not match',\r\n phone: 'Please enter a valid phone number',\r\n date: 'Please enter a valid date (YYYY-MM-DD)',\r\n number: 'Please enter a valid number'\r\n };\r\n return messages[rule] || 'Invalid input';\r\n }\r\n}\r\n\r\nconst validator = new KupolaValidator();\r\n\r\nif (!window.__kupolaValidationInitialized) {\r\n window.__kupolaValidationInitialized = true;\r\n document.addEventListener('DOMContentLoaded', () => {\r\n document.querySelectorAll('form[data-validation]').forEach(form => {\r\n form.addEventListener('submit', async (e) => {\r\n const formId = form.id || `form-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n if (validator.submitting.has(formId)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n \r\n e.preventDefault();\r\n \r\n const hasAsyncValidation = form.querySelector('[data-validate-async]') !== null;\r\n \r\n let isValid;\r\n if (hasAsyncValidation) {\r\n isValid = await validator.validateAsync(form);\r\n } else {\r\n isValid = validator.validate(form);\r\n }\r\n \r\n if (!isValid) {\r\n const firstError = form.querySelector('.ds-input--error');\r\n if (firstError) {\r\n firstError.focus();\r\n }\r\n } else {\r\n validator.submitting.add(formId);\r\n const submitBtn = form.querySelector('button[type=\"submit\"]');\r\n if (submitBtn) {\r\n const originalText = submitBtn.textContent;\r\n submitBtn.setAttribute('data-original-text', originalText);\r\n submitBtn.textContent = 'Submitting...';\r\n submitBtn.disabled = true;\r\n }\r\n \r\n try {\r\n const onSubmit = form.getAttribute('data-on-submit');\r\n if (onSubmit && window[onSubmit]) {\r\n await window[onSubmit](form);\r\n } else {\r\n form.submit();\r\n }\r\n } finally {\r\n validator.submitting.delete(formId);\r\n if (submitBtn) {\r\n submitBtn.textContent = submitBtn.getAttribute('data-original-text') || 'Submit';\r\n submitBtn.disabled = false;\r\n }\r\n }\r\n }\r\n });\r\n\r\n form.querySelectorAll('[data-validate]').forEach(input => {\r\n input.addEventListener('blur', () => {\r\n setTimeout(() => {\r\n const activeElement = document.activeElement;\r\n if (activeElement && activeElement.closest('.ds-select')) {\r\n return;\r\n }\r\n const isValid = validator.validateInput(input);\r\n if (isValid && input.value.trim()) {\r\n validator.showSuccess(input);\r\n }\r\n }, 50);\r\n });\r\n\r\n const debounce = (func, wait) => {\r\n let timeout;\r\n return (...args) => {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => func.apply(this, args), wait);\r\n };\r\n };\r\n\r\n const validateOnInput = debounce(() => {\r\n const value = validator.getValue(input);\r\n if (value.length > 0 || input.classList.contains('ds-input--error')) {\r\n const isValid = validator.validateInput(input);\r\n if (isValid && value) {\r\n validator.showSuccess(input);\r\n }\r\n } else {\r\n validator.removeStatusIcon(input);\r\n }\r\n }, 300);\r\n\r\n input.addEventListener('input', validateOnInput);\r\n\r\n input.addEventListener('keyup', (e) => {\r\n if (e.key === 'Enter') {\r\n const isValid = validator.validateInput(input);\r\n if (isValid && input.value.trim()) {\r\n validator.showSuccess(input);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n});\r\n}\r\n\r\nwindow.KupolaValidator = KupolaValidator;\r\nwindow.kupolaValidator = validator;","class VirtualList {\r\n constructor(element, options = {}) {\r\n this.element = element;\r\n this.data = options.data || [];\r\n this.itemHeight = options.itemHeight || 48;\r\n this.itemWidth = options.itemWidth || 200;\r\n this.bufferSize = options.bufferSize || 5;\r\n this.renderItem = options.renderItem || this.defaultRenderItem;\r\n this.onItemClick = options.onItemClick || null;\r\n this.onItemSelect = options.onItemSelect || null;\r\n this.onScroll = options.onScroll || null;\r\n this.onScrollEnd = options.onScrollEnd || null;\r\n this.selectedKey = options.selectedKey || null;\r\n this.keyField = options.keyField || 'id';\r\n this.useDynamicHeight = options.useDynamicHeight || false;\r\n this.dynamicHeightCache = new Map();\r\n this.estimatedHeight = options.estimatedHeight || 48;\r\n \r\n this.container = null;\r\n this.scrollbarTrack = null;\r\n this.scrollbarThumb = null;\r\n this.totalHeight = 0;\r\n this.startIndex = 0;\r\n this.endIndex = 0;\r\n this.isScrolling = false;\r\n this.scrollTimeout = null;\r\n this.lastScrollTop = 0;\r\n this.lastScrollLeft = 0;\r\n \r\n this.init();\r\n }\r\n\r\n defaultRenderItem(item, index) {\r\n return `\r\n <div class=\"ds-virtual-list__item-content\">\r\n <div class=\"ds-virtual-list__item-icon\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\r\n <polyline points=\"14 2 14 8 20 8\"/>\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\r\n <polyline points=\"10 9 9 9 8 9\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <div class=\"ds-virtual-list__item-title\">${item.title || item.name || `Item ${index + 1}`}</div>\r\n <div class=\"ds-virtual-list__item-subtitle\">${item.subtitle || 'Subtitle'}</div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n init() {\r\n this.createStructure();\r\n this.update();\r\n this.bindEvents();\r\n }\r\n\r\n createStructure() {\r\n this.element.innerHTML = `\r\n <div class=\"ds-virtual-list__scrollbar\">\r\n <div class=\"ds-virtual-list__scrollbar-track\">\r\n <div class=\"ds-virtual-list__scrollbar-thumb\"></div>\r\n </div>\r\n </div>\r\n <div class=\"ds-virtual-list__container\"></div>\r\n `;\r\n \r\n this.container = this.element.querySelector('.ds-virtual-list__container');\r\n this.scrollbarThumb = this.element.querySelector('.ds-virtual-list__scrollbar-thumb');\r\n }\r\n\r\n bindEvents() {\r\n this._scrollHandler = (e) => this.handleScroll(e);\r\n this._thumbDragStartHandler = (e) => this.handleThumbDragStart(e);\r\n this._thumbDragMoveHandler = (e) => this.handleThumbDragMove(e);\r\n this._thumbDragEndHandler = () => this.handleThumbDragEnd();\r\n this._wheelHandler = (e) => {\r\n e.preventDefault();\r\n \r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n \r\n if (isHorizontal) {\r\n this.element.scrollLeft += e.deltaX + e.deltaY;\r\n } else {\r\n this.element.scrollTop += e.deltaY + e.deltaX;\r\n }\r\n };\r\n \r\n this.element.addEventListener('scroll', this._scrollHandler);\r\n this.scrollbarThumb.addEventListener('mousedown', this._thumbDragStartHandler);\r\n \r\n document.addEventListener('mousemove', this._thumbDragMoveHandler);\r\n document.addEventListener('mouseup', this._thumbDragEndHandler);\r\n \r\n this.element.addEventListener('wheel', this._wheelHandler, { passive: false });\r\n \r\n this._listeners = [\r\n { el: this.element, event: 'scroll', handler: this._scrollHandler },\r\n { el: this.scrollbarThumb, event: 'mousedown', handler: this._thumbDragStartHandler },\r\n { el: document, event: 'mousemove', handler: this._thumbDragMoveHandler },\r\n { el: document, event: 'mouseup', handler: this._thumbDragEndHandler },\r\n { el: this.element, event: 'wheel', handler: this._wheelHandler }\r\n ];\r\n }\r\n\r\n handleScroll(e) {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const scrollOffset = isHorizontal ? this.element.scrollLeft : this.element.scrollTop;\r\n \r\n if (this.onScroll) {\r\n this.onScroll({ \r\n scrollOffset, \r\n isHorizontal,\r\n dataLength: this.data.length,\r\n startIndex: this.startIndex,\r\n endIndex: this.endIndex\r\n });\r\n }\r\n \r\n this.updateScrollState();\r\n this.renderVisibleItems();\r\n this.updateScrollbar();\r\n }\r\n\r\n updateScrollState() {\r\n this.isScrolling = true;\r\n this.element.classList.add('ds-virtual-list--scrolling');\r\n \r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n \r\n this.scrollTimeout = setTimeout(() => {\r\n this.isScrolling = false;\r\n this.element.classList.remove('ds-virtual-list--scrolling');\r\n \r\n if (this.onScrollEnd) {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const scrollOffset = isHorizontal ? this.element.scrollLeft : this.element.scrollTop;\r\n this.onScrollEnd({ \r\n scrollOffset, \r\n isHorizontal,\r\n dataLength: this.data.length,\r\n startIndex: this.startIndex,\r\n endIndex: this.endIndex\r\n });\r\n }\r\n }, 200);\r\n }\r\n\r\n getItemSize(index) {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n \r\n if (this.useDynamicHeight) {\r\n const key = this.data[index][this.keyField] || index;\r\n if (this.dynamicHeightCache.has(key)) {\r\n return this.dynamicHeightCache.get(key);\r\n }\r\n }\r\n \r\n return isHorizontal ? this.itemWidth : this.itemHeight;\r\n }\r\n\r\n getItemPositions() {\r\n const positions = [];\r\n let currentPosition = 0;\r\n \r\n this.data.forEach((item, index) => {\r\n const size = this.getItemSize(index);\r\n positions.push({\r\n start: currentPosition,\r\n end: currentPosition + size,\r\n size\r\n });\r\n currentPosition += size;\r\n });\r\n \r\n return positions;\r\n }\r\n\r\n getTotalSize() {\r\n if (this.useDynamicHeight) {\r\n return this.data.reduce((total, item, index) => {\r\n return total + this.getItemSize(index);\r\n }, 0);\r\n }\r\n \r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const itemSize = isHorizontal ? this.itemWidth : this.itemHeight;\r\n return this.data.length * itemSize;\r\n }\r\n\r\n getIndexAtOffset(offset) {\r\n if (this.useDynamicHeight) {\r\n const positions = this.getItemPositions();\r\n for (let i = 0; i < positions.length; i++) {\r\n if (offset >= positions[i].start && offset < positions[i].end) {\r\n return i;\r\n }\r\n }\r\n return this.data.length - 1;\r\n }\r\n \r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const itemSize = isHorizontal ? this.itemWidth : this.itemHeight;\r\n return Math.floor(offset / itemSize);\r\n }\r\n\r\n renderVisibleItems() {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const scrollOffset = isHorizontal ? this.element.scrollLeft : this.element.scrollTop;\r\n const viewportSize = isHorizontal ? this.element.clientWidth : this.element.clientHeight;\r\n \r\n const startIndex = Math.max(0, this.getIndexAtOffset(scrollOffset) - this.bufferSize);\r\n let endIndex = Math.min(\r\n this.data.length - 1,\r\n this.getIndexAtOffset(scrollOffset + viewportSize) + this.bufferSize\r\n );\r\n \r\n if (endIndex < startIndex) endIndex = startIndex;\r\n \r\n this.startIndex = startIndex;\r\n this.endIndex = endIndex;\r\n \r\n const visibleData = this.data.slice(startIndex, endIndex + 1);\r\n \r\n let html = '';\r\n let currentPosition = 0;\r\n \r\n if (this.useDynamicHeight) {\r\n const positions = this.getItemPositions();\r\n currentPosition = positions[startIndex]?.start || 0;\r\n } else {\r\n const itemSize = isHorizontal ? this.itemWidth : this.itemHeight;\r\n currentPosition = startIndex * itemSize;\r\n }\r\n \r\n visibleData.forEach((item, i) => {\r\n const actualIndex = startIndex + i;\r\n const key = item[this.keyField] || actualIndex;\r\n const isSelected = this.selectedKey === key;\r\n const itemSize = this.getItemSize(actualIndex);\r\n const position = currentPosition;\r\n \r\n if (isHorizontal) {\r\n html += `\r\n <div \r\n class=\"ds-virtual-list__item${isSelected ? ' is-selected' : ''}\" \r\n style=\"position: absolute; top: 0; left: ${position}px; width: ${itemSize}px; height: 100%;\"\r\n data-index=\"${actualIndex}\"\r\n data-key=\"${key}\"\r\n >\r\n ${this.renderItem(item, actualIndex)}\r\n </div>\r\n `;\r\n } else {\r\n html += `\r\n <div \r\n class=\"ds-virtual-list__item${isSelected ? ' is-selected' : ''}\" \r\n style=\"position: absolute; top: ${position}px; left: 0; right: 0; height: ${itemSize}px;\"\r\n data-index=\"${actualIndex}\"\r\n data-key=\"${key}\"\r\n >\r\n ${this.renderItem(item, actualIndex)}\r\n </div>\r\n `;\r\n }\r\n \r\n currentPosition += itemSize;\r\n });\r\n \r\n this.container.innerHTML = html;\r\n \r\n if (this.useDynamicHeight) {\r\n this.updateDynamicHeights();\r\n }\r\n \r\n this.container.querySelectorAll('.ds-virtual-list__item').forEach(item => {\r\n item.addEventListener('click', () => this.handleItemClick(item));\r\n });\r\n }\r\n\r\n updateDynamicHeights() {\r\n if (this.isUpdating) return;\r\n \r\n let hasChanges = false;\r\n this.container.querySelectorAll('.ds-virtual-list__item').forEach(item => {\r\n const index = parseInt(item.dataset.index);\r\n const key = this.data[index][this.keyField] || index;\r\n const actualHeight = item.offsetHeight;\r\n \r\n if (actualHeight !== this.getItemSize(index)) {\r\n this.dynamicHeightCache.set(key, actualHeight);\r\n hasChanges = true;\r\n }\r\n });\r\n \r\n if (hasChanges) {\r\n this.isUpdating = true;\r\n this.update();\r\n this.isUpdating = false;\r\n }\r\n }\r\n\r\n handleItemClick(item) {\r\n const index = parseInt(item.dataset.index);\r\n const key = item.dataset.key;\r\n const dataItem = this.data[index];\r\n \r\n if (this.onItemClick) {\r\n this.onItemClick({ item: dataItem, index, key });\r\n }\r\n \r\n if (this.onItemSelect) {\r\n this.select(key);\r\n }\r\n }\r\n\r\n select(key) {\r\n this.selectedKey = key;\r\n \r\n if (this.onItemSelect) {\r\n const index = this.data.findIndex(item => item[this.keyField] === key);\r\n if (index !== -1) {\r\n this.onItemSelect({ item: this.data[index], index, key });\r\n }\r\n }\r\n \r\n this.renderVisibleItems();\r\n }\r\n\r\n updateScrollbar() {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const totalSize = this.getTotalSize();\r\n const viewportSize = isHorizontal ? this.element.clientWidth : this.element.clientHeight;\r\n const scrollOffset = isHorizontal ? this.element.scrollLeft : this.element.scrollTop;\r\n \r\n if (isHorizontal) {\r\n this.scrollbarThumb.style.display = 'none';\r\n return;\r\n }\r\n \r\n const thumbHeight = Math.max(20, (viewportSize / totalSize) * viewportSize);\r\n const maxTop = viewportSize - thumbHeight;\r\n const thumbTop = (scrollOffset / (totalSize - viewportSize || 1)) * maxTop;\r\n \r\n this.scrollbarThumb.style.height = thumbHeight + 'px';\r\n this.scrollbarThumb.style.top = thumbTop + 'px';\r\n }\r\n\r\n handleThumbDragStart(e) {\r\n e.preventDefault();\r\n this.isDragging = true;\r\n this.dragStartY = e.clientY;\r\n this.dragStartTop = parseFloat(this.scrollbarThumb.style.top) || 0;\r\n }\r\n\r\n handleThumbDragMove(e) {\r\n if (!this.isDragging) return;\r\n \r\n const viewportHeight = this.element.clientHeight;\r\n const totalHeight = this.getTotalSize();\r\n const thumbHeight = parseFloat(this.scrollbarThumb.style.height) || viewportHeight;\r\n const maxTop = viewportHeight - thumbHeight;\r\n \r\n const deltaY = e.clientY - this.dragStartY;\r\n let newTop = this.dragStartTop + deltaY;\r\n newTop = Math.max(0, Math.min(newTop, maxTop));\r\n \r\n this.scrollbarThumb.style.top = newTop + 'px';\r\n \r\n const scrollTop = (newTop / maxTop) * (totalHeight - viewportHeight || 0);\r\n this.element.scrollTop = scrollTop;\r\n }\r\n\r\n handleThumbDragEnd() {\r\n this.isDragging = false;\r\n }\r\n\r\n update() {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const totalSize = this.getTotalSize();\r\n \r\n if (isHorizontal) {\r\n this.container.style.width = totalSize + 'px';\r\n this.container.style.height = '100%';\r\n } else {\r\n this.container.style.height = totalSize + 'px';\r\n this.container.style.width = '100%';\r\n }\r\n \r\n this.renderVisibleItems();\r\n this.updateScrollbar();\r\n }\r\n\r\n setData(data) {\r\n this.data = data;\r\n if (this.useDynamicHeight) {\r\n this.dynamicHeightCache.clear();\r\n }\r\n this.update();\r\n }\r\n\r\n addItem(item) {\r\n this.data.push(item);\r\n this.update();\r\n }\r\n\r\n removeItem(index) {\r\n this.data.splice(index, 1);\r\n if (this.useDynamicHeight) {\r\n this.dynamicHeightCache.clear();\r\n }\r\n this.update();\r\n }\r\n\r\n insertItem(index, item) {\r\n this.data.splice(index, 0, item);\r\n if (this.useDynamicHeight) {\r\n this.dynamicHeightCache.clear();\r\n }\r\n this.update();\r\n }\r\n\r\n scrollTo(index, behavior = 'smooth') {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n \r\n let scrollOffset = 0;\r\n if (this.useDynamicHeight) {\r\n const positions = this.getItemPositions();\r\n scrollOffset = positions[index]?.start || 0;\r\n } else {\r\n const itemSize = isHorizontal ? this.itemWidth : this.itemHeight;\r\n scrollOffset = index * itemSize;\r\n }\r\n \r\n if (isHorizontal) {\r\n this.element.scrollTo({ left: scrollOffset, behavior });\r\n } else {\r\n this.element.scrollTo({ top: scrollOffset, behavior });\r\n }\r\n }\r\n\r\n scrollToKey(key, behavior = 'smooth') {\r\n const index = this.data.findIndex(item => item[this.keyField] === key);\r\n if (index !== -1) {\r\n this.scrollTo(index, behavior);\r\n }\r\n }\r\n\r\n scrollToTop(behavior = 'smooth') {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n this.element.scrollTo({ [isHorizontal ? 'left' : 'top']: 0, behavior });\r\n }\r\n\r\n scrollToBottom(behavior = 'smooth') {\r\n const isHorizontal = this.element.classList.contains('ds-virtual-list--horizontal');\r\n const totalSize = this.getTotalSize();\r\n const viewportSize = isHorizontal ? this.element.clientWidth : this.element.clientHeight;\r\n this.element.scrollTo({ [isHorizontal ? 'left' : 'top']: totalSize - viewportSize, behavior });\r\n }\r\n\r\n getVisibleItems() {\r\n return this.data.slice(this.startIndex, this.endIndex + 1).map((item, i) => ({\r\n item,\r\n index: this.startIndex + i,\r\n key: item[this.keyField] || this.startIndex + i\r\n }));\r\n }\r\n\r\n getItemIndex(key) {\r\n return this.data.findIndex(item => item[this.keyField] === key);\r\n }\r\n\r\n getItem(key) {\r\n const index = this.getItemIndex(key);\r\n return index !== -1 ? this.data[index] : null;\r\n }\r\n\r\n refreshCache() {\r\n this.dynamicHeightCache.clear();\r\n this.update();\r\n }\r\n\r\n destroy() {\r\n if (this.scrollTimeout) {\r\n clearTimeout(this.scrollTimeout);\r\n }\r\n \r\n this._listeners?.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n \r\n this.data = [];\r\n this.dynamicHeightCache.clear();\r\n this.container.innerHTML = '';\r\n \r\n this._listeners = null;\r\n this._scrollHandler = null;\r\n this._thumbDragStartHandler = null;\r\n this._thumbDragMoveHandler = null;\r\n this._thumbDragEndHandler = null;\r\n this._wheelHandler = null;\r\n this.container = null;\r\n this.scrollbarThumb = null;\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction generateMockVirtualListData(count = 1000) {\r\n const data = [];\r\n const titles = ['Document', 'Image', 'Video', 'Folder', 'Archive', 'Spreadsheet', 'Presentation', 'Code'];\r\n \r\n for (let i = 1; i <= count; i++) {\r\n const titleIndex = Math.floor(Math.random() * titles.length);\r\n const randomNum = Math.floor(Math.random() * 10000);\r\n \r\n data.push({\r\n id: i,\r\n title: `${titles[titleIndex]} ${randomNum}`,\r\n subtitle: `Last modified ${Math.floor(Math.random() * 30)} days ago`,\r\n type: titles[titleIndex].toLowerCase()\r\n });\r\n }\r\n \r\n return data;\r\n}\r\n\r\nfunction createVirtualList(selector, options = {}) {\r\n const element = document.querySelector(selector);\r\n if (element) {\r\n const data = options.data || generateMockVirtualListData(options.count || 1000);\r\n return new VirtualList(element, {\r\n data: data,\r\n ...options\r\n });\r\n }\r\n return null;\r\n}\r\n\r\nfunction initVirtualList(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const dataAttr = element.getAttribute('data-virtual-list');\r\n let data = [];\r\n \r\n if (dataAttr) {\r\n try {\r\n data = JSON.parse(dataAttr);\r\n } catch (e) {\r\n data = generateMockVirtualListData(1000);\r\n }\r\n } else {\r\n data = generateMockVirtualListData(1000);\r\n }\r\n \r\n const instance = new VirtualList(element, {\r\n data: data,\r\n onItemClick: (info) => {},\r\n onItemSelect: (info) => {}\r\n });\r\n \r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupVirtualList(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initVirtualLists() {\r\n document.querySelectorAll('.ds-virtual-list').forEach(element => {\r\n initVirtualList(element);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { VirtualList, initVirtualLists, initVirtualList, cleanupVirtualList, createVirtualList, generateMockVirtualListData };\r\n} else {\r\n window.initVirtualList = initVirtualList;\r\n window.cleanupVirtualList = cleanupVirtualList;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('virtual-list', initVirtualList, cleanupVirtualList);\r\n}","class KupolaDevTools {\r\n constructor(options = {}) {\r\n this.enabled = options.enabled ?? false;\r\n this.panel = null;\r\n this.isOpen = false;\r\n this.activeTab = 'storage';\r\n this.activeStorageType = 'cookies';\r\n this.requestHistory = [];\r\n this.maxHistorySize = 50;\r\n }\r\n\r\n init() {\r\n if (!this.enabled) return;\r\n try {\r\n this.createToggleButton();\r\n this.createPanel();\r\n this.setupNetworkInterceptor();\r\n } catch (error) {\r\n console.error('Error in init:', error);\r\n }\r\n }\r\n\r\n createToggleButton() {\r\n const button = document.createElement('button');\r\n button.className = 'kupola-devtools__toggle';\r\n button.textContent = '🛠️';\r\n button.style.cssText = `\r\n position: fixed;\r\n bottom: 28px;\r\n left: 50px;\r\n width: 48px;\r\n height: 48px;\r\n border-radius: 50%;\r\n background: #535164;\r\n color: white;\r\n border: none;\r\n cursor: pointer;\r\n z-index: 9999;\r\n font-size: 20px;\r\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\r\n transition: transform 0.2s;\r\n `;\r\n button.addEventListener('click', () => this.togglePanel());\r\n document.body.appendChild(button);\r\n this.toggleButton = button;\r\n }\r\n\r\n createPanel() {\r\n const panel = document.createElement('div');\r\n panel.className = 'kupola-devtools__panel';\r\n panel.style.cssText = `\r\n position: fixed;\r\n bottom: 80px;\r\n left: 28px;\r\n width: 550px;\r\n max-height: 650px;\r\n background: #1e1e1e;\r\n border-radius: 12px;\r\n box-shadow: 0 8px 32px rgba(0,0,0,0.4);\r\n z-index: 9998;\r\n display: none;\r\n flex-direction: column;\r\n overflow: hidden;\r\n border: 1px solid #333;\r\n `;\r\n \r\n panel.innerHTML = `\r\n <div class=\"kupola-devtools__header\">\r\n <span class=\"kupola-devtools__title\">DevTools</span>\r\n <button class=\"kupola-devtools__close\">✕</button>\r\n </div>\r\n <div class=\"kupola-devtools__tabs\">\r\n <button data-tab=\"storage\" class=\"kupola-devtools__tab active\">Storage</button>\r\n <button data-tab=\"network\" class=\"kupola-devtools__tab\">Network</button>\r\n </div>\r\n <div class=\"kupola-devtools__sub-tabs\" id=\"storage-sub-tabs\">\r\n <button class=\"kupola-devtools__sub-tab active\" data-storage=\"cookies\">Cookies</button>\r\n <button class=\"kupola-devtools__sub-tab\" data-storage=\"localStorage\">LocalStorage</button>\r\n <button class=\"kupola-devtools__sub-tab\" data-storage=\"sessionStorage\">SessionStorage</button>\r\n </div>\r\n <div class=\"kupola-devtools__sub-tabs\" id=\"network-sub-tabs\" style=\"display:none;\">\r\n <button class=\"kupola-devtools__network-action\" data-action=\"clear\">Clear</button>\r\n </div>\r\n <div class=\"kupola-devtools__content\">\r\n ${this.getStorageContent('cookies')}\r\n </div>\r\n `;\r\n \r\n document.body.appendChild(panel);\r\n this.panel = panel;\r\n \r\n panel.querySelector('.kupola-devtools__close').addEventListener('click', () => this.togglePanel());\r\n panel.querySelectorAll('.kupola-devtools__tab').forEach(tab => {\r\n tab.addEventListener('click', () => this.switchTab(tab.dataset.tab));\r\n });\r\n this.setupStorageListener();\r\n this.makeDraggable();\r\n this.injectStyles();\r\n }\r\n\r\n switchTab(tabName) {\r\n this.activeTab = tabName;\r\n \r\n this.panel.querySelectorAll('.kupola-devtools__tab').forEach(tab => {\r\n tab.classList.toggle('active', tab.dataset.tab === tabName);\r\n });\r\n \r\n const storageSubTabs = this.panel.querySelector('#storage-sub-tabs');\r\n const networkSubTabs = this.panel.querySelector('#network-sub-tabs');\r\n \r\n if (tabName === 'storage') {\r\n storageSubTabs.style.display = 'flex';\r\n networkSubTabs.style.display = 'none';\r\n this.renderStorageContent();\r\n } else {\r\n storageSubTabs.style.display = 'none';\r\n networkSubTabs.style.display = 'flex';\r\n this.renderNetworkContent();\r\n }\r\n }\r\n\r\n renderStorageContent() {\r\n const content = this.panel.querySelector('.kupola-devtools__content');\r\n if (content) {\r\n content.innerHTML = this.getStorageContent(this.activeStorageType);\r\n }\r\n }\r\n\r\n renderNetworkContent() {\r\n const content = this.panel.querySelector('.kupola-devtools__content');\r\n if (!content) return;\r\n \r\n if (this.requestHistory.length === 0) {\r\n content.innerHTML = '<div class=\"kupola-devtools__loading\">No network requests captured</div>';\r\n return;\r\n }\r\n \r\n let html = '';\r\n this.requestHistory.forEach((req, index) => {\r\n const statusClass = req.status >= 200 && req.status < 300 ? 'success' : \r\n req.status >= 400 ? 'error' : 'warning';\r\n const duration = req.duration ? `${req.duration}ms` : '-';\r\n \r\n html += `\r\n <div class=\"kupola-devtools__network-item\" data-index=\"${index}\">\r\n <div class=\"kupola-devtools__network-header\">\r\n <span class=\"kupola-devtools__network-method\">${req.method}</span>\r\n <span class=\"kupola-devtools__network-url\">${req.url}</span>\r\n <span class=\"kupola-devtools__network-status ${statusClass}\">${req.status}</span>\r\n <span class=\"kupola-devtools__network-duration\">${duration}</span>\r\n </div>\r\n <div class=\"kupola-devtools__network-details\" style=\"display:none;\">\r\n ${req.params ? `<div class=\"kupola-devtools__network-detail\"><strong>Params:</strong><pre>${this.truncateContent(JSON.stringify(req.params, null, 2), 1000)}</pre></div>` : ''}\r\n ${req.requestBody ? `<div class=\"kupola-devtools__network-detail\"><strong>Request Body:</strong><pre>${this.truncateContent(req.requestBody, 1000)}</pre></div>` : ''}\r\n ${req.response ? `<div class=\"kupola-devtools__network-detail\"><strong>Response:</strong><pre>${this.truncateContent(req.response, 1500)}</pre></div>` : ''}\r\n </div>\r\n </div>\r\n `;\r\n });\r\n \r\n content.innerHTML = html;\r\n \r\n content.querySelectorAll('.kupola-devtools__network-item').forEach(item => {\r\n item.addEventListener('click', () => {\r\n const details = item.querySelector('.kupola-devtools__network-details');\r\n details.style.display = details.style.display === 'none' ? 'block' : 'none';\r\n });\r\n });\r\n \r\n const clearBtn = this.panel.querySelector('[data-action=\"clear\"]');\r\n if (clearBtn) {\r\n clearBtn.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n this.clearNetworkHistory();\r\n });\r\n }\r\n }\r\n\r\n clearNetworkHistory() {\r\n this.requestHistory = [];\r\n this.renderNetworkContent();\r\n }\r\n\r\n truncateContent(content, maxLength) {\r\n if (!content) return '-';\r\n const str = typeof content === 'string' ? content : JSON.stringify(content);\r\n if (str.length <= maxLength) return str;\r\n return str.substring(0, maxLength) + `... (truncated, ${str.length} chars)`;\r\n }\r\n\r\n setupNetworkInterceptor() {\r\n const devTools = this;\r\n \r\n const originalFetch = window.fetch;\r\n window.fetch = async function(url, options = {}) {\r\n const startTime = Date.now();\r\n const requestId = Date.now() + Math.random();\r\n \r\n let requestBody = null;\r\n if (options.body) {\r\n if (typeof options.body === 'string') {\r\n requestBody = options.body;\r\n } else if (options.body instanceof FormData) {\r\n try {\r\n requestBody = JSON.stringify(Object.fromEntries(options.body));\r\n } catch {}\r\n } else {\r\n try {\r\n requestBody = JSON.stringify(options.body);\r\n } catch {}\r\n }\r\n }\r\n \r\n let params = null;\r\n try {\r\n const urlObj = new URL(typeof url === 'string' ? url : url.href);\r\n if (urlObj.search) {\r\n params = Object.fromEntries(urlObj.searchParams);\r\n }\r\n } catch {}\r\n \r\n const entry = {\r\n id: requestId,\r\n method: options.method || 'GET',\r\n url: typeof url === 'string' ? url : url.href,\r\n params,\r\n requestBody,\r\n status: 0,\r\n response: null,\r\n duration: null\r\n };\r\n \r\n devTools.addRequest(entry);\r\n \r\n try {\r\n const response = await originalFetch.apply(this, arguments);\r\n \r\n entry.status = response.status;\r\n entry.duration = Date.now() - startTime;\r\n \r\n try {\r\n const clone = response.clone();\r\n const text = await clone.text();\r\n try {\r\n entry.response = JSON.parse(text);\r\n } catch {\r\n entry.response = text;\r\n }\r\n } catch {}\r\n \r\n devTools.updateRequest(entry);\r\n \r\n return response;\r\n } catch (error) {\r\n entry.status = -1;\r\n entry.response = error.message;\r\n entry.duration = Date.now() - startTime;\r\n devTools.updateRequest(entry);\r\n throw error;\r\n }\r\n };\r\n \r\n const originalOpen = XMLHttpRequest.prototype.open;\r\n XMLHttpRequest.prototype.open = function(method, url) {\r\n this.__kupolaRequest = {\r\n method,\r\n url,\r\n params: null,\r\n requestBody: null,\r\n status: 0,\r\n response: null,\r\n startTime: Date.now()\r\n };\r\n \r\n try {\r\n const urlObj = new URL(url);\r\n if (urlObj.search) {\r\n this.__kupolaRequest.params = Object.fromEntries(urlObj.searchParams);\r\n }\r\n } catch {}\r\n \r\n originalOpen.apply(this, arguments);\r\n };\r\n \r\n const originalSend = XMLHttpRequest.prototype.send;\r\n XMLHttpRequest.prototype.send = function(body) {\r\n if (this.__kupolaRequest) {\r\n if (body) {\r\n if (typeof body === 'string') {\r\n this.__kupolaRequest.requestBody = body;\r\n } else if (body instanceof FormData) {\r\n try {\r\n this.__kupolaRequest.requestBody = JSON.stringify(Object.fromEntries(body));\r\n } catch {}\r\n }\r\n }\r\n \r\n const entry = { ...this.__kupolaRequest };\r\n devTools.addRequest(entry);\r\n this.__kupolaEntry = entry;\r\n }\r\n \r\n originalSend.apply(this, arguments);\r\n };\r\n \r\n const originalOnReadyStateChange = XMLHttpRequest.prototype.onreadystatechange;\r\n XMLHttpRequest.prototype.onreadystatechange = function() {\r\n if (this.__kupolaEntry && this.readyState === 4) {\r\n this.__kupolaEntry.status = this.status;\r\n this.__kupolaEntry.duration = Date.now() - this.__kupolaRequest.startTime;\r\n \r\n try {\r\n const responseText = this.responseText;\r\n try {\r\n this.__kupolaEntry.response = JSON.parse(responseText);\r\n } catch {\r\n this.__kupolaEntry.response = responseText;\r\n }\r\n } catch {}\r\n \r\n devTools.updateRequest(this.__kupolaEntry);\r\n }\r\n \r\n if (typeof originalOnReadyStateChange === 'function') {\r\n originalOnReadyStateChange.apply(this, arguments);\r\n }\r\n };\r\n }\r\n\r\n addRequest(entry) {\r\n this.requestHistory.unshift(entry);\r\n if (this.requestHistory.length > this.maxHistorySize) {\r\n this.requestHistory.pop();\r\n }\r\n \r\n if (this.isOpen && this.activeTab === 'network') {\r\n this.renderNetworkContent();\r\n }\r\n }\r\n\r\n updateRequest(entry) {\r\n const index = this.requestHistory.findIndex(r => r.id === entry.id || \r\n (r.url === entry.url && r.method === entry.method && !r.status));\r\n if (index !== -1) {\r\n this.requestHistory[index] = entry;\r\n \r\n if (this.isOpen && this.activeTab === 'network') {\r\n this.renderNetworkContent();\r\n }\r\n }\r\n }\r\n \r\n setupStorageListener() {\r\n const devTools = this;\r\n \r\n window.addEventListener('storage', (e) => {\r\n if (devTools.isOpen && devTools.activeTab === 'storage') {\r\n const content = devTools.panel?.querySelector('.kupola-devtools__content');\r\n if (content) {\r\n const type = e.storageArea === localStorage ? 'localStorage' : 'sessionStorage';\r\n devTools.activeStorageType = type;\r\n devTools.updateStorageTabs();\r\n content.innerHTML = devTools.getStorageContent(type);\r\n }\r\n }\r\n });\r\n \r\n const originalSetItem = Storage.prototype.setItem;\r\n Storage.prototype.setItem = function(key, value) {\r\n const oldValue = this.getItem(key);\r\n originalSetItem.call(this, key, value);\r\n const event = new StorageEvent('storage', {\r\n key,\r\n oldValue,\r\n newValue: value,\r\n url: window.location.href,\r\n storageArea: this\r\n });\r\n window.dispatchEvent(event);\r\n };\r\n \r\n const originalRemoveItem = Storage.prototype.removeItem;\r\n Storage.prototype.removeItem = function(key) {\r\n const oldValue = this.getItem(key);\r\n originalRemoveItem.call(this, key);\r\n const event = new StorageEvent('storage', {\r\n key,\r\n oldValue,\r\n newValue: null,\r\n url: window.location.href,\r\n storageArea: this\r\n });\r\n window.dispatchEvent(event);\r\n };\r\n }\r\n\r\n injectStyles() {\r\n const styles = document.createElement('style');\r\n styles.textContent = `\r\n .kupola-devtools__header { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; background: #2d2d2d; border-bottom: 1px solid #333; }\r\n .kupola-devtools__title { color: #535164; font-weight: 600; font-size: 14px; }\r\n .kupola-devtools__close { background: none; border: none; color: #888; cursor: pointer; font-size: 14px; padding: 4px; }\r\n .kupola-devtools__close:hover { color: #fff; }\r\n .kupola-devtools__tabs { display: flex; background: #252525; border-bottom: 1px solid #333; }\r\n .kupola-devtools__tab { flex: 1; padding: 10px 8px; background: none; border: none; color: #888; cursor: pointer; font-size: 11px; border-bottom: 2px solid transparent; transition: all 0.2s; }\r\n .kupola-devtools__tab:hover { color: #fff; }\r\n .kupola-devtools__tab.active { color: #535164; border-bottom-color: #535164; }\r\n .kupola-devtools__sub-tabs { display: flex; gap: 4px; padding: 8px 12px; background: #1e1e1e; border-bottom: 1px solid #333; }\r\n .kupola-devtools__sub-tab { padding: 4px 8px; background: #333; border: none; color: #888; cursor: pointer; font-size: 11px; border-radius: 4px; }\r\n .kupola-devtools__sub-tab:hover { color: #fff; }\r\n .kupola-devtools__sub-tab.active { background: #535164; color: white; }\r\n .kupola-devtools__network-action { padding: 4px 8px; background: #333; border: none; color: #888; cursor: pointer; font-size: 11px; border-radius: 4px; }\r\n .kupola-devtools__network-action:hover { color: #fff; background: #444; }\r\n .kupola-devtools__content { flex: 1; overflow-y: auto; padding: 12px; font-family: 'Consolas', monospace; font-size: 12px; }\r\n .kupola-devtools__list-item { padding: 6px 8px; border-radius: 4px; margin-bottom: 4px; background: #2a2a2a; }\r\n .kupola-devtools__list-item:hover { background: #333; }\r\n .kupola-devtools__loading { display: flex; justify-content: center; align-items: center; height: 100px; color: #666; }\r\n .kupola-devtools__storage-key { color: #9cdcfe; margin-right: 8px; }\r\n .kupola-devtools__storage-value { color: #ce9178; word-break: break-all; }\r\n .kupola-devtools__network-item { padding: 6px 8px; border-radius: 4px; margin-bottom: 4px; background: #2a2a2a; cursor: pointer; }\r\n .kupola-devtools__network-item:hover { background: #333; }\r\n .kupola-devtools__network-header { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\r\n .kupola-devtools__network-method { padding: 2px 6px; border-radius: 3px; font-weight: 600; font-size: 11px; color: white; }\r\n .kupola-devtools__network-method.GET { background: #4CAF50; }\r\n .kupola-devtools__network-method.POST { background: #2196F3; }\r\n .kupola-devtools__network-method.PUT { background: #FF9800; }\r\n .kupola-devtools__network-method.DELETE { background: #F44336; }\r\n .kupola-devtools__network-method.PATCH { background: #9C27B0; }\r\n .kupola-devtools__network-url { flex: 1; color: #9cdcfe; font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n .kupola-devtools__network-status { padding: 2px 6px; border-radius: 3px; font-size: 11px; font-weight: 600; }\r\n .kupola-devtools__network-status.success { background: #4CAF50; color: white; }\r\n .kupola-devtools__network-status.error { background: #F44336; color: white; }\r\n .kupola-devtools__network-status.warning { background: #FF9800; color: white; }\r\n .kupola-devtools__network-duration { color: #888; font-size: 11px; }\r\n .kupola-devtools__network-details { margin-top: 8px; padding-top: 8px; border-top: 1px solid #333; }\r\n .kupola-devtools__network-detail { margin-bottom: 8px; }\r\n .kupola-devtools__network-detail strong { color: #535164; display: block; margin-bottom: 4px; }\r\n .kupola-devtools__network-detail pre { margin: 0; color: #ce9178; white-space: pre-wrap; word-break: break-all; }\r\n `;\r\n document.head.appendChild(styles);\r\n }\r\n\r\n makeDraggable() {\r\n const header = this.panel.querySelector('.kupola-devtools__header');\r\n let isDragging = false;\r\n let startX, startY, startLeft, startTop;\r\n\r\n this._dragMouseDownHandler = (e) => {\r\n if (e.target.closest('.kupola-devtools__close')) return;\r\n isDragging = true;\r\n startX = e.clientX;\r\n startY = e.clientY;\r\n startLeft = this.panel.offsetLeft;\r\n startTop = this.panel.offsetTop;\r\n };\r\n\r\n this._dragMouseMoveHandler = (e) => {\r\n if (!isDragging) return;\r\n const dx = e.clientX - startX;\r\n const dy = e.clientY - startY;\r\n this.panel.style.left = `${startLeft + dx}px`;\r\n this.panel.style.right = 'auto';\r\n this.panel.style.top = `${Math.max(0, startTop + dy)}px`;\r\n };\r\n\r\n this._dragMouseUpHandler = () => { isDragging = false; };\r\n\r\n header.addEventListener('mousedown', this._dragMouseDownHandler);\r\n document.addEventListener('mousemove', this._dragMouseMoveHandler);\r\n document.addEventListener('mouseup', this._dragMouseUpHandler);\r\n }\r\n\r\n destroy() {\r\n const header = this.panel.querySelector('.kupola-devtools__header');\r\n \r\n if (header && this._dragMouseDownHandler) {\r\n header.removeEventListener('mousedown', this._dragMouseDownHandler);\r\n }\r\n \r\n if (this._dragMouseMoveHandler) {\r\n document.removeEventListener('mousemove', this._dragMouseMoveHandler);\r\n }\r\n \r\n if (this._dragMouseUpHandler) {\r\n document.removeEventListener('mouseup', this._dragMouseUpHandler);\r\n }\r\n \r\n if (this.panel && this.panel.parentNode) {\r\n this.panel.parentNode.removeChild(this.panel);\r\n }\r\n \r\n this._dragMouseDownHandler = null;\r\n this._dragMouseMoveHandler = null;\r\n this._dragMouseUpHandler = null;\r\n this.panel = null;\r\n }\r\n\r\n togglePanel() {\r\n this.isOpen = !this.isOpen;\r\n this.panel.style.display = this.isOpen ? 'flex' : 'none';\r\n \r\n if (this.isOpen && this.activeTab === 'network') {\r\n this.renderNetworkContent();\r\n }\r\n }\r\n\r\n updateStorageTabs() {\r\n this.panel.querySelectorAll('.kupola-devtools__sub-tab').forEach(tab => {\r\n tab.classList.toggle('active', tab.dataset.storage === this.activeStorageType);\r\n });\r\n }\r\n\r\n getStorageContent(type) {\r\n let items = [];\r\n \r\n try {\r\n if (type === 'cookies') {\r\n items = document.cookie.split(';').map(c => c.trim()).filter(c => c).map(c => {\r\n const [key, ...valueParts] = c.split('=');\r\n return { key, value: valueParts.join('=') };\r\n });\r\n } else if (type === 'localStorage') {\r\n for (let i = 0; i < localStorage.length; i++) {\r\n items.push({ key: localStorage.key(i), value: localStorage.getItem(localStorage.key(i)) });\r\n }\r\n } else if (type === 'sessionStorage') {\r\n for (let i = 0; i < sessionStorage.length; i++) {\r\n items.push({ key: sessionStorage.key(i), value: sessionStorage.getItem(sessionStorage.key(i)) });\r\n }\r\n }\r\n } catch (e) {\r\n console.error('Error reading storage:', e);\r\n return '<div class=\"kupola-devtools__loading\">Error reading storage</div>';\r\n }\r\n \r\n if (items.length === 0) return '<div class=\"kupola-devtools__loading\">No data</div>';\r\n \r\n let html = '';\r\n items.forEach(item => {\r\n let displayValue = item.value;\r\n if (displayValue && displayValue.length > 0 && displayValue.length < 2000) {\r\n try { \r\n const parsed = JSON.parse(displayValue);\r\n displayValue = JSON.stringify(parsed, null, 2); \r\n } catch {}\r\n } else if (displayValue && displayValue.length >= 2000) {\r\n displayValue = displayValue.substring(0, 500) + '... (truncated, ' + displayValue.length + ' chars)';\r\n }\r\n html += `<div class=\"kupola-devtools__list-item\"><div><span class=\"kupola-devtools__storage-key\">${item.key}</span></div><div class=\"kupola-devtools__storage-value\">${displayValue}</div></div>`;\r\n });\r\n \r\n return html;\r\n }\r\n\r\n handleStorageClick(e) {\r\n const target = e.target;\r\n if (target.classList.contains('kupola-devtools__sub-tab')) {\r\n e.stopPropagation();\r\n const type = target.dataset.storage;\r\n if (type) {\r\n this.activeStorageType = type;\r\n this.updateStorageTabs();\r\n const content = this.panel.querySelector('.kupola-devtools__content');\r\n if (content) {\r\n content.innerHTML = this.getStorageContent(type);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction initDevTools() {\r\n try {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const enabled = urlParams.has('dev') || urlParams.has('debug');\r\n \r\n if (enabled) {\r\n window.kupolaDevTools = new KupolaDevTools({ enabled: true });\r\n window.kupolaDevTools.init();\r\n \r\n window.addEventListener('click', (e) => {\r\n if (window.kupolaDevTools && window.kupolaDevTools.handleStorageClick) {\r\n window.kupolaDevTools.handleStorageClick(e);\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.error('Error initializing Kupola DevTools:', error);\r\n }\r\n}\r\n\r\nif (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', initDevTools);\r\n} else {\r\n initDevTools();\r\n}\r\n\r\nwindow.KupolaDevTools = KupolaDevTools;","/**\r\n * Lightweight icon set inspired by Lucide / shadcn — square, 2px stroke,\r\n * butt caps, miter joins. Use <i data-icon=\"name\"></i> and call Icons.render().\r\n */\r\n(function (global) {\r\n const ATTRS = 'xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\"';\r\n\r\n const PATHS = {\r\n // navigation\r\n 'globe': '<circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M2 12h20\"/><path d=\"M12 2a15.3 15.3 0 0 1 0 20\"/><path d=\"M12 2a15.3 15.3 0 0 0 0 20\"/>',\r\n 'dashboard': '<rect x=\"3\" y=\"3\" width=\"7\" height=\"9\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"5\"/><rect x=\"14\" y=\"12\" width=\"7\" height=\"9\"/><rect x=\"3\" y=\"16\" width=\"7\" height=\"5\"/>',\r\n 'mouse': '<rect x=\"6\" y=\"2\" width=\"12\" height=\"20\" rx=\"6\"/><line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"11\"/>',\r\n 'search': '<circle cx=\"11\" cy=\"11\" r=\"7\"/><path d=\"m20 20-3.5-3.5\"/>',\r\n 'square': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/>',\r\n 'circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/>',\r\n 'list': '<line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"/><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"/><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"/><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"/>',\r\n 'palette': '<rect x=\"3\" y=\"3\" width=\"8\" height=\"8\"/><rect x=\"13\" y=\"3\" width=\"8\" height=\"8\"/><rect x=\"3\" y=\"13\" width=\"8\" height=\"8\"/><rect x=\"13\" y=\"13\" width=\"8\" height=\"8\"/>',\r\n 'type': '<polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" y1=\"20\" x2=\"15\" y2=\"20\"/><line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"/>',\r\n 'ruler': '<rect x=\"3\" y=\"9\" width=\"18\" height=\"6\" transform=\"rotate(-45 12 12)\"/><line x1=\"7.5\" y1=\"12.5\" x2=\"9\" y2=\"14\"/><line x1=\"11\" y1=\"9\" x2=\"12.5\" y2=\"10.5\"/><line x1=\"14.5\" y1=\"5.5\" x2=\"16\" y2=\"7\"/>',\r\n 'sparkles': '<path d=\"M12 3l1.8 4.2L18 9l-4.2 1.8L12 15l-1.8-4.2L6 9l4.2-1.8L12 3z\"/><path d=\"M19 14l1 2.2 2.2 1-2.2 1L19 20.4l-1-2.2-2.2-1 2.2-1L19 14z\"/>',\r\n // actions\r\n 'copy': '<rect x=\"8\" y=\"8\" width=\"13\" height=\"13\"/><path d=\"M16 8V4H4v13h4\"/>',\r\n 'download': '<path d=\"M12 3v12\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\"/>',\r\n 'refresh': '<polyline points=\"21 4 21 10 15 10\"/><polyline points=\"3 20 3 14 9 14\"/><path d=\"M20.5 9A9 9 0 0 0 5 5.5L3 7M3.5 15A9 9 0 0 0 19 18.5L21 17\"/>',\r\n 'external': '<polyline points=\"14 4 20 4 20 10\"/><line x1=\"20\" y1=\"4\" x2=\"11\" y2=\"13\"/><path d=\"M20 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h5\"/>',\r\n 'settings': '<circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1 1.7 1.7 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1z\"/>',\r\n 'sliders': '<line x1=\"4\" y1=\"21\" x2=\"4\" y2=\"14\"/><line x1=\"4\" y1=\"10\" x2=\"4\" y2=\"3\"/><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"3\"/><line x1=\"20\" y1=\"21\" x2=\"20\" y2=\"16\"/><line x1=\"20\" y1=\"12\" x2=\"20\" y2=\"3\"/><line x1=\"1\" y1=\"14\" x2=\"7\" y2=\"14\"/><line x1=\"9\" y1=\"8\" x2=\"15\" y2=\"8\"/><line x1=\"17\" y1=\"16\" x2=\"23\" y2=\"16\"/>',\r\n 'plus': '<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>',\r\n 'minus': '<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/>',\r\n 'x': '<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>',\r\n 'github': '<path d=\"M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2 2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2 4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12 12 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6-.6.6-.6 1.2-.5 2V21\"/>',\r\n 'message-circle':'<path d=\"M21 12a9 9 0 0 1-13.5 7.8L3 21l1.2-4.5A9 9 0 1 1 21 12z\"/>',\r\n // SOLO chat title-bar glyphs (Figma 2510_18334) — round bubble + plus,\r\n // 4-tooth gear with center circle, and person-in-circle account avatar.\r\n 'message-plus':'<path d=\"M21 12a9 9 0 0 1-13.5 7.8L3 21l1.2-4.5A9 9 0 1 1 21 12z\"/><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"15\"/><line x1=\"9\" y1=\"12\" x2=\"15\" y2=\"12\"/>',\r\n 'gear': '<path d=\"M9.3 5.7 6.375 5.025 5.025 6.375 5.7 9.3 3 11.1 3 12.9 5.7 14.7 5.025 17.625 6.375 18.975 9.3 18.3 11.1 21 12.9 21 14.7 18.3 17.625 18.975 18.975 17.625 18.3 14.7 21 12.9 21 11.1 18.3 9.3 18.975 6.375 17.625 5.025 14.7 5.7 12.9 3 11.1 3 9.3 5.7Z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\r\n 'user-circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><circle cx=\"12\" cy=\"10\" r=\"2.5\"/><path d=\"M7 17.5a5 5 0 0 1 10 0\"/>',\r\n 'shield': '<path d=\"M12 3 4 6v6c0 5 3.5 8 8 9 4.5-1 8-4 8-9V6z\"/>',\r\n 'check': '<polyline points=\"4 12 10 18 20 6\"/>',\r\n 'arrow-right': '<line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\"/><polyline points=\"14 6 20 12 14 18\"/>',\r\n 'arrow-up-right': '<line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\"/><polyline points=\"9 6 18 6 18 15\"/>',\r\n 'chevron-right':'<polyline points=\"9 6 15 12 9 18\"/>',\r\n 'chevron-down':'<polyline points=\"6 9 12 15 18 9\"/>',\r\n // status — strict outline, 24x24, 2px stroke (no filled bowls)\r\n 'check-circle':'<circle cx=\"12\" cy=\"12\" r=\"9\"/><polyline points=\"8 12 11 15 16 9\"/>',\r\n 'alert-circle':'<circle cx=\"12\" cy=\"12\" r=\"9\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16.01\"/>',\r\n 'alert-triangle':'<path d=\"M12 3 22 20 2 20 Z\"/><line x1=\"12\" y1=\"10\" x2=\"12\" y2=\"15\"/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"18.01\"/>',\r\n 'info-circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"16\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8.01\"/>',\r\n 'x-circle': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/>',\r\n // legacy aliases — kept outline, square frame\r\n 'alert': '<path d=\"M12 3 22 20 2 20 Z\"/><line x1=\"12\" y1=\"10\" x2=\"12\" y2=\"15\"/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"18.01\"/>',\r\n 'info': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"16\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8.01\"/>',\r\n // misc\r\n 'mail': '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\"/><polyline points=\"3 6 12 13 21 6\"/>',\r\n 'user': '<path d=\"M4 21v-1a6 6 0 0 1 6-6h4a6 6 0 0 1 6 6v1\"/><circle cx=\"12\" cy=\"8\" r=\"4\"/>',\r\n 'users': '<path d=\"M2 21v-1a5 5 0 0 1 5-5h3a5 5 0 0 1 5 5v1\"/><circle cx=\"8.5\" cy=\"8\" r=\"3.5\"/><path d=\"M22 21v-1a5 5 0 0 0-4-4.9\"/><path d=\"M16 3.1A4 4 0 0 1 16 11\"/>',\r\n 'box': '<polyline points=\"3 7 12 2 21 7 21 17 12 22 3 17 3 7\"/><line x1=\"3\" y1=\"7\" x2=\"12\" y2=\"12\"/><line x1=\"21\" y1=\"7\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"12\"/>',\r\n 'zap': '<polygon points=\"13 2 4 14 12 14 11 22 20 10 12 10 13 2\"/>',\r\n 'moon': '<path d=\"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z\"/>',\r\n 'sun': '<circle cx=\"12\" cy=\"12\" r=\"4\"/><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"5\"/><line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\"/><line x1=\"2\" y1=\"12\" x2=\"5\" y2=\"12\"/><line x1=\"19\" y1=\"12\" x2=\"22\" y2=\"12\"/><line x1=\"4.6\" y1=\"4.6\" x2=\"6.7\" y2=\"6.7\"/><line x1=\"17.3\" y1=\"17.3\" x2=\"19.4\" y2=\"19.4\"/><line x1=\"4.6\" y1=\"19.4\" x2=\"6.7\" y2=\"17.3\"/><line x1=\"17.3\" y1=\"6.7\" x2=\"19.4\" y2=\"4.6\"/>',\r\n 'cmd': '<path d=\"M9 6h6v12H9z\"/><rect x=\"3\" y=\"3\" width=\"6\" height=\"6\"/><rect x=\"15\" y=\"3\" width=\"6\" height=\"6\"/><rect x=\"3\" y=\"15\" width=\"6\" height=\"6\"/><rect x=\"15\" y=\"15\" width=\"6\" height=\"6\"/>',\r\n 'key': '<circle cx=\"7.5\" cy=\"14.5\" r=\"3.5\"/><line x1=\"10\" y1=\"12\" x2=\"22\" y2=\"12\"/><line x1=\"22\" y1=\"12\" x2=\"22\" y2=\"16\"/><line x1=\"18\" y1=\"12\" x2=\"18\" y2=\"15\"/>',\r\n 'bell': '<path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 8 3 8H3s3-1 3-8z\"/><path d=\"M10 21a2 2 0 0 0 4 0\"/>',\r\n 'arrow-up': '<line x1=\"12\" y1=\"20\" x2=\"12\" y2=\"4\"/><polyline points=\"6 10 12 4 18 10\"/>',\r\n 'chevron-up': '<polyline points=\"6 15 12 9 18 15\"/>',\r\n 'arrow-left': '<line x1=\"20\" y1=\"12\" x2=\"4\" y2=\"12\"/><polyline points=\"10 6 4 12 10 18\"/>',\r\n 'mic': '<rect x=\"9\" y=\"3\" width=\"6\" height=\"12\" rx=\"3\"/><path d=\"M5 11a7 7 0 0 0 14 0\"/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"/>',\r\n 'at': '<circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8\"/>',\r\n 'hash': '<line x1=\"4\" y1=\"9\" x2=\"20\" y2=\"9\"/><line x1=\"4\" y1=\"15\" x2=\"20\" y2=\"15\"/><line x1=\"10\" y1=\"3\" x2=\"8\" y2=\"21\"/><line x1=\"16\" y1=\"3\" x2=\"14\" y2=\"21\"/>',\r\n 'sidebar-left': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"/>',\r\n 'sidebar-right': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"/>',\r\n 'panel-bottom': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\"/>',\r\n /* ===== Activity-bar icon set =====================================\r\n * Lucide / shadcn-ui (MIT) — squared outline, 2px stroke. Every glyph\r\n * draws into the same standard 24-grid bbox (≈3..21) so they read at\r\n * identical optical size when sized via `data-size` alone, just like\r\n * every other glyph in this file. See skill.md §13.4. */\r\n 'git': '<circle cx=\"6\" cy=\"5\" r=\"3\"/><circle cx=\"6\" cy=\"19\" r=\"3\"/><circle cx=\"18\" cy=\"5\" r=\"3\"/><line x1=\"6\" y1=\"8\" x2=\"6\" y2=\"16\"/><path d=\"M18 8v3a4 4 0 0 1-4 4h-4\"/>',\r\n 'bug': '<rect x=\"8\" y=\"6\" width=\"8\" height=\"14\" rx=\"4\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"20\"/><line x1=\"3\" y1=\"9\" x2=\"8\" y2=\"9\"/><line x1=\"3\" y1=\"14\" x2=\"8\" y2=\"14\"/><line x1=\"3\" y1=\"19\" x2=\"8\" y2=\"19\"/><line x1=\"16\" y1=\"9\" x2=\"21\" y2=\"9\"/><line x1=\"16\" y1=\"14\" x2=\"21\" y2=\"14\"/><line x1=\"16\" y1=\"19\" x2=\"21\" y2=\"19\"/><line x1=\"9\" y1=\"6\" x2=\"9\" y2=\"3\"/><line x1=\"15\" y1=\"6\" x2=\"15\" y2=\"3\"/>',\r\n 'search-menu': '<circle cx=\"11\" cy=\"11\" r=\"6\"/><line x1=\"20\" y1=\"20\" x2=\"16\" y2=\"16\"/><line x1=\"3\" y1=\"20\" x2=\"13\" y2=\"20\"/>',\r\n 'extensions': '<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/><path d=\"M17.5 14v3.5H21a2 2 0 0 1 0 4h-3.5V21a2 2 0 0 1-4 0v-3.5H14a2 2 0 0 1 0-4h3.5z\"/>',\r\n // settings sidebar — squared, hard-edged outline (Lucide-ish), 2px stroke\r\n 'wrench': '<path d=\"M14.7 6.3a4 4 0 0 0 5 5L21 12.5l-7.5 7.5a3 3 0 0 1-4.2-4.2L16.7 8 14.7 6.3z\"/><path d=\"M14.7 6.3 12 9l-3-3 2.7-2.7a4 4 0 0 1 3 3z\"/>',\r\n 'message-square': '<path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/>',\r\n 'file-text': '<path d=\"M14 3H6v18h12V8z\"/><polyline points=\"14 3 14 8 18 8\"/><line x1=\"9\" y1=\"13\" x2=\"15\" y2=\"13\"/><line x1=\"9\" y1=\"17\" x2=\"15\" y2=\"17\"/>',\r\n 'scroll-text': '<path d=\"M5 4h11a3 3 0 0 1 3 3v10H8v3a1 1 0 0 1-1 1 3 3 0 0 1-3-3V7a3 3 0 0 1 1-3z\"/><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"9\"/><line x1=\"9\" y1=\"13\" x2=\"15\" y2=\"13\"/>',\r\n 'atom': '<circle cx=\"12\" cy=\"12\" r=\"2\"/><ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4\"/><ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4\" transform=\"rotate(60 12 12)\"/><ellipse cx=\"12\" cy=\"12\" rx=\"10\" ry=\"4\" transform=\"rotate(120 12 12)\"/>',\r\n 'arrow-right-to-line': '<line x1=\"20\" y1=\"4\" x2=\"20\" y2=\"20\"/><line x1=\"3\" y1=\"12\" x2=\"17\" y2=\"12\"/><polyline points=\"11 6 17 12 11 18\"/>',\r\n 'info-square': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><line x1=\"12\" y1=\"11\" x2=\"12\" y2=\"16\"/><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"8.01\"/>',\r\n /* Window-control glyphs for SOLO top bar (Figma 2510_20754):\r\n * .arrow-minimize → diagonal-in arrows (collapse to corners)\r\n * .icon-expand → diagonal-out arrows (expand to corners) */\r\n 'arrow-minimize': '<polyline points=\"20 4 14 10 20 10\"/><line x1=\"14\" y1=\"10\" x2=\"14\" y2=\"4\"/><polyline points=\"4 20 10 14 4 14\"/><line x1=\"10\" y1=\"14\" x2=\"10\" y2=\"20\"/>',\r\n 'arrow-expand': '<polyline points=\"14 4 20 4 20 10\"/><line x1=\"14\" y1=\"10\" x2=\"20\" y2=\"4\"/><polyline points=\"10 20 4 20 4 14\"/><line x1=\"10\" y1=\"14\" x2=\"4\" y2=\"20\"/>',\r\n 'arrow-down': '<line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"/><polyline points=\"6 14 12 20 18 14\"/>',\r\n 'logo': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"/><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"/>',\r\n // additional UI\r\n 'more-h': '<circle cx=\"5\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/><circle cx=\"19\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"/>',\r\n 'edit': '<path d=\"M4 20h4l10-10-4-4L4 16v4z\"/><path d=\"M14 6l4 4\"/>',\r\n 'trash': '<polyline points=\"4 6 20 6\"/><path d=\"M6 6v14h12V6\"/><path d=\"M9 6V4h6v2\"/><line x1=\"10\" y1=\"10\" x2=\"10\" y2=\"17\"/><line x1=\"14\" y1=\"10\" x2=\"14\" y2=\"17\"/>',\r\n 'file': '<path d=\"M14 3H6v18h12V7z\"/><polyline points=\"14 3 14 7 18 7\"/>',\r\n // Stacked documents — Lucide \"files\" (3..21).\r\n 'files': '<path d=\"M21 8v13H8V3h8z\"/><polyline points=\"16 3 16 8 21 8\"/><path d=\"M8 7H3v14h13v-3\"/>',\r\n // Pure 2×2 grid — Lucide \"layout-grid\" (3..21).\r\n 'grid-2x2': '<rect x=\"3\" y=\"3\" width=\"8\" height=\"8\"/><rect x=\"13\" y=\"3\" width=\"8\" height=\"8\"/><rect x=\"3\" y=\"13\" width=\"8\" height=\"8\"/><rect x=\"13\" y=\"13\" width=\"8\" height=\"8\"/>',\r\n 'folder': '<path d=\"M3 6h6l2 3h10v10H3z\"/>',\r\n 'layers': '<polygon points=\"12 3 22 8 12 13 2 8 12 3\"/><polyline points=\"2 13 12 18 22 13\"/>',\r\n 'layout': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"/><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"/>',\r\n 'terminal': '<polyline points=\"4 7 9 12 4 17\"/><line x1=\"12\" y1=\"17\" x2=\"20\" y2=\"17\"/>',\r\n 'image': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><circle cx=\"9\" cy=\"9\" r=\"1.5\" fill=\"currentColor\"/><polyline points=\"3 18 9 12 13 16 17 12 21 16\"/>',\r\n 'play': '<polygon points=\"6 4 20 12 6 20 6 4\"/>',\r\n 'pause': '<rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"/>',\r\n 'help': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><path d=\"M9 9a3 3 0 0 1 6 0c0 2-3 2-3 4\"/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"17.01\"/>',\r\n 'lock': '<rect x=\"4\" y=\"11\" width=\"16\" height=\"10\"/><path d=\"M8 11V8a4 4 0 0 1 8 0v3\"/>',\r\n // Lucide \"eye\" (2..22 horizontal, naturally short — eye shape).\r\n 'eye': '<path d=\"M2 12s4-7 10-7 10 7 10 7-4 7-10 7-10-7-10-7z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\r\n 'star': '<polygon points=\"12 3 15 9 22 10 17 14 18 21 12 18 6 21 7 14 2 10 9 9 12 3\"/>',\r\n 'heart': '<path d=\"M12 21s-7-5-7-11a4 4 0 0 1 7-2 4 4 0 0 1 7 2c0 6-7 11-7 11z\"/>',\r\n 'home': '<polygon points=\"3 11 12 3 21 11 21 21 14 21 14 14 10 14 10 21 3 21 3 11\"/>',\r\n 'calendar': '<rect x=\"3\" y=\"5\" width=\"18\" height=\"16\"/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"/><line x1=\"8\" y1=\"3\" x2=\"8\" y2=\"7\"/><line x1=\"16\" y1=\"3\" x2=\"16\" y2=\"7\"/>',\r\n 'clock': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><polyline points=\"12 7 12 12 16 14\"/>',\r\n 'filter': '<polygon points=\"3 4 21 4 14 12 14 20 10 18 10 12 3 4\"/>',\r\n 'send': '<polygon points=\"3 12 21 4 17 21 12 13 3 12\"/>',\r\n 'link': '<path d=\"M10 14a4 4 0 0 1 0-6l3-3a4 4 0 0 1 6 6l-1.5 1.5\"/><path d=\"M14 10a4 4 0 0 1 0 6l-3 3a4 4 0 0 1-6-6l1.5-1.5\"/>',\r\n 'upload': '<path d=\"M12 21V9\"/><polyline points=\"7 14 12 9 17 14\"/><line x1=\"3\" y1=\"3\" x2=\"21\" y2=\"3\"/>',\r\n 'log-out': '<path d=\"M14 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h9\"/><polyline points=\"16 16 21 12 16 8\"/><line x1=\"9\" y1=\"12\" x2=\"21\" y2=\"12\"/>',\r\n 'menu': '<line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\"/><line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\"/><line x1=\"4\" y1=\"18\" x2=\"20\" y2=\"18\"/>',\r\n // data / charts\r\n 'dollar': '<line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"22\"/><path d=\"M17 6H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\"/>',\r\n 'bar': '<line x1=\"3\" y1=\"21\" x2=\"21\" y2=\"21\"/><rect x=\"5\" y=\"11\" width=\"3\" height=\"8\"/><rect x=\"10.5\" y=\"6\" width=\"3\" height=\"13\"/><rect x=\"16\" y=\"14\" width=\"3\" height=\"5\"/>',\r\n 'trending-up': '<polyline points=\"3 17 9 11 13 15 21 7\"/><polyline points=\"15 7 21 7 21 13\"/>',\r\n 'trending-down': '<polyline points=\"3 7 9 13 13 9 21 17\"/><polyline points=\"15 17 21 17 21 11\"/>',\r\n 'columns': '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\"/><line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\"/><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\"/>',\r\n // settings — framework rules\r\n 'plug': '<path d=\"M9 2v6\"/><path d=\"M15 2v6\"/><path d=\"M7 8h10v4a5 5 0 0 1-10 0V8z\"/><path d=\"M12 17v5\"/>',\r\n 'cpu': '<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\"/><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"/><line x1=\"9\" y1=\"2\" x2=\"9\" y2=\"6\"/><line x1=\"15\" y1=\"2\" x2=\"15\" y2=\"6\"/><line x1=\"9\" y1=\"18\" x2=\"9\" y2=\"22\"/><line x1=\"15\" y1=\"18\" x2=\"15\" y2=\"22\"/><line x1=\"2\" y1=\"9\" x2=\"6\" y2=\"9\"/><line x1=\"2\" y1=\"15\" x2=\"6\" y2=\"15\"/><line x1=\"18\" y1=\"9\" x2=\"22\" y2=\"9\"/><line x1=\"18\" y1=\"15\" x2=\"22\" y2=\"15\"/>',\r\n 'code': '<polyline points=\"16 18 22 12 16 6\"/><polyline points=\"8 6 2 12 8 18\"/>',\r\n // brand — filled Apple glyph for download CTA\r\n 'apple': '<path fill=\"currentColor\" stroke=\"none\" d=\"M17.05 12.04c-.03-3.04 2.49-4.5 2.6-4.57-1.42-2.07-3.62-2.36-4.4-2.39-1.87-.19-3.65 1.1-4.6 1.1-.96 0-2.42-1.08-3.98-1.05-2.05.03-3.94 1.19-4.99 3.02-2.13 3.69-.54 9.13 1.53 12.12 1.01 1.46 2.21 3.1 3.78 3.04 1.52-.06 2.09-.98 3.93-.98 1.83 0 2.36.98 3.97.95 1.64-.03 2.68-1.49 3.68-2.96 1.16-1.7 1.64-3.35 1.66-3.43-.04-.02-3.18-1.22-3.21-4.85zM14.06 4.34c.83-1.01 1.39-2.41 1.24-3.81-1.2.05-2.65.8-3.51 1.8-.77.89-1.45 2.31-1.27 3.68 1.34.1 2.71-.68 3.54-1.67z\"/>',\r\n };\r\n\r\n function svg(name, size = 16, viewBox = '0 0 24 24') {\r\n const path = PATHS[name];\r\n if (!path) return '';\r\n const attrs = ATTRS\r\n .replace('width=\"16\"', `width=\"${size}\"`)\r\n .replace('height=\"16\"', `height=\"${size}\"`)\r\n .replace('viewBox=\"0 0 24 24\"', `viewBox=\"${viewBox}\"`);\r\n return `<svg ${attrs}>${path}</svg>`;\r\n }\r\n\r\n function render(root = document) {\r\n root.querySelectorAll('[data-icon]').forEach(el => {\r\n const name = el.getAttribute('data-icon');\r\n const size = +el.getAttribute('data-size') || 16;\r\n const vb = el.getAttribute('data-viewbox') || '0 0 24 24';\r\n el.innerHTML = svg(name, size, vb);\r\n el.classList.add('icon');\r\n });\r\n }\r\n\r\n global.Icons = { svg, render, PATHS };\r\n if (document.readyState !== 'loading') render();\r\n else document.addEventListener('DOMContentLoaded', () => render());\r\n})(typeof window !== 'undefined' ? window : globalThis);\r\n","class Countdown {\r\n constructor(element) {\r\n this.element = element;\r\n this.hoursEl = element.querySelector('.ds-countdown__item--hours .ds-countdown__value');\r\n this.minutesEl = element.querySelector('.ds-countdown__item--minutes .ds-countdown__value');\r\n this.secondsEl = element.querySelector('.ds-countdown__item--seconds .ds-countdown__value');\r\n \r\n this.endTime = this.parseEndTime();\r\n this.interval = null;\r\n \r\n this.init();\r\n }\r\n\r\n parseEndTime() {\r\n const dataEndTime = this.element.getAttribute('data-end-time');\r\n if (dataEndTime) {\r\n return new Date(dataEndTime).getTime();\r\n }\r\n \r\n const dataHours = parseInt(this.element.getAttribute('data-hours')) || 0;\r\n const dataMinutes = parseInt(this.element.getAttribute('data-minutes')) || 0;\r\n const dataSeconds = parseInt(this.element.getAttribute('data-seconds')) || 0;\r\n \r\n return new Date().getTime() + (dataHours * 3600 + dataMinutes * 60 + dataSeconds) * 1000;\r\n }\r\n\r\n init() {\r\n this.update();\r\n this.start();\r\n }\r\n\r\n start() {\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n }\r\n this.interval = setInterval(() => {\r\n this.update();\r\n }, 1000);\r\n }\r\n\r\n stop() {\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n this.interval = null;\r\n }\r\n }\r\n\r\n reset() {\r\n this.stop();\r\n this.endTime = this.parseEndTime();\r\n this.init();\r\n }\r\n\r\n update() {\r\n const now = new Date().getTime();\r\n const distance = this.endTime - now;\r\n \r\n if (distance <= 0) {\r\n this.stop();\r\n this.displayTime(0, 0, 0);\r\n this.dispatchComplete();\r\n return;\r\n }\r\n \r\n const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n \r\n this.displayTime(hours, minutes, seconds);\r\n }\r\n\r\n displayTime(hours, minutes, seconds) {\r\n if (this.hoursEl) {\r\n this.hoursEl.textContent = String(hours).padStart(2, '0');\r\n }\r\n if (this.minutesEl) {\r\n this.minutesEl.textContent = String(minutes).padStart(2, '0');\r\n }\r\n if (this.secondsEl) {\r\n this.secondsEl.textContent = String(seconds).padStart(2, '0');\r\n }\r\n }\r\n\r\n setEndTime(date) {\r\n this.endTime = date.getTime();\r\n this.update();\r\n }\r\n\r\n addTime(seconds) {\r\n this.endTime += seconds * 1000;\r\n this.update();\r\n }\r\n\r\n dispatchComplete() {\r\n this.element.dispatchEvent(new CustomEvent('ds-countdown-complete', {\r\n detail: {}\r\n }));\r\n }\r\n\r\n destroy() {\r\n this.stop();\r\n this.hoursEl = null;\r\n this.minutesEl = null;\r\n this.secondsEl = null;\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction initCountdown(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n const instance = new Countdown(element);\r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n}\r\n\r\nfunction cleanupCountdown(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initCountdowns() {\r\n const countdowns = document.querySelectorAll('.ds-countdown');\r\n countdowns.forEach(el => {\r\n initCountdown(el);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { Countdown, initCountdowns, initCountdown, cleanupCountdown };\r\n} else {\r\n window.Countdown = Countdown;\r\n window.initCountdown = initCountdown;\r\n window.cleanupCountdown = cleanupCountdown;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('countdown', initCountdown, cleanupCountdown);\r\n}","class NumberInput {\r\n constructor(element) {\r\n this.element = element;\r\n this.minusBtn = element.querySelector('.ds-number-input__btn--decrease');\r\n this.plusBtn = element.querySelector('.ds-number-input__btn--increase');\r\n this.inputEl = element.querySelector('.ds-number-input__input');\r\n this._listeners = [];\r\n\r\n if (!this.minusBtn || !this.plusBtn || !this.inputEl) {\r\n throw new Error('NumberInput: Missing required elements');\r\n }\r\n\r\n this.min = parseInt(this.inputEl.getAttribute('min')) || -Infinity;\r\n this.max = parseInt(this.inputEl.getAttribute('max')) || Infinity;\r\n this.step = parseInt(this.inputEl.getAttribute('step')) || 1;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.bindEvents();\r\n this.updateState();\r\n }\r\n\r\n bindEvents() {\r\n const minusHandler = () => this.updateValue(-this.step);\r\n const plusHandler = () => this.updateValue(this.step);\r\n const inputHandler = () => this.handleInput();\r\n\r\n this.minusBtn.addEventListener('click', minusHandler);\r\n this.plusBtn.addEventListener('click', plusHandler);\r\n this.inputEl.addEventListener('input', inputHandler);\r\n\r\n this._listeners.push(\r\n { el: this.minusBtn, event: 'click', handler: minusHandler },\r\n { el: this.plusBtn, event: 'click', handler: plusHandler },\r\n { el: this.inputEl, event: 'input', handler: inputHandler }\r\n );\r\n }\r\n\r\n updateValue(delta) {\r\n let value = parseInt(this.inputEl.value) || 0;\r\n value += delta;\r\n\r\n if (value < this.min) value = this.min;\r\n if (value > this.max) value = this.max;\r\n\r\n this.inputEl.value = value;\r\n this.inputEl.dispatchEvent(new Event('change'));\r\n this.updateState();\r\n this.dispatchChange();\r\n }\r\n\r\n handleInput() {\r\n let value = parseInt(this.inputEl.value);\r\n if (isNaN(value)) value = 0;\r\n if (value < this.min) value = this.min;\r\n if (value > this.max) value = this.max;\r\n this.inputEl.value = value;\r\n this.updateState();\r\n this.dispatchChange();\r\n }\r\n\r\n updateState() {\r\n const value = parseInt(this.inputEl.value) || 0;\r\n this.minusBtn.disabled = value <= this.min;\r\n this.plusBtn.disabled = value >= this.max;\r\n }\r\n\r\n setValue(value) {\r\n if (value < this.min) value = this.min;\r\n if (value > this.max) value = this.max;\r\n this.inputEl.value = value;\r\n this.updateState();\r\n this.dispatchChange();\r\n }\r\n\r\n getValue() {\r\n return parseInt(this.inputEl.value) || 0;\r\n }\r\n\r\n setRange(min, max) {\r\n this.min = min;\r\n this.max = max;\r\n this.updateState();\r\n }\r\n\r\n dispatchChange() {\r\n this.element.dispatchEvent(new CustomEvent('ds-number-input-change', {\r\n detail: {\r\n value: this.getValue()\r\n }\r\n }));\r\n }\r\n\r\n destroy() {\r\n this._listeners.forEach(({ el, event, handler }) => {\r\n el.removeEventListener(event, handler);\r\n });\r\n this._listeners = null;\r\n this.minusBtn = null;\r\n this.plusBtn = null;\r\n this.inputEl = null;\r\n this.element = null;\r\n }\r\n}\r\n\r\nfunction initNumberInput(element) {\r\n if (element.__kupolaInitialized) return;\r\n\r\n try {\r\n const instance = new NumberInput(element);\r\n element.__kupolaInstance = instance;\r\n element.__kupolaInitialized = true;\r\n } catch (error) {\r\n console.error('[NumberInput] Error initializing:', error);\r\n }\r\n}\r\n\r\nfunction cleanupNumberInput(element) {\r\n if (!element.__kupolaInitialized || !element.__kupolaInstance) return;\r\n\r\n const instance = element.__kupolaInstance;\r\n instance.destroy();\r\n\r\n element.__kupolaInstance = null;\r\n element.__kupolaInitialized = false;\r\n}\r\n\r\nfunction initNumberInputs() {\r\n document.querySelectorAll('.ds-number-input').forEach(input => {\r\n initNumberInput(input);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { NumberInput, initNumberInputs, initNumberInput, cleanupNumberInput };\r\n} else {\r\n window.NumberInput = NumberInput;\r\n window.initNumberInput = initNumberInput;\r\n window.cleanupNumberInput = cleanupNumberInput;\r\n}\r\n\r\nif (window.kupolaInitializer) {\r\n window.kupolaInitializer.register('number-input', initNumberInput, cleanupNumberInput);\r\n}","class SlideCaptcha {\r\n constructor(container) {\r\n this.container = container;\r\n this.track = container.querySelector('.ds-slider-captcha__track');\r\n this.btn = container.querySelector('.ds-slider-captcha__btn');\r\n this.text = container.querySelector('.ds-slider-captcha__text');\r\n this.progress = container.querySelector('.ds-slider-captcha__progress');\r\n this.statusEl = container.querySelector('.ds-slider-captcha__status');\r\n this.refreshBtn = container.querySelector('.ds-slider-captcha__refresh');\r\n this.footerRefreshBtn = container.querySelector('.ds-slider-captcha__footer-refresh');\r\n \r\n this.config = {\r\n tolerance: 6,\r\n minPoints: 20,\r\n minDuration: 300,\r\n maxDuration: 10000,\r\n minSpeedDelta: 0.3,\r\n maxAttempts: 5\r\n };\r\n \r\n this.isDragging = false;\r\n this.startX = 0;\r\n this.startY = 0;\r\n this.currentX = 0;\r\n this.trackData = [];\r\n this.startTime = 0;\r\n this.isVerified = false;\r\n this.isProcessing = false;\r\n this.attempts = 0;\r\n \r\n this.targetX = 0;\r\n this.distractorX = 0;\r\n this.angle = 0;\r\n this.distractorAngle = 0;\r\n this.maxAngle = parseInt(container.getAttribute('data-angle')) || 30;\r\n this.shape = container.getAttribute('data-shape') || 'circle';\r\n this.hasDistractor = this.shape !== 'circle';\r\n \r\n this.scope = `slidecaptcha-${Math.random().toString(36).substr(2, 9)}`;\r\n \r\n this._mouseDownHandler = null;\r\n this._mouseMoveHandler = null;\r\n this._mouseUpHandler = null;\r\n this._touchStartHandler = null;\r\n this._touchMoveHandler = null;\r\n this._touchEndHandler = null;\r\n \r\n this._mouseMoveListener = null;\r\n this._mouseUpListener = null;\r\n this._touchMoveListener = null;\r\n this._touchEndListener = null;\r\n }\r\n\r\n init() {\r\n if (!this.track || !this.btn) return;\r\n if (this.container._initialized) return;\r\n\r\n this._mouseDownHandler = (e) => {\r\n if (this.isVerified || this.isProcessing) return;\r\n e.preventDefault();\r\n this.isDragging = true;\r\n this.startX = e.clientX;\r\n this.startY = e.clientY;\r\n this.startTime = Date.now();\r\n this.trackData = [];\r\n this.container.classList.add('is-active');\r\n if (this.text) {\r\n this.text.textContent = '拖动中...';\r\n this.text.style.color = 'var(--status-info-default)';\r\n }\r\n };\r\n\r\n this._mouseMoveHandler = (e) => {\r\n if (!this.isDragging) return;\r\n e.preventDefault();\r\n\r\n const trackWidth = this.track.offsetWidth;\r\n const btnWidth = this.btn.offsetWidth;\r\n const maxOffset = trackWidth - btnWidth - 8;\r\n\r\n let deltaX = e.clientX - this.startX;\r\n if (deltaX < 0) deltaX = 0;\r\n if (deltaX > maxOffset) deltaX = maxOffset;\r\n\r\n this.currentX = deltaX;\r\n this.btn.style.left = (14 + deltaX) + 'px';\r\n if (this.progress) this.progress.style.width = ((deltaX / maxOffset) * 100) + '%';\r\n\r\n this.collectTrack(e.clientX, e.clientY);\r\n };\r\n\r\n this._mouseUpHandler = () => {\r\n if (!this.isDragging) return;\r\n this.isDragging = false;\r\n this.container.classList.remove('is-active');\r\n this.verifyCaptcha();\r\n };\r\n\r\n this._touchStartHandler = (e) => {\r\n if (this.isVerified || this.isProcessing) return;\r\n e.preventDefault();\r\n this.isDragging = true;\r\n this.startX = e.touches[0].clientX;\r\n this.startY = e.touches[0].clientY;\r\n this.startTime = Date.now();\r\n this.trackData = [];\r\n this.container.classList.add('is-active');\r\n if (this.text) {\r\n this.text.textContent = '拖动中...';\r\n this.text.style.color = 'var(--status-info-default)';\r\n }\r\n };\r\n\r\n this._touchMoveHandler = (e) => {\r\n if (!this.isDragging) return;\r\n e.preventDefault();\r\n\r\n const trackWidth = this.track.offsetWidth;\r\n const btnWidth = this.btn.offsetWidth;\r\n const maxOffset = trackWidth - btnWidth - 8;\r\n\r\n let deltaX = e.touches[0].clientX - this.startX;\r\n if (deltaX < 0) deltaX = 0;\r\n if (deltaX > maxOffset) deltaX = maxOffset;\r\n\r\n this.currentX = deltaX;\r\n this.btn.style.left = (14 + deltaX) + 'px';\r\n if (this.progress) this.progress.style.width = ((deltaX / maxOffset) * 100) + '%';\r\n\r\n this.collectTrack(e.touches[0].clientX, e.touches[0].clientY);\r\n };\r\n\r\n this._touchEndHandler = () => {\r\n if (!this.isDragging) return;\r\n this.isDragging = false;\r\n this.container.classList.remove('is-active');\r\n this.verifyCaptcha();\r\n };\r\n\r\n this.btn.addEventListener('mousedown', this._mouseDownHandler);\r\n\r\n if (window.globalEvents) {\r\n this._mouseMoveListener = window.globalEvents.on(document, 'mousemove', this._mouseMoveHandler, { scope: this.scope });\r\n this._mouseUpListener = window.globalEvents.on(document, 'mouseup', this._mouseUpHandler, { scope: this.scope });\r\n this._touchMoveListener = window.globalEvents.on(document, 'touchmove', this._touchMoveHandler, { scope: this.scope, passive: false });\r\n this._touchEndListener = window.globalEvents.on(document, 'touchend', this._touchEndHandler, { scope: this.scope });\r\n } else {\r\n document.addEventListener('mousemove', this._mouseMoveHandler);\r\n document.addEventListener('mouseup', this._mouseUpHandler);\r\n document.addEventListener('touchmove', this._touchMoveHandler, { passive: false });\r\n document.addEventListener('touchend', this._touchEndHandler);\r\n }\r\n\r\n this.btn.addEventListener('touchstart', this._touchStartHandler, { passive: false });\r\n\r\n if (this.refreshBtn) {\r\n this.refreshBtn.addEventListener('click', () => this.loadCaptcha());\r\n }\r\n if (this.footerRefreshBtn) {\r\n this.footerRefreshBtn.addEventListener('click', () => this.loadCaptcha());\r\n }\r\n\r\n this.container._initialized = true;\r\n this.loadCaptcha();\r\n }\r\n\r\n generateTarget() {\r\n const trackWidth = this.track.offsetWidth;\r\n const btnWidth = this.btn.offsetWidth;\r\n const btnOffset = 14;\r\n const min = trackWidth * 0.35;\r\n const max = trackWidth * 0.85 - btnWidth;\r\n const mid = trackWidth * 0.6;\r\n\r\n this.angle = Math.floor(Math.random() * (this.maxAngle + 1));\r\n\r\n if (this.hasDistractor) {\r\n do {\r\n this.distractorAngle = Math.floor(Math.random() * (this.maxAngle + 1));\r\n } while (Math.abs(this.distractorAngle - this.angle) < 5);\r\n }\r\n\r\n if (this.hasDistractor) {\r\n const rand = Math.random();\r\n if (rand > 0.5) {\r\n this.targetX = Math.floor(min + Math.random() * (mid - min - btnWidth));\r\n this.distractorX = Math.floor(mid + Math.random() * (max - mid));\r\n } else {\r\n this.targetX = Math.floor(mid + Math.random() * (max - mid));\r\n this.distractorX = Math.floor(min + Math.random() * (mid - min - btnWidth));\r\n }\r\n } else {\r\n this.targetX = Math.floor(min + Math.random() * (max - min));\r\n }\r\n\r\n const target = this.container.querySelector('.ds-slider-captcha__target');\r\n if (target) {\r\n target.style.left = (this.targetX + btnOffset + btnWidth / 2) + 'px';\r\n target.style.transform = 'translate(-50%, -50%) rotate(' + this.angle + 'deg)';\r\n target.style.display = 'block';\r\n }\r\n\r\n if (this.hasDistractor) {\r\n const distractor = this.container.querySelector('.ds-slider-captcha__target--distractor');\r\n if (distractor) {\r\n distractor.style.left = (this.distractorX + btnOffset + btnWidth / 2) + 'px';\r\n distractor.style.transform = 'translate(-50%, -50%) rotate(' + this.distractorAngle + 'deg)';\r\n distractor.style.display = 'block';\r\n }\r\n } else {\r\n const distractor = this.container.querySelector('.ds-slider-captcha__target--distractor');\r\n if (distractor) {\r\n distractor.style.display = 'none';\r\n }\r\n }\r\n }\r\n\r\n resetSlider() {\r\n this.btn.className = 'ds-slider-captcha__btn';\r\n this.btn.style.transform = 'rotate(' + this.angle + 'deg)';\r\n this.btn.innerHTML = '';\r\n this.btn.style.left = '14px';\r\n this.btn.style.display = 'block';\r\n if (this.progress) {\r\n this.progress.style.width = '0%';\r\n this.progress.style.display = 'block';\r\n }\r\n if (this.text) {\r\n this.text.textContent = '按住滑块,拖动到缺口位置';\r\n this.text.style.color = '';\r\n }\r\n if (this.refreshBtn) {\r\n this.refreshBtn.style.display = 'none';\r\n }\r\n this.currentX = 0;\r\n this.trackData = [];\r\n this.container.classList.remove('is-verified', 'is-error', 'is-disabled');\r\n }\r\n\r\n loadCaptcha() {\r\n this.isVerified = false;\r\n this.isProcessing = false;\r\n this.attempts = 0;\r\n this.generateTarget();\r\n this.resetSlider();\r\n if (this.statusEl) {\r\n this.statusEl.textContent = '请完成验证';\r\n this.statusEl.className = 'ds-slider-captcha__status';\r\n }\r\n }\r\n\r\n collectTrack(clientX, clientY) {\r\n const now = Date.now();\r\n const t = now - this.startTime;\r\n\r\n let velocity = 0;\r\n let acceleration = 0;\r\n\r\n if (this.trackData.length > 0) {\r\n const last = this.trackData[this.trackData.length - 1];\r\n const dx = this.currentX - last.x;\r\n const dt = t - last.t;\r\n if (dt > 0) {\r\n velocity = dx / dt;\r\n if (this.trackData.length > 1) {\r\n const prev = this.trackData[this.trackData.length - 2];\r\n const prevDt = last.t - prev.t;\r\n if (prevDt > 0) {\r\n const prevV = (last.x - prev.x) / prevDt;\r\n acceleration = velocity - prevV;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.trackData.push({\r\n x: this.currentX,\r\n y: clientY - this.startY,\r\n t: t,\r\n v: velocity,\r\n a: acceleration\r\n });\r\n\r\n const pointCountEl = this.container.querySelector('.ds-slider-captcha__point-count');\r\n if (pointCountEl) {\r\n pointCountEl.textContent = '轨迹点: ' + this.trackData.length;\r\n }\r\n }\r\n\r\n validateTrack() {\r\n if (!this.trackData || this.trackData.length < this.config.minPoints) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n\r\n const finalX = this.trackData[this.trackData.length - 1].x;\r\n const distractorDiff = this.hasDistractor ? Math.abs(finalX - this.distractorX) : Infinity;\r\n const targetDiff = Math.abs(finalX - this.targetX);\r\n\r\n if (this.hasDistractor && distractorDiff < targetDiff && distractorDiff <= this.config.tolerance) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n\r\n if (targetDiff > this.config.tolerance) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n\r\n const speeds = [];\r\n for (let i = 1; i < this.trackData.length; i++) {\r\n const dx = this.trackData[i].x - this.trackData[i - 1].x;\r\n const dt = this.trackData[i].t - this.trackData[i - 1].t;\r\n if (dt > 0 && dt < 500) {\r\n speeds.push(dx / dt);\r\n }\r\n }\r\n\r\n if (speeds.length < 3) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n\r\n const maxSpeed = Math.max(...speeds);\r\n const minSpeed = Math.min(...speeds);\r\n if (maxSpeed - minSpeed < this.config.minSpeedDelta) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n\r\n let hasYMovement = false;\r\n for (const p of this.trackData) {\r\n if (Math.abs(p.y) > 2) {\r\n hasYMovement = true;\r\n break;\r\n }\r\n }\r\n if (!hasYMovement && this.trackData.length > 20) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n\r\n const totalTime = this.trackData[this.trackData.length - 1].t;\r\n if (totalTime < this.config.minDuration) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n if (totalTime > this.config.maxDuration) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n\r\n const accelerations = [];\r\n for (let i = 1; i < speeds.length; i++) {\r\n accelerations.push(Math.abs(speeds[i] - speeds[i - 1]));\r\n }\r\n if (accelerations.length > 2) {\r\n const accAvg = accelerations.reduce((a, b) => a + b, 0) / accelerations.length;\r\n if (accAvg < 0.05) {\r\n return { passed: false, msg: '验证失败' };\r\n }\r\n }\r\n\r\n return { passed: true, msg: '验证通过' };\r\n }\r\n\r\n verifyCaptcha() {\r\n if (this.isProcessing || this.isVerified) return;\r\n this.isProcessing = true;\r\n\r\n if (this.statusEl) {\r\n this.statusEl.textContent = '验证中...';\r\n this.statusEl.className = 'ds-slider-captcha__status is-loading';\r\n }\r\n this.btn.style.cursor = 'wait';\r\n this.container.classList.add('is-disabled');\r\n\r\n setTimeout(() => {\r\n const result = this.validateTrack();\r\n this.isProcessing = false;\r\n this.btn.style.cursor = '';\r\n\r\n if (result.passed) {\r\n this.isVerified = true;\r\n this.btn.style.display = 'none';\r\n if (this.progress) this.progress.style.display = 'none';\r\n \r\n const target = this.container.querySelector('.ds-slider-captcha__target');\r\n if (target) target.style.display = 'none';\r\n \r\n const distractor = this.container.querySelector('.ds-slider-captcha__target--distractor');\r\n if (distractor) distractor.style.display = 'none';\r\n\r\n if (this.text) {\r\n this.text.textContent = '验证通过';\r\n this.text.style.color = 'var(--status-success-default)';\r\n }\r\n if (this.statusEl) {\r\n this.statusEl.textContent = '验证成功';\r\n this.statusEl.className = 'ds-slider-captcha__status is-success';\r\n }\r\n this.container.classList.add('is-verified');\r\n this.container.classList.remove('is-disabled');\r\n\r\n const onVerified = this.container.getAttribute('data-on-verified');\r\n if (onVerified && typeof window[onVerified] === 'function') {\r\n window[onVerified](this.container);\r\n }\r\n } else {\r\n this.attempts++;\r\n\r\n if (this.text) {\r\n this.text.textContent = result.msg;\r\n this.text.style.color = 'var(--status-error-default)';\r\n }\r\n if (this.statusEl) {\r\n this.statusEl.textContent = result.msg;\r\n this.statusEl.className = 'ds-slider-captcha__status is-error';\r\n }\r\n\r\n const errRefresh = this.container.getAttribute('data-err-refresh');\r\n if (errRefresh === 'auto') {\r\n setTimeout(() => {\r\n this.loadCaptcha();\r\n }, 1200);\r\n } else {\r\n this.btn.style.display = 'none';\r\n if (this.progress) this.progress.style.display = 'none';\r\n \r\n const target = this.container.querySelector('.ds-slider-captcha__target');\r\n if (target) target.style.display = 'none';\r\n \r\n const distractor = this.container.querySelector('.ds-slider-captcha__target--distractor');\r\n if (distractor) distractor.style.display = 'none';\r\n\r\n if (this.refreshBtn) {\r\n this.refreshBtn.style.display = 'block';\r\n }\r\n }\r\n }\r\n }, 300);\r\n }\r\n\r\n destroy() {\r\n if (!this.container._initialized) return;\r\n\r\n if (this.btn && this._mouseDownHandler) {\r\n this.btn.removeEventListener('mousedown', this._mouseDownHandler);\r\n }\r\n if (this.btn && this._touchStartHandler) {\r\n this.btn.removeEventListener('touchstart', this._touchStartHandler);\r\n }\r\n\r\n if (this.refreshBtn) {\r\n this.refreshBtn.removeEventListener('click', () => this.loadCaptcha());\r\n }\r\n if (this.footerRefreshBtn) {\r\n this.footerRefreshBtn.removeEventListener('click', () => this.loadCaptcha());\r\n }\r\n\r\n if (this._mouseMoveListener && this._mouseMoveListener.unsubscribe) {\r\n this._mouseMoveListener.unsubscribe();\r\n } else if (this._mouseMoveHandler) {\r\n document.removeEventListener('mousemove', this._mouseMoveHandler);\r\n }\r\n\r\n if (this._mouseUpListener && this._mouseUpListener.unsubscribe) {\r\n this._mouseUpListener.unsubscribe();\r\n } else if (this._mouseUpHandler) {\r\n document.removeEventListener('mouseup', this._mouseUpHandler);\r\n }\r\n\r\n if (this._touchMoveListener && this._touchMoveListener.unsubscribe) {\r\n this._touchMoveListener.unsubscribe();\r\n } else if (this._touchMoveHandler) {\r\n document.removeEventListener('touchmove', this._touchMoveHandler);\r\n }\r\n\r\n if (this._touchEndListener && this._touchEndListener.unsubscribe) {\r\n this._touchEndListener.unsubscribe();\r\n } else if (this._touchEndHandler) {\r\n document.removeEventListener('touchend', this._touchEndHandler);\r\n }\r\n\r\n this.container._initialized = false;\r\n }\r\n}\r\n\r\nfunction initSlideCaptchas() {\r\n document.querySelectorAll('.ds-slider-captcha').forEach(container => {\r\n const captcha = new SlideCaptcha(container);\r\n captcha.init();\r\n container._kupolaSlideCaptcha = captcha;\r\n });\r\n}\r\n\r\nfunction cleanupSlideCaptcha(container) {\r\n if (container._kupolaSlideCaptcha) {\r\n container._kupolaSlideCaptcha.destroy();\r\n container._kupolaSlideCaptcha = null;\r\n }\r\n}\r\n\r\nfunction cleanupAllSlideCaptchas() {\r\n document.querySelectorAll('.ds-slider-captcha').forEach(container => {\r\n cleanupSlideCaptcha(container);\r\n });\r\n}\r\n\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = { initSlideCaptchas, cleanupSlideCaptcha, cleanupAllSlideCaptchas };\r\n}","(function(window) {\r\n let currentSetupContext = null;\r\n\r\n class SetupContext {\r\n constructor(component) {\r\n this.component = component;\r\n this.lifecycle = (component && component.lifecycle) || null;\r\n this._onMountedHandlers = [];\r\n this._onUnmountedHandlers = [];\r\n this._onUpdatedHandlers = [];\r\n this._watches = [];\r\n this._refs = new Map();\r\n this._computedDeps = new Map();\r\n }\r\n\r\n ref(initialValue = null) {\r\n if (window.kupolaData) {\r\n const key = `__ref_${Math.random().toString(36).slice(2, 11)}__`;\r\n window.kupolaData.set(key, initialValue);\r\n \r\n return {\r\n get value() {\r\n return window.kupolaData.get(key);\r\n },\r\n set value(newValue) {\r\n window.kupolaData.set(key, newValue);\r\n },\r\n _key: key\r\n };\r\n }\r\n\r\n const refObj = {\r\n _value: initialValue,\r\n _subscribers: new Set()\r\n };\r\n\r\n Object.defineProperty(refObj, 'value', {\r\n get() {\r\n return refObj._value;\r\n },\r\n set(newValue) {\r\n if (newValue !== refObj._value) {\r\n refObj._value = newValue;\r\n refObj._subscribers.forEach(sub => sub(newValue));\r\n }\r\n }\r\n });\r\n\r\n return refObj;\r\n }\r\n\r\n reactive(target) {\r\n if (window.kupolaData) {\r\n return window.kupolaData.createReactive(target);\r\n }\r\n\r\n const self = this;\r\n const handler = {\r\n get(target, key) {\r\n if (key === '__isReactive') return true;\r\n if (key === '__raw') return target;\r\n const result = target[key];\r\n if (typeof result === 'object' && result !== null && !result.__isReactive) {\r\n target[key] = self.reactive(result);\r\n }\r\n return target[key];\r\n },\r\n set(target, key, value) {\r\n if (target[key] === value) return true;\r\n target[key] = value;\r\n self._notifyWatchers(key, value);\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n delete target[key];\r\n self._notifyWatchers(key, undefined);\r\n return true;\r\n }\r\n };\r\n\r\n const proxy = new Proxy(target, handler);\r\n proxy.__isReactive = true;\r\n return proxy;\r\n }\r\n\r\n onMounted(handler) {\r\n if (this.lifecycle) {\r\n this.lifecycle.on('mount', handler, { name: 'onMounted' });\r\n } else {\r\n this._onMountedHandlers.push(handler);\r\n }\r\n }\r\n\r\n onUnmounted(handler) {\r\n if (this.lifecycle) {\r\n this.lifecycle.on('unmount', handler, { name: 'onUnmounted' });\r\n } else {\r\n this._onUnmountedHandlers.push(handler);\r\n }\r\n }\r\n\r\n onUpdated(handler) {\r\n if (this.lifecycle) {\r\n this.lifecycle.on('update', handler, { name: 'onUpdated' });\r\n } else {\r\n this._onUpdatedHandlers.push(handler);\r\n }\r\n }\r\n\r\n watch(source, handler, options = {}) {\r\n if (typeof source === 'function') {\r\n const watcher = () => {\r\n const newValue = source();\r\n if (newValue !== watcher._oldValue) {\r\n handler(newValue, watcher._oldValue);\r\n watcher._oldValue = newValue;\r\n }\r\n };\r\n watcher._oldValue = undefined;\r\n this._watches.push(watcher);\r\n watcher();\r\n\r\n if (window.kupolaData) {\r\n const trackedPaths = [];\r\n const originalGet = window.kupolaData.get;\r\n window.kupolaData.get = function(k) {\r\n trackedPaths.push(k);\r\n return originalGet.call(this, k);\r\n };\r\n source();\r\n window.kupolaData.get = originalGet;\r\n \r\n trackedPaths.forEach(path => {\r\n window.kupolaData.observe(path, watcher);\r\n });\r\n }\r\n } else if (typeof source === 'object' && source !== null) {\r\n if (source._subscribers) {\r\n source._subscribers.add(handler);\r\n } else if (source._key && window.kupolaData) {\r\n window.kupolaData.observe(source._key, () => {\r\n handler(source.value);\r\n });\r\n }\r\n }\r\n }\r\n\r\n computed(getter) {\r\n const result = this.ref();\r\n const self = this;\r\n \r\n let update = () => {\r\n try {\r\n result.value = getter();\r\n } catch (e) {\r\n console.error('Computed property error:', e);\r\n }\r\n };\r\n\r\n const trackedPaths = [];\r\n if (window.kupolaData) {\r\n const originalGet = window.kupolaData.get;\r\n window.kupolaData.get = function(k) {\r\n trackedPaths.push(k);\r\n return originalGet.call(this, k);\r\n };\r\n \r\n update();\r\n \r\n window.kupolaData.get = originalGet;\r\n \r\n trackedPaths.forEach(path => {\r\n window.kupolaData.observe(path, update);\r\n });\r\n \r\n this._computedDeps.set(result, trackedPaths);\r\n } else {\r\n update();\r\n }\r\n\r\n let computedValue = result._value;\r\n \r\n Object.defineProperty(result, 'value', {\r\n get: () => computedValue,\r\n set: (newValue) => {\r\n console.warn('Cannot assign to a computed property');\r\n }\r\n });\r\n\r\n const originalUpdate = update;\r\n update = () => {\r\n try {\r\n computedValue = getter();\r\n } catch (e) {\r\n console.error('Computed property error:', e);\r\n }\r\n };\r\n\r\n return result;\r\n }\r\n\r\n emit(eventName, data) {\r\n if (this.component) {\r\n this.component.$emit(eventName, data);\r\n }\r\n }\r\n\r\n _notifyWatchers(key, value) {\r\n this._watches.forEach(watcher => {\r\n try { watcher(); } catch (e) { console.error(e); }\r\n });\r\n }\r\n\r\n _executeMounted() {\r\n this._onMountedHandlers.forEach(handler => {\r\n try { handler(); } catch (e) { console.error(e); }\r\n });\r\n }\r\n\r\n _executeUnmounted() {\r\n this._onUnmountedHandlers.forEach(handler => {\r\n try { handler(); } catch (e) { console.error(e); }\r\n });\r\n }\r\n\r\n _executeUpdated() {\r\n this._onUpdatedHandlers.forEach(handler => {\r\n try { handler(); } catch (e) { console.error(e); }\r\n });\r\n }\r\n\r\n destroy() {\r\n this._watches.forEach(watcher => {\r\n if (watcher._subscribers) {\r\n watcher._subscribers.clear();\r\n }\r\n });\r\n this._watches = [];\r\n \r\n this._computedDeps.forEach((paths, result) => {\r\n paths.forEach(path => {\r\n if (window.kupolaData) {\r\n window.kupolaData.unobserve(path);\r\n }\r\n });\r\n });\r\n this._computedDeps.clear();\r\n \r\n this._refs.clear();\r\n this._onMountedHandlers = [];\r\n this._onUnmountedHandlers = [];\r\n this._onUpdatedHandlers = [];\r\n \r\n this.component = null;\r\n this.lifecycle = null;\r\n }\r\n }\r\n\r\n function ref(initialValue = null) {\r\n if (currentSetupContext) {\r\n return currentSetupContext.ref(initialValue);\r\n }\r\n\r\n if (window.kupolaData) {\r\n const key = `__ref_${Math.random().toString(36).slice(2, 11)}__`;\r\n window.kupolaData.set(key, initialValue);\r\n\r\n return {\r\n get value() {\r\n return window.kupolaData.get(key);\r\n },\r\n set value(newValue) {\r\n window.kupolaData.set(key, newValue);\r\n },\r\n _key: key\r\n };\r\n }\r\n\r\n const refObj = {\r\n _value: initialValue,\r\n _subscribers: new Set()\r\n };\r\n\r\n Object.defineProperty(refObj, 'value', {\r\n get() {\r\n return refObj._value;\r\n },\r\n set(newValue) {\r\n if (newValue !== refObj._value) {\r\n refObj._value = newValue;\r\n refObj._subscribers.forEach(sub => sub(newValue));\r\n }\r\n }\r\n });\r\n\r\n return refObj;\r\n }\r\n\r\n function reactive(target) {\r\n if (currentSetupContext) {\r\n return currentSetupContext.reactive(target);\r\n }\r\n\r\n if (window.kupolaData) {\r\n return window.kupolaData.createReactive(target);\r\n }\r\n\r\n const handler = {\r\n get(target, key) {\r\n if (key === '__isReactive') return true;\r\n if (key === '__raw') return target;\r\n const result = target[key];\r\n if (typeof result === 'object' && result !== null && !result.__isReactive) {\r\n target[key] = new Proxy(result, handler);\r\n target[key].__isReactive = true;\r\n }\r\n return target[key];\r\n },\r\n set(target, key, value) {\r\n if (target[key] === value) return true;\r\n target[key] = value;\r\n if (currentSetupContext) {\r\n currentSetupContext._notifyWatchers(key, value);\r\n }\r\n return true;\r\n },\r\n deleteProperty(target, key) {\r\n delete target[key];\r\n if (currentSetupContext) {\r\n currentSetupContext._notifyWatchers(key, undefined);\r\n }\r\n return true;\r\n }\r\n };\r\n\r\n const proxy = new Proxy(target, handler);\r\n proxy.__isReactive = true;\r\n return proxy;\r\n }\r\n\r\n function onMounted(handler) {\r\n if (currentSetupContext) {\r\n currentSetupContext.onMounted(handler);\r\n } else {\r\n console.warn('onMounted called outside of setup()');\r\n }\r\n }\r\n\r\n function onUnmounted(handler) {\r\n if (currentSetupContext) {\r\n currentSetupContext.onUnmounted(handler);\r\n } else {\r\n console.warn('onUnmounted called outside of setup()');\r\n }\r\n }\r\n\r\n function onUpdated(handler) {\r\n if (currentSetupContext) {\r\n currentSetupContext.onUpdated(handler);\r\n } else {\r\n console.warn('onUpdated called outside of setup()');\r\n }\r\n }\r\n\r\n function watch(source, handler, options = {}) {\r\n if (currentSetupContext) {\r\n currentSetupContext.watch(source, handler, options);\r\n }\r\n }\r\n\r\n function computed(getter) {\r\n if (currentSetupContext) {\r\n return currentSetupContext.computed(getter);\r\n }\r\n\r\n const result = ref();\r\n\r\n let update = () => {\r\n try {\r\n result.value = getter();\r\n } catch (e) {\r\n console.error('Computed property error:', e);\r\n }\r\n };\r\n\r\n if (window.kupolaData) {\r\n const trackedPaths = [];\r\n const originalGet = window.kupolaData.get;\r\n window.kupolaData.get = function(k) {\r\n trackedPaths.push(k);\r\n return originalGet.call(this, k);\r\n };\r\n \r\n update();\r\n \r\n window.kupolaData.get = originalGet;\r\n \r\n trackedPaths.forEach(path => {\r\n window.kupolaData.observe(path, update);\r\n });\r\n } else {\r\n update();\r\n }\r\n\r\n let computedValue = result._value;\r\n \r\n Object.defineProperty(result, 'value', {\r\n get: () => computedValue,\r\n set: (newValue) => {\r\n console.warn('Cannot assign to a computed property');\r\n }\r\n });\r\n\r\n const originalUpdate = update;\r\n update = () => {\r\n try {\r\n computedValue = getter();\r\n } catch (e) {\r\n console.error('Computed property error:', e);\r\n }\r\n };\r\n\r\n return result;\r\n}\r\n\r\n function setup(setupFn) {\r\n if (typeof setupFn !== 'function') {\r\n console.error('setup() requires a function argument');\r\n return;\r\n }\r\n\r\n const setupContext = new SetupContext();\r\n const prevContext = currentSetupContext;\r\n currentSetupContext = setupContext;\r\n\r\n let result;\r\n try {\r\n result = setupFn(setupContext);\r\n } finally {\r\n currentSetupContext = prevContext;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n window.SetupContext = SetupContext;\r\n window.ref = ref;\r\n window.reactive = reactive;\r\n window.onMounted = onMounted;\r\n window.onUnmounted = onUnmounted;\r\n window.onUpdated = onUpdated;\r\n window.watch = watch;\r\n window.computed = computed;\r\n window.setup = setup;\r\n window._getCurrentSetupContext = () => currentSetupContext;\r\n window._setCurrentSetupContext = (ctx) => { currentSetupContext = ctx; };\r\n window._clearSetupContext = () => { currentSetupContext = null; };\r\n})(window);","(function(window) {\r\n class KupolaForm {\r\n constructor(formOrSelector, options = {}) {\r\n this.form = typeof formOrSelector === 'string'\r\n ? document.querySelector(formOrSelector)\r\n : formOrSelector;\r\n \r\n this.options = {\r\n validateOnSubmit: true,\r\n validateOnChange: false,\r\n validateOnBlur: false,\r\n preventDefault: true,\r\n ...options\r\n };\r\n\r\n this.submitHandlers = [];\r\n this.isSubmitting = false;\r\n this.errors = {};\r\n this.rules = {};\r\n this.validator = window.kupolaValidator || new window.KupolaValidator();\r\n\r\n if (!this.form || !(this.form instanceof HTMLFormElement)) {\r\n console.warn('[KupolaForm] Invalid form element');\r\n return;\r\n }\r\n\r\n this._init();\r\n }\r\n\r\n _init() {\r\n if (this.options.validateOnChange) {\r\n this.form.addEventListener('input', (e) => {\r\n this._validateField(e.target);\r\n });\r\n }\r\n\r\n if (this.options.validateOnBlur) {\r\n this.form.addEventListener('blur', (e) => {\r\n if (e.target.form === this.form) {\r\n this._validateField(e.target);\r\n }\r\n }, true);\r\n }\r\n }\r\n\r\n submit(handler) {\r\n const wrappedHandler = async (e) => {\r\n if (this.options.preventDefault) {\r\n e.preventDefault();\r\n }\r\n if (this.isSubmitting) return;\r\n this.isSubmitting = true;\r\n\r\n try {\r\n if (this.options.validateOnSubmit) {\r\n const validation = await this.validate();\r\n if (!validation.valid) {\r\n this._showErrors(validation.errors);\r\n return;\r\n }\r\n }\r\n\r\n const result = handler(e);\r\n if (result instanceof Promise) {\r\n await result;\r\n }\r\n } finally {\r\n this.isSubmitting = false;\r\n }\r\n };\r\n\r\n this.submitHandlers.push(wrappedHandler);\r\n this.form.addEventListener('submit', wrappedHandler);\r\n\r\n return () => {\r\n const index = this.submitHandlers.indexOf(wrappedHandler);\r\n if (index > -1) {\r\n this.submitHandlers.splice(index, 1);\r\n this.form.removeEventListener('submit', wrappedHandler);\r\n }\r\n };\r\n }\r\n\r\n setRules(rules) {\r\n this.rules = { ...this.rules, ...rules };\r\n this._applyRulesToDOM();\r\n return this;\r\n }\r\n\r\n _applyRulesToDOM() {\r\n Object.keys(this.rules).forEach(name => {\r\n const input = this.form.querySelector(`[name=\"${name}\"]`);\r\n if (!input) return;\r\n\r\n const fieldRules = this.rules[name];\r\n const ruleString = this._rulesToString(fieldRules);\r\n input.setAttribute('data-validate', ruleString);\r\n });\r\n }\r\n\r\n _rulesToString(rules) {\r\n if (typeof rules === 'function') {\r\n return 'custom';\r\n }\r\n\r\n const parts = [];\r\n Object.keys(rules).forEach(rule => {\r\n const config = rules[rule];\r\n if (typeof config === 'object' && config !== null) {\r\n if (rule === 'pattern') {\r\n parts.push(`pattern:${config.source?.replace(/\\//g, '')}`);\r\n } else if (rule === 'equalTo') {\r\n parts.push(`equalTo:${config}`);\r\n } else {\r\n parts.push(rule);\r\n }\r\n } else if (typeof config === 'number' || typeof config === 'string') {\r\n parts.push(`${rule}:${config}`);\r\n } else if (config === true) {\r\n parts.push(rule);\r\n }\r\n });\r\n return parts.join('|');\r\n }\r\n\r\n async validate(fields = null) {\r\n this.errors = {};\r\n const allErrors = [];\r\n\r\n const inputs = fields\r\n ? Array.isArray(fields) ? fields : [fields]\r\n : this.form.querySelectorAll('input, select, textarea');\r\n\r\n for (const input of inputs) {\r\n const name = input.name;\r\n if (!name) continue;\r\n\r\n const errors = await this._validateField(input);\r\n if (errors.length > 0) {\r\n this.errors[name] = errors;\r\n allErrors.push(...errors);\r\n }\r\n }\r\n\r\n return {\r\n valid: allErrors.length === 0,\r\n errors: allErrors,\r\n fieldErrors: this.errors\r\n };\r\n }\r\n\r\n async _validateField(input) {\r\n const name = input.name;\r\n const rules = this.rules[name];\r\n\r\n if (typeof rules === 'function') {\r\n const result = rules(input.value.trim(), input);\r\n if (result instanceof Promise) {\r\n const asyncResult = await result;\r\n if (asyncResult !== true) {\r\n const displayName = input.getAttribute('data-label') || input.getAttribute('placeholder') || name;\r\n const message = typeof asyncResult === 'string' ? asyncResult : `${displayName} 验证失败`;\r\n this.validator.showError(input, message);\r\n return [message];\r\n }\r\n } else if (result !== true) {\r\n const displayName = input.getAttribute('data-label') || input.getAttribute('placeholder') || name;\r\n const message = typeof result === 'string' ? result : `${displayName} 验证失败`;\r\n this.validator.showError(input, message);\r\n return [message];\r\n }\r\n this.validator.clearError(input);\r\n return [];\r\n }\r\n\r\n const isValid = await this.validator.validateInputAsync(input);\r\n if (!isValid) {\r\n const errorElement = input.parentElement?.querySelector('.ds-input__error');\r\n return errorElement ? [errorElement.textContent] : ['Validation failed'];\r\n }\r\n return [];\r\n }\r\n\r\n _showErrors(errors) {\r\n if (typeof Message !== 'undefined') {\r\n Message.error(errors.join('\\n'));\r\n } else if (typeof console !== 'undefined') {\r\n console.error('Form validation errors:', errors);\r\n }\r\n }\r\n\r\n getValues() {\r\n const values = {};\r\n const inputs = this.form.querySelectorAll('input, select, textarea');\r\n\r\n inputs.forEach(input => {\r\n const name = input.name;\r\n if (!name) return;\r\n\r\n if (input.type === 'checkbox') {\r\n if (!values[name]) {\r\n values[name] = [];\r\n }\r\n if (input.checked) {\r\n values[name].push(input.value);\r\n }\r\n } else if (input.type === 'radio') {\r\n if (input.checked) {\r\n values[name] = input.value;\r\n }\r\n } else if (input.type === 'file') {\r\n values[name] = input.files;\r\n } else {\r\n values[name] = input.value;\r\n }\r\n });\r\n\r\n return values;\r\n }\r\n\r\n setValues(values) {\r\n Object.keys(values).forEach(key => {\r\n const input = this.form.querySelector(`[name=\"${key}\"]`);\r\n if (!input) return;\r\n\r\n if (input.type === 'checkbox') {\r\n const valuesArray = Array.isArray(values[key]) ? values[key] : [values[key]];\r\n input.checked = valuesArray.includes(input.value);\r\n } else if (input.type === 'radio') {\r\n const radio = this.form.querySelector(`[name=\"${key}\"][value=\"${values[key]}\"]`);\r\n if (radio) radio.checked = true;\r\n } else if (input.type === 'file') {\r\n const dataTransfer = new DataTransfer();\r\n if (values[key] instanceof FileList) {\r\n Array.from(values[key]).forEach(file => {\r\n dataTransfer.items.add(file);\r\n });\r\n }\r\n input.files = dataTransfer.files;\r\n } else {\r\n input.value = values[key];\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n reset() {\r\n this.form.reset();\r\n this.errors = {};\r\n this.validator.resetForm(this.form);\r\n return this;\r\n }\r\n\r\n clearErrors() {\r\n this.errors = {};\r\n this.form.querySelectorAll('.ds-input--error').forEach(input => {\r\n this.validator.clearError(input);\r\n });\r\n return this;\r\n }\r\n\r\n getError(fieldName) {\r\n return this.errors[fieldName] || [];\r\n }\r\n\r\n hasError(fieldName) {\r\n return this.errors[fieldName] && this.errors[fieldName].length > 0;\r\n }\r\n\r\n destroy() {\r\n this.submitHandlers.forEach(handler => {\r\n this.form.removeEventListener('submit', handler);\r\n });\r\n this.submitHandlers = [];\r\n this.errors = {};\r\n this.rules = {};\r\n }\r\n }\r\n\r\n function useForm(formOrSelector, options = {}) {\r\n return new KupolaForm(formOrSelector, options);\r\n }\r\n\r\n function createForm(formOrSelector, options = {}) {\r\n return new KupolaForm(formOrSelector, options);\r\n }\r\n\r\n window.KupolaForm = KupolaForm;\r\n window.useForm = useForm;\r\n window.createForm = createForm;\r\n})(window);","class KupolaTestUtils {\r\n static createElement(html) {\r\n const container = document.createElement('div');\r\n container.innerHTML = html;\r\n return container.firstElementChild;\r\n }\r\n\r\n static mountComponent(ComponentClass, props = {}, html = '') {\r\n const element = this.createElement(html);\r\n const component = new ComponentClass(element);\r\n Object.assign(component.props, props);\r\n return { component, element };\r\n }\r\n\r\n static async waitFor(condition, timeout = 1000) {\r\n const startTime = Date.now();\r\n return new Promise((resolve, reject) => {\r\n const check = async () => {\r\n try {\r\n const result = await condition();\r\n if (result) {\r\n resolve(result);\r\n } else if (Date.now() - startTime < timeout) {\r\n requestAnimationFrame(check);\r\n } else {\r\n reject(new Error('waitFor timeout'));\r\n }\r\n } catch (error) {\r\n if (Date.now() - startTime < timeout) {\r\n requestAnimationFrame(check);\r\n } else {\r\n reject(new Error('waitFor timeout'));\r\n }\r\n }\r\n };\r\n requestAnimationFrame(check);\r\n });\r\n }\r\n\r\n static async waitForElement(selector, parent = document, timeout = 1000) {\r\n return this.waitFor(() => parent.querySelector(selector), timeout);\r\n }\r\n\r\n static async waitForText(text, parent = document, timeout = 1000) {\r\n return this.waitFor(() => parent.textContent.includes(text), timeout);\r\n }\r\n\r\n static fireEvent(element, eventName, detail = {}) {\r\n const event = new CustomEvent(eventName, { \r\n bubbles: true, \r\n cancelable: true, \r\n detail \r\n });\r\n element.dispatchEvent(event);\r\n }\r\n\r\n static fireInput(element, value) {\r\n element.value = value;\r\n this.fireEvent(element, 'input');\r\n this.fireEvent(element, 'change');\r\n }\r\n\r\n static fireClick(element) {\r\n this.fireEvent(element, 'click');\r\n }\r\n\r\n static fireKeyDown(element, key) {\r\n const event = new KeyboardEvent('keydown', { key, bubbles: true });\r\n element.dispatchEvent(event);\r\n }\r\n\r\n static async nextTick() {\r\n return new Promise(resolve => requestAnimationFrame(resolve));\r\n }\r\n\r\n static mockDate(date) {\r\n const originalNow = Date.now;\r\n const originalDate = Date;\r\n \r\n Date.now = () => date.getTime();\r\n globalThis.Date = class extends Date {\r\n constructor(...args) {\r\n super(...args);\r\n if (args.length === 0) {\r\n return new Date(date);\r\n }\r\n return new originalDate(...args);\r\n }\r\n };\r\n \r\n return () => {\r\n Date.now = originalNow;\r\n globalThis.Date = originalDate;\r\n };\r\n }\r\n\r\n static mockFetch(mockResponses) {\r\n const originalFetch = fetch;\r\n \r\n globalThis.fetch = jest.fn(async (url, options) => {\r\n for (const mock of mockResponses) {\r\n if (typeof mock.url === 'string' && url === mock.url) {\r\n return mock.response();\r\n }\r\n if (mock.url instanceof RegExp && mock.url.test(url)) {\r\n return mock.response();\r\n }\r\n if (mock.method && options && options.method === mock.method) {\r\n return mock.response();\r\n }\r\n }\r\n return originalFetch(url, options);\r\n });\r\n \r\n return () => {\r\n globalThis.fetch = originalFetch;\r\n };\r\n }\r\n\r\n static async mountAndWait(ComponentClass, props = {}, html = '') {\r\n const { component, element } = this.mountComponent(ComponentClass, props, html);\r\n await component.mount();\r\n await this.nextTick();\r\n return { component, element };\r\n }\r\n\r\n static async unmountAndWait(component) {\r\n await component.unmount();\r\n await this.nextTick();\r\n }\r\n\r\n static getByText(parent, text) {\r\n const elements = parent.querySelectorAll('*');\r\n for (const element of elements) {\r\n if (element.textContent.trim() === text) {\r\n return element;\r\n }\r\n }\r\n throw new Error(`Element with text \"${text}\" not found`);\r\n }\r\n\r\n static queryByText(parent, text) {\r\n const elements = parent.querySelectorAll('*');\r\n for (const element of elements) {\r\n if (element.textContent.trim() === text) {\r\n return element;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n static getByTestId(parent, testId) {\r\n const element = parent.querySelector(`[data-testid=\"${testId}\"]`);\r\n if (!element) {\r\n throw new Error(`Element with data-testid=\"${testId}\" not found`);\r\n }\r\n return element;\r\n }\r\n\r\n static queryByTestId(parent, testId) {\r\n return parent.querySelector(`[data-testid=\"${testId}\"]`);\r\n }\r\n\r\n static getByRole(parent, role) {\r\n const element = parent.querySelector(`[role=\"${role}\"]`);\r\n if (!element) {\r\n throw new Error(`Element with role=\"${role}\" not found`);\r\n }\r\n return element;\r\n }\r\n\r\n static queryByRole(parent, role) {\r\n return parent.querySelector(`[role=\"${role}\"]`);\r\n }\r\n\r\n static async simulateDrag(element, startX, startY, endX, endY) {\r\n this.fireEvent(element, 'dragstart', {\r\n clientX: startX,\r\n clientY: startY\r\n });\r\n \r\n this.fireEvent(element, 'drag', {\r\n clientX: (startX + endX) / 2,\r\n clientY: (startY + endY) / 2\r\n });\r\n \r\n this.fireEvent(element, 'dragend', {\r\n clientX: endX,\r\n clientY: endY\r\n });\r\n }\r\n\r\n static async simulateTouch(element, startX, startY, endX, endY) {\r\n const touchStart = new TouchEvent('touchstart', {\r\n touches: [{ clientX: startX, clientY: startY }],\r\n bubbles: true\r\n });\r\n element.dispatchEvent(touchStart);\r\n \r\n const touchMove = new TouchEvent('touchmove', {\r\n touches: [{ clientX: (startX + endX) / 2, clientY: (startY + endY) / 2 }],\r\n bubbles: true\r\n });\r\n element.dispatchEvent(touchMove);\r\n \r\n const touchEnd = new TouchEvent('touchend', {\r\n touches: [{ clientX: endX, clientY: endY }],\r\n bubbles: true\r\n });\r\n element.dispatchEvent(touchEnd);\r\n }\r\n\r\n static async waitForState(component, stateKey, expectedValue) {\r\n return this.waitFor(() => {\r\n return component.state[stateKey] === expectedValue;\r\n });\r\n }\r\n\r\n static async waitForProps(component, propKey, expectedValue) {\r\n return this.waitFor(() => {\r\n return component.props[propKey] === expectedValue;\r\n });\r\n }\r\n\r\n static async waitForEmitted(component, eventName) {\r\n return this.waitFor(() => {\r\n return component._emitted && component._emitted[eventName];\r\n });\r\n }\r\n\r\n static spyOn(obj, methodName) {\r\n const original = obj[methodName];\r\n const spy = function(...args) {\r\n spy.called = true;\r\n spy.callCount = (spy.callCount || 0) + 1;\r\n spy.args = (spy.args || []).concat([args]);\r\n return original.apply(this, args);\r\n };\r\n obj[methodName] = spy;\r\n return () => {\r\n obj[methodName] = original;\r\n };\r\n }\r\n\r\n static async flushPromises() {\r\n return new Promise(resolve => setImmediate(resolve));\r\n }\r\n}\r\n\r\nwindow.KupolaTestUtils = KupolaTestUtils;\r\nwindow.testUtils = KupolaTestUtils;","class KupolaI18n {\r\n constructor(options = {}) {\r\n this.locales = options.locales || {};\r\n this.currentLocale = options.defaultLocale || 'zh-CN';\r\n this.fallbackLocale = options.fallbackLocale || 'zh-CN';\r\n this.delimiter = options.delimiter || '.';\r\n this.missingHandler = options.missingHandler || ((key) => {\r\n console.warn(`Missing translation: ${key}`);\r\n return key;\r\n });\r\n \r\n this._initFromDOM();\r\n }\r\n\r\n _initFromDOM() {\r\n const scriptTags = document.querySelectorAll('script[type=\"application/json\"][data-kupola-i18n]');\r\n scriptTags.forEach(script => {\r\n const locale = script.dataset.kupolaI18n;\r\n if (locale) {\r\n try {\r\n const data = JSON.parse(script.textContent);\r\n this.addLocale(locale, data);\r\n } catch (e) {\r\n console.error('Failed to parse i18n data:', e);\r\n }\r\n }\r\n });\r\n\r\n const htmlLang = document.documentElement.lang;\r\n if (htmlLang && this.locales[htmlLang]) {\r\n this.currentLocale = htmlLang;\r\n }\r\n }\r\n\r\n addLocale(locale, data) {\r\n if (!this.locales[locale]) {\r\n this.locales[locale] = {};\r\n }\r\n this._mergeDeep(this.locales[locale], data);\r\n }\r\n\r\n _mergeDeep(target, source) {\r\n for (const key of Object.keys(source)) {\r\n if (source[key] instanceof Object && key in target) {\r\n this._mergeDeep(target[key], source[key]);\r\n } else {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n\r\n setLocale(locale) {\r\n if (this.locales[locale]) {\r\n this.currentLocale = locale;\r\n document.documentElement.lang = locale;\r\n this._emitChange();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n getLocale() {\r\n return this.currentLocale;\r\n }\r\n\r\n t(key, params = {}) {\r\n let value = this._getTranslation(key, this.currentLocale);\r\n \r\n if (!value) {\r\n value = this._getTranslation(key, this.fallbackLocale);\r\n }\r\n \r\n if (!value) {\r\n return this.missingHandler(key);\r\n }\r\n \r\n return this._interpolate(value, params);\r\n }\r\n\r\n _getTranslation(key, locale) {\r\n if (!this.locales[locale]) return null;\r\n \r\n const keys = key.split(this.delimiter);\r\n let value = this.locales[locale];\r\n \r\n for (const k of keys) {\r\n if (value && typeof value === 'object' && k in value) {\r\n value = value[k];\r\n } else {\r\n return null;\r\n }\r\n }\r\n \r\n return typeof value === 'string' ? value : null;\r\n }\r\n\r\n _interpolate(str, params) {\r\n return str.replace(/\\{(\\w+)\\}/g, (match, key) => {\r\n return params[key] !== undefined ? params[key] : match;\r\n });\r\n }\r\n\r\n n(key, count, params = {}) {\r\n const value = this.t(key, { ...params, count });\r\n \r\n if (!value) return value;\r\n \r\n const parts = value.split('|');\r\n \r\n if (parts.length === 1) {\r\n return value.replace('{count}', count);\r\n }\r\n \r\n if (parts.length === 2) {\r\n return count === 1 ? parts[0] : parts[1];\r\n }\r\n \r\n if (parts.length >= 3) {\r\n if (count === 0) return parts[0];\r\n if (count === 1) return parts[1];\r\n return parts[2];\r\n }\r\n \r\n return value;\r\n }\r\n\r\n _emitChange() {\r\n const event = new CustomEvent('kupola:i18n:change', {\r\n detail: { locale: this.currentLocale },\r\n bubbles: true\r\n });\r\n document.dispatchEvent(event);\r\n }\r\n\r\n async loadLocale(locale, url) {\r\n try {\r\n const response = await fetch(url);\r\n const data = await response.json();\r\n this.addLocale(locale, data);\r\n return true;\r\n } catch (error) {\r\n console.error('Failed to load locale:', error);\r\n return false;\r\n }\r\n }\r\n\r\n getAvailableLocales() {\r\n return Object.keys(this.locales);\r\n }\r\n\r\n hasLocale(locale) {\r\n return !!this.locales[locale];\r\n }\r\n\r\n formatDate(date, options = {}) {\r\n const locale = options.locale || this.currentLocale;\r\n const dateObj = typeof date === 'string' ? new Date(date) : date;\r\n \r\n return new Intl.DateTimeFormat(locale, options).format(dateObj);\r\n }\r\n\r\n formatNumber(number, options = {}) {\r\n const locale = options.locale || this.currentLocale;\r\n \r\n return new Intl.NumberFormat(locale, options).format(number);\r\n }\r\n\r\n formatCurrency(number, currency, options = {}) {\r\n const locale = options.locale || this.currentLocale;\r\n \r\n return new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currency,\r\n ...options\r\n }).format(number);\r\n }\r\n\r\n formatRelativeTime(value, unit, options = {}) {\r\n const locale = options.locale || this.currentLocale;\r\n \r\n return new Intl.RelativeTimeFormat(locale, options).format(value, unit);\r\n }\r\n}\r\n\r\nconst kupolaI18n = new KupolaI18n();\r\n\r\nfunction createI18n(options) {\r\n return new KupolaI18n(options);\r\n}\r\n\r\nfunction t(key, params = {}) {\r\n return kupolaI18n.t(key, params);\r\n}\r\n\r\nfunction n(key, count, params = {}) {\r\n return kupolaI18n.n(key, count, params);\r\n}\r\n\r\nfunction setLocale(locale) {\r\n return kupolaI18n.setLocale(locale);\r\n}\r\n\r\nfunction getLocale() {\r\n return kupolaI18n.getLocale();\r\n}\r\n\r\nfunction formatDate(date, options = {}) {\r\n return kupolaI18n.formatDate(date, options);\r\n}\r\n\r\nfunction formatNumber(number, options = {}) {\r\n return kupolaI18n.formatNumber(number, options);\r\n}\r\n\r\nfunction formatCurrency(number, currency, options = {}) {\r\n return kupolaI18n.formatCurrency(number, currency, options);\r\n}\r\n\r\nwindow.KupolaI18n = KupolaI18n;\r\nwindow.kupolaI18n = kupolaI18n;\r\nwindow.createI18n = createI18n;\r\nwindow.t = t;\r\nwindow.n = n;\r\nwindow.setLocale = setLocale;\r\nwindow.getLocale = getLocale;\r\nwindow.formatDate = formatDate;\r\nwindow.formatNumber = formatNumber;\r\nwindow.formatCurrency = formatCurrency;","class GlobalEventManager {\r\n constructor() {\r\n this.listeners = new Map();\r\n this.scopes = new Map();\r\n }\r\n\r\n on(target, eventType, handler, options = {}) {\r\n const key = this._getKey(target, eventType);\r\n \r\n if (!this.listeners.has(key)) {\r\n this.listeners.set(key, []);\r\n }\r\n \r\n const wrapper = (e) => {\r\n if (handler.before && typeof handler.before === 'function') {\r\n handler.before(e);\r\n }\r\n \r\n const result = handler(e);\r\n \r\n if (handler.after && typeof handler.after === 'function') {\r\n handler.after(e, result);\r\n }\r\n \r\n return result;\r\n };\r\n \r\n const listener = {\r\n handler,\r\n wrapper,\r\n options,\r\n active: true\r\n };\r\n \r\n this.listeners.get(key).push(listener);\r\n \r\n if (options.scope) {\r\n if (!this.scopes.has(options.scope)) {\r\n this.scopes.set(options.scope, []);\r\n }\r\n this.scopes.get(options.scope).push({ target, eventType, handler, wrapper });\r\n }\r\n \r\n target.addEventListener(eventType, wrapper, options);\r\n \r\n const unsubscribe = () => {\r\n target.removeEventListener(eventType, wrapper, options);\r\n if (this.listeners.has(key)) {\r\n const list = this.listeners.get(key);\r\n const idx = list.indexOf(listener);\r\n if (idx !== -1) {\r\n list.splice(idx, 1);\r\n }\r\n }\r\n if (options.scope && this.scopes.has(options.scope)) {\r\n const scopeList = this.scopes.get(options.scope);\r\n const idx = scopeList.findIndex(\r\n s => s.target === target && s.eventType === eventType && s.handler === handler\r\n );\r\n if (idx !== -1) {\r\n scopeList.splice(idx, 1);\r\n }\r\n }\r\n listener.active = false;\r\n };\r\n \r\n listener.unsubscribe = unsubscribe;\r\n \r\n return listener;\r\n }\r\n\r\n off(target, eventType, handler) {\r\n const key = this._getKey(target, eventType);\r\n \r\n if (!this.listeners.has(key)) return;\r\n \r\n const listenerList = this.listeners.get(key);\r\n const index = listenerList.findIndex(l => l.handler === handler);\r\n \r\n if (index !== -1) {\r\n const listener = listenerList[index];\r\n target.removeEventListener(eventType, listener.wrapper, listener.options);\r\n listener.active = false;\r\n listenerList.splice(index, 1);\r\n \r\n if (listener.options.scope) {\r\n this._removeFromScope(listener.options.scope, target, eventType, handler);\r\n }\r\n }\r\n }\r\n\r\n once(target, eventType, handler, options = {}) {\r\n const onceHandler = (e) => {\r\n this.off(target, eventType, onceHandler);\r\n return handler(e);\r\n };\r\n \r\n return this.on(target, eventType, onceHandler, options);\r\n }\r\n\r\n clearScope(scope) {\r\n if (!this.scopes.has(scope)) return;\r\n \r\n const scopeListeners = this.scopes.get(scope);\r\n \r\n scopeListeners.forEach(({ target, eventType, handler, wrapper }) => {\r\n target.removeEventListener(eventType, wrapper);\r\n \r\n const key = this._getKey(target, eventType);\r\n if (this.listeners.has(key)) {\r\n const listenerList = this.listeners.get(key);\r\n const index = listenerList.findIndex(l => l.handler === handler);\r\n if (index !== -1) {\r\n listenerList[index].active = false;\r\n listenerList.splice(index, 1);\r\n }\r\n }\r\n });\r\n \r\n this.scopes.delete(scope);\r\n }\r\n\r\n _removeFromScope(scope, target, eventType, handler) {\r\n if (!this.scopes.has(scope)) return;\r\n \r\n const scopeListeners = this.scopes.get(scope);\r\n const index = scopeListeners.findIndex(\r\n l => l.target === target && l.eventType === eventType && l.handler === handler\r\n );\r\n \r\n if (index !== -1) {\r\n scopeListeners.splice(index, 1);\r\n }\r\n }\r\n\r\n _getKey(target, eventType) {\r\n const targetName = target === document ? 'document' : \r\n target === window ? 'window' : \r\n target === document.body ? 'body' : \r\n target.nodeName ? target.nodeName : \r\n 'unknown';\r\n \r\n return `${targetName}:${eventType}`;\r\n }\r\n\r\n getListenerCount(target, eventType) {\r\n const key = this._getKey(target, eventType);\r\n return this.listeners.has(key) ? this.listeners.get(key).length : 0;\r\n }\r\n\r\n getAllListenerCounts() {\r\n const counts = {};\r\n this.listeners.forEach((listeners, key) => {\r\n counts[key] = listeners.filter(l => l.active).length;\r\n });\r\n return counts;\r\n }\r\n\r\n cleanup() {\r\n this.listeners.forEach((listenerList, key) => {\r\n const [targetName, eventType] = key.split(':');\r\n let target;\r\n \r\n if (targetName === 'document') target = document;\r\n else if (targetName === 'window') target = window;\r\n else if (targetName === 'body') target = document.body;\r\n \r\n if (target) {\r\n listenerList.forEach(listener => {\r\n target.removeEventListener(eventType, listener.wrapper, listener.options);\r\n });\r\n }\r\n });\r\n \r\n this.listeners.clear();\r\n this.scopes.clear();\r\n }\r\n}\r\n\r\nconst globalEvents = new GlobalEventManager();\r\n\r\nfunction on(target, eventType, handler, options) {\r\n return globalEvents.on(target, eventType, handler, options);\r\n}\r\n\r\nfunction off(target, eventType, handler) {\r\n globalEvents.off(target, eventType, handler);\r\n}\r\n\r\nfunction once(target, eventType, handler, options) {\r\n return globalEvents.once(target, eventType, handler, options);\r\n}\r\n\r\nfunction clearScope(scope) {\r\n globalEvents.clearScope(scope);\r\n}\r\n\r\nwindow.GlobalEventManager = GlobalEventManager;\r\nwindow.globalEvents = globalEvents;\r\nwindow.on = on;\r\nwindow.off = off;\r\nwindow.once = once;\r\nwindow.clearScope = clearScope;","class KupolaSecurity {\r\n constructor() {\r\n this.csrfToken = null;\r\n this.cspEnabled = false;\r\n }\r\n\r\n init() {\r\n this._initCSRF();\r\n this._initCSP();\r\n }\r\n\r\n _initCSRF() {\r\n const metaTag = document.querySelector('meta[name=\"csrf-token\"]');\r\n if (metaTag) {\r\n this.csrfToken = metaTag.getAttribute('content');\r\n }\r\n }\r\n\r\n _initCSP() {\r\n const metaTag = document.querySelector('meta[http-equiv=\"Content-Security-Policy\"]');\r\n if (metaTag) {\r\n this.cspEnabled = true;\r\n }\r\n }\r\n\r\n getCSRFToken() {\r\n return this.csrfToken;\r\n }\r\n\r\n setCSRFToken(token) {\r\n this.csrfToken = token;\r\n const metaTag = document.querySelector('meta[name=\"csrf-token\"]');\r\n if (metaTag) {\r\n metaTag.setAttribute('content', token);\r\n }\r\n }\r\n\r\n addCSRFHeader(config) {\r\n if (this.csrfToken) {\r\n config.headers = config.headers || {};\r\n config.headers['X-CSRF-Token'] = this.csrfToken;\r\n }\r\n return config;\r\n }\r\n\r\n escapeHtml(str) {\r\n if (!str || typeof str !== 'string') return str;\r\n const div = document.createElement('div');\r\n div.textContent = str;\r\n return div.innerHTML;\r\n }\r\n\r\n sanitize(html) {\r\n if (!html || typeof html !== 'string') return html;\r\n\r\n const allowedTags = [\r\n 'b', 'strong', 'i', 'em', 'u', 's', 'strike', 'sub', 'sup',\r\n 'a', 'br', 'p', 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\r\n 'ul', 'ol', 'li', 'table', 'thead', 'tbody', 'tr', 'td', 'th',\r\n 'img', 'video', 'audio', 'iframe'\r\n ];\r\n\r\n const allowedAttributes = [\r\n 'href', 'src', 'alt', 'title', 'class', 'id', 'data-*',\r\n 'width', 'height', 'frameborder', 'allowfullscreen'\r\n ];\r\n\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = html;\r\n\r\n const walk = (node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const tagName = node.tagName.toLowerCase();\r\n if (!allowedTags.includes(tagName)) {\r\n node.parentNode.replaceChild(document.createTextNode(node.textContent), node);\r\n return;\r\n }\r\n\r\n Array.from(node.attributes).forEach(attr => {\r\n const attrName = attr.name.toLowerCase();\r\n const isAllowed = allowedAttributes.includes(attrName) || \r\n attrName.startsWith('data-');\r\n \r\n if (!isAllowed) {\r\n node.removeAttribute(attr.name);\r\n } else if (attrName === 'href' || attrName === 'src') {\r\n if (!this._isSafeUrl(attr.value)) {\r\n node.removeAttribute(attr.name);\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (let i = node.childNodes.length - 1; i >= 0; i--) {\r\n walk(node.childNodes[i]);\r\n }\r\n };\r\n\r\n walk(tempDiv);\r\n return tempDiv.innerHTML;\r\n }\r\n\r\n _isSafeUrl(url) {\r\n try {\r\n const parsed = new URL(url);\r\n const safeProtocols = ['http:', 'https:', 'data:', 'mailto:', 'tel:'];\r\n return safeProtocols.includes(parsed.protocol);\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n validateEmail(email) {\r\n const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return re.test(email);\r\n }\r\n\r\n validateURL(url) {\r\n try {\r\n new URL(url);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n validatePhone(phone) {\r\n const re = /^[\\d\\s\\-\\+\\(\\)]{7,20}$/;\r\n return re.test(phone.replace(/\\s/g, ''));\r\n }\r\n\r\n generateSecureHash(str) {\r\n if (!str || typeof str !== 'string') return '';\r\n \r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + char;\r\n hash = hash & hash;\r\n }\r\n return Math.abs(hash).toString(36);\r\n }\r\n\r\n isXSSAttack(str) {\r\n if (!str || typeof str !== 'string') return false;\r\n \r\n const xssPatterns = [\r\n /<script[^>]*>.*?<\\/script>/gi,\r\n /<img[^>]*onerror[^>]*>/gi,\r\n /javascript:/gi,\r\n /vbscript:/gi,\r\n /onload[^>]*=/gi,\r\n /onclick[^>]*=/gi,\r\n /onmouseover[^>]*=/gi,\r\n /<iframe[^>]*>/gi\r\n ];\r\n\r\n return xssPatterns.some(pattern => pattern.test(str));\r\n }\r\n\r\n protectForm(form) {\r\n if (!(form instanceof HTMLFormElement)) return;\r\n\r\n form.addEventListener('submit', (e) => {\r\n const inputs = form.querySelectorAll('input, textarea');\r\n let hasXSS = false;\r\n\r\n inputs.forEach(input => {\r\n if (this.isXSSAttack(input.value)) {\r\n hasXSS = true;\r\n input.classList.add('ds-input--error');\r\n } else {\r\n input.classList.remove('ds-input--error');\r\n }\r\n });\r\n\r\n if (hasXSS) {\r\n e.preventDefault();\r\n console.error('[KupolaSecurity] XSS attack detected in form');\r\n }\r\n });\r\n }\r\n}\r\n\r\nconst kupolaSecurity = new KupolaSecurity();\r\nwindow.kupolaSecurity = kupolaSecurity;\r\nwindow.KupolaSecurity = KupolaSecurity;\r\n\r\nexport default KupolaSecurity;","class KupolaErrorHandler {\r\n constructor() {\r\n this.handlers = new Map();\r\n this.errorLog = [];\r\n this.maxLogs = 100;\r\n this.globalHandler = null;\r\n }\r\n\r\n init() {\r\n this._installGlobalHandlers();\r\n }\r\n\r\n _installGlobalHandlers() {\r\n window.addEventListener('error', (event) => {\r\n this.handleError(event.error || event.message, {\r\n source: event.filename,\r\n line: event.lineno,\r\n column: event.colno,\r\n type: 'global'\r\n });\r\n });\r\n\r\n window.addEventListener('unhandledrejection', (event) => {\r\n this.handleError(event.reason, {\r\n type: 'promise',\r\n rejection: true\r\n });\r\n });\r\n }\r\n\r\n setGlobalHandler(handler) {\r\n if (typeof handler === 'function') {\r\n this.globalHandler = handler;\r\n }\r\n }\r\n\r\n handleError(error, context = {}) {\r\n const errorInfo = this._normalizeError(error, context);\r\n \r\n this._logError(errorInfo);\r\n this._notifyHandlers(errorInfo);\r\n \r\n if (this.globalHandler) {\r\n try {\r\n this.globalHandler(errorInfo);\r\n } catch (e) {\r\n console.error('[KupolaErrorHandler] Error in global handler:', e);\r\n }\r\n }\r\n \r\n return errorInfo;\r\n }\r\n\r\n _normalizeError(error, context) {\r\n const errorInfo = {\r\n id: this._generateId(),\r\n timestamp: Date.now(),\r\n message: '',\r\n stack: '',\r\n type: context.type || 'unknown',\r\n source: context.source || '',\r\n line: context.line || 0,\r\n column: context.column || 0,\r\n component: context.component || '',\r\n hook: context.hook || '',\r\n args: context.args || [],\r\n ...context\r\n };\r\n\r\n if (error instanceof Error) {\r\n errorInfo.message = error.message;\r\n errorInfo.stack = error.stack || '';\r\n errorInfo.name = error.name;\r\n } else if (typeof error === 'string') {\r\n errorInfo.message = error;\r\n } else if (error && typeof error === 'object') {\r\n errorInfo.message = error.message || JSON.stringify(error);\r\n errorInfo.stack = error.stack || '';\r\n errorInfo.name = error.name || '';\r\n }\r\n\r\n return errorInfo;\r\n }\r\n\r\n _generateId() {\r\n return `err-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n\r\n _logError(errorInfo) {\r\n this.errorLog.unshift(errorInfo);\r\n if (this.errorLog.length > this.maxLogs) {\r\n this.errorLog.pop();\r\n }\r\n \r\n console.error(`[KupolaError] [${errorInfo.type}] ${errorInfo.message}`, errorInfo);\r\n }\r\n\r\n _notifyHandlers(errorInfo) {\r\n this.handlers.forEach((handler, key) => {\r\n try {\r\n handler(errorInfo);\r\n } catch (e) {\r\n console.error(`[KupolaErrorHandler] Error in handler \"${key}\":`, e);\r\n }\r\n });\r\n }\r\n\r\n on(type, handler) {\r\n if (!this.handlers.has(type)) {\r\n this.handlers.set(type, []);\r\n }\r\n this.handlers.get(type).push(handler);\r\n }\r\n\r\n off(type, handler) {\r\n if (!this.handlers.has(type)) return;\r\n \r\n const handlers = this.handlers.get(type);\r\n const index = handlers.indexOf(handler);\r\n if (index > -1) {\r\n handlers.splice(index, 1);\r\n }\r\n }\r\n\r\n getErrorLog() {\r\n return [...this.errorLog];\r\n }\r\n\r\n clearErrorLog() {\r\n this.errorLog = [];\r\n }\r\n\r\n getErrorCount() {\r\n return this.errorLog.length;\r\n }\r\n\r\n getErrorByType(type) {\r\n return this.errorLog.filter(err => err.type === type);\r\n }\r\n\r\n captureErrors(target, methodNames) {\r\n if (!target || !methodNames || !Array.isArray(methodNames)) return;\r\n\r\n methodNames.forEach(methodName => {\r\n if (typeof target[methodName] === 'function') {\r\n const originalMethod = target[methodName];\r\n target[methodName] = function(...args) {\r\n try {\r\n const result = originalMethod.apply(this, args);\r\n if (result instanceof Promise) {\r\n return result.catch(error => {\r\n kupolaErrorHandler.handleError(error, {\r\n type: 'method',\r\n component: target.constructor?.name || '',\r\n hook: methodName,\r\n args\r\n });\r\n throw error;\r\n });\r\n }\r\n return result;\r\n } catch (error) {\r\n kupolaErrorHandler.handleError(error, {\r\n type: 'method',\r\n component: target.constructor?.name || '',\r\n hook: methodName,\r\n args\r\n });\r\n throw error;\r\n }\r\n };\r\n }\r\n });\r\n }\r\n}\r\n\r\nconst kupolaErrorHandler = new KupolaErrorHandler();\r\nwindow.kupolaErrorHandler = kupolaErrorHandler;\r\nwindow.KupolaErrorHandler = KupolaErrorHandler;\r\n\r\nexport default KupolaErrorHandler;","class KupolaPerformance {\r\n constructor() {\r\n this.metrics = new Map();\r\n this.timers = new Map();\r\n this.observers = [];\r\n this.enabled = false;\r\n this.thresholds = {\r\n render: 16,\r\n mount: 100,\r\n update: 50,\r\n http: 3000\r\n };\r\n }\r\n\r\n init() {\r\n this.enabled = true;\r\n this._setupObservers();\r\n this._measureNavigation();\r\n }\r\n\r\n _setupObservers() {\r\n if ('PerformanceObserver' in window) {\r\n const paintObserver = new PerformanceObserver((entryList) => {\r\n entryList.getEntries().forEach(entry => {\r\n this._recordMetric('paint', {\r\n name: entry.name,\r\n startTime: entry.startTime,\r\n duration: entry.duration\r\n });\r\n });\r\n });\r\n paintObserver.observe({ type: 'paint', buffered: true });\r\n this.observers.push(paintObserver);\r\n\r\n const resourceObserver = new PerformanceObserver((entryList) => {\r\n entryList.getEntries().forEach(entry => {\r\n this._recordMetric('resource', {\r\n name: entry.name,\r\n type: entry.initiatorType,\r\n duration: entry.duration,\r\n size: entry.transferSize,\r\n startTime: entry.startTime\r\n });\r\n });\r\n });\r\n resourceObserver.observe({ type: 'resource', buffered: true });\r\n this.observers.push(resourceObserver);\r\n\r\n const longTaskObserver = new PerformanceObserver((entryList) => {\r\n entryList.getEntries().forEach(entry => {\r\n this._recordMetric('longtask', {\r\n duration: entry.duration,\r\n startTime: entry.startTime\r\n });\r\n });\r\n });\r\n longTaskObserver.observe({ type: 'longtask', buffered: true });\r\n this.observers.push(longTaskObserver);\r\n }\r\n }\r\n\r\n _measureNavigation() {\r\n if ('performance' in window) {\r\n const nav = performance.getEntriesByType('navigation')[0];\r\n if (nav) {\r\n this._recordMetric('navigation', {\r\n domContentLoaded: nav.domContentLoadedEventEnd - nav.fetchStart,\r\n load: nav.loadEventEnd - nav.fetchStart,\r\n firstByte: nav.responseStart - nav.requestStart,\r\n redirectCount: nav.redirectCount\r\n });\r\n }\r\n }\r\n }\r\n\r\n startTimer(name, context = {}) {\r\n if (!this.enabled) return;\r\n \r\n this.timers.set(name, {\r\n startTime: performance.now(),\r\n context\r\n });\r\n }\r\n\r\n stopTimer(name) {\r\n if (!this.enabled) return null;\r\n \r\n const timer = this.timers.get(name);\r\n if (!timer) return null;\r\n \r\n const duration = performance.now() - timer.startTime;\r\n this.timers.delete(name);\r\n \r\n this._recordMetric('timer', {\r\n name,\r\n duration,\r\n ...timer.context\r\n });\r\n\r\n return duration;\r\n }\r\n\r\n _recordMetric(type, data) {\r\n if (!this.enabled) return;\r\n \r\n const metric = {\r\n type,\r\n timestamp: Date.now(),\r\n ...data\r\n };\r\n \r\n if (!this.metrics.has(type)) {\r\n this.metrics.set(type, []);\r\n }\r\n this.metrics.get(type).push(metric);\r\n }\r\n\r\n measure(fn, name, context = {}) {\r\n if (!this.enabled) return fn();\r\n \r\n this.startTimer(name, context);\r\n \r\n let result;\r\n let error;\r\n \r\n try {\r\n result = fn();\r\n } catch (e) {\r\n error = e;\r\n }\r\n \r\n const duration = this.stopTimer(name);\r\n \r\n if (error) {\r\n throw error;\r\n }\r\n \r\n return result;\r\n }\r\n\r\n measureAsync(fn, name, context = {}) {\r\n if (!this.enabled) return fn();\r\n \r\n this.startTimer(name, context);\r\n \r\n return fn().then(result => {\r\n this.stopTimer(name);\r\n return result;\r\n }).catch(error => {\r\n this.stopTimer(name);\r\n throw error;\r\n });\r\n }\r\n\r\n getMetrics(type) {\r\n if (type) {\r\n return this.metrics.get(type) || [];\r\n }\r\n return Array.from(this.metrics.entries());\r\n }\r\n\r\n getSummary() {\r\n const summary = {\r\n navigation: null,\r\n paint: null,\r\n timers: [],\r\n resources: [],\r\n longTasks: []\r\n };\r\n\r\n if (this.metrics.has('navigation')) {\r\n summary.navigation = this.metrics.get('navigation')[0];\r\n }\r\n \r\n if (this.metrics.has('paint')) {\r\n summary.paint = this.metrics.get('paint');\r\n }\r\n \r\n if (this.metrics.has('timer')) {\r\n summary.timers = this.metrics.get('timer');\r\n }\r\n \r\n if (this.metrics.has('resource')) {\r\n summary.resources = this.metrics.get('resource');\r\n }\r\n \r\n if (this.metrics.has('longtask')) {\r\n summary.longTasks = this.metrics.get('longtask');\r\n }\r\n\r\n return summary;\r\n }\r\n\r\n getPerformanceScore() {\r\n const summary = this.getSummary();\r\n let score = 100;\r\n \r\n if (summary.navigation) {\r\n if (summary.navigation.load > 3000) score -= 20;\r\n else if (summary.navigation.load > 2000) score -= 10;\r\n \r\n if (summary.navigation.domContentLoaded > 1500) score -= 15;\r\n else if (summary.navigation.domContentLoaded > 1000) score -= 5;\r\n }\r\n \r\n if (summary.paint) {\r\n const fcp = summary.paint.find(p => p.name === 'first-contentful-paint');\r\n if (fcp && fcp.startTime > 2000) score -= 20;\r\n else if (fcp && fcp.startTime > 1000) score -= 10;\r\n }\r\n \r\n if (summary.longTasks.length > 0) {\r\n score -= summary.longTasks.length * 10;\r\n }\r\n \r\n return Math.max(0, score);\r\n }\r\n\r\n logSummary() {\r\n const summary = this.getSummary();\r\n const score = this.getPerformanceScore();\r\n \r\n console.group('[KupolaPerformance] Summary');\r\n console.log('Score:', score);\r\n console.log('Navigation:', summary.navigation);\r\n console.log('Paint:', summary.paint);\r\n console.log('Long Tasks:', summary.longTasks.length);\r\n console.groupEnd();\r\n }\r\n\r\n clear() {\r\n this.metrics.clear();\r\n this.timers.clear();\r\n }\r\n\r\n destroy() {\r\n this.observers.forEach(observer => {\r\n observer.disconnect();\r\n });\r\n this.observers = [];\r\n this.clear();\r\n this.enabled = false;\r\n }\r\n}\r\n\r\nconst kupolaPerformance = new KupolaPerformance();\r\nwindow.kupolaPerformance = kupolaPerformance;\r\nwindow.KupolaPerformance = KupolaPerformance;\r\n\r\nexport default KupolaPerformance;","import '../js/component.js';\r\nimport '../js/registry.js';\r\nimport '../js/router.js';\r\nimport '../js/http.js';\r\nimport '../js/initializer.js';\r\nimport '../js/kupola-core.js';\r\nimport '../js/kupola-lifecycle.js';\r\nimport '../js/utils.js';\r\nimport '../js/data-bind.js';\r\nimport '../js/theme.js';\r\nimport '../js/dropdown.js';\r\nimport '../js/select.js';\r\nimport '../js/datepicker.js';\r\nimport '../js/timepicker.js';\r\nimport '../js/slider.js';\r\nimport '../js/carousel.js';\r\nimport '../js/drawer.js';\r\nimport '../js/modal.js';\r\nimport '../js/dialog.js';\r\nimport '../js/notification.js';\r\nimport '../js/message.js';\r\nimport '../js/fileupload.js';\r\nimport '../js/collapse.js';\r\nimport '../js/color-picker.js';\r\nimport '../js/calendar.js';\r\nimport '../js/dynamic-tags.js';\r\nimport '../js/image-preview.js';\r\nimport '../js/tag.js';\r\nimport '../js/statcard.js';\r\nimport '../js/heatmap.js';\r\nimport '../js/tooltip.js';\r\nimport '../js/validation.js';\r\nimport '../js/virtual-list.js';\r\nimport '../js/kupola-devtools.js';\r\nimport '../js/icons.js';\r\nimport '../js/countdown.js';\r\nimport '../js/numberinput.js';\r\nimport '../js/slide-captcha.js';\r\nimport '../js/composition-api.js';\r\nimport '../js/form.js';\r\nimport '../js/test-utils.js';\r\nimport '../js/i18n.js';\r\nimport '../js/global-events.js';\r\nimport '../js/security.js';\r\nimport '../js/error-handler.js';\r\nimport '../js/performance.js';\r\n\r\nexport const KupolaComponent = window.KupolaComponent;\r\nexport const KupolaComponentRegistry = window.KupolaComponentRegistry;\r\nexport const KupolaRouter = window.KupolaRouter;\r\nexport const KupolaHttp = window.KupolaHttp;\r\nexport const KupolaStatePersist = window.KupolaStatePersist;\r\nexport const KupolaLifecycle = window.KupolaLifecycle;\r\nexport const KupolaPluginManager = window.KupolaPluginManager;\r\nexport const KupolaDevTools = window.KupolaDevTools;\r\n\r\nexport const kupolaRegistry = window.kupolaRegistry;\r\nexport const kupolaPersist = window.kupolaPersist;\r\nexport const kupolaLifecycle = window.kupolaLifecycle;\r\nexport const kupolaPluginManager = window.kupolaPluginManager;\r\nexport const KupolaUtils = window.KupolaUtils;\r\n\r\nexport const createRouter = window.createRouter;\r\nexport const createHttp = window.createHttp;\r\nexport const createLifecycle = window.createLifecycle;\r\nexport const createStore = window.createStore;\r\nexport const getStore = window.getStore;\r\nexport const registerComponent = window.registerComponent;\r\nexport const registerLazyComponent = window.registerLazyComponent;\r\nexport const bootstrapComponents = window.bootstrapComponents;\r\nexport const defineMixin = window.defineMixin;\r\nexport const useMixin = window.useMixin;\r\n\r\nexport const initTheme = window.initTheme;\r\nexport const setTheme = window.setTheme;\r\nexport const getTheme = window.getTheme;\r\nexport const setBrand = window.setBrand;\r\nexport const getBrand = window.getBrand;\r\n\r\nexport const initDropdowns = window.initDropdowns;\r\nexport const initSelects = window.initSelects;\r\nexport const initDatePickers = window.initDatePickers;\r\nexport const initTimePickers = window.initTimePickers;\r\nexport const initSliders = window.initSliders;\r\nexport const initCarousels = window.initCarousels;\r\nexport const initDrawers = window.initDrawers;\r\nexport const initModals = window.initModals;\r\nexport const initDialogs = window.initDialogs;\r\nexport const initNotifications = window.initNotifications;\r\nexport const initMessages = window.initMessages;\r\nexport const initFileUploads = window.initFileUploads;\r\nexport const initCollapses = window.initCollapses;\r\nexport const initColorPickers = window.initColorPickers;\r\nexport const initCalendars = window.initCalendars;\r\nexport const initDynamicTags = window.initDynamicTags;\r\nexport const initImagePreviews = window.initImagePreviews;\r\nexport const initTags = window.initTags;\r\nexport const initStatCards = window.initStatCards;\r\nexport const initHeatmaps = window.initHeatmaps;\r\nexport const initTooltips = window.initTooltips;\r\nexport const initValidation = window.initValidation;\r\nexport const initVirtualLists = window.initVirtualLists;\r\nexport const initIcons = window.initIcons;\r\nexport const initCountdowns = window.initCountdowns;\r\nexport const initNumberInputs = window.initNumberInputs;\r\nexport const initSlideCaptchas = window.initSlideCaptchas;\r\n\r\nexport const setup = window.setup;\r\nexport const ref = window.ref;\r\nexport const reactive = window.reactive;\r\nexport const onMounted = window.onMounted;\r\nexport const onUnmounted = window.onUnmounted;\r\nexport const onUpdated = window.onUpdated;\r\nexport const watch = window.watch;\r\nexport const computed = window.computed;\r\n\r\nexport const KupolaForm = window.KupolaForm;\r\nexport const useForm = window.useForm;\r\nexport const createForm = window.createForm;\r\n\r\nexport const KupolaTestUtils = window.KupolaTestUtils;\r\nexport const testUtils = window.testUtils;\r\n\r\nexport const KupolaI18n = window.KupolaI18n;\r\nexport const kupolaI18n = window.kupolaI18n;\r\nexport const createI18n = window.createI18n;\r\nexport const t = window.t;\r\nexport const n = window.n;\r\nexport const setLocale = window.setLocale;\r\nexport const getLocale = window.getLocale;\r\nexport const formatDate = window.formatDate;\r\nexport const formatNumber = window.formatNumber;\r\nexport const formatCurrency = window.formatCurrency;\r\n\r\nexport const GlobalEventManager = window.GlobalEventManager;\r\nexport const globalEvents = window.globalEvents;\r\nexport const on = window.on;\r\nexport const off = window.off;\r\nexport const once = window.once;\r\nexport const clearScope = window.clearScope;\r\n\r\nexport const KupolaSecurity = window.KupolaSecurity;\r\nexport const kupolaSecurity = window.kupolaSecurity;\r\n\r\nexport const KupolaErrorHandler = window.KupolaErrorHandler;\r\nexport const kupolaErrorHandler = window.kupolaErrorHandler;\r\n\r\nexport const KupolaPerformance = window.KupolaPerformance;\r\nexport const kupolaPerformance = window.kupolaPerformance;\r\n\r\nexport default {\r\n KupolaComponent,\r\n KupolaComponentRegistry,\r\n KupolaRouter,\r\n KupolaHttp,\r\n KupolaStatePersist,\r\n KupolaLifecycle,\r\n KupolaPluginManager,\r\n KupolaDevTools,\r\n KupolaSecurity,\r\n KupolaErrorHandler,\r\n KupolaPerformance,\r\n kupolaRegistry,\r\n kupolaPersist,\r\n kupolaLifecycle,\r\n kupolaPluginManager,\r\n kupolaSecurity,\r\n kupolaErrorHandler,\r\n kupolaPerformance,\r\n KupolaUtils,\r\n createRouter,\r\n createHttp,\r\n createLifecycle,\r\n createStore,\r\n getStore,\r\n registerComponent,\r\n registerLazyComponent,\r\n bootstrapComponents,\r\n defineMixin,\r\n useMixin,\r\n initTheme,\r\n setTheme,\r\n getTheme,\r\n setBrand,\r\n getBrand,\r\n initDropdowns,\r\n initSelects,\r\n initDatePickers,\r\n initTimePickers,\r\n initSliders,\r\n initCarousels,\r\n initDrawers,\r\n initModals,\r\n initDialogs,\r\n initNotifications,\r\n initMessages,\r\n initFileUploads,\r\n initCollapses,\r\n initColorPickers,\r\n initCalendars,\r\n initDynamicTags,\r\n initImagePreviews,\r\n initTags,\r\n initStatCards,\r\n initHeatmaps,\r\n initTooltips,\r\n initValidation,\r\n initVirtualLists,\r\n initIcons,\r\n initCountdowns,\r\n initNumberInputs,\r\n initSlideCaptchas,\r\n setup,\r\n ref,\r\n reactive,\r\n onMounted,\r\n onUnmounted,\r\n onUpdated,\r\n watch,\r\n computed,\r\n KupolaForm,\r\n useForm,\r\n createForm,\r\n KupolaTestUtils,\r\n testUtils,\r\n KupolaI18n,\r\n kupolaI18n,\r\n createI18n,\r\n t,\r\n n,\r\n setLocale,\r\n getLocale,\r\n formatDate,\r\n formatNumber,\r\n formatCurrency,\r\n GlobalEventManager,\r\n globalEvents,\r\n on,\r\n off,\r\n once,\r\n clearScope\r\n};"],"names":["KupolaComponent","element","props","attr","name","value","slots","slotEl","slotName","eventName","data","handler","e","customEvent","cb","newProps","error","newState","result","hookMap","proto","registeredHooks","methodName","lifecyclePhase","phase","errorInfo","applyMixin","componentClass","mixin","key","original","args","module","KupolaComponentRegistry","loader","cached","loadingPromise","mixinNames","root","elements","promises","componentName","initializer","ComponentClass","instance","mutations","mutation","node","child","childInstance","KupolaRouter","options","routes","parentPath","route","fullPath","pathRegex","path","regexStr","replace","from","match","params","index","query","search","pair","url","container","componentElement","parentRoute","rootContainer","parentName","parentElement","component","cacheKey","delta","resolve","transitionDuration","cleanup","style","animationDuration","createRouter","KupolaHttp","config","method","dataKey","retryCount","headers","timeout","cache","controller","requestHeaders","requestConfig","urlObj","intercepted","response","axiosConfig","signal","timeoutPromise","_","reject","timerId","fetchPromise","contentType","useCache","useRetry","file","chunkSize","onProgress","parallel","totalChunks","uploadedChunks","progress","fileId","i","promise","chunkIndex","start","end","chunk","formData","fileName","hash","token","type","ttl","retries","createHttp","ComponentInitializerRegistry","initFn","cleanupFn","dataAttrs","className","classSelectors","selector","classNamePart","kupolaInitializer","require$$0","require$$1","require$$2","require$$3","kupolaCoreModule","kupolaBootstrap","KupolaLifecycle$1","scope","nextState","allowed","handlers","hook","hooks","a","b","h","depends","depName","depHook","emitId","startTime","hookStartTime","hookResult","hookError","hookDuration","totalDuration","stateMap","beforePhase","afterPhase","onReady","targetState","boundary","max","boundaryHandlers","KupolaPluginManager$1","plugin","KupolaLifecycle","pluginName","pluginHooks","unsubscribe","kupolaLifecycle","kupolaPluginManager","KupolaPluginManager","createLifecycle","KupolaUtils","str","c","length","padChar","maxLength","suffix","replacement","template","prefix","times","div","chars","r","arr","defaultValue","arg","separator","item","fromIndex","items","compareFn","order","valA","valB","predicate","fn","initialValue","depth","acc","seen","size","chunks","j","val","arr1","arr2","obj","current","keys","lastKey","map","set","clone","keyField","valueField","obj1","obj2","keys1","keys2","min","precision","factor","nums","decimals","currency","radix","num","now","date","formatStr","year","month","day","hours","minutes","seconds","milliseconds","weekDay","days","newDate","date1","date2","d1","d2","startOfYear","diff","startDay","birthDate","age","minute","hour","week","func","wait","lastArgs","lastThis","lastCallTime","leading","trailing","invokeFunc","leadingEdge","trailingEdge","remainingWait","timeSinceLastCall","limit","inThrottle","regex","cleanStr","sum","alternate","digit","g","len","str1","str2","substring","rules","errors","fieldRules","fieldErrors","rule","message","md5Array","K","S","leftRotate","shift","addPadding","bitLength","lowBytes","highBytes","processBlock","block","state","d","words","AA","BB","CC","DD","f","round","wordIndex","temp","paddedMessage","word","rightRotate","s0","s1","S1","ch","temp1","S0","maj","temp2","bytes","byte1","byte2","byte3","enc1","enc2","enc3","enc4","crossOrigin","img","urls","results","async","defer","script","media","link","fontFamily","src","weight","fontFace","TrieNode","PathTrie","parts","part","collectKeys","n","REACTIVE_SYMBOLS","KupolaDataBind","target","receiver","oldValue","parentKey","proxy","updatedKeys","subKey","subValue","dep","k","silent","parent","callback","binding","display","deps","prop","values","storageType","debounce","version","encrypt","encryptionKey","storage","newValue","dataToStore","serialized","e2","testKey","maxAge","text","ciphertext","persisted","stored","parsed","decrypted","snapshot","snapshotIndex","formElement","existingHandler","KupolaStore","initialState","payload","action","KupolaStoreManager","store","KupolaEventBus","onceCallback","listener","sel","kupolaData","kupolaEvents","kupolaStoreManager","createStore","getStore","THEME_KEY","BRAND_KEY","BRAND_OPTIONS","getTheme","setTheme","theme","toggleBtn","icon","iconPath","getBrand","setBrand","brandId","brand","brandToggle","brandIcon","brandName","btn","initTheme","savedTheme","savedBrand","newTheme","brandPicker","isHidden","closeBrandPicker","createThemeToggle","scripts","currentScript","scriptPath","createBrandPicker","closeBrandPickerAuto","loadDevTools","urlParams","themeScript","devToolsScript","runInit","readyStateHandler","Dropdown","isOpen","initDropdown","dropdown","cleanupDropdown","Select","option","initSelect","select","cleanupSelect","Datepicker","pickerRect","calendarRect","spaceBelow","spaceAbove","calendarHeight","isVisible","calendar","input","titleEl","daysEl","prevBtn","nextBtn","currentDate","renderCalendar","dayEl","firstDay","daysInMonth","emptyDay","dateStr","today","todayStr","dayClickHandler","prevClickHandler","nextClickHandler","initDatepicker","picker","cleanupDatepicker","Timepicker","panelRect","panelHeight","timeParts","displayHour","displayMinute","updateDisplay","updateInput","selectTimeAndClose","hourGrid","minuteGrid","initTimepicker","cleanupTimepicker","Slider","percentage","el","event","initSlider","slider","cleanupSlider","Carousel","indicator","offset","newIndex","initCarousel","carousel","initCarousels","cleanupCarousel","Drawer","closeBtn","cancelBtn","confirmBtn","initDrawer","drawer","cleanupDrawer","Modal","createModal","title","content","width","onConfirm","onCancel","modal","bodyEl","confirmHandler","cancelHandler","closeAndDestroy","originalClose","initModal","cleanupModal","initModals","Dialog","icons","mask","keydownHandler","close","maskClickHandler","confirmClickHandler","cancelClickHandler","FileUpload","clickHandler","changeHandler","files","dragoverHandler","dragleaveHandler","dropHandler","accept","types","t","fileType","fileIcon","removeBtn","removeHandler","extension","sizes","itemElement","errorElement","reader","previewItem","previewRemoveBtn","previewRemoveHandler","percent","bar","currentChunk","uploadInterval","initFileUpload","cleanupFileUpload","initFileUploads","Collapse","header","isActive","transitionHandler","headerInfo","initCollapse","collapse","cleanupCollapse","initCollapses","ColorPicker","color","colorBtn","initColorPicker","cleanupColorPicker","Calendar","prevHandler","nextHandler","todayHandler","dayStr","initCalendar","cleanupCalendar","initCalendars","DynamicTags","tag","addTag","textNode","tagRemoveHandler","tags","initDynamicTags","cleanupDynamicTags","initDynamicTagsAll","ImagePreview","images","meta","indicators","currentImage","imagePreviewInstance","initImagePreview","trigger","showImagePreview","Tag","closeHandler","textNodes","initTag","cleanupTag","initTags","StatCard","entries","entry","targetValue","duration","startValue","animate","currentTime","elapsed","easeProgress","currentValue","formattedValue","currentWidth","targetWidth","currentWidthValue","direction","trendElement","iconSvg","initStatCard","cleanupStatCard","initStatCards","card","updateStatCard","Heatmap","maxValue","ratio","hex","level","rgb","opacity","months","currentMonth","weeks","firstDayOfWeek","body","currentWeek","weekCount","cellWidth","totalGridWidth","labelsAndGrid","weekdayLabels","weekdayLabelHeight","label","gridContainer","monthLabels","monthInfo","nextMonth","weekSpan","grid","weekColumn","emptyCell","cell","mouseenterHandler","mouseleaveHandler","legend","cells","label2","rect","tooltipWidth","startDate","endDate","initHeatmap","dataAttr","generateMockHeatmapData","info","cleanupHeatmap","initHeatmaps","oneYearAgo","baseValue","createHeatmap","Tooltip","position","tooltipRect","viewportWidth","viewportHeight","left","top","initTooltip","tooltip","cleanupTooltip","KupolaValidator","form","formId","inputs","hasError","valueEl","uploadInstance","forms","allValid","group","formErrors","asyncRules","validatorFunc","groupName","groups","statusElement","loading","submitting","disabled","rulesString","pattern","targetId","customMessage","validator","hasAsyncValidation","isValid","submitBtn","originalText","onSubmit","firstError","activeElement","validateOnInput","this","VirtualList","isHorizontal","scrollOffset","positions","currentPosition","total","itemSize","viewportSize","startIndex","endIndex","visibleData","html","actualIndex","isSelected","hasChanges","actualHeight","dataItem","totalSize","thumbHeight","maxTop","thumbTop","totalHeight","deltaY","newTop","scrollTop","behavior","generateMockVirtualListData","count","titles","titleIndex","randomNum","createVirtualList","initVirtualList","cleanupVirtualList","initVirtualLists","KupolaDevTools$1","button","panel","tab","tabName","storageSubTabs","networkSubTabs","req","statusClass","details","clearBtn","devTools","originalFetch","requestId","requestBody","originalOpen","originalSend","originalOnReadyStateChange","responseText","originalSetItem","originalRemoveItem","styles","isDragging","startX","startY","startLeft","startTop","dx","dy","valueParts","displayValue","initDevTools","KupolaDevTools","global","ATTRS","PATHS","svg","viewBox","render","vb","Countdown","dataEndTime","dataHours","dataMinutes","dataSeconds","distance","initCountdown","cleanupCountdown","initCountdowns","NumberInput","minusHandler","plusHandler","inputHandler","initNumberInput","cleanupNumberInput","initNumberInputs","SlideCaptcha","trackWidth","btnWidth","maxOffset","deltaX","btnOffset","mid","distractor","clientX","clientY","velocity","acceleration","last","dt","prev","prevDt","prevV","pointCountEl","finalX","distractorDiff","targetDiff","speeds","maxSpeed","minSpeed","hasYMovement","p","totalTime","accelerations","onVerified","initSlideCaptchas","captcha","cleanupSlideCaptcha","cleanupAllSlideCaptchas","window","currentSetupContext","SetupContext","refObj","sub","self","source","watcher","trackedPaths","originalGet","getter","update","computedValue","paths","ref","reactive","onMounted","onUnmounted","onUpdated","watch","computed","setup","setupFn","setupContext","prevContext","ctx","KupolaForm","formOrSelector","wrappedHandler","validation","ruleString","fields","allErrors","asyncResult","displayName","valuesArray","radio","dataTransfer","fieldName","useForm","createForm","KupolaTestUtils$1","condition","check","detail","originalNow","originalDate","mockResponses","mock","testId","role","endX","endY","touchStart","touchMove","touchEnd","stateKey","expectedValue","propKey","spy","KupolaTestUtils","KupolaI18n$1","locale","htmlLang","dateObj","number","unit","kupolaI18n","KupolaI18n","createI18n","setLocale","getLocale","formatDate","formatNumber","formatCurrency","GlobalEventManager$1","eventType","wrapper","list","idx","scopeList","s","listenerList","l","onceHandler","scopeListeners","counts","listeners","targetName","globalEvents","GlobalEventManager","on","off","once","clearScope","KupolaSecurity$1","metaTag","allowedTags","allowedAttributes","tempDiv","walk","tagName","attrName","email","phone","char","hasXSS","kupolaSecurity","KupolaSecurity","KupolaErrorHandler$1","context","err","methodNames","originalMethod","kupolaErrorHandler","KupolaErrorHandler","KupolaPerformance$1","paintObserver","entryList","resourceObserver","longTaskObserver","nav","timer","metric","summary","score","fcp","observer","kupolaPerformance","KupolaPerformance","KupolaStatePersist","kupolaRegistry","kupolaPersist","registerComponent","registerLazyComponent","bootstrapComponents","defineMixin","useMixin","initDropdowns","initSelects","initDatePickers","initTimePickers","initSliders","initDrawers","initDialogs","initNotifications","initMessages","initColorPickers","initImagePreviews","initTooltips","initValidation","initIcons","testUtils"],"mappings":"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"}