snice 1.13.2 → 1.13.4

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 (295) hide show
  1. package/bin/templates/base/README.md +1 -1
  2. package/dist/components/accordion/snice-accordion-item.d.ts +25 -0
  3. package/dist/components/accordion/snice-accordion-item.js +260 -0
  4. package/dist/components/accordion/snice-accordion-item.js.map +1 -0
  5. package/dist/components/accordion/snice-accordion.d.ts +28 -0
  6. package/dist/components/accordion/snice-accordion.js +221 -0
  7. package/dist/components/accordion/snice-accordion.js.map +1 -0
  8. package/dist/components/accordion/snice-accordion.types.d.ts +29 -0
  9. package/dist/components/accordion/snice-accordion.types.js +2 -0
  10. package/dist/components/accordion/snice-accordion.types.js.map +1 -0
  11. package/dist/components/alert/snice-alert.d.ts +26 -0
  12. package/dist/components/alert/snice-alert.js +191 -0
  13. package/dist/components/alert/snice-alert.js.map +1 -0
  14. package/dist/components/alert/snice-alert.types.d.ts +11 -0
  15. package/dist/components/alert/snice-alert.types.js +2 -0
  16. package/dist/components/alert/snice-alert.types.js.map +1 -0
  17. package/dist/components/avatar/snice-avatar.d.ts +24 -0
  18. package/dist/components/avatar/snice-avatar.js +177 -0
  19. package/dist/components/avatar/snice-avatar.js.map +1 -0
  20. package/dist/components/avatar/snice-avatar.types.d.ts +12 -0
  21. package/dist/components/avatar/snice-avatar.types.js +2 -0
  22. package/dist/components/avatar/snice-avatar.types.js.map +1 -0
  23. package/dist/components/badge/snice-badge.d.ts +25 -0
  24. package/dist/components/badge/snice-badge.js +157 -0
  25. package/dist/components/badge/snice-badge.js.map +1 -0
  26. package/dist/components/badge/snice-badge.types.d.ts +15 -0
  27. package/dist/components/badge/snice-badge.types.js +2 -0
  28. package/dist/components/badge/snice-badge.types.js.map +1 -0
  29. package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +27 -0
  30. package/dist/components/breadcrumbs/snice-breadcrumbs.js +212 -0
  31. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -0
  32. package/dist/components/breadcrumbs/snice-breadcrumbs.types.d.ts +23 -0
  33. package/dist/components/breadcrumbs/snice-breadcrumbs.types.js +2 -0
  34. package/dist/components/breadcrumbs/snice-breadcrumbs.types.js.map +1 -0
  35. package/dist/components/breadcrumbs/snice-crumb.d.ts +9 -0
  36. package/dist/components/breadcrumbs/snice-crumb.js +50 -0
  37. package/dist/components/breadcrumbs/snice-crumb.js.map +1 -0
  38. package/dist/components/button/snice-button.d.ts +32 -0
  39. package/dist/components/button/snice-button.js +212 -0
  40. package/dist/components/button/snice-button.js.map +1 -0
  41. package/dist/components/button/snice-button.types.d.ts +23 -0
  42. package/dist/components/button/snice-button.types.js +2 -0
  43. package/dist/components/button/snice-button.types.js.map +1 -0
  44. package/dist/components/card/snice-card.d.ts +19 -0
  45. package/dist/components/card/snice-card.js +132 -0
  46. package/dist/components/card/snice-card.js.map +1 -0
  47. package/dist/components/card/snice-card.types.d.ts +9 -0
  48. package/dist/components/card/snice-card.types.js +2 -0
  49. package/dist/components/card/snice-card.types.js.map +1 -0
  50. package/dist/components/checkbox/snice-checkbox.d.ts +34 -0
  51. package/dist/components/checkbox/snice-checkbox.js +289 -0
  52. package/dist/components/checkbox/snice-checkbox.js.map +1 -0
  53. package/dist/components/checkbox/snice-checkbox.types.d.ts +20 -0
  54. package/dist/components/checkbox/snice-checkbox.types.js +2 -0
  55. package/dist/components/checkbox/snice-checkbox.types.js.map +1 -0
  56. package/dist/components/chip/snice-chip.d.ts +28 -0
  57. package/dist/components/chip/snice-chip.js +203 -0
  58. package/dist/components/chip/snice-chip.js.map +1 -0
  59. package/dist/components/chip/snice-chip.types.d.ts +14 -0
  60. package/dist/components/chip/snice-chip.types.js +2 -0
  61. package/dist/components/chip/snice-chip.types.js.map +1 -0
  62. package/dist/components/date-picker/snice-date-picker.d.ts +82 -0
  63. package/dist/components/date-picker/snice-date-picker.js +880 -0
  64. package/dist/components/date-picker/snice-date-picker.js.map +1 -0
  65. package/dist/components/date-picker/snice-date-picker.types.d.ts +71 -0
  66. package/dist/components/date-picker/snice-date-picker.types.js +2 -0
  67. package/dist/components/date-picker/snice-date-picker.types.js.map +1 -0
  68. package/dist/components/divider/snice-divider.d.ts +17 -0
  69. package/dist/components/divider/snice-divider.js +111 -0
  70. package/dist/components/divider/snice-divider.js.map +1 -0
  71. package/dist/components/divider/snice-divider.types.d.ts +14 -0
  72. package/dist/components/divider/snice-divider.types.js +2 -0
  73. package/dist/components/divider/snice-divider.types.js.map +1 -0
  74. package/dist/components/drawer/snice-drawer.d.ts +37 -0
  75. package/dist/components/drawer/snice-drawer.js +335 -0
  76. package/dist/components/drawer/snice-drawer.js.map +1 -0
  77. package/dist/components/drawer/snice-drawer.types.d.ts +16 -0
  78. package/dist/components/drawer/snice-drawer.types.js +2 -0
  79. package/dist/components/drawer/snice-drawer.types.js.map +1 -0
  80. package/dist/components/input/snice-input.d.ts +65 -0
  81. package/dist/components/input/snice-input.js +603 -0
  82. package/dist/components/input/snice-input.js.map +1 -0
  83. package/dist/components/input/snice-input.types.d.ts +53 -0
  84. package/dist/components/input/snice-input.types.js +2 -0
  85. package/dist/components/input/snice-input.types.js.map +1 -0
  86. package/dist/components/layout/snice-layout-blog.d.ts +4 -0
  87. package/dist/components/layout/snice-layout-blog.js +56 -0
  88. package/dist/components/layout/snice-layout-blog.js.map +1 -0
  89. package/dist/components/layout/snice-layout-card.d.ts +6 -0
  90. package/dist/components/layout/snice-layout-card.js +53 -0
  91. package/dist/components/layout/snice-layout-card.js.map +1 -0
  92. package/dist/components/layout/snice-layout-centered.d.ts +5 -0
  93. package/dist/components/layout/snice-layout-centered.js +38 -0
  94. package/dist/components/layout/snice-layout-centered.js.map +1 -0
  95. package/dist/components/layout/snice-layout-dashboard.d.ts +4 -0
  96. package/dist/components/layout/snice-layout-dashboard.js +53 -0
  97. package/dist/components/layout/snice-layout-dashboard.js.map +1 -0
  98. package/dist/components/layout/snice-layout-fullscreen.d.ts +5 -0
  99. package/dist/components/layout/snice-layout-fullscreen.js +50 -0
  100. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -0
  101. package/dist/components/layout/snice-layout-landing.d.ts +4 -0
  102. package/dist/components/layout/snice-layout-landing.js +55 -0
  103. package/dist/components/layout/snice-layout-landing.js.map +1 -0
  104. package/dist/components/layout/snice-layout-minimal.d.ts +4 -0
  105. package/dist/components/layout/snice-layout-minimal.js +27 -0
  106. package/dist/components/layout/snice-layout-minimal.js.map +1 -0
  107. package/dist/components/layout/snice-layout-sidebar.d.ts +5 -0
  108. package/dist/components/layout/snice-layout-sidebar.js +64 -0
  109. package/dist/components/layout/snice-layout-sidebar.js.map +1 -0
  110. package/dist/components/layout/snice-layout-split.d.ts +6 -0
  111. package/dist/components/layout/snice-layout-split.js +47 -0
  112. package/dist/components/layout/snice-layout-split.js.map +1 -0
  113. package/dist/components/layout/snice-layout.d.ts +4 -0
  114. package/dist/components/layout/snice-layout.js +43 -0
  115. package/dist/components/layout/snice-layout.js.map +1 -0
  116. package/dist/components/layout/snice-layout.types.d.ts +3 -0
  117. package/dist/components/layout/snice-layout.types.js +2 -0
  118. package/dist/components/layout/snice-layout.types.js.map +1 -0
  119. package/dist/components/login/snice-login.d.ts +45 -0
  120. package/dist/components/login/snice-login.js +385 -0
  121. package/dist/components/login/snice-login.js.map +1 -0
  122. package/dist/components/login/snice-login.types.d.ts +31 -0
  123. package/dist/components/login/snice-login.types.js +2 -0
  124. package/dist/components/login/snice-login.types.js.map +1 -0
  125. package/dist/components/modal/snice-modal.d.ts +32 -0
  126. package/dist/components/modal/snice-modal.js +288 -0
  127. package/dist/components/modal/snice-modal.js.map +1 -0
  128. package/dist/components/modal/snice-modal.types.d.ts +18 -0
  129. package/dist/components/modal/snice-modal.types.js +2 -0
  130. package/dist/components/modal/snice-modal.types.js.map +1 -0
  131. package/dist/components/pagination/snice-pagination.d.ts +26 -0
  132. package/dist/components/pagination/snice-pagination.js +373 -0
  133. package/dist/components/pagination/snice-pagination.js.map +1 -0
  134. package/dist/components/pagination/snice-pagination.types.d.ts +18 -0
  135. package/dist/components/pagination/snice-pagination.types.js +2 -0
  136. package/dist/components/pagination/snice-pagination.types.js.map +1 -0
  137. package/dist/components/progress/snice-progress.d.ts +35 -0
  138. package/dist/components/progress/snice-progress.js +295 -0
  139. package/dist/components/progress/snice-progress.js.map +1 -0
  140. package/dist/components/progress/snice-progress.types.d.ts +18 -0
  141. package/dist/components/progress/snice-progress.types.js +2 -0
  142. package/dist/components/progress/snice-progress.types.js.map +1 -0
  143. package/dist/components/radio/snice-radio.d.ts +33 -0
  144. package/dist/components/radio/snice-radio.js +286 -0
  145. package/dist/components/radio/snice-radio.js.map +1 -0
  146. package/dist/components/radio/snice-radio.types.d.ts +19 -0
  147. package/dist/components/radio/snice-radio.types.js +2 -0
  148. package/dist/components/radio/snice-radio.types.js.map +1 -0
  149. package/dist/components/select/snice-option.d.ts +17 -0
  150. package/dist/components/select/snice-option.js +77 -0
  151. package/dist/components/select/snice-option.js.map +1 -0
  152. package/dist/components/select/snice-option.types.d.ts +14 -0
  153. package/dist/components/select/snice-option.types.js +2 -0
  154. package/dist/components/select/snice-option.types.js.map +1 -0
  155. package/dist/components/select/snice-select.d.ts +89 -0
  156. package/dist/components/select/snice-select.js +900 -0
  157. package/dist/components/select/snice-select.js.map +1 -0
  158. package/dist/components/select/snice-select.types.d.ts +49 -0
  159. package/dist/components/select/snice-select.types.js +2 -0
  160. package/dist/components/select/snice-select.types.js.map +1 -0
  161. package/dist/components/skeleton/snice-skeleton.d.ts +16 -0
  162. package/dist/components/skeleton/snice-skeleton.js +159 -0
  163. package/dist/components/skeleton/snice-skeleton.js.map +1 -0
  164. package/dist/components/skeleton/snice-skeleton.types.d.ts +10 -0
  165. package/dist/components/skeleton/snice-skeleton.types.js +2 -0
  166. package/dist/components/skeleton/snice-skeleton.types.js.map +1 -0
  167. package/dist/components/switch/snice-switch.d.ts +38 -0
  168. package/dist/components/switch/snice-switch.js +309 -0
  169. package/dist/components/switch/snice-switch.js.map +1 -0
  170. package/dist/components/switch/snice-switch.types.d.ts +21 -0
  171. package/dist/components/switch/snice-switch.types.js +2 -0
  172. package/dist/components/switch/snice-switch.types.js.map +1 -0
  173. package/dist/components/symbols.d.ts +1 -0
  174. package/dist/components/symbols.js +20 -0
  175. package/dist/components/symbols.js.map +1 -0
  176. package/dist/components/table/snice-cell-boolean.d.ts +21 -0
  177. package/dist/components/table/snice-cell-boolean.js +152 -0
  178. package/dist/components/table/snice-cell-boolean.js.map +1 -0
  179. package/dist/components/table/snice-cell-date.d.ts +24 -0
  180. package/dist/components/table/snice-cell-date.js +240 -0
  181. package/dist/components/table/snice-cell-date.js.map +1 -0
  182. package/dist/components/table/snice-cell-duration.d.ts +16 -0
  183. package/dist/components/table/snice-cell-duration.js +123 -0
  184. package/dist/components/table/snice-cell-duration.js.map +1 -0
  185. package/dist/components/table/snice-cell-filesize.d.ts +16 -0
  186. package/dist/components/table/snice-cell-filesize.js +119 -0
  187. package/dist/components/table/snice-cell-filesize.js.map +1 -0
  188. package/dist/components/table/snice-cell-number.d.ts +23 -0
  189. package/dist/components/table/snice-cell-number.js +202 -0
  190. package/dist/components/table/snice-cell-number.js.map +1 -0
  191. package/dist/components/table/snice-cell-progress.d.ts +17 -0
  192. package/dist/components/table/snice-cell-progress.js +114 -0
  193. package/dist/components/table/snice-cell-progress.js.map +1 -0
  194. package/dist/components/table/snice-cell-rating.d.ts +17 -0
  195. package/dist/components/table/snice-cell-rating.js +113 -0
  196. package/dist/components/table/snice-cell-rating.js.map +1 -0
  197. package/dist/components/table/snice-cell-sparkline.d.ts +29 -0
  198. package/dist/components/table/snice-cell-sparkline.js +290 -0
  199. package/dist/components/table/snice-cell-sparkline.js.map +1 -0
  200. package/dist/components/table/snice-cell-text.d.ts +19 -0
  201. package/dist/components/table/snice-cell-text.js +153 -0
  202. package/dist/components/table/snice-cell-text.js.map +1 -0
  203. package/dist/components/table/snice-cell.d.ts +32 -0
  204. package/dist/components/table/snice-cell.js +451 -0
  205. package/dist/components/table/snice-cell.js.map +1 -0
  206. package/dist/components/table/snice-column.d.ts +62 -0
  207. package/dist/components/table/snice-column.js +440 -0
  208. package/dist/components/table/snice-column.js.map +1 -0
  209. package/dist/components/table/snice-header.d.ts +33 -0
  210. package/dist/components/table/snice-header.js +303 -0
  211. package/dist/components/table/snice-header.js.map +1 -0
  212. package/dist/components/table/snice-progress.d.ts +10 -0
  213. package/dist/components/table/snice-progress.js +91 -0
  214. package/dist/components/table/snice-progress.js.map +1 -0
  215. package/dist/components/table/snice-rating.d.ts +9 -0
  216. package/dist/components/table/snice-rating.js +68 -0
  217. package/dist/components/table/snice-rating.js.map +1 -0
  218. package/dist/components/table/snice-row.d.ts +43 -0
  219. package/dist/components/table/snice-row.js +365 -0
  220. package/dist/components/table/snice-row.js.map +1 -0
  221. package/dist/components/table/snice-table.d.ts +69 -0
  222. package/dist/components/table/snice-table.js +814 -0
  223. package/dist/components/table/snice-table.js.map +1 -0
  224. package/dist/components/table/snice-table.types.d.ts +137 -0
  225. package/dist/components/table/snice-table.types.js +2 -0
  226. package/dist/components/table/snice-table.types.js.map +1 -0
  227. package/dist/components/tabs/snice-tab-panel.d.ts +12 -0
  228. package/dist/components/tabs/snice-tab-panel.js +78 -0
  229. package/dist/components/tabs/snice-tab-panel.js.map +1 -0
  230. package/dist/components/tabs/snice-tab.d.ts +13 -0
  231. package/dist/components/tabs/snice-tab.js +90 -0
  232. package/dist/components/tabs/snice-tab.js.map +1 -0
  233. package/dist/components/tabs/snice-tabs.d.ts +34 -0
  234. package/dist/components/tabs/snice-tabs.js +367 -0
  235. package/dist/components/tabs/snice-tabs.js.map +1 -0
  236. package/dist/components/tabs/snice-tabs.types.d.ts +23 -0
  237. package/dist/components/tabs/snice-tabs.types.js +2 -0
  238. package/dist/components/tabs/snice-tabs.types.js.map +1 -0
  239. package/dist/components/toast/snice-toast-container.d.ts +25 -0
  240. package/dist/components/toast/snice-toast-container.js +251 -0
  241. package/dist/components/toast/snice-toast-container.js.map +1 -0
  242. package/dist/components/toast/snice-toast.d.ts +23 -0
  243. package/dist/components/toast/snice-toast.js +316 -0
  244. package/dist/components/toast/snice-toast.js.map +1 -0
  245. package/dist/components/toast/snice-toast.types.d.ts +30 -0
  246. package/dist/components/toast/snice-toast.types.js +2 -0
  247. package/dist/components/toast/snice-toast.types.js.map +1 -0
  248. package/dist/components/tooltip/snice-tooltip.d.ts +50 -0
  249. package/dist/components/tooltip/snice-tooltip.js +656 -0
  250. package/dist/components/tooltip/snice-tooltip.js.map +1 -0
  251. package/dist/components/tooltip/snice-tooltip.types.d.ts +18 -0
  252. package/dist/components/tooltip/snice-tooltip.types.js +2 -0
  253. package/dist/components/tooltip/snice-tooltip.types.js.map +1 -0
  254. package/dist/components/transitions.d.ts +11 -0
  255. package/dist/components/transitions.js +69 -0
  256. package/dist/components/transitions.js.map +1 -0
  257. package/dist/src/controller.d.ts +61 -0
  258. package/dist/src/controller.js +297 -0
  259. package/dist/src/controller.js.map +1 -0
  260. package/dist/src/element.d.ts +77 -0
  261. package/dist/src/element.js +805 -0
  262. package/dist/src/element.js.map +1 -0
  263. package/dist/src/events.d.ts +37 -0
  264. package/dist/src/events.js +289 -0
  265. package/dist/src/events.js.map +1 -0
  266. package/dist/src/global.d.ts +7 -0
  267. package/dist/src/global.js +23 -0
  268. package/dist/src/global.js.map +1 -0
  269. package/{src/index.ts → dist/src/index.d.ts} +1 -1
  270. package/dist/src/index.js +8 -0
  271. package/dist/src/index.js.map +1 -0
  272. package/dist/src/observe.d.ts +26 -0
  273. package/dist/src/observe.js +329 -0
  274. package/dist/src/observe.js.map +1 -0
  275. package/dist/src/request-response.d.ts +46 -0
  276. package/dist/src/request-response.js +267 -0
  277. package/dist/src/request-response.js.map +1 -0
  278. package/dist/src/router.d.ts +87 -0
  279. package/dist/src/router.js +375 -0
  280. package/dist/src/router.js.map +1 -0
  281. package/dist/src/symbols.d.ts +29 -0
  282. package/{src/symbols.ts → dist/src/symbols.js} +2 -12
  283. package/dist/src/symbols.js.map +1 -0
  284. package/dist/src/transitions.d.ts +50 -0
  285. package/dist/src/transitions.js +199 -0
  286. package/dist/src/transitions.js.map +1 -0
  287. package/package.json +6 -8
  288. package/src/controller.ts +0 -347
  289. package/src/element.ts +0 -897
  290. package/src/events.ts +0 -349
  291. package/src/global.ts +0 -31
  292. package/src/observe.ts +0 -414
  293. package/src/request-response.ts +0 -336
  294. package/src/router.ts +0 -552
  295. package/src/transitions.ts +0 -264
