@walkeros/explorer 2.1.4 → 2.1.5

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 (873) hide show
  1. package/README.md +35 -11
  2. package/dist/index.d.cts +3 -668
  3. package/dist/index.d.ts +1336 -99
  4. package/dist/index.js +1 -76
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +1 -18676
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/styles.css +687 -5001
  9. package/package.json +9 -26
  10. package/AGENT.md +0 -429
  11. package/LICENSE +0 -42
  12. package/STYLE.md +0 -1103
  13. package/dist/__mocks__/@monaco-editor/react.d.ts +0 -3
  14. package/dist/__mocks__/@monaco-editor/react.d.ts.map +0 -1
  15. package/dist/__mocks__/@monaco-editor/react.js +0 -4
  16. package/dist/__mocks__/@monaco-editor/react.js.map +0 -1
  17. package/dist/chunk-5B2ONDO3.mjs +0 -573
  18. package/dist/chunk-5B2ONDO3.mjs.map +0 -1
  19. package/dist/components/atoms/alert.d.ts +0 -29
  20. package/dist/components/atoms/alert.d.ts.map +0 -1
  21. package/dist/components/atoms/alert.js +0 -19
  22. package/dist/components/atoms/alert.js.map +0 -1
  23. package/dist/components/atoms/alert.stories.d.ts +0 -7
  24. package/dist/components/atoms/alert.stories.d.ts.map +0 -1
  25. package/dist/components/atoms/alert.stories.js +0 -14
  26. package/dist/components/atoms/alert.stories.js.map +0 -1
  27. package/dist/components/atoms/base-mapping-pane.d.ts +0 -85
  28. package/dist/components/atoms/base-mapping-pane.d.ts.map +0 -1
  29. package/dist/components/atoms/base-mapping-pane.js +0 -53
  30. package/dist/components/atoms/base-mapping-pane.js.map +0 -1
  31. package/dist/components/atoms/box.d.ts +0 -27
  32. package/dist/components/atoms/box.d.ts.map +0 -1
  33. package/dist/components/atoms/box.js +0 -86
  34. package/dist/components/atoms/box.js.map +0 -1
  35. package/dist/components/atoms/box.stories.d.ts +0 -34
  36. package/dist/components/atoms/box.stories.d.ts.map +0 -1
  37. package/dist/components/atoms/box.stories.js +0 -104
  38. package/dist/components/atoms/box.stories.js.map +0 -1
  39. package/dist/components/atoms/button-group.d.ts +0 -17
  40. package/dist/components/atoms/button-group.d.ts.map +0 -1
  41. package/dist/components/atoms/button-group.js +0 -12
  42. package/dist/components/atoms/button-group.js.map +0 -1
  43. package/dist/components/atoms/button-group.stories.d.ts +0 -18
  44. package/dist/components/atoms/button-group.stories.d.ts.map +0 -1
  45. package/dist/components/atoms/button-group.stories.js +0 -35
  46. package/dist/components/atoms/button-group.stories.js.map +0 -1
  47. package/dist/components/atoms/button-link.d.ts +0 -12
  48. package/dist/components/atoms/button-link.d.ts.map +0 -1
  49. package/dist/components/atoms/button-link.js +0 -10
  50. package/dist/components/atoms/button-link.js.map +0 -1
  51. package/dist/components/atoms/button-link.stories.d.ts +0 -11
  52. package/dist/components/atoms/button-link.stories.d.ts.map +0 -1
  53. package/dist/components/atoms/button-link.stories.js +0 -50
  54. package/dist/components/atoms/button-link.stories.js.map +0 -1
  55. package/dist/components/atoms/button.d.ts +0 -15
  56. package/dist/components/atoms/button.d.ts.map +0 -1
  57. package/dist/components/atoms/button.js +0 -11
  58. package/dist/components/atoms/button.js.map +0 -1
  59. package/dist/components/atoms/button.stories.d.ts +0 -14
  60. package/dist/components/atoms/button.stories.d.ts.map +0 -1
  61. package/dist/components/atoms/button.stories.js +0 -25
  62. package/dist/components/atoms/button.stories.js.map +0 -1
  63. package/dist/components/atoms/code.d.ts +0 -92
  64. package/dist/components/atoms/code.d.ts.map +0 -1
  65. package/dist/components/atoms/code.js +0 -405
  66. package/dist/components/atoms/code.js.map +0 -1
  67. package/dist/components/atoms/code.stories.d.ts +0 -46
  68. package/dist/components/atoms/code.stories.d.ts.map +0 -1
  69. package/dist/components/atoms/code.stories.js +0 -156
  70. package/dist/components/atoms/code.stories.js.map +0 -1
  71. package/dist/components/atoms/config-tile.d.ts +0 -38
  72. package/dist/components/atoms/config-tile.d.ts.map +0 -1
  73. package/dist/components/atoms/config-tile.js +0 -29
  74. package/dist/components/atoms/config-tile.js.map +0 -1
  75. package/dist/components/atoms/consent-state-tile.d.ts +0 -14
  76. package/dist/components/atoms/consent-state-tile.d.ts.map +0 -1
  77. package/dist/components/atoms/consent-state-tile.js +0 -5
  78. package/dist/components/atoms/consent-state-tile.js.map +0 -1
  79. package/dist/components/atoms/field-header.d.ts +0 -41
  80. package/dist/components/atoms/field-header.d.ts.map +0 -1
  81. package/dist/components/atoms/field-header.js +0 -42
  82. package/dist/components/atoms/field-header.js.map +0 -1
  83. package/dist/components/atoms/footer.d.ts +0 -21
  84. package/dist/components/atoms/footer.d.ts.map +0 -1
  85. package/dist/components/atoms/footer.js +0 -19
  86. package/dist/components/atoms/footer.js.map +0 -1
  87. package/dist/components/atoms/footer.stories.d.ts +0 -14
  88. package/dist/components/atoms/footer.stories.d.ts.map +0 -1
  89. package/dist/components/atoms/footer.stories.js +0 -29
  90. package/dist/components/atoms/footer.stories.js.map +0 -1
  91. package/dist/components/atoms/form-field.d.ts +0 -28
  92. package/dist/components/atoms/form-field.d.ts.map +0 -1
  93. package/dist/components/atoms/form-field.js +0 -16
  94. package/dist/components/atoms/form-field.js.map +0 -1
  95. package/dist/components/atoms/form-field.stories.d.ts +0 -7
  96. package/dist/components/atoms/form-field.stories.d.ts.map +0 -1
  97. package/dist/components/atoms/form-field.stories.js +0 -16
  98. package/dist/components/atoms/form-field.stories.js.map +0 -1
  99. package/dist/components/atoms/form-input.d.ts +0 -43
  100. package/dist/components/atoms/form-input.d.ts.map +0 -1
  101. package/dist/components/atoms/form-input.js +0 -26
  102. package/dist/components/atoms/form-input.js.map +0 -1
  103. package/dist/components/atoms/form-input.stories.d.ts +0 -7
  104. package/dist/components/atoms/form-input.stories.d.ts.map +0 -1
  105. package/dist/components/atoms/form-input.stories.js +0 -17
  106. package/dist/components/atoms/form-input.stories.js.map +0 -1
  107. package/dist/components/atoms/form-textarea.d.ts +0 -41
  108. package/dist/components/atoms/form-textarea.d.ts.map +0 -1
  109. package/dist/components/atoms/form-textarea.js +0 -26
  110. package/dist/components/atoms/form-textarea.js.map +0 -1
  111. package/dist/components/atoms/form-textarea.stories.d.ts +0 -7
  112. package/dist/components/atoms/form-textarea.stories.d.ts.map +0 -1
  113. package/dist/components/atoms/form-textarea.stories.js +0 -17
  114. package/dist/components/atoms/form-textarea.stories.js.map +0 -1
  115. package/dist/components/atoms/grid.d.ts +0 -65
  116. package/dist/components/atoms/grid.d.ts.map +0 -1
  117. package/dist/components/atoms/grid.js +0 -169
  118. package/dist/components/atoms/grid.js.map +0 -1
  119. package/dist/components/atoms/grid.stories.d.ts +0 -18
  120. package/dist/components/atoms/grid.stories.d.ts.map +0 -1
  121. package/dist/components/atoms/grid.stories.js +0 -60
  122. package/dist/components/atoms/grid.stories.js.map +0 -1
  123. package/dist/components/atoms/header.d.ts +0 -7
  124. package/dist/components/atoms/header.d.ts.map +0 -1
  125. package/dist/components/atoms/header.js +0 -5
  126. package/dist/components/atoms/header.js.map +0 -1
  127. package/dist/components/atoms/header.stories.d.ts +0 -15
  128. package/dist/components/atoms/header.stories.d.ts.map +0 -1
  129. package/dist/components/atoms/header.stories.js +0 -37
  130. package/dist/components/atoms/header.stories.js.map +0 -1
  131. package/dist/components/atoms/icon-button.d.ts +0 -26
  132. package/dist/components/atoms/icon-button.d.ts.map +0 -1
  133. package/dist/components/atoms/icon-button.js +0 -39
  134. package/dist/components/atoms/icon-button.js.map +0 -1
  135. package/dist/components/atoms/icons/icon.stories.d.ts +0 -18
  136. package/dist/components/atoms/icons/icon.stories.d.ts.map +0 -1
  137. package/dist/components/atoms/icons/icon.stories.js +0 -37
  138. package/dist/components/atoms/icons/icon.stories.js.map +0 -1
  139. package/dist/components/atoms/icons/icons.d.ts +0 -2
  140. package/dist/components/atoms/icons/icons.d.ts.map +0 -1
  141. package/dist/components/atoms/icons/icons.js +0 -7
  142. package/dist/components/atoms/icons/icons.js.map +0 -1
  143. package/dist/components/atoms/icons/index.d.ts +0 -3
  144. package/dist/components/atoms/icons/index.d.ts.map +0 -1
  145. package/dist/components/atoms/icons/index.js +0 -3
  146. package/dist/components/atoms/icons/index.js.map +0 -1
  147. package/dist/components/atoms/mapping-boolean.d.ts +0 -31
  148. package/dist/components/atoms/mapping-boolean.d.ts.map +0 -1
  149. package/dist/components/atoms/mapping-boolean.js +0 -38
  150. package/dist/components/atoms/mapping-boolean.js.map +0 -1
  151. package/dist/components/atoms/mapping-breadcrumb.d.ts +0 -14
  152. package/dist/components/atoms/mapping-breadcrumb.d.ts.map +0 -1
  153. package/dist/components/atoms/mapping-breadcrumb.js +0 -10
  154. package/dist/components/atoms/mapping-breadcrumb.js.map +0 -1
  155. package/dist/components/atoms/mapping-collapsible.d.ts +0 -54
  156. package/dist/components/atoms/mapping-collapsible.d.ts.map +0 -1
  157. package/dist/components/atoms/mapping-collapsible.js +0 -87
  158. package/dist/components/atoms/mapping-collapsible.js.map +0 -1
  159. package/dist/components/atoms/mapping-condition-field.d.ts +0 -18
  160. package/dist/components/atoms/mapping-condition-field.d.ts.map +0 -1
  161. package/dist/components/atoms/mapping-condition-field.js +0 -34
  162. package/dist/components/atoms/mapping-condition-field.js.map +0 -1
  163. package/dist/components/atoms/mapping-condition.d.ts +0 -34
  164. package/dist/components/atoms/mapping-condition.d.ts.map +0 -1
  165. package/dist/components/atoms/mapping-condition.js +0 -70
  166. package/dist/components/atoms/mapping-condition.js.map +0 -1
  167. package/dist/components/atoms/mapping-confirm-button.d.ts +0 -29
  168. package/dist/components/atoms/mapping-confirm-button.d.ts.map +0 -1
  169. package/dist/components/atoms/mapping-confirm-button.js +0 -42
  170. package/dist/components/atoms/mapping-confirm-button.js.map +0 -1
  171. package/dist/components/atoms/mapping-consent-field.d.ts +0 -20
  172. package/dist/components/atoms/mapping-consent-field.d.ts.map +0 -1
  173. package/dist/components/atoms/mapping-consent-field.js +0 -36
  174. package/dist/components/atoms/mapping-consent-field.js.map +0 -1
  175. package/dist/components/atoms/mapping-consent.d.ts +0 -34
  176. package/dist/components/atoms/mapping-consent.d.ts.map +0 -1
  177. package/dist/components/atoms/mapping-consent.js +0 -86
  178. package/dist/components/atoms/mapping-consent.js.map +0 -1
  179. package/dist/components/atoms/mapping-data-field.d.ts +0 -23
  180. package/dist/components/atoms/mapping-data-field.d.ts.map +0 -1
  181. package/dist/components/atoms/mapping-data-field.js +0 -38
  182. package/dist/components/atoms/mapping-data-field.js.map +0 -1
  183. package/dist/components/atoms/mapping-data.d.ts +0 -34
  184. package/dist/components/atoms/mapping-data.d.ts.map +0 -1
  185. package/dist/components/atoms/mapping-data.js +0 -76
  186. package/dist/components/atoms/mapping-data.js.map +0 -1
  187. package/dist/components/atoms/mapping-enum-select.d.ts +0 -28
  188. package/dist/components/atoms/mapping-enum-select.d.ts.map +0 -1
  189. package/dist/components/atoms/mapping-enum-select.js +0 -142
  190. package/dist/components/atoms/mapping-enum-select.js.map +0 -1
  191. package/dist/components/atoms/mapping-fn-field.d.ts +0 -23
  192. package/dist/components/atoms/mapping-fn-field.d.ts.map +0 -1
  193. package/dist/components/atoms/mapping-fn-field.js +0 -38
  194. package/dist/components/atoms/mapping-fn-field.js.map +0 -1
  195. package/dist/components/atoms/mapping-fn.d.ts +0 -34
  196. package/dist/components/atoms/mapping-fn.d.ts.map +0 -1
  197. package/dist/components/atoms/mapping-fn.js +0 -70
  198. package/dist/components/atoms/mapping-fn.js.map +0 -1
  199. package/dist/components/atoms/mapping-grid.d.ts +0 -45
  200. package/dist/components/atoms/mapping-grid.d.ts.map +0 -1
  201. package/dist/components/atoms/mapping-grid.js +0 -83
  202. package/dist/components/atoms/mapping-grid.js.map +0 -1
  203. package/dist/components/atoms/mapping-input-with-button.d.ts +0 -54
  204. package/dist/components/atoms/mapping-input-with-button.d.ts.map +0 -1
  205. package/dist/components/atoms/mapping-input-with-button.js +0 -54
  206. package/dist/components/atoms/mapping-input-with-button.js.map +0 -1
  207. package/dist/components/atoms/mapping-input.d.ts +0 -44
  208. package/dist/components/atoms/mapping-input.d.ts.map +0 -1
  209. package/dist/components/atoms/mapping-input.js +0 -35
  210. package/dist/components/atoms/mapping-input.js.map +0 -1
  211. package/dist/components/atoms/mapping-key-field.d.ts +0 -23
  212. package/dist/components/atoms/mapping-key-field.d.ts.map +0 -1
  213. package/dist/components/atoms/mapping-key-field.js +0 -39
  214. package/dist/components/atoms/mapping-key-field.js.map +0 -1
  215. package/dist/components/atoms/mapping-key.d.ts +0 -35
  216. package/dist/components/atoms/mapping-key.d.ts.map +0 -1
  217. package/dist/components/atoms/mapping-key.js +0 -48
  218. package/dist/components/atoms/mapping-key.js.map +0 -1
  219. package/dist/components/atoms/mapping-map-entry.d.ts +0 -31
  220. package/dist/components/atoms/mapping-map-entry.d.ts.map +0 -1
  221. package/dist/components/atoms/mapping-map-entry.js +0 -68
  222. package/dist/components/atoms/mapping-map-entry.js.map +0 -1
  223. package/dist/components/atoms/mapping-number.d.ts +0 -32
  224. package/dist/components/atoms/mapping-number.d.ts.map +0 -1
  225. package/dist/components/atoms/mapping-number.js +0 -52
  226. package/dist/components/atoms/mapping-number.js.map +0 -1
  227. package/dist/components/atoms/mapping-object-explorer-field.d.ts +0 -30
  228. package/dist/components/atoms/mapping-object-explorer-field.d.ts.map +0 -1
  229. package/dist/components/atoms/mapping-object-explorer-field.js +0 -48
  230. package/dist/components/atoms/mapping-object-explorer-field.js.map +0 -1
  231. package/dist/components/atoms/mapping-object-explorer.d.ts +0 -59
  232. package/dist/components/atoms/mapping-object-explorer.d.ts.map +0 -1
  233. package/dist/components/atoms/mapping-object-explorer.js +0 -215
  234. package/dist/components/atoms/mapping-object-explorer.js.map +0 -1
  235. package/dist/components/atoms/mapping-set-entry.d.ts +0 -31
  236. package/dist/components/atoms/mapping-set-entry.d.ts.map +0 -1
  237. package/dist/components/atoms/mapping-set-entry.js +0 -66
  238. package/dist/components/atoms/mapping-set-entry.js.map +0 -1
  239. package/dist/components/atoms/mapping-settings-field.d.ts +0 -33
  240. package/dist/components/atoms/mapping-settings-field.d.ts.map +0 -1
  241. package/dist/components/atoms/mapping-settings-field.js +0 -48
  242. package/dist/components/atoms/mapping-settings-field.js.map +0 -1
  243. package/dist/components/atoms/mapping-settings.d.ts +0 -44
  244. package/dist/components/atoms/mapping-settings.d.ts.map +0 -1
  245. package/dist/components/atoms/mapping-settings.js +0 -108
  246. package/dist/components/atoms/mapping-settings.js.map +0 -1
  247. package/dist/components/atoms/mapping-string.d.ts +0 -19
  248. package/dist/components/atoms/mapping-string.d.ts.map +0 -1
  249. package/dist/components/atoms/mapping-string.js +0 -26
  250. package/dist/components/atoms/mapping-string.js.map +0 -1
  251. package/dist/components/atoms/mapping-tab.d.ts +0 -15
  252. package/dist/components/atoms/mapping-tab.d.ts.map +0 -1
  253. package/dist/components/atoms/mapping-tab.js +0 -8
  254. package/dist/components/atoms/mapping-tab.js.map +0 -1
  255. package/dist/components/atoms/mapping-type-button.d.ts +0 -19
  256. package/dist/components/atoms/mapping-type-button.d.ts.map +0 -1
  257. package/dist/components/atoms/mapping-type-button.js +0 -5
  258. package/dist/components/atoms/mapping-type-button.js.map +0 -1
  259. package/dist/components/atoms/mapping-validate-field.d.ts +0 -23
  260. package/dist/components/atoms/mapping-validate-field.d.ts.map +0 -1
  261. package/dist/components/atoms/mapping-validate-field.js +0 -38
  262. package/dist/components/atoms/mapping-validate-field.js.map +0 -1
  263. package/dist/components/atoms/mapping-validate.d.ts +0 -34
  264. package/dist/components/atoms/mapping-validate.d.ts.map +0 -1
  265. package/dist/components/atoms/mapping-validate.js +0 -68
  266. package/dist/components/atoms/mapping-validate.js.map +0 -1
  267. package/dist/components/atoms/mapping-value.d.ts +0 -17
  268. package/dist/components/atoms/mapping-value.d.ts.map +0 -1
  269. package/dist/components/atoms/mapping-value.js +0 -127
  270. package/dist/components/atoms/mapping-value.js.map +0 -1
  271. package/dist/components/atoms/mdx-code.d.ts +0 -33
  272. package/dist/components/atoms/mdx-code.d.ts.map +0 -1
  273. package/dist/components/atoms/mdx-code.js +0 -69
  274. package/dist/components/atoms/mdx-code.js.map +0 -1
  275. package/dist/components/atoms/pane-header.d.ts +0 -24
  276. package/dist/components/atoms/pane-header.d.ts.map +0 -1
  277. package/dist/components/atoms/pane-header.js +0 -5
  278. package/dist/components/atoms/pane-header.js.map +0 -1
  279. package/dist/components/atoms/panel-hints.d.ts +0 -35
  280. package/dist/components/atoms/panel-hints.d.ts.map +0 -1
  281. package/dist/components/atoms/panel-hints.js +0 -5
  282. package/dist/components/atoms/panel-hints.js.map +0 -1
  283. package/dist/components/atoms/panel-hints.stories.d.ts +0 -14
  284. package/dist/components/atoms/panel-hints.stories.d.ts.map +0 -1
  285. package/dist/components/atoms/panel-hints.stories.js +0 -35
  286. package/dist/components/atoms/panel-hints.stories.js.map +0 -1
  287. package/dist/components/atoms/preview-footer.d.ts +0 -32
  288. package/dist/components/atoms/preview-footer.d.ts.map +0 -1
  289. package/dist/components/atoms/preview-footer.js +0 -31
  290. package/dist/components/atoms/preview-footer.js.map +0 -1
  291. package/dist/components/atoms/spinner.d.ts +0 -17
  292. package/dist/components/atoms/spinner.d.ts.map +0 -1
  293. package/dist/components/atoms/spinner.js +0 -14
  294. package/dist/components/atoms/spinner.js.map +0 -1
  295. package/dist/components/atoms/spinner.stories.d.ts +0 -7
  296. package/dist/components/atoms/spinner.stories.d.ts.map +0 -1
  297. package/dist/components/atoms/spinner.stories.js +0 -9
  298. package/dist/components/atoms/spinner.stories.js.map +0 -1
  299. package/dist/components/atoms/submit-button.d.ts +0 -34
  300. package/dist/components/atoms/submit-button.d.ts.map +0 -1
  301. package/dist/components/atoms/submit-button.js +0 -18
  302. package/dist/components/atoms/submit-button.js.map +0 -1
  303. package/dist/components/atoms/submit-button.stories.d.ts +0 -7
  304. package/dist/components/atoms/submit-button.stories.d.ts.map +0 -1
  305. package/dist/components/atoms/submit-button.stories.js +0 -13
  306. package/dist/components/atoms/submit-button.stories.js.map +0 -1
  307. package/dist/components/atoms/toggle.d.ts +0 -9
  308. package/dist/components/atoms/toggle.d.ts.map +0 -1
  309. package/dist/components/atoms/toggle.js +0 -6
  310. package/dist/components/atoms/toggle.js.map +0 -1
  311. package/dist/components/demos/DestinationDemo.d.ts +0 -48
  312. package/dist/components/demos/DestinationDemo.d.ts.map +0 -1
  313. package/dist/components/demos/DestinationDemo.js +0 -105
  314. package/dist/components/demos/DestinationDemo.js.map +0 -1
  315. package/dist/components/demos/DestinationDemo.stories.d.ts +0 -17
  316. package/dist/components/demos/DestinationDemo.stories.d.ts.map +0 -1
  317. package/dist/components/demos/DestinationDemo.stories.js +0 -53
  318. package/dist/components/demos/DestinationDemo.stories.js.map +0 -1
  319. package/dist/components/demos/DestinationInitDemo.d.ts +0 -34
  320. package/dist/components/demos/DestinationInitDemo.d.ts.map +0 -1
  321. package/dist/components/demos/DestinationInitDemo.js +0 -73
  322. package/dist/components/demos/DestinationInitDemo.js.map +0 -1
  323. package/dist/components/demos/DestinationInitDemo.stories.d.ts +0 -17
  324. package/dist/components/demos/DestinationInitDemo.stories.d.ts.map +0 -1
  325. package/dist/components/demos/DestinationInitDemo.stories.js +0 -39
  326. package/dist/components/demos/DestinationInitDemo.stories.js.map +0 -1
  327. package/dist/components/demos/MappingCode.d.ts +0 -34
  328. package/dist/components/demos/MappingCode.d.ts.map +0 -1
  329. package/dist/components/demos/MappingCode.js +0 -54
  330. package/dist/components/demos/MappingCode.js.map +0 -1
  331. package/dist/components/demos/MappingCode.stories.d.ts +0 -16
  332. package/dist/components/demos/MappingCode.stories.d.ts.map +0 -1
  333. package/dist/components/demos/MappingCode.stories.js +0 -42
  334. package/dist/components/demos/MappingCode.stories.js.map +0 -1
  335. package/dist/components/demos/MappingDemo.d.ts +0 -41
  336. package/dist/components/demos/MappingDemo.d.ts.map +0 -1
  337. package/dist/components/demos/MappingDemo.js +0 -62
  338. package/dist/components/demos/MappingDemo.js.map +0 -1
  339. package/dist/components/demos/MappingDemo.stories.d.ts +0 -16
  340. package/dist/components/demos/MappingDemo.stories.d.ts.map +0 -1
  341. package/dist/components/demos/MappingDemo.stories.js +0 -63
  342. package/dist/components/demos/MappingDemo.stories.js.map +0 -1
  343. package/dist/components/demos/PromotionPlayground.d.ts +0 -30
  344. package/dist/components/demos/PromotionPlayground.d.ts.map +0 -1
  345. package/dist/components/demos/PromotionPlayground.js +0 -366
  346. package/dist/components/demos/PromotionPlayground.js.map +0 -1
  347. package/dist/components/demos/PromotionPlayground.stories.d.ts +0 -27
  348. package/dist/components/demos/PromotionPlayground.stories.d.ts.map +0 -1
  349. package/dist/components/demos/PromotionPlayground.stories.js +0 -32
  350. package/dist/components/demos/PromotionPlayground.stories.js.map +0 -1
  351. package/dist/components/forms/field-registry.d.ts +0 -42
  352. package/dist/components/forms/field-registry.d.ts.map +0 -1
  353. package/dist/components/forms/field-registry.js +0 -64
  354. package/dist/components/forms/field-registry.js.map +0 -1
  355. package/dist/components/forms/mapping-form-wrapper.d.ts +0 -14
  356. package/dist/components/forms/mapping-form-wrapper.d.ts.map +0 -1
  357. package/dist/components/forms/mapping-form-wrapper.js +0 -105
  358. package/dist/components/forms/mapping-form-wrapper.js.map +0 -1
  359. package/dist/components/forms/widget-registry.d.ts +0 -42
  360. package/dist/components/forms/widget-registry.d.ts.map +0 -1
  361. package/dist/components/forms/widget-registry.js +0 -54
  362. package/dist/components/forms/widget-registry.js.map +0 -1
  363. package/dist/components/molecules/architecture-flow/ArchitectureFlow.d.ts +0 -24
  364. package/dist/components/molecules/architecture-flow/ArchitectureFlow.d.ts.map +0 -1
  365. package/dist/components/molecules/architecture-flow/ArchitectureFlow.js +0 -10
  366. package/dist/components/molecules/architecture-flow/ArchitectureFlow.js.map +0 -1
  367. package/dist/components/molecules/architecture-flow/ArchitectureFlow.stories.d.ts +0 -7
  368. package/dist/components/molecules/architecture-flow/ArchitectureFlow.stories.d.ts.map +0 -1
  369. package/dist/components/molecules/architecture-flow/ArchitectureFlow.stories.js +0 -71
  370. package/dist/components/molecules/architecture-flow/ArchitectureFlow.stories.js.map +0 -1
  371. package/dist/components/molecules/architecture-flow/index.d.ts +0 -3
  372. package/dist/components/molecules/architecture-flow/index.d.ts.map +0 -1
  373. package/dist/components/molecules/architecture-flow/index.js +0 -2
  374. package/dist/components/molecules/architecture-flow/index.js.map +0 -1
  375. package/dist/components/molecules/auto-select.d.ts +0 -29
  376. package/dist/components/molecules/auto-select.d.ts.map +0 -1
  377. package/dist/components/molecules/auto-select.js +0 -188
  378. package/dist/components/molecules/auto-select.js.map +0 -1
  379. package/dist/components/molecules/code-box.d.ts +0 -75
  380. package/dist/components/molecules/code-box.d.ts.map +0 -1
  381. package/dist/components/molecules/code-box.js +0 -174
  382. package/dist/components/molecules/code-box.js.map +0 -1
  383. package/dist/components/molecules/code-box.stories.d.ts +0 -87
  384. package/dist/components/molecules/code-box.stories.d.ts.map +0 -1
  385. package/dist/components/molecules/code-box.stories.js +0 -300
  386. package/dist/components/molecules/code-box.stories.js.map +0 -1
  387. package/dist/components/molecules/code-snippet.d.ts +0 -58
  388. package/dist/components/molecules/code-snippet.d.ts.map +0 -1
  389. package/dist/components/molecules/code-snippet.js +0 -72
  390. package/dist/components/molecules/code-snippet.js.map +0 -1
  391. package/dist/components/molecules/code-snippet.stories.d.ts +0 -23
  392. package/dist/components/molecules/code-snippet.stories.d.ts.map +0 -1
  393. package/dist/components/molecules/code-snippet.stories.js +0 -87
  394. package/dist/components/molecules/code-snippet.stories.js.map +0 -1
  395. package/dist/components/molecules/config-form-card.d.ts +0 -50
  396. package/dist/components/molecules/config-form-card.d.ts.map +0 -1
  397. package/dist/components/molecules/config-form-card.js +0 -30
  398. package/dist/components/molecules/config-form-card.js.map +0 -1
  399. package/dist/components/molecules/config-form-card.stories.d.ts +0 -7
  400. package/dist/components/molecules/config-form-card.stories.d.ts.map +0 -1
  401. package/dist/components/molecules/config-form-card.stories.js +0 -21
  402. package/dist/components/molecules/config-form-card.stories.js.map +0 -1
  403. package/dist/components/molecules/config-overview-pane.d.ts +0 -44
  404. package/dist/components/molecules/config-overview-pane.d.ts.map +0 -1
  405. package/dist/components/molecules/config-overview-pane.js +0 -75
  406. package/dist/components/molecules/config-overview-pane.js.map +0 -1
  407. package/dist/components/molecules/config-tree-sidebar.d.ts +0 -46
  408. package/dist/components/molecules/config-tree-sidebar.d.ts.map +0 -1
  409. package/dist/components/molecules/config-tree-sidebar.js +0 -183
  410. package/dist/components/molecules/config-tree-sidebar.js.map +0 -1
  411. package/dist/components/molecules/destination-config-overview-pane.d.ts +0 -33
  412. package/dist/components/molecules/destination-config-overview-pane.d.ts.map +0 -1
  413. package/dist/components/molecules/destination-config-overview-pane.js +0 -153
  414. package/dist/components/molecules/destination-config-overview-pane.js.map +0 -1
  415. package/dist/components/molecules/dropdown.d.ts +0 -68
  416. package/dist/components/molecules/dropdown.d.ts.map +0 -1
  417. package/dist/components/molecules/dropdown.js +0 -47
  418. package/dist/components/molecules/dropdown.js.map +0 -1
  419. package/dist/components/molecules/dropdown.stories.d.ts +0 -7
  420. package/dist/components/molecules/dropdown.stories.d.ts.map +0 -1
  421. package/dist/components/molecules/dropdown.stories.js +0 -18
  422. package/dist/components/molecules/dropdown.stories.js.map +0 -1
  423. package/dist/components/molecules/flow-map/FlowMap.d.ts +0 -74
  424. package/dist/components/molecules/flow-map/FlowMap.d.ts.map +0 -1
  425. package/dist/components/molecules/flow-map/FlowMap.js +0 -1039
  426. package/dist/components/molecules/flow-map/FlowMap.js.map +0 -1
  427. package/dist/components/molecules/flow-map/FlowMap.stories.d.ts +0 -47
  428. package/dist/components/molecules/flow-map/FlowMap.stories.d.ts.map +0 -1
  429. package/dist/components/molecules/flow-map/FlowMap.stories.js +0 -355
  430. package/dist/components/molecules/flow-map/FlowMap.stories.js.map +0 -1
  431. package/dist/components/molecules/flow-map/FlowMap.transformers.stories.d.ts +0 -29
  432. package/dist/components/molecules/flow-map/FlowMap.transformers.stories.d.ts.map +0 -1
  433. package/dist/components/molecules/flow-map/FlowMap.transformers.stories.js +0 -117
  434. package/dist/components/molecules/flow-map/FlowMap.transformers.stories.js.map +0 -1
  435. package/dist/components/molecules/flow-map/index.d.ts +0 -3
  436. package/dist/components/molecules/flow-map/index.d.ts.map +0 -1
  437. package/dist/components/molecules/flow-map/index.js +0 -2
  438. package/dist/components/molecules/flow-map/index.js.map +0 -1
  439. package/dist/components/molecules/flow-selector.d.ts +0 -19
  440. package/dist/components/molecules/flow-selector.d.ts.map +0 -1
  441. package/dist/components/molecules/flow-selector.js +0 -26
  442. package/dist/components/molecules/flow-selector.js.map +0 -1
  443. package/dist/components/molecules/flow-selector.stories.d.ts +0 -28
  444. package/dist/components/molecules/flow-selector.stories.d.ts.map +0 -1
  445. package/dist/components/molecules/flow-selector.stories.js +0 -66
  446. package/dist/components/molecules/flow-selector.stories.js.map +0 -1
  447. package/dist/components/molecules/form-card.d.ts +0 -28
  448. package/dist/components/molecules/form-card.d.ts.map +0 -1
  449. package/dist/components/molecules/form-card.js +0 -16
  450. package/dist/components/molecules/form-card.js.map +0 -1
  451. package/dist/components/molecules/form-card.stories.d.ts +0 -7
  452. package/dist/components/molecules/form-card.stories.d.ts.map +0 -1
  453. package/dist/components/molecules/form-card.stories.js +0 -16
  454. package/dist/components/molecules/form-card.stories.js.map +0 -1
  455. package/dist/components/molecules/mapping-batch-pane-view.d.ts +0 -22
  456. package/dist/components/molecules/mapping-batch-pane-view.d.ts.map +0 -1
  457. package/dist/components/molecules/mapping-batch-pane-view.js +0 -45
  458. package/dist/components/molecules/mapping-batch-pane-view.js.map +0 -1
  459. package/dist/components/molecules/mapping-boolean-pane-view.d.ts +0 -28
  460. package/dist/components/molecules/mapping-boolean-pane-view.d.ts.map +0 -1
  461. package/dist/components/molecules/mapping-boolean-pane-view.js +0 -34
  462. package/dist/components/molecules/mapping-boolean-pane-view.js.map +0 -1
  463. package/dist/components/molecules/mapping-condition-pane-view.d.ts +0 -18
  464. package/dist/components/molecules/mapping-condition-pane-view.d.ts.map +0 -1
  465. package/dist/components/molecules/mapping-condition-pane-view.js +0 -63
  466. package/dist/components/molecules/mapping-condition-pane-view.js.map +0 -1
  467. package/dist/components/molecules/mapping-consent-pane-view.d.ts +0 -16
  468. package/dist/components/molecules/mapping-consent-pane-view.d.ts.map +0 -1
  469. package/dist/components/molecules/mapping-consent-pane-view.js +0 -65
  470. package/dist/components/molecules/mapping-consent-pane-view.js.map +0 -1
  471. package/dist/components/molecules/mapping-consent-row.d.ts +0 -29
  472. package/dist/components/molecules/mapping-consent-row.d.ts.map +0 -1
  473. package/dist/components/molecules/mapping-consent-row.js +0 -26
  474. package/dist/components/molecules/mapping-consent-row.js.map +0 -1
  475. package/dist/components/molecules/mapping-entity-pane.d.ts +0 -17
  476. package/dist/components/molecules/mapping-entity-pane.d.ts.map +0 -1
  477. package/dist/components/molecules/mapping-entity-pane.js +0 -68
  478. package/dist/components/molecules/mapping-entity-pane.js.map +0 -1
  479. package/dist/components/molecules/mapping-enum-pane-view.d.ts +0 -40
  480. package/dist/components/molecules/mapping-enum-pane-view.d.ts.map +0 -1
  481. package/dist/components/molecules/mapping-enum-pane-view.js +0 -32
  482. package/dist/components/molecules/mapping-enum-pane-view.js.map +0 -1
  483. package/dist/components/molecules/mapping-fn-pane-view.d.ts +0 -18
  484. package/dist/components/molecules/mapping-fn-pane-view.d.ts.map +0 -1
  485. package/dist/components/molecules/mapping-fn-pane-view.js +0 -77
  486. package/dist/components/molecules/mapping-fn-pane-view.js.map +0 -1
  487. package/dist/components/molecules/mapping-function-pane-base.d.ts +0 -53
  488. package/dist/components/molecules/mapping-function-pane-base.d.ts.map +0 -1
  489. package/dist/components/molecules/mapping-function-pane-base.js +0 -60
  490. package/dist/components/molecules/mapping-function-pane-base.js.map +0 -1
  491. package/dist/components/molecules/mapping-key-pane-view.d.ts +0 -23
  492. package/dist/components/molecules/mapping-key-pane-view.d.ts.map +0 -1
  493. package/dist/components/molecules/mapping-key-pane-view.js +0 -12
  494. package/dist/components/molecules/mapping-key-pane-view.js.map +0 -1
  495. package/dist/components/molecules/mapping-loop-field.d.ts +0 -44
  496. package/dist/components/molecules/mapping-loop-field.d.ts.map +0 -1
  497. package/dist/components/molecules/mapping-loop-field.js +0 -133
  498. package/dist/components/molecules/mapping-loop-field.js.map +0 -1
  499. package/dist/components/molecules/mapping-loop-pane-view.d.ts +0 -28
  500. package/dist/components/molecules/mapping-loop-pane-view.d.ts.map +0 -1
  501. package/dist/components/molecules/mapping-loop-pane-view.js +0 -44
  502. package/dist/components/molecules/mapping-loop-pane-view.js.map +0 -1
  503. package/dist/components/molecules/mapping-map-field.d.ts +0 -31
  504. package/dist/components/molecules/mapping-map-field.d.ts.map +0 -1
  505. package/dist/components/molecules/mapping-map-field.js +0 -120
  506. package/dist/components/molecules/mapping-map-field.js.map +0 -1
  507. package/dist/components/molecules/mapping-map-overview.d.ts +0 -13
  508. package/dist/components/molecules/mapping-map-overview.d.ts.map +0 -1
  509. package/dist/components/molecules/mapping-map-overview.js +0 -58
  510. package/dist/components/molecules/mapping-map-overview.js.map +0 -1
  511. package/dist/components/molecules/mapping-map-pane-view-rjsf.d.ts +0 -53
  512. package/dist/components/molecules/mapping-map-pane-view-rjsf.d.ts.map +0 -1
  513. package/dist/components/molecules/mapping-map-pane-view-rjsf.js +0 -127
  514. package/dist/components/molecules/mapping-map-pane-view-rjsf.js.map +0 -1
  515. package/dist/components/molecules/mapping-name-pane-view.d.ts +0 -22
  516. package/dist/components/molecules/mapping-name-pane-view.d.ts.map +0 -1
  517. package/dist/components/molecules/mapping-name-pane-view.js +0 -38
  518. package/dist/components/molecules/mapping-name-pane-view.js.map +0 -1
  519. package/dist/components/molecules/mapping-navigation-header.d.ts +0 -27
  520. package/dist/components/molecules/mapping-navigation-header.d.ts.map +0 -1
  521. package/dist/components/molecules/mapping-navigation-header.js +0 -7
  522. package/dist/components/molecules/mapping-navigation-header.js.map +0 -1
  523. package/dist/components/molecules/mapping-overview-pane.d.ts +0 -14
  524. package/dist/components/molecules/mapping-overview-pane.d.ts.map +0 -1
  525. package/dist/components/molecules/mapping-overview-pane.js +0 -60
  526. package/dist/components/molecules/mapping-overview-pane.js.map +0 -1
  527. package/dist/components/molecules/mapping-pane.d.ts +0 -52
  528. package/dist/components/molecules/mapping-pane.d.ts.map +0 -1
  529. package/dist/components/molecules/mapping-pane.js +0 -155
  530. package/dist/components/molecules/mapping-pane.js.map +0 -1
  531. package/dist/components/molecules/mapping-policy-overview-pane.d.ts +0 -26
  532. package/dist/components/molecules/mapping-policy-overview-pane.d.ts.map +0 -1
  533. package/dist/components/molecules/mapping-policy-overview-pane.js +0 -69
  534. package/dist/components/molecules/mapping-policy-overview-pane.js.map +0 -1
  535. package/dist/components/molecules/mapping-primitive-pane-view.d.ts +0 -30
  536. package/dist/components/molecules/mapping-primitive-pane-view.d.ts.map +0 -1
  537. package/dist/components/molecules/mapping-primitive-pane-view.js +0 -43
  538. package/dist/components/molecules/mapping-primitive-pane-view.js.map +0 -1
  539. package/dist/components/molecules/mapping-rule-pane-view.d.ts +0 -25
  540. package/dist/components/molecules/mapping-rule-pane-view.d.ts.map +0 -1
  541. package/dist/components/molecules/mapping-rule-pane-view.js +0 -35
  542. package/dist/components/molecules/mapping-rule-pane-view.js.map +0 -1
  543. package/dist/components/molecules/mapping-set-field.d.ts +0 -34
  544. package/dist/components/molecules/mapping-set-field.d.ts.map +0 -1
  545. package/dist/components/molecules/mapping-set-field.js +0 -160
  546. package/dist/components/molecules/mapping-set-field.js.map +0 -1
  547. package/dist/components/molecules/mapping-set-pane-view.d.ts +0 -31
  548. package/dist/components/molecules/mapping-set-pane-view.d.ts.map +0 -1
  549. package/dist/components/molecules/mapping-set-pane-view.js +0 -96
  550. package/dist/components/molecules/mapping-set-pane-view.js.map +0 -1
  551. package/dist/components/molecules/mapping-tab-bar.d.ts +0 -15
  552. package/dist/components/molecules/mapping-tab-bar.d.ts.map +0 -1
  553. package/dist/components/molecules/mapping-tab-bar.js +0 -9
  554. package/dist/components/molecules/mapping-tab-bar.js.map +0 -1
  555. package/dist/components/molecules/mapping-tree-sidebar.d.ts +0 -59
  556. package/dist/components/molecules/mapping-tree-sidebar.d.ts.map +0 -1
  557. package/dist/components/molecules/mapping-tree-sidebar.js +0 -491
  558. package/dist/components/molecules/mapping-tree-sidebar.js.map +0 -1
  559. package/dist/components/molecules/mapping-type-grid.d.ts +0 -12
  560. package/dist/components/molecules/mapping-type-grid.d.ts.map +0 -1
  561. package/dist/components/molecules/mapping-type-grid.js +0 -107
  562. package/dist/components/molecules/mapping-type-grid.js.map +0 -1
  563. package/dist/components/molecules/mapping-type-selector.d.ts +0 -21
  564. package/dist/components/molecules/mapping-type-selector.d.ts.map +0 -1
  565. package/dist/components/molecules/mapping-type-selector.js +0 -38
  566. package/dist/components/molecules/mapping-type-selector.js.map +0 -1
  567. package/dist/components/molecules/mapping-validate-pane-view.d.ts +0 -19
  568. package/dist/components/molecules/mapping-validate-pane-view.d.ts.map +0 -1
  569. package/dist/components/molecules/mapping-validate-pane-view.js +0 -66
  570. package/dist/components/molecules/mapping-validate-pane-view.js.map +0 -1
  571. package/dist/components/molecules/mapping-value-config-pane-view.d.ts +0 -30
  572. package/dist/components/molecules/mapping-value-config-pane-view.d.ts.map +0 -1
  573. package/dist/components/molecules/mapping-value-config-pane-view.js +0 -105
  574. package/dist/components/molecules/mapping-value-config-pane-view.js.map +0 -1
  575. package/dist/components/molecules/mapping-value-pane-view.d.ts +0 -28
  576. package/dist/components/molecules/mapping-value-pane-view.d.ts.map +0 -1
  577. package/dist/components/molecules/mapping-value-pane-view.js +0 -40
  578. package/dist/components/molecules/mapping-value-pane-view.js.map +0 -1
  579. package/dist/components/molecules/mapping-value-type-pane-view.d.ts +0 -27
  580. package/dist/components/molecules/mapping-value-type-pane-view.d.ts.map +0 -1
  581. package/dist/components/molecules/mapping-value-type-pane-view.js +0 -253
  582. package/dist/components/molecules/mapping-value-type-pane-view.js.map +0 -1
  583. package/dist/components/molecules/options-pane.d.ts +0 -28
  584. package/dist/components/molecules/options-pane.d.ts.map +0 -1
  585. package/dist/components/molecules/options-pane.js +0 -80
  586. package/dist/components/molecules/options-pane.js.map +0 -1
  587. package/dist/components/molecules/preview.d.ts +0 -23
  588. package/dist/components/molecules/preview.d.ts.map +0 -1
  589. package/dist/components/molecules/preview.js +0 -232
  590. package/dist/components/molecules/preview.js.map +0 -1
  591. package/dist/components/molecules/preview.stories.d.ts +0 -23
  592. package/dist/components/molecules/preview.stories.d.ts.map +0 -1
  593. package/dist/components/molecules/preview.stories.js +0 -186
  594. package/dist/components/molecules/preview.stories.js.map +0 -1
  595. package/dist/components/molecules/property-suggestions.d.ts +0 -17
  596. package/dist/components/molecules/property-suggestions.d.ts.map +0 -1
  597. package/dist/components/molecules/property-suggestions.js +0 -56
  598. package/dist/components/molecules/property-suggestions.js.map +0 -1
  599. package/dist/components/molecules/property-table.d.ts +0 -7
  600. package/dist/components/molecules/property-table.d.ts.map +0 -1
  601. package/dist/components/molecules/property-table.js +0 -88
  602. package/dist/components/molecules/property-table.js.map +0 -1
  603. package/dist/components/molecules/property-table.stories.d.ts +0 -24
  604. package/dist/components/molecules/property-table.stories.d.ts.map +0 -1
  605. package/dist/components/molecules/property-table.stories.js +0 -86
  606. package/dist/components/molecules/property-table.stories.js.map +0 -1
  607. package/dist/components/molecules/settings-overview-pane.d.ts +0 -32
  608. package/dist/components/molecules/settings-overview-pane.d.ts.map +0 -1
  609. package/dist/components/molecules/settings-overview-pane.js +0 -85
  610. package/dist/components/molecules/settings-overview-pane.js.map +0 -1
  611. package/dist/components/molecules/split-button.d.ts +0 -25
  612. package/dist/components/molecules/split-button.d.ts.map +0 -1
  613. package/dist/components/molecules/split-button.js +0 -37
  614. package/dist/components/molecules/split-button.js.map +0 -1
  615. package/dist/components/molecules/split-button.stories.d.ts +0 -32
  616. package/dist/components/molecules/split-button.stories.d.ts.map +0 -1
  617. package/dist/components/molecules/split-button.stories.js +0 -88
  618. package/dist/components/molecules/split-button.stories.js.map +0 -1
  619. package/dist/components/molecules/validation-overview-pane.d.ts +0 -27
  620. package/dist/components/molecules/validation-overview-pane.d.ts.map +0 -1
  621. package/dist/components/molecules/validation-overview-pane.js +0 -50
  622. package/dist/components/molecules/validation-overview-pane.js.map +0 -1
  623. package/dist/components/organisms/browser-box.d.ts +0 -31
  624. package/dist/components/organisms/browser-box.d.ts.map +0 -1
  625. package/dist/components/organisms/browser-box.js +0 -80
  626. package/dist/components/organisms/browser-box.js.map +0 -1
  627. package/dist/components/organisms/browser-box.stories.d.ts +0 -26
  628. package/dist/components/organisms/browser-box.stories.d.ts.map +0 -1
  629. package/dist/components/organisms/browser-box.stories.js +0 -102
  630. package/dist/components/organisms/browser-box.stories.js.map +0 -1
  631. package/dist/components/organisms/collector-box.d.ts +0 -24
  632. package/dist/components/organisms/collector-box.d.ts.map +0 -1
  633. package/dist/components/organisms/collector-box.js +0 -56
  634. package/dist/components/organisms/collector-box.js.map +0 -1
  635. package/dist/components/organisms/collector-box.stories.d.ts +0 -22
  636. package/dist/components/organisms/collector-box.stories.d.ts.map +0 -1
  637. package/dist/components/organisms/collector-box.stories.js +0 -59
  638. package/dist/components/organisms/collector-box.stories.js.map +0 -1
  639. package/dist/components/organisms/config-editor/config-editor-box.d.ts +0 -35
  640. package/dist/components/organisms/config-editor/config-editor-box.d.ts.map +0 -1
  641. package/dist/components/organisms/config-editor/config-editor-box.js +0 -50
  642. package/dist/components/organisms/config-editor/config-editor-box.js.map +0 -1
  643. package/dist/components/organisms/config-editor/config-editor-tabs.d.ts +0 -52
  644. package/dist/components/organisms/config-editor/config-editor-tabs.d.ts.map +0 -1
  645. package/dist/components/organisms/config-editor/config-editor-tabs.js +0 -127
  646. package/dist/components/organisms/config-editor/config-editor-tabs.js.map +0 -1
  647. package/dist/components/organisms/config-editor/config-editor.d.ts +0 -47
  648. package/dist/components/organisms/config-editor/config-editor.d.ts.map +0 -1
  649. package/dist/components/organisms/config-editor/config-editor.js +0 -50
  650. package/dist/components/organisms/config-editor/config-editor.js.map +0 -1
  651. package/dist/components/organisms/config-editor/config-editor.stories.d.ts +0 -25
  652. package/dist/components/organisms/config-editor/config-editor.stories.d.ts.map +0 -1
  653. package/dist/components/organisms/config-editor/config-editor.stories.js +0 -77
  654. package/dist/components/organisms/config-editor/config-editor.stories.js.map +0 -1
  655. package/dist/components/organisms/config-editor/index.d.ts +0 -22
  656. package/dist/components/organisms/config-editor/index.d.ts.map +0 -1
  657. package/dist/components/organisms/config-editor/index.js +0 -20
  658. package/dist/components/organisms/config-editor/index.js.map +0 -1
  659. package/dist/components/organisms/live-code.d.ts +0 -22
  660. package/dist/components/organisms/live-code.d.ts.map +0 -1
  661. package/dist/components/organisms/live-code.js +0 -50
  662. package/dist/components/organisms/live-code.js.map +0 -1
  663. package/dist/components/organisms/live-code.stories.d.ts +0 -24
  664. package/dist/components/organisms/live-code.stories.d.ts.map +0 -1
  665. package/dist/components/organisms/live-code.stories.js +0 -55
  666. package/dist/components/organisms/live-code.stories.js.map +0 -1
  667. package/dist/components/ui/button.d.ts +0 -4
  668. package/dist/components/ui/button.d.ts.map +0 -1
  669. package/dist/components/ui/button.js +0 -6
  670. package/dist/components/ui/button.js.map +0 -1
  671. package/dist/components/ui/icon.d.ts +0 -5
  672. package/dist/components/ui/icon.d.ts.map +0 -1
  673. package/dist/components/ui/icon.js +0 -5
  674. package/dist/components/ui/icon.js.map +0 -1
  675. package/dist/components/ui/label.d.ts +0 -5
  676. package/dist/components/ui/label.d.ts.map +0 -1
  677. package/dist/components/ui/label.js +0 -5
  678. package/dist/components/ui/label.js.map +0 -1
  679. package/dist/contexts/GridHeightContext.d.ts +0 -11
  680. package/dist/contexts/GridHeightContext.d.ts.map +0 -1
  681. package/dist/contexts/GridHeightContext.js +0 -14
  682. package/dist/contexts/GridHeightContext.js.map +0 -1
  683. package/dist/helpers/capture.d.ts +0 -83
  684. package/dist/helpers/capture.d.ts.map +0 -1
  685. package/dist/helpers/capture.js +0 -125
  686. package/dist/helpers/capture.js.map +0 -1
  687. package/dist/helpers/destinations.d.ts +0 -21
  688. package/dist/helpers/destinations.d.ts.map +0 -1
  689. package/dist/helpers/destinations.js +0 -46
  690. package/dist/helpers/destinations.js.map +0 -1
  691. package/dist/hooks/useDropdown.d.ts +0 -34
  692. package/dist/hooks/useDropdown.d.ts.map +0 -1
  693. package/dist/hooks/useDropdown.js +0 -66
  694. package/dist/hooks/useDropdown.js.map +0 -1
  695. package/dist/hooks/useMappingNavigation.d.ts +0 -62
  696. package/dist/hooks/useMappingNavigation.d.ts.map +0 -1
  697. package/dist/hooks/useMappingNavigation.js +0 -339
  698. package/dist/hooks/useMappingNavigation.js.map +0 -1
  699. package/dist/hooks/useMappingState.d.ts +0 -56
  700. package/dist/hooks/useMappingState.d.ts.map +0 -1
  701. package/dist/hooks/useMappingState.js +0 -142
  702. package/dist/hooks/useMappingState.js.map +0 -1
  703. package/dist/hooks/useMonacoHeight.d.ts +0 -31
  704. package/dist/hooks/useMonacoHeight.d.ts.map +0 -1
  705. package/dist/hooks/useMonacoHeight.js +0 -83
  706. package/dist/hooks/useMonacoHeight.js.map +0 -1
  707. package/dist/hooks/useTreeState.d.ts +0 -32
  708. package/dist/hooks/useTreeState.d.ts.map +0 -1
  709. package/dist/hooks/useTreeState.js +0 -94
  710. package/dist/hooks/useTreeState.js.map +0 -1
  711. package/dist/index.d.ts.map +0 -1
  712. package/dist/lib/utils.d.ts +0 -7
  713. package/dist/lib/utils.d.ts.map +0 -1
  714. package/dist/lib/utils.js +0 -10
  715. package/dist/lib/utils.js.map +0 -1
  716. package/dist/monaco-types-QVKK6UKF.mjs +0 -34
  717. package/dist/monaco-types-QVKK6UKF.mjs.map +0 -1
  718. package/dist/providers/MDXProvider.d.ts +0 -40
  719. package/dist/providers/MDXProvider.d.ts.map +0 -1
  720. package/dist/providers/MDXProvider.js +0 -57
  721. package/dist/providers/MDXProvider.js.map +0 -1
  722. package/dist/schemas/config-structures/destination-config.d.ts +0 -27
  723. package/dist/schemas/config-structures/destination-config.d.ts.map +0 -1
  724. package/dist/schemas/config-structures/destination-config.js +0 -104
  725. package/dist/schemas/config-structures/destination-config.js.map +0 -1
  726. package/dist/schemas/config-structures/index.d.ts +0 -17
  727. package/dist/schemas/config-structures/index.d.ts.map +0 -1
  728. package/dist/schemas/config-structures/index.js +0 -17
  729. package/dist/schemas/config-structures/index.js.map +0 -1
  730. package/dist/schemas/config-structures/mapping-rule.d.ts +0 -17
  731. package/dist/schemas/config-structures/mapping-rule.d.ts.map +0 -1
  732. package/dist/schemas/config-structures/mapping-rule.js +0 -81
  733. package/dist/schemas/config-structures/mapping-rule.js.map +0 -1
  734. package/dist/schemas/config-structures/types.d.ts +0 -62
  735. package/dist/schemas/config-structures/types.d.ts.map +0 -1
  736. package/dist/schemas/config-structures/types.js +0 -2
  737. package/dist/schemas/config-structures/types.js.map +0 -1
  738. package/dist/schemas/mapping-rule-schema.d.ts +0 -25
  739. package/dist/schemas/mapping-rule-schema.d.ts.map +0 -1
  740. package/dist/schemas/mapping-rule-schema.js +0 -86
  741. package/dist/schemas/mapping-rule-schema.js.map +0 -1
  742. package/dist/schemas/rule-properties-schema.d.ts +0 -42
  743. package/dist/schemas/rule-properties-schema.d.ts.map +0 -1
  744. package/dist/schemas/rule-properties-schema.js +0 -79
  745. package/dist/schemas/rule-properties-schema.js.map +0 -1
  746. package/dist/schemas/value-config-schema.d.ts +0 -36
  747. package/dist/schemas/value-config-schema.d.ts.map +0 -1
  748. package/dist/schemas/value-config-schema.js +0 -227
  749. package/dist/schemas/value-config-schema.js.map +0 -1
  750. package/dist/themes/index.d.ts +0 -23
  751. package/dist/themes/index.d.ts.map +0 -1
  752. package/dist/themes/index.js +0 -29
  753. package/dist/themes/index.js.map +0 -1
  754. package/dist/themes/lighthouse.d.ts +0 -26
  755. package/dist/themes/lighthouse.d.ts.map +0 -1
  756. package/dist/themes/lighthouse.js +0 -230
  757. package/dist/themes/lighthouse.js.map +0 -1
  758. package/dist/themes/palenight.d.ts +0 -31
  759. package/dist/themes/palenight.d.ts.map +0 -1
  760. package/dist/themes/palenight.js +0 -236
  761. package/dist/themes/palenight.js.map +0 -1
  762. package/dist/themes/types.d.ts +0 -103
  763. package/dist/themes/types.d.ts.map +0 -1
  764. package/dist/themes/types.js +0 -8
  765. package/dist/themes/types.js.map +0 -1
  766. package/dist/types/intellisense.d.ts +0 -31
  767. package/dist/types/intellisense.d.ts.map +0 -1
  768. package/dist/types/intellisense.js +0 -2
  769. package/dist/types/intellisense.js.map +0 -1
  770. package/dist/types/schemas.d.ts +0 -29
  771. package/dist/types/schemas.d.ts.map +0 -1
  772. package/dist/types/schemas.js +0 -2
  773. package/dist/types/schemas.js.map +0 -1
  774. package/dist/utils/clean-form-data.d.ts +0 -26
  775. package/dist/utils/clean-form-data.d.ts.map +0 -1
  776. package/dist/utils/clean-form-data.js +0 -76
  777. package/dist/utils/clean-form-data.js.map +0 -1
  778. package/dist/utils/code-normalizer.d.ts +0 -11
  779. package/dist/utils/code-normalizer.d.ts.map +0 -1
  780. package/dist/utils/code-normalizer.js +0 -21
  781. package/dist/utils/code-normalizer.js.map +0 -1
  782. package/dist/utils/config-validator.d.ts +0 -12
  783. package/dist/utils/config-validator.d.ts.map +0 -1
  784. package/dist/utils/config-validator.js +0 -10
  785. package/dist/utils/config-validator.js.map +0 -1
  786. package/dist/utils/consent-scanner.d.ts +0 -19
  787. package/dist/utils/consent-scanner.d.ts.map +0 -1
  788. package/dist/utils/consent-scanner.js +0 -115
  789. package/dist/utils/consent-scanner.js.map +0 -1
  790. package/dist/utils/format-code.d.ts +0 -9
  791. package/dist/utils/format-code.d.ts.map +0 -1
  792. package/dist/utils/format-code.js +0 -77
  793. package/dist/utils/format-code.js.map +0 -1
  794. package/dist/utils/generic-tree-builder.d.ts +0 -37
  795. package/dist/utils/generic-tree-builder.d.ts.map +0 -1
  796. package/dist/utils/generic-tree-builder.js +0 -225
  797. package/dist/utils/generic-tree-builder.js.map +0 -1
  798. package/dist/utils/mapping-path.d.ts +0 -146
  799. package/dist/utils/mapping-path.d.ts.map +0 -1
  800. package/dist/utils/mapping-path.js +0 -271
  801. package/dist/utils/mapping-path.js.map +0 -1
  802. package/dist/utils/monaco-context-types.d.ts +0 -39
  803. package/dist/utils/monaco-context-types.d.ts.map +0 -1
  804. package/dist/utils/monaco-context-types.js +0 -426
  805. package/dist/utils/monaco-context-types.js.map +0 -1
  806. package/dist/utils/monaco-decorators.d.ts +0 -17
  807. package/dist/utils/monaco-decorators.d.ts.map +0 -1
  808. package/dist/utils/monaco-decorators.js +0 -81
  809. package/dist/utils/monaco-decorators.js.map +0 -1
  810. package/dist/utils/monaco-formatters.d.ts +0 -16
  811. package/dist/utils/monaco-formatters.d.ts.map +0 -1
  812. package/dist/utils/monaco-formatters.js +0 -139
  813. package/dist/utils/monaco-formatters.js.map +0 -1
  814. package/dist/utils/monaco-intellisense-flow-extractor.d.ts +0 -13
  815. package/dist/utils/monaco-intellisense-flow-extractor.d.ts.map +0 -1
  816. package/dist/utils/monaco-intellisense-flow-extractor.js +0 -161
  817. package/dist/utils/monaco-intellisense-flow-extractor.js.map +0 -1
  818. package/dist/utils/monaco-json-schema.d.ts +0 -45
  819. package/dist/utils/monaco-json-schema.d.ts.map +0 -1
  820. package/dist/utils/monaco-json-schema.js +0 -90
  821. package/dist/utils/monaco-json-schema.js.map +0 -1
  822. package/dist/utils/monaco-schema-contract.d.ts +0 -8
  823. package/dist/utils/monaco-schema-contract.d.ts.map +0 -1
  824. package/dist/utils/monaco-schema-contract.js +0 -73
  825. package/dist/utils/monaco-schema-contract.js.map +0 -1
  826. package/dist/utils/monaco-schema-enrichment.d.ts +0 -26
  827. package/dist/utils/monaco-schema-enrichment.d.ts.map +0 -1
  828. package/dist/utils/monaco-schema-enrichment.js +0 -31
  829. package/dist/utils/monaco-schema-enrichment.js.map +0 -1
  830. package/dist/utils/monaco-schema-flow-setup.d.ts +0 -10
  831. package/dist/utils/monaco-schema-flow-setup.d.ts.map +0 -1
  832. package/dist/utils/monaco-schema-flow-setup.js +0 -201
  833. package/dist/utils/monaco-schema-flow-setup.js.map +0 -1
  834. package/dist/utils/monaco-schema-variables.d.ts +0 -4
  835. package/dist/utils/monaco-schema-variables.d.ts.map +0 -1
  836. package/dist/utils/monaco-schema-variables.js +0 -26
  837. package/dist/utils/monaco-schema-variables.js.map +0 -1
  838. package/dist/utils/monaco-types.d.ts +0 -174
  839. package/dist/utils/monaco-types.d.ts.map +0 -1
  840. package/dist/utils/monaco-types.js +0 -378
  841. package/dist/utils/monaco-types.js.map +0 -1
  842. package/dist/utils/monaco-walkeros-completions.d.ts +0 -15
  843. package/dist/utils/monaco-walkeros-completions.d.ts.map +0 -1
  844. package/dist/utils/monaco-walkeros-completions.js +0 -65
  845. package/dist/utils/monaco-walkeros-completions.js.map +0 -1
  846. package/dist/utils/monaco-walkeros-decorations.d.ts +0 -29
  847. package/dist/utils/monaco-walkeros-decorations.d.ts.map +0 -1
  848. package/dist/utils/monaco-walkeros-decorations.js +0 -87
  849. package/dist/utils/monaco-walkeros-decorations.js.map +0 -1
  850. package/dist/utils/monaco-walkeros-markers.d.ts +0 -13
  851. package/dist/utils/monaco-walkeros-markers.d.ts.map +0 -1
  852. package/dist/utils/monaco-walkeros-markers.js +0 -69
  853. package/dist/utils/monaco-walkeros-markers.js.map +0 -1
  854. package/dist/utils/monaco-walkeros-providers.d.ts +0 -19
  855. package/dist/utils/monaco-walkeros-providers.d.ts.map +0 -1
  856. package/dist/utils/monaco-walkeros-providers.js +0 -229
  857. package/dist/utils/monaco-walkeros-providers.js.map +0 -1
  858. package/dist/utils/path-analyzer.d.ts +0 -88
  859. package/dist/utils/path-analyzer.d.ts.map +0 -1
  860. package/dist/utils/path-analyzer.js +0 -215
  861. package/dist/utils/path-analyzer.js.map +0 -1
  862. package/dist/utils/schema-validation.d.ts +0 -36
  863. package/dist/utils/schema-validation.d.ts.map +0 -1
  864. package/dist/utils/schema-validation.js +0 -136
  865. package/dist/utils/schema-validation.js.map +0 -1
  866. package/dist/utils/type-detector.d.ts +0 -35
  867. package/dist/utils/type-detector.d.ts.map +0 -1
  868. package/dist/utils/type-detector.js +0 -241
  869. package/dist/utils/type-detector.js.map +0 -1
  870. package/dist/utils/value-display-formatter.d.ts +0 -31
  871. package/dist/utils/value-display-formatter.d.ts.map +0 -1
  872. package/dist/utils/value-display-formatter.js +0 -110
  873. package/dist/utils/value-display-formatter.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/utils/monaco-context-types.ts","walkeros-types:virtual:walkeros-core-types","../src/utils/monaco-types.ts","../src/index.ts","../src/components/demos/DestinationDemo.tsx","../src/components/molecules/code-box.tsx","../src/components/atoms/box.tsx","../src/components/atoms/header.tsx","../src/contexts/GridHeightContext.tsx","../src/components/atoms/code.tsx","../src/themes/palenight.ts","../src/themes/lighthouse.ts","../src/themes/index.ts","../src/utils/monaco-decorators.ts","../src/utils/monaco-walkeros-decorations.ts","../src/utils/monaco-walkeros-completions.ts","../src/utils/monaco-walkeros-providers.ts","../src/utils/monaco-formatters.ts","../src/utils/monaco-json-schema.ts","../src/hooks/useMonacoHeight.ts","../src/components/atoms/grid.tsx","../src/helpers/capture.ts","../src/components/demos/DestinationInitDemo.tsx","../src/components/demos/PromotionPlayground.tsx","../src/components/molecules/preview.tsx","../src/components/atoms/preview-footer.tsx","../src/components/organisms/browser-box.tsx","../src/components/atoms/button.tsx","../src/components/atoms/button-group.tsx","../src/helpers/destinations.ts","../src/components/organisms/live-code.tsx","../src/utils/format-code.ts","../src/components/organisms/collector-box.tsx","../../../node_modules/@iconify/react/dist/iconify.js","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/tailwind-merge/src/lib/utils.ts","../../../node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/lib/utils.ts","../src/components/molecules/architecture-flow/ArchitectureFlow.tsx","../src/components/molecules/code-snippet.tsx","../src/components/molecules/flow-map/FlowMap.tsx","../src/components/molecules/property-table.tsx","../src/components/molecules/dropdown.tsx","../src/components/atoms/footer.tsx","../src/components/atoms/button-link.tsx","../src/components/atoms/spinner.tsx","../src/components/atoms/icons/icons.tsx","../../../node_modules/@mdx-js/react/lib/index.js","../src/components/atoms/mdx-code.tsx","../src/providers/MDXProvider.tsx","../src/hooks/useDropdown.ts","../src/utils/monaco-schema-enrichment.ts","../src/utils/monaco-schema-flow-setup.ts","../src/utils/monaco-schema-contract.ts","../src/utils/monaco-schema-variables.ts","../src/utils/monaco-walkeros-markers.ts","../src/utils/monaco-intellisense-flow-extractor.ts"],"sourcesContent":["/**\n * Monaco Editor Context Type Templates\n *\n * Hand-crafted global namespace declarations for function contexts.\n * These provide full TypeScript IntelliSense in Monaco Editor without\n * requiring import statements.\n *\n * Extracted from @walkeros/core types and simplified for editor use.\n */\n\n/**\n * Type template for 'fn' context (transformation functions)\n *\n * Provides types for:\n * - value: WalkerOS.DeepPartialEvent | unknown\n * - mapping: Mapping.Value\n * - options: Mapping.Options\n */\nexport const FN_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Version\n interface Version extends Properties {\n source: string;\n tagging: number;\n }\n\n // Source\n type SourceType = 'web' | 'server' | 'app' | 'other' | string;\n\n interface Source extends Properties {\n type: SourceType;\n id: string;\n previous_id: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested: Entities;\n context: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n group: string;\n count: number;\n version: Version;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n type Values = Array<Value>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n\n type Map = {\n [key: string]: Value;\n };\n\n interface Options {\n consent?: WalkerOS.Consent;\n collector?: Collector.Instance;\n props?: unknown;\n }\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping?: Value,\n collector?: Collector.Instance\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping: Value,\n options: Options\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (value?: unknown) => WalkerOS.PromiseOrValue<boolean>;\n}\n\n// Collector Types (minimal for fn context)\ndeclare namespace Collector {\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: any;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n globals: WalkerOS.Properties;\n group: string;\n queue: any[];\n round: number;\n session: any;\n timing: number;\n user: WalkerOS.User;\n version: string;\n [key: string]: any;\n }\n}\n\n// Parameter declarations for fn context\ndeclare const value: WalkerOS.DeepPartialEvent | unknown;\ndeclare const mapping: Mapping.Value;\ndeclare const options: Mapping.Options;\n`;\n\n/**\n * Type template for 'condition' context (conditional functions)\n *\n * Provides types for:\n * - value: WalkerOS.DeepPartialEvent | unknown\n * - mapping: Mapping.Value\n * - collector: Collector.Instance | undefined\n */\nexport const CONDITION_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Version\n interface Version extends Properties {\n source: string;\n tagging: number;\n }\n\n // Source\n type SourceType = 'web' | 'server' | 'app' | 'other' | string;\n\n interface Source extends Properties {\n type: SourceType;\n id: string;\n previous_id: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested: Entities;\n context: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n group: string;\n count: number;\n version: Version;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n\n type Map = {\n [key: string]: Value;\n };\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping?: Value,\n collector?: Collector.Instance\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping: Value,\n options: any\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (value?: unknown) => WalkerOS.PromiseOrValue<boolean>;\n}\n\n// Collector Types (full interface for condition context)\ndeclare namespace Collector {\n interface SessionData extends WalkerOS.Properties {\n isStart: boolean;\n storage: boolean;\n id?: string;\n start?: number;\n marketing?: true;\n updated?: number;\n isNew?: boolean;\n device?: string;\n count?: number;\n runs?: number;\n }\n\n interface Config {\n run?: boolean;\n tagging: number;\n globalsStatic: WalkerOS.Properties;\n sessionStatic: Partial<SessionData>;\n verbose: boolean;\n onError?: any;\n onLog?: any;\n }\n\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: Config;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n sources: any;\n destinations: any;\n globals: WalkerOS.Properties;\n group: string;\n hooks: any;\n on: any;\n queue: any[];\n round: number;\n session: undefined | SessionData;\n timing: number;\n user: WalkerOS.User;\n version: string;\n }\n}\n\n// Parameter declarations for condition context\ndeclare const value: WalkerOS.DeepPartialEvent | unknown;\ndeclare const mapping: Mapping.Value;\ndeclare const collector: Collector.Instance | undefined;\n`;\n\n/**\n * Type template for 'validate' context (validation functions)\n *\n * Provides types for:\n * - value: unknown\n */\nexport const VALIDATE_CONTEXT_TYPES = `\n// Parameter declaration for validate context\ndeclare const value: unknown;\n`;\n\n/**\n * Get the type template for a specific function context\n */\nexport function getContextTypes(\n contextType: 'fn' | 'condition' | 'validate',\n): string {\n switch (contextType) {\n case 'fn':\n return FN_CONTEXT_TYPES;\n case 'condition':\n return CONDITION_CONTEXT_TYPES;\n case 'validate':\n return VALIDATE_CONTEXT_TYPES;\n default:\n return '';\n }\n}\n","export default \"/**\\n * Options for responding to an HTTP request.\\n * Same interface for web and server — sources implement the handler.\\n */\\ninterface RespondOptions {\\n /** Response body. Objects are JSON-serialized by source. */\\n body?: unknown;\\n /** HTTP status code (default: 200). Server-only, ignored by web sources. */\\n status?: number;\\n /** HTTP response headers. Server-only, ignored by web sources. */\\n headers?: Record<string, string>;\\n}\\n/**\\n * Standardized response function available on env for every step.\\n * Idempotent: first call wins, subsequent calls are no-ops.\\n * Created by sources via createRespond(), consumed by any step.\\n */\\ntype RespondFn = (options?: RespondOptions) => void;\\n/**\\n * Creates an idempotent respond function.\\n * The sender callback is source-specific (Express wraps res, Fetch wraps Response, etc.).\\n *\\n * @param sender - Platform-specific function that actually sends the response\\n * @returns Idempotent respond function (first call wins)\\n */\\ndeclare function createRespond(sender: (options: RespondOptions) => void): RespondFn;\\n\\n/**\\n * Core collector configuration interface\\n */\\ninterface Config$7 {\\n /** Whether to run collector automatically */\\n run?: boolean;\\n /** Version for event tagging */\\n tagging: number;\\n /** Static global properties even on a new run */\\n globalsStatic: Properties;\\n /** Static session data even on a new run */\\n sessionStatic: Partial<SessionData>;\\n /** Logger configuration */\\n logger?: Config$4;\\n}\\n/**\\n * Initialization configuration that extends Config with initial state\\n */\\ninterface InitConfig extends Partial<Config$7> {\\n /** Initial consent state */\\n consent?: Consent;\\n /** Initial user data */\\n user?: User;\\n /** Initial global properties */\\n globals?: Properties;\\n /** Source configurations */\\n sources?: InitSources;\\n /** Destination configurations */\\n destinations?: InitDestinations;\\n /** Transformer configurations */\\n transformers?: InitTransformers;\\n /** Initial custom properties */\\n custom?: Properties;\\n}\\ninterface SessionData extends Properties {\\n isStart: boolean;\\n storage: boolean;\\n id?: string;\\n start?: number;\\n marketing?: true;\\n updated?: number;\\n isNew?: boolean;\\n device?: string;\\n count?: number;\\n runs?: number;\\n}\\ninterface Status {\\n startedAt: number;\\n in: number;\\n out: number;\\n failed: number;\\n sources: Record<string, SourceStatus>;\\n destinations: Record<string, DestinationStatus>;\\n}\\ninterface SourceStatus {\\n count: number;\\n lastAt?: number;\\n duration: number;\\n}\\ninterface DestinationStatus {\\n count: number;\\n failed: number;\\n lastAt?: number;\\n duration: number;\\n}\\ninterface Sources {\\n [id: string]: Instance;\\n}\\ninterface Destinations$1 {\\n [id: string]: Instance$3;\\n}\\ninterface Transformers$1 {\\n [id: string]: Instance$1;\\n}\\ntype CommandType = 'action' | 'config' | 'consent' | 'context' | 'destination' | 'elb' | 'globals' | 'hook' | 'init' | 'link' | 'run' | 'user' | 'walker' | string;\\n/**\\n * Options passed to collector.push() from sources.\\n * NOT a Context - just push metadata.\\n */\\ninterface PushOptions {\\n id?: string;\\n ingest?: unknown;\\n respond?: RespondFn;\\n mapping?: Config$3;\\n preChain?: string[];\\n}\\n/**\\n * Push function signature - handles events only\\n */\\ninterface PushFn$1 {\\n (event: DeepPartialEvent, options?: PushOptions): Promise<PushResult>;\\n}\\n/**\\n * Command function signature - handles walker commands only\\n */\\ninterface CommandFn {\\n (command: 'config', config: Partial<Config$7>): Promise<PushResult>;\\n (command: 'consent', consent: Consent): Promise<PushResult>;\\n <T extends Types$3>(command: 'destination', destination: Init$2<T> | Instance$3<T>, config?: Config$6<T>): Promise<PushResult>;\\n <K extends keyof Functions>(command: 'hook', name: K, hookFn: Functions[K]): Promise<PushResult>;\\n (command: 'on', type: Types$2, rules: SingleOrArray<Options>): Promise<PushResult>;\\n (command: 'user', user: User): Promise<PushResult>;\\n (command: 'run', runState?: {\\n consent?: Consent;\\n user?: User;\\n globals?: Properties;\\n custom?: Properties;\\n }): Promise<PushResult>;\\n (command: string, data?: unknown, options?: unknown): Promise<PushResult>;\\n}\\ninterface Instance$4 {\\n push: PushFn$1;\\n command: CommandFn;\\n allowed: boolean;\\n config: Config$7;\\n consent: Consent;\\n count: number;\\n custom: Properties;\\n sources: Sources;\\n destinations: Destinations$1;\\n transformers: Transformers$1;\\n globals: Properties;\\n group: string;\\n hooks: Functions;\\n logger: Instance$2;\\n on: OnConfig;\\n queue: Events;\\n round: number;\\n session: undefined | SessionData;\\n status: Status;\\n timing: number;\\n user: User;\\n version: string;\\n pending: {\\n sources: InitSources;\\n destinations: InitDestinations;\\n };\\n}\\n\\ntype collector_CommandFn = CommandFn;\\ntype collector_CommandType = CommandType;\\ntype collector_DestinationStatus = DestinationStatus;\\ntype collector_InitConfig = InitConfig;\\ntype collector_PushOptions = PushOptions;\\ntype collector_SessionData = SessionData;\\ntype collector_SourceStatus = SourceStatus;\\ntype collector_Sources = Sources;\\ntype collector_Status = Status;\\ndeclare namespace collector {\\n export type { collector_CommandFn as CommandFn, collector_CommandType as CommandType, Config$7 as Config, collector_DestinationStatus as DestinationStatus, Destinations$1 as Destinations, collector_InitConfig as InitConfig, Instance$4 as Instance, PushFn$1 as PushFn, collector_PushOptions as PushOptions, collector_SessionData as SessionData, collector_SourceStatus as SourceStatus, collector_Sources as Sources, collector_Status as Status, Transformers$1 as Transformers };\\n}\\n\\n/**\\n * Base context interface for walkerOS stages.\\n * Sources, Transformers, and Destinations extend this.\\n */\\ninterface Base<C = unknown, E = unknown> {\\n collector: Instance$4;\\n logger: Instance$2;\\n config: C;\\n env: E;\\n}\\n\\ntype context_Base<C = unknown, E = unknown> = Base<C, E>;\\ndeclare namespace context {\\n export type { context_Base as Base };\\n}\\n\\ninterface Contract$1 {\\n version: string;\\n globals: Globals;\\n context: Contexts;\\n entities: Entities$1;\\n}\\ninterface Globals {\\n [name: string]: Global;\\n}\\ninterface Contexts {\\n [name: string]: Context$5;\\n}\\ninterface Entities$1 {\\n [name: string]: Entity$1;\\n}\\ninterface Properties$1 {\\n [name: string]: Property$1;\\n}\\ninterface Global extends Property$1 {\\n}\\ninterface Context$5 extends Property$1 {\\n}\\ninterface Entity$1 {\\n data: Properties$1;\\n actions: Actions;\\n}\\ninterface Actions {\\n [name: string]: Action;\\n}\\ninterface Action {\\n trigger?: Trigger;\\n}\\ntype Trigger = string;\\ninterface Property$1 {\\n type?: PropertyType$1;\\n required?: boolean;\\n values?: PropertyValues;\\n}\\ntype PropertyType$1 = 'boolean' | 'string' | 'number';\\ntype PropertyValues = Array<Property>;\\n\\ntype data_Action = Action;\\ntype data_Actions = Actions;\\ntype data_Contexts = Contexts;\\ntype data_Global = Global;\\ntype data_Globals = Globals;\\ntype data_PropertyValues = PropertyValues;\\ntype data_Trigger = Trigger;\\ndeclare namespace data {\\n export type { data_Action as Action, data_Actions as Actions, Context$5 as Context, data_Contexts as Contexts, Contract$1 as Contract, Entities$1 as Entities, Entity$1 as Entity, data_Global as Global, data_Globals as Globals, Properties$1 as Properties, Property$1 as Property, PropertyType$1 as PropertyType, data_PropertyValues as PropertyValues, data_Trigger as Trigger };\\n}\\n\\n/**\\n * Context provided to the destroy() lifecycle method.\\n *\\n * A subset of the init context — config, env, logger, and id.\\n * Does NOT include collector or event data. Destroy should only\\n * clean up resources, not interact with the event pipeline.\\n */\\ninterface DestroyContext<C = unknown, E = unknown> {\\n /** Step instance ID. */\\n id: string;\\n /** Step configuration (contains settings with SDK clients, etc.). */\\n config: C;\\n /** Runtime environment/dependencies (DB clients, auth clients, etc.). */\\n env: E;\\n /** Scoped logger for this step instance. */\\n logger: Instance$2;\\n}\\n/**\\n * Destroy function signature for step lifecycle cleanup.\\n *\\n * Implementations should be idempotent — calling destroy() twice must not throw.\\n * Used for closing connections, clearing timers, releasing SDK clients.\\n */\\ntype DestroyFn<C = unknown, E = unknown> = (context: DestroyContext<C, E>) => PromiseOrValue<void>;\\n\\ntype lifecycle_DestroyContext<C = unknown, E = unknown> = DestroyContext<C, E>;\\ntype lifecycle_DestroyFn<C = unknown, E = unknown> = DestroyFn<C, E>;\\ndeclare namespace lifecycle {\\n export type { lifecycle_DestroyContext as DestroyContext, lifecycle_DestroyFn as DestroyFn };\\n}\\n\\n/**\\n * Base environment requirements interface for walkerOS destinations\\n *\\n * This defines the core interface that destinations can use to declare\\n * their runtime environment requirements. Platform-specific extensions\\n * should extend this interface.\\n */\\ninterface BaseEnv$2 {\\n /**\\n * Generic global properties that destinations may require\\n * Platform-specific implementations can extend this interface\\n */\\n [key: string]: unknown;\\n}\\n/**\\n * Type bundle for destination generics.\\n * Groups Settings, InitSettings, Mapping, and Env into a single type parameter.\\n */\\ninterface Types$3<S = unknown, M = unknown, E = BaseEnv$2, I = S> {\\n settings: S;\\n initSettings: I;\\n mapping: M;\\n env: E;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access\\n */\\ntype TypesGeneric$2 = {\\n settings: any;\\n initSettings: any;\\n mapping: any;\\n env: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle\\n */\\ntype Settings$2<T extends TypesGeneric$2 = Types$3> = T['settings'];\\ntype InitSettings$2<T extends TypesGeneric$2 = Types$3> = T['initSettings'];\\ntype Mapping$1<T extends TypesGeneric$2 = Types$3> = T['mapping'];\\ntype Env$2<T extends TypesGeneric$2 = Types$3> = T['env'];\\n/**\\n * Inference helper: Extract Types from Instance\\n */\\ntype TypesOf$2<I> = I extends Instance$3<infer T> ? T : never;\\ninterface Instance$3<T extends TypesGeneric$2 = Types$3> {\\n config: Config$6<T>;\\n queuePush?: Events;\\n queueOn?: Array<{\\n type: Types$2;\\n data?: unknown;\\n }>;\\n dlq?: DLQ;\\n batches?: BatchRegistry<Mapping$1<T>>;\\n type?: string;\\n env?: Env$2<T>;\\n init?: InitFn$1<T>;\\n push: PushFn<T>;\\n pushBatch?: PushBatchFn<T>;\\n on?: OnFn;\\n destroy?: DestroyFn<Config$6<T>, Env$2<T>>;\\n}\\ninterface Config$6<T extends TypesGeneric$2 = Types$3> {\\n /** Required consent states to push events; queues events when not granted. */\\n consent?: Consent;\\n /** Implementation-specific configuration passed to the init function. */\\n settings?: InitSettings$2<T>;\\n /** Global data transformation applied to all events; result passed as context.data to push. */\\n data?: Value | Values;\\n /** Runtime dependencies merged from code and config env; extensible per destination. */\\n env?: Env$2<T>;\\n /** Destination identifier; auto-generated if not provided. */\\n id?: string;\\n /** Whether the destination has been initialized; prevents re-initialization. */\\n init?: boolean;\\n /** Whether to load external scripts (e.g., gtag.js); destination-specific behavior. */\\n loadScript?: boolean;\\n /** Logger configuration (level, handler) to override the collector's defaults. */\\n logger?: Config$4;\\n /** Entity-action rules to filter, rename, transform, and batch events for this destination. */\\n mapping?: Rules<Rule<Mapping$1<T>>>;\\n /** Pre-processing rules applied to all events before mapping; modifies events in-place. */\\n policy?: Policy$1;\\n /** Whether to queue events when consent is not granted; defaults to true. */\\n queue?: boolean;\\n /** Defer destination initialization until these collector events fire (e.g., `['consent']`). */\\n require?: string[];\\n /** Transformer chain to run after collector processing but before this destination. */\\n before?: string | string[];\\n}\\ntype PartialConfig$1<T extends TypesGeneric$2 = Types$3> = Config$6<Types$3<Partial<Settings$2<T>> | Settings$2<T>, Partial<Mapping$1<T>> | Mapping$1<T>, Env$2<T>>>;\\ninterface Policy$1 {\\n [key: string]: Value;\\n}\\ntype Code<T extends TypesGeneric$2 = Types$3> = Instance$3<T>;\\ntype Init$2<T extends TypesGeneric$2 = Types$3> = {\\n code: Code<T>;\\n config?: Partial<Config$6<T>>;\\n env?: Partial<Env$2<T>>;\\n before?: string | string[];\\n};\\ninterface InitDestinations {\\n [key: string]: Init$2<any>;\\n}\\ninterface Destinations {\\n [key: string]: Instance$3;\\n}\\n/**\\n * Context provided to destination functions.\\n * Extends base context with destination-specific properties.\\n */\\ninterface Context$4<T extends TypesGeneric$2 = Types$3> extends Base<Config$6<T>, Env$2<T>> {\\n id: string;\\n data?: Data$1;\\n}\\ninterface PushContext<T extends TypesGeneric$2 = Types$3> extends Context$4<T> {\\n ingest?: unknown;\\n rule?: Rule<Mapping$1<T>>;\\n}\\ninterface PushBatchContext<T extends TypesGeneric$2 = Types$3> extends Context$4<T> {\\n ingest?: unknown;\\n rule?: Rule<Mapping$1<T>>;\\n}\\ntype InitFn$1<T extends TypesGeneric$2 = Types$3> = (context: Context$4<T>) => PromiseOrValue<void | false | Config$6<T>>;\\ntype PushFn<T extends TypesGeneric$2 = Types$3> = (event: Event, context: PushContext<T>) => PromiseOrValue<void | unknown>;\\ntype PushBatchFn<T extends TypesGeneric$2 = Types$3> = (batch: Batch<Mapping$1<T>>, context: PushBatchContext<T>) => void;\\ntype PushEvent<Mapping = unknown> = {\\n event: Event;\\n mapping?: Rule<Mapping>;\\n};\\ntype PushEvents<Mapping = unknown> = Array<PushEvent<Mapping>>;\\ninterface Batch<Mapping> {\\n key: string;\\n events: Events;\\n data: Array<Data$1>;\\n mapping?: Rule<Mapping>;\\n}\\ninterface BatchRegistry<Mapping> {\\n [mappingKey: string]: {\\n batched: Batch<Mapping>;\\n batchFn: () => void;\\n };\\n}\\ntype Data$1 = Property | undefined | Array<Property | undefined>;\\ninterface Ref {\\n type: string;\\n data?: unknown;\\n error?: unknown;\\n}\\ntype Push$1 = {\\n queuePush?: Events;\\n error?: unknown;\\n};\\ntype DLQ = Array<[Event, unknown]>;\\n\\ntype destination_Batch<Mapping> = Batch<Mapping>;\\ntype destination_BatchRegistry<Mapping> = BatchRegistry<Mapping>;\\ntype destination_Code<T extends TypesGeneric$2 = Types$3> = Code<T>;\\ntype destination_DLQ = DLQ;\\ntype destination_Destinations = Destinations;\\ntype destination_InitDestinations = InitDestinations;\\ntype destination_PushBatchContext<T extends TypesGeneric$2 = Types$3> = PushBatchContext<T>;\\ntype destination_PushBatchFn<T extends TypesGeneric$2 = Types$3> = PushBatchFn<T>;\\ntype destination_PushContext<T extends TypesGeneric$2 = Types$3> = PushContext<T>;\\ntype destination_PushEvent<Mapping = unknown> = PushEvent<Mapping>;\\ntype destination_PushEvents<Mapping = unknown> = PushEvents<Mapping>;\\ntype destination_PushFn<T extends TypesGeneric$2 = Types$3> = PushFn<T>;\\ntype destination_Ref = Ref;\\ndeclare namespace destination {\\n export type { BaseEnv$2 as BaseEnv, destination_Batch as Batch, destination_BatchRegistry as BatchRegistry, destination_Code as Code, Config$6 as Config, Context$4 as Context, destination_DLQ as DLQ, Data$1 as Data, destination_Destinations as Destinations, Env$2 as Env, Init$2 as Init, destination_InitDestinations as InitDestinations, InitFn$1 as InitFn, InitSettings$2 as InitSettings, Instance$3 as Instance, Mapping$1 as Mapping, PartialConfig$1 as PartialConfig, Policy$1 as Policy, Push$1 as Push, destination_PushBatchContext as PushBatchContext, destination_PushBatchFn as PushBatchFn, destination_PushContext as PushContext, destination_PushEvent as PushEvent, destination_PushEvents as PushEvents, destination_PushFn as PushFn, destination_Ref as Ref, Settings$2 as Settings, Types$3 as Types, TypesGeneric$2 as TypesGeneric, TypesOf$2 as TypesOf };\\n}\\n\\ninterface EventFn<R = Promise<PushResult>> {\\n (partialEvent: DeepPartialEvent): R;\\n (event: string): R;\\n (event: string, data: Properties): R;\\n}\\ninterface Fn$2<R = Promise<PushResult>, Config = unknown> extends EventFn<R>, WalkerCommands<R, Config> {\\n}\\ninterface WalkerCommands<R = Promise<PushResult>, Config = unknown> {\\n (event: 'walker config', config: Partial<Config>): R;\\n (event: 'walker consent', consent: Consent): R;\\n <T extends Types$3>(event: 'walker destination', destination: Init$2<T> | Instance$3<T>, config?: Config$6<T>): R;\\n <K extends keyof Functions>(event: 'walker hook', name: K, hookFn: Functions[K]): R;\\n (event: 'walker on', type: Types$2, rules: SingleOrArray<Options>): R;\\n (event: 'walker user', user: User): R;\\n (event: 'walker run', runState: {\\n consent?: Consent;\\n user?: User;\\n globals?: Properties;\\n custom?: Properties;\\n }): R;\\n}\\ntype Event$1<R = Promise<PushResult>> = (partialEvent: DeepPartialEvent) => R;\\ntype PushData<Config = unknown> = DeepPartial<Config> | Consent | User | Properties;\\ninterface PushResult {\\n ok: boolean;\\n event?: Event;\\n done?: Record<string, Ref>;\\n queued?: Record<string, Ref>;\\n failed?: Record<string, Ref>;\\n}\\ntype Layer = Array<IArguments | DeepPartialEvent | unknown[]>;\\n\\ntype elb_EventFn<R = Promise<PushResult>> = EventFn<R>;\\ntype elb_Layer = Layer;\\ntype elb_PushData<Config = unknown> = PushData<Config>;\\ntype elb_PushResult = PushResult;\\ntype elb_WalkerCommands<R = Promise<PushResult>, Config = unknown> = WalkerCommands<R, Config>;\\ndeclare namespace elb {\\n export type { Event$1 as Event, elb_EventFn as EventFn, Fn$2 as Fn, elb_Layer as Layer, elb_PushData as PushData, elb_PushResult as PushResult, elb_WalkerCommands as WalkerCommands };\\n}\\n\\n/**\\n * Flow Configuration System\\n *\\n * Core types for walkerOS unified configuration.\\n * Platform-agnostic, runtime-focused.\\n *\\n * The Flow system enables \\\"one config to rule them all\\\" - a single\\n * walkeros.config.json file that manages multiple flows\\n * (web_prod, web_stage, server_prod, etc.) with shared configuration,\\n * variables, and reusable definitions.\\n *\\n * ## Connection Rules\\n *\\n * Sources use `next` to connect to transformers (pre-collector chain).\\n * Sources cannot have `before`.\\n *\\n * Destinations use `before` to connect to transformers (post-collector chain).\\n * Destinations cannot have `next`.\\n *\\n * Transformers use `next` to chain to other transformers. The same transformer\\n * pool is shared by both pre-collector and post-collector chains.\\n *\\n * The collector is implicit — it is never referenced directly in connections.\\n * It sits between the source chain and the destination chain automatically.\\n *\\n * Circular `next` references are safely handled at runtime by `walkChain()`\\n * in the collector module (visited-set detection).\\n *\\n * ```\\n * Source → [next → Transformer chain] → Collector → [before → Transformer chain] → Destination\\n * ```\\n *\\n * @packageDocumentation\\n */\\n\\n/**\\n * JSON Schema object for contract entry validation.\\n * Standard JSON Schema with description/examples annotations.\\n * Compatible with AJV for runtime validation.\\n */\\ntype ContractSchema = Record<string, unknown>;\\n/**\\n * Contract action entries keyed by action name.\\n * Each value is a JSON Schema describing the expected WalkerOS.Event shape.\\n * Use \\\"*\\\" as wildcard for all actions of an entity.\\n */\\ntype ContractActions = Record<string, ContractSchema>;\\n/**\\n * Data contract definition.\\n * Entity → action keyed JSON Schema with additive inheritance.\\n *\\n * Special keys:\\n * - \\\"$tagging\\\": Contract version number (syncs to event.version.tagging)\\n * - \\\"*\\\": Wildcard entity/action (matches all)\\n */\\ninterface Contract {\\n $tagging?: number;\\n [entity: string]: ContractActions | number | undefined;\\n}\\n/**\\n * Primitive value types for variables\\n */\\ntype Primitive = string | number | boolean;\\n/**\\n * Variables record type for interpolation.\\n * Used at Setup, Config, Source, and Destination levels.\\n */\\ntype Variables = Record<string, Primitive>;\\n/**\\n * Definitions record type for reusable configurations.\\n * Used at Setup, Config, Source, and Destination levels.\\n */\\ntype Definitions = Record<string, unknown>;\\n/**\\n * Inline code definition for sources/destinations/transformers.\\n * Used instead of package when defining inline functions.\\n */\\ninterface InlineCode {\\n push: string;\\n type?: string;\\n init?: string;\\n}\\n/**\\n * Packages configuration for build.\\n */\\ntype Packages = Record<string, {\\n version?: string;\\n imports?: string[];\\n path?: string;\\n}>;\\n/**\\n * Web platform configuration.\\n *\\n * @remarks\\n * Presence of this key indicates web platform (browser-based tracking).\\n * Builds to IIFE format, ES2020 target, browser platform.\\n */\\ninterface Web {\\n /**\\n * Window property name for collector instance.\\n * @default \\\"collector\\\"\\n */\\n windowCollector?: string;\\n /**\\n * Window property name for elb function.\\n * @default \\\"elb\\\"\\n */\\n windowElb?: string;\\n}\\n/**\\n * Server platform configuration.\\n *\\n * @remarks\\n * Presence of this key indicates server platform (Node.js).\\n * Builds to ESM format, Node18 target, node platform.\\n * Reserved for future server-specific options.\\n */\\ninterface Server {\\n}\\n/**\\n * Complete multi-flow configuration.\\n * Root type for walkeros.config.json files.\\n *\\n * @remarks\\n * If only one flow exists, it's auto-selected without --flow flag.\\n * Convention: use \\\"default\\\" as the flow name for single-flow configs.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"version\\\": 1,\\n * \\\"$schema\\\": \\\"https://walkeros.io/schema/flow/v1.json\\\",\\n * \\\"variables\\\": { \\\"CURRENCY\\\": \\\"USD\\\" },\\n * \\\"flows\\\": {\\n * \\\"default\\\": { \\\"web\\\": {}, ... }\\n * }\\n * }\\n * ```\\n */\\ninterface Setup {\\n /**\\n * Configuration schema version.\\n */\\n version: 1 | 2;\\n /**\\n * JSON Schema reference for IDE validation.\\n * @example \\\"https://walkeros.io/schema/flow/v1.json\\\"\\n */\\n $schema?: string;\\n /**\\n * Folders to include in the bundle output.\\n * These folders are copied to dist/ during bundle, making them available\\n * at runtime for both local and Docker execution.\\n *\\n * @remarks\\n * Use for credential files, configuration, or other runtime assets.\\n * Paths are relative to the config file location.\\n * Default: `[\\\"./shared\\\"]` if the folder exists, otherwise `[]`.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"include\\\": [\\\"./credentials\\\", \\\"./config\\\"]\\n * }\\n * ```\\n */\\n include?: string[];\\n /**\\n * Data contract definition (version 2+).\\n * Entity → action keyed JSON Schema with additive inheritance.\\n */\\n contract?: Contract;\\n /**\\n * Shared variables for interpolation.\\n * Resolution: destination/source > Config > Setup level\\n * Syntax: $var.name\\n */\\n variables?: Variables;\\n /**\\n * Reusable configuration definitions.\\n * Syntax: $def.name\\n */\\n definitions?: Definitions;\\n /**\\n * Named flow configurations.\\n * If only one flow exists, it's auto-selected.\\n */\\n flows: Record<string, Config$5>;\\n}\\n/**\\n * Single flow configuration.\\n * Represents one deployment target (e.g., web_prod, server_stage).\\n *\\n * @remarks\\n * Platform is determined by presence of `web` or `server` key.\\n * Exactly one must be present.\\n *\\n * Variables/definitions cascade: source/destination > config > setup\\n */\\ninterface Config$5 {\\n /**\\n * Web platform configuration.\\n * Presence indicates web platform (browser-based tracking).\\n * Mutually exclusive with `server`.\\n */\\n web?: Web;\\n /**\\n * Server platform configuration.\\n * Presence indicates server platform (Node.js).\\n * Mutually exclusive with `web`.\\n */\\n server?: Server;\\n /**\\n * Data contract definition for this flow.\\n * Merges on top of Setup-level contract (additive).\\n */\\n contract?: Contract;\\n /**\\n * Source configurations (data capture).\\n *\\n * @remarks\\n * Sources capture events from various origins:\\n * - Browser DOM interactions (clicks, page views)\\n * - DataLayer pushes\\n * - HTTP requests (server-side)\\n * - Cloud function triggers\\n *\\n * Key = unique source identifier (arbitrary)\\n * Value = source reference with package and config\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"sources\\\": {\\n * \\\"browser\\\": {\\n * \\\"package\\\": \\\"@walkeros/web-source-browser\\\",\\n * \\\"config\\\": {\\n * \\\"settings\\\": {\\n * \\\"pageview\\\": true,\\n * \\\"session\\\": true\\n * }\\n * }\\n * }\\n * }\\n * }\\n * ```\\n */\\n sources?: Record<string, SourceReference>;\\n /**\\n * Destination configurations (data output).\\n *\\n * @remarks\\n * Destinations send processed events to external services:\\n * - Google Analytics (gtag)\\n * - Meta Pixel (fbq)\\n * - Custom APIs\\n * - Data warehouses\\n *\\n * Key = unique destination identifier (arbitrary)\\n * Value = destination reference with package and config\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"destinations\\\": {\\n * \\\"gtag\\\": {\\n * \\\"package\\\": \\\"@walkeros/web-destination-gtag\\\",\\n * \\\"config\\\": {\\n * \\\"settings\\\": {\\n * \\\"ga4\\\": { \\\"measurementId\\\": \\\"G-XXXXXXXXXX\\\" }\\n * }\\n * }\\n * }\\n * }\\n * }\\n * ```\\n */\\n destinations?: Record<string, DestinationReference>;\\n /**\\n * Transformer configurations (event transformation).\\n *\\n * @remarks\\n * Transformers transform events in the pipeline:\\n * - Pre-collector: Between sources and collector\\n * - Post-collector: Between collector and destinations\\n *\\n * Key = unique transformer identifier (referenced by source.next or destination.before)\\n * Value = transformer reference with package and config\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"transformers\\\": {\\n * \\\"enrich\\\": {\\n * \\\"package\\\": \\\"@walkeros/transformer-enricher\\\",\\n * \\\"config\\\": { \\\"apiUrl\\\": \\\"https://api.example.com\\\" },\\n * \\\"next\\\": \\\"validate\\\"\\n * },\\n * \\\"validate\\\": {\\n * \\\"package\\\": \\\"@walkeros/transformer-validator\\\"\\n * }\\n * }\\n * }\\n * ```\\n */\\n transformers?: Record<string, TransformerReference>;\\n /**\\n * Collector configuration (event processing).\\n *\\n * @remarks\\n * The collector is the central event processing engine.\\n * Configuration includes:\\n * - Consent management\\n * - Global properties\\n * - User identification\\n * - Processing rules\\n *\\n * @see {@link Collector.InitConfig} for complete options\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"collector\\\": {\\n * \\\"run\\\": true,\\n * \\\"tagging\\\": 1,\\n * \\\"consent\\\": {\\n * \\\"functional\\\": true,\\n * \\\"marketing\\\": false\\n * },\\n * \\\"globals\\\": {\\n * \\\"currency\\\": \\\"USD\\\",\\n * \\\"environment\\\": \\\"production\\\"\\n * }\\n * }\\n * }\\n * ```\\n */\\n collector?: InitConfig;\\n /**\\n * NPM packages to bundle.\\n */\\n packages?: Packages;\\n /**\\n * Flow-level variables.\\n * Override Setup.variables, overridden by source/destination variables.\\n */\\n variables?: Variables;\\n /**\\n * Flow-level definitions.\\n * Extend Setup.definitions, overridden by source/destination definitions.\\n */\\n definitions?: Definitions;\\n}\\n/**\\n * Named example pair for a step.\\n * `in` is the input to the step, `out` is the expected output.\\n * `out: false` indicates the step filters/drops this event.\\n */\\ninterface StepExample {\\n in?: unknown;\\n mapping?: unknown;\\n out?: unknown;\\n}\\n/**\\n * Named step examples keyed by scenario name.\\n */\\ntype StepExamples = Record<string, StepExample>;\\n/**\\n * Source reference with inline package syntax.\\n *\\n * @remarks\\n * References a source package and provides configuration.\\n * The package is automatically downloaded and imported during build.\\n * Alternatively, use `code: true` for inline code execution.\\n */\\ninterface SourceReference {\\n /**\\n * Package specifier with optional version.\\n *\\n * @remarks\\n * Formats:\\n * - `\\\"@walkeros/web-source-browser\\\"` - Latest version\\n * - `\\\"@walkeros/web-source-browser@2.0.0\\\"` - Specific version\\n * - `\\\"@walkeros/web-source-browser@^2.0.0\\\"` - Semver range\\n *\\n * The CLI will:\\n * 1. Parse the package reference\\n * 2. Download from npm\\n * 3. Auto-detect default or named export\\n * 4. Generate import statement\\n *\\n * Optional when `code: true` is used for inline code execution.\\n *\\n * @example\\n * \\\"package\\\": \\\"@walkeros/web-source-browser@latest\\\"\\n */\\n package?: string;\\n /**\\n * Resolved import variable name or built-in code source.\\n *\\n * @remarks\\n * - String: Auto-resolved from packages[package].imports[0] during getFlowConfig(),\\n * or provided explicitly for advanced use cases.\\n * - InlineCode: Object with type, push, and optional init for inline code definition.\\n *\\n * @example\\n * // Using inline code object\\n * {\\n * \\\"code\\\": {\\n * \\\"type\\\": \\\"logger\\\",\\n * \\\"push\\\": \\\"$code:(event) => console.log(event)\\\"\\n * }\\n * }\\n */\\n code?: string | InlineCode;\\n /**\\n * Source-specific configuration.\\n *\\n * @remarks\\n * Structure depends on the source package.\\n * Passed to the source's initialization function.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"config\\\": {\\n * \\\"settings\\\": {\\n * \\\"pageview\\\": true,\\n * \\\"session\\\": true,\\n * \\\"elb\\\": \\\"elb\\\",\\n * \\\"prefix\\\": \\\"data-elb\\\"\\n * }\\n * }\\n * }\\n * ```\\n */\\n config?: unknown;\\n /**\\n * Source environment configuration.\\n *\\n * @remarks\\n * Environment-specific settings for the source.\\n * Merged with default source environment.\\n */\\n env?: unknown;\\n /**\\n * Mark as primary source (provides main ELB).\\n *\\n * @remarks\\n * The primary source's ELB function is returned by `startFlow()`.\\n * Only one source should be marked as primary per flow.\\n *\\n * @default false\\n */\\n primary?: boolean;\\n /**\\n * Source-level variables (highest priority in cascade).\\n * Overrides flow and setup variables.\\n */\\n variables?: Variables;\\n /**\\n * Source-level definitions (highest priority in cascade).\\n * Overrides flow and setup definitions.\\n */\\n definitions?: Definitions;\\n /**\\n * First transformer in pre-collector chain.\\n *\\n * @remarks\\n * Name of the transformer to execute after this source captures an event.\\n * Creates a pre-collector transformer chain. Chain ends at the collector.\\n * If omitted, events route directly to the collector.\\n * Can be an array for explicit chain control (bypasses transformer.next resolution).\\n */\\n next?: string | string[];\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution (not included in bundles).\\n */\\n examples?: StepExamples;\\n}\\n/**\\n * Transformer reference with inline package syntax.\\n *\\n * @remarks\\n * References a transformer package and provides configuration.\\n * Transformers transform events in the pipeline between sources and destinations.\\n * Alternatively, use `code: true` for inline code execution.\\n */\\ninterface TransformerReference {\\n /**\\n * Package specifier with optional version.\\n *\\n * @remarks\\n * Same format as SourceReference.package\\n * Optional when `code: true` is used for inline code execution.\\n *\\n * @example\\n * \\\"package\\\": \\\"@walkeros/transformer-enricher@1.0.0\\\"\\n */\\n package?: string;\\n /**\\n * Resolved import variable name or built-in code transformer.\\n *\\n * @remarks\\n * - String: Auto-resolved from packages[package].imports[0] during getFlowConfig(),\\n * or provided explicitly for advanced use cases.\\n * - InlineCode: Object with type, push, and optional init for inline code definition.\\n *\\n * @example\\n * // Using inline code object\\n * {\\n * \\\"code\\\": {\\n * \\\"type\\\": \\\"enricher\\\",\\n * \\\"push\\\": \\\"$code:(event) => ({ ...event, data: { enriched: true } })\\\"\\n * }\\n * }\\n */\\n code?: string | InlineCode;\\n /**\\n * Transformer-specific configuration.\\n *\\n * @remarks\\n * Structure depends on the transformer package.\\n * Passed to the transformer's initialization function.\\n */\\n config?: unknown;\\n /**\\n * Transformer environment configuration.\\n *\\n * @remarks\\n * Environment-specific settings for the transformer.\\n * Merged with default transformer environment.\\n */\\n env?: unknown;\\n /**\\n * Next transformer in chain.\\n *\\n * @remarks\\n * Name of the next transformer to execute after this one.\\n * When used in a pre-collector chain (source.next), terminates at the collector.\\n * When used in a post-collector chain (destination.before), terminates at the destination.\\n * If omitted, the chain ends and control passes to the next pipeline stage.\\n * Array values define an explicit chain (no walking). Circular references\\n * are safely detected at runtime by `walkChain()`.\\n */\\n next?: string | string[];\\n /**\\n * Transformer-level variables (highest priority in cascade).\\n * Overrides flow and setup variables.\\n */\\n variables?: Variables;\\n /**\\n * Transformer-level definitions (highest priority in cascade).\\n * Overrides flow and setup definitions.\\n */\\n definitions?: Definitions;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution (not included in bundles).\\n */\\n examples?: StepExamples;\\n}\\n/**\\n * Destination reference with inline package syntax.\\n *\\n * @remarks\\n * References a destination package and provides configuration.\\n * Structure mirrors SourceReference for consistency.\\n */\\ninterface DestinationReference {\\n /**\\n * Package specifier with optional version.\\n *\\n * @remarks\\n * Same format as SourceReference.package\\n * Optional when `code: true` is used for inline code execution.\\n *\\n * @example\\n * \\\"package\\\": \\\"@walkeros/web-destination-gtag@2.0.0\\\"\\n */\\n package?: string;\\n /**\\n * Resolved import variable name or built-in code destination.\\n *\\n * @remarks\\n * - String: Auto-resolved from packages[package].imports[0] during getFlowConfig(),\\n * or provided explicitly for advanced use cases.\\n * - InlineCode: Object with type, push, and optional init for inline code definition.\\n *\\n * @example\\n * // Using inline code object\\n * {\\n * \\\"code\\\": {\\n * \\\"type\\\": \\\"logger\\\",\\n * \\\"push\\\": \\\"$code:(event) => console.log('Event:', event.name)\\\"\\n * }\\n * }\\n */\\n code?: string | InlineCode;\\n /**\\n * Destination-specific configuration.\\n *\\n * @remarks\\n * Structure depends on the destination package.\\n * Typically includes:\\n * - settings: API keys, IDs, endpoints\\n * - mapping: Event transformation rules\\n * - consent: Required consent states\\n * - policy: Processing rules\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"config\\\": {\\n * \\\"settings\\\": {\\n * \\\"ga4\\\": {\\n * \\\"measurementId\\\": \\\"G-XXXXXXXXXX\\\"\\n * }\\n * },\\n * \\\"mapping\\\": {\\n * \\\"page\\\": {\\n * \\\"view\\\": {\\n * \\\"name\\\": \\\"page_view\\\",\\n * \\\"data\\\": { ... }\\n * }\\n * }\\n * }\\n * }\\n * }\\n * ```\\n */\\n config?: unknown;\\n /**\\n * Destination environment configuration.\\n *\\n * @remarks\\n * Environment-specific settings for the destination.\\n * Merged with default destination environment.\\n */\\n env?: unknown;\\n /**\\n * Destination-level variables (highest priority in cascade).\\n * Overrides flow and setup variables.\\n */\\n variables?: Variables;\\n /**\\n * Destination-level definitions (highest priority in cascade).\\n * Overrides flow and setup definitions.\\n */\\n definitions?: Definitions;\\n /**\\n * First transformer in post-collector chain.\\n *\\n * @remarks\\n * Name of the transformer to execute before sending events to this destination.\\n * Creates a post-collector transformer chain. Chain ends at this destination.\\n * If omitted, events are sent directly from the collector.\\n * Can be an array for explicit chain control (bypasses transformer.next resolution).\\n */\\n before?: string | string[];\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution (not included in bundles).\\n */\\n examples?: StepExamples;\\n}\\n\\ntype flow_Contract = Contract;\\ntype flow_ContractActions = ContractActions;\\ntype flow_ContractSchema = ContractSchema;\\ntype flow_Definitions = Definitions;\\ntype flow_DestinationReference = DestinationReference;\\ntype flow_InlineCode = InlineCode;\\ntype flow_Packages = Packages;\\ntype flow_Primitive = Primitive;\\ntype flow_Server = Server;\\ntype flow_Setup = Setup;\\ntype flow_SourceReference = SourceReference;\\ntype flow_StepExample = StepExample;\\ntype flow_StepExamples = StepExamples;\\ntype flow_TransformerReference = TransformerReference;\\ntype flow_Variables = Variables;\\ntype flow_Web = Web;\\ndeclare namespace flow {\\n export type { Config$5 as Config, flow_Contract as Contract, flow_ContractActions as ContractActions, flow_ContractSchema as ContractSchema, flow_Definitions as Definitions, flow_DestinationReference as DestinationReference, flow_InlineCode as InlineCode, flow_Packages as Packages, flow_Primitive as Primitive, flow_Server as Server, flow_Setup as Setup, flow_SourceReference as SourceReference, flow_StepExample as StepExample, flow_StepExamples as StepExamples, flow_TransformerReference as TransformerReference, flow_Variables as Variables, flow_Web as Web };\\n}\\n\\ntype AnyFunction$1<P extends unknown[] = never[], R = unknown> = (...args: P) => R;\\ntype Functions = {\\n [key: string]: AnyFunction$1;\\n};\\ninterface Parameter<P extends unknown[], R> {\\n fn: (...args: P) => R;\\n result?: R;\\n}\\ntype HookFn<T extends AnyFunction$1> = (params: Parameter<Parameters<T>, ReturnType<T>>, ...args: Parameters<T>) => ReturnType<T>;\\n\\ntype hooks_Functions = Functions;\\ntype hooks_HookFn<T extends AnyFunction$1> = HookFn<T>;\\ndeclare namespace hooks {\\n export type { AnyFunction$1 as AnyFunction, hooks_Functions as Functions, hooks_HookFn as HookFn };\\n}\\n\\n/**\\n * Log levels from most to least severe\\n */\\ndeclare enum Level {\\n ERROR = 0,\\n WARN = 1,\\n INFO = 2,\\n DEBUG = 3\\n}\\n/**\\n * Normalized error context extracted from Error objects\\n */\\ninterface ErrorContext {\\n message: string;\\n name: string;\\n stack?: string;\\n cause?: unknown;\\n}\\n/**\\n * Context passed to log handlers\\n * If an Error was passed, it's normalized into the error property\\n */\\ninterface LogContext {\\n [key: string]: unknown;\\n error?: ErrorContext;\\n}\\n/**\\n * Log message function signature\\n * Accepts string or Error as message, with optional context\\n */\\ntype LogFn = (message: string | Error, context?: unknown | Error) => void;\\n/**\\n * Throw function signature - logs error then throws\\n * Returns never as it always throws\\n */\\ntype ThrowFn = (message: string | Error, context?: unknown) => never;\\n/**\\n * Default handler function (passed to custom handlers for chaining)\\n */\\ntype DefaultHandler = (level: Level, message: string, context: LogContext, scope: string[]) => void;\\n/**\\n * Custom log handler function\\n * Receives originalHandler to allow middleware-style chaining\\n */\\ntype Handler = (level: Level, message: string, context: LogContext, scope: string[], originalHandler: DefaultHandler) => void;\\n/**\\n * Logger instance with scoping support\\n * All logs automatically include trace path from scoping\\n */\\ninterface Instance$2 {\\n /**\\n * Log an error message (always visible unless silenced)\\n */\\n error: LogFn;\\n /**\\n * Log a warning (degraded state, config issues, transient failures)\\n */\\n warn: LogFn;\\n /**\\n * Log an informational message\\n */\\n info: LogFn;\\n /**\\n * Log a debug message\\n */\\n debug: LogFn;\\n /**\\n * Log an error message and throw an Error\\n * Combines logging and throwing in one call\\n */\\n throw: ThrowFn;\\n /**\\n * Output structured JSON data\\n */\\n json: (data: unknown) => void;\\n /**\\n * Create a scoped child logger with automatic trace path\\n * @param name - Scope name (e.g., destination type, destination key)\\n * @returns A new logger instance with the scope applied\\n */\\n scope: (name: string) => Instance$2;\\n}\\n/**\\n * Logger configuration options\\n */\\ninterface Config$4 {\\n /**\\n * Minimum log level to display\\n * @default Level.ERROR\\n */\\n level?: Level | keyof typeof Level;\\n /**\\n * Custom log handler function\\n * Receives originalHandler to preserve default behavior\\n */\\n handler?: Handler;\\n /** Custom handler for json() output. Default: console.log(JSON.stringify(data, null, 2)) */\\n jsonHandler?: (data: unknown) => void;\\n}\\n/**\\n * Internal config with resolved values and scope\\n */\\ninterface InternalConfig {\\n level: Level;\\n handler?: Handler;\\n jsonHandler?: (data: unknown) => void;\\n scope: string[];\\n}\\n/**\\n * Logger factory function type\\n */\\ntype Factory = (config?: Config$4) => Instance$2;\\n\\ntype logger_DefaultHandler = DefaultHandler;\\ntype logger_ErrorContext = ErrorContext;\\ntype logger_Factory = Factory;\\ntype logger_Handler = Handler;\\ntype logger_InternalConfig = InternalConfig;\\ntype logger_Level = Level;\\ndeclare const logger_Level: typeof Level;\\ntype logger_LogContext = LogContext;\\ntype logger_LogFn = LogFn;\\ntype logger_ThrowFn = ThrowFn;\\ndeclare namespace logger {\\n export { type Config$4 as Config, type logger_DefaultHandler as DefaultHandler, type logger_ErrorContext as ErrorContext, type logger_Factory as Factory, type logger_Handler as Handler, type Instance$2 as Instance, type logger_InternalConfig as InternalConfig, logger_Level as Level, type logger_LogContext as LogContext, type logger_LogFn as LogFn, type logger_ThrowFn as ThrowFn };\\n}\\n\\n/**\\n * Shared mapping configuration interface.\\n * Used by both Source.Config and Destination.Config.\\n */\\ninterface Config$3<T = unknown> {\\n consent?: Consent;\\n data?: Value | Values;\\n mapping?: Rules<Rule<T>>;\\n policy?: Policy;\\n}\\ninterface Policy {\\n [key: string]: Value;\\n}\\ninterface Rules<T = Rule> {\\n [entity: string]: Record<string, T | Array<T>> | undefined;\\n}\\ninterface Rule<Settings = unknown> {\\n batch?: number;\\n batchFn?: (destination: Instance$3, collector: Instance$4) => void;\\n batched?: Batch<Settings>;\\n condition?: Condition;\\n consent?: Consent;\\n settings?: Settings;\\n data?: Data;\\n ignore?: boolean;\\n name?: string;\\n policy?: Policy;\\n}\\ninterface Result$2 {\\n eventMapping?: Rule;\\n mappingKey?: string;\\n}\\ntype Data = Value | Values;\\ntype Value = ValueType | Array<ValueType>;\\ntype Values = Array<Value>;\\ntype ValueType = string | ValueConfig;\\ninterface ValueConfig {\\n condition?: Condition;\\n consent?: Consent;\\n fn?: Fn$1;\\n key?: string;\\n loop?: Loop;\\n map?: Map;\\n set?: Value[];\\n validate?: Validate;\\n value?: PropertyType;\\n}\\ntype Condition = (value: DeepPartialEvent | unknown, mapping?: Value, collector?: Instance$4) => PromiseOrValue<boolean>;\\ntype Fn$1 = (value: DeepPartialEvent | unknown, mapping: Value, options: Options$1) => PromiseOrValue<Property | unknown>;\\ntype Loop = [Value, Value];\\ntype Map = {\\n [key: string]: Value;\\n};\\ninterface Options$1 {\\n consent?: Consent;\\n collector?: Instance$4;\\n props?: unknown;\\n}\\ntype Validate = (value?: unknown) => PromiseOrValue<boolean>;\\n\\ntype mapping_Condition = Condition;\\ntype mapping_Data = Data;\\ntype mapping_Loop = Loop;\\ntype mapping_Map = Map;\\ntype mapping_Policy = Policy;\\ntype mapping_Rule<Settings = unknown> = Rule<Settings>;\\ntype mapping_Rules<T = Rule> = Rules<T>;\\ntype mapping_Validate = Validate;\\ntype mapping_Value = Value;\\ntype mapping_ValueConfig = ValueConfig;\\ntype mapping_ValueType = ValueType;\\ntype mapping_Values = Values;\\ndeclare namespace mapping {\\n export type { mapping_Condition as Condition, Config$3 as Config, mapping_Data as Data, Fn$1 as Fn, mapping_Loop as Loop, mapping_Map as Map, Options$1 as Options, mapping_Policy as Policy, Result$2 as Result, mapping_Rule as Rule, mapping_Rules as Rules, mapping_Validate as Validate, mapping_Value as Value, mapping_ValueConfig as ValueConfig, mapping_ValueType as ValueType, mapping_Values as Values };\\n}\\n\\ntype Config$2 = {\\n config?: Array<GenericConfig>;\\n consent?: Array<ConsentConfig>;\\n custom?: Array<GenericConfig>;\\n globals?: Array<GenericConfig>;\\n ready?: Array<ReadyConfig>;\\n run?: Array<RunConfig>;\\n session?: Array<SessionConfig>;\\n user?: Array<UserConfig>;\\n};\\ntype Types$2 = keyof Config$2 | (string & {});\\ninterface EventContextMap {\\n config: Partial<Config$7>;\\n consent: Consent;\\n custom: Properties;\\n globals: Properties;\\n ready: undefined;\\n run: undefined;\\n session: SessionData;\\n user: User;\\n}\\ntype EventContext<T extends keyof EventContextMap> = EventContextMap[T];\\ntype AnyEventContext = EventContextMap[keyof EventContextMap];\\ninterface Context$3 {\\n consent?: Consent;\\n session?: unknown;\\n}\\ntype Options = ConsentConfig | GenericConfig | ReadyConfig | RunConfig | SessionConfig | UserConfig;\\ninterface ConsentConfig {\\n [key: string]: ConsentFn;\\n}\\ntype ConsentFn = (collector: Instance$4, consent: Consent) => void;\\ntype GenericConfig = GenericFn;\\ntype GenericFn = (collector: Instance$4, data: unknown) => void;\\ntype ReadyConfig = ReadyFn;\\ntype ReadyFn = (collector: Instance$4) => void;\\ntype RunConfig = RunFn;\\ntype RunFn = (collector: Instance$4) => void;\\ntype SessionConfig = SessionFn;\\ntype SessionFn = (collector: Instance$4, session?: unknown) => void;\\ntype UserConfig = UserFn;\\ntype UserFn = (collector: Instance$4, user: User) => void;\\ninterface OnConfig {\\n config?: GenericConfig[];\\n consent?: ConsentConfig[];\\n custom?: GenericConfig[];\\n globals?: GenericConfig[];\\n ready?: ReadyConfig[];\\n run?: RunConfig[];\\n session?: SessionConfig[];\\n user?: UserConfig[];\\n [key: string]: ConsentConfig[] | GenericConfig[] | ReadyConfig[] | RunConfig[] | SessionConfig[] | UserConfig[] | undefined;\\n}\\ntype OnFn<T extends TypesGeneric$2 = Types$3> = (type: Types$2, context: Context$4<T>) => PromiseOrValue<void>;\\ntype OnFnRuntime = (type: Types$2, context: Context$4) => PromiseOrValue<void>;\\n\\ntype on_AnyEventContext = AnyEventContext;\\ntype on_ConsentConfig = ConsentConfig;\\ntype on_ConsentFn = ConsentFn;\\ntype on_EventContext<T extends keyof EventContextMap> = EventContext<T>;\\ntype on_EventContextMap = EventContextMap;\\ntype on_GenericConfig = GenericConfig;\\ntype on_GenericFn = GenericFn;\\ntype on_OnConfig = OnConfig;\\ntype on_OnFn<T extends TypesGeneric$2 = Types$3> = OnFn<T>;\\ntype on_OnFnRuntime = OnFnRuntime;\\ntype on_Options = Options;\\ntype on_ReadyConfig = ReadyConfig;\\ntype on_ReadyFn = ReadyFn;\\ntype on_RunConfig = RunConfig;\\ntype on_RunFn = RunFn;\\ntype on_SessionConfig = SessionConfig;\\ntype on_SessionFn = SessionFn;\\ntype on_UserConfig = UserConfig;\\ntype on_UserFn = UserFn;\\ndeclare namespace on {\\n export type { on_AnyEventContext as AnyEventContext, Config$2 as Config, on_ConsentConfig as ConsentConfig, on_ConsentFn as ConsentFn, Context$3 as Context, on_EventContext as EventContext, on_EventContextMap as EventContextMap, on_GenericConfig as GenericConfig, on_GenericFn as GenericFn, on_OnConfig as OnConfig, on_OnFn as OnFn, on_OnFnRuntime as OnFnRuntime, on_Options as Options, on_ReadyConfig as ReadyConfig, on_ReadyFn as ReadyFn, on_RunConfig as RunConfig, on_RunFn as RunFn, on_SessionConfig as SessionConfig, on_SessionFn as SessionFn, Types$2 as Types, on_UserConfig as UserConfig, on_UserFn as UserFn };\\n}\\n\\ntype Next = string | string[];\\n/**\\n * Base environment interface for walkerOS transformers.\\n *\\n * Minimal like Destination - just an extensible object.\\n * Transformers receive dependencies through context, not env.\\n */\\ninterface BaseEnv$1 {\\n [key: string]: unknown;\\n}\\n/**\\n * Type bundle for transformer generics.\\n * Groups Settings, InitSettings, and Env into a single type parameter.\\n * Follows the Source/Destination pattern.\\n *\\n * @template S - Settings configuration type\\n * @template E - Environment type\\n * @template I - InitSettings configuration type (user input)\\n */\\ninterface Types$1<S = unknown, E = BaseEnv$1, I = S> {\\n settings: S;\\n initSettings: I;\\n env: E;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access.\\n */\\ntype TypesGeneric$1 = {\\n settings: any;\\n initSettings: any;\\n env: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle.\\n */\\ntype Settings$1<T extends TypesGeneric$1 = Types$1> = T['settings'];\\ntype InitSettings$1<T extends TypesGeneric$1 = Types$1> = T['initSettings'];\\ntype Env$1<T extends TypesGeneric$1 = Types$1> = T['env'];\\n/**\\n * Inference helper: Extract Types from Instance.\\n */\\ntype TypesOf$1<I> = I extends Instance$1<infer T> ? T : never;\\n/**\\n * Transformer configuration.\\n */\\ninterface Config$1<T extends TypesGeneric$1 = Types$1> {\\n settings?: InitSettings$1<T>;\\n env?: Env$1<T>;\\n id?: string;\\n logger?: Config$4;\\n next?: Next;\\n init?: boolean;\\n}\\n/**\\n * Context provided to transformer functions.\\n * Extends base context with transformer-specific properties.\\n */\\ninterface Context$2<T extends TypesGeneric$1 = Types$1> extends Base<Config$1<T>, Env$1<T>> {\\n id: string;\\n ingest?: unknown;\\n}\\n/**\\n * Unified result type for transformer functions.\\n * Replaces the old union return type with a structured object.\\n *\\n * @field event - Modified event to continue with\\n * @field respond - Wrapped respond function for downstream transformers\\n * @field next - Branch to a different chain (replaces BranchResult)\\n */\\ninterface Result$1 {\\n event?: DeepPartialEvent;\\n respond?: RespondFn;\\n next?: Next;\\n}\\n/**\\n * The main transformer function.\\n * Uses DeepPartialEvent for consistency across pre/post collector.\\n *\\n * @param event - The event to process\\n * @param context - Transformer context with collector, config, env, logger\\n * @returns Result - structured result with event, respond, next\\n * @returns void - continue with current event unchanged (passthrough)\\n * @returns false - stop chain, cancel further processing\\n */\\ntype Fn<T extends TypesGeneric$1 = Types$1> = (event: DeepPartialEvent, context: Context$2<T>) => PromiseOrValue<Result$1 | false | void>;\\n/**\\n * Optional initialization function.\\n * Called once before first push.\\n *\\n * @param context - Transformer context\\n * @returns void - initialization successful\\n * @returns false - initialization failed, skip this transformer\\n * @returns Config<T> - return updated config\\n */\\ntype InitFn<T extends TypesGeneric$1 = Types$1> = (context: Context$2<T>) => PromiseOrValue<void | false | Config$1<T>>;\\n/**\\n * Transformer instance returned by Init function.\\n */\\ninterface Instance$1<T extends TypesGeneric$1 = Types$1> {\\n type: string;\\n config: Config$1<T>;\\n push: Fn<T>;\\n init?: InitFn<T>;\\n destroy?: DestroyFn<Config$1<T>, Env$1<T>>;\\n}\\n/**\\n * Transformer initialization function.\\n * Creates a transformer instance from context.\\n */\\ntype Init$1<T extends TypesGeneric$1 = Types$1> = (context: Context$2<Types$1<Partial<Settings$1<T>>, Env$1<T>, InitSettings$1<T>>>) => Instance$1<T> | Promise<Instance$1<T>>;\\n/**\\n * Configuration for initializing a transformer.\\n * Used in collector registration.\\n */\\ntype InitTransformer<T extends TypesGeneric$1 = Types$1> = {\\n code: Init$1<T>;\\n config?: Partial<Config$1<T>>;\\n env?: Partial<Env$1<T>>;\\n next?: Next;\\n};\\n/**\\n * Transformers configuration for collector.\\n * Maps transformer IDs to their initialization configurations.\\n */\\ninterface InitTransformers {\\n [transformerId: string]: InitTransformer<any>;\\n}\\n/**\\n * Active transformer instances registry.\\n */\\ninterface Transformers {\\n [transformerId: string]: Instance$1;\\n}\\n\\ntype transformer_Fn<T extends TypesGeneric$1 = Types$1> = Fn<T>;\\ntype transformer_InitFn<T extends TypesGeneric$1 = Types$1> = InitFn<T>;\\ntype transformer_InitTransformer<T extends TypesGeneric$1 = Types$1> = InitTransformer<T>;\\ntype transformer_InitTransformers = InitTransformers;\\ntype transformer_Next = Next;\\ntype transformer_Transformers = Transformers;\\ndeclare namespace transformer {\\n export type { BaseEnv$1 as BaseEnv, Config$1 as Config, Context$2 as Context, Env$1 as Env, transformer_Fn as Fn, Init$1 as Init, transformer_InitFn as InitFn, InitSettings$1 as InitSettings, transformer_InitTransformer as InitTransformer, transformer_InitTransformers as InitTransformers, Instance$1 as Instance, transformer_Next as Next, Result$1 as Result, Settings$1 as Settings, transformer_Transformers as Transformers, Types$1 as Types, TypesGeneric$1 as TypesGeneric, TypesOf$1 as TypesOf };\\n}\\n\\ninterface Context$1 {\\n city?: string;\\n country?: string;\\n encoding?: string;\\n hash?: string;\\n ip?: string;\\n language?: string;\\n origin?: string;\\n region?: string;\\n userAgent?: string;\\n [key: string]: string | undefined;\\n}\\n\\ndeclare namespace request {\\n export type { Context$1 as Context };\\n}\\n\\n/**\\n * Base Env interface for dependency injection into sources.\\n *\\n * Sources receive all their dependencies through this environment object,\\n * making them platform-agnostic and easily testable.\\n */\\ninterface BaseEnv {\\n [key: string]: unknown;\\n push: PushFn$1;\\n command: CommandFn;\\n sources?: Sources;\\n elb: Fn$2;\\n logger: Instance$2;\\n}\\n/**\\n * Type bundle for source generics.\\n * Groups Settings, Mapping, Push, Env, and InitSettings into a single type parameter.\\n *\\n * @template S - Settings configuration type\\n * @template M - Mapping configuration type\\n * @template P - Push function signature (flexible to support HTTP handlers, etc.)\\n * @template E - Environment dependencies type\\n * @template I - InitSettings configuration type (user input)\\n */\\ninterface Types<S = unknown, M = unknown, P = Fn$2, E = BaseEnv, I = S> {\\n settings: S;\\n initSettings: I;\\n mapping: M;\\n push: P;\\n env: E;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access\\n */\\ntype TypesGeneric = {\\n settings: any;\\n initSettings: any;\\n mapping: any;\\n push: any;\\n env: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle\\n */\\ntype Settings<T extends TypesGeneric = Types> = T['settings'];\\ntype InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\\ntype Mapping<T extends TypesGeneric = Types> = T['mapping'];\\ntype Push<T extends TypesGeneric = Types> = T['push'];\\ntype Env<T extends TypesGeneric = Types> = T['env'];\\n/**\\n * Inference helper: Extract Types from Instance\\n */\\ntype TypesOf<I> = I extends Instance<infer T> ? T : never;\\ninterface Config<T extends TypesGeneric = Types> extends Config$3<Mapping<T>> {\\n /** Implementation-specific configuration passed to the init function. */\\n settings?: InitSettings<T>;\\n /** Runtime dependencies injected by the collector (push, command, logger, etc.). */\\n env?: Env<T>;\\n /** Source identifier; defaults to the InitSources object key. */\\n id?: string;\\n /** Logger configuration (level, handler) to override the collector's defaults. */\\n logger?: Config$4;\\n /** Mark as primary source; its push function becomes the exported `elb` from startFlow. */\\n primary?: boolean;\\n /** Defer source initialization until these collector events fire (e.g., `['consent']`). */\\n require?: string[];\\n /**\\n * Ingest metadata extraction mapping.\\n * Extracts values from raw request objects (Express req, Lambda event, etc.)\\n * using walkerOS mapping syntax. Extracted data flows to transformers/destinations.\\n *\\n * @example\\n * ingest: {\\n * ip: 'req.ip',\\n * ua: 'req.headers.user-agent',\\n * origin: 'req.headers.origin'\\n * }\\n */\\n ingest?: Data;\\n}\\ntype PartialConfig<T extends TypesGeneric = Types> = Config<Types<Partial<Settings<T>> | Settings<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env<T>>>;\\ninterface Instance<T extends TypesGeneric = Types> {\\n type: string;\\n config: Config<T>;\\n push: Push<T>;\\n destroy?: DestroyFn<Config<T>, Env<T>>;\\n on?(event: Types$2, context?: unknown): void | boolean | Promise<void | boolean>;\\n}\\n/**\\n * Context provided to source init function.\\n * Extends base context with source-specific properties.\\n */\\ninterface Context<T extends TypesGeneric = Types> extends Base<Partial<Config<T>>, Env<T>> {\\n id: string;\\n /**\\n * Sets ingest metadata for the current request.\\n * Extracts values from the raw request using config.ingest mapping.\\n * The extracted data is passed through to transformers and destinations.\\n *\\n * @param value - Raw request object (Express req, Lambda event, etc.)\\n */\\n setIngest: (value: unknown) => Promise<void>;\\n /** Sets respond function for the current request. Called by source per-request. */\\n setRespond: (fn: RespondFn | undefined) => void;\\n}\\ntype Init<T extends TypesGeneric = Types> = (context: Context<T>) => Instance<T> | Promise<Instance<T>>;\\ntype InitSource<T extends TypesGeneric = Types> = {\\n code: Init<T>;\\n config?: Partial<Config<T>>;\\n env?: Partial<Env<T>>;\\n primary?: boolean;\\n next?: Next;\\n};\\n/**\\n * Sources configuration for collector.\\n * Maps source IDs to their initialization configurations.\\n */\\ninterface InitSources {\\n [sourceId: string]: InitSource<any>;\\n}\\n/**\\n * Renderer hint for source simulation UI.\\n * - 'browser': Source needs a real DOM (iframe with live preview)\\n * - 'codebox': Source uses a JSON/code editor (default)\\n */\\ntype Renderer = 'browser' | 'codebox';\\n/**\\n * Minimal environment contract for source simulation.\\n * Both JSDOM and iframe satisfy this interface.\\n */\\ninterface SimulationEnv {\\n window: Window & typeof globalThis;\\n document: Document;\\n localStorage: Storage;\\n [key: string]: unknown;\\n}\\n/**\\n * Setup function for source simulation.\\n * Runs BEFORE startFlow() to prepare the environment\\n * (dataLayer arrays, localStorage, window globals).\\n *\\n * Return void for sources that need no post-init action.\\n * Return a () => void trigger for sources that dispatch\\n * events AFTER startFlow() (e.g., usercentrics CustomEvent).\\n */\\ntype SetupFn = (input: unknown, env: SimulationEnv) => void | (() => void);\\n\\ntype source_BaseEnv = BaseEnv;\\ntype source_Config<T extends TypesGeneric = Types> = Config<T>;\\ntype source_Context<T extends TypesGeneric = Types> = Context<T>;\\ntype source_Env<T extends TypesGeneric = Types> = Env<T>;\\ntype source_Init<T extends TypesGeneric = Types> = Init<T>;\\ntype source_InitSettings<T extends TypesGeneric = Types> = InitSettings<T>;\\ntype source_InitSource<T extends TypesGeneric = Types> = InitSource<T>;\\ntype source_InitSources = InitSources;\\ntype source_Instance<T extends TypesGeneric = Types> = Instance<T>;\\ntype source_Mapping<T extends TypesGeneric = Types> = Mapping<T>;\\ntype source_PartialConfig<T extends TypesGeneric = Types> = PartialConfig<T>;\\ntype source_Push<T extends TypesGeneric = Types> = Push<T>;\\ntype source_Renderer = Renderer;\\ntype source_Settings<T extends TypesGeneric = Types> = Settings<T>;\\ntype source_SetupFn = SetupFn;\\ntype source_SimulationEnv = SimulationEnv;\\ntype source_Types<S = unknown, M = unknown, P = Fn$2, E = BaseEnv, I = S> = Types<S, M, P, E, I>;\\ntype source_TypesGeneric = TypesGeneric;\\ntype source_TypesOf<I> = TypesOf<I>;\\ndeclare namespace source {\\n export type { source_BaseEnv as BaseEnv, source_Config as Config, source_Context as Context, source_Env as Env, source_Init as Init, source_InitSettings as InitSettings, source_InitSource as InitSource, source_InitSources as InitSources, source_Instance as Instance, source_Mapping as Mapping, source_PartialConfig as PartialConfig, source_Push as Push, source_Renderer as Renderer, source_Settings as Settings, source_SetupFn as SetupFn, source_SimulationEnv as SimulationEnv, source_Types as Types, source_TypesGeneric as TypesGeneric, source_TypesOf as TypesOf };\\n}\\n\\ntype AnyObject<T = unknown> = Record<string, T>;\\ntype Elb = Fn$2;\\ntype AnyFunction = (...args: unknown[]) => unknown;\\ntype SingleOrArray<T> = T | Array<T>;\\ntype Events = Array<Event>;\\ntype PartialEvent = Partial<Event>;\\ntype DeepPartialEvent = DeepPartial<Event>;\\ninterface Event {\\n name: string;\\n data: Properties;\\n context: OrderedProperties;\\n globals: Properties;\\n custom: Properties;\\n user: User;\\n nested: Entities;\\n consent: Consent;\\n id: string;\\n trigger: string;\\n entity: string;\\n action: string;\\n timestamp: number;\\n timing: number;\\n group: string;\\n count: number;\\n version: Version;\\n source: Source;\\n}\\ninterface Consent {\\n [name: string]: boolean;\\n}\\ninterface User extends Properties {\\n id?: string;\\n device?: string;\\n session?: string;\\n hash?: string;\\n address?: string;\\n email?: string;\\n phone?: string;\\n userAgent?: string;\\n browser?: string;\\n browserVersion?: string;\\n deviceType?: string;\\n language?: string;\\n country?: string;\\n region?: string;\\n city?: string;\\n zip?: string;\\n timezone?: string;\\n os?: string;\\n osVersion?: string;\\n screenSize?: string;\\n ip?: string;\\n internal?: boolean;\\n}\\ninterface Version extends Properties {\\n source: string;\\n tagging: number;\\n}\\ninterface Source extends Properties {\\n type: SourceType;\\n id: string;\\n previous_id: string;\\n}\\ntype SourceType = 'web' | 'server' | 'app' | 'other' | string;\\ntype PropertyType = boolean | string | number | {\\n [key: string]: Property;\\n};\\ntype Property = PropertyType | Array<PropertyType>;\\ninterface Properties {\\n [key: string]: Property | undefined;\\n}\\ninterface OrderedProperties {\\n [key: string]: [Property, number] | undefined;\\n}\\ntype Entities = Array<Entity>;\\ninterface Entity {\\n entity: string;\\n data: Properties;\\n nested: Entities;\\n context: OrderedProperties;\\n}\\ntype ConsentHandler = Record<string, AnyFunction>;\\ntype ActionHandler = AnyFunction;\\ntype DeepPartial<T> = {\\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\\n};\\ntype PromiseOrValue<T> = T | Promise<T>;\\n\\ntype walkeros_ActionHandler = ActionHandler;\\ntype walkeros_AnyFunction = AnyFunction;\\ntype walkeros_AnyObject<T = unknown> = AnyObject<T>;\\ntype walkeros_Consent = Consent;\\ntype walkeros_ConsentHandler = ConsentHandler;\\ntype walkeros_DeepPartial<T> = DeepPartial<T>;\\ntype walkeros_DeepPartialEvent = DeepPartialEvent;\\ntype walkeros_Elb = Elb;\\ntype walkeros_Entities = Entities;\\ntype walkeros_Entity = Entity;\\ntype walkeros_Event = Event;\\ntype walkeros_Events = Events;\\ntype walkeros_OrderedProperties = OrderedProperties;\\ntype walkeros_PartialEvent = PartialEvent;\\ntype walkeros_PromiseOrValue<T> = PromiseOrValue<T>;\\ntype walkeros_Properties = Properties;\\ntype walkeros_Property = Property;\\ntype walkeros_PropertyType = PropertyType;\\ntype walkeros_SingleOrArray<T> = SingleOrArray<T>;\\ntype walkeros_Source = Source;\\ntype walkeros_SourceType = SourceType;\\ntype walkeros_User = User;\\ntype walkeros_Version = Version;\\ndeclare namespace walkeros {\\n export type { walkeros_ActionHandler as ActionHandler, walkeros_AnyFunction as AnyFunction, walkeros_AnyObject as AnyObject, walkeros_Consent as Consent, walkeros_ConsentHandler as ConsentHandler, walkeros_DeepPartial as DeepPartial, walkeros_DeepPartialEvent as DeepPartialEvent, walkeros_Elb as Elb, walkeros_Entities as Entities, walkeros_Entity as Entity, walkeros_Event as Event, walkeros_Events as Events, walkeros_OrderedProperties as OrderedProperties, walkeros_PartialEvent as PartialEvent, walkeros_PromiseOrValue as PromiseOrValue, walkeros_Properties as Properties, walkeros_Property as Property, walkeros_PropertyType as PropertyType, walkeros_SingleOrArray as SingleOrArray, walkeros_Source as Source, walkeros_SourceType as SourceType, walkeros_User as User, walkeros_Version as Version };\\n}\\n\\n/**\\n * A recorded function call made during simulation.\\n * Captures what a destination called on its env (e.g., window.gtag).\\n */\\ninterface Call {\\n /** Dot-path of the function called: \\\"window.gtag\\\", \\\"dataLayer.push\\\" */\\n fn: string;\\n /** Arguments passed to the function */\\n args: unknown[];\\n /** Unix timestamp in ms */\\n ts: number;\\n}\\n/**\\n * Result of simulating a single step.\\n * Same shape for source, transformer, and destination.\\n */\\ninterface Result {\\n /** Which step type was simulated */\\n step: 'source' | 'transformer' | 'destination';\\n /** Step name, e.g. \\\"gtag\\\", \\\"dataLayer\\\", \\\"enricher\\\" */\\n name: string;\\n /**\\n * Output events:\\n * - source: captured pre-collector events\\n * - transformer: [transformed event] or [] if filtered\\n * - destination: [] (destinations don't produce events)\\n */\\n events: DeepPartialEvent[];\\n /** Intercepted env calls. Populated for destinations, empty [] for others. */\\n calls: Call[];\\n /** Execution time in ms */\\n duration: number;\\n /** Error if the step threw */\\n error?: Error;\\n}\\n\\ntype simulation_Call = Call;\\ntype simulation_Result = Result;\\ndeclare namespace simulation {\\n export type { simulation_Call as Call, simulation_Result as Result };\\n}\\n\\ntype StorageType = 'local' | 'session' | 'cookie';\\ndeclare const Const: {\\n readonly Utils: {\\n readonly Storage: {\\n readonly Local: \\\"local\\\";\\n readonly Session: \\\"session\\\";\\n readonly Cookie: \\\"cookie\\\";\\n };\\n };\\n};\\n\\ntype SendDataValue = Property | Properties;\\ntype SendHeaders = {\\n [key: string]: string;\\n};\\ninterface SendResponse {\\n ok: boolean;\\n data?: unknown;\\n error?: string;\\n}\\n\\n/**\\n * Creates a TransformerResult for dynamic chain routing.\\n * Use this in transformer push functions to redirect the chain.\\n */\\ndeclare function branch(event: DeepPartialEvent, next: Next): Result$1;\\n\\n/**\\n * Anonymizes an IPv4 address by setting the last octet to 0.\\n *\\n * @param ip The IP address to anonymize.\\n * @returns The anonymized IP address or an empty string if the IP is invalid.\\n */\\ndeclare function anonymizeIP(ip: string): string;\\n\\n/**\\n * Flow Configuration Utilities\\n *\\n * Functions for resolving and processing Flow configurations.\\n *\\n * @packageDocumentation\\n */\\n\\n/** Sentinel prefix for deferred $env resolution. Shared with CLI bundler. */\\ndeclare const ENV_MARKER_PREFIX = \\\"__WALKEROS_ENV:\\\";\\ninterface ResolveOptions {\\n deferred?: boolean;\\n}\\n/**\\n * Convert package name to valid JavaScript variable name.\\n * Used for deterministic default import naming.\\n * @example\\n * packageNameToVariable('@walkeros/server-destination-api')\\n * // → '_walkerosServerDestinationApi'\\n */\\ndeclare function packageNameToVariable(packageName: string): string;\\n/**\\n * Get resolved flow configuration for a named flow.\\n *\\n * @param setup - The complete setup configuration\\n * @param flowName - Flow name (auto-selected if only one exists)\\n * @returns Resolved Config with $var, $env, and $def patterns resolved\\n * @throws Error if flow selection is required but not specified, or flow not found\\n *\\n * @example\\n * ```typescript\\n * import { getFlowConfig } from '@walkeros/core';\\n *\\n * const setup = JSON.parse(fs.readFileSync('walkeros.config.json', 'utf8'));\\n *\\n * // Auto-select if only one flow\\n * const config = getFlowConfig(setup);\\n *\\n * // Or specify flow\\n * const prodConfig = getFlowConfig(setup, 'production');\\n * ```\\n */\\ndeclare function getFlowConfig(setup: Setup, flowName?: string, options?: ResolveOptions): Config$5;\\n/**\\n * Get platform from config (web or server).\\n *\\n * @param config - Flow configuration\\n * @returns \\\"web\\\" or \\\"server\\\"\\n * @throws Error if neither web nor server is present\\n *\\n * @example\\n * ```typescript\\n * import { getPlatform } from '@walkeros/core';\\n *\\n * const platform = getPlatform(config);\\n * // Returns \\\"web\\\" or \\\"server\\\"\\n * ```\\n */\\ndeclare function getPlatform(config: Config$5): 'web' | 'server';\\n\\n/**\\n * @interface Assign\\n * @description Options for the assign function.\\n * @property merge - Merge array properties instead of overriding them.\\n * @property shallow - Create a shallow copy instead of updating the target object.\\n * @property extend - Extend the target with new properties instead of only updating existing ones.\\n */\\ninterface Assign {\\n merge?: boolean;\\n shallow?: boolean;\\n extend?: boolean;\\n}\\n/**\\n * Merges objects with advanced options.\\n *\\n * @template T, U\\n * @param target - The target object to merge into.\\n * @param obj - The source object to merge from.\\n * @param options - Options for merging.\\n * @returns The merged object.\\n */\\ndeclare function assign<T extends object, U extends object>(target: T, obj?: U, options?: Assign): T & U;\\n\\n/**\\n * Gets a value from an object by a dot-notation string.\\n * Supports wildcards for arrays.\\n *\\n * @example\\n * getByPath({ data: { id: 1 } }, \\\"data.id\\\") // Returns 1\\n *\\n * @param event - The object to get the value from.\\n * @param key - The dot-notation string.\\n * @param defaultValue - The default value to return if the key is not found.\\n * @returns The value from the object or the default value.\\n */\\ndeclare function getByPath(event: unknown, key?: string, defaultValue?: unknown): unknown;\\n/**\\n * Sets a value in an object by a dot-notation string.\\n *\\n * @param obj - The object to set the value in.\\n * @param key - The dot-notation string.\\n * @param value - The value to set.\\n * @returns A new object with the updated value.\\n */\\ndeclare function setByPath<T = unknown>(obj: T, key: string, value: unknown): T;\\n\\n/**\\n * Casts a value to a specific type.\\n *\\n * @param value The value to cast.\\n * @returns The casted value.\\n */\\ndeclare function castValue(value: unknown): PropertyType;\\n\\n/**\\n * Creates a deep clone of a value.\\n * Supports primitive values, objects, arrays, dates, and regular expressions.\\n * Handles circular references.\\n *\\n * @template T\\n * @param org - The value to clone.\\n * @param visited - A map of visited objects to handle circular references.\\n * @returns The cloned value.\\n */\\ndeclare function clone<T>(org: T, visited?: WeakMap<object, unknown>): T;\\n\\n/**\\n * Checks if the required consent is granted.\\n *\\n * @param required - The required consent states.\\n * @param state - The current consent states.\\n * @param individual - Individual consent states to prioritize.\\n * @returns The granted consent states or false if not granted.\\n */\\ndeclare function getGrantedConsent(required: Consent | undefined, state?: Consent, individual?: Consent): false | Consent;\\n\\n/**\\n * Creates a new destination instance by merging a base destination with additional configuration.\\n *\\n * This utility enables elegant destination configuration while avoiding config side-effects\\n * that could occur when reusing destination objects across multiple collector instances.\\n *\\n * @param baseDestination - The base destination to extend\\n * @param config - Additional configuration to merge with the base destination's config\\n * @returns A new destination instance with merged configuration\\n *\\n * @example\\n * ```typescript\\n * // Types are inferred automatically from destinationGtag\\n * elb('walker destination', createDestination(destinationGtag, {\\n * settings: { ga4: { measurementId: 'G-123' } }\\n * }));\\n * ```\\n */\\ndeclare function createDestination<I extends Instance$3>(baseDestination: I, config: Partial<Config$6<TypesOf$2<I>>>): I;\\n\\n/**\\n * Creates a complete event with default values.\\n * Used for testing and debugging.\\n *\\n * @param props - Properties to override the default values.\\n * @returns A complete event.\\n */\\ndeclare function createEvent(props?: DeepPartialEvent): Event;\\n/**\\n * Creates a complete event with default values based on the event name.\\n * Used for testing and debugging.\\n *\\n * @param name - The name of the event to create.\\n * @param props - Properties to override the default values.\\n * @returns A complete event.\\n */\\ndeclare function getEvent(name?: string, props?: DeepPartialEvent): Event;\\n\\n/**\\n * Generates a random string of a given length.\\n *\\n * @param length - The length of the random string.\\n * @returns The random string.\\n */\\ndeclare function getId(length?: number): string;\\n\\ninterface MarketingParameters {\\n [key: string]: string;\\n}\\n/**\\n * Extracts marketing parameters from a URL.\\n *\\n * @param url - The URL to extract the parameters from.\\n * @param custom - Custom marketing parameters to extract.\\n * @returns The extracted marketing parameters.\\n */\\ndeclare function getMarketingParameters(url: URL, custom?: MarketingParameters): Properties;\\n\\n/**\\n * Creates a debounced function that delays invoking `fn` until after `wait`\\n * milliseconds have elapsed since the last time the debounced function was\\n * invoked. The debounced function comes with a `cancel` method to cancel\\n * delayed `fn` invocations and a `flush` method to immediately invoke them.\\n *\\n * @template P, R\\n * @param fn The function to debounce.\\n * @param wait The number of milliseconds to delay.\\n * @param immediate Trigger the function on the leading edge, instead of the trailing.\\n * @returns The new debounced function.\\n */\\ndeclare function debounce<P extends unknown[], R>(fn: (...args: P) => R, wait?: number, immediate?: boolean): (...args: P) => Promise<R>;\\ndeclare function throttle<P extends unknown[], R>(fn: (...args: P) => R | undefined, delay?: number): (...args: P) => R | undefined;\\n\\n/**\\n * Checks if a value is an arguments object.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an arguments object, false otherwise.\\n */\\ndeclare function isArguments(value: unknown): value is IArguments;\\n/**\\n * Checks if a value is an array.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an array, false otherwise.\\n */\\ndeclare function isArray<T>(value: unknown): value is T[];\\n/**\\n * Checks if a value is a boolean.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a boolean, false otherwise.\\n */\\ndeclare function isBoolean(value: unknown): value is boolean;\\n/**\\n * Checks if an entity is a walker command.\\n *\\n * @param entity The entity to check.\\n * @returns True if the entity is a walker command, false otherwise.\\n */\\ndeclare function isCommand(entity: string): entity is \\\"walker\\\";\\n/**\\n * Checks if a value is defined.\\n *\\n * @param value The value to check.\\n * @returns True if the value is defined, false otherwise.\\n */\\ndeclare function isDefined<T>(val: T | undefined): val is T;\\n/**\\n * Checks if a value is an element or the document.\\n *\\n * @param elem The value to check.\\n * @returns True if the value is an element or the document, false otherwise.\\n */\\ndeclare function isElementOrDocument(elem: unknown): elem is Element;\\n/**\\n * Checks if a value is a function.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a function, false otherwise.\\n */\\ndeclare function isFunction(value: unknown): value is Function;\\n/**\\n * Checks if a value is a number.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a number, false otherwise.\\n */\\ndeclare function isNumber(value: unknown): value is number;\\n/**\\n * Checks if a value is an object.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an object, false otherwise.\\n */\\ndeclare function isObject(value: unknown): value is AnyObject;\\n/**\\n * Checks if two variables have the same type.\\n *\\n * @param variable The first variable.\\n * @param type The second variable.\\n * @returns True if the variables have the same type, false otherwise.\\n */\\ndeclare function isSameType<T>(variable: unknown, type: T): variable is typeof type;\\n/**\\n * Checks if a value is a string.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a string, false otherwise.\\n */\\ndeclare function isString(value: unknown): value is string;\\n\\n/**\\n * Create a logger instance\\n *\\n * @param config - Logger configuration\\n * @returns Logger instance with all log methods and scoping support\\n *\\n * @example\\n * ```typescript\\n * // Basic usage\\n * const logger = createLogger({ level: 'DEBUG' });\\n * logger.info('Hello world');\\n *\\n * // With scoping\\n * const destLogger = logger.scope('gtag').scope('myInstance');\\n * destLogger.debug('Processing event'); // DEBUG [gtag:myInstance] Processing event\\n *\\n * // With custom handler\\n * const logger = createLogger({\\n * handler: (level, message, context, scope, originalHandler) => {\\n * // Custom logic (e.g., send to Sentry)\\n * originalHandler(level, message, context, scope);\\n * }\\n * });\\n * ```\\n *\\n * // TODO: Consider compile-time stripping of debug logs in production builds\\n * // e.g., if (__DEV__) { logger.debug(...) }\\n */\\ndeclare function createLogger(config?: Config$4): Instance$2;\\n\\n/**\\n * Gets the mapping for an event.\\n *\\n * @param event The event to get the mapping for (can be partial or full).\\n * @param mapping The mapping rules.\\n * @returns The mapping result.\\n */\\ndeclare function getMappingEvent(event: DeepPartialEvent | PartialEvent | Event, mapping?: Rules): Promise<Result$2>;\\n/**\\n * Gets a value from a mapping.\\n *\\n * @param value The value to get the mapping from.\\n * @param data The mapping data.\\n * @param options The mapping options.\\n * @returns The mapped value.\\n */\\ndeclare function getMappingValue(value: DeepPartialEvent | unknown | undefined, data?: Data, options?: Options$1): Promise<Property | undefined>;\\n/**\\n * Processes an event through mapping configuration.\\n *\\n * This is the unified mapping logic used by both sources and destinations.\\n * It applies transformations in this order:\\n * 1. Config-level policy - modifies the event itself (global rules)\\n * 2. Mapping rules - finds matching rule based on entity-action\\n * 3. Event-level policy - modifies the event based on specific mapping rule\\n * 4. Data transformation - creates context data\\n * 5. Ignore check and name override\\n *\\n * Sources can pass partial events, destinations pass full events.\\n * getMappingValue works with both partial and full events.\\n *\\n * @param event - The event to process (can be partial or full, will be mutated by policies)\\n * @param config - Mapping configuration (mapping, data, policy, consent)\\n * @param collector - Collector instance for context\\n * @returns Object with transformed event, data, mapping rule, and ignore flag\\n */\\ndeclare function processEventMapping<T extends DeepPartialEvent | Event>(event: T, config: Config$3, collector: Instance$4): Promise<{\\n event: T;\\n data?: Property;\\n mapping?: Rule;\\n mappingKey?: string;\\n ignore: boolean;\\n}>;\\n\\n/**\\n * Environment mocking utilities for walkerOS destinations\\n *\\n * Provides standardized tools for intercepting function calls in environment objects,\\n * enabling consistent testing patterns across all destinations.\\n */\\ntype InterceptorFn = (path: string[], args: unknown[], original?: Function) => unknown;\\n/**\\n * Creates a proxied environment that intercepts function calls\\n *\\n * Uses Proxy to wrap environment objects and capture all function calls,\\n * allowing for call recording, mocking, or simulation.\\n *\\n * @param env - The environment object to wrap\\n * @param interceptor - Function called for each intercepted call\\n * @returns Proxied environment with interceptor applied\\n *\\n * @example\\n * ```typescript\\n * const calls: Array<{ path: string[]; args: unknown[] }> = [];\\n *\\n * const testEnv = mockEnv(env.push, (path, args) => {\\n * calls.push({ path, args });\\n * });\\n *\\n * // Use testEnv with destination\\n * await destination.push(event, { env: testEnv });\\n *\\n * // Analyze captured calls\\n * expect(calls).toContainEqual({\\n * path: ['window', 'gtag'],\\n * args: ['event', 'purchase', { value: 99.99 }]\\n * });\\n * ```\\n */\\ndeclare function mockEnv<T extends object>(env: T, interceptor: InterceptorFn): T;\\n/**\\n * Traverses environment object and replaces values using a replacer function\\n *\\n * Alternative to mockEnv for environments where Proxy is not suitable.\\n * Performs deep traversal and allows value transformation at each level.\\n *\\n * @param env - The environment object to traverse\\n * @param replacer - Function to transform values during traversal\\n * @returns New environment object with transformed values\\n *\\n * @example\\n * ```typescript\\n * const recordedCalls: APICall[] = [];\\n *\\n * const recordingEnv = traverseEnv(originalEnv, (value, path) => {\\n * if (typeof value === 'function') {\\n * return (...args: unknown[]) => {\\n * recordedCalls.push({\\n * path: path.join('.'),\\n * args: structuredClone(args)\\n * });\\n * return value(...args);\\n * };\\n * }\\n * return value;\\n * });\\n * ```\\n */\\ndeclare function traverseEnv<T extends object>(env: T, replacer: (value: unknown, path: string[]) => unknown): T;\\n\\n/**\\n * Mock logger instance for testing\\n * Includes all logger methods as jest.fn() plus tracking of scoped loggers\\n * Extends Instance to ensure type compatibility\\n */\\ninterface MockLogger extends Instance$2 {\\n error: jest.Mock;\\n warn: jest.Mock;\\n info: jest.Mock;\\n debug: jest.Mock;\\n throw: jest.Mock<never, [string | Error, unknown?]>;\\n json: jest.Mock;\\n scope: jest.Mock<MockLogger, [string]>;\\n /**\\n * Array of all scoped loggers created by this logger\\n * Useful for asserting on scoped logger calls in tests\\n */\\n scopedLoggers: MockLogger[];\\n}\\n/**\\n * Create a mock logger for testing\\n * All methods are jest.fn() that can be used for assertions\\n *\\n * @example\\n * ```typescript\\n * const mockLogger = createMockLogger();\\n *\\n * // Use in code under test\\n * someFunction(mockLogger);\\n *\\n * // Assert on calls\\n * expect(mockLogger.error).toHaveBeenCalledWith('error message');\\n *\\n * // Assert on scoped logger\\n * const scoped = mockLogger.scopedLoggers[0];\\n * expect(scoped.debug).toHaveBeenCalledWith('debug in scope');\\n * ```\\n */\\ndeclare function createMockLogger(): MockLogger;\\n\\n/**\\n * Checks if a value is a valid property type.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a valid property type, false otherwise.\\n */\\ndeclare function isPropertyType(value: unknown): value is PropertyType;\\n/**\\n * Filters a value to only include valid property types.\\n *\\n * @param value The value to filter.\\n * @returns The filtered value or undefined.\\n */\\ndeclare function filterValues(value: unknown): Property | undefined;\\n/**\\n * Casts a value to a valid property type.\\n *\\n * @param value The value to cast.\\n * @returns The casted value or undefined.\\n */\\ndeclare function castToProperty(value: unknown): Property | undefined;\\n\\n/**\\n * Converts a request string to a data object.\\n *\\n * @param parameter The request string to convert.\\n * @returns The data object or undefined.\\n */\\ndeclare function requestToData(parameter: unknown): AnyObject | undefined;\\n/**\\n * Converts a data object to a request string.\\n *\\n * @param data The data object to convert.\\n * @returns The request string.\\n */\\ndeclare function requestToParameter(data: AnyObject | PropertyType): string;\\n\\n/**\\n * Transforms data to a string.\\n *\\n * @param data The data to transform.\\n * @returns The transformed data.\\n */\\ndeclare function transformData(data?: SendDataValue): string | undefined;\\n/**\\n * Gets the headers for a request.\\n *\\n * @param headers The headers to merge with the default headers.\\n * @returns The merged headers.\\n */\\ndeclare function getHeaders(headers?: SendHeaders): SendHeaders;\\n\\n/**\\n * Throws an error.\\n *\\n * @param error The error to throw.\\n */\\ndeclare function throwError(error: unknown): never;\\n\\n/**\\n * Trims quotes and whitespaces from a string.\\n *\\n * @param str The string to trim.\\n * @returns The trimmed string.\\n */\\ndeclare function trim(str: string): string;\\n\\n/**\\n * A utility function that wraps a function in a try-catch block.\\n *\\n * @template P, R, S\\n * @param fn The function to wrap.\\n * @param onError A function to call when an error is caught.\\n * @param onFinally A function to call in the finally block.\\n * @returns The wrapped function.\\n */\\ndeclare function tryCatch<P extends unknown[], R, S>(fn: (...args: P) => R | undefined, onError: (err: unknown) => S, onFinally?: () => void): (...args: P) => R | S;\\ndeclare function tryCatch<P extends unknown[], R>(fn: (...args: P) => R | undefined, onError?: undefined, onFinally?: () => void): (...args: P) => R | undefined;\\n/**\\n * A utility function that wraps an async function in a try-catch block.\\n *\\n * @template P, R, S\\n * @param fn The async function to wrap.\\n * @param onError A function to call when an error is caught.\\n * @param onFinally A function to call in the finally block.\\n * @returns The wrapped async function.\\n */\\ndeclare function tryCatchAsync<P extends unknown[], R, S>(fn: (...args: P) => R, onError: (err: unknown) => S, onFinally?: () => void | Promise<void>): (...args: P) => Promise<R | S>;\\ndeclare function tryCatchAsync<P extends unknown[], R>(fn: (...args: P) => R, onError?: undefined, onFinally?: () => void | Promise<void>): (...args: P) => Promise<R | undefined>;\\n\\n/**\\n * A utility function that wraps a function with hooks.\\n *\\n * @template P, R\\n * @param fn The function to wrap.\\n * @param name The name of the function.\\n * @param hooks The hooks to use.\\n * @returns The wrapped function.\\n */\\ndeclare function useHooks<P extends unknown[], R>(fn: (...args: P) => R, name: string, hooks: Functions): (...args: P) => R;\\n\\n/**\\n * Parses a user agent string to extract browser, OS, and device information.\\n *\\n * @param userAgent The user agent string to parse.\\n * @returns An object containing the parsed user agent information.\\n */\\ndeclare function parseUserAgent(userAgent?: string): User;\\n/**\\n * Gets the browser name from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The browser name or undefined.\\n */\\ndeclare function getBrowser(userAgent: string): string | undefined;\\n/**\\n * Gets the browser version from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The browser version or undefined.\\n */\\ndeclare function getBrowserVersion(userAgent: string): string | undefined;\\n/**\\n * Gets the OS name from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The OS name or undefined.\\n */\\ndeclare function getOS(userAgent: string): string | undefined;\\n/**\\n * Gets the OS version from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The OS version or undefined.\\n */\\ndeclare function getOSVersion(userAgent: string): string | undefined;\\n/**\\n * Gets the device type from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The device type or undefined.\\n */\\ndeclare function getDeviceType(userAgent: string): string | undefined;\\n\\n/**\\n * Inline Code Wrapping Utilities\\n *\\n * Converts inline code strings to executable functions.\\n * Used for mapping properties: condition, fn, validate.\\n *\\n * @packageDocumentation\\n */\\n\\n/**\\n * Wrap inline code string as Condition function.\\n *\\n * @param code - Inline code string\\n * @returns Condition function matching Mapping.Condition signature\\n *\\n * @remarks\\n * Available parameters in code:\\n * - `value` - The event or partial event being processed\\n * - `mapping` - Current mapping configuration\\n * - `collector` - Collector instance\\n *\\n * If code has no explicit return, it's auto-wrapped with `return`.\\n *\\n * @example\\n * ```typescript\\n * // One-liner (auto-wrapped)\\n * const fn = wrapCondition('value.data.total > 100');\\n * fn(event, mapping, collector); // returns boolean\\n *\\n * // Multi-statement (explicit return)\\n * const fn = wrapCondition('const threshold = 100; return value.data.total > threshold');\\n * ```\\n */\\ndeclare function wrapCondition(code: string): Condition;\\n/**\\n * Wrap inline code string as Fn function.\\n *\\n * @param code - Inline code string\\n * @returns Fn function matching Mapping.Fn signature\\n *\\n * @remarks\\n * Available parameters in code:\\n * - `value` - The event or partial event being processed\\n * - `mapping` - Current mapping configuration\\n * - `options` - Options object with consent and collector\\n *\\n * If code has no explicit return, it's auto-wrapped with `return`.\\n *\\n * @example\\n * ```typescript\\n * // One-liner (auto-wrapped)\\n * const fn = wrapFn('value.user.email.split(\\\"@\\\")[1]');\\n * fn(event, mapping, options); // returns domain\\n *\\n * // Multi-statement (explicit return)\\n * const fn = wrapFn('const parts = value.user.email.split(\\\"@\\\"); return parts[1].toUpperCase()');\\n * ```\\n */\\ndeclare function wrapFn(code: string): Fn$1;\\n/**\\n * Wrap inline code string as Validate function.\\n *\\n * @param code - Inline code string\\n * @returns Validate function matching Mapping.Validate signature\\n *\\n * @remarks\\n * Available parameters in code:\\n * - `value` - The current value being validated\\n *\\n * If code has no explicit return, it's auto-wrapped with `return`.\\n *\\n * @example\\n * ```typescript\\n * // One-liner (auto-wrapped)\\n * const fn = wrapValidate('value && value.length > 0');\\n * fn('hello'); // returns true\\n *\\n * // Multi-statement (explicit return)\\n * const fn = wrapValidate('if (!value) return false; return value.length > 0');\\n * ```\\n */\\ndeclare function wrapValidate(code: string): Validate;\\n\\ninterface WalkerOSPackageMeta {\\n packageName: string;\\n version: string;\\n description?: string;\\n type?: string;\\n platform?: string;\\n}\\ninterface WalkerOSPackageInfo {\\n packageName: string;\\n version: string;\\n type?: string;\\n platform?: string;\\n schemas: Record<string, unknown>;\\n examples: Record<string, unknown>;\\n}\\ndeclare function fetchPackageSchema(packageName: string, options?: {\\n version?: string;\\n timeout?: number;\\n}): Promise<WalkerOSPackageInfo>;\\ndeclare function fetchPackageMeta(packageName: string, options?: {\\n version?: string;\\n timeout?: number;\\n}): Promise<WalkerOSPackageMeta>;\\n\\n/**\\n * Deep merge two JSON Schema objects with additive semantics.\\n * - `required` arrays: union (deduplicated)\\n * - `properties`: deep merge (child wins on conflict for scalars)\\n * - Scalars: child overrides parent\\n */\\ndeclare function mergeContractSchemas(parent: Record<string, unknown>, child: Record<string, unknown>): Record<string, unknown>;\\n/**\\n * Resolve a contract for a specific entity-action pair.\\n * Merges matching levels additively:\\n * 1. setup[\\\"*\\\"][\\\"*\\\"]\\n * 2. setup[\\\"*\\\"][action]\\n * 3. setup[entity][\\\"*\\\"]\\n * 4. setup[entity][action]\\n * 5-8. Same for config-level contract\\n */\\ndeclare function resolveContract(setup: Contract, entity: string, action: string, config?: Contract): Record<string, unknown>;\\n\\ndeclare function mcpResult(result: unknown): {\\n content: {\\n type: \\\"text\\\";\\n text: string;\\n }[];\\n structuredContent: Record<string, unknown>;\\n};\\ndeclare function mcpError(error: unknown): {\\n content: {\\n type: \\\"text\\\";\\n text: string;\\n }[];\\n isError: true;\\n};\\n\\nexport { collector as Collector, Const, context as Context, data as Data, destination as Destination, ENV_MARKER_PREFIX, elb as Elb, flow as Flow, hooks as Hooks, Level, lifecycle as Lifecycle, logger as Logger, mapping as Mapping, type MarketingParameters, type MockLogger, on as On, request as Request, type ResolveOptions, type RespondFn, type RespondOptions, type SendDataValue, type SendHeaders, type SendResponse, simulation as Simulation, source as Source, type StorageType, transformer as Transformer, walkeros as WalkerOS, type WalkerOSPackageInfo, type WalkerOSPackageMeta, anonymizeIP, assign, branch, castToProperty, castValue, clone, createDestination, createEvent, createLogger, createMockLogger, createRespond, debounce, fetchPackageMeta, fetchPackageSchema, filterValues, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getFlowConfig, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, getPlatform, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isSameType, isString, mcpError, mcpResult, mergeContractSchemas, mockEnv, packageNameToVariable, parseUserAgent, processEventMapping, requestToData, requestToParameter, resolveContract, setByPath, throttle, throwError, transformData, traverseEnv, trim, tryCatch, tryCatchAsync, useHooks, wrapCondition, wrapFn, wrapValidate };\\n\"","/**\n * Monaco Editor TypeScript Type Management\n *\n * This utility manages TypeScript type definitions in Monaco Editor for:\n * 1. Static walkerOS core types (bundled at build time via Vite ?raw import)\n * 2. Dynamic destination types (loaded on-the-fly when destinations are added)\n * 3. Context-specific function signatures (condition, fn, validate)\n *\n * Architecture:\n * - Uses monaco.languages.typescript.typescriptDefaults.addExtraLib()\n * - Each type definition gets a unique file path (e.g., 'file:///destinations/gtag.d.ts')\n * - Types can be added/removed dynamically without page reload\n * - Core types are bundled for offline support and predictable versioning\n */\n\nimport type { Monaco } from '@monaco-editor/react';\nimport { getContextTypes } from './monaco-context-types';\n\n// This import will be replaced by tsup plugin with actual TypeScript content\nimport walkerosCoreTypesBundled from 'virtual:walkeros-core-types';\n\n/**\n * Type library entry - tracks loaded type definitions\n */\ninterface TypeLibrary {\n uri: string; // Unique identifier (e.g., 'file:///walkeros-core.d.ts')\n content: string; // TypeScript definition content\n disposable?: { dispose: () => void }; // Monaco disposable for cleanup\n}\n\n/**\n * Registry of loaded type libraries\n */\nconst typeLibraries = new Map<string, TypeLibrary>();\n\n/**\n * Configuration for TypeScript compiler options\n */\nexport function configureMonacoTypeScript(monaco: Monaco) {\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2020,\n lib: ['es2020'],\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.CommonJS,\n noEmit: true,\n esModuleInterop: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n allowJs: true,\n checkJs: false,\n strict: false,\n noImplicitAny: false,\n strictNullChecks: false,\n });\n\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: false,\n noSyntaxValidation: false,\n diagnosticCodesToIgnore: [1108, 1005],\n });\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2020,\n lib: ['es2020'],\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.CommonJS,\n noEmit: true,\n esModuleInterop: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n strict: false,\n });\n}\n\n/**\n * Add a type library from a string\n *\n * @param monaco - Monaco instance\n * @param uri - Unique identifier (e.g., 'file:///destinations/gtag.d.ts')\n * @param content - TypeScript definition content\n * @returns True if added, false if already exists\n */\nexport function addTypeLibrary(\n monaco: Monaco,\n uri: string,\n content: string,\n): boolean {\n // Check if already loaded\n if (typeLibraries.has(uri)) {\n return false;\n }\n\n // Add to both JavaScript and TypeScript language services\n // This ensures types work whether the editor is in JS or TS mode\n const jsDisposable =\n monaco.languages.typescript.javascriptDefaults.addExtraLib(content, uri);\n\n const tsDisposable =\n monaco.languages.typescript.typescriptDefaults.addExtraLib(content, uri);\n\n // Track in registry (store both disposables)\n typeLibraries.set(uri, {\n uri,\n content,\n disposable: {\n dispose: () => {\n jsDisposable.dispose();\n tsDisposable.dispose();\n },\n },\n });\n\n return true;\n}\n\n/**\n * Remove a type library\n *\n * @param uri - URI to remove\n * @returns True if removed, false if not found\n */\nexport function removeTypeLibrary(uri: string): boolean {\n const lib = typeLibraries.get(uri);\n if (!lib) {\n return false;\n }\n\n // Dispose Monaco resource\n lib.disposable?.dispose();\n\n // Remove from registry\n typeLibraries.delete(uri);\n\n return true;\n}\n\n/**\n * Update a type library (remove + add)\n *\n * @param monaco - Monaco instance\n * @param uri - URI to update\n * @param content - New content\n */\nexport function updateTypeLibrary(\n monaco: Monaco,\n uri: string,\n content: string,\n) {\n removeTypeLibrary(uri);\n addTypeLibrary(monaco, uri, content);\n}\n\n/**\n * Load type definitions from a URL\n *\n * @param monaco - Monaco instance\n * @param url - URL to .d.ts file\n * @param uri - Optional custom URI (defaults to URL)\n */\nexport async function loadTypeLibraryFromURL(\n monaco: Monaco,\n url: string,\n uri?: string,\n): Promise<boolean> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n return false;\n }\n\n const content = await response.text();\n const typeUri = uri || `file:///${url}`;\n\n return addTypeLibrary(monaco, typeUri, content);\n } catch {\n return false;\n }\n}\n\n/**\n * Options for loading package types dynamically\n */\nexport interface LoadPackageTypesOptions {\n /** Package name (e.g., '@walkeros/destination-gtag') */\n package: string;\n /** Version to load (e.g., '0.1.0', 'latest') */\n version?: string;\n /** CDN to use ('unpkg' or 'jsdelivr') */\n cdn?: 'unpkg' | 'jsdelivr';\n /** Path to .d.ts file within package (defaults to '/dist/index.d.ts') */\n typesPath?: string;\n}\n\n/**\n * Strip problematic imports from type definition content\n *\n * Removes import statements that Monaco can't resolve, while preserving:\n * - Type declarations\n * - Export statements\n * - Re-export statements (export * from / export { } from)\n *\n * Uses multiple strategies for robustness:\n * 1. Simple single-line imports (fast path)\n * 2. Multi-line imports (comprehensive)\n * 3. Import type assertions\n *\n * Does NOT remove:\n * - export { } from 'module' (re-exports)\n * - export * from 'module' (re-exports)\n * - Triple-slash directives (/// <reference types=\"...\" />)\n *\n * @param content - Raw .d.ts file content\n * @returns Cleaned content safe for Monaco\n */\nfunction stripExternalImports(content: string): string {\n // Strategy 1: Remove simple single-line imports\n // Matches: import ... from '...';\n // Handles: import type, import *, import { }, default imports\n let cleaned = content.replace(\n /^import\\s+(?:type\\s+)?(?:\\*\\s+as\\s+\\w+|\\{[^}]*\\}|[\\w$]+)(?:\\s*,\\s*(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+))?\\s+from\\s+['\"][^'\"]+['\"];?\\s*$/gm,\n '',\n );\n\n // Strategy 2: Remove multi-line imports (more aggressive)\n // Matches imports that span multiple lines\n cleaned = cleaned.replace(\n /^import\\s+(?:type\\s+)?(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+|[\\w$]+)\\s+from\\s+['\"][^'\"]+['\"];?\\s*$/gms,\n '',\n );\n\n // Strategy 3: Remove import type assertions\n // Matches: import('module')\n cleaned = cleaned.replace(/import\\s*\\(\\s*['\"][^'\"]+['\"]\\s*\\)/g, 'any');\n\n // Clean up excessive blank lines (more than 2 consecutive)\n cleaned = cleaned.replace(/\\n{3,}/g, '\\n\\n');\n\n return cleaned;\n}\n\nexport interface LoadPackageTypesOptions {\n package: string;\n version?: string;\n}\n\nexport async function loadPackageTypes(\n monaco: Monaco,\n options: LoadPackageTypesOptions,\n): Promise<boolean> {\n const { package: packageName, version = 'latest' } = options;\n const uri = `file:///node_modules/${packageName}/index.d.ts`;\n\n if (typeLibraries.has(uri)) {\n return true;\n }\n\n const url = `https://cdn.jsdelivr.net/npm/${packageName}@${version}/dist/index.d.ts`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n return false;\n }\n\n let content = await response.text();\n content = stripExternalImports(content);\n\n const moduleContent = `declare module '${packageName}' {\\n${content}\\n}`;\n const success = addTypeLibrary(monaco, uri, moduleContent);\n\n return success;\n } catch {\n return false;\n }\n}\n\n/**\n * Load walkerOS core types (bundled at build time)\n *\n * Uses bundled types imported via Vite's ?raw import.\n * This ensures types are always available offline and match the installed version.\n */\nexport function loadWalkerOSCoreTypes(monaco: Monaco): boolean {\n const uri = 'file:///node_modules/@walkeros/core/index.d.ts';\n\n // Check if already loaded\n if (typeLibraries.has(uri)) {\n return true;\n }\n\n // Clean the types using the same robust stripping function\n const cleanedTypes = stripExternalImports(walkerosCoreTypesBundled);\n\n // Wrap in module declaration\n const moduleContent = `declare module '@walkeros/core' {\n${cleanedTypes}\n}`;\n\n return addTypeLibrary(monaco, uri, moduleContent);\n}\n\n/**\n * Minimal fallback types if we can't load from node_modules\n */\nfunction getMinimalWalkerOSTypes(): string {\n return `\ndeclare namespace WalkerOS {\n export interface Event {\n entity: string;\n action: string;\n data?: Record<string, unknown>;\n context?: Record<string, unknown>;\n user?: {\n id?: string;\n device?: string;\n session?: string;\n [key: string]: unknown;\n };\n nested?: unknown[];\n consent?: Record<string, boolean>;\n id?: string;\n trigger?: string;\n timestamp?: number;\n timing?: number;\n count?: number;\n version?: {\n client?: string;\n tagging?: number;\n };\n }\n\n export interface Properties {\n [key: string]: unknown;\n }\n\n export interface Mapping {\n [key: string]: unknown;\n }\n\n export interface Collector {\n push: (event: Partial<Event>) => Promise<unknown>;\n [key: string]: unknown;\n }\n\n export namespace Destination {\n export interface Config<T = unknown> {\n id?: string;\n mapping?: Mapping;\n custom?: T;\n [key: string]: unknown;\n }\n }\n}\n`;\n}\n\n/**\n * Type of function context (fn, condition, validate)\n */\nexport type FunctionType = 'condition' | 'fn' | 'validate';\n\n/**\n * Add context-specific globals for function editors\n *\n * Provides type definitions for inline function parameters without imports.\n * Supports three function types:\n * - fn: Transform functions (value, mapping, options) => Property\n * - condition: Condition functions (value, mapping, collector) => boolean\n * - validate: Validation functions (value) => boolean\n */\nexport interface FunctionContext {\n type: FunctionType;\n valueType?: string; // Optional: Custom type for 'value' parameter\n}\n\nexport function addFunctionContextTypes(\n monaco: Monaco,\n context: FunctionContext,\n) {\n const uri = `file:///context/${context.type}.d.ts`;\n\n // Use hand-crafted type templates from monaco-context-types\n const contextTypes = getContextTypes(context.type);\n\n // Update or add\n updateTypeLibrary(monaco, uri, contextTypes);\n}\n\n/**\n * Add destination-specific types dynamically\n *\n * @param monaco - Monaco instance\n * @param destinationId - Unique destination identifier (e.g., 'gtag', 'fbq')\n * @param typeDefinition - TypeScript definition for destination's custom config/event\n *\n * @example\n * ```typescript\n * addDestinationType(monaco, 'gtag', `\n * declare namespace Gtag {\n * interface Settings {\n * measurementId: string;\n * sendPageView?: boolean;\n * }\n *\n * interface EventParams {\n * event_category?: string;\n * event_label?: string;\n * value?: number;\n * }\n * }\n *\n * // Extend WalkerOS namespace\n * declare namespace WalkerOS {\n * namespace Destination {\n * interface ConfigMap {\n * gtag: Gtag.Settings;\n * }\n * }\n * }\n * `);\n * ```\n */\nexport function addDestinationType(\n monaco: Monaco,\n destinationId: string,\n typeDefinition: string,\n) {\n const uri = `file:///destinations/${destinationId}.d.ts`;\n updateTypeLibrary(monaco, uri, typeDefinition);\n}\n\n/**\n * Remove destination types when destination is removed\n */\nexport function removeDestinationType(destinationId: string) {\n const uri = `file:///destinations/${destinationId}.d.ts`;\n removeTypeLibrary(uri);\n}\n\n/**\n * Simple helper to register only walkerOS core types\n *\n * Use this for basic scenarios where you just need @walkeros/core types.\n * For advanced usage (destinations, function contexts), use initializeMonacoTypes.\n *\n * @param monaco - Monaco editor instance\n *\n * @example\n * ```typescript\n * const handleBeforeMount = (monaco: Monaco) => {\n * registerWalkerOSTypes(monaco);\n * };\n * ```\n */\nexport function registerWalkerOSTypes(monaco: Monaco): void {\n configureMonacoTypeScript(monaco);\n loadWalkerOSCoreTypes(monaco);\n}\n\n/**\n * Initialize Monaco with walkerOS types (full setup)\n *\n * Call this once in CodeBox's beforeMount handler.\n * Includes core types, TypeScript config, and default function context.\n *\n * @param monaco - Monaco editor instance\n *\n * @example\n * ```typescript\n * const handleBeforeMount = (monaco: Monaco) => {\n * initializeMonacoTypes(monaco);\n * };\n * ```\n */\nexport function initializeMonacoTypes(monaco: Monaco): void {\n // Configure compiler\n configureMonacoTypeScript(monaco);\n\n // Load core types (now synchronous with bundled types)\n loadWalkerOSCoreTypes(monaco);\n\n // Add default function context (condition)\n addFunctionContextTypes(monaco, { type: 'condition' });\n}\n\n/**\n * Get all loaded type libraries (for debugging)\n */\nexport function getLoadedTypeLibraries(): string[] {\n return Array.from(typeLibraries.keys());\n}\n\n/**\n * Clear all type libraries (for testing)\n */\nexport function clearAllTypeLibraries() {\n for (const [uri, lib] of typeLibraries.entries()) {\n lib.disposable?.dispose();\n }\n typeLibraries.clear();\n}\n","// Ready-to-use demos\nexport {\n DestinationDemo,\n createCaptureFn,\n} from './components/demos/DestinationDemo';\nexport { DestinationInitDemo } from './components/demos/DestinationInitDemo';\nexport { PromotionPlayground } from './components/demos/PromotionPlayground';\nexport type { DestinationDemoProps } from './components/demos/DestinationDemo';\nexport type { DestinationInitDemoProps } from './components/demos/DestinationInitDemo';\nexport type { PromotionPlaygroundProps } from './components/demos/PromotionPlayground';\n\n// Alias for backward compatibility with website\nexport { DestinationDemo as DestinationPush } from './components/demos/DestinationDemo';\nexport { DestinationInitDemo as DestinationInit } from './components/demos/DestinationInitDemo';\n\n// Organisms\nexport { LiveCode } from './components/organisms/live-code';\nexport { CollectorBox } from './components/organisms/collector-box';\nexport { BrowserBox } from './components/organisms/browser-box';\nexport type { LiveCodeProps } from './components/organisms/live-code';\nexport type { CollectorBoxProps } from './components/organisms/collector-box';\nexport type { BrowserBoxProps } from './components/organisms/browser-box';\n\n// Molecules\nexport { ArchitectureFlow } from './components/molecules/architecture-flow';\nexport { CodeBox } from './components/molecules/code-box';\nexport { CodeSnippet } from './components/molecules/code-snippet';\nexport { FlowMap } from './components/molecules/flow-map';\nexport { PropertyTable } from './components/molecules/property-table';\nexport {\n Dropdown,\n DropdownItem,\n DropdownDivider,\n} from './components/molecules/dropdown';\nexport type {\n ArchitectureFlowProps,\n FlowColumn,\n FlowSection,\n FlowItem,\n} from './components/molecules/architecture-flow';\nexport type { CodeBoxProps, CodeBoxTab } from './components/molecules/code-box';\nexport type { CodeSnippetProps } from './components/molecules/code-snippet';\nexport type {\n FlowMapProps,\n FlowStageConfig,\n} from './components/molecules/flow-map';\nexport type { PropertyTableProps } from './components/molecules/property-table';\nexport type {\n DropdownProps,\n DropdownItemProps,\n DropdownDividerProps,\n} from './components/molecules/dropdown';\n\nexport { Preview } from './components/molecules/preview';\nexport type { PreviewProps } from './components/molecules/preview';\n\n// Atoms\nexport { Code } from './components/atoms/code';\nexport { Box } from './components/atoms/box';\nexport { Grid } from './components/atoms/grid';\nexport { Header } from './components/atoms/header';\nexport { Footer } from './components/atoms/footer';\nexport { Button } from './components/atoms/button';\nexport { ButtonGroup } from './components/atoms/button-group';\nexport { ButtonLink } from './components/atoms/button-link';\nexport { Spinner } from './components/atoms/spinner';\n\nexport { Icon } from './components/atoms/icons';\nexport type { CodeProps } from './components/atoms/code';\nexport type { BoxProps, BoxTab } from './components/atoms/box';\nexport type { GridProps } from './components/atoms/grid';\nexport type { HeaderProps } from './components/atoms/header';\nexport type { FooterProps } from './components/atoms/footer';\nexport type { ButtonProps } from './components/atoms/button';\nexport type { ButtonGroupProps } from './components/atoms/button-group';\nexport type { ButtonLinkProps } from './components/atoms/button-link';\nexport type { SpinnerProps } from './components/atoms/spinner';\n\n// MDX Integration\nexport { MDXProvider } from './providers/MDXProvider';\nexport { MDXCode } from './components/atoms/mdx-code';\n\n// Utility\nexport { cn } from './lib/utils';\n\n// Hooks\nexport { useDropdown } from './hooks/useDropdown';\nexport type { UseDropdownReturn } from './hooks/useDropdown';\n\n// Monaco Editor themes\nexport {\n palenightTheme,\n lighthouseTheme,\n registerPalenightTheme,\n registerLighthouseTheme,\n registerAllThemes,\n} from './themes';\nexport type { ExplorerTheme } from './themes';\n\n// Monaco Editor type registration\nexport {\n registerWalkerOSTypes,\n initializeMonacoTypes,\n loadPackageTypes,\n loadTypeLibraryFromURL,\n} from './utils/monaco-types';\nexport type { LoadPackageTypesOptions } from './utils/monaco-types';\n\n// Monaco JSON Schema registry\nexport {\n registerJsonSchema,\n unregisterJsonSchema,\n generateModelPath,\n} from './utils/monaco-json-schema';\n\n// Schema enrichment\nexport {\n enrichSchema,\n type MonacoSchemaExtension,\n} from './utils/monaco-schema-enrichment';\nexport { enrichFlowSetupSchema } from './utils/monaco-schema-flow-setup';\nexport { getEnrichedContractSchema } from './utils/monaco-schema-contract';\nexport { getVariablesSchema } from './utils/monaco-schema-variables';\n\n// walkerOS reference decorations\nexport {\n findWalkerOSReferences,\n applyWalkerOSDecorations,\n registerWalkerOSDecorationStyles,\n REFERENCE_PATTERNS,\n} from './utils/monaco-walkeros-decorations';\n\n// IntelliSense types\nexport type { IntelliSenseContext, PackageInfo } from './types/intellisense';\n\n// IntelliSense providers\nexport {\n registerWalkerOSProviders,\n disposeWalkerOSProviders,\n setIntelliSenseContext,\n removeIntelliSenseContext,\n} from './utils/monaco-walkeros-providers';\nexport { validateWalkerOSReferences } from './utils/monaco-walkeros-markers';\nexport { extractFlowIntelliSenseContext } from './utils/monaco-intellisense-flow-extractor';\n\n// Destination helpers\nexport {\n createGtagDestination,\n createFbqDestination,\n createPlausibleDestination,\n} from './helpers/destinations';\n\n// Capture utilities for destination demos (captureDestinationPush still exported for DestinationDemo)\nexport {\n captureDestinationPush,\n formatCapturedCalls,\n createRawCapture,\n} from './helpers/capture';\n","import React, { useState, useCallback, useEffect } from 'react';\nimport type { WalkerOS, Mapping, Destination } from '@walkeros/core';\nimport {\n createEvent,\n tryCatchAsync,\n processEventMapping,\n} from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { CodeBox } from '../molecules/code-box';\nimport { Grid } from '../atoms/grid';\nimport { captureDestinationPush } from '../../helpers/capture';\n\nexport interface DestinationDemoProps {\n destination: Destination.Instance;\n event: WalkerOS.PartialEvent;\n mapping?: Mapping.Rule | string;\n settings?: unknown;\n generic?: boolean; // When true, wraps mapping in '*': { '*': mapping }\n labelEvent?: string;\n labelMapping?: string;\n labelOutput?: string;\n fn?: (\n event: WalkerOS.Event,\n context: Destination.PushContext,\n ) => Promise<string>; // Custom output function\n}\n\n/**\n * DestinationDemo - Interactive destination testing component\n *\n * Automatically captures destination.push() calls and displays the output.\n * The component auto-detects the destination's env from destination.examples.env.push.\n *\n * Props:\n * - destination: Destination instance with examples.env.push export\n * - event: walkerOS event to process\n * - mapping: Optional mapping rules\n * - settings: Destination-specific settings\n * - generic: If true, wraps mapping in { '*': { '*': mapping } }\n * - labelEvent: Label for event panel (default: 'Event')\n * - labelMapping: Label for mapping panel (default: 'Mapping')\n * - labelOutput: Label for output panel (default: 'Result')\n *\n * Example:\n * ```tsx\n * import destinationPlausible from '@walkeros/web-destination-plausible';\n * import { examples } from '@walkeros/web-destination-plausible';\n * import { getEvent } from '@walkeros/core';\n *\n * const destination = { ...destinationPlausible, examples };\n *\n * <DestinationDemo\n * destination={destination}\n * event={getEvent('order complete')}\n * mapping={examples.mapping.purchase}\n * settings={{ domain: 'elbwalker.com' }}\n * generic={true}\n * />\n * ```\n */\n\n// Generic capture function creator\nexport function createCaptureFn(\n fnName: string,\n onCapture: (output: string) => void,\n) {\n return (...args: unknown[]) => {\n const formattedArgs = args\n .map((arg) => {\n if (typeof arg === 'string') return `\"${arg}\"`;\n return JSON.stringify(arg, null, 2);\n })\n .join(', ');\n\n onCapture(`${fnName}(${formattedArgs});`);\n };\n}\n\nexport function DestinationDemo({\n destination,\n event: initialEvent,\n mapping: initialMapping = {},\n settings,\n generic = false,\n labelEvent = 'Event',\n labelMapping = 'Mapping',\n labelOutput = 'Result',\n fn,\n}: DestinationDemoProps) {\n const [eventInput, setEventInput] = useState(\n JSON.stringify(initialEvent, null, 2),\n );\n const [mappingInput, setMappingInput] = useState(\n typeof initialMapping === 'string'\n ? initialMapping\n : JSON.stringify(initialMapping, null, 2),\n );\n const [output, setOutput] = useState('');\n\n const executeDestination = useCallback(async () => {\n await tryCatchAsync(\n async () => {\n const eventData = JSON.parse(eventInput);\n const mappingData = JSON.parse(mappingInput);\n const event = createEvent(eventData);\n\n // Wrap mapping in generic structure if requested\n const wrappedMapping =\n generic && mappingData ? { '*': { '*': mappingData } } : mappingData;\n\n // Build config\n const config: Destination.Config = {\n settings: settings || {},\n mapping: wrappedMapping,\n };\n\n // Create minimal collector for mapping processing\n const { collector } = await startFlow({});\n\n // Process event mapping (applies mapping transformations)\n const processed = await processEventMapping(event, config, collector);\n\n // Build context for destination.push()\n const context: Destination.PushContext = {\n id: 'demo',\n collector,\n config,\n data: processed.data,\n env: destination.env || {},\n logger: collector.logger,\n };\n\n // If custom function provided, use it\n if (fn) {\n const result = await fn(processed.event, context);\n setOutput(result);\n return;\n }\n\n // Auto-detect destination.examples.env.push (for push method)\n const destinationEnv = (\n destination as { examples?: { env?: { push?: unknown } } }\n ).examples?.env?.push;\n\n // Use captureDestinationPush to automatically capture output\n const captureFn = captureDestinationPush(destination, destinationEnv);\n const result = await captureFn(processed.event, context);\n setOutput(result);\n },\n (error) => setOutput(`Error: ${error}`),\n )();\n }, [eventInput, mappingInput, destination, settings, generic, fn]);\n\n useEffect(() => {\n const timeoutId = setTimeout(executeDestination, 500);\n return () => clearTimeout(timeoutId);\n }, [executeDestination]);\n\n return (\n <Grid columns={3} rowHeight=\"synced\">\n <CodeBox\n label={labelEvent}\n code={eventInput}\n onChange={setEventInput}\n language=\"json\"\n showFormat\n autoHeight\n />\n <CodeBox\n label={labelMapping}\n code={mappingInput}\n onChange={setMappingInput}\n language=\"json\"\n showFormat\n autoHeight\n />\n <CodeBox\n label={labelOutput}\n code={output}\n disabled\n language=\"javascript\"\n autoHeight\n />\n </Grid>\n );\n}\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport type { editor } from 'monaco-editor';\nimport { useMonaco } from '@monaco-editor/react';\nimport { Box } from '../atoms/box';\nimport { Code, type CodeProps } from '../atoms/code';\n\n/**\n * Tab with code content for CodeBox\n */\nexport interface CodeBoxTab {\n id: string;\n label: string;\n code: string;\n language?: string; // Optional, defaults to CodeBox's language prop\n}\n\nexport interface CodeBoxProps extends Omit<CodeProps, 'code'> {\n // Single code mode (backward compat)\n code?: string;\n\n // Header (use header OR tabs, not both)\n label?: string; // Shorthand for header\n header?: string; // Box header prop\n showHeader?: boolean;\n\n // Tabs with code content\n tabs?: CodeBoxTab[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n defaultTab?: string;\n\n // Visual options\n showTrafficLights?: boolean;\n\n // Actions\n showCopy?: boolean;\n showFormat?: boolean;\n showSettings?: boolean;\n\n /** Callback when validation issues change. Use to disable Save when errors > 0. */\n onValidationIssues?: (counts: { errors: number; warnings: number }) => void;\n\n // Layout\n footer?: React.ReactNode;\n height?: string | number;\n style?: React.CSSProperties;\n}\n\n/**\n * CodeBox - Monaco editor wrapped in a Box with header and actions\n *\n * Molecule that combines Box + Code atom + toolbar actions.\n * Use this when you need an editor with header, copy, and format buttons.\n * Use Code atom directly when you need an editor without Box wrapper.\n *\n * Height Behavior:\n *\n * Three height modes:\n * 1. Grid context: Equal row heights (250-450px), fills available space\n * 2. Explicit height prop: Fixed height (e.g., height={600} or height=\"50vh\")\n * 3. Auto-height prop: Dynamically sizes to content (min-max boundaries)\n *\n * @example\n * // Grid context - use default (no autoHeight) for equal row heights\n * <Grid columns={3}>\n * <CodeBox code={event} label=\"Event\" showCopy />\n * <CodeBox code={mapping} label=\"Mapping\" showFormat />\n * <CodeBox code={output} label=\"Output\" disabled />\n * </Grid>\n *\n * @example\n * // Standalone with auto-height - fits content, no blank space\n * <CodeBox\n * code={setupCode}\n * label=\"Setup\"\n * autoHeight={{ min: 100, max: 600 }}\n * disabled\n * />\n *\n * @example\n * // Explicit height override\n * <CodeBox\n * code={largeConfig}\n * label=\"Configuration\"\n * height={600}\n * showFormat\n * />\n */\nexport function CodeBox({\n // Code props (single code mode)\n code,\n language = 'javascript',\n onChange,\n disabled = false,\n autoHeight,\n // Header\n label,\n header,\n showHeader = true,\n // Tabs with code content\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n // Visual\n showTrafficLights = false,\n // Actions\n showCopy = true,\n showFormat = false,\n showSettings = false,\n // Validation\n onValidationIssues,\n // Layout\n footer,\n height,\n style,\n className,\n ...codeProps\n}: CodeBoxProps) {\n const { onMount: userOnMount, ...restCodeProps } = codeProps;\n const monaco = useMonaco();\n const [copied, setCopied] = useState(false);\n const [showSettingsPanel, setShowSettingsPanel] = useState(false);\n const [settings, setSettings] = useState({\n lineNumbers: false,\n minimap: false,\n wordWrap: false,\n sticky: true,\n });\n const settingsRef = useRef<HTMLDivElement>(null);\n type MarkerDetail = {\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n };\n const [markerCounts, setMarkerCounts] = useState({ errors: 0, warnings: 0 });\n const [markerDetails, setMarkerDetails] = useState<MarkerDetail[]>([]);\n const [openMarkerMenu, setOpenMarkerMenu] = useState<\n 'error' | 'warning' | null\n >(null);\n const markerMenuRef = useRef<HTMLDivElement>(null);\n const editorInstanceRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n\n useEffect(() => {\n if (!showSettingsPanel && !openMarkerMenu) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n showSettingsPanel &&\n settingsRef.current &&\n !settingsRef.current.contains(e.target as Node)\n ) {\n setShowSettingsPanel(false);\n }\n if (\n openMarkerMenu &&\n markerMenuRef.current &&\n !markerMenuRef.current.contains(e.target as Node)\n ) {\n setOpenMarkerMenu(null);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showSettingsPanel, openMarkerMenu]);\n\n // Track active tab for copy button (Box handles tab state, we just observe)\n const [currentTabId, setCurrentTabId] = useState(\n controlledActiveTab ?? defaultTab ?? tabs?.[0]?.id ?? '',\n );\n\n // Update internal tracking when controlled prop changes\n const effectiveTabId = controlledActiveTab ?? currentTabId;\n\n // Wrap user's onTabChange to also update our tracking\n const handleTabChange = useCallback(\n (tabId: string) => {\n setCurrentTabId(tabId);\n onTabChange?.(tabId);\n },\n [onTabChange],\n );\n\n // Get current code for copy/format buttons\n const activeTabData = tabs?.find((t) => t.id === effectiveTabId);\n const currentCode = activeTabData?.code ?? code ?? '';\n const currentLanguage = activeTabData?.language ?? language;\n\n // Use label as fallback for header (backward compat)\n const boxHeader = header ?? label ?? 'Code';\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(currentCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard write failed silently\n }\n };\n\n const handleFormat = () => {\n if (!onChange || disabled || currentLanguage !== 'json') return;\n\n try {\n const parsed = JSON.parse(currentCode);\n const formatted = JSON.stringify(parsed, null, 2);\n onChange(formatted);\n } catch (e) {\n // Invalid JSON, do nothing\n }\n };\n\n const handleEditorMount = useCallback(\n (monacoEditor: editor.IStandaloneCodeEditor) => {\n editorInstanceRef.current = monacoEditor;\n userOnMount?.(monacoEditor);\n },\n [userOnMount],\n );\n\n const handleMarkerCounts = useCallback(\n (info: { errors: number; warnings: number; markers: MarkerDetail[] }) => {\n setMarkerCounts({ errors: info.errors, warnings: info.warnings });\n setMarkerDetails(info.markers);\n onValidationIssues?.({ errors: info.errors, warnings: info.warnings });\n },\n [onValidationIssues],\n );\n\n const jumpToLine = useCallback((line: number, column: number) => {\n const ed = editorInstanceRef.current;\n if (!ed) return;\n ed.revealLineInCenter(line);\n ed.setPosition({ lineNumber: line, column });\n ed.focus();\n setOpenMarkerMenu(null);\n }, []);\n\n const settingsProps = {\n lineNumbers: settings.lineNumbers,\n minimap: settings.minimap,\n wordWrap: settings.wordWrap,\n sticky: settings.sticky,\n };\n\n // Build header actions\n const actions = (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {markerCounts.errors > 0 && (\n <div\n ref={openMarkerMenu === 'error' ? markerMenuRef : undefined}\n style={{ position: 'relative' }}\n >\n <button\n className=\"elb-codebox-marker-badge elb-codebox-marker-badge--error\"\n onClick={() =>\n setOpenMarkerMenu(openMarkerMenu === 'error' ? null : 'error')\n }\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n <span>{markerCounts.errors}</span>\n </button>\n {openMarkerMenu === 'error' && (\n <MarkerMenu\n markers={markerDetails.filter((m) => m.severity === 'error')}\n onJump={jumpToLine}\n />\n )}\n </div>\n )}\n {markerCounts.warnings > 0 && (\n <div\n ref={openMarkerMenu === 'warning' ? markerMenuRef : undefined}\n style={{ position: 'relative' }}\n >\n <button\n className=\"elb-codebox-marker-badge elb-codebox-marker-badge--warning\"\n onClick={() =>\n setOpenMarkerMenu(openMarkerMenu === 'warning' ? null : 'warning')\n }\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <circle cx=\"12\" cy=\"17\" r=\".5\" />\n </svg>\n <span>{markerCounts.warnings}</span>\n </button>\n {openMarkerMenu === 'warning' && (\n <MarkerMenu\n markers={markerDetails.filter((m) => m.severity === 'warning')}\n onJump={jumpToLine}\n />\n )}\n </div>\n )}\n {showFormat && !disabled && currentLanguage === 'json' && (\n <button\n className=\"elb-explorer-btn\"\n onClick={handleFormat}\n title=\"Format JSON\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"5\" x2=\"16\" y2=\"5\" />\n <line x1=\"7\" y1=\"10\" x2=\"20\" y2=\"10\" />\n <line x1=\"7\" y1=\"15\" x2=\"18\" y2=\"15\" />\n <line x1=\"3\" y1=\"20\" x2=\"12\" y2=\"20\" />\n </svg>\n </button>\n )}\n {showCopy && (\n <button\n className=\"elb-explorer-btn\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy to clipboard'}\n >\n {copied ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n )}\n {showSettings && (\n <div ref={settingsRef} style={{ position: 'relative' }}>\n <button\n className={`elb-explorer-btn${showSettingsPanel ? ' active' : ''}`}\n onClick={() => setShowSettingsPanel(!showSettingsPanel)}\n title=\"Editor settings\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n {showSettingsPanel && (\n <div className=\"elb-codebox-settings\">\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.lineNumbers}\n onChange={() =>\n setSettings((s) => ({ ...s, lineNumbers: !s.lineNumbers }))\n }\n />\n Line numbers\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.minimap}\n onChange={() =>\n setSettings((s) => ({ ...s, minimap: !s.minimap }))\n }\n />\n Minimap\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.wordWrap}\n onChange={() =>\n setSettings((s) => ({ ...s, wordWrap: !s.wordWrap }))\n }\n />\n Word wrap\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.sticky}\n onChange={() =>\n setSettings((s) => ({ ...s, sticky: !s.sticky }))\n }\n />\n Sticky scroll\n </label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n\n // Auto-height class for content-based sizing (Box handles gridContext)\n const autoHeightClass = autoHeight ? 'elb-box--auto-height' : '';\n const boxClassName = `${autoHeightClass} ${className || ''}`.trim();\n\n // Convert CodeBoxTab[] to BoxTab[] with Code as content (Box handles rendering)\n const boxTabs = tabs?.map((tab) => ({\n id: tab.id,\n label: tab.label,\n content: (\n <Code\n code={tab.code}\n language={tab.language ?? language}\n onChange={onChange}\n disabled={disabled}\n autoHeight={autoHeight}\n onMount={handleEditorMount}\n onMarkerCounts={handleMarkerCounts}\n {...restCodeProps}\n {...settingsProps}\n />\n ),\n }));\n\n return (\n <Box\n header={boxHeader}\n headerActions={actions}\n showHeader={showHeader}\n tabs={boxTabs}\n defaultTab={defaultTab}\n activeTab={controlledActiveTab}\n onTabChange={handleTabChange}\n showTrafficLights={showTrafficLights}\n footer={footer}\n height={height}\n style={style}\n className={boxClassName}\n >\n {/* Only render Code as children when no tabs (single code mode) */}\n {!tabs && (\n <Code\n code={code ?? ''}\n language={language}\n onChange={onChange}\n disabled={disabled}\n autoHeight={autoHeight}\n onMount={handleEditorMount}\n onMarkerCounts={handleMarkerCounts}\n {...restCodeProps}\n {...settingsProps}\n />\n )}\n </Box>\n );\n}\n\nfunction MarkerMenu({\n markers,\n onJump,\n}: {\n markers: Array<{ message: string; line: number; column: number }>;\n onJump: (line: number, column: number) => void;\n}) {\n return (\n <div className=\"elb-codebox-marker-menu\">\n {markers\n .sort((a, b) => a.line - b.line || a.column - b.column)\n .map((m, i) => (\n <button\n key={i}\n className=\"elb-codebox-marker-menu-item\"\n onClick={() => onJump(m.line, m.column)}\n >\n <span className=\"elb-codebox-marker-menu-line\">Ln {m.line}</span>\n <span className=\"elb-codebox-marker-menu-msg\">{m.message}</span>\n </button>\n ))}\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport { Header } from './header';\nimport { useGridHeight } from '../../contexts/GridHeightContext';\n\nexport interface BoxTab {\n id: string;\n label: string;\n content?: React.ReactNode;\n}\n\nexport interface BoxProps {\n header?: string;\n headerActions?: React.ReactNode;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n // Height management\n height?: number | string;\n minHeight?: number | string;\n maxHeight?: number | string;\n tiny?: boolean;\n resizable?: boolean;\n showHeader?: boolean; // Hide header (default: true)\n // Tabs support\n tabs?: BoxTab[];\n activeTab?: string; // Controlled mode\n onTabChange?: (id: string) => void;\n defaultTab?: string; // Uncontrolled default\n // Mac style\n showTrafficLights?: boolean;\n}\n\n/**\n * Box - Container atom component\n *\n * Provides a consistent box container with header and content area.\n * Used across all explorer components for consistent styling.\n *\n * Height behavior:\n * - Default: minHeight 100px, grows as needed\n * - tiny prop: sets minHeight to 100px explicitly\n * - Custom minHeight/maxHeight: override defaults\n * - In Grid: fills row height (equal heights per row)\n *\n * @example\n * <Box header=\"Preview\">\n * <Preview html={html} css={css} />\n * </Box>\n *\n * @example\n * <Box header=\"Code\" minHeight={200} maxHeight={600}>\n * <CodeBox ... />\n * </Box>\n */\nfunction TrafficLights() {\n return (\n <div className=\"elb-explorer-traffic-lights\">\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--red\" />\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--yellow\" />\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--green\" />\n </div>\n );\n}\n\nexport function Box({\n header,\n headerActions,\n footer,\n children,\n className = '',\n style,\n height,\n minHeight,\n maxHeight,\n tiny = false,\n resizable = false,\n showHeader = true,\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n showTrafficLights = false,\n}: BoxProps) {\n // Grid context for synchronized heights\n const gridContext = useGridHeight();\n\n // Uncontrolled tab state\n const [internalActiveTab, setInternalActiveTab] = useState(\n defaultTab || (tabs?.[0]?.id ?? ''),\n );\n\n // Controlled vs uncontrolled\n const isControlled = controlledActiveTab !== undefined;\n const activeTabId = isControlled ? controlledActiveTab : internalActiveTab;\n\n const handleTabClick = (tabId: string) => {\n if (onTabChange) {\n onTabChange(tabId);\n }\n if (!isControlled) {\n setInternalActiveTab(tabId);\n }\n };\n\n // Height management: explicit > grid synced > default\n const boxStyle: React.CSSProperties = { ...style };\n\n if (height !== undefined) {\n boxStyle.height = typeof height === 'number' ? `${height}px` : height;\n } else if (gridContext?.syncedHeight) {\n boxStyle.height = `${gridContext.syncedHeight}px`;\n }\n\n if (tiny) {\n boxStyle.height = 'auto';\n boxStyle.minHeight =\n minHeight !== undefined\n ? typeof minHeight === 'number'\n ? `${minHeight}px`\n : minHeight\n : '100px';\n } else if (minHeight !== undefined) {\n boxStyle.minHeight =\n typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n }\n\n if (maxHeight !== undefined) {\n boxStyle.maxHeight =\n typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n\n if (resizable) {\n boxStyle.resize = 'vertical';\n boxStyle.overflow = 'auto';\n }\n\n // Auto-height class for grid context\n const useContentHeight = !!gridContext?.enabled;\n const autoHeightClass = useContentHeight ? 'elb-box--auto-height' : '';\n\n // Determine content: tab content (if available) or children\n const activeTabContent = tabs?.find((t) => t.id === activeTabId)?.content;\n const content = activeTabContent ?? children;\n\n // Render tabs header or regular header\n const hasTabs = tabs && tabs.length > 0;\n const showRegularHeader = showHeader && header && !hasTabs;\n\n return (\n <div\n className={`elb-explorer elb-explorer-box ${autoHeightClass} ${className}`.trim()}\n style={boxStyle}\n >\n {hasTabs && (\n <div className=\"elb-explorer-tabs\">\n {showTrafficLights && <TrafficLights />}\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n className={`elb-explorer-tab ${activeTabId === tab.id ? 'elb-explorer-tab--active' : ''}`}\n onClick={() => handleTabClick(tab.id)}\n >\n {tab.label}\n </button>\n ))}\n {headerActions && (\n <div className=\"elb-explorer-tab-actions\">{headerActions}</div>\n )}\n </div>\n )}\n {showRegularHeader && <Header label={header}>{headerActions}</Header>}\n <div className=\"elb-explorer-content\">{content}</div>\n {footer && <div className=\"elb-explorer-footer\">{footer}</div>}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface HeaderProps {\n label: string;\n children?: React.ReactNode;\n}\n\nexport function Header({ label, children }: HeaderProps) {\n return (\n <div className=\"elb-explorer-header\">\n <span className=\"elb-explorer-label\">{label}</span>\n {children}\n </div>\n );\n}\n","import { createContext, useContext, useRef } from 'react';\n\nexport interface GridHeightContextValue {\n registerBox: (id: number, height: number) => void;\n unregisterBox: (id: number) => void;\n getBoxId: () => number;\n syncedHeight: number | null;\n enabled: boolean;\n}\n\nexport const GridHeightContext = createContext<GridHeightContextValue | null>(\n null,\n);\n\nexport function useGridHeight(): GridHeightContextValue | null {\n return useContext(GridHeightContext);\n}\n\nlet nextBoxId = 0;\nexport function useBoxId(): number {\n const idRef = useRef<number | null>(null);\n if (idRef.current === null) {\n idRef.current = nextBoxId++;\n }\n return idRef.current;\n}\n","import React, {\n type ComponentType,\n useEffect,\n useState,\n useRef,\n useCallback,\n} from 'react';\nimport { Editor, loader } from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport { registerAllThemes } from '../../themes';\nimport { registerWalkerOSTypes } from '../../utils/monaco-types';\nimport {\n applyDataElbDecorations,\n registerDataElbStyles,\n} from '../../utils/monaco-decorators';\nimport {\n applyWalkerOSDecorations,\n registerWalkerOSDecorationStyles,\n} from '../../utils/monaco-walkeros-decorations';\nimport {\n registerWalkerOSProviders,\n setIntelliSenseContext,\n removeIntelliSenseContext,\n} from '../../utils/monaco-walkeros-providers';\nimport { registerFormatters } from '../../utils/monaco-formatters';\nimport {\n generateModelPath,\n initMonacoJson,\n registerJsonSchema,\n unregisterJsonSchema,\n} from '../../utils/monaco-json-schema';\nimport { useMonacoHeight } from '../../hooks/useMonacoHeight';\nimport { useGridHeight } from '../../contexts/GridHeightContext';\n\n// Monaco Editor configuration\n// NOTE: MonacoEnvironment.getWorker and loader.config() should be configured\n// by the consuming application. See examples in the explorer app's main.tsx\nimport type * as monaco from 'monaco-editor';\nimport type { IntelliSenseContext } from '../../types/intellisense';\n\nexport interface CodeProps {\n code: string;\n language?: string;\n onChange?: (code: string) => void;\n disabled?: boolean;\n lineNumbers?: boolean;\n minimap?: boolean;\n folding?: boolean;\n wordWrap?: boolean;\n className?: string;\n beforeMount?: (monaco: typeof import('monaco-editor')) => void;\n onMount?: (editor: editor.IStandaloneCodeEditor) => void;\n autoHeight?: boolean | { min?: number; max?: number };\n fontSize?: number;\n packages?: string[];\n sticky?: boolean; // Enable sticky scroll (default: true)\n ide?: boolean; // Enable IDE features: hover, validation, etc. (default: false)\n /** JSON Schema (Draft 7) for validation and IntelliSense in JSON mode */\n jsonSchema?: Record<string, unknown>;\n /** Context data for dynamic IntelliSense (variable names, secrets, etc.) */\n intellisenseContext?: IntelliSenseContext;\n /** Validation function — called on content change, results rendered as Monaco markers */\n validate?: (code: string) => {\n valid: boolean;\n errors: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n endLine?: number;\n endColumn?: number;\n }>;\n warnings: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n endLine?: number;\n endColumn?: number;\n }>;\n };\n /** Callback when Monaco marker counts change */\n onMarkerCounts?: (info: {\n errors: number;\n warnings: number;\n markers: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n }>;\n }) => void;\n}\n\n/**\n * Code - Pure Monaco editor atom\n *\n * Height Management:\n * Two modes controlled by `autoHeight` prop:\n *\n * 1. Default (autoHeight=false): height=\"100%\" - fills parent container\n * - Uses flex: 1 + min-height: 0 for proper flex overflow containment\n * - Monaco set to height=\"100%\" to fill container\n * - automaticLayout: true + ResizeObserver for reliable resize detection\n * - Use in Grid (equal heights) and Flex contexts (fill parent)\n *\n * 2. Auto-height (autoHeight=true): Dynamically sizes to content\n * - Uses Monaco's getContentHeight() API for accurate content measurement\n * - Respects min/max boundaries (default: 100-600px)\n * - Updates automatically when content changes\n * - Use in standalone contexts (docs) to eliminate blank space\n *\n * @example\n * // Grid context - use default height=\"100%\" for equal row heights\n * <Grid columns={3}>\n * <CodeBox code={event} />\n * <CodeBox code={mapping} />\n * </Grid>\n *\n * @example\n * // Standalone context - use autoHeight to fit content\n * <CodeBox\n * code={shortExample}\n * autoHeight={{ min: 100, max: 600 }}\n * />\n */\nexport function Code({\n code,\n language = 'javascript',\n onChange,\n disabled = false,\n lineNumbers = false,\n minimap = false,\n folding = false,\n wordWrap = false,\n className,\n beforeMount,\n onMount,\n autoHeight,\n fontSize = 13,\n packages,\n sticky = true,\n ide = false,\n jsonSchema,\n intellisenseContext,\n validate,\n onMarkerCounts,\n}: CodeProps) {\n // Track if component has mounted (client-side hydration complete)\n const [isMounted, setIsMounted] = useState(false);\n // Use a consistent default theme for SSR - only update after mount\n const [monacoTheme, setMonacoTheme] = useState('vs-light');\n const decorationsCleanupRef = useRef<Array<() => void>>([]);\n const monacoRef = useRef<typeof import('monaco-editor') | null>(null);\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const gridContext = useGridHeight();\n const boxIdRef = useRef<number | null>(null);\n\n if (gridContext?.enabled && boxIdRef.current === null) {\n boxIdRef.current = gridContext.getBoxId();\n }\n\n const handleHeightChange = useCallback(\n (height: number) => {\n if (gridContext?.enabled && boxIdRef.current !== null) {\n gridContext.registerBox(boxIdRef.current, height);\n }\n },\n [gridContext],\n );\n\n useEffect(() => {\n return () => {\n if (gridContext?.enabled && boxIdRef.current !== null) {\n gridContext.unregisterBox(boxIdRef.current);\n }\n };\n }, [gridContext]);\n\n const heightConfig = typeof autoHeight === 'object' ? autoHeight : {};\n const [calculatedHeight, registerEditor] = useMonacoHeight({\n enabled: !!autoHeight || !!gridContext?.enabled,\n minHeight: heightConfig.min ?? (gridContext?.enabled ? 1 : 20),\n maxHeight: heightConfig.max ?? 600,\n defaultHeight: gridContext?.enabled ? 250 : 400,\n onHeightChange: handleHeightChange,\n });\n\n // Register data-elb styles on mount\n useEffect(() => {\n registerDataElbStyles();\n }, []);\n\n // Helper: Find data-theme attribute from closest ancestor or document\n // Returns null during SSR (no document available)\n const getDataTheme = useCallback((): string | null => {\n if (typeof document === 'undefined') return null;\n\n // Check container ref first (closest to Monaco)\n if (containerRef.current) {\n const closest = containerRef.current.closest('[data-theme]');\n if (closest) {\n return closest.getAttribute('data-theme');\n }\n }\n\n // Fall back to document root\n return document.documentElement.getAttribute('data-theme');\n }, []);\n\n // Mark component as mounted (hydration complete)\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Theme detection - only runs after mount to prevent hydration mismatch\n useEffect(() => {\n if (!isMounted) return;\n\n const checkTheme = () => {\n const dataTheme = getDataTheme();\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n const newTheme = isDark ? 'elbTheme-dark' : 'elbTheme-light';\n\n setMonacoTheme(newTheme);\n };\n\n checkTheme();\n\n const observer = new MutationObserver(() => {\n checkTheme();\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n checkTheme();\n };\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n observer.disconnect();\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [isMounted, getDataTheme]);\n\n // ResizeObserver for container size changes\n // Complements automaticLayout: true for more reliable detection\n // Handles cases where Grid constraints change or parent container resizes\n useEffect(() => {\n const editor = editorRef.current;\n const container = containerRef.current;\n\n if (!editor || !container) return;\n\n const resizeObserver = new ResizeObserver(() => {\n // Debounce layout calls to prevent excessive updates\n requestAnimationFrame(() => {\n editor.layout();\n });\n });\n\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // JSON Schema registration for IntelliSense\n const modelPathRef = useRef<string | null>(null);\n const intellisenseContextRef = useRef(intellisenseContext);\n intellisenseContextRef.current = intellisenseContext;\n const validateRef = useRef(validate);\n validateRef.current = validate;\n const onMarkerCountsRef = useRef(onMarkerCounts);\n onMarkerCountsRef.current = onMarkerCounts;\n\n // Generate stable model path on first render if jsonSchema is provided\n if ((jsonSchema || intellisenseContext) && !modelPathRef.current) {\n modelPathRef.current = generateModelPath();\n }\n\n // Register/update JSON schema when it changes\n useEffect(() => {\n if (!jsonSchema || !modelPathRef.current) return;\n\n registerJsonSchema(modelPathRef.current, jsonSchema);\n\n return () => {\n if (modelPathRef.current) {\n unregisterJsonSchema(modelPathRef.current);\n }\n };\n }, [jsonSchema]);\n\n // Sync intellisenseContext with provider registry\n useEffect(() => {\n if (intellisenseContext && modelPathRef.current) {\n setIntelliSenseContext(modelPathRef.current, intellisenseContext);\n return () => {\n if (modelPathRef.current) {\n removeIntelliSenseContext(modelPathRef.current);\n }\n };\n }\n }, [intellisenseContext]);\n\n const handleChange = (value: string | undefined) => {\n if (onChange && value !== undefined) {\n onChange(value);\n }\n };\n\n const handleBeforeMount = async (monaco: typeof import('monaco-editor')) => {\n monacoRef.current = monaco;\n\n // Initialize JSON schema registry with this monaco instance\n initMonacoJson(monaco);\n\n // Always run built-in setup\n registerAllThemes(monaco);\n registerFormatters(monaco);\n\n if (packages && packages.length > 0) {\n registerWalkerOSTypes(monaco);\n\n const { loadPackageTypes } = await import('../../utils/monaco-types');\n for (const pkg of packages) {\n if (pkg !== '@walkeros/core') {\n await loadPackageTypes(monaco, { package: pkg }).catch(() => {});\n }\n }\n }\n\n const dataTheme = getDataTheme();\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n const themeName = isDark ? 'elbTheme-dark' : 'elbTheme-light';\n monaco.editor.setTheme(themeName);\n\n // Register walkerOS IntelliSense providers for JSON\n if (language === 'json') {\n registerWalkerOSProviders(monaco);\n }\n\n // Call user's beforeMount AFTER built-in setup\n if (beforeMount) {\n beforeMount(monaco);\n }\n };\n\n const MonacoEditor = Editor as ComponentType<{\n height: string;\n language: string;\n value: string;\n onChange: (value: string | undefined) => void;\n beforeMount?: (monaco: typeof import('monaco-editor')) => void;\n onMount?: (editor: editor.IStandaloneCodeEditor) => void;\n theme: string;\n options: Record<string, unknown>;\n path?: string; // Model URI for JSON schema fileMatch\n }>;\n\n const handleEditorMount = (monacoEditor: editor.IStandaloneCodeEditor) => {\n editorRef.current = monacoEditor;\n\n // Register with height hook if auto-height or grid context is enabled\n if (autoHeight || gridContext?.enabled) {\n registerEditor(monacoEditor);\n }\n\n // Apply data-elb decorations for HTML\n if (language === 'html' && monacoRef.current) {\n decorationsCleanupRef.current.push(\n applyDataElbDecorations(monacoEditor, monacoRef.current),\n );\n }\n\n // Apply walkerOS reference decorations for JSON\n if (language === 'json') {\n registerWalkerOSDecorationStyles();\n decorationsCleanupRef.current.push(\n applyWalkerOSDecorations(monacoEditor),\n );\n }\n\n // Run validation from validate prop (replaces internal walkerOS markers)\n if (validateRef.current && monacoRef.current) {\n const monacoInstance = monacoRef.current;\n let validateTimer: ReturnType<typeof setTimeout>;\n\n const runValidation = () => {\n const model = monacoEditor.getModel();\n if (!model) return;\n const text = model.getValue();\n const fn = validateRef.current;\n if (!fn) return;\n\n const result = fn(text);\n const allIssues = [...result.errors, ...result.warnings];\n\n monacoInstance.editor.setModelMarkers(\n model,\n 'validate',\n allIssues.map((issue) => ({\n severity: issue.severity === 'error' ? 8 : 4,\n message: issue.message,\n startLineNumber: issue.line,\n startColumn: issue.column,\n endLineNumber: issue.endLine ?? issue.line,\n endColumn: issue.endColumn ?? issue.column + 1,\n })),\n );\n\n // Don't report here — the global marker listener below handles it\n };\n\n // Initial validation\n runValidation();\n\n // Debounced validation on content change\n const validateDisposable = monacoEditor.onDidChangeModelContent(() => {\n clearTimeout(validateTimer);\n validateTimer = setTimeout(runValidation, 300);\n });\n\n decorationsCleanupRef.current.push(() => {\n clearTimeout(validateTimer);\n validateDisposable.dispose();\n });\n }\n\n // Listen for marker changes and report counts to CodeBox header badges.\n // When a custom validate prop is provided, it is the single source of truth\n // (same validator the CLI uses). Clear Monaco's built-in JSON diagnostics\n // so they don't double-count.\n if (onMarkerCountsRef.current && monacoRef.current) {\n const monacoInstance = monacoRef.current;\n const model = monacoEditor.getModel();\n const hasCustomValidate = !!validateRef.current;\n if (model) {\n const reportMarkers = () => {\n // When custom validate owns validation, strip Monaco's JSON markers\n if (hasCustomValidate) {\n monacoInstance.editor.setModelMarkers(model, 'json', []);\n }\n const raw = monacoInstance.editor.getModelMarkers({\n resource: model.uri,\n });\n let errors = 0;\n let warnings = 0;\n const details: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n }> = [];\n for (const m of raw) {\n if (m.severity === 8) {\n errors++;\n details.push({\n message: m.message,\n severity: 'error',\n line: m.startLineNumber,\n column: m.startColumn,\n });\n } else if (m.severity === 4) {\n warnings++;\n details.push({\n message: m.message,\n severity: 'warning',\n line: m.startLineNumber,\n column: m.startColumn,\n });\n }\n }\n onMarkerCountsRef.current?.({ errors, warnings, markers: details });\n };\n\n const markerDisposable = monacoInstance.editor.onDidChangeMarkers(\n (uris) => {\n if (uris.some((uri) => uri.toString() === model.uri.toString())) {\n reportMarkers();\n }\n },\n );\n\n // Initial report (catches markers set before listener)\n requestAnimationFrame(reportMarkers);\n\n decorationsCleanupRef.current.push(() => {\n markerDisposable.dispose();\n });\n }\n }\n\n // Initial layout call after mount\n requestAnimationFrame(() => {\n monacoEditor.layout();\n });\n\n if (onMount) {\n onMount(monacoEditor);\n }\n };\n\n // Cleanup\n useEffect(() => {\n return () => {\n for (const cleanup of decorationsCleanupRef.current) {\n cleanup();\n }\n decorationsCleanupRef.current = [];\n };\n }, []);\n\n // Choose height strategy: auto-calculated or fill parent\n // Note: When grid context is enabled with synced mode, CodeBox applies\n // syncedHeight to the Box container. Monaco should use calculatedHeight\n // (content-only) here, not syncedHeight (which includes header + border).\n const monacoHeight =\n autoHeight || gridContext?.enabled ? `${calculatedHeight}px` : '100%';\n\n // Add modifier class when using auto-height or synced height\n const useContentHeight = !!autoHeight || !!gridContext?.enabled;\n const codeClassName =\n `elb-code ${useContentHeight ? 'elb-code--auto-height' : ''} ${className || ''}`.trim();\n\n return (\n <div className={codeClassName} ref={containerRef}>\n <MonacoEditor\n height={monacoHeight}\n language={language}\n value={code}\n onChange={handleChange}\n beforeMount={handleBeforeMount}\n onMount={handleEditorMount}\n theme={monacoTheme}\n path={modelPathRef.current || undefined}\n options={{\n readOnly: disabled || !onChange,\n readOnlyMessage: { value: '' },\n minimap: { enabled: minimap },\n fontSize: fontSize,\n lineHeight: Math.round(fontSize * 1.5),\n padding: 0,\n lineNumbers: lineNumbers ? 'on' : 'off',\n lineNumbersMinChars: 3,\n glyphMargin: false,\n folding: folding,\n lineDecorationsWidth: 8, // Gap between line numbers and code\n scrollBeyondLastLine: false,\n automaticLayout: true,\n tabSize: 2,\n detectIndentation: false,\n trimAutoWhitespace: false,\n wordWrap: wordWrap ? 'on' : 'off',\n fixedOverflowWidgets: true,\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n renderValidationDecorations: ide || jsonSchema ? 'editable' : 'off',\n hover: { enabled: ide || !!jsonSchema || !!intellisenseContext },\n 'semanticHighlighting.enabled': ide,\n showDeprecated: ide,\n showUnused: ide,\n 'bracketPairColorization.enabled': false,\n guides: {\n bracketPairs: false,\n bracketPairsHorizontal: false,\n highlightActiveBracketPair: false,\n indentation: false, // Disable indentation guide lines\n },\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n alwaysConsumeMouseWheel: false,\n },\n // Cursor and selection behavior\n cursorBlinking: 'blink', // Make cursor blink visibly\n cursorStyle: 'line', // Use line cursor (most visible)\n cursorWidth: 2, // Make cursor 2px wide for better visibility\n cursorSmoothCaretAnimation: 'off', // Disable smooth cursor animation\n selectionHighlight: false, // Disable auto-highlighting of selected text occurrences\n occurrencesHighlight: 'off', // Disable highlighting matching words\n selectOnLineNumbers: false, // Don't select line when clicking line numbers\n wordBasedSuggestions: 'off', // Reduce auto-completion interference\n quickSuggestions:\n jsonSchema || intellisenseContext\n ? { strings: true, other: true, comments: false }\n : false,\n stickyScroll: { enabled: sticky },\n }}\n />\n </div>\n );\n}\n","/**\n * Palenight Theme for Monaco Editor\n *\n * Dark theme for walkerOS Explorer matching Prism's palenight theme.\n * Aligned with website documentation syntax highlighting for consistency.\n *\n * Token Color Mappings (Matching Prism Palenight):\n * - comment: #697098 - gray, italic\n * - string/inserted: #c3e88d - green\n * - number: #f78c6c - orange\n * - builtin/char/constant/function: #82aaff - blue\n * - punctuation/delimiter: #c792ea - purple\n * - variable: #bfc7d5 - light gray\n * - class-name: #ffcb6b - yellow/gold\n * - attr-name: #c3e88d - green (matching string color)\n * - tag/deleted: #ff5572 - red/pink\n * - operator: #89ddff - cyan\n * - boolean: #ff5874 - red\n * - keyword: #c084fc - bright purple, italic\n * - doctype: #c084fc - purple, italic\n * - namespace: #b2ccd6 - blue-gray\n * - url: #dddddd - white\n */\n\nimport type { editor } from 'monaco-editor';\n\nexport const palenightTheme: editor.IStandaloneThemeData = {\n base: 'vs-dark',\n inherit: true,\n rules: [\n // Comments\n { token: 'comment', foreground: '697098', fontStyle: 'italic' },\n { token: 'comment.block', foreground: '697098', fontStyle: 'italic' },\n { token: 'comment.line', foreground: '697098', fontStyle: 'italic' },\n\n // Strings - green matching Prism palenight\n { token: 'string', foreground: 'c3e88d' },\n { token: 'string.quoted', foreground: 'c3e88d' },\n { token: 'string.template', foreground: 'c3e88d' },\n { token: 'string.regexp', foreground: '89ddff' },\n\n // Language-specific strings (Monaco uses these exact token names)\n { token: 'string.value.json', foreground: 'c3e88d' },\n { token: 'string.json', foreground: 'c3e88d' },\n { token: 'string.html', foreground: 'c3e88d' },\n { token: 'string.css', foreground: 'c3e88d' },\n { token: 'string.js', foreground: 'c3e88d' },\n { token: 'string.ts', foreground: 'c3e88d' },\n\n // Numbers\n { token: 'number', foreground: 'f78c6c' },\n { token: 'number.hex', foreground: 'f78c6c' },\n { token: 'number.binary', foreground: 'f78c6c' },\n { token: 'number.octal', foreground: 'f78c6c' },\n { token: 'number.float', foreground: 'f78c6c' },\n\n // Keywords - brighter purple/magenta\n { token: 'keyword', foreground: 'c084fc', fontStyle: 'italic' },\n { token: 'keyword.control', foreground: 'c084fc', fontStyle: 'italic' },\n { token: 'keyword.operator', foreground: '89ddff' },\n { token: 'keyword.other', foreground: 'c084fc' },\n\n // Operators - cyan matching Prism palenight\n { token: 'operator', foreground: '89ddff' },\n { token: 'operators', foreground: '89ddff' },\n\n // Functions\n { token: 'function', foreground: '82aaff' },\n { token: 'identifier.function', foreground: '82aaff' },\n { token: 'support.function', foreground: '82aaff' },\n { token: 'entity.name.function', foreground: '82aaff' },\n\n // Types & Classes\n { token: 'type', foreground: 'ffcb6b' },\n { token: 'type.identifier', foreground: 'ffcb6b' },\n { token: 'entity.name.type', foreground: 'ffcb6b' },\n { token: 'entity.name.class', foreground: 'ffcb6b' },\n { token: 'support.type', foreground: 'ffcb6b' },\n { token: 'support.class', foreground: 'ffcb6b' },\n\n // Variables\n { token: 'variable', foreground: 'bfc7d5' },\n { token: 'variable.name', foreground: 'bfc7d5' },\n { token: 'variable.parameter', foreground: 'bfc7d5' },\n\n // Constants & Built-ins\n { token: 'constant', foreground: '82aaff' },\n { token: 'constant.language', foreground: 'ff5874' },\n { token: 'constant.numeric', foreground: 'f78c6c' },\n { token: 'constant.character', foreground: '82aaff' },\n { token: 'support.constant', foreground: '82aaff' },\n\n // Booleans\n { token: 'constant.language.boolean', foreground: 'ff5874' },\n { token: 'keyword.constant.boolean', foreground: 'ff5874' },\n\n // Delimiters & Punctuation - purple matching Prism palenight\n { token: 'delimiter', foreground: 'c792ea' },\n { token: 'delimiter.bracket', foreground: 'c792ea' },\n { token: 'delimiter.parenthesis', foreground: 'c792ea' },\n { token: 'delimiter.square', foreground: 'c792ea' },\n { token: 'punctuation', foreground: 'c792ea' },\n\n // Tags (HTML/XML/JSX)\n { token: 'tag', foreground: 'ff5572' },\n { token: 'meta.tag', foreground: 'ff5572' },\n { token: 'entity.name.tag', foreground: 'ff5572' },\n\n // Tag Attributes (using string color for consistency with how Prism treats attributes)\n { token: 'attribute.name', foreground: 'c3e88d' },\n { token: 'entity.other.attribute-name', foreground: 'c3e88d' },\n\n // Namespaces\n { token: 'namespace', foreground: 'b2ccd6' },\n { token: 'entity.name.namespace', foreground: 'b2ccd6' },\n\n // URLs\n { token: 'markup.underline.link', foreground: 'dddddd' },\n\n // Doctype\n {\n token: 'meta.tag.sgml.doctype',\n foreground: 'c084fc',\n fontStyle: 'italic',\n },\n\n // Object Keys - Unified light gray for all property names\n // Covers JSON, TypeScript, JavaScript object literals\n { token: 'support.type.property-name', foreground: 'bfc7d5' },\n { token: 'support.type.property-name.json', foreground: 'bfc7d5' },\n { token: 'string.key.json', foreground: 'bfc7d5' },\n { token: 'meta.object-literal.key', foreground: 'bfc7d5' },\n { token: 'variable.other.property', foreground: 'bfc7d5' },\n { token: 'identifier', foreground: 'bfc7d5' },\n { token: 'identifier.ts', foreground: 'bfc7d5' },\n { token: 'identifier.js', foreground: 'bfc7d5' },\n\n // Markdown\n { token: 'markup.bold', fontStyle: 'bold' },\n { token: 'markup.italic', fontStyle: 'italic' },\n { token: 'markup.heading', foreground: 'c084fc', fontStyle: 'bold' },\n\n // Language-Specific: JavaScript/TypeScript\n { token: 'variable.parameter.ts', foreground: 'bfc7d5' },\n { token: 'variable.parameter.js', foreground: 'bfc7d5' },\n { token: 'support.type.primitive.ts', foreground: 'ffcb6b' },\n { token: 'support.type.primitive.js', foreground: 'ffcb6b' },\n { token: 'entity.name.type.ts', foreground: 'ffcb6b' },\n { token: 'entity.name.type.js', foreground: 'ffcb6b' },\n { token: 'meta.type.annotation.ts', foreground: 'ffcb6b' },\n { token: 'keyword.operator.type.ts', foreground: '89ddff' },\n\n // Language-Specific: HTML\n { token: 'entity.name.tag.html', foreground: 'bfc7d5' },\n { token: 'tag.html', foreground: 'bfc7d5' },\n { token: 'entity.other.attribute-name.html', foreground: 'bfc7d5' },\n { token: 'attribute.name.html', foreground: 'bfc7d5' },\n { token: 'attribute.value.html', foreground: 'c3e88d' },\n { token: 'delimiter.html', foreground: 'c792ea' },\n { token: 'comment.html', foreground: '697098', fontStyle: 'italic' },\n { token: 'meta.tag.html', foreground: 'c792ea' },\n { token: 'punctuation.definition.tag.html', foreground: 'c792ea' },\n\n // Language-Specific: CSS\n { token: 'entity.name.tag.css', foreground: 'ff5572' },\n { token: 'entity.other.attribute-name.class.css', foreground: 'ffcb6b' },\n { token: 'entity.other.attribute-name.id.css', foreground: '82aaff' },\n { token: 'support.type.property-name.css', foreground: 'c084fc' },\n { token: 'support.constant.property-value.css', foreground: 'f78c6c' },\n { token: 'keyword.other.unit.css', foreground: 'f78c6c' },\n\n // Errors & Warnings\n { token: 'invalid', foreground: 'ff5572' },\n { token: 'invalid.illegal', foreground: 'ff5572' },\n { token: 'invalid.deprecated', foreground: 'f78c6c' },\n ],\n colors: {\n // Editor Background - transparent, let box handle background\n // Falls back to CSS var(--bg-input) in _code.scss\n 'editor.background': '#00000000', // Transparent\n 'editor.foreground': '#bfc7d5',\n\n // Editor Lines - transparent to inherit box background\n 'editor.lineHighlightBackground': '#00000000', // Transparent\n 'editorLineNumber.foreground': '#676E95',\n 'editorLineNumber.activeForeground': '#c084fc',\n\n // Editor Cursor & Selection\n 'editorCursor.foreground': '#c084fc', // Purple cursor for dark theme\n 'editor.selectionBackground': '#717CB450', // Visible selection\n 'editor.inactiveSelectionBackground': '#717CB430',\n 'editor.selectionHighlightBackground': '#717CB420',\n\n // Editor Gutter - transparent to inherit box background\n 'editorGutter.background': '#00000000', // Transparent\n 'editorGutter.modifiedBackground': '#82aaff',\n 'editorGutter.addedBackground': '#c3e88d',\n 'editorGutter.deletedBackground': '#ff5572',\n\n // Editor Widgets\n 'editorWidget.background': '#1e1e2e',\n 'editorWidget.border': '#676E95',\n 'editorSuggestWidget.background': '#1e1e2e',\n 'editorSuggestWidget.border': '#676E95',\n 'editorSuggestWidget.selectedBackground': '#717CB440',\n\n // Sticky Scroll - match box background with subtle border\n 'editorStickyScroll.background': '#292d3e',\n 'editorStickyScroll.border': '#676E9540',\n 'editorStickyScrollHover.background': '#292d3e',\n 'editorStickyScroll.shadow': '#00000000',\n 'editorStickyScrollGutter.background': '#292d3e',\n\n // Hover Widgets - Tooltips and hover information\n 'editorHoverWidget.background': '#1e1e2e',\n 'editorHoverWidget.border': '#676E95',\n 'editorHoverWidget.statusBarBackground': '#676E95',\n\n // Inline Hints - Type hints, parameter hints, inline suggestions\n 'editorInlineHint.background': '#292d3e',\n 'editorInlineHint.foreground': '#676E95',\n\n // Code Lens - Reference counts, test indicators\n 'editorCodeLens.foreground': '#697098',\n\n // Ghost Text - Autocomplete suggestions shown inline\n 'editorGhostText.foreground': '#676E9540',\n\n // Editor Whitespace & Indentation\n 'editorWhitespace.foreground': '#676E9540',\n 'editorIndentGuide.background': '#676E9520',\n 'editorIndentGuide.activeBackground': '#676E95',\n\n // Scrollbar\n 'scrollbar.shadow': '#00000000',\n 'scrollbarSlider.background': '#676E9530',\n 'scrollbarSlider.hoverBackground': '#676E9550',\n 'scrollbarSlider.activeBackground': '#676E9570',\n\n // Bracket Matching\n 'editorBracketMatch.background': '#676E9540',\n 'editorBracketMatch.border': '#676E95',\n\n // Find/Replace\n 'editor.findMatchBackground': '#717CB440',\n 'editor.findMatchHighlightBackground': '#676E9530',\n 'editor.findRangeHighlightBackground': '#676E9520',\n\n // Minimap\n 'minimap.background': '#292d3e',\n 'minimap.selectionHighlight': '#717CB440',\n 'minimap.findMatchHighlight': '#717CB440',\n\n // Overview Ruler\n 'editorOverviewRuler.border': '#676E9520',\n 'editorOverviewRuler.modifiedForeground': '#82aaff',\n 'editorOverviewRuler.addedForeground': '#c3e88d',\n 'editorOverviewRuler.deletedForeground': '#ff5572',\n\n // Peek View\n 'peekView.border': '#676E95',\n 'peekViewEditor.background': '#1e1e2e',\n 'peekViewResult.background': '#1e1e2e',\n 'peekViewTitle.background': '#1e1e2e',\n\n // Diff Editor\n 'diffEditor.insertedTextBackground': '#c3e88d20',\n 'diffEditor.removedTextBackground': '#ff557220',\n },\n};\n\n/**\n * Register the palenight theme with Monaco Editor\n * Call this function before creating any editor instances\n */\nexport function registerPalenightTheme(monaco: typeof import('monaco-editor')) {\n monaco.editor.defineTheme('elbTheme-dark', palenightTheme);\n}\n","/**\n * Lighthouse Theme for Monaco Editor\n *\n * Custom light theme for walkerOS Explorer, designed to complement the Palenight dark theme.\n * Based on VS Code Light+ with adjustments for optimal readability and brand consistency.\n *\n * Color Palette Strategy:\n * - Comments: Muted green (#6A737D) for subtle annotations\n * - Strings: Dark green (#22863A) for clear text distinction\n * - Numbers: Brick red (#D73A49) for numeric emphasis\n * - Functions: Deep blue (#005CC5) for callable identification\n * - Keywords: Purple (#6F42C1) maintaining syntax hierarchy\n * - Variables: Near black (#24292E) for primary code elements\n * - Types/Classes: Dark gold (#B08800) for type definitions\n * - Tags: Red (#D73A49) for HTML/JSX elements\n * - Operators: Teal (#0086B3) for logical operations\n * - Booleans: Red (#D73A49) for literal values\n */\n\nimport type { editor } from 'monaco-editor';\n\nexport const lighthouseTheme: editor.IStandaloneThemeData = {\n base: 'vs',\n inherit: true,\n rules: [\n // Comments\n { token: 'comment', foreground: '6A737D', fontStyle: 'italic' },\n { token: 'comment.block', foreground: '6A737D', fontStyle: 'italic' },\n { token: 'comment.line', foreground: '6A737D', fontStyle: 'italic' },\n\n // Strings - dark green for good contrast on white\n { token: 'string', foreground: '22863A' },\n { token: 'string.quoted', foreground: '22863A' },\n { token: 'string.template', foreground: '22863A' },\n { token: 'string.regexp', foreground: '032F62' },\n\n // Language-specific strings (Monaco uses these exact token names)\n { token: 'string.value.json', foreground: '22863A' },\n { token: 'string.json', foreground: '22863A' },\n { token: 'string.html', foreground: '22863A' },\n { token: 'string.css', foreground: '22863A' },\n { token: 'string.js', foreground: '22863A' },\n { token: 'string.ts', foreground: '22863A' },\n\n // Numbers - dark red/burgundy for contrast\n { token: 'number', foreground: 'D73A49' },\n { token: 'number.hex', foreground: 'D73A49' },\n { token: 'number.binary', foreground: 'D73A49' },\n { token: 'number.octal', foreground: 'D73A49' },\n { token: 'number.float', foreground: 'D73A49' },\n\n // Keywords - dark purple for contrast\n { token: 'keyword', foreground: '6F42C1', fontStyle: 'italic' },\n { token: 'keyword.control', foreground: '6F42C1', fontStyle: 'italic' },\n { token: 'keyword.operator', foreground: '0086B3' },\n { token: 'keyword.other', foreground: '6F42C1' },\n\n // Operators - cyan (brand color)\n { token: 'operator', foreground: '01b5e2' },\n { token: 'operators', foreground: '01b5e2' },\n\n // Functions\n { token: 'function', foreground: '005CC5' },\n { token: 'identifier.function', foreground: '005CC5' },\n { token: 'support.function', foreground: '005CC5' },\n { token: 'entity.name.function', foreground: '005CC5' },\n\n // Types & Classes\n { token: 'type', foreground: 'B08800' },\n { token: 'type.identifier', foreground: 'B08800' },\n { token: 'entity.name.type', foreground: 'B08800' },\n { token: 'entity.name.class', foreground: 'B08800' },\n { token: 'support.type', foreground: 'B08800' },\n { token: 'support.class', foreground: 'B08800' },\n\n // Variables\n { token: 'variable', foreground: '24292E' },\n { token: 'variable.name', foreground: '24292E' },\n { token: 'variable.parameter', foreground: '24292E' },\n\n // Constants & Built-ins\n { token: 'constant', foreground: '005CC5' },\n { token: 'constant.language', foreground: 'ef4444' },\n { token: 'constant.numeric', foreground: 'fb923c' },\n { token: 'constant.character', foreground: '005CC5' },\n { token: 'support.constant', foreground: '005CC5' },\n\n // Booleans - red/pink accent (matching screenshot)\n { token: 'constant.language.boolean', foreground: 'ef4444' },\n { token: 'keyword.constant.boolean', foreground: 'ef4444' },\n\n // Delimiters & Punctuation\n { token: 'delimiter', foreground: '24292E' },\n { token: 'delimiter.bracket', foreground: '24292E' },\n { token: 'delimiter.parenthesis', foreground: '24292E' },\n { token: 'delimiter.square', foreground: '24292E' },\n { token: 'punctuation', foreground: '24292E' },\n\n // Tags (HTML/XML/JSX)\n { token: 'tag', foreground: 'D73A49' },\n { token: 'meta.tag', foreground: 'D73A49' },\n { token: 'entity.name.tag', foreground: 'D73A49' },\n\n // Tag Attributes (using string color for consistency with Prism)\n { token: 'attribute.name', foreground: '22863A' },\n { token: 'entity.other.attribute-name', foreground: '22863A' },\n\n // Namespaces\n { token: 'namespace', foreground: '6F42C1' },\n { token: 'entity.name.namespace', foreground: '6F42C1' },\n\n // URLs\n { token: 'markup.underline.link', foreground: '005CC5' },\n\n // Doctype\n {\n token: 'meta.tag.sgml.doctype',\n foreground: '6A737D',\n fontStyle: 'italic',\n },\n\n // Object Keys - Unified near-black for all property names\n // Covers JSON, TypeScript, JavaScript object literals\n { token: 'support.type.property-name', foreground: '24292E' },\n { token: 'support.type.property-name.json', foreground: '24292E' },\n { token: 'string.key.json', foreground: '24292E' },\n { token: 'meta.object-literal.key', foreground: '24292E' },\n { token: 'variable.other.property', foreground: '24292E' },\n { token: 'identifier', foreground: '24292E' },\n { token: 'identifier.ts', foreground: '24292E' },\n { token: 'identifier.js', foreground: '24292E' },\n\n // Markdown\n { token: 'markup.bold', fontStyle: 'bold' },\n { token: 'markup.italic', fontStyle: 'italic' },\n { token: 'markup.heading', foreground: '6F42C1', fontStyle: 'bold' },\n\n // Language-Specific: JavaScript/TypeScript\n { token: 'variable.parameter.ts', foreground: '24292E' },\n { token: 'variable.parameter.js', foreground: '24292E' },\n { token: 'support.type.primitive.ts', foreground: 'B08800' },\n { token: 'support.type.primitive.js', foreground: 'B08800' },\n { token: 'entity.name.type.ts', foreground: 'B08800' },\n { token: 'entity.name.type.js', foreground: 'B08800' },\n { token: 'meta.type.annotation.ts', foreground: 'B08800' },\n { token: 'keyword.operator.type.ts', foreground: '0086B3' },\n\n // Language-Specific: HTML\n { token: 'entity.name.tag.html', foreground: '24292E' },\n { token: 'tag.html', foreground: '24292E' },\n { token: 'entity.other.attribute-name.html', foreground: '24292E' },\n { token: 'attribute.name.html', foreground: '24292E' },\n { token: 'attribute.value.html', foreground: '22863A' },\n { token: 'delimiter.html', foreground: '24292E' },\n { token: 'comment.html', foreground: '6A737D', fontStyle: 'italic' },\n { token: 'meta.tag.html', foreground: '24292E' },\n { token: 'punctuation.definition.tag.html', foreground: '24292E' },\n\n // Language-Specific: CSS\n { token: 'entity.name.tag.css', foreground: 'D73A49' },\n { token: 'entity.other.attribute-name.class.css', foreground: 'B08800' },\n { token: 'entity.other.attribute-name.id.css', foreground: '005CC5' },\n { token: 'support.type.property-name.css', foreground: '6F42C1' },\n { token: 'support.constant.property-value.css', foreground: 'D73A49' },\n { token: 'keyword.other.unit.css', foreground: 'D73A49' },\n\n // Errors & Warnings\n { token: 'invalid', foreground: 'CB2431' },\n { token: 'invalid.illegal', foreground: 'CB2431' },\n { token: 'invalid.deprecated', foreground: 'D73A49' },\n ],\n colors: {\n // Editor Background - transparent, let box handle background\n 'editor.background': '#00000000', // Transparent\n 'editor.foreground': '#24292E',\n\n // Editor Lines - transparent to inherit box background\n 'editor.lineHighlightBackground': '#00000000', // Transparent\n 'editorLineNumber.foreground': '#1B1F2380',\n 'editorLineNumber.activeForeground': '#6F42C1',\n\n // Editor Cursor & Selection\n 'editorCursor.foreground': '#6F42C1', // Purple cursor for light theme\n 'editor.selectionBackground': '#0366D630', // Visible blue selection\n 'editor.inactiveSelectionBackground': '#0366D620',\n 'editor.selectionHighlightBackground': '#0366D615',\n\n // Editor Gutter - transparent to inherit box background\n 'editorGutter.background': '#00000000', // Transparent\n 'editorGutter.modifiedBackground': '#005CC5',\n 'editorGutter.addedBackground': '#28A745',\n 'editorGutter.deletedBackground': '#D73A49',\n\n // Editor Widgets\n 'editorWidget.background': '#F6F8FA',\n 'editorWidget.border': '#E1E4E8',\n 'editorSuggestWidget.background': '#F6F8FA',\n 'editorSuggestWidget.border': '#E1E4E8',\n 'editorSuggestWidget.selectedBackground': '#0366D625',\n\n // Sticky Scroll - match box background with subtle border\n 'editorStickyScroll.background': '#ffffff',\n 'editorStickyScroll.border': '#E1E4E8',\n 'editorStickyScrollHover.background': '#ffffff',\n 'editorStickyScroll.shadow': '#00000000',\n 'editorStickyScrollGutter.background': '#ffffff',\n\n // Hover Widgets - Tooltips and hover information\n 'editorHoverWidget.background': '#F6F8FA',\n 'editorHoverWidget.border': '#E1E4E8',\n 'editorHoverWidget.statusBarBackground': '#E1E4E8',\n\n // Inline Hints - Type hints, parameter hints, inline suggestions\n 'editorInlineHint.background': '#F6F8FA',\n 'editorInlineHint.foreground': '#6A737D',\n\n // Code Lens - Reference counts, test indicators\n 'editorCodeLens.foreground': '#6A737D',\n\n // Ghost Text - Autocomplete suggestions shown inline\n 'editorGhostText.foreground': '#1B1F2350',\n\n // Editor Whitespace & Indentation\n 'editorWhitespace.foreground': '#1B1F2340',\n 'editorIndentGuide.background': '#E1E4E820',\n 'editorIndentGuide.activeBackground': '#E1E4E8',\n\n // Scrollbar\n 'scrollbar.shadow': '#00000000',\n 'scrollbarSlider.background': '#1B1F2330',\n 'scrollbarSlider.hoverBackground': '#1B1F2350',\n 'scrollbarSlider.activeBackground': '#1B1F2370',\n\n // Bracket Matching\n 'editorBracketMatch.background': '#34D05840',\n 'editorBracketMatch.border': '#34D058',\n\n // Find/Replace\n 'editor.findMatchBackground': '#FFDF5D40',\n 'editor.findMatchHighlightBackground': '#FFDF5D30',\n 'editor.findRangeHighlightBackground': '#0366D620',\n\n // Minimap\n 'minimap.background': '#FAFBFC',\n 'minimap.selectionHighlight': '#0366D625',\n 'minimap.findMatchHighlight': '#FFDF5D40',\n\n // Overview Ruler\n 'editorOverviewRuler.border': '#E1E4E820',\n 'editorOverviewRuler.modifiedForeground': '#005CC5',\n 'editorOverviewRuler.addedForeground': '#28A745',\n 'editorOverviewRuler.deletedForeground': '#D73A49',\n\n // Peek View\n 'peekView.border': '#0366D6',\n 'peekViewEditor.background': '#F6F8FA',\n 'peekViewResult.background': '#FAFBFC',\n 'peekViewTitle.background': '#F6F8FA',\n\n // Diff Editor\n 'diffEditor.insertedTextBackground': '#28A74520',\n 'diffEditor.removedTextBackground': '#D73A4920',\n },\n};\n\n/**\n * Register the lighthouse theme with Monaco Editor\n * Call this function before creating any editor instances\n */\nexport function registerLighthouseTheme(\n monaco: typeof import('monaco-editor'),\n) {\n monaco.editor.defineTheme('elbTheme-light', lighthouseTheme);\n}\n","/**\n * Monaco Editor Themes for walkerOS Explorer\n *\n * Custom Monaco themes that integrate seamlessly with the CSS-based theme system.\n * Theme switching is handled via CSS `data-theme` attribute on document root.\n */\n\n// Import registration functions for use in registerAllThemes\nimport { registerPalenightTheme } from './palenight';\nimport { registerLighthouseTheme } from './lighthouse';\n\n// Monaco Editor themes\nexport { palenightTheme, registerPalenightTheme } from './palenight';\nexport { lighthouseTheme, registerLighthouseTheme } from './lighthouse';\n\n// Theme types (for documentation and TypeScript support)\nexport type { ExplorerTheme } from './types';\n\n/**\n * Register all Monaco themes\n * Convenience function for registering both themes at once\n *\n * @example\n * ```typescript\n * import { registerAllThemes } from '@walkeros/explorer';\n * import * as monaco from 'monaco-editor';\n *\n * registerAllThemes(monaco);\n * ```\n */\nexport function registerAllThemes(\n monaco: typeof import('monaco-editor'),\n): void {\n registerPalenightTheme(monaco);\n registerLighthouseTheme(monaco);\n}\n","import type { editor } from 'monaco-editor';\n\n/**\n * Regular expressions to match walkerOS data attributes\n */\nconst DATA_ELB_PATTERNS = [\n /\\bdata-elb(?!-)\\b/g, // data-elb (not followed by hyphen)\n /\\bdata-elbaction\\b/g, // data-elbaction\n /\\bdata-elbactions\\b/g, // data-elbactions\n /\\bdata-elbglobals\\b/g, // data-elbglobals\n /\\bdata-elbcontext\\b/g, // data-elbcontext\n /\\bdata-elblink\\b/g, // data-elblink\n /\\bdata-elb-[\\w-]+\\b/g, // data-elb-* (property attributes)\n];\n\n/**\n * Apply decorations to highlight walkerOS data attributes in Monaco editor\n *\n * This function scans the editor content for data-elb* attributes and\n * applies color highlighting to match the website's Prism.js styling.\n *\n * @param editor - Monaco editor instance\n * @param monaco - Monaco module\n */\nexport function applyDataElbDecorations(\n monacoEditor: editor.IStandaloneCodeEditor,\n monaco: typeof import('monaco-editor'),\n): () => void {\n const decorationIds: string[] = [];\n\n const updateDecorations = () => {\n const model = monacoEditor.getModel();\n if (!model) return;\n\n const content = model.getValue();\n const decorations: editor.IModelDeltaDecoration[] = [];\n\n // Find all matches for each pattern\n DATA_ELB_PATTERNS.forEach((pattern) => {\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const startPos = model.getPositionAt(match.index);\n const endPos = model.getPositionAt(match.index + match[0].length);\n\n decorations.push({\n range: new monaco.Range(\n startPos.lineNumber,\n startPos.column,\n endPos.lineNumber,\n endPos.column,\n ),\n options: {\n inlineClassName: 'elb-data-attribute',\n inlineClassNameAffectsLetterSpacing: true,\n },\n });\n }\n });\n\n // Apply decorations\n const newDecorationIds = monacoEditor.deltaDecorations(\n decorationIds,\n decorations,\n );\n decorationIds.length = 0;\n decorationIds.push(...newDecorationIds);\n };\n\n // Initial decoration\n updateDecorations();\n\n // Update decorations on content change\n const disposable = monacoEditor.onDidChangeModelContent(() => {\n updateDecorations();\n });\n\n // Return cleanup function\n return () => {\n disposable.dispose();\n monacoEditor.deltaDecorations(decorationIds, []);\n };\n}\n\n/**\n * Register CSS styles for data-elb attribute decorations\n * Call this once during app initialization\n */\nexport function registerDataElbStyles() {\n if (typeof document === 'undefined') return;\n\n const styleId = 'elb-monaco-data-attribute-styles';\n if (document.getElementById(styleId)) return;\n\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n .monaco-editor .elb-data-attribute {\n color: var(--color-highlight-primary, #01b5e2) !important;\n }\n `;\n document.head.appendChild(style);\n}\n","import type { editor } from 'monaco-editor';\n\nexport type ReferenceType =\n | 'variable'\n | 'definition'\n | 'secret'\n | 'env'\n | 'code';\n\nexport interface WalkerOSReference {\n type: ReferenceType;\n name: string;\n startIndex: number;\n endIndex: number;\n}\n\nexport const REFERENCE_PATTERNS: Array<{\n type: ReferenceType;\n regex: RegExp;\n className: string;\n}> = [\n { type: 'variable', regex: /\\$var\\.(\\w*)/g, className: 'elb-ref-variable' },\n {\n type: 'definition',\n regex: /\\$def\\.(\\w*)/g,\n className: 'elb-ref-definition',\n },\n { type: 'secret', regex: /\\$secret\\.(\\w*)/g, className: 'elb-ref-secret' },\n { type: 'env', regex: /\\$env\\.(\\w*)/g, className: 'elb-ref-env' },\n { type: 'code', regex: /\\$code:/g, className: 'elb-ref-code' },\n];\n\n/**\n * Find all walkerOS reference patterns in text.\n * Used for both decorations and validation.\n */\nexport function findWalkerOSReferences(text: string): WalkerOSReference[] {\n const references: WalkerOSReference[] = [];\n\n for (const pattern of REFERENCE_PATTERNS) {\n const regex = new RegExp(pattern.regex.source, pattern.regex.flags);\n let match: RegExpExecArray | null;\n while ((match = regex.exec(text)) !== null) {\n references.push({\n type: pattern.type,\n name: pattern.type === 'code' ? '' : match[1] || '',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n\n return references;\n}\n\n/**\n * Apply walkerOS reference decorations to a Monaco editor.\n * Returns a cleanup function.\n */\nexport function applyWalkerOSDecorations(\n editorInstance: editor.IStandaloneCodeEditor,\n): () => void {\n let decorationIds: string[] = [];\n\n function update() {\n const model = editorInstance.getModel();\n if (!model) return;\n\n const text = model.getValue();\n const references = findWalkerOSReferences(text);\n\n const decorations: editor.IModelDeltaDecoration[] = references.map(\n (ref) => {\n const startPos = model.getPositionAt(ref.startIndex);\n const endPos = model.getPositionAt(ref.endIndex);\n const pattern = REFERENCE_PATTERNS.find((p) => p.type === ref.type)!;\n\n return {\n range: {\n startLineNumber: startPos.lineNumber,\n startColumn: startPos.column,\n endLineNumber: endPos.lineNumber,\n endColumn: endPos.column,\n },\n options: { inlineClassName: pattern.className },\n };\n },\n );\n\n decorationIds = editorInstance.deltaDecorations(decorationIds, decorations);\n }\n\n update();\n const disposable = editorInstance.onDidChangeModelContent(() => update());\n\n return () => {\n disposable.dispose();\n editorInstance.deltaDecorations(decorationIds, []);\n };\n}\n\n/**\n * Register CSS styles for walkerOS reference decorations.\n * Call once on app init.\n */\nexport function registerWalkerOSDecorationStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById('walkeros-ref-styles')) return;\n\n const style = document.createElement('style');\n style.id = 'walkeros-ref-styles';\n style.textContent = `\n .monaco-editor .elb-ref-variable { color: #89ddff !important; font-style: italic; }\n .monaco-editor .elb-ref-definition { color: #c3e88d !important; font-style: italic; }\n .monaco-editor .elb-ref-secret { color: #ffcb6b !important; font-style: italic; }\n .monaco-editor .elb-ref-env { color: #ffcb6b !important; font-style: italic; }\n .monaco-editor .elb-ref-code { color: #c084fc !important; }\n `;\n document.head.appendChild(style);\n}\n","import type { IntelliSenseContext, PackageInfo } from '../types/intellisense';\n\nexport interface CompletionEntry {\n label: string;\n insertText: string;\n detail?: string;\n documentation?: string;\n kind: 'variable' | 'reference' | 'secret' | 'module' | 'property';\n sortText?: string;\n}\n\nexport function getVariableCompletions(\n variables: IntelliSenseContext['variables'],\n): CompletionEntry[] {\n if (!variables || Object.keys(variables).length === 0) return [];\n return Object.entries(variables).map(([name, value]) => ({\n label: `$var.${name}`,\n insertText: `$var.${name}`,\n detail: `= ${JSON.stringify(value)}`,\n documentation: `Variable reference. Resolves to \\`${JSON.stringify(value)}\\` at runtime.`,\n kind: 'variable' as const,\n sortText: '0_var_' + name,\n }));\n}\n\nexport function getDefinitionCompletions(\n definitions: IntelliSenseContext['definitions'],\n): CompletionEntry[] {\n if (!definitions || Object.keys(definitions).length === 0) return [];\n return Object.keys(definitions).map((name) => ({\n label: `$def.${name}`,\n insertText: `$def.${name}`,\n detail: '(definition)',\n documentation: `Definition reference. Injects the reusable config fragment \"${name}\" at runtime.`,\n kind: 'reference' as const,\n sortText: '0_def_' + name,\n }));\n}\n\nexport function getSecretCompletions(\n secrets: IntelliSenseContext['secrets'],\n): CompletionEntry[] {\n if (!secrets || secrets.length === 0) return [];\n return secrets.map((name) => ({\n label: `$secret.${name}`,\n insertText: `$secret.${name}`,\n detail: '(secret)',\n documentation:\n 'Secret reference. Value is securely injected at runtime. Never stored in config.',\n kind: 'secret' as const,\n sortText: '0_secret_' + name,\n }));\n}\n\nexport function getPackageCompletions(\n packages: PackageInfo[] | undefined,\n platform: IntelliSenseContext['platform'],\n): CompletionEntry[] {\n if (!packages || packages.length === 0) return [];\n const filtered = platform\n ? packages.filter((p) => p.platform === platform)\n : packages;\n return filtered.map((pkg) => ({\n label: pkg.package,\n insertText: pkg.package,\n detail: `${pkg.type} (${pkg.platform})`,\n documentation: `walkerOS ${pkg.type}: ${pkg.shortName}`,\n kind: 'module' as const,\n sortText: '1_pkg_' + pkg.shortName,\n }));\n}\n\nexport function getStepNameCompletions(\n stepNames: IntelliSenseContext['stepNames'],\n context: 'next' | 'before',\n): CompletionEntry[] {\n if (!stepNames) return [];\n const names = stepNames.transformers || [];\n return names.map((name) => ({\n label: name,\n insertText: name,\n detail: `transformer (${context} chain)`,\n documentation: `Reference to transformer step \"${name}\" in this flow config.`,\n kind: 'reference' as const,\n sortText: '0_step_' + name,\n }));\n}\n","import type { languages, editor, IDisposable, Position } from 'monaco-editor';\nimport type { IntelliSenseContext } from '../types/intellisense';\nimport {\n getVariableCompletions,\n getDefinitionCompletions,\n getSecretCompletions,\n getPackageCompletions,\n getStepNameCompletions,\n type CompletionEntry,\n} from './monaco-walkeros-completions';\n\n// Store context per model path for scoped completions\nconst contextRegistry = new Map<string, IntelliSenseContext>();\nconst disposables: IDisposable[] = [];\nlet registered = false;\n\n/**\n * Update the IntelliSense context for a specific editor model.\n */\nexport function setIntelliSenseContext(\n modelPath: string,\n context: IntelliSenseContext,\n): void {\n contextRegistry.set(modelPath, context);\n}\n\n/**\n * Remove context when editor unmounts.\n */\nexport function removeIntelliSenseContext(modelPath: string): void {\n contextRegistry.delete(modelPath);\n}\n\n/**\n * Register the walkerOS CompletionItemProvider and HoverProvider for JSON.\n * Call once on app initialization. Safe to call multiple times (idempotent).\n */\nexport function registerWalkerOSProviders(\n monaco: typeof import('monaco-editor'),\n): void {\n if (registered) return;\n registered = true;\n\n // CompletionItemProvider\n disposables.push(\n monaco.languages.registerCompletionItemProvider('json', {\n triggerCharacters: ['\"', '.', '$'],\n provideCompletionItems(\n model: editor.ITextModel,\n position: Position,\n ): languages.CompletionList {\n const modelPath = model.uri.toString();\n const context = contextRegistry.get(modelPath);\n if (!context) return { suggestions: [] };\n\n const lineContent = model.getLineContent(position.lineNumber);\n const textBeforeCursor = lineContent.substring(0, position.column - 1);\n\n const entries: CompletionEntry[] = [];\n\n if (\n textBeforeCursor.includes('$var.') ||\n textBeforeCursor.endsWith('\"$var')\n ) {\n entries.push(...getVariableCompletions(context.variables));\n } else if (\n textBeforeCursor.includes('$def.') ||\n textBeforeCursor.endsWith('\"$def')\n ) {\n entries.push(...getDefinitionCompletions(context.definitions));\n } else if (\n textBeforeCursor.includes('$secret.') ||\n textBeforeCursor.endsWith('\"$secret')\n ) {\n entries.push(...getSecretCompletions(context.secrets));\n } else if (isInsideKey(model, position, 'package')) {\n entries.push(\n ...getPackageCompletions(context.packages, context.platform),\n );\n } else if (\n isInsideKey(model, position, 'next') ||\n isInsideKey(model, position, 'before')\n ) {\n const key = isInsideKey(model, position, 'next') ? 'next' : 'before';\n entries.push(...getStepNameCompletions(context.stepNames, key));\n } else if (\n textBeforeCursor.endsWith('\"$') ||\n textBeforeCursor.endsWith('\"')\n ) {\n entries.push(...getVariableCompletions(context.variables));\n entries.push(...getDefinitionCompletions(context.definitions));\n entries.push(...getSecretCompletions(context.secrets));\n }\n\n // Calculate range that covers the full $ref.name token.\n // Monaco's getWordUntilPosition doesn't understand $ or . as word chars,\n // so we scan backwards to find the $ that starts the reference.\n const refStartMatch = textBeforeCursor.match(\n /\\$(?:var|def|secret|env|code)[.:]?\\w*$/,\n );\n const word = model.getWordUntilPosition(position);\n const startCol = refStartMatch\n ? position.column - refStartMatch[0].length\n : word.startColumn;\n const range = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: startCol,\n endColumn: position.column,\n };\n\n return {\n suggestions: entries.map((entry) => ({\n label: entry.label,\n insertText: entry.insertText,\n detail: entry.detail,\n documentation: entry.documentation,\n kind: mapCompletionKind(monaco, entry.kind),\n sortText: entry.sortText,\n range,\n })),\n };\n },\n }),\n );\n\n // HoverProvider\n disposables.push(\n monaco.languages.registerHoverProvider('json', {\n provideHover(model, position) {\n const modelPath = model.uri.toString();\n const context = contextRegistry.get(modelPath);\n if (!context) return null;\n\n const lineContent = model.getLineContent(position.lineNumber);\n const col = position.column - 1; // 0-based index into line\n\n // Helper: find a reference match at cursor position\n function matchAtCursor(pattern: RegExp): RegExpExecArray | null {\n const regex = new RegExp(pattern.source, 'g');\n let m: RegExpExecArray | null;\n while ((m = regex.exec(lineContent)) !== null) {\n if (col >= m.index && col <= m.index + m[0].length) return m;\n }\n return null;\n }\n\n // $var.name\n const varMatch = matchAtCursor(/\\$var\\.(\\w+)/);\n if (varMatch && context.variables) {\n const name = varMatch[1];\n if (name in context.variables) {\n const value = context.variables[name];\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: varMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: varMatch.index + varMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Variable:** \\`$var.${name}\\`\\n\\n**Value:** \\`${JSON.stringify(value)}\\`\\n\\n*Resolved at runtime via variable interpolation*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown variable** \\`$var.${name}\\`\\n\\nDefined variables: ${Object.keys(context.variables).join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $def.name\n const defMatch = matchAtCursor(/\\$def\\.(\\w+)/);\n if (defMatch && context.definitions) {\n const name = defMatch[1];\n if (name in context.definitions) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: defMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: defMatch.index + defMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Definition:** \\`$def.${name}\\`\\n\\n*Injects reusable config fragment at runtime*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown definition** \\`$def.${name}\\`\\n\\nDefined: ${Object.keys(context.definitions).join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $secret.name\n const secretMatch = matchAtCursor(/\\$secret\\.(\\w+)/);\n if (secretMatch) {\n const name = secretMatch[1];\n if (context.secrets?.includes(name)) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: secretMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: secretMatch.index + secretMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Secret:** \\`$secret.${name}\\`\\n\\n*Securely injected at runtime. Value not stored in config.*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown secret** \\`$secret.${name}\\`\\n\\nAvailable secrets: ${context.secrets?.join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n return null;\n },\n }),\n );\n}\n\n/**\n * Dispose all registered providers. Call on app teardown.\n */\nexport function disposeWalkerOSProviders(): void {\n for (const d of disposables) d.dispose();\n disposables.length = 0;\n registered = false;\n contextRegistry.clear();\n}\n\nfunction mapCompletionKind(\n monaco: typeof import('monaco-editor'),\n kind: CompletionEntry['kind'],\n): languages.CompletionItemKind {\n switch (kind) {\n case 'variable':\n return monaco.languages.CompletionItemKind.Variable;\n case 'reference':\n return monaco.languages.CompletionItemKind.Reference;\n case 'secret':\n return monaco.languages.CompletionItemKind.Constant;\n case 'module':\n return monaco.languages.CompletionItemKind.Module;\n case 'property':\n return monaco.languages.CompletionItemKind.Property;\n default:\n return monaco.languages.CompletionItemKind.Text;\n }\n}\n\n/**\n * Check if cursor is inside the value of a specific JSON key.\n */\nfunction isInsideKey(\n model: editor.ITextModel,\n position: Position,\n key: string,\n): boolean {\n const lineContent = model.getLineContent(position.lineNumber);\n const pattern = new RegExp(`\"${key}\"\\\\s*:\\\\s*\"`);\n return pattern.test(lineContent);\n}\n","import * as prettier from 'prettier/standalone';\nimport prettierBabel from 'prettier/plugins/babel';\nimport prettierEstree from 'prettier/plugins/estree';\nimport prettierTypescript from 'prettier/plugins/typescript';\nimport prettierHtml from 'prettier/plugins/html';\nimport type * as monaco from 'monaco-editor';\n\n/**\n * Register Monaco Editor formatting providers for various languages\n *\n * Uses Prettier for professional-grade code formatting.\n * Registered once when Monaco is initialized.\n *\n * Supported languages:\n * - JavaScript (parser: babel)\n * - TypeScript (parser: typescript)\n * - JSON (native JSON.stringify)\n * - HTML (parser: html)\n * - CSS (parser: css)\n */\nexport function registerFormatters(monacoInstance: typeof monaco): void {\n // JavaScript formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider(\n 'javascript',\n {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'babel',\n plugins: [prettierBabel, prettierEstree],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n },\n );\n\n // TypeScript formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider(\n 'typescript',\n {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'typescript',\n plugins: [prettierTypescript, prettierEstree],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n },\n );\n\n // JSON formatter (use native JSON.stringify for simplicity)\n monacoInstance.languages.registerDocumentFormattingEditProvider('json', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const parsed = JSON.parse(text);\n const formatted = JSON.stringify(parsed, null, options.tabSize);\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n\n // HTML formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider('html', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'html',\n plugins: [prettierHtml],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n htmlWhitespaceSensitivity: 'css',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n\n // CSS formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider('css', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'css',\n plugins: [prettierHtml], // CSS parser is in html plugin\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n}\n","/**\n * Monaco JSON Schema Registry\n *\n * Manages JSON Schema registrations for Monaco's JSON language service.\n * Multiple Code instances can register schemas concurrently — the registry\n * accumulates all schemas and issues a single setDiagnosticsOptions() call.\n *\n * The monaco json namespace is initialized via initMonacoJson() when the\n * Code atom's beforeMount fires. Schemas registered before initialization\n * are queued and flushed once the namespace becomes available.\n */\n\ninterface RegisteredSchema {\n /** Unique schema identifier */\n uri: string;\n /** Glob patterns matching model URIs */\n fileMatch: string[];\n /** JSON Schema Draft 7 object */\n schema: Record<string, unknown>;\n}\n\nconst schemaRegistry = new Map<string, RegisteredSchema>();\n\nlet idCounter = 0;\n\n// Monaco JSON namespace, set via initMonacoJson() from Code atom's beforeMount\nlet _json: typeof import('monaco-editor').json | undefined;\n\n/**\n * Initialize the JSON schema registry with the monaco instance.\n * Called from Code atom's handleBeforeMount where monaco is guaranteed loaded.\n * Flushes any schemas registered before initialization.\n */\nexport function initMonacoJson(monaco: typeof import('monaco-editor')): void {\n if (_json) return;\n _json = monaco.json;\n if (schemaRegistry.size > 0) applySchemas();\n}\n\n/**\n * Reset state (for testing only).\n */\nexport function resetMonacoJson(): void {\n _json = undefined;\n schemaRegistry.clear();\n idCounter = 0;\n}\n\n/**\n * Generate a unique model path for a Code instance.\n * Used as the `path` prop for @monaco-editor/react Editor.\n */\nexport function generateModelPath(): string {\n return `inmemory://walkeros/json-${++idCounter}.json`;\n}\n\n/**\n * Register a JSON schema for a specific model path.\n * Triggers a global setDiagnosticsOptions update.\n */\nexport function registerJsonSchema(\n modelPath: string,\n schema: Record<string, unknown>,\n): void {\n schemaRegistry.set(modelPath, {\n uri: `schema://walkeros/${modelPath}`,\n fileMatch: [modelPath],\n schema,\n });\n applySchemas();\n}\n\n/**\n * Unregister a JSON schema when a Code instance unmounts.\n * Triggers a global setDiagnosticsOptions update.\n */\nexport function unregisterJsonSchema(modelPath: string): void {\n schemaRegistry.delete(modelPath);\n applySchemas();\n}\n\n/**\n * Apply all registered schemas to Monaco's JSON language service.\n */\nfunction applySchemas(): void {\n if (!_json) return;\n _json.jsonDefaults.setDiagnosticsOptions({\n validate: true,\n schemaValidation: 'error',\n schemaRequest: 'ignore',\n enableSchemaRequest: false,\n schemas: Array.from(schemaRegistry.values()),\n });\n}\n\n/**\n * Get count of registered schemas (for testing/debugging).\n */\nexport function getRegisteredSchemaCount(): number {\n return schemaRegistry.size;\n}\n\n/**\n * Clear all schemas (for testing).\n */\nexport function clearAllSchemas(): void {\n schemaRegistry.clear();\n applySchemas();\n}\n","import { useEffect, useState, useRef, useCallback } from 'react';\nimport type { editor } from 'monaco-editor';\n\nexport interface UseMonacoHeightOptions {\n enabled?: boolean;\n minHeight?: number;\n maxHeight?: number;\n defaultHeight?: number;\n onHeightChange?: (height: number) => void;\n}\n\n/**\n * Hook to automatically calculate Monaco Editor height based on content\n *\n * @param enabled - Whether to enable auto-height calculation\n * @param minHeight - Minimum height in pixels (default: 100)\n * @param maxHeight - Maximum height in pixels (default: 800)\n * @param defaultHeight - Default height when not auto-sizing (default: 400)\n *\n * @returns [height, setEditor] - Current height and function to register editor instance\n *\n * @example\n * const [height, setEditor] = useMonacoHeight({ enabled: autoHeight });\n *\n * <Editor\n * height={height}\n * onMount={(editor) => setEditor(editor)}\n * />\n */\nexport function useMonacoHeight({\n enabled = false,\n minHeight = 100,\n maxHeight = 800,\n defaultHeight = 400,\n onHeightChange,\n}: UseMonacoHeightOptions = {}): [\n number,\n (editor: editor.IStandaloneCodeEditor | null) => void,\n] {\n const [height, setHeight] = useState<number>(\n enabled ? minHeight : defaultHeight,\n );\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const previousHeightRef = useRef<number>(enabled ? minHeight : defaultHeight);\n const updateTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const updateHeight = useCallback(() => {\n if (!enabled || !editorRef.current) return;\n\n try {\n const monacoContentHeight = editorRef.current.getContentHeight();\n const boundedMonacoHeight = Math.max(\n minHeight,\n Math.min(maxHeight, monacoContentHeight),\n );\n\n if (boundedMonacoHeight === previousHeightRef.current) {\n return;\n }\n\n previousHeightRef.current = boundedMonacoHeight;\n setHeight(boundedMonacoHeight);\n\n if (onHeightChange) {\n const HEADER_HEIGHT = 36;\n const BORDER = 2;\n const totalBoxHeight = boundedMonacoHeight + HEADER_HEIGHT + BORDER;\n onHeightChange(totalBoxHeight);\n }\n\n // Note: We don't call editor.layout() here because Monaco's\n // automaticLayout option handles layout updates automatically.\n // Calling layout() here would create a feedback loop with\n // onDidContentSizeChange, causing height to grow indefinitely.\n } catch (error) {\n // Silently fail - editor might not be fully initialized\n }\n }, [enabled, minHeight, maxHeight, onHeightChange]);\n\n const setEditor = useCallback(\n (editor: editor.IStandaloneCodeEditor | null) => {\n // Clean up previous timeout if it exists\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n updateTimeoutRef.current = null;\n }\n\n editorRef.current = editor;\n\n if (!enabled || !editor) {\n setHeight(defaultHeight);\n previousHeightRef.current = defaultHeight;\n return;\n }\n\n // Trigger initial height calculation\n setTimeout(() => updateHeight(), 50);\n\n // Listen for content changes with debouncing\n const disposable = editor.onDidContentSizeChange(() => {\n // Clear any pending update\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n // Debounce updates to prevent rapid-fire recalculations\n updateTimeoutRef.current = setTimeout(() => {\n updateHeight();\n updateTimeoutRef.current = null;\n }, 150);\n });\n\n // Store disposable for cleanup\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (editor as any).__heightDisposable = disposable;\n },\n [enabled, defaultHeight, updateHeight],\n );\n\n return [height, setEditor];\n}\n","import React, {\n useRef,\n useState,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport {\n GridHeightContext,\n type GridHeightContextValue,\n} from '../../contexts/GridHeightContext';\n\nexport interface GridProps {\n children: React.ReactNode;\n columns?: number;\n minBoxWidth?: number | string;\n gap?: number | string;\n rowHeight?: 'auto' | 'equal' | 'synced' | number;\n maxRowHeight?: number | string | 'none';\n showScrollButtons?: boolean;\n className?: string;\n}\n\n/**\n * Grid - Horizontal scrolling layout component for arranging boxes\n *\n * Provides consistent grid layout for box components with horizontal\n * scrolling when content exceeds available space. Boxes maintain minimum\n * width and never wrap to new rows.\n *\n * @example\n * // 5 boxes with default 350px minimum width\n * <Grid columns={5}>\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom minimum box width\n * <Grid columns={3} minBoxWidth={400}>\n * <BrowserBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom row height\n * <Grid columns={2} rowHeight={300}>\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Auto row height (no minimum)\n * <Grid columns={3} rowHeight=\"auto\">\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Unlimited row height (no max constraint)\n * <Grid columns={2} maxRowHeight=\"none\">\n * <PropertyTable ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom max row height\n * <Grid columns={2} maxRowHeight={800}>\n * <PropertyTable ... />\n * <CodeBox ... />\n * </Grid>\n */\nexport function Grid({\n children,\n columns,\n minBoxWidth,\n gap,\n rowHeight = 'equal',\n maxRowHeight,\n showScrollButtons = true,\n className = '',\n}: GridProps) {\n const gridRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const [boxHeights, setBoxHeights] = useState<Map<number, number>>(new Map());\n const boxIdCounter = useRef(0);\n\n const getBoxId = useCallback(() => boxIdCounter.current++, []);\n\n const registerBox = useCallback((id: number, height: number) => {\n setBoxHeights((prev) => {\n const next = new Map(prev);\n next.set(id, height);\n return next;\n });\n }, []);\n\n const unregisterBox = useCallback((id: number) => {\n setBoxHeights((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const syncedHeight = useMemo(() => {\n if (rowHeight !== 'synced' || boxHeights.size === 0) return null;\n return Math.min(600, Math.max(...Array.from(boxHeights.values())));\n }, [boxHeights, rowHeight]);\n\n const contextValue: GridHeightContextValue = useMemo(\n () => ({\n registerBox,\n unregisterBox,\n getBoxId,\n syncedHeight,\n enabled: rowHeight === 'synced',\n }),\n [registerBox, unregisterBox, getBoxId, syncedHeight, rowHeight],\n );\n\n const classNames = ['elb-explorer-grid'];\n const gridStyle: React.CSSProperties = {};\n\n // Row height modifiers\n if (rowHeight === 'auto') {\n classNames.push('elb-explorer-grid--row-auto');\n } else if (rowHeight === 'equal') {\n classNames.push('elb-explorer-grid--row-equal');\n } else if (rowHeight === 'synced') {\n classNames.push('elb-explorer-grid--row-synced');\n } else if (typeof rowHeight === 'number') {\n // Apply custom row height via CSS variable\n (gridStyle as Record<string, string>)['--grid-row-min-height'] =\n `${rowHeight}px`;\n (gridStyle as Record<string, string>)['--grid-row-max-height'] =\n `${rowHeight}px`;\n }\n\n // Add custom className\n if (className) {\n classNames.push(className);\n }\n\n // Apply custom gap if provided\n if (gap !== undefined) {\n gridStyle.gap = typeof gap === 'number' ? `${gap}px` : gap;\n }\n\n // Apply custom minimum box width if provided\n if (minBoxWidth !== undefined) {\n (gridStyle as Record<string, string>)['--grid-min-box-width'] =\n typeof minBoxWidth === 'number' ? `${minBoxWidth}px` : minBoxWidth;\n }\n\n if (maxRowHeight !== undefined) {\n // Warn about dangerous configuration that can cause infinite growth\n (gridStyle as Record<string, string>)['--grid-row-max-height'] =\n maxRowHeight === 'none'\n ? 'none'\n : typeof maxRowHeight === 'number'\n ? `${maxRowHeight}px`\n : maxRowHeight;\n }\n\n // Check scroll state\n const updateScrollState = useCallback(() => {\n const el = gridRef.current;\n if (!el) return;\n\n const hasOverflow = el.scrollWidth > el.clientWidth;\n const isAtStart = el.scrollLeft <= 1;\n const isAtEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 1;\n\n setCanScrollLeft(hasOverflow && !isAtStart);\n setCanScrollRight(hasOverflow && !isAtEnd);\n }, []);\n\n // Scroll handlers\n const scrollLeft = () => {\n if (!gridRef.current) return;\n const scrollAmount = gridRef.current.clientWidth * 0.8;\n gridRef.current.scrollBy({ left: -scrollAmount, behavior: 'smooth' });\n };\n\n const scrollRight = () => {\n if (!gridRef.current) return;\n const scrollAmount = gridRef.current.clientWidth * 0.8;\n gridRef.current.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n // Update scroll state on mount, scroll, and resize\n useEffect(() => {\n const el = gridRef.current;\n if (!el || !showScrollButtons) return;\n\n updateScrollState();\n\n el.addEventListener('scroll', updateScrollState);\n window.addEventListener('resize', updateScrollState);\n\n return () => {\n el.removeEventListener('scroll', updateScrollState);\n window.removeEventListener('resize', updateScrollState);\n };\n }, [updateScrollState, showScrollButtons]);\n\n return (\n <GridHeightContext.Provider value={contextValue}>\n <div className=\"elb-explorer elb-explorer-grid-wrapper\">\n {showScrollButtons && canScrollLeft && (\n <button\n className=\"elb-explorer-grid-scroll-button elb-explorer-grid-scroll-button--left\"\n onClick={scrollLeft}\n aria-label=\"Scroll left\"\n type=\"button\"\n >\n ‹\n </button>\n )}\n\n <div ref={gridRef} className={classNames.join(' ')} style={gridStyle}>\n {children}\n </div>\n\n {showScrollButtons && canScrollRight && (\n <button\n className=\"elb-explorer-grid-scroll-button elb-explorer-grid-scroll-button--right\"\n onClick={scrollRight}\n aria-label=\"Scroll right\"\n type=\"button\"\n >\n ›\n </button>\n )}\n </div>\n </GridHeightContext.Provider>\n );\n}\n","import { mockEnv, Destination, WalkerOS } from '@walkeros/core';\n\n/**\n * Formats captured function calls for display\n *\n * @param calls - Array of captured calls with path and args\n * @param defaultMessage - Message to show when no calls captured\n * @returns Formatted string of function calls\n *\n * @example\n * formatCapturedCalls([\n * { path: ['window', 'gtag'], args: ['config', 'G-XXX'] }\n * ])\n * // Returns: \"gtag('config', 'G-XXX');\"\n */\nexport function formatCapturedCalls(\n calls: Array<{ path: string[]; args: unknown[] }>,\n defaultMessage = 'No function calls captured',\n): string {\n if (calls.length === 0) return defaultMessage;\n\n return calls\n .map(({ path, args }) => {\n const functionName = path[path.length - 1];\n const formattedArgs = args\n .map((arg) => {\n if (typeof arg === 'string') return `'${arg}'`;\n if (typeof arg === 'object' && arg !== null)\n return JSON.stringify(arg, null, 2);\n return String(arg);\n })\n .join(', ');\n return `${functionName}(${formattedArgs});`;\n })\n .join('\\n\\n');\n}\n\n/**\n * Creates a capture function for destination init method\n * Uses walkerOS core mockEnv to intercept function calls\n *\n * @param destination - Destination instance with init method\n * @param destinationEnv - Destination's exported env (usually examples.env.push)\n * @returns Async function that executes init and returns formatted output\n *\n * @example\n * import destinationGtag, { examples } from '@walkeros/web-destination-gtag';\n *\n * const captureFn = captureDestinationInit(destinationGtag, examples.env.push);\n *\n * // Use in DestinationInitDemo\n * <DestinationInitDemo\n * destination={destinationGtag}\n * settings={{ measurementId: 'G-XXX' }}\n * fn={captureFn}\n * />\n */\nexport function captureDestinationInit(\n destination: Destination.Instance,\n destinationEnv: unknown,\n) {\n return async (context: Destination.Context): Promise<string> => {\n if (!destination.init) {\n return 'No init method found';\n }\n\n const calls: Array<{ path: string[]; args: unknown[] }> = [];\n\n // Use walkerOS core mockEnv to intercept all function calls\n const testEnv = mockEnv(\n (destinationEnv || {}) as Record<string, unknown>,\n (path, args) => {\n calls.push({ path, args });\n },\n );\n\n await destination.init({ ...context, env: testEnv } as Destination.Context);\n\n return formatCapturedCalls(calls, 'Destination initialized successfully');\n };\n}\n\n/**\n * Creates a capture function for destination push method\n * Uses walkerOS core mockEnv to intercept function calls\n *\n * @param destination - Destination instance with push method\n * @param destinationEnv - Destination's exported env (usually examples.env.push)\n * @returns Async function that executes push and returns formatted output\n *\n * @example\n * import destinationGtag, { examples } from '@walkeros/web-destination-gtag';\n * import { getEvent } from '@walkeros/core';\n *\n * const captureFn = captureDestinationPush(destinationGtag, examples.env.push);\n *\n * // Use in DestinationDemo\n * <DestinationDemo\n * destination={destinationGtag}\n * event={getEvent('order complete')}\n * mapping={examples.mapping.purchase}\n * fn={captureFn}\n * />\n */\nexport function captureDestinationPush(\n destination: Destination.Instance,\n destinationEnv: unknown,\n) {\n return async (\n event: WalkerOS.Event,\n context: Destination.PushContext,\n ): Promise<string> => {\n const calls: Array<{ path: string[]; args: unknown[] }> = [];\n\n // Use walkerOS core mockEnv to intercept all function calls\n const testEnv = mockEnv(\n (destinationEnv || {}) as Record<string, unknown>,\n (path, args) => {\n calls.push({ path, args });\n },\n );\n\n // Call the real destination push with intercepted env\n await destination.push(event, { ...context, env: testEnv });\n\n return formatCapturedCalls(calls);\n };\n}\n\n/**\n * Advanced: Creates a raw capture function that returns call data\n * Use this when you need custom formatting or processing of calls\n *\n * @param destinationEnv - Destination's exported env\n * @returns Function that returns both env and getCalls function\n *\n * @example\n * const { env, getCalls } = createRawCapture(examples.env.push);\n * await destination.init({ ...context, env });\n * const calls = getCalls();\n * // Process calls as needed\n */\nexport function createRawCapture(destinationEnv: unknown) {\n const calls: Array<{ path: string[]; args: unknown[] }> = [];\n\n const testEnv = mockEnv(\n (destinationEnv || {}) as Record<string, unknown>,\n (path, args) => {\n calls.push({ path, args });\n },\n );\n\n return {\n env: testEnv,\n getCalls: () => calls,\n };\n}\n","import React, { useState, useCallback, useEffect } from 'react';\nimport type { Destination } from '@walkeros/core';\nimport { tryCatchAsync } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { CodeBox } from '../molecules/code-box';\nimport { Grid } from '../atoms/grid';\nimport { captureDestinationInit } from '../../helpers/capture';\n\nexport interface DestinationInitDemoProps {\n destination: Destination.Instance;\n settings?: unknown;\n labelSettings?: string;\n labelOutput?: string;\n}\n\n/**\n * DestinationInitDemo - Interactive destination initialization testing component\n *\n * Automatically captures destination.init() calls and displays the output.\n * The component auto-detects the destination's env from destination.examples.env.init.\n *\n * Props:\n * - destination: Destination instance with examples.env.init export\n * - settings: Initial destination-specific settings\n * - labelSettings: Label for settings panel (default: 'Settings')\n * - labelOutput: Label for output panel (default: 'Result')\n *\n * Example:\n * ```tsx\n * import destinationGtag from '@walkeros/web-destination-gtag';\n * import { examples } from '@walkeros/web-destination-gtag';\n *\n * const destination = { ...destinationGtag, examples };\n *\n * <DestinationInitDemo\n * destination={destination}\n * settings={{ ga4: { measurementId: 'G-XXXXXXXXXX' } }}\n * />\n * ```\n */\nexport function DestinationInitDemo({\n destination,\n settings: initialSettings = {},\n labelSettings = 'Settings',\n labelOutput = 'Result',\n}: DestinationInitDemoProps) {\n const [settingsInput, setSettingsInput] = useState(\n typeof initialSettings === 'string'\n ? initialSettings\n : JSON.stringify(initialSettings, null, 2),\n );\n const [output, setOutput] = useState('');\n\n const executeInit = useCallback(async () => {\n await tryCatchAsync(\n async () => {\n const settingsData = JSON.parse(settingsInput);\n\n // Build config\n const config: Destination.Config = {\n settings: settingsData,\n };\n\n // Create minimal collector\n const { collector } = await startFlow({});\n\n // Build context for destination.init()\n const context: Destination.Context = {\n id: 'demo',\n collector,\n config,\n env: destination.env || {},\n logger: collector.logger,\n };\n\n if (!destination.init) {\n setOutput('No init method defined for this destination');\n return;\n }\n\n // Auto-detect destination.examples.env.init (for init method)\n const destinationEnv = (\n destination as { examples?: { env?: { init?: unknown } } }\n ).examples?.env?.init;\n\n // Use captureDestinationInit to automatically capture output\n const captureFn = captureDestinationInit(destination, destinationEnv);\n const result = await captureFn(context);\n setOutput(result);\n },\n (error) => setOutput(`Error: ${error}`),\n )();\n }, [settingsInput, destination]);\n\n useEffect(() => {\n const timeoutId = setTimeout(executeInit, 500);\n return () => clearTimeout(timeoutId);\n }, [executeInit]);\n\n return (\n <Grid columns={2} rowHeight=\"synced\">\n <CodeBox\n label={labelSettings}\n code={settingsInput}\n onChange={setSettingsInput}\n language=\"json\"\n showFormat\n autoHeight\n />\n <CodeBox\n label={labelOutput}\n code={output}\n disabled\n language=\"javascript\"\n autoHeight\n />\n </Grid>\n );\n}\n","import React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n} from 'react';\nimport type { WalkerOS, Elb, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { Grid } from '../atoms/grid';\nimport { Preview } from '../molecules/preview';\nimport { BrowserBox } from '../organisms/browser-box';\nimport { CodeBox } from '../molecules/code-box';\nimport {\n createGtagDestination,\n type DestinationCode,\n} from '../../helpers/destinations';\n\nexport interface PromotionPlaygroundProps {\n initialHtml?: string;\n initialCss?: string;\n initialJs?: string;\n initialMapping?: string;\n labelCode?: string;\n labelPreview?: string;\n labelEvents?: string;\n labelMapping?: string;\n labelResult?: string;\n destination?: DestinationCode;\n}\n\nconst defaultHtml = `<div\n data-elb=\"product\"\n data-elbaction=\"load:view\"\n data-elbcontext=\"stage:inspire\"\n class=\"product-card\"\n>\n <figure class=\"product-figure\">\n <div class=\"product-badge-container\">\n <div data-elb-product=\"badge:delicious\" class=\"product-badge\">delicious</div>\n </div>\n </figure>\n <div class=\"product-body\">\n <h3 data-elb-product=\"name:#innerText\" class=\"product-title\">\n Everyday Ruck Snack\n </h3>\n <div class=\"form-control\">\n <label class=\"form-label\">Taste</label>\n <select\n data-elb-product=\"taste:#value\"\n class=\"form-select\"\n >\n <option value=\"sweet\">Sweet</option>\n <option value=\"spicy\">Spicy</option>\n </select>\n </div>\n <p data-elb-product=\"price:2.50\" class=\"product-price\">\n € 2.50 <span data-elb-product=\"old_price:3.14\" class=\"product-old-price\">€ 3.14</span>\n </p>\n <div data-elbcontext=\"stage:hooked\" class=\"product-actions\">\n <button\n data-elbaction=\"click:save\"\n class=\"btn btn-secondary\"\n >\n Maybe later\n </button>\n <button\n data-elbaction=\"click:add\"\n class=\"btn btn-primary\"\n >\n Add to Cart\n </button>\n </div>\n </div>\n</div>`;\n\nconst defaultCss = `* {\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n}\n\n.product-card {\n width: 100%;\n max-width: 400px;\n margin: 0 auto;\n background: #ffffff;\n border-radius: 16px;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.product-figure {\n position: relative;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 160px;\n background:\n linear-gradient(135deg, rgba(243, 244, 246, 0.9) 0%, rgba(229, 231, 235, 0.9) 100%),\n repeating-linear-gradient(\n 45deg,\n #f9fafb,\n #f9fafb 10px,\n #f3f4f6 10px,\n #f3f4f6 20px\n );\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.product-figure::before {\n content: '🍟';\n font-size: 8rem;\n opacity: 0.8;\n}\n\n.product-badge-container {\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.product-badge {\n background: #01b5e2;\n color: white;\n padding: 0.25rem 0.75rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.product-body {\n padding: 1.5rem;\n}\n\n.product-title {\n font-size: 1.125rem;\n font-weight: 700;\n margin: 0 0 1rem 0;\n color: #111827;\n}\n\n.form-control {\n margin-bottom: 1rem;\n}\n\n.form-label {\n display: block;\n font-size: 0.875rem;\n font-weight: 500;\n color: #6b7280;\n margin-bottom: 0.5rem;\n}\n\n.form-select {\n width: 100%;\n padding: 0.5rem 0.75rem;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n font-size: 0.875rem;\n color: #111827;\n background: white;\n cursor: pointer;\n transition: border-color 0.2s;\n}\n\n.form-select:hover {\n border-color: #9ca3af;\n}\n\n.form-select:focus {\n outline: none;\n border-color: #01b5e2;\n box-shadow: 0 0 0 3px rgba(1, 181, 226, 0.1);\n}\n\n.product-price {\n font-size: 1.25rem;\n font-weight: 700;\n color: #111827;\n margin: 0 0 1rem 0;\n}\n\n.product-old-price {\n font-size: 1rem;\n font-weight: 400;\n color: #9ca3af;\n text-decoration: line-through;\n margin-left: 0.5rem;\n}\n\n.product-actions {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n}\n\n.btn {\n flex: 1;\n padding: 0.75rem 1rem;\n border: none;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n text-align: center;\n}\n\n.btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n.btn:active {\n transform: translateY(0);\n}\n\n.btn-primary {\n background: #01b5e2;\n color: white;\n}\n\n.btn-primary:hover {\n background: #0195b8;\n}\n\n.btn-secondary {\n background: #ffffff;\n color: #01b5e2;\n border: 1px solid #01b5e2;\n}\n\n.btn-secondary:hover {\n background: #01b5e2;\n color: #ffffff;\n}`;\n\nconst defaultMapping = `{\n \"product\": {\n \"view\": {\n \"name\": \"view_item\",\n \"data\": {\n \"map\": {\n \"event\": \"name\",\n \"price\": \"data.price\",\n \"stage\": \"context.stage.0\"\n }\n }\n },\n \"add\": {\n \"name\": \"add_to_cart\",\n \"data\": {\n \"map\": {\n \"event\": \"event\",\n \"price\": \"data.price\",\n \"user\": {\n \"consent\": { \"marketing\": true },\n \"key\": \"user.session\"\n },\n \"isSale\": {\n \"fn\": \"(e) => !!e.data.old_price\"\n }\n }\n }\n },\n \"save\": {\n \"data\": {\n \"map\": {\n \"event\": \"event\",\n \"data\": \"data\"\n }\n }\n }\n }\n}`;\n\n/**\n * PromotionPlayground - Full walkerOS demonstration with live code editing\n *\n * Shows the complete chain:\n * 1. Code Editor - Edit HTML/CSS/JS with walkerOS data attributes\n * 2. Preview - Live rendered output that captures real events\n * 3. Events - Real events captured from preview interactions\n * 4. Mapping - Apply transformations and see destination output\n * 5. Result - Final destination function calls\n *\n * Uses a single unified collector flow:\n * - PromotionPlayground owns the collector with destinations\n * - Preview initializes browser source using parent's elb\n * - Events flow through one collector to all destinations\n */\nexport function PromotionPlayground({\n initialHtml = defaultHtml,\n initialCss = defaultCss,\n initialJs = '',\n initialMapping = defaultMapping,\n labelCode = 'Code',\n labelPreview = 'Preview',\n labelEvents = 'Events',\n labelMapping = 'Mapping',\n labelResult = 'Result',\n destination: destinationProp,\n}: PromotionPlaygroundProps) {\n // Memoize destination to prevent useEffect re-runs on every render\n // Default prop values create new objects each render, breaking effect dependencies\n const destination = useMemo(\n () => destinationProp ?? createGtagDestination(),\n [destinationProp],\n );\n const [html, setHtml] = useState(initialHtml);\n const [css, setCss] = useState(initialCss);\n const [js, setJs] = useState(initialJs);\n const [mappingInput, setMappingInput] = useState(initialMapping);\n const [eventJson, setEventJson] = useState<string>(\n '// Click elements in the preview to see events',\n );\n const [outputString, setOutputString] = useState<string>(\n '// Click elements in the preview to see function call',\n );\n\n const collectorRef = useRef<Collector.Instance | null>(null);\n const elbRef = useRef<Elb.Fn | null>(null);\n const lastEventRef = useRef<WalkerOS.Event | null>(null);\n const [isReady, setIsReady] = useState(false);\n\n // Initialize collector once on mount\n useEffect(() => {\n let mounted = true;\n\n const init = async () => {\n try {\n const parsedMapping = JSON.parse(initialMapping);\n\n const { collector, elb } = await startFlow({\n destinations: {\n // Capture raw events for display in Events column\n rawCapture: {\n code: {\n type: 'rawCapture',\n config: {},\n push: async (event: WalkerOS.Event) => {\n if (!mounted) return;\n lastEventRef.current = event;\n setEventJson(JSON.stringify(event, null, 2));\n },\n },\n },\n // Transform and display formatted output in Result column\n gtag: {\n code: destination,\n config: {\n mapping: parsedMapping,\n },\n env: {\n elb: (output: string) => {\n if (!mounted) return;\n setOutputString(output);\n },\n },\n },\n },\n consent: { functional: true, marketing: true },\n user: { session: 'playground' },\n });\n\n if (!mounted) return;\n\n collectorRef.current = collector;\n elbRef.current = elb;\n setIsReady(true);\n } catch {\n // Initialization failed - component will show placeholder\n }\n };\n\n init();\n\n return () => {\n mounted = false;\n // Cleanup collector\n if (collectorRef.current) {\n // Sources cleanup would happen here if needed\n }\n };\n }, [initialMapping, destination]);\n\n // Handle mapping changes - update collector destination config\n const handleMappingChange = useCallback((newMapping: string) => {\n setMappingInput(newMapping);\n\n // Debounced update to collector\n const timeoutId = setTimeout(() => {\n try {\n const parsed = JSON.parse(newMapping);\n // Update destination config directly\n if (collectorRef.current?.destinations?.gtag?.config) {\n collectorRef.current.destinations.gtag.config.mapping = parsed;\n }\n // Re-process last event to update Result column\n if (lastEventRef.current && collectorRef.current) {\n collectorRef.current.push(lastEventRef.current);\n }\n } catch {\n // Invalid JSON - don't update\n }\n }, 500);\n\n return () => clearTimeout(timeoutId);\n }, []);\n\n return (\n <Grid columns={5} rowHeight={600}>\n {/* Column 1: Code Editor with HTML/CSS/JS tabs */}\n <BrowserBox\n label={labelCode}\n html={html}\n css={css}\n js={js}\n onHtmlChange={setHtml}\n onCssChange={setCss}\n onJsChange={setJs}\n showPreview={false}\n initialTab=\"html\"\n lineNumbers={false}\n wordWrap\n />\n\n {/* Column 2: Preview - uses parent's elb for event capture */}\n <Preview\n label={labelPreview}\n html={html}\n css={css}\n elb={isReady ? (elbRef.current ?? undefined) : undefined}\n />\n\n {/* Column 3: Events - raw captured events */}\n <CodeBox\n label={labelEvents}\n code={eventJson}\n onChange={setEventJson}\n language=\"json\"\n wordWrap\n />\n\n {/* Column 4: Mapping - editable transformation rules */}\n <CodeBox\n label={labelMapping}\n code={mappingInput}\n onChange={handleMappingChange}\n language=\"json\"\n wordWrap\n />\n\n {/* Column 5: Result - transformed destination output */}\n <CodeBox\n label={labelResult}\n code={outputString}\n language=\"javascript\"\n disabled\n wordWrap\n />\n </Grid>\n );\n}\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport type { Elb, Source, Logger, Collector, Lifecycle } from '@walkeros/core';\nimport {\n sourceBrowser,\n type SourceBrowser,\n} from '@walkeros/web-source-browser';\n\ninterface SourceHandle {\n instance: Source.Instance<SourceBrowser.Types>;\n destroyContext: Lifecycle.DestroyContext<\n SourceBrowser.Config,\n SourceBrowser.Env\n >;\n}\nimport { Box } from '../atoms/box';\nimport { PreviewFooter } from '../atoms/preview-footer';\n\nexport interface PreviewProps {\n html: string;\n css?: string;\n elb?: Elb.Fn;\n label?: string;\n}\n\n/**\n * Preview - HTML preview wrapped in a Box with highlight buttons\n *\n * Renders HTML in an isolated iframe with highlight buttons footer.\n * When elb is provided, initializes walkerOS browser source in iframe\n * that pushes events to the parent collector.\n *\n * @example\n * // Read-only preview\n * <Preview html={html} css={css} label=\"Preview\" />\n *\n * // Interactive preview with event capture (elb from parent collector)\n * <Preview html={html} css={css} elb={elb} label=\"Preview\" />\n */\nexport function Preview({\n html,\n css = '',\n elb,\n label = 'Preview',\n}: PreviewProps) {\n const [highlights, setHighlights] = useState<Set<string>>(new Set());\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const updateTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n const elbRef = useRef(elb);\n const sourceRef = useRef<SourceHandle | null>(null);\n\n // Keep elbRef in sync\n useEffect(() => {\n elbRef.current = elb;\n }, [elb]);\n\n const toggleHighlight = (type: string) => {\n setHighlights((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n const autoMarkProperties = useCallback(\n (container: HTMLElement | Document) => {\n const entities = container.querySelectorAll('[data-elb]');\n entities.forEach((entity) => {\n const entityName = entity.getAttribute('data-elb');\n if (!entityName) return;\n\n const propertySelector = `[data-elb-${entityName}]`;\n entity.querySelectorAll(propertySelector).forEach((el) => {\n el.setAttribute('data-elbproperty', '');\n });\n });\n },\n [],\n );\n\n useEffect(() => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n updateTimeoutRef.current = setTimeout(() => {\n const iframe = iframeRef.current;\n if (!iframe || !iframe.contentDocument) return;\n\n const doc = iframe.contentDocument;\n const highlightClasses = Array.from(highlights)\n .map((type) => `highlight-${type}`)\n .join(' ');\n\n doc.open();\n doc.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <style>\n /* Reset */\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n padding: 1.5rem;\n background: #f9fafb;\n color: #111827;\n min-height: 100vh;\n }\n\n @media (prefers-color-scheme: dark) {\n body {\n background: #1f2937;\n color: #e5e7eb;\n }\n }\n\n /* User CSS */\n ${css}\n\n /* Highlight CSS - imported from highlight styles */\n :root {\n --highlight-globals: #4fc3f7cc;\n --highlight-context: #ffbd44cc;\n --highlight-entity: #00ca4ecc;\n --highlight-property: #ff605ccc;\n --highlight-action: #9900ffcc;\n }\n\n body.elb-highlight.highlight-entity [data-elb] {\n box-shadow: 0 0 0 2px var(--highlight-entity);\n }\n\n body.elb-highlight.highlight-context [data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-context);\n }\n\n body.elb-highlight.highlight-property [data-elbproperty] {\n box-shadow: 0 0 0 2px var(--highlight-property);\n }\n\n body.elb-highlight.highlight-action [data-elbaction] {\n box-shadow: 0 0 0 2px var(--highlight-action);\n }\n\n /* Combined highlights */\n body.elb-highlight.highlight-entity.highlight-action [data-elb][data-elbaction] {\n box-shadow: 0 0 0 2px var(--highlight-action), 0 0 0 4px var(--highlight-entity);\n }\n\n body.elb-highlight.highlight-entity.highlight-context [data-elb][data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-entity), 0 0 0 4px var(--highlight-context);\n }\n\n body.elb-highlight.highlight-action.highlight-context [data-elbaction][data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-action), 0 0 0 4px var(--highlight-context);\n }\n </style>\n </head>\n <body class=\"elb-highlight ${highlightClasses}\">\n ${html}\n </body>\n </html>\n `);\n doc.close();\n\n autoMarkProperties(doc);\n\n // Initialize browser source in iframe with parent's elb\n if (elbRef.current && iframe.contentWindow && iframe.contentDocument) {\n setTimeout(async () => {\n // Cleanup previous source instance\n if (sourceRef.current) {\n try {\n await sourceRef.current.instance.destroy?.(\n sourceRef.current.destroyContext,\n );\n } catch {\n // Ignore cleanup errors\n }\n }\n\n try {\n if (\n !iframe.contentWindow ||\n !iframe.contentDocument ||\n !elbRef.current\n ) {\n return;\n }\n\n // Create a noop logger that satisfies the Logger.Instance interface\n const createNoopLogger = (): Logger.Instance => ({\n error: () => {},\n warn: () => {},\n info: () => {},\n debug: () => {},\n json: () => {},\n throw: (msg: string | Error): never => {\n throw msg instanceof Error ? msg : new Error(msg);\n },\n scope: () => createNoopLogger(),\n });\n const noopLogger = createNoopLogger();\n\n // Create a noop push function for env\n const noopPush: Collector.PushFn = async () => ({\n ok: true,\n destination: {},\n });\n\n // Initialize browser source directly with parent's elb\n // This connects the iframe's DOM events to the parent collector\n const config: SourceBrowser.Config = {\n settings: {\n pageview: false,\n prefix: 'data-elb',\n elb: 'elb',\n elbLayer: 'elbLayer',\n // Use body as scope - trigger.ts compares `scope !== document` against\n // main page's document, so iframe.contentDocument fails the Element cast\n scope: iframe.contentDocument.body,\n },\n };\n const env: SourceBrowser.Env = {\n elb: elbRef.current,\n push: noopPush,\n command: async () => ({ ok: true, destination: {} }),\n logger: noopLogger,\n window: iframe.contentWindow as Window & typeof globalThis,\n document: iframe.contentDocument,\n };\n\n const instance = await sourceBrowser({\n id: 'preview',\n collector: {} as Collector.Instance, // Not used when elb is provided directly\n logger: noopLogger,\n setIngest: async () => {},\n setRespond: () => {},\n config,\n env,\n });\n\n sourceRef.current = {\n instance,\n destroyContext: {\n id: 'preview',\n config,\n env,\n logger: noopLogger,\n },\n };\n } catch {\n // sourceBrowser init failed - events won't be captured\n }\n }, 50);\n }\n }, 200);\n\n return () => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n // Cleanup source\n if (sourceRef.current) {\n sourceRef.current.instance.destroy?.(sourceRef.current.destroyContext);\n }\n };\n }, [html, css, highlights, autoMarkProperties, elb]);\n\n return (\n <Box\n header={label}\n footer={\n <PreviewFooter highlights={highlights} onToggle={toggleHighlight} />\n }\n >\n <div className=\"elb-preview-content\">\n <iframe\n ref={iframeRef}\n className=\"elb-preview-iframe\"\n title=\"HTML Preview\"\n />\n </div>\n </Box>\n );\n}\n","import React from 'react';\n\nexport interface PreviewFooterButton {\n type: string;\n label: string;\n highlightClass: string;\n}\n\nexport interface PreviewFooterProps {\n highlights: Set<string>;\n onToggle: (type: string) => void;\n buttons?: PreviewFooterButton[];\n}\n\nconst defaultButtons: PreviewFooterButton[] = [\n { type: 'context', label: 'Context', highlightClass: 'highlight-context' },\n { type: 'entity', label: 'Entity', highlightClass: 'highlight-entity' },\n { type: 'property', label: 'Property', highlightClass: 'highlight-property' },\n { type: 'action', label: 'Action', highlightClass: 'highlight-action' },\n];\n\n/**\n * PreviewFooter - Footer with highlight toggle buttons\n *\n * Renders a set of buttons to toggle highlighting of walkerOS data attributes.\n * Designed to be used with Box footer prop for preview components.\n *\n * @example\n * const [highlights, setHighlights] = useState<Set<string>>(new Set());\n * const handleToggle = (type: string) => {\n * setHighlights(prev => {\n * const next = new Set(prev);\n * next.has(type) ? next.delete(type) : next.add(type);\n * return next;\n * });\n * };\n *\n * <Box footer={<PreviewFooter highlights={highlights} onToggle={handleToggle} />}>\n * Preview content\n * </Box>\n */\nexport function PreviewFooter({\n highlights,\n onToggle,\n buttons = defaultButtons,\n}: PreviewFooterProps) {\n return (\n <div className=\"elb-preview-footer\">\n {buttons.map((button) => (\n <button\n key={button.type}\n className={`elb-preview-btn ${\n highlights.has(button.type) ? button.highlightClass : ''\n }`}\n onClick={() => onToggle(button.type)}\n type=\"button\"\n >\n {button.label}\n </button>\n ))}\n </div>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box } from '../atoms/box';\nimport { ButtonGroup } from '../atoms/button-group';\nimport { Preview } from '../molecules/preview';\nimport { Code } from '../atoms/code';\n\nexport interface BrowserBoxProps {\n html?: string;\n css?: string;\n js?: string;\n onHtmlChange?: (value: string) => void;\n onCssChange?: (value: string) => void;\n onJsChange?: (value: string) => void;\n showPreview?: boolean;\n label?: string;\n className?: string;\n initialTab?: 'preview' | 'html' | 'css' | 'js';\n lineNumbers?: boolean;\n wordWrap?: boolean;\n}\n\n/**\n * BrowserBox - Code editor with HTML/CSS/JS toggle\n *\n * Displays code editor with button group to switch between HTML, CSS, and JavaScript.\n * Only shows tabs for content that is provided.\n *\n * @example\n * <BrowserBox\n * html={htmlCode}\n * css={cssCode}\n * onHtmlChange={setHtml}\n * onCssChange={setCss}\n * label=\"Code\"\n * />\n */\nexport function BrowserBox({\n html,\n css,\n js,\n onHtmlChange,\n onCssChange,\n onJsChange,\n showPreview = true,\n label = 'Code',\n className = '',\n initialTab,\n lineNumbers = false,\n wordWrap = false,\n}: BrowserBoxProps) {\n // Determine available tabs\n const availableTabs = useMemo(() => {\n const tabs: Array<{ label: string; value: string }> = [];\n if (showPreview && html !== undefined)\n tabs.push({ label: 'Preview', value: 'preview' });\n if (html !== undefined) tabs.push({ label: 'HTML', value: 'html' });\n if (css !== undefined) tabs.push({ label: 'CSS', value: 'css' });\n if (js !== undefined) tabs.push({ label: 'JS', value: 'js' });\n return tabs;\n }, [html, css, js, showPreview]);\n\n // Set initial active tab\n const [activeTab, setActiveTab] = useState<string>(() => {\n if (initialTab && availableTabs.some((t) => t.value === initialTab)) {\n return initialTab;\n }\n return availableTabs[0]?.value || 'preview';\n });\n\n // Get current content and language\n const { content, language, onChange } = useMemo(() => {\n switch (activeTab) {\n case 'html':\n return {\n content: html || '',\n language: 'html' as const,\n onChange: onHtmlChange,\n };\n case 'css':\n return {\n content: css || '',\n language: 'css' as const,\n onChange: onCssChange,\n };\n case 'js':\n return {\n content: js || '',\n language: 'javascript' as const,\n onChange: onJsChange,\n };\n default:\n return {\n content: '',\n language: 'text' as const,\n onChange: undefined,\n };\n }\n }, [activeTab, html, css, js, onHtmlChange, onCssChange, onJsChange]);\n\n // Build button group data\n const buttons = useMemo(\n () =>\n availableTabs.map((tab) => ({\n label: tab.label,\n value: tab.value,\n active: activeTab === tab.value,\n })),\n [availableTabs, activeTab],\n );\n\n return (\n <Box\n header={label}\n headerActions={\n availableTabs.length > 1 ? (\n <ButtonGroup buttons={buttons} onButtonClick={setActiveTab} />\n ) : null\n }\n className={className}\n >\n {activeTab === 'preview' ? (\n <Preview html={html || ''} css={css || ''} />\n ) : (\n <Code\n code={content}\n language={language}\n onChange={onChange}\n disabled={!onChange}\n lineNumbers={lineNumbers}\n wordWrap={wordWrap}\n />\n )}\n </Box>\n );\n}\n","import React from 'react';\n\nexport interface ButtonProps {\n active?: boolean;\n onClick?: () => void;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Button - Button component for headers and controls\n *\n * Used in button groups or standalone in headers.\n * Follows atomic design principles as a base atom.\n */\nexport function Button({\n active = false,\n onClick,\n children,\n className = '',\n}: ButtonProps) {\n return (\n <button\n className={`elb-explorer-btn ${active ? 'active' : ''} ${className}`}\n onClick={onClick}\n type=\"button\"\n >\n {children}\n </button>\n );\n}\n","import React from 'react';\nimport { Button } from './button';\n\nexport interface ButtonGroupProps {\n buttons: Array<{\n label: string;\n value: string;\n active?: boolean;\n }>;\n onButtonClick: (value: string) => void;\n className?: string;\n}\n\n/**\n * ButtonGroup - Segmented control for headers\n *\n * Displays multiple buttons in a grouped segmented control style.\n * Commonly used for tab switching (HTML/CSS/JS, etc.)\n */\nexport function ButtonGroup({\n buttons,\n onButtonClick,\n className = '',\n}: ButtonGroupProps) {\n return (\n <div className={`elb-explorer-button-group ${className}`}>\n {buttons.map((button) => (\n <Button\n key={button.value}\n active={button.active}\n onClick={() => onButtonClick(button.value)}\n >\n {button.label}\n </Button>\n ))}\n </div>\n );\n}\n","import type { Destination, WalkerOS } from '@walkeros/core';\n\n// Demo destination type with elb function in env\nexport interface DemoEnv extends Destination.BaseEnv {\n elb: (output: string) => void;\n}\n\nexport type DestinationCode = Destination.Instance<\n Destination.Types<unknown, unknown, DemoEnv>\n>;\n\n/**\n * Creates a gtag-style destination for demo purposes.\n * Formats output as: gtag('event', 'event_name', { data })\n */\nexport function createGtagDestination(): DestinationCode {\n return {\n type: 'gtag',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `gtag('event', '${event.name}', ${JSON.stringify(data, null, 2)});`;\n env.elb(formatted);\n },\n };\n}\n\n/**\n * Creates a Facebook Pixel-style destination for demo purposes.\n * Formats output as: fbq('track', 'EventName', { data })\n */\nexport function createFbqDestination(): DestinationCode {\n return {\n type: 'fbq',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `fbq('track', '${event.name}', ${JSON.stringify(data, null, 2)});`;\n env.elb(formatted);\n },\n };\n}\n\n/**\n * Creates a Plausible-style destination for demo purposes.\n * Formats output as: plausible('event_name', { props: { data } })\n */\nexport function createPlausibleDestination(): DestinationCode {\n return {\n type: 'plausible',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `plausible('${event.name}', { props: ${JSON.stringify(data, null, 2)} });`;\n env.elb(formatted);\n },\n };\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport type { WalkerOS } from '@walkeros/core';\nimport { debounce, isString, tryCatchAsync } from '@walkeros/core';\nimport { CodeBox } from '../molecules/code-box';\nimport { Grid } from '../atoms/grid';\nimport { cn } from '../../lib/utils';\nimport { formatCode } from '../../utils/format-code';\n\nexport interface LiveCodeProps {\n input: unknown;\n config?: unknown;\n output?: unknown;\n options?: WalkerOS.AnyObject;\n fn?: (\n input: unknown,\n config: unknown,\n log: (...args: unknown[]) => void,\n options?: WalkerOS.AnyObject,\n ) => Promise<void>;\n fnName?: string;\n labelInput?: string;\n labelConfig?: string;\n labelOutput?: string;\n emptyText?: string;\n disableInput?: boolean;\n disableConfig?: boolean;\n showQuotes?: boolean;\n className?: string;\n language?: string;\n format?: boolean;\n rowHeight?: 'auto' | 'equal' | 'synced' | number;\n}\n\nfunction formatValue(value: unknown, options: { quotes?: boolean } = {}) {\n if (value === undefined) return '';\n const str = isString(value) ? value.trim() : JSON.stringify(value, null, 2);\n return options.quotes && isString(value) ? `\"${str}\"` : str;\n}\n\nexport function LiveCode({\n input: initInput,\n config: initConfig,\n output: initOutput = '',\n options,\n fn,\n fnName,\n labelInput = 'Event',\n labelConfig = 'Config',\n labelOutput = 'Result',\n emptyText = 'No event yet.',\n disableInput = false,\n disableConfig = false,\n showQuotes = true,\n className,\n language = 'json',\n format = true,\n rowHeight,\n}: LiveCodeProps) {\n const [input, setInput] = useState(formatValue(initInput));\n const [config, setConfig] = useState(formatValue(initConfig));\n const [output, setOutput] = useState([formatValue(initOutput)]);\n\n // Format input code on mount\n useEffect(() => {\n if (format && initInput) {\n const rawInput = formatValue(initInput);\n formatCode(rawInput, language).then(setInput);\n }\n }, [initInput, language, format]);\n\n // Format config code on mount\n useEffect(() => {\n if (format && initConfig) {\n const rawConfig = formatValue(initConfig);\n formatCode(rawConfig, language).then(setConfig);\n }\n }, [initConfig, language, format]);\n\n const log = useCallback(\n (...args: unknown[]) => {\n const params = args\n .map((arg) => formatValue(arg, { quotes: showQuotes }))\n .join(', ');\n setOutput([fnName ? `${fnName}(${params})` : params]);\n },\n [fnName, showQuotes],\n );\n\n const updateOutput = useCallback(\n debounce(\n async (inputStr: string, configStr: string, opts: WalkerOS.AnyObject) => {\n if (!fn) return;\n setOutput([]);\n await tryCatchAsync(fn, (e) => {\n setOutput([`Error: ${String(e)}`]);\n })(inputStr, configStr, log, opts);\n },\n 500,\n true,\n ),\n [fn, log],\n );\n\n useEffect(() => {\n updateOutput(input, config, options || {});\n }, [input, config, options, updateOutput]);\n\n return (\n <Grid columns={3} className={className} rowHeight={rowHeight}>\n <CodeBox\n label={labelInput}\n code={input}\n onChange={disableInput ? undefined : setInput}\n disabled={disableInput}\n language={language}\n showFormat={!disableInput && language === 'json'}\n />\n\n {config && (\n <CodeBox\n label={labelConfig}\n code={config}\n onChange={disableConfig ? undefined : setConfig}\n disabled={disableConfig}\n language={language}\n showFormat={!disableConfig && language === 'json'}\n />\n )}\n\n <CodeBox\n label={labelOutput}\n code={output[0] || emptyText}\n disabled\n language={language}\n />\n </Grid>\n );\n}\n","import * as prettier from 'prettier/standalone';\nimport prettierBabel from 'prettier/plugins/babel';\nimport prettierEstree from 'prettier/plugins/estree';\nimport prettierTypescript from 'prettier/plugins/typescript';\nimport prettierHtml from 'prettier/plugins/html';\n\n/**\n * Format code using Prettier\n *\n * @param code - The code to format\n * @param language - The language (javascript, typescript, json, html, css)\n * @returns Formatted code, or original code if formatting fails\n */\nexport async function formatCode(\n code: string,\n language: string,\n): Promise<string> {\n try {\n let formatted: string;\n\n switch (language) {\n case 'javascript':\n case 'js': {\n // Wrap bare objects in parens so Prettier can parse them\n // Skip one-liners — they're intentionally compact\n const isBareObject =\n code.trimStart().startsWith('{') && code.includes('\\n');\n const input = isBareObject ? `(${code})` : code;\n formatted = await prettier.format(input, {\n parser: 'babel',\n plugins: [prettierBabel, prettierEstree],\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n if (isBareObject) {\n // Unwrap: remove leading \"(\" and trailing \");\\n\"\n formatted = formatted.replace(/^\\(/, '').replace(/\\);?\\s*$/, '');\n }\n break;\n }\n\n case 'typescript':\n case 'ts':\n case 'tsx':\n formatted = await prettier.format(code, {\n parser: 'typescript',\n plugins: [prettierTypescript, prettierEstree],\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n break;\n\n case 'json':\n // Use native JSON for simplicity\n const parsed = JSON.parse(code);\n formatted = JSON.stringify(parsed, null, 2);\n break;\n\n case 'html':\n formatted = await prettier.format(code, {\n parser: 'html',\n plugins: [prettierHtml],\n htmlWhitespaceSensitivity: 'css',\n });\n break;\n\n case 'css':\n case 'scss':\n formatted = await prettier.format(code, {\n parser: 'css',\n plugins: [prettierHtml],\n });\n break;\n\n default:\n // Unsupported language, return original\n return code;\n }\n\n // Trim trailing whitespace/newlines\n return formatted.trim();\n } catch (error) {\n return code;\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport { startFlow } from '@walkeros/collector';\nimport type { DestinationCode } from '../../helpers/destinations';\nimport { CodeBox } from '../molecules/code-box';\n\nexport interface CollectorBoxProps {\n event: string;\n mapping: string;\n destination: DestinationCode;\n label?: string;\n wordWrap?: boolean;\n}\n\n/**\n * CollectorBox - Runs a collector with destination to transform events\n *\n * Takes raw event and mapping config, processes through collector pipeline,\n * and displays the formatted destination output.\n *\n * @example\n * <CollectorBox\n * event={JSON.stringify(event)}\n * mapping={mappingConfig}\n * destination={createGtagDestination()}\n * label=\"Result\"\n * />\n */\nexport function CollectorBox({\n event,\n mapping,\n destination,\n label = 'Result',\n wordWrap = false,\n}: CollectorBoxProps) {\n const [output, setOutput] = useState(\n '// Click elements in the preview to see function call',\n );\n\n useEffect(() => {\n (async () => {\n try {\n // Parse inputs\n const eventObj = JSON.parse(event);\n const mappingObj = JSON.parse(mapping);\n\n // Create collector with destination\n const { collector } = await startFlow({\n destinations: {\n demo: {\n code: destination,\n config: {\n mapping: mappingObj,\n },\n env: {\n elb: setOutput,\n },\n },\n },\n });\n\n // Push event through collector → destination\n await collector.push(eventObj);\n } catch (error) {\n if (error instanceof Error) {\n setOutput(`// Error: ${error.message}`);\n } else {\n setOutput(`// Error: ${String(error)}`);\n }\n }\n })();\n }, [event, mapping, destination]);\n\n return (\n <CodeBox\n code={output}\n language=\"javascript\"\n disabled\n label={label}\n wordWrap={wordWrap}\n />\n );\n}\n","'use client';\n\nimport { createElement, forwardRef, useState, useEffect } from 'react';\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for transformations\n*/\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/**\n* Default values for all optional IconifyIcon properties\n*/\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/**\n* Default values for all properties used in ExtendedIconifyIcon\n*/\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons(provider, prefix) {\n\tlet allIcons = [];\n\tconst providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n\tproviders.forEach((provider$1) => {\n\t\tconst prefixes = typeof provider$1 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider$1] || {});\n\t\tprefixes.forEach((prefix$1) => {\n\t\t\tconst storage = getStorage(provider$1, prefix$1);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider$1 !== \"\" ? \"@\" + provider$1 + \":\" : \"\") + prefix$1 + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\tconst storage = getStorage(provider, prefix);\n\treturn !!addIconSet(storage, data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* IDs usage:\n*\n* id=\"{id}\"\n* xlink:href=\"#{id}\"\n* url(#{id})\n*\n* From SVG animations:\n*\n* begin=\"0;{id}.end\"\n* begin=\"{id}.end\"\n* begin=\"{id}.click\"\n*/\n/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* New random-ish prefix for ids\n*\n* Do not use dash, it cannot be used in SVG 2 animations\n*/\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\n/**\n* Counter for ids, increasing with every replacement\n*/\nlet counter = 0;\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body, prefix = randomPrefix) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\tconst result = {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n\treturn result;\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch$1) {\n\tfetchModule = fetch$1;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tconst host = item;\n\t\t\tmaxHostLength = Math.max(maxHostLength, host.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst icons = params.icons;\n\t\t\tconst iconsList = icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status$1, data) => {\n\t\t\t\tmoduleResponse(item, status$1, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query$1 = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query$1);\n\t\treturn query$1;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\tconst instance = {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n\treturn instance;\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tconst redundancy = initRedundancy(config);\n\t\tconst cachedReundancy = {\n\t\t\tconfig,\n\t\t\tredundancy\n\t\t};\n\t\tredundancyCache[provider] = cachedReundancy;\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst moduleKey = target.resources ? target.resources[0] : \"\";\n\t\t\tconst api = getAPIModule(moduleKey);\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tconst parsed = addIconSet(storage, data);\n\t\tif (!parsed.length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons$1 = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons$1 || !icons$1.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons$1.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons$1, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons$1, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons$1.forEach((name) => {\n\t\t\t\t\tconst response = customIconLoader(name, prefix, provider);\n\t\t\t\t\tparsePossiblyAsyncResponse(response, (data) => {\n\t\t\t\t\t\tconst iconSet = data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null;\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], iconSet);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons$1);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst params = api.prepare(provider, prefix, valid);\n\t\t\tparams.forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons = (icons, callback) => {\n\tconst cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n\tconst sortedIcons = sortIcons(cleanedIcons);\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n* Convert IconifyIconCustomisations to FullIconCustomisations, checking value types\n*/\nfunction mergeCustomisations(defaults, item) {\n\tconst result = { ...defaults };\n\tfor (const key in item) {\n\t\tconst value = item[key];\n\t\tconst valueType = typeof value;\n\t\tif (key in defaultIconSizeCustomisations) {\n\t\t\tif (value === null || value && (valueType === \"string\" || valueType === \"number\")) result[key] = value;\n\t\t} else if (valueType === typeof result[key]) result[key] = key === \"rotate\" ? value % 4 : value;\n\t}\n\treturn result;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tconst value = str.trim();\n\t\tswitch (value) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value$1) {\n\t\twhile (value$1 < 0) value$1 += 4;\n\t\treturn value$1 % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nlet policy;\n/**\n* Attempt to create policy\n*/\nfunction createPolicy() {\n\ttry {\n\t\tpolicy = window.trustedTypes.createPolicy(\"iconify\", { createHTML: (s) => s });\n\t} catch (err) {\n\t\tpolicy = null;\n\t}\n}\n/**\n* Clean up value for innerHTML assignment\n*\n* This code doesn't actually clean up anything.\n* It is intended be used with Iconify icon data, which has already been validated\n*/\nfunction cleanUpInnerHTML(html) {\n\tif (policy === void 0) createPolicy();\n\treturn policy ? policy.createHTML(html) : html;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n WebkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n ...defaultExtendedIconCustomisations,\n inline: true,\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops, \n// Icon name\nname) => {\n // Get default properties\n const defaultProps = props.inline\n ? inlineDefaults\n : defaultExtendedIconCustomisations;\n // Get all customisations\n const customisations = mergeCustomisations(defaultProps, props);\n // Check mode\n const mode = props.mode || 'svg';\n // Create style\n const style = {};\n const customStyle = props.style || {};\n // Create SVG component properties\n const componentProps = {\n ...(mode === 'svg' ? svgDefaults : {}),\n };\n if (name) {\n const iconName = stringToIcon(name, false, true);\n if (iconName) {\n const classNames = ['iconify'];\n const props = [\n 'provider',\n 'prefix',\n ];\n for (const prop of props) {\n if (iconName[prop]) {\n classNames.push('iconify--' + iconName[prop]);\n }\n }\n componentProps.className = classNames.join(' ');\n }\n }\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'children':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n case 'fallback':\n break;\n // Forward ref\n case '_ref':\n componentProps.ref = value;\n break;\n // Merge class names\n case 'className':\n componentProps[key] =\n (componentProps[key] ? componentProps[key] + ' ' : '') +\n value;\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: copy to style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n // Copy missing property if it does not exist in customisations\n default:\n if (defaultProps[key] === void 0) {\n componentProps[key] = value;\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add icon stuff\n componentProps.dangerouslySetInnerHTML = {\n __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact')),\n };\n return createElement('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return createElement('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\nfunction IconComponent(props) {\n const [mounted, setMounted] = useState(!!props.ssr);\n const [abort, setAbort] = useState({});\n // Get initial state\n function getInitialState(mounted) {\n if (mounted) {\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n return {\n name: '',\n data: name,\n };\n }\n const data = getIconData(name);\n if (data) {\n return {\n name,\n data,\n };\n }\n }\n return {\n name: '',\n };\n }\n const [state, setState] = useState(getInitialState(!!props.ssr));\n // Cancel loading\n function cleanup() {\n const callback = abort.callback;\n if (callback) {\n callback();\n setAbort({});\n }\n }\n // Change state if it is different\n function changeState(newState) {\n if (JSON.stringify(state) !== JSON.stringify(newState)) {\n cleanup();\n setState(newState);\n return true;\n }\n }\n // Update state\n function updateState() {\n var _a;\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n changeState({\n name: '',\n data: name,\n });\n return;\n }\n // New icon or got icon data\n const data = getIconData(name);\n if (changeState({\n name,\n data,\n })) {\n if (data === undefined) {\n // Load icon, update state when done\n const callback = loadIcons([name], updateState);\n setAbort({\n callback,\n });\n }\n else if (data) {\n // Icon data is available: trigger onLoad callback if present\n (_a = props.onLoad) === null || _a === void 0 ? void 0 : _a.call(props, name);\n }\n }\n }\n // Mounted state, cleanup for loader\n useEffect(() => {\n setMounted(true);\n return cleanup;\n }, []);\n // Icon changed or component mounted\n useEffect(() => {\n if (mounted) {\n updateState();\n }\n }, [props.icon, mounted]);\n // Render icon\n const { name, data } = state;\n if (!data) {\n return props.children\n ? props.children\n : props.fallback\n ? props.fallback\n : createElement('span', {});\n }\n return render({\n ...defaultIconProps,\n ...data,\n }, props, name);\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = forwardRef((props, ref) => IconComponent({\n ...props,\n _ref: ref,\n}));\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = forwardRef((props, ref) => IconComponent({\n inline: true,\n ...props,\n _ref: ref,\n}));\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nexport const concatArrays = <T, U>(\n array1: readonly T[],\n array2: readonly U[],\n): readonly (T | U)[] => {\n // Pre-allocate for better V8 optimization\n const combinedArray: (T | U)[] = new Array(array1.length + array2.length)\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i]!\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i]!\n }\n return combinedArray\n}\n","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\nimport { concatArrays } from './utils'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[] | null\n classGroupId: AnyClassGroupIds | undefined // Always define optional props for consistent shape\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (\n classGroupId: AnyClassGroupIds,\n validator: ClassValidator,\n): ClassValidatorObject => ({\n classGroupId,\n validator,\n})\n\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (\n nextPart: Map<string, ClassPartObject> = new Map(),\n validators: ClassValidatorObject[] | null = null,\n classGroupId?: AnyClassGroupIds,\n): ClassPartObject => ({\n nextPart,\n validators,\n classGroupId,\n})\n\nconst CLASS_PART_SEPARATOR = '-'\n\nconst EMPTY_CONFLICTS: readonly AnyClassGroupIds[] = []\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className)\n }\n\n const classParts = className.split(CLASS_PART_SEPARATOR)\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0\n return getGroupRecursive(classParts, startIndex, classMap)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ): readonly AnyClassGroupIds[] => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId]\n const baseConflicts = conflictingClassGroups[classGroupId]\n\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts)\n }\n // Only modifier conflicts\n return modifierConflicts\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS\n }\n\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n startIndex: number,\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n const classPathsLength = classParts.length - startIndex\n if (classPathsLength === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[startIndex]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject)\n if (result) return result\n }\n\n const validators = classPartObject.validators\n if (validators === null) {\n return undefined\n }\n\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest =\n startIndex === 0\n ? classParts.join(CLASS_PART_SEPARATOR)\n : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR)\n const validatorsLength = validators.length\n\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i]!\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId\n }\n }\n\n return undefined\n}\n\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = (className: string): AnyClassGroupIds | undefined =>\n className.slice(1, -1).indexOf(':') === -1\n ? undefined\n : (() => {\n const content = className.slice(1, -1)\n const colonIndex = content.indexOf(':')\n const property = content.slice(0, colonIndex)\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined\n })()\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, classGroups } = config\n return processClassGroups(classGroups, theme)\n}\n\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (\n classGroups: Record<AnyClassGroupIds, ClassGroup<AnyThemeGroupIds>>,\n theme: ThemeObject<AnyThemeGroupIds>,\n): ClassPartObject => {\n const classMap = createClassPartObject()\n\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId]!\n processClassesRecursively(group, classMap, classGroupId, theme)\n }\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const len = classGroup.length\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i]!\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme)\n }\n}\n\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (\n classDefinition: ClassGroup<AnyThemeGroupIds>[number],\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId)\n return\n }\n\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme)\n return\n }\n\n processObjectDefinition(\n classDefinition as Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject,\n classGroupId,\n theme,\n )\n}\n\nconst processStringDefinition = (\n classDefinition: string,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n) => {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n}\n\nconst processFunctionDefinition = (\n classDefinition: Function,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme)\n return\n }\n\n if (classPartObject.validators === null) {\n classPartObject.validators = []\n }\n classPartObject.validators.push(\n createClassValidatorObject(classGroupId, classDefinition as ClassValidator),\n )\n}\n\nconst processObjectDefinition = (\n classDefinition: Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const entries = Object.entries(classDefinition)\n const len = entries.length\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i]!\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme)\n }\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string): ClassPartObject => {\n let current = classPartObject\n const parts = path.split(CLASS_PART_SEPARATOR)\n const len = parts.length\n\n for (let i = 0; i < len; i++) {\n const part = parts[i]!\n\n let next = current.nextPart.get(part)\n if (!next) {\n next = createClassPartObject()\n current.nextPart.set(part, next)\n }\n current = next\n }\n\n return current\n}\n\n// Type guard maintains monomorphic check\nconst isThemeGetter = (func: Function): func is ThemeGetter =>\n 'isThemeGetter' in func && (func as ThemeGetter).isThemeGetter === true\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key extends string, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache implementation using plain objects for simplicity\nexport const createLruCache = <Key extends string, Value>(\n maxCacheSize: number,\n): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache: Record<Key, Value> = Object.create(null)\n let previousCache: Record<Key, Value> = Object.create(null)\n\n const update = (key: Key, value: Value) => {\n cache[key] = value\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = Object.create(null)\n }\n }\n\n return {\n get(key) {\n let value = cache[key]\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nconst MODIFIER_SEPARATOR = ':'\nconst EMPTY_MODIFIERS: string[] = []\n\n// Pre-allocated result object shape for consistency\nconst createResultObject = (\n modifiers: string[],\n hasImportantModifier: boolean,\n baseClassName: string,\n maybePostfixModifierPosition?: number,\n isExternal?: boolean,\n): ParsedClassName => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal,\n})\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { prefix, experimentalParseClassName } = config\n\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = (className: string): ParsedClassName => {\n // Use simple array with push for better performance\n const modifiers: string[] = []\n\n let bracketDepth = 0\n let parenDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n const len = className.length\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index]!\n\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + 1\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') bracketDepth++\n else if (currentCharacter === ']') bracketDepth--\n else if (currentCharacter === '(') parenDepth++\n else if (currentCharacter === ')') parenDepth--\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.slice(modifierStart)\n\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier\n let hasImportantModifier = false\n\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1)\n hasImportantModifier = true\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n ) {\n baseClassName = baseClassNameWithImportantModifier.slice(1)\n hasImportantModifier = true\n }\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return createResultObject(\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n )\n }\n\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n className.startsWith(fullPrefix)\n ? parseClassNameOriginal(className.slice(fullPrefix.length))\n : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true)\n }\n\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n }\n\n return parseClassName\n}\n","import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map<string, number>()\n\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index) // High weights for sensitive mods\n })\n\n return (modifiers: readonly string[]): string[] => {\n const result: string[] = []\n let currentSegment: string[] = []\n\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i]!\n\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '['\n const isOrderSensitive = modifierWeights.has(modifier)\n\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n currentSegment = []\n }\n result.push(modifier)\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier)\n }\n }\n\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n }\n\n return result\n }\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = parseClassName(originalClassName)\n\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n let hasPostfixModifier = !!maybePostfixModifierPosition\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n // Fast path: skip sorting for empty or single modifier\n const variantModifier =\n modifiers.length === 0\n ? ''\n : modifiers.length === 1\n ? modifiers[0]!\n : sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport const twJoin = (...classLists: ClassNameValue[]): string => {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < classLists.length) {\n if ((argument = classLists[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string): string => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createTailwindMerge = (\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge => {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall: (classList: string) => string\n\n const initTailwindMerge = (classList: string) => {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n const tailwindMerge = (classList: string) => {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n functionToCall = initTailwindMerge\n\n return (...args: ClassNameValue[]) => functionToCall(twJoin(...args))\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nconst fallbackThemeArr: ThemeObject<DefaultThemeGroupIds>[DefaultThemeGroupIds] = []\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(\n key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>,\n): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || fallbackThemeArr\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryWeight = (value: string) => getIsArbitraryValue(value, isLabelWeight, isAny)\n\nexport const isArbitraryFamilyName = (value: string) =>\n getIsArbitraryValue(value, isLabelFamilyName, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n getIsArbitraryVariable(value, isLabelShadow, true)\n\nexport const isArbitraryVariableWeight = (value: string) =>\n getIsArbitraryVariable(value, isLabelWeight, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n value: string,\n testLabel: (label: string) => boolean,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst getIsArbitraryVariable = (\n value: string,\n testLabel: (label: string) => boolean,\n shouldMatchNoLabel = false,\n) => {\n const result = arbitraryVariableRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n return shouldMatchNoLabel\n }\n\n return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelWeight = (label: string) => label === 'number' || label === 'weight'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n\n const themeColor = fromTheme('color')\n const themeFont = fromTheme('font')\n const themeText = fromTheme('text')\n const themeFontWeight = fromTheme('font-weight')\n const themeTracking = fromTheme('tracking')\n const themeLeading = fromTheme('leading')\n const themeBreakpoint = fromTheme('breakpoint')\n const themeContainer = fromTheme('container')\n const themeSpacing = fromTheme('spacing')\n const themeRadius = fromTheme('radius')\n const themeShadow = fromTheme('shadow')\n const themeInsetShadow = fromTheme('inset-shadow')\n const themeTextShadow = fromTheme('text-shadow')\n const themeDropShadow = fromTheme('drop-shadow')\n const themeBlur = fromTheme('blur')\n const themePerspective = fromTheme('perspective')\n const themeAspect = fromTheme('aspect')\n const themeEase = fromTheme('ease')\n const themeAnimate = fromTheme('animate')\n\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n\n const scaleBreak = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const scalePosition = () =>\n [\n 'center',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top',\n 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top',\n 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom',\n 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom',\n ] as const\n const scalePositionWithArbitrary = () =>\n [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n const scaleUnambiguousSpacing = () =>\n [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n const scaleGridTemplateColsRows = () =>\n [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridColRowStartAndEnd = () =>\n [\n 'auto',\n { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleGridColRowStartOrEnd = () =>\n [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridAutoColsRows = () =>\n ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n const scaleAlignPrimaryAxis = () =>\n [\n 'start',\n 'end',\n 'center',\n 'between',\n 'around',\n 'evenly',\n 'stretch',\n 'baseline',\n 'center-safe',\n 'end-safe',\n ] as const\n const scaleAlignSecondaryAxis = () =>\n ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n const scaleSizing = () =>\n [\n isFraction,\n 'auto',\n 'full',\n 'dvw',\n 'dvh',\n 'lvw',\n 'lvh',\n 'svw',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingInline = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'dvw',\n 'lvw',\n 'svw',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingBlock = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'lh',\n 'dvh',\n 'lvh',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n const scaleBgPosition = () =>\n [\n ...scalePosition(),\n isArbitraryVariablePosition,\n isArbitraryPosition,\n { position: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n const scaleBgSize = () =>\n [\n 'auto',\n 'cover',\n 'contain',\n isArbitraryVariableSize,\n isArbitrarySize,\n { size: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleGradientStopPosition = () =>\n [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleRadius = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n 'full',\n themeRadius,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleBorderWidth = () =>\n ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n const scaleBlendMode = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const scaleMaskImagePosition = () =>\n [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n const scaleBlur = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeBlur,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n ],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [\n {\n aspect: [\n 'auto',\n 'square',\n isFraction,\n isArbitraryValue,\n isArbitraryVariable,\n themeAspect,\n ],\n },\n ],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [\n { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n ],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': scaleBreak() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': scaleBreak() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: scalePositionWithArbitrary() }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: scaleOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: scaleOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: scaleInset() }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': scaleInset() }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': scaleInset() }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [\n {\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset(),\n },\n ],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [\n {\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset(),\n },\n ],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{ 'inset-bs': scaleInset() }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{ 'inset-be': scaleInset() }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: scaleInset() }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: scaleInset() }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: scaleInset() }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: scaleInset() }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [\n {\n basis: [\n isFraction,\n 'full',\n 'auto',\n themeContainer,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [\n {\n order: [\n isInteger,\n 'first',\n 'last',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: scaleUnambiguousSpacing() }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [\n { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n ],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: scaleUnambiguousSpacing() }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: scaleUnambiguousSpacing() }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{ pbs: scaleUnambiguousSpacing() }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{ pbe: scaleUnambiguousSpacing() }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: scaleUnambiguousSpacing() }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: scaleUnambiguousSpacing() }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: scaleUnambiguousSpacing() }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: scaleUnambiguousSpacing() }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: scaleMargin() }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: scaleMargin() }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: scaleMargin() }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: scaleMargin() }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: scaleMargin() }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{ mbs: scaleMargin() }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{ mbe: scaleMargin() }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: scaleMargin() }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: scaleMargin() }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: scaleMargin() }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: scaleMargin() }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n\n // --------------\n // --- Sizing ---\n // --------------\n\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{ size: scaleSizing() }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{ inline: ['auto', ...scaleSizingInline()] }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{ 'min-inline': ['auto', ...scaleSizingInline()] }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{ 'max-inline': ['none', ...scaleSizingInline()] }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{ block: ['auto', ...scaleSizingBlock()] }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{ 'min-block': ['auto', ...scaleSizingBlock()] }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{ 'max-block': ['none', ...scaleSizingBlock()] }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [\n {\n 'min-w': [\n themeContainer,\n 'screen',\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none',\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n themeContainer,\n 'screen',\n 'none',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n { screen: [themeBreakpoint] },\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n // ------------------\n // --- Typography ---\n // ------------------\n\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [\n { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [\n {\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight],\n },\n ],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [\n {\n 'font-stretch': [\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n isPercent,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [\n { font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont] },\n ],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{ 'font-features': [isArbitraryValue] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [\n { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n ],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [\n { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: scaleColor() }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: scaleColor() }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n {\n decoration: [\n isNumber,\n 'from-font',\n 'auto',\n isArbitraryVariable,\n isArbitraryLength,\n ],\n },\n ],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: scaleColor() }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [\n { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: scaleUnambiguousSpacing() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // -------------------\n // --- Backgrounds ---\n // -------------------\n\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: scaleBgPosition() }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: scaleBgRepeat() }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: scaleBgSize() }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n {\n linear: [\n { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n },\n isArbitraryVariableImage,\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: scaleColor() }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: scaleColor() }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: scaleColor() }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: scaleColor() }],\n\n // ---------------\n // --- Borders ---\n // ---------------\n\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: scaleRadius() }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': scaleRadius() }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': scaleRadius() }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': scaleRadius() }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': scaleRadius() }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': scaleRadius() }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': scaleRadius() }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': scaleRadius() }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': scaleRadius() }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': scaleRadius() }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: scaleBorderWidth() }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{ 'border-bs': scaleBorderWidth() }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{ 'border-be': scaleBorderWidth() }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: scaleColor() }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': scaleColor() }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': scaleColor() }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': scaleColor() }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': scaleColor() }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{ 'border-bs': scaleColor() }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{ 'border-be': scaleColor() }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': scaleColor() }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': scaleColor() }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': scaleColor() }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': scaleColor() }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: scaleColor() }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [\n { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [\n { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: scaleColor() }],\n\n // ---------------\n // --- Effects ---\n // ---------------\n\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [\n {\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{ shadow: scaleColor() }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [\n {\n 'inset-shadow': [\n 'none',\n themeInsetShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{ ring: scaleBorderWidth() }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{ ring: scaleColor() }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [\n {\n 'text-shadow': [\n 'none',\n themeTextShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [\n { 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n 'mask-no-clip',\n ],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n 'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n 'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n 'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n 'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n 'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n 'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n 'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n 'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n 'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n 'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n 'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n 'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n 'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n 'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n 'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n 'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n 'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n 'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n 'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n 'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n 'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n 'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n 'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n 'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n 'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n 'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n 'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n 'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n 'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n 'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n 'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n 'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n 'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n 'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n 'mask-image-radial-size': [\n { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n ],\n 'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n 'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n 'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n 'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n 'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n 'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [\n { 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n ],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{ mask: scaleBgPosition() }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{ mask: scaleBgRepeat() }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{ mask: scaleBgSize() }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // ---------------\n // --- Filters ---\n // ---------------\n\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [\n {\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: scaleBlur() }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [\n {\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeDropShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [\n {\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [\n { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [\n { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [\n { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [\n { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [\n { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [\n { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [\n { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [\n { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n\n // --------------\n // --- Tables ---\n // --------------\n\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n '',\n 'all',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [\n { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------\n // --- Transforms ---\n // ------------------\n\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{ backface: ['hidden', 'visible'] }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [\n { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: scaleRotate() }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{ 'rotate-x': scaleRotate() }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{ 'rotate-y': scaleRotate() }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{ 'rotate-z': scaleRotate() }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: scaleScale() }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': scaleScale() }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': scaleScale() }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{ 'scale-z': scaleScale() }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{ skew: scaleSkew() }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': scaleSkew() }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': scaleSkew() }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [\n { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n ],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{ origin: scalePositionWithArbitrary() }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{ transform: ['3d', 'flat'] }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{ translate: scaleTranslate() }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': scaleTranslate() }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': scaleTranslate() }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{ 'translate-z': scaleTranslate() }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: scaleColor() }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: scaleColor() }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [\n { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n ],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', '', 'y', 'x'] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{ 'scroll-mbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{ 'scroll-mbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{ 'scroll-pbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{ 'scroll-pbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n {\n 'will-change': [\n 'auto',\n 'scroll',\n 'contents',\n 'transform',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n\n // -----------\n // --- SVG ---\n // -----------\n\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: ['none', ...scaleColor()] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [\n {\n stroke: [\n isNumber,\n isArbitraryVariableLength,\n isArbitraryLength,\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: [\n 'inset-x',\n 'inset-y',\n 'inset-bs',\n 'inset-be',\n 'start',\n 'end',\n 'top',\n 'right',\n 'bottom',\n 'left',\n ],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-x',\n 'border-w-y',\n 'border-w-s',\n 'border-w-e',\n 'border-w-bs',\n 'border-w-be',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-x',\n 'border-color-y',\n 'border-color-s',\n 'border-color-e',\n 'border-color-bs',\n 'border-color-be',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mbs',\n 'scroll-mbe',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pbs',\n 'scroll-pbe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n orderSensitiveModifiers: [\n '*',\n '**',\n 'after',\n 'backdrop',\n 'before',\n 'details-content',\n 'file',\n 'first-letter',\n 'first-line',\n 'marker',\n 'placeholder',\n 'selection',\n ],\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { AnyConfig, ConfigExtension, NoInfer } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: AnyConfig,\n {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n overrideConfigProperties(baseConfig.theme, override.theme)\n overrideConfigProperties(baseConfig.classGroups, override.classGroups)\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)\n overrideConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n override.conflictingClassGroupModifiers,\n )\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)\n\n mergeConfigProperties(baseConfig.theme, extend.theme)\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups)\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)\n mergeConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n extend.conflictingClassGroupModifiers,\n )\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key)\n }\n }\n}\n\nconst mergeArrayProperties = <Key extends string>(\n baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n key: Key,\n) => {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge class names with Tailwind CSS classes\n * Uses clsx for conditional classes and tailwind-merge to handle conflicts\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from 'react';\nimport type { ReactNode } from 'react';\nimport { Icon } from '@iconify/react';\nimport { cn } from '../../../lib/utils';\n\nexport interface FlowItem {\n icon: ReactNode;\n label: string;\n}\n\nexport interface FlowSection {\n title: string;\n items: FlowItem[];\n}\n\nexport interface FlowColumn {\n title: string;\n sections: FlowSection[];\n}\n\nexport interface ArchitectureFlowProps {\n sources: FlowColumn;\n center: ReactNode;\n centerTitle?: string;\n destinations: FlowColumn;\n arrowRight?: ReactNode;\n arrowDown?: ReactNode;\n className?: string;\n}\n\nexport function ArchitectureFlow({\n sources,\n center,\n centerTitle,\n destinations,\n arrowRight = <Icon icon=\"mdi:arrow-right\" />,\n arrowDown = <Icon icon=\"mdi:arrow-down\" />,\n className,\n}: ArchitectureFlowProps) {\n return (\n <div className={cn('elb-architecture-flow', className)}>\n <div className=\"elb-architecture-flow__grid\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {sources.title}\n </span>\n <div className=\"elb-architecture-flow__spacer\" />\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {centerTitle}\n </span>\n <div className=\"elb-architecture-flow__spacer\" />\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {destinations.title}\n </span>\n\n <div className=\"elb-architecture-flow__column\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {sources.title}\n </span>\n <div className=\"elb-architecture-flow__sections\">\n {sources.sections.map((section) => (\n <FlowSectionBox key={section.title} section={section} />\n ))}\n </div>\n </div>\n\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--desktop\">\n {arrowRight}\n </div>\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--mobile\">\n {arrowDown}\n </div>\n\n <div className=\"elb-architecture-flow__center\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {centerTitle}\n </span>\n <div className=\"elb-architecture-flow__center-content\">{center}</div>\n </div>\n\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--desktop\">\n {arrowRight}\n </div>\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--mobile\">\n {arrowDown}\n </div>\n\n <div className=\"elb-architecture-flow__column\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {destinations.title}\n </span>\n <div className=\"elb-architecture-flow__sections\">\n {destinations.sections.map((section) => (\n <FlowSectionBox key={section.title} section={section} />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction FlowSectionBox({ section }: { section: FlowSection }) {\n return (\n <div className=\"elb-architecture-flow__section\">\n <span className=\"elb-architecture-flow__section-title\">\n {section.title}\n </span>\n <div className=\"elb-architecture-flow__items\">\n {section.items.map((item) => (\n <div key={item.label} className=\"elb-architecture-flow__item\">\n <span className=\"elb-architecture-flow__item-icon\">\n {item.icon}\n </span>\n <span className=\"elb-architecture-flow__item-label\">\n {item.label}\n </span>\n </div>\n ))}\n <span className=\"elb-architecture-flow__more\">and more…</span>\n </div>\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { CodeBox, type CodeBoxProps } from './code-box';\nimport { formatCode } from '../../utils/format-code';\n\nexport type CodeSnippetProps = Omit<CodeBoxProps, 'label' | 'showHeader'> & {\n format?: boolean;\n};\n\n/**\n * CodeSnippet - Prominent code display for snippets\n *\n * Wraps CodeBox with larger font size and generous padding.\n * Use this for showcasing code examples, one-liners, or small code blocks\n * where you want the code to be more visually prominent than in a standard editor.\n *\n * Always renders without a header. Use CodeBox if you need a header.\n *\n * Default behavior:\n * - Read-only (disabled=true)\n * - Copy button enabled (showCopy=true)\n * - Auto-height with sensible bounds (min: 20px, max: 600px)\n * - Auto-format on mount (format=true) - formats code once on initial load\n *\n * Auto-Formatting:\n * - Enabled by default (format=true)\n * - Runs once on component mount using Monaco's built-in formatters\n * - Supports: JavaScript, TypeScript, JSON, HTML, CSS\n * - Use format={false} to disable for special cases (pre-formatted code)\n *\n * Reuses all CodeBox functionality:\n * - Monaco Editor with syntax highlighting\n * - Grid height management and auto-height modes\n * - Copy button\n * - Theme integration\n *\n * @example\n * // Minimal usage - code auto-formats on load\n * <CodeSnippet\n * code=\"import { elb } from '@walkeros/core';\"\n * language=\"javascript\"\n * />\n *\n * @example\n * // Disable auto-formatting for pre-formatted code\n * <CodeSnippet\n * code={alreadyFormattedCode}\n * language=\"javascript\"\n * format={false}\n * />\n *\n * @example\n * // Override defaults if needed\n * <CodeSnippet\n * code={editableCode}\n * language=\"javascript\"\n * disabled={false}\n * showCopy={false}\n * autoHeight={{ min: 100, max: 800 }}\n * />\n */\nexport function CodeSnippet(props: CodeSnippetProps) {\n const {\n code,\n language = 'javascript',\n className,\n disabled = true,\n showCopy = true,\n autoHeight = { min: 20, max: 600 },\n fontSize = 15,\n format = true,\n ...rest\n } = props;\n const snippetClassName = `elb-code-snippet ${className || ''}`.trim();\n const [formattedCode, setFormattedCode] = useState(code);\n\n // Format code on mount\n useEffect(() => {\n if (format && code) {\n formatCode(code, language).then(setFormattedCode);\n } else {\n setFormattedCode(code);\n }\n }, [code, language, format]);\n\n return (\n <CodeBox\n {...rest}\n code={formattedCode}\n language={language}\n className={snippetClassName}\n showHeader={false}\n disabled={disabled}\n showCopy={showCopy}\n autoHeight={autoHeight}\n fontSize={fontSize}\n />\n );\n}\n","import React, { useEffect, useRef } from 'react';\nimport rough from 'roughjs';\nimport { Icon } from '@iconify/react';\n\n// ============================================\n// Helper Components for rough.js SVG rendering\n// ============================================\n\ninterface RoughRectProps {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke: string;\n}\n\n/**\n * RoughRect - Renders a hand-drawn rectangle using rough.js SVG mode\n * Uses a rounded rectangle path for softer corners\n */\nfunction RoughRect({\n x,\n y,\n width,\n height,\n fill,\n stroke,\n}: RoughRectProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n // Clear previous content\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const r = 8; // corner radius\n\n // Create rounded rectangle path\n const path = `M ${x + r} ${y}\n L ${x + width - r} ${y}\n Q ${x + width} ${y} ${x + width} ${y + r}\n L ${x + width} ${y + height - r}\n Q ${x + width} ${y + height} ${x + width - r} ${y + height}\n L ${x + r} ${y + height}\n Q ${x} ${y + height} ${x} ${y + height - r}\n L ${x} ${y + r}\n Q ${x} ${y} ${x + r} ${y}\n Z`;\n\n // Draw main rectangle\n const rectNode = rs.path(path, {\n fill,\n fillStyle: 'solid',\n stroke,\n strokeWidth: 1.5,\n roughness: 1.2,\n bowing: 1,\n });\n ref.current.appendChild(rectNode);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [x, y, width, height, fill, stroke]);\n\n return <g ref={ref} />;\n}\n\ninterface RoughCircleProps {\n cx: number;\n cy: number;\n diameter: number;\n fill: string;\n stroke: string;\n}\n\n/**\n * RoughCircle - Renders a hand-drawn circle using rough.js SVG mode\n */\nfunction RoughCircle({\n cx,\n cy,\n diameter,\n fill,\n stroke,\n}: RoughCircleProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const circleNode = rs.circle(cx, cy, diameter, {\n fill,\n fillStyle: 'solid',\n stroke,\n strokeWidth: 1.5,\n roughness: 0.8,\n });\n ref.current.appendChild(circleNode);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [cx, cy, diameter, fill, stroke]);\n\n return <g ref={ref} />;\n}\n\ninterface MarkerProps {\n x: number;\n y: number;\n text: string;\n}\n\n/**\n * Marker - Red circle with number/text inside\n */\nfunction Marker({ x, y, text }: MarkerProps): React.ReactElement {\n return (\n <g>\n <RoughCircle\n cx={x}\n cy={y}\n diameter={MARKER_SIZE}\n fill=\"var(--flow-marker-fill, #dc2626)\"\n stroke=\"var(--flow-marker-stroke, #991b1b)\"\n />\n <text\n x={x}\n y={y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"var(--flow-marker-text, #ffffff)\"\n fontSize={10}\n fontWeight={600}\n fontFamily=\"system-ui, -apple-system, sans-serif\"\n >\n {text}\n </text>\n </g>\n );\n}\n\ninterface RoughArrowProps {\n fromX: number;\n fromY: number;\n toX: number;\n toY: number;\n stroke: string;\n arrowSize?: number;\n centerY?: number;\n}\n\n/**\n * RoughArrow - Renders a hand-drawn curved arrow using rough.js SVG mode\n * Uses quadratic bezier curves for an organic feel.\n * Includes arrowhead that follows the curve's final angle.\n */\nfunction RoughArrow({\n fromX,\n fromY,\n toX,\n toY,\n stroke,\n arrowSize = 8,\n centerY,\n}: RoughArrowProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n // Clear previous content\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const strokeWidth = 1.5;\n const color = stroke;\n\n const dx = toX - fromX;\n const dy = toY - fromY;\n const length = Math.sqrt(dx * dx + dy * dy);\n\n // Calculate control point for quadratic bezier curve\n // For horizontal lines: slight upward curve\n // For diagonal lines: curve that exits horizontally then bends to target\n const midX = (fromX + toX) / 2;\n const midY = (fromY + toY) / 2;\n\n let controlX: number;\n let controlY: number;\n\n if (Math.abs(dy) < 2) {\n // Nearly horizontal: subtle upward curve\n controlX = midX;\n controlY = midY - Math.min(length * 0.08, 12);\n } else if (centerY !== undefined) {\n // Curve towards whichever endpoint is farther from center\n // This creates natural spreading for fan-in and fan-out\n const fromDistFromCenter = Math.abs(fromY - centerY);\n const toDistFromCenter = Math.abs(toY - centerY);\n\n controlX = fromX + dx * 0.5;\n\n if (fromDistFromCenter >= toDistFromCenter) {\n // Source is farther from center → curve towards source's side\n controlY =\n fromY < centerY\n ? midY - Math.abs(dy) * 0.3 // Source above center → curve UP\n : midY + Math.abs(dy) * 0.3; // Source below center → curve DOWN\n } else {\n // Target is farther from center → curve towards target's side\n controlY =\n toY < centerY\n ? midY - Math.abs(dy) * 0.3 // Target above center → curve UP\n : midY + Math.abs(dy) * 0.3; // Target below center → curve DOWN\n }\n } else {\n // Fallback when centerY not provided: simple direction-based curve\n controlX = fromX + dx * 0.5;\n controlY =\n dy > 0 ? fromY - Math.abs(dy) * 0.3 : fromY + Math.abs(dy) * 0.3;\n }\n\n // Calculate the angle at the end of the curve (tangent at t=1)\n // For quadratic bezier: tangent = 2(1-t)(P1-P0) + 2t(P2-P1) at t=1 = 2(P2-P1)\n const tangentX = toX - controlX;\n const tangentY = toY - controlY;\n const endAngle = Math.atan2(tangentY, tangentX);\n\n // Calculate where the curve should stop (before the arrowhead)\n const curveEndX = toX - Math.cos(endAngle) * arrowSize;\n const curveEndY = toY - Math.sin(endAngle) * arrowSize;\n\n // Draw curved line using SVG path with quadratic bezier\n const curvePath = `M ${fromX} ${fromY} Q ${controlX} ${controlY} ${curveEndX} ${curveEndY}`;\n const curveNode = rs.path(curvePath, {\n stroke: color,\n strokeWidth,\n roughness: 0.8,\n fill: 'none',\n });\n ref.current.appendChild(curveNode);\n\n // Draw arrowhead (two lines at angles from curve's end tangent)\n const arrowAngle = Math.PI / 6; // 30 degrees\n const arrowLength = 8;\n\n // Arrow head line 1 (upper)\n const arrow1EndX =\n curveEndX - Math.cos(endAngle - arrowAngle) * arrowLength;\n const arrow1EndY =\n curveEndY - Math.sin(endAngle - arrowAngle) * arrowLength;\n const arrowHead1 = rs.line(curveEndX, curveEndY, arrow1EndX, arrow1EndY, {\n stroke: color,\n strokeWidth,\n roughness: 0.5,\n });\n ref.current.appendChild(arrowHead1);\n\n // Arrow head line 2 (lower)\n const arrow2EndX =\n curveEndX - Math.cos(endAngle + arrowAngle) * arrowLength;\n const arrow2EndY =\n curveEndY - Math.sin(endAngle + arrowAngle) * arrowLength;\n const arrowHead2 = rs.line(curveEndX, curveEndY, arrow2EndX, arrow2EndY, {\n stroke: color,\n strokeWidth,\n roughness: 0.5,\n });\n ref.current.appendChild(arrowHead2);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [fromX, fromY, toX, toY, stroke, arrowSize, centerY]);\n\n return <g ref={ref} />;\n}\n\nexport type FlowMarkerPosition =\n // Stages (default = top-right, left/right variants)\n | 'source'\n | 'source-left'\n | 'source-right'\n | 'collector'\n | 'collector-left'\n | 'collector-right'\n | 'destination'\n | 'destination-left'\n | 'destination-right'\n // Named stages: source-{name}, destination-{name}\n | `source-${string}`\n | `source-${string}-left`\n | `source-${string}-right`\n | `destination-${string}`\n | `destination-${string}-left`\n | `destination-${string}-right`\n // Transformer positions: pre-{name}, post-{name}\n | `pre-${string}`\n | `pre-${string}-left`\n | `pre-${string}-right`\n | `post-${string}`\n | `post-${string}-left`\n | `post-${string}-right`\n // Context stages\n | 'stage-before'\n | 'stage-before-right'\n | 'stage-after'\n | 'stage-after-left'\n // Arrows (single position each)\n | 'incoming'\n | 'outgoing'\n | 'source-collector'\n | 'collector-destination'\n // Named source arrows: source-{name}-pre, source-{name}-collector\n | `source-${string}-pre`\n | `source-${string}-collector`\n // Pre-transformer chain arrows: pre-{name}-next, pre-collector\n | `pre-${string}-next`\n | 'pre-collector'\n // Post-transformer chain arrows: collector-post, post-{name}-next\n | 'collector-post'\n | `post-${string}-next`\n // Destination arrows: post-destination-{name}\n | `post-destination-${string}`\n // Context stage arrows\n | 'before-source'\n | 'destination-after';\n\nexport interface FlowMarker {\n position: FlowMarkerPosition;\n /** ID displayed inside the marker dot. Default: array index + 1 */\n id?: string;\n /** Legend text. If provided, marker appears in legend below diagram */\n text?: string;\n}\n\nexport interface FlowStageConfig {\n /** Iconify icon name to display before the label (e.g., 'simple-icons:google-analytics') */\n icon?: string;\n label?: string;\n text?: React.ReactNode; // Supports rich content (text, links, JSX)\n description?: React.ReactNode; // Supports rich content (text, links, JSX)\n highlight?: boolean;\n /** Makes box clickable. undefined = default URL, false = not clickable, string = custom URL */\n link?: false | string;\n}\n\nexport interface FlowSourceConfig extends FlowStageConfig {\n /** Name of pre-transformer to connect to. Omit to connect directly to collector. */\n next?: string;\n}\n\nexport interface FlowTransformerConfig extends FlowStageConfig {\n /** Name of next transformer in chain. Omit to connect to collector (pre) or destination (post). */\n next?: string;\n}\n\nexport interface FlowDestinationConfig extends FlowStageConfig {\n /** Name of post-transformer to receive from. Omit to receive directly from collector. */\n before?: string;\n /** Optional: stage after this destination (e.g., external platform). Overrides shared stageAfter. */\n after?: FlowStageConfig;\n}\n\nexport interface FlowLayoutConfig {\n labelSize: number;\n labelWeight: string;\n textSize: number;\n textWeight: string;\n boxHeight: number;\n descriptionSize: number;\n}\n\n// Default layout configuration\nexport const defaultLayout: FlowLayoutConfig = {\n labelSize: 13,\n labelWeight: '600',\n textSize: 12,\n textWeight: 'normal',\n boxHeight: 50,\n descriptionSize: 13,\n};\n\nexport interface FlowMapProps {\n /** Optional: stage before source (e.g., \"Browser\") */\n stageBefore?: FlowStageConfig;\n /** Sources with named keys. Each source can specify `next` to connect to a pre-transformer. */\n sources?: Record<string, FlowSourceConfig>;\n /** Pre-transformers between sources and collector. Chain via `next` property. */\n preTransformers?: Record<string, FlowTransformerConfig>;\n /** Optional: customize collector stage */\n collector?: FlowStageConfig;\n /** Post-transformers between collector and destinations. */\n postTransformers?: Record<string, FlowTransformerConfig>;\n /** Destinations with named keys. Each destination can specify `before` to receive from a post-transformer. */\n destinations?: Record<string, FlowDestinationConfig>;\n /** Optional: stage after destination (e.g., \"gtag\") */\n stageAfter?: FlowStageConfig;\n /** Optional: title above diagram */\n title?: string;\n /** Optional: layout configuration */\n layout?: FlowLayoutConfig;\n /** Optional: height of stage boxes (default: 50) */\n boxHeight?: number;\n /** Optional: height of description area below boxes (default: 30) */\n descriptionHeight?: number;\n /** Optional: additional CSS class */\n className?: string;\n /** Optional: array of markers to display */\n markers?: FlowMarker[];\n /** Optional: show two arrows per connection (forward → and return ←) with parallel offset */\n withReturn?: boolean;\n}\n\n// Layout constants\nconst STAGE_WIDTH = 120;\nconst STAGE_HEIGHT = 50;\nconst STAGE_GAP = 50; // Horizontal gap between stages\nconst VERTICAL_GAP = 12; // Vertical gap between stacked sources/destinations\nconst PADDING_X = 8;\nconst PADDING_Y = 8;\nconst EDGE_ARROW_LENGTH = 25; // Space for incoming/outgoing arrows\nconst TITLE_HEIGHT = 30;\nconst ARROW_SIZE = 8;\nconst ARROW_OFFSET = 6; // Vertical offset for parallel return arrows\n\n// Resolved transformer with its name\ninterface ResolvedTransformer {\n name: string;\n config: FlowTransformerConfig;\n}\n\n/**\n * Resolves a transformer chain by following `next` references.\n * Returns an ordered array of transformers from the starting key to the end.\n * Throws if a reference is invalid or circular.\n */\nfunction resolveTransformerChain(\n transformers: Record<string, FlowTransformerConfig> | undefined,\n startKey: string | undefined,\n): ResolvedTransformer[] {\n if (!transformers || !startKey) return [];\n\n const result: ResolvedTransformer[] = [];\n const visited = new Set<string>();\n let currentKey: string | undefined = startKey;\n\n while (currentKey) {\n if (visited.has(currentKey)) {\n throw new Error(\n `FlowMap: Circular reference detected in transformer chain at \"${currentKey}\"`,\n );\n }\n\n const config: FlowTransformerConfig | undefined = transformers[currentKey];\n if (!config) {\n throw new Error(\n `FlowMap: Invalid transformer reference \"${currentKey}\". Available transformers: ${Object.keys(transformers).join(', ') || 'none'}`,\n );\n }\n\n visited.add(currentKey);\n result.push({ name: currentKey, config });\n currentKey = config.next;\n }\n\n return result;\n}\n\n/**\n * Collects all unique transformers that are reachable from sources (pre) or destinations (post).\n * Returns them in chain order based on `next` references.\n * Finds the chain head (transformer not referenced by any other's `next`) and walks from there.\n */\nfunction collectReachableTransformers(\n transformers: Record<string, FlowTransformerConfig> | undefined,\n entryPoints: (string | undefined)[],\n): ResolvedTransformer[] {\n if (!transformers) return [];\n\n // Find all unique transformer names referenced by walking each entry point's chain\n const referencedNames = new Set<string>();\n for (const entry of entryPoints) {\n if (!entry || !transformers[entry]) continue;\n const chain = resolveTransformerChain(transformers, entry);\n chain.forEach((p) => referencedNames.add(p.name));\n }\n\n if (referencedNames.size === 0) return [];\n\n // Find chain head: transformer in our set that's not anyone's `next`\n const nextTargets = new Set<string>();\n for (const name of referencedNames) {\n const next = transformers[name]?.next;\n if (next && referencedNames.has(next)) {\n nextTargets.add(next);\n }\n }\n\n // Chain head = in referencedNames but not in nextTargets\n let chainHead: string | undefined;\n for (const name of referencedNames) {\n if (!nextTargets.has(name)) {\n chainHead = name;\n break;\n }\n }\n\n // Walk from chain head\n if (!chainHead) chainHead = [...referencedNames][0];\n return resolveTransformerChain(transformers, chainHead);\n}\n\n/**\n * Gets the index of a transformer in the transformer list.\n * Returns transformerList.length if not found (= connects directly to collector).\n */\nfunction getTransformerIndex(\n transformerName: string | undefined,\n transformerList: ResolvedTransformer[],\n): number {\n if (!transformerName) return transformerList.length;\n const idx = transformerList.findIndex((p) => p.name === transformerName);\n return idx >= 0 ? idx : transformerList.length;\n}\n\n// Dynamic width calculation function\nfunction calculateTotalWidth(\n stageCount: number,\n hasStageBefore: boolean,\n hasStageAfter: boolean,\n): number {\n const leftEdge = hasStageBefore ? 0 : EDGE_ARROW_LENGTH;\n const rightEdge = hasStageAfter ? 0 : EDGE_ARROW_LENGTH;\n return (\n leftEdge +\n STAGE_WIDTH * stageCount +\n STAGE_GAP * (stageCount - 1) +\n rightEdge\n );\n}\n\ninterface StagePosition {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst MARKER_SIZE = 16;\nconst MARKER_OFFSET = 4; // Offset from box edge\n\nfunction getMarkerPosition(\n position: FlowMarkerPosition,\n stages: { [key: string]: StagePosition },\n centerY: number,\n totalWidth: number,\n): { x: number; y: number } | null {\n const sourcePos = stages.source;\n const collectorPos = stages.collector;\n const destPos = stages.destination;\n const beforePos = stages.before;\n const afterPos = stages.after;\n\n // Helper to get box marker position (top corners)\n const getBoxMarker = (\n pos: StagePosition | undefined,\n variant?: string,\n ): { x: number; y: number } | null => {\n if (!pos) return null;\n if (variant === '-left') {\n return { x: pos.x + MARKER_OFFSET, y: pos.y - MARKER_OFFSET };\n }\n // Default and -right: top-right corner\n return {\n x: pos.x + pos.width - MARKER_OFFSET,\n y: pos.y - MARKER_OFFSET,\n };\n };\n\n // Helper to get arrow marker position (between stages)\n const getArrowMarker = (\n fromPos: StagePosition | undefined,\n ): { x: number; y: number } | null => {\n if (!fromPos) return null;\n const fromCenterY = fromPos.y + fromPos.height / 2;\n return {\n x: fromPos.x + fromPos.width + STAGE_GAP / 2 - 6,\n y: fromCenterY + MARKER_SIZE / 2 + 4,\n };\n };\n\n switch (position) {\n // Stage-before (only right side, no left)\n case 'stage-before':\n case 'stage-before-right':\n return getBoxMarker(beforePos);\n\n // Source stage (above box, top corners) - first source\n case 'source':\n case 'source-right':\n return getBoxMarker(sourcePos);\n case 'source-left':\n return getBoxMarker(sourcePos, '-left');\n\n // Collector stage (above box, top corners)\n case 'collector':\n case 'collector-right':\n return getBoxMarker(collectorPos);\n case 'collector-left':\n return getBoxMarker(collectorPos, '-left');\n\n // Destination stage (above box, top corners) - first destination\n case 'destination':\n case 'destination-right':\n return getBoxMarker(destPos);\n case 'destination-left':\n return getBoxMarker(destPos, '-left');\n\n // Stage-after (only left side, no right)\n case 'stage-after':\n case 'stage-after-left':\n return getBoxMarker(afterPos, '-left');\n\n // Edge arrows (in/out)\n case 'incoming':\n return { x: EDGE_ARROW_LENGTH / 2, y: centerY + MARKER_SIZE / 2 + 8 };\n case 'outgoing':\n return {\n x: totalWidth - EDGE_ARROW_LENGTH / 2,\n y: centerY + MARKER_SIZE / 2 + 8,\n };\n\n // Arrow between before and source\n case 'before-source':\n return getArrowMarker(beforePos);\n\n // Between-stage arrows (for simple flows without transformers)\n case 'source-collector':\n return getArrowMarker(sourcePos);\n case 'collector-destination':\n return getArrowMarker(collectorPos);\n\n // Arrow between destination and after\n case 'destination-after':\n return getArrowMarker(destPos);\n\n // Pre-transformer to collector arrow\n case 'pre-collector':\n // Find the last pre-transformer position\n const preKeys = Object.keys(stages).filter((k) => k.startsWith('pre-'));\n if (preKeys.length === 0) return null;\n const lastPrePos = stages[preKeys[preKeys.length - 1]];\n return getArrowMarker(lastPrePos);\n\n // Collector to post-transformer arrow\n case 'collector-post':\n return getArrowMarker(collectorPos);\n\n default: {\n // Handle named source markers: source-{name}, source-{name}-left, source-{name}-right\n const sourceNameMatch = position.match(/^source-([^-]+)(-left|-right)?$/);\n if (sourceNameMatch) {\n const name = sourceNameMatch[1];\n const variant = sourceNameMatch[2];\n const pos = stages[`source-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle named destination markers: destination-{name}, destination-{name}-left, destination-{name}-right\n const destNameMatch = position.match(\n /^destination-([^-]+)(-left|-right)?$/,\n );\n if (destNameMatch) {\n const name = destNameMatch[1];\n const variant = destNameMatch[2];\n const pos = stages[`destination-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle pre-transformer markers: pre-{name}, pre-{name}-left, pre-{name}-right\n const preMatch = position.match(/^pre-([^-]+)(-left|-right)?$/);\n if (preMatch) {\n const name = preMatch[1];\n const variant = preMatch[2];\n // Skip if this looks like a -next pattern\n if (name === 'collector') return null;\n const pos = stages[`pre-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle post-transformer markers: post-{name}, post-{name}-left, post-{name}-right\n const postMatch = position.match(/^post-([^-]+)(-left|-right)?$/);\n if (postMatch) {\n const name = postMatch[1];\n const variant = postMatch[2];\n const pos = stages[`post-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle source to pre-transformer arrow: source-{name}-pre\n const sourcePreMatch = position.match(/^source-([^-]+)-pre$/);\n if (sourcePreMatch) {\n const name = sourcePreMatch[1];\n const pos = stages[`source-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle source to collector arrow: source-{name}-collector\n const sourceCollectorMatch = position.match(/^source-([^-]+)-collector$/);\n if (sourceCollectorMatch) {\n const name = sourceCollectorMatch[1];\n const pos = stages[`source-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle pre-transformer chain arrow: pre-{name}-next\n const preNextMatch = position.match(/^pre-([^-]+)-next$/);\n if (preNextMatch) {\n const name = preNextMatch[1];\n const pos = stages[`pre-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle post-transformer chain arrow: post-{name}-next\n const postNextMatch = position.match(/^post-([^-]+)-next$/);\n if (postNextMatch) {\n const name = postNextMatch[1];\n const pos = stages[`post-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle post to destination arrow: post-destination-{name}\n const postDestMatch = position.match(/^post-destination-([^-]+)$/);\n if (postDestMatch) {\n const name = postDestMatch[1];\n // Find the last post-transformer position before this destination\n const postKeys = Object.keys(stages).filter((k) =>\n k.startsWith('post-'),\n );\n if (postKeys.length === 0) return getArrowMarker(collectorPos);\n const lastPostPos = stages[postKeys[postKeys.length - 1]];\n return getArrowMarker(lastPostPos);\n }\n\n return null;\n }\n }\n}\n\nexport function FlowMap({\n stageBefore,\n sources,\n preTransformers,\n collector,\n postTransformers,\n destinations,\n stageAfter,\n title,\n layout = defaultLayout,\n boxHeight: boxHeightProp,\n descriptionHeight: descriptionHeightProp,\n markers,\n className,\n withReturn,\n}: FlowMapProps): React.ReactElement {\n // Convert Record-based sources/destinations to arrays with names\n const sourceEntries = Object.entries(sources ?? { default: {} });\n const destinationEntries = Object.entries(destinations ?? { default: {} });\n\n // Collect pre-transformers reachable from sources\n const sourceNextValues = sourceEntries.map(([, config]) => config.next);\n const preTransformerList = collectReachableTransformers(\n preTransformers,\n sourceNextValues,\n );\n\n // Collect post-transformers reachable from destinations (via 'before')\n const destBeforeValues = destinationEntries.map(\n ([, config]) => config.before,\n );\n const postTransformerList = collectReachableTransformers(\n postTransformers,\n destBeforeValues,\n );\n\n // Sort sources by target transformer index to avoid edge crossings\n // Sources connecting to earlier transformers go on top\n const sortedSourceEntries = [...sourceEntries].sort(([, a], [, b]) => {\n const aIdx = getTransformerIndex(a.next, preTransformerList);\n const bIdx = getTransformerIndex(b.next, preTransformerList);\n return aIdx - bIdx;\n });\n\n // Sort destinations by source transformer index - ASCENDING (earlier transformer = top)\n // This mirrors source sorting behavior for symmetry\n const sortedDestinationEntries = [...destinationEntries].sort(\n ([, a], [, b]) => {\n const aIdx = getTransformerIndex(a.before, postTransformerList);\n const bIdx = getTransformerIndex(b.before, postTransformerList);\n return aIdx - bIdx; // ASCENDING: earlier transformer at top (mirrors sources)\n },\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Check if any stage has a description or link\n const hasDescription =\n stageBefore?.description ||\n sourceEntries.some(([, s]) => s.description) ||\n preTransformerList.some((p) => p.config.description) ||\n collector?.description ||\n postTransformerList.some((p) => p.config.description) ||\n destinationEntries.some(([, d]) => d.description) ||\n stageAfter?.description ||\n destinationEntries.some(([, d]) => d.after?.description);\n const hasLink =\n stageBefore?.link !== false ||\n sourceEntries.some(([, s]) => s.link !== false) ||\n preTransformerList.some((p) => p.config.link !== false) ||\n collector?.link !== false ||\n postTransformerList.some((p) => p.config.link !== false) ||\n destinationEntries.some(([, d]) => d.link !== false) ||\n stageAfter?.link !== false ||\n destinationEntries.some(([, d]) => d.after?.link !== false);\n\n // Check if markers need extra padding (top for stage markers, bottom for arrow markers)\n const stageMarkerPositions = [\n 'stage-before',\n 'stage-before-right',\n 'source',\n 'source-left',\n 'source-right',\n 'collector',\n 'collector-left',\n 'collector-right',\n 'destination',\n 'destination-left',\n 'destination-right',\n 'stage-after',\n 'stage-after-left',\n ];\n // Helper to check if a position is a stage marker (including named stages and transformers)\n const isStageMarker = (pos: string): boolean => {\n if (stageMarkerPositions.includes(pos)) return true;\n // Check patterns: source-{name}, destination-{name}, pre-{name}, post-{name}\n return /^(source|destination|pre|post)-[^-]+(-left|-right)?$/.test(pos);\n };\n const hasTopMarkers =\n markers?.some((m) => isStageMarker(m.position)) ?? false;\n const markerTopPadding = hasTopMarkers ? MARKER_SIZE / 2 + MARKER_OFFSET : 0;\n\n // Filter markers that have legend text\n const legendItems = markers?.filter((m) => m.text) ?? [];\n // Estimate total text length to determine how many lines we need\n const totalTextLength = legendItems.reduce(\n (sum, item) => sum + (item.text?.length ?? 0),\n 0,\n );\n // Rough estimate: ~5.5 chars per pixel at 11px font, available width ~450px = ~82 chars per line\n const LEGEND_LINE_HEIGHT = 18;\n const estimatedLines = Math.max(1, Math.ceil(totalTextLength / 70));\n const legendHeight =\n legendItems.length > 0 ? LEGEND_LINE_HEIGHT * estimatedLines + 8 : 0;\n\n // Use prop values if provided, otherwise use layout defaults\n const boxHeight = boxHeightProp ?? layout.boxHeight;\n const descriptionHeight = descriptionHeightProp ?? 30;\n const belowBoxHeight = hasDescription || hasLink ? descriptionHeight + 10 : 0; // Space for description/link content\n\n // Calculate max rows for multi-source/destination layout\n const maxRows = Math.max(sourceEntries.length, destinationEntries.length, 1);\n const stackedHeight = boxHeight * maxRows + VERTICAL_GAP * (maxRows - 1);\n\n // Check if any destination has an after stage or if shared stageAfter exists\n const hasAnyAfterStage =\n stageAfter || destinationEntries.some(([, d]) => d.after);\n\n // Calculate stage count and total width dynamically\n // Stages: stageBefore? + sources(1) + preTransformers + collector(1) + postTransformers + destinations(1) + afterStages?\n const stageCount =\n (stageBefore ? 1 : 0) +\n 1 + // sources column\n preTransformerList.length +\n 1 + // collector\n postTransformerList.length +\n 1 + // destinations column\n (hasAnyAfterStage ? 1 : 0);\n const totalWidth = calculateTotalWidth(\n stageCount,\n !!stageBefore,\n !!hasAnyAfterStage,\n );\n\n const baseHeight =\n PADDING_Y * 2 +\n stackedHeight +\n belowBoxHeight +\n markerTopPadding +\n legendHeight;\n const totalHeight = title ? baseHeight + TITLE_HEIGHT : baseHeight;\n\n // Calculate positions (declarative, no useEffect)\n const baseY = (title ? TITLE_HEIGHT : 0) + PADDING_Y + markerTopPadding;\n\n // Calculate the vertical center of the stacked area (for collector positioning)\n const stackedCenterY = baseY + stackedHeight / 2;\n\n // Helper to calculate Y positions for stacked items centered around stackedCenterY\n const getStackedY = (index: number, count: number): number => {\n const totalStackHeight = boxHeight * count + VERTICAL_GAP * (count - 1);\n const startY = stackedCenterY - totalStackHeight / 2;\n return startY + index * (boxHeight + VERTICAL_GAP);\n };\n\n // Build stage positions dynamically based on which stages are active\n // Start at 0 if stageBefore exists (no left edge arrow), otherwise leave space for arrow\n let currentX = stageBefore ? 0 : EDGE_ARROW_LENGTH;\n const stages: { [key: string]: StagePosition } = {};\n\n // Arrays to hold named source/destination positions\n const sourcePositions: Array<{ name: string; pos: StagePosition }> = [];\n const destinationPositions: Array<{ name: string; pos: StagePosition }> = [];\n\n if (stageBefore) {\n stages.before = {\n x: currentX,\n y: stackedCenterY - boxHeight / 2, // Center vertically\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n currentX += STAGE_WIDTH + STAGE_GAP;\n }\n\n // Position ALL sources in the source column (stacked vertically)\n const sourceX = currentX;\n sortedSourceEntries.forEach(([name], index) => {\n const pos: StagePosition = {\n x: sourceX,\n y: getStackedY(index, sortedSourceEntries.length),\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n sourcePositions.push({ name, pos });\n stages[`source-${name}`] = pos;\n });\n // Keep 'source' alias pointing to first source for backward compatibility\n if (sourcePositions.length > 0) {\n stages.source = sourcePositions[0].pos;\n }\n currentX += STAGE_WIDTH + STAGE_GAP;\n\n // Pre-transformer positions\n // Strategy: position at source Y if only ONE source connects, otherwise center\n // This keeps transformers aligned with their sources when there's no branching\n const preTransformerPositions: Array<{ name: string; pos: StagePosition }> =\n [];\n\n // Build map: transformer name → list of sources that connect to it (directly or via chain)\n const transformerIncomingSources = new Map<string, string[]>();\n sortedSourceEntries.forEach(([sourceName, config]) => {\n const targetTransformer = config.next;\n if (targetTransformer) {\n const existing = transformerIncomingSources.get(targetTransformer) ?? [];\n existing.push(sourceName);\n transformerIncomingSources.set(targetTransformer, existing);\n }\n });\n // Also track chain connections (transformer A → transformer B means B receives from A's sources too)\n preTransformerList.forEach(({ name, config }) => {\n if (config.next) {\n // This transformer's output goes to config.next\n // So config.next receives from all sources that this transformer receives from\n const mySources = transformerIncomingSources.get(name) ?? [];\n const nextSources = transformerIncomingSources.get(config.next) ?? [];\n // Mark that the next transformer receives from chain (we'll use this for positioning)\n transformerIncomingSources.set(config.next, [\n ...new Set([...nextSources, `chain:${name}`]),\n ]);\n }\n });\n\n preTransformerList.forEach(({ name }) => {\n const incomingSources = transformerIncomingSources.get(name) ?? [];\n // Filter to only direct sources (not chain connections)\n const directSources = incomingSources.filter(\n (s) => !s.startsWith('chain:'),\n );\n const hasChainInput = incomingSources.some((s) => s.startsWith('chain:'));\n\n let y: number;\n if (directSources.length === 1 && !hasChainInput) {\n // Only ONE direct source, no chain input → align with that source\n const sourcePos = stages[`source-${directSources[0]}`];\n y = sourcePos ? sourcePos.y : stackedCenterY - boxHeight / 2;\n } else {\n // Multiple sources or has chain input → center\n y = stackedCenterY - boxHeight / 2;\n }\n\n const pos: StagePosition = {\n x: currentX,\n y,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n preTransformerPositions.push({ name, pos });\n stages[`pre-${name}`] = pos;\n currentX += STAGE_WIDTH + STAGE_GAP;\n });\n\n // Collector position (single, centered)\n stages.collector = {\n x: currentX,\n y: stackedCenterY - boxHeight / 2,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n currentX += STAGE_WIDTH + STAGE_GAP;\n\n // Post-transformer positions\n // Strategy: position at destination Y if only ONE destination connects, otherwise center\n // This mirrors pre-transformer behavior for symmetry\n const postTransformerPositions: Array<{ name: string; pos: StagePosition }> =\n [];\n\n // Build map: transformer name → list of destinations that receive from it (directly or via chain)\n const transformerOutgoingDests = new Map<string, string[]>();\n sortedDestinationEntries.forEach(([destName, config]) => {\n const sourceTransformer = config.before;\n if (sourceTransformer) {\n const existing = transformerOutgoingDests.get(sourceTransformer) ?? [];\n existing.push(destName);\n transformerOutgoingDests.set(sourceTransformer, existing);\n }\n });\n // Also track chain connections (transformer A → transformer B means A sends to all of B's destinations)\n // Walk backwards through chain to propagate destination info\n for (let i = postTransformerList.length - 1; i >= 0; i--) {\n const { name, config } = postTransformerList[i];\n if (config.next) {\n // This transformer sends to config.next, so it indirectly sends to config.next's destinations\n const nextDests = transformerOutgoingDests.get(config.next) ?? [];\n const myDests = transformerOutgoingDests.get(name) ?? [];\n // Mark chain connection\n transformerOutgoingDests.set(name, [\n ...new Set([...myDests, `chain:${config.next}`]),\n ]);\n }\n }\n\n // First position destinations (we need their positions for smart post-transformer positioning)\n const destinationX =\n currentX + postTransformerList.length * (STAGE_WIDTH + STAGE_GAP);\n sortedDestinationEntries.forEach(([name], index) => {\n const pos: StagePosition = {\n x: destinationX,\n y: getStackedY(index, sortedDestinationEntries.length),\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n destinationPositions.push({ name, pos });\n stages[`destination-${name}`] = pos;\n });\n // Keep 'destination' alias pointing to first destination for backward compatibility\n if (destinationPositions.length > 0) {\n stages.destination = destinationPositions[0].pos;\n }\n\n // Now position post-transformers with smart Y-positioning (can now reference destination positions)\n postTransformerList.forEach(({ name }) => {\n const outgoingDests = transformerOutgoingDests.get(name) ?? [];\n // Filter to only direct destinations (not chain connections)\n const directDests = outgoingDests.filter((d) => !d.startsWith('chain:'));\n const hasChainOutput = outgoingDests.some((d) => d.startsWith('chain:'));\n\n let y: number;\n if (directDests.length === 1 && !hasChainOutput) {\n // Only ONE direct destination, no chain output → align with that destination\n const destPos = stages[`destination-${directDests[0]}`];\n y = destPos ? destPos.y : stackedCenterY - boxHeight / 2;\n } else if (directDests.length > 1 && !hasChainOutput) {\n // Multiple direct destinations → center between them (average of their Y positions)\n const destYPositions = directDests\n .map((d) => stages[`destination-${d}`]?.y)\n .filter((pos): pos is number => pos !== undefined);\n if (destYPositions.length > 0) {\n const avgY =\n destYPositions.reduce((sum, pos) => sum + pos, 0) /\n destYPositions.length;\n y = avgY;\n } else {\n y = stackedCenterY - boxHeight / 2;\n }\n } else {\n // Has chain output or no direct destinations → center\n y = stackedCenterY - boxHeight / 2;\n }\n\n const pos: StagePosition = {\n x: currentX,\n y,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n postTransformerPositions.push({ name, pos });\n stages[`post-${name}`] = pos;\n currentX += STAGE_WIDTH + STAGE_GAP;\n });\n\n // Position after stages (per-destination or shared)\n // Each destination with `after` or falling back to shared `stageAfter` gets its own box\n const afterPositions: Array<{\n name: string;\n pos: StagePosition;\n config: FlowStageConfig;\n }> = [];\n\n if (hasAnyAfterStage) {\n const afterX = currentX + STAGE_WIDTH + STAGE_GAP;\n\n sortedDestinationEntries.forEach(([destName, destConfig], index) => {\n // Use destination's after config, or fall back to shared stageAfter\n const afterConfig = destConfig.after ?? stageAfter;\n if (afterConfig) {\n const pos: StagePosition = {\n x: afterX,\n y: getStackedY(index, sortedDestinationEntries.length), // Same Y as destination\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n afterPositions.push({ name: destName, pos, config: afterConfig });\n stages[`after-${destName}`] = pos;\n }\n });\n\n // Keep 'after' alias pointing to first after position for backward compatibility\n if (afterPositions.length > 0) {\n stages.after = afterPositions[0].pos;\n }\n }\n\n // Calculate center Y for arrows (collector's center)\n const centerY = stackedCenterY;\n\n // Stage configurations with colors and default links\n const stageConfigs = [\n ...(stageBefore\n ? [\n {\n key: 'before',\n config: stageBefore,\n fillVar: '--flow-before-fill',\n strokeVar: '--flow-before-stroke',\n defaultLabel: 'Before',\n defaultLink: undefined as string | undefined,\n },\n ]\n : []),\n // Sources (named, sorted by target transformer)\n ...sortedSourceEntries.map(([name, sourceConfig]) => ({\n key: `source-${name}`,\n config: sourceConfig,\n fillVar: '--flow-source-fill',\n strokeVar: '--flow-source-stroke',\n defaultLabel: 'Source',\n defaultLink: '/docs/sources' as string | undefined,\n })),\n // Pre-transformers\n ...preTransformerList.map(({ name, config }) => ({\n key: `pre-${name}`,\n config,\n fillVar: '--flow-transformer-fill',\n strokeVar: '--flow-transformer-stroke',\n defaultLabel: name.charAt(0).toUpperCase() + name.slice(1),\n defaultLink: '/docs/transformers' as string | undefined,\n })),\n {\n key: 'collector',\n config: collector,\n fillVar: '--flow-collector-fill',\n strokeVar: '--flow-collector-stroke',\n defaultLabel: 'Collector',\n defaultLink: '/docs/collectors' as string | undefined,\n },\n // Post-transformers\n ...postTransformerList.map(({ name, config }) => ({\n key: `post-${name}`,\n config,\n fillVar: '--flow-transformer-fill',\n strokeVar: '--flow-transformer-stroke',\n defaultLabel: name.charAt(0).toUpperCase() + name.slice(1),\n defaultLink: '/docs/transformers' as string | undefined,\n })),\n // Destinations (named, sorted by source transformer)\n ...sortedDestinationEntries.map(([name, destConfig]) => ({\n key: `destination-${name}`,\n config: destConfig,\n fillVar: '--flow-destination-fill',\n strokeVar: '--flow-destination-stroke',\n defaultLabel: 'Destination',\n defaultLink: '/docs/destinations' as string | undefined,\n })),\n // After stages (per-destination)\n ...afterPositions.map(({ name: destName, config: afterConfig }) => ({\n key: `after-${destName}`,\n config: afterConfig,\n fillVar: '--flow-after-fill',\n strokeVar: '--flow-after-stroke',\n defaultLabel: 'External',\n defaultLink: undefined as string | undefined,\n })),\n ];\n\n return (\n <div\n ref={containerRef}\n className={`elb-explorer elb-flow-map ${className || ''}`}\n style={{\n width: '100%',\n maxWidth: totalWidth,\n }}\n >\n <svg\n viewBox={`0 0 ${totalWidth} ${totalHeight}`}\n style={{\n width: '100%',\n height: 'auto',\n display: 'block',\n }}\n >\n {/* Title */}\n {title && (\n <text\n x={totalWidth / 2}\n y={18}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill=\"var(--color-text, #f3f4f6)\"\n fontSize={14}\n fontWeight={600}\n fontFamily=\"system-ui, -apple-system, sans-serif\"\n >\n {title}\n </text>\n )}\n\n {/* Arrows (rendered first so boxes appear on top) */}\n {(() => {\n const collectorPos = stages.collector;\n const collectorCenterY = collectorPos.y + boxHeight / 2;\n\n // Helper to spread connection points vertically on an edge\n const getSpreadY = (\n idx: number,\n count: number,\n baseY: number,\n ): number => {\n if (count <= 1) return baseY;\n const spread = Math.min(boxHeight * 0.6, (count - 1) * 12);\n const step = spread / (count - 1);\n return baseY - spread / 2 + idx * step;\n };\n\n // Find target position for a source (either pre-transformer or collector)\n const getSourceTarget = (\n sourceName: string,\n sourceConfig: FlowSourceConfig,\n ): StagePosition => {\n if (sourceConfig.next && preTransformers?.[sourceConfig.next]) {\n return stages[`pre-${sourceConfig.next}`];\n }\n // No pre-transformer, connect to first pre-transformer or collector\n if (preTransformerList.length > 0) {\n return stages[`pre-${preTransformerList[0].name}`];\n }\n return collectorPos;\n };\n\n // Find source position for a destination (either post-transformer or collector)\n const getDestinationSource = (\n destName: string,\n destConfig: FlowDestinationConfig,\n ): StagePosition => {\n if (destConfig.before && postTransformers?.[destConfig.before]) {\n return stages[`post-${destConfig.before}`];\n }\n // No 'before' specified - connect directly from collector\n return collectorPos;\n };\n\n return (\n <>\n {/* Incoming arrow - only show if no stageBefore and single source */}\n {!stageBefore && sourceEntries.length === 1 && (\n <RoughArrow\n fromX={0}\n fromY={centerY}\n toX={stages.source.x}\n toY={centerY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n\n {/* Before -> first source arrow (only if stageBefore exists) */}\n {stageBefore && (\n <RoughArrow\n fromX={stages.before.x + STAGE_WIDTH}\n fromY={centerY}\n toX={stages.source.x}\n toY={stages.source.y + boxHeight / 2}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n\n {/* Source -> PreTransformer/Collector arrows */}\n {/* Group sources by target to apply spread only for same-target connections */}\n {(() => {\n // Build map: targetKey -> list of sources connecting to it\n const sourcesByTarget = new Map<\n string,\n Array<{ name: string; pos: StagePosition; sortIndex: number }>\n >();\n sourcePositions.forEach(({ name, pos }, sortIndex) => {\n const sourceConfig = sources?.[name] ?? {};\n const targetKey = sourceConfig.next\n ? `pre-${sourceConfig.next}`\n : preTransformerList.length > 0\n ? `pre-${preTransformerList[0].name}`\n : 'collector';\n\n const existing = sourcesByTarget.get(targetKey) ?? [];\n existing.push({ name, pos, sortIndex });\n sourcesByTarget.set(targetKey, existing);\n });\n\n return sourcePositions.map(({ name, pos: sourcePos }) => {\n const sourceConfig = sources?.[name] ?? {};\n const targetPos = getSourceTarget(name, sourceConfig);\n const sourceCenterY = sourcePos.y + boxHeight / 2;\n const targetCenterY = targetPos.y + boxHeight / 2;\n\n // Find sources connecting to the same target\n const targetKey = sourceConfig.next\n ? `pre-${sourceConfig.next}`\n : preTransformerList.length > 0\n ? `pre-${preTransformerList[0].name}`\n : 'collector';\n const sourcesToSameTarget =\n sourcesByTarget.get(targetKey) ?? [];\n const indexWithinTarget = sourcesToSameTarget.findIndex(\n (s) => s.name === name,\n );\n\n // Only spread if multiple sources connect to same target\n const spreadY = getSpreadY(\n indexWithinTarget,\n sourcesToSameTarget.length,\n targetCenterY,\n );\n\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`source-${name}-arrows`}>\n <RoughArrow\n fromX={sourcePos.x + STAGE_WIDTH}\n fromY={sourceCenterY - offset}\n toX={targetPos.x}\n toY={spreadY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={spreadY + offset}\n toX={sourcePos.x + STAGE_WIDTH}\n toY={sourceCenterY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n });\n })()}\n\n {/* Pre-transformer chain arrows */}\n {preTransformerPositions.map(({ name, pos }, index) => {\n const procConfig = preTransformers?.[name] ?? {};\n // Find next target: next transformer in chain, or collector\n let targetPos: StagePosition;\n if (procConfig.next && preTransformers?.[procConfig.next]) {\n targetPos = stages[`pre-${procConfig.next}`];\n } else {\n targetPos = collectorPos;\n }\n\n const fromY = pos.y + boxHeight / 2;\n const toY = targetPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`pre-${name}-chain`}>\n <RoughArrow\n fromX={pos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={targetPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={toY + offset}\n toX={pos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* PostTransformer/Collector -> Destination arrows */}\n {destinationPositions.map(({ name, pos: destPos }) => {\n const destConfig = destinations?.[name] ?? {};\n const sourcePos = getDestinationSource(name, destConfig);\n const destCenterY = destPos.y + boxHeight / 2;\n const sourceCenterY = sourcePos.y + boxHeight / 2;\n\n // Draw straight horizontal arrow (post-transformers are already at destination Y)\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`destination-${name}-arrows`}>\n <RoughArrow\n fromX={sourcePos.x + STAGE_WIDTH}\n fromY={sourceCenterY - offset}\n toX={destPos.x}\n toY={destCenterY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={destPos.x}\n fromY={destCenterY + offset}\n toX={sourcePos.x + STAGE_WIDTH}\n toY={sourceCenterY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Post-transformer chain arrows (between post-transformers only) */}\n {postTransformerPositions\n .slice(0, -1)\n .map(({ name, pos }, index) => {\n const procConfig = postTransformers?.[name] ?? {};\n // Find next target: next transformer in chain\n const nextProc = postTransformerPositions[index + 1];\n if (!nextProc) return null;\n\n const targetPos = nextProc.pos;\n const fromY = pos.y + boxHeight / 2;\n const toY = targetPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`post-${name}-chain`}>\n <RoughArrow\n fromX={pos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={targetPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={toY + offset}\n toX={pos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Collector -> first PostTransformer arrow (if post-transformers exist) */}\n {postTransformerList.length > 0 &&\n (() => {\n const firstPostPos =\n stages[`post-${postTransformerList[0].name}`];\n const fromY = collectorCenterY;\n const toY = firstPostPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <>\n <RoughArrow\n fromX={collectorPos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={firstPostPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={firstPostPos.x}\n fromY={toY + offset}\n toX={collectorPos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </>\n );\n })()}\n\n {/* Destination -> After arrows (per-destination) */}\n {afterPositions.map(({ name: destName, pos: afterPos }) => {\n const destPos = stages[`destination-${destName}`];\n if (!destPos) return null;\n const destCenterY = destPos.y + boxHeight / 2;\n const afterCenterY = afterPos.y + boxHeight / 2;\n\n return (\n <RoughArrow\n key={`dest-${destName}-after`}\n fromX={destPos.x + STAGE_WIDTH}\n fromY={destCenterY}\n toX={afterPos.x}\n toY={afterCenterY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n );\n })}\n\n {/* Outgoing arrow - only show if no after stages and single destination */}\n {!hasAnyAfterStage && destinationEntries.length === 1 && (\n <RoughArrow\n fromX={stages.destination.x + STAGE_WIDTH}\n fromY={centerY}\n toX={totalWidth}\n toY={centerY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </>\n );\n })()}\n\n {/* Stages */}\n {stageConfigs.map(\n ({ key, config, fillVar, strokeVar, defaultLabel, defaultLink }) => {\n const pos = stages[key];\n const icon = config?.icon;\n const label = config?.label || defaultLabel;\n const text = config?.text;\n const description = config?.description;\n const link = config?.link;\n const stageHighlight = config?.highlight !== false;\n\n // Calculate label Y position\n // When text exists: label at ~25% from top, text fills remaining space centered\n const labelY = text\n ? pos.y + pos.height * 0.28\n : pos.y + pos.height / 2;\n\n // Resolve link URL: undefined = default, false = none, string = custom\n const linkUrl =\n link === false\n ? null\n : typeof link === 'string'\n ? link\n : defaultLink;\n\n // Content to render (box, label, text, description)\n const stageContent = (\n <>\n {/* Box */}\n <RoughRect\n x={pos.x}\n y={pos.y}\n width={pos.width}\n height={pos.height}\n fill={`var(${fillVar}, #6b7280)`}\n stroke={\n stageHighlight\n ? `var(${strokeVar}, #6b7280)`\n : 'var(--flow-edge-stroke, #9ca3af)'\n }\n />\n\n {/* Label (with optional icon) */}\n <foreignObject\n x={pos.x + 4}\n y={labelY - layout.labelSize / 2 - 2}\n width={pos.width - 8}\n height={layout.labelSize + 4}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n height: '100%',\n fontSize: layout.labelSize,\n fontWeight: layout.labelWeight,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: 'var(--color-text)',\n }}\n >\n {icon && <Icon icon={icon} width={14} height={14} />}\n <span>{label}</span>\n </div>\n </foreignObject>\n\n {/* Text (inside box, below label - supports ReactNode) */}\n {text && (\n <foreignObject\n x={pos.x + 4}\n y={pos.y + pos.height * 0.34}\n width={pos.width - 8}\n height={pos.height * 0.62}\n >\n <div\n style={{\n fontSize: layout.textSize,\n fontWeight: layout.textWeight,\n color: 'var(--color-text)',\n textAlign: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: 1.3,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {text}\n </div>\n </foreignObject>\n )}\n\n {/* Description (below box, using foreignObject for rich content) */}\n {description && (\n <foreignObject\n x={pos.x}\n y={pos.y + pos.height + 8}\n width={STAGE_WIDTH}\n height={descriptionHeight}\n >\n <div\n style={{\n fontSize: layout.descriptionSize,\n color: 'var(--color-text-muted)',\n textAlign: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: 1.3,\n }}\n >\n {description}\n </div>\n </foreignObject>\n )}\n </>\n );\n\n // Wrap in link if URL is set\n return linkUrl ? (\n <a\n key={key}\n href={linkUrl}\n style={{ cursor: 'pointer', textDecoration: 'none' }}\n >\n {stageContent}\n </a>\n ) : (\n <g key={key}>{stageContent}</g>\n );\n },\n )}\n\n {/* Markers */}\n {markers?.map((marker, index) => {\n const pos = getMarkerPosition(\n marker.position,\n stages,\n centerY,\n totalWidth,\n );\n // Skip markers for stages that don't exist\n if (!pos) return null;\n const id = marker.id ?? String(index + 1);\n return (\n <Marker key={`marker-${index}`} x={pos.x} y={pos.y} text={id} />\n );\n })}\n\n {/* Legend */}\n {legendItems.length > 0 && (\n <foreignObject\n x={PADDING_X}\n y={baseY + stackedHeight + belowBoxHeight + 4}\n width={totalWidth - PADDING_X * 2}\n height={LEGEND_LINE_HEIGHT * estimatedLines}\n >\n <div\n style={{\n fontSize: 11,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: 'var(--color-text-muted)',\n lineHeight: 1.6,\n }}\n >\n {legendItems.map((item, index) => {\n const id =\n item.id ?? String((markers?.indexOf(item) ?? index) + 1);\n return (\n <span key={`legend-${index}`}>\n <span\n style={{\n width: 12,\n height: 12,\n borderRadius: '50%',\n background: 'var(--flow-marker-fill, #dc2626)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 8,\n fontWeight: 600,\n color: 'var(--flow-marker-text, #ffffff)',\n verticalAlign: 'middle',\n marginRight: 4,\n position: 'relative',\n top: -1,\n }}\n >\n {id}\n </span>\n <span style={{ marginRight: 10 }}>{item.text}</span>\n </span>\n );\n })}\n </div>\n </foreignObject>\n )}\n </svg>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport type { RJSFSchema } from '@rjsf/utils';\n\nexport interface PropertyTableProps {\n schema: RJSFSchema;\n className?: string;\n}\n\ninterface Property {\n name: string;\n type: string;\n description: string;\n default?: string;\n required?: boolean;\n example?: string;\n}\n\ninterface PropertyModalProps {\n property: Property | null;\n isOpen: boolean;\n onClose: () => void;\n}\n\nfunction schemaToProperties(schema: RJSFSchema): Property[] {\n const properties: Property[] = [];\n const required = (schema.required as string[]) || [];\n\n if (!schema.properties) {\n return properties;\n }\n\n for (const [name, prop] of Object.entries(schema.properties)) {\n const property = prop as Record<string, unknown>;\n\n let type = (property.type as string) || 'any';\n\n if (property.enum) {\n type = (property.enum as unknown[])\n .map((v: unknown) => `'${v}'`)\n .join(' | ');\n }\n\n if (type === 'array' && property.items) {\n const items = property.items as Record<string, unknown>;\n if (items.enum) {\n type = `Array<${(items.enum as unknown[]).map((v: unknown) => `'${v}'`).join(' | ')}>`;\n } else {\n type = `Array<${(items.type as string) || 'any'}>`;\n }\n }\n\n if (type === 'object' && property.additionalProperties) {\n const addProps = property.additionalProperties as Record<string, unknown>;\n const valueType = (addProps.type as string) || 'any';\n type = `Record<string, ${valueType}>`;\n }\n\n if (property.anyOf || property.oneOf) {\n const variants = (property.anyOf || property.oneOf) as Array<\n Record<string, unknown>\n >;\n type = variants.map((v) => (v.type as string) || 'any').join(' | ');\n }\n\n let description = (property.description as string) || '';\n let example: string | undefined;\n\n const exampleMatch = description.match(/\\(like\\s+(.+?)\\)$/);\n if (exampleMatch) {\n example = exampleMatch[1];\n description = description.replace(/\\s*\\(like\\s+.+?\\)$/, '');\n }\n\n if (type === 'any' && description.toLowerCase().includes('function')) {\n type = 'function';\n }\n\n properties.push({\n name,\n type,\n description,\n required: required.includes(name),\n default:\n property.default !== undefined ? String(property.default) : undefined,\n example,\n });\n }\n\n return properties;\n}\n\nfunction PropertyModal({ property, isOpen, onClose }: PropertyModalProps) {\n if (!isOpen || !property) return null;\n\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n };\n\n return (\n <div\n className=\"elb-property-table__modal-backdrop\"\n onClick={handleBackdropClick}\n >\n <div className=\"elb-property-table__modal-content\">\n <div className=\"elb-property-table__modal-header\">\n <h3 className=\"elb-property-table__modal-title\">\n <code className=\"elb-property-table__modal-property-name\">\n {property.name}\n </code>\n {property.required && (\n <span className=\"elb-property-table__required-icon\">*</span>\n )}\n </h3>\n <button\n className=\"elb-property-table__close-button\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <div className=\"elb-property-table__modal-body\">\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Type:</span>\n <code className=\"elb-property-table__modal-type elb-property-table__modal-type--wrap\">\n {property.type}\n </code>\n </div>\n {property.description && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">\n Description:\n </span>\n <p className=\"elb-property-table__modal-description\">\n {property.description}\n </p>\n </div>\n )}\n {property.default && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Default:</span>\n <code className=\"elb-property-table__modal-default\">\n {property.default}\n </code>\n </div>\n )}\n {property.example && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Example:</span>\n <code className=\"elb-property-table__modal-example\">\n {property.example}\n </code>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport function PropertyTable({ schema, className }: PropertyTableProps) {\n const [selectedProperty, setSelectedProperty] = useState<Property | null>(\n null,\n );\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const properties = schemaToProperties(schema);\n\n const hasRequiredProperties = properties.some(\n (property) => property.required,\n );\n\n const TYPE_MAX_LENGTH = 30;\n\n const isTruncated = (type: string) => type.length > TYPE_MAX_LENGTH;\n\n const truncateType = (type: string) => {\n if (type.length <= TYPE_MAX_LENGTH) return type;\n return type.slice(0, TYPE_MAX_LENGTH);\n };\n\n const openModal = (property: Property) => {\n setSelectedProperty(property);\n setIsModalOpen(true);\n };\n\n const closeModal = () => {\n setIsModalOpen(false);\n setSelectedProperty(null);\n };\n\n return (\n <div className={`elb-explorer ${className || ''}`}>\n <div className=\"elb-property-table__container\">\n <table className=\"elb-property-table\">\n <thead>\n <tr>\n <th>Property</th>\n <th>Type</th>\n <th>Description</th>\n <th>More</th>\n </tr>\n </thead>\n <tbody>\n {properties.map((property: Property, index: number) => (\n <tr key={index}>\n <td\n className=\"elb-property-table__property-cell\"\n data-label=\"Property\"\n >\n <code className=\"elb-property-table__property-name\">\n {property.name}\n {property.required && (\n <span className=\"elb-property-table__required-icon\">\n *\n </span>\n )}\n </code>\n </td>\n <td className=\"elb-property-table__type-cell\" data-label=\"Type\">\n {isTruncated(property.type) ? (\n <button\n className=\"elb-property-table__type-button\"\n onClick={() => openModal(property)}\n aria-label={`View full type for ${property.name}`}\n >\n <code className=\"elb-property-table__property-type elb-property-table__property-type--truncated\">\n {truncateType(property.type)}\n </code>\n </button>\n ) : (\n <code className=\"elb-property-table__property-type\">\n {property.type}\n </code>\n )}\n </td>\n <td\n className=\"elb-property-table__description\"\n data-label=\"Description\"\n >\n {property.description}\n </td>\n <td\n className=\"elb-property-table__action-cell\"\n data-label=\"More\"\n >\n <button\n className=\"elb-property-table__more-button\"\n onClick={() => openModal(property)}\n aria-label={`More info about ${property.name}`}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {hasRequiredProperties && (\n <div className=\"elb-property-table__required-notice\">\n <span className=\"elb-property-table__required-icon\">*</span> Required\n fields\n </div>\n )}\n <PropertyModal\n property={selectedProperty}\n isOpen={isModalOpen}\n onClose={closeModal}\n />\n </div>\n );\n}\n","import React from 'react';\n\nexport interface DropdownProps {\n /** Trigger element (button, link, etc.) */\n trigger: React.ReactNode;\n /** Whether dropdown is open (controlled) */\n isOpen: boolean;\n /** Toggle handler */\n onToggle: () => void;\n /** Dropdown content */\n children: React.ReactNode;\n /** Alignment of dropdown panel */\n align?: 'left' | 'right';\n /** ARIA label for accessibility */\n ariaLabel?: string;\n /** Additional CSS class */\n className?: string;\n}\n\nexport interface DropdownItemProps {\n /** Item content */\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Visual variant */\n variant?: 'default' | 'danger';\n /** Additional CSS class */\n className?: string;\n}\n\nexport interface DropdownDividerProps {\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Dropdown - Generic dropdown container (UI only)\n *\n * Pure UI component for dropdown menus.\n * Click-outside and keyboard handling should be implemented in the parent\n * via hooks like useDropdown.\n *\n * @example\n * <Dropdown\n * trigger={<button>Menu</button>}\n * isOpen={isOpen}\n * onToggle={toggle}\n * align=\"right\"\n * >\n * <DropdownItem onClick={handleAction}>Action</DropdownItem>\n * <DropdownDivider />\n * <DropdownItem onClick={handleLogout} variant=\"danger\">Logout</DropdownItem>\n * </Dropdown>\n */\nexport function Dropdown({\n trigger,\n isOpen,\n onToggle,\n children,\n align = 'left',\n ariaLabel,\n className = '',\n}: DropdownProps) {\n return (\n <div className={`elb-dropdown ${className}`.trim()}>\n <div\n className=\"elb-dropdown__trigger\"\n onClick={onToggle}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-label={ariaLabel}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n }}\n >\n {trigger}\n </div>\n {isOpen && (\n <div\n className={`elb-dropdown__panel elb-dropdown__panel--${align}`}\n role=\"menu\"\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * DropdownItem - Menu item within a dropdown\n *\n * @example\n * <DropdownItem onClick={handleClick}>Action</DropdownItem>\n */\nexport function DropdownItem({\n children,\n onClick,\n disabled = false,\n variant = 'default',\n className = '',\n}: DropdownItemProps) {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n className={`elb-dropdown__item elb-dropdown__item--${variant} ${disabled ? 'elb-dropdown__item--disabled' : ''} ${className}`.trim()}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}\n\n/**\n * DropdownDivider - Visual separator between menu items\n *\n * @example\n * <DropdownDivider />\n */\nexport function DropdownDivider({ className = '' }: DropdownDividerProps) {\n return (\n <div\n className={`elb-dropdown__divider ${className}`.trim()}\n role=\"separator\"\n />\n );\n}\n","import React from 'react';\n\nexport interface FooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Footer - Footer atom component for boxes\n *\n * Provides a fixed-height footer area at the bottom of a box.\n * Pairs with Header component for consistent box structure.\n *\n * @example\n * <Box header=\"Preview\">\n * <Preview ... />\n * <Footer>\n * <ButtonGroup buttons={...} />\n * </Footer>\n * </Box>\n */\nexport function Footer({ children, className = '' }: FooterProps) {\n return <div className={`elb-explorer-footer ${className}`}>{children}</div>;\n}\n","import React from 'react';\n\nexport interface ButtonLinkProps {\n variant?: 'default' | 'primary' | 'secondary';\n size?: 'md' | 'lg';\n href?: string;\n onClick?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nexport function ButtonLink({\n variant = 'default',\n size = 'md',\n href,\n onClick,\n children,\n className = '',\n disabled = false,\n}: ButtonLinkProps) {\n const baseClass = 'elb-button-link';\n const classes =\n `${baseClass} ${baseClass}-${variant} ${baseClass}-${size} ${className}`.trim();\n\n if (href && !disabled) {\n return (\n <a href={href} className={classes}>\n {children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}\n","import React from 'react';\n\nexport interface SpinnerProps {\n /** Size of the spinner */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Spinner - Loading indicator\n *\n * Pure UI component for showing loading state.\n * No internal state - controlled via parent.\n *\n * @example\n * <Spinner size=\"md\" />\n */\nexport function Spinner({ size = 'md', className = '' }: SpinnerProps) {\n return (\n <span\n className={`elb-spinner elb-spinner--${size} ${className}`.trim()}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n","import { addIcon } from '@iconify/react';\n\naddIcon('walkeros:piwik-pro', {\n body: '<g fill=\"none\" fill-rule=\"evenodd\"><path fill=\"#231F20\" d=\"M0 0h90v90H0z\"/><path d=\"M50.792 57.21v.044H37.99v8.675c0 3.38-2.652 6.07-6.006 6.07a5.917 5.917 0 0 1-4.243-1.77 6.073 6.073 0 0 1-1.74-4.3v-38.88C26 23.67 28.65 21 31.983 21H50.79v.022c9.58.4 17.209 8.341 17.209 18.104 0 9.764-7.628 17.704-17.209 18.083h.001Zm-2.148-25.29H37.99v14.57h10.872c3.88-.112 6.993-3.337 6.993-7.274a7.347 7.347 0 0 0-2.114-5.16 7.16 7.16 0 0 0-5.098-2.134Z\" fill=\"#FFF\" fill-rule=\"nonzero\"/></g>',\n width: 90,\n height: 90,\n});\n","/**\n * @import {MDXComponents} from 'mdx/types.js'\n * @import {Component, ReactElement, ReactNode} from 'react'\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {ReactElement}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","import React, { type FC, type PropsWithChildren, Children } from 'react';\nimport { CodeBox } from '../molecules/code-box';\n\ninterface MDXCodeProps {\n className?: string;\n}\n\n/**\n * MDXCode - Code component for MDX files\n *\n * Automatically detects and renders inline vs block code:\n * - Inline code: `example` → <code className=\"elb-code-inline\">\n * - Block code: ```language\\ncode\\n``` → Uses CodeBox with Monaco editor\n *\n * Language detection:\n * - Extracts language from className (e.g., \"language-typescript\")\n * - Maps common MDX language names to Monaco language IDs\n *\n * Block code features (via CodeBox):\n * - Full Monaco editor with syntax highlighting\n * - Theme-aware (Palenight dark, VS Light)\n * - Copy to clipboard button\n * - Auto-height to fit content\n * - Read-only mode\n *\n * @example\n * // In MDX files (no import needed with MDXProvider):\n * Inline `code` example\n *\n * ```typescript\n * const block = \"code\";\n * ```\n */\nexport const MDXCode: FC<PropsWithChildren<MDXCodeProps>> = ({\n className,\n children,\n}) => {\n // Detect if this is block code based on:\n // 1. Has className (markdown sets \"language-*\" for code blocks)\n // 2. Content contains newlines\n const childrenArray = Children.toArray(children);\n const hasClassName = typeof className === 'string';\n\n // Check if content has newlines (block code)\n const hasNewlines = childrenArray.some((child) => {\n if (typeof child === 'string') {\n return child.match(/[\\n\\r]/g);\n }\n return false;\n });\n\n // Inline code: no className or no newlines\n if (!hasClassName || !hasNewlines) {\n return <code className=\"elb-code-inline\">{children}</code>;\n }\n\n // Block code: extract language from className\n // Format: \"language-typescript\" → \"typescript\"\n const mdxLanguage = className.replace(/^language-/, '');\n\n // Map MDX language names to Monaco language IDs\n const languageMap: Record<string, string> = {\n js: 'javascript',\n ts: 'typescript',\n jsx: 'javascript',\n tsx: 'typescript',\n bash: 'shell',\n sh: 'shell',\n yml: 'yaml',\n md: 'markdown',\n };\n\n const monacoLanguage = languageMap[mdxLanguage] || mdxLanguage;\n\n // Extract code string from children\n const code = childrenArray\n .map((child) => (typeof child === 'string' ? child : ''))\n .join('')\n .trim();\n\n return (\n <CodeBox\n code={code}\n language={monacoLanguage}\n disabled\n showCopy\n showHeader={false}\n autoHeight={{ min: 100, max: 600 }}\n />\n );\n};\n","import React, { type FC, type PropsWithChildren } from 'react';\nimport { MDXProvider as BaseMDXProvider } from '@mdx-js/react';\nimport { MDXCode } from '../components/atoms/mdx-code';\nimport { CodeBox } from '../components/molecules/code-box';\nimport { PropertyTable } from '../components/molecules/property-table';\nimport { DestinationInitDemo } from '../components/demos/DestinationInitDemo';\nimport { DestinationDemo } from '../components/demos/DestinationDemo';\n\n/**\n * MDXProvider - Makes components available in MDX files without explicit imports\n *\n * This provider wraps MDX content and injects React components for HTML elements.\n * Components are automatically used when rendering markdown/MDX content.\n *\n * Key features:\n * - No imports needed in MDX files\n * - Consistent styling across all documentation\n * - Theme-aware (respects data-theme attribute)\n * - Automatic inline vs block code detection\n *\n * Available components (no import needed):\n * - CodeBox: Monaco editor for code display (also auto-used for ```code blocks)\n * - PropertyTable: Display schema-based property documentation\n * - DestinationInitDemo: Interactive demo for destination initialization\n * - DestinationDemo: Interactive demo for destination event processing\n *\n * @example\n * // Wrap your app\n * <MDXProvider>\n * <App />\n * </MDXProvider>\n *\n * @example\n * // Then in any .mdx file, no imports needed:\n * # Documentation\n *\n * Inline `code` and markdown blocks:\n * ```typescript\n * const example = \"Hello\";\n * ```\n *\n * Or use components directly:\n * <CodeBox code=\"const x = 1;\" language=\"javascript\" />\n * <PropertyTable schema={mySchema} />\n */\nexport const MDXProvider: FC<PropsWithChildren> = ({ children }) => {\n const components = {\n // Markdown element mappings\n code: MDXCode, // Auto-handles ```code blocks\n\n // Explorer components (no import needed in MDX)\n CodeBox,\n PropertyTable,\n DestinationInitDemo,\n DestinationDemo,\n };\n\n return <BaseMDXProvider components={components}>{children}</BaseMDXProvider>;\n};\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDropdownReturn {\n /** Whether dropdown is currently open */\n isOpen: boolean;\n /** Toggle dropdown open/closed */\n toggle: () => void;\n /** Open the dropdown */\n open: () => void;\n /** Close the dropdown */\n close: () => void;\n /** Ref to attach to the container element for click-outside detection */\n containerRef: RefObject<HTMLDivElement | null>;\n}\n\n/**\n * useDropdown - Manages dropdown open/close state with click-outside and keyboard handling\n *\n * Provides:\n * - Open/close state management\n * - Click-outside detection to close\n * - Escape key handling to close\n *\n * @example\n * const { isOpen, toggle, close, containerRef } = useDropdown();\n *\n * return (\n * <div ref={containerRef}>\n * <Dropdown isOpen={isOpen} onToggle={toggle}>\n * ...\n * </Dropdown>\n * </div>\n * );\n */\nexport function useDropdown(): UseDropdownReturn {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const toggle = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Close on Escape key\n useEffect(() => {\n if (!isOpen) return;\n\n function handleEscape(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen]);\n\n return {\n isOpen,\n toggle,\n open,\n close,\n containerRef,\n };\n}\n","export interface MonacoSchemaExtension {\n defaultSnippets?: Array<{\n label: string;\n description?: string;\n markdownDescription?: string;\n body?: unknown;\n bodyText?: string;\n }>;\n markdownDescription?: string;\n enumDescriptions?: string[];\n markdownEnumDescriptions?: string[];\n deprecationMessage?: string;\n errorMessage?: string;\n patternErrorMessage?: string;\n doNotSuggest?: boolean;\n suggestSortText?: string;\n}\n\ntype EnrichmentMap = Record<string, MonacoSchemaExtension>;\n\n/**\n * Deep-merges Monaco-specific JSON Schema extensions into a base schema.\n * Keys in the enrichment map are dot-paths (e.g., 'properties.sources').\n * Empty string '' targets the root. Does not mutate the original.\n */\nexport function enrichSchema(\n baseSchema: Record<string, unknown>,\n enrichments: EnrichmentMap,\n): Record<string, unknown> {\n const schema = JSON.parse(JSON.stringify(baseSchema));\n\n for (const [path, extensions] of Object.entries(enrichments)) {\n const target = path === '' ? schema : getNestedObject(schema, path);\n if (target && typeof target === 'object') {\n Object.assign(target, extensions);\n }\n }\n\n return schema;\n}\n\nfunction getNestedObject(\n obj: Record<string, unknown>,\n path: string,\n): Record<string, unknown> | undefined {\n const keys = path.split('.');\n let current: unknown = obj;\n for (const key of keys) {\n if (\n current &&\n typeof current === 'object' &&\n key in (current as Record<string, unknown>)\n ) {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n return current as Record<string, unknown> | undefined;\n}\n","import { enrichSchema } from './monaco-schema-enrichment';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\n/**\n * Takes the base Flow.Setup JSON Schema (from @walkeros/core z.toJSONSchema())\n * and returns an enriched version with Monaco-specific extensions.\n *\n * The actual schema uses anyOf[0] at the top level.\n */\nexport function enrichFlowSetupSchema(baseSchema: AnySchema): AnySchema {\n // The schema structure is { anyOf: [{ type: 'object', properties: {...} }] }\n // We need to enrich inside anyOf[0]\n const schema = JSON.parse(JSON.stringify(baseSchema));\n\n if (!schema.anyOf?.[0]?.properties) return schema;\n\n const root = schema.anyOf[0];\n const props = root.properties;\n const flowConfig = props.flows?.additionalProperties?.properties;\n\n // Enrich version\n if (props.version) {\n props.version.markdownDescription =\n 'Schema version number. Must be `1` for the current format.\\n\\n```json\\n\"version\": 1\\n```';\n }\n\n // Enrich $schema\n if (props.$schema) {\n props.$schema.markdownDescription =\n 'JSON Schema URI for IDE validation.\\n\\n```json\\n\"$schema\": \"https://walkeros.io/schema/flow/v1.json\"\\n```';\n }\n\n // Enrich include\n if (props.include) {\n props.include.markdownDescription =\n 'Folders to include in the bundle output.\\n\\n```json\\n\"include\": [\"./src\", \"./lib\"]\\n```';\n }\n\n // Enrich variables\n if (props.variables) {\n props.variables.markdownDescription =\n 'Shared variables for `$var.name` interpolation across all flows.\\n\\n' +\n '```json\\n\"variables\": {\\n \"measurementId\": \"G-XXXXXXXXXX\",\\n \"debug\": false\\n}\\n```\\n\\n' +\n 'Reference in any config value: `\"$var.measurementId\"`';\n props.variables.defaultSnippets = [\n {\n label: 'Add variable',\n description: 'New key-value variable',\n body: { '${1:name}': '${2:value}' },\n },\n ];\n }\n\n // Enrich definitions\n if (props.definitions) {\n props.definitions.markdownDescription =\n 'Reusable configuration fragments for `$def.name` references.\\n\\n' +\n '```json\\n\"definitions\": {\\n \"gaConfig\": {\\n \"measurementId\": \"$var.trackingId\"\\n }\\n}\\n```\\n\\n' +\n 'Reference in any config: `\"$def.gaConfig\"`';\n props.definitions.defaultSnippets = [\n {\n label: 'Add definition',\n description: 'New reusable config fragment',\n body: { '${1:name}': { '${2:key}': '${3:value}' } },\n },\n ];\n }\n\n // Enrich flows with scaffolding snippets\n if (props.flows) {\n props.flows.markdownDescription =\n 'Flow configurations keyed by name. Each flow defines a complete event pipeline.\\n\\n' +\n '```json\\n\"flows\": {\\n \"myFlow\": {\\n \"web\": {},\\n \"sources\": { ... },\\n \"destinations\": { ... }\\n }\\n}\\n```';\n props.flows.defaultSnippets = [\n {\n label: 'Web flow (basic)',\n description: 'Minimal web flow with browser source',\n body: {\n '${1:myFlow}': {\n web: {},\n sources: {\n browser: { package: '@walkeros/web-source-browser' },\n },\n destinations: {},\n },\n },\n },\n {\n label: 'Server flow (basic)',\n description: 'Minimal server flow with Express source',\n body: {\n '${1:myFlow}': {\n server: {},\n sources: {\n express: { package: '@walkeros/server-source-express' },\n },\n destinations: {},\n },\n },\n },\n {\n label: 'Web + GA4 flow',\n description: 'Web flow with browser source and GA4 destination',\n body: {\n '${1:myFlow}': {\n web: {},\n sources: {\n browser: { package: '@walkeros/web-source-browser' },\n },\n destinations: {\n ga4: {\n package: '@walkeros/web-destination-ga4',\n config: {\n measurementId: '$var.${2:measurementId}',\n },\n },\n },\n },\n },\n },\n ];\n }\n\n // Enrich FlowConfig sub-properties\n if (flowConfig) {\n if (flowConfig.sources) {\n flowConfig.sources.markdownDescription =\n 'Source configurations for data capture, keyed by step name.\\n\\n' +\n '```json\\n\"sources\": {\\n \"browser\": { \"package\": \"@walkeros/web-source-browser\" }\\n}\\n```';\n flowConfig.sources.defaultSnippets = [\n {\n label: 'Add web source',\n description: 'Browser source for web tracking',\n body: {\n '${1:browser}': {\n package: '@walkeros/web-source-browser',\n },\n },\n },\n {\n label: 'Add server source',\n description: 'Express source for server tracking',\n body: {\n '${1:express}': {\n package: '@walkeros/server-source-express',\n },\n },\n },\n ];\n }\n\n if (flowConfig.destinations) {\n flowConfig.destinations.markdownDescription =\n 'Destination configurations for data output, keyed by step name.\\n\\n' +\n '```json\\n\"destinations\": {\\n \"ga4\": {\\n \"package\": \"@walkeros/web-destination-ga4\",\\n \"config\": { \"measurementId\": \"$var.trackingId\" }\\n }\\n}\\n```';\n flowConfig.destinations.defaultSnippets = [\n {\n label: 'Add GA4 destination',\n description: 'Google Analytics 4 destination',\n body: {\n '${1:ga4}': {\n package: '@walkeros/web-destination-ga4',\n config: {\n measurementId: '$var.${2:measurementId}',\n },\n },\n },\n },\n {\n label: 'Add custom destination',\n description: 'Custom destination with inline code',\n body: {\n '${1:custom}': {\n code: {\n push: '$code:(event) => { ${2:// handle event} }',\n },\n },\n },\n },\n ];\n }\n\n if (flowConfig.transformers) {\n flowConfig.transformers.markdownDescription =\n 'Transformer configurations for event transformation, keyed by step name.\\n\\n' +\n '```json\\n\"transformers\": {\\n \"validator\": {\\n \"code\": { \"push\": \"$code:(event) => event\" }\\n }\\n}\\n```';\n flowConfig.transformers.defaultSnippets = [\n {\n label: 'Add transformer',\n description: 'Inline transformer with code',\n body: {\n '${1:transformer}': {\n code: {\n push: '$code:(event) => { ${2:return event;} }',\n },\n },\n },\n },\n ];\n }\n\n if (flowConfig.web) {\n flowConfig.web.markdownDescription =\n 'Web platform configuration (browser-based). Mutually exclusive with `server`.\\n\\n' +\n '```json\\n\"web\": {\\n \"windowCollector\": \"collector\",\\n \"windowElb\": \"elb\"\\n}\\n```';\n }\n\n if (flowConfig.server) {\n flowConfig.server.markdownDescription =\n 'Server platform configuration (Node.js). Mutually exclusive with `web`.\\n\\n' +\n '```json\\n\"server\": {}\\n```';\n }\n }\n\n return schema;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\n/**\n * Returns an enriched JSON Schema for the walkerOS Contract editor.\n * Structure: { $tagging: number, entity: { action: JSONSchema } }\n */\nexport function getEnrichedContractSchema(): AnySchema {\n return {\n type: 'object',\n markdownDescription:\n 'walkerOS Data Contract. Defines entity→action schemas for event validation.\\n\\n' +\n '```json\\n{\\n \"$tagging\": 1,\\n \"page\": {\\n' +\n ' \"view\": {\\n \"type\": \"object\",\\n \"properties\": {\\n' +\n ' \"title\": { \"type\": \"string\" }\\n }\\n }\\n }\\n}\\n```',\n properties: {\n $tagging: {\n type: 'number',\n markdownDescription:\n 'Contract version number. Increment when making breaking changes.\\n\\n```json\\n\"$tagging\": 1\\n```',\n },\n },\n additionalProperties: {\n type: 'object',\n markdownDescription: 'Entity name. Contains action→schema mappings.',\n additionalProperties: {\n type: 'object',\n markdownDescription:\n 'Action schema (JSON Schema). Defines valid event data for this entity+action.\\n\\n' +\n '```json\\n{\\n \"type\": \"object\",\\n \"properties\": {\\n' +\n ' \"name\": { \"type\": \"string\" },\\n \"price\": { \"type\": \"number\" }\\n' +\n ' },\\n \"required\": [\"name\"]\\n}\\n```',\n defaultSnippets: [\n {\n label: 'Object schema',\n description: 'Schema with typed properties',\n body: {\n type: 'object',\n properties: {\n '${1:name}': { type: '${2:string}' },\n },\n },\n },\n ],\n },\n defaultSnippets: [\n {\n label: 'Add action',\n description: 'Action with event data schema',\n body: {\n '${1:action}': {\n type: 'object',\n properties: {\n '${2:property}': { type: '${3:string}' },\n },\n },\n },\n },\n ],\n },\n defaultSnippets: [\n {\n label: 'Entity with action',\n description: 'New entity with one action and properties',\n body: {\n '${1:entity}': {\n '${2:action}': {\n type: 'object',\n properties: {\n '${3:property}': { type: '${4:string}' },\n },\n },\n },\n },\n },\n ],\n };\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\nexport function getVariablesSchema(): AnySchema {\n return {\n type: 'object',\n markdownDescription:\n 'Flow variables for `$var.name` interpolation. Values must be string, number, or boolean.\\n\\n' +\n '```json\\n{\\n \"measurementId\": \"G-XXXXXXXXXX\",\\n \"debug\": false,\\n \"batchSize\": 10\\n}\\n```\\n\\n' +\n 'Reference in any config value: `\"$var.measurementId\"`',\n additionalProperties: {\n oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],\n },\n defaultSnippets: [\n {\n label: 'Add string variable',\n body: { '${1:name}': '${2:value}' },\n },\n {\n label: 'Add boolean variable',\n body: { '${1:name}': '${2|true,false|}' },\n },\n {\n label: 'Add number variable',\n body: { '${1:name}': 0 },\n },\n ],\n };\n}\n","import type { IntelliSenseContext } from '../types/intellisense';\n\nexport interface ValidationIssue {\n message: string;\n severity: 'error' | 'warning' | 'info';\n startIndex: number;\n endIndex: number;\n}\n\n/**\n * Validate walkerOS references in JSON text against the current context.\n * Returns issues for dangling references and invalid cross-references.\n */\nexport function validateWalkerOSReferences(\n text: string,\n context: Partial<IntelliSenseContext>,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n // Check $var. references\n if (context.variables) {\n const varRegex = /\\$var\\.(\\w+)/g;\n let match: RegExpExecArray | null;\n while ((match = varRegex.exec(text)) !== null) {\n if (!(match[1] in context.variables)) {\n issues.push({\n message: `Unknown variable \"$var.${match[1]}\". Defined variables: ${Object.keys(context.variables).join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $def. references\n if (context.definitions) {\n const defRegex = /\\$def\\.(\\w+)/g;\n let match: RegExpExecArray | null;\n while ((match = defRegex.exec(text)) !== null) {\n if (!(match[1] in context.definitions)) {\n issues.push({\n message: `Unknown definition \"$def.${match[1]}\". Defined: ${Object.keys(context.definitions).join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $secret. references\n if (context.secrets) {\n const secretRegex = /\\$secret\\.(\\w+)/g;\n let match: RegExpExecArray | null;\n while ((match = secretRegex.exec(text)) !== null) {\n if (!context.secrets.includes(match[1])) {\n issues.push({\n message: `Unknown secret \"$secret.${match[1]}\". Available: ${context.secrets.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check next/before cross-references\n if (context.stepNames?.transformers) {\n const nextRegex = /\"(?:next|before)\"\\s*:\\s*\"(\\w+)\"/g;\n let match: RegExpExecArray | null;\n while ((match = nextRegex.exec(text)) !== null) {\n if (!context.stepNames.transformers.includes(match[1])) {\n issues.push({\n message: `Unknown transformer \"${match[1]}\". Available: ${context.stepNames.transformers.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n return issues;\n}\n","import type { IntelliSenseContext, PackageInfo } from '../types/intellisense';\n\n/**\n * Extract IntelliSense context from a Flow.Setup JSON string.\n *\n * Parses the JSON, walks setup → configs → steps, and collects\n * all discoverable variables, definitions, step names, packages,\n * platform, and contract entities.\n *\n * Returns `{}` for invalid JSON or non-Flow structures.\n * Pure function — no side effects, no state.\n */\nexport function extractFlowIntelliSenseContext(\n json: string,\n): Partial<IntelliSenseContext> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch {\n return {};\n }\n\n if (!isFlowSetup(parsed)) return {};\n\n const variables: Record<string, string | number | boolean> = {};\n const definitions: Record<string, unknown> = {};\n const sources: string[] = [];\n const destinations: string[] = [];\n const transformers: string[] = [];\n const packages: PackageInfo[] = [];\n const contractEntities: Array<{ entity: string; actions: string[] }> = [];\n let platform: 'web' | 'server' | undefined;\n\n // Setup-level\n mergeVars(variables, parsed.variables);\n mergeDefs(definitions, parsed.definitions);\n extractContract(contractEntities, parsed.contract);\n\n // Walk each flow config\n for (const config of Object.values(parsed.flows)) {\n if (!isObject(config)) continue;\n\n // Platform detection (first match wins)\n if (!platform) {\n if ('web' in config) platform = 'web';\n else if ('server' in config) platform = 'server';\n }\n\n // Config-level variables/definitions/contract\n mergeVars(variables, config.variables);\n mergeDefs(definitions, config.definitions);\n extractContract(contractEntities, config.contract);\n\n // Sources\n if (isObject(config.sources)) {\n for (const [name, ref] of Object.entries(config.sources)) {\n sources.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n mergeDefs(definitions, ref.definitions);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'source',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Destinations\n if (isObject(config.destinations)) {\n for (const [name, ref] of Object.entries(config.destinations)) {\n destinations.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n mergeDefs(definitions, ref.definitions);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'destination',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Transformers\n if (isObject(config.transformers)) {\n for (const [name, ref] of Object.entries(config.transformers)) {\n transformers.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n mergeDefs(definitions, ref.definitions);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'transformer',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n }\n\n const result: Partial<IntelliSenseContext> = {\n variables,\n definitions,\n stepNames: { sources, destinations, transformers },\n };\n\n if (platform) result.platform = platform;\n if (packages.length > 0) result.packages = packages;\n if (contractEntities.length > 0) result.contract = contractEntities;\n\n return result;\n}\n\n// --- Helpers ---\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n}\n\nfunction isFlowSetup(v: unknown): v is {\n version: number;\n flows: Record<string, unknown>;\n [k: string]: unknown;\n} {\n return isObject(v) && 'version' in v && 'flows' in v && isObject(v.flows);\n}\n\nfunction isPrimitive(v: unknown): v is string | number | boolean {\n return (\n typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean'\n );\n}\n\nfunction mergeVars(\n target: Record<string, string | number | boolean>,\n source: unknown,\n): void {\n if (!isObject(source)) return;\n for (const [k, v] of Object.entries(source)) {\n if (isPrimitive(v)) target[k] = v;\n }\n}\n\nfunction mergeDefs(target: Record<string, unknown>, source: unknown): void {\n if (!isObject(source)) return;\n for (const [k, v] of Object.entries(source)) {\n target[k] = v;\n }\n}\n\nfunction extractContract(\n target: Array<{ entity: string; actions: string[] }>,\n contract: unknown,\n): void {\n if (!isObject(contract)) return;\n for (const [key, value] of Object.entries(contract)) {\n if (key.startsWith('$') || !isObject(value)) continue;\n // Avoid duplicates when merging setup + config contracts\n const existing = target.find((e) => e.entity === key);\n const actions = Object.keys(value);\n if (existing) {\n for (const a of actions) {\n if (!existing.actions.includes(a)) existing.actions.push(a);\n }\n } else {\n target.push({ entity: key, actions });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiaO,SAAS,gBACd,aACQ;AACR,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AA9aA,IAkBa,kBA2LA,yBA4MA;AAzZb;AAAA;AAAA;AAkBO,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2LzB,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4MhC,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACzZtC,IAAO;AAAP;AAAA;AAAA;AAAA,IAAO,sCAAQ;AAAA;AAAA;;;ACAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCO,SAAS,0BAA0B,QAAgB;AACxD,SAAO,UAAU,WAAW,mBAAmB,mBAAmB;AAAA,IAChE,QAAQ,OAAO,UAAU,WAAW,aAAa;AAAA,IACjD,KAAK,CAAC,QAAQ;AAAA,IACd,sBAAsB;AAAA,IACtB,kBAAkB,OAAO,UAAU,WAAW,qBAAqB;AAAA,IACnE,QAAQ,OAAO,UAAU,WAAW,WAAW;AAAA,IAC/C,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,KAAK,OAAO,UAAU,WAAW,QAAQ;AAAA,IACzC,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,kBAAkB;AAAA,EACpB,CAAC;AAED,SAAO,UAAU,WAAW,mBAAmB,sBAAsB;AAAA,IACnE,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,yBAAyB,CAAC,MAAM,IAAI;AAAA,EACtC,CAAC;AAED,SAAO,UAAU,WAAW,mBAAmB,mBAAmB;AAAA,IAChE,QAAQ,OAAO,UAAU,WAAW,aAAa;AAAA,IACjD,KAAK,CAAC,QAAQ;AAAA,IACd,sBAAsB;AAAA,IACtB,kBAAkB,OAAO,UAAU,WAAW,qBAAqB;AAAA,IACnE,QAAQ,OAAO,UAAU,WAAW,WAAW;AAAA,IAC/C,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,KAAK,OAAO,UAAU,WAAW,QAAQ;AAAA,IACzC,QAAQ;AAAA,EACV,CAAC;AACH;AAUO,SAAS,eACd,QACA,KACA,SACS;AAET,MAAI,cAAc,IAAI,GAAG,GAAG;AAC1B,WAAO;AAAA,EACT;AAIA,QAAM,eACJ,OAAO,UAAU,WAAW,mBAAmB,YAAY,SAAS,GAAG;AAEzE,QAAM,eACJ,OAAO,UAAU,WAAW,mBAAmB,YAAY,SAAS,GAAG;AAGzE,gBAAc,IAAI,KAAK;AAAA,IACrB;AAAA,IACA;AAAA,IACA,YAAY;AAAA,MACV,SAAS,MAAM;AACb,qBAAa,QAAQ;AACrB,qBAAa,QAAQ;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAQO,SAAS,kBAAkB,KAAsB;AACtD,QAAM,MAAM,cAAc,IAAI,GAAG;AACjC,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,QAAQ;AAGxB,gBAAc,OAAO,GAAG;AAExB,SAAO;AACT;AASO,SAAS,kBACd,QACA,KACA,SACA;AACA,oBAAkB,GAAG;AACrB,iBAAe,QAAQ,KAAK,OAAO;AACrC;AASA,eAAsB,uBACpB,QACA,KACA,KACkB;AAClB,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,SAAS,KAAK;AACpC,UAAM,UAAU,OAAO,WAAW,GAAG;AAErC,WAAO,eAAe,QAAQ,SAAS,OAAO;AAAA,EAChD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAqCA,SAAS,qBAAqB,SAAyB;AAIrD,MAAI,UAAU,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,EACF;AAIA,YAAU,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AAIA,YAAU,QAAQ,QAAQ,sCAAsC,KAAK;AAGrE,YAAU,QAAQ,QAAQ,WAAW,MAAM;AAE3C,SAAO;AACT;AAOA,eAAsB,iBACpB,QACA,SACkB;AAClB,QAAM,EAAE,SAAS,aAAa,UAAU,SAAS,IAAI;AACrD,QAAM,MAAM,wBAAwB,WAAW;AAE/C,MAAI,cAAc,IAAI,GAAG,GAAG;AAC1B,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,gCAAgC,WAAW,IAAI,OAAO;AAElE,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,IACT;AAEA,QAAI,UAAU,MAAM,SAAS,KAAK;AAClC,cAAU,qBAAqB,OAAO;AAEtC,UAAM,gBAAgB,mBAAmB,WAAW;AAAA,EAAQ,OAAO;AAAA;AACnE,UAAM,UAAU,eAAe,QAAQ,KAAK,aAAa;AAEzD,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAQO,SAAS,sBAAsB,QAAyB;AAC7D,QAAM,MAAM;AAGZ,MAAI,cAAc,IAAI,GAAG,GAAG;AAC1B,WAAO;AAAA,EACT;AAGA,QAAM,eAAe,qBAAqB,mCAAwB;AAGlE,QAAM,gBAAgB;AAAA,EACtB,YAAY;AAAA;AAGZ,SAAO,eAAe,QAAQ,KAAK,aAAa;AAClD;AA4EO,SAAS,wBACd,QACA,SACA;AACA,QAAM,MAAM,mBAAmB,QAAQ,IAAI;AAG3C,QAAM,eAAe,gBAAgB,QAAQ,IAAI;AAGjD,oBAAkB,QAAQ,KAAK,YAAY;AAC7C;AAoCO,SAAS,mBACd,QACA,eACA,gBACA;AACA,QAAM,MAAM,wBAAwB,aAAa;AACjD,oBAAkB,QAAQ,KAAK,cAAc;AAC/C;AAKO,SAAS,sBAAsB,eAAuB;AAC3D,QAAM,MAAM,wBAAwB,aAAa;AACjD,oBAAkB,GAAG;AACvB;AAiBO,SAAS,sBAAsB,QAAsB;AAC1D,4BAA0B,MAAM;AAChC,wBAAsB,MAAM;AAC9B;AAiBO,SAAS,sBAAsB,QAAsB;AAE1D,4BAA0B,MAAM;AAGhC,wBAAsB,MAAM;AAG5B,0BAAwB,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvD;AAKO,SAAS,yBAAmC;AACjD,SAAO,MAAM,KAAK,cAAc,KAAK,CAAC;AACxC;AAKO,SAAS,wBAAwB;AACtC,aAAW,CAAC,KAAK,GAAG,KAAK,cAAc,QAAQ,GAAG;AAChD,QAAI,YAAY,QAAQ;AAAA,EAC1B;AACA,gBAAc,MAAM;AACtB;AApfA,IAiCM;AAjCN;AAAA;AAAA;AAgBA;AAGA;AAcA,IAAM,gBAAgB,oBAAI,IAAyB;AAAA;AAAA;;;ACjCnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,gBAAwD;AAExD,IAAAC,eAIO;AACP,uBAA0B;;;ACP1B,IAAAC,gBAAgE;AAEhE,IAAAA,gBAA0B;;;ACF1B,IAAAC,gBAAgC;;;ACS5B;AAFG,SAAS,OAAO,EAAE,OAAO,SAAS,GAAgB;AACvD,SACE,6CAAC,SAAI,WAAU,uBACb;AAAA,gDAAC,UAAK,WAAU,sBAAsB,iBAAM;AAAA,IAC3C;AAAA,KACH;AAEJ;;;ACdA,mBAAkD;AAU3C,IAAM,wBAAoB;AAAA,EAC/B;AACF;AAEO,SAAS,gBAA+C;AAC7D,aAAO,yBAAW,iBAAiB;AACrC;;;AFyCI,IAAAC,sBAAA;AAFJ,SAAS,gBAAgB;AACvB,SACE,8CAAC,SAAI,WAAU,+BACb;AAAA,iDAAC,UAAK,WAAU,8DAA6D;AAAA,IAC7E,6CAAC,UAAK,WAAU,iEAAgE;AAAA,IAChF,6CAAC,UAAK,WAAU,gEAA+D;AAAA,KACjF;AAEJ;AAEO,SAAS,IAAI;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,aAAa;AAAA,EACb;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,oBAAoB;AACtB,GAAa;AAEX,QAAM,cAAc,cAAc;AAGlC,QAAM,CAAC,mBAAmB,oBAAoB,QAAI;AAAA,IAChD,eAAe,OAAO,CAAC,GAAG,MAAM;AAAA,EAClC;AAGA,QAAM,eAAe,wBAAwB;AAC7C,QAAM,cAAc,eAAe,sBAAsB;AAEzD,QAAM,iBAAiB,CAAC,UAAkB;AACxC,QAAI,aAAa;AACf,kBAAY,KAAK;AAAA,IACnB;AACA,QAAI,CAAC,cAAc;AACjB,2BAAqB,KAAK;AAAA,IAC5B;AAAA,EACF;AAGA,QAAM,WAAgC,EAAE,GAAG,MAAM;AAEjD,MAAI,WAAW,QAAW;AACxB,aAAS,SAAS,OAAO,WAAW,WAAW,GAAG,MAAM,OAAO;AAAA,EACjE,WAAW,aAAa,cAAc;AACpC,aAAS,SAAS,GAAG,YAAY,YAAY;AAAA,EAC/C;AAEA,MAAI,MAAM;AACR,aAAS,SAAS;AAClB,aAAS,YACP,cAAc,SACV,OAAO,cAAc,WACnB,GAAG,SAAS,OACZ,YACF;AAAA,EACR,WAAW,cAAc,QAAW;AAClC,aAAS,YACP,OAAO,cAAc,WAAW,GAAG,SAAS,OAAO;AAAA,EACvD;AAEA,MAAI,cAAc,QAAW;AAC3B,aAAS,YACP,OAAO,cAAc,WAAW,GAAG,SAAS,OAAO;AAAA,EACvD;AAEA,MAAI,WAAW;AACb,aAAS,SAAS;AAClB,aAAS,WAAW;AAAA,EACtB;AAGA,QAAM,mBAAmB,CAAC,CAAC,aAAa;AACxC,QAAM,kBAAkB,mBAAmB,yBAAyB;AAGpE,QAAM,mBAAmB,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,WAAW,GAAG;AAClE,QAAM,UAAU,oBAAoB;AAGpC,QAAM,UAAU,QAAQ,KAAK,SAAS;AACtC,QAAM,oBAAoB,cAAc,UAAU,CAAC;AAEnD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,iCAAiC,eAAe,IAAI,SAAS,GAAG,KAAK;AAAA,MAChF,OAAO;AAAA,MAEN;AAAA,mBACC,8CAAC,SAAI,WAAU,qBACZ;AAAA,+BAAqB,6CAAC,iBAAc;AAAA,UACpC,KAAK,IAAI,CAAC,QACT;AAAA,YAAC;AAAA;AAAA,cAEC,MAAK;AAAA,cACL,WAAW,oBAAoB,gBAAgB,IAAI,KAAK,6BAA6B,EAAE;AAAA,cACvF,SAAS,MAAM,eAAe,IAAI,EAAE;AAAA,cAEnC,cAAI;AAAA;AAAA,YALA,IAAI;AAAA,UAMX,CACD;AAAA,UACA,iBACC,6CAAC,SAAI,WAAU,4BAA4B,yBAAc;AAAA,WAE7D;AAAA,QAED,qBAAqB,6CAAC,UAAO,OAAO,QAAS,yBAAc;AAAA,QAC5D,6CAAC,SAAI,WAAU,wBAAwB,mBAAQ;AAAA,QAC9C,UAAU,6CAAC,SAAI,WAAU,uBAAuB,kBAAO;AAAA;AAAA;AAAA,EAC1D;AAEJ;;;AGjLA,IAAAC,gBAMO;AACP,IAAAA,gBAA+B;;;ACmBxB,IAAM,iBAA8C;AAAA,EACzD,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA;AAAA,IAEL,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,iBAAiB,YAAY,UAAU,WAAW,SAAS;AAAA,IACpE,EAAE,OAAO,gBAAgB,YAAY,UAAU,WAAW,SAAS;AAAA;AAAA,IAGnE,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,eAAe,YAAY,SAAS;AAAA,IAC7C,EAAE,OAAO,eAAe,YAAY,SAAS;AAAA,IAC7C,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA,IAC3C,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA;AAAA,IAG3C,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA;AAAA,IAG9C,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,mBAAmB,YAAY,UAAU,WAAW,SAAS;AAAA,IACtE,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA;AAAA,IAG3C,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,wBAAwB,YAAY,SAAS;AAAA;AAAA,IAGtD,EAAE,OAAO,QAAQ,YAAY,SAAS;AAAA,IACtC,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,sBAAsB,YAAY,SAAS;AAAA;AAAA,IAGpD,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,sBAAsB,YAAY,SAAS;AAAA,IACpD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA;AAAA,IAGlD,EAAE,OAAO,6BAA6B,YAAY,SAAS;AAAA,IAC3D,EAAE,OAAO,4BAA4B,YAAY,SAAS;AAAA;AAAA,IAG1D,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA,IAC3C,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA,IACvD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,eAAe,YAAY,SAAS;AAAA;AAAA,IAG7C,EAAE,OAAO,OAAO,YAAY,SAAS;AAAA,IACrC,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA;AAAA,IAGjD,EAAE,OAAO,kBAAkB,YAAY,SAAS;AAAA,IAChD,EAAE,OAAO,+BAA+B,YAAY,SAAS;AAAA;AAAA,IAG7D,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA,IAC3C,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA;AAAA,IAGvD,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA;AAAA,IAGvD;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA;AAAA;AAAA,IAIA,EAAE,OAAO,8BAA8B,YAAY,SAAS;AAAA,IAC5D,EAAE,OAAO,mCAAmC,YAAY,SAAS;AAAA,IACjE,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,2BAA2B,YAAY,SAAS;AAAA,IACzD,EAAE,OAAO,2BAA2B,YAAY,SAAS;AAAA,IACzD,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,eAAe,WAAW,OAAO;AAAA,IAC1C,EAAE,OAAO,iBAAiB,WAAW,SAAS;AAAA,IAC9C,EAAE,OAAO,kBAAkB,YAAY,UAAU,WAAW,OAAO;AAAA;AAAA,IAGnE,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA,IACvD,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA,IACvD,EAAE,OAAO,6BAA6B,YAAY,SAAS;AAAA,IAC3D,EAAE,OAAO,6BAA6B,YAAY,SAAS;AAAA,IAC3D,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,2BAA2B,YAAY,SAAS;AAAA,IACzD,EAAE,OAAO,4BAA4B,YAAY,SAAS;AAAA;AAAA,IAG1D,EAAE,OAAO,wBAAwB,YAAY,SAAS;AAAA,IACtD,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,oCAAoC,YAAY,SAAS;AAAA,IAClE,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,wBAAwB,YAAY,SAAS;AAAA,IACtD,EAAE,OAAO,kBAAkB,YAAY,SAAS;AAAA,IAChD,EAAE,OAAO,gBAAgB,YAAY,UAAU,WAAW,SAAS;AAAA,IACnE,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,mCAAmC,YAAY,SAAS;AAAA;AAAA,IAGjE,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,yCAAyC,YAAY,SAAS;AAAA,IACvE,EAAE,OAAO,sCAAsC,YAAY,SAAS;AAAA,IACpE,EAAE,OAAO,kCAAkC,YAAY,SAAS;AAAA,IAChE,EAAE,OAAO,uCAAuC,YAAY,SAAS;AAAA,IACrE,EAAE,OAAO,0BAA0B,YAAY,SAAS;AAAA;AAAA,IAGxD,EAAE,OAAO,WAAW,YAAY,SAAS;AAAA,IACzC,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,sBAAsB,YAAY,SAAS;AAAA,EACtD;AAAA,EACA,QAAQ;AAAA;AAAA;AAAA,IAGN,qBAAqB;AAAA;AAAA,IACrB,qBAAqB;AAAA;AAAA,IAGrB,kCAAkC;AAAA;AAAA,IAClC,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA;AAAA,IAGrC,2BAA2B;AAAA;AAAA,IAC3B,8BAA8B;AAAA;AAAA,IAC9B,sCAAsC;AAAA,IACtC,uCAAuC;AAAA;AAAA,IAGvC,2BAA2B;AAAA;AAAA,IAC3B,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,kCAAkC;AAAA;AAAA,IAGlC,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,0CAA0C;AAAA;AAAA,IAG1C,iCAAiC;AAAA,IACjC,6BAA6B;AAAA,IAC7B,sCAAsC;AAAA,IACtC,6BAA6B;AAAA,IAC7B,uCAAuC;AAAA;AAAA,IAGvC,gCAAgC;AAAA,IAChC,4BAA4B;AAAA,IAC5B,yCAAyC;AAAA;AAAA,IAGzC,+BAA+B;AAAA,IAC/B,+BAA+B;AAAA;AAAA,IAG/B,6BAA6B;AAAA;AAAA,IAG7B,8BAA8B;AAAA;AAAA,IAG9B,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA;AAAA,IAGtC,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,mCAAmC;AAAA,IACnC,oCAAoC;AAAA;AAAA,IAGpC,iCAAiC;AAAA,IACjC,6BAA6B;AAAA;AAAA,IAG7B,8BAA8B;AAAA,IAC9B,uCAAuC;AAAA,IACvC,uCAAuC;AAAA;AAAA,IAGvC,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,IAC9B,8BAA8B;AAAA;AAAA,IAG9B,8BAA8B;AAAA,IAC9B,0CAA0C;AAAA,IAC1C,uCAAuC;AAAA,IACvC,yCAAyC;AAAA;AAAA,IAGzC,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,IAC7B,4BAA4B;AAAA;AAAA,IAG5B,qCAAqC;AAAA,IACrC,oCAAoC;AAAA,EACtC;AACF;AAMO,SAAS,uBAAuB,QAAwC;AAC7E,SAAO,OAAO,YAAY,iBAAiB,cAAc;AAC3D;;;AChQO,IAAM,kBAA+C;AAAA,EAC1D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA;AAAA,IAEL,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,iBAAiB,YAAY,UAAU,WAAW,SAAS;AAAA,IACpE,EAAE,OAAO,gBAAgB,YAAY,UAAU,WAAW,SAAS;AAAA;AAAA,IAGnE,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,eAAe,YAAY,SAAS;AAAA,IAC7C,EAAE,OAAO,eAAe,YAAY,SAAS;AAAA,IAC7C,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA,IAC3C,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA;AAAA,IAG3C,EAAE,OAAO,UAAU,YAAY,SAAS;AAAA,IACxC,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA;AAAA,IAG9C,EAAE,OAAO,WAAW,YAAY,UAAU,WAAW,SAAS;AAAA,IAC9D,EAAE,OAAO,mBAAmB,YAAY,UAAU,WAAW,SAAS;AAAA,IACtE,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA;AAAA,IAG3C,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,wBAAwB,YAAY,SAAS;AAAA;AAAA,IAGtD,EAAE,OAAO,QAAQ,YAAY,SAAS;AAAA,IACtC,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,gBAAgB,YAAY,SAAS;AAAA,IAC9C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,sBAAsB,YAAY,SAAS;AAAA;AAAA,IAGpD,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,sBAAsB,YAAY,SAAS;AAAA,IACpD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA;AAAA,IAGlD,EAAE,OAAO,6BAA6B,YAAY,SAAS;AAAA,IAC3D,EAAE,OAAO,4BAA4B,YAAY,SAAS;AAAA;AAAA,IAG1D,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA,IAC3C,EAAE,OAAO,qBAAqB,YAAY,SAAS;AAAA,IACnD,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA,IACvD,EAAE,OAAO,oBAAoB,YAAY,SAAS;AAAA,IAClD,EAAE,OAAO,eAAe,YAAY,SAAS;AAAA;AAAA,IAG7C,EAAE,OAAO,OAAO,YAAY,SAAS;AAAA,IACrC,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA;AAAA,IAGjD,EAAE,OAAO,kBAAkB,YAAY,SAAS;AAAA,IAChD,EAAE,OAAO,+BAA+B,YAAY,SAAS;AAAA;AAAA,IAG7D,EAAE,OAAO,aAAa,YAAY,SAAS;AAAA,IAC3C,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA;AAAA,IAGvD,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA;AAAA,IAGvD;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA;AAAA;AAAA,IAIA,EAAE,OAAO,8BAA8B,YAAY,SAAS;AAAA,IAC5D,EAAE,OAAO,mCAAmC,YAAY,SAAS;AAAA,IACjE,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,2BAA2B,YAAY,SAAS;AAAA,IACzD,EAAE,OAAO,2BAA2B,YAAY,SAAS;AAAA,IACzD,EAAE,OAAO,cAAc,YAAY,SAAS;AAAA,IAC5C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA;AAAA,IAG/C,EAAE,OAAO,eAAe,WAAW,OAAO;AAAA,IAC1C,EAAE,OAAO,iBAAiB,WAAW,SAAS;AAAA,IAC9C,EAAE,OAAO,kBAAkB,YAAY,UAAU,WAAW,OAAO;AAAA;AAAA,IAGnE,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA,IACvD,EAAE,OAAO,yBAAyB,YAAY,SAAS;AAAA,IACvD,EAAE,OAAO,6BAA6B,YAAY,SAAS;AAAA,IAC3D,EAAE,OAAO,6BAA6B,YAAY,SAAS;AAAA,IAC3D,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,2BAA2B,YAAY,SAAS;AAAA,IACzD,EAAE,OAAO,4BAA4B,YAAY,SAAS;AAAA;AAAA,IAG1D,EAAE,OAAO,wBAAwB,YAAY,SAAS;AAAA,IACtD,EAAE,OAAO,YAAY,YAAY,SAAS;AAAA,IAC1C,EAAE,OAAO,oCAAoC,YAAY,SAAS;AAAA,IAClE,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,wBAAwB,YAAY,SAAS;AAAA,IACtD,EAAE,OAAO,kBAAkB,YAAY,SAAS;AAAA,IAChD,EAAE,OAAO,gBAAgB,YAAY,UAAU,WAAW,SAAS;AAAA,IACnE,EAAE,OAAO,iBAAiB,YAAY,SAAS;AAAA,IAC/C,EAAE,OAAO,mCAAmC,YAAY,SAAS;AAAA;AAAA,IAGjE,EAAE,OAAO,uBAAuB,YAAY,SAAS;AAAA,IACrD,EAAE,OAAO,yCAAyC,YAAY,SAAS;AAAA,IACvE,EAAE,OAAO,sCAAsC,YAAY,SAAS;AAAA,IACpE,EAAE,OAAO,kCAAkC,YAAY,SAAS;AAAA,IAChE,EAAE,OAAO,uCAAuC,YAAY,SAAS;AAAA,IACrE,EAAE,OAAO,0BAA0B,YAAY,SAAS;AAAA;AAAA,IAGxD,EAAE,OAAO,WAAW,YAAY,SAAS;AAAA,IACzC,EAAE,OAAO,mBAAmB,YAAY,SAAS;AAAA,IACjD,EAAE,OAAO,sBAAsB,YAAY,SAAS;AAAA,EACtD;AAAA,EACA,QAAQ;AAAA;AAAA,IAEN,qBAAqB;AAAA;AAAA,IACrB,qBAAqB;AAAA;AAAA,IAGrB,kCAAkC;AAAA;AAAA,IAClC,+BAA+B;AAAA,IAC/B,qCAAqC;AAAA;AAAA,IAGrC,2BAA2B;AAAA;AAAA,IAC3B,8BAA8B;AAAA;AAAA,IAC9B,sCAAsC;AAAA,IACtC,uCAAuC;AAAA;AAAA,IAGvC,2BAA2B;AAAA;AAAA,IAC3B,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,kCAAkC;AAAA;AAAA,IAGlC,2BAA2B;AAAA,IAC3B,uBAAuB;AAAA,IACvB,kCAAkC;AAAA,IAClC,8BAA8B;AAAA,IAC9B,0CAA0C;AAAA;AAAA,IAG1C,iCAAiC;AAAA,IACjC,6BAA6B;AAAA,IAC7B,sCAAsC;AAAA,IACtC,6BAA6B;AAAA,IAC7B,uCAAuC;AAAA;AAAA,IAGvC,gCAAgC;AAAA,IAChC,4BAA4B;AAAA,IAC5B,yCAAyC;AAAA;AAAA,IAGzC,+BAA+B;AAAA,IAC/B,+BAA+B;AAAA;AAAA,IAG/B,6BAA6B;AAAA;AAAA,IAG7B,8BAA8B;AAAA;AAAA,IAG9B,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,sCAAsC;AAAA;AAAA,IAGtC,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,mCAAmC;AAAA,IACnC,oCAAoC;AAAA;AAAA,IAGpC,iCAAiC;AAAA,IACjC,6BAA6B;AAAA;AAAA,IAG7B,8BAA8B;AAAA,IAC9B,uCAAuC;AAAA,IACvC,uCAAuC;AAAA;AAAA,IAGvC,sBAAsB;AAAA,IACtB,8BAA8B;AAAA,IAC9B,8BAA8B;AAAA;AAAA,IAG9B,8BAA8B;AAAA,IAC9B,0CAA0C;AAAA,IAC1C,uCAAuC;AAAA,IACvC,yCAAyC;AAAA;AAAA,IAGzC,mBAAmB;AAAA,IACnB,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,IAC7B,4BAA4B;AAAA;AAAA,IAG5B,qCAAqC;AAAA,IACrC,oCAAoC;AAAA,EACtC;AACF;AAMO,SAAS,wBACd,QACA;AACA,SAAO,OAAO,YAAY,kBAAkB,eAAe;AAC7D;;;ACnPO,SAAS,kBACd,QACM;AACN,yBAAuB,MAAM;AAC7B,0BAAwB,MAAM;AAChC;;;AHzBA;;;AILA,IAAM,oBAAoB;AAAA,EACxB;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAWO,SAAS,wBACd,cACA,QACY;AACZ,QAAM,gBAA0B,CAAC;AAEjC,QAAM,oBAAoB,MAAM;AAC9B,UAAM,QAAQ,aAAa,SAAS;AACpC,QAAI,CAAC,MAAO;AAEZ,UAAM,UAAU,MAAM,SAAS;AAC/B,UAAM,cAA8C,CAAC;AAGrD,sBAAkB,QAAQ,CAAC,YAAY;AACrC,UAAI;AACJ,cAAQ,QAAQ,QAAQ,KAAK,OAAO,OAAO,MAAM;AAC/C,cAAM,WAAW,MAAM,cAAc,MAAM,KAAK;AAChD,cAAM,SAAS,MAAM,cAAc,MAAM,QAAQ,MAAM,CAAC,EAAE,MAAM;AAEhE,oBAAY,KAAK;AAAA,UACf,OAAO,IAAI,OAAO;AAAA,YAChB,SAAS;AAAA,YACT,SAAS;AAAA,YACT,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AAAA,UACA,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,qCAAqC;AAAA,UACvC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAGD,UAAM,mBAAmB,aAAa;AAAA,MACpC;AAAA,MACA;AAAA,IACF;AACA,kBAAc,SAAS;AACvB,kBAAc,KAAK,GAAG,gBAAgB;AAAA,EACxC;AAGA,oBAAkB;AAGlB,QAAM,aAAa,aAAa,wBAAwB,MAAM;AAC5D,sBAAkB;AAAA,EACpB,CAAC;AAGD,SAAO,MAAM;AACX,eAAW,QAAQ;AACnB,iBAAa,iBAAiB,eAAe,CAAC,CAAC;AAAA,EACjD;AACF;AAMO,SAAS,wBAAwB;AACtC,MAAI,OAAO,aAAa,YAAa;AAErC,QAAM,UAAU;AAChB,MAAI,SAAS,eAAe,OAAO,EAAG;AAEtC,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,KAAK;AACX,QAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAKpB,WAAS,KAAK,YAAY,KAAK;AACjC;;;ACrFO,IAAM,qBAIR;AAAA,EACH,EAAE,MAAM,YAAY,OAAO,iBAAiB,WAAW,mBAAmB;AAAA,EAC1E;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,EAAE,MAAM,UAAU,OAAO,oBAAoB,WAAW,iBAAiB;AAAA,EACzE,EAAE,MAAM,OAAO,OAAO,iBAAiB,WAAW,cAAc;AAAA,EAChE,EAAE,MAAM,QAAQ,OAAO,YAAY,WAAW,eAAe;AAC/D;AAMO,SAAS,uBAAuB,MAAmC;AACxE,QAAM,aAAkC,CAAC;AAEzC,aAAW,WAAW,oBAAoB;AACxC,UAAMC,SAAQ,IAAI,OAAO,QAAQ,MAAM,QAAQ,QAAQ,MAAM,KAAK;AAClE,QAAI;AACJ,YAAQ,QAAQA,OAAM,KAAK,IAAI,OAAO,MAAM;AAC1C,iBAAW,KAAK;AAAA,QACd,MAAM,QAAQ;AAAA,QACd,MAAM,QAAQ,SAAS,SAAS,KAAK,MAAM,CAAC,KAAK;AAAA,QACjD,YAAY,MAAM;AAAA,QAClB,UAAU,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,MACnC,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,yBACd,gBACY;AACZ,MAAI,gBAA0B,CAAC;AAE/B,WAAS,SAAS;AAChB,UAAM,QAAQ,eAAe,SAAS;AACtC,QAAI,CAAC,MAAO;AAEZ,UAAM,OAAO,MAAM,SAAS;AAC5B,UAAM,aAAa,uBAAuB,IAAI;AAE9C,UAAM,cAA8C,WAAW;AAAA,MAC7D,CAAC,QAAQ;AACP,cAAM,WAAW,MAAM,cAAc,IAAI,UAAU;AACnD,cAAM,SAAS,MAAM,cAAc,IAAI,QAAQ;AAC/C,cAAM,UAAU,mBAAmB,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI;AAElE,eAAO;AAAA,UACL,OAAO;AAAA,YACL,iBAAiB,SAAS;AAAA,YAC1B,aAAa,SAAS;AAAA,YACtB,eAAe,OAAO;AAAA,YACtB,WAAW,OAAO;AAAA,UACpB;AAAA,UACA,SAAS,EAAE,iBAAiB,QAAQ,UAAU;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,oBAAgB,eAAe,iBAAiB,eAAe,WAAW;AAAA,EAC5E;AAEA,SAAO;AACP,QAAM,aAAa,eAAe,wBAAwB,MAAM,OAAO,CAAC;AAExE,SAAO,MAAM;AACX,eAAW,QAAQ;AACnB,mBAAe,iBAAiB,eAAe,CAAC,CAAC;AAAA,EACnD;AACF;AAMO,SAAS,mCAAyC;AACvD,MAAI,OAAO,aAAa,YAAa;AACrC,MAAI,SAAS,eAAe,qBAAqB,EAAG;AAEpD,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,KAAK;AACX,QAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOpB,WAAS,KAAK,YAAY,KAAK;AACjC;;;AC5GO,SAAS,uBACd,WACmB;AACnB,MAAI,CAAC,aAAa,OAAO,KAAK,SAAS,EAAE,WAAW,EAAG,QAAO,CAAC;AAC/D,SAAO,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,IACvD,OAAO,QAAQ,IAAI;AAAA,IACnB,YAAY,QAAQ,IAAI;AAAA,IACxB,QAAQ,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAClC,eAAe,qCAAqC,KAAK,UAAU,KAAK,CAAC;AAAA,IACzE,MAAM;AAAA,IACN,UAAU,WAAW;AAAA,EACvB,EAAE;AACJ;AAEO,SAAS,yBACd,aACmB;AACnB,MAAI,CAAC,eAAe,OAAO,KAAK,WAAW,EAAE,WAAW,EAAG,QAAO,CAAC;AACnE,SAAO,OAAO,KAAK,WAAW,EAAE,IAAI,CAAC,UAAU;AAAA,IAC7C,OAAO,QAAQ,IAAI;AAAA,IACnB,YAAY,QAAQ,IAAI;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe,+DAA+D,IAAI;AAAA,IAClF,MAAM;AAAA,IACN,UAAU,WAAW;AAAA,EACvB,EAAE;AACJ;AAEO,SAAS,qBACd,SACmB;AACnB,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO,CAAC;AAC9C,SAAO,QAAQ,IAAI,CAAC,UAAU;AAAA,IAC5B,OAAO,WAAW,IAAI;AAAA,IACtB,YAAY,WAAW,IAAI;AAAA,IAC3B,QAAQ;AAAA,IACR,eACE;AAAA,IACF,MAAM;AAAA,IACN,UAAU,cAAc;AAAA,EAC1B,EAAE;AACJ;AAEO,SAAS,sBACd,UACA,UACmB;AACnB,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG,QAAO,CAAC;AAChD,QAAM,WAAW,WACb,SAAS,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ,IAC9C;AACJ,SAAO,SAAS,IAAI,CAAC,SAAS;AAAA,IAC5B,OAAO,IAAI;AAAA,IACX,YAAY,IAAI;AAAA,IAChB,QAAQ,GAAG,IAAI,IAAI,KAAK,IAAI,QAAQ;AAAA,IACpC,eAAe,YAAY,IAAI,IAAI,KAAK,IAAI,SAAS;AAAA,IACrD,MAAM;AAAA,IACN,UAAU,WAAW,IAAI;AAAA,EAC3B,EAAE;AACJ;AAEO,SAAS,uBACd,WACA,SACmB;AACnB,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,QAAM,QAAQ,UAAU,gBAAgB,CAAC;AACzC,SAAO,MAAM,IAAI,CAAC,UAAU;AAAA,IAC1B,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,QAAQ,gBAAgB,OAAO;AAAA,IAC/B,eAAe,kCAAkC,IAAI;AAAA,IACrD,MAAM;AAAA,IACN,UAAU,YAAY;AAAA,EACxB,EAAE;AACJ;;;AC1EA,IAAM,kBAAkB,oBAAI,IAAiC;AAC7D,IAAM,cAA6B,CAAC;AACpC,IAAI,aAAa;AAKV,SAAS,uBACd,WACA,SACM;AACN,kBAAgB,IAAI,WAAW,OAAO;AACxC;AAKO,SAAS,0BAA0B,WAAyB;AACjE,kBAAgB,OAAO,SAAS;AAClC;AAMO,SAAS,0BACd,QACM;AACN,MAAI,WAAY;AAChB,eAAa;AAGb,cAAY;AAAA,IACV,OAAO,UAAU,+BAA+B,QAAQ;AAAA,MACtD,mBAAmB,CAAC,KAAK,KAAK,GAAG;AAAA,MACjC,uBACE,OACA,UAC0B;AAC1B,cAAM,YAAY,MAAM,IAAI,SAAS;AACrC,cAAM,UAAU,gBAAgB,IAAI,SAAS;AAC7C,YAAI,CAAC,QAAS,QAAO,EAAE,aAAa,CAAC,EAAE;AAEvC,cAAM,cAAc,MAAM,eAAe,SAAS,UAAU;AAC5D,cAAM,mBAAmB,YAAY,UAAU,GAAG,SAAS,SAAS,CAAC;AAErE,cAAM,UAA6B,CAAC;AAEpC,YACE,iBAAiB,SAAS,OAAO,KACjC,iBAAiB,SAAS,OAAO,GACjC;AACA,kBAAQ,KAAK,GAAG,uBAAuB,QAAQ,SAAS,CAAC;AAAA,QAC3D,WACE,iBAAiB,SAAS,OAAO,KACjC,iBAAiB,SAAS,OAAO,GACjC;AACA,kBAAQ,KAAK,GAAG,yBAAyB,QAAQ,WAAW,CAAC;AAAA,QAC/D,WACE,iBAAiB,SAAS,UAAU,KACpC,iBAAiB,SAAS,UAAU,GACpC;AACA,kBAAQ,KAAK,GAAG,qBAAqB,QAAQ,OAAO,CAAC;AAAA,QACvD,WAAW,YAAY,OAAO,UAAU,SAAS,GAAG;AAClD,kBAAQ;AAAA,YACN,GAAG,sBAAsB,QAAQ,UAAU,QAAQ,QAAQ;AAAA,UAC7D;AAAA,QACF,WACE,YAAY,OAAO,UAAU,MAAM,KACnC,YAAY,OAAO,UAAU,QAAQ,GACrC;AACA,gBAAM,MAAM,YAAY,OAAO,UAAU,MAAM,IAAI,SAAS;AAC5D,kBAAQ,KAAK,GAAG,uBAAuB,QAAQ,WAAW,GAAG,CAAC;AAAA,QAChE,WACE,iBAAiB,SAAS,IAAI,KAC9B,iBAAiB,SAAS,GAAG,GAC7B;AACA,kBAAQ,KAAK,GAAG,uBAAuB,QAAQ,SAAS,CAAC;AACzD,kBAAQ,KAAK,GAAG,yBAAyB,QAAQ,WAAW,CAAC;AAC7D,kBAAQ,KAAK,GAAG,qBAAqB,QAAQ,OAAO,CAAC;AAAA,QACvD;AAKA,cAAM,gBAAgB,iBAAiB;AAAA,UACrC;AAAA,QACF;AACA,cAAM,OAAO,MAAM,qBAAqB,QAAQ;AAChD,cAAM,WAAW,gBACb,SAAS,SAAS,cAAc,CAAC,EAAE,SACnC,KAAK;AACT,cAAM,QAAQ;AAAA,UACZ,iBAAiB,SAAS;AAAA,UAC1B,eAAe,SAAS;AAAA,UACxB,aAAa;AAAA,UACb,WAAW,SAAS;AAAA,QACtB;AAEA,eAAO;AAAA,UACL,aAAa,QAAQ,IAAI,CAAC,WAAW;AAAA,YACnC,OAAO,MAAM;AAAA,YACb,YAAY,MAAM;AAAA,YAClB,QAAQ,MAAM;AAAA,YACd,eAAe,MAAM;AAAA,YACrB,MAAM,kBAAkB,QAAQ,MAAM,IAAI;AAAA,YAC1C,UAAU,MAAM;AAAA,YAChB;AAAA,UACF,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAGA,cAAY;AAAA,IACV,OAAO,UAAU,sBAAsB,QAAQ;AAAA,MAC7C,aAAa,OAAO,UAAU;AAC5B,cAAM,YAAY,MAAM,IAAI,SAAS;AACrC,cAAM,UAAU,gBAAgB,IAAI,SAAS;AAC7C,YAAI,CAAC,QAAS,QAAO;AAErB,cAAM,cAAc,MAAM,eAAe,SAAS,UAAU;AAC5D,cAAM,MAAM,SAAS,SAAS;AAG9B,iBAAS,cAAc,SAAyC;AAC9D,gBAAMC,SAAQ,IAAI,OAAO,QAAQ,QAAQ,GAAG;AAC5C,cAAI;AACJ,kBAAQ,IAAIA,OAAM,KAAK,WAAW,OAAO,MAAM;AAC7C,gBAAI,OAAO,EAAE,SAAS,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAQ,QAAO;AAAA,UAC7D;AACA,iBAAO;AAAA,QACT;AAGA,cAAM,WAAW,cAAc,cAAc;AAC7C,YAAI,YAAY,QAAQ,WAAW;AACjC,gBAAM,OAAO,SAAS,CAAC;AACvB,cAAI,QAAQ,QAAQ,WAAW;AAC7B,kBAAM,QAAQ,QAAQ,UAAU,IAAI;AACpC,mBAAO;AAAA,cACL,OAAO;AAAA,gBACL,iBAAiB,SAAS;AAAA,gBAC1B,aAAa,SAAS,QAAQ;AAAA,gBAC9B,eAAe,SAAS;AAAA,gBACxB,WAAW,SAAS,QAAQ,SAAS,CAAC,EAAE,SAAS;AAAA,cACnD;AAAA,cACA,UAAU;AAAA,gBACR;AAAA,kBACE,OAAO,wBAAwB,IAAI;AAAA;AAAA,eAAsB,KAAK,UAAU,KAAK,CAAC;AAAA;AAAA;AAAA,gBAChF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,YACL,UAAU;AAAA,cACR;AAAA,gBACE,OAAO,+BAA+B,IAAI;AAAA;AAAA,qBAA4B,OAAO,KAAK,QAAQ,SAAS,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA,cAC3H;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,cAAM,WAAW,cAAc,cAAc;AAC7C,YAAI,YAAY,QAAQ,aAAa;AACnC,gBAAM,OAAO,SAAS,CAAC;AACvB,cAAI,QAAQ,QAAQ,aAAa;AAC/B,mBAAO;AAAA,cACL,OAAO;AAAA,gBACL,iBAAiB,SAAS;AAAA,gBAC1B,aAAa,SAAS,QAAQ;AAAA,gBAC9B,eAAe,SAAS;AAAA,gBACxB,WAAW,SAAS,QAAQ,SAAS,CAAC,EAAE,SAAS;AAAA,cACnD;AAAA,cACA,UAAU;AAAA,gBACR;AAAA,kBACE,OAAO,0BAA0B,IAAI;AAAA;AAAA;AAAA,gBACvC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,YACL,UAAU;AAAA,cACR;AAAA,gBACE,OAAO,iCAAiC,IAAI;AAAA;AAAA,WAAkB,OAAO,KAAK,QAAQ,WAAW,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA,cACrH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,cAAM,cAAc,cAAc,iBAAiB;AACnD,YAAI,aAAa;AACf,gBAAM,OAAO,YAAY,CAAC;AAC1B,cAAI,QAAQ,SAAS,SAAS,IAAI,GAAG;AACnC,mBAAO;AAAA,cACL,OAAO;AAAA,gBACL,iBAAiB,SAAS;AAAA,gBAC1B,aAAa,YAAY,QAAQ;AAAA,gBACjC,eAAe,SAAS;AAAA,gBACxB,WAAW,YAAY,QAAQ,YAAY,CAAC,EAAE,SAAS;AAAA,cACzD;AAAA,cACA,UAAU;AAAA,gBACR;AAAA,kBACE,OAAO,yBAAyB,IAAI;AAAA;AAAA;AAAA,gBACtC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,YACL,UAAU;AAAA,cACR;AAAA,gBACE,OAAO,gCAAgC,IAAI;AAAA;AAAA,qBAA4B,QAAQ,SAAS,KAAK,IAAI,KAAK,MAAM;AAAA,cAC9G;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAKO,SAAS,2BAAiC;AAC/C,aAAW,KAAK,YAAa,GAAE,QAAQ;AACvC,cAAY,SAAS;AACrB,eAAa;AACb,kBAAgB,MAAM;AACxB;AAEA,SAAS,kBACP,QACA,MAC8B;AAC9B,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,OAAO,UAAU,mBAAmB;AAAA,IAC7C,KAAK;AACH,aAAO,OAAO,UAAU,mBAAmB;AAAA,IAC7C,KAAK;AACH,aAAO,OAAO,UAAU,mBAAmB;AAAA,IAC7C,KAAK;AACH,aAAO,OAAO,UAAU,mBAAmB;AAAA,IAC7C,KAAK;AACH,aAAO,OAAO,UAAU,mBAAmB;AAAA,IAC7C;AACE,aAAO,OAAO,UAAU,mBAAmB;AAAA,EAC/C;AACF;AAKA,SAAS,YACP,OACA,UACA,KACS;AACT,QAAM,cAAc,MAAM,eAAe,SAAS,UAAU;AAC5D,QAAM,UAAU,IAAI,OAAO,IAAI,GAAG,aAAa;AAC/C,SAAO,QAAQ,KAAK,WAAW;AACjC;;;ACvRA,eAA0B;AAC1B,mBAA0B;AAC1B,oBAA2B;AAC3B,wBAA+B;AAC/B,kBAAyB;AAgBlB,SAAS,mBAAmB,gBAAqC;AAEtE,iBAAe,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,MACE,MAAM,+BAA+B,OAAO,SAAS;AACnD,YAAI;AACF,gBAAM,OAAO,MAAM,SAAS;AAC5B,gBAAM,YAAY,MAAe,gBAAO,MAAM;AAAA,YAC5C,QAAQ;AAAA,YACR,SAAS,CAAC,aAAAC,SAAe,cAAAC,OAAc;AAAA,YACvC,UAAU,QAAQ;AAAA,YAClB,SAAS,CAAC,QAAQ;AAAA,YAClB,MAAM;AAAA,YACN,aAAa;AAAA,YACb,eAAe;AAAA,UACjB,CAAC;AACD,iBAAO;AAAA,YACL;AAAA,cACE,OAAO,MAAM,kBAAkB;AAAA,cAC/B,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,iBAAO,CAAC;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,iBAAe,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,MACE,MAAM,+BAA+B,OAAO,SAAS;AACnD,YAAI;AACF,gBAAM,OAAO,MAAM,SAAS;AAC5B,gBAAM,YAAY,MAAe,gBAAO,MAAM;AAAA,YAC5C,QAAQ;AAAA,YACR,SAAS,CAAC,kBAAAC,SAAoB,cAAAD,OAAc;AAAA,YAC5C,UAAU,QAAQ;AAAA,YAClB,SAAS,CAAC,QAAQ;AAAA,YAClB,MAAM;AAAA,YACN,aAAa;AAAA,YACb,eAAe;AAAA,UACjB,CAAC;AACD,iBAAO;AAAA,YACL;AAAA,cACE,OAAO,MAAM,kBAAkB;AAAA,cAC/B,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AACd,iBAAO,CAAC;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,iBAAe,UAAU,uCAAuC,QAAQ;AAAA,IACtE,MAAM,+BAA+B,OAAO,SAAS;AACnD,UAAI;AACF,cAAM,OAAO,MAAM,SAAS;AAC5B,cAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,cAAM,YAAY,KAAK,UAAU,QAAQ,MAAM,QAAQ,OAAO;AAC9D,eAAO;AAAA,UACL;AAAA,YACE,OAAO,MAAM,kBAAkB;AAAA,YAC/B,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AAGD,iBAAe,UAAU,uCAAuC,QAAQ;AAAA,IACtE,MAAM,+BAA+B,OAAO,SAAS;AACnD,UAAI;AACF,cAAM,OAAO,MAAM,SAAS;AAC5B,cAAM,YAAY,MAAe,gBAAO,MAAM;AAAA,UAC5C,QAAQ;AAAA,UACR,SAAS,CAAC,YAAAE,OAAY;AAAA,UACtB,UAAU,QAAQ;AAAA,UAClB,SAAS,CAAC,QAAQ;AAAA,UAClB,2BAA2B;AAAA,QAC7B,CAAC;AACD,eAAO;AAAA,UACL;AAAA,YACE,OAAO,MAAM,kBAAkB;AAAA,YAC/B,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AAGD,iBAAe,UAAU,uCAAuC,OAAO;AAAA,IACrE,MAAM,+BAA+B,OAAO,SAAS;AACnD,UAAI;AACF,cAAM,OAAO,MAAM,SAAS;AAC5B,cAAM,YAAY,MAAe,gBAAO,MAAM;AAAA,UAC5C,QAAQ;AAAA,UACR,SAAS,CAAC,YAAAA,OAAY;AAAA;AAAA,UACtB,UAAU,QAAQ;AAAA,UAClB,SAAS,CAAC,QAAQ;AAAA,QACpB,CAAC;AACD,eAAO;AAAA,UACL;AAAA,YACE,OAAO,MAAM,kBAAkB;AAAA,YAC/B,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC3HA,IAAM,iBAAiB,oBAAI,IAA8B;AAEzD,IAAI,YAAY;AAGhB,IAAI;AAOG,SAAS,eAAe,QAA8C;AAC3E,MAAI,MAAO;AACX,UAAQ,OAAO;AACf,MAAI,eAAe,OAAO,EAAG,cAAa;AAC5C;AAeO,SAAS,oBAA4B;AAC1C,SAAO,4BAA4B,EAAE,SAAS;AAChD;AAMO,SAAS,mBACd,WACA,QACM;AACN,iBAAe,IAAI,WAAW;AAAA,IAC5B,KAAK,qBAAqB,SAAS;AAAA,IACnC,WAAW,CAAC,SAAS;AAAA,IACrB;AAAA,EACF,CAAC;AACD,eAAa;AACf;AAMO,SAAS,qBAAqB,WAAyB;AAC5D,iBAAe,OAAO,SAAS;AAC/B,eAAa;AACf;AAKA,SAAS,eAAqB;AAC5B,MAAI,CAAC,MAAO;AACZ,QAAM,aAAa,sBAAsB;AAAA,IACvC,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,qBAAqB;AAAA,IACrB,SAAS,MAAM,KAAK,eAAe,OAAO,CAAC;AAAA,EAC7C,CAAC;AACH;;;AC7FA,IAAAC,gBAAyD;AA6BlD,SAAS,gBAAgB;AAAA,EAC9B,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AACF,IAA4B,CAAC,GAG3B;AACA,QAAM,CAAC,QAAQ,SAAS,QAAI;AAAA,IAC1B,UAAU,YAAY;AAAA,EACxB;AACA,QAAM,gBAAY,sBAA4C,IAAI;AAClE,QAAM,wBAAoB,sBAAe,UAAU,YAAY,aAAa;AAC5E,QAAM,uBAAmB,sBAA8B,IAAI;AAE3D,QAAM,mBAAe,2BAAY,MAAM;AACrC,QAAI,CAAC,WAAW,CAAC,UAAU,QAAS;AAEpC,QAAI;AACF,YAAM,sBAAsB,UAAU,QAAQ,iBAAiB;AAC/D,YAAM,sBAAsB,KAAK;AAAA,QAC/B;AAAA,QACA,KAAK,IAAI,WAAW,mBAAmB;AAAA,MACzC;AAEA,UAAI,wBAAwB,kBAAkB,SAAS;AACrD;AAAA,MACF;AAEA,wBAAkB,UAAU;AAC5B,gBAAU,mBAAmB;AAE7B,UAAI,gBAAgB;AAClB,cAAM,gBAAgB;AACtB,cAAM,SAAS;AACf,cAAM,iBAAiB,sBAAsB,gBAAgB;AAC7D,uBAAe,cAAc;AAAA,MAC/B;AAAA,IAMF,SAAS,OAAO;AAAA,IAEhB;AAAA,EACF,GAAG,CAAC,SAAS,WAAW,WAAW,cAAc,CAAC;AAElD,QAAM,gBAAY;AAAA,IAChB,CAAC,WAAgD;AAE/C,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AACrC,yBAAiB,UAAU;AAAA,MAC7B;AAEA,gBAAU,UAAU;AAEpB,UAAI,CAAC,WAAW,CAAC,QAAQ;AACvB,kBAAU,aAAa;AACvB,0BAAkB,UAAU;AAC5B;AAAA,MACF;AAGA,iBAAW,MAAM,aAAa,GAAG,EAAE;AAGnC,YAAM,aAAa,OAAO,uBAAuB,MAAM;AAErD,YAAI,iBAAiB,SAAS;AAC5B,uBAAa,iBAAiB,OAAO;AAAA,QACvC;AAGA,yBAAiB,UAAU,WAAW,MAAM;AAC1C,uBAAa;AACb,2BAAiB,UAAU;AAAA,QAC7B,GAAG,GAAG;AAAA,MACR,CAAC;AAID,MAAC,OAAe,qBAAqB;AAAA,IACvC;AAAA,IACA,CAAC,SAAS,eAAe,YAAY;AAAA,EACvC;AAEA,SAAO,CAAC,QAAQ,SAAS;AAC3B;;;AVqaM,IAAAC,sBAAA;AA/ZC,SAAS,KAAK;AAAA,EACnB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,SAAS;AAAA,EACT,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAc;AAEZ,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAEhD,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,UAAU;AACzD,QAAM,4BAAwB,sBAA0B,CAAC,CAAC;AAC1D,QAAM,gBAAY,sBAA8C,IAAI;AACpE,QAAM,gBAAY,sBAA4C,IAAI;AAClE,QAAM,mBAAe,sBAA8B,IAAI;AAEvD,QAAM,cAAc,cAAc;AAClC,QAAM,eAAW,sBAAsB,IAAI;AAE3C,MAAI,aAAa,WAAW,SAAS,YAAY,MAAM;AACrD,aAAS,UAAU,YAAY,SAAS;AAAA,EAC1C;AAEA,QAAM,yBAAqB;AAAA,IACzB,CAAC,WAAmB;AAClB,UAAI,aAAa,WAAW,SAAS,YAAY,MAAM;AACrD,oBAAY,YAAY,SAAS,SAAS,MAAM;AAAA,MAClD;AAAA,IACF;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,aAAa,WAAW,SAAS,YAAY,MAAM;AACrD,oBAAY,cAAc,SAAS,OAAO;AAAA,MAC5C;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,eAAe,OAAO,eAAe,WAAW,aAAa,CAAC;AACpE,QAAM,CAAC,kBAAkB,cAAc,IAAI,gBAAgB;AAAA,IACzD,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC,aAAa;AAAA,IACxC,WAAW,aAAa,QAAQ,aAAa,UAAU,IAAI;AAAA,IAC3D,WAAW,aAAa,OAAO;AAAA,IAC/B,eAAe,aAAa,UAAU,MAAM;AAAA,IAC5C,gBAAgB;AAAA,EAClB,CAAC;AAGD,+BAAU,MAAM;AACd,0BAAsB;AAAA,EACxB,GAAG,CAAC,CAAC;AAIL,QAAM,mBAAe,2BAAY,MAAqB;AACpD,QAAI,OAAO,aAAa,YAAa,QAAO;AAG5C,QAAI,aAAa,SAAS;AACxB,YAAM,UAAU,aAAa,QAAQ,QAAQ,cAAc;AAC3D,UAAI,SAAS;AACX,eAAO,QAAQ,aAAa,YAAY;AAAA,MAC1C;AAAA,IACF;AAGA,WAAO,SAAS,gBAAgB,aAAa,YAAY;AAAA,EAC3D,GAAG,CAAC,CAAC;AAGL,+BAAU,MAAM;AACd,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAC,CAAC;AAGL,+BAAU,MAAM;AACd,QAAI,CAAC,UAAW;AAEhB,UAAM,aAAa,MAAM;AACvB,YAAM,YAAY,aAAa;AAC/B,YAAM,SACJ,cAAc,UACb,cAAc,QACb,OAAO,WAAW,8BAA8B,EAAE;AACtD,YAAM,WAAW,SAAS,kBAAkB;AAE5C,qBAAe,QAAQ;AAAA,IACzB;AAEA,eAAW;AAEX,UAAM,WAAW,IAAI,iBAAiB,MAAM;AAC1C,iBAAW;AAAA,IACb,CAAC;AACD,aAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,YAAY;AAAA,IAChC,CAAC;AAED,UAAM,aAAa,OAAO,WAAW,8BAA8B;AACnE,UAAMC,gBAAe,MAAM;AACzB,iBAAW;AAAA,IACb;AACA,eAAW,iBAAiB,UAAUA,aAAY;AAElD,WAAO,MAAM;AACX,eAAS,WAAW;AACpB,iBAAW,oBAAoB,UAAUA,aAAY;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,WAAW,YAAY,CAAC;AAK5B,+BAAU,MAAM;AACd,UAAM,SAAS,UAAU;AACzB,UAAM,YAAY,aAAa;AAE/B,QAAI,CAAC,UAAU,CAAC,UAAW;AAE3B,UAAM,iBAAiB,IAAI,eAAe,MAAM;AAE9C,4BAAsB,MAAM;AAC1B,eAAO,OAAO;AAAA,MAChB,CAAC;AAAA,IACH,CAAC;AAED,mBAAe,QAAQ,SAAS;AAEhC,WAAO,MAAM;AACX,qBAAe,WAAW;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,QAAM,mBAAe,sBAAsB,IAAI;AAC/C,QAAM,6BAAyB,sBAAO,mBAAmB;AACzD,yBAAuB,UAAU;AACjC,QAAM,kBAAc,sBAAO,QAAQ;AACnC,cAAY,UAAU;AACtB,QAAM,wBAAoB,sBAAO,cAAc;AAC/C,oBAAkB,UAAU;AAG5B,OAAK,cAAc,wBAAwB,CAAC,aAAa,SAAS;AAChE,iBAAa,UAAU,kBAAkB;AAAA,EAC3C;AAGA,+BAAU,MAAM;AACd,QAAI,CAAC,cAAc,CAAC,aAAa,QAAS;AAE1C,uBAAmB,aAAa,SAAS,UAAU;AAEnD,WAAO,MAAM;AACX,UAAI,aAAa,SAAS;AACxB,6BAAqB,aAAa,OAAO;AAAA,MAC3C;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,CAAC;AAGf,+BAAU,MAAM;AACd,QAAI,uBAAuB,aAAa,SAAS;AAC/C,6BAAuB,aAAa,SAAS,mBAAmB;AAChE,aAAO,MAAM;AACX,YAAI,aAAa,SAAS;AACxB,oCAA0B,aAAa,OAAO;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,mBAAmB,CAAC;AAExB,QAAM,eAAe,CAAC,UAA8B;AAClD,QAAI,YAAY,UAAU,QAAW;AACnC,eAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,WAA2C;AAC1E,cAAU,UAAU;AAGpB,mBAAe,MAAM;AAGrB,sBAAkB,MAAM;AACxB,uBAAmB,MAAM;AAEzB,QAAI,YAAY,SAAS,SAAS,GAAG;AACnC,4BAAsB,MAAM;AAE5B,YAAM,EAAE,kBAAAC,kBAAiB,IAAI,MAAM;AACnC,iBAAW,OAAO,UAAU;AAC1B,YAAI,QAAQ,kBAAkB;AAC5B,gBAAMA,kBAAiB,QAAQ,EAAE,SAAS,IAAI,CAAC,EAAE,MAAM,MAAM;AAAA,UAAC,CAAC;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,aAAa;AAC/B,UAAM,SACJ,cAAc,UACb,cAAc,QACb,OAAO,WAAW,8BAA8B,EAAE;AACtD,UAAM,YAAY,SAAS,kBAAkB;AAC7C,WAAO,OAAO,SAAS,SAAS;AAGhC,QAAI,aAAa,QAAQ;AACvB,gCAA0B,MAAM;AAAA,IAClC;AAGA,QAAI,aAAa;AACf,kBAAY,MAAM;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,eAAe;AAYrB,QAAM,oBAAoB,CAAC,iBAA+C;AACxE,cAAU,UAAU;AAGpB,QAAI,cAAc,aAAa,SAAS;AACtC,qBAAe,YAAY;AAAA,IAC7B;AAGA,QAAI,aAAa,UAAU,UAAU,SAAS;AAC5C,4BAAsB,QAAQ;AAAA,QAC5B,wBAAwB,cAAc,UAAU,OAAO;AAAA,MACzD;AAAA,IACF;AAGA,QAAI,aAAa,QAAQ;AACvB,uCAAiC;AACjC,4BAAsB,QAAQ;AAAA,QAC5B,yBAAyB,YAAY;AAAA,MACvC;AAAA,IACF;AAGA,QAAI,YAAY,WAAW,UAAU,SAAS;AAC5C,YAAM,iBAAiB,UAAU;AACjC,UAAI;AAEJ,YAAM,gBAAgB,MAAM;AAC1B,cAAM,QAAQ,aAAa,SAAS;AACpC,YAAI,CAAC,MAAO;AACZ,cAAM,OAAO,MAAM,SAAS;AAC5B,cAAM,KAAK,YAAY;AACvB,YAAI,CAAC,GAAI;AAET,cAAM,SAAS,GAAG,IAAI;AACtB,cAAM,YAAY,CAAC,GAAG,OAAO,QAAQ,GAAG,OAAO,QAAQ;AAEvD,uBAAe,OAAO;AAAA,UACpB;AAAA,UACA;AAAA,UACA,UAAU,IAAI,CAAC,WAAW;AAAA,YACxB,UAAU,MAAM,aAAa,UAAU,IAAI;AAAA,YAC3C,SAAS,MAAM;AAAA,YACf,iBAAiB,MAAM;AAAA,YACvB,aAAa,MAAM;AAAA,YACnB,eAAe,MAAM,WAAW,MAAM;AAAA,YACtC,WAAW,MAAM,aAAa,MAAM,SAAS;AAAA,UAC/C,EAAE;AAAA,QACJ;AAAA,MAGF;AAGA,oBAAc;AAGd,YAAM,qBAAqB,aAAa,wBAAwB,MAAM;AACpE,qBAAa,aAAa;AAC1B,wBAAgB,WAAW,eAAe,GAAG;AAAA,MAC/C,CAAC;AAED,4BAAsB,QAAQ,KAAK,MAAM;AACvC,qBAAa,aAAa;AAC1B,2BAAmB,QAAQ;AAAA,MAC7B,CAAC;AAAA,IACH;AAMA,QAAI,kBAAkB,WAAW,UAAU,SAAS;AAClD,YAAM,iBAAiB,UAAU;AACjC,YAAM,QAAQ,aAAa,SAAS;AACpC,YAAM,oBAAoB,CAAC,CAAC,YAAY;AACxC,UAAI,OAAO;AACT,cAAM,gBAAgB,MAAM;AAE1B,cAAI,mBAAmB;AACrB,2BAAe,OAAO,gBAAgB,OAAO,QAAQ,CAAC,CAAC;AAAA,UACzD;AACA,gBAAM,MAAM,eAAe,OAAO,gBAAgB;AAAA,YAChD,UAAU,MAAM;AAAA,UAClB,CAAC;AACD,cAAI,SAAS;AACb,cAAI,WAAW;AACf,gBAAM,UAKD,CAAC;AACN,qBAAW,KAAK,KAAK;AACnB,gBAAI,EAAE,aAAa,GAAG;AACpB;AACA,sBAAQ,KAAK;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,UAAU;AAAA,gBACV,MAAM,EAAE;AAAA,gBACR,QAAQ,EAAE;AAAA,cACZ,CAAC;AAAA,YACH,WAAW,EAAE,aAAa,GAAG;AAC3B;AACA,sBAAQ,KAAK;AAAA,gBACX,SAAS,EAAE;AAAA,gBACX,UAAU;AAAA,gBACV,MAAM,EAAE;AAAA,gBACR,QAAQ,EAAE;AAAA,cACZ,CAAC;AAAA,YACH;AAAA,UACF;AACA,4BAAkB,UAAU,EAAE,QAAQ,UAAU,SAAS,QAAQ,CAAC;AAAA,QACpE;AAEA,cAAM,mBAAmB,eAAe,OAAO;AAAA,UAC7C,CAAC,SAAS;AACR,gBAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,SAAS,MAAM,MAAM,IAAI,SAAS,CAAC,GAAG;AAC/D,4BAAc;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAGA,8BAAsB,aAAa;AAEnC,8BAAsB,QAAQ,KAAK,MAAM;AACvC,2BAAiB,QAAQ;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AAGA,0BAAsB,MAAM;AAC1B,mBAAa,OAAO;AAAA,IACtB,CAAC;AAED,QAAI,SAAS;AACX,cAAQ,YAAY;AAAA,IACtB;AAAA,EACF;AAGA,+BAAU,MAAM;AACd,WAAO,MAAM;AACX,iBAAW,WAAW,sBAAsB,SAAS;AACnD,gBAAQ;AAAA,MACV;AACA,4BAAsB,UAAU,CAAC;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,CAAC;AAML,QAAM,eACJ,cAAc,aAAa,UAAU,GAAG,gBAAgB,OAAO;AAGjE,QAAM,mBAAmB,CAAC,CAAC,cAAc,CAAC,CAAC,aAAa;AACxD,QAAM,gBACJ,YAAY,mBAAmB,0BAA0B,EAAE,IAAI,aAAa,EAAE,GAAG,KAAK;AAExF,SACE,6CAAC,SAAI,WAAW,eAAe,KAAK,cAClC;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM,aAAa,WAAW;AAAA,MAC9B,SAAS;AAAA,QACP,UAAU,YAAY,CAAC;AAAA,QACvB,iBAAiB,EAAE,OAAO,GAAG;AAAA,QAC7B,SAAS,EAAE,SAAS,QAAQ;AAAA,QAC5B;AAAA,QACA,YAAY,KAAK,MAAM,WAAW,GAAG;AAAA,QACrC,SAAS;AAAA,QACT,aAAa,cAAc,OAAO;AAAA,QAClC,qBAAqB;AAAA,QACrB,aAAa;AAAA,QACb;AAAA,QACA,sBAAsB;AAAA;AAAA,QACtB,sBAAsB;AAAA,QACtB,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,QACpB,UAAU,WAAW,OAAO;AAAA,QAC5B,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,QACpB,qBAAqB;AAAA,QACrB,6BAA6B,OAAO,aAAa,aAAa;AAAA,QAC9D,OAAO,EAAE,SAAS,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,oBAAoB;AAAA,QAC/D,gCAAgC;AAAA,QAChC,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,mCAAmC;AAAA,QACnC,QAAQ;AAAA,UACN,cAAc;AAAA,UACd,wBAAwB;AAAA,UACxB,4BAA4B;AAAA,UAC5B,aAAa;AAAA;AAAA,QACf;AAAA,QACA,WAAW;AAAA,UACT,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,yBAAyB;AAAA,QAC3B;AAAA;AAAA,QAEA,gBAAgB;AAAA;AAAA,QAChB,aAAa;AAAA;AAAA,QACb,aAAa;AAAA;AAAA,QACb,4BAA4B;AAAA;AAAA,QAC5B,oBAAoB;AAAA;AAAA,QACpB,sBAAsB;AAAA;AAAA,QACtB,qBAAqB;AAAA;AAAA,QACrB,sBAAsB;AAAA;AAAA,QACtB,kBACE,cAAc,sBACV,EAAE,SAAS,MAAM,OAAO,MAAM,UAAU,MAAM,IAC9C;AAAA,QACN,cAAc,EAAE,SAAS,OAAO;AAAA,MAClC;AAAA;AAAA,EACF,GACF;AAEJ;;;AJ1VY,IAAAC,sBAAA;AA5KL,SAAS,QAAQ;AAAA;AAAA,EAEtB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,WAAW;AAAA,EACX;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA,aAAa;AAAA;AAAA,EAEb;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA;AAAA,EAEA,oBAAoB;AAAA;AAAA,EAEpB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA;AAAA,EAEf;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAiB;AACf,QAAM,EAAE,SAAS,aAAa,GAAG,cAAc,IAAI;AACnD,QAAM,aAAS,yBAAU;AACzB,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAC1C,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,wBAAS,KAAK;AAChE,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS;AAAA,IACvC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,kBAAc,sBAAuB,IAAI;AAO/C,QAAM,CAAC,cAAc,eAAe,QAAI,wBAAS,EAAE,QAAQ,GAAG,UAAU,EAAE,CAAC;AAC3E,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAyB,CAAC,CAAC;AACrE,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAE1C,IAAI;AACN,QAAM,oBAAgB,sBAAuB,IAAI;AACjD,QAAM,wBAAoB,sBAA4C,IAAI;AAE1E,+BAAU,MAAM;AACd,QAAI,CAAC,qBAAqB,CAAC,eAAgB;AAC3C,UAAM,qBAAqB,CAAC,MAAkB;AAC5C,UACE,qBACA,YAAY,WACZ,CAAC,YAAY,QAAQ,SAAS,EAAE,MAAc,GAC9C;AACA,6BAAqB,KAAK;AAAA,MAC5B;AACA,UACE,kBACA,cAAc,WACd,CAAC,cAAc,QAAQ,SAAS,EAAE,MAAc,GAChD;AACA,0BAAkB,IAAI;AAAA,MACxB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,mBAAmB,cAAc,CAAC;AAGtC,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC,uBAAuB,cAAc,OAAO,CAAC,GAAG,MAAM;AAAA,EACxD;AAGA,QAAM,iBAAiB,uBAAuB;AAG9C,QAAM,sBAAkB;AAAA,IACtB,CAAC,UAAkB;AACjB,sBAAgB,KAAK;AACrB,oBAAc,KAAK;AAAA,IACrB;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAGA,QAAM,gBAAgB,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,cAAc;AAC/D,QAAM,cAAc,eAAe,QAAQ,QAAQ;AACnD,QAAM,kBAAkB,eAAe,YAAY;AAGnD,QAAM,YAAY,UAAU,SAAS;AAErC,QAAM,aAAa,YAAY;AAC7B,QAAI;AACF,YAAM,UAAU,UAAU,UAAU,WAAW;AAC/C,gBAAU,IAAI;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,CAAC,YAAY,YAAY,oBAAoB,OAAQ;AAEzD,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,WAAW;AACrC,YAAM,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC;AAChD,eAAS,SAAS;AAAA,IACpB,SAAS,GAAG;AAAA,IAEZ;AAAA,EACF;AAEA,QAAM,wBAAoB;AAAA,IACxB,CAAC,iBAA+C;AAC9C,wBAAkB,UAAU;AAC5B,oBAAc,YAAY;AAAA,IAC5B;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,yBAAqB;AAAA,IACzB,CAAC,SAAwE;AACvE,sBAAgB,EAAE,QAAQ,KAAK,QAAQ,UAAU,KAAK,SAAS,CAAC;AAChE,uBAAiB,KAAK,OAAO;AAC7B,2BAAqB,EAAE,QAAQ,KAAK,QAAQ,UAAU,KAAK,SAAS,CAAC;AAAA,IACvE;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEA,QAAM,iBAAa,2BAAY,CAAC,MAAc,WAAmB;AAC/D,UAAM,KAAK,kBAAkB;AAC7B,QAAI,CAAC,GAAI;AACT,OAAG,mBAAmB,IAAI;AAC1B,OAAG,YAAY,EAAE,YAAY,MAAM,OAAO,CAAC;AAC3C,OAAG,MAAM;AACT,sBAAkB,IAAI;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAgB;AAAA,IACpB,aAAa,SAAS;AAAA,IACtB,SAAS,SAAS;AAAA,IAClB,UAAU,SAAS;AAAA,IACnB,QAAQ,SAAS;AAAA,EACnB;AAGA,QAAM,UACJ,8CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,YAAY,SAAS,GAC7D;AAAA,iBAAa,SAAS,KACrB;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,mBAAmB,UAAU,gBAAgB;AAAA,QAClD,OAAO,EAAE,UAAU,WAAW;AAAA,QAE9B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,MACP,kBAAkB,mBAAmB,UAAU,OAAO,OAAO;AAAA,cAG/D;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,QAAO;AAAA,oBACP,aAAY;AAAA,oBAEZ;AAAA,mEAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK;AAAA,sBAC/B,6CAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK;AAAA,sBACpC,6CAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK;AAAA;AAAA;AAAA,gBACtC;AAAA,gBACA,6CAAC,UAAM,uBAAa,QAAO;AAAA;AAAA;AAAA,UAC7B;AAAA,UACC,mBAAmB,WAClB;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,cAAc,OAAO,CAAC,MAAM,EAAE,aAAa,OAAO;AAAA,cAC3D,QAAQ;AAAA;AAAA,UACV;AAAA;AAAA;AAAA,IAEJ;AAAA,IAED,aAAa,WAAW,KACvB;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,mBAAmB,YAAY,gBAAgB;AAAA,QACpD,OAAO,EAAE,UAAU,WAAW;AAAA,QAE9B;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS,MACP,kBAAkB,mBAAmB,YAAY,OAAO,SAAS;AAAA,cAGnE;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,QAAO;AAAA,oBACP,aAAY;AAAA,oBACZ,eAAc;AAAA,oBACd,gBAAe;AAAA,oBAEf;AAAA,mEAAC,UAAK,GAAE,uFAAsF;AAAA,sBAC9F,6CAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK;AAAA,sBACrC,6CAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK;AAAA;AAAA;AAAA,gBACjC;AAAA,gBACA,6CAAC,UAAM,uBAAa,UAAS;AAAA;AAAA;AAAA,UAC/B;AAAA,UACC,mBAAmB,aAClB;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,cAAc,OAAO,CAAC,MAAM,EAAE,aAAa,SAAS;AAAA,cAC7D,QAAQ;AAAA;AAAA,UACV;AAAA;AAAA;AAAA,IAEJ;AAAA,IAED,cAAc,CAAC,YAAY,oBAAoB,UAC9C;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAM;AAAA,QAEN;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA,YAEf;AAAA,2DAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAI;AAAA,cACnC,6CAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA,cACrC,6CAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA,cACrC,6CAAC,UAAK,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA;AAAA;AAAA,QACvC;AAAA;AAAA,IACF;AAAA,IAED,YACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAO,SAAS,YAAY;AAAA,QAE3B,mBACC;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA,YAEf,uDAAC,cAAS,QAAO,kBAAiB;AAAA;AAAA,QACpC,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAY;AAAA,YACZ,eAAc;AAAA,YACd,gBAAe;AAAA,YAEf;AAAA,2DAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,IAAG,KAAI;AAAA,cACvD,6CAAC,UAAK,GAAE,2DAA0D;AAAA;AAAA;AAAA,QACpE;AAAA;AAAA,IAEJ;AAAA,IAED,gBACC,8CAAC,SAAI,KAAK,aAAa,OAAO,EAAE,UAAU,WAAW,GACnD;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,mBAAmB,oBAAoB,YAAY,EAAE;AAAA,UAChE,SAAS,MAAM,qBAAqB,CAAC,iBAAiB;AAAA,UACtD,OAAM;AAAA,UAEN;AAAA,YAAC;AAAA;AAAA,cACC,OAAM;AAAA,cACN,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,gBAAe;AAAA,cAEf;AAAA,6DAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI;AAAA,gBAC9B,6CAAC,UAAK,GAAE,0mBAAymB;AAAA;AAAA;AAAA,UACnnB;AAAA;AAAA,MACF;AAAA,MACC,qBACC,8CAAC,SAAI,WAAU,wBACb;AAAA,sDAAC,WAAM,WAAU,+BACf;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,SAAS;AAAA,cAClB,UAAU,MACR,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,aAAa,CAAC,EAAE,YAAY,EAAE;AAAA;AAAA,UAE9D;AAAA,UAAE;AAAA,WAEJ;AAAA,QACA,8CAAC,WAAM,WAAU,+BACf;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,SAAS;AAAA,cAClB,UAAU,MACR,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE;AAAA;AAAA,UAEtD;AAAA,UAAE;AAAA,WAEJ;AAAA,QACA,8CAAC,WAAM,WAAU,+BACf;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,SAAS;AAAA,cAClB,UAAU,MACR,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,UAAU,CAAC,EAAE,SAAS,EAAE;AAAA;AAAA,UAExD;AAAA,UAAE;AAAA,WAEJ;AAAA,QACA,8CAAC,WAAM,WAAU,+BACf;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,SAAS;AAAA,cAClB,UAAU,MACR,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,QAAQ,CAAC,EAAE,OAAO,EAAE;AAAA;AAAA,UAEpD;AAAA,UAAE;AAAA,WAEJ;AAAA,SACF;AAAA,OAEJ;AAAA,KAEJ;AAIF,QAAM,kBAAkB,aAAa,yBAAyB;AAC9D,QAAM,eAAe,GAAG,eAAe,IAAI,aAAa,EAAE,GAAG,KAAK;AAGlE,QAAM,UAAU,MAAM,IAAI,CAAC,SAAS;AAAA,IAClC,IAAI,IAAI;AAAA,IACR,OAAO,IAAI;AAAA,IACX,SACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,IAAI;AAAA,QACV,UAAU,IAAI,YAAY;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,gBAAgB;AAAA,QACf,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ,EAAE;AAEF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,eAAe;AAAA,MACf;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,WAAW;AAAA,MACX,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MAGV,WAAC,QACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,QAAQ;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,UACT,gBAAgB;AAAA,UACf,GAAG;AAAA,UACH,GAAG;AAAA;AAAA,MACN;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AACF,GAGG;AACD,SACE,6CAAC,SAAI,WAAU,2BACZ,kBACE,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EACrD,IAAI,CAAC,GAAG,MACP;AAAA,IAAC;AAAA;AAAA,MAEC,WAAU;AAAA,MACV,SAAS,MAAM,OAAO,EAAE,MAAM,EAAE,MAAM;AAAA,MAEtC;AAAA,sDAAC,UAAK,WAAU,gCAA+B;AAAA;AAAA,UAAI,EAAE;AAAA,WAAK;AAAA,QAC1D,6CAAC,UAAK,WAAU,+BAA+B,YAAE,SAAQ;AAAA;AAAA;AAAA,IALpD;AAAA,EAMP,CACD,GACL;AAEJ;;;Ae7gBA,IAAAC,gBAMO;AAgND,IAAAC,sBAAA;AA3IC,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,oBAAoB;AAAA,EACpB,YAAY;AACd,GAAc;AACZ,QAAM,cAAU,sBAAuB,IAAI;AAC3C,QAAM,CAAC,eAAe,gBAAgB,QAAI,wBAAS,KAAK;AACxD,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAE1D,QAAM,CAAC,YAAY,aAAa,QAAI,wBAA8B,oBAAI,IAAI,CAAC;AAC3E,QAAM,mBAAe,sBAAO,CAAC;AAE7B,QAAM,eAAW,2BAAY,MAAM,aAAa,WAAW,CAAC,CAAC;AAE7D,QAAM,kBAAc,2BAAY,CAAC,IAAY,WAAmB;AAC9D,kBAAc,CAAC,SAAS;AACtB,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAK,IAAI,IAAI,MAAM;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,oBAAgB,2BAAY,CAAC,OAAe;AAChD,kBAAc,CAAC,SAAS;AACtB,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAK,OAAO,EAAE;AACd,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,mBAAe,uBAAQ,MAAM;AACjC,QAAI,cAAc,YAAY,WAAW,SAAS,EAAG,QAAO;AAC5D,WAAO,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,MAAM,KAAK,WAAW,OAAO,CAAC,CAAC,CAAC;AAAA,EACnE,GAAG,CAAC,YAAY,SAAS,CAAC;AAE1B,QAAM,mBAAuC;AAAA,IAC3C,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,cAAc;AAAA,IACzB;AAAA,IACA,CAAC,aAAa,eAAe,UAAU,cAAc,SAAS;AAAA,EAChE;AAEA,QAAM,aAAa,CAAC,mBAAmB;AACvC,QAAM,YAAiC,CAAC;AAGxC,MAAI,cAAc,QAAQ;AACxB,eAAW,KAAK,6BAA6B;AAAA,EAC/C,WAAW,cAAc,SAAS;AAChC,eAAW,KAAK,8BAA8B;AAAA,EAChD,WAAW,cAAc,UAAU;AACjC,eAAW,KAAK,+BAA+B;AAAA,EACjD,WAAW,OAAO,cAAc,UAAU;AAExC,IAAC,UAAqC,uBAAuB,IAC3D,GAAG,SAAS;AACd,IAAC,UAAqC,uBAAuB,IAC3D,GAAG,SAAS;AAAA,EAChB;AAGA,MAAI,WAAW;AACb,eAAW,KAAK,SAAS;AAAA,EAC3B;AAGA,MAAI,QAAQ,QAAW;AACrB,cAAU,MAAM,OAAO,QAAQ,WAAW,GAAG,GAAG,OAAO;AAAA,EACzD;AAGA,MAAI,gBAAgB,QAAW;AAC7B,IAAC,UAAqC,sBAAsB,IAC1D,OAAO,gBAAgB,WAAW,GAAG,WAAW,OAAO;AAAA,EAC3D;AAEA,MAAI,iBAAiB,QAAW;AAE9B,IAAC,UAAqC,uBAAuB,IAC3D,iBAAiB,SACb,SACA,OAAO,iBAAiB,WACtB,GAAG,YAAY,OACf;AAAA,EACV;AAGA,QAAM,wBAAoB,2BAAY,MAAM;AAC1C,UAAM,KAAK,QAAQ;AACnB,QAAI,CAAC,GAAI;AAET,UAAM,cAAc,GAAG,cAAc,GAAG;AACxC,UAAM,YAAY,GAAG,cAAc;AACnC,UAAM,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc;AAEnE,qBAAiB,eAAe,CAAC,SAAS;AAC1C,sBAAkB,eAAe,CAAC,OAAO;AAAA,EAC3C,GAAG,CAAC,CAAC;AAGL,QAAM,aAAa,MAAM;AACvB,QAAI,CAAC,QAAQ,QAAS;AACtB,UAAM,eAAe,QAAQ,QAAQ,cAAc;AACnD,YAAQ,QAAQ,SAAS,EAAE,MAAM,CAAC,cAAc,UAAU,SAAS,CAAC;AAAA,EACtE;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,QAAQ,QAAS;AACtB,UAAM,eAAe,QAAQ,QAAQ,cAAc;AACnD,YAAQ,QAAQ,SAAS,EAAE,MAAM,cAAc,UAAU,SAAS,CAAC;AAAA,EACrE;AAGA,+BAAU,MAAM;AACd,UAAM,KAAK,QAAQ;AACnB,QAAI,CAAC,MAAM,CAAC,kBAAmB;AAE/B,sBAAkB;AAElB,OAAG,iBAAiB,UAAU,iBAAiB;AAC/C,WAAO,iBAAiB,UAAU,iBAAiB;AAEnD,WAAO,MAAM;AACX,SAAG,oBAAoB,UAAU,iBAAiB;AAClD,aAAO,oBAAoB,UAAU,iBAAiB;AAAA,IACxD;AAAA,EACF,GAAG,CAAC,mBAAmB,iBAAiB,CAAC;AAEzC,SACE,6CAAC,kBAAkB,UAAlB,EAA2B,OAAO,cACjC,wDAAC,SAAI,WAAU,0CACZ;AAAA,yBAAqB,iBACpB;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,cAAW;AAAA,QACX,MAAK;AAAA,QACN;AAAA;AAAA,IAED;AAAA,IAGF,6CAAC,SAAI,KAAK,SAAS,WAAW,WAAW,KAAK,GAAG,GAAG,OAAO,WACxD,UACH;AAAA,IAEC,qBAAqB,kBACpB;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,cAAW;AAAA,QACX,MAAK;AAAA,QACN;AAAA;AAAA,IAED;AAAA,KAEJ,GACF;AAEJ;;;ACnPA,kBAA+C;AAexC,SAAS,oBACd,OACA,iBAAiB,8BACT;AACR,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,SAAO,MACJ,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM;AACvB,UAAM,eAAe,KAAK,KAAK,SAAS,CAAC;AACzC,UAAM,gBAAgB,KACnB,IAAI,CAAC,QAAQ;AACZ,UAAI,OAAO,QAAQ,SAAU,QAAO,IAAI,GAAG;AAC3C,UAAI,OAAO,QAAQ,YAAY,QAAQ;AACrC,eAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACpC,aAAO,OAAO,GAAG;AAAA,IACnB,CAAC,EACA,KAAK,IAAI;AACZ,WAAO,GAAG,YAAY,IAAI,aAAa;AAAA,EACzC,CAAC,EACA,KAAK,MAAM;AAChB;AAsBO,SAAS,uBACd,aACA,gBACA;AACA,SAAO,OAAO,YAAkD;AAC9D,QAAI,CAAC,YAAY,MAAM;AACrB,aAAO;AAAA,IACT;AAEA,UAAM,QAAoD,CAAC;AAG3D,UAAM,cAAU;AAAA,MACb,kBAAkB,CAAC;AAAA,MACpB,CAAC,MAAM,SAAS;AACd,cAAM,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,MAC3B;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,EAAE,GAAG,SAAS,KAAK,QAAQ,CAAwB;AAE1E,WAAO,oBAAoB,OAAO,sCAAsC;AAAA,EAC1E;AACF;AAwBO,SAAS,uBACd,aACA,gBACA;AACA,SAAO,OACL,OACA,YACoB;AACpB,UAAM,QAAoD,CAAC;AAG3D,UAAM,cAAU;AAAA,MACb,kBAAkB,CAAC;AAAA,MACpB,CAAC,MAAM,SAAS;AACd,cAAM,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,MAC3B;AAAA,IACF;AAGA,UAAM,YAAY,KAAK,OAAO,EAAE,GAAG,SAAS,KAAK,QAAQ,CAAC;AAE1D,WAAO,oBAAoB,KAAK;AAAA,EAClC;AACF;AAeO,SAAS,iBAAiB,gBAAyB;AACxD,QAAM,QAAoD,CAAC;AAE3D,QAAM,cAAU;AAAA,IACb,kBAAkB,CAAC;AAAA,IACpB,CAAC,MAAM,SAAS;AACd,YAAM,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,UAAU,MAAM;AAAA,EAClB;AACF;;;AjBGI,IAAAC,sBAAA;AAjGG,SAAS,gBACd,QACA,WACA;AACA,SAAO,IAAI,SAAoB;AAC7B,UAAM,gBAAgB,KACnB,IAAI,CAAC,QAAQ;AACZ,UAAI,OAAO,QAAQ,SAAU,QAAO,IAAI,GAAG;AAC3C,aAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,IACpC,CAAC,EACA,KAAK,IAAI;AAEZ,cAAU,GAAG,MAAM,IAAI,aAAa,IAAI;AAAA,EAC1C;AACF;AAEO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA,EACP,SAAS,iBAAiB,CAAC;AAAA,EAC3B;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd;AACF,GAAyB;AACvB,QAAM,CAAC,YAAY,aAAa,QAAI;AAAA,IAClC,KAAK,UAAU,cAAc,MAAM,CAAC;AAAA,EACtC;AACA,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC,OAAO,mBAAmB,WACtB,iBACA,KAAK,UAAU,gBAAgB,MAAM,CAAC;AAAA,EAC5C;AACA,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,EAAE;AAEvC,QAAM,yBAAqB,2BAAY,YAAY;AACjD,cAAM;AAAA,MACJ,YAAY;AACV,cAAM,YAAY,KAAK,MAAM,UAAU;AACvC,cAAM,cAAc,KAAK,MAAM,YAAY;AAC3C,cAAM,YAAQ,0BAAY,SAAS;AAGnC,cAAM,iBACJ,WAAW,cAAc,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,IAAI;AAG3D,cAAM,SAA6B;AAAA,UACjC,UAAU,YAAY,CAAC;AAAA,UACvB,SAAS;AAAA,QACX;AAGA,cAAM,EAAE,UAAU,IAAI,UAAM,4BAAU,CAAC,CAAC;AAGxC,cAAM,YAAY,UAAM,kCAAoB,OAAO,QAAQ,SAAS;AAGpE,cAAM,UAAmC;AAAA,UACvC,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,UACA,MAAM,UAAU;AAAA,UAChB,KAAK,YAAY,OAAO,CAAC;AAAA,UACzB,QAAQ,UAAU;AAAA,QACpB;AAGA,YAAI,IAAI;AACN,gBAAMC,UAAS,MAAM,GAAG,UAAU,OAAO,OAAO;AAChD,oBAAUA,OAAM;AAChB;AAAA,QACF;AAGA,cAAM,iBACJ,YACA,UAAU,KAAK;AAGjB,cAAM,YAAY,uBAAuB,aAAa,cAAc;AACpE,cAAM,SAAS,MAAM,UAAU,UAAU,OAAO,OAAO;AACvD,kBAAU,MAAM;AAAA,MAClB;AAAA,MACA,CAAC,UAAU,UAAU,UAAU,KAAK,EAAE;AAAA,IACxC,EAAE;AAAA,EACJ,GAAG,CAAC,YAAY,cAAc,aAAa,UAAU,SAAS,EAAE,CAAC;AAEjE,+BAAU,MAAM;AACd,UAAM,YAAY,WAAW,oBAAoB,GAAG;AACpD,WAAO,MAAM,aAAa,SAAS;AAAA,EACrC,GAAG,CAAC,kBAAkB,CAAC;AAEvB,SACE,8CAAC,QAAK,SAAS,GAAG,WAAU,UAC1B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAS;AAAA,QACT,YAAU;AAAA,QACV,YAAU;AAAA;AAAA,IACZ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAS;AAAA,QACT,YAAU;AAAA,QACV,YAAU;AAAA;AAAA,IACZ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAQ;AAAA,QACR,UAAS;AAAA,QACT,YAAU;AAAA;AAAA,IACZ;AAAA,KACF;AAEJ;;;AkBzLA,IAAAC,iBAAwD;AAExD,IAAAC,eAA8B;AAC9B,IAAAC,oBAA0B;AAiGtB,IAAAC,sBAAA;AA5DG,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA,UAAU,kBAAkB,CAAC;AAAA,EAC7B,gBAAgB;AAAA,EAChB,cAAc;AAChB,GAA6B;AAC3B,QAAM,CAAC,eAAe,gBAAgB,QAAI;AAAA,IACxC,OAAO,oBAAoB,WACvB,kBACA,KAAK,UAAU,iBAAiB,MAAM,CAAC;AAAA,EAC7C;AACA,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,EAAE;AAEvC,QAAM,kBAAc,4BAAY,YAAY;AAC1C,cAAM;AAAA,MACJ,YAAY;AACV,cAAM,eAAe,KAAK,MAAM,aAAa;AAG7C,cAAM,SAA6B;AAAA,UACjC,UAAU;AAAA,QACZ;AAGA,cAAM,EAAE,UAAU,IAAI,UAAM,6BAAU,CAAC,CAAC;AAGxC,cAAM,UAA+B;AAAA,UACnC,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,UACA,KAAK,YAAY,OAAO,CAAC;AAAA,UACzB,QAAQ,UAAU;AAAA,QACpB;AAEA,YAAI,CAAC,YAAY,MAAM;AACrB,oBAAU,6CAA6C;AACvD;AAAA,QACF;AAGA,cAAM,iBACJ,YACA,UAAU,KAAK;AAGjB,cAAM,YAAY,uBAAuB,aAAa,cAAc;AACpE,cAAM,SAAS,MAAM,UAAU,OAAO;AACtC,kBAAU,MAAM;AAAA,MAClB;AAAA,MACA,CAAC,UAAU,UAAU,UAAU,KAAK,EAAE;AAAA,IACxC,EAAE;AAAA,EACJ,GAAG,CAAC,eAAe,WAAW,CAAC;AAE/B,gCAAU,MAAM;AACd,UAAM,YAAY,WAAW,aAAa,GAAG;AAC7C,WAAO,MAAM,aAAa,SAAS;AAAA,EACrC,GAAG,CAAC,WAAW,CAAC;AAEhB,SACE,8CAAC,QAAK,SAAS,GAAG,WAAU,UAC1B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAS;AAAA,QACT,YAAU;AAAA,QACV,YAAU;AAAA;AAAA,IACZ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAQ;AAAA,QACR,UAAS;AAAA,QACT,YAAU;AAAA;AAAA,IACZ;AAAA,KACF;AAEJ;;;ACtHA,IAAAC,iBAMO;AAEP,IAAAC,oBAA0B;;;ACR1B,IAAAC,iBAAgE;AAEhE,gCAGO;;;AC4CC,IAAAC,sBAAA;AAnCR,IAAM,iBAAwC;AAAA,EAC5C,EAAE,MAAM,WAAW,OAAO,WAAW,gBAAgB,oBAAoB;AAAA,EACzE,EAAE,MAAM,UAAU,OAAO,UAAU,gBAAgB,mBAAmB;AAAA,EACtE,EAAE,MAAM,YAAY,OAAO,YAAY,gBAAgB,qBAAqB;AAAA,EAC5E,EAAE,MAAM,UAAU,OAAO,UAAU,gBAAgB,mBAAmB;AACxE;AAsBO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAAuB;AACrB,SACE,6CAAC,SAAI,WAAU,sBACZ,kBAAQ,IAAI,CAAC,WACZ;AAAA,IAAC;AAAA;AAAA,MAEC,WAAW,mBACT,WAAW,IAAI,OAAO,IAAI,IAAI,OAAO,iBAAiB,EACxD;AAAA,MACA,SAAS,MAAM,SAAS,OAAO,IAAI;AAAA,MACnC,MAAK;AAAA,MAEJ,iBAAO;AAAA;AAAA,IAPH,OAAO;AAAA,EAQd,CACD,GACH;AAEJ;;;ADwNQ,IAAAC,sBAAA;AAhPD,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA,QAAQ;AACV,GAAiB;AACf,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAsB,oBAAI,IAAI,CAAC;AACnE,QAAM,gBAAY,uBAA0B,IAAI;AAChD,QAAM,uBAAmB,uBAAmC,MAAS;AACrE,QAAM,aAAS,uBAAO,GAAG;AACzB,QAAM,gBAAY,uBAA4B,IAAI;AAGlD,gCAAU,MAAM;AACd,WAAO,UAAU;AAAA,EACnB,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,kBAAkB,CAAC,SAAiB;AACxC,kBAAc,CAAC,SAAS;AACtB,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,UAAI,KAAK,IAAI,IAAI,GAAG;AAClB,aAAK,OAAO,IAAI;AAAA,MAClB,OAAO;AACL,aAAK,IAAI,IAAI;AAAA,MACf;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,yBAAqB;AAAA,IACzB,CAAC,cAAsC;AACrC,YAAM,WAAW,UAAU,iBAAiB,YAAY;AACxD,eAAS,QAAQ,CAAC,WAAW;AAC3B,cAAM,aAAa,OAAO,aAAa,UAAU;AACjD,YAAI,CAAC,WAAY;AAEjB,cAAM,mBAAmB,aAAa,UAAU;AAChD,eAAO,iBAAiB,gBAAgB,EAAE,QAAQ,CAAC,OAAO;AACxD,aAAG,aAAa,oBAAoB,EAAE;AAAA,QACxC,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EACH;AAEA,gCAAU,MAAM;AACd,QAAI,iBAAiB,SAAS;AAC5B,mBAAa,iBAAiB,OAAO;AAAA,IACvC;AAEA,qBAAiB,UAAU,WAAW,MAAM;AAC1C,YAAM,SAAS,UAAU;AACzB,UAAI,CAAC,UAAU,CAAC,OAAO,gBAAiB;AAExC,YAAM,MAAM,OAAO;AACnB,YAAM,mBAAmB,MAAM,KAAK,UAAU,EAC3C,IAAI,CAAC,SAAS,aAAa,IAAI,EAAE,EACjC,KAAK,GAAG;AAEX,UAAI,KAAK;AACT,UAAI,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAuBA,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAyCoB,gBAAgB;AAAA,cACzC,IAAI;AAAA;AAAA;AAAA,OAGX;AACD,UAAI,MAAM;AAEV,yBAAmB,GAAG;AAGtB,UAAI,OAAO,WAAW,OAAO,iBAAiB,OAAO,iBAAiB;AACpE,mBAAW,YAAY;AAErB,cAAI,UAAU,SAAS;AACrB,gBAAI;AACF,oBAAM,UAAU,QAAQ,SAAS;AAAA,gBAC/B,UAAU,QAAQ;AAAA,cACpB;AAAA,YACF,QAAQ;AAAA,YAER;AAAA,UACF;AAEA,cAAI;AACF,gBACE,CAAC,OAAO,iBACR,CAAC,OAAO,mBACR,CAAC,OAAO,SACR;AACA;AAAA,YACF;AAGA,kBAAM,mBAAmB,OAAwB;AAAA,cAC/C,OAAO,MAAM;AAAA,cAAC;AAAA,cACd,MAAM,MAAM;AAAA,cAAC;AAAA,cACb,MAAM,MAAM;AAAA,cAAC;AAAA,cACb,OAAO,MAAM;AAAA,cAAC;AAAA,cACd,MAAM,MAAM;AAAA,cAAC;AAAA,cACb,OAAO,CAAC,QAA+B;AACrC,sBAAM,eAAe,QAAQ,MAAM,IAAI,MAAM,GAAG;AAAA,cAClD;AAAA,cACA,OAAO,MAAM,iBAAiB;AAAA,YAChC;AACA,kBAAM,aAAa,iBAAiB;AAGpC,kBAAM,WAA6B,aAAa;AAAA,cAC9C,IAAI;AAAA,cACJ,aAAa,CAAC;AAAA,YAChB;AAIA,kBAAM,SAA+B;AAAA,cACnC,UAAU;AAAA,gBACR,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,KAAK;AAAA,gBACL,UAAU;AAAA;AAAA;AAAA,gBAGV,OAAO,OAAO,gBAAgB;AAAA,cAChC;AAAA,YACF;AACA,kBAAM,MAAyB;AAAA,cAC7B,KAAK,OAAO;AAAA,cACZ,MAAM;AAAA,cACN,SAAS,aAAa,EAAE,IAAI,MAAM,aAAa,CAAC,EAAE;AAAA,cAClD,QAAQ;AAAA,cACR,QAAQ,OAAO;AAAA,cACf,UAAU,OAAO;AAAA,YACnB;AAEA,kBAAM,WAAW,UAAM,yCAAc;AAAA,cACnC,IAAI;AAAA,cACJ,WAAW,CAAC;AAAA;AAAA,cACZ,QAAQ;AAAA,cACR,WAAW,YAAY;AAAA,cAAC;AAAA,cACxB,YAAY,MAAM;AAAA,cAAC;AAAA,cACnB;AAAA,cACA;AAAA,YACF,CAAC;AAED,sBAAU,UAAU;AAAA,cAClB;AAAA,cACA,gBAAgB;AAAA,gBACd,IAAI;AAAA,gBACJ;AAAA,gBACA;AAAA,gBACA,QAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF,GAAG,EAAE;AAAA,MACP;AAAA,IACF,GAAG,GAAG;AAEN,WAAO,MAAM;AACX,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AAAA,MACvC;AAGA,UAAI,UAAU,SAAS;AACrB,kBAAU,QAAQ,SAAS,UAAU,UAAU,QAAQ,cAAc;AAAA,MACvE;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,YAAY,oBAAoB,GAAG,CAAC;AAEnD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,QACE,6CAAC,iBAAc,YAAwB,UAAU,iBAAiB;AAAA,MAGpE,uDAAC,SAAI,WAAU,uBACb;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAU;AAAA,UACV,OAAM;AAAA;AAAA,MACR,GACF;AAAA;AAAA,EACF;AAEJ;;;AElSA,IAAAC,iBAAyC;;;ACsBrC,IAAAC,uBAAA;AAPG,SAAS,OAAO;AAAA,EACrB,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAAgB;AACd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,oBAAoB,SAAS,WAAW,EAAE,IAAI,SAAS;AAAA,MAClE;AAAA,MACA,MAAK;AAAA,MAEJ;AAAA;AAAA,EACH;AAEJ;;;ACHQ,IAAAC,uBAAA;AARD,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAAqB;AACnB,SACE,8CAAC,SAAI,WAAW,6BAA6B,SAAS,IACnD,kBAAQ,IAAI,CAAC,WACZ;AAAA,IAAC;AAAA;AAAA,MAEC,QAAQ,OAAO;AAAA,MACf,SAAS,MAAM,cAAc,OAAO,KAAK;AAAA,MAExC,iBAAO;AAAA;AAAA,IAJH,OAAO;AAAA,EAKd,CACD,GACH;AAEJ;;;AF8EU,IAAAC,uBAAA;AA/EH,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AACb,GAAoB;AAElB,QAAM,oBAAgB,wBAAQ,MAAM;AAClC,UAAM,OAAgD,CAAC;AACvD,QAAI,eAAe,SAAS;AAC1B,WAAK,KAAK,EAAE,OAAO,WAAW,OAAO,UAAU,CAAC;AAClD,QAAI,SAAS,OAAW,MAAK,KAAK,EAAE,OAAO,QAAQ,OAAO,OAAO,CAAC;AAClE,QAAI,QAAQ,OAAW,MAAK,KAAK,EAAE,OAAO,OAAO,OAAO,MAAM,CAAC;AAC/D,QAAI,OAAO,OAAW,MAAK,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,CAAC;AAC5D,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,KAAK,IAAI,WAAW,CAAC;AAG/B,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAiB,MAAM;AACvD,QAAI,cAAc,cAAc,KAAK,CAAC,MAAM,EAAE,UAAU,UAAU,GAAG;AACnE,aAAO;AAAA,IACT;AACA,WAAO,cAAc,CAAC,GAAG,SAAS;AAAA,EACpC,CAAC;AAGD,QAAM,EAAE,SAAS,UAAU,SAAS,QAAI,wBAAQ,MAAM;AACpD,YAAQ,WAAW;AAAA,MACjB,KAAK;AACH,eAAO;AAAA,UACL,SAAS,QAAQ;AAAA,UACjB,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,SAAS,OAAO;AAAA,UAChB,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,MACF;AACE,eAAO;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,IACJ;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,KAAK,IAAI,cAAc,aAAa,UAAU,CAAC;AAGpE,QAAM,cAAU;AAAA,IACd,MACE,cAAc,IAAI,CAAC,SAAS;AAAA,MAC1B,OAAO,IAAI;AAAA,MACX,OAAO,IAAI;AAAA,MACX,QAAQ,cAAc,IAAI;AAAA,IAC5B,EAAE;AAAA,IACJ,CAAC,eAAe,SAAS;AAAA,EAC3B;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,eACE,cAAc,SAAS,IACrB,8CAAC,eAAY,SAAkB,eAAe,cAAc,IAC1D;AAAA,MAEN;AAAA,MAEC,wBAAc,YACb,8CAAC,WAAQ,MAAM,QAAQ,IAAI,KAAK,OAAO,IAAI,IAE3C;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,UAAU,CAAC;AAAA,UACX;AAAA,UACA;AAAA;AAAA,MACF;AAAA;AAAA,EAEJ;AAEJ;;;AGvHO,SAAS,wBAAyC;AACvD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,CAAC;AAAA,IACT,KAAK,OAAO,SAAS;AACnB,YAAM,EAAE,MAAM,IAAI,IAAI;AAEtB,YAAM,YAAY,kBAAkB,MAAM,IAAI,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AACjF,UAAI,IAAI,SAAS;AAAA,IACnB;AAAA,EACF;AACF;AAMO,SAAS,uBAAwC;AACtD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,CAAC;AAAA,IACT,KAAK,OAAO,SAAS;AACnB,YAAM,EAAE,MAAM,IAAI,IAAI;AAEtB,YAAM,YAAY,iBAAiB,MAAM,IAAI,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAChF,UAAI,IAAI,SAAS;AAAA,IACnB;AAAA,EACF;AACF;AAMO,SAAS,6BAA8C;AAC5D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,CAAC;AAAA,IACT,KAAK,OAAO,SAAS;AACnB,YAAM,EAAE,MAAM,IAAI,IAAI;AAEtB,YAAM,YAAY,cAAc,MAAM,IAAI,eAAe,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AACtF,UAAI,IAAI,SAAS;AAAA,IACnB;AAAA,EACF;AACF;;;ANmWI,IAAAC,uBAAA;AAhYJ,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CpB,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqKnB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDhB,SAAS,oBAAoB;AAAA,EAClC,cAAc;AAAA,EACd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,aAAa;AACf,GAA6B;AAG3B,QAAM,kBAAc;AAAA,IAClB,MAAM,mBAAmB,sBAAsB;AAAA,IAC/C,CAAC,eAAe;AAAA,EAClB;AACA,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,WAAW;AAC5C,QAAM,CAAC,KAAK,MAAM,QAAI,yBAAS,UAAU;AACzC,QAAM,CAAC,IAAI,KAAK,QAAI,yBAAS,SAAS;AACtC,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,cAAc;AAC/D,QAAM,CAAC,WAAW,YAAY,QAAI;AAAA,IAChC;AAAA,EACF;AACA,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,mBAAe,uBAAkC,IAAI;AAC3D,QAAM,aAAS,uBAAsB,IAAI;AACzC,QAAM,mBAAe,uBAA8B,IAAI;AACvD,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAG5C,gCAAU,MAAM;AACd,QAAI,UAAU;AAEd,UAAM,OAAO,YAAY;AACvB,UAAI;AACF,cAAM,gBAAgB,KAAK,MAAM,cAAc;AAE/C,cAAM,EAAE,WAAW,IAAI,IAAI,UAAM,6BAAU;AAAA,UACzC,cAAc;AAAA;AAAA,YAEZ,YAAY;AAAA,cACV,MAAM;AAAA,gBACJ,MAAM;AAAA,gBACN,QAAQ,CAAC;AAAA,gBACT,MAAM,OAAO,UAA0B;AACrC,sBAAI,CAAC,QAAS;AACd,+BAAa,UAAU;AACvB,+BAAa,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,gBAC7C;AAAA,cACF;AAAA,YACF;AAAA;AAAA,YAEA,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,QAAQ;AAAA,gBACN,SAAS;AAAA,cACX;AAAA,cACA,KAAK;AAAA,gBACH,KAAK,CAAC,WAAmB;AACvB,sBAAI,CAAC,QAAS;AACd,kCAAgB,MAAM;AAAA,gBACxB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,SAAS,EAAE,YAAY,MAAM,WAAW,KAAK;AAAA,UAC7C,MAAM,EAAE,SAAS,aAAa;AAAA,QAChC,CAAC;AAED,YAAI,CAAC,QAAS;AAEd,qBAAa,UAAU;AACvB,eAAO,UAAU;AACjB,mBAAW,IAAI;AAAA,MACjB,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,SAAK;AAEL,WAAO,MAAM;AACX,gBAAU;AAEV,UAAI,aAAa,SAAS;AAAA,MAE1B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,gBAAgB,WAAW,CAAC;AAGhC,QAAM,0BAAsB,4BAAY,CAAC,eAAuB;AAC9D,oBAAgB,UAAU;AAG1B,UAAM,YAAY,WAAW,MAAM;AACjC,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,UAAU;AAEpC,YAAI,aAAa,SAAS,cAAc,MAAM,QAAQ;AACpD,uBAAa,QAAQ,aAAa,KAAK,OAAO,UAAU;AAAA,QAC1D;AAEA,YAAI,aAAa,WAAW,aAAa,SAAS;AAChD,uBAAa,QAAQ,KAAK,aAAa,OAAO;AAAA,QAChD;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF,GAAG,GAAG;AAEN,WAAO,MAAM,aAAa,SAAS;AAAA,EACrC,GAAG,CAAC,CAAC;AAEL,SACE,+CAAC,QAAK,SAAS,GAAG,WAAW,KAE3B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,YAAW;AAAA,QACX,aAAa;AAAA,QACb,UAAQ;AAAA;AAAA,IACV;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,KAAK,UAAW,OAAO,WAAW,SAAa;AAAA;AAAA,IACjD;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAS;AAAA,QACT,UAAQ;AAAA;AAAA,IACV;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,UAAS;AAAA,QACT,UAAQ;AAAA;AAAA,IACV;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAS;AAAA,QACT,UAAQ;AAAA,QACR,UAAQ;AAAA;AAAA,IACV;AAAA,KACF;AAEJ;;;AOndA,IAAAC,iBAAiD;AAEjD,IAAAC,eAAkD;;;ACFlD,IAAAC,YAA0B;AAC1B,IAAAC,gBAA0B;AAC1B,IAAAC,iBAA2B;AAC3B,IAAAC,qBAA+B;AAC/B,IAAAC,eAAyB;AASzB,eAAsB,WACpB,MACA,UACiB;AACjB,MAAI;AACF,QAAI;AAEJ,YAAQ,UAAU;AAAA,MAChB,KAAK;AAAA,MACL,KAAK,MAAM;AAGT,cAAM,eACJ,KAAK,UAAU,EAAE,WAAW,GAAG,KAAK,KAAK,SAAS,IAAI;AACxD,cAAM,QAAQ,eAAe,IAAI,IAAI,MAAM;AAC3C,oBAAY,MAAe,iBAAO,OAAO;AAAA,UACvC,QAAQ;AAAA,UACR,SAAS,CAAC,cAAAC,SAAe,eAAAC,OAAc;AAAA,UACvC,MAAM;AAAA,UACN,aAAa;AAAA,UACb,eAAe;AAAA,QACjB,CAAC;AACD,YAAI,cAAc;AAEhB,sBAAY,UAAU,QAAQ,OAAO,EAAE,EAAE,QAAQ,YAAY,EAAE;AAAA,QACjE;AACA;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,oBAAY,MAAe,iBAAO,MAAM;AAAA,UACtC,QAAQ;AAAA,UACR,SAAS,CAAC,mBAAAC,SAAoB,eAAAD,OAAc;AAAA,UAC5C,MAAM;AAAA,UACN,aAAa;AAAA,UACb,eAAe;AAAA,QACjB,CAAC;AACD;AAAA,MAEF,KAAK;AAEH,cAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,oBAAY,KAAK,UAAU,QAAQ,MAAM,CAAC;AAC1C;AAAA,MAEF,KAAK;AACH,oBAAY,MAAe,iBAAO,MAAM;AAAA,UACtC,QAAQ;AAAA,UACR,SAAS,CAAC,aAAAE,OAAY;AAAA,UACtB,2BAA2B;AAAA,QAC7B,CAAC;AACD;AAAA,MAEF,KAAK;AAAA,MACL,KAAK;AACH,oBAAY,MAAe,iBAAO,MAAM;AAAA,UACtC,QAAQ;AAAA,UACR,SAAS,CAAC,aAAAA,OAAY;AAAA,QACxB,CAAC;AACD;AAAA,MAEF;AAEE,eAAO;AAAA,IACX;AAGA,WAAO,UAAU,KAAK;AAAA,EACxB,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;;;ADsBI,IAAAC,uBAAA;AA3EJ,SAAS,YAAY,OAAgB,UAAgC,CAAC,GAAG;AACvE,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,UAAM,uBAAS,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC;AAC1E,SAAO,QAAQ,cAAU,uBAAS,KAAK,IAAI,IAAI,GAAG,MAAM;AAC1D;AAEO,SAAS,SAAS;AAAA,EACvB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ,aAAa;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb;AAAA,EACA,WAAW;AAAA,EACX,QAAAC,UAAS;AAAA,EACT;AACF,GAAkB;AAChB,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,YAAY,SAAS,CAAC;AACzD,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,YAAY,UAAU,CAAC;AAC5D,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,CAAC,YAAY,UAAU,CAAC,CAAC;AAG9D,gCAAU,MAAM;AACd,QAAIA,WAAU,WAAW;AACvB,YAAM,WAAW,YAAY,SAAS;AACtC,iBAAW,UAAU,QAAQ,EAAE,KAAK,QAAQ;AAAA,IAC9C;AAAA,EACF,GAAG,CAAC,WAAW,UAAUA,OAAM,CAAC;AAGhC,gCAAU,MAAM;AACd,QAAIA,WAAU,YAAY;AACxB,YAAM,YAAY,YAAY,UAAU;AACxC,iBAAW,WAAW,QAAQ,EAAE,KAAK,SAAS;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,YAAY,UAAUA,OAAM,CAAC;AAEjC,QAAM,UAAM;AAAA,IACV,IAAI,SAAoB;AACtB,YAAM,SAAS,KACZ,IAAI,CAAC,QAAQ,YAAY,KAAK,EAAE,QAAQ,WAAW,CAAC,CAAC,EACrD,KAAK,IAAI;AACZ,gBAAU,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,MAAM,MAAM,CAAC;AAAA,IACtD;AAAA,IACA,CAAC,QAAQ,UAAU;AAAA,EACrB;AAEA,QAAM,mBAAe;AAAA,QACnB;AAAA,MACE,OAAO,UAAkB,WAAmB,SAA6B;AACvE,YAAI,CAAC,GAAI;AACT,kBAAU,CAAC,CAAC;AACZ,kBAAM,4BAAc,IAAI,CAAC,MAAM;AAC7B,oBAAU,CAAC,UAAU,OAAO,CAAC,CAAC,EAAE,CAAC;AAAA,QACnC,CAAC,EAAE,UAAU,WAAW,KAAK,IAAI;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,IAAI,GAAG;AAAA,EACV;AAEA,gCAAU,MAAM;AACd,iBAAa,OAAO,QAAQ,WAAW,CAAC,CAAC;AAAA,EAC3C,GAAG,CAAC,OAAO,QAAQ,SAAS,YAAY,CAAC;AAEzC,SACE,+CAAC,QAAK,SAAS,GAAG,WAAsB,WACtC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU,eAAe,SAAY;AAAA,QACrC,UAAU;AAAA,QACV;AAAA,QACA,YAAY,CAAC,gBAAgB,aAAa;AAAA;AAAA,IAC5C;AAAA,IAEC,UACC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU,gBAAgB,SAAY;AAAA,QACtC,UAAU;AAAA,QACV;AAAA,QACA,YAAY,CAAC,iBAAiB,aAAa;AAAA;AAAA,IAC7C;AAAA,IAGF;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,QACP,MAAM,OAAO,CAAC,KAAK;AAAA,QACnB,UAAQ;AAAA,QACR;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AEzIA,IAAAC,iBAA2C;AAC3C,IAAAC,oBAA0B;AAwEtB,IAAAC,uBAAA;AA9CG,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,WAAW;AACb,GAAsB;AACpB,QAAM,CAAC,QAAQ,SAAS,QAAI;AAAA,IAC1B;AAAA,EACF;AAEA,gCAAU,MAAM;AACd,KAAC,YAAY;AACX,UAAI;AAEF,cAAM,WAAW,KAAK,MAAM,KAAK;AACjC,cAAM,aAAa,KAAK,MAAM,OAAO;AAGrC,cAAM,EAAE,UAAU,IAAI,UAAM,6BAAU;AAAA,UACpC,cAAc;AAAA,YACZ,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,QAAQ;AAAA,gBACN,SAAS;AAAA,cACX;AAAA,cACA,KAAK;AAAA,gBACH,KAAK;AAAA,cACP;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAGD,cAAM,UAAU,KAAK,QAAQ;AAAA,MAC/B,SAAS,OAAO;AACd,YAAI,iBAAiB,OAAO;AAC1B,oBAAU,aAAa,MAAM,OAAO,EAAE;AAAA,QACxC,OAAO;AACL,oBAAU,aAAa,OAAO,KAAK,CAAC,EAAE;AAAA,QACxC;AAAA,MACF;AAAA,IACF,GAAG;AAAA,EACL,GAAG,CAAC,OAAO,SAAS,WAAW,CAAC;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,UAAS;AAAA,MACT,UAAQ;AAAA,MACR;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;;;AC/EA,IAAAC,iBAA+D;AAO/D,SAAS,aAAa,MAAM,OAAO;AAClC,QAAM,QAAQ,KAAK;AACnB,QAAM,UAAU,KAAK,WAAW,uBAAO,OAAO,IAAI;AAClD,QAAM,WAAW,uBAAO,OAAO,IAAI;AACnC,WAAS,QAAQ,MAAM;AACtB,QAAI,MAAM,IAAI,EAAG,QAAO,SAAS,IAAI,IAAI,CAAC;AAC1C,QAAI,EAAE,QAAQ,WAAW;AACxB,eAAS,IAAI,IAAI;AACjB,YAAM,SAAS,QAAQ,IAAI,KAAK,QAAQ,IAAI,EAAE;AAC9C,YAAM,QAAQ,UAAU,QAAQ,MAAM;AACtC,UAAI,MAAO,UAAS,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK;AAAA,IAClD;AACA,WAAO,SAAS,IAAI;AAAA,EACrB;AACA,EAAC,OAAO,KAAK,KAAK,EAAE,OAAO,OAAO,KAAK,OAAO,CAAC,EAAG,QAAQ,OAAO;AACjE,SAAO;AACR;AAKA,IAAM,wBAAwB,OAAO,OAAO;AAAA,EAC3C,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AACT,CAAC;AAID,IAAM,6BAA6B,OAAO,OAAO;AAAA,EAChD,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AACR,CAAC;AAID,IAAM,mBAAmB,OAAO,OAAO;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AACJ,CAAC;AAID,IAAM,2BAA2B,OAAO,OAAO;AAAA,EAC9C,GAAG;AAAA,EACH,MAAM;AAAA,EACN,QAAQ;AACT,CAAC;AAKD,SAAS,yBAAyB,MAAM,MAAM;AAC7C,QAAM,SAAS,CAAC;AAChB,MAAI,CAAC,KAAK,UAAU,CAAC,KAAK,MAAO,QAAO,QAAQ;AAChD,MAAI,CAAC,KAAK,UAAU,CAAC,KAAK,MAAO,QAAO,QAAQ;AAChD,QAAM,WAAW,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM;AAC3D,MAAI,OAAQ,QAAO,SAAS;AAC5B,SAAO;AACR;AAOA,SAAS,cAAc,QAAQ,OAAO;AACrC,QAAM,SAAS,yBAAyB,QAAQ,KAAK;AACrD,aAAW,OAAO,yBAA0B,KAAI,OAAO,4BAA4B;AAClF,QAAI,OAAO,UAAU,EAAE,OAAO,QAAS,QAAO,GAAG,IAAI,2BAA2B,GAAG;AAAA,EACpF,WAAW,OAAO,MAAO,QAAO,GAAG,IAAI,MAAM,GAAG;AAAA,WACvC,OAAO,OAAQ,QAAO,GAAG,IAAI,OAAO,GAAG;AAChD,SAAO;AACR;AAKA,SAAS,oBAAoB,MAAM,MAAM,MAAM;AAC9C,QAAM,QAAQ,KAAK;AACnB,QAAM,UAAU,KAAK,WAAW,uBAAO,OAAO,IAAI;AAClD,MAAI,eAAe,CAAC;AACpB,WAAS,MAAM,QAAQ;AACtB,mBAAe,cAAc,MAAM,MAAM,KAAK,QAAQ,MAAM,GAAG,YAAY;AAAA,EAC5E;AACA,QAAM,IAAI;AACV,OAAK,QAAQ,KAAK;AAClB,SAAO,cAAc,MAAM,YAAY;AACxC;AAOA,SAAS,aAAa,MAAM,UAAU;AACrC,QAAM,QAAQ,CAAC;AACf,MAAI,OAAO,SAAS,YAAY,OAAO,KAAK,UAAU,SAAU,QAAO;AACvE,MAAI,KAAK,qBAAqB,MAAO,MAAK,UAAU,QAAQ,CAAC,SAAS;AACrE,aAAS,MAAM,IAAI;AACnB,UAAM,KAAK,IAAI;AAAA,EAChB,CAAC;AACD,QAAM,OAAO,aAAa,IAAI;AAC9B,aAAW,QAAQ,MAAM;AACxB,UAAM,OAAO,KAAK,IAAI;AACtB,QAAI,MAAM;AACT,eAAS,MAAM,oBAAoB,MAAM,MAAM,IAAI,CAAC;AACpD,YAAM,KAAK,IAAI;AAAA,IAChB;AAAA,EACD;AACA,SAAO;AACR;AAKA,IAAM,2BAA2B;AAAA,EAChC,UAAU;AAAA,EACV,SAAS,CAAC;AAAA,EACV,WAAW,CAAC;AAAA,EACZ,GAAG;AACJ;AAIA,SAAS,mBAAmB,MAAM,UAAU;AAC3C,aAAW,QAAQ,SAAU,KAAI,QAAQ,QAAQ,OAAO,KAAK,IAAI,MAAM,OAAO,SAAS,IAAI,EAAG,QAAO;AACrG,SAAO;AACR;AAOA,SAAS,uBAAuB,KAAK;AACpC,MAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,QAAO;AACpD,QAAM,OAAO;AACb,MAAI,OAAO,KAAK,WAAW,YAAY,CAAC,IAAI,SAAS,OAAO,IAAI,UAAU,SAAU,QAAO;AAC3F,MAAI,CAAC,mBAAmB,KAAK,wBAAwB,EAAG,QAAO;AAC/D,QAAM,QAAQ,KAAK;AACnB,aAAW,QAAQ,OAAO;AACzB,UAAM,OAAO,MAAM,IAAI;AACvB,QAAI,CAAC,QAAQ,OAAO,KAAK,SAAS,YAAY,CAAC,mBAAmB,MAAM,wBAAwB,EAAG,QAAO;AAAA,EAC3G;AACA,QAAM,UAAU,KAAK,WAAW,uBAAO,OAAO,IAAI;AAClD,aAAW,QAAQ,SAAS;AAC3B,UAAM,OAAO,QAAQ,IAAI;AACzB,UAAM,SAAS,KAAK;AACpB,QAAI,CAAC,QAAQ,OAAO,WAAW,YAAY,CAAC,MAAM,MAAM,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,mBAAmB,MAAM,wBAAwB,EAAG,QAAO;AAAA,EAC9I;AACA,SAAO;AACR;AAKA,IAAM,cAAc,uBAAO,OAAO,IAAI;AAItC,SAAS,WAAW,UAAU,QAAQ;AACrC,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO,uBAAO,OAAO,IAAI;AAAA,IACzB,SAAyB,oBAAI,IAAI;AAAA,EAClC;AACD;AAIA,SAAS,WAAW,UAAU,QAAQ;AACrC,QAAM,kBAAkB,YAAY,QAAQ,MAAM,YAAY,QAAQ,IAAI,uBAAO,OAAO,IAAI;AAC5F,SAAO,gBAAgB,MAAM,MAAM,gBAAgB,MAAM,IAAI,WAAW,UAAU,MAAM;AACzF;AAMA,SAAS,WAAWC,UAAS,MAAM;AAClC,MAAI,CAAC,uBAAuB,IAAI,EAAG,QAAO,CAAC;AAC3C,SAAO,aAAa,MAAM,CAAC,MAAM,SAAS;AACzC,QAAI,KAAM,CAAAA,SAAQ,MAAM,IAAI,IAAI;AAAA,QAC3B,CAAAA,SAAQ,QAAQ,IAAI,IAAI;AAAA,EAC9B,CAAC;AACF;AAIA,SAAS,iBAAiBA,UAAS,MAAM,MAAM;AAC9C,MAAI;AACH,QAAI,OAAO,KAAK,SAAS,UAAU;AAClC,MAAAA,SAAQ,MAAM,IAAI,IAAI,EAAE,GAAG,KAAK;AAChC,aAAO;AAAA,IACR;AAAA,EACD,SAAS,KAAK;AAAA,EAAC;AACf,SAAO;AACR;AAuBA,IAAM,gBAAgB;AAItB,IAAM,eAAe,CAAC,OAAO,UAAU,iBAAiB,WAAW,OAAO;AACzE,QAAM,iBAAiB,MAAM,MAAM,GAAG;AACtC,MAAI,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK;AAC9B,QAAI,eAAe,SAAS,KAAK,eAAe,SAAS,EAAG,QAAO;AACnE,eAAW,eAAe,MAAM,EAAE,MAAM,CAAC;AAAA,EAC1C;AACA,MAAI,eAAe,SAAS,KAAK,CAAC,eAAe,OAAQ,QAAO;AAChE,MAAI,eAAe,SAAS,GAAG;AAC9B,UAAM,SAAS,eAAe,IAAI;AAClC,UAAM,SAAS,eAAe,IAAI;AAClC,UAAM,SAAS;AAAA,MACd,UAAU,eAAe,SAAS,IAAI,eAAe,CAAC,IAAI;AAAA,MAC1D;AAAA,MACA,MAAM;AAAA,IACP;AACA,WAAO,YAAY,CAAC,iBAAiB,MAAM,IAAI,OAAO;AAAA,EACvD;AACA,QAAM,OAAO,eAAe,CAAC;AAC7B,QAAM,gBAAgB,KAAK,MAAM,GAAG;AACpC,MAAI,cAAc,SAAS,GAAG;AAC7B,UAAM,SAAS;AAAA,MACd;AAAA,MACA,QAAQ,cAAc,MAAM;AAAA,MAC5B,MAAM,cAAc,KAAK,GAAG;AAAA,IAC7B;AACA,WAAO,YAAY,CAAC,iBAAiB,MAAM,IAAI,OAAO;AAAA,EACvD;AACA,MAAI,mBAAmB,aAAa,IAAI;AACvC,UAAM,SAAS;AAAA,MACd;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACD;AACA,WAAO,YAAY,CAAC,iBAAiB,QAAQ,eAAe,IAAI,OAAO;AAAA,EACxE;AACA,SAAO;AACR;AAMA,IAAM,mBAAmB,CAAC,MAAM,oBAAoB;AACnD,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,CAAC,GAAG,mBAAmB,KAAK,WAAW,MAAM,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK;AAC9E;AAKA,IAAI,cAAc;AAClB,SAAS,iBAAiB,OAAO;AAChC,MAAI,OAAO,UAAU,UAAW,eAAc;AAC9C,SAAO;AACR;AASA,SAAS,YAAY,MAAM;AAC1B,QAAM,OAAO,OAAO,SAAS,WAAW,aAAa,MAAM,MAAM,WAAW,IAAI;AAChF,MAAI,MAAM;AACT,UAAMC,WAAU,WAAW,KAAK,UAAU,KAAK,MAAM;AACrD,UAAM,WAAW,KAAK;AACtB,WAAOA,SAAQ,MAAM,QAAQ,MAAMA,SAAQ,QAAQ,IAAI,QAAQ,IAAI,OAAO;AAAA,EAC3E;AACD;AAIA,SAAS,QAAQ,MAAM,MAAM;AAC5B,QAAM,OAAO,aAAa,MAAM,MAAM,WAAW;AACjD,MAAI,CAAC,KAAM,QAAO;AAClB,QAAMA,WAAU,WAAW,KAAK,UAAU,KAAK,MAAM;AACrD,MAAI,KAAM,QAAO,iBAAiBA,UAAS,KAAK,MAAM,IAAI;AAAA,OACrD;AACJ,IAAAA,SAAQ,QAAQ,IAAI,KAAK,IAAI;AAC7B,WAAO;AAAA,EACR;AACD;AAIA,SAAS,cAAc,MAAM,UAAU;AACtC,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,MAAI,OAAO,aAAa,SAAU,YAAW,KAAK,YAAY;AAC9D,MAAI,eAAe,CAAC,YAAY,CAAC,KAAK,QAAQ;AAC7C,QAAI,QAAQ;AACZ,QAAI,uBAAuB,IAAI,GAAG;AACjC,WAAK,SAAS;AACd,mBAAa,MAAM,CAAC,MAAM,SAAS;AAClC,YAAI,QAAQ,MAAM,IAAI,EAAG,SAAQ;AAAA,MAClC,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AACA,QAAM,SAAS,KAAK;AACpB,MAAI,CAAC,iBAAiB;AAAA,IACrB;AAAA,IACA,MAAM;AAAA,EACP,CAAC,EAAG,QAAO;AACX,QAAMA,WAAU,WAAW,UAAU,MAAM;AAC3C,SAAO,CAAC,CAAC,WAAWA,UAAS,IAAI;AAClC;AAqBA,IAAM,gCAAgC,OAAO,OAAO;AAAA,EACnD,OAAO;AAAA,EACP,QAAQ;AACT,CAAC;AACD,IAAM,4BAA4B,OAAO,OAAO;AAAA,EAC/C,GAAG;AAAA,EACH,GAAG;AACJ,CAAC;AAKD,IAAM,aAAa;AACnB,IAAM,YAAY;AAClB,SAAS,cAAc,MAAM,OAAO,WAAW;AAC9C,MAAI,UAAU,EAAG,QAAO;AACxB,cAAY,aAAa;AACzB,MAAI,OAAO,SAAS,SAAU,QAAO,KAAK,KAAK,OAAO,QAAQ,SAAS,IAAI;AAC3E,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,QAAM,WAAW,KAAK,MAAM,UAAU;AACtC,MAAI,aAAa,QAAQ,CAAC,SAAS,OAAQ,QAAO;AAClD,QAAM,WAAW,CAAC;AAClB,MAAI,OAAO,SAAS,MAAM;AAC1B,MAAIC,YAAW,UAAU,KAAK,IAAI;AAClC,SAAO,MAAM;AACZ,QAAIA,WAAU;AACb,YAAM,MAAM,WAAW,IAAI;AAC3B,UAAI,MAAM,GAAG,EAAG,UAAS,KAAK,IAAI;AAAA,UAC7B,UAAS,KAAK,KAAK,KAAK,MAAM,QAAQ,SAAS,IAAI,SAAS;AAAA,IAClE,MAAO,UAAS,KAAK,IAAI;AACzB,WAAO,SAAS,MAAM;AACtB,QAAI,SAAS,OAAQ,QAAO,SAAS,KAAK,EAAE;AAC5C,IAAAA,YAAW,CAACA;AAAA,EACb;AACD;AAEA,SAAS,aAAa,SAAS,MAAM,QAAQ;AAC5C,MAAI,OAAO;AACX,QAAM,QAAQ,QAAQ,QAAQ,MAAM,GAAG;AACvC,SAAO,SAAS,GAAG;AAClB,UAAM,QAAQ,QAAQ,QAAQ,KAAK,KAAK;AACxC,UAAM,MAAM,QAAQ,QAAQ,OAAO,GAAG;AACtC,QAAI,UAAU,MAAM,QAAQ,GAAI;AAChC,UAAM,SAAS,QAAQ,QAAQ,KAAK,GAAG;AACvC,QAAI,WAAW,GAAI;AACnB,YAAQ,QAAQ,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK;AAC3C,cAAU,QAAQ,MAAM,GAAG,KAAK,EAAE,KAAK,IAAI,QAAQ,MAAM,SAAS,CAAC;AAAA,EACpE;AACA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,EACD;AACD;AAIA,SAAS,oBAAoB,MAAM,SAAS;AAC3C,SAAO,OAAO,WAAW,OAAO,YAAY,UAAU;AACvD;AAIA,SAAS,eAAe,MAAM,OAAO,KAAK;AACzC,QAAM,QAAQ,aAAa,IAAI;AAC/B,SAAO,oBAAoB,MAAM,MAAM,QAAQ,MAAM,UAAU,GAAG;AACnE;AAKA,IAAM,iBAAiB,CAAC,UAAU,UAAU,WAAW,UAAU,eAAe,UAAU;AAW1F,SAAS,UAAU,MAAM,gBAAgB;AACxC,QAAM,WAAW;AAAA,IAChB,GAAG;AAAA,IACH,GAAG;AAAA,EACJ;AACA,QAAM,qBAAqB;AAAA,IAC1B,GAAG;AAAA,IACH,GAAG;AAAA,EACJ;AACA,QAAM,MAAM;AAAA,IACX,MAAM,SAAS;AAAA,IACf,KAAK,SAAS;AAAA,IACd,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,EAClB;AACA,MAAI,OAAO,SAAS;AACpB,GAAC,UAAU,kBAAkB,EAAE,QAAQ,CAAC,UAAU;AACjD,UAAM,kBAAkB,CAAC;AACzB,UAAM,QAAQ,MAAM;AACpB,UAAM,QAAQ,MAAM;AACpB,QAAI,WAAW,MAAM;AACrB,QAAI,MAAO,KAAI,MAAO,aAAY;AAAA,SAC7B;AACJ,sBAAgB,KAAK,gBAAgB,IAAI,QAAQ,IAAI,MAAM,SAAS,IAAI,OAAO,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG;AAC5G,sBAAgB,KAAK,aAAa;AAClC,UAAI,MAAM,IAAI,OAAO;AAAA,IACtB;AAAA,aACS,OAAO;AACf,sBAAgB,KAAK,gBAAgB,IAAI,IAAI,MAAM,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,KAAK,SAAS,IAAI,GAAG;AAC7G,sBAAgB,KAAK,aAAa;AAClC,UAAI,MAAM,IAAI,OAAO;AAAA,IACtB;AACA,QAAI;AACJ,QAAI,WAAW,EAAG,aAAY,KAAK,MAAM,WAAW,CAAC,IAAI;AACzD,eAAW,WAAW;AACtB,YAAQ,UAAU;AAAA,MACjB,KAAK;AACJ,oBAAY,IAAI,SAAS,IAAI,IAAI;AACjC,wBAAgB,QAAQ,eAAe,UAAU,SAAS,IAAI,MAAM,UAAU,SAAS,IAAI,GAAG;AAC9F;AAAA,MACD,KAAK;AACJ,wBAAgB,QAAQ,iBAAiB,IAAI,QAAQ,IAAI,IAAI,MAAM,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG;AACjI;AAAA,MACD,KAAK;AACJ,oBAAY,IAAI,QAAQ,IAAI,IAAI;AAChC,wBAAgB,QAAQ,gBAAgB,UAAU,SAAS,IAAI,MAAM,UAAU,SAAS,IAAI,GAAG;AAC/F;AAAA,IACF;AACA,QAAI,WAAW,MAAM,GAAG;AACvB,UAAI,IAAI,SAAS,IAAI,KAAK;AACzB,oBAAY,IAAI;AAChB,YAAI,OAAO,IAAI;AACf,YAAI,MAAM;AAAA,MACX;AACA,UAAI,IAAI,UAAU,IAAI,QAAQ;AAC7B,oBAAY,IAAI;AAChB,YAAI,QAAQ,IAAI;AAChB,YAAI,SAAS;AAAA,MACd;AAAA,IACD;AACA,QAAI,gBAAgB,OAAQ,QAAO,eAAe,MAAM,mBAAoB,gBAAgB,KAAK,GAAG,IAAI,MAAO,MAAM;AAAA,EACtH,CAAC;AACD,QAAM,sBAAsB,mBAAmB;AAC/C,QAAM,uBAAuB,mBAAmB;AAChD,QAAM,WAAW,IAAI;AACrB,QAAM,YAAY,IAAI;AACtB,MAAI;AACJ,MAAI;AACJ,MAAI,wBAAwB,MAAM;AACjC,aAAS,yBAAyB,OAAO,QAAQ,yBAAyB,SAAS,YAAY;AAC/F,YAAQ,cAAc,QAAQ,WAAW,SAAS;AAAA,EACnD,OAAO;AACN,YAAQ,wBAAwB,SAAS,WAAW;AACpD,aAAS,yBAAyB,OAAO,cAAc,OAAO,YAAY,QAAQ,IAAI,yBAAyB,SAAS,YAAY;AAAA,EACrI;AACA,QAAM,aAAa,CAAC;AACpB,QAAM,UAAU,CAAC,MAAM,UAAU;AAChC,QAAI,CAAC,eAAe,KAAK,EAAG,YAAW,IAAI,IAAI,MAAM,SAAS;AAAA,EAC/D;AACA,UAAQ,SAAS,KAAK;AACtB,UAAQ,UAAU,MAAM;AACxB,QAAM,UAAU;AAAA,IACf,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,EACD;AACA,aAAW,UAAU,QAAQ,KAAK,GAAG;AACrC,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAkBA,IAAM,QAAQ;AAMd,IAAM,eAAe,cAAc,KAAK,IAAI,EAAE,SAAS,EAAE,KAAK,KAAK,OAAO,IAAI,WAAW,GAAG,SAAS,EAAE;AAIvG,IAAI,UAAU;AAId,SAAS,WAAW,MAAM,SAAS,cAAc;AAChD,QAAM,MAAM,CAAC;AACb,MAAI;AACJ,SAAO,QAAQ,MAAM,KAAK,IAAI,EAAG,KAAI,KAAK,MAAM,CAAC,CAAC;AAClD,MAAI,CAAC,IAAI,OAAQ,QAAO;AACxB,QAAM,SAAS,YAAY,KAAK,OAAO,IAAI,WAAW,KAAK,IAAI,GAAG,SAAS,EAAE;AAC7E,MAAI,QAAQ,CAAC,OAAO;AACnB,UAAM,QAAQ,OAAO,WAAW,aAAa,OAAO,EAAE,IAAI,UAAU,WAAW,SAAS;AACxF,UAAM,YAAY,GAAG,QAAQ,uBAAuB,MAAM;AAC1D,WAAO,KAAK,QAAQ,IAAI,OAAO,aAAc,YAAY,oBAAqB,GAAG,GAAG,OAAO,QAAQ,SAAS,IAAI;AAAA,EACjH,CAAC;AACD,SAAO,KAAK,QAAQ,IAAI,OAAO,QAAQ,GAAG,GAAG,EAAE;AAC/C,SAAO;AACR;AAKA,IAAM,UAAU,uBAAO,OAAO,IAAI;AAIlC,SAAS,aAAa,UAAU,MAAM;AACrC,UAAQ,QAAQ,IAAI;AACrB;AAIA,SAAS,aAAa,UAAU;AAC/B,SAAO,QAAQ,QAAQ,KAAK,QAAQ,EAAE;AACvC;AAKA,SAAS,gBAAgB,QAAQ;AAChC,MAAI;AACJ,MAAI,OAAO,OAAO,cAAc,SAAU,aAAY,CAAC,OAAO,SAAS;AAAA,OAClE;AACJ,gBAAY,OAAO;AACnB,QAAI,EAAE,qBAAqB,UAAU,CAAC,UAAU,OAAQ,QAAO;AAAA,EAChE;AACA,QAAM,SAAS;AAAA,IACd;AAAA,IACA,MAAM,OAAO,QAAQ;AAAA,IACrB,QAAQ,OAAO,UAAU;AAAA,IACzB,QAAQ,OAAO,UAAU;AAAA,IACzB,SAAS,OAAO,WAAW;AAAA,IAC3B,QAAQ,OAAO,WAAW;AAAA,IAC1B,OAAO,OAAO,SAAS;AAAA,IACvB,kBAAkB,OAAO,qBAAqB;AAAA,EAC/C;AACA,SAAO;AACR;AAIA,IAAM,gBAAgB,uBAAO,OAAO,IAAI;AAgBxC,IAAM,qBAAqB,CAAC,6BAA6B,wBAAwB;AACjF,IAAM,cAAc,CAAC;AACrB,OAAO,mBAAmB,SAAS,EAAG,KAAI,mBAAmB,WAAW,EAAG,aAAY,KAAK,mBAAmB,MAAM,CAAC;AAAA,SAC7G,KAAK,OAAO,IAAI,IAAI,aAAY,KAAK,mBAAmB,MAAM,CAAC;AAAA,IACnE,aAAY,KAAK,mBAAmB,IAAI,CAAC;AAC9C,cAAc,EAAE,IAAI,gBAAgB,EAAE,WAAW,CAAC,4BAA4B,EAAE,OAAO,WAAW,EAAE,CAAC;AAIrG,SAAS,eAAe,UAAU,cAAc;AAC/C,QAAM,SAAS,gBAAgB,YAAY;AAC3C,MAAI,WAAW,KAAM,QAAO;AAC5B,gBAAc,QAAQ,IAAI;AAC1B,SAAO;AACR;AAIA,SAAS,aAAa,UAAU;AAC/B,SAAO,cAAc,QAAQ;AAC9B;AAQA,IAAM,cAAc,MAAM;AACzB,MAAI;AACJ,MAAI;AACH,eAAW;AACX,QAAI,OAAO,aAAa,WAAY,QAAO;AAAA,EAC5C,SAAS,KAAK;AAAA,EAAC;AAChB;AAIA,IAAI,cAAc,YAAY;AAgB9B,SAAS,mBAAmB,UAAU,QAAQ;AAC7C,QAAM,SAAS,aAAa,QAAQ;AACpC,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI;AACJ,MAAI,CAAC,OAAO,OAAQ,UAAS;AAAA,OACxB;AACJ,QAAI,gBAAgB;AACpB,WAAO,UAAU,QAAQ,CAAC,SAAS;AAClC,YAAM,OAAO;AACb,sBAAgB,KAAK,IAAI,eAAe,KAAK,MAAM;AAAA,IACpD,CAAC;AACD,UAAM,MAAM,SAAS;AACrB,aAAS,OAAO,SAAS,gBAAgB,OAAO,KAAK,SAAS,IAAI;AAAA,EACnE;AACA,SAAO;AACR;AAIA,SAAS,YAAY,QAAQ;AAC5B,SAAO,WAAW;AACnB;AAIA,IAAM,UAAU,CAAC,UAAU,QAAQ,UAAU;AAC5C,QAAM,UAAU,CAAC;AACjB,QAAM,YAAY,mBAAmB,UAAU,MAAM;AACrD,QAAM,OAAO;AACb,MAAI,OAAO;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,CAAC;AAAA,EACT;AACA,MAAI,SAAS;AACb,QAAM,QAAQ,CAAC,MAAM,UAAU;AAC9B,cAAU,KAAK,SAAS;AACxB,QAAI,UAAU,aAAa,QAAQ,GAAG;AACrC,cAAQ,KAAK,IAAI;AACjB,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC;AAAA,MACT;AACA,eAAS,KAAK;AAAA,IACf;AACA,SAAK,MAAM,KAAK,IAAI;AAAA,EACrB,CAAC;AACD,UAAQ,KAAK,IAAI;AACjB,SAAO;AACR;AAIA,SAAS,QAAQ,UAAU;AAC1B,MAAI,OAAO,aAAa,UAAU;AACjC,UAAM,SAAS,aAAa,QAAQ;AACpC,QAAI,OAAQ,QAAO,OAAO;AAAA,EAC3B;AACA,SAAO;AACR;AAIA,IAAM,OAAO,CAAC,MAAM,QAAQ,aAAa;AACxC,MAAI,CAAC,aAAa;AACjB,aAAS,SAAS,GAAG;AACrB;AAAA,EACD;AACA,MAAI,OAAO,QAAQ,OAAO,QAAQ;AAClC,UAAQ,OAAO,MAAM;AAAA,IACpB,KAAK,SAAS;AACb,YAAM,SAAS,OAAO;AACtB,YAAM,QAAQ,OAAO;AACrB,YAAM,YAAY,MAAM,KAAK,GAAG;AAChC,YAAM,YAAY,IAAI,gBAAgB,EAAE,OAAO,UAAU,CAAC;AAC1D,cAAQ,SAAS,WAAW,UAAU,SAAS;AAC/C;AAAA,IACD;AAAA,IACA,KAAK,UAAU;AACd,YAAM,MAAM,OAAO;AACnB,cAAQ,IAAI,MAAM,GAAG,CAAC,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI;AACjD;AAAA,IACD;AAAA,IACA;AACC,eAAS,SAAS,GAAG;AACrB;AAAA,EACF;AACA,MAAI,eAAe;AACnB,cAAY,OAAO,IAAI,EAAE,KAAK,CAAC,aAAa;AAC3C,UAAM,SAAS,SAAS;AACxB,QAAI,WAAW,KAAK;AACnB,iBAAW,MAAM;AAChB,iBAAS,YAAY,MAAM,IAAI,UAAU,QAAQ,MAAM;AAAA,MACxD,CAAC;AACD;AAAA,IACD;AACA,mBAAe;AACf,WAAO,SAAS,KAAK;AAAA,EACtB,CAAC,EAAE,KAAK,CAAC,SAAS;AACjB,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAC9C,iBAAW,MAAM;AAChB,YAAI,SAAS,IAAK,UAAS,SAAS,IAAI;AAAA,YACnC,UAAS,QAAQ,YAAY;AAAA,MACnC,CAAC;AACD;AAAA,IACD;AACA,eAAW,MAAM;AAChB,eAAS,WAAW,IAAI;AAAA,IACzB,CAAC;AAAA,EACF,CAAC,EAAE,MAAM,MAAM;AACd,aAAS,QAAQ,YAAY;AAAA,EAC9B,CAAC;AACF;AAIA,IAAM,iBAAiB;AAAA,EACtB;AAAA,EACA;AACD;AAKA,SAAS,eAAe,UAAU,IAAI;AACrC,WAAS,QAAQ,CAACC,aAAY;AAC7B,UAAM,QAAQA,SAAQ;AACtB,QAAI,MAAO,CAAAA,SAAQ,kBAAkB,MAAM,OAAO,CAAC,QAAQ,IAAI,OAAO,EAAE;AAAA,EACzE,CAAC;AACF;AAIA,SAAS,gBAAgBA,UAAS;AACjC,MAAI,CAACA,SAAQ,sBAAsB;AAClC,IAAAA,SAAQ,uBAAuB;AAC/B,eAAW,MAAM;AAChB,MAAAA,SAAQ,uBAAuB;AAC/B,YAAM,QAAQA,SAAQ,kBAAkBA,SAAQ,gBAAgB,MAAM,CAAC,IAAI,CAAC;AAC5E,UAAI,CAAC,MAAM,OAAQ;AACnB,UAAI,aAAa;AACjB,YAAM,WAAWA,SAAQ;AACzB,YAAM,SAASA,SAAQ;AACvB,YAAM,QAAQ,CAAC,SAAS;AACvB,cAAM,QAAQ,KAAK;AACnB,cAAM,YAAY,MAAM,QAAQ;AAChC,cAAM,UAAU,MAAM,QAAQ,OAAO,CAAC,SAAS;AAC9C,cAAI,KAAK,WAAW,OAAQ,QAAO;AACnC,gBAAM,OAAO,KAAK;AAClB,cAAIA,SAAQ,MAAM,IAAI,EAAG,OAAM,OAAO,KAAK;AAAA,YAC1C;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,mBACQA,SAAQ,QAAQ,IAAI,IAAI,EAAG,OAAM,QAAQ,KAAK;AAAA,YACtD;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAC;AAAA,eACI;AACJ,yBAAa;AACb,mBAAO;AAAA,UACR;AACA,iBAAO;AAAA,QACR,CAAC;AACD,YAAI,MAAM,QAAQ,WAAW,WAAW;AACvC,cAAI,CAAC,WAAY,gBAAe,CAACA,QAAO,GAAG,KAAK,EAAE;AAClD,eAAK,SAAS,MAAM,OAAO,MAAM,CAAC,GAAG,MAAM,QAAQ,MAAM,CAAC,GAAG,MAAM,QAAQ,MAAM,CAAC,GAAG,KAAK,KAAK;AAAA,QAChG;AAAA,MACD,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AACD;AAIA,IAAIC,aAAY;AAIhB,SAAS,cAAc,UAAU,OAAO,gBAAgB;AACvD,QAAM,KAAKA;AACX,QAAM,QAAQ,eAAe,KAAK,MAAM,gBAAgB,EAAE;AAC1D,MAAI,CAAC,MAAM,QAAQ,OAAQ,QAAO;AAClC,QAAM,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,iBAAe,QAAQ,CAACD,aAAY;AACnC,KAACA,SAAQ,oBAAoBA,SAAQ,kBAAkB,CAAC,IAAI,KAAK,IAAI;AAAA,EACtE,CAAC;AACD,SAAO;AACR;AAKA,SAAS,UAAU,OAAO;AACzB,QAAM,SAAS;AAAA,IACd,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC;AAAA,IACV,SAAS,CAAC;AAAA,EACX;AACA,QAAMA,WAAU,uBAAO,OAAO,IAAI;AAClC,QAAM,KAAK,CAAC,GAAG,MAAM;AACpB,QAAI,EAAE,aAAa,EAAE,SAAU,QAAO,EAAE,SAAS,cAAc,EAAE,QAAQ;AACzE,QAAI,EAAE,WAAW,EAAE,OAAQ,QAAO,EAAE,OAAO,cAAc,EAAE,MAAM;AACjE,WAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,EACnC,CAAC;AACD,MAAI,WAAW;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,EACP;AACA,QAAM,QAAQ,CAAC,SAAS;AACvB,QAAI,SAAS,SAAS,KAAK,QAAQ,SAAS,WAAW,KAAK,UAAU,SAAS,aAAa,KAAK,SAAU;AAC3G,eAAW;AACX,UAAM,WAAW,KAAK;AACtB,UAAM,SAAS,KAAK;AACpB,UAAM,OAAO,KAAK;AAClB,UAAM,kBAAkBA,SAAQ,QAAQ,MAAMA,SAAQ,QAAQ,IAAI,uBAAO,OAAO,IAAI;AACpF,UAAM,eAAe,gBAAgB,MAAM,MAAM,gBAAgB,MAAM,IAAI,WAAW,UAAU,MAAM;AACtG,QAAI;AACJ,QAAI,QAAQ,aAAa,MAAO,QAAO,OAAO;AAAA,aACrC,WAAW,MAAM,aAAa,QAAQ,IAAI,IAAI,EAAG,QAAO,OAAO;AAAA,QACnE,QAAO,OAAO;AACnB,UAAM,OAAO;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,IACD;AACA,SAAK,KAAK,IAAI;AAAA,EACf,CAAC;AACD,SAAO;AACR;AAKA,SAAS,YAAY,MAAM,WAAW,MAAME,eAAc,OAAO;AAChE,QAAM,SAAS,CAAC;AAChB,OAAK,QAAQ,CAAC,SAAS;AACtB,UAAM,OAAO,OAAO,SAAS,WAAW,aAAa,MAAM,UAAUA,YAAW,IAAI;AACpF,QAAI,KAAM,QAAO,KAAK,IAAI;AAAA,EAC3B,CAAC;AACD,SAAO;AACR;AAKA,IAAM,gBAAgB;AAAA,EACrB,WAAW,CAAC;AAAA,EACZ,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,kBAAkB;AACnB;AAKA,SAAS,UAAU,QAAQ,SAAS,OAAO,MAAM;AAChD,QAAM,iBAAiB,OAAO,UAAU;AACxC,QAAM,aAAa,OAAO,SAAS,KAAK,MAAM,KAAK,OAAO,IAAI,cAAc,IAAI,OAAO;AACvF,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,QAAI,OAAO,OAAO,UAAU,MAAM,CAAC;AACnC,gBAAY,CAAC;AACb,WAAO,KAAK,SAAS,GAAG;AACvB,YAAM,YAAY,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,MAAM;AACxD,gBAAU,KAAK,KAAK,SAAS,CAAC;AAC9B,aAAO,KAAK,MAAM,GAAG,SAAS,EAAE,OAAO,KAAK,MAAM,YAAY,CAAC,CAAC;AAAA,IACjE;AACA,gBAAY,UAAU,OAAO,IAAI;AAAA,EAClC,MAAO,aAAY,OAAO,UAAU,MAAM,UAAU,EAAE,OAAO,OAAO,UAAU,MAAM,GAAG,UAAU,CAAC;AAClG,QAAM,YAAY,KAAK,IAAI;AAC3B,MAAI,SAAS;AACb,MAAI,cAAc;AAClB,MAAI;AACJ,MAAI,QAAQ;AACZ,MAAI,QAAQ,CAAC;AACb,MAAI,gBAAgB,CAAC;AACrB,MAAI,OAAO,SAAS,WAAY,eAAc,KAAK,IAAI;AAIvD,WAAS,aAAa;AACrB,QAAI,OAAO;AACV,mBAAa,KAAK;AAClB,cAAQ;AAAA,IACT;AAAA,EACD;AAIA,WAAS,QAAQ;AAChB,QAAI,WAAW,UAAW,UAAS;AACnC,eAAW;AACX,UAAM,QAAQ,CAAC,SAAS;AACvB,UAAI,KAAK,WAAW,UAAW,MAAK,SAAS;AAAA,IAC9C,CAAC;AACD,YAAQ,CAAC;AAAA,EACV;AAKA,WAAS,UAAU,UAAU,WAAW;AACvC,QAAI,UAAW,iBAAgB,CAAC;AAChC,QAAI,OAAO,aAAa,WAAY,eAAc,KAAK,QAAQ;AAAA,EAChE;AAIA,WAAS,iBAAiB;AACzB,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,MAAM;AAAA,MACtB;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAIA,WAAS,YAAY;AACpB,aAAS;AACT,kBAAc,QAAQ,CAAC,aAAa;AACnC,eAAS,QAAQ,SAAS;AAAA,IAC3B,CAAC;AAAA,EACF;AAIA,WAAS,aAAa;AACrB,UAAM,QAAQ,CAAC,SAAS;AACvB,UAAI,KAAK,WAAW,UAAW,MAAK,SAAS;AAAA,IAC9C,CAAC;AACD,YAAQ,CAAC;AAAA,EACV;AAIA,WAAS,eAAe,MAAM,UAAU,MAAM;AAC7C,UAAM,UAAU,aAAa;AAC7B,YAAQ,MAAM,OAAO,CAAC,WAAW,WAAW,IAAI;AAChD,YAAQ,QAAQ;AAAA,MACf,KAAK;AAAW;AAAA,MAChB,KAAK;AACJ,YAAI,WAAW,CAAC,OAAO,iBAAkB;AACzC;AAAA,MACD;AAAS;AAAA,IACV;AACA,QAAI,aAAa,SAAS;AACzB,kBAAY;AACZ,gBAAU;AACV;AAAA,IACD;AACA,QAAI,SAAS;AACZ,kBAAY;AACZ,UAAI,CAAC,MAAM,OAAQ,KAAI,CAAC,UAAU,OAAQ,WAAU;AAAA,UAC/C,UAAS;AACd;AAAA,IACD;AACA,eAAW;AACX,eAAW;AACX,QAAI,CAAC,OAAO,QAAQ;AACnB,YAAM,QAAQ,OAAO,UAAU,QAAQ,KAAK,QAAQ;AACpD,UAAI,UAAU,MAAM,UAAU,OAAO,MAAO,QAAO,QAAQ;AAAA,IAC5D;AACA,aAAS;AACT,kBAAc,QAAQ,CAAC,aAAa;AACnC,eAAS,IAAI;AAAA,IACd,CAAC;AAAA,EACF;AAIA,WAAS,WAAW;AACnB,QAAI,WAAW,UAAW;AAC1B,eAAW;AACX,UAAM,WAAW,UAAU,MAAM;AACjC,QAAI,aAAa,QAAQ;AACxB,UAAI,MAAM,QAAQ;AACjB,gBAAQ,WAAW,MAAM;AACxB,qBAAW;AACX,cAAI,WAAW,WAAW;AACzB,uBAAW;AACX,sBAAU;AAAA,UACX;AAAA,QACD,GAAG,OAAO,OAAO;AACjB;AAAA,MACD;AACA,gBAAU;AACV;AAAA,IACD;AACA,UAAM,OAAO;AAAA,MACZ,QAAQ;AAAA,MACR;AAAA,MACA,UAAU,CAAC,UAAU,SAAS;AAC7B,uBAAe,MAAM,UAAU,IAAI;AAAA,MACpC;AAAA,IACD;AACA,UAAM,KAAK,IAAI;AACf;AACA,YAAQ,WAAW,UAAU,OAAO,MAAM;AAC1C,UAAM,UAAU,SAAS,KAAK,QAAQ;AAAA,EACvC;AACA,aAAW,QAAQ;AACnB,SAAO;AACR;AAKA,SAAS,eAAe,KAAK;AAC5B,QAAM,SAAS;AAAA,IACd,GAAG;AAAA,IACH,GAAG;AAAA,EACJ;AACA,MAAI,UAAU,CAAC;AAIf,WAAS,UAAU;AAClB,cAAU,QAAQ,OAAO,CAAC,SAAS,KAAK,EAAE,WAAW,SAAS;AAAA,EAC/D;AAIA,WAAS,MAAM,SAAS,eAAe,cAAc;AACpD,UAAM,UAAU,UAAU,QAAQ,SAAS,eAAe,CAAC,MAAM,UAAU;AAC1E,cAAQ;AACR,UAAI,aAAc,cAAa,MAAM,KAAK;AAAA,IAC3C,CAAC;AACD,YAAQ,KAAK,OAAO;AACpB,WAAO;AAAA,EACR;AAIA,WAAS,KAAK,UAAU;AACvB,WAAO,QAAQ,KAAK,CAAC,UAAU;AAC9B,aAAO,SAAS,KAAK;AAAA,IACtB,CAAC,KAAK;AAAA,EACP;AACA,QAAM,WAAW;AAAA,IAChB;AAAA,IACA;AAAA,IACA,UAAU,CAAC,UAAU;AACpB,aAAO,QAAQ;AAAA,IAChB;AAAA,IACA,UAAU,MAAM,OAAO;AAAA,IACvB;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,kBAAkB;AAAC;AAC5B,IAAM,kBAAkB,uBAAO,OAAO,IAAI;AAI1C,SAAS,mBAAmB,UAAU;AACrC,MAAI,CAAC,gBAAgB,QAAQ,GAAG;AAC/B,UAAM,SAAS,aAAa,QAAQ;AACpC,QAAI,CAAC,OAAQ;AACb,UAAM,aAAa,eAAe,MAAM;AACxC,UAAM,kBAAkB;AAAA,MACvB;AAAA,MACA;AAAA,IACD;AACA,oBAAgB,QAAQ,IAAI;AAAA,EAC7B;AACA,SAAO,gBAAgB,QAAQ;AAChC;AAIA,SAAS,aAAa,QAAQ,OAAO,UAAU;AAC9C,MAAI;AACJ,MAAIC;AACJ,MAAI,OAAO,WAAW,UAAU;AAC/B,UAAM,MAAM,aAAa,MAAM;AAC/B,QAAI,CAAC,KAAK;AACT,eAAS,QAAQ,GAAG;AACpB,aAAO;AAAA,IACR;AACA,IAAAA,QAAO,IAAI;AACX,UAAM,SAAS,mBAAmB,MAAM;AACxC,QAAI,OAAQ,cAAa,OAAO;AAAA,EACjC,OAAO;AACN,UAAM,SAAS,gBAAgB,MAAM;AACrC,QAAI,QAAQ;AACX,mBAAa,eAAe,MAAM;AAClC,YAAM,YAAY,OAAO,YAAY,OAAO,UAAU,CAAC,IAAI;AAC3D,YAAM,MAAM,aAAa,SAAS;AAClC,UAAI,IAAK,CAAAA,QAAO,IAAI;AAAA,IACrB;AAAA,EACD;AACA,MAAI,CAAC,cAAc,CAACA,OAAM;AACzB,aAAS,QAAQ,GAAG;AACpB,WAAO;AAAA,EACR;AACA,SAAO,WAAW,MAAM,OAAOA,OAAM,QAAQ,EAAE,EAAE;AAClD;AAEA,SAAS,gBAAgB;AAAC;AAI1B,SAAS,eAAeH,UAAS;AAChC,MAAI,CAACA,SAAQ,iBAAiB;AAC7B,IAAAA,SAAQ,kBAAkB;AAC1B,eAAW,MAAM;AAChB,MAAAA,SAAQ,kBAAkB;AAC1B,sBAAgBA,QAAO;AAAA,IACxB,CAAC;AAAA,EACF;AACD;AAIA,SAAS,qBAAqB,OAAO;AACpC,QAAM,QAAQ,CAAC;AACf,QAAM,UAAU,CAAC;AACjB,QAAM,QAAQ,CAAC,SAAS;AACvB,KAAC,KAAK,MAAM,aAAa,IAAI,QAAQ,SAAS,KAAK,IAAI;AAAA,EACxD,CAAC;AACD,SAAO;AAAA,IACN;AAAA,IACA;AAAA,EACD;AACD;AAIA,SAAS,oBAAoBA,UAAS,OAAO,MAAM;AAClD,WAAS,eAAe;AACvB,UAAM,UAAUA,SAAQ;AACxB,UAAM,QAAQ,CAAC,SAAS;AACvB,UAAI,QAAS,SAAQ,OAAO,IAAI;AAChC,UAAI,CAACA,SAAQ,MAAM,IAAI,EAAG,CAAAA,SAAQ,QAAQ,IAAI,IAAI;AAAA,IACnD,CAAC;AAAA,EACF;AACA,MAAI,QAAQ,OAAO,SAAS,SAAU,KAAI;AACzC,UAAM,SAAS,WAAWA,UAAS,IAAI;AACvC,QAAI,CAAC,OAAO,QAAQ;AACnB,mBAAa;AACb;AAAA,IACD;AAAA,EACD,SAAS,KAAK;AACb,YAAQ,MAAM,GAAG;AAAA,EAClB;AACA,eAAa;AACb,iBAAeA,QAAO;AACvB;AAIA,SAAS,2BAA2B,UAAU,UAAU;AACvD,MAAI,oBAAoB,QAAS,UAAS,KAAK,CAAC,SAAS;AACxD,aAAS,IAAI;AAAA,EACd,CAAC,EAAE,MAAM,MAAM;AACd,aAAS,IAAI;AAAA,EACd,CAAC;AAAA,MACI,UAAS,QAAQ;AACvB;AAIA,SAAS,aAAaA,UAAS,OAAO;AACrC,MAAI,CAACA,SAAQ,YAAa,CAAAA,SAAQ,cAAc;AAAA,MAC3C,CAAAA,SAAQ,cAAcA,SAAQ,YAAY,OAAO,KAAK,EAAE,KAAK;AAClE,MAAI,CAACA,SAAQ,gBAAgB;AAC5B,IAAAA,SAAQ,iBAAiB;AACzB,eAAW,MAAM;AAChB,MAAAA,SAAQ,iBAAiB;AACzB,YAAM,EAAE,UAAU,OAAO,IAAIA;AAC7B,YAAM,UAAUA,SAAQ;AACxB,aAAOA,SAAQ;AACf,UAAI,CAAC,WAAW,CAAC,QAAQ,OAAQ;AACjC,YAAM,mBAAmBA,SAAQ;AACjC,UAAIA,SAAQ,cAAc,QAAQ,SAAS,KAAK,CAAC,mBAAmB;AACnE,mCAA2BA,SAAQ,UAAU,SAAS,QAAQ,QAAQ,GAAG,CAAC,SAAS;AAClF,8BAAoBA,UAAS,SAAS,IAAI;AAAA,QAC3C,CAAC;AACD;AAAA,MACD;AACA,UAAI,kBAAkB;AACrB,gBAAQ,QAAQ,CAAC,SAAS;AACzB,gBAAM,WAAW,iBAAiB,MAAM,QAAQ,QAAQ;AACxD,qCAA2B,UAAU,CAAC,SAAS;AAC9C,kBAAM,UAAU,OAAO;AAAA,cACtB;AAAA,cACA,OAAO,EAAE,CAAC,IAAI,GAAG,KAAK;AAAA,YACvB,IAAI;AACJ,gCAAoBA,UAAS,CAAC,IAAI,GAAG,OAAO;AAAA,UAC7C,CAAC;AAAA,QACF,CAAC;AACD;AAAA,MACD;AACA,YAAM,EAAE,OAAO,QAAQ,IAAI,qBAAqB,OAAO;AACvD,UAAI,QAAQ,OAAQ,qBAAoBA,UAAS,SAAS,IAAI;AAC9D,UAAI,CAAC,MAAM,OAAQ;AACnB,YAAM,MAAM,OAAO,MAAM,aAAa,IAAI,aAAa,QAAQ,IAAI;AACnE,UAAI,CAAC,KAAK;AACT,4BAAoBA,UAAS,OAAO,IAAI;AACxC;AAAA,MACD;AACA,YAAM,SAAS,IAAI,QAAQ,UAAU,QAAQ,KAAK;AAClD,aAAO,QAAQ,CAAC,SAAS;AACxB,qBAAa,UAAU,MAAM,CAAC,SAAS;AACtC,8BAAoBA,UAAS,KAAK,OAAO,IAAI;AAAA,QAC9C,CAAC;AAAA,MACF,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AACD;AAIA,IAAM,YAAY,CAAC,OAAO,aAAa;AACtC,QAAM,eAAe,YAAY,OAAO,MAAM,iBAAiB,CAAC;AAChE,QAAM,cAAc,UAAU,YAAY;AAC1C,MAAI,CAAC,YAAY,QAAQ,QAAQ;AAChC,QAAI,eAAe;AACnB,QAAI,SAAU,YAAW,MAAM;AAC9B,UAAI,aAAc,UAAS,YAAY,QAAQ,YAAY,SAAS,YAAY,SAAS,aAAa;AAAA,IACvG,CAAC;AACD,WAAO,MAAM;AACZ,qBAAe;AAAA,IAChB;AAAA,EACD;AACA,QAAM,WAAW,uBAAO,OAAO,IAAI;AACnC,QAAM,UAAU,CAAC;AACjB,MAAI,cAAc;AAClB,cAAY,QAAQ,QAAQ,CAAC,SAAS;AACrC,UAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,QAAI,WAAW,cAAc,aAAa,aAAc;AACxD,mBAAe;AACf,iBAAa;AACb,YAAQ,KAAK,WAAW,UAAU,MAAM,CAAC;AACzC,UAAM,mBAAmB,SAAS,QAAQ,MAAM,SAAS,QAAQ,IAAI,uBAAO,OAAO,IAAI;AACvF,QAAI,CAAC,iBAAiB,MAAM,EAAG,kBAAiB,MAAM,IAAI,CAAC;AAAA,EAC5D,CAAC;AACD,cAAY,QAAQ,QAAQ,CAAC,SAAS;AACrC,UAAM,EAAE,UAAU,QAAQ,KAAK,IAAI;AACnC,UAAMA,WAAU,WAAW,UAAU,MAAM;AAC3C,UAAM,eAAeA,SAAQ,iBAAiBA,SAAQ,eAA+B,oBAAI,IAAI;AAC7F,QAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AAC5B,mBAAa,IAAI,IAAI;AACrB,eAAS,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI;AAAA,IACrC;AAAA,EACD,CAAC;AACD,UAAQ,QAAQ,CAACA,aAAY;AAC5B,UAAM,OAAO,SAASA,SAAQ,QAAQ,EAAEA,SAAQ,MAAM;AACtD,QAAI,KAAK,OAAQ,cAAaA,UAAS,IAAI;AAAA,EAC5C,CAAC;AACD,SAAO,WAAW,cAAc,UAAU,aAAa,OAAO,IAAI;AACnE;AA2CA,SAAS,oBAAoB,UAAU,MAAM;AAC5C,QAAM,SAAS,EAAE,GAAG,SAAS;AAC7B,aAAW,OAAO,MAAM;AACvB,UAAM,QAAQ,KAAK,GAAG;AACtB,UAAM,YAAY,OAAO;AACzB,QAAI,OAAO,+BAA+B;AACzC,UAAI,UAAU,QAAQ,UAAU,cAAc,YAAY,cAAc,UAAW,QAAO,GAAG,IAAI;AAAA,IAClG,WAAW,cAAc,OAAO,OAAO,GAAG,EAAG,QAAO,GAAG,IAAI,QAAQ,WAAW,QAAQ,IAAI;AAAA,EAC3F;AACA,SAAO;AACR;AAEA,IAAM,YAAY;AAIlB,SAAS,eAAe,QAAQ,MAAM;AACrC,OAAK,MAAM,SAAS,EAAE,QAAQ,CAAC,QAAQ;AACtC,UAAM,QAAQ,IAAI,KAAK;AACvB,YAAQ,OAAO;AAAA,MACd,KAAK;AACJ,eAAO,QAAQ;AACf;AAAA,MACD,KAAK;AACJ,eAAO,QAAQ;AACf;AAAA,IACF;AAAA,EACD,CAAC;AACF;AAKA,SAAS,iBAAiB,OAAO,eAAe,GAAG;AAClD,QAAM,QAAQ,MAAM,QAAQ,cAAc,EAAE;AAC5C,WAAS,QAAQ,SAAS;AACzB,WAAO,UAAU,EAAG,YAAW;AAC/B,WAAO,UAAU;AAAA,EAClB;AACA,MAAI,UAAU,IAAI;AACjB,UAAM,MAAM,SAAS,KAAK;AAC1B,WAAO,MAAM,GAAG,IAAI,IAAI,QAAQ,GAAG;AAAA,EACpC,WAAW,UAAU,OAAO;AAC3B,QAAI,QAAQ;AACZ,YAAQ,OAAO;AAAA,MACd,KAAK;AACJ,gBAAQ;AACR;AAAA,MACD,KAAK;AAAO,gBAAQ;AAAA,IACrB;AACA,QAAI,OAAO;AACV,UAAI,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,SAAS,MAAM,MAAM,CAAC;AAChE,UAAI,MAAM,GAAG,EAAG,QAAO;AACvB,YAAM,MAAM;AACZ,aAAO,MAAM,MAAM,IAAI,QAAQ,GAAG,IAAI;AAAA,IACvC;AAAA,EACD;AACA,SAAO;AACR;AAKA,SAAS,WAAW,MAAM,YAAY;AACrC,MAAI,oBAAoB,KAAK,QAAQ,QAAQ,MAAM,KAAK,KAAK;AAC7D,aAAW,QAAQ,WAAY,sBAAqB,MAAM,OAAO,OAAQ,WAAW,IAAI,IAAI;AAC5F,SAAO,4CAA8C,oBAAoB,MAAM,OAAO;AACvF;AAQA,SAAS,gBAAgB,KAAK;AAC7B,SAAO,IAAI,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG;AACtI;AAIA,SAAS,UAAU,KAAK;AACvB,SAAO,wBAAwB,gBAAgB,GAAG;AACnD;AAIA,SAAS,SAAS,KAAK;AACtB,SAAO,UAAW,UAAU,GAAG,IAAI;AACpC;AAEA,IAAI;AAIJ,SAAS,eAAe;AACvB,MAAI;AACH,aAAS,OAAO,aAAa,aAAa,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;AAAA,EAC9E,SAAS,KAAK;AACb,aAAS;AAAA,EACV;AACD;AAOA,SAAS,iBAAiB,MAAM;AAC/B,MAAI,WAAW,OAAQ,cAAa;AACpC,SAAO,SAAS,OAAO,WAAW,IAAI,IAAI;AAC3C;AAEA,IAAM,oCAAoC;AAAA,EACtC,GAAG;AAAA,EACH,QAAQ;AACZ;AAKA,IAAM,cAAc;AAAA,EAChB,SAAS;AAAA,EACT,cAAc;AAAA,EACd,eAAe;AAAA,EACf,QAAQ;AACZ;AAIA,IAAM,cAAc;AAAA,EAChB,SAAS;AACb;AACA,IAAM,gBAAgB;AAAA,EAClB,iBAAiB;AACrB;AACA,IAAM,eAAe;AAAA,EACjB,iBAAiB;AACrB;AAEA,IAAM,aAAa;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACV;AACA,IAAM,eAAe;AAAA,EACjB,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,YAAY;AAChB;AACA,WAAW,UAAU,cAAc;AAC/B,QAAM,OAAO,aAAa,MAAM;AAChC,aAAW,QAAQ,YAAY;AAC3B,SAAK,SAAS,IAAI,IAAI,WAAW,IAAI;AAAA,EACzC;AACJ;AAIA,IAAM,iBAAiB;AAAA,EACnB,GAAG;AAAA,EACH,QAAQ;AACZ;AAIA,SAAS,QAAQ,OAAO;AACpB,SAAO,SAAS,MAAM,MAAM,YAAY,IAAI,OAAO;AACvD;AAIA,IAAM,SAAS,CAEf,MAEA,OAEA,SAAS;AAEL,QAAM,eAAe,MAAM,SACrB,iBACA;AAEN,QAAM,iBAAiB,oBAAoB,cAAc,KAAK;AAE9D,QAAM,OAAO,MAAM,QAAQ;AAE3B,QAAM,QAAQ,CAAC;AACf,QAAM,cAAc,MAAM,SAAS,CAAC;AAEpC,QAAM,iBAAiB;AAAA,IACnB,GAAI,SAAS,QAAQ,cAAc,CAAC;AAAA,EACxC;AACA,MAAI,MAAM;AACN,UAAM,WAAW,aAAa,MAAM,OAAO,IAAI;AAC/C,QAAI,UAAU;AACV,YAAM,aAAa,CAAC,SAAS;AAC7B,YAAMI,SAAQ;AAAA,QACV;AAAA,QACA;AAAA,MACJ;AACA,iBAAW,QAAQA,QAAO;AACtB,YAAI,SAAS,IAAI,GAAG;AAChB,qBAAW,KAAK,cAAc,SAAS,IAAI,CAAC;AAAA,QAChD;AAAA,MACJ;AACA,qBAAe,YAAY,WAAW,KAAK,GAAG;AAAA,IAClD;AAAA,EACJ;AAEA,WAAS,OAAO,OAAO;AACnB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,UAAU,QAAQ;AAClB;AAAA,IACJ;AACA,YAAQ,KAAK;AAAA;AAAA,MAET,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD;AAAA;AAAA,MAEJ,KAAK;AACD,uBAAe,MAAM;AACrB;AAAA;AAAA,MAEJ,KAAK;AACD,uBAAe,GAAG,KACb,eAAe,GAAG,IAAI,eAAe,GAAG,IAAI,MAAM,MAC/C;AACR;AAAA;AAAA,MAEJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,uBAAe,GAAG,IACd,UAAU,QAAQ,UAAU,UAAU,UAAU;AACpD;AAAA;AAAA,MAEJ,KAAK;AACD,YAAI,OAAO,UAAU,UAAU;AAC3B,yBAAe,gBAAgB,KAAK;AAAA,QACxC;AACA;AAAA;AAAA,MAEJ,KAAK;AACD,cAAM,QAAQ;AACd;AAAA;AAAA,MAEJ,KAAK;AACD,YAAI,OAAO,UAAU,UAAU;AAC3B,yBAAe,GAAG,IAAI,iBAAiB,KAAK;AAAA,QAChD,WACS,OAAO,UAAU,UAAU;AAChC,yBAAe,GAAG,IAAI;AAAA,QAC1B;AACA;AAAA;AAAA,MAEJ,KAAK;AAAA,MACL,KAAK;AACD,YAAI,UAAU,QAAQ,UAAU,QAAQ;AACpC,iBAAO,eAAe,aAAa;AAAA,QACvC;AACA;AAAA;AAAA,MAEJ;AACI,YAAI,aAAa,GAAG,MAAM,QAAQ;AAC9B,yBAAe,GAAG,IAAI;AAAA,QAC1B;AAAA,IACR;AAAA,EACJ;AAEA,QAAM,OAAO,UAAU,MAAM,cAAc;AAC3C,QAAM,gBAAgB,KAAK;AAE3B,MAAI,eAAe,QAAQ;AACvB,UAAM,gBAAgB;AAAA,EAC1B;AACA,MAAI,SAAS,OAAO;AAEhB,mBAAe,QAAQ;AAAA,MACnB,GAAG;AAAA,MACH,GAAG;AAAA,IACP;AAEA,WAAO,OAAO,gBAAgB,aAAa;AAE3C,QAAI,eAAe;AACnB,QAAI,KAAK,MAAM;AACf,QAAI,OAAO,OAAO,UAAU;AAExB,WAAK,GAAG,QAAQ,MAAM,GAAG;AAAA,IAC7B;AAEA,mBAAe,0BAA0B;AAAA,MACrC,QAAQ,iBAAiB,WAAW,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,iBAAiB,cAAc,CAAC;AAAA,IAC1G;AACA,eAAO,8BAAc,OAAO,cAAc;AAAA,EAC9C;AAEA,QAAM,EAAE,MAAM,OAAO,OAAO,IAAI;AAChC,QAAM,UAAU,SAAS,WACpB,SAAS,OAAO,QAAQ,KAAK,QAAQ,cAAc,MAAM;AAE9D,QAAM,OAAO,WAAW,MAAM;AAAA,IAC1B,GAAG;AAAA,IACH,OAAO,QAAQ;AAAA,IACf,QAAQ,SAAS;AAAA,EACrB,CAAC;AAED,iBAAe,QAAQ;AAAA,IACnB,GAAG;AAAA,IACH,SAAS,SAAS,IAAI;AAAA,IACtB,SAAS,QAAQ,cAAc,KAAK;AAAA,IACpC,UAAU,QAAQ,cAAc,MAAM;AAAA,IACtC,GAAG;AAAA,IACH,GAAI,UAAU,gBAAgB;AAAA,IAC9B,GAAG;AAAA,EACP;AACA,aAAO,8BAAc,QAAQ,cAAc;AAC/C;AAMA,iBAAiB,IAAI;AAErB,aAAa,IAAI,cAAc;AAI/B,IAAI,OAAO,aAAa,eAAe,OAAO,WAAW,aAAa;AAClE,QAAM,UAAU;AAEhB,MAAI,QAAQ,mBAAmB,QAAQ;AACnC,UAAM,UAAU,QAAQ;AACxB,UAAM,MAAM;AACZ,QAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AACjD,OAAC,mBAAmB,QAAQ,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,SAAS;AAC/D,YAAI;AACA;AAAA;AAAA,YAEA,OAAO,SAAS,YACZ,SAAS,QACT,gBAAgB;AAAA,YAEhB,OAAO,KAAK,UAAU,YACtB,OAAO,KAAK,WAAW;AAAA,YAEvB,CAAC,cAAc,IAAI;AAAA,YAAG;AACtB,oBAAQ,MAAM,GAAG;AAAA,UACrB;AAAA,QACJ,SACO,GAAG;AACN,kBAAQ,MAAM,GAAG;AAAA,QACrB;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AAEA,MAAI,QAAQ,qBAAqB,QAAQ;AACrC,UAAM,YAAY,QAAQ;AAC1B,QAAI,OAAO,cAAc,YAAY,cAAc,MAAM;AACrD,eAAS,OAAO,WAAW;AACvB,cAAM,MAAM,sBAAsB,MAAM;AACxC,YAAI;AACA,gBAAM,QAAQ,UAAU,GAAG;AAC3B,cAAI,OAAO,UAAU,YACjB,CAAC,SACD,MAAM,cAAc,QAAQ;AAC5B;AAAA,UACJ;AACA,cAAI,CAAC,eAAe,KAAK,KAAK,GAAG;AAC7B,oBAAQ,MAAM,GAAG;AAAA,UACrB;AAAA,QACJ,SACO,GAAG;AACN,kBAAQ,MAAM,GAAG;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AACA,SAAS,cAAc,OAAO;AAC1B,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,CAAC,CAAC,MAAM,GAAG;AAClD,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,CAAC,CAAC;AAErC,WAAS,gBAAgBC,UAAS;AAC9B,QAAIA,UAAS;AACT,YAAMC,QAAO,MAAM;AACnB,UAAI,OAAOA,UAAS,UAAU;AAE1B,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAA,QACV;AAAA,MACJ;AACA,YAAMC,QAAO,YAAYD,KAAI;AAC7B,UAAIC,OAAM;AACN,eAAO;AAAA,UACH,MAAAD;AAAA,UACA,MAAAC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,MACH,MAAM;AAAA,IACV;AAAA,EACJ;AACA,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC;AAE/D,WAAS,UAAU;AACf,UAAM,WAAW,MAAM;AACvB,QAAI,UAAU;AACV,eAAS;AACT,eAAS,CAAC,CAAC;AAAA,IACf;AAAA,EACJ;AAEA,WAAS,YAAY,UAAU;AAC3B,QAAI,KAAK,UAAU,KAAK,MAAM,KAAK,UAAU,QAAQ,GAAG;AACpD,cAAQ;AACR,eAAS,QAAQ;AACjB,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,WAAS,cAAc;AACnB,QAAI;AACJ,UAAMD,QAAO,MAAM;AACnB,QAAI,OAAOA,UAAS,UAAU;AAE1B,kBAAY;AAAA,QACR,MAAM;AAAA,QACN,MAAMA;AAAA,MACV,CAAC;AACD;AAAA,IACJ;AAEA,UAAMC,QAAO,YAAYD,KAAI;AAC7B,QAAI,YAAY;AAAA,MACZ,MAAAA;AAAA,MACA,MAAAC;AAAA,IACJ,CAAC,GAAG;AACA,UAAIA,UAAS,QAAW;AAEpB,cAAM,WAAW,UAAU,CAACD,KAAI,GAAG,WAAW;AAC9C,iBAAS;AAAA,UACL;AAAA,QACJ,CAAC;AAAA,MACL,WACSC,OAAM;AAEX,SAAC,KAAK,MAAM,YAAY,QAAQ,OAAO,SAAS,SAAS,GAAG,KAAK,OAAOD,KAAI;AAAA,MAChF;AAAA,IACJ;AAAA,EACJ;AAEA,gCAAU,MAAM;AACZ,eAAW,IAAI;AACf,WAAO;AAAA,EACX,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACZ,QAAI,SAAS;AACT,kBAAY;AAAA,IAChB;AAAA,EACJ,GAAG,CAAC,MAAM,MAAM,OAAO,CAAC;AAExB,QAAM,EAAE,MAAM,KAAK,IAAI;AACvB,MAAI,CAAC,MAAM;AACP,WAAO,MAAM,WACP,MAAM,WACN,MAAM,WACF,MAAM,eACN,8BAAc,QAAQ,CAAC,CAAC;AAAA,EACtC;AACA,SAAO,OAAO;AAAA,IACV,GAAG;AAAA,IACH,GAAG;AAAA,EACP,GAAG,OAAO,IAAI;AAClB;AAMA,IAAM,WAAO,2BAAW,CAAC,OAAO,QAAQ,cAAc;AAAA,EAClD,GAAG;AAAA,EACH,MAAM;AACV,CAAC,CAAC;AAMF,IAAM,iBAAa,2BAAW,CAAC,OAAO,QAAQ,cAAc;AAAA,EACxD,QAAQ;AAAA,EACR,GAAG;AAAA,EACH,MAAM;AACV,CAAC,CAAC;;;AC73DF,SAAS,EAAE,GAAE;AAAC,MAAI,GAAE,GAAE,IAAE;AAAG,MAAG,YAAU,OAAO,KAAG,YAAU,OAAO,EAAE,MAAG;AAAA,WAAU,YAAU,OAAO,EAAE,KAAG,MAAM,QAAQ,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE;AAAO,SAAI,IAAE,GAAE,IAAE,GAAE,IAAI,GAAE,CAAC,MAAI,IAAE,EAAE,EAAE,CAAC,CAAC,OAAK,MAAI,KAAG,MAAK,KAAG;AAAA,EAAE,MAAM,MAAI,KAAK,EAAE,GAAE,CAAC,MAAI,MAAI,KAAG,MAAK,KAAG;AAAG,SAAO;AAAC;AAAQ,SAAS,OAAM;AAAC,WAAQ,GAAE,GAAE,IAAE,GAAE,IAAE,IAAG,IAAE,UAAU,QAAO,IAAE,GAAE,IAAI,EAAC,IAAE,UAAU,CAAC,OAAK,IAAE,EAAE,CAAC,OAAK,MAAI,KAAG,MAAK,KAAG;AAAG,SAAO;AAAC;;;ACGxW,IAAME,eAAeA,CACxBC,QACAC,WACoB;AAEpB,QAAMC,gBAA2B,IAAIC,MAAMH,OAAOI,SAASH,OAAOG,MAAM;AACxE,WAASC,IAAI,GAAGA,IAAIL,OAAOI,QAAQC,KAAK;AACpCH,kBAAcG,CAAC,IAAIL,OAAOK,CAAC;EAC/B;AACA,WAASA,IAAI,GAAGA,IAAIJ,OAAOG,QAAQC,KAAK;AACpCH,kBAAcF,OAAOI,SAASC,CAAC,IAAIJ,OAAOI,CAAC;EAC/C;AACA,SAAOH;AACX;ACQA,IAAMI,6BAA6BA,CAC/BC,cACAC,eACwB;EACxBD;EACAC;AACH;AAGD,IAAMC,wBAAwBA,CAC1BC,WAAyC,oBAAIC,IAAG,GAChDC,aAA4C,MAC5CL,kBACmB;EACnBG;EACAE;EACAL;AACH;AAED,IAAMM,uBAAuB;AAE7B,IAAMC,kBAA+C,CAAA;AAErD,IAAMC,4BAA4B;AAE3B,IAAMC,wBAAyBC,YAAqB;AACvD,QAAMC,WAAWC,eAAeF,MAAM;AACtC,QAAM;IAAEG;IAAwBC;EAA8B,IAAKJ;AAEnE,QAAMK,kBAAmBC,eAAqB;AAC1C,QAAIA,UAAUC,WAAW,GAAG,KAAKD,UAAUE,SAAS,GAAG,GAAG;AACtD,aAAOC,+BAA+BH,SAAS;IACnD;AAEA,UAAMI,aAAaJ,UAAUK,MAAMf,oBAAoB;AAEvD,UAAMgB,aAAaF,WAAW,CAAC,MAAM,MAAMA,WAAWvB,SAAS,IAAI,IAAI;AACvE,WAAO0B,kBAAkBH,YAAYE,YAAYX,QAAQ;EAC7D;AAEA,QAAMa,8BAA8BA,CAChCxB,cACAyB,uBAC6B;AAC7B,QAAIA,oBAAoB;AACpB,YAAMC,oBAAoBZ,+BAA+Bd,YAAY;AACrE,YAAM2B,gBAAgBd,uBAAuBb,YAAY;AAEzD,UAAI0B,mBAAmB;AACnB,YAAIC,eAAe;AAEf,iBAAOnC,aAAamC,eAAeD,iBAAiB;QACxD;AAEA,eAAOA;MACX;AAEA,aAAOC,iBAAiBpB;IAC5B;AAEA,WAAOM,uBAAuBb,YAAY,KAAKO;EACnD;AAEA,SAAO;IACHQ;IACAS;;AAER;AAEA,IAAMD,oBAAoBA,CACtBH,YACAE,YACAM,oBAC8B;AAC9B,QAAMC,mBAAmBT,WAAWvB,SAASyB;AAC7C,MAAIO,qBAAqB,GAAG;AACxB,WAAOD,gBAAgB5B;EAC3B;AAEA,QAAM8B,mBAAmBV,WAAWE,UAAU;AAC9C,QAAMS,sBAAsBH,gBAAgBzB,SAAS6B,IAAIF,gBAAgB;AAEzE,MAAIC,qBAAqB;AACrB,UAAME,SAASV,kBAAkBH,YAAYE,aAAa,GAAGS,mBAAmB;AAChF,QAAIE,OAAQ,QAAOA;EACvB;AAEA,QAAM5B,aAAauB,gBAAgBvB;AACnC,MAAIA,eAAe,MAAM;AACrB,WAAO6B;EACX;AAGA,QAAMC,YACFb,eAAe,IACTF,WAAWgB,KAAK9B,oBAAoB,IACpCc,WAAWiB,MAAMf,UAAU,EAAEc,KAAK9B,oBAAoB;AAChE,QAAMgC,mBAAmBjC,WAAWR;AAEpC,WAASC,IAAI,GAAGA,IAAIwC,kBAAkBxC,KAAK;AACvC,UAAMyC,eAAelC,WAAWP,CAAC;AACjC,QAAIyC,aAAatC,UAAUkC,SAAS,GAAG;AACnC,aAAOI,aAAavC;IACxB;EACJ;AAEA,SAAOkC;AACX;AAOA,IAAMf,iCAAkCH,eACpCA,UAAUqB,MAAM,GAAG,EAAE,EAAEG,QAAQ,GAAG,MAAM,KAClCN,UACC,MAAK;AACF,QAAMO,UAAUzB,UAAUqB,MAAM,GAAG,EAAE;AACrC,QAAMK,aAAaD,QAAQD,QAAQ,GAAG;AACtC,QAAMG,WAAWF,QAAQJ,MAAM,GAAGK,UAAU;AAC5C,SAAOC,WAAWnC,4BAA4BmC,WAAWT;AAC7D,GAAC;AAKJ,IAAMtB,iBAAkBF,YAAsD;AACjF,QAAM;IAAEkC;IAAOC;EAAW,IAAKnC;AAC/B,SAAOoC,mBAAmBD,aAAaD,KAAK;AAChD;AAGA,IAAME,qBAAqBA,CACvBD,aACAD,UACiB;AACjB,QAAMjC,WAAWT,sBAAqB;AAEtC,aAAWF,gBAAgB6C,aAAa;AACpC,UAAME,QAAQF,YAAY7C,YAAY;AACtCgD,8BAA0BD,OAAOpC,UAAUX,cAAc4C,KAAK;EAClE;AAEA,SAAOjC;AACX;AAEA,IAAMqC,4BAA4BA,CAC9BC,YACArB,iBACA5B,cACA4C,UACA;AACA,QAAMM,MAAMD,WAAWpD;AACvB,WAASC,IAAI,GAAGA,IAAIoD,KAAKpD,KAAK;AAC1B,UAAMqD,kBAAkBF,WAAWnD,CAAC;AACpCsD,2BAAuBD,iBAAiBvB,iBAAiB5B,cAAc4C,KAAK;EAChF;AACJ;AAGA,IAAMQ,yBAAyBA,CAC3BD,iBACAvB,iBACA5B,cACA4C,UACA;AACA,MAAI,OAAOO,oBAAoB,UAAU;AACrCE,4BAAwBF,iBAAiBvB,iBAAiB5B,YAAY;AACtE;EACJ;AAEA,MAAI,OAAOmD,oBAAoB,YAAY;AACvCG,8BAA0BH,iBAAiBvB,iBAAiB5B,cAAc4C,KAAK;AAC/E;EACJ;AAEAW,0BACIJ,iBACAvB,iBACA5B,cACA4C,KAAK;AAEb;AAEA,IAAMS,0BAA0BA,CAC5BF,iBACAvB,iBACA5B,iBACA;AACA,QAAMwD,wBACFL,oBAAoB,KAAKvB,kBAAkB6B,QAAQ7B,iBAAiBuB,eAAe;AACvFK,wBAAsBxD,eAAeA;AACzC;AAEA,IAAMsD,4BAA4BA,CAC9BH,iBACAvB,iBACA5B,cACA4C,UACA;AACA,MAAIc,cAAcP,eAAe,GAAG;AAChCH,8BAA0BG,gBAAgBP,KAAK,GAAGhB,iBAAiB5B,cAAc4C,KAAK;AACtF;EACJ;AAEA,MAAIhB,gBAAgBvB,eAAe,MAAM;AACrCuB,oBAAgBvB,aAAa,CAAA;EACjC;AACAuB,kBAAgBvB,WAAWsD,KACvB5D,2BAA2BC,cAAcmD,eAAiC,CAAC;AAEnF;AAEA,IAAMI,0BAA0BA,CAC5BJ,iBACAvB,iBACA5B,cACA4C,UACA;AACA,QAAMgB,UAAUC,OAAOD,QAAQT,eAAe;AAC9C,QAAMD,MAAMU,QAAQ/D;AACpB,WAASC,IAAI,GAAGA,IAAIoD,KAAKpD,KAAK;AAC1B,UAAM,CAACgE,KAAKC,KAAK,IAAIH,QAAQ9D,CAAC;AAC9BkD,8BAA0Be,OAAON,QAAQ7B,iBAAiBkC,GAAG,GAAG9D,cAAc4C,KAAK;EACvF;AACJ;AAEA,IAAMa,UAAUA,CAAC7B,iBAAkCoC,SAAiC;AAChF,MAAIC,UAAUrC;AACd,QAAMsC,QAAQF,KAAK3C,MAAMf,oBAAoB;AAC7C,QAAM4C,MAAMgB,MAAMrE;AAElB,WAASC,IAAI,GAAGA,IAAIoD,KAAKpD,KAAK;AAC1B,UAAMqE,OAAOD,MAAMpE,CAAC;AAEpB,QAAIsE,OAAOH,QAAQ9D,SAAS6B,IAAImC,IAAI;AACpC,QAAI,CAACC,MAAM;AACPA,aAAOlE,sBAAqB;AAC5B+D,cAAQ9D,SAASkE,IAAIF,MAAMC,IAAI;IACnC;AACAH,cAAUG;EACd;AAEA,SAAOH;AACX;AAGA,IAAMP,gBAAiBY,UACnB,mBAAmBA,QAASA,KAAqBZ,kBAAkB;ACzQhE,IAAMa,iBACTC,kBACsB;AACtB,MAAIA,eAAe,GAAG;AAClB,WAAO;MACHxC,KAAKA,MAAME;MACXmC,KAAKA,MAAK;MAAE;;EAEpB;AAEA,MAAII,YAAY;AAChB,MAAIC,QAA4Bb,uBAAOc,OAAO,IAAI;AAClD,MAAIC,gBAAoCf,uBAAOc,OAAO,IAAI;AAE1D,QAAME,SAASA,CAACf,KAAUC,UAAgB;AACtCW,UAAMZ,GAAG,IAAIC;AACbU;AAEA,QAAIA,YAAYD,cAAc;AAC1BC,kBAAY;AACZG,sBAAgBF;AAChBA,cAAQb,uBAAOc,OAAO,IAAI;IAC9B;EACJ;AAEA,SAAO;IACH3C,IAAI8B,KAAG;AACH,UAAIC,QAAQW,MAAMZ,GAAG;AAErB,UAAIC,UAAU7B,QAAW;AACrB,eAAO6B;MACX;AACA,WAAKA,QAAQa,cAAcd,GAAG,OAAO5B,QAAW;AAC5C2C,eAAOf,KAAKC,KAAK;AACjB,eAAOA;MACX;IACJ;IACAM,IAAIP,KAAKC,OAAK;AACV,UAAID,OAAOY,OAAO;AACdA,cAAMZ,GAAG,IAAIC;MACjB,OAAO;AACHc,eAAOf,KAAKC,KAAK;MACrB;IACJ;;AAER;ACnDO,IAAMe,qBAAqB;AAElC,IAAMC,qBAAqB;AAC3B,IAAMC,kBAA4B,CAAA;AAGlC,IAAMC,qBAAqBA,CACvBC,WACAC,sBACAC,eACAC,8BACAC,gBACmB;EACnBJ;EACAC;EACAC;EACAC;EACAC;AACH;AAEM,IAAMC,uBAAwB7E,YAAqB;AACtD,QAAM;IAAE8E;IAAQC;EAA0B,IAAK/E;AAQ/C,MAAIgF,iBAAkB1E,eAAsC;AAExD,UAAMkE,YAAsB,CAAA;AAE5B,QAAIS,eAAe;AACnB,QAAIC,aAAa;AACjB,QAAIC,gBAAgB;AACpB,QAAIC;AAEJ,UAAM5C,MAAMlC,UAAUnB;AACtB,aAASkG,QAAQ,GAAGA,QAAQ7C,KAAK6C,SAAS;AACtC,YAAMC,mBAAmBhF,UAAU+E,KAAK;AAExC,UAAIJ,iBAAiB,KAAKC,eAAe,GAAG;AACxC,YAAII,qBAAqBjB,oBAAoB;AACzCG,oBAAUvB,KAAK3C,UAAUqB,MAAMwD,eAAeE,KAAK,CAAC;AACpDF,0BAAgBE,QAAQ;AACxB;QACJ;AAEA,YAAIC,qBAAqB,KAAK;AAC1BF,oCAA0BC;AAC1B;QACJ;MACJ;AAEA,UAAIC,qBAAqB,IAAKL;eACrBK,qBAAqB,IAAKL;eAC1BK,qBAAqB,IAAKJ;eAC1BI,qBAAqB,IAAKJ;IACvC;AAEA,UAAMK,qCACFf,UAAUrF,WAAW,IAAImB,YAAYA,UAAUqB,MAAMwD,aAAa;AAGtE,QAAIT,gBAAgBa;AACpB,QAAId,uBAAuB;AAE3B,QAAIc,mCAAmC/E,SAAS4D,kBAAkB,GAAG;AACjEM,sBAAgBa,mCAAmC5D,MAAM,GAAG,EAAE;AAC9D8C,6BAAuB;IAC3B;;;;;MAKIc,mCAAmChF,WAAW6D,kBAAkB;MAClE;AACEM,sBAAgBa,mCAAmC5D,MAAM,CAAC;AAC1D8C,6BAAuB;IAC3B;AAEA,UAAME,+BACFS,2BAA2BA,0BAA0BD,gBAC/CC,0BAA0BD,gBAC1B3D;AAEV,WAAO+C,mBACHC,WACAC,sBACAC,eACAC,4BAA4B;EAEpC;AAEA,MAAIG,QAAQ;AACR,UAAMU,aAAaV,SAAST;AAC5B,UAAMoB,yBAAyBT;AAC/BA,qBAAkB1E,eACdA,UAAUC,WAAWiF,UAAU,IACzBC,uBAAuBnF,UAAUqB,MAAM6D,WAAWrG,MAAM,CAAC,IACzDoF,mBAAmBD,iBAAiB,OAAOhE,WAAWkB,QAAW,IAAI;EACnF;AAEA,MAAIuD,4BAA4B;AAC5B,UAAMU,yBAAyBT;AAC/BA,qBAAkB1E,eACdyE,2BAA2B;MAAEzE;MAAW0E,gBAAgBS;KAAwB;EACxF;AAEA,SAAOT;AACX;AC1GO,IAAMU,sBAAuB1F,YAAqB;AAErD,QAAM2F,kBAAkB,oBAAIjG,IAAG;AAG/BM,SAAO4F,wBAAwBC,QAAQ,CAACC,KAAKT,UAAS;AAClDM,oBAAgBhC,IAAImC,KAAK,MAAUT,KAAK;EAC5C,CAAC;AAED,SAAQb,eAA0C;AAC9C,UAAMjD,SAAmB,CAAA;AACzB,QAAIwE,iBAA2B,CAAA;AAG/B,aAAS3G,IAAI,GAAGA,IAAIoF,UAAUrF,QAAQC,KAAK;AACvC,YAAM4G,WAAWxB,UAAUpF,CAAC;AAG5B,YAAM6G,cAAcD,SAAS,CAAC,MAAM;AACpC,YAAME,mBAAmBP,gBAAgBQ,IAAIH,QAAQ;AAErD,UAAIC,eAAeC,kBAAkB;AAEjC,YAAIH,eAAe5G,SAAS,GAAG;AAC3B4G,yBAAeK,KAAI;AACnB7E,iBAAO0B,KAAK,GAAG8C,cAAc;AAC7BA,2BAAiB,CAAA;QACrB;AACAxE,eAAO0B,KAAK+C,QAAQ;MACxB,OAAO;AAEHD,uBAAe9C,KAAK+C,QAAQ;MAChC;IACJ;AAGA,QAAID,eAAe5G,SAAS,GAAG;AAC3B4G,qBAAeK,KAAI;AACnB7E,aAAO0B,KAAK,GAAG8C,cAAc;IACjC;AAEA,WAAOxE;EACX;AACJ;AC1CO,IAAM8E,oBAAqBrG,aAAuB;EACrDgE,OAAOH,eAA+B7D,OAAO+D,SAAS;EACtDiB,gBAAgBH,qBAAqB7E,MAAM;EAC3CsG,eAAeZ,oBAAoB1F,MAAM;EACzC,GAAGD,sBAAsBC,MAAM;AAClC;ACVD,IAAMuG,sBAAsB;AAErB,IAAMC,iBAAiBA,CAACC,WAAmBC,gBAA4B;AAC1E,QAAM;IAAE1B;IAAgB3E;IAAiBS;IAA6BwF;EAAa,IAC/EI;AASJ,QAAMC,wBAAkC,CAAA;AACxC,QAAMC,aAAaH,UAAUI,KAAI,EAAGlG,MAAM4F,mBAAmB;AAE7D,MAAIhF,SAAS;AAEb,WAAS8D,QAAQuB,WAAWzH,SAAS,GAAGkG,SAAS,GAAGA,SAAS,GAAG;AAC5D,UAAMyB,oBAAoBF,WAAWvB,KAAK;AAE1C,UAAM;MACFT;MACAJ;MACAC;MACAC;MACAC;IAA4B,IAC5BK,eAAe8B,iBAAiB;AAEpC,QAAIlC,YAAY;AACZrD,eAASuF,qBAAqBvF,OAAOpC,SAAS,IAAI,MAAMoC,SAASA;AACjE;IACJ;AAEA,QAAIR,qBAAqB,CAAC,CAAC4D;AAC3B,QAAIrF,eAAee,gBACfU,qBACM2D,cAAcqC,UAAU,GAAGpC,4BAA4B,IACvDD,aAAa;AAGvB,QAAI,CAACpF,cAAc;AACf,UAAI,CAACyB,oBAAoB;AAErBQ,iBAASuF,qBAAqBvF,OAAOpC,SAAS,IAAI,MAAMoC,SAASA;AACjE;MACJ;AAEAjC,qBAAee,gBAAgBqE,aAAa;AAE5C,UAAI,CAACpF,cAAc;AAEfiC,iBAASuF,qBAAqBvF,OAAOpC,SAAS,IAAI,MAAMoC,SAASA;AACjE;MACJ;AAEAR,2BAAqB;IACzB;AAGA,UAAMiG,kBACFxC,UAAUrF,WAAW,IACf,KACAqF,UAAUrF,WAAW,IACnBqF,UAAU,CAAC,IACX8B,cAAc9B,SAAS,EAAE9C,KAAK,GAAG;AAE7C,UAAMuF,aAAaxC,uBACbuC,kBAAkB5C,qBAClB4C;AAEN,UAAME,UAAUD,aAAa3H;AAE7B,QAAIqH,sBAAsB7E,QAAQoF,OAAO,IAAI,IAAI;AAE7C;IACJ;AAEAP,0BAAsB1D,KAAKiE,OAAO;AAElC,UAAMC,iBAAiBrG,4BAA4BxB,cAAcyB,kBAAkB;AACnF,aAAS3B,IAAI,GAAGA,IAAI+H,eAAehI,QAAQ,EAAEC,GAAG;AAC5C,YAAMiD,QAAQ8E,eAAe/H,CAAC;AAC9BuH,4BAAsB1D,KAAKgE,aAAa5E,KAAK;IACjD;AAGAd,aAASuF,qBAAqBvF,OAAOpC,SAAS,IAAI,MAAMoC,SAASA;EACrE;AAEA,SAAOA;AACX;ICjFa6F,SAASA,IAAIC,eAAwC;AAC9D,MAAIhC,QAAQ;AACZ,MAAIiC;AACJ,MAAIC;AACJ,MAAIC,SAAS;AAEb,SAAOnC,QAAQgC,WAAWlI,QAAQ;AAC9B,QAAKmI,WAAWD,WAAWhC,OAAO,GAAI;AAClC,UAAKkC,gBAAgBE,QAAQH,QAAQ,GAAI;AACrCE,mBAAWA,UAAU;AACrBA,kBAAUD;MACd;IACJ;EACJ;AACA,SAAOC;AACX;AAEA,IAAMC,UAAWC,SAAwC;AAErD,MAAI,OAAOA,QAAQ,UAAU;AACzB,WAAOA;EACX;AAEA,MAAIH;AACJ,MAAIC,SAAS;AAEb,WAASG,IAAI,GAAGA,IAAID,IAAIvI,QAAQwI,KAAK;AACjC,QAAID,IAAIC,CAAC,GAAG;AACR,UAAKJ,gBAAgBE,QAAQC,IAAIC,CAAC,CAA4B,GAAI;AAC9DH,mBAAWA,UAAU;AACrBA,kBAAUD;MACd;IACJ;EACJ;AAEA,SAAOC;AACX;ACvCO,IAAMI,sBAAsBA,CAC/BC,sBACGC,qBACY;AACf,MAAIpB;AACJ,MAAIqB;AACJ,MAAIC;AACJ,MAAIC;AAEJ,QAAMC,oBAAqBzB,eAAqB;AAC5C,UAAMzG,SAAS8H,iBAAiBK,OAC5B,CAACC,gBAAgBC,wBAAwBA,oBAAoBD,cAAc,GAC3EP,kBAAiB,CAAe;AAGpCnB,kBAAcL,kBAAkBrG,MAAM;AACtC+H,eAAWrB,YAAY1C,MAAM1C;AAC7B0G,eAAWtB,YAAY1C,MAAML;AAC7BsE,qBAAiBK;AAEjB,WAAOA,cAAc7B,SAAS;EAClC;AAEA,QAAM6B,gBAAiB7B,eAAqB;AACxC,UAAM8B,eAAeR,SAAStB,SAAS;AAEvC,QAAI8B,cAAc;AACd,aAAOA;IACX;AAEA,UAAMhH,SAASiF,eAAeC,WAAWC,WAAW;AACpDsB,aAASvB,WAAWlF,MAAM;AAE1B,WAAOA;EACX;AAEA0G,mBAAiBC;AAEjB,SAAO,IAAIM,SAA2BP,eAAeb,OAAO,GAAGoB,IAAI,CAAC;AACxE;AC/CA,IAAMC,mBAA4E,CAAA;AAE3E,IAAMC,YAITtF,SACa;AACb,QAAMuF,cAAezG,WACjBA,MAAMkB,GAAG,KAAKqF;AAElBE,cAAY3F,gBAAgB;AAE5B,SAAO2F;AACX;AChBA,IAAMC,sBAAsB;AAC5B,IAAMC,yBAAyB;AAC/B,IAAMC,gBAAgB;AACtB,IAAMC,kBAAkB;AACxB,IAAMC,kBACF;AACJ,IAAMC,qBAAqB;AAE3B,IAAMC,cAAc;AACpB,IAAMC,aACF;AAEG,IAAMC,aAAc/F,WAAkByF,cAAcO,KAAKhG,KAAK;AAE9D,IAAMiG,WAAYjG,WAAkB,CAAC,CAACA,SAAS,CAACkG,OAAOC,MAAMD,OAAOlG,KAAK,CAAC;AAE1E,IAAMoG,YAAapG,WAAkB,CAAC,CAACA,SAASkG,OAAOE,UAAUF,OAAOlG,KAAK,CAAC;AAE9E,IAAMqG,YAAarG,WAAkBA,MAAM7C,SAAS,GAAG,KAAK8I,SAASjG,MAAM1B,MAAM,GAAG,EAAE,CAAC;AAEvF,IAAMgI,eAAgBtG,WAAkB0F,gBAAgBM,KAAKhG,KAAK;AAElE,IAAMuG,QAAQA,MAAM;AAE3B,IAAMC,eAAgBxG;;;;EAIlB2F,gBAAgBK,KAAKhG,KAAK,KAAK,CAAC4F,mBAAmBI,KAAKhG,KAAK;;AAEjE,IAAMyG,UAAUA,MAAM;AAEtB,IAAMC,WAAY1G,WAAkB6F,YAAYG,KAAKhG,KAAK;AAE1D,IAAM2G,UAAW3G,WAAkB8F,WAAWE,KAAKhG,KAAK;AAEjD,IAAM4G,oBAAqB5G,WAC9B,CAAC6G,iBAAiB7G,KAAK,KAAK,CAAC8G,oBAAoB9G,KAAK;AAEnD,IAAM+G,kBAAmB/G,WAAkBgH,oBAAoBhH,OAAOiH,aAAaR,OAAO;AAE1F,IAAMI,mBAAoB7G,WAAkBuF,oBAAoBS,KAAKhG,KAAK;AAE1E,IAAMkH,oBAAqBlH,WAC9BgH,oBAAoBhH,OAAOmH,eAAeX,YAAY;AAEnD,IAAMY,oBAAqBpH,WAC9BgH,oBAAoBhH,OAAOqH,eAAepB,QAAQ;AAE/C,IAAMqB,oBAAqBtH,WAAkBgH,oBAAoBhH,OAAOuH,eAAehB,KAAK;AAE5F,IAAMiB,wBAAyBxH,WAClCgH,oBAAoBhH,OAAOyH,mBAAmBhB,OAAO;AAElD,IAAMiB,sBAAuB1H,WAChCgH,oBAAoBhH,OAAO2H,iBAAiBlB,OAAO;AAEhD,IAAMmB,mBAAoB5H,WAAkBgH,oBAAoBhH,OAAO6H,cAAclB,OAAO;AAE5F,IAAMmB,oBAAqB9H,WAC9BgH,oBAAoBhH,OAAO+H,eAAerB,QAAQ;AAE/C,IAAMI,sBAAuB9G,WAAkBwF,uBAAuBQ,KAAKhG,KAAK;AAEhF,IAAMgI,4BAA6BhI,WACtCiI,uBAAuBjI,OAAOmH,aAAa;AAExC,IAAMe,gCAAiClI,WAC1CiI,uBAAuBjI,OAAOyH,iBAAiB;AAE5C,IAAMU,8BAA+BnI,WACxCiI,uBAAuBjI,OAAO2H,eAAe;AAE1C,IAAMS,0BAA2BpI,WAAkBiI,uBAAuBjI,OAAOiH,WAAW;AAE5F,IAAMoB,2BAA4BrI,WACrCiI,uBAAuBjI,OAAO6H,YAAY;AAEvC,IAAMS,4BAA6BtI,WACtCiI,uBAAuBjI,OAAO+H,eAAe,IAAI;AAE9C,IAAMQ,4BAA6BvI,WACtCiI,uBAAuBjI,OAAOuH,eAAe,IAAI;AAIrD,IAAMP,sBAAsBA,CACxBhH,OACAwI,WACAC,cACA;AACA,QAAMvK,SAASqH,oBAAoBmD,KAAK1I,KAAK;AAE7C,MAAI9B,QAAQ;AACR,QAAIA,OAAO,CAAC,GAAG;AACX,aAAOsK,UAAUtK,OAAO,CAAC,CAAC;IAC9B;AAEA,WAAOuK,UAAUvK,OAAO,CAAC,CAAE;EAC/B;AAEA,SAAO;AACX;AAEA,IAAM+J,yBAAyBA,CAC3BjI,OACAwI,WACAG,qBAAqB,UACrB;AACA,QAAMzK,SAASsH,uBAAuBkD,KAAK1I,KAAK;AAEhD,MAAI9B,QAAQ;AACR,QAAIA,OAAO,CAAC,GAAG;AACX,aAAOsK,UAAUtK,OAAO,CAAC,CAAC;IAC9B;AACA,WAAOyK;EACX;AAEA,SAAO;AACX;AAIA,IAAMhB,kBAAmBiB,WAAkBA,UAAU,cAAcA,UAAU;AAE7E,IAAMf,eAAgBe,WAAkBA,UAAU,WAAWA,UAAU;AAEvE,IAAM3B,cAAe2B,WAAkBA,UAAU,YAAYA,UAAU,UAAUA,UAAU;AAE3F,IAAMzB,gBAAiByB,WAAkBA,UAAU;AAEnD,IAAMvB,gBAAiBuB,WAAkBA,UAAU;AAEnD,IAAMnB,oBAAqBmB,WAAkBA,UAAU;AAEvD,IAAMrB,gBAAiBqB,WAAkBA,UAAU,YAAYA,UAAU;AAEzE,IAAMb,gBAAiBa,WAAkBA,UAAU;AC5G5C,IAAMC,mBAAmBA,MAAK;AAOjC,QAAMC,aAAaC,UAAU,OAAO;AACpC,QAAMC,YAAYD,UAAU,MAAM;AAClC,QAAME,YAAYF,UAAU,MAAM;AAClC,QAAMG,kBAAkBH,UAAU,aAAa;AAC/C,QAAMI,gBAAgBJ,UAAU,UAAU;AAC1C,QAAMK,eAAeL,UAAU,SAAS;AACxC,QAAMM,kBAAkBN,UAAU,YAAY;AAC9C,QAAMO,iBAAiBP,UAAU,WAAW;AAC5C,QAAMQ,eAAeR,UAAU,SAAS;AACxC,QAAMS,cAAcT,UAAU,QAAQ;AACtC,QAAMU,cAAcV,UAAU,QAAQ;AACtC,QAAMW,mBAAmBX,UAAU,cAAc;AACjD,QAAMY,kBAAkBZ,UAAU,aAAa;AAC/C,QAAMa,kBAAkBb,UAAU,aAAa;AAC/C,QAAMc,YAAYd,UAAU,MAAM;AAClC,QAAMe,mBAAmBf,UAAU,aAAa;AAChD,QAAMgB,cAAchB,UAAU,QAAQ;AACtC,QAAMiB,YAAYjB,UAAU,MAAM;AAClC,QAAMkB,eAAelB,UAAU,SAAS;AAUxC,QAAMmB,aAAaA,MACf,CAAC,QAAQ,SAAS,OAAO,cAAc,QAAQ,QAAQ,SAAS,QAAQ;AAC5E,QAAMC,gBAAgBA,MAClB;IACI;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;;IAEA;IACA;;IAEA;IACA;;IAEA;EAAa;AAErB,QAAMC,6BAA6BA,MAC/B,CAAC,GAAGD,cAAa,GAAIE,qBAAqBC,gBAAgB;AAC9D,QAAMC,gBAAgBA,MAAM,CAAC,QAAQ,UAAU,QAAQ,WAAW,QAAQ;AAC1E,QAAMC,kBAAkBA,MAAM,CAAC,QAAQ,WAAW,MAAM;AACxD,QAAMC,0BAA0BA,MAC5B,CAACJ,qBAAqBC,kBAAkBf,YAAY;AACxD,QAAMmB,aAAaA,MAAM,CAACC,YAAY,QAAQ,QAAQ,GAAGF,wBAAuB,CAAE;AAClF,QAAMG,4BAA4BA,MAC9B,CAACC,WAAW,QAAQ,WAAWR,qBAAqBC,gBAAgB;AACxE,QAAMQ,6BAA6BA,MAC/B,CACI,QACA;IAAEC,MAAM,CAAC,QAAQF,WAAWR,qBAAqBC,gBAAgB;EAAC,GAClEO,WACAR,qBACAC,gBAAgB;AAExB,QAAMU,4BAA4BA,MAC9B,CAACH,WAAW,QAAQR,qBAAqBC,gBAAgB;AAC7D,QAAMW,wBAAwBA,MAC1B,CAAC,QAAQ,OAAO,OAAO,MAAMZ,qBAAqBC,gBAAgB;AACtE,QAAMY,wBAAwBA,MAC1B,CACI,SACA,OACA,UACA,WACA,UACA,UACA,WACA,YACA,eACA,UAAU;AAElB,QAAMC,0BAA0BA,MAC5B,CAAC,SAAS,OAAO,UAAU,WAAW,eAAe,UAAU;AACnE,QAAMC,cAAcA,MAAM,CAAC,QAAQ,GAAGX,wBAAuB,CAAE;AAC/D,QAAMY,cAAcA,MAChB,CACIV,YACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,GAAGF,wBAAuB,CAAE;AAEpC,QAAMa,oBAAoBA,MACtB,CACIX,YACA,UACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,GAAGF,wBAAuB,CAAE;AAEpC,QAAMc,mBAAmBA,MACrB,CACIZ,YACA,UACA,QACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,GAAGF,wBAAuB,CAAE;AAEpC,QAAMe,aAAaA,MAAM,CAAC1C,YAAYuB,qBAAqBC,gBAAgB;AAC3E,QAAMmB,kBAAkBA,MACpB,CACI,GAAGtB,cAAa,GAChBuB,6BACAC,qBACA;IAAEC,UAAU,CAACvB,qBAAqBC,gBAAgB;EAAC,CAAE;AAE7D,QAAMuB,gBAAgBA,MAAM,CAAC,aAAa;IAAEC,QAAQ,CAAC,IAAI,KAAK,KAAK,SAAS,OAAO;EAAC,CAAE;AACtF,QAAMC,cAAcA,MAChB,CACI,QACA,SACA,WACAC,yBACAC,iBACA;IAAEC,MAAM,CAAC7B,qBAAqBC,gBAAgB;EAAC,CAAE;AAEzD,QAAM6B,4BAA4BA,MAC9B,CAACC,WAAWC,2BAA2BC,iBAAiB;AAC5D,QAAMC,cAAcA,MAChB;;IAEI;IACA;IACA;IACA/C;IACAa;IACAC;EAAgB;AAExB,QAAMkC,mBAAmBA,MACrB,CAAC,IAAIC,UAAUJ,2BAA2BC,iBAAiB;AAC/D,QAAMI,iBAAiBA,MAAM,CAAC,SAAS,UAAU,UAAU,QAAQ;AACnE,QAAMC,iBAAiBA,MACnB,CACI,UACA,YACA,UACA,WACA,UACA,WACA,eACA,cACA,cACA,cACA,cACA,aACA,OACA,cACA,SACA,YAAY;AAEpB,QAAMC,yBAAyBA,MAC3B,CAACH,UAAUL,WAAWV,6BAA6BC,mBAAmB;AAC1E,QAAMkB,YAAYA,MACd;;IAEI;IACA;IACAhD;IACAQ;IACAC;EAAgB;AAExB,QAAMwC,cAAcA,MAAM,CAAC,QAAQL,UAAUpC,qBAAqBC,gBAAgB;AAClF,QAAMyC,aAAaA,MAAM,CAAC,QAAQN,UAAUpC,qBAAqBC,gBAAgB;AACjF,QAAM0C,YAAYA,MAAM,CAACP,UAAUpC,qBAAqBC,gBAAgB;AACxE,QAAM2C,iBAAiBA,MAAM,CAACtC,YAAY,QAAQ,GAAGF,wBAAuB,CAAE;AAE9E,SAAO;IACHyC,WAAW;IACXC,OAAO;MACHC,SAAS,CAAC,QAAQ,QAAQ,SAAS,QAAQ;MAC3CC,QAAQ,CAAC,OAAO;MAChBC,MAAM,CAACC,YAAY;MACnBC,YAAY,CAACD,YAAY;MACzBE,OAAO,CAACC,KAAK;MACbC,WAAW,CAACJ,YAAY;MACxB,eAAe,CAACA,YAAY;MAC5BK,MAAM,CAAC,MAAM,OAAO,QAAQ;MAC5BC,MAAM,CAACC,iBAAiB;MACxB,eAAe,CACX,QACA,cACA,SACA,UACA,UACA,YACA,QACA,aACA,OAAO;MAEX,gBAAgB,CAACP,YAAY;MAC7BQ,SAAS,CAAC,QAAQ,SAAS,QAAQ,UAAU,WAAW,OAAO;MAC/DC,aAAa,CAAC,YAAY,QAAQ,UAAU,YAAY,WAAW,MAAM;MACzEC,QAAQ,CAACV,YAAY;MACrBW,QAAQ,CAACX,YAAY;MACrBY,SAAS,CAAC,MAAM1B,QAAQ;MACxB2B,MAAM,CAACb,YAAY;MACnB,eAAe,CAACA,YAAY;MAC5Bc,UAAU,CAAC,WAAW,SAAS,UAAU,QAAQ,SAAS,QAAQ;IACrE;IACDC,aAAa;;;;;;;;MASTjB,QAAQ,CACJ;QACIA,QAAQ,CACJ,QACA,UACA1C,YACAL,kBACAD,qBACAN,WAAW;MAElB,CAAA;;;;;;MAOL4D,WAAW,CAAC,WAAW;;;;;MAKvBY,SAAS,CACL;QAAEA,SAAS,CAAC9B,UAAUnC,kBAAkBD,qBAAqBf,cAAc;MAAC,CAAE;;;;;MAMlF,eAAe,CAAC;QAAE,eAAeY,WAAU;MAAE,CAAE;;;;;MAK/C,gBAAgB,CAAC;QAAE,gBAAgBA,WAAU;MAAE,CAAE;;;;;MAKjD,gBAAgB,CAAC;QAAE,gBAAgB,CAAC,QAAQ,SAAS,cAAc,cAAc;OAAG;;;;;MAKpF,kBAAkB,CAAC;QAAE,kBAAkB,CAAC,SAAS,OAAO;MAAC,CAAE;;;;;MAK3DsE,KAAK,CAAC;QAAEA,KAAK,CAAC,UAAU,SAAS;MAAC,CAAE;;;;;MAKpCC,SAAS,CACL,SACA,gBACA,UACA,QACA,eACA,SACA,gBACA,iBACA,cACA,gBACA,sBACA,sBACA,sBACA,mBACA,aACA,aACA,QACA,eACA,YACA,aACA,QAAQ;;;;;MAMZC,IAAI,CAAC,WAAW,aAAa;;;;;MAK7BC,OAAO,CAAC;QAAEA,OAAO,CAAC,SAAS,QAAQ,QAAQ,SAAS,KAAK;OAAG;;;;;MAK5DC,OAAO,CAAC;QAAEA,OAAO,CAAC,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAK;OAAG;;;;;MAKpEC,WAAW,CAAC,WAAW,gBAAgB;;;;;MAKvC,cAAc,CAAC;QAAEC,QAAQ,CAAC,WAAW,SAAS,QAAQ,QAAQ,YAAY;OAAG;;;;;MAK7E,mBAAmB,CAAC;QAAEA,QAAQ1E,2BAA0B;MAAE,CAAE;;;;;MAK5D2E,UAAU,CAAC;QAAEA,UAAUxE,cAAa;MAAE,CAAE;;;;;MAKxC,cAAc,CAAC;QAAE,cAAcA,cAAa;MAAE,CAAE;;;;;MAKhD,cAAc,CAAC;QAAE,cAAcA,cAAa;MAAE,CAAE;;;;;MAKhDyE,YAAY,CAAC;QAAEA,YAAYxE,gBAAe;MAAE,CAAE;;;;;MAK9C,gBAAgB,CAAC;QAAE,gBAAgBA,gBAAe;MAAE,CAAE;;;;;MAKtD,gBAAgB,CAAC;QAAE,gBAAgBA,gBAAe;MAAE,CAAE;;;;;MAKtDoB,UAAU,CAAC,UAAU,SAAS,YAAY,YAAY,QAAQ;;;;;MAK9DqD,OAAO,CAAC;QAAEA,OAAOvE,WAAU;MAAE,CAAE;;;;;MAK/B,WAAW,CAAC;QAAE,WAAWA,WAAU;MAAE,CAAE;;;;;MAKvC,WAAW,CAAC;QAAE,WAAWA,WAAU;MAAE,CAAE;;;;;;MAMvCwE,OAAO,CACH;QACI,WAAWxE,WAAU;;;;;QAKrBwE,OAAOxE,WAAU;MACpB,CAAA;;;;;;MAOLyE,KAAK,CACD;QACI,WAAWzE,WAAU;;;;;QAKrByE,KAAKzE,WAAU;MAClB,CAAA;;;;;MAML,YAAY,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAKzC,YAAY,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAKzC0E,KAAK,CAAC;QAAEA,KAAK1E,WAAU;MAAE,CAAE;;;;;MAK3B2E,OAAO,CAAC;QAAEA,OAAO3E,WAAU;MAAE,CAAE;;;;;MAK/B4E,QAAQ,CAAC;QAAEA,QAAQ5E,WAAU;MAAE,CAAE;;;;;MAKjC6E,MAAM,CAAC;QAAEA,MAAM7E,WAAU;MAAE,CAAE;;;;;MAK7B8E,YAAY,CAAC,WAAW,aAAa,UAAU;;;;;MAK/CC,GAAG,CAAC;QAAEA,GAAG,CAAC5E,WAAW,QAAQR,qBAAqBC,gBAAgB;OAAG;;;;;;;;MAUrEoF,OAAO,CACH;QACIA,OAAO,CACH/E,YACA,QACA,QACArB,gBACA,GAAGmB,wBAAuB,CAAE;MAEnC,CAAA;;;;;MAML,kBAAkB,CAAC;QAAEkF,MAAM,CAAC,OAAO,eAAe,OAAO,aAAa;OAAG;;;;;MAKzE,aAAa,CAAC;QAAEA,MAAM,CAAC,UAAU,QAAQ,cAAc;OAAG;;;;;MAK1DA,MAAM,CAAC;QAAEA,MAAM,CAAClD,UAAU9B,YAAY,QAAQ,WAAW,QAAQL,gBAAgB;OAAG;;;;;MAKpFsF,MAAM,CAAC;QAAEA,MAAM,CAAC,IAAInD,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAKtEuF,QAAQ,CAAC;QAAEA,QAAQ,CAAC,IAAIpD,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAK1EwF,OAAO,CACH;QACIA,OAAO,CACHjF,WACA,SACA,QACA,QACAR,qBACAC,gBAAgB;MAEvB,CAAA;;;;;MAML,aAAa,CAAC;QAAE,aAAaM,0BAAyB;MAAE,CAAE;;;;;MAK1D,iBAAiB,CAAC;QAAEmF,KAAKjF,2BAA0B;MAAE,CAAE;;;;;MAKvD,aAAa,CAAC;QAAE,aAAaE,0BAAyB;MAAE,CAAE;;;;;MAK1D,WAAW,CAAC;QAAE,WAAWA,0BAAyB;MAAE,CAAE;;;;;MAKtD,aAAa,CAAC;QAAE,aAAaJ,0BAAyB;MAAE,CAAE;;;;;MAK1D,iBAAiB,CAAC;QAAEoF,KAAKlF,2BAA0B;MAAE,CAAE;;;;;MAKvD,aAAa,CAAC;QAAE,aAAaE,0BAAyB;MAAE,CAAE;;;;;MAK1D,WAAW,CAAC;QAAE,WAAWA,0BAAyB;MAAE,CAAE;;;;;MAKtD,aAAa,CAAC;QAAE,aAAa,CAAC,OAAO,OAAO,SAAS,aAAa,WAAW;OAAG;;;;;MAKhF,aAAa,CAAC;QAAE,aAAaC,sBAAqB;MAAE,CAAE;;;;;MAKtD,aAAa,CAAC;QAAE,aAAaA,sBAAqB;MAAE,CAAE;;;;;MAKtDgF,KAAK,CAAC;QAAEA,KAAKxF,wBAAuB;MAAE,CAAE;;;;;MAKxC,SAAS,CAAC;QAAE,SAASA,wBAAuB;MAAE,CAAE;;;;;MAKhD,SAAS,CAAC;QAAE,SAASA,wBAAuB;MAAE,CAAE;;;;;MAKhD,mBAAmB,CAAC;QAAEyF,SAAS,CAAC,GAAGhF,sBAAqB,GAAI,QAAQ;OAAG;;;;;MAKvE,iBAAiB,CAAC;QAAE,iBAAiB,CAAC,GAAGC,wBAAuB,GAAI,QAAQ;OAAG;;;;;MAK/E,gBAAgB,CAAC;QAAE,gBAAgB,CAAC,QAAQ,GAAGA,wBAAuB,CAAE;OAAG;;;;;MAK3E,iBAAiB,CAAC;QAAEgF,SAAS,CAAC,UAAU,GAAGjF,sBAAqB,CAAE;OAAG;;;;;MAKrE,eAAe,CAAC;QAAEkF,OAAO,CAAC,GAAGjF,wBAAuB,GAAI;UAAEkF,UAAU,CAAC,IAAI,MAAM;QAAC,CAAE;MAAC,CAAE;;;;;MAKrF,cAAc,CACV;QAAEC,MAAM,CAAC,QAAQ,GAAGnF,wBAAuB,GAAI;UAAEkF,UAAU,CAAC,IAAI,MAAM;QAAC,CAAE;MAAC,CAAE;;;;;MAMhF,iBAAiB,CAAC;QAAE,iBAAiBnF,sBAAqB;MAAE,CAAE;;;;;MAK9D,eAAe,CAAC;QAAE,eAAe,CAAC,GAAGC,wBAAuB,GAAI,UAAU;OAAG;;;;;MAK7E,cAAc,CAAC;QAAE,cAAc,CAAC,QAAQ,GAAGA,wBAAuB,CAAE;OAAG;;;;;;MAMvEoF,GAAG,CAAC;QAAEA,GAAG9F,wBAAuB;MAAE,CAAE;;;;;MAKpC+F,IAAI,CAAC;QAAEA,IAAI/F,wBAAuB;MAAE,CAAE;;;;;MAKtCgG,IAAI,CAAC;QAAEA,IAAIhG,wBAAuB;MAAE,CAAE;;;;;MAKtCiG,IAAI,CAAC;QAAEA,IAAIjG,wBAAuB;MAAE,CAAE;;;;;MAKtCkG,IAAI,CAAC;QAAEA,IAAIlG,wBAAuB;MAAE,CAAE;;;;;MAKtCmG,KAAK,CAAC;QAAEA,KAAKnG,wBAAuB;MAAE,CAAE;;;;;MAKxCoG,KAAK,CAAC;QAAEA,KAAKpG,wBAAuB;MAAE,CAAE;;;;;MAKxCqG,IAAI,CAAC;QAAEA,IAAIrG,wBAAuB;MAAE,CAAE;;;;;MAKtCsG,IAAI,CAAC;QAAEA,IAAItG,wBAAuB;MAAE,CAAE;;;;;MAKtCuG,IAAI,CAAC;QAAEA,IAAIvG,wBAAuB;MAAE,CAAE;;;;;MAKtCwG,IAAI,CAAC;QAAEA,IAAIxG,wBAAuB;MAAE,CAAE;;;;;MAKtCyG,GAAG,CAAC;QAAEA,GAAG9F,YAAW;MAAE,CAAE;;;;;MAKxB+F,IAAI,CAAC;QAAEA,IAAI/F,YAAW;MAAE,CAAE;;;;;MAK1BgG,IAAI,CAAC;QAAEA,IAAIhG,YAAW;MAAE,CAAE;;;;;MAK1BiG,IAAI,CAAC;QAAEA,IAAIjG,YAAW;MAAE,CAAE;;;;;MAK1BkG,IAAI,CAAC;QAAEA,IAAIlG,YAAW;MAAE,CAAE;;;;;MAK1BmG,KAAK,CAAC;QAAEA,KAAKnG,YAAW;MAAE,CAAE;;;;;MAK5BoG,KAAK,CAAC;QAAEA,KAAKpG,YAAW;MAAE,CAAE;;;;;MAK5BqG,IAAI,CAAC;QAAEA,IAAIrG,YAAW;MAAE,CAAE;;;;;MAK1BsG,IAAI,CAAC;QAAEA,IAAItG,YAAW;MAAE,CAAE;;;;;MAK1BuG,IAAI,CAAC;QAAEA,IAAIvG,YAAW;MAAE,CAAE;;;;;MAK1BwG,IAAI,CAAC;QAAEA,IAAIxG,YAAW;MAAE,CAAE;;;;;MAK1B,WAAW,CAAC;QAAE,WAAWX,wBAAuB;MAAE,CAAE;;;;;MAKpD,mBAAmB,CAAC,iBAAiB;;;;;MAKrC,WAAW,CAAC;QAAE,WAAWA,wBAAuB;MAAE,CAAE;;;;;MAKpD,mBAAmB,CAAC,iBAAiB;;;;;;;;MAUrCyB,MAAM,CAAC;QAAEA,MAAMb,YAAW;MAAE,CAAE;;;;;MAK9B,eAAe,CAAC;QAAEwG,QAAQ,CAAC,QAAQ,GAAGvG,kBAAiB,CAAE;OAAG;;;;;MAK5D,mBAAmB,CAAC;QAAE,cAAc,CAAC,QAAQ,GAAGA,kBAAiB,CAAE;OAAG;;;;;MAKtE,mBAAmB,CAAC;QAAE,cAAc,CAAC,QAAQ,GAAGA,kBAAiB,CAAE;OAAG;;;;;MAKtE,cAAc,CAAC;QAAEwG,OAAO,CAAC,QAAQ,GAAGvG,iBAAgB,CAAE;OAAG;;;;;MAKzD,kBAAkB,CAAC;QAAE,aAAa,CAAC,QAAQ,GAAGA,iBAAgB,CAAE;OAAG;;;;;MAKnE,kBAAkB,CAAC;QAAE,aAAa,CAAC,QAAQ,GAAGA,iBAAgB,CAAE;OAAG;;;;;MAKnEwG,GAAG,CAAC;QAAEA,GAAG,CAACzI,gBAAgB,UAAU,GAAG+B,YAAW,CAAE;OAAG;;;;;MAKvD,SAAS,CACL;QACI,SAAS;UACL/B;UACA;;UAEA;UACA,GAAG+B,YAAW;QAAE;MAEvB,CAAA;;;;;MAML,SAAS,CACL;QACI,SAAS;UACL/B;UACA;UACA;;UAEA;;UAEA;YAAE0I,QAAQ,CAAC3I,eAAe;UAAC;UAC3B,GAAGgC,YAAW;QAAE;MAEvB,CAAA;;;;;MAML4G,GAAG,CAAC;QAAEA,GAAG,CAAC,UAAU,MAAM,GAAG5G,YAAW,CAAE;OAAG;;;;;MAK7C,SAAS,CAAC;QAAE,SAAS,CAAC,UAAU,MAAM,QAAQ,GAAGA,YAAW,CAAE;OAAG;;;;;MAKjE,SAAS,CAAC;QAAE,SAAS,CAAC,UAAU,MAAM,GAAGA,YAAW,CAAE;OAAG;;;;;;;;MAUzD,aAAa,CACT;QAAE+C,MAAM,CAAC,QAAQnF,WAAWoD,2BAA2BC,iBAAiB;MAAC,CAAE;;;;;MAM/E,kBAAkB,CAAC,eAAe,sBAAsB;;;;;MAKxD,cAAc,CAAC,UAAU,YAAY;;;;;MAKrC,eAAe,CACX;QACIuB,MAAM,CAAC3E,iBAAiBgJ,2BAA2BC,iBAAiB;MACvE,CAAA;;;;;MAML,gBAAgB,CACZ;QACI,gBAAgB,CACZ,mBACA,mBACA,aACA,kBACA,UACA,iBACA,YACA,kBACA,kBACA/F,WACA9B,gBAAgB;MAEvB,CAAA;;;;;MAML,eAAe,CACX;QAAEuD,MAAM,CAACuE,+BAA+BC,uBAAuBrJ,SAAS;MAAC,CAAE;;;;;MAM/E,iBAAiB,CAAC;QAAE,iBAAiB,CAACsB,gBAAgB;MAAC,CAAE;;;;;MAKzD,cAAc,CAAC,aAAa;;;;;MAK5B,eAAe,CAAC,SAAS;;;;;MAKzB,oBAAoB,CAAC,cAAc;;;;;MAKnC,cAAc,CAAC,eAAe,eAAe;;;;;MAK7C,eAAe,CAAC,qBAAqB,cAAc;;;;;MAKnD,gBAAgB,CAAC,sBAAsB,mBAAmB;;;;;MAK1D+D,UAAU,CAAC;QAAEA,UAAU,CAAClF,eAAekB,qBAAqBC,gBAAgB;OAAG;;;;;MAK/E,cAAc,CACV;QAAE,cAAc,CAACmC,UAAU,QAAQpC,qBAAqBiI,iBAAiB;MAAC,CAAE;;;;;MAMhFvE,SAAS,CACL;QACIA,SAAS;;UAEL3E;UACA,GAAGqB,wBAAuB;QAAE;MAEnC,CAAA;;;;;MAML,cAAc,CAAC;QAAE,cAAc,CAAC,QAAQJ,qBAAqBC,gBAAgB;OAAG;;;;;MAKhF,uBAAuB,CAAC;QAAEiI,MAAM,CAAC,UAAU,SAAS;MAAC,CAAE;;;;;MAKvD,mBAAmB,CACf;QAAEA,MAAM,CAAC,QAAQ,WAAW,QAAQlI,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAMhF,kBAAkB,CAAC;QAAE8D,MAAM,CAAC,QAAQ,UAAU,SAAS,WAAW,SAAS,KAAK;OAAG;;;;;;MAMnF,qBAAqB,CAAC;QAAEoE,aAAahH,WAAU;MAAE,CAAE;;;;;MAKnD,cAAc,CAAC;QAAE4C,MAAM5C,WAAU;MAAE,CAAE;;;;;MAKrC,mBAAmB,CAAC,aAAa,YAAY,gBAAgB,cAAc;;;;;MAK3E,yBAAyB,CAAC;QAAEiH,YAAY,CAAC,GAAG/F,eAAc,GAAI,MAAM;OAAG;;;;;MAKvE,6BAA6B,CACzB;QACI+F,YAAY,CACRhG,UACA,aACA,QACApC,qBACAiC,iBAAiB;MAExB,CAAA;;;;;MAML,yBAAyB,CAAC;QAAEmG,YAAYjH,WAAU;MAAE,CAAE;;;;;MAKtD,oBAAoB,CAChB;QAAE,oBAAoB,CAACiB,UAAU,QAAQpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAMrF,kBAAkB,CAAC,aAAa,aAAa,cAAc,aAAa;;;;;MAKxE,iBAAiB,CAAC,YAAY,iBAAiB,WAAW;;;;;MAK1D,aAAa,CAAC;QAAE8D,MAAM,CAAC,QAAQ,UAAU,WAAW,QAAQ;OAAG;;;;;MAK/DsE,QAAQ,CAAC;QAAEA,QAAQjI,wBAAuB;MAAE,CAAE;;;;;MAK9C,kBAAkB,CACd;QACIkI,OAAO,CACH,YACA,OACA,UACA,UACA,YACA,eACA,OACA,SACAtI,qBACAC,gBAAgB;MAEvB,CAAA;;;;;MAMLsI,YAAY,CACR;QAAEA,YAAY,CAAC,UAAU,UAAU,OAAO,YAAY,YAAY,cAAc;MAAC,CAAE;;;;;MAMvFC,OAAO,CAAC;QAAEA,OAAO,CAAC,UAAU,SAAS,OAAO,MAAM;OAAG;;;;;MAKrDC,MAAM,CAAC;QAAEA,MAAM,CAAC,cAAc,YAAY,QAAQ;OAAG;;;;;MAKrDC,SAAS,CAAC;QAAEA,SAAS,CAAC,QAAQ,UAAU,MAAM;OAAG;;;;;MAKjD5C,SAAS,CAAC;QAAEA,SAAS,CAAC,QAAQ9F,qBAAqBC,gBAAgB;OAAG;;;;;;;;MAUtE,iBAAiB,CAAC;QAAE0I,IAAI,CAAC,SAAS,SAAS,QAAQ;OAAG;;;;;MAKtD,WAAW,CAAC;QAAE,WAAW,CAAC,UAAU,WAAW,WAAW,MAAM;OAAG;;;;;MAKnE,aAAa,CAAC;QAAE,aAAa,CAAC,UAAU,WAAW,SAAS;OAAG;;;;;MAK/D,eAAe,CAAC;QAAEA,IAAIvH,gBAAe;MAAE,CAAE;;;;;MAKzC,aAAa,CAAC;QAAEuH,IAAInH,cAAa;MAAE,CAAE;;;;;MAKrC,WAAW,CAAC;QAAEmH,IAAIjH,YAAW;MAAE,CAAE;;;;;MAKjC,YAAY,CACR;QACIiH,IAAI,CACA,QACA;UACIC,QAAQ,CACJ;YAAEC,IAAI,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI;UAAC,GAClDrI,WACAR,qBACAC,gBAAgB;UAEpB6I,QAAQ,CAAC,IAAI9I,qBAAqBC,gBAAgB;UAClD8I,OAAO,CAACvI,WAAWR,qBAAqBC,gBAAgB;QAC3D,GACD+I,0BACAC,gBAAgB;MAEvB,CAAA;;;;;MAML,YAAY,CAAC;QAAEN,IAAIxH,WAAU;MAAE,CAAE;;;;;MAKjC,qBAAqB,CAAC;QAAE+H,MAAMpH,0BAAyB;MAAE,CAAE;;;;;MAK3D,oBAAoB,CAAC;QAAEqH,KAAKrH,0BAAyB;MAAE,CAAE;;;;;MAKzD,mBAAmB,CAAC;QAAE+G,IAAI/G,0BAAyB;MAAE,CAAE;;;;;MAKvD,iBAAiB,CAAC;QAAEoH,MAAM/H,WAAU;MAAE,CAAE;;;;;MAKxC,gBAAgB,CAAC;QAAEgI,KAAKhI,WAAU;MAAE,CAAE;;;;;MAKtC,eAAe,CAAC;QAAE0H,IAAI1H,WAAU;MAAE,CAAE;;;;;;;;MAUpCiI,SAAS,CAAC;QAAEA,SAASlH,YAAW;MAAE,CAAE;;;;;MAKpC,aAAa,CAAC;QAAE,aAAaA,YAAW;MAAE,CAAE;;;;;MAK5C,aAAa,CAAC;QAAE,aAAaA,YAAW;MAAE,CAAE;;;;;MAK5C,aAAa,CAAC;QAAE,aAAaA,YAAW;MAAE,CAAE;;;;;MAK5C,aAAa,CAAC;QAAE,aAAaA,YAAW;MAAE,CAAE;;;;;MAK5C,aAAa,CAAC;QAAE,aAAaA,YAAW;MAAE,CAAE;;;;;MAK5C,aAAa,CAAC;QAAE,aAAaA,YAAW;MAAE,CAAE;;;;;MAK5C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,cAAc,CAAC;QAAE,cAAcA,YAAW;MAAE,CAAE;;;;;MAK9C,YAAY,CAAC;QAAEmH,QAAQlH,iBAAgB;MAAE,CAAE;;;;;MAK3C,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,eAAe,CAAC;QAAE,aAAaA,iBAAgB;MAAE,CAAE;;;;;MAKnD,eAAe,CAAC;QAAE,aAAaA,iBAAgB;MAAE,CAAE;;;;;MAKnD,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,cAAc,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAKjD,YAAY,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAK/C,oBAAoB,CAAC,kBAAkB;;;;;MAKvC,YAAY,CAAC;QAAE,YAAYA,iBAAgB;MAAE,CAAE;;;;;MAK/C,oBAAoB,CAAC,kBAAkB;;;;;MAKvC,gBAAgB,CAAC;QAAEkH,QAAQ,CAAC,GAAGhH,eAAc,GAAI,UAAU,MAAM;OAAG;;;;;MAKpE,gBAAgB,CAAC;QAAEiH,QAAQ,CAAC,GAAGjH,eAAc,GAAI,UAAU,MAAM;OAAG;;;;;MAKpE,gBAAgB,CAAC;QAAEgH,QAAQlI,WAAU;MAAE,CAAE;;;;;MAKzC,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,mBAAmB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;;;;;MAKjD,mBAAmB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;;;;;MAKjD,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,kBAAkB,CAAC;QAAE,YAAYA,WAAU;MAAE,CAAE;;;;;MAK/C,gBAAgB,CAAC;QAAEmI,QAAQnI,WAAU;MAAE,CAAE;;;;;MAKzC,iBAAiB,CAAC;QAAEoI,SAAS,CAAC,GAAGlH,eAAc,GAAI,QAAQ,QAAQ;OAAG;;;;;MAKtE,kBAAkB,CACd;QAAE,kBAAkB,CAACD,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAM3E,aAAa,CACT;QAAEsJ,SAAS,CAAC,IAAInH,UAAUJ,2BAA2BC,iBAAiB;MAAC,CAAE;;;;;MAM7E,iBAAiB,CAAC;QAAEsH,SAASpI,WAAU;MAAE,CAAE;;;;;;;;MAU3C0C,QAAQ,CACJ;QACIA,QAAQ;;UAEJ;UACA;UACAzE;UACAoK;UACAC;QAAiB;MAExB,CAAA;;;;;MAML,gBAAgB,CAAC;QAAE5F,QAAQ1C,WAAU;MAAE,CAAE;;;;;MAKzC,gBAAgB,CACZ;QACI,gBAAgB,CACZ,QACA9B,kBACAmK,2BACAC,iBAAiB;MAExB,CAAA;;;;;MAML,sBAAsB,CAAC;QAAE,gBAAgBtI,WAAU;MAAE,CAAE;;;;;MAKvD,UAAU,CAAC;QAAEuI,MAAMvH,iBAAgB;MAAE,CAAE;;;;;;;MAOvC,gBAAgB,CAAC,YAAY;;;;;MAK7B,cAAc,CAAC;QAAEuH,MAAMvI,WAAU;MAAE,CAAE;;;;;;;MAOrC,iBAAiB,CAAC;QAAE,eAAe,CAACiB,UAAUH,iBAAiB;MAAC,CAAE;;;;;;;MAOlE,qBAAqB,CAAC;QAAE,eAAed,WAAU;MAAE,CAAE;;;;;MAKrD,gBAAgB,CAAC;QAAE,cAAcgB,iBAAgB;MAAE,CAAE;;;;;MAKrD,oBAAoB,CAAC;QAAE,cAAchB,WAAU;MAAE,CAAE;;;;;MAKnD,eAAe,CACX;QACI,eAAe,CACX,QACA7B,iBACAkK,2BACAC,iBAAiB;MAExB,CAAA;;;;;MAML,qBAAqB,CAAC;QAAE,eAAetI,WAAU;MAAE,CAAE;;;;;MAKrDwI,SAAS,CAAC;QAAEA,SAAS,CAACvH,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAKxE,aAAa,CAAC;QAAE,aAAa,CAAC,GAAGqC,eAAc,GAAI,eAAe,cAAc;OAAG;;;;;MAKnF,YAAY,CAAC;QAAE,YAAYA,eAAc;MAAE,CAAE;;;;;MAK7C,aAAa,CACT;QAAE,aAAa,CAAC,UAAU,WAAW,WAAW,QAAQ,UAAU,MAAM;MAAC,GACzE,cAAc;;;;;MAMlB,kBAAkB,CAAC;QAAEsH,MAAM,CAAC,OAAO,YAAY,aAAa,SAAS;OAAG;;;;;MAKxE,yBAAyB,CAAC;QAAE,eAAe,CAACxH,QAAQ;MAAC,CAAE;MACvD,8BAA8B,CAAC;QAAE,oBAAoBG,uBAAsB;MAAE,CAAE;MAC/E,4BAA4B,CAAC;QAAE,kBAAkBA,uBAAsB;MAAE,CAAE;MAC3E,gCAAgC,CAAC;QAAE,oBAAoBpB,WAAU;MAAE,CAAE;MACrE,8BAA8B,CAAC;QAAE,kBAAkBA,WAAU;MAAE,CAAE;MACjE,yBAAyB,CAAC;QAAE,eAAeoB,uBAAsB;MAAE,CAAE;MACrE,uBAAuB,CAAC;QAAE,aAAaA,uBAAsB;MAAE,CAAE;MACjE,2BAA2B,CAAC;QAAE,eAAepB,WAAU;MAAE,CAAE;MAC3D,yBAAyB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;MACvD,yBAAyB,CAAC;QAAE,eAAeoB,uBAAsB;MAAE,CAAE;MACrE,uBAAuB,CAAC;QAAE,aAAaA,uBAAsB;MAAE,CAAE;MACjE,2BAA2B,CAAC;QAAE,eAAepB,WAAU;MAAE,CAAE;MAC3D,yBAAyB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;MACvD,yBAAyB,CAAC;QAAE,eAAeoB,uBAAsB;MAAE,CAAE;MACrE,uBAAuB,CAAC;QAAE,aAAaA,uBAAsB;MAAE,CAAE;MACjE,2BAA2B,CAAC;QAAE,eAAepB,WAAU;MAAE,CAAE;MAC3D,yBAAyB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;MACvD,yBAAyB,CAAC;QAAE,eAAeoB,uBAAsB;MAAE,CAAE;MACrE,uBAAuB,CAAC;QAAE,aAAaA,uBAAsB;MAAE,CAAE;MACjE,2BAA2B,CAAC;QAAE,eAAepB,WAAU;MAAE,CAAE;MAC3D,yBAAyB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;MACvD,yBAAyB,CAAC;QAAE,eAAeoB,uBAAsB;MAAE,CAAE;MACrE,uBAAuB,CAAC;QAAE,aAAaA,uBAAsB;MAAE,CAAE;MACjE,2BAA2B,CAAC;QAAE,eAAepB,WAAU;MAAE,CAAE;MAC3D,yBAAyB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;MACvD,yBAAyB,CAAC;QAAE,eAAeoB,uBAAsB;MAAE,CAAE;MACrE,uBAAuB,CAAC;QAAE,aAAaA,uBAAsB;MAAE,CAAE;MACjE,2BAA2B,CAAC;QAAE,eAAepB,WAAU;MAAE,CAAE;MAC3D,yBAAyB,CAAC;QAAE,aAAaA,WAAU;MAAE,CAAE;MACvD,qBAAqB,CAAC;QAAE,eAAe,CAACnB,qBAAqBC,gBAAgB;MAAC,CAAE;MAChF,8BAA8B,CAAC;QAAE,oBAAoBsC,uBAAsB;MAAE,CAAE;MAC/E,4BAA4B,CAAC;QAAE,kBAAkBA,uBAAsB;MAAE,CAAE;MAC3E,gCAAgC,CAAC;QAAE,oBAAoBpB,WAAU;MAAE,CAAE;MACrE,8BAA8B,CAAC;QAAE,kBAAkBA,WAAU;MAAE,CAAE;MACjE,2BAA2B,CAAC;QAAE,eAAe,CAAC,UAAU,SAAS;MAAC,CAAE;MACpE,0BAA0B,CACtB;QAAE,eAAe,CAAC;UAAE0I,SAAS,CAAC,QAAQ,QAAQ;UAAGC,UAAU,CAAC,QAAQ,QAAQ;QAAC,CAAE;MAAC,CAAE;MAEtF,yBAAyB,CAAC;QAAE,kBAAkBhK,cAAa;MAAE,CAAE;MAC/D,wBAAwB,CAAC;QAAE,cAAc,CAACsC,QAAQ;MAAC,CAAE;MACrD,6BAA6B,CAAC;QAAE,mBAAmBG,uBAAsB;MAAE,CAAE;MAC7E,2BAA2B,CAAC;QAAE,iBAAiBA,uBAAsB;MAAE,CAAE;MACzE,+BAA+B,CAAC;QAAE,mBAAmBpB,WAAU;MAAE,CAAE;MACnE,6BAA6B,CAAC;QAAE,iBAAiBA,WAAU;MAAE,CAAE;;;;;MAK/D,aAAa,CAAC;QAAEyI,MAAM,CAAC,SAAS,aAAa,OAAO;OAAG;;;;;MAKvD,eAAe,CACX;QAAE,eAAe,CAAC,UAAU,WAAW,WAAW,QAAQ,UAAU,MAAM;MAAC,CAAE;;;;;MAMjF,iBAAiB,CAAC;QAAEA,MAAMxI,gBAAe;MAAE,CAAE;;;;;MAK7C,eAAe,CAAC;QAAEwI,MAAMpI,cAAa;MAAE,CAAE;;;;;MAKzC,aAAa,CAAC;QAAEoI,MAAMlI,YAAW;MAAE,CAAE;;;;;MAKrC,aAAa,CAAC;QAAE,aAAa,CAAC,SAAS,WAAW;MAAC,CAAE;;;;;MAKrD,cAAc,CAAC;QAAEkI,MAAM,CAAC,QAAQ5J,qBAAqBC,gBAAgB;OAAG;;;;;;;;MAUxE8J,QAAQ,CACJ;QACIA,QAAQ;;UAEJ;UACA;UACA/J;UACAC;QAAgB;MAEvB,CAAA;;;;;MAMLgD,MAAM,CAAC;QAAEA,MAAMT,UAAS;MAAE,CAAE;;;;;MAK5BwH,YAAY,CAAC;QAAEA,YAAY,CAAC5H,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAK9EgK,UAAU,CAAC;QAAEA,UAAU,CAAC7H,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAK1E,eAAe,CACX;QACI,eAAe;;UAEX;UACA;UACAV;UACAiK;UACAC;QAAiB;MAExB,CAAA;;;;;MAML,qBAAqB,CAAC;QAAE,eAAetI,WAAU;MAAE,CAAE;;;;;MAKrD+I,WAAW,CAAC;QAAEA,WAAW,CAAC,IAAI9H,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAKhF,cAAc,CAAC;QAAE,cAAc,CAACmC,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAKlFkK,QAAQ,CAAC;QAAEA,QAAQ,CAAC,IAAI/H,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAK1EmK,UAAU,CAAC;QAAEA,UAAU,CAAChI,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAK1EoK,OAAO,CAAC;QAAEA,OAAO,CAAC,IAAIjI,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAKxE,mBAAmB,CACf;QACI,mBAAmB;;UAEf;UACA;UACAD;UACAC;QAAgB;MAEvB,CAAA;;;;;MAML,iBAAiB,CAAC;QAAE,iBAAiBuC,UAAS;MAAE,CAAE;;;;;MAKlD,uBAAuB,CACnB;QAAE,uBAAuB,CAACJ,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAMhF,qBAAqB,CACjB;QAAE,qBAAqB,CAACmC,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAM9E,sBAAsB,CAClB;QAAE,sBAAsB,CAAC,IAAImC,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAMnF,uBAAuB,CACnB;QAAE,uBAAuB,CAACmC,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAMhF,mBAAmB,CACf;QAAE,mBAAmB,CAAC,IAAImC,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAMhF,oBAAoB,CAChB;QAAE,oBAAoB,CAACmC,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAM7E,qBAAqB,CACjB;QAAE,qBAAqB,CAACmC,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAM9E,kBAAkB,CACd;QAAE,kBAAkB,CAAC,IAAImC,UAAUpC,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;;;;MAW/E,mBAAmB,CAAC;QAAEoJ,QAAQ,CAAC,YAAY,UAAU;MAAC,CAAE;;;;;MAKxD,kBAAkB,CAAC;QAAE,kBAAkBjJ,wBAAuB;MAAE,CAAE;;;;;MAKlE,oBAAoB,CAAC;QAAE,oBAAoBA,wBAAuB;MAAE,CAAE;;;;;MAKtE,oBAAoB,CAAC;QAAE,oBAAoBA,wBAAuB;MAAE,CAAE;;;;;MAKtE,gBAAgB,CAAC;QAAEkK,OAAO,CAAC,QAAQ,OAAO;MAAC,CAAE;;;;;MAK7CC,SAAS,CAAC;QAAEA,SAAS,CAAC,OAAO,QAAQ;MAAC,CAAE;;;;;;;;MAUxCC,YAAY,CACR;QACIA,YAAY,CACR,IACA,OACA,UACA,WACA,UACA,aACA,QACAxK,qBACAC,gBAAgB;MAEvB,CAAA;;;;;MAML,uBAAuB,CAAC;QAAEuK,YAAY,CAAC,UAAU,UAAU;MAAC,CAAE;;;;;MAK9DC,UAAU,CAAC;QAAEA,UAAU,CAACrI,UAAU,WAAWpC,qBAAqBC,gBAAgB;OAAG;;;;;MAKrFsD,MAAM,CACF;QAAEA,MAAM,CAAC,UAAU,WAAW5D,WAAWK,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAMrFyK,OAAO,CAAC;QAAEA,OAAO,CAACtI,UAAUpC,qBAAqBC,gBAAgB;OAAG;;;;;MAKpE8C,SAAS,CAAC;QAAEA,SAAS,CAAC,QAAQnD,cAAcI,qBAAqBC,gBAAgB;OAAG;;;;;;;;MAUpF0K,UAAU,CAAC;QAAEA,UAAU,CAAC,UAAU,SAAS;MAAC,CAAE;;;;;MAK9ChH,aAAa,CACT;QAAEA,aAAa,CAAClE,kBAAkBO,qBAAqBC,gBAAgB;MAAC,CAAE;;;;;MAM9E,sBAAsB,CAAC;QAAE,sBAAsBF,2BAA0B;MAAE,CAAE;;;;;MAK7E6K,QAAQ,CAAC;QAAEA,QAAQnI,YAAW;MAAE,CAAE;;;;;MAKlC,YAAY,CAAC;QAAE,YAAYA,YAAW;MAAE,CAAE;;;;;MAK1C,YAAY,CAAC;QAAE,YAAYA,YAAW;MAAE,CAAE;;;;;MAK1C,YAAY,CAAC;QAAE,YAAYA,YAAW;MAAE,CAAE;;;;;MAK1CoI,OAAO,CAAC;QAAEA,OAAOnI,WAAU;MAAE,CAAE;;;;;MAK/B,WAAW,CAAC;QAAE,WAAWA,WAAU;MAAE,CAAE;;;;;MAKvC,WAAW,CAAC;QAAE,WAAWA,WAAU;MAAE,CAAE;;;;;MAKvC,WAAW,CAAC;QAAE,WAAWA,WAAU;MAAE,CAAE;;;;;MAKvC,YAAY,CAAC,UAAU;;;;;MAKvBoI,MAAM,CAAC;QAAEA,MAAMnI,UAAS;MAAE,CAAE;;;;;MAK5B,UAAU,CAAC;QAAE,UAAUA,UAAS;MAAE,CAAE;;;;;MAKpC,UAAU,CAAC;QAAE,UAAUA,UAAS;MAAE,CAAE;;;;;MAKpCoI,WAAW,CACP;QAAEA,WAAW,CAAC/K,qBAAqBC,kBAAkB,IAAI,QAAQ,OAAO,KAAK;MAAC,CAAE;;;;;MAMpF,oBAAoB,CAAC;QAAE+K,QAAQjL,2BAA0B;MAAE,CAAE;;;;;MAK7D,mBAAmB,CAAC;QAAEgL,WAAW,CAAC,MAAM,MAAM;MAAC,CAAE;;;;;MAKjDE,WAAW,CAAC;QAAEA,WAAWrI,eAAc;MAAE,CAAE;;;;;MAK3C,eAAe,CAAC;QAAE,eAAeA,eAAc;MAAE,CAAE;;;;;MAKnD,eAAe,CAAC;QAAE,eAAeA,eAAc;MAAE,CAAE;;;;;MAKnD,eAAe,CAAC;QAAE,eAAeA,eAAc;MAAE,CAAE;;;;;MAKnD,kBAAkB,CAAC,gBAAgB;;;;;;;;MAUnCsI,QAAQ,CAAC;QAAEA,QAAQ/J,WAAU;MAAE,CAAE;;;;;MAKjCgK,YAAY,CAAC;QAAEA,YAAY,CAAC,QAAQ,MAAM;MAAC,CAAE;;;;;MAK7C,eAAe,CAAC;QAAEC,OAAOjK,WAAU;MAAE,CAAE;;;;;MAKvC,gBAAgB,CACZ;QAAEkK,QAAQ,CAAC,UAAU,QAAQ,SAAS,cAAc,aAAa,YAAY;MAAC,CAAE;;;;;MAMpFC,QAAQ,CACJ;QACIA,QAAQ,CACJ,QACA,WACA,WACA,QACA,QACA,QACA,QACA,eACA,QACA,gBACA,YACA,QACA,aACA,iBACA,SACA,QACA,WACA,QACA,YACA,cACA,cACA,cACA,YACA,YACA,YACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,eACA,eACA,WACA,YACAtL,qBACAC,gBAAgB;MAEvB,CAAA;;;;;MAML,gBAAgB,CAAC;QAAE,gBAAgB,CAAC,SAAS,SAAS;MAAC,CAAE;;;;;MAKzD,kBAAkB,CAAC;QAAE,kBAAkB,CAAC,QAAQ,MAAM;MAAC,CAAE;;;;;MAKzDsL,QAAQ,CAAC;QAAEA,QAAQ,CAAC,QAAQ,IAAI,KAAK,GAAG;OAAG;;;;;MAK3C,mBAAmB,CAAC;QAAEC,QAAQ,CAAC,QAAQ,QAAQ;MAAC,CAAE;;;;;MAKlD,YAAY,CAAC;QAAE,YAAYpL,wBAAuB;MAAE,CAAE;;;;;MAKtD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,cAAc,CAAC;QAAE,cAAcA,wBAAuB;MAAE,CAAE;;;;;MAK1D,cAAc,CAAC;QAAE,cAAcA,wBAAuB;MAAE,CAAE;;;;;MAK1D,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,YAAY,CAAC;QAAE,YAAYA,wBAAuB;MAAE,CAAE;;;;;MAKtD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,cAAc,CAAC;QAAE,cAAcA,wBAAuB;MAAE,CAAE;;;;;MAK1D,cAAc,CAAC;QAAE,cAAcA,wBAAuB;MAAE,CAAE;;;;;MAK1D,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,aAAa,CAAC;QAAE,aAAaA,wBAAuB;MAAE,CAAE;;;;;MAKxD,cAAc,CAAC;QAAEqL,MAAM,CAAC,SAAS,OAAO,UAAU,YAAY;OAAG;;;;;MAKjE,aAAa,CAAC;QAAEA,MAAM,CAAC,UAAU,QAAQ;MAAC,CAAE;;;;;MAK5C,aAAa,CAAC;QAAEA,MAAM,CAAC,QAAQ,KAAK,KAAK,MAAM;OAAG;;;;;MAKlD,mBAAmB,CAAC;QAAEA,MAAM,CAAC,aAAa,WAAW;MAAC,CAAE;;;;;MAKxDC,OAAO,CAAC;QAAEA,OAAO,CAAC,QAAQ,QAAQ,cAAc;OAAG;;;;;MAKnD,WAAW,CAAC;QAAE,aAAa,CAAC,KAAK,QAAQ,OAAO;OAAG;;;;;MAKnD,WAAW,CAAC;QAAE,aAAa,CAAC,KAAK,MAAM,MAAM;OAAG;;;;;MAKhD,YAAY,CAAC,kBAAkB;;;;;MAK/BC,QAAQ,CAAC;QAAEA,QAAQ,CAAC,QAAQ,QAAQ,OAAO,MAAM;OAAG;;;;;MAKpD,eAAe,CACX;QACI,eAAe,CACX,QACA,UACA,YACA,aACA3L,qBACAC,gBAAgB;MAEvB,CAAA;;;;;;;;MAWL2L,MAAM,CAAC;QAAEA,MAAM,CAAC,QAAQ,GAAGzK,WAAU,CAAE;OAAG;;;;;MAK1C,YAAY,CACR;QACI0K,QAAQ,CACJzJ,UACAJ,2BACAC,mBACAgG,iBAAiB;MAExB,CAAA;;;;;MAML4D,QAAQ,CAAC;QAAEA,QAAQ,CAAC,QAAQ,GAAG1K,WAAU,CAAE;OAAG;;;;;;;;MAU9C,uBAAuB,CAAC;QAAE,uBAAuB,CAAC,QAAQ,MAAM;MAAC,CAAE;IACtE;IACD2K,wBAAwB;MACpBpH,UAAU,CAAC,cAAc,YAAY;MACrCC,YAAY,CAAC,gBAAgB,cAAc;MAC3CC,OAAO,CACH,WACA,WACA,YACA,YACA,SACA,OACA,OACA,SACA,UACA,MAAM;MAEV,WAAW,CAAC,SAAS,MAAM;MAC3B,WAAW,CAAC,OAAO,QAAQ;MAC3BU,MAAM,CAAC,SAAS,QAAQ,QAAQ;MAChCM,KAAK,CAAC,SAAS,OAAO;MACtBM,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,MAAM,IAAI;MAChEC,IAAI,CAAC,MAAM,IAAI;MACfC,IAAI,CAAC,MAAM,IAAI;MACfS,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,MAAM,MAAM,MAAM,IAAI;MAChEC,IAAI,CAAC,MAAM,IAAI;MACfC,IAAI,CAAC,MAAM,IAAI;MACflF,MAAM,CAAC,KAAK,GAAG;MACf,aAAa,CAAC,SAAS;MACvB,cAAc,CACV,eACA,oBACA,cACA,eACA,cAAc;MAElB,eAAe,CAAC,YAAY;MAC5B,oBAAoB,CAAC,YAAY;MACjC,cAAc,CAAC,YAAY;MAC3B,eAAe,CAAC,YAAY;MAC5B,gBAAgB,CAAC,YAAY;MAC7B,cAAc,CAAC,WAAW,UAAU;MACpCuH,SAAS,CACL,aACA,aACA,aACA,aACA,aACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,YAAY;MAEhB,aAAa,CAAC,cAAc,YAAY;MACxC,aAAa,CAAC,cAAc,YAAY;MACxC,aAAa,CAAC,cAAc,YAAY;MACxC,aAAa,CAAC,cAAc,YAAY;MACxC,aAAa,CAAC,cAAc,YAAY;MACxC,aAAa,CAAC,cAAc,YAAY;MACxC,kBAAkB,CAAC,oBAAoB,kBAAkB;MACzD,YAAY,CACR,cACA,cACA,cACA,cACA,eACA,eACA,cACA,cACA,cACA,YAAY;MAEhB,cAAc,CAAC,cAAc,YAAY;MACzC,cAAc,CAAC,cAAc,YAAY;MACzC,gBAAgB,CACZ,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,kBACA,kBACA,kBACA,gBAAgB;MAEpB,kBAAkB,CAAC,kBAAkB,gBAAgB;MACrD,kBAAkB,CAAC,kBAAkB,gBAAgB;MACrD6B,WAAW,CAAC,eAAe,eAAe,gBAAgB;MAC1D,kBAAkB,CAAC,aAAa,eAAe,eAAe,aAAa;MAC3E,YAAY,CACR,aACA,aACA,aACA,aACA,cACA,cACA,aACA,aACA,aACA,WAAW;MAEf,aAAa,CAAC,aAAa,WAAW;MACtC,aAAa,CAAC,aAAa,WAAW;MACtC,YAAY,CACR,aACA,aACA,aACA,aACA,cACA,cACA,aACA,aACA,aACA,WAAW;MAEf,aAAa,CAAC,aAAa,WAAW;MACtC,aAAa,CAAC,aAAa,WAAW;MACtCS,OAAO,CAAC,WAAW,WAAW,UAAU;MACxC,WAAW,CAAC,OAAO;MACnB,WAAW,CAAC,OAAO;MACnB,YAAY,CAAC,OAAO;IACvB;IACDK,gCAAgC;MAC5B,aAAa,CAAC,SAAS;IAC1B;IACDC,yBAAyB,CACrB,KACA,MACA,SACA,YACA,UACA,mBACA,QACA,gBACA,cACA,UACA,eACA,WAAW;;AAGvB;IGv+EaC,UAAUC,oCAAoBC,gBAAgB;;;ACIpD,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;AC0Be,IAAAC,uBAAA;AALR,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa,8CAAC,QAAK,MAAK,mBAAkB;AAAA,EAC1C,YAAY,8CAAC,QAAK,MAAK,kBAAiB;AAAA,EACxC;AACF,GAA0B;AACxB,SACE,8CAAC,SAAI,WAAW,GAAG,yBAAyB,SAAS,GACnD,yDAAC,SAAI,WAAU,+BACb;AAAA,kDAAC,UAAK,WAAU,sEACb,kBAAQ,OACX;AAAA,IACA,8CAAC,SAAI,WAAU,iCAAgC;AAAA,IAC/C,8CAAC,UAAK,WAAU,sEACb,uBACH;AAAA,IACA,8CAAC,SAAI,WAAU,iCAAgC;AAAA,IAC/C,8CAAC,UAAK,WAAU,sEACb,uBAAa,OAChB;AAAA,IAEA,+CAAC,SAAI,WAAU,iCACb;AAAA,oDAAC,UAAK,WAAU,qEACb,kBAAQ,OACX;AAAA,MACA,8CAAC,SAAI,WAAU,mCACZ,kBAAQ,SAAS,IAAI,CAAC,YACrB,8CAAC,kBAAmC,WAAf,QAAQ,KAAyB,CACvD,GACH;AAAA,OACF;AAAA,IAEA,8CAAC,SAAI,WAAU,sEACZ,sBACH;AAAA,IACA,8CAAC,SAAI,WAAU,qEACZ,qBACH;AAAA,IAEA,+CAAC,SAAI,WAAU,iCACb;AAAA,oDAAC,UAAK,WAAU,qEACb,uBACH;AAAA,MACA,8CAAC,SAAI,WAAU,yCAAyC,kBAAO;AAAA,OACjE;AAAA,IAEA,8CAAC,SAAI,WAAU,sEACZ,sBACH;AAAA,IACA,8CAAC,SAAI,WAAU,qEACZ,qBACH;AAAA,IAEA,+CAAC,SAAI,WAAU,iCACb;AAAA,oDAAC,UAAK,WAAU,qEACb,uBAAa,OAChB;AAAA,MACA,8CAAC,SAAI,WAAU,mCACZ,uBAAa,SAAS,IAAI,CAAC,YAC1B,8CAAC,kBAAmC,WAAf,QAAQ,KAAyB,CACvD,GACH;AAAA,OACF;AAAA,KACF,GACF;AAEJ;AAEA,SAAS,eAAe,EAAE,QAAQ,GAA6B;AAC7D,SACE,+CAAC,SAAI,WAAU,kCACb;AAAA,kDAAC,UAAK,WAAU,wCACb,kBAAQ,OACX;AAAA,IACA,+CAAC,SAAI,WAAU,gCACZ;AAAA,cAAQ,MAAM,IAAI,CAAC,SAClB,+CAAC,SAAqB,WAAU,+BAC9B;AAAA,sDAAC,UAAK,WAAU,oCACb,eAAK,MACR;AAAA,QACA,8CAAC,UAAK,WAAU,qCACb,eAAK,OACR;AAAA,WANQ,KAAK,KAOf,CACD;AAAA,MACD,8CAAC,UAAK,WAAU,+BAA8B,4BAAS;AAAA,OACzD;AAAA,KACF;AAEJ;;;AC1HA,IAAAC,iBAAoC;AAqFhC,IAAAC,uBAAA;AAzBG,SAAS,YAAY,OAAyB;AACnD,QAAM;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,IACX,aAAa,EAAE,KAAK,IAAI,KAAK,IAAI;AAAA,IACjC,WAAW;AAAA,IACX,QAAAC,UAAS;AAAA,IACT,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,mBAAmB,oBAAoB,aAAa,EAAE,GAAG,KAAK;AACpE,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,IAAI;AAGvD,gCAAU,MAAM;AACd,QAAIA,WAAU,MAAM;AAClB,iBAAW,MAAM,QAAQ,EAAE,KAAK,gBAAgB;AAAA,IAClD,OAAO;AACL,uBAAiB,IAAI;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,MAAM,UAAUA,OAAM,CAAC;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAM;AAAA,MACN;AAAA,MACA,WAAW;AAAA,MACX,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;;;ACjGA,IAAAC,iBAAyC;AACzC,qBAAkB;AAqET,IAAAC,uBAAA;AAjDT,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,UAAM,uBAAoB,IAAI;AAEpC,gCAAU,MAAM;AACd,QAAI,CAAC,IAAI,QAAS;AAClB,UAAM,MAAM,IAAI,QAAQ;AACxB,QAAI,CAAC,IAAK;AAGV,QAAI,QAAQ,gBAAgB;AAE5B,UAAM,KAAK,eAAAC,QAAM,IAAI,GAAG;AACxB,UAAMC,KAAI;AAGV,UAAM,OAAO,KAAK,IAAIA,EAAC,IAAI,CAAC;AAAA,UACtB,IAAI,QAAQA,EAAC,IAAI,CAAC;AAAA,UAClB,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,IAAIA,EAAC;AAAA,UACpC,IAAI,KAAK,IAAI,IAAI,SAASA,EAAC;AAAA,UAC3B,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,QAAQA,EAAC,IAAI,IAAI,MAAM;AAAA,UACtD,IAAIA,EAAC,IAAI,IAAI,MAAM;AAAA,UACnB,CAAC,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,SAASA,EAAC;AAAA,UACtC,CAAC,IAAI,IAAIA,EAAC;AAAA,UACV,CAAC,IAAI,CAAC,IAAI,IAAIA,EAAC,IAAI,CAAC;AAAA;AAI1B,UAAM,WAAW,GAAG,KAAK,MAAM;AAAA,MAC7B;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,aAAa;AAAA,MACb,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AACD,QAAI,QAAQ,YAAY,QAAQ;AAEhC,WAAO,MAAM;AACX,UAAI,SAAS,gBAAgB;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,GAAG,GAAG,OAAO,QAAQ,MAAM,MAAM,CAAC;AAEtC,SAAO,8CAAC,OAAE,KAAU;AACtB;AAaA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyC;AACvC,QAAM,UAAM,uBAAoB,IAAI;AAEpC,gCAAU,MAAM;AACd,QAAI,CAAC,IAAI,QAAS;AAClB,UAAM,MAAM,IAAI,QAAQ;AACxB,QAAI,CAAC,IAAK;AAEV,QAAI,QAAQ,gBAAgB;AAE5B,UAAM,KAAK,eAAAD,QAAM,IAAI,GAAG;AACxB,UAAM,aAAa,GAAG,OAAO,IAAI,IAAI,UAAU;AAAA,MAC7C;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,aAAa;AAAA,MACb,WAAW;AAAA,IACb,CAAC;AACD,QAAI,QAAQ,YAAY,UAAU;AAElC,WAAO,MAAM;AACX,UAAI,SAAS,gBAAgB;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,IAAI,IAAI,UAAU,MAAM,MAAM,CAAC;AAEnC,SAAO,8CAAC,OAAE,KAAU;AACtB;AAWA,SAAS,OAAO,EAAE,GAAG,GAAG,KAAK,GAAoC;AAC/D,SACE,+CAAC,OACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,UAAU;AAAA,QACV,MAAK;AAAA,QACL,QAAO;AAAA;AAAA,IACT;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,YAAW;AAAA,QACX,kBAAiB;AAAA,QACjB,MAAK;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAW;AAAA,QAEV;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;AAiBA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAwC;AACtC,QAAM,UAAM,uBAAoB,IAAI;AAEpC,gCAAU,MAAM;AACd,QAAI,CAAC,IAAI,QAAS;AAClB,UAAM,MAAM,IAAI,QAAQ;AACxB,QAAI,CAAC,IAAK;AAGV,QAAI,QAAQ,gBAAgB;AAE5B,UAAM,KAAK,eAAAA,QAAM,IAAI,GAAG;AACxB,UAAM,cAAc;AACpB,UAAM,QAAQ;AAEd,UAAM,KAAK,MAAM;AACjB,UAAM,KAAK,MAAM;AACjB,UAAM,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAK1C,UAAM,QAAQ,QAAQ,OAAO;AAC7B,UAAM,QAAQ,QAAQ,OAAO;AAE7B,QAAI;AACJ,QAAI;AAEJ,QAAI,KAAK,IAAI,EAAE,IAAI,GAAG;AAEpB,iBAAW;AACX,iBAAW,OAAO,KAAK,IAAI,SAAS,MAAM,EAAE;AAAA,IAC9C,WAAW,YAAY,QAAW;AAGhC,YAAM,qBAAqB,KAAK,IAAI,QAAQ,OAAO;AACnD,YAAM,mBAAmB,KAAK,IAAI,MAAM,OAAO;AAE/C,iBAAW,QAAQ,KAAK;AAExB,UAAI,sBAAsB,kBAAkB;AAE1C,mBACE,QAAQ,UACJ,OAAO,KAAK,IAAI,EAAE,IAAI,MACtB,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MAC9B,OAAO;AAEL,mBACE,MAAM,UACF,OAAO,KAAK,IAAI,EAAE,IAAI,MACtB,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MAC9B;AAAA,IACF,OAAO;AAEL,iBAAW,QAAQ,KAAK;AACxB,iBACE,KAAK,IAAI,QAAQ,KAAK,IAAI,EAAE,IAAI,MAAM,QAAQ,KAAK,IAAI,EAAE,IAAI;AAAA,IACjE;AAIA,UAAM,WAAW,MAAM;AACvB,UAAM,WAAW,MAAM;AACvB,UAAM,WAAW,KAAK,MAAM,UAAU,QAAQ;AAG9C,UAAM,YAAY,MAAM,KAAK,IAAI,QAAQ,IAAI;AAC7C,UAAM,YAAY,MAAM,KAAK,IAAI,QAAQ,IAAI;AAG7C,UAAM,YAAY,KAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,IAAI,QAAQ,IAAI,SAAS,IAAI,SAAS;AACzF,UAAM,YAAY,GAAG,KAAK,WAAW;AAAA,MACnC,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,MACX,MAAM;AAAA,IACR,CAAC;AACD,QAAI,QAAQ,YAAY,SAAS;AAGjC,UAAM,aAAa,KAAK,KAAK;AAC7B,UAAM,cAAc;AAGpB,UAAM,aACJ,YAAY,KAAK,IAAI,WAAW,UAAU,IAAI;AAChD,UAAM,aACJ,YAAY,KAAK,IAAI,WAAW,UAAU,IAAI;AAChD,UAAM,aAAa,GAAG,KAAK,WAAW,WAAW,YAAY,YAAY;AAAA,MACvE,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AACD,QAAI,QAAQ,YAAY,UAAU;AAGlC,UAAM,aACJ,YAAY,KAAK,IAAI,WAAW,UAAU,IAAI;AAChD,UAAM,aACJ,YAAY,KAAK,IAAI,WAAW,UAAU,IAAI;AAChD,UAAM,aAAa,GAAG,KAAK,WAAW,WAAW,YAAY,YAAY;AAAA,MACvE,QAAQ;AAAA,MACR;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AACD,QAAI,QAAQ,YAAY,UAAU;AAElC,WAAO,MAAM;AACX,UAAI,SAAS,gBAAgB;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,OAAO,OAAO,KAAK,KAAK,QAAQ,WAAW,OAAO,CAAC;AAEvD,SAAO,8CAAC,OAAE,KAAU;AACtB;AAkGO,IAAM,gBAAkC;AAAA,EAC7C,WAAW;AAAA,EACX,aAAa;AAAA,EACb,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,iBAAiB;AACnB;AAkCA,IAAM,cAAc;AAEpB,IAAM,YAAY;AAClB,IAAM,eAAe;AACrB,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,oBAAoB;AAC1B,IAAM,eAAe;AAErB,IAAM,eAAe;AAarB,SAAS,wBACP,cACA,UACuB;AACvB,MAAI,CAAC,gBAAgB,CAAC,SAAU,QAAO,CAAC;AAExC,QAAM,SAAgC,CAAC;AACvC,QAAM,UAAU,oBAAI,IAAY;AAChC,MAAI,aAAiC;AAErC,SAAO,YAAY;AACjB,QAAI,QAAQ,IAAI,UAAU,GAAG;AAC3B,YAAM,IAAI;AAAA,QACR,iEAAiE,UAAU;AAAA,MAC7E;AAAA,IACF;AAEA,UAAM,SAA4C,aAAa,UAAU;AACzE,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR,2CAA2C,UAAU,8BAA8B,OAAO,KAAK,YAAY,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA,MACnI;AAAA,IACF;AAEA,YAAQ,IAAI,UAAU;AACtB,WAAO,KAAK,EAAE,MAAM,YAAY,OAAO,CAAC;AACxC,iBAAa,OAAO;AAAA,EACtB;AAEA,SAAO;AACT;AAOA,SAAS,6BACP,cACA,aACuB;AACvB,MAAI,CAAC,aAAc,QAAO,CAAC;AAG3B,QAAM,kBAAkB,oBAAI,IAAY;AACxC,aAAW,SAAS,aAAa;AAC/B,QAAI,CAAC,SAAS,CAAC,aAAa,KAAK,EAAG;AACpC,UAAM,QAAQ,wBAAwB,cAAc,KAAK;AACzD,UAAM,QAAQ,CAAC,MAAM,gBAAgB,IAAI,EAAE,IAAI,CAAC;AAAA,EAClD;AAEA,MAAI,gBAAgB,SAAS,EAAG,QAAO,CAAC;AAGxC,QAAM,cAAc,oBAAI,IAAY;AACpC,aAAW,QAAQ,iBAAiB;AAClC,UAAM,OAAO,aAAa,IAAI,GAAG;AACjC,QAAI,QAAQ,gBAAgB,IAAI,IAAI,GAAG;AACrC,kBAAY,IAAI,IAAI;AAAA,IACtB;AAAA,EACF;AAGA,MAAI;AACJ,aAAW,QAAQ,iBAAiB;AAClC,QAAI,CAAC,YAAY,IAAI,IAAI,GAAG;AAC1B,kBAAY;AACZ;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAAC,UAAW,aAAY,CAAC,GAAG,eAAe,EAAE,CAAC;AAClD,SAAO,wBAAwB,cAAc,SAAS;AACxD;AAMA,SAAS,oBACP,iBACA,iBACQ;AACR,MAAI,CAAC,gBAAiB,QAAO,gBAAgB;AAC7C,QAAM,MAAM,gBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,eAAe;AACvE,SAAO,OAAO,IAAI,MAAM,gBAAgB;AAC1C;AAGA,SAAS,oBACP,YACA,gBACA,eACQ;AACR,QAAM,WAAW,iBAAiB,IAAI;AACtC,QAAM,YAAY,gBAAgB,IAAI;AACtC,SACE,WACA,cAAc,aACd,aAAa,aAAa,KAC1B;AAEJ;AASA,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAEtB,SAAS,kBACP,UACA,QACA,SACA,YACiC;AACjC,QAAM,YAAY,OAAO;AACzB,QAAM,eAAe,OAAO;AAC5B,QAAM,UAAU,OAAO;AACvB,QAAM,YAAY,OAAO;AACzB,QAAM,WAAW,OAAO;AAGxB,QAAM,eAAe,CACnB,KACA,YACoC;AACpC,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI,YAAY,SAAS;AACvB,aAAO,EAAE,GAAG,IAAI,IAAI,eAAe,GAAG,IAAI,IAAI,cAAc;AAAA,IAC9D;AAEA,WAAO;AAAA,MACL,GAAG,IAAI,IAAI,IAAI,QAAQ;AAAA,MACvB,GAAG,IAAI,IAAI;AAAA,IACb;AAAA,EACF;AAGA,QAAM,iBAAiB,CACrB,YACoC;AACpC,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,cAAc,QAAQ,IAAI,QAAQ,SAAS;AACjD,WAAO;AAAA,MACL,GAAG,QAAQ,IAAI,QAAQ,QAAQ,YAAY,IAAI;AAAA,MAC/C,GAAG,cAAc,cAAc,IAAI;AAAA,IACrC;AAAA,EACF;AAEA,UAAQ,UAAU;AAAA;AAAA,IAEhB,KAAK;AAAA,IACL,KAAK;AACH,aAAO,aAAa,SAAS;AAAA;AAAA,IAG/B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,aAAa,SAAS;AAAA,IAC/B,KAAK;AACH,aAAO,aAAa,WAAW,OAAO;AAAA;AAAA,IAGxC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,aAAa,YAAY;AAAA,IAClC,KAAK;AACH,aAAO,aAAa,cAAc,OAAO;AAAA;AAAA,IAG3C,KAAK;AAAA,IACL,KAAK;AACH,aAAO,aAAa,OAAO;AAAA,IAC7B,KAAK;AACH,aAAO,aAAa,SAAS,OAAO;AAAA;AAAA,IAGtC,KAAK;AAAA,IACL,KAAK;AACH,aAAO,aAAa,UAAU,OAAO;AAAA;AAAA,IAGvC,KAAK;AACH,aAAO,EAAE,GAAG,oBAAoB,GAAG,GAAG,UAAU,cAAc,IAAI,EAAE;AAAA,IACtE,KAAK;AACH,aAAO;AAAA,QACL,GAAG,aAAa,oBAAoB;AAAA,QACpC,GAAG,UAAU,cAAc,IAAI;AAAA,MACjC;AAAA;AAAA,IAGF,KAAK;AACH,aAAO,eAAe,SAAS;AAAA;AAAA,IAGjC,KAAK;AACH,aAAO,eAAe,SAAS;AAAA,IACjC,KAAK;AACH,aAAO,eAAe,YAAY;AAAA;AAAA,IAGpC,KAAK;AACH,aAAO,eAAe,OAAO;AAAA;AAAA,IAG/B,KAAK;AAEH,YAAM,UAAU,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC;AACtE,UAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,YAAM,aAAa,OAAO,QAAQ,QAAQ,SAAS,CAAC,CAAC;AACrD,aAAO,eAAe,UAAU;AAAA;AAAA,IAGlC,KAAK;AACH,aAAO,eAAe,YAAY;AAAA,IAEpC,SAAS;AAEP,YAAM,kBAAkB,SAAS,MAAM,iCAAiC;AACxE,UAAI,iBAAiB;AACnB,cAAM,OAAO,gBAAgB,CAAC;AAC9B,cAAM,UAAU,gBAAgB,CAAC;AACjC,cAAM,MAAM,OAAO,UAAU,IAAI,EAAE;AACnC,eAAO,aAAa,KAAK,OAAO;AAAA,MAClC;AAGA,YAAM,gBAAgB,SAAS;AAAA,QAC7B;AAAA,MACF;AACA,UAAI,eAAe;AACjB,cAAM,OAAO,cAAc,CAAC;AAC5B,cAAM,UAAU,cAAc,CAAC;AAC/B,cAAM,MAAM,OAAO,eAAe,IAAI,EAAE;AACxC,eAAO,aAAa,KAAK,OAAO;AAAA,MAClC;AAGA,YAAM,WAAW,SAAS,MAAM,8BAA8B;AAC9D,UAAI,UAAU;AACZ,cAAM,OAAO,SAAS,CAAC;AACvB,cAAM,UAAU,SAAS,CAAC;AAE1B,YAAI,SAAS,YAAa,QAAO;AACjC,cAAM,MAAM,OAAO,OAAO,IAAI,EAAE;AAChC,eAAO,aAAa,KAAK,OAAO;AAAA,MAClC;AAGA,YAAM,YAAY,SAAS,MAAM,+BAA+B;AAChE,UAAI,WAAW;AACb,cAAM,OAAO,UAAU,CAAC;AACxB,cAAM,UAAU,UAAU,CAAC;AAC3B,cAAM,MAAM,OAAO,QAAQ,IAAI,EAAE;AACjC,eAAO,aAAa,KAAK,OAAO;AAAA,MAClC;AAGA,YAAM,iBAAiB,SAAS,MAAM,sBAAsB;AAC5D,UAAI,gBAAgB;AAClB,cAAM,OAAO,eAAe,CAAC;AAC7B,cAAM,MAAM,OAAO,UAAU,IAAI,EAAE;AACnC,eAAO,eAAe,GAAG;AAAA,MAC3B;AAGA,YAAM,uBAAuB,SAAS,MAAM,4BAA4B;AACxE,UAAI,sBAAsB;AACxB,cAAM,OAAO,qBAAqB,CAAC;AACnC,cAAM,MAAM,OAAO,UAAU,IAAI,EAAE;AACnC,eAAO,eAAe,GAAG;AAAA,MAC3B;AAGA,YAAM,eAAe,SAAS,MAAM,oBAAoB;AACxD,UAAI,cAAc;AAChB,cAAM,OAAO,aAAa,CAAC;AAC3B,cAAM,MAAM,OAAO,OAAO,IAAI,EAAE;AAChC,eAAO,eAAe,GAAG;AAAA,MAC3B;AAGA,YAAM,gBAAgB,SAAS,MAAM,qBAAqB;AAC1D,UAAI,eAAe;AACjB,cAAM,OAAO,cAAc,CAAC;AAC5B,cAAM,MAAM,OAAO,QAAQ,IAAI,EAAE;AACjC,eAAO,eAAe,GAAG;AAAA,MAC3B;AAGA,YAAM,gBAAgB,SAAS,MAAM,4BAA4B;AACjE,UAAI,eAAe;AACjB,cAAM,OAAO,cAAc,CAAC;AAE5B,cAAM,WAAW,OAAO,KAAK,MAAM,EAAE;AAAA,UAAO,CAAC,MAC3C,EAAE,WAAW,OAAO;AAAA,QACtB;AACA,YAAI,SAAS,WAAW,EAAG,QAAO,eAAe,YAAY;AAC7D,cAAM,cAAc,OAAO,SAAS,SAAS,SAAS,CAAC,CAAC;AACxD,eAAO,eAAe,WAAW;AAAA,MACnC;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,GAAqC;AAEnC,QAAM,gBAAgB,OAAO,QAAQ,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;AAC/D,QAAM,qBAAqB,OAAO,QAAQ,gBAAgB,EAAE,SAAS,CAAC,EAAE,CAAC;AAGzE,QAAM,mBAAmB,cAAc,IAAI,CAAC,CAAC,EAAE,MAAM,MAAM,OAAO,IAAI;AACtE,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,EACF;AAGA,QAAM,mBAAmB,mBAAmB;AAAA,IAC1C,CAAC,CAAC,EAAE,MAAM,MAAM,OAAO;AAAA,EACzB;AACA,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,EACF;AAIA,QAAM,sBAAsB,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;AACpE,UAAM,OAAO,oBAAoB,EAAE,MAAM,kBAAkB;AAC3D,UAAM,OAAO,oBAAoB,EAAE,MAAM,kBAAkB;AAC3D,WAAO,OAAO;AAAA,EAChB,CAAC;AAID,QAAM,2BAA2B,CAAC,GAAG,kBAAkB,EAAE;AAAA,IACvD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;AAChB,YAAM,OAAO,oBAAoB,EAAE,QAAQ,mBAAmB;AAC9D,YAAM,OAAO,oBAAoB,EAAE,QAAQ,mBAAmB;AAC9D,aAAO,OAAO;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,mBAAe,uBAAuB,IAAI;AAGhD,QAAM,iBACJ,aAAa,eACb,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAC3C,mBAAmB,KAAK,CAAC,MAAM,EAAE,OAAO,WAAW,KACnD,WAAW,eACX,oBAAoB,KAAK,CAAC,MAAM,EAAE,OAAO,WAAW,KACpD,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAChD,YAAY,eACZ,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,WAAW;AACzD,QAAM,UACJ,aAAa,SAAS,SACtB,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,KAC9C,mBAAmB,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,KAAK,KACtD,WAAW,SAAS,SACpB,oBAAoB,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,KAAK,KACvD,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,KACnD,YAAY,SAAS,SACrB,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,SAAS,KAAK;AAG5D,QAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,QAAyB;AAC9C,QAAI,qBAAqB,SAAS,GAAG,EAAG,QAAO;AAE/C,WAAO,uDAAuD,KAAK,GAAG;AAAA,EACxE;AACA,QAAM,gBACJ,SAAS,KAAK,CAAC,MAAM,cAAc,EAAE,QAAQ,CAAC,KAAK;AACrD,QAAM,mBAAmB,gBAAgB,cAAc,IAAI,gBAAgB;AAG3E,QAAM,cAAc,SAAS,OAAO,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC;AAEvD,QAAM,kBAAkB,YAAY;AAAA,IAClC,CAAC,KAAK,SAAS,OAAO,KAAK,MAAM,UAAU;AAAA,IAC3C;AAAA,EACF;AAEA,QAAM,qBAAqB;AAC3B,QAAM,iBAAiB,KAAK,IAAI,GAAG,KAAK,KAAK,kBAAkB,EAAE,CAAC;AAClE,QAAM,eACJ,YAAY,SAAS,IAAI,qBAAqB,iBAAiB,IAAI;AAGrE,QAAM,YAAY,iBAAiB,OAAO;AAC1C,QAAM,oBAAoB,yBAAyB;AACnD,QAAM,iBAAiB,kBAAkB,UAAU,oBAAoB,KAAK;AAG5E,QAAM,UAAU,KAAK,IAAI,cAAc,QAAQ,mBAAmB,QAAQ,CAAC;AAC3E,QAAM,gBAAgB,YAAY,UAAU,gBAAgB,UAAU;AAGtE,QAAM,mBACJ,cAAc,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK;AAI1D,QAAM,cACH,cAAc,IAAI,KACnB;AAAA,EACA,mBAAmB,SACnB;AAAA,EACA,oBAAoB,SACpB;AAAA,GACC,mBAAmB,IAAI;AAC1B,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,CAAC,CAAC;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AAEA,QAAM,aACJ,YAAY,IACZ,gBACA,iBACA,mBACA;AACF,QAAM,cAAc,QAAQ,aAAa,eAAe;AAGxD,QAAM,SAAS,QAAQ,eAAe,KAAK,YAAY;AAGvD,QAAM,iBAAiB,QAAQ,gBAAgB;AAG/C,QAAM,cAAc,CAAC,OAAe,UAA0B;AAC5D,UAAM,mBAAmB,YAAY,QAAQ,gBAAgB,QAAQ;AACrE,UAAM,SAAS,iBAAiB,mBAAmB;AACnD,WAAO,SAAS,SAAS,YAAY;AAAA,EACvC;AAIA,MAAI,WAAW,cAAc,IAAI;AACjC,QAAM,SAA2C,CAAC;AAGlD,QAAM,kBAA+D,CAAC;AACtE,QAAM,uBAAoE,CAAC;AAE3E,MAAI,aAAa;AACf,WAAO,SAAS;AAAA,MACd,GAAG;AAAA,MACH,GAAG,iBAAiB,YAAY;AAAA;AAAA,MAChC,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AACA,gBAAY,cAAc;AAAA,EAC5B;AAGA,QAAM,UAAU;AAChB,sBAAoB,QAAQ,CAAC,CAAC,IAAI,GAAG,UAAU;AAC7C,UAAM,MAAqB;AAAA,MACzB,GAAG;AAAA,MACH,GAAG,YAAY,OAAO,oBAAoB,MAAM;AAAA,MAChD,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AACA,oBAAgB,KAAK,EAAE,MAAM,IAAI,CAAC;AAClC,WAAO,UAAU,IAAI,EAAE,IAAI;AAAA,EAC7B,CAAC;AAED,MAAI,gBAAgB,SAAS,GAAG;AAC9B,WAAO,SAAS,gBAAgB,CAAC,EAAE;AAAA,EACrC;AACA,cAAY,cAAc;AAK1B,QAAM,0BACJ,CAAC;AAGH,QAAM,6BAA6B,oBAAI,IAAsB;AAC7D,sBAAoB,QAAQ,CAAC,CAAC,YAAY,MAAM,MAAM;AACpD,UAAM,oBAAoB,OAAO;AACjC,QAAI,mBAAmB;AACrB,YAAM,WAAW,2BAA2B,IAAI,iBAAiB,KAAK,CAAC;AACvE,eAAS,KAAK,UAAU;AACxB,iCAA2B,IAAI,mBAAmB,QAAQ;AAAA,IAC5D;AAAA,EACF,CAAC;AAED,qBAAmB,QAAQ,CAAC,EAAE,MAAM,OAAO,MAAM;AAC/C,QAAI,OAAO,MAAM;AAGf,YAAM,YAAY,2BAA2B,IAAI,IAAI,KAAK,CAAC;AAC3D,YAAM,cAAc,2BAA2B,IAAI,OAAO,IAAI,KAAK,CAAC;AAEpE,iCAA2B,IAAI,OAAO,MAAM;AAAA,QAC1C,GAAG,oBAAI,IAAI,CAAC,GAAG,aAAa,SAAS,IAAI,EAAE,CAAC;AAAA,MAC9C,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,qBAAmB,QAAQ,CAAC,EAAE,KAAK,MAAM;AACvC,UAAM,kBAAkB,2BAA2B,IAAI,IAAI,KAAK,CAAC;AAEjE,UAAM,gBAAgB,gBAAgB;AAAA,MACpC,CAAC,MAAM,CAAC,EAAE,WAAW,QAAQ;AAAA,IAC/B;AACA,UAAM,gBAAgB,gBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,QAAQ,CAAC;AAExE,QAAI;AACJ,QAAI,cAAc,WAAW,KAAK,CAAC,eAAe;AAEhD,YAAM,YAAY,OAAO,UAAU,cAAc,CAAC,CAAC,EAAE;AACrD,UAAI,YAAY,UAAU,IAAI,iBAAiB,YAAY;AAAA,IAC7D,OAAO;AAEL,UAAI,iBAAiB,YAAY;AAAA,IACnC;AAEA,UAAM,MAAqB;AAAA,MACzB,GAAG;AAAA,MACH;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AACA,4BAAwB,KAAK,EAAE,MAAM,IAAI,CAAC;AAC1C,WAAO,OAAO,IAAI,EAAE,IAAI;AACxB,gBAAY,cAAc;AAAA,EAC5B,CAAC;AAGD,SAAO,YAAY;AAAA,IACjB,GAAG;AAAA,IACH,GAAG,iBAAiB,YAAY;AAAA,IAChC,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACA,cAAY,cAAc;AAK1B,QAAM,2BACJ,CAAC;AAGH,QAAM,2BAA2B,oBAAI,IAAsB;AAC3D,2BAAyB,QAAQ,CAAC,CAAC,UAAU,MAAM,MAAM;AACvD,UAAM,oBAAoB,OAAO;AACjC,QAAI,mBAAmB;AACrB,YAAM,WAAW,yBAAyB,IAAI,iBAAiB,KAAK,CAAC;AACrE,eAAS,KAAK,QAAQ;AACtB,+BAAyB,IAAI,mBAAmB,QAAQ;AAAA,IAC1D;AAAA,EACF,CAAC;AAGD,WAAS,IAAI,oBAAoB,SAAS,GAAG,KAAK,GAAG,KAAK;AACxD,UAAM,EAAE,MAAM,OAAO,IAAI,oBAAoB,CAAC;AAC9C,QAAI,OAAO,MAAM;AAEf,YAAM,YAAY,yBAAyB,IAAI,OAAO,IAAI,KAAK,CAAC;AAChE,YAAM,UAAU,yBAAyB,IAAI,IAAI,KAAK,CAAC;AAEvD,+BAAyB,IAAI,MAAM;AAAA,QACjC,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,SAAS,OAAO,IAAI,EAAE,CAAC;AAAA,MACjD,CAAC;AAAA,IACH;AAAA,EACF;AAGA,QAAM,eACJ,WAAW,oBAAoB,UAAU,cAAc;AACzD,2BAAyB,QAAQ,CAAC,CAAC,IAAI,GAAG,UAAU;AAClD,UAAM,MAAqB;AAAA,MACzB,GAAG;AAAA,MACH,GAAG,YAAY,OAAO,yBAAyB,MAAM;AAAA,MACrD,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AACA,yBAAqB,KAAK,EAAE,MAAM,IAAI,CAAC;AACvC,WAAO,eAAe,IAAI,EAAE,IAAI;AAAA,EAClC,CAAC;AAED,MAAI,qBAAqB,SAAS,GAAG;AACnC,WAAO,cAAc,qBAAqB,CAAC,EAAE;AAAA,EAC/C;AAGA,sBAAoB,QAAQ,CAAC,EAAE,KAAK,MAAM;AACxC,UAAM,gBAAgB,yBAAyB,IAAI,IAAI,KAAK,CAAC;AAE7D,UAAM,cAAc,cAAc,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,QAAQ,CAAC;AACvE,UAAM,iBAAiB,cAAc,KAAK,CAAC,MAAM,EAAE,WAAW,QAAQ,CAAC;AAEvE,QAAI;AACJ,QAAI,YAAY,WAAW,KAAK,CAAC,gBAAgB;AAE/C,YAAM,UAAU,OAAO,eAAe,YAAY,CAAC,CAAC,EAAE;AACtD,UAAI,UAAU,QAAQ,IAAI,iBAAiB,YAAY;AAAA,IACzD,WAAW,YAAY,SAAS,KAAK,CAAC,gBAAgB;AAEpD,YAAM,iBAAiB,YACpB,IAAI,CAAC,MAAM,OAAO,eAAe,CAAC,EAAE,GAAG,CAAC,EACxC,OAAO,CAACE,SAAuBA,SAAQ,MAAS;AACnD,UAAI,eAAe,SAAS,GAAG;AAC7B,cAAM,OACJ,eAAe,OAAO,CAAC,KAAKA,SAAQ,MAAMA,MAAK,CAAC,IAChD,eAAe;AACjB,YAAI;AAAA,MACN,OAAO;AACL,YAAI,iBAAiB,YAAY;AAAA,MACnC;AAAA,IACF,OAAO;AAEL,UAAI,iBAAiB,YAAY;AAAA,IACnC;AAEA,UAAM,MAAqB;AAAA,MACzB,GAAG;AAAA,MACH;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AACA,6BAAyB,KAAK,EAAE,MAAM,IAAI,CAAC;AAC3C,WAAO,QAAQ,IAAI,EAAE,IAAI;AACzB,gBAAY,cAAc;AAAA,EAC5B,CAAC;AAID,QAAM,iBAID,CAAC;AAEN,MAAI,kBAAkB;AACpB,UAAM,SAAS,WAAW,cAAc;AAExC,6BAAyB,QAAQ,CAAC,CAAC,UAAU,UAAU,GAAG,UAAU;AAElE,YAAM,cAAc,WAAW,SAAS;AACxC,UAAI,aAAa;AACf,cAAM,MAAqB;AAAA,UACzB,GAAG;AAAA,UACH,GAAG,YAAY,OAAO,yBAAyB,MAAM;AAAA;AAAA,UACrD,OAAO;AAAA,UACP,QAAQ;AAAA,QACV;AACA,uBAAe,KAAK,EAAE,MAAM,UAAU,KAAK,QAAQ,YAAY,CAAC;AAChE,eAAO,SAAS,QAAQ,EAAE,IAAI;AAAA,MAChC;AAAA,IACF,CAAC;AAGD,QAAI,eAAe,SAAS,GAAG;AAC7B,aAAO,QAAQ,eAAe,CAAC,EAAE;AAAA,IACnC;AAAA,EACF;AAGA,QAAM,UAAU;AAGhB,QAAM,eAAe;AAAA,IACnB,GAAI,cACA;AAAA,MACE;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,WAAW;AAAA,QACX,cAAc;AAAA,QACd,aAAa;AAAA,MACf;AAAA,IACF,IACA,CAAC;AAAA;AAAA,IAEL,GAAG,oBAAoB,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO;AAAA,MACpD,KAAK,UAAU,IAAI;AAAA,MACnB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc;AAAA,MACd,aAAa;AAAA,IACf,EAAE;AAAA;AAAA,IAEF,GAAG,mBAAmB,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO;AAAA,MAC/C,KAAK,OAAO,IAAI;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAAA,MACzD,aAAa;AAAA,IACf,EAAE;AAAA,IACF;AAAA,MACE,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA;AAAA,IAEA,GAAG,oBAAoB,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO;AAAA,MAChD,KAAK,QAAQ,IAAI;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAAA,MACzD,aAAa;AAAA,IACf,EAAE;AAAA;AAAA,IAEF,GAAG,yBAAyB,IAAI,CAAC,CAAC,MAAM,UAAU,OAAO;AAAA,MACvD,KAAK,eAAe,IAAI;AAAA,MACxB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc;AAAA,MACd,aAAa;AAAA,IACf,EAAE;AAAA;AAAA,IAEF,GAAG,eAAe,IAAI,CAAC,EAAE,MAAM,UAAU,QAAQ,YAAY,OAAO;AAAA,MAClE,KAAK,SAAS,QAAQ;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc;AAAA,MACd,aAAa;AAAA,IACf,EAAE;AAAA,EACJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,6BAA6B,aAAa,EAAE;AAAA,MACvD,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,OAAO,UAAU,IAAI,WAAW;AAAA,UACzC,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,UACX;AAAA,UAGC;AAAA,qBACC;AAAA,cAAC;AAAA;AAAA,gBACC,GAAG,aAAa;AAAA,gBAChB,GAAG;AAAA,gBACH,YAAW;AAAA,gBACX,kBAAiB;AAAA,gBACjB,MAAK;AAAA,gBACL,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAW;AAAA,gBAEV;AAAA;AAAA,YACH;AAAA,aAIA,MAAM;AACN,oBAAM,eAAe,OAAO;AAC5B,oBAAM,mBAAmB,aAAa,IAAI,YAAY;AAGtD,oBAAM,aAAa,CACjB,KACA,OACAC,WACW;AACX,oBAAI,SAAS,EAAG,QAAOA;AACvB,sBAAM,SAAS,KAAK,IAAI,YAAY,MAAM,QAAQ,KAAK,EAAE;AACzD,sBAAM,OAAO,UAAU,QAAQ;AAC/B,uBAAOA,SAAQ,SAAS,IAAI,MAAM;AAAA,cACpC;AAGA,oBAAM,kBAAkB,CACtB,YACA,iBACkB;AAClB,oBAAI,aAAa,QAAQ,kBAAkB,aAAa,IAAI,GAAG;AAC7D,yBAAO,OAAO,OAAO,aAAa,IAAI,EAAE;AAAA,gBAC1C;AAEA,oBAAI,mBAAmB,SAAS,GAAG;AACjC,yBAAO,OAAO,OAAO,mBAAmB,CAAC,EAAE,IAAI,EAAE;AAAA,gBACnD;AACA,uBAAO;AAAA,cACT;AAGA,oBAAM,uBAAuB,CAC3B,UACA,eACkB;AAClB,oBAAI,WAAW,UAAU,mBAAmB,WAAW,MAAM,GAAG;AAC9D,yBAAO,OAAO,QAAQ,WAAW,MAAM,EAAE;AAAA,gBAC3C;AAEA,uBAAO;AAAA,cACT;AAEA,qBACE,gFAEG;AAAA,iBAAC,eAAe,cAAc,WAAW,KACxC;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,oBACP,OAAO;AAAA,oBACP,KAAK,OAAO,OAAO;AAAA,oBACnB,KAAK;AAAA,oBACL,QAAO;AAAA,oBACP;AAAA;AAAA,gBACF;AAAA,gBAID,eACC;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,OAAO,OAAO,IAAI;AAAA,oBACzB,OAAO;AAAA,oBACP,KAAK,OAAO,OAAO;AAAA,oBACnB,KAAK,OAAO,OAAO,IAAI,YAAY;AAAA,oBACnC,QAAO;AAAA,oBACP;AAAA;AAAA,gBACF;AAAA,iBAKA,MAAM;AAEN,wBAAM,kBAAkB,oBAAI,IAG1B;AACF,kCAAgB,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,cAAc;AACpD,0BAAM,eAAe,UAAU,IAAI,KAAK,CAAC;AACzC,0BAAM,YAAY,aAAa,OAC3B,OAAO,aAAa,IAAI,KACxB,mBAAmB,SAAS,IAC1B,OAAO,mBAAmB,CAAC,EAAE,IAAI,KACjC;AAEN,0BAAM,WAAW,gBAAgB,IAAI,SAAS,KAAK,CAAC;AACpD,6BAAS,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC;AACtC,oCAAgB,IAAI,WAAW,QAAQ;AAAA,kBACzC,CAAC;AAED,yBAAO,gBAAgB,IAAI,CAAC,EAAE,MAAM,KAAK,UAAU,MAAM;AACvD,0BAAM,eAAe,UAAU,IAAI,KAAK,CAAC;AACzC,0BAAM,YAAY,gBAAgB,MAAM,YAAY;AACpD,0BAAM,gBAAgB,UAAU,IAAI,YAAY;AAChD,0BAAM,gBAAgB,UAAU,IAAI,YAAY;AAGhD,0BAAM,YAAY,aAAa,OAC3B,OAAO,aAAa,IAAI,KACxB,mBAAmB,SAAS,IAC1B,OAAO,mBAAmB,CAAC,EAAE,IAAI,KACjC;AACN,0BAAM,sBACJ,gBAAgB,IAAI,SAAS,KAAK,CAAC;AACrC,0BAAM,oBAAoB,oBAAoB;AAAA,sBAC5C,CAAC,MAAM,EAAE,SAAS;AAAA,oBACpB;AAGA,0BAAM,UAAU;AAAA,sBACd;AAAA,sBACA,oBAAoB;AAAA,sBACpB;AAAA,oBACF;AAEA,0BAAM,SAAS,aAAa,eAAe;AAE3C,2BACE,+CAAC,eAAAC,QAAM,UAAN,EACC;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO,UAAU,IAAI;AAAA,0BACrB,OAAO,gBAAgB;AAAA,0BACvB,KAAK,UAAU;AAAA,0BACf,KAAK,UAAU;AAAA,0BACf,QAAO;AAAA,0BACP;AAAA;AAAA,sBACF;AAAA,sBACC,cACC;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO,UAAU;AAAA,0BACjB,OAAO,UAAU;AAAA,0BACjB,KAAK,UAAU,IAAI;AAAA,0BACnB,KAAK,gBAAgB;AAAA,0BACrB,QAAO;AAAA,0BACP;AAAA;AAAA,sBACF;AAAA,yBAjBiB,UAAU,IAAI,SAmBnC;AAAA,kBAEJ,CAAC;AAAA,gBACH,GAAG;AAAA,gBAGF,wBAAwB,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,UAAU;AACrD,wBAAM,aAAa,kBAAkB,IAAI,KAAK,CAAC;AAE/C,sBAAI;AACJ,sBAAI,WAAW,QAAQ,kBAAkB,WAAW,IAAI,GAAG;AACzD,gCAAY,OAAO,OAAO,WAAW,IAAI,EAAE;AAAA,kBAC7C,OAAO;AACL,gCAAY;AAAA,kBACd;AAEA,wBAAM,QAAQ,IAAI,IAAI,YAAY;AAClC,wBAAM,MAAM,UAAU,IAAI,YAAY;AACtC,wBAAM,SAAS,aAAa,eAAe;AAE3C,yBACE,+CAAC,eAAAA,QAAM,UAAN,EACC;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,IAAI,IAAI;AAAA,wBACf,OAAO,QAAQ;AAAA,wBACf,KAAK,UAAU;AAAA,wBACf,KAAK,MAAM;AAAA,wBACX,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,oBACC,cACC;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,UAAU;AAAA,wBACjB,OAAO,MAAM;AAAA,wBACb,KAAK,IAAI,IAAI;AAAA,wBACb,KAAK,QAAQ;AAAA,wBACb,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,uBAjBiB,OAAO,IAAI,QAmBhC;AAAA,gBAEJ,CAAC;AAAA,gBAGA,qBAAqB,IAAI,CAAC,EAAE,MAAM,KAAK,QAAQ,MAAM;AACpD,wBAAM,aAAa,eAAe,IAAI,KAAK,CAAC;AAC5C,wBAAM,YAAY,qBAAqB,MAAM,UAAU;AACvD,wBAAM,cAAc,QAAQ,IAAI,YAAY;AAC5C,wBAAM,gBAAgB,UAAU,IAAI,YAAY;AAGhD,wBAAM,SAAS,aAAa,eAAe;AAE3C,yBACE,+CAAC,eAAAA,QAAM,UAAN,EACC;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,UAAU,IAAI;AAAA,wBACrB,OAAO,gBAAgB;AAAA,wBACvB,KAAK,QAAQ;AAAA,wBACb,KAAK,cAAc;AAAA,wBACnB,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,oBACC,cACC;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,QAAQ;AAAA,wBACf,OAAO,cAAc;AAAA,wBACrB,KAAK,UAAU,IAAI;AAAA,wBACnB,KAAK,gBAAgB;AAAA,wBACrB,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,uBAjBiB,eAAe,IAAI,SAmBxC;AAAA,gBAEJ,CAAC;AAAA,gBAGA,yBACE,MAAM,GAAG,EAAE,EACX,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,UAAU;AAC7B,wBAAM,aAAa,mBAAmB,IAAI,KAAK,CAAC;AAEhD,wBAAM,WAAW,yBAAyB,QAAQ,CAAC;AACnD,sBAAI,CAAC,SAAU,QAAO;AAEtB,wBAAM,YAAY,SAAS;AAC3B,wBAAM,QAAQ,IAAI,IAAI,YAAY;AAClC,wBAAM,MAAM,UAAU,IAAI,YAAY;AACtC,wBAAM,SAAS,aAAa,eAAe;AAE3C,yBACE,+CAAC,eAAAA,QAAM,UAAN,EACC;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,IAAI,IAAI;AAAA,wBACf,OAAO,QAAQ;AAAA,wBACf,KAAK,UAAU;AAAA,wBACf,KAAK,MAAM;AAAA,wBACX,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,oBACC,cACC;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,UAAU;AAAA,wBACjB,OAAO,MAAM;AAAA,wBACb,KAAK,IAAI,IAAI;AAAA,wBACb,KAAK,QAAQ;AAAA,wBACb,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,uBAjBiB,QAAQ,IAAI,QAmBjC;AAAA,gBAEJ,CAAC;AAAA,gBAGF,oBAAoB,SAAS,MAC3B,MAAM;AACL,wBAAM,eACJ,OAAO,QAAQ,oBAAoB,CAAC,EAAE,IAAI,EAAE;AAC9C,wBAAM,QAAQ;AACd,wBAAM,MAAM,aAAa,IAAI,YAAY;AACzC,wBAAM,SAAS,aAAa,eAAe;AAE3C,yBACE,gFACE;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,aAAa,IAAI;AAAA,wBACxB,OAAO,QAAQ;AAAA,wBACf,KAAK,aAAa;AAAA,wBAClB,KAAK,MAAM;AAAA,wBACX,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,oBACC,cACC;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,aAAa;AAAA,wBACpB,OAAO,MAAM;AAAA,wBACb,KAAK,aAAa,IAAI;AAAA,wBACtB,KAAK,QAAQ;AAAA,wBACb,QAAO;AAAA,wBACP;AAAA;AAAA,oBACF;AAAA,qBAEJ;AAAA,gBAEJ,GAAG;AAAA,gBAGJ,eAAe,IAAI,CAAC,EAAE,MAAM,UAAU,KAAK,SAAS,MAAM;AACzD,wBAAM,UAAU,OAAO,eAAe,QAAQ,EAAE;AAChD,sBAAI,CAAC,QAAS,QAAO;AACrB,wBAAM,cAAc,QAAQ,IAAI,YAAY;AAC5C,wBAAM,eAAe,SAAS,IAAI,YAAY;AAE9C,yBACE;AAAA,oBAAC;AAAA;AAAA,sBAEC,OAAO,QAAQ,IAAI;AAAA,sBACnB,OAAO;AAAA,sBACP,KAAK,SAAS;AAAA,sBACd,KAAK;AAAA,sBACL,QAAO;AAAA,sBACP;AAAA;AAAA,oBANK,QAAQ,QAAQ;AAAA,kBAOvB;AAAA,gBAEJ,CAAC;AAAA,gBAGA,CAAC,oBAAoB,mBAAmB,WAAW,KAClD;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,OAAO,YAAY,IAAI;AAAA,oBAC9B,OAAO;AAAA,oBACP,KAAK;AAAA,oBACL,KAAK;AAAA,oBACL,QAAO;AAAA,oBACP;AAAA;AAAA,gBACF;AAAA,iBAEJ;AAAA,YAEJ,GAAG;AAAA,YAGF,aAAa;AAAA,cACZ,CAAC,EAAE,KAAK,QAAQ,SAAS,WAAW,cAAc,YAAY,MAAM;AAClE,sBAAM,MAAM,OAAO,GAAG;AACtB,sBAAM,OAAO,QAAQ;AACrB,sBAAM,QAAQ,QAAQ,SAAS;AAC/B,sBAAM,OAAO,QAAQ;AACrB,sBAAM,cAAc,QAAQ;AAC5B,sBAAM,OAAO,QAAQ;AACrB,sBAAM,iBAAiB,QAAQ,cAAc;AAI7C,sBAAM,SAAS,OACX,IAAI,IAAI,IAAI,SAAS,OACrB,IAAI,IAAI,IAAI,SAAS;AAGzB,sBAAM,UACJ,SAAS,QACL,OACA,OAAO,SAAS,WACd,OACA;AAGR,sBAAM,eACJ,gFAEE;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,GAAG,IAAI;AAAA,sBACP,GAAG,IAAI;AAAA,sBACP,OAAO,IAAI;AAAA,sBACX,QAAQ,IAAI;AAAA,sBACZ,MAAM,OAAO,OAAO;AAAA,sBACpB,QACE,iBACI,OAAO,SAAS,eAChB;AAAA;AAAA,kBAER;AAAA,kBAGA;AAAA,oBAAC;AAAA;AAAA,sBACC,GAAG,IAAI,IAAI;AAAA,sBACX,GAAG,SAAS,OAAO,YAAY,IAAI;AAAA,sBACnC,OAAO,IAAI,QAAQ;AAAA,sBACnB,QAAQ,OAAO,YAAY;AAAA,sBAE3B;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO;AAAA,4BACL,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,KAAK;AAAA,4BACL,QAAQ;AAAA,4BACR,UAAU,OAAO;AAAA,4BACjB,YAAY,OAAO;AAAA,4BACnB,YAAY;AAAA,4BACZ,OAAO;AAAA,0BACT;AAAA,0BAEC;AAAA,oCAAQ,8CAAC,QAAK,MAAY,OAAO,IAAI,QAAQ,IAAI;AAAA,4BAClD,8CAAC,UAAM,iBAAM;AAAA;AAAA;AAAA,sBACf;AAAA;AAAA,kBACF;AAAA,kBAGC,QACC;AAAA,oBAAC;AAAA;AAAA,sBACC,GAAG,IAAI,IAAI;AAAA,sBACX,GAAG,IAAI,IAAI,IAAI,SAAS;AAAA,sBACxB,OAAO,IAAI,QAAQ;AAAA,sBACnB,QAAQ,IAAI,SAAS;AAAA,sBAErB;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO;AAAA,4BACL,UAAU,OAAO;AAAA,4BACjB,YAAY,OAAO;AAAA,4BACnB,OAAO;AAAA,4BACP,WAAW;AAAA,4BACX,YAAY;AAAA,4BACZ,YAAY;AAAA,4BACZ,QAAQ;AAAA,4BACR,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,0BAClB;AAAA,0BAEC;AAAA;AAAA,sBACH;AAAA;AAAA,kBACF;AAAA,kBAID,eACC;AAAA,oBAAC;AAAA;AAAA,sBACC,GAAG,IAAI;AAAA,sBACP,GAAG,IAAI,IAAI,IAAI,SAAS;AAAA,sBACxB,OAAO;AAAA,sBACP,QAAQ;AAAA,sBAER;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO;AAAA,4BACL,UAAU,OAAO;AAAA,4BACjB,OAAO;AAAA,4BACP,WAAW;AAAA,4BACX,YAAY;AAAA,4BACZ,YAAY;AAAA,0BACd;AAAA,0BAEC;AAAA;AAAA,sBACH;AAAA;AAAA,kBACF;AAAA,mBAEJ;AAIF,uBAAO,UACL;AAAA,kBAAC;AAAA;AAAA,oBAEC,MAAM;AAAA,oBACN,OAAO,EAAE,QAAQ,WAAW,gBAAgB,OAAO;AAAA,oBAElD;AAAA;AAAA,kBAJI;AAAA,gBAKP,IAEA,8CAAC,OAAa,0BAAN,GAAmB;AAAA,cAE/B;AAAA,YACF;AAAA,YAGC,SAAS,IAAI,CAAC,QAAQ,UAAU;AAC/B,oBAAM,MAAM;AAAA,gBACV,OAAO;AAAA,gBACP;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAEA,kBAAI,CAAC,IAAK,QAAO;AACjB,oBAAM,KAAK,OAAO,MAAM,OAAO,QAAQ,CAAC;AACxC,qBACE,8CAAC,UAA+B,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM,MAA7C,UAAU,KAAK,EAAkC;AAAA,YAElE,CAAC;AAAA,YAGA,YAAY,SAAS,KACpB;AAAA,cAAC;AAAA;AAAA,gBACC,GAAG;AAAA,gBACH,GAAG,QAAQ,gBAAgB,iBAAiB;AAAA,gBAC5C,OAAO,aAAa,YAAY;AAAA,gBAChC,QAAQ,qBAAqB;AAAA,gBAE7B;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,UAAU;AAAA,sBACV,YAAY;AAAA,sBACZ,OAAO;AAAA,sBACP,YAAY;AAAA,oBACd;AAAA,oBAEC,sBAAY,IAAI,CAAC,MAAM,UAAU;AAChC,4BAAM,KACJ,KAAK,MAAM,QAAQ,SAAS,QAAQ,IAAI,KAAK,SAAS,CAAC;AACzD,6BACE,+CAAC,UACC;AAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,OAAO;AAAA,8BACL,OAAO;AAAA,8BACP,QAAQ;AAAA,8BACR,cAAc;AAAA,8BACd,YAAY;AAAA,8BACZ,SAAS;AAAA,8BACT,YAAY;AAAA,8BACZ,gBAAgB;AAAA,8BAChB,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,OAAO;AAAA,8BACP,eAAe;AAAA,8BACf,aAAa;AAAA,8BACb,UAAU;AAAA,8BACV,KAAK;AAAA,4BACP;AAAA,4BAEC;AAAA;AAAA,wBACH;AAAA,wBACA,8CAAC,UAAK,OAAO,EAAE,aAAa,GAAG,GAAI,eAAK,MAAK;AAAA,2BArBpC,UAAU,KAAK,EAsB1B;AAAA,oBAEJ,CAAC;AAAA;AAAA,gBACH;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;;;ACvvDA,IAAAC,iBAAgC;AA2GtB,IAAAC,uBAAA;AApFV,SAAS,mBAAmB,QAAgC;AAC1D,QAAM,aAAyB,CAAC;AAChC,QAAM,WAAY,OAAO,YAAyB,CAAC;AAEnD,MAAI,CAAC,OAAO,YAAY;AACtB,WAAO;AAAA,EACT;AAEA,aAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AAC5D,UAAM,WAAW;AAEjB,QAAI,OAAQ,SAAS,QAAmB;AAExC,QAAI,SAAS,MAAM;AACjB,aAAQ,SAAS,KACd,IAAI,CAAC,MAAe,IAAI,CAAC,GAAG,EAC5B,KAAK,KAAK;AAAA,IACf;AAEA,QAAI,SAAS,WAAW,SAAS,OAAO;AACtC,YAAM,QAAQ,SAAS;AACvB,UAAI,MAAM,MAAM;AACd,eAAO,SAAU,MAAM,KAAmB,IAAI,CAAC,MAAe,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA,MACrF,OAAO;AACL,eAAO,SAAU,MAAM,QAAmB,KAAK;AAAA,MACjD;AAAA,IACF;AAEA,QAAI,SAAS,YAAY,SAAS,sBAAsB;AACtD,YAAM,WAAW,SAAS;AAC1B,YAAM,YAAa,SAAS,QAAmB;AAC/C,aAAO,kBAAkB,SAAS;AAAA,IACpC;AAEA,QAAI,SAAS,SAAS,SAAS,OAAO;AACpC,YAAM,WAAY,SAAS,SAAS,SAAS;AAG7C,aAAO,SAAS,IAAI,CAAC,MAAO,EAAE,QAAmB,KAAK,EAAE,KAAK,KAAK;AAAA,IACpE;AAEA,QAAI,cAAe,SAAS,eAA0B;AACtD,QAAI;AAEJ,UAAM,eAAe,YAAY,MAAM,mBAAmB;AAC1D,QAAI,cAAc;AAChB,gBAAU,aAAa,CAAC;AACxB,oBAAc,YAAY,QAAQ,sBAAsB,EAAE;AAAA,IAC5D;AAEA,QAAI,SAAS,SAAS,YAAY,YAAY,EAAE,SAAS,UAAU,GAAG;AACpE,aAAO;AAAA,IACT;AAEA,eAAW,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,SAAS,SAAS,IAAI;AAAA,MAChC,SACE,SAAS,YAAY,SAAY,OAAO,SAAS,OAAO,IAAI;AAAA,MAC9D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,EAAE,UAAU,QAAQ,QAAQ,GAAuB;AACxE,MAAI,CAAC,UAAU,CAAC,SAAU,QAAO;AAEjC,QAAM,sBAAsB,CAAC,MAAwB;AACnD,QAAI,EAAE,WAAW,EAAE,eAAe;AAChC,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS;AAAA,MAET,yDAAC,SAAI,WAAU,qCACb;AAAA,uDAAC,SAAI,WAAU,oCACb;AAAA,yDAAC,QAAG,WAAU,mCACZ;AAAA,0DAAC,UAAK,WAAU,2CACb,mBAAS,MACZ;AAAA,YACC,SAAS,YACR,8CAAC,UAAK,WAAU,qCAAoC,eAAC;AAAA,aAEzD;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS;AAAA,cACT,cAAW;AAAA,cAEX;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,QAAO;AAAA,kBACP,aAAY;AAAA,kBACZ,eAAc;AAAA,kBACd,gBAAe;AAAA,kBAEf;AAAA,kEAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK;AAAA,oBACpC,8CAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,MAAK;AAAA;AAAA;AAAA,cACtC;AAAA;AAAA,UACF;AAAA,WACF;AAAA,QACA,+CAAC,SAAI,WAAU,kCACb;AAAA,yDAAC,SAAI,WAAU,iCACb;AAAA,0DAAC,UAAK,WAAU,mCAAkC,mBAAK;AAAA,YACvD,8CAAC,UAAK,WAAU,uEACb,mBAAS,MACZ;AAAA,aACF;AAAA,UACC,SAAS,eACR,+CAAC,SAAI,WAAU,iCACb;AAAA,0DAAC,UAAK,WAAU,mCAAkC,0BAElD;AAAA,YACA,8CAAC,OAAE,WAAU,yCACV,mBAAS,aACZ;AAAA,aACF;AAAA,UAED,SAAS,WACR,+CAAC,SAAI,WAAU,iCACb;AAAA,0DAAC,UAAK,WAAU,mCAAkC,sBAAQ;AAAA,YAC1D,8CAAC,UAAK,WAAU,qCACb,mBAAS,SACZ;AAAA,aACF;AAAA,UAED,SAAS,WACR,+CAAC,SAAI,WAAU,iCACb;AAAA,0DAAC,UAAK,WAAU,mCAAkC,sBAAQ;AAAA,YAC1D,8CAAC,UAAK,WAAU,qCACb,mBAAS,SACZ;AAAA,aACF;AAAA,WAEJ;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,cAAc,EAAE,QAAQ,UAAU,GAAuB;AACvE,QAAM,CAAC,kBAAkB,mBAAmB,QAAI;AAAA,IAC9C;AAAA,EACF;AACA,QAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AAEpD,QAAM,aAAa,mBAAmB,MAAM;AAE5C,QAAM,wBAAwB,WAAW;AAAA,IACvC,CAAC,aAAa,SAAS;AAAA,EACzB;AAEA,QAAM,kBAAkB;AAExB,QAAM,cAAc,CAAC,SAAiB,KAAK,SAAS;AAEpD,QAAM,eAAe,CAAC,SAAiB;AACrC,QAAI,KAAK,UAAU,gBAAiB,QAAO;AAC3C,WAAO,KAAK,MAAM,GAAG,eAAe;AAAA,EACtC;AAEA,QAAM,YAAY,CAAC,aAAuB;AACxC,wBAAoB,QAAQ;AAC5B,mBAAe,IAAI;AAAA,EACrB;AAEA,QAAM,aAAa,MAAM;AACvB,mBAAe,KAAK;AACpB,wBAAoB,IAAI;AAAA,EAC1B;AAEA,SACE,+CAAC,SAAI,WAAW,gBAAgB,aAAa,EAAE,IAC7C;AAAA,kDAAC,SAAI,WAAU,iCACb,yDAAC,WAAM,WAAU,sBACf;AAAA,oDAAC,WACC,yDAAC,QACC;AAAA,sDAAC,QAAG,sBAAQ;AAAA,QACZ,8CAAC,QAAG,kBAAI;AAAA,QACR,8CAAC,QAAG,yBAAW;AAAA,QACf,8CAAC,QAAG,kBAAI;AAAA,SACV,GACF;AAAA,MACA,8CAAC,WACE,qBAAW,IAAI,CAAC,UAAoB,UACnC,+CAAC,QACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YAEX,yDAAC,UAAK,WAAU,qCACb;AAAA,uBAAS;AAAA,cACT,SAAS,YACR,8CAAC,UAAK,WAAU,qCAAoC,eAEpD;AAAA,eAEJ;AAAA;AAAA,QACF;AAAA,QACA,8CAAC,QAAG,WAAU,iCAAgC,cAAW,QACtD,sBAAY,SAAS,IAAI,IACxB;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,MAAM,UAAU,QAAQ;AAAA,YACjC,cAAY,sBAAsB,SAAS,IAAI;AAAA,YAE/C,wDAAC,UAAK,WAAU,kFACb,uBAAa,SAAS,IAAI,GAC7B;AAAA;AAAA,QACF,IAEA,8CAAC,UAAK,WAAU,qCACb,mBAAS,MACZ,GAEJ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YAEV,mBAAS;AAAA;AAAA,QACZ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YAEX;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM,UAAU,QAAQ;AAAA,gBACjC,cAAY,mBAAmB,SAAS,IAAI;AAAA,gBAE5C;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAM;AAAA,oBACN,QAAO;AAAA,oBACP,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,QAAO;AAAA,oBACP,aAAY;AAAA,oBACZ,eAAc;AAAA,oBACd,gBAAe;AAAA,oBAEf;AAAA,oEAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK;AAAA,sBAC/B,8CAAC,UAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK;AAAA,sBACtC,8CAAC,UAAK,IAAG,MAAK,IAAG,KAAI,IAAG,SAAQ,IAAG,KAAI;AAAA;AAAA;AAAA,gBACzC;AAAA;AAAA,YACF;AAAA;AAAA,QACF;AAAA,WA7DO,KA8DT,CACD,GACH;AAAA,OACF,GACF;AAAA,IACC,yBACC,+CAAC,SAAI,WAAU,uCACb;AAAA,oDAAC,UAAK,WAAU,qCAAoC,eAAC;AAAA,MAAO;AAAA,OAE9D;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA;AAAA,IACX;AAAA,KACF;AAEJ;;;ACzOI,IAAAC,uBAAA;AAVG,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,YAAY;AACd,GAAkB;AAChB,SACE,+CAAC,SAAI,WAAW,gBAAgB,SAAS,GAAG,KAAK,GAC/C;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS;AAAA,QACT,MAAK;AAAA,QACL,UAAU;AAAA,QACV,iBAAc;AAAA,QACd,iBAAe;AAAA,QACf,cAAY;AAAA,QACZ,WAAW,CAAC,MAAM;AAChB,cAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,cAAE,eAAe;AACjB,qBAAS;AAAA,UACX;AAAA,QACF;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,IACC,UACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,4CAA4C,KAAK;AAAA,QAC5D,MAAK;AAAA,QAEJ;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ;AAQO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd,GAAsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,WAAW,0CAA0C,OAAO,IAAI,WAAW,iCAAiC,EAAE,IAAI,SAAS,GAAG,KAAK;AAAA,MACnI;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAQO,SAAS,gBAAgB,EAAE,YAAY,GAAG,GAAyB;AACxE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,yBAAyB,SAAS,GAAG,KAAK;AAAA,MACrD,MAAK;AAAA;AAAA,EACP;AAEJ;;;ACjHS,IAAAC,uBAAA;AADF,SAAS,OAAO,EAAE,UAAU,YAAY,GAAG,GAAgB;AAChE,SAAO,8CAAC,SAAI,WAAW,uBAAuB,SAAS,IAAK,UAAS;AACvE;;;ACIM,IAAAC,uBAAA;AAfC,SAAS,WAAW;AAAA,EACzB,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AACb,GAAoB;AAClB,QAAM,YAAY;AAClB,QAAM,UACJ,GAAG,SAAS,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK;AAEhF,MAAI,QAAQ,CAAC,UAAU;AACrB,WACE,8CAAC,OAAE,MAAY,WAAW,SACvB,UACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACvBI,IAAAC,uBAAA;AAFG,SAAS,QAAQ,EAAE,OAAO,MAAM,YAAY,GAAG,GAAiB;AACrE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,4BAA4B,IAAI,IAAI,SAAS,GAAG,KAAK;AAAA,MAChE,MAAK;AAAA,MACL,cAAW;AAAA;AAAA,EACb;AAEJ;;;ACxBA,QAAQ,sBAAsB;AAAA,EAC5B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACV,CAAC;;;ACiBD,IAAAC,iBAAkB;AAGlB,IAAM,kBAAkB,CAAC;AAEzB,IAAM,aAAa,eAAAC,QAAM,cAAc,eAAe;AAU/C,SAAS,iBAAiB,YAAY;AAC3C,QAAM,oBAAoB,eAAAA,QAAM,WAAW,UAAU;AAGrD,SAAO,eAAAA,QAAM;AAAA,IACX,WAAY;AAEV,UAAI,OAAO,eAAe,YAAY;AACpC,eAAO,WAAW,iBAAiB;AAAA,MACrC;AAEA,aAAO,EAAC,GAAG,mBAAmB,GAAG,WAAU;AAAA,IAC7C;AAAA,IACA,CAAC,mBAAmB,UAAU;AAAA,EAChC;AACF;AAWO,SAAS,YAAY,YAAY;AAEtC,MAAI;AAEJ,MAAI,WAAW,sBAAsB;AACnC,oBACE,OAAO,WAAW,eAAe,aAC7B,WAAW,WAAW,eAAe,IACrC,WAAW,cAAc;AAAA,EACjC,OAAO;AACL,oBAAgB,iBAAiB,WAAW,UAAU;AAAA,EACxD;AAEA,SAAO,eAAAA,QAAM;AAAA,IACX,WAAW;AAAA,IACX,EAAC,OAAO,cAAa;AAAA,IACrB,WAAW;AAAA,EACb;AACF;;;AClFA,IAAAC,iBAAiE;AAqDtD,IAAAC,uBAAA;AApBJ,IAAM,UAA+C,CAAC;AAAA,EAC3D;AAAA,EACA;AACF,MAAM;AAIJ,QAAM,gBAAgB,wBAAS,QAAQ,QAAQ;AAC/C,QAAM,eAAe,OAAO,cAAc;AAG1C,QAAM,cAAc,cAAc,KAAK,CAAC,UAAU;AAChD,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,MAAM,MAAM,SAAS;AAAA,IAC9B;AACA,WAAO;AAAA,EACT,CAAC;AAGD,MAAI,CAAC,gBAAgB,CAAC,aAAa;AACjC,WAAO,8CAAC,UAAK,WAAU,mBAAmB,UAAS;AAAA,EACrD;AAIA,QAAM,cAAc,UAAU,QAAQ,cAAc,EAAE;AAGtD,QAAM,cAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AAEA,QAAM,iBAAiB,YAAY,WAAW,KAAK;AAGnD,QAAM,OAAO,cACV,IAAI,CAAC,UAAW,OAAO,UAAU,WAAW,QAAQ,EAAG,EACvD,KAAK,EAAE,EACP,KAAK;AAER,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU;AAAA,MACV,UAAQ;AAAA,MACR,UAAQ;AAAA,MACR,YAAY;AAAA,MACZ,YAAY,EAAE,KAAK,KAAK,KAAK,IAAI;AAAA;AAAA,EACnC;AAEJ;;;ACjCS,IAAAC,uBAAA;AAZF,IAAMC,eAAqC,CAAC,EAAE,SAAS,MAAM;AAClE,QAAM,aAAa;AAAA;AAAA,IAEjB,MAAM;AAAA;AAAA;AAAA,IAGN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,8CAAC,eAAgB,YAAyB,UAAS;AAC5D;;;AC1DA,IAAAC,iBAAyD;AAmClD,SAAS,cAAiC;AAC/C,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,mBAAe,uBAAuB,IAAI;AAEhD,QAAM,aAAS,4BAAY,MAAM;AAC/B,cAAU,CAAC,SAAS,CAAC,IAAI;AAAA,EAC3B,GAAG,CAAC,CAAC;AAEL,QAAM,WAAO,4BAAY,MAAM;AAC7B,cAAU,IAAI;AAAA,EAChB,GAAG,CAAC,CAAC;AAEL,QAAM,YAAQ,4BAAY,MAAM;AAC9B,cAAU,KAAK;AAAA,EACjB,GAAG,CAAC,CAAC;AAGL,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,aAAS,mBAAmB,OAAmB;AAC7C,UACE,aAAa,WACb,CAAC,aAAa,QAAQ,SAAS,MAAM,MAAc,GACnD;AACA,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAEA,aAAS,iBAAiB,aAAa,kBAAkB;AACzD,WAAO,MAAM,SAAS,oBAAoB,aAAa,kBAAkB;AAAA,EAC3E,GAAG,CAAC,MAAM,CAAC;AAGX,gCAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AAEb,aAAS,aAAa,OAAsB;AAC1C,UAAI,MAAM,QAAQ,UAAU;AAC1B,kBAAU,KAAK;AAAA,MACjB;AAAA,IACF;AAEA,aAAS,iBAAiB,WAAW,YAAY;AACjD,WAAO,MAAM,SAAS,oBAAoB,WAAW,YAAY;AAAA,EACnE,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;A5DWA;;;A6D3EO,SAAS,aACd,YACA,aACyB;AACzB,QAAM,SAAS,KAAK,MAAM,KAAK,UAAU,UAAU,CAAC;AAEpD,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC5D,UAAM,SAAS,SAAS,KAAK,SAAS,gBAAgB,QAAQ,IAAI;AAClE,QAAI,UAAU,OAAO,WAAW,UAAU;AACxC,aAAO,OAAO,QAAQ,UAAU;AAAA,IAClC;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,gBACP,KACA,MACqC;AACrC,QAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,MAAI,UAAmB;AACvB,aAAW,OAAO,MAAM;AACtB,QACE,WACA,OAAO,YAAY,YACnB,OAAQ,SACR;AACA,gBAAW,QAAoC,GAAG;AAAA,IACpD,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;AChDO,SAAS,sBAAsB,YAAkC;AAGtE,QAAM,SAAS,KAAK,MAAM,KAAK,UAAU,UAAU,CAAC;AAEpD,MAAI,CAAC,OAAO,QAAQ,CAAC,GAAG,WAAY,QAAO;AAE3C,QAAM,OAAO,OAAO,MAAM,CAAC;AAC3B,QAAM,QAAQ,KAAK;AACnB,QAAM,aAAa,MAAM,OAAO,sBAAsB;AAGtD,MAAI,MAAM,SAAS;AACjB,UAAM,QAAQ,sBACZ;AAAA,EACJ;AAGA,MAAI,MAAM,SAAS;AACjB,UAAM,QAAQ,sBACZ;AAAA,EACJ;AAGA,MAAI,MAAM,SAAS;AACjB,UAAM,QAAQ,sBACZ;AAAA,EACJ;AAGA,MAAI,MAAM,WAAW;AACnB,UAAM,UAAU,sBACd;AAGF,UAAM,UAAU,kBAAkB;AAAA,MAChC;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM,EAAE,aAAa,aAAa;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAGA,MAAI,MAAM,aAAa;AACrB,UAAM,YAAY,sBAChB;AAGF,UAAM,YAAY,kBAAkB;AAAA,MAClC;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM,EAAE,aAAa,EAAE,YAAY,aAAa,EAAE;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAGA,MAAI,MAAM,OAAO;AACf,UAAM,MAAM,sBACV;AAEF,UAAM,MAAM,kBAAkB;AAAA,MAC5B;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,UACJ,eAAe;AAAA,YACb,KAAK,CAAC;AAAA,YACN,SAAS;AAAA,cACP,SAAS,EAAE,SAAS,+BAA+B;AAAA,YACrD;AAAA,YACA,cAAc,CAAC;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,UACJ,eAAe;AAAA,YACb,QAAQ,CAAC;AAAA,YACT,SAAS;AAAA,cACP,SAAS,EAAE,SAAS,kCAAkC;AAAA,YACxD;AAAA,YACA,cAAc,CAAC;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,UACJ,eAAe;AAAA,YACb,KAAK,CAAC;AAAA,YACN,SAAS;AAAA,cACP,SAAS,EAAE,SAAS,+BAA+B;AAAA,YACrD;AAAA,YACA,cAAc;AAAA,cACZ,KAAK;AAAA,gBACH,SAAS;AAAA,gBACT,QAAQ;AAAA,kBACN,eAAe;AAAA,gBACjB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,YAAY;AACd,QAAI,WAAW,SAAS;AACtB,iBAAW,QAAQ,sBACjB;AAEF,iBAAW,QAAQ,kBAAkB;AAAA,QACnC;AAAA,UACE,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,YACJ,gBAAgB;AAAA,cACd,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,YACJ,gBAAgB;AAAA,cACd,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,cAAc;AAC3B,iBAAW,aAAa,sBACtB;AAEF,iBAAW,aAAa,kBAAkB;AAAA,QACxC;AAAA,UACE,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,YACJ,YAAY;AAAA,cACV,SAAS;AAAA,cACT,QAAQ;AAAA,gBACN,eAAe;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,YACJ,eAAe;AAAA,cACb,MAAM;AAAA,gBACJ,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,cAAc;AAC3B,iBAAW,aAAa,sBACtB;AAEF,iBAAW,aAAa,kBAAkB;AAAA,QACxC;AAAA,UACE,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,YACJ,oBAAoB;AAAA,cAClB,MAAM;AAAA,gBACJ,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,KAAK;AAClB,iBAAW,IAAI,sBACb;AAAA,IAEJ;AAEA,QAAI,WAAW,QAAQ;AACrB,iBAAW,OAAO,sBAChB;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO;AACT;;;AClNO,SAAS,4BAAuC;AACrD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,qBACE;AAAA,IAIF,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,qBACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,sBAAsB;AAAA,MACpB,MAAM;AAAA,MACN,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,QACpB,MAAM;AAAA,QACN,qBACE;AAAA,QAIF,iBAAiB;AAAA,UACf;AAAA,YACE,OAAO;AAAA,YACP,aAAa;AAAA,YACb,MAAM;AAAA,cACJ,MAAM;AAAA,cACN,YAAY;AAAA,gBACV,aAAa,EAAE,MAAM,cAAc;AAAA,cACrC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,iBAAiB;AAAA,QACf;AAAA,UACE,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,YACJ,eAAe;AAAA,cACb,MAAM;AAAA,cACN,YAAY;AAAA,gBACV,iBAAiB,EAAE,MAAM,cAAc;AAAA,cACzC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf;AAAA,QACE,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,UACJ,eAAe;AAAA,YACb,eAAe;AAAA,cACb,MAAM;AAAA,cACN,YAAY;AAAA,gBACV,iBAAiB,EAAE,MAAM,cAAc;AAAA,cACzC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC1EO,SAAS,qBAAgC;AAC9C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,qBACE;AAAA,IAGF,sBAAsB;AAAA,MACpB,OAAO,CAAC,EAAE,MAAM,SAAS,GAAG,EAAE,MAAM,SAAS,GAAG,EAAE,MAAM,UAAU,CAAC;AAAA,IACrE;AAAA,IACA,iBAAiB;AAAA,MACf;AAAA,QACE,OAAO;AAAA,QACP,MAAM,EAAE,aAAa,aAAa;AAAA,MACpC;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM,EAAE,aAAa,mBAAmB;AAAA,MAC1C;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM,EAAE,aAAa,EAAE;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;;;ACfO,SAAS,2BACd,MACA,SACmB;AACnB,QAAM,SAA4B,CAAC;AAGnC,MAAI,QAAQ,WAAW;AACrB,UAAM,WAAW;AACjB,QAAI;AACJ,YAAQ,QAAQ,SAAS,KAAK,IAAI,OAAO,MAAM;AAC7C,UAAI,EAAE,MAAM,CAAC,KAAK,QAAQ,YAAY;AACpC,eAAO,KAAK;AAAA,UACV,SAAS,0BAA0B,MAAM,CAAC,CAAC,yBAAyB,OAAO,KAAK,QAAQ,SAAS,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA,UACvH,UAAU;AAAA,UACV,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,aAAa;AACvB,UAAM,WAAW;AACjB,QAAI;AACJ,YAAQ,QAAQ,SAAS,KAAK,IAAI,OAAO,MAAM;AAC7C,UAAI,EAAE,MAAM,CAAC,KAAK,QAAQ,cAAc;AACtC,eAAO,KAAK;AAAA,UACV,SAAS,4BAA4B,MAAM,CAAC,CAAC,eAAe,OAAO,KAAK,QAAQ,WAAW,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA,UACjH,UAAU;AAAA,UACV,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,SAAS;AACnB,UAAM,cAAc;AACpB,QAAI;AACJ,YAAQ,QAAQ,YAAY,KAAK,IAAI,OAAO,MAAM;AAChD,UAAI,CAAC,QAAQ,QAAQ,SAAS,MAAM,CAAC,CAAC,GAAG;AACvC,eAAO,KAAK;AAAA,UACV,SAAS,2BAA2B,MAAM,CAAC,CAAC,iBAAiB,QAAQ,QAAQ,KAAK,IAAI,KAAK,MAAM;AAAA,UACjG,UAAU;AAAA,UACV,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,WAAW,cAAc;AACnC,UAAM,YAAY;AAClB,QAAI;AACJ,YAAQ,QAAQ,UAAU,KAAK,IAAI,OAAO,MAAM;AAC9C,UAAI,CAAC,QAAQ,UAAU,aAAa,SAAS,MAAM,CAAC,CAAC,GAAG;AACtD,eAAO,KAAK;AAAA,UACV,SAAS,wBAAwB,MAAM,CAAC,CAAC,iBAAiB,QAAQ,UAAU,aAAa,KAAK,IAAI,KAAK,MAAM;AAAA,UAC7G,UAAU;AAAA,UACV,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACxEO,SAAS,+BACd,MAC8B;AAC9B,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,IAAI;AAAA,EAC1B,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,CAAC,YAAY,MAAM,EAAG,QAAO,CAAC;AAElC,QAAM,YAAuD,CAAC;AAC9D,QAAM,cAAuC,CAAC;AAC9C,QAAM,UAAoB,CAAC;AAC3B,QAAM,eAAyB,CAAC;AAChC,QAAM,eAAyB,CAAC;AAChC,QAAM,WAA0B,CAAC;AACjC,QAAM,mBAAiE,CAAC;AACxE,MAAI;AAGJ,YAAU,WAAW,OAAO,SAAS;AACrC,YAAU,aAAa,OAAO,WAAW;AACzC,kBAAgB,kBAAkB,OAAO,QAAQ;AAGjD,aAAW,UAAU,OAAO,OAAO,OAAO,KAAK,GAAG;AAChD,QAAI,CAAC,SAAS,MAAM,EAAG;AAGvB,QAAI,CAAC,UAAU;AACb,UAAI,SAAS,OAAQ,YAAW;AAAA,eACvB,YAAY,OAAQ,YAAW;AAAA,IAC1C;AAGA,cAAU,WAAW,OAAO,SAAS;AACrC,cAAU,aAAa,OAAO,WAAW;AACzC,oBAAgB,kBAAkB,OAAO,QAAQ;AAGjD,QAAI,SAAS,OAAO,OAAO,GAAG;AAC5B,iBAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,OAAO,OAAO,GAAG;AACxD,gBAAQ,KAAK,IAAI;AACjB,YAAI,SAAS,GAAG,GAAG;AACjB,oBAAU,WAAW,IAAI,SAAS;AAClC,oBAAU,aAAa,IAAI,WAAW;AACtC,cAAI,OAAO,IAAI,YAAY,UAAU;AACnC,qBAAS,KAAK;AAAA,cACZ,SAAS,IAAI;AAAA,cACb,WAAW;AAAA,cACX,MAAM;AAAA,cACN,UAAU,YAAY;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,SAAS,OAAO,YAAY,GAAG;AACjC,iBAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,OAAO,YAAY,GAAG;AAC7D,qBAAa,KAAK,IAAI;AACtB,YAAI,SAAS,GAAG,GAAG;AACjB,oBAAU,WAAW,IAAI,SAAS;AAClC,oBAAU,aAAa,IAAI,WAAW;AACtC,cAAI,OAAO,IAAI,YAAY,UAAU;AACnC,qBAAS,KAAK;AAAA,cACZ,SAAS,IAAI;AAAA,cACb,WAAW;AAAA,cACX,MAAM;AAAA,cACN,UAAU,YAAY;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,SAAS,OAAO,YAAY,GAAG;AACjC,iBAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,OAAO,YAAY,GAAG;AAC7D,qBAAa,KAAK,IAAI;AACtB,YAAI,SAAS,GAAG,GAAG;AACjB,oBAAU,WAAW,IAAI,SAAS;AAClC,oBAAU,aAAa,IAAI,WAAW;AACtC,cAAI,OAAO,IAAI,YAAY,UAAU;AACnC,qBAAS,KAAK;AAAA,cACZ,SAAS,IAAI;AAAA,cACb,WAAW;AAAA,cACX,MAAM;AAAA,cACN,UAAU,YAAY;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAuC;AAAA,IAC3C;AAAA,IACA;AAAA,IACA,WAAW,EAAE,SAAS,cAAc,aAAa;AAAA,EACnD;AAEA,MAAI,SAAU,QAAO,WAAW;AAChC,MAAI,SAAS,SAAS,EAAG,QAAO,WAAW;AAC3C,MAAI,iBAAiB,SAAS,EAAG,QAAO,WAAW;AAEnD,SAAO;AACT;AAIA,SAAS,SAAS,GAA0C;AAC1D,SAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC;AAChE;AAEA,SAAS,YAAY,GAInB;AACA,SAAO,SAAS,CAAC,KAAK,aAAa,KAAK,WAAW,KAAK,SAAS,EAAE,KAAK;AAC1E;AAEA,SAAS,YAAY,GAA4C;AAC/D,SACE,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,OAAO,MAAM;AAEnE;AAEA,SAAS,UACP,QACA,QACM;AACN,MAAI,CAAC,SAAS,MAAM,EAAG;AACvB,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3C,QAAI,YAAY,CAAC,EAAG,QAAO,CAAC,IAAI;AAAA,EAClC;AACF;AAEA,SAAS,UAAU,QAAiC,QAAuB;AACzE,MAAI,CAAC,SAAS,MAAM,EAAG;AACvB,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3C,WAAO,CAAC,IAAI;AAAA,EACd;AACF;AAEA,SAAS,gBACP,QACA,UACM;AACN,MAAI,CAAC,SAAS,QAAQ,EAAG;AACzB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,QAAI,IAAI,WAAW,GAAG,KAAK,CAAC,SAAS,KAAK,EAAG;AAE7C,UAAM,WAAW,OAAO,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG;AACpD,UAAM,UAAU,OAAO,KAAK,KAAK;AACjC,QAAI,UAAU;AACZ,iBAAW,KAAK,SAAS;AACvB,YAAI,CAAC,SAAS,QAAQ,SAAS,CAAC,EAAG,UAAS,QAAQ,KAAK,CAAC;AAAA,MAC5D;AAAA,IACF,OAAO;AACL,aAAO,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAAA,IACtC;AAAA,EACF;AACF;","names":["MDXProvider","import_react","import_core","import_react","import_react","import_jsx_runtime","import_react","regex","regex","prettierBabel","prettierEstree","prettierTypescript","prettierHtml","import_react","import_jsx_runtime","handleChange","loadPackageTypes","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","result","import_react","import_core","import_collector","import_jsx_runtime","import_react","import_collector","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_core","prettier","import_babel","import_estree","import_typescript","import_html","prettierBabel","prettierEstree","prettierTypescript","prettierHtml","import_jsx_runtime","format","import_react","import_collector","import_jsx_runtime","import_react","storage","storage","isNumber","storage","idCounter","simpleNames","send","props","mounted","name","data","concatArrays","array1","array2","combinedArray","Array","length","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","Map","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","startsWith","endsWith","getGroupIdForArbitraryProperty","classParts","split","startIndex","getGroupRecursive","getConflictingClassGroupIds","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","classPathsLength","currentClassPart","nextClassPartObject","get","result","undefined","classRest","join","slice","validatorsLength","validatorObj","indexOf","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","entries","Object","key","value","path","current","parts","part","next","set","func","createLruCache","maxCacheSize","cacheSize","cache","create","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","orderSensitiveModifiers","forEach","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","has","sort","createConfigUtils","sortModifiers","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","originalClassName","substring","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","test","isNumber","Number","isNaN","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryWeight","isLabelWeight","isArbitraryFamilyName","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","exec","shouldMatchNoLabel","label","getDefaultConfig","themeColor","fromTheme","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","isArbitraryVariable","isArbitraryValue","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","isFraction","scaleGridTemplateColsRows","isInteger","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","isArbitraryVariablePosition","isArbitraryPosition","position","scaleBgRepeat","repeat","scaleBgSize","isArbitraryVariableSize","isArbitrarySize","size","scaleGradientStopPosition","isPercent","isArbitraryVariableLength","isArbitraryLength","scaleRadius","scaleBorderWidth","isNumber","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","cacheSize","theme","animate","aspect","blur","isTshirtSize","breakpoint","color","isAny","container","ease","font","isAnyNonArbitrary","leading","perspective","radius","shadow","spacing","text","tracking","classGroups","columns","box","display","sr","float","clear","isolation","object","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","content","items","baseline","self","p","px","py","ps","pe","pbs","pbe","pt","pr","pb","pl","m","mx","my","ms","me","mbs","mbe","mt","mr","mb","ml","inline","block","w","screen","h","isArbitraryVariableWeight","isArbitraryWeight","isArbitraryVariableFamilyName","isArbitraryFamilyName","isArbitraryNumber","list","placeholder","decoration","indent","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","isArbitraryVariableImage","isArbitraryImage","from","via","rounded","border","divide","outline","isArbitraryVariableShadow","isArbitraryShadow","ring","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","conflictingClassGroups","conflictingClassGroupModifiers","orderSensitiveModifiers","twMerge","createTailwindMerge","getDefaultConfig","import_jsx_runtime","import_react","import_jsx_runtime","format","import_react","import_jsx_runtime","rough","r","pos","baseY","React","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","React","import_react","import_jsx_runtime","import_jsx_runtime","MDXProvider","import_react"]}