@@ -0,0 +1,329 @@
1
+ import { OBSERVERS, CLEANUP, IS_CONTROLLER_INSTANCE } from './symbols';
2
+ // Global cache for MediaQueryList objects
3
+ const mediaQueryCache = new Map();
4
+ // Global WeakMap to track observer instances for reuse
5
+ const intersectionObservers = new WeakMap();
6
+ /**
7
+ * Decorator for observing external changes like viewport intersection, resize, media queries, and DOM mutations
8
+ *
9
+ * @param target - The observation target (e.g., 'intersection', 'resize', 'media:(min-width: 768px)', 'mutation:childList') or array of targets
10
+ * @param selectorOrOptions - CSS selector for element to observe OR options object
11
+ * @param options - Options object (when second parameter is a selector)
12
+ */
13
+ export function observe(observeTarget, selectorOrOptions, options) {
14
+ // Handle overloaded parameters
15
+ let selector;
16
+ let opts;
17
+ if (typeof selectorOrOptions === 'string') {
18
+ selector = selectorOrOptions;
19
+ opts = options;
20
+ }
21
+ else {
22
+ selector = undefined;
23
+ opts = selectorOrOptions;
24
+ }
25
+ return function (target, propertyKey, descriptor) {
26
+ // Store observer metadata
27
+ if (!target[OBSERVERS]) {
28
+ target[OBSERVERS] = [];
29
+ }
30
+ // Normalize to array
31
+ const observeTargets = Array.isArray(observeTarget) ? observeTarget : [observeTarget];
32
+ // Create an observer entry for each target
33
+ for (const targetString of observeTargets) {
34
+ // Parse the observation type from the observeTarget string
35
+ const [type, ...modifiers] = targetString.split(':');
36
+ target[OBSERVERS].push({
37
+ type,
38
+ target: modifiers.join(':'), // Rejoin for media queries or mutation types
39
+ selector,
40
+ methodName: propertyKey,
41
+ method: descriptor.value,
42
+ options: opts
43
+ });
44
+ }
45
+ return descriptor;
46
+ };
47
+ }
48
+ // Helper to setup observers for elements
49
+ export function setupObservers(instance, element) {
50
+ // Only check the prototype, not the instance itself to avoid property access issues
51
+ const observers = instance.constructor.prototype[OBSERVERS];
52
+ if (!observers || !Array.isArray(observers) || observers.length === 0) {
53
+ return;
54
+ }
55
+ // Initialize cleanup object if needed
56
+ if (!instance[CLEANUP]) {
57
+ instance[CLEANUP] = { events: [], channels: [], observers: [] };
58
+ }
59
+ else if (!instance[CLEANUP].observers) {
60
+ instance[CLEANUP].observers = [];
61
+ }
62
+ for (const observer of observers) {
63
+ const method = observer.method.bind(instance);
64
+ // Apply throttling if specified
65
+ const callback = observer.options?.throttle
66
+ ? createThrottledCallback(method, observer.options.throttle)
67
+ : method;
68
+ switch (observer.type) {
69
+ case 'intersection':
70
+ setupIntersectionObserver(instance, element, observer, callback);
71
+ break;
72
+ case 'resize':
73
+ setupResizeObserver(instance, element, observer, callback);
74
+ break;
75
+ case 'media':
76
+ setupMediaQueryObserver(instance, element, observer, callback);
77
+ break;
78
+ case 'mutation':
79
+ setupMutationObserver(instance, element, observer, callback);
80
+ break;
81
+ default:
82
+ console.warn(`Unknown observer type: ${observer.type}`);
83
+ }
84
+ }
85
+ }
86
+ function setupIntersectionObserver(instance, element, observer, callback) {
87
+ const options = {
88
+ threshold: observer.options?.threshold ?? 0,
89
+ rootMargin: observer.options?.rootMargin ?? '0px',
90
+ root: observer.options?.root ?? null
91
+ };
92
+ // Create a key for reusing observers with same options
93
+ const optionsKey = JSON.stringify(options);
94
+ // Wrap callback to handle return value
95
+ const wrappedCallback = (entries) => {
96
+ for (const entry of entries) {
97
+ try {
98
+ const result = callback(entry);
99
+ // If callback returns false, stop observing that element
100
+ if (result === false && io) {
101
+ io.unobserve(entry.target);
102
+ }
103
+ }
104
+ catch (error) {
105
+ console.error(`Error in intersection observer ${observer.methodName}:`, error);
106
+ }
107
+ }
108
+ };
109
+ // Check if IntersectionObserver is available
110
+ if (typeof IntersectionObserver === 'undefined') {
111
+ console.warn('IntersectionObserver is not available in this environment');
112
+ return;
113
+ }
114
+ // Create or reuse IntersectionObserver
115
+ let io = intersectionObservers.get({ instance, options: optionsKey });
116
+ if (!io) {
117
+ io = new IntersectionObserver(wrappedCallback, options);
118
+ intersectionObservers.set({ instance, options: optionsKey }, io);
119
+ }
120
+ // Find target elements
121
+ const targets = observer.selector
122
+ ? Array.from(element.shadowRoot?.querySelectorAll(observer.selector) || [])
123
+ : [element];
124
+ // Start observing
125
+ targets.forEach(target => io.observe(target));
126
+ // Store cleanup
127
+ instance[CLEANUP].observers.push(() => {
128
+ targets.forEach(target => io.unobserve(target));
129
+ // Only disconnect if no more targets
130
+ if (io.takeRecords().length === 0) {
131
+ io.disconnect();
132
+ }
133
+ });
134
+ }
135
+ function setupResizeObserver(instance, element, observer, callback) {
136
+ const box = observer.options?.box || 'content-box';
137
+ // Wrap callback with error handling
138
+ const wrappedCallback = (entries) => {
139
+ for (const entry of entries) {
140
+ try {
141
+ callback(entry);
142
+ }
143
+ catch (error) {
144
+ console.error(`Error in resize observer ${observer.methodName}:`, error);
145
+ }
146
+ }
147
+ };
148
+ // Check if ResizeObserver is available
149
+ if (typeof ResizeObserver === 'undefined') {
150
+ console.warn('ResizeObserver is not available in this environment');
151
+ return;
152
+ }
153
+ // Create ResizeObserver
154
+ const ro = new ResizeObserver(wrappedCallback);
155
+ // Find target elements
156
+ const targets = observer.selector
157
+ ? Array.from(element.shadowRoot?.querySelectorAll(observer.selector) || [])
158
+ : [element];
159
+ // Start observing with options
160
+ targets.forEach(target => {
161
+ ro.observe(target, { box });
162
+ });
163
+ // Store cleanup
164
+ instance[CLEANUP].observers.push(() => {
165
+ ro.disconnect();
166
+ });
167
+ }
168
+ function setupMediaQueryObserver(instance, _element, observer, callback) {
169
+ // Extract media query from target (e.g., "media:(min-width: 768px)" -> "(min-width: 768px)")
170
+ const mediaQuery = observer.target;
171
+ if (!mediaQuery) {
172
+ console.warn('Media query observer requires a query string');
173
+ return;
174
+ }
175
+ // Get or create MediaQueryList (cached globally)
176
+ let mql = mediaQueryCache.get(mediaQuery);
177
+ if (!mql) {
178
+ try {
179
+ mql = window.matchMedia(mediaQuery);
180
+ mediaQueryCache.set(mediaQuery, mql);
181
+ }
182
+ catch (error) {
183
+ console.error(`Invalid media query: ${mediaQuery}`, error);
184
+ return;
185
+ }
186
+ }
187
+ // Wrap callback with error handling
188
+ const wrappedCallback = (event) => {
189
+ try {
190
+ callback('matches' in event ? event.matches : event.matches);
191
+ }
192
+ catch (error) {
193
+ console.error(`Error in media query observer ${observer.methodName}:`, error);
194
+ }
195
+ };
196
+ // Call immediately with current state
197
+ wrappedCallback(mql);
198
+ // Listen for changes
199
+ const changeHandler = (e) => wrappedCallback(e);
200
+ // Modern browsers use addEventListener
201
+ if (mql.addEventListener) {
202
+ mql.addEventListener('change', changeHandler);
203
+ instance[CLEANUP].observers.push(() => {
204
+ mql.removeEventListener('change', changeHandler);
205
+ });
206
+ }
207
+ else {
208
+ // Fallback for older browsers
209
+ mql.addListener(changeHandler);
210
+ instance[CLEANUP].observers.push(() => {
211
+ mql.removeListener(changeHandler);
212
+ });
213
+ }
214
+ }
215
+ function setupMutationObserver(instance, element, observer, callback) {
216
+ // Parse mutation type and attribute from target
217
+ // e.g., "childList", "attributes:class", "attributes:data-state"
218
+ const parts = observer.target.split(':');
219
+ const mutationType = parts[0] || 'childList';
220
+ const attributeName = parts[1];
221
+ // Build MutationObserver options
222
+ const options = {};
223
+ switch (mutationType) {
224
+ case 'childList':
225
+ options.childList = true;
226
+ break;
227
+ case 'attributes':
228
+ options.attributes = true;
229
+ if (attributeName) {
230
+ options.attributeFilter = [attributeName];
231
+ }
232
+ break;
233
+ default:
234
+ console.warn(`Unknown mutation type: ${mutationType}`);
235
+ return;
236
+ }
237
+ // Apply subtree with safety limits
238
+ if (observer.options?.subtree) {
239
+ options.subtree = true;
240
+ // Could implement maxDepth checking in the callback
241
+ if (observer.options.maxDepth) {
242
+ console.warn('maxDepth is set but requires custom implementation');
243
+ }
244
+ }
245
+ // Wrap callback with error handling
246
+ const wrappedCallback = (mutations) => {
247
+ try {
248
+ // Filter mutations if maxDepth is specified (simplified version)
249
+ if (observer.options?.maxDepth && observer.options.subtree) {
250
+ const maxDepth = observer.options.maxDepth;
251
+ const filtered = mutations.filter(mutation => {
252
+ // Simple depth check (could be more sophisticated)
253
+ let depth = 0;
254
+ let current = mutation.target;
255
+ const root = element.shadowRoot || element;
256
+ while (current && current !== root && depth < maxDepth) {
257
+ current = current.parentNode;
258
+ depth++;
259
+ }
260
+ return depth < maxDepth;
261
+ });
262
+ if (filtered.length > 0) {
263
+ callback(filtered);
264
+ }
265
+ }
266
+ else {
267
+ callback(mutations);
268
+ }
269
+ }
270
+ catch (error) {
271
+ console.error(`Error in mutation observer ${observer.methodName}:`, error);
272
+ }
273
+ };
274
+ // Create MutationObserver
275
+ const mo = new MutationObserver(wrappedCallback);
276
+ // Find target elements
277
+ const isController = instance[IS_CONTROLLER_INSTANCE] === true;
278
+ // For mutation observers without selector:
279
+ // - Controllers: observe the shadow DOM of the element they're attached to (if it exists)
280
+ // - Elements: observe the element itself (light DOM) to avoid infinite loops
281
+ const targets = observer.selector
282
+ ? Array.from(element.shadowRoot?.querySelectorAll(observer.selector) || [])
283
+ : isController && element.shadowRoot
284
+ ? [element.shadowRoot]
285
+ : [element];
286
+ // Start observing
287
+ targets.forEach(target => {
288
+ mo.observe(target, options);
289
+ });
290
+ // Store cleanup
291
+ instance[CLEANUP].observers.push(() => {
292
+ mo.disconnect();
293
+ });
294
+ }
295
+ function createThrottledCallback(callback, delay) {
296
+ let lastCall = 0;
297
+ let timeout = null;
298
+ return function (...args) {
299
+ const now = Date.now();
300
+ const remaining = delay - (now - lastCall);
301
+ if (remaining <= 0) {
302
+ // Enough time has passed, execute immediately
303
+ if (timeout) {
304
+ clearTimeout(timeout);
305
+ timeout = null;
306
+ }
307
+ lastCall = now;
308
+ return callback.apply(this, args);
309
+ }
310
+ else if (!timeout) {
311
+ // Schedule for later
312
+ timeout = setTimeout(() => {
313
+ lastCall = Date.now();
314
+ timeout = null;
315
+ callback.apply(this, args);
316
+ }, remaining);
317
+ }
318
+ };
319
+ }
320
+ // Helper to cleanup observers
321
+ export function cleanupObservers(instance) {
322
+ if (instance[CLEANUP]?.observers) {
323
+ for (const cleanup of instance[CLEANUP].observers) {
324
+ cleanup();
325
+ }
326
+ instance[CLEANUP].observers = [];
327
+ }
328
+ }
329
+ //# sourceMappingURL=observe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/observe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export type Response<T = any> = T | any;
2
+ export interface RequestOptions extends EventInit {
3
+ /**
4
+ * Timeout for waiting for responses (in ms) - defaults to 5000ms
5
+ */
6
+ timeout?: number;
7
+ /**
8
+ * Timeout for finding a handler (in ms) - defaults to 50ms
9
+ */
10
+ discoveryTimeout?: number;
11
+ /**
12
+ * Debounce the request by specified milliseconds
13
+ */
14
+ debounce?: number;
15
+ /**
16
+ * Throttle the request by specified milliseconds
17
+ */
18
+ throttle?: number;
19
+ }
20
+ /**
21
+ * Decorator for making requests from elements or controllers.
22
+ * Uses async generator pattern for bidirectional communication.
23
+ *
24
+ * @param requestName The name of the request
25
+ * @param options Optional configuration
26
+ */
27
+ export declare function request(requestName: string, options?: RequestOptions): (_target: any, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
28
+ export interface RespondOptions {
29
+ /**
30
+ * Debounce the response by specified milliseconds
31
+ */
32
+ debounce?: number;
33
+ /**
34
+ * Throttle the response by specified milliseconds
35
+ */
36
+ throttle?: number;
37
+ }
38
+ /**
39
+ * Decorator for responding to requests in elements or controllers.
40
+ *
41
+ * @param requestName The name of the request to respond to
42
+ * @param options Optional configuration
43
+ */
44
+ export declare function respond(requestName: string, options?: RespondOptions): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
45
+ export declare function setupResponseHandlers(instance: any, element: HTMLElement): void;
46
+ export declare function cleanupResponseHandlers(instance: any): void;
@@ -0,0 +1,267 @@
1
+ import { CHANNEL_HANDLERS, CLEANUP, IS_CONTROLLER_INSTANCE } from './symbols';
2
+ /**
3
+ * Decorator for making requests from elements or controllers.
4
+ * Uses async generator pattern for bidirectional communication.
5
+ *
6
+ * @param requestName The name of the request
7
+ * @param options Optional configuration
8
+ */
9
+ export function request(requestName, options) {
10
+ return function (_target, _propertyKey, descriptor) {
11
+ const originalMethod = descriptor.value;
12
+ // Create timing variables for debounce/throttle
13
+ let debounceTimeout;
14
+ let throttleLastCall = 0;
15
+ let throttleTimeout;
16
+ descriptor.value = async function (...args) {
17
+ const actualRequest = async () => {
18
+ // @request always acts as requester (client side)
19
+ const responseTimeout = options?.timeout ?? 120000; // Default 2 minute timeout
20
+ const discoveryTimeout = options?.discoveryTimeout ?? 50; // Default 50ms discovery timeout
21
+ // Create the generator
22
+ const generator = originalMethod.apply(this, args);
23
+ // Get the first yield (the request payload)
24
+ const { value: payload, done } = await generator.next();
25
+ if (done) {
26
+ // Generator returned without yielding
27
+ return payload;
28
+ }
29
+ // Create data promise and expose resolve/reject
30
+ let dataResolve;
31
+ let dataReject;
32
+ const dataPromise = new Promise((resolve, reject) => {
33
+ dataResolve = resolve;
34
+ dataReject = reject;
35
+ });
36
+ // Create discovery timeout promise and expose resolve/reject
37
+ let discoveryResolve;
38
+ let discoveryReject;
39
+ let discoveryTimeoutId;
40
+ const discoveryPromise = new Promise((resolve, reject) => {
41
+ discoveryResolve = resolve;
42
+ discoveryReject = reject;
43
+ discoveryTimeoutId = setTimeout(() => {
44
+ reject(new Error(`Request "${requestName}" timed out after ${discoveryTimeout}ms - no handler found`));
45
+ }, discoveryTimeout);
46
+ });
47
+ // Dispatch event with promises
48
+ const eventName = `@request/${requestName}`;
49
+ const event = new CustomEvent(eventName, {
50
+ bubbles: options?.bubbles !== undefined ? options.bubbles : true,
51
+ cancelable: options?.cancelable || false,
52
+ composed: true, // Allow crossing shadow DOM boundaries
53
+ detail: {
54
+ payload,
55
+ discovery: {
56
+ resolve: () => {
57
+ clearTimeout(discoveryTimeoutId);
58
+ discoveryResolve();
59
+ },
60
+ reject: discoveryReject
61
+ },
62
+ data: {
63
+ resolve: dataResolve,
64
+ reject: dataReject
65
+ }
66
+ }
67
+ });
68
+ // Check if this is a controller instance using the symbol
69
+ const isController = this[IS_CONTROLLER_INSTANCE] === true;
70
+ const dispatcher = isController && this.element ? this.element : this;
71
+ dispatcher.dispatchEvent(event);
72
+ try {
73
+ // Wait for discovery timeout to be cleared (handler found) or discovery timeout to reject (no handler)
74
+ await discoveryPromise;
75
+ // If we get here, a handler was found and discovery timeout was cleared
76
+ // Now wait for the actual data response with the full response timeout
77
+ const responseTimeoutId = setTimeout(() => {
78
+ dataReject(new Error(`Request "${requestName}" timed out after ${responseTimeout}ms`));
79
+ }, responseTimeout);
80
+ const response = await dataPromise;
81
+ clearTimeout(responseTimeoutId);
82
+ // Send response back to generator and get final return value
83
+ const { value: finalValue } = await generator.next(response);
84
+ return finalValue;
85
+ }
86
+ catch (error) {
87
+ // Send error to generator
88
+ try {
89
+ await generator.throw(error);
90
+ }
91
+ catch (generatorError) {
92
+ throw generatorError;
93
+ }
94
+ }
95
+ }; // Close actualRequest function
96
+ // Apply debounce or throttle if specified
97
+ if (options?.debounce) {
98
+ return new Promise((resolve, reject) => {
99
+ clearTimeout(debounceTimeout);
100
+ debounceTimeout = setTimeout(async () => {
101
+ try {
102
+ const result = await actualRequest();
103
+ resolve(result);
104
+ }
105
+ catch (error) {
106
+ reject(error);
107
+ }
108
+ }, options.debounce);
109
+ });
110
+ }
111
+ if (options?.throttle) {
112
+ const now = Date.now();
113
+ const remaining = options.throttle - (now - throttleLastCall);
114
+ if (remaining <= 0) {
115
+ clearTimeout(throttleTimeout);
116
+ throttleLastCall = now;
117
+ return actualRequest();
118
+ }
119
+ else if (!throttleTimeout) {
120
+ return new Promise((resolve, reject) => {
121
+ throttleTimeout = setTimeout(async () => {
122
+ throttleLastCall = Date.now();
123
+ throttleTimeout = null;
124
+ try {
125
+ const result = await actualRequest();
126
+ resolve(result);
127
+ }
128
+ catch (error) {
129
+ reject(error);
130
+ }
131
+ }, remaining);
132
+ });
133
+ }
134
+ // If throttled and timeout already exists, return empty promise
135
+ return Promise.resolve();
136
+ }
137
+ // No timing applied, execute immediately
138
+ return actualRequest();
139
+ };
140
+ return descriptor;
141
+ };
142
+ }
143
+ /**
144
+ * Decorator for responding to requests in elements or controllers.
145
+ *
146
+ * @param requestName The name of the request to respond to
147
+ * @param options Optional configuration
148
+ */
149
+ export function respond(requestName, options) {
150
+ return function (target, propertyKey, descriptor) {
151
+ const originalMethod = descriptor.value;
152
+ // Store response metadata on the prototype
153
+ // This will be picked up by setupResponseHandlers
154
+ if (!target[CHANNEL_HANDLERS]) {
155
+ target[CHANNEL_HANDLERS] = [];
156
+ }
157
+ target[CHANNEL_HANDLERS].push({
158
+ channelName: requestName,
159
+ methodName: propertyKey,
160
+ method: originalMethod,
161
+ options: options
162
+ });
163
+ return descriptor;
164
+ };
165
+ }
166
+ // Helper to setup response handlers for elements and controllers
167
+ export function setupResponseHandlers(instance, element) {
168
+ const handlers = instance.constructor.prototype[CHANNEL_HANDLERS];
169
+ if (!handlers)
170
+ return;
171
+ // Store cleanup functions
172
+ // Initialize cleanup object if needed
173
+ if (!instance[CLEANUP]) {
174
+ instance[CLEANUP] = { events: [], channels: [] };
175
+ }
176
+ for (const handler of handlers) {
177
+ const boundMethod = handler.method.bind(instance);
178
+ const eventName = `@request/${handler.channelName}`;
179
+ // Create timing variables for debounce/throttle per handler
180
+ let debounceTimeout;
181
+ let throttleLastCall = 0;
182
+ let throttleTimeout;
183
+ // Create wrapped method with timing if needed
184
+ const createTimedMethod = (originalMethod) => {
185
+ if (handler.options?.debounce) {
186
+ return (...args) => {
187
+ return new Promise((resolve, reject) => {
188
+ clearTimeout(debounceTimeout);
189
+ debounceTimeout = setTimeout(async () => {
190
+ try {
191
+ const result = await originalMethod(...args);
192
+ resolve(result);
193
+ }
194
+ catch (error) {
195
+ reject(error);
196
+ }
197
+ }, handler.options.debounce);
198
+ });
199
+ };
200
+ }
201
+ if (handler.options?.throttle) {
202
+ return (...args) => {
203
+ const now = Date.now();
204
+ const remaining = handler.options.throttle - (now - throttleLastCall);
205
+ if (remaining <= 0) {
206
+ clearTimeout(throttleTimeout);
207
+ throttleLastCall = now;
208
+ return originalMethod(...args);
209
+ }
210
+ else if (!throttleTimeout) {
211
+ return new Promise((resolve, reject) => {
212
+ throttleTimeout = setTimeout(async () => {
213
+ throttleLastCall = Date.now();
214
+ throttleTimeout = null;
215
+ try {
216
+ const result = await originalMethod(...args);
217
+ resolve(result);
218
+ }
219
+ catch (error) {
220
+ reject(error);
221
+ }
222
+ }, remaining);
223
+ });
224
+ }
225
+ // If throttled and timeout already exists, return cached/empty response
226
+ return Promise.resolve(undefined);
227
+ };
228
+ }
229
+ return originalMethod;
230
+ };
231
+ const timedMethod = createTimedMethod(boundMethod);
232
+ // Setup response handler
233
+ const responseHandler = (event) => {
234
+ // Extract promises and payload
235
+ const { data, discovery, payload } = event.detail;
236
+ // Prevent other responders from responding
237
+ event.preventDefault();
238
+ event.stopImmediatePropagation();
239
+ event.stopPropagation();
240
+ // Clear the discovery timeout immediately - we found a handler
241
+ discovery.resolve();
242
+ // Call the timed responder method and handle the result
243
+ Promise.resolve(timedMethod(payload))
244
+ .then(result => {
245
+ data.resolve(result);
246
+ })
247
+ .catch(error => {
248
+ data.reject(error);
249
+ console.error(`Error in response handler ${handler.methodName}:`, error);
250
+ });
251
+ };
252
+ element.addEventListener(eventName, responseHandler);
253
+ instance[CLEANUP].channels.push(() => {
254
+ element.removeEventListener(eventName, responseHandler);
255
+ });
256
+ }
257
+ }
258
+ // Helper to cleanup response handlers
259
+ export function cleanupResponseHandlers(instance) {
260
+ if (instance[CLEANUP]?.channels) {
261
+ for (const cleanup of instance[CLEANUP].channels) {
262
+ cleanup();
263
+ }
264
+ instance[CLEANUP].channels = [];
265
+ }
266
+ }
267
+ //# sourceMappingURL=request-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-response.js","sourceRoot":"","sources":["../../src/request-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AA4B9E;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,WAAmB,EAAE,OAAwB;IACnE,OAAO,UAAU,OAAY,EAAE,YAAoB,EAAE,UAA8B;QACjF,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,gDAAgD;QAChD,IAAI,eAAoB,CAAC;QACzB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,eAAoB,CAAC;QAEzB,UAAU,CAAC,KAAK,GAAG,KAAK,WAAsB,GAAG,IAAW;YAC1D,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;gBAC/B,kDAAkD;gBAClD,MAAM,eAAe,GAAG,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,2BAA2B;gBAC/E,MAAM,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,iCAAiC;gBAE3F,uBAAuB;gBACzB,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAEnD,4CAA4C;gBAC5C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;gBAExD,IAAI,IAAI,EAAE,CAAC;oBACT,sCAAsC;oBACtC,OAAO,OAAO,CAAC;gBACjB,CAAC;gBAED,gDAAgD;gBAChD,IAAI,WAAiC,CAAC;gBACtC,IAAI,UAAkC,CAAC;gBACvC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAClD,WAAW,GAAG,OAAO,CAAC;oBACtB,UAAU,GAAG,MAAM,CAAC;gBACtB,CAAC,CAAC,CAAC;gBAEH,6DAA6D;gBAC7D,IAAI,gBAA4B,CAAC;gBACjC,IAAI,eAAuC,CAAC;gBAC5C,IAAI,kBAAkC,CAAC;gBACvC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC7D,gBAAgB,GAAG,OAAO,CAAC;oBAC3B,eAAe,GAAG,MAAM,CAAC;oBACzB,kBAAkB,GAAG,UAAU,CAAC,GAAG,EAAE;wBACnC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,WAAW,qBAAqB,gBAAgB,uBAAuB,CAAC,CAAC,CAAC;oBACzG,CAAC,EAAE,gBAAgB,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBAEH,+BAA+B;gBAC/B,MAAM,SAAS,GAAG,YAAY,WAAW,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;oBACvC,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAChE,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,KAAK;oBACxC,QAAQ,EAAE,IAAI,EAAE,uCAAuC;oBACvD,MAAM,EAAE;wBACN,OAAO;wBACP,SAAS,EAAE;4BACT,OAAO,EAAE,GAAG,EAAE;gCACZ,YAAY,CAAC,kBAAkB,CAAC,CAAC;gCACjC,gBAAgB,EAAE,CAAC;4BACrB,CAAC;4BACD,MAAM,EAAE,eAAgB;yBACzB;wBACD,IAAI,EAAE;4BACJ,OAAO,EAAE,WAAY;4BACrB,MAAM,EAAE,UAAW;yBACpB;qBACF;iBACF,CAAC,CAAC;gBAEH,0DAA0D;gBAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAC;gBAC3D,MAAM,UAAU,GAAG,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtE,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAEhC,IAAI,CAAC;oBACH,uGAAuG;oBACvG,MAAM,gBAAgB,CAAC;oBAEvB,wEAAwE;oBACxE,uEAAuE;oBACvE,MAAM,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;wBACxC,UAAW,CAAC,IAAI,KAAK,CAAC,YAAY,WAAW,qBAAqB,eAAe,IAAI,CAAC,CAAC,CAAC;oBAC1F,CAAC,EAAE,eAAe,CAAC,CAAC;oBAEpB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;oBACnC,YAAY,CAAC,iBAAiB,CAAC,CAAC;oBAEhC,6DAA6D;oBAC7D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7D,OAAO,UAAU,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,0BAA0B;oBAC1B,IAAI,CAAC;wBACH,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC/B,CAAC;oBAAC,OAAO,cAAc,EAAE,CAAC;wBACxB,MAAM,cAAc,CAAC;oBACvB,CAAC;gBACH,CAAC;YACD,CAAC,CAAC,CAAC,+BAA+B;YAElC,0CAA0C;YAC1C,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACrC,YAAY,CAAC,eAAe,CAAC,CAAC;oBAC9B,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;wBACtC,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;4BACrC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClB,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,MAAM,CAAC,KAAK,CAAC,CAAC;wBAChB,CAAC;oBACH,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC;gBAE9D,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,YAAY,CAAC,eAAe,CAAC,CAAC;oBAC9B,gBAAgB,GAAG,GAAG,CAAC;oBACvB,OAAO,aAAa,EAAE,CAAC;gBACzB,CAAC;qBAAM,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBACrC,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;4BACtC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAC9B,eAAe,GAAG,IAAI,CAAC;4BACvB,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;gCACrC,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClB,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,MAAM,CAAC,KAAK,CAAC,CAAC;4BAChB,CAAC;wBACH,CAAC,EAAE,SAAS,CAAC,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,gEAAgE;gBAChE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;YAED,yCAAyC;YACzC,OAAO,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAaD;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,WAAmB,EAAE,OAAwB;IACnE,OAAO,UAAU,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAC/E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,2CAA2C;QAC3C,kDAAkD;QAClD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;YAC5B,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,WAAW;YACvB,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,qBAAqB,CAAC,QAAa,EAAE,OAAoB;IACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClE,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,0BAA0B;IAC1B,sCAAsC;IACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,YAAY,OAAO,CAAC,WAAW,EAAE,CAAC;QAEpD,4DAA4D;QAC5D,IAAI,eAAoB,CAAC;QACzB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,eAAoB,CAAC;QAEzB,8CAA8C;QAC9C,MAAM,iBAAiB,GAAG,CAAC,cAAwB,EAAE,EAAE;YACrD,IAAI,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;oBACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBACrC,YAAY,CAAC,eAAe,CAAC,CAAC;wBAC9B,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;4BACtC,IAAI,CAAC;gCACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;gCAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;4BAClB,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCACf,MAAM,CAAC,KAAK,CAAC,CAAC;4BAChB,CAAC;wBACH,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;oBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,QAAS,GAAG,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC;oBAEvE,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;wBACnB,YAAY,CAAC,eAAe,CAAC,CAAC;wBAC9B,gBAAgB,GAAG,GAAG,CAAC;wBACvB,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;oBACjC,CAAC;yBAAM,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;4BACrC,eAAe,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gCACtC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gCAC9B,eAAe,GAAG,IAAI,CAAC;gCACvB,IAAI,CAAC;oCACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;oCAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;gCAClB,CAAC;gCAAC,OAAO,KAAK,EAAE,CAAC;oCACf,MAAM,CAAC,KAAK,CAAC,CAAC;gCAChB,CAAC;4BACH,CAAC,EAAE,SAAS,CAAC,CAAC;wBAChB,CAAC,CAAC,CAAC;oBACL,CAAC;oBAED,wEAAwE;oBACxE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACpC,CAAC,CAAC;YACJ,CAAC;YAED,OAAO,cAAc,CAAC;QACxB,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEnD,yBAAyB;QACzB,MAAM,eAAe,GAAG,CAAC,KAAkB,EAAE,EAAE;YAC7C,+BAA+B;YAC/B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;YAElD,2CAA2C;YAC3C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;YACjC,KAAK,CAAC,eAAe,EAAE,CAAC;YAExB,+DAA+D;YAC/D,SAAS,CAAC,OAAO,EAAE,CAAC;YAEpB,wDAAwD;YACxD,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;iBAClC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC,CAAC;iBACD,KAAK,CAAC,KAAK,CAAC,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAgC,CAAC,CAAC;QAEtE,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;YACnC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,eAAgC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,uBAAuB,CAAC,QAAa;IACnD,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClC,CAAC;AACH,CAAC"}