@easemate/web-kit 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/build/decorators.cjs +921 -0
  2. package/build/decorators.cjs.map +1 -0
  3. package/build/decorators.d.cts +123 -0
  4. package/build/decorators.d.ts +123 -0
  5. package/build/decorators.js +889 -0
  6. package/build/decorators.js.map +1 -0
  7. package/build/elements.cjs +27604 -0
  8. package/build/elements.cjs.map +1 -0
  9. package/build/elements.d.cts +373 -0
  10. package/build/elements.d.ts +373 -0
  11. package/build/elements.js +27528 -0
  12. package/build/elements.js.map +1 -0
  13. package/build/{elements/monitor/index.d.ts → index-31iOHBv0.d.cts} +26 -5
  14. package/build/{elements/monitor/index.d.cts → index-31iOHBv0.d.ts} +26 -5
  15. package/build/{elements/panel/index.d.cts → index-NzGpn7ai.d.cts} +6 -3
  16. package/build/{elements/panel/index.d.ts → index-NzGpn7ai.d.ts} +6 -3
  17. package/build/{elements/state/index.d.ts → index-qZoNKsHn.d.cts} +46 -5
  18. package/build/{elements/state/index.d.cts → index-qZoNKsHn.d.ts} +46 -5
  19. package/build/index.cjs +38651 -38
  20. package/build/index.cjs.map +1 -0
  21. package/build/index.d.cts +85 -6
  22. package/build/index.d.ts +85 -6
  23. package/build/index.js +38535 -12
  24. package/build/index.js.map +1 -0
  25. package/build/init-B7gNNyTd.d.ts +235 -0
  26. package/build/init-DwVGVxkx.d.cts +235 -0
  27. package/build/jsx.cjs +31 -0
  28. package/build/jsx.cjs.map +1 -0
  29. package/build/jsx.d.cts +317 -0
  30. package/build/jsx.d.ts +317 -0
  31. package/build/jsx.js +6 -0
  32. package/build/jsx.js.map +1 -0
  33. package/build/outside-click-rZ3Di_WX.d.cts +16 -0
  34. package/build/outside-click-rZ3Di_WX.d.ts +16 -0
  35. package/build/react.cjs +37827 -0
  36. package/build/react.cjs.map +1 -0
  37. package/build/react.d.cts +356 -0
  38. package/build/react.d.ts +356 -0
  39. package/build/react.js +37802 -0
  40. package/build/react.js.map +1 -0
  41. package/build/register.cjs +35832 -36
  42. package/build/register.cjs.map +1 -0
  43. package/build/register.d.cts +4 -33
  44. package/build/register.d.ts +4 -33
  45. package/build/register.js +35831 -35
  46. package/build/register.js.map +1 -0
  47. package/build/register.server.cjs +19 -0
  48. package/build/register.server.cjs.map +1 -0
  49. package/build/register.server.d.cts +2 -0
  50. package/build/register.server.d.ts +2 -0
  51. package/build/register.server.js +1 -0
  52. package/build/register.server.js.map +1 -0
  53. package/build/registry-9GX9KTG1.d.cts +264 -0
  54. package/build/registry-9GX9KTG1.d.ts +264 -0
  55. package/build/template-helpers-CguLXtLD.d.cts +10 -0
  56. package/build/template-helpers-CguLXtLD.d.ts +10 -0
  57. package/build/theme.cjs +746 -0
  58. package/build/theme.cjs.map +1 -0
  59. package/build/{theme/index.d.cts → theme.d.cts} +41 -21
  60. package/build/{theme/index.d.ts → theme.d.ts} +41 -21
  61. package/build/theme.js +692 -0
  62. package/build/theme.js.map +1 -0
  63. package/build/utils.cjs +205 -0
  64. package/build/utils.cjs.map +1 -0
  65. package/build/utils.d.cts +26 -0
  66. package/build/utils.d.ts +26 -0
  67. package/build/utils.js +167 -0
  68. package/build/utils.js.map +1 -0
  69. package/package.json +47 -33
  70. package/build/components/code/index.cjs +0 -152
  71. package/build/components/code/index.d.cts +0 -11
  72. package/build/components/code/index.d.ts +0 -11
  73. package/build/components/code/index.js +0 -148
  74. package/build/components/code/utils/highlight-api.cjs +0 -18
  75. package/build/components/code/utils/highlight-api.d.cts +0 -7
  76. package/build/components/code/utils/highlight-api.d.ts +0 -7
  77. package/build/components/code/utils/highlight-api.js +0 -14
  78. package/build/components/code/utils/syntax-grammars.cjs +0 -62
  79. package/build/components/code/utils/syntax-grammars.d.cts +0 -7
  80. package/build/components/code/utils/syntax-grammars.d.ts +0 -7
  81. package/build/components/code/utils/syntax-grammars.js +0 -59
  82. package/build/components/code/utils/syntax-highlighter-theme.cjs +0 -27
  83. package/build/components/code/utils/syntax-highlighter-theme.d.cts +0 -3
  84. package/build/components/code/utils/syntax-highlighter-theme.d.ts +0 -3
  85. package/build/components/code/utils/syntax-highlighter-theme.js +0 -23
  86. package/build/components/code/utils/syntax-highlighter-types.cjs +0 -2
  87. package/build/components/code/utils/syntax-highlighter-types.d.cts +0 -12
  88. package/build/components/code/utils/syntax-highlighter-types.d.ts +0 -12
  89. package/build/components/code/utils/syntax-highlighter-types.js +0 -1
  90. package/build/components/code/utils/syntax-tokenizer.cjs +0 -63
  91. package/build/components/code/utils/syntax-tokenizer.d.cts +0 -3
  92. package/build/components/code/utils/syntax-tokenizer.d.ts +0 -3
  93. package/build/components/code/utils/syntax-tokenizer.js +0 -58
  94. package/build/components/curve/bezier-conversion.cjs +0 -23
  95. package/build/components/curve/bezier-conversion.d.cts +0 -2
  96. package/build/components/curve/bezier-conversion.d.ts +0 -2
  97. package/build/components/curve/bezier-conversion.js +0 -19
  98. package/build/components/curve/canvas-controls.cjs +0 -300
  99. package/build/components/curve/canvas-controls.d.cts +0 -12
  100. package/build/components/curve/canvas-controls.d.ts +0 -12
  101. package/build/components/curve/canvas-controls.js +0 -296
  102. package/build/components/curve/canvas.cjs +0 -1208
  103. package/build/components/curve/canvas.d.cts +0 -24
  104. package/build/components/curve/canvas.d.ts +0 -24
  105. package/build/components/curve/canvas.js +0 -1204
  106. package/build/components/curve/constants.cjs +0 -203
  107. package/build/components/curve/constants.d.cts +0 -23
  108. package/build/components/curve/constants.d.ts +0 -23
  109. package/build/components/curve/constants.js +0 -200
  110. package/build/components/curve/controls.cjs +0 -942
  111. package/build/components/curve/controls.d.cts +0 -37
  112. package/build/components/curve/controls.d.ts +0 -37
  113. package/build/components/curve/controls.js +0 -938
  114. package/build/components/curve/index.cjs +0 -335
  115. package/build/components/curve/index.d.cts +0 -31
  116. package/build/components/curve/index.d.ts +0 -31
  117. package/build/components/curve/index.js +0 -330
  118. package/build/components/curve/output.cjs +0 -141
  119. package/build/components/curve/output.d.cts +0 -19
  120. package/build/components/curve/output.d.ts +0 -19
  121. package/build/components/curve/output.js +0 -137
  122. package/build/components/curve/styles.cjs +0 -493
  123. package/build/components/curve/styles.d.cts +0 -6
  124. package/build/components/curve/styles.d.ts +0 -6
  125. package/build/components/curve/styles.js +0 -490
  126. package/build/components/curve/svg-renderer.cjs +0 -185
  127. package/build/components/curve/svg-renderer.d.cts +0 -9
  128. package/build/components/curve/svg-renderer.d.ts +0 -9
  129. package/build/components/curve/svg-renderer.js +0 -175
  130. package/build/components/curve/toolbar.cjs +0 -368
  131. package/build/components/curve/toolbar.d.cts +0 -26
  132. package/build/components/curve/toolbar.d.ts +0 -26
  133. package/build/components/curve/toolbar.js +0 -364
  134. package/build/components/curve/types.cjs +0 -10
  135. package/build/components/curve/types.d.cts +0 -33
  136. package/build/components/curve/types.d.ts +0 -33
  137. package/build/components/curve/types.js +0 -7
  138. package/build/components/curve/utils.cjs +0 -541
  139. package/build/components/curve/utils.d.cts +0 -33
  140. package/build/components/curve/utils.d.ts +0 -33
  141. package/build/components/curve/utils.js +0 -521
  142. package/build/components/index.cjs +0 -18
  143. package/build/components/index.d.cts +0 -2
  144. package/build/components/index.d.ts +0 -2
  145. package/build/components/index.js +0 -2
  146. package/build/decorators/Component.cjs +0 -127
  147. package/build/decorators/Component.d.cts +0 -28
  148. package/build/decorators/Component.d.ts +0 -28
  149. package/build/decorators/Component.js +0 -123
  150. package/build/decorators/Listen.cjs +0 -154
  151. package/build/decorators/Listen.d.cts +0 -18
  152. package/build/decorators/Listen.d.ts +0 -18
  153. package/build/decorators/Listen.js +0 -151
  154. package/build/decorators/OutsideClick.cjs +0 -64
  155. package/build/decorators/OutsideClick.d.cts +0 -16
  156. package/build/decorators/OutsideClick.d.ts +0 -16
  157. package/build/decorators/OutsideClick.js +0 -59
  158. package/build/decorators/Prop.cjs +0 -273
  159. package/build/decorators/Prop.d.cts +0 -22
  160. package/build/decorators/Prop.d.ts +0 -22
  161. package/build/decorators/Prop.js +0 -270
  162. package/build/decorators/Query.cjs +0 -79
  163. package/build/decorators/Query.d.cts +0 -27
  164. package/build/decorators/Query.d.ts +0 -27
  165. package/build/decorators/Query.js +0 -76
  166. package/build/decorators/Watch.cjs +0 -52
  167. package/build/decorators/Watch.d.cts +0 -11
  168. package/build/decorators/Watch.d.ts +0 -11
  169. package/build/decorators/Watch.js +0 -49
  170. package/build/decorators/index.cjs +0 -15
  171. package/build/decorators/index.d.cts +0 -6
  172. package/build/decorators/index.d.ts +0 -6
  173. package/build/decorators/index.js +0 -6
  174. package/build/elements/button/index.cjs +0 -214
  175. package/build/elements/button/index.d.cts +0 -11
  176. package/build/elements/button/index.d.ts +0 -11
  177. package/build/elements/button/index.js +0 -210
  178. package/build/elements/checkbox/index.cjs +0 -316
  179. package/build/elements/checkbox/index.d.cts +0 -14
  180. package/build/elements/checkbox/index.d.ts +0 -14
  181. package/build/elements/checkbox/index.js +0 -312
  182. package/build/elements/color/index.cjs +0 -154
  183. package/build/elements/color/index.d.cts +0 -18
  184. package/build/elements/color/index.d.ts +0 -18
  185. package/build/elements/color/index.js +0 -150
  186. package/build/elements/color/picker.cjs +0 -544
  187. package/build/elements/color/picker.d.cts +0 -37
  188. package/build/elements/color/picker.d.ts +0 -37
  189. package/build/elements/color/picker.js +0 -540
  190. package/build/elements/color/utils.cjs +0 -235
  191. package/build/elements/color/utils.d.cts +0 -37
  192. package/build/elements/color/utils.d.ts +0 -37
  193. package/build/elements/color/utils.js +0 -218
  194. package/build/elements/dropdown/index.cjs +0 -875
  195. package/build/elements/dropdown/index.d.cts +0 -30
  196. package/build/elements/dropdown/index.d.ts +0 -30
  197. package/build/elements/dropdown/index.js +0 -871
  198. package/build/elements/field/index.cjs +0 -82
  199. package/build/elements/field/index.d.cts +0 -4
  200. package/build/elements/field/index.d.ts +0 -4
  201. package/build/elements/field/index.js +0 -78
  202. package/build/elements/icons/animation/chevron.cjs +0 -57
  203. package/build/elements/icons/animation/chevron.d.cts +0 -10
  204. package/build/elements/icons/animation/chevron.d.ts +0 -10
  205. package/build/elements/icons/animation/chevron.js +0 -53
  206. package/build/elements/icons/animation/clear.cjs +0 -74
  207. package/build/elements/icons/animation/clear.d.cts +0 -3
  208. package/build/elements/icons/animation/clear.d.ts +0 -3
  209. package/build/elements/icons/animation/clear.js +0 -70
  210. package/build/elements/icons/animation/grid.cjs +0 -77
  211. package/build/elements/icons/animation/grid.d.cts +0 -8
  212. package/build/elements/icons/animation/grid.d.ts +0 -8
  213. package/build/elements/icons/animation/grid.js +0 -73
  214. package/build/elements/icons/animation/loading.cjs +0 -68
  215. package/build/elements/icons/animation/loading.d.cts +0 -3
  216. package/build/elements/icons/animation/loading.d.ts +0 -3
  217. package/build/elements/icons/animation/loading.js +0 -64
  218. package/build/elements/icons/animation/snap.cjs +0 -133
  219. package/build/elements/icons/animation/snap.d.cts +0 -8
  220. package/build/elements/icons/animation/snap.d.ts +0 -8
  221. package/build/elements/icons/animation/snap.js +0 -129
  222. package/build/elements/icons/index.cjs +0 -40
  223. package/build/elements/icons/index.d.cts +0 -24
  224. package/build/elements/icons/index.d.ts +0 -24
  225. package/build/elements/icons/index.js +0 -24
  226. package/build/elements/icons/interface/anchor-add.cjs +0 -35
  227. package/build/elements/icons/interface/anchor-add.d.cts +0 -3
  228. package/build/elements/icons/interface/anchor-add.d.ts +0 -3
  229. package/build/elements/icons/interface/anchor-add.js +0 -31
  230. package/build/elements/icons/interface/anchor-remove.cjs +0 -34
  231. package/build/elements/icons/interface/anchor-remove.d.cts +0 -3
  232. package/build/elements/icons/interface/anchor-remove.d.ts +0 -3
  233. package/build/elements/icons/interface/anchor-remove.js +0 -30
  234. package/build/elements/icons/interface/arrow-up.cjs +0 -30
  235. package/build/elements/icons/interface/arrow-up.d.cts +0 -3
  236. package/build/elements/icons/interface/arrow-up.d.ts +0 -3
  237. package/build/elements/icons/interface/arrow-up.js +0 -26
  238. package/build/elements/icons/interface/arrows-vertical.cjs +0 -30
  239. package/build/elements/icons/interface/arrows-vertical.d.cts +0 -3
  240. package/build/elements/icons/interface/arrows-vertical.d.ts +0 -3
  241. package/build/elements/icons/interface/arrows-vertical.js +0 -26
  242. package/build/elements/icons/interface/bezier-angle.cjs +0 -33
  243. package/build/elements/icons/interface/bezier-angle.d.cts +0 -3
  244. package/build/elements/icons/interface/bezier-angle.d.ts +0 -3
  245. package/build/elements/icons/interface/bezier-angle.js +0 -29
  246. package/build/elements/icons/interface/bezier-distribute.cjs +0 -34
  247. package/build/elements/icons/interface/bezier-distribute.d.cts +0 -3
  248. package/build/elements/icons/interface/bezier-distribute.d.ts +0 -3
  249. package/build/elements/icons/interface/bezier-distribute.js +0 -30
  250. package/build/elements/icons/interface/bezier-length.cjs +0 -31
  251. package/build/elements/icons/interface/bezier-length.d.cts +0 -3
  252. package/build/elements/icons/interface/bezier-length.d.ts +0 -3
  253. package/build/elements/icons/interface/bezier-length.js +0 -27
  254. package/build/elements/icons/interface/bezier-mirror.cjs +0 -31
  255. package/build/elements/icons/interface/bezier-mirror.d.cts +0 -3
  256. package/build/elements/icons/interface/bezier-mirror.d.ts +0 -3
  257. package/build/elements/icons/interface/bezier-mirror.js +0 -27
  258. package/build/elements/icons/interface/bezier.cjs +0 -26
  259. package/build/elements/icons/interface/bezier.d.cts +0 -3
  260. package/build/elements/icons/interface/bezier.d.ts +0 -3
  261. package/build/elements/icons/interface/bezier.js +0 -22
  262. package/build/elements/icons/interface/check.cjs +0 -30
  263. package/build/elements/icons/interface/check.d.cts +0 -3
  264. package/build/elements/icons/interface/check.d.ts +0 -3
  265. package/build/elements/icons/interface/check.js +0 -26
  266. package/build/elements/icons/interface/circle-arrow-left.cjs +0 -30
  267. package/build/elements/icons/interface/circle-arrow-left.d.cts +0 -3
  268. package/build/elements/icons/interface/circle-arrow-left.d.ts +0 -3
  269. package/build/elements/icons/interface/circle-arrow-left.js +0 -26
  270. package/build/elements/icons/interface/circle-arrow-right.cjs +0 -30
  271. package/build/elements/icons/interface/circle-arrow-right.d.cts +0 -3
  272. package/build/elements/icons/interface/circle-arrow-right.d.ts +0 -3
  273. package/build/elements/icons/interface/circle-arrow-right.js +0 -26
  274. package/build/elements/icons/interface/code.cjs +0 -30
  275. package/build/elements/icons/interface/code.d.cts +0 -3
  276. package/build/elements/icons/interface/code.d.ts +0 -3
  277. package/build/elements/icons/interface/code.js +0 -26
  278. package/build/elements/icons/interface/dots.cjs +0 -32
  279. package/build/elements/icons/interface/dots.d.cts +0 -3
  280. package/build/elements/icons/interface/dots.d.ts +0 -3
  281. package/build/elements/icons/interface/dots.js +0 -28
  282. package/build/elements/icons/interface/mention.cjs +0 -30
  283. package/build/elements/icons/interface/mention.d.cts +0 -3
  284. package/build/elements/icons/interface/mention.d.ts +0 -3
  285. package/build/elements/icons/interface/mention.js +0 -26
  286. package/build/elements/icons/interface/minus.cjs +0 -30
  287. package/build/elements/icons/interface/minus.d.cts +0 -3
  288. package/build/elements/icons/interface/minus.d.ts +0 -3
  289. package/build/elements/icons/interface/minus.js +0 -26
  290. package/build/elements/icons/interface/picker.cjs +0 -34
  291. package/build/elements/icons/interface/picker.d.cts +0 -3
  292. package/build/elements/icons/interface/picker.d.ts +0 -3
  293. package/build/elements/icons/interface/picker.js +0 -30
  294. package/build/elements/icons/interface/plus.cjs +0 -30
  295. package/build/elements/icons/interface/plus.d.cts +0 -3
  296. package/build/elements/icons/interface/plus.d.ts +0 -3
  297. package/build/elements/icons/interface/plus.js +0 -26
  298. package/build/elements/icons/interface/settings.cjs +0 -30
  299. package/build/elements/icons/interface/settings.d.cts +0 -3
  300. package/build/elements/icons/interface/settings.d.ts +0 -3
  301. package/build/elements/icons/interface/settings.js +0 -26
  302. package/build/elements/index.cjs +0 -65
  303. package/build/elements/index.d.cts +0 -23
  304. package/build/elements/index.d.ts +0 -23
  305. package/build/elements/index.js +0 -23
  306. package/build/elements/input/index.cjs +0 -273
  307. package/build/elements/input/index.d.cts +0 -17
  308. package/build/elements/input/index.d.ts +0 -17
  309. package/build/elements/input/index.js +0 -269
  310. package/build/elements/logo/index.cjs +0 -732
  311. package/build/elements/logo/index.d.cts +0 -17
  312. package/build/elements/logo/index.d.ts +0 -17
  313. package/build/elements/logo/index.js +0 -728
  314. package/build/elements/monitor/fps.cjs +0 -432
  315. package/build/elements/monitor/fps.d.cts +0 -21
  316. package/build/elements/monitor/fps.d.ts +0 -21
  317. package/build/elements/monitor/fps.js +0 -428
  318. package/build/elements/monitor/index.cjs +0 -670
  319. package/build/elements/monitor/index.js +0 -666
  320. package/build/elements/number/index.cjs +0 -173
  321. package/build/elements/number/index.d.cts +0 -19
  322. package/build/elements/number/index.d.ts +0 -19
  323. package/build/elements/number/index.js +0 -169
  324. package/build/elements/origin/index.cjs +0 -169
  325. package/build/elements/origin/index.d.cts +0 -12
  326. package/build/elements/origin/index.d.ts +0 -12
  327. package/build/elements/origin/index.js +0 -165
  328. package/build/elements/panel/index.cjs +0 -496
  329. package/build/elements/panel/index.js +0 -492
  330. package/build/elements/popover/index.cjs +0 -209
  331. package/build/elements/popover/index.d.cts +0 -19
  332. package/build/elements/popover/index.d.ts +0 -19
  333. package/build/elements/popover/index.js +0 -205
  334. package/build/elements/radio/index.cjs +0 -301
  335. package/build/elements/radio/index.d.cts +0 -13
  336. package/build/elements/radio/index.d.ts +0 -13
  337. package/build/elements/radio/index.js +0 -283
  338. package/build/elements/radio/input.cjs +0 -329
  339. package/build/elements/radio/input.d.cts +0 -15
  340. package/build/elements/radio/input.d.ts +0 -15
  341. package/build/elements/radio/input.js +0 -325
  342. package/build/elements/radio/option.cjs +0 -15
  343. package/build/elements/radio/option.d.cts +0 -3
  344. package/build/elements/radio/option.d.ts +0 -3
  345. package/build/elements/radio/option.js +0 -11
  346. package/build/elements/shared.cjs +0 -66
  347. package/build/elements/shared.d.cts +0 -40
  348. package/build/elements/shared.d.ts +0 -40
  349. package/build/elements/shared.js +0 -59
  350. package/build/elements/slider/index.cjs +0 -232
  351. package/build/elements/slider/index.d.cts +0 -20
  352. package/build/elements/slider/index.d.ts +0 -20
  353. package/build/elements/slider/index.js +0 -228
  354. package/build/elements/state/index.cjs +0 -274
  355. package/build/elements/state/index.js +0 -270
  356. package/build/elements/toggle/index.cjs +0 -151
  357. package/build/elements/toggle/index.d.cts +0 -9
  358. package/build/elements/toggle/index.d.ts +0 -9
  359. package/build/elements/toggle/index.js +0 -147
  360. package/build/elements/tooltip/index.cjs +0 -187
  361. package/build/elements/tooltip/index.d.cts +0 -17
  362. package/build/elements/tooltip/index.d.ts +0 -17
  363. package/build/elements/tooltip/index.js +0 -183
  364. package/build/init.cjs +0 -325
  365. package/build/init.d.cts +0 -157
  366. package/build/init.d.ts +0 -157
  367. package/build/init.js +0 -289
  368. package/build/internal/component-loaders.cjs +0 -208
  369. package/build/internal/component-loaders.d.cts +0 -52
  370. package/build/internal/component-loaders.d.ts +0 -52
  371. package/build/internal/component-loaders.js +0 -169
  372. package/build/internal/fonts.cjs +0 -128
  373. package/build/internal/fonts.d.cts +0 -32
  374. package/build/internal/fonts.d.ts +0 -32
  375. package/build/internal/fonts.js +0 -123
  376. package/build/internal/lazy-load.cjs +0 -89
  377. package/build/internal/lazy-load.d.cts +0 -32
  378. package/build/internal/lazy-load.d.ts +0 -32
  379. package/build/internal/lazy-load.js +0 -86
  380. package/build/internal/style-inject.cjs +0 -236
  381. package/build/internal/style-inject.d.cts +0 -44
  382. package/build/internal/style-inject.d.ts +0 -44
  383. package/build/internal/style-inject.js +0 -226
  384. package/build/react/events.cjs +0 -25
  385. package/build/react/events.d.cts +0 -39
  386. package/build/react/events.d.ts +0 -39
  387. package/build/react/events.js +0 -22
  388. package/build/react/index.cjs +0 -19
  389. package/build/react/index.d.cts +0 -13
  390. package/build/react/index.d.ts +0 -13
  391. package/build/react/index.js +0 -12
  392. package/build/react/provider.cjs +0 -134
  393. package/build/react/provider.d.cts +0 -81
  394. package/build/react/provider.d.ts +0 -81
  395. package/build/react/provider.js +0 -98
  396. package/build/react/types.cjs +0 -8
  397. package/build/react/types.d.cts +0 -55
  398. package/build/react/types.d.ts +0 -55
  399. package/build/react/types.js +0 -7
  400. package/build/react/use-ease-state.cjs +0 -129
  401. package/build/react/use-ease-state.d.cts +0 -95
  402. package/build/react/use-ease-state.d.ts +0 -95
  403. package/build/react/use-ease-state.js +0 -126
  404. package/build/react/use-web-kit.cjs +0 -150
  405. package/build/react/use-web-kit.d.cts +0 -80
  406. package/build/react/use-web-kit.d.ts +0 -80
  407. package/build/react/use-web-kit.js +0 -114
  408. package/build/theme/index.cjs +0 -452
  409. package/build/theme/index.js +0 -423
  410. package/build/theme/presets.cjs +0 -54
  411. package/build/theme/presets.d.cts +0 -19
  412. package/build/theme/presets.d.ts +0 -19
  413. package/build/theme/presets.js +0 -51
  414. package/build/theme/registry.cjs +0 -204
  415. package/build/theme/registry.d.cts +0 -99
  416. package/build/theme/registry.d.ts +0 -99
  417. package/build/theme/registry.js +0 -194
  418. package/build/theme/tokens.cjs +0 -148
  419. package/build/theme/tokens.d.cts +0 -163
  420. package/build/theme/tokens.d.ts +0 -163
  421. package/build/theme/tokens.js +0 -145
  422. package/build/utils/dismiss-controller.cjs +0 -77
  423. package/build/utils/dismiss-controller.d.cts +0 -14
  424. package/build/utils/dismiss-controller.d.ts +0 -14
  425. package/build/utils/dismiss-controller.js +0 -73
  426. package/build/utils/index.cjs +0 -18
  427. package/build/utils/index.d.cts +0 -3
  428. package/build/utils/index.d.ts +0 -3
  429. package/build/utils/index.js +0 -3
  430. package/build/utils/outside-click.cjs +0 -82
  431. package/build/utils/outside-click.d.cts +0 -18
  432. package/build/utils/outside-click.d.ts +0 -18
  433. package/build/utils/outside-click.js +0 -74
  434. package/build/utils/template-helpers.cjs +0 -39
  435. package/build/utils/template-helpers.d.cts +0 -13
  436. package/build/utils/template-helpers.d.ts +0 -13
  437. package/build/utils/template-helpers.js +0 -28
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/highlight-api.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/syntax-highlighter-theme.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/syntax-grammars.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/utils/syntax-tokenizer.ts","../src/decorators/Component.ts","../src/decorators/Prop.ts","../src/decorators/Query.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/code/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/bezier-conversion.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/styles.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/types.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/utils.ts","../src/decorators/Listen.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/constants.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/svg-renderer.ts","../src/elements/shared.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/canvas.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/canvas-controls.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/controls.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/output.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/popover/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/dismiss-controller.ts","../src/utils/outside-click.ts","../src/decorators/OutsideClick.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/toolbar.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/curve/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/button/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/shared.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/checkbox/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/chevron.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/dropdown/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/input/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/utils.ts","../src/utils/template-helpers.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/arrows-vertical.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/picker.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/picker.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/field/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/clear.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/grid.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/loading.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/snap.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/anchor-add.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/anchor-remove.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/arrow-up.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-angle.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-distribute.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-length.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-mirror.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/check.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/circle-arrow-left.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/circle-arrow-right.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/code.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/dots.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/mention.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/minus.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/plus.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/settings.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/logo/index.ts","../src/decorators/Watch.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/monitor/fps.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/monitor/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/number/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/origin/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/panel/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/option.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/input.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/slider/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/state/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/toggle/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/tooltip/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/style-inject.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/fonts.ts","/home/runner/work/web-kit/web-kit/packages/core/src/register.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/component-loaders.ts","/home/runner/work/web-kit/web-kit/packages/core/src/internal/lazy-load.ts","../src/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/components/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/decorators/Component.ts","/home/runner/work/web-kit/web-kit/packages/core/src/decorators/Listen.ts","/home/runner/work/web-kit/web-kit/packages/core/src/decorators/OutsideClick.ts","/home/runner/work/web-kit/web-kit/packages/core/src/decorators/Prop.ts","/home/runner/work/web-kit/web-kit/packages/core/src/decorators/Query.ts","/home/runner/work/web-kit/web-kit/packages/core/src/decorators/Watch.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/tokens.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/presets.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/registry.ts","/home/runner/work/web-kit/web-kit/packages/core/src/theme/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/init.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/template-helpers.ts"],"sourcesContent":["interface HighlightAPI {\n Highlight: new (...ranges: Range[]) => unknown;\n highlights: Map<string, unknown>;\n}\n\ninterface WindowWithHighlightAPI extends Window {\n CSS: {\n highlights: Map<string, unknown>;\n };\n Highlight: new (...ranges: Range[]) => unknown;\n}\n\nexport const SUPPORTS_HIGHLIGHT_API =\n typeof window !== 'undefined' &&\n typeof (window as unknown as WindowWithHighlightAPI).CSS !== 'undefined' &&\n !!(window as unknown as WindowWithHighlightAPI).CSS?.highlights &&\n typeof (window as unknown as WindowWithHighlightAPI).Highlight === 'function';\n\nexport const getHighlightAPI = (): HighlightAPI | null => {\n if (!SUPPORTS_HIGHLIGHT_API) {\n return null;\n }\n\n const w = window as unknown as WindowWithHighlightAPI;\n return {\n Highlight: w.Highlight,\n highlights: w.CSS.highlights\n };\n};\n","import type { TokenType } from './syntax-highlighter-types';\n\nexport const DEFAULT_THEME: Record<TokenType, string> = {\n keyword: 'var(--ease-syntax-keyword, #e47ab4)',\n string: 'var(--ease-syntax-string, #6ad09d)',\n comment: 'var(--ease-syntax-comment, var(--color-gray-700))',\n number: 'var(--ease-syntax-number, #f2c24b)',\n operator: 'var(--ease-syntax-operator, var(--color-gray-500))',\n tag: 'var(--ease-syntax-tag, #c36571)',\n attribute: 'var(--ease-syntax-attribute, #ff6600)',\n property: 'var(--ease-syntax-property, #61bf90)',\n type: 'var(--ease-syntax-type, #FFAB77)',\n variable: 'var(--ease-syntax-variable, #ea7987)',\n selector: 'var(--ease-syntax-selector, #4F9CED)',\n function: 'var(--ease-syntax-function, #71a4f4)'\n};\n\nexport const generateHighlightStyles = (\n instanceId: string,\n theme: Record<TokenType, string> = DEFAULT_THEME\n): string => {\n let styles = '';\n\n for (const [type, color] of Object.entries(theme)) {\n const highlightName = `syntax-${type}-${instanceId}`;\n const italic = type === 'comment' ? 'font-style: italic;' : '';\n styles += `::highlight(${highlightName}) { color: ${color}; ${italic} }`;\n }\n\n return styles;\n};\n","import type { Grammar } from './syntax-highlighter-types';\n\nexport const JS_BASE: Grammar = [\n ['comment', /(\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/)/m],\n ['string', /('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")|(`[^`\\\\]*(?:\\\\.[^`\\\\]*)*`)/],\n ['number', /\\b\\d+(\\.\\d+)?\\b|0x[a-fA-F0-9]+\\b/],\n [\n 'keyword',\n /\\b(if|else|while|for|do|return|const|let|var|function|class|new|try|catch|finally|throw|import|export|default|async|await|extends|super|break|continue|switch|case|in|of|instanceof|typeof|delete|this|true|false|null|from|as)\\b/\n ],\n ['function', /\\b\\w+(?=\\()/],\n ['operator', /[+\\-*/%=<>!&|?.:]{1,3}/]\n];\n\nexport const TS_ADDITIONS: Grammar = [\n [\n 'keyword',\n /\\b(type|interface|enum|public|private|protected|readonly|namespace|module|declare|abstract|implements|static|any|unknown|never|string|number|boolean|void|symbol|bigint)\\b/\n ],\n ['type', /\\b([A-Z]\\w*)\\b/]\n];\n\nexport const HTML_BASE: Grammar = [\n ['comment', /<!--[\\s\\S]*?-->/m],\n ['attribute', /(\\s[a-zA-Z0-9_-]+)(?=\\s*=)/],\n ['string', /('[^']*')|(\"[^\"]*\")/],\n ['tag', /(<\\/?)([a-zA-Z0-9-]+)/],\n ['keyword', /<!DOCTYPE[^>]*>/i]\n];\n\nexport const CSS_BASE: Grammar = [\n ['comment', /\\/\\*[\\s\\S]*?\\*\\//m],\n ['string', /('[^']*')|(\"[^\"]*\")/],\n ['number', /(#[0-9a-fA-F]{3,8})|\\b-?\\d+(\\.\\d+)?(px|em|rem|%|deg|s|ms|vh|vw|vmin|vmax)?\\b/],\n ['keyword', /(!important|@media|@import|@keyframes|@font-face|inherit|initial|unset|auto|none)\\b/],\n ['variable', /(--[a-zA-Z0-9_-]+)/],\n ['property', /([a-zA-Z-]+)\\s*(?=:)/],\n ['selector', /(\\.|#)([a-zA-Z0-9_-]+)|\\[[^\\]]+\\]/],\n ['tag', /\\b([a-zA-Z]+)(?=\\s*\\{)/]\n];\n\nexport const JSON_BASE: Grammar = [\n ['property', /\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"(?=\\s*:)/],\n ['string', /\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"/],\n ['number', /\\b-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?\\b/],\n ['keyword', /\\b(true|false|null)\\b/]\n];\n\nconst baseGrammars: Record<string, Grammar> = {\n javascript: JS_BASE,\n js: JS_BASE,\n typescript: [...JS_BASE, ...TS_ADDITIONS],\n ts: [...JS_BASE, ...TS_ADDITIONS],\n html: HTML_BASE,\n css: CSS_BASE,\n json: JSON_BASE\n};\n\nconst TSX_GRAMMAR: Grammar = [\n ...HTML_BASE,\n ...(baseGrammars.typescript?.filter(([type]) => type !== 'operator') || [])\n];\n\nexport const GRAMMARS: Record<string, Grammar> = {\n ...baseGrammars,\n tsx: TSX_GRAMMAR,\n jsx: TSX_GRAMMAR\n};\n","import type { Token, TokenType } from './syntax-highlighter-types';\n\nimport { GRAMMARS } from './syntax-grammars';\n\nexport const tokenize = (code: string, language: string): Token[] => {\n const grammar = GRAMMARS[language.toLowerCase()];\n\n if (!grammar) {\n return [];\n }\n\n const regexParts: string[] = [];\n const groupMap = new Map<string, TokenType>();\n let groupIndex = 0;\n\n grammar.forEach(([type, pattern]) => {\n const groupName = `G${groupIndex++}`;\n groupMap.set(groupName, type);\n regexParts.push(`(?<${groupName}>${pattern.source})`);\n });\n\n const masterRegex = new RegExp(regexParts.join('|'), 'gm');\n const tokens: Token[] = [];\n\n let match: RegExpExecArray | null;\n\n while (true) {\n match = masterRegex.exec(code);\n if (match === null) {\n break;\n }\n if (match.index === masterRegex.lastIndex) {\n masterRegex.lastIndex++;\n }\n\n if (match.groups) {\n for (const groupName in match.groups) {\n if (match.groups[groupName] !== undefined) {\n const type = groupMap.get(groupName);\n if (type) {\n const start = match.index;\n const end = start + match[0].length;\n\n if ((language === 'html' || language === 'tsx' || language === 'jsx') && type === 'tag') {\n const tagNameMatch = match[0].match(/[a-zA-Z0-9-]+/);\n if (tagNameMatch && tagNameMatch.index !== undefined) {\n const tagNameStart = start + tagNameMatch.index;\n const tagNameEnd = tagNameStart + tagNameMatch[0].length;\n tokens.push({ type, start: tagNameStart, end: tagNameEnd });\n break;\n }\n }\n\n tokens.push({ type, start, end });\n break;\n }\n }\n }\n }\n }\n\n return tokens;\n};\n\nexport const normalizeIndent = (code: string): string => {\n const lines = code.split('\\n').filter((line) => line.trim());\n\n if (!lines.length) {\n return '';\n }\n\n const minIndent = Math.min(...lines.map((line) => line.match(/^\\s*/)?.[0].length || 0));\n\n return lines.map((line) => line.substring(minIndent)).join('\\n');\n};\n","import { html, render, type TemplateResult } from 'lit-html';\n\ntype Constructor<T extends HTMLElement> = new (...args: unknown[]) => T;\n\ninterface LifecycleElement {\n connectedCallback?(): void;\n disconnectedCallback?(): void;\n attributeChangedCallback?(name: string, oldValue: string | null, newValue: string | null): void;\n}\n\ntype RenderableElement = HTMLElement & {\n render?(): TemplateResult | null | undefined;\n afterRender?(): void;\n wrapRender?(commit: () => void, context: RenderContext): void;\n onAttributeChange?(name: string, oldValue: string | null, newValue: string | null): void;\n requestRender?(): void;\n renderRoot?: ShadowRoot | HTMLElement;\n};\n\ntype TemplateValue<TElement extends RenderableElement> =\n | TemplateResult\n | null\n | undefined\n | ((this: TElement, host: TElement) => TemplateResult | null | undefined);\n\ninterface ComponentOptions<TElement extends RenderableElement = RenderableElement> {\n tag: string;\n template?: TemplateValue<TElement>;\n styles?: string;\n styleUrls?: string[];\n observedAttributes?: string[];\n shadowMode?: ShadowRootMode;\n autoSlot?: boolean;\n}\n\n// Exporting RenderContext\nexport interface RenderContext {\n fragment: DocumentFragment;\n root: ShadowRoot | HTMLElement;\n}\n\nconst styleCache = new Map<string, Promise<string>>();\n\nconst normalizeTemplate = <TElement extends RenderableElement>(\n template?: TemplateValue<TElement>\n): ((this: TElement, host: TElement) => TemplateResult | null | undefined) => {\n if (typeof template === 'function') {\n return template as (this: TElement, host: TElement) => TemplateResult | null | undefined;\n }\n\n if (template && typeof template === 'object' && '_$litTemplate$' in template) {\n return function (this: TElement): TemplateResult | null | undefined {\n return template as TemplateResult;\n };\n }\n\n return function (this: TElement): TemplateResult | null | undefined {\n return null;\n };\n};\n\nconst fetchStyles = async (urls: readonly string[]): Promise<string[]> =>\n Promise.all(\n urls.map((url) => {\n const cached = styleCache.get(url);\n if (cached) {\n return cached;\n }\n\n const request = fetch(url)\n .then((response) => (response.ok ? response.text() : ''))\n .catch(() => '');\n\n styleCache.set(url, request);\n return request;\n })\n );\n\nexport const Component =\n <TElement extends RenderableElement = RenderableElement>(options: ComponentOptions<TElement>) =>\n <TBase extends Constructor<TElement> & { observedAttributes?: string[] }>(\n Base: TBase,\n _context: ClassDecoratorContext\n ): TBase => {\n const {\n tag,\n template,\n styles = '',\n styleUrls = [],\n observedAttributes = [],\n shadowMode = 'open',\n autoSlot = true\n } = options;\n\n if (!tag) {\n throw new Error('@Component requires a \"tag\" option.');\n }\n\n const templateFn = normalizeTemplate<TElement>(template);\n\n class Decorated extends (Base as unknown as Constructor<RenderableElement>) {\n static get observedAttributes(): string[] {\n const parent =\n 'observedAttributes' in Base && Array.isArray(Base.observedAttributes)\n ? (Base.observedAttributes as string[])\n : [];\n const own = Array.isArray(observedAttributes) ? observedAttributes : [];\n return Array.from(new Set([...parent, ...own]));\n }\n\n #shadow: ShadowRoot;\n #styles = styles;\n #styleUrls = [...styleUrls];\n #renderScheduled = false;\n\n constructor(...args: unknown[]) {\n super(...args);\n this.#shadow = this.attachShadow({ mode: shadowMode });\n this.renderRoot = this.#shadow;\n }\n\n get shadow(): HTMLElement | ShadowRoot | undefined {\n return this.renderRoot;\n }\n\n connectedCallback(): void {\n (Base.prototype as LifecycleElement).connectedCallback?.call(this);\n\n void this.#loadStyles().finally(() => {\n this.requestRender();\n });\n }\n\n disconnectedCallback(): void {\n (Base.prototype as LifecycleElement).disconnectedCallback?.call(this);\n this.#renderScheduled = false;\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n (Base.prototype as LifecycleElement).attributeChangedCallback?.call(this, name, oldValue, newValue);\n\n if (oldValue !== newValue) {\n this.onAttributeChange?.(name, oldValue, newValue);\n }\n }\n\n requestRender(): void {\n if (this.#renderScheduled) {\n return;\n }\n\n this.#renderScheduled = true;\n\n requestAnimationFrame(() => {\n this.#renderScheduled = false;\n this.#render();\n });\n }\n\n async #loadStyles(): Promise<void> {\n if (!this.#styleUrls.length) {\n return;\n }\n\n const fetched = await fetchStyles(this.#styleUrls);\n const inlineStyles = this.#styles ? [this.#styles] : [];\n this.#styles = [...inlineStyles, ...fetched.filter(Boolean)].join('\\n');\n }\n\n #render(): void {\n const root = this.#shadow;\n\n let templateResult: TemplateResult | null | undefined;\n\n if (typeof this.render === 'function') {\n templateResult = this.render();\n } else {\n templateResult = templateFn.call(this as unknown as TElement, this as unknown as TElement);\n }\n\n const styleTemplate = this.#styles ? html`<style>${this.#styles}</style>` : null;\n const slotTemplate = autoSlot ? html`<slot></slot>` : null;\n\n const completeTemplate = html`\n ${styleTemplate}\n ${templateResult ?? null}\n ${slotTemplate}\n `;\n\n const commit = (): void => {\n render(completeTemplate, root);\n this.afterRender?.();\n };\n\n if (typeof this.wrapRender === 'function') {\n const fragment = document.createDocumentFragment();\n const tempDiv = document.createElement('div');\n\n render(completeTemplate, tempDiv);\n\n fragment.append(...tempDiv.childNodes);\n\n this.wrapRender(commit, { fragment, root });\n return;\n }\n\n commit();\n }\n }\n\n // SSR safety: only register in browser environments\n if (typeof customElements !== 'undefined' && !customElements.get(tag)) {\n customElements.define(tag, Decorated as unknown as CustomElementConstructor);\n }\n\n return Decorated as unknown as TBase;\n };\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n connectedCallback?(): void;\n disconnectedCallback?(...args: unknown[]): void;\n};\n\ntype PropTypeDescriptor =\n | BooleanConstructor\n | NumberConstructor\n | StringConstructor\n | ObjectConstructor\n | ArrayConstructor\n | 'boolean'\n | 'number'\n | 'string'\n | 'json';\n\ntype Formatter<TValue, THost extends RenderHost> = (this: THost, value: TValue) => string | null | undefined;\ntype Parser<TValue, THost extends RenderHost> = (this: THost, value: string | null) => TValue;\n\ninterface PropOptions<TValue, THost extends RenderHost> {\n attribute?: string;\n reflect?: boolean;\n type?: PropTypeDescriptor;\n parse?: Parser<TValue, THost>;\n format?: Formatter<TValue, THost>;\n defaultValue?: TValue | ((this: THost) => TValue);\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n onAttributeChange?: (this: THost, next: TValue, previous: TValue) => void;\n}\n\ninterface AttributeObserverEntry {\n observer: MutationObserver;\n callbacks: Map<string, Set<(value: string | null) => void>>;\n}\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\nconst cleanupRegistry = new WeakMap<RenderHost, Set<() => void>>();\nconst observerRegistry = new WeakMap<RenderHost, AttributeObserverEntry>();\nconst internalMutations = new WeakMap<RenderHost, Set<string>>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.delete(instance);\n instance.render?.();\n });\n};\n\nconst toKebabCase = (value: PropertyKey): string =>\n String(value)\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n\nconst registerCleanup = (instance: RenderHost, cleanup: () => void): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n const original = instance.disconnectedCallback;\n\n instance.disconnectedCallback = function (this: RenderHost, ...args: unknown[]) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error('[Prop] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n\n if (typeof original === 'function') {\n return original.apply(this, args as []);\n }\n\n return undefined;\n } as typeof instance.disconnectedCallback;\n }\n\n callbacks.add(cleanup);\n};\n\nconst markInternalMutation = (host: RenderHost, attribute: string): void => {\n let attributes = internalMutations.get(host);\n\n if (!attributes) {\n attributes = new Set();\n internalMutations.set(host, attributes);\n }\n\n attributes.add(attribute);\n};\n\nconst isInternalMutation = (host: RenderHost, attribute: string): boolean => {\n const attributes = internalMutations.get(host);\n\n if (!attributes) {\n return false;\n }\n\n const hasAttribute = attributes.has(attribute);\n\n if (hasAttribute) {\n attributes.delete(attribute);\n if (attributes.size === 0) {\n internalMutations.delete(host);\n }\n }\n\n return hasAttribute;\n};\n\nconst observeAttribute = (host: RenderHost, attribute: string, handler: (value: string | null) => void): void => {\n let entry = observerRegistry.get(host);\n\n if (!entry) {\n const callbacks = new Map<string, Set<(value: string | null) => void>>();\n const observer = new MutationObserver((records) => {\n records.forEach((record) => {\n const attributeName = record.attributeName;\n\n if (!attributeName) {\n return;\n }\n\n if (isInternalMutation(host, attributeName)) {\n return;\n }\n\n const listeners = callbacks.get(attributeName);\n if (!listeners) {\n return;\n }\n\n const currentValue = (record.target as Element).getAttribute(attributeName);\n\n for (const listener of listeners) {\n listener(currentValue);\n }\n });\n });\n\n observer.observe(host, { attributes: true });\n\n entry = { observer, callbacks };\n observerRegistry.set(host, entry);\n\n registerCleanup(host, () => {\n observer.disconnect();\n observerRegistry.delete(host);\n });\n }\n\n let listeners = entry.callbacks.get(attribute);\n\n if (!listeners) {\n listeners = new Set();\n entry.callbacks.set(attribute, listeners);\n }\n\n listeners.add(handler);\n};\n\nconst updateAttribute = (host: RenderHost, attribute: string, value: string | null | undefined | boolean): void => {\n markInternalMutation(host, attribute);\n\n if (value === undefined || value === null || value === false) {\n host.removeAttribute(attribute);\n return;\n }\n\n if (value === true) {\n host.setAttribute(attribute, '');\n return;\n }\n\n host.setAttribute(attribute, String(value));\n};\n\nconst resolveType = (type: PropTypeDescriptor | undefined): 'boolean' | 'number' | 'json' | 'string' | null => {\n if (!type) {\n return null;\n }\n\n if (type === Boolean || type === 'boolean') {\n return 'boolean';\n }\n\n if (type === Number || type === 'number') {\n return 'number';\n }\n\n if (type === Object || type === Array || type === 'json') {\n return 'json';\n }\n\n return 'string';\n};\n\nconst typeParsers: Record<'boolean' | 'number' | 'json' | 'string', Parser<unknown, RenderHost>> = {\n boolean(value: string | null): boolean {\n return value !== null;\n },\n number(value: string | null): number | null {\n if (value === null || value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n },\n json(value: string | null): unknown {\n if (!value) {\n return null;\n }\n\n try {\n return JSON.parse(value);\n } catch (error) {\n console.warn('[Prop] failed to parse JSON attribute', error);\n return null;\n }\n },\n string(value: string | null): string | null {\n return value;\n }\n};\n\nconst typeFormatters: Record<'boolean' | 'number' | 'json' | 'string', Formatter<unknown, RenderHost>> = {\n boolean(value: unknown): string | null {\n return value ? '' : null;\n },\n number(value: unknown): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n return String(value);\n },\n json(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return null;\n }\n },\n string(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n return String(value);\n }\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\nexport function Prop<TValue, THost extends RenderHost = RenderHost>(options: PropOptions<TValue, THost> = {}) {\n const {\n attribute,\n reflect = true,\n type,\n parse,\n format,\n defaultValue,\n compare = defaultCompare,\n onChange,\n onAttributeChange\n } = options;\n\n const resolvedType = resolveType(type);\n\n const parseValue: Parser<TValue, THost> = parse\n ? parse\n : function (this: THost, value) {\n if (!resolvedType) {\n return value as unknown as TValue;\n }\n return typeParsers[resolvedType].call(this, value) as TValue;\n };\n\n const formatValue: Formatter<TValue, THost> = format\n ? format\n : function (this: THost, value) {\n if (!resolvedType) {\n return (value as unknown as string | null | undefined) ?? null;\n }\n return typeFormatters[resolvedType].call(this, value as unknown) as string | null;\n };\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Prop requires the \"accessor\" keyword on the property.');\n }\n\n const attributeName = attribute ?? toKebabCase(context.name);\n\n context.addInitializer(function (this: THost) {\n if (!reflect) {\n return;\n }\n\n observeAttribute(this, attributeName, (rawValue) => {\n if (isInternalMutation(this, attributeName)) {\n return;\n }\n\n const parsed = parseValue.call(this, rawValue);\n const previous = accessor.get.call(this);\n\n if (compare(previous, parsed)) {\n return;\n }\n\n accessor.set.call(this, parsed);\n\n onAttributeChange?.call(this, parsed, previous);\n scheduleRender(this);\n });\n });\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n onChange?.call(this, value, previous);\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n let value = initialValue;\n\n if (this.hasAttribute(attributeName)) {\n value = parseValue.call(this, this.getAttribute(attributeName));\n } else if (value === undefined && defaultValue !== undefined) {\n value =\n typeof defaultValue === 'function' ? (defaultValue as (this: THost) => TValue).call(this) : defaultValue;\n }\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n return value;\n }\n };\n };\n}\n","type QueryRoot = 'shadow' | 'light' | 'document';\n\ntype QueryHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype QueryFallback<TResult, THost extends QueryHost> = TResult | ((host: THost) => TResult);\n\ninterface BaseQueryOptions<TResult, THost extends QueryHost> {\n from?: QueryRoot;\n fallback?: QueryFallback<TResult, THost>;\n}\n\ninterface QueryAllOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement[], THost> {\n all: true;\n closest?: false;\n}\n\ninterface QueryClosestOptions<THost extends QueryHost> extends BaseQueryOptions<Element | null, THost> {\n closest: true;\n all?: false;\n}\n\ninterface QuerySingleOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement | null, THost> {\n all?: false;\n closest?: false;\n}\n\ntype QueryOptions<TElement extends Element, THost extends QueryHost> =\n | QueryAllOptions<TElement, THost>\n | QueryClosestOptions<THost>\n | QuerySingleOptions<TElement, THost>;\n\ntype QueryReturnType<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = TOptions extends QueryAllOptions<TElement, THost>\n ? TElement[]\n : TOptions extends QueryClosestOptions<THost>\n ? Element | null\n : TElement | null;\n\ntype QueryDecorator<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = (\n target: ClassAccessorDecoratorTarget<THost, QueryReturnType<TElement, THost, TOptions>> | undefined,\n context:\n | ClassFieldDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n | ClassAccessorDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n) => ClassAccessorDecoratorResult<THost, QueryReturnType<TElement, THost, TOptions>> | undefined;\n\nconst defaultOptions = {\n all: false,\n closest: false,\n from: 'shadow' as QueryRoot | undefined,\n fallback: null\n} as const satisfies QuerySingleOptions<Element, QueryHost>;\n\nconst resolveFallback = <TResult, THost extends QueryHost>(\n fallback: QueryFallback<TResult, THost> | undefined,\n host: THost\n): TResult | undefined => {\n if (typeof fallback === 'function') {\n return (fallback as (instance: THost) => TResult)(host);\n }\n\n return fallback;\n};\n\nconst resolveRoot = (host: QueryHost, option: QueryRoot | undefined): ParentNode | null => {\n switch (option) {\n case 'document':\n return document;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst resolveQuery = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n host: THost,\n selector: string,\n options: TOptions\n) => {\n if (options.closest) {\n const result = host.closest(selector);\n return result ?? resolveFallback(options.fallback as QueryFallback<Element | null, THost>, host) ?? null;\n }\n\n const root = resolveRoot(host, options.from);\n\n if (!root) {\n return options.all\n ? (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? [])\n : (resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null);\n }\n\n if (options.all) {\n const elements = Array.from(root.querySelectorAll<TElement>(selector));\n return elements.length > 0\n ? elements\n : (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? []);\n }\n\n const match = root.querySelector<TElement>(selector);\n return match ?? resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null;\n};\n\nconst createQueryDecorator = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n selector: string,\n options: TOptions\n): QueryDecorator<TElement, THost, TOptions> => {\n type Result = QueryReturnType<TElement, THost, TOptions>;\n\n return (\n _target: ClassAccessorDecoratorTarget<THost, Result> | undefined,\n context: ClassFieldDecoratorContext<THost, Result> | ClassAccessorDecoratorContext<THost, Result>\n ): ClassAccessorDecoratorResult<THost, Result> | undefined => {\n if (context.kind === 'accessor') {\n const descriptor: ClassAccessorDecoratorResult<THost, Result> = {\n get(this: THost) {\n return resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result;\n },\n set(_value: Result) {\n // Readonly accessor\n }\n };\n return descriptor;\n }\n\n context.addInitializer(function (this: THost) {\n Object.defineProperty(this, context.name, {\n configurable: true,\n enumerable: true,\n get: () => resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result\n });\n });\n\n return;\n };\n};\n\nexport function Query<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(selector: string, userOptions: TOptions): QueryDecorator<TElement, THost, TOptions>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string\n): QueryDecorator<TElement, THost, QuerySingleOptions<TElement, THost>>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string,\n userOptions?: QueryOptions<TElement, THost>\n) {\n if (!selector) {\n throw new Error('@Query requires a selector.');\n }\n\n if (userOptions) {\n const merged = { ...defaultOptions, ...userOptions } as QueryOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n }\n\n const merged = defaultOptions as QuerySingleOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n}\n","import type { TokenType } from './utils/syntax-highlighter-types';\n\nimport { html } from 'lit-html';\n\nimport { getHighlightAPI, SUPPORTS_HIGHLIGHT_API } from './utils/highlight-api';\nimport { generateHighlightStyles } from './utils/syntax-highlighter-theme';\nimport { normalizeIndent, tokenize } from './utils/syntax-tokenizer';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-code',\n shadowMode: 'open',\n autoSlot: false,\n styles: `\n :host {\n display: block;\n position: relative;\n color: var(--ease-code-color, var(--color-blue-100));\n }\n\n pre {\n margin: 0;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-size: var(--ease-code-font-size, var(--ease-font-size-sm, 12px));\n line-height: var(--ease-code-line-height, 1.4);\n }\n\n code {\n white-space: pre-wrap;\n }\n `,\n template() {\n return html`<pre><code><slot></slot></code></pre>`;\n }\n})\nexport class Code extends HTMLElement {\n declare requestRender: () => void;\n\n #instanceId: string = `hl-${crypto.randomUUID()}`;\n #registeredHighlights: Set<string> = new Set();\n #observer: MutationObserver | null = null;\n\n @Prop<string | null>({ reflect: true })\n accessor language: string | null = null;\n\n @Query<HTMLElement>('code')\n accessor codeElement: HTMLElement | null = null;\n\n connectedCallback(): void {\n this.#observer = new MutationObserver(() => this.#processContent());\n\n this.#observer.observe(this, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n this.#processContent();\n }\n\n disconnectedCallback(): void {\n this.#observer?.disconnect();\n this.#cleanupHighlights();\n }\n\n attributeChangedCallback(name: string): void {\n if (name === 'language') {\n this.#processContent();\n }\n }\n\n get currentLanguage(): string {\n return this.language?.toLowerCase() ?? 'plaintext';\n }\n\n afterRender(): void {\n this.#processContent();\n }\n\n #renderStyles = (): void => {\n const style = document.createElement('style');\n\n style.setAttribute('data-highlight-styles', this.#instanceId);\n\n const highlightStyles = generateHighlightStyles(this.#instanceId);\n style.textContent = highlightStyles;\n\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(style);\n }\n };\n\n #cleanupStyles() {\n const styles = this.shadowRoot?.querySelectorAll<HTMLStyleElement>(\n `style[data-highlight-styles=\"${this.#instanceId}\"]`\n );\n\n if (styles) {\n for (const style of styles) {\n style.remove();\n }\n }\n }\n\n #getHighlightName(type: TokenType): string {\n return `syntax-${type}-${this.#instanceId}`;\n }\n\n #processContent() {\n let rawCode = this.textContent || '';\n rawCode = normalizeIndent(rawCode);\n\n if (!this.codeElement) {\n return;\n }\n\n this.codeElement.textContent = rawCode;\n\n this.#cleanupHighlights();\n\n if (!rawCode.trim() || !SUPPORTS_HIGHLIGHT_API) {\n return;\n }\n\n const textNode = this.codeElement.firstChild as Text;\n\n if (!textNode) {\n return;\n }\n\n this.#highlightCode(rawCode, this.currentLanguage, textNode);\n }\n\n #highlightCode(code: string, language: string, textNode: Text) {\n const api = getHighlightAPI();\n\n if (!api) {\n return;\n }\n\n const tokens = tokenize(code, language);\n const highlightMap = new Map<TokenType, Range[]>();\n\n for (const token of tokens) {\n if (token.start >= token.end) {\n continue;\n }\n\n try {\n this.#renderStyles();\n\n const range = document.createRange();\n range.setStart(textNode, token.start);\n range.setEnd(textNode, token.end);\n\n if (!highlightMap.has(token.type)) {\n highlightMap.set(token.type, []);\n }\n\n highlightMap.get(token.type)?.push(range);\n } catch {\n // Ignore range creation errors\n }\n }\n\n for (const [type, ranges] of highlightMap.entries()) {\n if (ranges.length) {\n const highlightName = this.#getHighlightName(type);\n const highlight = new api.Highlight(...ranges);\n api.highlights.set(highlightName, highlight);\n this.#registeredHighlights.add(highlightName);\n }\n }\n }\n\n #cleanupHighlights() {\n const api = getHighlightAPI();\n\n if (!api) {\n return;\n }\n\n for (const name of this.#registeredHighlights) {\n api.highlights.delete(name);\n }\n\n this.#cleanupStyles();\n\n this.#registeredHighlights.clear();\n }\n}\n","import type { CubicBezierPoints, LinearPoints } from './types';\n\nexport const cubicBezierToLinearPoints = (points: CubicBezierPoints): LinearPoints => {\n const start = {\n x: 0,\n y: 0,\n cpOutX: points.p1.x,\n cpOutY: points.p1.y,\n isLinked: true,\n mirrorLength: true\n };\n\n const end = {\n x: 1,\n y: 1,\n cpInX: points.p2.x - 1,\n cpInY: points.p2.y - 1,\n isLinked: true,\n mirrorLength: true\n };\n\n return [start, end];\n};\n","export const canvasStyles = `\n :host {\n display: block;\n width: 100%;\n max-width: 500px;\n position: relative;\n }\n\n svg {\n width: 300px;\n height: auto;\n cursor: pointer;\n touch-action: none;\n user-select: none;\n overflow: visible;\n border-radius: 8px;\n }\n\n .grid-line {\n stroke: var(--color-white-4);\n stroke-width: .75;\n }\n\n .curve-path {\n stroke: var(--color-blue-100);\n stroke-width: 2.5;\n fill: none;\n stroke-linecap: round;\n stroke-linejoin: round;\n transition: stroke-width 150ms ease;\n }\n\n .curve-path--preview {\n stroke: var(--color-blue-800);\n stroke-width: 2.5;\n stroke-dasharray: 5, 5;\n opacity: 0;\n pointer-events: none;\n animation: previewPathFade 180ms ease forwards;\n }\n\n .control-point {\n fill: var(--color-blue-700);\n stroke: var(--color-blue-900);\n stroke-width: 1.5;\n cursor: grab;\n }\n\n .control-point:active {\n cursor: grabbing;\n }\n\n .control-point.selected {\n }\n\n .anchor-point-start {\n fill: var(--color-blue-100);\n pointer-events: none;\n r: 5px;\n transition: r .2s;\n }\n\n .anchor-point {\n fill: var(--color-blue-900);\n stroke: var(--color-blue-900);\n stroke-width: 1;\n pointer-events: none;\n r: 5px;\n transition: r .2s;\n }\n\n .anchor-point:hover {\n r: 5.5px;\n }\n\n .control-line {\n stroke: var(--color-blue-800);\n stroke-width: 3;\n pointer-events: none;\n display: none;\n }\n\n .linear-point {\n fill: var(--color-blue-100);\n cursor: grab;\n r: 3px;\n transition: r .2s;\n }\n\n .hit-area-point:hover + .linear-point,\n .linear-point:hover,\n .linear-point:active,\n .linear-point.selected {\n r: 5px;\n }\n\n .linear-point.selected {\n fill: var(--color-blue-300);\n stroke-width: 1.5;\n }\n\n .linear-handle-line {\n stroke: var(--color-blue-800);\n stroke-width: 3;\n pointer-events: none;\n transition: opacity 150ms ease;\n display: none;\n }\n\n .linear-handle {\n fill: var(--color-blue-700);\n stroke: var(--color-blue-900);\n stroke-width: 1;\n cursor: grab;\n }\n\n .linear-handle.selected {\n }\n\n .linear-handle:active {\n cursor: grabbing;\n }\n\n .hit-area-point,\n .hit-area-handle {\n fill: transparent;\n stroke: transparent;\n pointer-events: all;\n cursor: inherit;\n r: 10px;\n }\n\n @keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.6;\n }\n 100% {\n opacity: 1;\n }\n }\n\n .curve-path.animating {\n animation: pulse 1s ease-in-out infinite;\n }\n\n @keyframes previewPathFade {\n from {\n opacity: 0;\n }\n to {\n opacity: 0.6;\n }\n }\n\n @keyframes previewElementFade {\n from {\n opacity: 0;\n }\n to {\n opacity: 0.85;\n }\n }\n\n .linear-preview-group {\n pointer-events: none;\n }\n\n .linear-point--preview,\n .linear-handle--preview,\n .linear-handle-line--preview {\n animation: previewElementFade 180ms ease forwards;\n }\n\n .linear-point--preview {\n fill: var(--color-blue-100);\n }\n\n .linear-handle--preview {\n fill: var(--color-blue-700);\n stroke: var(--color-blue-900);\n stroke-width: 1.5;\n }\n\n .linear-handle-line--preview {\n stroke: var(--color-blue-800);\n stroke-width: 2.5;\n stroke-dasharray: 4 4;\n display: none;\n }\n`;\n\nexport const controlsStyles = `\n :host {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.75rem;\n }\n\n [part=\"radio-group\"] {\n width: 100%;\n box-sizing: border-box;\n }\n\n [part=\"easing-type-dropdown\"] {\n --ease-dropdown-max-height: 212px;\n }\n`;\n\nexport const outputStyles = `\n :host {\n display: block;\n }\n\n .output-container {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n\n .output-group {\n position: relative;\n display: block;\n }\n\n .output-label {\n font-size: 0.875rem;\n font-weight: 600;\n color: var(--color-gray-1000);\n margin: 0;\n }\n\n .output-code {\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-size: 0.8125rem;\n line-height: 1.6;\n padding: 1rem;\n background: var(--color-gray-1000);\n color: var(--color-gray-700);\n border-radius: 0.375rem;\n border: 1px solid #334155;\n white-space: pre-wrap;\n word-break: break-word;\n overflow-x: auto;\n max-width: 100%;\n tab-size: 2;\n }\n\n .copy-button {\n align-self: flex-start;\n padding: 0.425rem 0.875rem;\n border: 1px solid var(--color-white-6);\n border-radius: 0.375rem;\n background: white;\n color: var(--color-gray-1000);\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n user-select: none;\n }\n\n .copy-button:hover {\n background: var(--color-gray-1000);\n border-color: #9ca3af;\n transform: translateY(-1px);\n }\n\n .copy-button:active {\n transform: translateY(0);\n }\n\n .copy-button:focus-visible {\n outline: 2px solid var(--color-blue-700);\n outline-offset: 2px;\n }\n\n .copy-button.copied {\n background: var(--color-blue-100);\n border-color: var(--color-blue-100);\n color: white;\n }\n\n .preview-container {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n }\n\n .preview-box {\n width: 100%;\n max-width: 300px;\n height: 80px;\n background: linear-gradient(135deg, var(--color-blue-700) 0%, var(--color-blue-100) 100%);\n border-radius: 0.5rem;\n position: relative;\n overflow: hidden;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n transition: box-shadow 150ms ease;\n }\n\n .preview-box:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n .preview-animation {\n width: 24px;\n height: 24px;\n background: white;\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 12px;\n transform: translateY(-50%);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\n transition-property: transform;\n transition-duration: 2s;\n }\n\n .preview-animation.animate {\n transform: translateY(-50%) translateX(calc(100% - 48px));\n }\n`;\n\nexport const containerStyles = `\n :host {\n display: block;\n }\n\n .curve-container {\n display: flex;\n flex-direction: column;\n position: relative;\n }\n\n .curve-header {\n }\n\n .curve-canvas-wrapper {\n position: relative;\n margin-top: 16px;\n }\n\n .curve-canvas {\n background-color: var(--color-white-2);\n box-shadow: 0 0 32px 0 var(--color-white-2) inset;\n border-radius: 7px;\n }\n\n .curve-toolbar {\n margin-top: 8px;\n }\n`;\n\nexport const canvasControlsStyles = `\n :host {\n position: absolute;\n top: 8px;\n left: 8px;\n z-index: 10;\n display: flex;\n flex-direction: column;\n gap: 4px;\n pointer-events: none;\n }\n\n :host([hidden]) {\n display: none;\n }\n\n .overlay-controls {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n pointer-events: auto;\n }\n\n .overlay-button {\n --ease-icon-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n color: var(--color-gray-600);\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n cursor: pointer;\n transition: color 0.2s;\n appearance: none;\n border: none;\n outline: none;\n margin: 0;\n }\n\n .overlay-button:hover {\n color: var(--color-gray-300);\n }\n\n .overlay-button:disabled {\n color: var(--color-gray-700);\n cursor: not-allowed;\n }\n\n .overlay-button.inactive {\n color: var(--color-blue-100);\n }\n`;\n\nexport const toolbarStyles = `\n :host {\n display: block;\n width: 100%;\n }\n\n .toolbar-container {\n width: 100%;\n display: grid;\n gap: 8px;\n }\n\n .toolbar-group {\n width: 100%;\n display: flex;\n gap: 8px;\n box-sizing: border-box;\n align-items: center;\n padding: 6px;\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n }\n\n .toolbar-button {\n --ease-icon-size: 16px;\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px;\n color: var(--color-gray-600);\n background-color: transparent;\n border: none;\n outline: none;\n margin: 0;\n appearance: none;\n cursor: pointer;\n transition: color 0.2s;\n }\n\n .toolbar-button:hover {\n color: var(--color-blue-100);\n }\n\n .toolbar-button:disabled {\n color: var(--color-gray-700);\n cursor: not-allowed;\n }\n\n .grid-size-controls {\n display: grid;\n grid-template-columns: 24px auto 24px;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n }\n\n .grid-size-controls ease-button {\n --ease-icon-size: 14px;\n width: 24px;\n height: 24px;\n box-sizing: border-box;\n display: flex;\n padding: 0;\n align-items: center;\n justify-content: center;\n }\n\n .grid-size-value {\n display: flex;\n width: 20px;\n justify-content: center;\n align-items: center;\n font-feature-settings: 'tnum' on;\n font-variant-numeric: tabular-nums;\n font-size: 11px;\n font-weight: 500;\n line-height: 14px;\n text-align: center;\n }\n`;\n","export enum EasingType {\n CUBIC_BEZIER = 'cubic-bezier',\n LINEAR = 'linear'\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport interface CSSCode {\n code: string;\n timingFunction: string;\n}\n\nexport interface LinearPoint extends Point {\n cpInX?: number;\n cpInY?: number;\n cpOutX?: number;\n cpOutY?: number;\n isLinked?: boolean;\n mirrorLength?: boolean;\n id?: string;\n}\n\nexport interface CubicBezierPoints {\n p1: Point;\n p2: Point;\n}\n\nexport type LinearPoints = LinearPoint[];\n\nexport interface EasingData {\n type: EasingType;\n points: CubicBezierPoints | LinearPoints;\n name: string;\n}\n\nexport const MIN_LINEAR_POINTS = 2;\nexport const MAX_LINEAR_POINTS = 30;\n","import type { CSSCode, CubicBezierPoints, LinearPoint, LinearPoints, Point } from './types';\n\nexport const clampPoint = (\n point: Point,\n bounds?: { minX?: number; maxX?: number; minY?: number; maxY?: number }\n): Point => {\n const minX = bounds?.minX ?? 0;\n const maxX = bounds?.maxX ?? 1;\n const minY = bounds?.minY ?? 0;\n const maxY = bounds?.maxY ?? 1;\n\n return {\n x: Math.max(minX, Math.min(maxX, point.x)),\n y: Math.max(minY, Math.min(maxY, point.y))\n };\n};\n\nexport const MIN_LINEAR_DELTA = 0.0001;\n\nlet linearPointIdCounter = 0;\n\nconst nextLinearPointId = (): string => {\n linearPointIdCounter += 1;\n return `linear-point-${linearPointIdCounter}`;\n};\n\nexport const ensureLinearPointId = (point: LinearPoint): string => {\n if (!point.id) {\n point.id = nextLinearPointId();\n }\n return point.id;\n};\n\nexport const cloneLinearPoint = (point: LinearPoint): LinearPoint => {\n const sourceId = ensureLinearPointId(point);\n return {\n ...point,\n id: sourceId\n };\n};\n\nexport const cubicBezierPath = (points: CubicBezierPoints): string => {\n const { p1, p2 } = points;\n const startX = 0;\n const startY = 300;\n const endX = 400;\n const endY = 0;\n\n const cp1x = p1.x * 400;\n const cp1y = (1 - p1.y) * 300;\n const cp2x = p2.x * 400;\n const cp2y = (1 - p2.y) * 300;\n\n return `M ${startX} ${startY} C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${endX} ${endY}`;\n};\n\nexport const linearDisplayPath = (points: LinearPoints): string => {\n if (points.length < 2) {\n return '';\n }\n\n const toSvg = (p: Point): Point => {\n return {\n x: p.x * 400,\n y: (1 - p.y) * 300\n };\n };\n\n const startPoint = points[0];\n if (!startPoint) {\n return '';\n }\n\n const start = toSvg(startPoint);\n let d = `M ${start.x} ${start.y}`;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const p1 = points[index];\n const p2 = points[index + 1];\n\n if (!p1 || !p2) {\n continue;\n }\n\n const cp1 = {\n x: p1.x + (p1.cpOutX ?? 0),\n y: p1.y + (p1.cpOutY ?? 0)\n };\n\n const cp2 = {\n x: p2.x + (p2.cpInX ?? 0),\n y: p2.y + (p2.cpInY ?? 0)\n };\n\n if (cp1.x === p1.x && cp1.y === p1.y && cp2.x === p2.x && cp2.y === p2.y) {\n const end = toSvg(p2);\n d += ` L ${end.x} ${end.y}`;\n } else {\n const svgCp1 = toSvg(cp1);\n const svgCp2 = toSvg(cp2);\n const end = toSvg(p2);\n d += ` C ${svgCp1.x} ${svgCp1.y}, ${svgCp2.x} ${svgCp2.y}, ${end.x} ${end.y}`;\n }\n }\n\n return d;\n};\n\nconst perpendicularDistance = (point: Point, lineStart: Point, lineEnd: Point): number => {\n const dx = lineEnd.x - lineStart.x;\n const dy = lineEnd.y - lineStart.y;\n\n if (dx === 0 && dy === 0) {\n return Math.sqrt((point.x - lineStart.x) ** 2 + (point.y - lineStart.y) ** 2);\n }\n\n const numerator = Math.abs(dy * point.x - dx * point.y + lineEnd.x * lineStart.y - lineEnd.y * lineStart.x);\n const denominator = Math.sqrt(dx * dx + dy * dy);\n\n return numerator / denominator;\n};\n\nconst simplifyPoints = (points: Point[], epsilon: number): Point[] => {\n if (points.length < 3) {\n return points;\n }\n\n let dmax = 0;\n let index = 0;\n const end = points.length - 1;\n const startPoint = points[0];\n const endPoint = points[end];\n\n if (!startPoint || !endPoint) {\n return points;\n }\n\n for (let i = 1; i < end; i++) {\n const point = points[i];\n if (!point) {\n continue;\n }\n\n const d = perpendicularDistance(point, startPoint, endPoint);\n if (d > dmax) {\n index = i;\n dmax = d;\n }\n }\n\n if (dmax > epsilon) {\n const recResults1 = simplifyPoints(points.slice(0, index + 1), epsilon);\n const recResults2 = simplifyPoints(points.slice(index, end + 1), epsilon);\n\n return [...recResults1.slice(0, -1), ...recResults2];\n }\n\n return [startPoint, endPoint];\n};\n\nexport const generateCubicBezierCSS = (\n points: CubicBezierPoints,\n name: string,\n variant: 'animation' | 'transition' = 'animation'\n): CSSCode => {\n const { p1, p2 } = points;\n const timingFunction = `cubic-bezier(${p1.x.toFixed(3)}, ${p1.y.toFixed(3)}, ${p2.x.toFixed(3)}, ${p2.y.toFixed(3)})`;\n const code = `\n .${name} {\n ${variant}-timing-function: ${timingFunction};\n }\n `;\n\n return {\n code,\n timingFunction\n };\n};\n\nexport const getLinearApproximation = (\n points: LinearPoints,\n options: { simplify?: number; round?: number } = {}\n): Point[] => {\n const { simplify = 0, round = 5 } = options;\n\n const samples: Point[] = [];\n const numSamplesPerSegment = 20;\n\n const sortedPoints = [...points].sort((a, b) => a.x - b.x);\n\n for (let index = 0; index < sortedPoints.length - 1; index += 1) {\n const p1 = sortedPoints[index];\n const p2 = sortedPoints[index + 1];\n\n if (!p1 || !p2) {\n continue;\n }\n\n if (index === 0) {\n samples.push({ x: p1.x, y: p1.y });\n }\n\n const cp1 = {\n x: p1.x + (p1.cpOutX ?? 0),\n y: p1.y + (p1.cpOutY ?? 0)\n };\n\n const cp2 = {\n x: p2.x + (p2.cpInX ?? 0),\n y: p2.y + (p2.cpInY ?? 0)\n };\n\n for (let step = 1; step <= numSamplesPerSegment; step += 1) {\n const t = step / numSamplesPerSegment;\n const x = cubicBezier(t, p1.x, cp1.x, cp2.x, p2.x);\n const y = cubicBezier(t, p1.y, cp1.y, cp2.y, p2.y);\n samples.push({ x, y });\n }\n }\n\n const normalizedSamples: Point[] = [];\n let lastX = -Infinity;\n\n for (const sample of samples) {\n const clampedX = Math.max(0, Math.min(1, sample.x));\n const clampedY = Math.max(-2, Math.min(3, sample.y));\n\n if (clampedX > lastX + MIN_LINEAR_DELTA) {\n normalizedSamples.push({ x: clampedX, y: clampedY });\n lastX = clampedX;\n }\n }\n\n if (normalizedSamples.length < 2) {\n return [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n }\n\n const firstPoint = sortedPoints[0];\n if (firstPoint && Math.abs(firstPoint.x) < MIN_LINEAR_DELTA && normalizedSamples.length > 0) {\n const firstSample = normalizedSamples[0];\n if (firstSample) {\n firstSample.x = 0;\n }\n }\n\n const lastPoint = sortedPoints[sortedPoints.length - 1];\n if (lastPoint && Math.abs(lastPoint.x - 1) < MIN_LINEAR_DELTA && normalizedSamples.length > 0) {\n const lastSample = normalizedSamples[normalizedSamples.length - 1];\n if (lastSample) {\n lastSample.x = 1;\n }\n }\n\n let finalSamples = normalizedSamples;\n if (simplify > 0) {\n finalSamples = simplifyPoints(normalizedSamples, simplify);\n }\n\n return finalSamples.map((sample) => {\n return {\n x: sample.x,\n y: Number(sample.y.toFixed(round))\n };\n });\n};\n\nexport const generateLinearCSS = (\n points: LinearPoints | undefined,\n name: string,\n variant: 'animation' | 'transition' = 'animation',\n options: { simplify?: number; round?: number } = {}\n): CSSCode => {\n if (!Array.isArray(points) || points.length < 2) {\n return { code: '', timingFunction: '' };\n }\n\n const finalSamples = getLinearApproximation(points, options);\n\n const parts = finalSamples.map((sample) => {\n const y = sample.y;\n const x = Number((sample.x * 100).toFixed(2));\n return `${y} ${x}%`;\n });\n const timingFunction = `linear(${parts.join(', ')})`;\n const code = `\n .${name} {\n ${variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n};\n\nexport const cubicBezierToLinear = (points: CubicBezierPoints, steps: number = 20): LinearPoints => {\n const linearPoints: LinearPoints = [];\n\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const x = cubicBezier(t, 0, points.p1.x, points.p2.x, 1);\n const y = cubicBezier(t, 0, points.p1.y, points.p2.y, 1);\n linearPoints.push({ x, y });\n }\n\n return linearPoints;\n};\n\nconst cubicBezier = (t: number, p0: number, p1: number, p2: number, p3: number): number => {\n const u = 1 - t;\n const tt = t * t;\n const uu = u * u;\n const uuu = uu * u;\n const ttt = tt * t;\n\n return uuu * p0 + 3 * uu * t * p1 + 3 * u * tt * p2 + ttt * p3;\n};\n\nexport const validateCubicBezierPoints = (points: CubicBezierPoints): boolean => {\n const { p1, p2 } = points;\n return p1.x >= 0 && p1.x <= 1 && p2.x >= 0 && p2.x <= 1;\n};\n\nexport const validateLinearPoints = (points: LinearPoints): boolean => {\n if (points.length < 2) {\n return false;\n }\n\n const sortedPoints = [...points].sort((a, b) => a.x - b.x);\n\n for (let index = 0; index < sortedPoints.length; index += 1) {\n const point = sortedPoints[index];\n\n if (!point) {\n return false;\n }\n if (point.x < 0 || point.x > 1) {\n return false;\n }\n\n if (index >= sortedPoints.length - 1) {\n continue;\n }\n\n const next = sortedPoints[index + 1];\n\n if (!next) {\n return false;\n }\n\n if (next.x <= point.x + MIN_LINEAR_DELTA) {\n return false;\n }\n }\n\n const first = sortedPoints[0];\n const last = sortedPoints[sortedPoints.length - 1];\n if (first && Math.abs(first.x) > MIN_LINEAR_DELTA) {\n return false;\n }\n if (last && Math.abs(last.x - 1) > MIN_LINEAR_DELTA) {\n return false;\n }\n\n return true;\n};\n\nexport const normalizeLinearPoints = (points: LinearPoints): LinearPoints => {\n if (points.length === 0) {\n return [];\n }\n\n const normalized: LinearPoints = [...points].sort((a, b) => a.x - b.x).map((point) => cloneLinearPoint(point));\n\n const first = normalized[0];\n if (first) {\n first.x = 0;\n }\n\n const last = normalized[normalized.length - 1];\n if (last) {\n last.x = 1;\n }\n\n for (let index = 0; index < normalized.length; index += 1) {\n const point = normalized[index];\n if (!point) {\n continue;\n }\n\n const minY = -2;\n const maxY = 3;\n point.y = Math.max(minY, Math.min(maxY, point.y));\n\n if ((point.cpInX ?? 0) > 0) {\n point.cpInX = 0;\n }\n if ((point.cpOutX ?? 0) < 0) {\n point.cpOutX = 0;\n }\n\n const handleThreshold = 0;\n if (Math.abs(point.cpInX ?? 0) < handleThreshold && Math.abs(point.cpInY ?? 0) < handleThreshold) {\n delete point.cpInX;\n delete point.cpInY;\n }\n if (Math.abs(point.cpOutX ?? 0) < handleThreshold && Math.abs(point.cpOutY ?? 0) < handleThreshold) {\n delete point.cpOutX;\n delete point.cpOutY;\n }\n\n if (point.cpInX === undefined && point.cpOutX === undefined) {\n delete point.isLinked;\n delete point.mirrorLength;\n } else if (point.isLinked !== true) {\n point.mirrorLength = false;\n }\n }\n\n return normalized;\n};\n\nconst clamp01 = (value: number): number => {\n if (Number.isNaN(value)) {\n return 0;\n }\n return Math.min(1, Math.max(0, value));\n};\n\nexport const parseCubicBezierValue = (input: string): CubicBezierPoints | null => {\n const match = input.trim().match(/^cubic-bezier\\s*\\((.+)\\)$/i);\n\n if (!match) {\n return null;\n }\n\n const body = match[1];\n if (!body) {\n return null;\n }\n\n const parts = body\n .split(',')\n .map((part) => Number.parseFloat(part.trim()))\n .filter((value) => Number.isFinite(value));\n\n if (parts.length !== 4) {\n return null;\n }\n\n const [x1, y1, x2, y2] = parts as [number, number, number, number];\n\n if ([x1, y1, x2, y2].some((value) => Number.isNaN(value))) {\n return null;\n }\n\n return {\n p1: { x: clamp01(x1), y: y1 },\n p2: { x: clamp01(x2), y: y2 }\n };\n};\n\ntype LinearStop = {\n y: number;\n x: number | null;\n};\n\nconst ensureStopPositions = (stops: LinearStop[]): void => {\n if (stops.length === 0) {\n return;\n }\n\n const first = stops[0];\n if (first && first.x == null) {\n first.x = 0;\n }\n\n const lastIndex = stops.length - 1;\n const last = stops[lastIndex];\n if (last && last.x == null) {\n last.x = 1;\n }\n\n const assignBetween = (startIndex: number, endIndex: number): void => {\n const startStop = stops[startIndex];\n const endStop = stops[endIndex];\n\n if (!startStop || !endStop || startStop.x == null || endStop.x == null) {\n return;\n }\n\n const span = endStop.x - startStop.x;\n const segments = endIndex - startIndex;\n\n if (segments <= 1) {\n return;\n }\n\n for (let offset = 1; offset < segments; offset += 1) {\n const index = startIndex + offset;\n const ratio = offset / segments;\n const target = stops[index];\n if (target) {\n target.x = startStop.x + span * ratio;\n }\n }\n };\n\n let lastDefined = 0;\n\n for (let index = 1; index < stops.length; index += 1) {\n if (stops[index]?.x != null) {\n assignBetween(lastDefined, index);\n lastDefined = index;\n }\n }\n\n if (lastDefined < stops.length - 1) {\n assignBetween(lastDefined, stops.length - 1);\n }\n};\n\nexport const parseLinearTimingFunction = (input: string): LinearPoints | null => {\n const match = input.trim().match(/^linear\\s*\\((.+)\\)$/is);\n\n if (!match) {\n return null;\n }\n\n const body = match[1];\n if (!body) {\n return null;\n }\n\n const segments = body\n .split(',')\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0);\n\n if (segments.length < 2) {\n return null;\n }\n\n const stops: LinearStop[] = [];\n\n for (const segment of segments) {\n const parts = segment.split(/\\s+/).filter((part) => part.length > 0);\n if (parts.length === 0) {\n continue;\n }\n\n const valueToken = parts[0];\n if (!valueToken) {\n continue;\n }\n const value = Number.parseFloat(valueToken);\n if (Number.isNaN(value)) {\n return null;\n }\n\n let position: number | null = null;\n\n for (let index = 1; index < parts.length; index += 1) {\n const token = parts[index];\n if (!token) {\n continue;\n }\n const percentMatch = token.match(/^(-?\\d+(?:\\.\\d+)?)%$/);\n if (percentMatch) {\n const [, percentValue] = percentMatch;\n if (percentValue === undefined) {\n break;\n }\n const parsed = Number.parseFloat(percentValue);\n if (!Number.isNaN(parsed)) {\n position = clamp01(parsed / 100);\n }\n break;\n }\n }\n\n stops.push({ y: value, x: position });\n }\n\n if (stops.length < 2) {\n return null;\n }\n\n ensureStopPositions(stops);\n\n const rawPoints: LinearPoints = stops.map((stop) => {\n const x = stop.x ?? 0;\n return { x: clamp01(x), y: stop.y };\n });\n\n return normalizeLinearPoints(rawPoints);\n};\n\nexport const vectorLength = (dx: number, dy: number): number => Math.sqrt(dx * dx + dy * dy);\n\nexport const normalizeVector = (dx: number, dy: number): { dx: number; dy: number } => {\n const length = vectorLength(dx, dy);\n\n if (length === 0) {\n return { dx: 0, dy: 0 };\n }\n\n return { dx: dx / length, dy: dy / length };\n};\n\nexport const smoothLinearPoints = (points: LinearPoints, tension = 0.25): LinearPoints => {\n if (points.length < 2) {\n return points;\n }\n\n return points.map((point, index) => {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n const smoothedPoint: LinearPoint = { ...point, isLinked: true, mirrorLength: true };\n\n if (index === 0 && next) {\n const dx = next.x - point.x;\n const dy = next.y - point.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const handleLength = length * tension;\n\n if (length > 0) {\n smoothedPoint.cpOutX = (dx / length) * handleLength;\n smoothedPoint.cpOutY = (dy / length) * handleLength;\n }\n return smoothedPoint;\n }\n\n if (index === points.length - 1 && prev) {\n const dx = point.x - prev.x;\n const dy = point.y - prev.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const handleLength = length * tension;\n\n if (length > 0) {\n smoothedPoint.cpInX = -(dx / length) * handleLength;\n smoothedPoint.cpInY = -(dy / length) * handleLength;\n }\n return smoothedPoint;\n }\n\n if (prev && next) {\n const tangentX = next.x - prev.x;\n const tangentY = next.y - prev.y;\n const tangentLength = Math.sqrt(tangentX * tangentX + tangentY * tangentY);\n\n if (tangentLength > 0) {\n const normalizedTx = tangentX / tangentLength;\n const normalizedTy = tangentY / tangentLength;\n\n const distToPrev = Math.sqrt((point.x - prev.x) ** 2 + (point.y - prev.y) ** 2);\n const distToNext = Math.sqrt((next.x - point.x) ** 2 + (next.y - point.y) ** 2);\n\n const inHandleLength = distToPrev * tension;\n const outHandleLength = distToNext * tension;\n\n smoothedPoint.cpInX = -normalizedTx * inHandleLength;\n smoothedPoint.cpInY = -normalizedTy * inHandleLength;\n smoothedPoint.cpOutX = normalizedTx * outHandleLength;\n smoothedPoint.cpOutY = normalizedTy * outHandleLength;\n }\n }\n\n return smoothedPoint;\n });\n};\n","type ListenHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype LifecycleHookName = 'connectedCallback' | 'disconnectedCallback';\n\ntype LifecycleCallback<THost extends ListenHost> = (this: THost) => void;\n\ntype ListenTargetResolver<THost extends ListenHost> =\n | 'document'\n | 'window'\n | 'shadow'\n | 'root'\n | 'light'\n | EventTarget\n | ((host: THost) => EventTarget | null | undefined);\n\ntype Predicate<TEvent extends Event, TElement extends Element> = (event: TEvent, matched: TElement | null) => boolean;\n\ninterface ListenOptions<THost extends ListenHost, TElement extends Element, TEvent extends Event> {\n selector?: string;\n target?: ListenTargetResolver<THost>;\n prevent?: boolean;\n stop?: boolean;\n stopImmediate?: boolean;\n once?: boolean;\n passive?: boolean;\n capture?: boolean;\n when?: Predicate<TEvent, TElement>;\n}\n\ntype Cleanup = () => void;\n\nconst lifecycleHooks: Record<LifecycleHookName, WeakMap<ListenHost, Set<LifecycleCallback<ListenHost>>>> = {\n connectedCallback: new WeakMap(),\n disconnectedCallback: new WeakMap()\n};\n\nconst cleanupRegistry = new WeakMap<ListenHost, Set<Cleanup>>();\n\nconst addLifecycleHook = <THost extends ListenHost>(\n instance: THost,\n hookName: LifecycleHookName,\n handler: LifecycleCallback<THost>\n): void => {\n const store = lifecycleHooks[hookName] as WeakMap<THost, Set<LifecycleCallback<THost>>>;\n let callbacks = store.get(instance);\n\n if (!callbacks) {\n callbacks = new Set<LifecycleCallback<THost>>();\n store.set(instance, callbacks);\n\n const original = (instance as unknown as Record<LifecycleHookName, unknown>)[hookName];\n\n (instance as unknown as Record<LifecycleHookName, unknown>)[hookName] = function (...args: unknown[]) {\n callbacks?.forEach((callback) => {\n callback.apply(this as THost);\n });\n\n if (typeof original === 'function') {\n return (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n return undefined;\n };\n }\n\n callbacks.add(handler);\n};\n\nconst registerCleanup = <THost extends ListenHost>(instance: THost, cleanup: Cleanup): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n addLifecycleHook(instance, 'disconnectedCallback', function (this: THost) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((fn) => {\n try {\n fn();\n } catch (error) {\n console.error('[Listen] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n });\n }\n\n callbacks.add(cleanup);\n};\n\nconst resolveTarget = <THost extends ListenHost>(\n host: THost,\n target: ListenTargetResolver<THost> | undefined\n): EventTarget | null => {\n if (typeof target === 'function') {\n return target(host) ?? null;\n }\n\n if (target instanceof EventTarget) {\n return target;\n }\n\n switch (target) {\n case 'document':\n return document;\n case 'window':\n return window;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst normalizeOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n selectorOrOptions: string | ListenOptions<THost, TElement, TEvent> | undefined\n): ListenOptions<THost, TElement, TEvent> => {\n if (typeof selectorOrOptions === 'string') {\n return { selector: selectorOrOptions };\n }\n\n return selectorOrOptions ?? {};\n};\n\nconst buildOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n options: ListenOptions<THost, TElement, TEvent>\n) => {\n return {\n selector: options.selector ?? null,\n target: options.target ?? 'shadow',\n prevent: options.prevent ?? false,\n stop: options.stop ?? false,\n stopImmediate: options.stopImmediate ?? false,\n once: options.once ?? false,\n passive: options.passive,\n capture: options.capture ?? false,\n when: options.when ?? null\n };\n};\n\nexport function Listen<THost extends ListenHost, TEvent extends Event = Event, TElement extends Element = Element>(\n eventName: keyof HTMLElementEventMap | string,\n selectorOrOptions?: string | ListenOptions<THost, TElement, TEvent>\n) {\n if (!eventName) {\n throw new Error('@Listen requires an event name.');\n }\n\n const listenConfig = buildOptions(normalizeOptions(selectorOrOptions));\n\n return (\n originalMethod: (this: THost, event: TEvent, matched?: TElement | null) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n let attached = false;\n\n const attach = () => {\n if (attached) {\n return;\n }\n\n const target = resolveTarget(this, listenConfig.target);\n\n if (!target || typeof (target as EventTarget).addEventListener !== 'function') {\n console.warn(`@Listen unable to resolve target for ${String(eventName)}`);\n return;\n }\n\n const eventOptions: AddEventListenerOptions = {\n capture: listenConfig.capture,\n once: listenConfig.once,\n passive: listenConfig.passive !== undefined ? listenConfig.passive : !listenConfig.prevent\n };\n\n const handler = (event: Event): void => {\n const typedEvent = event as TEvent;\n\n if (listenConfig.prevent) {\n typedEvent.preventDefault();\n }\n\n if (listenConfig.stopImmediate) {\n typedEvent.stopImmediatePropagation();\n } else if (listenConfig.stop) {\n typedEvent.stopPropagation();\n }\n\n let matched: TElement | null = null;\n\n if (listenConfig.selector) {\n const path = typedEvent.composedPath();\n matched =\n path.find(\n (node): node is TElement => node instanceof Element && node.matches(listenConfig.selector as string)\n ) ?? null;\n\n if (!matched) {\n return;\n }\n }\n\n if (listenConfig.when && !listenConfig.when(typedEvent, matched)) {\n return;\n }\n\n if (listenConfig.selector) {\n void originalMethod.call(this, typedEvent, matched);\n } else {\n const targetNode = (\n typedEvent.target instanceof Element ? (typedEvent.target as TElement) : null\n ) as TElement | null;\n void originalMethod.call(this, typedEvent, targetNode);\n }\n };\n\n target.addEventListener(eventName as string, handler, eventOptions);\n attached = true;\n\n registerCleanup(this, () => {\n target.removeEventListener(eventName as string, handler, eventOptions);\n attached = false;\n });\n };\n\n // IMPORTANT:\n // Many components are created inside templates/shadow DOM. At construction time they are often not connected yet,\n // and patching instance lifecycle callbacks is not reliably invoked by the platform.\n // Attach the listener ASAP (microtask) so it works for nested components as well.\n queueMicrotask(attach);\n\n // Best-effort attach on connect too (idempotent).\n addLifecycleHook(this, 'connectedCallback', attach);\n });\n };\n}\n","export const HANDLE_RADIUS = 5;\nexport const POINT_RADIUS = 6;\nexport const HIT_AREA_RADIUS = 12;\n\nexport const LINEAR_HIT_THRESHOLD = 0.1;\nexport const LINEAR_PATH_SAMPLES = 40;\nexport const DRAG_ACTIVATION_DISTANCE_PX = 4;\nexport const DRAG_ACTIVATION_DISTANCE_PX_SQUARED = DRAG_ACTIVATION_DISTANCE_PX * DRAG_ACTIVATION_DISTANCE_PX;\n\nexport const DEFAULT_HANDLE_LENGTH = 0.15;\nexport const SVG_WIDTH = 400;\nexport const SVG_HEIGHT = 300;\n\nexport const GRID_SNAP_THRESHOLD = 0.05;\n\nexport const BEZIER_CONTROL_MIN_Y = -0.5;\nexport const BEZIER_CONTROL_MAX_Y = 1.5;\n\ntype EasingPresetOption = {\n value: string;\n label: string;\n};\n\ntype EasingPreset = {\n label: string;\n options: EasingPresetOption[];\n};\n\nexport const EASING_PRESETS: EasingPreset[] = [\n {\n label: 'Standard',\n options: [\n {\n value: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\n label: 'ease'\n },\n {\n value: 'cubic-bezier(0.42, 0, 1, 1)',\n label: 'ease-in'\n },\n {\n value: 'cubic-bezier(0, 0, 0.58, 1)',\n label: 'ease-out'\n },\n {\n value: 'cubic-bezier(0.42, 0, 0.58, 1)',\n label: 'ease-in-out'\n }\n ]\n },\n {\n label: 'Cubic',\n options: [\n {\n value: 'cubic-bezier(0.55, 0.055, 0.675, 0.19)',\n label: 'easeInCubic'\n },\n {\n value: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n label: 'easeOutCubic'\n },\n {\n value: 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n label: 'easeInOutCubic'\n }\n ]\n },\n {\n label: 'Back (overshoot)',\n options: [\n {\n value: 'cubic-bezier(0.6, -0.28, 0.735, 0.045)',\n label: 'easeInBack'\n },\n {\n value: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n label: 'easeOutBack'\n },\n {\n value: 'cubic-bezier(0.68, -0.4, 0.32, 1.4)',\n label: 'easeInOutBack'\n }\n ]\n },\n {\n label: 'Spring',\n options: [\n {\n value: 'linear(0, 0.6 18%, 1.1 36%, 0.94 48%, 1.02 60%, 0.98 72%, 1.01 84%, 1)',\n label: 'springGentle'\n },\n {\n value: 'linear(0, 0.8 12%, 1.2 28%, 0.88 44%, 1.08 58%, 0.96 72%, 1.02 86%, 1)',\n label: 'springBouncy'\n },\n {\n value: 'linear(0, 1.4 20%, 0.85 40%, 1.1 60%, 0.95 80%, 1)',\n label: 'springSnappy'\n },\n {\n value:\n 'linear(0, 0.03 1.1%, 0.125 2.4%, 0.906 9.8%, 1.046 12.3%, 1.11 15%, 1.116 16.3%, 1.11 17.8%, 1.014 25.8%, 0.987 31.2%, 1.001 47.2%, 1)',\n label: 'springSnap'\n },\n {\n value:\n 'linear(0, 0.012 0.9%, 0.05 2%, 0.411 9.2%, 0.517 11.8%, 0.611 14.6%, 0.694 17.7%, 0.765 21.1%, 0.824 24.8%, 0.872 28.9%, 0.91 33.4%, 0.939 38.4%, 0.977 50.9%, 0.994 68.4%, 1)',\n label: 'springGlide'\n },\n {\n value:\n 'linear(0, 0.008 1.1%, 0.034 2.3%, 0.134 4.9%, 0.264 7.3%, 0.683 14.3%, 0.797 16.5%, 0.89 18.6%, 0.967 20.7%, 1.027 22.8%, 1.073 25%, 1.104 27.3%, 1.123 30.6%, 1.119 34.3%, 1.018 49.5%, 0.988 58.6%, 0.985 65.2%, 1 84.5%, 1)',\n label: 'springLazy'\n }\n ]\n },\n {\n label: 'Bounce',\n options: [\n {\n value: 'linear(0, 0.22 15%, 0.5 30%, 0.78 45%, 1 60%, 0.88 70%, 1 80%, 0.95 88%, 1)',\n label: 'bounceOut'\n },\n {\n value: 'linear(0, 0.05 12%, 0 24%, 0.12 36%, 0.5 50%, 0.88 64%, 1 76%, 0.95 88%, 1)',\n label: 'bounceInOut'\n },\n {\n value:\n 'linear(0, 0.008 1.1%, 0.034 2.3%, 0.134 4.9%, 0.264 7.3%, 0.683 14.3%, 0.797 16.5%, 0.89 18.6%, 0.967 20.7%, 1.027 22.8%, 1.073 25%, 1.104 27.3%, 1.123 30.6%, 1.119 34.3%, 1.018 49.5%, 0.988 58.6%, 0.985 65.2%, 1 84.5%, 1)',\n label: 'bounceGentle'\n },\n {\n value:\n 'linear(0, 0.453 7.8%, 0.803 16.1%, 1.048 24.9%, 1.132 29.5%, 1.194 34.4%, 1.227 38.4%, 1.245 42.5%, 1.25 46.9%, 1.242 51.7%, 1.2 60.5%, 1.038 84.9%, 1.009 92.5%, 1)',\n label: 'bounceSmooth'\n }\n ]\n },\n {\n label: 'Elastic',\n options: [\n {\n value: 'linear(0, 1.3 24%, 0.85 42%, 1.1 58%, 0.95 74%, 1.02 88%, 1)',\n label: 'elasticOut'\n },\n {\n value: 'linear(0, -0.1 18%, 0.15 36%, 0.5 50%, 0.85 64%, 1.1 82%, 1)',\n label: 'elasticInOut'\n },\n {\n value:\n 'linear(0, 0.43 3.9%, 0.72 7.4%, 0.95 14.2%, 0.77 20.8%, -0.1 35.9%, -0.3 46.3%, -0.05 63.6%, 0.03 77.2%, 0)',\n label: 'elasticBounce'\n },\n {\n value:\n 'linear(0, 0.59 6.1%, 0.77 11.4%, 0.6 16.9%, -0.24 29%, -0.41 35.7%, 0.03 51.2%, 0.14 59.9%, -0.02 82.8%, 0)',\n label: 'elasticBounceHard'\n }\n ]\n },\n {\n label: 'Overshoot',\n options: [\n {\n value: 'linear(0, 1 44.7%, 0.898 51.8%, 0.874 55.1%, 0.866 58.4%, 0.888 64.3%, 1 77.4%, 0.98 84.5%, 1)',\n label: 'overshootSettle'\n },\n {\n value:\n 'linear(0, 0.402 7.4%, 0.711 15.3%, 0.929 23.7%, 1.008 28.2%, 1.067 33%, 1.099 36.9%, 1.12 41%, 1.13 45.4%, 1.13 50.1%, 1.111 58.5%, 1.019 83.2%, 1.004 91.3%, 1)',\n label: 'overshootSmooth'\n },\n {\n value:\n 'linear(0, 0.544 5.5%, 0.947 11.5%, 1.14 18.1%, 1.23 25.5%, 1.25 31.1%, 1.23 37.6%, 1.08 61.8%, 1.03 73.7%, 1)',\n label: 'overshootStrong'\n },\n {\n value:\n 'linear(0, -0.004 8.7%, -0.019 16.8%, -0.111 41.5%, -0.13 49.9%, -0.13 54.6%, -0.12 59%, -0.099 63.1%, -0.067 67%, -0.008 71.8%, 0.071 76.3%, 0.289 84.7%, 0.598 92.6%, 1)',\n label: 'overshootSoftIn'\n },\n {\n value:\n 'linear(0, 0.402 7.4%, 0.711 15.3%, 0.929 23.7%, 1.008 28.2%, 1.067 33%, 1.099 36.9%, 1.12 41%, 1.13 45.4%, 1.13 50.1%, 1.111 58.5%, 1.019 83.2%, 1.004 91.3%, 1)',\n label: 'overshootSoftOut'\n },\n {\n value:\n 'linear(0, -0.004 4.9%, -0.02 9.4%, -0.124 26.4%, -0.126 30.5%, -0.104 34.1%, -0.027 38.8%, 0.108 43.1%, 0.299 47%, 0.817 55.2%, 0.97 59.1%, 1.071 63.4%, 1.118 67.7%, 1.127 72.6%, 1.108 77.2%, 1.019 90.7%, 1.004 95.2%, 1)',\n label: 'overshootSoftInOut'\n }\n ]\n },\n {\n label: 'Anticipate',\n options: [\n {\n value:\n 'linear(0, -0.009 7.5%, -0.038 15.1%, -0.2 39.5%, -0.242 48.3%, -0.25 53.1%, -0.245 57.5%, -0.227 61.6%, -0.194 65.6%, -0.132 70.5%, -0.048 75.1%, 0.197 83.9%, 0.547 92.2%, 1)',\n label: 'anticipate'\n },\n {\n value:\n 'linear(0, -0.008 4.1%, -0.035 8.3%, -0.179 21.1%, -0.216 25.3%, -0.228 29.5%, -0.208 33.3%, -0.121 38.2%, 0.036 42.7%, 0.261 46.8%, 0.881 55.6%, 1.058 59.7%, 1.172 64.1%, 1.222 68.6%, 1.228 71.1%, 1.221 73.7%, 1.183 78.5%, 1.034 91.8%, 1.008 95.9%, 1)',\n label: 'anticipateOvershoot'\n }\n ]\n },\n {\n label: 'Expo',\n options: [\n {\n value: 'cubic-bezier(0.95, 0.05, 0.795, 0.035)',\n label: 'easeInExpo'\n },\n {\n value: 'cubic-bezier(0.19, 1, 0.22, 1)',\n label: 'easeOutExpo'\n },\n {\n value: 'cubic-bezier(1, 0, 0, 1)',\n label: 'easeInOutExpo'\n }\n ]\n }\n];\n","import type { LinearPoint, Point } from './types';\n\nimport { type SVGTemplateResult, svg } from 'lit-html';\n\nimport { HANDLE_RADIUS, HIT_AREA_RADIUS, POINT_RADIUS, SVG_HEIGHT, SVG_WIDTH } from './constants';\n\nexport const generateGridLines = (gridStep: number): SVGTemplateResult[] => {\n const lines: SVGTemplateResult[] = [];\n\n const xSteps = Math.ceil(SVG_WIDTH / gridStep);\n const ySteps = Math.ceil(SVG_HEIGHT / gridStep);\n\n for (let i = 0; i <= xSteps; i++) {\n const x = i * gridStep;\n if (x > SVG_WIDTH) {\n break;\n }\n\n lines.push(svg`\n <line\n class=\"grid-line\"\n x1=${x}\n y1=\"0\"\n x2=${x}\n y2=${SVG_HEIGHT}\n />\n `);\n }\n\n for (let i = 0; i <= ySteps; i++) {\n const y = i * gridStep;\n if (y > SVG_HEIGHT) {\n break;\n }\n\n lines.push(svg`\n <line\n class=\"grid-line\"\n x1=\"0\"\n y1=${y}\n x2=${SVG_WIDTH}\n y2=${y}\n />\n `);\n }\n\n return lines;\n};\n\nexport const renderBezierControlPoint = (\n point: Point,\n anchor: Point,\n isSelected: boolean,\n onPointerDown: (event: PointerEvent) => void\n): SVGTemplateResult => {\n const x = point.x * SVG_WIDTH;\n const y = (1 - point.y) * SVG_HEIGHT;\n const anchorX = anchor.x * SVG_WIDTH;\n const anchorY = (1 - anchor.y) * SVG_HEIGHT;\n\n return svg`\n <g>\n <line\n class=\"control-line\"\n x1=${anchorX}\n y1=${anchorY}\n x2=${x}\n y2=${y}\n />\n <circle\n class=\"control-point ${isSelected ? 'selected' : ''}\"\n cx=${x}\n cy=${y}\n r=${POINT_RADIUS}\n @pointerdown=${onPointerDown}\n />\n <circle\n class=\"hit-area-point\"\n cx=${x}\n cy=${y}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${onPointerDown}\n />\n </g>\n `;\n};\n\nexport const renderLinearPoint = (\n point: LinearPoint,\n index: number,\n isSelected: boolean,\n isFocused: boolean,\n onPointerDown: (event: PointerEvent) => void,\n onHandlePointerDown?: (event: PointerEvent, handleType: 'in' | 'out') => void\n): SVGTemplateResult => {\n const x = point.x * SVG_WIDTH;\n const y = (1 - point.y) * SVG_HEIGHT;\n\n const handles: SVGTemplateResult[] = [];\n\n if (point.cpInX !== undefined && point.cpInY !== undefined) {\n const handleX = x + point.cpInX * SVG_WIDTH;\n const handleY = y - point.cpInY * SVG_HEIGHT;\n\n handles.push(svg`\n <g>\n <line\n class=\"linear-handle-line\"\n x1=${x}\n y1=${y}\n x2=${handleX}\n y2=${handleY}\n />\n <circle\n class=\"linear-handle ${isSelected ? 'selected' : ''}\"\n cx=${handleX}\n cy=${handleY}\n r=${HANDLE_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'in')}\n />\n <circle\n class=\"hit-area-handle\"\n cx=${handleX}\n cy=${handleY}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'in')}\n />\n </g>\n `);\n }\n\n if (point.cpOutX !== undefined && point.cpOutY !== undefined) {\n const handleX = x + point.cpOutX * SVG_WIDTH;\n const handleY = y - point.cpOutY * SVG_HEIGHT;\n\n handles.push(svg`\n <g>\n <line\n class=\"linear-handle-line\"\n x1=${x}\n y1=${y}\n x2=${handleX}\n y2=${handleY}\n />\n <circle\n class=\"linear-handle ${isSelected ? 'selected' : ''}\"\n cx=${handleX}\n cy=${handleY}\n r=${HANDLE_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'out')}\n />\n <circle\n class=\"hit-area-handle\"\n cx=${handleX}\n cy=${handleY}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${(e: PointerEvent) => onHandlePointerDown?.(e, 'out')}\n />\n </g>\n `);\n }\n\n return svg`\n <g>\n ${handles}\n <circle\n class=\"linear-point ${isSelected ? 'selected' : ''} ${isFocused ? 'focused' : ''}\"\n cx=${x}\n cy=${y}\n r=${POINT_RADIUS}\n tabindex=${isFocused ? '0' : '-1'}\n role=\"slider\"\n aria-label=\"Linear point ${index + 1}\"\n aria-valuenow=${point.x}\n aria-valuemin=\"0\"\n aria-valuemax=\"1\"\n @pointerdown=${onPointerDown}\n />\n <circle\n class=\"hit-area-point\"\n cx=${x}\n cy=${y}\n r=${HIT_AREA_RADIUS}\n @pointerdown=${onPointerDown}\n />\n </g>\n `;\n};\n\nexport const toSvgCoords = (point: Point): Point => {\n return {\n x: point.x * SVG_WIDTH,\n y: (1 - point.y) * SVG_HEIGHT\n };\n};\n\nexport const fromSvgCoords = (x: number, y: number): Point => {\n return {\n x: x / SVG_WIDTH,\n y: 1 - y / SVG_HEIGHT\n };\n};\n\nexport const getSvgBounds = (svg: SVGSVGElement): DOMRect => svg.getBoundingClientRect();\n\nexport const clientToSvgCoords = (clientX: number, clientY: number, svgBounds: DOMRect): Point => {\n const x = ((clientX - svgBounds.left) / svgBounds.width) * SVG_WIDTH;\n const y = ((clientY - svgBounds.top) / svgBounds.height) * SVG_HEIGHT;\n\n return { x, y };\n};\n","/**\n * Standard control event detail interface for Leva/lil-gui style state aggregation.\n * All control components should dispatch events with this shape.\n */\nexport interface ControlEventDetail<TValue = unknown> {\n /** The control's name/identifier for state aggregation */\n name?: string;\n /** The current value of the control */\n value: TValue;\n /** The original DOM event that triggered this change */\n event: Event;\n}\n\n/** The standard event type for control value changes */\nexport const CONTROL_CHANGE_EVENT = 'control-change';\n\n/**\n * Dispatch a control change event with standard shape.\n * Events bubble and are composed (cross shadow DOM boundaries).\n *\n * @param host - The element dispatching the event\n * @param type - Event type (prefer CONTROL_CHANGE_EVENT for standard controls)\n * @param detail - Event detail with value and optional name\n *\n * @example\n * ```ts\n * dispatchControlEvent(this, CONTROL_CHANGE_EVENT, {\n * name: this.name,\n * value: this.value,\n * event: e\n * });\n * ```\n */\nexport const dispatchControlEvent = <THost extends HTMLElement, TValue>(\n host: THost,\n type: string,\n detail: ControlEventDetail<TValue>\n): void => {\n host.dispatchEvent(\n new CustomEvent<ControlEventDetail<TValue>>(type, {\n detail,\n bubbles: true,\n composed: true\n })\n );\n};\n\nexport const setBooleanAttribute = (element: Element | null | undefined, name: string, value: boolean): void => {\n if (!element) {\n return;\n }\n\n if (value) {\n element.setAttribute(name, '');\n } else {\n element.removeAttribute(name);\n }\n};\n\nexport const coerceNumber = (value: string): number | null => {\n if (value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n};\n\nexport const readControlValue = (element: ControlElement): string | null => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return String(element.value);\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked ? 'true' : 'false';\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n","import { html, type SVGTemplateResult, svg } from 'lit-html';\n\nimport {\n BEZIER_CONTROL_MAX_Y,\n BEZIER_CONTROL_MIN_Y,\n DEFAULT_HANDLE_LENGTH,\n DRAG_ACTIVATION_DISTANCE_PX_SQUARED,\n HIT_AREA_RADIUS,\n LINEAR_HIT_THRESHOLD,\n LINEAR_PATH_SAMPLES,\n SVG_HEIGHT,\n SVG_WIDTH\n} from './constants';\nimport { canvasStyles } from './styles';\nimport { generateGridLines } from './svg-renderer';\nimport {\n type CubicBezierPoints,\n EasingType,\n type LinearPoint,\n type LinearPoints,\n MAX_LINEAR_POINTS,\n type Point\n} from './types';\nimport {\n clampPoint,\n cloneLinearPoint,\n cubicBezierPath,\n ensureLinearPointId,\n getLinearApproximation,\n linearDisplayPath,\n MIN_LINEAR_DELTA,\n normalizeLinearPoints,\n normalizeVector,\n vectorLength\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\ntype CurveHost = HTMLElement & {\n points: CubicBezierPoints | LinearPoints;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n};\n\ntype LinearInsertPreview = {\n path: string;\n normalizedPoints: LinearPoints;\n insertedIndex: number;\n insertedPoint: LinearPoint;\n};\n\n@Component({\n tag: 'ease-curve-canvas',\n styles: canvasStyles,\n template(this: CurveCanvas) {\n const hoverPreviewPath = this.getHoverCurvePath();\n const controlElements = this.getControlElements();\n const hoverInsertElements = this.getHoverInsertElements();\n const curvePath = this.getCurvePath();\n\n return html`\n <svg\n viewBox=\"0 0 ${SVG_WIDTH} ${SVG_HEIGHT}\"\n width=\"${SVG_WIDTH}\"\n height=\"${SVG_HEIGHT}\"\n @pointerdown=${this.handlePointerDown}\n @pointermove=${this.handlePointerMove}\n @pointerup=${this.handlePointerUp}\n @pointerleave=${this.handlePointerLeave}\n @pointercancel=${this.handlePointerLeave}\n >\n ${this.showGrid ? svg`<g style=\"view-transition-name: grid-lines\">${this.getGridLines()}</g>` : null}\n ${hoverPreviewPath ? html`<path class=\"curve-path curve-path--preview\" d=${hoverPreviewPath}></path>` : null}\n <path class=\"curve-path\" d=${curvePath} />\n ${controlElements}\n ${hoverInsertElements}\n </svg>\n `;\n }\n})\nexport class CurveCanvas extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize: number = 8;\n\n @Prop<number | null>({ type: Number, reflect: false, defaultValue: null })\n accessor focusedLinearIndex: number | null = null;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify: number = 0;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round: number = 5;\n\n @Query<SVGSVGElement>('svg')\n accessor svgElement!: SVGSVGElement | null;\n\n #isDragging = false;\n #dragIndex: number | null = null;\n #dragMode: 'point' | 'handleIn' | 'handleOut' | null = null;\n #hoverPoint: Point | null = null;\n #hoverInsertPreview: LinearInsertPreview | null = null;\n #dragStartPoints: Map<string, LinearPoint> | null = null;\n #dragPointId: string | null = null;\n #pendingDrag: { mode: 'point' | 'handleIn' | 'handleOut'; index: number; startX: number; startY: number } | null =\n null;\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as CurveHost;\n };\n\n #renderCubicBezier = (): SVGTemplateResult[] => {\n const points = this.#getCubicBezierPoints();\n\n if (!points) {\n console.warn('Invalid cubic-bezier points for rendering:', this.points);\n return [];\n }\n\n try {\n const anchorStart = this.#toSvgCoords({ x: 0, y: 0 });\n const anchorEnd = this.#toSvgCoords({ x: 1, y: 1 });\n const controlOne = this.#toSvgCoords(points.p1);\n const controlTwo = this.#toSvgCoords(points.p2);\n\n const elements: SVGTemplateResult[] = [];\n\n const handlePathOne = this.#createHandlePath(anchorStart, controlOne);\n const handlePathTwo = this.#createHandlePath(anchorEnd, controlTwo);\n\n elements.push(svg`<circle\n class=\"hit-area-point\"\n cx=\"${controlOne.x}\"\n cy=\"${controlOne.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"0\"\n data-role=\"point\"\n />`);\n elements.push(svg`<circle\n class=\"hit-area-point\"\n cx=\"${controlTwo.x}\"\n cy=\"${controlTwo.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"1\"\n data-role=\"point\"\n />`);\n\n if (handlePathOne) {\n elements.push(svg`<path\n class=\"control-point ${this.#dragIndex === 0 && this.#dragMode === 'point' ? 'selected' : ''}\"\n d=\"${handlePathOne}\"\n data-index=\"0\"\n data-role=\"point\"\n />`);\n }\n\n if (handlePathTwo) {\n elements.push(svg`<path\n class=\"control-point ${this.#dragIndex === 1 && this.#dragMode === 'point' ? 'selected' : ''}\"\n d=\"${handlePathTwo}\"\n data-index=\"1\"\n data-role=\"point\"\n />`);\n }\n\n elements.push(svg`<circle class=\"anchor-point-start\" cx=\"${anchorStart.x}\" cy=\"${anchorStart.y}\" />`);\n elements.push(svg`<circle class=\"anchor-point-start\" cx=\"${anchorEnd.x}\" cy=\"${anchorEnd.y}\" />`);\n\n return elements;\n } catch (error) {\n console.error('Error rendering cubic-bezier elements:', error);\n return [];\n }\n };\n\n #toSvgCoords = (p: Point) => {\n return {\n x: p.x * SVG_WIDTH,\n y: (1 - p.y) * SVG_HEIGHT\n };\n };\n\n #renderLinear = (): SVGTemplateResult[] => {\n const points = this.#getLinearPoints();\n\n if (!points) {\n return [];\n }\n\n try {\n const elements: SVGTemplateResult[] = [];\n const focusedIndex = this.focusedLinearIndex;\n\n points.forEach((point, index) => {\n if (!point) {\n return;\n }\n\n const isPointFocused = focusedIndex === index;\n const isDraggingPoint = this.#isDragging && this.#dragIndex === index;\n\n if (!isPointFocused && !isDraggingPoint) {\n return;\n }\n\n const anchorSvg = this.#toSvgCoords(point);\n\n if (index > 0 && (point.cpInX !== undefined || point.cpInY !== undefined)) {\n this.#renderLinearHandle(elements, point, anchorSvg, index, 'In');\n }\n\n if (index < points.length - 1 && (point.cpOutX !== undefined || point.cpOutY !== undefined)) {\n this.#renderLinearHandle(elements, point, anchorSvg, index, 'Out');\n }\n });\n\n points.forEach((point, index) => {\n if (!point) {\n return;\n }\n\n const isPointFocused = focusedIndex === index;\n const isPointActive = (this.#dragMode === 'point' && this.#dragIndex === index) || isPointFocused;\n\n const anchorSvg = this.#toSvgCoords(point);\n\n elements.push(svg`<circle\n class=\"hit-area-point\"\n cx=\"${anchorSvg.x}\"\n cy=\"${anchorSvg.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"${index}\"\n data-role=\"point\"\n />`);\n elements.push(svg`<circle\n class=\"linear-point ${isPointActive ? 'selected' : ''}\"\n cx=\"${anchorSvg.x}\"\n cy=\"${anchorSvg.y}\"\n data-index=\"${index}\"\n data-role=\"point\"\n title=\"Point P${index + 1}: ${Math.round(point.x * 100)}%, ${Math.round(point.y * 100)}%\"\n />`);\n });\n\n return elements;\n } catch (error) {\n console.error('Error rendering linear points:', error);\n return [];\n }\n };\n\n #renderLinearHandle(\n elements: SVGTemplateResult[],\n point: LinearPoint,\n anchorSvg: Point,\n index: number,\n direction: 'In' | 'Out'\n ): void {\n const dx = direction === 'In' ? (point.cpInX ?? 0) : (point.cpOutX ?? 0);\n const dy = direction === 'In' ? (point.cpInY ?? 0) : (point.cpOutY ?? 0);\n\n const handlePos = { x: point.x + dx, y: point.y + dy };\n const handleSvg = this.#toSvgCoords(handlePos);\n const role = direction === 'In' ? 'handleIn' : 'handleOut';\n const dragMode = direction === 'In' ? 'handleIn' : 'handleOut';\n\n const isHandleActive = this.#dragMode === dragMode && this.#dragIndex === index;\n\n const handlePath = this.#createHandlePath(anchorSvg, handleSvg);\n\n if (!handlePath) {\n return;\n }\n\n elements.push(svg`<circle\n class=\"hit-area-handle\"\n cx=\"${handleSvg.x}\"\n cy=\"${handleSvg.y}\"\n r=\"${HIT_AREA_RADIUS}\"\n data-index=\"${index}\"\n data-role=\"${role}\"\n />`);\n\n elements.push(svg`<path\n class=\"linear-handle ${isHandleActive ? 'selected' : ''}\"\n d=\"${handlePath}\"\n data-index=\"${index}\"\n data-role=\"${role}\"\n title=\"Handle ${direction}: ${Math.round(handlePos.x * 100)}%, ${Math.round(handlePos.y * 100)}%\"\n />`);\n }\n\n #getCurvePath = (): string => {\n try {\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const points = this.#getCubicBezierPoints();\n\n if (!points) {\n console.warn('Invalid cubic-bezier points:', this.points);\n return '';\n }\n\n return cubicBezierPath(points);\n }\n\n const points = this.#getLinearPoints();\n\n if (!points || points.length < 2) {\n return '';\n }\n\n if (this.simplify > 0) {\n const approxPoints = getLinearApproximation(points, {\n simplify: this.simplify,\n round: this.round\n });\n return linearDisplayPath(approxPoints as LinearPoints);\n }\n\n return linearDisplayPath(points);\n } catch (error) {\n console.error('Error generating curve path:', error);\n return '';\n }\n };\n\n #getHoverCurvePath = (): string => {\n if (this.#isDragging) {\n return '';\n }\n\n try {\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const hoverPoint = this.#hoverPoint;\n if (!hoverPoint) {\n return '';\n }\n\n const points = this.#getCubicBezierPoints();\n if (!points) {\n return '';\n }\n\n return cubicBezierPath({\n p1: hoverPoint,\n p2: points.p2\n });\n }\n\n if (this.easingType === EasingType.LINEAR) {\n return this.#hoverInsertPreview?.path ?? '';\n }\n\n return '';\n } catch (error) {\n console.error('Error generating hover curve path:', error);\n return '';\n }\n };\n\n getHoverInsertElements(): SVGTemplateResult | null {\n if (this.easingType !== EasingType.LINEAR) {\n return null;\n }\n\n const preview = this.#hoverInsertPreview;\n if (!preview || !preview.insertedPoint) {\n return null;\n }\n\n const point = preview.insertedPoint;\n const anchor = this.#toSvgCoords(point);\n const elements: SVGTemplateResult[] = [];\n\n if (point.cpInX !== undefined || point.cpInY !== undefined) {\n const handlePoint = this.#toSvgCoords({\n x: point.x + (point.cpInX ?? 0),\n y: point.y + (point.cpInY ?? 0)\n });\n const handlePath = this.#createHandlePath(anchor, handlePoint);\n if (handlePath) {\n elements.push(\n svg`<path\n class=\"linear-handle linear-handle--preview\"\n d=\"${handlePath}\"\n />`\n );\n }\n }\n\n if (point.cpOutX !== undefined || point.cpOutY !== undefined) {\n const handlePoint = this.#toSvgCoords({\n x: point.x + (point.cpOutX ?? 0),\n y: point.y + (point.cpOutY ?? 0)\n });\n const handlePath = this.#createHandlePath(anchor, handlePoint);\n if (handlePath) {\n elements.push(\n svg`<path\n class=\"linear-handle linear-handle--preview\"\n d=\"${handlePath}\"\n />`\n );\n }\n }\n\n elements.push(svg`<circle class=\"linear-point linear-point--preview\" cx=\"${anchor.x}\" cy=\"${anchor.y}\" />`);\n\n return svg`<g class=\"linear-preview-group\" pointer-events=\"none\">${elements}</g>`;\n }\n\n #createHandlePath(anchorSvg: Point, handleSvg: Point): string | null {\n const vecX = handleSvg.x - anchorSvg.x;\n const vecY = handleSvg.y - anchorSvg.y;\n const length = Math.sqrt(vecX * vecX + vecY * vecY);\n\n const circleRadius = 4.5;\n const barHalfHeight = 0.66;\n\n if (length < circleRadius + 2) {\n return null;\n }\n\n const dirX = vecX / length;\n const dirY = vecY / length;\n const perpX = -dirY;\n const perpY = dirX;\n\n const cx = handleSvg.x;\n const cy = handleSvg.y;\n\n const transitionZone = Math.min(8, (length - circleRadius) * 0.5);\n\n const barEndDist = length - circleRadius - transitionZone;\n\n const barTopStartX = anchorSvg.x + perpX * barHalfHeight;\n const barTopStartY = anchorSvg.y + perpY * barHalfHeight;\n const barBottomStartX = anchorSvg.x - perpX * barHalfHeight;\n const barBottomStartY = anchorSvg.y - perpY * barHalfHeight;\n\n const barTopEndX = anchorSvg.x + dirX * barEndDist + perpX * barHalfHeight;\n const barTopEndY = anchorSvg.y + dirY * barEndDist + perpY * barHalfHeight;\n const barBottomEndX = anchorSvg.x + dirX * barEndDist - perpX * barHalfHeight;\n const barBottomEndY = anchorSvg.y + dirY * barEndDist - perpY * barHalfHeight;\n\n const circleTopX = cx + perpX * circleRadius;\n const circleTopY = cy + perpY * circleRadius;\n const circleBottomX = cx - perpX * circleRadius;\n const circleBottomY = cy - perpY * circleRadius;\n\n const ctrl1Dist = transitionZone * 0.35;\n const ctrl2Dist = transitionZone * 0.65;\n\n const ctrl1TopX = barTopEndX + dirX * ctrl1Dist;\n const ctrl1TopY = barTopEndY + dirY * ctrl1Dist;\n const ctrl2TopX = circleTopX - dirX * ctrl2Dist;\n const ctrl2TopY = circleTopY - dirY * ctrl2Dist;\n\n const ctrl1BottomX = barBottomEndX + dirX * ctrl1Dist;\n const ctrl1BottomY = barBottomEndY + dirY * ctrl1Dist;\n const ctrl2BottomX = circleBottomX - dirX * ctrl2Dist;\n const ctrl2BottomY = circleBottomY - dirY * ctrl2Dist;\n\n return `\n M ${circleBottomX} ${circleBottomY}\n C ${ctrl2BottomX} ${ctrl2BottomY} ${ctrl1BottomX} ${ctrl1BottomY} ${barBottomEndX} ${barBottomEndY}\n L ${barBottomStartX} ${barBottomStartY}\n A ${barHalfHeight} ${barHalfHeight} 0 0 0 ${barTopStartX} ${barTopStartY}\n L ${barTopEndX} ${barTopEndY}\n C ${ctrl1TopX} ${ctrl1TopY} ${ctrl2TopX} ${ctrl2TopY} ${circleTopX} ${circleTopY}\n A ${circleRadius} ${circleRadius} 0 1 0 ${circleBottomX} ${circleBottomY}\n Z\n `;\n }\n\n #getCubicBezierPoints = (): CubicBezierPoints | null => {\n if (Array.isArray(this.points)) {\n return null;\n }\n\n return this.points ?? null;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n\n this.#ensureLinearPointIds(this.points);\n return this.points;\n };\n\n #ensureLinearPointIds = (points: LinearPoints | null): void => {\n if (!points) {\n return;\n }\n\n for (const point of points) {\n if (!point) {\n continue;\n }\n ensureLinearPointId(point);\n }\n };\n\n #createLinearStartPointMap = (points: LinearPoints | null): Map<string, LinearPoint> | null => {\n if (!points) {\n return null;\n }\n\n const map = new Map<string, LinearPoint>();\n\n for (const point of points) {\n if (!point) {\n continue;\n }\n const id = ensureLinearPointId(point);\n map.set(id, cloneLinearPoint(point));\n }\n\n return map;\n };\n\n #getDistanceToLinearPath(point: Point, points: LinearPoints): number {\n if (points.length < 2) {\n return Number.POSITIVE_INFINITY;\n }\n\n let minDistanceSquared = Number.POSITIVE_INFINITY;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n\n if (!start || !end) {\n continue;\n }\n\n const cp1 = {\n x: start.x + (start.cpOutX ?? 0),\n y: start.y + (start.cpOutY ?? 0)\n };\n\n const cp2 = {\n x: end.x + (end.cpInX ?? 0),\n y: end.y + (end.cpInY ?? 0)\n };\n\n for (let sample = 0; sample <= LINEAR_PATH_SAMPLES; sample += 1) {\n const t = sample / LINEAR_PATH_SAMPLES;\n const samplePoint = evaluateCubicPointNormalized(t, start, cp1, cp2, end);\n const dx = point.x - samplePoint.x;\n const dy = point.y - samplePoint.y;\n const distanceSquared = dx * dx + dy * dy;\n if (distanceSquared < minDistanceSquared) {\n minDistanceSquared = distanceSquared;\n }\n }\n }\n\n return Math.sqrt(minDistanceSquared);\n }\n\n #isPointNearLinearPath(point: Point, points: LinearPoints): boolean {\n const distance = this.#getDistanceToLinearPath(point, points);\n return distance <= LINEAR_HIT_THRESHOLD;\n }\n\n #isNearExistingPointOrHandle(position: Point, points: LinearPoints): boolean {\n const mouseSvg = this.#toSvgCoords(position);\n const thresholdSquared = HIT_AREA_RADIUS * HIT_AREA_RADIUS;\n\n for (const point of points) {\n if (!point) {\n continue;\n }\n\n const pointSvg = this.#toSvgCoords(point);\n const dx = pointSvg.x - mouseSvg.x;\n const dy = pointSvg.y - mouseSvg.y;\n\n if (dx * dx + dy * dy < thresholdSquared) {\n return true;\n }\n\n if (point.cpInX !== undefined || point.cpInY !== undefined) {\n const handleIn = {\n x: point.x + (point.cpInX ?? 0),\n y: point.y + (point.cpInY ?? 0)\n };\n const handleInSvg = this.#toSvgCoords(handleIn);\n const hdx = handleInSvg.x - mouseSvg.x;\n const hdy = handleInSvg.y - mouseSvg.y;\n\n if (hdx * hdx + hdy * hdy < thresholdSquared) {\n return true;\n }\n }\n\n if (point.cpOutX !== undefined || point.cpOutY !== undefined) {\n const handleOut = {\n x: point.x + (point.cpOutX ?? 0),\n y: point.y + (point.cpOutY ?? 0)\n };\n const handleOutSvg = this.#toSvgCoords(handleOut);\n const hdx = handleOutSvg.x - mouseSvg.x;\n const hdy = handleOutSvg.y - mouseSvg.y;\n\n if (hdx * hdx + hdy * hdy < thresholdSquared) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n #getMousePosition = (event: PointerEvent, options?: { skipSnap?: boolean }): Point => {\n const svgElement = this.svgElement;\n\n if (!svgElement) {\n return { x: 0, y: 0 };\n }\n\n const rect = svgElement.getBoundingClientRect();\n const svgX = event.clientX - rect.left;\n const svgY = event.clientY - rect.top;\n\n let x = svgX / rect.width;\n let y = 1 - svgY / rect.height;\n\n const skipSnap = options?.skipSnap ?? false;\n\n const shouldSnap =\n !skipSnap &&\n this.snapToGrid &&\n !(this.#isDragging && (this.#dragMode === 'handleIn' || this.#dragMode === 'handleOut'));\n\n if (shouldSnap) {\n const ratioX = SVG_WIDTH / this.gridSize;\n const ratioY = SVG_HEIGHT / this.gridSize;\n x = Math.round(x * ratioX) / ratioX;\n y = Math.round(y * ratioY) / ratioY;\n }\n\n const bezierBounds =\n this.easingType === EasingType.CUBIC_BEZIER\n ? { minY: BEZIER_CONTROL_MIN_Y, maxY: BEZIER_CONTROL_MAX_Y }\n : undefined;\n\n return clampPoint({ x, y }, bezierBounds);\n };\n\n #constrainLinearPoint = (index: number, position: Point, points: LinearPoints): LinearPoint => {\n let x = position.x;\n\n if (index === 0) {\n x = 0;\n } else if (index === points.length - 1) {\n x = 1;\n } else {\n x = Math.min(Math.max(x, MIN_LINEAR_DELTA), 1 - MIN_LINEAR_DELTA);\n }\n\n const clamped = clampPoint({ x, y: position.y }, { minY: -2, maxY: 3 });\n const sourcePoint = points[index];\n\n return {\n ...sourcePoint,\n x: clamped.x,\n y: clamped.y\n };\n };\n\n #emitPoints = (value: CubicBezierPoints | LinearPoints, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<CubicBezierPoints | LinearPoints> = { value, event };\n\n dispatchControlEvent(target, 'points-change', detail);\n };\n\n #notifyLinearFocus = (index: number | null, event: Event): void => {\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<number | null> = { value: index, event };\n dispatchControlEvent(target, 'linear-point-focus', detail);\n };\n\n #toggleLinearHandleLinking = (index: number, event: Event): void => {\n const points = this.#getLinearPoints();\n if (!points || index < 0 || index >= points.length) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n const newLinkingState = !updatedPoint.isLinked;\n updatedPoint.isLinked = newLinkingState;\n updatedPoint.mirrorLength = Boolean(newLinkingState);\n\n if (newLinkingState) {\n this.#ensureLinkedHandles(updatedPoint, index, points);\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n this.#notifyLinearFocus(index, event);\n this.requestRender();\n };\n\n #ensureLinkedHandles(point: LinearPoint, index: number, points: LinearPoints): void {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n let refDx = point.cpOutX ?? -(point.cpInX ?? 0);\n let refDy = point.cpOutY ?? -(point.cpInY ?? 0);\n\n if (refDx === 0 && refDy === 0) {\n let dirX = 0;\n let dirY = 0;\n\n if (prev && next) {\n dirX = next.x - prev.x;\n dirY = next.y - prev.y;\n } else if (next) {\n dirX = next.x - point.x;\n dirY = next.y - point.y;\n } else if (prev) {\n dirX = point.x - prev.x;\n dirY = point.y - prev.y;\n } else {\n dirX = 1;\n dirY = 0;\n }\n\n const direction = normalizeVector(dirX, dirY);\n const length = DEFAULT_HANDLE_LENGTH;\n\n point.cpInX = -direction.dx * length;\n point.cpInY = -direction.dy * length;\n point.cpOutX = direction.dx * length;\n point.cpOutY = direction.dy * length;\n refDx = point.cpOutX;\n refDy = point.cpOutY;\n }\n\n if (refDx === 0 && refDy === 0) {\n return;\n }\n\n const normalized = normalizeVector(refDx, refDy);\n const referenceLength = vectorLength(refDx, refDy) || DEFAULT_HANDLE_LENGTH;\n\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0) || referenceLength;\n point.cpInX = -normalized.dx * inLength;\n point.cpInY = -normalized.dy * inLength;\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0) || referenceLength;\n point.cpOutX = normalized.dx * outLength;\n point.cpOutY = normalized.dy * outLength;\n\n if (point.mirrorLength !== false) {\n this.#alignLinkedHandleLengths(point);\n }\n }\n\n #alignLinkedHandleLengths(point: LinearPoint): void {\n if (!point.isLinked) {\n point.mirrorLength = false;\n return;\n }\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0);\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0);\n const targetLength = Math.max(outLength, inLength);\n\n if (targetLength <= 0) {\n return;\n }\n\n if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpOutX = outDirection.dx * targetLength;\n point.cpOutY = outDirection.dy * targetLength;\n } else if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpOutX = -inDirection.dx * targetLength;\n point.cpOutY = -inDirection.dy * targetLength;\n }\n\n if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpInX = inDirection.dx * targetLength;\n point.cpInY = inDirection.dy * targetLength;\n } else if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpInX = -outDirection.dx * targetLength;\n point.cpInY = -outDirection.dy * targetLength;\n }\n }\n\n getGridLines(): SVGTemplateResult[] {\n return generateGridLines(this.gridSize);\n }\n\n getControlElements(): SVGTemplateResult[] {\n return this.easingType === EasingType.CUBIC_BEZIER ? this.#renderCubicBezier() : this.#renderLinear();\n }\n\n getCurvePath(): string {\n return this.#getCurvePath();\n }\n\n getHoverCurvePath(): string {\n return this.#getHoverCurvePath();\n }\n\n readonly handlePointerDown = (event: PointerEvent): void => {\n event.preventDefault();\n let linearPoints = this.easingType === EasingType.LINEAR ? this.#getLinearPoints() : null;\n this.#dragStartPoints = this.#createLinearStartPointMap(linearPoints);\n this.#pendingDrag = null;\n this.#dragPointId = null;\n\n const target = event.target;\n\n if (!(target instanceof SVGElement)) {\n return;\n }\n\n const role = target.getAttribute('data-role');\n const indexAttribute = target.getAttribute('data-index');\n\n if (indexAttribute !== null) {\n const index = Number.parseInt(indexAttribute, 10);\n if (Number.isNaN(index)) {\n return;\n }\n\n if (this.easingType === EasingType.LINEAR) {\n if (role === 'handleIn' || role === 'handleOut') {\n const point = linearPoints?.[index];\n if (point) {\n this.#dragPointId = ensureLinearPointId(point);\n }\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = role;\n this.#dragIndex = index;\n this.#pendingDrag = null;\n this.#hoverPoint = null;\n this.#notifyLinearFocus(index, event);\n this.handlePointerMove(event);\n this.requestRender();\n return;\n }\n\n if (role === 'point') {\n if (event.detail === 2) {\n this.#toggleLinearHandleLinking(index, event);\n return;\n }\n\n const point = linearPoints?.[index];\n if (point) {\n this.#dragPointId = ensureLinearPointId(point);\n }\n this.#notifyLinearFocus(index, event);\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = false;\n this.#dragMode = 'point';\n this.#dragIndex = index;\n this.#pendingDrag = {\n mode: 'point',\n index,\n startX: event.clientX,\n startY: event.clientY\n };\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n }\n\n if (this.easingType === EasingType.CUBIC_BEZIER && role === 'point') {\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = 'point';\n this.#dragIndex = index;\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n }\n\n if (indexAttribute === null) {\n if (this.easingType === EasingType.LINEAR) {\n const insertResult = this.#insertLinearPoint(this.#getMousePosition(event), event);\n\n if (insertResult) {\n linearPoints = this.#getLinearPoints();\n this.#dragStartPoints = this.#createLinearStartPointMap(linearPoints);\n this.#dragPointId = insertResult.pointId;\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = 'point';\n this.#dragIndex = insertResult.index;\n this.#pendingDrag = null;\n this.#hoverPoint = null;\n this.#notifyLinearFocus(insertResult.index, event);\n this.requestRender();\n return;\n } else {\n this.#notifyLinearFocus(null, event);\n }\n }\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n this.#hoverPoint = this.#getMousePosition(event);\n this.svgElement?.setPointerCapture(event.pointerId);\n this.#isDragging = true;\n this.#dragMode = 'point';\n this.#dragIndex = 0;\n this.#pendingDrag = null;\n this.handlePointerMove(event);\n this.requestRender();\n return;\n }\n }\n };\n\n readonly handlePointerMove = (event: PointerEvent): void => {\n if (!this.svgElement) {\n return;\n }\n\n const skipSnapForPending = !this.#isDragging && this.#pendingDrag !== null && this.#pendingDrag.mode === 'point';\n let position = this.#getMousePosition(event, { skipSnap: skipSnapForPending });\n\n if (this.#pendingDrag && !this.#isDragging) {\n const deltaX = event.clientX - this.#pendingDrag.startX;\n const deltaY = event.clientY - this.#pendingDrag.startY;\n const distanceSquared = deltaX * deltaX + deltaY * deltaY;\n\n if (distanceSquared >= DRAG_ACTIVATION_DISTANCE_PX_SQUARED) {\n this.#isDragging = true;\n this.#pendingDrag = null;\n\n if (skipSnapForPending) {\n position = this.#getMousePosition(event);\n }\n } else {\n return;\n }\n }\n\n if (this.#isDragging && this.#dragIndex !== null) {\n event.preventDefault();\n this.#hoverInsertPreview = null;\n\n if (this.easingType === EasingType.LINEAR) {\n const points = this.#getLinearPoints();\n if (!points || this.#dragIndex >= points.length) {\n return;\n }\n\n if (this.#dragMode === 'point') {\n this.#handleLinearPointDrag(points, this.#dragIndex, position, event);\n return;\n }\n\n if (this.#dragMode === 'handleIn' || this.#dragMode === 'handleOut') {\n this.#handleLinearHandleDrag(points, this.#dragIndex, position, event);\n return;\n }\n }\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const points = this.#getCubicBezierPoints();\n if (!points) {\n return;\n }\n\n const updatedPoints: CubicBezierPoints = { ...points };\n let adjustedPosition = position;\n\n if (event.shiftKey) {\n const reference = this.#dragIndex === 0 ? points.p1 : points.p2;\n\n if (reference) {\n const deltaX = Math.abs(position.x - reference.x);\n const deltaY = Math.abs(position.y - reference.y);\n\n adjustedPosition = deltaX > deltaY ? { x: position.x, y: reference.y } : { x: reference.x, y: position.y };\n }\n }\n\n const clampedPosition = clampPoint(adjustedPosition, {\n minY: BEZIER_CONTROL_MIN_Y,\n maxY: BEZIER_CONTROL_MAX_Y\n });\n\n if (this.#dragIndex === 0) {\n updatedPoints.p1 = clampedPosition;\n } else if (this.#dragIndex === 1) {\n updatedPoints.p2 = clampedPosition;\n } else {\n return;\n }\n\n this.points = updatedPoints;\n this.#emitPoints(updatedPoints, event);\n this.requestRender();\n return;\n }\n\n return;\n }\n\n if (this.easingType === EasingType.LINEAR) {\n const points = this.#getLinearPoints();\n // Use rawPosition for the hit test to avoid flickering when snapToGrid is on\n if (points && this.#isNearExistingPointOrHandle(position, points)) {\n this.#hoverInsertPreview = null;\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n\n const preview = this.#buildLinearInsertPreview(position);\n this.#hoverInsertPreview = preview;\n if (!preview) {\n this.#hoverPoint = null;\n this.requestRender();\n return;\n }\n } else {\n this.#hoverInsertPreview = null;\n }\n\n this.#hoverPoint = position;\n this.requestRender();\n };\n\n #handleLinearPointDrag(points: LinearPoints, index: number, position: Point, event: PointerEvent): void {\n let workingPosition = position;\n const currentPoint = points[index];\n const activePointId = currentPoint ? (this.#dragPointId ?? ensureLinearPointId(currentPoint)) : null;\n\n if (event.shiftKey && this.#dragStartPoints && activePointId) {\n const startPoint = this.#dragStartPoints.get(activePointId);\n if (startPoint) {\n const deltaX = Math.abs(position.x - startPoint.x);\n const deltaY = Math.abs(position.y - startPoint.y);\n workingPosition = deltaX > deltaY ? { x: position.x, y: startPoint.y } : { x: startPoint.x, y: position.y };\n }\n }\n\n const constrainedPoint = this.#constrainLinearPoint(index, workingPosition, points);\n const updatedPoints: LinearPoints = points.map((point, i) => {\n if (i === index) {\n return constrainedPoint;\n }\n return { ...point };\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n\n if (activePointId) {\n const newIndex = normalizedPoints.findIndex((point) => point?.id === activePointId);\n if (newIndex !== -1) {\n this.#dragIndex = newIndex;\n this.#dragPointId = activePointId;\n this.#notifyLinearFocus(newIndex, event);\n } else {\n this.#notifyLinearFocus(index, event);\n }\n } else {\n this.#notifyLinearFocus(index, event);\n }\n\n this.requestRender();\n }\n\n #handleLinearHandleDrag(points: LinearPoints, index: number, position: Point, event: PointerEvent): void {\n const point = points[index];\n if (!point) {\n return;\n }\n\n const activePointId = this.#dragPointId ?? ensureLinearPointId(point);\n const direction = this.#dragMode === 'handleIn' ? 'In' : 'Out';\n\n let dx = position.x - point.x;\n const dy = position.y - point.y;\n\n if (direction === 'In') {\n dx = Math.min(0, dx);\n } else {\n dx = Math.max(0, dx);\n }\n\n let isLinked = point.isLinked ?? false;\n if (event.shiftKey) {\n isLinked = false;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n updatedPoint.isLinked = isLinked;\n\n if (direction === 'In') {\n updatedPoint.cpInX = dx;\n updatedPoint.cpInY = dy;\n } else {\n updatedPoint.cpOutX = dx;\n updatedPoint.cpOutY = dy;\n }\n\n const mirrorAngle = isLinked;\n const mirrorLength = mirrorAngle && updatedPoint.mirrorLength !== false;\n\n if (mirrorAngle || mirrorLength) {\n const draggedLength = vectorLength(dx, dy);\n\n if (draggedLength <= MIN_LINEAR_DELTA) {\n if (direction === 'In') {\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n if (mirrorAngle) {\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n }\n } else {\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n if (mirrorAngle) {\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n }\n }\n } else {\n const normalized = normalizeVector(dx, dy);\n\n if (mirrorAngle) {\n if (direction === 'In') {\n const existingLength = mirrorLength\n ? draggedLength\n : vectorLength(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0) || draggedLength;\n updatedPoint.cpOutX = -normalized.dx * existingLength;\n updatedPoint.cpOutY = -normalized.dy * existingLength;\n } else {\n const existingLength = mirrorLength\n ? draggedLength\n : vectorLength(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0) || draggedLength;\n updatedPoint.cpInX = -normalized.dx * existingLength;\n updatedPoint.cpInY = -normalized.dy * existingLength;\n }\n } else if (mirrorLength) {\n if (direction === 'In') {\n const inDirection = normalizeVector(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0);\n const outDirection = normalizeVector(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0);\n const outLength = vectorLength(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0);\n if (outLength > 0) {\n updatedPoint.cpOutX = outDirection.dx * draggedLength;\n updatedPoint.cpOutY = outDirection.dy * draggedLength;\n }\n updatedPoint.cpInX = inDirection.dx * draggedLength;\n updatedPoint.cpInY = inDirection.dy * draggedLength;\n } else {\n const inDirection = normalizeVector(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0);\n const outDirection = normalizeVector(updatedPoint.cpOutX ?? 0, updatedPoint.cpOutY ?? 0);\n const inLength = vectorLength(updatedPoint.cpInX ?? 0, updatedPoint.cpInY ?? 0);\n if (inLength > 0) {\n updatedPoint.cpInX = inDirection.dx * draggedLength;\n updatedPoint.cpInY = inDirection.dy * draggedLength;\n }\n updatedPoint.cpOutX = outDirection.dx * draggedLength;\n updatedPoint.cpOutY = outDirection.dy * draggedLength;\n }\n }\n\n if (mirrorLength) {\n this.#alignLinkedHandleLengths(updatedPoint);\n }\n }\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n\n if (activePointId) {\n const newIndex = normalizedPoints.findIndex((candidate) => candidate?.id === activePointId);\n if (newIndex !== -1) {\n this.#dragIndex = newIndex;\n this.#dragPointId = activePointId;\n this.#notifyLinearFocus(newIndex, event);\n } else {\n this.#notifyLinearFocus(index, event);\n }\n } else {\n this.#notifyLinearFocus(index, event);\n }\n\n this.requestRender();\n }\n\n readonly handlePointerUp = (event: PointerEvent): void => {\n const previousIndex = this.#dragIndex;\n\n if (this.svgElement?.hasPointerCapture(event.pointerId)) {\n this.svgElement.releasePointerCapture(event.pointerId);\n }\n\n this.#isDragging = false;\n this.#dragIndex = null;\n this.#dragMode = null;\n this.#dragStartPoints = null;\n this.#dragPointId = null;\n this.#pendingDrag = null;\n this.#hoverInsertPreview = null;\n\n if (previousIndex !== null && this.easingType === EasingType.LINEAR) {\n this.#notifyLinearFocus(previousIndex, event);\n }\n this.requestRender();\n };\n\n readonly handlePointerLeave = (event: PointerEvent): void => {\n if (this.#isDragging) {\n this.handlePointerUp(event);\n }\n\n this.#pendingDrag = null;\n this.#hoverPoint = null;\n this.#dragPointId = null;\n this.#hoverInsertPreview = null;\n this.requestRender();\n };\n\n #insertLinearPoint(position: Point, event: PointerEvent): { index: number; pointId: string | null } | null {\n const preview = this.#hoverInsertPreview ?? this.#buildLinearInsertPreview(position);\n if (!preview) {\n return null;\n }\n\n const { normalizedPoints, insertedIndex, insertedPoint } = preview;\n const insertedPointId = insertedPoint ? ensureLinearPointId(insertedPoint) : null;\n\n this.points = normalizedPoints;\n this.#emitPoints(normalizedPoints, event);\n this.requestRender();\n this.#hoverInsertPreview = null;\n\n return {\n index: insertedIndex,\n pointId: insertedPointId\n };\n }\n\n #buildLinearInsertPreview(position: Point): LinearInsertPreview | null {\n if (this.easingType !== EasingType.LINEAR) {\n return null;\n }\n\n const points = this.#getLinearPoints();\n if (!points || points.length >= MAX_LINEAR_POINTS) {\n return null;\n }\n\n // Allow Y values outside [0, 1] for bounce/elastic effects\n const clamped = clampPoint(position, { minY: -2, maxY: 3 });\n if (!this.#isPointNearLinearPath(clamped, points)) {\n return null;\n }\n\n const insertIndex = points.findIndex((point) => clamped.x < point.x);\n if (insertIndex <= 0) {\n return null;\n }\n\n const prev = points[insertIndex - 1];\n const next = points[insertIndex];\n\n if (!prev || !next) {\n return null;\n }\n\n if (clamped.x - prev.x < MIN_LINEAR_DELTA || next.x - clamped.x < MIN_LINEAR_DELTA) {\n return null;\n }\n\n let updatedPoints: LinearPoints;\n let insertedPointId: string | null = null;\n\n const splitResult = splitCurveSegment(prev, next, clamped);\n\n if (splitResult) {\n const { prev: newPrev, newPoint, next: newNext } = splitResult;\n insertedPointId = ensureLinearPointId(newPoint);\n updatedPoints = [\n ...points.slice(0, insertIndex - 1),\n newPrev,\n newPoint,\n newNext,\n ...points.slice(insertIndex + 1)\n ];\n } else {\n const newPoint: LinearPoint = {\n x: clamped.x,\n y: clamped.y,\n cpInX: -0.1,\n cpInY: 0,\n cpOutX: 0.1,\n cpOutY: 0,\n isLinked: true,\n mirrorLength: true\n };\n insertedPointId = ensureLinearPointId(newPoint);\n updatedPoints = [...points.slice(0, insertIndex), newPoint, ...points.slice(insertIndex)];\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n const normalizedIndex =\n insertedPointId !== null ? normalizedPoints.findIndex((point) => point?.id === insertedPointId) : -1;\n\n const insertedIndex = normalizedIndex !== -1 ? normalizedIndex : insertIndex;\n const insertedPoint = normalizedPoints[insertedIndex];\n\n if (!insertedPoint) {\n return null;\n }\n\n return {\n path: linearDisplayPath(normalizedPoints),\n normalizedPoints,\n insertedIndex,\n insertedPoint\n };\n }\n}\n\nconst lerp = (a: number, b: number, t: number): number => a + (b - a) * t;\n\nconst lerpPoint = (p1: Point, p2: Point, t: number): Point => {\n return {\n x: lerp(p1.x, p2.x, t),\n y: lerp(p1.y, p2.y, t)\n };\n};\n\n// Helper to find t for a given x on a cubic bezier curve\nconst findTForX = (x: number, p0: Point, cp1: Point, cp2: Point, p3: Point): number => {\n let minT = 0;\n let maxT = 1;\n let t = 0.5;\n const tolerance = 0.0001;\n const maxIterations = 20;\n\n // Use binary search since x is monotonic\n for (let i = 0; i < maxIterations; i++) {\n const px = (1 - t) ** 3 * p0.x + 3 * (1 - t) ** 2 * t * cp1.x + 3 * (1 - t) * t ** 2 * cp2.x + t ** 3 * p3.x;\n\n if (Math.abs(px - x) < tolerance) {\n return t;\n }\n\n if (px < x) {\n minT = t;\n } else {\n maxT = t;\n }\n t = (minT + maxT) / 2;\n }\n\n return t;\n};\n\nconst splitCurveSegment = (\n prev: LinearPoint,\n next: LinearPoint,\n position: Point\n): { prev: LinearPoint; newPoint: LinearPoint; next: LinearPoint } | null => {\n const cp1 = {\n x: prev.x + (prev.cpOutX ?? 0),\n y: prev.y + (prev.cpOutY ?? 0)\n };\n const cp2 = {\n x: next.x + (next.cpInX ?? 0),\n y: next.y + (next.cpInY ?? 0)\n };\n\n const wasCurved = prev.cpOutX || prev.cpOutY || next.cpInX || next.cpInY;\n\n if (!wasCurved) {\n return null;\n }\n\n // Find the correct t parameter that corresponds to the mouse X position\n const t = findTForX(position.x, prev, cp1, cp2, next);\n\n const P01 = lerpPoint(prev, cp1, t);\n const P12 = lerpPoint(cp1, cp2, t);\n const P23 = lerpPoint(cp2, next, t);\n\n const P012 = lerpPoint(P01, P12, t);\n const P123 = lerpPoint(P12, P23, t);\n\n const P_new = lerpPoint(P012, P123, t);\n\n const newPoint: LinearPoint = {\n x: P_new.x,\n y: P_new.y,\n cpInX: P012.x - P_new.x,\n cpInY: P012.y - P_new.y,\n cpOutX: P123.x - P_new.x,\n cpOutY: P123.y - P_new.y,\n isLinked: true,\n mirrorLength: prev.mirrorLength === false && next.mirrorLength\n };\n ensureLinearPointId(newPoint);\n\n const newPrev: LinearPoint = {\n ...prev,\n cpOutX: P01.x - prev.x,\n cpOutY: P01.y - prev.y\n };\n\n const newNext: LinearPoint = {\n ...next,\n cpInX: P23.x - next.x,\n cpInY: P23.y - next.y\n };\n\n return {\n prev: newPrev,\n newPoint,\n next: newNext\n };\n};\n\nconst evaluateCubicPointNormalized = (t: number, p0: Point, cp1: Point, cp2: Point, p3: Point): Point => {\n const P01 = lerpPoint(p0, cp1, t);\n const P12 = lerpPoint(cp1, cp2, t);\n const P23 = lerpPoint(cp2, p3, t);\n\n const P012 = lerpPoint(P01, P12, t);\n const P123 = lerpPoint(P12, P23, t);\n\n return lerpPoint(P012, P123, t);\n};\n","import { html } from 'lit-html';\n\nimport { DEFAULT_HANDLE_LENGTH } from './constants';\nimport { canvasControlsStyles } from './styles';\nimport { type CubicBezierPoints, EasingType, type LinearPoint, type LinearPoints } from './types';\nimport { normalizeLinearPoints, normalizeVector, vectorLength } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\ntype CurveHost = HTMLElement & {\n easingType: EasingType;\n points: CubicBezierPoints | LinearPoints;\n focusedLinearIndex: number | null;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n handleLinearPointFocus?: (event: CustomEvent<ControlEventDetail<number | null>>) => void;\n};\n\nconst HOST_HANDLER_MAP = {\n 'points-change': 'handlePointsChange',\n 'linear-point-focus': 'handleLinearPointFocus'\n} as const;\n\ntype HostEventType = keyof typeof HOST_HANDLER_MAP;\n\n@Component({\n tag: 'ease-curve-canvas-controls',\n styles: canvasControlsStyles,\n template(this: CanvasControls) {\n if (this.easingType !== EasingType.LINEAR || !Array.isArray(this.points)) {\n return null;\n }\n\n const focusedIndex = this.focusedLinearIndex;\n if (focusedIndex === null) {\n return null;\n }\n\n const points = this.points as LinearPoints;\n const selectedPoint = points[focusedIndex];\n if (!selectedPoint) {\n return null;\n }\n\n const isInnerPoint = focusedIndex > 0 && focusedIndex < points.length - 1;\n if (!isInnerPoint) {\n return null;\n }\n\n const hasInHandle = selectedPoint.cpInX !== undefined || selectedPoint.cpInY !== undefined;\n const hasOutHandle = selectedPoint.cpOutX !== undefined || selectedPoint.cpOutY !== undefined;\n const hasAnyHandle = hasInHandle || hasOutHandle;\n\n return html`\n <div class=\"overlay-controls\">\n <button\n type=\"button\"\n class=\"overlay-button ${selectedPoint.isLinked ? 'active' : 'inactive'}\"\n @click=${this.handleToggleMirrorAngle}\n >\n <ease-icon-bezier-angle></ease-icon-bezier-angle>\n </button>\n <button\n type=\"button\"\n class=\"overlay-button ${selectedPoint.mirrorLength !== false && selectedPoint.isLinked ? 'active' : 'inactive'}\"\n @click=${this.handleToggleMirrorLength}\n ?disabled=${!selectedPoint.isLinked}\n >\n <ease-icon-bezier-length></ease-icon-bezier-length>\n </button>\n ${\n hasAnyHandle\n ? html`\n <button\n type=\"button\"\n class=\"overlay-button\"\n @click=${this.handleRemoveSmoothing}\n >\n <ease-icon-bezier></ease-icon-bezier>\n </button>\n `\n : html`\n <button\n type=\"button\"\n class=\"overlay-button\"\n @click=${this.handleAddSmoothing}\n >\n <ease-icon-bezier-mirror></ease-icon-bezier-mirror>\n </button>\n `\n }\n </div>\n `;\n }\n})\nexport class CanvasControls extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<number | null>({ type: Number, reflect: false, defaultValue: null })\n accessor focusedLinearIndex: number | null = null;\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as unknown as CurveHost;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n return this.points;\n };\n\n #notifyHost = <TValue>(type: HostEventType, value: TValue, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<TValue> = { value, event };\n dispatchControlEvent(target, type, detail);\n };\n\n #emitPoints = (points: LinearPoints, event: Event): void => {\n this.points = points;\n this.#notifyHost('points-change', points, event);\n };\n\n readonly handleToggleMirrorAngle = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n const nextState = !updatedPoint.isLinked;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n } else {\n updatedPoint.mirrorLength = false;\n }\n updatedPoint.isLinked = nextState;\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n readonly handleToggleMirrorLength = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point || !point.isLinked) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n const nextState = updatedPoint.mirrorLength === false;\n updatedPoint.mirrorLength = nextState;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n this.#alignMirrorLength(updatedPoint);\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n readonly handleRemoveSmoothing = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const existingPoint = points[index];\n if (!existingPoint) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint: LinearPoint = { ...existingPoint };\n updatedPoints[index] = updatedPoint;\n\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n delete updatedPoint.isLinked;\n delete updatedPoint.mirrorLength;\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n readonly handleAddSmoothing = (event: Event): void => {\n event.preventDefault();\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.isLinked = true;\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #ensureSmoothHandles(point: LinearPoint, index: number, points: LinearPoints): void {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n let refDx = point.cpOutX ?? -(point.cpInX ?? 0);\n let refDy = point.cpOutY ?? -(point.cpInY ?? 0);\n\n if (refDx === 0 && refDy === 0) {\n let dirX = 0;\n let dirY = 0;\n\n if (prev && next) {\n dirX = next.x - prev.x;\n dirY = next.y - prev.y;\n } else if (next) {\n dirX = next.x - point.x;\n dirY = next.y - point.y;\n } else if (prev) {\n dirX = point.x - prev.x;\n dirY = point.y - prev.y;\n } else {\n dirX = 1;\n dirY = 0;\n }\n\n const direction = normalizeVector(dirX, dirY);\n const length = DEFAULT_HANDLE_LENGTH;\n\n point.cpInX = -direction.dx * length;\n point.cpInY = -direction.dy * length;\n point.cpOutX = direction.dx * length;\n point.cpOutY = direction.dy * length;\n refDx = point.cpOutX;\n refDy = point.cpOutY;\n }\n\n if (refDx === 0 && refDy === 0) {\n return;\n }\n\n const normalized = normalizeVector(refDx, refDy);\n const referenceLength = vectorLength(refDx, refDy);\n\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0) || referenceLength;\n point.cpInX = -normalized.dx * inLength;\n point.cpInY = -normalized.dy * inLength;\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0) || referenceLength;\n point.cpOutX = normalized.dx * outLength;\n point.cpOutY = normalized.dy * outLength;\n }\n\n #alignMirrorLength(point: LinearPoint): void {\n if (!point.isLinked) {\n point.mirrorLength = false;\n return;\n }\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0);\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0);\n const targetLength = Math.max(outLength, inLength);\n\n if (targetLength <= 0) {\n return;\n }\n\n if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpOutX = outDirection.dx * targetLength;\n point.cpOutY = outDirection.dy * targetLength;\n } else if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpOutX = -inDirection.dx * targetLength;\n point.cpOutY = -inDirection.dy * targetLength;\n }\n\n if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpInX = inDirection.dx * targetLength;\n point.cpInY = inDirection.dy * targetLength;\n } else if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpInX = -outDirection.dx * targetLength;\n point.cpInY = -outDirection.dy * targetLength;\n }\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { DEFAULT_HANDLE_LENGTH, EASING_PRESETS } from './constants';\nimport { controlsStyles } from './styles';\nimport {\n type CubicBezierPoints,\n EasingType,\n type LinearPoint,\n type LinearPoints,\n MAX_LINEAR_POINTS,\n MIN_LINEAR_POINTS\n} from './types';\nimport {\n clampPoint,\n MIN_LINEAR_DELTA,\n normalizeLinearPoints,\n normalizeVector,\n parseCubicBezierValue,\n parseLinearTimingFunction,\n smoothLinearPoints,\n vectorLength\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\nimport '~/elements/icons/interface/minus';\nimport '~/elements/icons/interface/plus';\nimport '~/elements/button';\n\ntype CurveHost = HTMLElement & {\n easingType: EasingType;\n points: CubicBezierPoints | LinearPoints;\n showGrid: boolean;\n snapToGrid: boolean;\n gridSize: number;\n focusedLinearIndex: number | null;\n handleEasingTypeChange?: (event: CustomEvent<ControlEventDetail<EasingType>>) => void;\n handleGridToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handleGridSizeChange?: (event: KeyboardEvent) => void;\n handleSnapToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n handleLinearPointFocus?: (event: CustomEvent<ControlEventDetail<number | null>>) => void;\n};\n\nconst HOST_HANDLER_MAP = {\n 'easing-type-change': 'handleEasingTypeChange',\n 'grid-toggle': 'handleGridToggle',\n 'snap-toggle': 'handleSnapToggle',\n 'grid-size-change': 'handleGridSizeChange',\n 'points-change': 'handlePointsChange',\n 'linear-point-focus': 'handleLinearPointFocus'\n} as const;\n\ntype HostEventType = keyof typeof HOST_HANDLER_MAP;\n\n@Component({\n tag: 'ease-curve-controls',\n styles: controlsStyles,\n template(this: CurveControls) {\n return html`\n <ease-field label=\"Easing\">\n <ease-dropdown\n part=\"easing-type-dropdown\"\n placeholder=\"Select\"\n id=\"demo-easing-type\"\n name=\"demo-easing-type\"\n searchable\n .value=${this._activePresetValue}\n @change=${this.handlePresetSelection}\n >\n ${EASING_PRESETS.map(\n ({ label, options }, index) => html`\n ${index > 0 ? html`<hr slot=\"content\" />` : null}\n\n <h4 slot=\"content\">${label}</h4>\n ${options.map(\n ({ value, label }) => html`\n <button slot=\"content\" type=\"button\" value=${value}>${label}</button>`\n )}\n `\n )}\n </ease-dropdown>\n </ease-field>\n\n <ease-field label=\"Type\">\n <ease-radio-group .value=${this.easingType} @change=${this.handleTypeChange} part=\"radio-group\">\n <button slot=\"content\" value=${EasingType.CUBIC_BEZIER}>Cubic</button>\n <button slot=\"content\" value=${EasingType.LINEAR}>Linear</button>\n </ease-radio-group>\n </ease-field>\n `;\n }\n})\nexport class CurveControls extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints, CurveControls>({\n type: Object,\n reflect: false,\n onChange(this: CurveControls) {\n this.handlePointsPropChange();\n }\n })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize: number = 8;\n\n @Prop<number | null, CurveControls>({\n type: Number,\n reflect: false,\n defaultValue: null,\n onChange(this: CurveControls, value: number | null) {\n this.handleFocusedLinearIndexPropChange(value);\n }\n })\n accessor focusedLinearIndex: number | null = null;\n\n private _activePresetValue: string | null = null;\n private isApplyingPreset = false;\n\n #setActivePreset(value: string | null): void {\n if (this._activePresetValue === value) {\n return;\n }\n this._activePresetValue = value;\n this.requestRender();\n }\n\n #clearActivePreset(): void {\n if (this._activePresetValue === null) {\n return;\n }\n this._activePresetValue = null;\n this.requestRender();\n }\n\n handleFocusedLinearIndexPropChange(_value: number | null): void {\n this.requestRender();\n }\n\n handlePointsPropChange(): void {\n if (this.isApplyingPreset) {\n return;\n }\n this.#clearActivePreset();\n }\n\n get maxPointsReached(): boolean {\n const points = this.#getLinearPoints();\n return points !== null && points.length >= MAX_LINEAR_POINTS;\n }\n\n get minPointsReached(): boolean {\n const points = this.#getLinearPoints();\n return points !== null && points.length <= MIN_LINEAR_POINTS;\n }\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as CurveHost;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n\n return this.points;\n };\n\n renderLinearDetailsControls(): TemplateResult | null {\n const points = this.#getLinearPoints();\n\n if (!points) {\n return null;\n }\n\n if (points.length < MIN_LINEAR_POINTS) {\n return html`\n <div class=\"control-group details-group\">\n <span class=\"details-empty\">Curve requires at least 2 points.</span>\n </div>\n `;\n }\n\n const focusedIndex = this.focusedLinearIndex;\n\n if (focusedIndex === null) {\n return html`\n <div class=\"control-group details-group\">\n <div class=\"details-panel\">\n <span class=\"details-empty\">Select a point on the canvas to edit its details.</span>\n </div>\n </div>\n `;\n }\n\n const selectedPoint = points[focusedIndex];\n if (!selectedPoint) {\n return null;\n }\n\n const previousIndex = focusedIndex > 0 ? focusedIndex - 1 : null;\n const nextIndex = focusedIndex < points.length - 1 ? focusedIndex + 1 : null;\n\n const isInnerPoint = focusedIndex > 0 && focusedIndex < points.length - 1;\n\n const pointMeta = `${(selectedPoint.x * 100).toFixed(0)}%, ${(selectedPoint.y * 100).toFixed(0)}%`;\n const pointType = selectedPoint.isLinked ? 'Smooth' : 'Corner';\n const hasInHandle = selectedPoint.cpInX !== undefined || selectedPoint.cpInY !== undefined;\n const hasOutHandle = selectedPoint.cpOutX !== undefined || selectedPoint.cpOutY !== undefined;\n const hasAnyHandle = hasInHandle || hasOutHandle;\n\n return html`\n <div class=\"control-group details-group\">\n <div class=\"details-panel\" role=\"group\" aria-label=\"Linear point details\">\n <div class=\"point-navigation\">\n <button\n type=\"button\"\n class=\"control-button\"\n @click=${(event: Event) => this.#focusIndex(event, previousIndex)}\n ?disabled=${previousIndex === null}\n >\n Previous\n </button>\n <div class=\"point-state\" aria-live=\"polite\">\n <span>P${focusedIndex + 1}</span>\n <span>${pointMeta}</span>\n <span>(${pointType})</span>\n </div>\n <button\n type=\"button\"\n class=\"control-button\"\n @click=${(event: Event) => this.#focusIndex(event, nextIndex)}\n ?disabled=${nextIndex === null}\n >\n Next\n </button>\n </div>\n\n <div class=\"coordinate-editor\" role=\"group\" aria-label=\"Point coordinates\">\n <label class=\"coordinate-field\">\n <span>X</span>\n <input\n type=\"number\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n .value=${selectedPoint.x.toFixed(2)}\n data-axis=\"x\"\n ?disabled=${!isInnerPoint}\n @change=${this.#handleCoordinateInput}\n />\n </label>\n <label class=\"coordinate-field\">\n <span>Y</span>\n <input\n type=\"number\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n .value=${selectedPoint.y.toFixed(2)}\n data-axis=\"y\"\n @change=${this.#handleCoordinateInput}\n />\n </label>\n <button\n type=\"button\"\n class=\"coordinate-remove\"\n ?disabled=${!isInnerPoint || points.length <= MIN_LINEAR_POINTS}\n @click=${this.#handleRemoveSelectedPoint}\n >\n Remove\n </button>\n </div>\n\n ${\n isInnerPoint\n ? html`\n <div class=\"point-type-controls\" role=\"group\" aria-label=\"Point type controls\">\n <button\n type=\"button\"\n class=\"control-button ${!selectedPoint.isLinked ? 'active' : ''}\"\n data-type=\"corner\"\n @click=${this.#handlePointTypeChange}\n >\n Corner (Independent)\n </button>\n <button\n type=\"button\"\n class=\"control-button ${selectedPoint.isLinked ? 'active' : ''}\"\n data-type=\"smooth\"\n @click=${this.#handlePointTypeChange}\n >\n Smooth (Linked)\n </button>\n <button\n type=\"button\"\n class=\"control-button ${selectedPoint.isLinked ? 'active' : ''}\"\n data-type=\"mirror-angle\"\n @click=${this.#handlePointTypeChange}\n >\n Mirror Angle: ${selectedPoint.isLinked ? 'On' : 'Off'}\n </button>\n <button\n type=\"button\"\n class=\"control-button ${selectedPoint.mirrorLength !== false ? 'active' : ''}\"\n data-type=\"mirror-length\"\n @click=${this.#handlePointTypeChange}\n ?disabled=${!selectedPoint.isLinked}\n >\n Mirror Length: ${selectedPoint.mirrorLength === false ? 'Off' : 'On'}\n </button>\n </div>\n\n <div class=\"handle-actions\" role=\"group\" aria-label=\"Handle removal controls\">\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=\"both\"\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasAnyHandle}\n >\n Remove Both Handles\n </button>\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=\"in\"\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasInHandle}\n >\n Remove Incoming Handle\n </button>\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=\"out\"\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasOutHandle}\n >\n Remove Outgoing Handle\n </button>\n </div>\n `\n : this.#renderEndpointHandleControls(selectedPoint, focusedIndex)\n }\n </div>\n </div>\n `;\n }\n\n #handleCoordinateInput = (event: Event): void => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n const axis = target.dataset.axis;\n if (axis !== 'x' && axis !== 'y') {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const selectedPoint = points[index];\n if (!selectedPoint) {\n return;\n }\n\n const parsed = Number.parseFloat(target.value);\n\n if (Number.isNaN(parsed)) {\n target.value = selectedPoint[axis].toFixed(2);\n return;\n }\n\n const updatedPoints: LinearPoints = points.map((point, pointIndex) => {\n if (pointIndex !== index) {\n return { ...point };\n }\n\n const updated: LinearPoint = { ...point };\n\n if (axis === 'x') {\n if (index === 0 || index === points.length - 1) {\n return updated;\n }\n\n const previous = points[index - 1];\n const next = points[index + 1];\n const minX = previous ? previous.x + MIN_LINEAR_DELTA : 0;\n const maxX = next ? next.x - MIN_LINEAR_DELTA : 1;\n updated.x = Math.min(Math.max(parsed, minX), maxX);\n } else {\n updated.y = Math.min(Math.max(parsed, 0), 1);\n }\n\n return updated;\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n\n const refreshedPoint = normalizedPoints[index];\n\n if (refreshedPoint) {\n target.value = refreshedPoint[axis].toFixed(2);\n }\n };\n\n #handleRemoveSelectedPoint = (event: Event): void => {\n const index = this.focusedLinearIndex;\n\n if (index === null) {\n return;\n }\n\n this.#removeLinearPointAt(index, event);\n };\n\n #handlePointTypeChange = (event: Event): void => {\n event.preventDefault();\n const target = event.currentTarget;\n if (!(target instanceof HTMLButtonElement)) {\n return;\n }\n\n const type = target.dataset.type;\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const point = points[index];\n if (!point) {\n return;\n }\n\n const updatedPoints = [...points];\n const updatedPoint = { ...point };\n updatedPoints[index] = updatedPoint;\n\n switch (type) {\n case 'corner': {\n updatedPoint.isLinked = false;\n updatedPoint.mirrorLength = false;\n break;\n }\n case 'smooth': {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.isLinked = true;\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n break;\n }\n case 'mirror-angle': {\n const nextState = !updatedPoint.isLinked;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n updatedPoint.mirrorLength = true;\n this.#alignMirrorLength(updatedPoint);\n } else {\n updatedPoint.mirrorLength = false;\n }\n updatedPoint.isLinked = nextState;\n break;\n }\n case 'mirror-length': {\n if (!updatedPoint.isLinked) {\n break;\n }\n const nextState = updatedPoint.mirrorLength === false;\n updatedPoint.mirrorLength = nextState;\n if (nextState) {\n this.#ensureSmoothHandles(updatedPoint, index, points);\n this.#alignMirrorLength(updatedPoint);\n }\n break;\n }\n default:\n return;\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #ensureSmoothHandles(point: LinearPoint, index: number, points: LinearPoints): void {\n const prev = points[index - 1];\n const next = points[index + 1];\n\n let refDx = point.cpOutX ?? -(point.cpInX ?? 0);\n let refDy = point.cpOutY ?? -(point.cpInY ?? 0);\n\n if (refDx === 0 && refDy === 0) {\n let dirX = 0;\n let dirY = 0;\n\n if (prev && next) {\n dirX = next.x - prev.x;\n dirY = next.y - prev.y;\n } else if (next) {\n dirX = next.x - point.x;\n dirY = next.y - point.y;\n } else if (prev) {\n dirX = point.x - prev.x;\n dirY = point.y - prev.y;\n } else {\n dirX = 1;\n dirY = 0;\n }\n\n const direction = normalizeVector(dirX, dirY);\n const length = DEFAULT_HANDLE_LENGTH;\n\n point.cpInX = -direction.dx * length;\n point.cpInY = -direction.dy * length;\n point.cpOutX = direction.dx * length;\n point.cpOutY = direction.dy * length;\n refDx = point.cpOutX;\n refDy = point.cpOutY;\n }\n\n if (refDx === 0 && refDy === 0) {\n return;\n }\n\n const normalized = normalizeVector(refDx, refDy);\n const referenceLength = vectorLength(refDx, refDy);\n\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0) || referenceLength;\n point.cpInX = -normalized.dx * inLength;\n point.cpInY = -normalized.dy * inLength;\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0) || referenceLength;\n point.cpOutX = normalized.dx * outLength;\n point.cpOutY = normalized.dy * outLength;\n }\n\n #alignMirrorLength(point: LinearPoint): void {\n if (!point.isLinked) {\n point.mirrorLength = false;\n return;\n }\n\n const outLength = vectorLength(point.cpOutX ?? 0, point.cpOutY ?? 0);\n const inLength = vectorLength(point.cpInX ?? 0, point.cpInY ?? 0);\n const targetLength = Math.max(outLength, inLength);\n\n if (targetLength <= 0) {\n return;\n }\n\n if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpOutX = outDirection.dx * targetLength;\n point.cpOutY = outDirection.dy * targetLength;\n } else if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpOutX = -inDirection.dx * targetLength;\n point.cpOutY = -inDirection.dy * targetLength;\n }\n\n if (inLength > 0) {\n const inDirection = normalizeVector(point.cpInX ?? 0, point.cpInY ?? 0);\n point.cpInX = inDirection.dx * targetLength;\n point.cpInY = inDirection.dy * targetLength;\n } else if (outLength > 0) {\n const outDirection = normalizeVector(point.cpOutX ?? 0, point.cpOutY ?? 0);\n point.cpInX = -outDirection.dx * targetLength;\n point.cpInY = -outDirection.dy * targetLength;\n }\n }\n\n #handleRemoveHandles = (event: Event): void => {\n event.preventDefault();\n const target = event.currentTarget;\n if (!(target instanceof HTMLButtonElement)) {\n return;\n }\n\n const mode = (target.dataset.handle as 'in' | 'out' | 'both' | undefined) ?? 'both';\n\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const updatedPoints = [...points];\n const existingPoint = updatedPoints[index];\n if (!existingPoint) {\n return;\n }\n\n const updatedPoint: LinearPoint = { ...existingPoint };\n updatedPoints[index] = updatedPoint;\n\n const removeIncoming = mode === 'both' || mode === 'in';\n const removeOutgoing = mode === 'both' || mode === 'out';\n\n if (removeIncoming) {\n delete updatedPoint.cpInX;\n delete updatedPoint.cpInY;\n }\n\n if (removeOutgoing) {\n delete updatedPoint.cpOutX;\n delete updatedPoint.cpOutY;\n }\n\n if (removeIncoming && removeOutgoing) {\n delete updatedPoint.isLinked;\n delete updatedPoint.mirrorLength;\n } else if (removeIncoming || removeOutgoing) {\n updatedPoint.isLinked = false;\n updatedPoint.mirrorLength = false;\n }\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #renderEndpointHandleControls(point: LinearPoint, index: number): TemplateResult {\n const isStart = index === 0;\n const handleKey: 'in' | 'out' = isStart ? 'out' : 'in';\n const handleLabel = isStart ? 'Outgoing' : 'Incoming';\n const hasHandle =\n handleKey === 'out'\n ? point.cpOutX !== undefined || point.cpOutY !== undefined\n : point.cpInX !== undefined || point.cpInY !== undefined;\n\n return html`\n <div class=\"handle-actions\" role=\"group\" aria-label=\"${handleLabel} handle controls\">\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=${handleKey}\n @click=${this.#handleEndpointHandleAdd}\n ?disabled=${hasHandle}\n >\n Add ${handleLabel} Handle\n </button>\n <button\n type=\"button\"\n class=\"control-button\"\n data-handle=${handleKey}\n @click=${this.#handleRemoveHandles}\n ?disabled=${!hasHandle}\n >\n Remove ${handleLabel} Handle\n </button>\n </div>\n `;\n }\n\n #handleEndpointHandleAdd = (event: Event): void => {\n event.preventDefault();\n const target = event.currentTarget;\n if (!(target instanceof HTMLButtonElement)) {\n return;\n }\n\n const handle = target.dataset.handle;\n if (handle !== 'in' && handle !== 'out') {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n if (index === null) {\n return;\n }\n\n const neighborIndex = handle === 'out' ? index + 1 : index - 1;\n const neighbor = points[neighborIndex];\n if (!neighbor) {\n return;\n }\n\n const updatedPoints = [...points];\n const existingPoint = updatedPoints[index];\n if (!existingPoint) {\n return;\n }\n\n const updatedPoint: LinearPoint = { ...existingPoint };\n updatedPoints[index] = updatedPoint;\n\n this.#createEndpointHandle(updatedPoint, neighbor, handle);\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n };\n\n #createEndpointHandle(point: LinearPoint, neighbor: LinearPoint, handle: 'in' | 'out'): void {\n const dx = neighbor.x - point.x;\n const dy = neighbor.y - point.y;\n\n const direction = normalizeVector(dx, dy);\n const fallbackDirection = handle === 'out' ? { dx: 1, dy: 0 } : { dx: -1, dy: 0 };\n const finalDirection = direction.dx === 0 && direction.dy === 0 ? fallbackDirection : direction;\n\n const gap = Math.abs(dx);\n const baseLength = gap > 0 ? gap * 0.5 : MIN_LINEAR_DELTA * 0.5;\n const length = Math.min(DEFAULT_HANDLE_LENGTH, Math.max(MIN_LINEAR_DELTA * 0.5, baseLength));\n\n if (handle === 'out') {\n point.cpOutX = finalDirection.dx * length;\n point.cpOutY = finalDirection.dy * length;\n } else {\n point.cpInX = finalDirection.dx * length;\n point.cpInY = finalDirection.dy * length;\n }\n\n point.isLinked = false;\n point.mirrorLength = false;\n }\n\n #removeLinearPointAt(index: number, event: Event): void {\n const points = this.#getLinearPoints();\n\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n if (index <= 0 || index >= points.length - 1) {\n return;\n }\n\n const updatedPoints: LinearPoints = points\n .filter((_, pointIndex) => pointIndex !== index)\n .map((point) => {\n return { ...point };\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n\n const nextIndex = index - 1;\n\n this.focusedLinearIndex = nextIndex;\n this.#notifyHost('linear-point-focus', nextIndex, event);\n }\n\n readonly resetCurve = (event: Event): void => {\n event.preventDefault();\n this.#clearActivePreset();\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const defaults: CubicBezierPoints = {\n p1: { x: 0.25, y: 0.1 },\n p2: { x: 0.25, y: 1 }\n };\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n return;\n }\n\n const defaults: LinearPoints = [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n this.focusedLinearIndex = null;\n this.#notifyHost('linear-point-focus', null, event);\n };\n\n readonly distributeLinearPoints = (event: Event): void => {\n event.preventDefault();\n\n const points = this.#getLinearPoints();\n\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n const lastIndex = points.length - 1;\n const step = lastIndex > 0 ? 1 / lastIndex : 0;\n\n const distributed: LinearPoints = points.map((point, index) => {\n const updated: LinearPoint = { ...point };\n\n if (index === 0) {\n updated.x = 0;\n } else if (index === lastIndex) {\n updated.x = 1;\n } else {\n updated.x = Number.parseFloat((step * index).toFixed(4));\n }\n\n delete updated.cpInX;\n delete updated.cpInY;\n delete updated.cpOutX;\n delete updated.cpOutY;\n delete updated.isLinked;\n\n return updated;\n });\n\n const normalizedPoints = normalizeLinearPoints(distributed);\n this.#emitPoints(normalizedPoints, event);\n\n if (this.focusedLinearIndex !== null) {\n this.#notifyHost('linear-point-focus', this.focusedLinearIndex, event);\n }\n };\n\n #focusIndex = (event: Event, index: number | null): void => {\n event.preventDefault();\n if (index !== null) {\n this.focusedLinearIndex = index;\n this.#notifyHost('linear-point-focus', index, event);\n }\n };\n\n #setEasingType = (type: EasingType, event: Event): void => {\n if (this.easingType === type) {\n return;\n }\n\n if (!this.isApplyingPreset) {\n this.#clearActivePreset();\n }\n\n this.easingType = type;\n this.#notifyHost('easing-type-change', type, event);\n };\n\n #emitPoints = (points: LinearPoints, event: Event): void => {\n if (!this.isApplyingPreset) {\n this.#clearActivePreset();\n }\n this.points = points;\n this.#notifyHost('points-change', points, event);\n };\n\n #applyPreset = (\n points: CubicBezierPoints | LinearPoints,\n type: EasingType,\n presetValue: string,\n event: Event\n ): void => {\n this.isApplyingPreset = true;\n if (this.easingType !== type) {\n this.#setEasingType(type, event);\n }\n\n this.points = points;\n this.focusedLinearIndex = null;\n this.#setActivePreset(presetValue);\n this.#notifyHost('points-change', points, event);\n\n if (type === EasingType.LINEAR) {\n this.#notifyHost('linear-point-focus', null, event);\n }\n\n this.isApplyingPreset = false;\n };\n\n readonly handleTypeChange = (event: CustomEvent<ControlEventDetail<string>>): void => {\n const detail = event.detail;\n\n if (!detail) {\n return;\n }\n\n const { value, event: originEvent } = detail;\n\n if (value === EasingType.CUBIC_BEZIER || value === EasingType.LINEAR) {\n this.#clearActivePreset();\n this.#setEasingType(value, originEvent ?? event);\n }\n };\n\n readonly handlePresetSelection = (event: CustomEvent<ControlEventDetail<string>>): void => {\n const detail = event.detail;\n\n if (!detail) {\n return;\n }\n\n const rawValue = detail.value;\n const originEvent = detail.event ?? event;\n\n if (typeof rawValue !== 'string') {\n return;\n }\n\n const cssValue = rawValue.trim();\n\n if (cssValue.length === 0) {\n this.#clearActivePreset();\n return;\n }\n\n if (cssValue.startsWith(EasingType.CUBIC_BEZIER)) {\n const parsed = parseCubicBezierValue(cssValue);\n if (!parsed) {\n this.#clearActivePreset();\n return;\n }\n this.#applyPreset(parsed, EasingType.CUBIC_BEZIER, cssValue, originEvent);\n return;\n }\n\n if (cssValue.startsWith(EasingType.LINEAR)) {\n const parsedLinear = parseLinearTimingFunction(cssValue);\n if (!parsedLinear) {\n this.#clearActivePreset();\n return;\n }\n // Apply smoothing to linear presets for better visual curves\n const smoothedLinear = smoothLinearPoints(parsedLinear, 0.3);\n this.#applyPreset(smoothedLinear, EasingType.LINEAR, cssValue, originEvent);\n return;\n }\n\n this.#clearActivePreset();\n };\n\n readonly handleSelectCubic = (event: Event): void => {\n event.preventDefault();\n this.#setEasingType(EasingType.CUBIC_BEZIER, event);\n };\n\n readonly handleSelectLinear = (event: Event): void => {\n event.preventDefault();\n this.#setEasingType(EasingType.LINEAR, event);\n };\n\n readonly addLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || this.maxPointsReached) {\n return;\n }\n\n let insertIndex = 0;\n let largestGap = -Infinity;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n\n if (!start || !end) {\n continue;\n }\n\n const gap = end.x - start.x;\n\n if (gap > largestGap) {\n largestGap = gap;\n insertIndex = index;\n }\n }\n\n const startPoint = points[insertIndex];\n const endPoint = points[insertIndex + 1];\n\n if (!startPoint || !endPoint) {\n return;\n }\n\n const newPointPosition = clampPoint({\n x: (startPoint.x + endPoint.x) / 2,\n y: (startPoint.y + endPoint.y) / 2\n });\n const newPoint: LinearPoint = {\n x: newPointPosition.x,\n y: newPointPosition.y,\n cpInX: -0.1,\n cpInY: 0,\n cpOutX: 0.1,\n cpOutY: 0,\n isLinked: true,\n mirrorLength: true\n };\n\n const updatedPoints: LinearPoints = [\n ...points.slice(0, insertIndex + 1),\n newPoint,\n ...points.slice(insertIndex + 1)\n ];\n\n const insertedIndex = insertIndex + 1;\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.focusedLinearIndex = insertedIndex;\n this.#notifyHost('linear-point-focus', insertedIndex, event);\n };\n\n readonly removeLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || this.minPointsReached) {\n return;\n }\n\n let removeIndex = 1;\n let smallestSpan = Number.POSITIVE_INFINITY;\n\n for (let index = 1; index < points.length - 1; index += 1) {\n const previous = points[index - 1];\n const next = points[index + 1];\n\n if (!previous || !next) {\n continue;\n }\n\n const span = next.x - previous.x;\n\n if (span < smallestSpan) {\n smallestSpan = span;\n removeIndex = index;\n }\n }\n\n if (removeIndex > 0 && removeIndex < points.length - 1) {\n this.#removeLinearPointAt(removeIndex, event);\n }\n };\n\n readonly toggleGrid = (event: Event): void => {\n event.preventDefault();\n\n const nextValue = !this.showGrid;\n this.showGrid = nextValue;\n this.#notifyHost('grid-toggle', nextValue, event);\n };\n\n readonly toggleSnapToGrid = (event: Event): void => {\n event.preventDefault();\n\n const nextValue = !this.snapToGrid;\n this.snapToGrid = nextValue;\n this.#notifyHost('snap-toggle', nextValue, event);\n };\n\n readonly incrementGridSize = (event: Event): void => {\n event.preventDefault();\n\n this.#commitGridSize(this.gridSize + 1, event);\n };\n\n readonly decrementGridSize = (event: Event): void => {\n event.preventDefault();\n\n this.#commitGridSize(this.gridSize - 1, event);\n };\n\n readonly handleGridSliderInput = (event: Event): void => {\n event.preventDefault();\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n this.#commitGridSize(Number(target.value), event);\n };\n\n readonly handleGridSizeChange = (event: Event): void => {\n event.preventDefault();\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n const parsed = Number(target.value);\n if (Number.isNaN(parsed)) {\n target.value = String(this.gridSize);\n return;\n }\n this.#commitGridSize(parsed, event);\n target.value = String(this.gridSize);\n };\n\n #clampGridSize = (value: number): number => Math.max(1, Math.min(24, Math.round(value)));\n\n #commitGridSize = (value: number, event: Event): void => {\n const nextValue = this.#clampGridSize(value);\n if (this.gridSize === nextValue) {\n this.requestRender();\n return;\n }\n this.gridSize = nextValue;\n this.#notifyHost('grid-size-change', this.gridSize, event);\n this.requestRender();\n };\n\n #notifyHost = <TValue>(type: HostEventType, value: TValue, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<TValue> = { value, event };\n\n dispatchControlEvent(target, type, detail);\n };\n}\n","import { html } from 'lit-html';\n\nimport { outputStyles } from './styles';\nimport { type CSSCode, type CubicBezierPoints, EasingType, type LinearPoints } from './types';\nimport { generateCubicBezierCSS, generateLinearCSS } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport '~/components/code';\n\n@Component({\n tag: 'ease-curve-output',\n styles: outputStyles,\n template(this: CurveOutput) {\n return html`\n <div class=\"output-container\">\n <div class=\"output-group\">\n <h4 class=\"output-label\">CSS Easing Function</h4>\n <ease-code language=\"css\">${this.generatedCSS.code}</ease-code>\n <button class=\"copy-button\" @click=${this.handleCopyClick}>\n ${this.copyStatus}\n </button>\n </div>\n </div>\n `;\n }\n})\nexport class CurveOutput extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ type: String, reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<string>({ reflect: true, defaultValue: 'ease-custom' })\n accessor name!: string;\n\n @Prop<'animation' | 'transition'>({ reflect: true, defaultValue: 'animation' })\n accessor variant!: 'animation' | 'transition';\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify!: number;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round!: number;\n\n #copyTimeout: number | null = null;\n #animationTimeout: number | null = null;\n #isAnimating = false;\n\n get timingFunction(): string {\n const { timingFunction } = this.generatedCSS;\n return timingFunction;\n }\n\n get generatedCSS(): CSSCode {\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n if (!this.points || Array.isArray(this.points)) {\n const timingFunction = 'cubic-bezier(0.25, 0.1, 0.25, 1)';\n const code = `\n .${this.name} {\n ${this.variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n }\n\n return generateCubicBezierCSS(this.points as CubicBezierPoints, this.name, this.variant);\n }\n\n if (this.easingType === EasingType.LINEAR) {\n if (Array.isArray(this.points)) {\n return generateLinearCSS(this.points, this.name, this.variant, {\n simplify: this.simplify,\n round: this.round\n });\n }\n\n const timingFunction = 'linear(0, 1)';\n const code = `\n .${this.name} {\n ${this.variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n }\n\n const timingFunction = 'ease';\n const code = `\n .${this.name} {\n ${this.variant}-timing-function: ${timingFunction};\n }\n `;\n\n return { code, timingFunction };\n }\n\n get copyStatus(): string {\n return this.#copyTimeout ? 'Copied!' : 'Copy CSS';\n }\n\n get isAnimating(): boolean {\n return this.#isAnimating;\n }\n\n #copyToClipboard = async (event: Event): Promise<void> => {\n event.preventDefault();\n\n try {\n await navigator.clipboard.writeText(this.timingFunction);\n\n if (this.#copyTimeout) {\n clearTimeout(this.#copyTimeout);\n }\n\n this.#copyTimeout = window.setTimeout(() => {\n this.#copyTimeout = null;\n this.requestRender();\n }, 2000);\n\n this.requestRender();\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n }\n };\n\n #playPreview = (event: Event): void => {\n event.preventDefault();\n\n if (this.#isAnimating) {\n this.#isAnimating = false;\n this.requestRender();\n void this.offsetHeight;\n }\n\n if (this.#animationTimeout) {\n clearTimeout(this.#animationTimeout);\n }\n\n this.#isAnimating = true;\n this.requestRender();\n\n this.#animationTimeout = window.setTimeout(() => {\n this.#isAnimating = false;\n\n this.requestRender();\n }, 2000);\n };\n\n readonly handleCopyClick = (event: Event): void => {\n void this.#copyToClipboard(event);\n };\n\n handlePreviewClick(event: Event): void {\n this.#playPreview(event);\n }\n\n disconnectedCallback(): void {\n if (this.#copyTimeout) {\n clearTimeout(this.#copyTimeout);\n\n this.#copyTimeout = null;\n }\n\n if (this.#animationTimeout) {\n clearTimeout(this.#animationTimeout);\n\n this.#animationTimeout = null;\n }\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\nexport type Placement =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end'\n | 'left-start'\n | 'left-center'\n | 'left-end'\n | 'right-start'\n | 'right-center'\n | 'right-end';\n\nconst nextAnchorName = (): string => `--ease-popover-anchor-${crypto.randomUUID()}`;\n\n@Component({\n tag: 'ease-popover',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n --ease-popover-offset: 8px;\n --ease-popover-anchor-name: --ease-popover-anchor;\n --ease-popover-transform-origin: center center;\n --ease-popover-duration: 200ms;\n --ease-popover-content-min-width: auto;\n --ease-popover-content-max-width: none;\n --ease-popover-content-width: max-content;\n }\n\n ::slotted([slot=\"trigger\"]) {\n anchor-name: var(--ease-popover-anchor-name);\n }\n\n [part=\"content\"] {\n position-anchor: var(--ease-popover-anchor-name);\n position: fixed;\n margin: 0;\n transform-origin: var(--ease-popover-transform-origin);\n width: var(--ease-popover-content-width);\n min-width: var(--ease-popover-content-min-width);\n max-width: var(--ease-popover-content-max-width);\n box-sizing: border-box;\n overscroll-behavior: contain;\n z-index: 100;\n display: none;\n }\n\n :host([open]) [part=\"content\"] {\n display: block;\n }\n\n :host([placement=\"top-start\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-center\"]) [part=\"content\"] {\n position-area: top center;\n top: anchor(top);\n left: anchor(center);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-end\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"bottom-start\"]) [part=\"content\"] {\n position-area: bottom right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-center\"]) [part=\"content\"] {\n position-area: bottom center;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-end\"]) [part=\"content\"] {\n position-area: bottom left;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"left-start\"]) [part=\"content\"] {\n position-area: left bottom;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-center\"]) [part=\"content\"] {\n position-area: left center;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-end\"]) [part=\"content\"] {\n position-area: left top;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"right-start\"]) [part=\"content\"] {\n position-area: right end;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-center\"]) [part=\"content\"] {\n position-area: right center;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-end\"]) [part=\"content\"] {\n position-area: right start;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n `\n})\nexport class Popover extends HTMLElement {\n #anchorName = nextAnchorName();\n #contentElement: HTMLElement | null = null;\n #initialized = false;\n\n declare requestRender: () => void;\n\n public get contentElement(): HTMLElement | null {\n return this.#contentElement;\n }\n\n @Prop<Placement>({\n reflect: true,\n defaultValue: 'bottom-start',\n onChange() {\n (this as Popover).handlePlacementChange();\n }\n })\n accessor placement!: Placement;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n defaultValue: 8,\n onChange() {\n (this as Popover).handleOffsetChange();\n }\n })\n accessor offset = 8;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor open = false;\n\n connectedCallback(): void {\n this.#syncAnchorName();\n this.#syncOffset();\n }\n\n disconnectedCallback(): void {\n this.#contentElement = null;\n this.#initialized = false;\n }\n\n render(): TemplateResult {\n return html`\n <slot slot=\"trigger\" name=\"trigger\"></slot>\n <div\n part=\"content\"\n data-popover-content\n role=\"region\"\n data-placement=${this.placement}\n >\n <slot></slot>\n </div>\n `;\n }\n\n handlePlacementChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncPlacement();\n }\n\n handleOffsetChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncOffset();\n }\n\n #syncPlacement(): void {\n this.dataset.placement = this.placement;\n\n if (this.#contentElement) {\n this.#contentElement.dataset.placement = this.placement;\n }\n }\n\n #syncOffset(): void {\n const offset = Number.isFinite(this.offset) ? this.offset : 0;\n this.style.setProperty('--ease-popover-offset', `${offset}px`);\n }\n\n #syncAnchorName(): void {\n this.style.setProperty('--ease-popover-anchor-name', this.#anchorName);\n }\n}\n\nexport default {\n Popover\n};\n","export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { OutsideClickResolution } from '~/utils/outside-click';\n\nimport {\n createOutsideClickHandle,\n disconnectOutsideClickHandles,\n registerOutsideClickHandle,\n updateOutsideClickHandles\n} from '~/utils/outside-click';\n\ntype OutsideClickHost = HTMLElement & {\n connectedCallback?: (...args: unknown[]) => unknown;\n disconnectedCallback?: (...args: unknown[]) => unknown;\n afterRender?: (...args: unknown[]) => unknown;\n};\n\ntype HookName = 'connectedCallback' | 'disconnectedCallback' | 'afterRender';\n\ninterface OutsideClickOptions<THost extends OutsideClickHost> {\n resolve?: (host: THost) => OutsideClickResolution | null | undefined;\n owner?: (host: THost) => HTMLElement | null | undefined;\n content?: (host: THost) => HTMLElement | null | undefined;\n triggers?: (host: THost) => Array<HTMLElement | null | undefined>;\n disabled?: (host: THost) => boolean;\n}\n\nconst lifecycleApplied = new WeakSet<OutsideClickHost>();\n\nconst wrapMethod = (\n host: OutsideClickHost,\n name: HookName,\n hook: (this: OutsideClickHost) => void,\n callHookFirst = false\n): void => {\n const original = host[name];\n\n (host as Required<OutsideClickHost>)[name] = function (...args: unknown[]) {\n if (callHookFirst) {\n hook.call(this);\n }\n\n let result: unknown;\n\n if (typeof original === 'function') {\n result = (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n if (!callHookFirst) {\n hook.call(this);\n }\n\n return result;\n };\n};\n\nconst ensureLifecycle = (host: OutsideClickHost): void => {\n if (lifecycleApplied.has(host)) {\n return;\n }\n\n lifecycleApplied.add(host);\n\n wrapMethod(host, 'connectedCallback', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(host, 'afterRender', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(\n host,\n 'disconnectedCallback',\n function (this: OutsideClickHost) {\n disconnectOutsideClickHandles(this);\n },\n true\n );\n};\n\nexport function OutsideClick<THost extends OutsideClickHost, TEvent extends Event = Event>(\n options: OutsideClickOptions<THost> = {}\n) {\n return (\n originalMethod: (this: THost, event: TEvent) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n ensureLifecycle(this);\n\n const resolve =\n options.resolve ??\n ((host: THost): OutsideClickResolution => {\n return {\n owner: options.owner?.(host),\n content: options.content?.(host),\n triggers: options.triggers?.(host)\n };\n });\n\n const handle = createOutsideClickHandle(\n this,\n (event) => {\n originalMethod.call(this, event as TEvent);\n },\n {\n resolve,\n disabled: options.disabled\n }\n );\n\n registerOutsideClickHandle(this, handle);\n\n if (this.isConnected) {\n updateOutsideClickHandles(this);\n }\n });\n };\n}\n\nexport { requestOutsideClickUpdate } from '~/utils/outside-click';\nexport type { OutsideClickOptions };\n","import { html } from 'lit-html';\n\nimport { toolbarStyles } from './styles';\nimport {\n type CubicBezierPoints,\n EasingType,\n type LinearPoint,\n type LinearPoints,\n MAX_LINEAR_POINTS,\n MIN_LINEAR_POINTS\n} from './types';\nimport { clampPoint, normalizeLinearPoints } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { type ControlEventDetail, dispatchControlEvent } from '~/elements/shared';\n\nimport '~/elements/icons/interface/minus';\nimport '~/elements/icons/interface/plus';\nimport '~/elements/button';\nimport '~/elements/tooltip';\n\ntype CurveHost = HTMLElement & {\n easingType: EasingType;\n points: CubicBezierPoints | LinearPoints;\n showGrid: boolean;\n snapToGrid: boolean;\n gridSize: number;\n focusedLinearIndex: number | null;\n handleGridToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handleSnapToggle?: (event: CustomEvent<ControlEventDetail<boolean>>) => void;\n handleGridSizeChange?: (event: KeyboardEvent) => void;\n handlePointsChange?: (event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>) => void;\n handleLinearPointFocus?: (event: CustomEvent<ControlEventDetail<number | null>>) => void;\n handleSimplifyChange?: (event: CustomEvent<ControlEventDetail<number>>) => void;\n handleRoundChange?: (event: CustomEvent<ControlEventDetail<number>>) => void;\n};\n\nconst HOST_HANDLER_MAP = {\n 'grid-toggle': 'handleGridToggle',\n 'snap-toggle': 'handleSnapToggle',\n 'grid-size-change': 'handleGridSizeChange',\n 'points-change': 'handlePointsChange',\n 'linear-point-focus': 'handleLinearPointFocus',\n 'simplify-change': 'handleSimplifyChange',\n 'round-change': 'handleRoundChange'\n} as const;\n\ntype HostEventType = keyof typeof HOST_HANDLER_MAP;\n\n@Component({\n tag: 'ease-curve-toolbar',\n styles: toolbarStyles,\n template(this: CurveToolbar) {\n const isGridAtMinimum = this.gridSize <= 1;\n const isGridAtMaximum = this.gridSize >= 24;\n const isLinear = this.easingType === EasingType.LINEAR;\n const points = isLinear && Array.isArray(this.points) ? (this.points as LinearPoints) : null;\n\n return html`\n <div class=\"toolbar-container\">\n <div class=\"toolbar-group\">\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button ${this.showGrid ? 'active' : ''}\"\n @click=${this.toggleGrid}\n slot=\"trigger\"\n >\n <ease-icon-grid state=${this.showGrid ? 'hide' : 'show'}></ease-icon-grid>\n </button>\n Toggle Grid\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button ${this.snapToGrid ? 'active' : ''}\"\n @click=${this.toggleSnapToGrid}\n slot=\"trigger\"\n >\n <ease-icon-snap state=${this.snapToGrid ? 'active' : 'default'}></ease-icon-snap>\n </button>\n Snap to Grid\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.resetCurve}\n slot=\"trigger\"\n >\n <ease-icon-clear></ease-icon-clear>\n </button>\n Reset Curve\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.addLinearPoint}\n ?disabled=${(points && points.length >= MAX_LINEAR_POINTS) || !isLinear}\n slot=\"trigger\"\n >\n <ease-icon-anchor-add></ease-icon-anchor-add>\n </button>\n Add Point\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.removeLinearPoint}\n ?disabled=${(points && points.length <= MIN_LINEAR_POINTS) || !isLinear}\n slot=\"trigger\"\n >\n <ease-icon-anchor-remove></ease-icon-anchor-remove>\n </button>\n Remove Point\n </ease-tooltip>\n\n <ease-tooltip placement=\"top-center\">\n <button\n type=\"button\"\n class=\"toolbar-button\"\n @click=${this.distributeLinearPoints}\n ?disabled=${!isLinear}\n slot=\"trigger\"\n >\n <ease-icon-bezier-distribute></ease-icon-bezier-distribute>\n </button>\n Distribute Points\n </ease-tooltip>\n\n <div class=\"grid-size-controls\">\n <ease-button\n class=\"grid-size-button minus\"\n type=\"button\"\n block=\"icon\"\n pill=\"true\"\n variant=\"headless\"\n @click=${this.decrementGridSize}\n ?disabled=${isGridAtMinimum}\n >\n <ease-icon-minus></ease-icon-minus>\n </ease-button>\n <div class=\"grid-size-value\">\n ${this.gridSize}x\n </div>\n <ease-button\n class=\"grid-size-button plus\"\n type=\"button\"\n block=\"icon\"\n pill=\"true\"\n variant=\"headless\"\n @click=${this.incrementGridSize}\n ?disabled=${isGridAtMaximum}\n >\n <ease-icon-plus></ease-icon-plus>\n </ease-button>\n </div>\n </div>\n\n <ease-field label=\"Simplify\">\n <ease-slider .value=${this.simplify} .min=${0} .max=${0.05} .step=${0.001} @input=${this.handleSimplifyInput}></ease-slider>\n </ease-field>\n\n <ease-field label=\"Round\">\n <ease-slider .value=${this.round} .min=${0} .max=${5} .step=${1} @input=${this.handleRoundInput}></ease-slider>\n </ease-field>\n\n </div>\n `;\n }\n})\nexport class CurveToolbar extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<EasingType>({ reflect: true })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({ type: Object, reflect: false })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize: number = 8;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify: number = 0;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round: number = 5;\n\n #getEventTarget = (): CurveHost => {\n const root = this.getRootNode();\n if (root instanceof ShadowRoot && root.host instanceof HTMLElement) {\n return root.host as CurveHost;\n }\n return this as unknown as CurveHost;\n };\n\n #getLinearPoints = (): LinearPoints | null => {\n if (!Array.isArray(this.points)) {\n return null;\n }\n return this.points;\n };\n\n #notifyHost = <TValue>(type: HostEventType, value: TValue, event: Event): void => {\n const target = this.#getEventTarget();\n const detail: ControlEventDetail<TValue> = { value, event };\n dispatchControlEvent(target, type, detail);\n };\n\n #emitPoints = (points: LinearPoints, event: Event): void => {\n this.points = points;\n this.#notifyHost('points-change', points, event);\n };\n\n readonly toggleGrid = (event: Event): void => {\n event.preventDefault();\n const nextValue = !this.showGrid;\n this.showGrid = nextValue;\n this.#notifyHost('grid-toggle', nextValue, event);\n };\n\n readonly toggleSnapToGrid = (event: Event): void => {\n event.preventDefault();\n const nextValue = !this.snapToGrid;\n this.snapToGrid = nextValue;\n this.#notifyHost('snap-toggle', nextValue, event);\n };\n\n readonly resetCurve = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType === EasingType.CUBIC_BEZIER) {\n const defaults: CubicBezierPoints = {\n p1: { x: 0.25, y: 0.1 },\n p2: { x: 0.25, y: 1 }\n };\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n return;\n }\n\n const defaults: LinearPoints = [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n this.points = defaults;\n this.#notifyHost('points-change', defaults, event);\n this.#notifyHost('linear-point-focus', null, event);\n };\n\n readonly distributeLinearPoints = (event: Event): void => {\n event.preventDefault();\n\n const points = this.#getLinearPoints();\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n const lastIndex = points.length - 1;\n const step = lastIndex > 0 ? 1 / lastIndex : 0;\n\n const distributed: LinearPoints = points.map((point, index) => {\n const updated: LinearPoint = { ...point };\n\n if (index === 0) {\n updated.x = 0;\n } else if (index === lastIndex) {\n updated.x = 1;\n } else {\n updated.x = Number.parseFloat((step * index).toFixed(4));\n }\n\n delete updated.cpInX;\n delete updated.cpInY;\n delete updated.cpOutX;\n delete updated.cpOutY;\n delete updated.isLinked;\n\n return updated;\n });\n\n const normalizedPoints = normalizeLinearPoints(distributed);\n this.#emitPoints(normalizedPoints, event);\n };\n\n readonly addLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || points.length >= MAX_LINEAR_POINTS) {\n return;\n }\n\n let insertIndex = 0;\n let largestGap = -Infinity;\n\n for (let index = 0; index < points.length - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n\n if (!start || !end) {\n continue;\n }\n\n const gap = end.x - start.x;\n\n if (gap > largestGap) {\n largestGap = gap;\n insertIndex = index;\n }\n }\n\n const startPoint = points[insertIndex];\n const endPoint = points[insertIndex + 1];\n\n if (!startPoint || !endPoint) {\n return;\n }\n\n const newPointPosition = clampPoint(\n {\n x: (startPoint.x + endPoint.x) / 2,\n y: (startPoint.y + endPoint.y) / 2\n },\n { minY: -2, maxY: 3 }\n );\n const newPoint: LinearPoint = {\n x: newPointPosition.x,\n y: newPointPosition.y,\n cpInX: -0.1,\n cpInY: 0,\n cpOutX: 0.1,\n cpOutY: 0,\n isLinked: true,\n mirrorLength: true\n };\n\n const updatedPoints: LinearPoints = [\n ...points.slice(0, insertIndex + 1),\n newPoint,\n ...points.slice(insertIndex + 1)\n ];\n\n const insertedIndex = insertIndex + 1;\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n this.#notifyHost('linear-point-focus', insertedIndex, event);\n };\n\n readonly removeLinearPoint = (event: Event): void => {\n event.preventDefault();\n\n if (this.easingType !== EasingType.LINEAR) {\n return;\n }\n\n const points = this.#getLinearPoints();\n if (!points || points.length <= MIN_LINEAR_POINTS) {\n return;\n }\n\n let removeIndex = 1;\n let smallestSpan = Number.POSITIVE_INFINITY;\n\n for (let index = 1; index < points.length - 1; index += 1) {\n const previous = points[index - 1];\n const next = points[index + 1];\n\n if (!previous || !next) {\n continue;\n }\n\n const span = next.x - previous.x;\n\n if (span < smallestSpan) {\n smallestSpan = span;\n removeIndex = index;\n }\n }\n\n if (removeIndex > 0 && removeIndex < points.length - 1) {\n const updatedPoints: LinearPoints = points\n .filter((_, pointIndex) => pointIndex !== removeIndex)\n .map((point) => {\n return { ...point };\n });\n\n const normalizedPoints = normalizeLinearPoints(updatedPoints);\n this.#emitPoints(normalizedPoints, event);\n\n const nextIndex = removeIndex - 1;\n this.#notifyHost('linear-point-focus', nextIndex, event);\n }\n };\n\n readonly incrementGridSize = (event: Event): void => {\n event.preventDefault();\n this.#commitGridSize(this.gridSize + 1, event);\n };\n\n readonly decrementGridSize = (event: Event): void => {\n event.preventDefault();\n this.#commitGridSize(this.gridSize - 1, event);\n };\n\n readonly handleSimplifyInput = (event: Event): void => {\n const customEvent = event as CustomEvent<ControlEventDetail<number>>;\n const value = customEvent.detail?.value ?? 0;\n this.simplify = Number(value);\n this.#notifyHost('simplify-change', this.simplify, event);\n };\n\n readonly handleRoundInput = (event: Event): void => {\n const customEvent = event as CustomEvent<ControlEventDetail<number>>;\n const value = customEvent.detail?.value ?? 0;\n this.round = Number(value);\n this.#notifyHost('round-change', this.round, event);\n };\n\n #clampGridSize = (value: number): number => Math.max(1, Math.min(24, Math.round(value)));\n\n #commitGridSize = (value: number, event: Event): void => {\n const nextValue = this.#clampGridSize(value);\n if (this.gridSize === nextValue) {\n this.requestRender();\n return;\n }\n this.gridSize = nextValue;\n this.#notifyHost('grid-size-change', this.gridSize, event);\n this.requestRender();\n };\n}\n","import type { ControlEventDetail } from '~/elements/shared';\n\nimport { html } from 'lit-html';\n\nimport { cubicBezierToLinearPoints } from './bezier-conversion';\nimport { containerStyles } from './styles';\nimport { type CubicBezierPoints, EasingType, type LinearPoints, MIN_LINEAR_POINTS } from './types';\nimport { MIN_LINEAR_DELTA, normalizeLinearPoints } from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-curve',\n styles: containerStyles,\n template(this: Curve) {\n return html`\n <div class=\"curve-container\">\n <div class=\"curve-header\">\n <ease-curve-controls\n .easingType=${this.easingType}\n .points=${this.points}\n .showGrid=${this.showGrid}\n .snapToGrid=${this.snapToGrid}\n .gridSize=${this.gridSize}\n .focusedLinearIndex=${this.focusedLinearIndex}\n ></ease-curve-controls>\n </div>\n\n <div class=\"curve-canvas-wrapper\">\n <div class=\"curve-canvas\">\n <ease-curve-canvas\n .easingType=${this.easingType}\n .points=${this.points}\n .showGrid=${this.showGrid}\n .snapToGrid=${this.snapToGrid}\n .gridSize=${this.gridSize}\n .focusedLinearIndex=${this.focusedLinearIndex}\n .simplify=${this.simplify}\n .round=${this.round}\n ></ease-curve-canvas>\n </div>\n <ease-curve-canvas-controls\n .easingType=${this.easingType}\n .points=${this.points}\n .focusedLinearIndex=${this.focusedLinearIndex}\n ></ease-curve-canvas-controls>\n </div>\n\n <div class=\"curve-toolbar\">\n <ease-curve-toolbar\n .easingType=${this.easingType}\n .points=${this.points}\n .showGrid=${this.showGrid}\n .snapToGrid=${this.snapToGrid}\n .gridSize=${this.gridSize}\n .simplify=${this.simplify}\n .round=${this.round}\n ></ease-curve-toolbar>\n </div>\n\n <!-- <div class=\"curve-footer\">\n <ease-curve-output\n .easingType=${this.easingType}\n .points=${this.points}\n .name=${this.name}\n .simplify=${this.simplify}\n .round=${this.round}\n ></ease-curve-output>\n </div> -->\n </div>\n `;\n }\n})\nexport class Curve extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string>({ reflect: true, defaultValue: 'ease-custom' })\n accessor name!: string;\n\n @Prop<EasingType, Curve>({\n reflect: true,\n defaultValue: EasingType.CUBIC_BEZIER,\n onChange(this: Curve, next: EasingType, previous: EasingType) {\n if (next !== previous) {\n this.points = this.getDefaultPointsForType(next);\n this.focusedLinearIndex = null;\n }\n }\n })\n accessor easingType!: EasingType;\n\n @Prop<CubicBezierPoints | LinearPoints>({\n type: Object,\n reflect: false,\n defaultValue: () => {\n return { p1: { x: 0.25, y: 0.1 }, p2: { x: 0.25, y: 1 } };\n }\n })\n accessor points!: CubicBezierPoints | LinearPoints;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: true })\n accessor showGrid!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor snapToGrid!: boolean;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 8 })\n accessor gridSize!: number;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 0 })\n accessor simplify!: number;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 5 })\n accessor round!: number;\n\n @Prop<number | null>({ type: Number, reflect: false, defaultValue: null })\n accessor focusedLinearIndex: number | null = null;\n\n private getDefaultPointsForType(type: EasingType): CubicBezierPoints | LinearPoints {\n return type === EasingType.CUBIC_BEZIER\n ? { p1: { x: 0.25, y: 0.1 }, p2: { x: 0.25, y: 1 } }\n : [\n { x: 0, y: 0 },\n { x: 1, y: 1 }\n ];\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<EasingType>>>('easing-type-change', { target: 'light' })\n handleEasingTypeChange(event: CustomEvent<ControlEventDetail<EasingType>>): void {\n const { value } = event.detail;\n\n if (this.easingType === value) {\n return;\n }\n\n const previousType = this.easingType;\n const previousPoints = this.points;\n this.easingType = value;\n this.focusedLinearIndex = null;\n\n if (previousType === EasingType.CUBIC_BEZIER && value === EasingType.LINEAR) {\n if (previousPoints && !Array.isArray(previousPoints)) {\n const bezierPoints = previousPoints as CubicBezierPoints;\n const linearPoints = cubicBezierToLinearPoints(bezierPoints);\n this.points = linearPoints;\n this.emitPointsChange(linearPoints, event.detail.event);\n return;\n } else {\n this.points = this.getDefaultPointsForType(value);\n this.emitPointsChange(this.points, event.detail.event);\n return;\n }\n } else if (previousType === EasingType.LINEAR && value === EasingType.CUBIC_BEZIER) {\n this.points = this.getDefaultPointsForType(value);\n this.emitPointsChange(this.points, event.detail.event);\n return;\n } else {\n this.points = this.getDefaultPointsForType(value);\n this.emitPointsChange(this.points, event.detail.event);\n return;\n }\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<boolean>>>('grid-toggle', { target: 'light' })\n handleGridToggle(event: CustomEvent<ControlEventDetail<boolean>>): void {\n const { value } = event.detail;\n\n if (this.showGrid === value) {\n return;\n }\n\n this.showGrid = value;\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<boolean>>>('snap-toggle', { target: 'light' })\n handleSnapToggle(event: CustomEvent<ControlEventDetail<boolean>>): void {\n const { value } = event.detail;\n\n if (this.snapToGrid === value) {\n return;\n }\n\n this.snapToGrid = value;\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number>>>('grid-size-change', { target: 'light' })\n handleGridSizeChange(event: CustomEvent<ControlEventDetail<number>>): void {\n let { value } = event.detail;\n value = Math.max(1, Math.min(24, value));\n if (this.gridSize === value) {\n return;\n }\n this.gridSize = value;\n this.requestRender();\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number>>>('simplify-change', { target: 'light' })\n handleSimplifyChange(event: CustomEvent<ControlEventDetail<number>>): void {\n const { value } = event.detail;\n if (this.simplify === value) {\n return;\n }\n this.simplify = value;\n this.requestRender();\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number>>>('round-change', { target: 'light' })\n handleRoundChange(event: CustomEvent<ControlEventDetail<number>>): void {\n const { value } = event.detail;\n if (this.round === value) {\n return;\n }\n this.round = value;\n this.requestRender();\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>>('points-change', {\n target: 'light'\n })\n handlePointsChange(event: CustomEvent<ControlEventDetail<CubicBezierPoints | LinearPoints>>): void {\n const { value } = event.detail;\n this.points = value;\n\n if (Array.isArray(value)) {\n if (this.focusedLinearIndex !== null) {\n if (this.focusedLinearIndex >= value.length) {\n this.focusedLinearIndex = value.length - 1;\n }\n }\n } else {\n this.focusedLinearIndex = null;\n }\n }\n\n @Listen<Curve, KeyboardEvent>('keydown', { target: 'window', passive: false })\n handleKeyboardShortcuts(event: KeyboardEvent): void {\n if (event.defaultPrevented) {\n return;\n }\n\n const activeElement = event.target;\n\n if (\n activeElement instanceof HTMLInputElement ||\n activeElement instanceof HTMLTextAreaElement ||\n (activeElement instanceof HTMLElement && activeElement.isContentEditable)\n ) {\n return;\n }\n\n if (this.easingType !== EasingType.LINEAR || !Array.isArray(this.points)) {\n return;\n }\n\n const index = this.focusedLinearIndex;\n\n if (index === null) {\n return;\n }\n\n const lastIndex = this.points.length - 1;\n const clonedPoints: LinearPoints = this.points.map((point) => {\n return { ...point };\n });\n const point = clonedPoints[index];\n\n if (!point) {\n return;\n }\n\n const step = event.shiftKey ? 0.05 : 0.01;\n let handled = false;\n\n switch (event.key) {\n case 'ArrowLeft': {\n if (index <= 0 || index >= lastIndex) {\n break;\n }\n const previous = clonedPoints[index - 1];\n const next = clonedPoints[index + 1];\n\n if (!previous || !next) {\n break;\n }\n\n const minX = previous.x + MIN_LINEAR_DELTA;\n const maxX = next.x - MIN_LINEAR_DELTA;\n point.x = Math.min(Math.max(point.x - step, minX), maxX);\n handled = true;\n break;\n }\n case 'ArrowRight': {\n if (index <= 0 || index >= lastIndex) {\n break;\n }\n const previous = clonedPoints[index - 1];\n const next = clonedPoints[index + 1];\n\n if (!previous || !next) {\n break;\n }\n\n const minX = previous.x + MIN_LINEAR_DELTA;\n const maxX = next.x - MIN_LINEAR_DELTA;\n point.x = Math.min(Math.max(point.x + step, minX), maxX);\n handled = true;\n break;\n }\n case 'ArrowUp': {\n point.y = Math.min(Math.max(point.y + step, 0), 1);\n handled = true;\n break;\n }\n case 'ArrowDown': {\n point.y = Math.min(Math.max(point.y - step, 0), 1);\n handled = true;\n break;\n }\n case 'Delete':\n case 'Backspace': {\n if (clonedPoints.length <= MIN_LINEAR_POINTS || index <= 0 || index >= lastIndex) {\n break;\n }\n\n clonedPoints.splice(index, 1);\n\n const normalized = normalizeLinearPoints(clonedPoints);\n this.points = normalized;\n this.emitPointsChange(normalized, event);\n\n const nextFocus = index - 1;\n\n this.focusedLinearIndex = nextFocus;\n handled = true;\n break;\n }\n default:\n break;\n }\n\n if (handled && event.key !== 'Delete' && event.key !== 'Backspace') {\n const normalized = normalizeLinearPoints(clonedPoints);\n this.points = normalized;\n this.emitPointsChange(normalized, event);\n this.focusedLinearIndex = index;\n }\n\n if (handled) {\n event.preventDefault();\n }\n }\n\n @Listen<Curve, CustomEvent<ControlEventDetail<number | null>>>('linear-point-focus', { target: 'light' })\n handleLinearPointFocus(event: CustomEvent<ControlEventDetail<number | null>>): void {\n const { value } = event.detail;\n if (this.focusedLinearIndex === value) {\n return;\n }\n this.focusedLinearIndex = value ?? null;\n }\n\n private emitPointsChange(value: CubicBezierPoints | LinearPoints, sourceEvent?: Event): void {\n const detail: ControlEventDetail<CubicBezierPoints | LinearPoints> = {\n value,\n event: sourceEvent ?? new Event('points-change')\n };\n\n this.dispatchEvent(\n new CustomEvent('points-change', {\n detail,\n bubbles: true,\n composed: true\n })\n );\n }\n}\n\nimport './canvas';\nimport './canvas-controls';\nimport './controls';\nimport './output';\nimport './toolbar';\n\nexport {\n type CubicBezierPoints,\n type EasingData,\n EasingType,\n type LinearPoints,\n type Point\n} from './types';\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-button',\n autoSlot: true,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n :host([data-variant=\"headless\"]) {\n display: inline-flex;\n width: auto;\n }\n\n button {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-button-font-size, var(--ease-font-size-sm, 12px));\n font-weight: 550;\n color: var(--ease-button-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-button-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-button-radius, 5px);\n background-color: var(--ease-button-background, var(--color-gray-850));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-button-line-height, 14px);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n transition: color 0.2s, background-color 0.2s, scale 0.2s, box-shadow 0.2s;\n cursor: pointer;\n min-width: var(--ease-button-min-width, 88px);\n white-space: nowrap;\n overflow: hidden;\n position: relative;\n text-overflow: ellipsis;\n text-align: center;\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-full-width=\"true\"] {\n width: 100%;\n }\n\n &[data-block=\"icon\"] {\n --ease-icon-size: 16px;\n width: 28px;\n height: 28px;\n min-width: 28px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-gray-700);\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"] {\n --ease-icon-size: 16px;\n width: auto;\n height: auto;\n padding: 0;\n min-width: 0;\n margin: -1px;\n }\n }\n \n &[data-block=\"small\"] {\n padding: 5px 8px;\n font-size: 12px;\n line-height: 14px;\n border-radius: 5px;\n }\n \n &[data-block=\"large\"] {\n padding: 9px 12px;\n font-size: 13px;\n line-height: 14px;\n border-radius: 8px;\n }\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-825));\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"],\n &[data-variant=\"headless-muted\"] {\n background-color: transparent;\n box-shadow: none;\n min-width: 0;\n width: auto;\n padding: 0;\n transition: scale 0.2s, color 0.2s;\n\n &:hover,\n &:focus-visible {\n scale: 1.05;\n }\n\n &:active {\n scale: 0.95;\n }\n }\n\n &[data-variant=\"headless-muted\"] {\n color: var(--ease-button-color, var(--color-gray-600));\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n }\n\n &[data-variant=\"link\"] {\n background-color: transparent;\n box-shadow: none;\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-875));\n }\n }\n\n &[data-variant=\"primary\"] {\n color: var(--color-blue-100);\n font-weight: 450;\n border-radius: 36px;\n \n background: radial-gradient(217.29% 45.98% at 99.13% 4.17%, rgba(21, 24, 220, 0.40) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(104.75% 41.7% at 3.06% 100%, rgba(233, 208, 254, 0.30) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(30.53% 47.92% at 46.51% -14.58%, rgba(233, 208, 254, 0.60) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(22.57% 35.42% at 46.29% 112.5%, rgba(233, 208, 254, 0.20) 0%, rgba(21, 24, 220, 0.00) 100%), rgba(255, 255, 255, 0.12);\n background-repeat: no-repeat;\n\n box-shadow: \n 0px 1px 0px 0px rgba(255, 255, 255, 0.2), \n inset 0px 0px 50px 0px rgba(255, 255, 255, 0.02), \n inset 0px 0px 0px 1px rgba(255, 255, 255, 0.02), \n inset 0px 0px 4px 0px rgba(69, 40, 255, 0.4);\n\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n background-color: var(--color-white-2);\n box-shadow: inset 0px 0.5px 0.75px 0px var(--color-white-30);\n mix-blend-mode: overlay;\n pointer-events: none;\n z-index: 1;\n border-radius: inherit;\n }\n\n &:hover,\n &:focus-visible {\n filter: brightness(1.1);\n }\n }\n }\n `\n})\nexport class Button extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth: boolean = false;\n\n @Prop<'submit' | 'reset' | 'button'>({ type: String, reflect: true, defaultValue: 'button' })\n accessor type!: 'submit' | 'reset' | 'button';\n\n @Prop<'icon' | 'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'icon' | 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<'default' | 'primary' | 'headless' | 'headless-muted' | 'link'>({\n type: String,\n reflect: true,\n defaultValue: 'default'\n })\n accessor variant!: 'default' | 'primary' | 'headless' | 'headless-muted' | 'link';\n\n render(): TemplateResult {\n return html`\n <button\n type=${this.type}\n ?disabled=${this.disabled}\n data-variant=${this.variant}\n data-full-width=${this.fullWidth}\n data-pill=${this.pill}\n data-block=\"${this.block}\"\n >\n <slot></slot>\n </button>\n `;\n }\n}\n","/**\n * Standard control event detail interface for Leva/lil-gui style state aggregation.\n * All control components should dispatch events with this shape.\n */\nexport interface ControlEventDetail<TValue = unknown> {\n /** The control's name/identifier for state aggregation */\n name?: string;\n /** The current value of the control */\n value: TValue;\n /** The original DOM event that triggered this change */\n event: Event;\n}\n\n/** The standard event type for control value changes */\nexport const CONTROL_CHANGE_EVENT = 'control-change';\n\n/**\n * Dispatch a control change event with standard shape.\n * Events bubble and are composed (cross shadow DOM boundaries).\n *\n * @param host - The element dispatching the event\n * @param type - Event type (prefer CONTROL_CHANGE_EVENT for standard controls)\n * @param detail - Event detail with value and optional name\n *\n * @example\n * ```ts\n * dispatchControlEvent(this, CONTROL_CHANGE_EVENT, {\n * name: this.name,\n * value: this.value,\n * event: e\n * });\n * ```\n */\nexport const dispatchControlEvent = <THost extends HTMLElement, TValue>(\n host: THost,\n type: string,\n detail: ControlEventDetail<TValue>\n): void => {\n host.dispatchEvent(\n new CustomEvent<ControlEventDetail<TValue>>(type, {\n detail,\n bubbles: true,\n composed: true\n })\n );\n};\n\nexport const setBooleanAttribute = (element: Element | null | undefined, name: string, value: boolean): void => {\n if (!element) {\n return;\n }\n\n if (value) {\n element.setAttribute(name, '');\n } else {\n element.removeAttribute(name);\n }\n};\n\nexport const coerceNumber = (value: string): number | null => {\n if (value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n};\n\nexport const readControlValue = (element: ControlElement): string | null => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return String(element.value);\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked ? 'true' : 'false';\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-checkbox',\n styles: `\n .checkbox {\n display: table;\n border-radius: var(--ease-checkbox-radius, 5px);\n position: relative;\n\n svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n\n .tick {\n fill: none;\n stroke-width: 3px;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform-origin: 10.5px 16px;\n transform: scale(1) translateZ(0);\n }\n\n .dot {\n transform-origin: 10.5px 15.5px;\n transform: scale(1) translateZ(0);\n transform-box: fill-box;\n }\n\n .drop {\n transform-origin: 25px -1px;\n transform: scale(1) translateZ(0);\n opacity: 0;\n }\n }\n }\n\n [part=\"checkbox\"] {\n display: table;\n margin: 0;\n padding: 0;\n appearance: none;\n cursor: pointer;\n background: none;\n border: none;\n outline: none;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-checkbox-size, 24px);\n height: var(--ease-checkbox-size, 24px);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n\n .tick {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n\n .dot {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .tick {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked {\n animation: checkbox-border-fill 0.2s ease-out forwards, checkbox-morph 0.5s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked + svg {\n .tick {\n animation: checkbox-tick 0.65s ease-out forwards;\n }\n\n .dot {\n animation: checkbox-dot-move 0.6s ease-out forwards;\n }\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked {\n animation: checkbox-border-default 0.4s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked + svg {\n .tick {\n animation: checkbox-tick-default 0.2s ease-out forwards;\n }\n .dot {\n animation: checkbox-dot-hide 0.2s ease-out forwards;\n }\n }\n \n @keyframes checkbox-border-fill {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes checkbox-morph {\n 0%, 40% {\n border-radius: 5px 14px 5px 5px;\n }\n 100% {\n border-radius: 5px;\n }\n }\n\n @keyframes checkbox-tick {\n 0% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n 47% {\n stroke-dasharray: 14px 33px;\n stroke-dashoffset: 48px;\n }\n 100% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n }\n\n @keyframes checkbox-dot-move {\n 0%, 40% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n 100% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n }\n\n @keyframes checkbox-dot-hide {\n 0% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes checkbox-border-default {\n 0%,\n 40% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes checkbox-tick-default {\n 0% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n 100% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n }\n `,\n template(this: Checkbox) {\n return html`\n <button\n part=\"checkbox\"\n type=\"button\"\n role=\"checkbox\"\n aria-checked=${this.checked}\n ?disabled=${this.disabled}\n >\n <div class=\"checkbox\">\n <input\n part=\"control\"\n name=${this.name}\n value=${this.value}\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n type=\"checkbox\"\n />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <path class=\"tick\" d=\"M4.5 10L10.5 16L24.5 1\" />\n <circle class=\"dot\" cx=\"10.5\" cy=\"15.5\" r=\"1.5\" />\n <circle class=\"drop\" cx=\"25\" cy=\"-1\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur\n in=\"SourceGraphic\"\n stdDeviation=\"1.25\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\"\n result=\"gooey\"\n />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Checkbox extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const control = this.shadowRoot?.querySelector('[part=\"control\"]');\n const svg = this.shadowRoot?.querySelector('svg');\n if (!control || !svg) {\n return;\n }\n\n control.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n const duration = checked ? 650 : 400;\n\n control.classList.add(animClass);\n svg.classList.add(animClass);\n\n setTimeout(() => {\n control.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<Checkbox, MouseEvent, HTMLButtonElement>('click', {\n selector: 'button'\n })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'checkbox', { value: this.checked, event });\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype ChevronState = 'down' | 'up';\ntype ChevronPath = Record<ChevronState, string>;\n\n@Component({\n tag: 'ease-icon-chevron',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"chevron\"] {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconChevron extends HTMLElement {\n declare requestRender: () => void;\n\n accessor paths: ChevronPath = {\n down: 'M5 7L8 10L11 7',\n up: 'M5 9L8 6L11 9'\n };\n\n @Prop<ChevronState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'down',\n onAttributeChange(next: ChevronState, previous: ChevronState) {\n this.shadowRoot\n ?.querySelector<SVGPathElement>('path')\n ?.animate(\n [\n { d: `path('${(this as IconChevron).paths[previous]}')` },\n { d: `path('${(this as IconChevron).paths[next]}')` }\n ],\n {\n duration: 200,\n easing: 'cubic-bezier(0.25, 0, 0.5, 1)'\n }\n );\n }\n })\n accessor state!: ChevronState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"chevron\" viewBox=\"0 0 16 16\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg \">\n <path d=${this.paths[this.state]} />\n </svg>\n `;\n }\n}\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\nimport '../icons/animation/chevron';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ninterface OptionRecord {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\n\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-dropdown',\n styles: `\n :host {\n display: grid;\n width: 100%;\n }\n\n ease-popover {\n --ease-popover-content-min-width: var(--ease-dropdown-panel-min-width, anchor-size(width));\n --ease-popover-content-width: var(--ease-dropdown-panel-width, max-content);\n --ease-popover-content-max-width: var(--ease-dropdown-panel-max-width, none);\n }\n\n [part=\"trigger\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 8px;\n padding: var(--ease-dropdown-trigger-padding, 8px 8px 8px 12px);\n border-radius: var(--ease-dropdown-radius, var(--radii-md));\n background-color: var(--ease-dropdown-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-dropdown-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n box-sizing: border-box;\n font-size: var(--ease-dropdown-font-size, var(--ease-font-size, 13px));\n font-weight: var(--ease-dropdown-font-weight, 500);\n color: var(--ease-dropdown-color, var(--color-foreground));\n min-width: 0;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n text-align: left;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-dropdown-background-hover, var(--color-gray-825));\n }\n\n [part=\"trigger-icon\"] {\n display: block;\n margin: -1px 0 -1px -2px;\n }\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-block=\"small\"] {\n padding: 4px 8px 4px 4px;\n }\n\n &[data-headless=\"true\"] {\n background: transparent;\n box-shadow: none;\n padding: 0;\n border-radius: 0;\n gap: 4px;\n\n &:hover,\n &:focus-within {\n background: transparent;\n }\n }\n }\n\n input[part=\"trigger-input\"] {\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n width: fit-content;\n min-width: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n field-sizing: var(--ease-dropdown-field-sizing, fixed);\n }\n \n :host([open]) input[part=\"trigger-input\"] {\n cursor: text;\n }\n\n [part=\"trigger\"][data-placeholder=\"true\"],\n [part=\"trigger\"] [part=\"trigger-label\"][data-placeholder=\"true\"],\n input[part=\"trigger-input\"]::placeholder {\n color: var(--ease-dropdown-placeholder-color, var(--color-gray-600));\n }\n\n [part=\"trigger\"] [part=\"trigger-label\"] {\n flex-grow: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"content\"] {\n border-radius: var(--ease-dropdown-panel-radius, var(--ease-dropdown-radius, var(--radii-md)));\n background: var(--ease-dropdown-panel-background, var(--color-gray-875));\n border: none;\n outline: none;\n box-shadow: var(\n --ease-dropdown-panel-shadow,\n 0 5px 20px 0 var(--color-black-15),\n 0 1px 4px 0 var(--color-black-15),\n 0 0 0 1px var(--color-white-4) inset,\n 0 1px 0 0 var(--color-white-4) inset\n );\n background-clip: padding-box;\n border: 1px solid var(--ease-dropdown-panel-border-color, var(--color-gray-825));\n box-sizing: border-box;\n padding: var(--ease-dropdown-panel-padding, 4px);\n }\n \n [part=\"content\"] ::slotted(hr) {\n margin: 4px 0;\n height: 1px;\n background-color: var(--color-white-4);\n border: none;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"content\"] ::slotted(h4) {\n margin: 4px 0 8px 0 !important;\n font-size: var(--ease-dropdown-group-label-font-size, 11px);\n line-height: 1;\n padding: var(--ease-dropdown-group-label-padding, 0 8px);\n font-family: var(--ease-font-family, inherit);\n font-weight: 450;\n color: var(--ease-dropdown-group-label-color, var(--color-gray-700));\n display: block;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"section\"] {\n flex-grow: 1;\n min-width: max(100%, var(--ease-dropdown-min-width, 140px));\n display: grid;\n grid-gap: 3px;\n max-height: var(--ease-dropdown-max-height, auto);\n overflow-y: auto;\n overscroll-behavior: contain;\n container-type: inline-size;\n container-name: scroll-area;\n mask: linear-gradient(to bottom,\n #0000,\n #ffff var(--top-fade) calc(100% - var(--bottom-fade)),\n #0000\n );\n animation: scroll;\n animation-timeline: --scroll;\n scroll-timeline: --scroll y;\n scroll-snap-type: y mandatory;\n scrollbar-width: none;\n -ms-overflow-style: none;\n box-sizing: border-box;\n }\n\n [part=\"section\"]::-webkit-scrollbar {\n width: 0;\n height: 0;\n display: none;\n }\n\n @property --top-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @property --bottom-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @keyframes scroll {\n 0% {\n --bottom-fade: 16px;\n --top-fade: 0;\n }\n 10%,\n 100% {\n --top-fade: 16px;\n }\n 90% {\n --bottom-fade: 16px;\n }\n 100% {\n --bottom-fade: 0;\n }\n }\n\n ::slotted(button[slot=\"content\"]) {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-dropdown-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-dropdown-option-font-weight, 400);\n color: var(--ease-dropdown-option-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-dropdown-option-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-dropdown-option-radius, 5px);\n background-color: var(--ease-dropdown-option-background, var(--color-gray-875));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-option-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n cursor: pointer;\n width: 100%;\n text-align: left;\n }\n\n ::slotted(button[slot=\"content\"]:hover),\n ::slotted(button[slot=\"content\"]:focus-visible),\n ::slotted(button[slot=\"content\"][data-active=\"true\"]),\n ::slotted(button[slot=\"content\"][aria-selected=\"true\"]) {\n background-color: var(--ease-dropdown-option-background-active, var(--color-gray-825));\n color: var(--ease-dropdown-option-color-active, var(--color-white));\n }\n `\n})\nexport class Dropdown extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Dropdown).handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor headless = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor searchable = false;\n\n @Prop<'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<string>({\n reflect: true,\n defaultValue: 'auto',\n onChange(next) {\n (this as Dropdown).style.setProperty('--ease-dropdown-max-height', next ?? 'auto');\n }\n })\n accessor maxHeight: string = 'auto';\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor name: string | null = null;\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor value: string | null = null;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'placeholder',\n defaultValue: 'Select an option'\n })\n accessor placeholder: string | null = 'Select an option';\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n @Query<HTMLElement>('[part=\"trigger\"]')\n accessor trigger!: HTMLElement | null;\n\n @Query<HTMLInputElement>('input[part=\"trigger-input\"]')\n accessor searchInput!: HTMLInputElement | null;\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor panelContent!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: OptionRecord[] = [];\n #selectedLabel: string | null = null;\n #currentSlot: HTMLSlotElement | null = null;\n #pendingFocus: 'first' | 'last' | null = null;\n #optionsInitialized = false;\n #lastToggleOrigin: Event | null = null;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n this.#lastToggleOrigin = null;\n }\n\n afterRender(): void {\n const trigger = this.trigger;\n const ariaLabel = this.getAttribute('aria-label');\n\n if (trigger) {\n if (trigger instanceof HTMLButtonElement) {\n trigger.disabled = Boolean(this.disabled);\n }\n trigger.setAttribute('aria-expanded', this.open && !this.disabled ? 'true' : 'false');\n trigger.setAttribute('aria-haspopup', 'listbox');\n\n if (trigger instanceof HTMLButtonElement) {\n if (ariaLabel && ariaLabel.trim().length > 0) {\n trigger.setAttribute('aria-label', ariaLabel.trim());\n } else {\n trigger.removeAttribute('aria-label');\n }\n }\n }\n\n if (this.searchInput) {\n this.searchInput.disabled = Boolean(this.disabled);\n\n if (ariaLabel && ariaLabel.trim().length > 0) {\n this.searchInput.setAttribute('aria-label', ariaLabel.trim());\n } else {\n this.searchInput.removeAttribute('aria-label');\n }\n }\n\n const panel = this.panelContent;\n const isInteractive = this.open && !this.disabled;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'listbox');\n panel.setAttribute('aria-hidden', isInteractive ? 'false' : 'true');\n\n if (trigger) {\n trigger.setAttribute('aria-controls', panel.id);\n }\n } else if (trigger) {\n trigger.removeAttribute('aria-controls');\n }\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.#updateOptionSelectionState();\n }\n\n if (this.disabled && this.open) {\n this.#lastToggleOrigin = null;\n this.open = false;\n }\n }\n\n render(): TemplateResult {\n const placeholderActive = this.#isPlaceholderActive();\n\n return html`\n <ease-popover\n .placement=${this.placement}\n .open=${this.open && !this.disabled}\n >\n ${this.searchable ? this.#renderSearchTrigger(placeholderActive) : this.#renderButtonTrigger(placeholderActive)}\n <div\n part=\"content\"\n role=\"listbox\"\n tabindex=\"-1\"\n data-open=${this.open && !this.disabled ? 'true' : 'false'}\n ?hidden=${!this.open || this.disabled}\n @keydown=${this.#handlePanelKeydown}\n >\n <div part=\"section\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </ease-popover>\n `;\n }\n\n #renderButtonTrigger(placeholderActive: boolean) {\n return html`\n <button\n part=\"trigger\"\n slot=\"trigger\"\n type=\"button\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @keydown=${this.#handleTriggerKeydown}\n @click=${this.#handleTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <span part=\"trigger-label\" data-placeholder=${placeholderActive ? 'true' : 'false'}>\n ${this.#getTriggerLabel()}\n </span>\n\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </button>\n `;\n }\n\n #renderSearchTrigger(placeholderActive: boolean) {\n return html`\n <div\n part=\"trigger\"\n slot=\"trigger\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @click=${this.#handleSearchTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <input \n part=\"trigger-input\"\n type=\"text\"\n .value=${this.open ? (this.searchInput?.value ?? '') : this.#getTriggerLabel()}\n placeholder=${this.placeholder ?? ''}\n ?readonly=${!this.open}\n @input=${this.#handleSearchInput}\n @keydown=${this.#handleTriggerKeydown}\n />\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </div>\n `;\n }\n\n #handleSearchTriggerClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n\n if (!this.open) {\n this.toggle(true, event);\n\n if (this.searchInput) {\n this.searchInput.value = '';\n this.#filterOptions('');\n this.searchInput.focus();\n }\n } else {\n if (event.target !== this.searchInput) {\n this.toggle(false, event);\n }\n }\n };\n\n #handleSearchInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.#filterOptions(input.value);\n\n if (!this.open) {\n this.toggle(true, event);\n }\n };\n\n #filterOptions(query: string): void {\n const lowerQuery = query.toLowerCase();\n this.#options.forEach((option) => {\n const match = option.label.toLowerCase().includes(lowerQuery);\n if (match) {\n option.element.style.display = '';\n } else {\n option.element.style.display = 'none';\n }\n });\n }\n\n toggle(force?: boolean, originEvent?: Event): void {\n if (this.disabled) {\n return;\n }\n\n const current = this.open;\n const next = force ?? !current;\n\n if (current === next) {\n return;\n }\n\n this.#lastToggleOrigin = originEvent ?? null;\n this.open = next;\n\n if (!next) {\n this.#pendingFocus = null;\n // Reset filter when closing\n this.#filterOptions('');\n // Restore label in input if searchable\n if (this.searchable && this.searchInput) {\n this.searchInput.value = this.#getTriggerLabel();\n this.searchInput.blur(); // Blur to look like static text\n }\n }\n }\n\n handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#pendingFocus = null;\n }\n\n const origin = this.#lastToggleOrigin ?? new Event(next ? 'open' : 'close');\n this.#lastToggleOrigin = null;\n\n if (next) {\n if (this.searchable && this.searchInput) {\n this.searchInput.focus();\n } else {\n queueMicrotask(() => this.#focusActiveOption());\n }\n }\n\n dispatchControlEvent(this, 'toggle', { value: next, event: origin });\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Dropdown>({\n content: (host) => host.panelContent,\n triggers: (host) => [host.trigger, host.panelContent],\n disabled: (host) => host.disabled || !host.open\n })\n handleOutsideDismiss(event: Event): void {\n if (!this.open) {\n return;\n }\n\n this.toggle(false, event);\n }\n\n #handleTriggerKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#pendingFocus = 'first';\n this.toggle(true, event);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#pendingFocus = 'last';\n this.toggle(true, event);\n break;\n case 'Enter':\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case ' ': // Space\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case 'Escape':\n if (this.open) {\n event.preventDefault();\n this.toggle(false, event);\n }\n break;\n default:\n break;\n }\n };\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #handleTriggerClick = (event: Event): void => {\n this.toggle(!this.open, event);\n };\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: OptionRecord[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as OptionRecord['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.#updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n this.#selectedLabel = null;\n }\n\n #removeOptionListeners(options: OptionRecord[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n #updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n this.toggleAttribute('data-has-value', false);\n return;\n }\n\n let selectedLabel: string | null = null;\n const previousLabel = this.#selectedLabel;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n\n this.#selectedLabel = selectedLabel;\n const hasValue = Boolean(this.value && this.#selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n\n if (previousLabel !== this.#selectedLabel && typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n #isPlaceholderActive(): boolean {\n return !this.value || !this.#selectedLabel;\n }\n\n #getTriggerLabel(): string {\n if (this.#selectedLabel) {\n return this.#selectedLabel;\n }\n\n if (typeof this.placeholder === 'string' && this.placeholder.trim().length > 0) {\n return this.placeholder.trim();\n }\n\n return 'Select';\n }\n\n #focusActiveOption(): void {\n if (!this.open) {\n return;\n }\n\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n let target: OptionRecord | undefined = options[0];\n\n if (this.#pendingFocus === 'first') {\n target = options[0];\n } else if (this.#pendingFocus === 'last') {\n target = options[options.length - 1];\n } else if (this.#pendingFocus === null && this.value !== null) {\n const match = this.#findOptionByValue(this.value);\n if (match && match.element.style.display !== 'none') {\n target = match;\n }\n }\n\n if (target) {\n this.#focusOption(target);\n }\n this.#pendingFocus = null;\n }\n\n #focusOption(option: OptionRecord): void {\n this.#options.forEach((entry) => {\n entry.element.tabIndex = entry === option ? 0 : -1;\n });\n\n option.element.focus({ preventScroll: true });\n }\n\n #focusOptionByIndex(index: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const normalized = Math.max(0, Math.min(index, options.length - 1));\n const option = options[normalized];\n if (option) {\n this.#focusOption(option);\n }\n }\n\n #findOptionByValue(value: string | null): OptionRecord | undefined {\n if (value === null) {\n return undefined;\n }\n\n return this.#options.find((option) => option.value === value);\n }\n\n #moveFocus(step: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const activeElement = document.activeElement as HTMLElement | null;\n const currentIndex = options.findIndex((option) => option.element === activeElement);\n\n if (currentIndex === -1) {\n this.#focusOptionByIndex(step > 0 ? 0 : options.length - 1);\n return;\n }\n\n const nextIndex = (currentIndex + step + options.length) % options.length;\n this.#focusOptionByIndex(nextIndex);\n }\n\n #handlePanelKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.#focusOptionByIndex(0);\n break;\n case 'End':\n event.preventDefault();\n this.#focusOptionByIndex(this.#options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.#activateFocusedOption(event);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.toggle(false, event);\n this.trigger?.focus();\n break;\n default:\n break;\n }\n };\n\n #activateFocusedOption(event: Event): void {\n const active = this.#options.find((option) => option.element === document.activeElement);\n\n if (active) {\n this.#selectOption(active.value, active.label, event);\n }\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n if (this.disabled) {\n return;\n }\n\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n this.#selectedLabel = label;\n this.#updateOptionSelectionState();\n\n this.toggle(false, originEvent);\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n\n if (!this.searchable) {\n queueMicrotask(() => this.trigger?.focus());\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-input',\n shadowMode: 'open',\n autoSlot: true,\n styles: `\n :host {\n display: contents;\n cursor: text;\n }\n\n @keyframes custom-caret {\n 0%,\n 100% {\n caret-color: transparent;\n }\n 33.33%,\n 66.66% {\n caret-color: var(--color-blue-300);\n }\n }\n\n [part=\"container\"] {\n display: grid;\n align-items: center;\n text-align: inherit;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n padding: var(--ease-input-padding, 8px);\n border-radius: var(--ease-input-radius, var(--radii-md));\n background-color: var(--ease-input-background, var(--color-gray-875));\n cursor: text;\n animation: custom-caret 1s infinite;\n caret-animation: manual;\n transition: background-color 0.2s;\n box-shadow: var(\n --ease-input-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n &:not([data-has-prefix]):not([data-has-suffix]) {\n padding: var(--ease-input-padding, 8px 12px);\n }\n\n &:has(input:disabled) {\n cursor: not-allowed;\n opacity: 0.75;\n }\n\n &:not(:has(input:disabled)) {\n\n &:hover {\n background-color: var(--ease-input-background-hover, var(--color-gray-850));\n }\n\n &:has(input:focus-visible) {\n background-color: var(--ease-input-background-focus, var(--color-gray-825));\n }\n\n }\n\n &[data-has-prefix][data-has-suffix] {\n padding: var(--ease-input-padding, 0);\n grid-template-columns: 30px 1fr 30px;\n }\n\n &[data-has-prefix]:not([data-has-suffix]) {\n padding-right: var(--ease-input-padding, 12px);\n grid-template-columns: 30px 1fr;\n }\n\n &[data-has-suffix]:not([data-has-prefix]) {\n padding-left: var(--ease-input-padding, 12px);\n grid-template-columns: 1fr 30px;\n }\n\n &[data-headless=\"true\"] {\n background-color: transparent;\n box-shadow: none;\n border: none;\n padding: 0;\n margin: 0;\n outline: none;\n border-radius: 0;\n }\n }\n\n ::slotted(button) {\n --ease-icon-size: 12px;\n width: 30px;\n height: 30px;\n appearance: none;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 0;\n margin: 0;\n line-height: 14px;\n transition: color 0.2s;\n cursor: pointer;\n display: grid;\n place-items: center;\n color: var(--color-gray-600);\n transition: color 0.2s;\n\n &:hover,\n &:focus-visible {\n color: var(--color-blue-100);\n }\n\n &.isActive {\n animation: blink .6s forwards;\n }\n\n @keyframes blink {\n 50% {\n background-color: var(--color-white-8);\n }\n }\n }\n\n ::slotted(button[slot=\"prefix\"]) {\n border-radius: var(--radii-md) 0 0 var(--radii-md);\n border-right: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n ::slotted([slot=\"prefix\"]:not(button)) {\n margin: calc(var(--ease-input-padding, 8px) * -1);\n margin-right: 0;\n margin-left: 0;\n }\n\n ::slotted(button[slot=\"suffix\"]) {\n border-radius: 0 var(--radii-md) var(--radii-md) 0;\n border-left: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n input {\n font-family: inherit;\n font-optical-sizing: auto;\n font-size: var(--ease-input-font-size, var(--ease-font-size, 13px));\n appearance: none;\n -moz-appearance: textfield;\n font-weight: var(--ease-input-font-weight, 500);\n color: var(--ease-input-color, var(--color-blue-100));\n min-width: 0;\n cursor: inherit;\n text-align: inherit;\n padding: 0;\n background-color: transparent;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-input-line-height, 14px);\n transition: color 0.2s;\n\n &::placeholder {\n color: var(--ease-input-placeholder-color, var(--color-gray-600));\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n `,\n template(this: Input) {\n return html`\n <div part=\"container\" data-headless=${Boolean(this.headless)}>\n <slot name=\"prefix\" part=\"prefix\"></slot>\n <input part=\"control\" .disabled=${Boolean(this.disabled)} ?disabled=${Boolean(this.disabled)} ?aria-disabled=${Boolean(this.disabled)} />\n \n <slot name=\"suffix\" part=\"suffix\"></slot>\n </div>\n `;\n }\n})\nexport class Input extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor placeholder!: string | null;\n\n @Prop<string>({ reflect: true, defaultValue: 'text' })\n accessor type!: string;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor headless = false;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n private updatePrefixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const prefixSlot = this.shadowRoot?.querySelector('slot[name=\"prefix\"]') as HTMLSlotElement;\n const hasPrefix = Boolean(prefixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-prefix', hasPrefix);\n }\n\n private updateSuffixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const suffixSlot = this.shadowRoot?.querySelector('slot[name=\"suffix\"]') as HTMLSlotElement;\n const hasSuffix = Boolean(suffixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-suffix', hasSuffix);\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? '';\n\n if (control.value !== value) {\n control.value = value;\n }\n\n control.type = this.type ?? 'text';\n control.placeholder = this.placeholder ?? '';\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n this.updatePrefixAttribute();\n this.updateSuffixAttribute();\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"prefix\"]' })\n onPrefixSlotChange(): void {\n this.updatePrefixAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"suffix\"]' })\n onSuffixSlotChange(): void {\n this.updateSuffixAttribute();\n }\n\n @Listen<Input, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'input', { value: this.value ?? '', event });\n }\n\n @Listen<Input, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'change', { value: this.value ?? '', event });\n }\n}\n","export interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface HSV {\n h: number;\n s: number;\n v: number;\n}\n\nexport interface HSL {\n h: number;\n s: number;\n l: number;\n}\n\nexport type ColorFormat = 'hex' | 'rgb' | 'hsl' | 'hsb';\n\nconst clamp01 = (value: number) => Math.max(0, Math.min(1, value));\n\nexport function hsvToRgb(h: number, s: number, v: number): RGB {\n let hue = ((h % 360) + 360) % 360;\n hue /= 60;\n\n const saturation = clamp01(s);\n const value = clamp01(v);\n const c = value * saturation;\n const x = c * (1 - Math.abs((hue % 2) - 1));\n const m = value - c;\n\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (hue < 1) {\n r = c;\n g = x;\n } else if (hue < 2) {\n r = x;\n g = c;\n } else if (hue < 3) {\n g = c;\n b = x;\n } else if (hue < 4) {\n g = x;\n b = c;\n } else if (hue < 5) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n };\n}\n\nexport function rgbToHsv(r: number, g: number, b: number): HSV {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const delta = max - min;\n\n let h = 0;\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n if (delta !== 0) {\n switch (max) {\n case rn:\n h = (gn - bn) / delta + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / delta + 2;\n break;\n case bn:\n h = (rn - gn) / delta + 4;\n break;\n default:\n break;\n }\n\n h *= 60;\n }\n\n return { h, s, v };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (component: number) => component.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase();\n}\n\nexport function hexToRgb(hex: string): RGB | null {\n let normalized = hex.trim();\n\n if (/^#([0-9a-f]{3})$/i.test(normalized)) {\n normalized = `#${normalized[1]}${normalized[1]}${normalized[2]}${normalized[2]}${normalized[3]}${normalized[3]}`;\n }\n\n const match = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalized);\n\n if (!match || !match[1] || !match[2] || !match[3]) {\n return null;\n }\n\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16)\n };\n}\n\nexport function hexToHsv(hex: string): HSV | null {\n const rgb = hexToRgb(hex);\n return rgb ? rgbToHsv(rgb.r, rgb.g, rgb.b) : null;\n}\n\nexport function hsvToHex(h: number, s: number, v: number): string {\n const rgb = hsvToRgb(h, s, v);\n return rgbToHex(rgb.r, rgb.g, rgb.b);\n}\n\nexport function isValidHex(hex: string): boolean {\n return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(hex.trim());\n}\n\nexport function getLuminance(r: number, g: number, b: number): number {\n return (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n}\n\nexport function isLightColor(r: number, g: number, b: number): boolean {\n return getLuminance(r, g, b) > 0.5;\n}\n\nexport function hsvToHsl(h: number, s: number, v: number): HSL {\n const l = v * (1 - s / 2);\n const sl = l === 0 || l === 1 ? 0 : (v - l) / Math.min(l, 1 - l);\n return { h, s: sl, l };\n}\n\nexport function hslToHsv(h: number, s: number, l: number): HSV {\n const v = l + s * Math.min(l, 1 - l);\n const sv = v === 0 ? 0 : 2 * (1 - l / v);\n return { h, s: sv, v };\n}\n\nexport function formatColor(hsv: HSV, format: ColorFormat, alpha = 1): string {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return hsvToHex(h, s, v);\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%, ${alpha})`;\n }\n case 'hsb':\n return `hsb(${Math.round(h)}, ${Math.round(s * 100)}%, ${Math.round(v * 100)}%)`;\n default:\n return hsvToHex(h, s, v);\n }\n}\n\nexport interface ColorComponents {\n labels: string[];\n values: (string | number)[];\n max: number[];\n suffix: string[];\n}\n\nexport function getColorComponents(hsv: HSV, format: ColorFormat): ColorComponents {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return {\n labels: ['R', 'G', 'B'],\n values: [rgb.r, rgb.g, rgb.b],\n max: [255, 255, 255],\n suffix: ['', '', '']\n };\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return {\n labels: ['H', 'S', 'L'],\n values: [Math.round(hsl.h), Math.round(hsl.s * 100), Math.round(hsl.l * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n }\n case 'hsb':\n return {\n labels: ['H', 'S', 'B'],\n values: [Math.round(h), Math.round(s * 100), Math.round(v * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n default:\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n }\n}\n\nexport function updateHsvFromComponents(hsv: HSV, format: ColorFormat, index: number, value: number | string): HSV {\n const newHsv = { ...hsv };\n\n switch (format) {\n case 'hex': {\n if (typeof value === 'string' && isValidHex(value)) {\n const parsed = hexToHsv(value);\n if (parsed) {\n return parsed;\n }\n }\n break;\n }\n case 'rgb': {\n const rgb = hsvToRgb(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [rgb.r, rgb.g, rgb.b];\n vals[index] = Math.max(0, Math.min(255, Number(value)));\n return rgbToHsv(vals[0], vals[1], vals[2]);\n }\n case 'hsl': {\n const hsl = hsvToHsl(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [hsl.h, hsl.s * 100, hsl.l * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return hslToHsv(vals[0], vals[1] / 100, vals[2] / 100);\n }\n case 'hsb': {\n const vals: [number, number, number] = [hsv.h, hsv.s * 100, hsv.v * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return { h: vals[0], s: vals[1] / 100, v: vals[2] / 100 };\n }\n }\n\n return newHsv;\n}\n\nexport const COLOR_FORMATS: ColorFormat[] = ['hex', 'rgb', 'hsl', 'hsb'];\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrows-vertical',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 24px);\n height: var(--ease-icon-size, 24px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9.00006L11.1161 5.88394C11.6043 5.39578 12.3957 5.39578 12.8839 5.88394L16 9.00006M8 15.0001L11.1161 18.1162C11.6043 18.6043 12.3957 18.6043 12.8839 18.1162L16 15.0001\" />\n </svg>\n `;\n }\n})\nexport class IconArrowsVertical extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-picker',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"picker\"] {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.25;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg part=\"picker\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 3.50003L8.5 7.00003M2.14645 7.85358L7.5 2.50003C8.05228 1.94774 8.94772 1.94774 9.5 2.50003C10.0523 3.05231 10.0523 3.94774 9.5 4.50003L4.14645 9.85358C4.05268 9.94735 3.9255 10 3.79289 10H2.5C2.22386 10 2 9.77617 2 9.50003V8.20714C2 8.07453 2.05268 7.94735 2.14645 7.85358Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n }\n})\nexport class IconPicker extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent } from '../shared';\nimport {\n COLOR_FORMATS,\n type ColorFormat,\n getColorComponents,\n type HSV,\n hexToHsv,\n hsvToHex,\n hsvToRgb,\n isLightColor,\n isValidHex,\n updateHsvFromComponents\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport { styleMap } from '~/utils/template-helpers';\nimport '../icons/interface/arrows-vertical';\nimport '../icons/interface/picker';\n\n@Component({\n tag: 'ease-color-picker',\n autoSlot: false,\n styles: `\n :host {\n display: grid;\n grid-gap: 8px;\n user-select: none;\n -webkit-user-select: none;\n\n --ease-color-picker-width: 180px;\n }\n\n [part=\"saturation\"] {\n position: relative;\n width: 100%;\n height: 124px;\n cursor: pointer;\n background-image: linear-gradient(to top, black, transparent), linear-gradient(to right, white, transparent);\n border-radius: 7px;\n touch-action: none;\n }\n\n [part=\"saturation-handle\"] {\n position: absolute;\n width: 10px;\n height: 10px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"hue\"] {\n position: relative;\n height: 8px;\n align-self: center;\n flex-grow: 1;\n cursor: pointer;\n border-radius: 9px;\n background-image: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);\n touch-action: none;\n }\n\n [part=\"hue-handle\"] {\n position: absolute;\n top: 0;\n width: 8px;\n height: 8px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"preview\"] {\n position: relative;\n width: 20px;\n height: 20px;\n border-radius: 5px;\n box-shadow: inset 0 0 0 .75px var(--color-blue-80);\n display: grid;\n place-items: center;\n\n &[data-eyedropper] {\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n ease-icon-picker {\n scale: 1.1;\n }\n }\n\n ease-icon-picker {\n color: var(--icon-color, var(--color-blue-100));\n transition: scale 0.2s, color 0.15s;\n filter: drop-shadow(0 0 2px var(--color-black-15));\n }\n }\n }\n\n [part=\"toolbar\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n position: relative;\n z-index: 1;\n }\n\n [part=\"toolbar\"] ease-button {\n padding: 4px;\n width: max-content;\n }\n\n [part=\"format-container\"] {\n display: grid;\n grid-template-columns: 30px 1fr;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-inputs\"] {\n padding: 2px 4px;\n width: 100%;\n border-radius: var(--ease-color-picker-format-radius, var(--radii-md));\n background-color: var(--ease-color-picker-format-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-color-picker-format-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n box-sizing: border-box;\n display: flex;\n justify-content: space-around;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-color-picker-format-background-hover, var(--color-gray-825));\n }\n }\n\n [part=\"format-input\"] {\n appearance: none;\n -moz-appearance: textfield;\n cursor: pointer;\n box-sizing: border-box;\n font-size: var(--ease-color-picker-format-font-size, 11px);\n font-weight: 500;\n color: var(--color-gray-600);\n min-width: 0;\n box-sizing: border-box;\n border: none;\n outline: none;\n padding: 4px;\n margin: 0;\n background-color: transparent;\n line-height: 12px;\n transition: color 0.2s;\n width: 100%;\n text-align: center;\n font-optical-sizing: auto;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &:hover,\n &:focus-within {\n color: var(--color-blue-100);\n }\n\n &::placeholder {\n color: var(--color-gray-800);\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n [part=\"color-container\"] {\n display: grid;\n grid-template-columns: 1fr 20px;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-trigger\"] {\n --ease-icon-size: var(--ease-color-picker-format-icon-size, 10px);\n\n display: flex;\n align-items: center;\n gap: 2px;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-optical-sizing: auto;\n font-size: var(--ease-color-picker-format-trigger-font-size, 10px);\n font-weight: 500;\n color: var(--color-gray-400);\n cursor: pointer;\n transition: color 0.15s;\n overflow: hidden;\n position: relative;\n height: 14px;\n\n &:hover {\n color: var(--color-gray-200);\n }\n\n ease-icon-arrows-vertical {\n color: var(--color-gray-600);\n flex-shrink: 0;\n }\n }\n\n [part=\"format-label\"] {\n display: inline-block;\n }\n\n [part=\"format-label\"][data-animating=\"out\"] {\n animation: formatOut 0.15s ease-in forwards;\n }\n\n [part=\"format-label\"][data-animating=\"in\"] {\n animation: formatIn 0.15s ease-out forwards;\n }\n\n @keyframes formatOut {\n 0% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n 100% {\n transform: translateY(6px) scale(0.8);\n opacity: 0;\n }\n }\n\n @keyframes formatIn {\n 0% {\n transform: translateY(-6px) scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n }\n\n `,\n template(this: ColorPicker) {\n const { h, s, v } = this.hsv;\n const pureHue = hsvToRgb(h, 1, 1);\n const currentRgb = hsvToRgb(h, s, v);\n const saturationBg = `rgb(${pureHue.r}, ${pureHue.g}, ${pureHue.b})`;\n const huePercent = h / 360;\n const vInverted = 1 - v;\n // Position handles so they stay within container bounds (handle is 10px)\n const saturationHandleStyles = {\n left: `calc(${s * 100}% - ${s * 10}px)`,\n top: `calc(${vInverted * 100}% - ${vInverted * 10}px)`\n } as const;\n const hueHandleStyles = {\n left: `calc(${huePercent * 100}% - ${huePercent * 10}px)`\n } as const;\n const isLight = isLightColor(currentRgb.r, currentRgb.g, currentRgb.b);\n const hasEyeDropper = 'EyeDropper' in window;\n const previewStyles = {\n backgroundColor: this.value,\n '--icon-color': isLight ? 'var(--color-gray-900)' : 'var(--color-blue-100)'\n } as const;\n const components = getColorComponents(this.hsv, this.format);\n\n return html`\n <div \n part=\"saturation\" \n style=${styleMap({ backgroundColor: saturationBg })}\n @pointerdown=${this.handleSaturationPointerDown}\n @pointermove=${this.handleSaturationPointerMove}\n @pointerup=${this.handleSaturationPointerUp}\n @pointercancel=${this.handleSaturationPointerUp}\n >\n <div part=\"saturation-handle\" style=${styleMap(saturationHandleStyles)}></div>\n </div>\n <div part=\"color-container\">\n <div \n part=\"hue\"\n @pointerdown=${this.handleHuePointerDown}\n @pointermove=${this.handleHuePointerMove}\n @pointerup=${this.handleHuePointerUp}\n @pointercancel=${this.handleHuePointerUp}\n >\n <div part=\"hue-handle\" style=${styleMap(hueHandleStyles)}></div>\n </div>\n\n <div \n part=\"preview\" \n style=${styleMap(previewStyles)}\n ?data-eyedropper=${hasEyeDropper}\n @click=${hasEyeDropper ? this.handleEyeDropperClick : null}\n >\n ${hasEyeDropper ? html`<ease-icon-picker></ease-icon-picker>` : null}\n </div>\n </div>\n <div part=\"format-container\">\n <div part=\"format-trigger\" @click=${this.handleFormatCycle}>\n <span part=\"format-label\" data-animating=${this.formatAnimating}>${this.format.toUpperCase()}</span>\n <ease-icon-arrows-vertical />\n </div>\n <div part=\"format-inputs\">\n ${\n this.format === 'hex'\n ? html`\n <input \n part=\"format-input\" \n data-hex\n type=\"text\" \n .value=${components.values[0]}\n @input=${(e: Event) => this.handleComponentChange(0, (e.target as HTMLInputElement).value)}\n />\n `\n : components.labels.map(\n (_, i) => html`\n <input \n part=\"format-input\" \n type=\"number\" \n min=\"0\"\n max=${components.max[i]}\n .value=${String(components.values[i])}\n @input=${(e: Event) => this.handleComponentChange(i, Number((e.target as HTMLInputElement).value))}\n />\n `\n )\n }\n </div>\n </div>\n <div part=\"toolbar\">\n <ease-button variant=\"headless-muted\" @click=${this.handleCancelButtonClick}>Cancel</ease-button>\n <ease-button variant=\"headless\" @click=${this.handleApplyButtonClick}>Apply</ease-button>\n </div>\n `;\n }\n})\nexport class ColorPicker extends HTMLElement {\n declare requestRender: () => void;\n\n private hsv: HSV = { h: 0, s: 1, v: 1 };\n private originalValue: string = '#FF0000';\n private format: ColorFormat = 'hex';\n formatAnimating: 'out' | 'in' | 'none' = 'none';\n #isDraggingSaturation = false;\n #isDraggingHue = false;\n #activeSaturationPointer: number | null = null;\n #activeHuePointer: number | null = null;\n isInternalUpdate = false;\n\n @Query('[part=\"saturation\"]') accessor saturationArea!: HTMLElement | null;\n @Query('[part=\"hue\"]') accessor hueArea!: HTMLElement | null;\n @Query<HTMLInputElement>('[part=\"hex-input\"]') accessor hexInput!: HTMLInputElement | null;\n\n @Prop({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(this: ColorPicker, value: string | null) {\n if (!this.isInternalUpdate) {\n this.updateFromHex(value ?? '#FF0000');\n }\n }\n })\n accessor value!: string;\n\n connectedCallback(): void {\n this.originalValue = this.value;\n this.updateFromHex(this.value);\n }\n\n private updateFromHex(hex: string): void {\n if (!isValidHex(hex)) {\n return;\n }\n\n const hsv = hexToHsv(hex);\n\n if (hsv) {\n this.hsv = hsv;\n }\n }\n\n #updateValue(event: Event | null): void {\n const newValue = hsvToHex(this.hsv.h, this.hsv.s, this.hsv.v);\n\n if (this.value !== newValue) {\n this.isInternalUpdate = true;\n this.value = newValue;\n this.isInternalUpdate = false;\n\n if (this.hexInput && document.activeElement !== this.hexInput) {\n this.hexInput.value = newValue;\n }\n\n if (event) {\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n }\n }\n\n readonly handleSaturationPointerDown = (event: PointerEvent): void => {\n if (!this.saturationArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingSaturation = true;\n this.#activeSaturationPointer = event.pointerId;\n this.saturationArea.setPointerCapture(event.pointerId);\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n event.preventDefault();\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n this.#isDraggingSaturation = false;\n this.#activeSaturationPointer = null;\n\n if (this.saturationArea?.hasPointerCapture(event.pointerId)) {\n this.saturationArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateSaturationValue(event: PointerEvent): void {\n if (!this.saturationArea) {\n return;\n }\n const rect = this.saturationArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n const y = Math.max(0, Math.min(rect.height, event.clientY - rect.top));\n\n this.hsv.s = x / rect.width;\n this.hsv.v = 1 - y / rect.height;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHuePointerDown = (event: PointerEvent): void => {\n if (!this.hueArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingHue = true;\n this.#activeHuePointer = event.pointerId;\n this.hueArea.setPointerCapture(event.pointerId);\n this.updateHue(event);\n };\n\n readonly handleHuePointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n event.preventDefault();\n this.updateHue(event);\n };\n\n readonly handleHuePointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n this.#isDraggingHue = false;\n this.#activeHuePointer = null;\n\n if (this.hueArea?.hasPointerCapture(event.pointerId)) {\n this.hueArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateHue(event: PointerEvent): void {\n if (!this.hueArea) {\n return;\n }\n const rect = this.hueArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n\n this.hsv.h = (x / rect.width) * 360;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHexInputChange = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n const newValue = input.value;\n\n if (isValidHex(newValue)) {\n this.updateFromHex(newValue);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n } else if (this.hexInput) {\n this.hexInput.value = this.value;\n }\n };\n\n readonly handleComponentChange = (index: number, value: number | string): void => {\n this.hsv = updateHsvFromComponents(this.hsv, this.format, index, value);\n this.#updateValue(null);\n this.requestRender();\n };\n\n readonly handleFormatChange = (format: ColorFormat): void => {\n this.format = format;\n this.requestRender();\n };\n\n readonly handleFormatCycle = (): void => {\n // Start exit animation\n this.formatAnimating = 'out';\n this.requestRender();\n\n // After exit animation, change format and start enter animation\n setTimeout(() => {\n const currentIndex = COLOR_FORMATS.indexOf(this.format);\n const nextIndex = (currentIndex + 1) % COLOR_FORMATS.length;\n this.format = COLOR_FORMATS[nextIndex] as ColorFormat;\n this.formatAnimating = 'in';\n this.requestRender();\n\n // Clear animation state after enter animation\n setTimeout(() => {\n this.formatAnimating = 'none';\n this.requestRender();\n }, 150);\n }, 150);\n };\n\n readonly handleCancelButtonClick = (event: Event): void => {\n this.updateFromHex(this.originalValue);\n this.isInternalUpdate = true;\n this.value = this.originalValue;\n this.isInternalUpdate = false;\n this.requestRender();\n dispatchControlEvent(this, 'cancel', { value: this.originalValue, event });\n };\n\n readonly handleApplyButtonClick = (event: Event): void => {\n this.originalValue = this.value;\n dispatchControlEvent(this, 'apply', { value: this.value, event });\n };\n\n readonly handleEyeDropperClick = async (event: Event): Promise<void> => {\n if (!('EyeDropper' in window)) {\n return;\n }\n\n try {\n const eyeDropper = new (\n window as typeof window & { EyeDropper: new () => { open: () => Promise<{ sRGBHex: string }> } }\n ).EyeDropper();\n const result = await eyeDropper.open();\n\n if (result.sRGBHex) {\n this.updateFromHex(result.sRGBHex);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n } catch {\n // User cancelled or API error - silently ignore\n }\n };\n}\n\nexport default {\n ColorPicker\n};\n","import type { Placement } from '~/elements/popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../dropdown';\nimport '../input';\nimport './picker';\n\nimport { isValidHex } from './utils';\n\nimport { styleMap } from '~/utils/template-helpers';\n\n@Component({\n tag: 'ease-color-input',\n styles: `\n :host {\n display: block;\n position: relative;\n }\n\n ease-dropdown {\n --ease-dropdown-panel-min-width: auto;\n --ease-dropdown-panel-width: max-content;\n --ease-dropdown-panel-max-width: max-content;\n }\n\n :host(:not([custom-trigger])) ease-input {\n --ease-input-padding: 0 4px 0 4px;\n display: block;\n width: 76px;\n cursor: pointer;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &::part(control) {\n margin-left: -12px;\n cursor: pointer;\n }\n }\n\n ease-dropdown::part(trigger):disabled {\n cursor: default;\n opacity: 0.75;\n }\n\n :host(:not([custom-trigger])) [slot=\"prefix\"] {\n display: block;\n width: 14px;\n height: 14px;\n margin-left: -4px;\n border-radius: 4px;\n box-shadow: inset 0 0 0 1px var(--color-white-10);\n }\n\n [part=\"value-text\"] {\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n ease-dropdown::part(content) {\n padding: var(--ease-color-input-dropdown-padding, 12px 12px 8px 12px);\n overflow: visible;\n }\n\n ::slotted([slot=\"trigger\"]) {\n cursor: pointer;\n }\n `\n})\nexport class ColorInput extends HTMLElement {\n declare requestRender: () => void;\n\n #hasCustomTrigger = false;\n\n @Query('ease-dropdown') accessor dropdown!: (HTMLElement & { open: boolean }) | null;\n\n @Prop<string, ColorInput>({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(next) {\n if (next && isValidHex(next)) {\n const normalized = next.toUpperCase();\n if (this.value !== normalized) {\n this.value = normalized;\n }\n } else if (!next) {\n this.value = '#000000';\n }\n }\n })\n accessor value!: string;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n connectedCallback(): void {\n this.#hasCustomTrigger = this.querySelector('[slot=\"trigger\"]') !== null;\n setBooleanAttribute(this, 'custom-trigger', this.#hasCustomTrigger);\n }\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n #renderDefaultTrigger(): TemplateResult {\n const swatchStyle = {\n backgroundColor: this.value\n } as const;\n\n return html`\n <div slot=\"trigger\" part=\"trigger-content\">\n <ease-input part=\"input\" type=\"text\" .value=${this.value} @change=${this.#handleInputChange} headless>\n <div slot=\"prefix\" style=${styleMap(swatchStyle)}></div>\n </ease-input>\n </div>\n `;\n }\n\n render(): TemplateResult {\n return html`\n <ease-dropdown .disabled=${this.disabled} .placement=${this.placement}>\n ${this.#hasCustomTrigger ? html`<slot name=\"trigger\" slot=\"trigger\"></slot>` : this.#renderDefaultTrigger()}\n <ease-color-picker slot=\"content\"\n data-select-ignore\n .value=${this.value}\n @input=${this.#handlePickerInput}\n @change=${this.#handlePickerChange}\n @cancel=${this.#handlePickerCancel}\n @apply=${this.#handlePickerApply}\n ></ease-color-picker>\n </ease-dropdown>\n `;\n }\n\n #handleInputChange = (event: Event): void => {\n this.value = (event.target as HTMLInputElement).value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerInput = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerChange = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n #handlePickerCancel = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n this.requestRender();\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n\n #handlePickerApply = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-field',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n [part=\"field\"] {\n display: grid;\n grid-template-columns: var(--ease-field-label-width, 36%) auto;\n column-gap: var(--ease-field-column-gap, 12px);\n row-gap: var(--ease-field-row-gap, 6px);\n align-items: center;\n width: 100%;\n min-height: var(--ease-field-min-height, 30px);\n margin: 0;\n padding: 0;\n }\n\n :host([full-width]) [part=\"field\"] {\n grid-template-columns: 1fr;\n }\n\n label {\n grid-column: 1;\n font-size: var(--ease-field-label-font-size, var(--ease-font-size-sm, 12px));\n line-height: var(--ease-field-label-line-height, 1.25);\n font-weight: var(--ease-field-label-font-weight, 400);\n text-wrap: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-left: var(--ease-field-label-padding-left, 4px);\n box-sizing: border-box;\n display: block;\n max-width: 100%;\n color: var(--ease-field-label-color, var(--color-gray-600));\n }\n\n [part=\"content\"] {\n grid-column: 2;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n :host([full-width]) [part=\"content\"] {\n grid-column: 1;\n align-items: stretch;\n }\n `,\n template(this: Field) {\n return html`\n <div part=\"field\">\n <label>\n ${this.label ?? ''}\n </label>\n\n <div part=\"content\" class=${this.fullWidth ? 'full-width' : ''}>\n <slot></slot>\n </div>\n </div>\n `;\n }\n})\nexport class Field extends HTMLElement {\n @Prop<string | null>({ reflect: true })\n accessor label!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth = false;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-clear',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"clear\"] {\n & > path {\n\n &:first-child {\n translate: var(--ease-icon-clear-path-translate, 0);\n transition: translate var(--ease-icon-clear-path-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-path-delay, 0s);\n }\n\n &:not(:first-child) {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-clear-lines-offset, 100);\n transition: stroke-dashoffset var(--ease-icon-clear-lines-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-lines-delay, 0s);\n }\n }\n\n g {\n path {\n transform-box: fill-box;\n transform-origin: 50% 50%;\n transition: rotate var(--ease-icon-clear-star-duration, 0.2s), scale var(--ease-icon-clear-star-duration, 0.2s);\n\n &:first-child {\n rotate: var(--ease-icon-clear-star-1-rotate, 0deg);\n scale: var(--ease-icon-clear-star-1-scale, 1);\n transition-delay: var(--ease-icon-clear-star-1-delay, 0s);\n }\n\n &:last-child {\n rotate: var(--ease-icon-clear-star-2-rotate, 0deg);\n scale: var(--ease-icon-clear-star-2-scale, 1);\n transition-delay: var(--ease-icon-clear-star-2-delay, 0s);\n }\n }\n }\n }\n `,\n template() {\n return html`\n <svg part=\"clear\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.7613 10.334L13.7071 12.2798C14.1011 12.6739 14.1011 13.3127 13.7071 13.7067C13.3131 14.1007 12.6742 14.1007 12.2802 13.7067L10.3344 11.7609M11.7613 10.334L10.9541 8.08932M11.7613 10.334L10.3344 11.7609M10.3344 11.7609L8.08973 10.9537M6.69581 12.3476L12.348 6.69544C12.6942 6.34922 12.6942 5.7879 12.348 5.44168L11.892 4.98574C11.5458 4.63952 10.9845 4.63952 10.6383 4.98574L4.9861 10.6379C4.63989 10.9841 4.63989 11.5454 4.9861 11.8917L5.44204 12.3476C5.78826 12.6938 6.34959 12.6938 6.69581 12.3476Z\" />\n <g>\n <path d=\"M3.3313 2.6645H4.66519M3.99824 1.99756V3.33145\" />\n <path d=\"M4.66516 5.99946H5.99905M5.33211 5.33252V6.66641\" />\n </g>\n <path d=\"M7.33301 1.99756L8.6669 3.33145\" pathlength=\"100\" />\n <path d=\"M3.6648 8.33386L1.99744 6.6665\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconClear extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype GridState = 'show' | 'hide';\n\n@Component({\n tag: 'ease-icon-grid',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"grid\"] {\n --ease-icon-grid-offset: 100;\n --ease-icon-grid-rotate: 0deg;\n\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n\n g {\n &:first-of-type {\n path {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-grid-offset);\n transition: stroke-dashoffset 0.2s;\n }\n }\n\n &:last-child {\n transform-origin: 72.92% 72.92%;\n transition: rotate 0.35s linear(0, 0.472 7.5%, 0.832 15.5%, 0.97 19.7%, 1.081 24%, 1.166 28.5%, 1.226 33.2%, 1.255 36.9%, 1.271 40.8%, 1.275 44.9%, 1.266 49.4%, 1.222 57.8%, 1.092 75.1%, 1.042 83%, 1.01 91.4%, 1);\n rotate: var(--ease-icon-grid-rotate);\n }\n }\n\n [data-state=\"hide\"] {\n --ease-icon-grid-offset: 200;\n --ease-icon-grid-rotate: 45deg;\n }\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconGrid extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<GridState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'show'\n })\n accessor state!: GridState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"grid\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.5018 5.49971V3.99909C10.5018 2.6178 9.38204 1.49805 8.00076 1.49805H3.99909C2.6178 1.49805 1.49805 2.6178 1.49805 3.99909V8.00076C1.49805 9.38204 2.6178 10.5018 3.99909 10.5018H5.49971\" />\n <g data-state=${this.state}>\n <path d=\"M7.50059 1.49805V5.49971\" pathlength=\"100\" />\n <path d=\"M4.49937 1.49805V10.5018\" pathlength=\"100\" />\n <path d=\"M1.49805 7.47081H5.49971\" pathlength=\"100\" />\n <path d=\"M1.49805 4.46934H10.5018\" pathlength=\"100\" />\n </g>\n <path d=\"M8.75118 11.0019C7.50813 11.0018 6.50043 9.99415 6.50024 8.7511C6.51896 7.51461 7.5176 6.51719 8.75412 6.5C9.99728 6.50081 11.0044 7.50925 11.0036 8.75241C11.0028 9.99556 9.99434 11.0027 8.75118 11.0019\" />\n <g data-state=${this.state}>\n <path d=\"M8.7512 7.86672V9.63523\" />\n <path d=\"M9.63545 8.75098H7.86694\" />\n </g>\n </svg>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-loading',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"loading\"] {\n transform-origin: center center;\n animation-name: loading, loading-dash, loading-dash-offset;\n animation-duration: .4s, .8s, .8s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n stroke-dasharray: 35 65 35 65;\n stroke-dashoffset: 75;\n }\n\n @keyframes loading {\n 0% {\n transform: rotate(-90deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n }\n\n @keyframes loading-dash {\n 33% {\n stroke-dasharray: 15 85 15 85;\n }\n 66% {\n stroke-dasharray: 45 55 45 55;\n }\n }\n\n @keyframes loading-dash-offset {\n 33% {\n stroke-dashoffset: 55;\n }\n 66% {\n stroke-dashoffset: 85;\n }\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke-opacity=\"0.25\" />\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" part=\"loading\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class Loading extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype SnapState = 'active' | 'default';\n\n@Component({\n tag: 'ease-icon-snap',\n styles: `\n :host {\n display: contents;\n }\n [part=\"snap\"] {\n --ease-icon-snap-cursor-rotate: 0deg;\n --ease-icon-snap-lines-rotate: 0deg;\n --ease-icon-snap-lines-translate: 0 0;\n --ease-icon-snap-lines-translate-1: 0 0;\n --ease-icon-snap-lines-translate-2: 0 0;\n --ease-icon-snap-lines-translate-3: 0 0;\n --ease-icon-snap-lines-translate-4: 0 0;\n --ease-icon-snap-lines-rotate-1: 0deg;\n --ease-icon-snap-lines-rotate-2: 0deg;\n --ease-icon-snap-lines-rotate-3: 0deg;\n --ease-icon-snap-lines-rotate-4: 0deg;\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n g {\n transform-origin: 68.75% 68.75%;\n &:first-child {\n rotate: var(--ease-icon-snap-cursor-rotate);\n transition: rotate 0.2s;\n\n path {\n transition: d 0.2s;\n }\n }\n &:last-child {\n rotate: var(--ease-icon-snap-lines-rotate);\n translate: var(--ease-icon-snap-lines-translate);\n transition: rotate 0.2s, translate 0.2s;\n path {\n transition: translate 0.2s;\n transform-box: fill-box;\n transform-origin: 50% 50%;\n &:nth-child(1) {\n translate: var(--ease-icon-snap-lines-translate-1);\n rotate: var(--ease-icon-snap-lines-rotate-1);\n }\n &:nth-child(2) {\n translate: var(--ease-icon-snap-lines-translate-2);\n rotate: var(--ease-icon-snap-lines-rotate-2);\n }\n &:nth-child(3) {\n translate: var(--ease-icon-snap-lines-translate-3);\n rotate: var(--ease-icon-snap-lines-rotate-3);\n }\n &:nth-child(4) {\n translate: var(--ease-icon-snap-lines-translate-4);\n rotate: var(--ease-icon-snap-lines-rotate-4);\n }\n }\n }\n }\n }\n [part=\"cursor\"] {\n stroke: transparent;\n stroke-width: 0;\n fill: currentColor;\n }\n [state=\"active\"] {\n --ease-icon-snap-cursor-rotate: -90deg;\n --ease-icon-snap-lines-rotate: -90deg;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate-1: 1.25px .5px;\n --ease-icon-snap-lines-translate-2: 1.25px -.15px;\n --ease-icon-snap-lines-translate-3: .15px -1.25px;\n --ease-icon-snap-lines-translate-4: -.5px -1.25px;\n --ease-icon-snap-lines-rotate-1: 5deg;\n --ease-icon-snap-lines-rotate-2: 20deg;\n --ease-icon-snap-lines-rotate-3: -20deg;\n --ease-icon-snap-lines-rotate-4: -5deg;\n }\n `,\n observedAttributes: ['state']\n})\nexport class Snap extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<SnapState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'default'\n })\n accessor state!: SnapState;\n\n render(): TemplateResult {\n const defaultPath =\n 'M8.48446 6.48383C8.59007 6.37822 8.71218 6.29901 8.84253 6.24620C8.97289 6.19340 9.11149 6.16699 9.25009 6.16699C9.38869 6.16699 9.52729 6.19340 9.65764 6.24620C9.78799 6.29901 9.91009 6.37822 10.01570 6.48383C10.12128 6.58940 10.20044 6.71143 10.25320 6.84168C10.30597 6.97193 10.33233 7.11041 10.33231 7.24889C10.33229 7.38738 10.30589 7.52587 10.25312 7.65615C10.20034 7.78642 10.12120 7.90848 10.01570 8.01410C9.88354 8.14659 9.75139 8.27907 9.61923 8.41156C9.54601 8.48478 9.44981 8.52139 9.35361 8.52139C9.25741 8.52139 9.16120 8.48478 9.08798 8.41156C9.01476 8.33834 8.97815 8.24214 8.97815 8.14594C8.97815 8.04974 9.01476 7.95353 9.08798 7.88031C9.22014 7.74815 9.35230 7.61599 9.48446 7.48383C9.54924 7.41905 9.58163 7.33401 9.58163 7.24896C9.58163 7.16392 9.54924 7.07888 9.48446 7.01410C9.41974 6.94964 9.33492 6.91741 9.25009 6.91741C9.16526 6.91741 9.08043 6.94963 9.01571 7.01410C8.88355 7.14659 8.75139 7.27907 8.61923 7.41156C8.54601 7.48478 8.44981 7.52139 8.35361 7.52139C8.25741 7.52139 8.16120 7.48478 8.08798 7.41156C8.01476 7.33834 7.97815 7.24214 7.97815 7.14594C7.97815 7.04974 8.01476 6.95354 8.08798 6.88031C8.22014 6.74815 8.35230 6.61599 8.48446 6.48383C8.48446 6.48383 8.48446 6.48383 8.48446 6.48383Z';\n\n const defaultPath2 =\n 'M6.88092 8.08737C6.91753 8.05076 6.95989 8.02330 7.00512 8.00500C7.05035 7.98669 7.09845 7.97754 7.14655 7.97754C7.24275 7.97754 7.33895 8.01415 7.41217 8.08737C7.44878 8.12398 7.47624 8.16634 7.49454 8.21156C7.51285 8.25679 7.52200 8.30489 7.52200 8.35299C7.52200 8.40110 7.51285 8.44920 7.49454 8.49443C7.47624 8.53965 7.44878 8.58201 7.41217 8.61862C7.34593 8.68470 7.27968 8.75078 7.21344 8.81686C7.14720 8.88294 7.08095 8.94902 7.01471 9.01510C6.95024 9.07982 6.91802 9.16465 6.91802 9.24948C6.91802 9.33431 6.95025 9.41914 7.01471 9.48385C7.07949 9.54863 7.16453 9.58102 7.24957 9.58102C7.33462 9.58102 7.41966 9.54863 7.48444 9.48385C7.55052 9.41777 7.61660 9.35169 7.68268 9.28561C7.74876 9.21953 7.81484 9.15345 7.88092 9.08737C7.91753 9.05076 7.95989 9.02330 8.00512 9.00500C8.05035 8.98669 8.09845 8.97754 8.14655 8.97754C8.24275 8.97754 8.33895 9.01415 8.41217 9.08737C8.44878 9.12398 8.47624 9.16634 8.49454 9.21156C8.51285 9.25679 8.52200 9.30489 8.52200 9.35299C8.52200 9.44920 8.48539 9.54540 8.41217 9.61862C8.34593 9.68470 8.27968 9.75078 8.21344 9.81686C8.14720 9.88294 8.08095 9.94902 8.01471 10.01510C7.96190 10.06785 7.90498 10.11401 7.84498 10.15358C7.78498 10.19315 7.72189 10.22613 7.65676 10.25252C7.59162 10.27890 7.52443 10.29870 7.45621 10.31190C7.38799 10.32510 7.31875 10.33170 7.24950 10.33171C7.18026 10.33172 7.11102 10.32514 7.04281 10.31195C6.97460 10.29877 6.90741 10.27898 6.84229 10.25260C6.77716 10.22622 6.71409 10.19324 6.65411 10.15365C6.59413 10.11407 6.53723 10.06789 6.48444 10.01510C6.43163 9.96230 6.38543 9.90537 6.34582 9.84534C6.30622 9.78532 6.27322 9.72221 6.24681 9.65703C6.22041 9.59186 6.20061 9.52462 6.18740 9.45635C6.17420 9.38808 6.16760 9.31878 6.16760 9.24948C6.16760 9.18018 6.17420 9.11088 6.18740 9.04261C6.20061 8.97434 6.22041 8.90710 6.24681 8.84192C6.27322 8.77675 6.30622 8.71363 6.34582 8.65361C6.38543 8.59359 6.43163 8.53666 6.48444 8.48385C6.55052 8.41777 6.61660 8.35169 6.68268 8.28561C6.74876 8.21953 6.81484 8.15345 6.88092 8.08737C6.88092 8.08737 6.88092 8.08737 6.88092 8.08737Z';\n\n const activePath =\n 'M9.25193 6.28166C9.4768 6.23094 9.80415 6.20744 10.0781 6.48185C10.3368 6.74117 10.3461 7.05052 10.3008 7.29338C10.2792 7.40896 10.2435 7.52323 10.2119 7.61955C10.1784 7.72179 10.1479 7.80498 10.124 7.89201C10.12433 7.89234 10.12467 7.89266 10.125 7.89299C9.92512 8.64299 9.72525 9.39300 9.52537 10.14300C9.47203 10.34300 9.2664 10.46180 9.06638 10.40860C8.86627 10.35520 8.74739 10.14970 8.80076 9.94963C9.00063 9.19963 9.20050 8.44963 9.40037 7.69963C9.40069 7.69898 9.40102 7.69832 9.40134 7.69767C9.43192 7.58586 9.47025 7.47290 9.49900 7.38517C9.53005 7.29041 9.55180 7.21804 9.56345 7.15568C9.58449 7.04289 9.56329 7.02762 9.54685 7.01115C9.54547 7.00815 9.54373 6.98452 9.41697 7.01310C9.34508 7.02932 9.27319 7.05278 9.16502 7.08537C9.07787 7.11162 8.97189 7.13866 8.85837 7.15764C8.85870 7.15796 8.85902 7.15829 8.85935 7.15861C8.10935 7.35848 7.35935 7.55835 6.60935 7.75822C6.40924 7.81159 6.20373 7.69271 6.15037 7.49260C6.09724 7.29260 6.21600 7.08695 6.41599 7.03361C7.16599 6.83374 7.91599 6.63387 8.66599 6.43400C8.68104 6.42999 8.69646 6.42733 8.71189 6.42521C8.78100 6.41576 8.85573 6.39545 8.94822 6.36760C9.03125 6.34259 9.14580 6.30560 9.25193 6.28166C9.25193 6.28166 9.25193 6.28166 9.25193 6.28166Z';\n\n const activePath2 =\n 'M6.30855 7.08196C6.48218 6.9692 6.71426 7.01871 6.8271 7.19231C6.93984 7.36595 6.89035 7.59803 6.71675 7.71087C6.55769 7.8143 6.51399 7.8829 6.50288 7.9052C6.50718 7.91375 6.51671 7.92905 6.53804 7.95208C6.59186 8.01016 6.676 8.06871 6.76265 8.11614C6.80333 8.1384 6.83994 8.15555 6.86519 8.16692C6.87727 8.17236 6.88667 8.1762 6.89253 8.17864C6.89522 8.17976 6.89739 8.18117 6.89839 8.18157C6.92411 8.19492 6.94982 8.20826 6.97554 8.22161C7.34059 8.4726 7.44425 8.52362 7.48433 8.54387C7.51885 8.56133 7.56761 8.58533 7.62788 8.63665C7.66711 8.67009 7.71609 8.719 7.77827 8.78118C7.84064 8.84354 7.88955 8.89167 7.9228 8.93059C7.97354 8.98999 7.99693 9.03787 8.0146 9.07219C8.02503 9.09247 8.04365 9.12833 8.09077 9.20501C8.1741 9.33099 8.25744 9.45696 8.34077 9.58294C8.35477 9.60931 8.36876 9.63567 8.38276 9.66204C8.38276 9.66171 8.38276 9.66139 8.38276 9.66106C8.38311 9.66194 8.3836 9.6642 8.38472 9.66692C8.38713 9.67278 8.39182 9.68272 8.39741 9.69524C8.40866 9.72041 8.42527 9.75637 8.44722 9.7968C8.49432 9.88353 8.55171 9.96872 8.60933 10.0224C8.63022 10.0418 8.64563 10.0499 8.65425 10.0546C8.67716 10.0429 8.74616 9.99929 8.84858 9.84173C8.96155 9.66836 9.19361 9.61954 9.36714 9.73235C9.54063 9.84525 9.59026 10.0773 9.47749 10.2509C9.29202 10.5362 9.06335 10.7493 8.77534 10.7988C8.47563 10.8502 8.24137 10.7041 8.09858 10.5712C7.95494 10.4374 7.85125 10.2716 7.78804 10.1552C7.75497 10.0943 7.72938 10.0401 7.71187 10.0009C7.70702 9.99006 7.70284 9.98022 7.69917 9.97161C7.45448 9.61671 7.38641 9.49034 7.34761 9.41497C7.34662 9.41306 7.34544 9.41155 7.34468 9.41009C7.33244 9.39698 7.30693 9.37136 7.24702 9.31145C7.18316 9.24759 7.15849 9.22387 7.14644 9.21282C7.07033 9.17434 6.9431 9.10751 6.58589 8.86321C6.57737 8.85954 6.56726 8.85532 6.55659 8.85052C6.51749 8.83289 6.46383 8.80746 6.40327 8.77434C6.28687 8.71066 6.12089 8.60606 5.98726 8.46184C5.85457 8.31851 5.70938 8.0836 5.76069 7.78411C5.81025 7.49606 6.02305 7.26752 6.30855 7.08196C6.30855 7.08196 6.30855 7.08196 6.30855 7.08196Z';\n\n const path1 = this.state === 'active' ? activePath : defaultPath;\n const path2 = this.state === 'active' ? activePath2 : defaultPath2;\n\n return html`\n <svg part=\"snap\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <g part=\"cursor\">\n <path d=${path1} />\n <path d=${path2} />\n </g>\n \n <path d=\"M2.5 3.5V8.5\" />\n <path d=\"M9.5 5V3.5\" />\n <path d=\"M3.5 9.5H5\" />\n <path d=\"M8.5 2.5H3.5\" />\n \n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 3.5V3.5C1.948 3.5 1.5 3.052 1.5 2.5V2.5C1.5 1.948 1.948 1.5 2.5 1.5V1.5C3.052 1.5 3.5 1.948 3.5 2.5V2.5C3.5 3.052 3.052 3.5 2.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.5 3.5V3.5C8.948 3.5 8.5 3.052 8.5 2.5V2.5C8.5 1.948 8.948 1.5 9.5 1.5V1.5C10.052 1.5 10.5 1.948 10.5 2.5V2.5C10.5 3.052 10.052 3.5 9.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 10.5V10.5C1.948 10.5 1.5 10.052 1.5 9.5V9.5C1.5 8.948 1.948 8.5 2.5 8.5V8.5C3.052 8.5 3.5 8.948 3.5 9.5V9.5C3.5 10.052 3.052 10.5 2.5 10.5Z\" />\n \n <g part=\"lines\">\n <path d=\"M7.5 6V6.5\" />\n <path d=\"M6.5 7.5H6\" />\n <path d=\"M9 10.5V10\" />\n <path d=\"M10 9H10.5\" />\n </g>\n </svg>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-add',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M3.4993 2.69516V4.30289\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorAdd extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-remove',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorRemove extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrow-up',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.99992 12.6666V3.33331M6.99992 3.33331L2.33325 7.99998M6.99992 3.33331L11.6666 7.99998\" />\n </svg>\n `;\n }\n})\nexport class ArrowUp extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.44279 8.84005C9.56156 9.00972 9.79538 9.05098 9.96505 8.93221C10.1347 8.81344 10.176 8.57962 10.0572 8.40995L9.75 8.625L9.44279 8.84005ZM1.94279 8.40995C1.82402 8.57962 1.86528 8.81344 2.03495 8.93221C2.20462 9.05098 2.43844 9.00972 2.55721 8.84005L2.25 8.625L1.94279 8.40995ZM7.21875 4.21875H6.84375C6.84375 4.68474 6.46599 5.0625 6 5.0625V5.4375V5.8125C6.8802 5.8125 7.59375 5.09895 7.59375 4.21875H7.21875ZM6 5.4375V5.0625C5.53401 5.0625 5.15625 4.68474 5.15625 4.21875H4.78125H4.40625C4.40625 5.09895 5.1198 5.8125 6 5.8125V5.4375ZM4.78125 4.21875H5.15625C5.15625 3.75276 5.53401 3.375 6 3.375V3V2.625C5.1198 2.625 4.40625 3.33855 4.40625 4.21875H4.78125ZM6 3V3.375C6.46599 3.375 6.84375 3.75276 6.84375 4.21875H7.21875H7.59375C7.59375 3.33855 6.8802 2.625 6 2.625V3ZM7.125 4.875L6.81779 5.09005L9.44279 8.84005L9.75 8.625L10.0572 8.40995L7.43221 4.65995L7.125 4.875ZM4.875 4.875L4.56779 4.65995L1.94279 8.40995L2.25 8.625L2.55721 8.84005L5.18221 5.09005L4.875 4.875Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezier extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-angle',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.875 4.21875C1.875 4.63296 1.53921 4.96875 1.125 4.96875C0.710786 4.96875 0.375 4.63296 0.375 4.21875C0.375 3.80454 0.710786 3.46875 1.125 3.46875C1.53921 3.46875 1.875 3.80454 1.875 4.21875Z\" fill-opacity=\"0.9\"/>\n <path d=\"M1.64062 4.21875C1.64062 3.93398 1.40977 3.70312 1.125 3.70312C0.840228 3.70312 0.609375 3.93398 0.609375 4.21875C0.609375 4.50352 0.840228 4.73438 1.125 4.73438C1.40977 4.73438 1.64062 4.50352 1.64062 4.21875ZM2.10938 4.21875C2.10938 4.76241 1.66866 5.20312 1.125 5.20312C0.581345 5.20312 0.140625 4.76241 0.140625 4.21875C0.140625 3.67509 0.581345 3.23438 1.125 3.23438C1.66866 3.23438 2.10938 3.67509 2.10938 4.21875Z\" />\n <path d=\"M9.23535 6.49023L8.76465 6.94727L6.88965 5.00977L7.36035 4.55273L9.23535 6.49023Z\" />\n <path d=\"M10.25 7.34375C10.25 7.75796 9.91421 8.09375 9.5 8.09375C9.08579 8.09375 8.75 7.75796 8.75 7.34375C8.75 6.92954 9.08579 6.59375 9.5 6.59375C9.91421 6.59375 10.25 6.92954 10.25 7.34375Z\" fill-opacity=\"0.9\"/>\n <path d=\"M10.0156 7.34375C10.0156 7.05898 9.78477 6.82812 9.5 6.82812C9.21523 6.82812 8.98438 7.05898 8.98438 7.34375C8.98438 7.62852 9.21523 7.85938 9.5 7.85938C9.78477 7.85938 10.0156 7.62852 10.0156 7.34375ZM10.4844 7.34375C10.4844 7.88741 10.0437 8.32812 9.5 8.32812C8.95634 8.32812 8.51562 7.88741 8.51562 7.34375C8.51562 6.80009 8.95634 6.35938 9.5 6.35938C10.0437 6.35938 10.4844 6.80009 10.4844 7.34375Z\" />\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM7.5127 9C7.5127 7.09758 7.32324 6.08783 7.15039 5.56738C7.06453 5.30889 6.98595 5.1804 6.94434 5.125C6.92803 5.1033 6.91762 5.09324 6.91504 5.09082C6.91648 5.09202 6.92022 5.09529 6.92676 5.09961C6.93038 5.102 6.93521 5.10442 6.94043 5.10742C6.94302 5.10891 6.94624 5.11071 6.94922 5.1123C6.95072 5.1131 6.9525 5.11442 6.9541 5.11523L6.95703 5.11621L6.95801 5.11719L7.29199 4.44531L7.29297 4.44629C7.29386 4.44673 7.29499 4.4468 7.2959 4.44727C7.29775 4.44821 7.29983 4.44917 7.30176 4.4502C7.30557 4.45222 7.30938 4.45469 7.31348 4.45703C7.32177 4.46178 7.33053 4.46749 7.33984 4.47363C7.35849 4.48593 7.37956 4.50097 7.40137 4.51953C7.44494 4.55668 7.49313 4.60714 7.54395 4.6748C7.64536 4.80983 7.75747 5.0154 7.8623 5.33105C8.07087 5.95905 8.2627 7.0587 8.2627 9C8.2627 9.20711 8.0948 9.375 7.8877 9.375C7.68065 9.37492 7.5127 9.20706 7.5127 9Z\" />\n <path d=\"M2.04004 3.89014H4.71004V4.55014H2.04004V3.89014Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierAngle extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-distribute',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.125 5.64502C5.33211 5.64502 5.5 5.81291 5.5 6.02002C5.5 6.22713 5.33211 6.39502 5.125 6.39502H2.5C2.29289 6.39502 2.125 6.22713 2.125 6.02002C2.125 5.81291 2.29289 5.64502 2.5 5.64502H5.125Z\" />\n <path d=\"M2.125 6.02002C2.125 5.81313 1.95689 5.64502 1.75 5.64502C1.54311 5.64502 1.375 5.81313 1.375 6.02002C1.375 6.22691 1.54311 6.39502 1.75 6.39502C1.95689 6.39502 2.125 6.22691 2.125 6.02002ZM2.875 6.02002C2.875 6.64113 2.37111 7.14502 1.75 7.14502C1.12889 7.14502 0.625 6.64113 0.625 6.02002C0.625 5.39891 1.12889 4.89502 1.75 4.89502C2.37111 4.89502 2.875 5.39891 2.875 6.02002Z\" />\n <path d=\"M6.5 5.67285C6.5 5.60396 6.44389 5.54785 6.375 5.54785H5.625C5.55611 5.54785 5.5 5.60396 5.5 5.67285V6.42285C5.5 6.49174 5.55611 6.54785 5.625 6.54785H6.375C6.44389 6.54785 6.5 6.49174 6.5 6.42285V5.67285ZM7.25 6.42285C7.25 6.90596 6.85811 7.29785 6.375 7.29785H5.625C5.14189 7.29785 4.75 6.90596 4.75 6.42285V5.67285C4.75 5.18974 5.14189 4.79785 5.625 4.79785H6.375C6.85811 4.79785 7.25 5.18974 7.25 5.67285V6.42285Z\" />\n <path d=\"M3.125 9.25C3.125 9.18111 3.06889 9.125 3 9.125H2.25C2.18111 9.125 2.125 9.18111 2.125 9.25V10C2.125 10.0689 2.18111 10.125 2.25 10.125H3C3.06889 10.125 3.125 10.0689 3.125 10V9.25ZM3.875 10C3.875 10.4831 3.48311 10.875 3 10.875H2.25C1.76689 10.875 1.375 10.4831 1.375 10V9.25C1.375 8.76689 1.76689 8.375 2.25 8.375H3C3.48311 8.375 3.875 8.76689 3.875 9.25V10Z\" />\n <path d=\"M9.797 2C9.797 1.93111 9.74089 1.875 9.672 1.875H8.922C8.85285 1.875 8.797 1.93086 8.797 2V2.75C8.797 2.81889 8.8531 2.875 8.922 2.875H9.672C9.74089 2.875 9.797 2.81889 9.797 2.75V2ZM10.547 2.75C10.547 3.23311 10.1551 3.625 9.672 3.625H8.922C8.43889 3.625 8.047 3.23311 8.047 2.75V2C8.047 1.51714 8.43815 1.125 8.922 1.125H9.672C10.1551 1.125 10.547 1.51689 10.547 2V2.75Z\" />\n <path d=\"M9.33883 2.87576C9.54514 2.89263 9.69927 3.07377 9.68258 3.28005C9.56091 4.76814 8.50457 5.99034 7.09078 6.34255C6.88985 6.39261 6.6858 6.27003 6.6357 6.06912C6.58565 5.86818 6.70822 5.66414 6.90914 5.61404C8.01222 5.33926 8.83909 4.38526 8.93453 3.21951C8.9514 3.01316 9.1325 2.859 9.33883 2.87576Z\" />\n <path d=\"M9.5 5.60498C9.70711 5.60498 9.875 5.77287 9.875 5.97998C9.875 6.18709 9.70711 6.35498 9.5 6.35498H6.875C6.66789 6.35498 6.5 6.18709 6.5 5.97998C6.5 5.77287 6.66789 5.60498 6.875 5.60498H9.5Z\" />\n <path d=\"M10.625 5.97998C10.625 5.77309 10.4569 5.60498 10.25 5.60498C10.0431 5.60498 9.875 5.77309 9.875 5.97998C9.875 6.18687 10.0431 6.35498 10.25 6.35498C10.4569 6.35498 10.625 6.18687 10.625 5.97998ZM11.375 5.97998C11.375 6.60109 10.8711 7.10498 10.25 7.10498C9.62889 7.10498 9.125 6.60109 9.125 5.97998C9.125 5.35887 9.62889 4.85498 10.25 4.85498C10.8711 4.85498 11.375 5.35887 11.375 5.97998Z\" />\n <path d=\"M4.83132 5.65719C5.03226 5.60714 5.23631 5.72969 5.28639 5.93062C5.33644 6.13153 5.21382 6.33557 5.01296 6.3857C3.90988 6.66049 3.08301 7.61448 2.98757 8.78023C2.9707 8.98655 2.78956 9.14068 2.58327 9.12398C2.37696 9.10711 2.22283 8.92597 2.23952 8.71969C2.36119 7.23157 3.41749 6.00938 4.83132 5.65719Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierDistribute extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-length',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M10.4844 4.21875C10.4844 4.76241 10.0437 5.20312 9.5 5.20312C8.95634 5.20312 8.51562 4.76241 8.51562 4.21875C8.51562 3.67509 8.95634 3.23438 9.5 3.23438C10.0437 3.23438 10.4844 3.67509 10.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016L4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383L7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H8.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierLength extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-mirror',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M11.4844 4.21875C11.4844 4.76241 11.0437 5.20312 10.5 5.20312C9.95634 5.20312 9.51562 4.76241 9.51562 4.21875C9.51562 3.67509 9.95634 3.23438 10.5 3.23438C11.0437 3.23438 11.4844 3.67509 11.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383C7.17481 4.40931 7.17639 4.40997 7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H9.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierMirror extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-check',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 6.5L5.33333 9L10 4\" path-length=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconCheck extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-left',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.6667 6.66667C14.6667 6.66667 13.33 4.84548 12.2441 3.75883C11.1582 2.67218 9.6576 2 8 2C4.68629 2 2 4.68629 2 8C2 11.3137 4.68629 14 8 14C10.7354 14 13.0433 12.1695 13.7655 9.66667M14.6667 6.66667V2.66667M14.6667 6.66667H10.6667\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowLeft extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-right',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.33333 6.66667C1.33333 6.66667 2.66999 4.84548 3.75589 3.75883C4.84179 2.67218 6.3424 2 8 2C11.3137 2 14 4.68629 14 8C14 11.3137 11.3137 14 8 14C5.2646 14 2.95674 12.1695 2.23451 9.66667M1.33333 6.66667V2.66667M1.33333 6.66667H5.33333\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowRight extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-code',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9L11 6L8 3M4 3L1 6L4 9\" />\n </svg>\n `;\n }\n})\nexport class IconCode extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-dots',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00008 8.66655C8.36827 8.66655 8.66675 8.36808 8.66675 7.99989C8.66675 7.6317 8.36827 7.33322 8.00008 7.33322C7.63189 7.33322 7.33341 7.6317 7.33341 7.99989C7.33341 8.36808 7.63189 8.66655 8.00008 8.66655Z\" />\n <path d=\"M12.6667 8.66655C13.0349 8.66655 13.3334 8.36808 13.3334 7.99989C13.3334 7.6317 13.0349 7.33322 12.6667 7.33322C12.2986 7.33322 12.0001 7.6317 12.0001 7.99989C12.0001 8.36808 12.2986 8.66655 12.6667 8.66655Z\" />\n <path d=\"M3.33341 8.66655C3.7016 8.66655 4.00008 8.36808 4.00008 7.99989C4.00008 7.6317 3.7016 7.33322 3.33341 7.33322C2.96522 7.33322 2.66675 7.6317 2.66675 7.99989C2.66675 8.36808 2.96522 8.66655 3.33341 8.66655Z\" />\n </svg>\n `;\n }\n})\nexport class IconDots extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-mention',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.4 5.59963V8.59962C10.4 9.07701 10.5896 9.53485 10.9272 9.87242C11.2648 10.21 11.7226 10.3996 12.2 10.3996C12.6774 10.3996 13.1352 10.21 13.4728 9.87242C13.8104 9.53485 14 9.07701 14 8.59962V7.99962C13.9999 6.64544 13.5417 5.33111 12.7 4.27035C11.8582 3.20958 10.6823 2.46476 9.36359 2.15701C8.04484 1.84925 6.66076 1.99665 5.43641 2.57525C4.21206 3.15384 3.21944 4.1296 2.61996 5.34386C2.02048 6.55812 1.84939 7.93947 2.13451 9.26329C2.41963 10.5871 3.14419 11.7756 4.19038 12.6354C5.23657 13.4952 6.54286 13.9758 7.89684 13.9991C9.25083 14.0224 10.5729 13.587 11.648 12.7636M10.4 7.99962C10.4 9.32511 9.32549 10.3996 8 10.3996C6.67452 10.3996 5.6 9.32511 5.6 7.99962C5.6 6.67414 6.67452 5.59963 8 5.59963C9.32549 5.59963 10.4 6.67414 10.4 7.99962Z\" />\n </svg>\n `;\n }\n})\nexport class IconMention extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-minus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.99995H11\" />\n </svg>\n `;\n }\n})\nexport class IconMinus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-plus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00018 4.28591C8.00018 4.28591 8.00018 8.42263 8.00018 11.714M4.28613 7.99995H11.7142\" />\n </svg>\n `;\n }\n})\nexport class IconPlus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-settings',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5.33319L10 5.33319M10 5.33319C10 6.43776 10.8954 7.33319 12 7.33319C13.1046 7.33319 14 6.43776 14 5.33319C14 4.22862 13.1046 3.33319 12 3.33319C10.8954 3.33319 10 4.22862 10 5.33319ZM6 10.6665L14 10.6665M6 10.6665C6 11.7711 5.10457 12.6665 4 12.6665C2.89543 12.6665 2 11.7711 2 10.6665C2 9.56195 2.89543 8.66652 4 8.66652C5.10457 8.66652 6 9.56195 6 10.6665Z\" />\n </svg>\n `;\n }\n})\nexport class Settings extends HTMLElement {\n declare requestRender: () => void;\n}\n","export * from './animation/chevron';\nexport * from './animation/clear';\nexport * from './animation/grid';\nexport * from './animation/loading';\nexport * from './animation/snap';\nexport * from './interface/anchor-add';\nexport * from './interface/anchor-remove';\nexport * from './interface/arrow-up';\nexport * from './interface/arrows-vertical';\nexport * from './interface/bezier';\nexport * from './interface/bezier-angle';\nexport * from './interface/bezier-distribute';\nexport * from './interface/bezier-length';\nexport * from './interface/bezier-mirror';\nexport * from './interface/check';\nexport * from './interface/circle-arrow-left';\nexport * from './interface/circle-arrow-right';\nexport * from './interface/code';\nexport * from './interface/dots';\nexport * from './interface/mention';\nexport * from './interface/minus';\nexport * from './interface/picker';\nexport * from './interface/plus';\nexport * from './interface/settings';\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype LogoLoaderState = 'idle' | 'intro' | 'loop' | 'exit';\n\nexport type LogoIntroVariant = 'wave' | 'particle';\n\ninterface DotData {\n id: string;\n cx: number;\n cy: number;\n}\n\nconst CENTER = { x: 74, y: 74 };\n\nconst DOTS_DATA: DotData[] = [\n { id: 'dot-1', cx: 7.22725, cy: 73.99975 },\n { id: 'dot-2', cx: 8.0, cy: 107.63685 },\n { id: 'dot-3', cx: 41.36365, cy: 7.72734 },\n { id: 'dot-4', cx: 40.36105, cy: 40.36375 },\n { id: 'dot-5', cx: 40.36105, cy: 107.63625 },\n { id: 'dot-6', cx: 41.36365, cy: 140.77285 },\n { id: 'dot-7', cx: 73.99995, cy: 7.22725 },\n { id: 'dot-8', cx: 73.99995, cy: 140.77325 },\n { id: 'dot-9', cx: 108.13785, cy: 7.72734 },\n { id: 'dot-10', cx: 107.88425, cy: 73.99975 },\n { id: 'dot-11', cx: 108.13785, cy: 140.77285 },\n { id: 'dot-12', cx: 141.27285, cy: 40.86385 },\n { id: 'dot-13', cx: 140.77225, cy: 73.99975 },\n { id: 'dot-14', cx: 141.27285, cy: 107.63685 },\n { id: 'dot-15', cx: 40.36165, cy: 73.99925 },\n { id: 'dot-16', cx: 74.00125, cy: 40.36345 },\n { id: 'dot-17', cx: 74.00125, cy: 73.99925 },\n { id: 'dot-18', cx: 74.00125, cy: 107.63585 },\n { id: 'dot-19', cx: 107.63485, cy: 40.36345 },\n { id: 'dot-20', cx: 107.63485, cy: 107.63585 },\n { id: 'dot-21', cx: 141.77, cy: 8.23 },\n { id: 'dot-22', cx: 141.77, cy: 140.77 },\n { id: 'dot-23', cx: 7.73019, cy: 140.77 },\n { id: 'dot-24', cx: 7.72018, cy: 8.22 },\n { id: 'dot-25', cx: 7.73518, cy: 40.865 }\n];\n\nconst INNER_DOT_IDS = ['dot-19', 'dot-20', 'dot-18', 'dot-15', 'dot-17', 'dot-16'];\n\nconst OUTER_DOT_IDS = DOTS_DATA.map((d) => d.id).filter((id) => !INNER_DOT_IDS.includes(id));\n\nconst forceReflow = (el: Element): void => {\n void window.getComputedStyle(el).opacity;\n};\n\nconst getAngle = (dot: DotData): number => Math.atan2(dot.cy - CENTER.y, dot.cx - CENTER.x);\n\nconst sortByAngle = (ids: string[]): DotData[] =>\n ids\n .map((id) => DOTS_DATA.find((d) => d.id === id))\n .filter((dot): dot is DotData => dot != null)\n .sort((a, b) => getAngle(a) - getAngle(b));\n\nconst LOOP_DURATION = 1500;\nconst ROTATION_DURATION = 600;\n\n@Component({\n tag: 'ease-logo-loader',\n styles: `\n :host {\n display: inline-block;\n --ease-out: cubic-bezier(0.22, 0.61, 0.36, 1);\n --ease-in-out: cubic-bezier(0.45, 0, 0.55, 1);\n --ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);\n \n --dot-dark: var(--color-gray-0, oklab(98.81% 0 0));\n --dot-medium: var(--color-gray-600, oklab(65.21% -0.0019 -0.0144));\n --dot-light: var(--color-gray-700, oklab(37.92% -0.0006 -0.0179));\n --dot-accent: var(--color-blue-600, oklab(76.85% 0.0462 -0.1115));\n }\n\n .logo-loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--logo-loader-size, 36px);\n height: var(--logo-loader-size, 36px);\n }\n\n .logo-loader__svg {\n width: 100%;\n height: 100%;\n display: block;\n transform-origin: center;\n overflow: visible;\n }\n\n .logo-loader__svg rect {\n transform-box: fill-box;\n transform-origin: center;\n transition:\n transform 380ms var(--ease-out),\n fill 320ms ease,\n opacity 320ms ease;\n }\n\n /* State: intro - dots are animating in */\n .logo-loader[data-state='intro'] .logo-loader__svg rect {\n opacity: 0;\n transform: scale(0);\n }\n\n /* Outer dots loading animation */\n @keyframes loading-outer {\n 0%, 100% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-light);\n opacity: 0.4;\n }\n 15% {\n transform: scale(calc(var(--base-scale, 1) * 1.35));\n fill: var(--dot-dark);\n opacity: 1;\n }\n 35% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-medium);\n opacity: 0.8;\n }\n }\n\n /* Inner dots loading animation */\n @keyframes loading-inner {\n 0%, 100% {\n transform: scale(var(--base-scale, 0.6));\n opacity: 0.7;\n fill: var(--dot-medium);\n }\n 50% {\n transform: scale(calc(var(--base-scale, 0.6) * 1.9));\n opacity: 0.1;\n fill: var(--dot-light);\n }\n }\n\n .dot-loading {\n animation-name: loading-outer;\n animation-duration: 600ms;\n animation-timing-function: cubic-bezier(0.3, 0.6, 0.4, 1);\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n .dot-loading-inner {\n animation-name: loading-inner;\n animation-duration: 1500ms;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n /* Exit animation class */\n .restoring {\n transition:\n transform 450ms cubic-bezier(0.25, 0, 0.5, 1),\n fill 350ms ease,\n opacity 350ms ease;\n }\n\n /* Particle intro animation */\n @keyframes particle-bounce {\n 0% { transform: scale(1); }\n 40% { transform: scale(1.25); }\n 65% { transform: scale(0.95); }\n 85% { transform: scale(1.05); }\n 100% { transform: scale(1); }\n }\n\n .particle-bounce {\n animation: particle-bounce 400ms var(--ease-overshoot) both;\n }\n\n /* Shockwave ring animation */\n @keyframes shockwave-expansion {\n 0% {\n transform: scale(1);\n opacity: 1;\n stroke-width: 1.5px;\n }\n 100% {\n transform: scale(4);\n opacity: 0;\n stroke-width: 0.5px;\n }\n }\n\n .shockwave-ring {\n fill: none;\n stroke: var(--dot-dark);\n transform-box: fill-box;\n transform-origin: center;\n animation: shockwave-expansion 900ms cubic-bezier(0.165, 0.84, 0.44, 1) both;\n }\n\n /* Pulse wave for intro */\n @keyframes pulse-wave {\n 0% {\n transform: scale(1);\n filter: brightness(1);\n }\n 50% {\n transform: scale(1.2);\n filter: brightness(1.6);\n fill: var(--dot-light);\n }\n 100% {\n transform: scale(1);\n filter: brightness(1);\n }\n }\n\n .dot-pulse-wave {\n animation: pulse-wave var(--pulse-duration, 500ms) var(--pulse-delay, 0ms) cubic-bezier(0.455, 0.03, 0.515, 0.955);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .logo-loader__svg {\n transition: none;\n transform: scale(1);\n }\n .logo-loader__svg rect {\n animation: none !important;\n transition: none;\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n template(host: LogoLoader) {\n const size = host.size ?? 36;\n const state = host.state;\n const ariaLabel = host.ariaLabel;\n const ariaLabelTrimmed = ariaLabel?.trim() ?? '';\n\n return html`\n <div\n class=\"logo-loader\"\n data-state=${state}\n style=${`--logo-loader-size:${size}px;`}\n >\n <svg\n viewBox=\"0 0 148 148\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"logo-loader__svg\"\n role=${ariaLabelTrimmed ? 'img' : null}\n aria-label=${ariaLabelTrimmed || null}\n aria-hidden=${ariaLabelTrimmed ? null : 'true'}\n focusable=${ariaLabelTrimmed ? null : 'false'}\n >\n <g class=\"shockwave-container\"></g>\n \n <rect id=\"dot-1\" x=\"0.5\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-2\" x=\"3.5\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-3\" x=\"36.8788\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-4\" x=\"33.6338\" y=\"33.6365\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-5\" x=\"33.6338\" y=\"100.909\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-6\" x=\"36.8788\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-7\" x=\"67.2727\" y=\"0.5\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-8\" x=\"67.2727\" y=\"134.046\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-9\" x=\"103.653\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-10\" x=\"101.407\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-11\" x=\"103.653\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-12\" x=\"136.788\" y=\"36.379\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-13\" x=\"134.045\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-14\" x=\"136.788\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n \n <rect id=\"dot-15\" x=\"26.9071\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-16\" x=\"60.5467\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-17\" x=\"60.5467\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-18\" x=\"60.5467\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-19\" x=\"94.1803\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-20\" x=\"94.1803\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n \n <rect id=\"dot-21\" x=\"139.53\" y=\"5.98999\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-22\" x=\"139.53\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-23\" x=\"5.49019\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-24\" x=\"5.48018\" y=\"5.97998\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-25\" x=\"4.37018\" y=\"37.5\" width=\"6.73\" height=\"6.73\" rx=\"3.365\" fill=\"var(--dot-light)\" />\n </svg>\n </div>\n `;\n }\n})\nexport class LogoLoader extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, LogoLoader>({\n type: Boolean,\n attribute: 'loading',\n defaultValue: false,\n onChange(next) {\n (this as LogoLoader).handleLoadingChange(next);\n }\n })\n accessor loading = false;\n\n @Prop<LogoIntroVariant, LogoLoader>({\n type: 'string',\n attribute: 'intro',\n defaultValue: 'wave'\n })\n accessor intro: LogoIntroVariant = 'wave';\n\n @Prop<number | null, LogoLoader>({\n type: Number,\n attribute: 'size',\n defaultValue: 36\n })\n accessor size: number | null = 36;\n\n @Prop<string | null, LogoLoader>({\n type: 'string',\n attribute: 'aria-label',\n defaultValue: null\n })\n accessor ariaLabel: string | null = null;\n\n #state: LogoLoaderState = 'intro';\n #loopStartTime = 0;\n #animationTimers: number[] = [];\n #introCompleted = false;\n\n get state(): LogoLoaderState {\n return this.#state;\n }\n\n set state(value: LogoLoaderState) {\n if (this.#state === value) {\n return;\n }\n this.#state = value;\n if (typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n connectedCallback(): void {\n // Wait for first render before starting intro animation\n // The Component decorator renders after connectedCallback via requestAnimationFrame\n requestAnimationFrame(() => {\n // Double RAF to ensure render is complete\n requestAnimationFrame(() => {\n if (this.loading) {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.#startLoopAnimation();\n });\n } else {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.state = 'idle';\n });\n }\n });\n });\n }\n\n disconnectedCallback(): void {\n this.#clearTimers();\n }\n\n #clearTimers(): void {\n for (const id of this.#animationTimers) {\n window.clearTimeout(id);\n }\n this.#animationTimers = [];\n }\n\n #setTimeout(fn: () => void, delay: number): number {\n const id = window.setTimeout(fn, delay);\n this.#animationTimers.push(id);\n return id;\n }\n\n #getDot(id: string): SVGRectElement | null {\n const svg = this.shadowRoot?.querySelector('.logo-loader__svg');\n return svg?.querySelector(`#${id}`) as SVGRectElement | null;\n }\n\n #getShockwaveContainer(): SVGGElement | null {\n return this.shadowRoot?.querySelector('.shockwave-container') as SVGGElement | null;\n }\n\n #resetDotsState(instant = false, keepOpacity = false): void {\n const container = this.#getShockwaveContainer();\n if (container) {\n container.innerHTML = '';\n }\n\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n\n if (instant) {\n el.style.transition = 'none';\n } else {\n el.style.transition = '';\n }\n\n // Remove all animation classes\n el.classList.remove('dot-loading', 'dot-loading-inner', 'restoring', 'dot-pulse-wave', 'particle-bounce');\n\n el.style.removeProperty('--base-scale');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--pulse-delay');\n el.style.removeProperty('--pulse-duration');\n\n // Reset inline styles\n el.style.transform = 'scale(1)';\n\n if (!keepOpacity) {\n el.style.opacity = instant ? '1' : '';\n }\n el.style.removeProperty('fill');\n el.style.removeProperty('filter');\n\n if (instant) {\n forceReflow(el);\n el.style.removeProperty('transition');\n }\n }\n }\n\n /** Ensure all dots are visible */\n #ensureVisibility(): void {\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (el && (el.style.opacity === '0' || el.style.opacity === '')) {\n el.style.transition = 'opacity 200ms ease-out';\n el.style.opacity = '1';\n }\n }\n }\n\n /** Run wave intro animation */\n #runWaveIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n const innerDots = DOTS_DATA.filter((d) => innerDotIds.has(d.id));\n const outerDots = DOTS_DATA.filter((d) => !innerDotIds.has(d.id));\n\n // WAVE 1: Inner dots appear at half scale\n const orderedInner = sortByAngle(innerDots.map((d) => d.id));\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.fill = 'var(--dot-medium)';\n forceReflow(el);\n el.style.removeProperty('transition');\n\n const delay = index * 75;\n this.#setTimeout(() => {\n el.style.transition = 'transform 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 400ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(0.5)';\n }, delay);\n });\n\n // WAVE 2: Inner to full scale + outer appear\n this.#setTimeout(() => {\n // Inner dots to full scale\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = index * 65;\n this.#setTimeout(() => {\n el.style.transition = 'transform 600ms cubic-bezier(0.34, 1.56, 0.64, 1), fill 450ms ease-out';\n el.style.transform = 'scale(1)';\n el.style.removeProperty('fill');\n }, delay);\n });\n\n // Outer dots appear\n const orderedOuter = sortByAngle(outerDots.map((d) => d.id));\n orderedOuter.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.removeProperty('transition');\n const delay = 150 + index * 40;\n this.#setTimeout(() => {\n el.style.transition = 'transform 650ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 550ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(1)';\n }, delay);\n });\n }, 650);\n\n // Completion\n this.#setTimeout(() => {\n onComplete?.();\n }, 1400);\n }\n\n /** Run particle intro animation */\n #runParticleIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n\n // Create particle animation data\n const particles = DOTS_DATA.map((dot, index) => {\n const finalAngle = getAngle(dot);\n const startDistance = 110 + Math.random() * 80;\n const angleVariation = (Math.random() - 0.5) * Math.PI * 0.35;\n const startAngle = finalAngle + angleVariation;\n const startX = Math.cos(startAngle) * startDistance;\n const startY = Math.sin(startAngle) * startDistance;\n\n const curvature = Math.random() * 0.4 + 0.3;\n const controlAngle = startAngle + (Math.random() - 0.5) * Math.PI * curvature;\n const controlDistance = startDistance * 0.6;\n const controlX = Math.cos(controlAngle) * controlDistance;\n const controlY = Math.sin(controlAngle) * controlDistance;\n\n const group = Math.floor(index / 5);\n const groupDelay = group * 110;\n const withinGroupDelay = (index % 5) * 40;\n const delay = groupDelay + withinGroupDelay + Math.random() * 40;\n const duration = 600 + Math.random() * 300;\n\n return {\n ...dot,\n startX,\n startY,\n controlX,\n controlY,\n delay,\n duration,\n impactTime: delay + duration,\n rotationSpeed: 720 + Math.random() * 360,\n isInner: innerDotIds.has(dot.id)\n };\n });\n\n particles.sort((a, b) => a.delay - b.delay);\n\n // First 3 inner dots for shockwaves\n const shockwaveParticles = particles\n .filter((p) => p.isInner)\n .sort((a, b) => a.impactTime - b.impactTime)\n .slice(0, 3);\n const shockwaveSet = new Set(shockwaveParticles.map((p) => p.id));\n\n // Animate each particle\n for (const particle of particles) {\n const el = this.#getDot(particle.id);\n if (!el) {\n continue;\n }\n\n el.style.transform = `translate(${particle.startX}px, ${particle.startY}px) scale(0.05)`;\n\n this.#setTimeout(() => {\n el.style.opacity = '1';\n\n const steps = 30;\n let step = 0;\n\n const animateStep = (): void => {\n step++;\n const progress = step / steps;\n const t = progress;\n const mt = 1 - t;\n\n const x = mt * mt * particle.startX + 2 * mt * t * particle.controlX + t * t * 0;\n const y = mt * mt * particle.startY + 2 * mt * t * particle.controlY + t * t * 0;\n\n const easeOut = 1 - (1 - progress) ** 4;\n const scale = 0.05 + easeOut * 0.95;\n const rotation = progress * particle.rotationSpeed;\n\n el.style.transition = 'transform 33ms linear';\n el.style.transform = `translate(${x}px, ${y}px) scale(${scale}) rotate(${rotation}deg)`;\n\n if (step < steps) {\n requestAnimationFrame(animateStep);\n } else {\n // Impact - clear all transforms\n const bounceDuration = 250;\n el.style.transition = `transform ${bounceDuration}ms cubic-bezier(0.34, 1.56, 0.64, 1)`;\n el.style.transform = 'scale(1)';\n\n if (shockwaveSet.has(particle.id)) {\n this.#triggerShockwave(particle);\n }\n\n this.#setTimeout(() => {\n el.classList.add('particle-bounce');\n this.#setTimeout(() => {\n el.classList.remove('particle-bounce');\n }, 400);\n }, bounceDuration);\n }\n };\n\n requestAnimationFrame(animateStep);\n }, particle.delay);\n }\n\n // Early completion\n const earlyRevealTime = Math.max(...particles.map((p) => p.delay)) * 0.6;\n this.#setTimeout(() => {\n onComplete?.();\n }, earlyRevealTime);\n\n // Final cleanup\n const maxTime = Math.max(...particles.map((p) => p.impactTime + 500));\n this.#setTimeout(() => {\n this.#resetDotsState(false, true);\n }, maxTime);\n }\n\n #triggerShockwave(dot: DotData): void {\n const container = this.#getShockwaveContainer();\n if (!container) {\n return;\n }\n\n const ring = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n ring.setAttribute('cx', String(dot.cx));\n ring.setAttribute('cy', String(dot.cy));\n ring.setAttribute('r', '13.45');\n ring.classList.add('shockwave-ring');\n\n container.appendChild(ring);\n\n this.#setTimeout(() => {\n ring.remove();\n }, 900);\n }\n\n #runIntro(onComplete?: () => void): void {\n if (this.intro === 'particle') {\n this.#runParticleIntro(onComplete);\n } else {\n this.#runWaveIntro(onComplete);\n }\n }\n\n #startLoopAnimation(): void {\n this.#loopStartTime = performance.now();\n this.#ensureVisibility();\n\n // Inner dots - scale down with transition, then add animation class\n const orderedInnerDots = sortByAngle(INNER_DOT_IDS);\n let seedDelay = 0;\n\n orderedInnerDots.forEach((dot) => {\n this.#setTimeout(() => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const targetScale = 0.6;\n\n el.style.transition = 'all 450ms cubic-bezier(0.4, 0, 0.2, 1)';\n el.style.transform = `scale(${targetScale})`;\n el.style.fill = 'var(--dot-medium)';\n el.style.opacity = '0.7';\n\n el.style.setProperty('--base-scale', `${targetScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * LOOP_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading-inner');\n }, 100);\n }, seedDelay);\n\n seedDelay += 60;\n });\n\n const orderedOuterDots = sortByAngle(OUTER_DOT_IDS);\n this.#setTimeout(() => {\n orderedOuterDots.forEach((dot) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.transition = 'all 350ms ease-out';\n\n const baseScale = 1.2;\n el.style.setProperty('--base-scale', `${baseScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * ROTATION_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading');\n }, 50);\n });\n\n this.state = 'loop';\n }, seedDelay + 100);\n }\n\n #endLoopAnimation(): void {\n const now = performance.now();\n const elapsed = Math.max(0, now - this.#loopStartTime);\n\n const timeInCycle = elapsed % LOOP_DURATION;\n const timeLeft = LOOP_DURATION - timeInCycle + 50;\n\n this.state = 'exit';\n\n this.#setTimeout(() => {\n const orderedAllDots = sortByAngle(DOTS_DATA.map((d) => d.id));\n\n orderedAllDots.forEach((dot, i) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = i * 18;\n\n this.#setTimeout(() => {\n el.classList.remove('dot-loading', 'dot-loading-inner');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--base-scale');\n\n el.classList.add('restoring');\n el.style.transform = 'scale(1)';\n el.style.opacity = '1';\n el.style.removeProperty('fill');\n\n this.#setTimeout(() => {\n el.classList.remove('restoring');\n }, 500);\n }, delay);\n });\n\n this.#setTimeout(\n () => {\n this.state = 'idle';\n },\n orderedAllDots.length * 18 + 500\n );\n }, timeLeft);\n }\n\n handleLoadingChange(next: boolean): void {\n if (!this.#introCompleted) {\n return;\n }\n\n this.#clearTimers();\n\n if (next) {\n if (this.state === 'idle' || this.state === 'exit') {\n this.#resetDotsState(true, true);\n this.#startLoopAnimation();\n }\n } else {\n if (this.state === 'loop') {\n this.#endLoopAnimation();\n } else if (this.state !== 'intro' && this.state !== 'exit') {\n this.state = 'idle';\n }\n }\n }\n\n playIntro(variant?: LogoIntroVariant): void {\n this.#clearTimers();\n this.#resetDotsState(true);\n\n const originalIntro = this.intro;\n if (variant) {\n this.intro = variant;\n }\n\n this.#runIntro(() => {\n this.#introCompleted = true;\n if (this.loading) {\n this.#startLoopAnimation();\n } else {\n this.state = 'idle';\n }\n });\n\n if (variant) {\n this.intro = originalIntro;\n }\n }\n}\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n};\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.set(instance, false);\n\n instance.render?.();\n });\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\ninterface WatchOptions<TValue, THost extends RenderHost> {\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n transform?: (this: THost, initial: TValue) => TValue;\n}\n\nexport function Watch<TValue, THost extends RenderHost = RenderHost>(options: WatchOptions<TValue, THost> = {}) {\n const { compare = defaultCompare, onChange, transform } = options;\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Watch requires the \"accessor\" keyword on the property.');\n }\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (onChange) {\n onChange.call(this, value, previous);\n }\n\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n if (transform) {\n return transform.call(this, initialValue);\n }\n\n return initialValue;\n }\n };\n };\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nexport type MonitorFpsDetail = {\n fps: number | null;\n refreshRate: number | null;\n frameTimeAvg: number | null;\n frameTimeP95: number | null;\n frameTimeMax: number | null;\n droppedFrames: number;\n jankFrames: number;\n longFrames: number;\n};\n\nconst clamp = (value: number, min: number, max: number): number => Math.max(min, Math.min(max, value));\n\nconst mean = (values: readonly number[]): number | null => {\n if (values.length === 0) {\n return null;\n }\n let sum = 0;\n for (const value of values) {\n sum += value;\n }\n return sum / values.length;\n};\n\nconst quantile = (sorted: readonly number[], q: number): number | null => {\n if (sorted.length === 0) {\n return null;\n }\n const clamped = clamp(q, 0, 1);\n const index = Math.floor(clamped * (sorted.length - 1));\n return sorted[index] ?? null;\n};\n\nconst computePercentile = (values: readonly number[], q: number): number | null => {\n if (values.length === 0) {\n return null;\n }\n const sorted = [...values].sort((a, b) => a - b);\n return quantile(sorted, q);\n};\n\nconst computeMedian = (values: readonly number[]): number | null => computePercentile(values, 0.5);\n\nconst formatNumber = (value: number | null, decimals = 0): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return value.toFixed(decimals);\n};\n\nconst formatMs = (value: number | null, decimals = 1): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return `${value.toFixed(decimals)}ms`;\n};\n\nconst rateFps = (fps: number | null, targetFps: number | null): 'good' | 'needs-improvement' | 'poor' | 'unknown' => {\n if (fps === null || !Number.isFinite(fps)) {\n return 'unknown';\n }\n const target = targetFps && Number.isFinite(targetFps) ? targetFps : 60;\n const ratio = fps / target;\n if (ratio >= 0.92) {\n return 'good';\n }\n if (ratio >= 0.75) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\n@Component({\n tag: 'ease-monitor-fps',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n color: var(--color-foreground);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n font-variant-numeric: tabular-nums;\n }\n\n [part=\"container\"] {\n display: grid;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"title\"] {\n display: inline-flex;\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n }\n\n [part=\"fps\"] {\n font-size: var(--ease-monitor-fps-font-size, 14px);\n font-weight: 650;\n letter-spacing: -0.01em;\n line-height: 1;\n }\n\n [part=\"fps\"][data-rating=\"good\"] {\n color: #22c55e;\n }\n [part=\"fps\"][data-rating=\"needs-improvement\"] {\n color: #eab308;\n }\n [part=\"fps\"][data-rating=\"poor\"] {\n color: #ef4444;\n }\n [part=\"fps\"][data-rating=\"unknown\"] {\n color: var(--color-gray-600);\n }\n\n [part=\"unit\"] {\n font-size: var(--ease-monitor-unit-font-size, var(--ease-font-size-sm, 12px));\n color: var(--color-gray-600);\n font-weight: 500;\n }\n\n [part=\"subtitle\"] {\n font-size: var(--ease-monitor-subtitle-font-size, 11px);\n color: var(--color-gray-600);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n text-align: right;\n }\n\n canvas[part=\"graph\"] {\n width: 100%;\n height: 44px;\n display: block;\n background: var(--color-gray-900);\n box-shadow: inset 0 0 0 1px var(--color-white-4);\n }\n\n [part=\"stats\"] {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n font-size: var(--ease-monitor-stats-font-size, var(--ease-font-size-sm, 12px));\n padding-left: var(--ease-monitor-stats-padding-left, 4px);\n color: var(--color-gray-600);\n }\n\n [part=\"stat\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-width: 0;\n }\n\n [part=\"stat\"] strong {\n font-weight: 550;\n color: var(--color-gray-700);\n }\n `\n})\nexport class MonitorFps extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor paused: boolean = false;\n\n @Query<HTMLCanvasElement>('canvas[part=\"graph\"]')\n accessor canvasEl!: HTMLCanvasElement | null;\n\n #rafId: number | null = null;\n #lastNow = 0;\n #lastSampleNow = 0;\n #framesSinceSample = 0;\n\n #frameDeltas: number[] = [];\n #fpsSamples: number[] = [];\n\n #maxFrameDeltas = 240;\n #maxFpsSamples = 90; // 90 * 250ms = ~22.5s\n #sampleIntervalMs = 250;\n #statsWindowFrames = 120;\n\n #data: MonitorFpsDetail = {\n fps: null,\n refreshRate: null,\n frameTimeAvg: null,\n frameTimeP95: null,\n frameTimeMax: null,\n droppedFrames: 0,\n jankFrames: 0,\n longFrames: 0\n };\n\n connectedCallback(): void {\n this.#attachVisibilityHandling();\n if (!this.paused && !document.hidden) {\n this.#start();\n }\n }\n\n disconnectedCallback(): void {\n this.#stop();\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n }\n\n afterRender(): void {\n this.#syncCanvasSize();\n this.#draw();\n }\n\n render(): TemplateResult {\n const fps = this.#data.fps;\n const hz = this.#data.refreshRate;\n const rating = rateFps(fps, hz);\n\n const subtitleParts = [\n this.#data.frameTimeAvg !== null ? `avg ${formatMs(this.#data.frameTimeAvg)}` : null,\n this.#data.frameTimeP95 !== null ? `p95 ${formatMs(this.#data.frameTimeP95)}` : null\n ].filter(Boolean);\n\n return html`\n <div part=\"container\">\n <div part=\"header\">\n <div part=\"title\">\n <span part=\"fps\" data-rating=${rating}>${formatNumber(fps, 0)}</span>\n <span part=\"unit\">FPS</span>\n </div>\n <div part=\"subtitle\">${subtitleParts.join(' · ')}</div>\n </div>\n\n <canvas part=\"graph\" aria-label=\"FPS graph\"></canvas>\n\n <div part=\"stats\">\n <div part=\"stat\"><span>Refresh</span><strong>${hz ? `~${formatNumber(hz, 0)}Hz` : '—'}</strong></div>\n <div part=\"stat\"><span>Dropped</span><strong>${this.#data.droppedFrames}</strong></div>\n <div part=\"stat\"><span>Jank</span><strong>${this.#data.jankFrames}</strong></div>\n <div part=\"stat\"><span>Long frames</span><strong>${this.#data.longFrames}</strong></div>\n <div part=\"stat\"><span>Worst</span><strong>${formatMs(this.#data.frameTimeMax)}</strong></div>\n <div part=\"stat\"><span>Avg</span><strong>${formatMs(this.#data.frameTimeAvg)}</strong></div>\n </div>\n </div>\n `;\n }\n\n #attachVisibilityHandling(): void {\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n document.addEventListener('visibilitychange', this.#handleVisibilityChange, { passive: true });\n }\n\n #handleVisibilityChange = (): void => {\n if (document.hidden) {\n this.#stop();\n return;\n }\n\n if (!this.paused) {\n this.#start();\n }\n };\n\n #start(): void {\n if (this.#rafId !== null) {\n return;\n }\n\n const now = performance.now();\n this.#lastNow = now;\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#rafId = requestAnimationFrame(this.#tick);\n }\n\n #stop(): void {\n if (this.#rafId !== null) {\n cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n }\n\n #tick = (now: number): void => {\n if (this.paused) {\n this.#stop();\n return;\n }\n\n const delta = now - this.#lastNow;\n this.#lastNow = now;\n\n // Ignore huge deltas (tab switch / breakpoints).\n if (delta > 0 && delta < 250) {\n this.#frameDeltas.push(delta);\n if (this.#frameDeltas.length > this.#maxFrameDeltas) {\n this.#frameDeltas.shift();\n }\n }\n\n this.#framesSinceSample += 1;\n\n if (now - this.#lastSampleNow >= this.#sampleIntervalMs) {\n const elapsed = now - this.#lastSampleNow;\n const fpsSample = elapsed > 0 ? (this.#framesSinceSample * 1000) / elapsed : 0;\n\n this.#fpsSamples.push(fpsSample);\n if (this.#fpsSamples.length > this.#maxFpsSamples) {\n this.#fpsSamples.shift();\n }\n\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#updateStats();\n this.#emit();\n this.requestRender();\n }\n\n this.#rafId = requestAnimationFrame(this.#tick);\n };\n\n #updateStats(): void {\n const frameWindow = this.#frameDeltas.slice(-this.#statsWindowFrames);\n const fpsWindow = this.#fpsSamples.slice(-Math.min(4, this.#fpsSamples.length));\n\n const frameAvg = mean(frameWindow);\n const frameP95 = computePercentile(frameWindow, 0.95);\n const frameMax = frameWindow.length > 0 ? Math.max(...frameWindow) : null;\n const median = computeMedian(frameWindow);\n\n const refreshRate =\n median && median > 0 ? clamp((1000 / median) as number, 30, 240) : (this.#data.refreshRate ?? null);\n\n const ideal = refreshRate ? 1000 / refreshRate : 1000 / 60;\n\n let droppedFrames = 0;\n let jankFrames = 0;\n let longFrames = 0;\n\n for (const ft of frameWindow) {\n const missed = Math.max(0, Math.round(ft / ideal) - 1);\n droppedFrames += missed;\n\n if (ft > ideal * 1.5) {\n jankFrames += 1;\n }\n\n if (ft > Math.max(50, ideal * 3)) {\n longFrames += 1;\n }\n }\n\n const fps = fpsWindow.length > 0 ? mean(fpsWindow) : null;\n\n this.#data = {\n fps,\n refreshRate,\n frameTimeAvg: frameAvg,\n frameTimeP95: frameP95,\n frameTimeMax: frameMax,\n droppedFrames,\n jankFrames,\n longFrames\n };\n }\n\n #emit(): void {\n this.dispatchEvent(\n new CustomEvent<MonitorFpsDetail>('monitor-fps', {\n detail: this.#data,\n bubbles: true,\n composed: true\n })\n );\n }\n\n #syncCanvasSize(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const rect = canvas.getBoundingClientRect();\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = Math.max(1, Math.floor(rect.width * dpr));\n const height = Math.max(1, Math.floor(rect.height * dpr));\n\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n }\n }\n\n #draw(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = canvas.width / dpr;\n const height = canvas.height / dpr;\n\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n\n const samples = this.#fpsSamples;\n if (samples.length < 2) {\n return;\n }\n\n const target = this.#data.refreshRate ?? 60;\n const scaleMax = Math.max(60, Math.round(target / 10) * 10);\n\n const rating = rateFps(this.#data.fps, this.#data.refreshRate);\n const stroke =\n rating === 'good'\n ? '#22c55e'\n : rating === 'needs-improvement'\n ? '#eab308'\n : rating === 'poor'\n ? '#ef4444'\n : '#6b7280';\n\n // guide lines\n ctx.save();\n ctx.globalAlpha = 0.35;\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 1;\n ctx.setLineDash([3, 3]);\n\n const drawGuide = (fps: number) => {\n const y = height - clamp(fps / scaleMax, 0, 1) * height;\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n ctx.stroke();\n };\n\n drawGuide(Math.min(60, scaleMax));\n drawGuide(Math.min(30, scaleMax));\n\n ctx.restore();\n\n const toY = (fps: number) => height - clamp(fps / scaleMax, 0, 1) * height;\n\n // area fill\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.lineTo(width, height);\n ctx.lineTo(0, height);\n ctx.closePath();\n ctx.globalAlpha = 0.12;\n ctx.fillStyle = stroke;\n ctx.fill();\n\n // line\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.globalAlpha = 1;\n ctx.strokeStyle = stroke;\n ctx.lineWidth = 1.75;\n ctx.setLineDash([]);\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n ctx.stroke();\n }\n}\n","import type { MonitorFpsDetail } from './fps';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Watch } from '~/decorators/Watch';\nimport { styleObject } from '~/utils/template-helpers';\nimport './fps';\n\ninterface LayoutShift extends PerformanceEntry {\n value: number;\n hadRecentInput: boolean;\n}\n\ninterface PerformanceEventTiming extends PerformanceEntry {\n duration: number;\n interactionId?: number;\n}\n\ninterface PerformanceLongTaskTiming extends PerformanceEntry {\n duration: number;\n}\n\ntype CoreWebVitals = {\n LCP: number | null;\n INP: number | null;\n CLS: number;\n FCP: number | null;\n TBT: number;\n};\n\ntype NavigationMetrics = {\n ttfb: number | null;\n domInteractive: number | null;\n loadTime: number | null;\n};\n\ntype ResourceSummary = {\n js: { count: number; size: number };\n css: { count: number; size: number };\n img: { count: number; size: number };\n other: { count: number; size: number };\n totalSize: number;\n};\n\ntype MemoryUsage = {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n} | null;\n\ninterface PerformanceMetrics {\n coreWebVitals: CoreWebVitals;\n navigation: NavigationMetrics;\n resources: ResourceSummary;\n memory: MemoryUsage;\n fps: number | null;\n longTasks: { count: number; totalDuration: number };\n}\n\n// Network Information\ninterface ConnectionInfo {\n effectiveType: string;\n rtt: number;\n}\n\ntype MetricKey = keyof CoreWebVitals | keyof NavigationMetrics | 'fps' | 'TBT';\ntype MetricRating = 'good' | 'needs-improvement' | 'poor' | 'unknown';\n\ndeclare global {\n interface Performance {\n memory?: {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n };\n }\n interface Navigator {\n connection?: {\n effectiveType: string;\n rtt: number;\n addEventListener: (type: string, listener: EventListener) => void;\n removeEventListener: (type: string, listener: EventListener) => void;\n };\n }\n}\n\nconst METRIC_THRESHOLDS = {\n LCP: { good: 2500, poor: 4000 },\n INP: { good: 200, poor: 500 },\n CLS: { good: 0.1, poor: 0.25 },\n FCP: { good: 1800, poor: 3000 },\n ttfb: { good: 800, poor: 1800 },\n loadTime: { good: 3000, poor: 6000 },\n domInteractive: { good: 1500, poor: 3500 },\n fps: { good: 55, poor: 30 },\n TBT: { good: 200, poor: 600 }\n};\n\nconst GLOBAL_BENCHMARKS: Partial<Record<MetricKey, number>> = {\n LCP: 2400,\n INP: 250,\n CLS: 0.05,\n FCP: 1600,\n TBT: 300\n};\n\nconst rateMetric = (metric: MetricKey, value: number | null): MetricRating => {\n if (value === null) {\n return 'unknown';\n }\n const thresholds = METRIC_THRESHOLDS[metric as keyof typeof METRIC_THRESHOLDS];\n if (!thresholds) {\n return 'unknown';\n }\n\n if (metric === 'fps') {\n if (value >= thresholds.good) {\n return 'good';\n }\n if (value >= thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n }\n\n if (value <= thresholds.good) {\n return 'good';\n }\n if (value < thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\nconst formatMetric = (metric: MetricKey, value: number | null): string => {\n if (value === null) {\n return 'N/A';\n }\n if (metric === 'CLS') {\n return value.toFixed(3);\n }\n if (metric === 'fps') {\n return `${Math.round(value)}`;\n }\n if (value < 1000) {\n return `${Math.round(value)}ms`;\n }\n return `${(value / 1000).toFixed(2)}s`;\n};\n\nconst formatBytes = (bytes: number | null | undefined, decimals = 1): string => {\n if (bytes == null || !Number.isFinite(bytes) || bytes <= 0) {\n return '0 B';\n }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst estimateCarbonFootprint = (totalBytes: number): string => {\n if (totalBytes <= 0) {\n return '0g CO2 eq.';\n }\n const emissions = (totalBytes / 1000000000) * 0.81;\n return `${emissions.toFixed(3)}g CO2 eq.`;\n};\n\n@Component({\n tag: 'ease-monitor',\n styles: `\n :host {\n position: relative;\n z-index: 100000;\n user-select: none;\n -webkit-user-select: none;\n \n }\n\n [part=\"container\"] {\n width: 320px;\n overflow: hidden; \n }\n\n [part=\"header\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n [part=\"title\"] {\n display: flex;\n align-items: center;\n gap: 0.5em;\n }\n\n [part=\"content\"] {\n display: grid;\n gap: 1em;\n max-height: 80vh;\n overflow-y: auto;\n }\n\n .metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));\n gap: 0.5em;\n }\n\n .metric-box {\n text-align: center;\n cursor: help;\n }\n\n .metric-value {\n font-variant-numeric: tabular-nums; \n }\n\n .rating-good {\n color: #22c55e;\n }\n .rating-needs-improvement {\n color: #eab308;\n }\n .rating-poor {\n color: #ef4444;\n }\n .rating-unknown {\n color: #6b7280;\n }\n\n .status-indicator.rating-good {\n background-color: #22c55e;\n }\n .status-indicator.rating-needs-improvement {\n background-color: #eab308;\n }\n .status-indicator.rating-poor {\n background-color: #ef4444;\n }\n .status-indicator.rating-unknown {\n background-color: #6b7280;\n }\n\n .memory-used.rating-good {\n background-color: #22c55e;\n }\n .memory-used.rating-needs-improvement {\n background-color: #eab308;\n }\n .memory-used.rating-poor {\n background-color: #ef4444;\n }\n\n .resource-list, .memory-usage, .network-info {\n display: grid;\n gap: 0.25em;\n }\n\n .resource-item, .network-item, .longtask-item {\n display: flex;\n justify-content: space-between;\n font-variant-numeric: tabular-nums;\n }\n\n .memory-bar {\n height: 10px;\n overflow: hidden;\n position: relative;\n }\n\n .memory-used {\n height: 100%;\n transition: width 0.5s ease-in-out;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n }\n \n .carbon-estimate {\n text-align: right;\n }\n\n .trend-indicator {\n display: inline-block;\n width: 1em;\n text-align: center;\n }\n `\n})\nexport class Monitor extends HTMLElement {\n declare requestRender: () => void;\n\n @Watch<PerformanceMetrics>({})\n accessor metrics: PerformanceMetrics = {\n navigation: { loadTime: null, domInteractive: null, ttfb: null },\n coreWebVitals: { LCP: null, INP: null, CLS: 0, FCP: null, TBT: 0 },\n resources: {\n js: { count: 0, size: 0 },\n css: { count: 0, size: 0 },\n img: { count: 0, size: 0 },\n other: { count: 0, size: 0 },\n totalSize: 0\n },\n memory: null,\n fps: null,\n longTasks: { count: 0, totalDuration: 0 }\n };\n\n @Watch<ConnectionInfo>({})\n accessor network: ConnectionInfo = {\n effectiveType: 'N/A',\n rtt: 0\n };\n\n private observers: PerformanceObserver[] = [];\n private memoryInterval: number | null = null;\n\n private clsEntries: LayoutShift[] = [];\n\n private inpEntries: PerformanceEventTiming[] = [];\n private maxINP = 0;\n\n private longTaskEntries: PerformanceLongTaskTiming[] = [];\n\n private trendHistory: Partial<Record<MetricKey, number[]>> = {};\n private maxTrendLength = 5;\n\n connectedCallback(): void {\n this.initObservers();\n this.collectInitialMetrics();\n this.startMemoryMonitoring();\n this.initNetworkMonitoring();\n\n if (document.readyState !== 'complete') {\n window.addEventListener('load', this.handlePageLoad);\n } else {\n this.handlePageLoad();\n }\n }\n\n disconnectedCallback(): void {\n this.observers.forEach((observer) => {\n observer.disconnect();\n });\n this.observers = [];\n this.stopMemoryMonitoring();\n this.stopNetworkMonitoring();\n window.removeEventListener('load', this.handlePageLoad);\n }\n\n @Listen<Monitor, CustomEvent<MonitorFpsDetail>>('monitor-fps')\n handleFpsUpdate(event: CustomEvent<MonitorFpsDetail>): void {\n const fps = event.detail?.fps ?? null;\n this.metrics.fps = fps;\n this.updateTrend('fps', fps);\n this.requestRender();\n }\n\n private handlePageLoad = (): void => {\n setTimeout(() => {\n this.collectNavigationTiming();\n this.requestRender();\n }, 500);\n };\n\n private initObservers(): void {\n if (!('PerformanceObserver' in window)) {\n console.warn('PerformanceObserver API not supported.');\n return;\n }\n\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n this.processPerformanceEntry(entry);\n }\n });\n\n observer.observe({ type: 'largest-contentful-paint', buffered: true });\n observer.observe({ type: 'event', buffered: true });\n observer.observe({ type: 'layout-shift', buffered: true });\n observer.observe({ type: 'paint', buffered: true });\n observer.observe({ type: 'resource', buffered: true });\n observer.observe({ type: 'longtask', buffered: true });\n\n this.observers.push(observer);\n } catch (e) {\n console.error('Error initializing PerformanceObserver:', e);\n }\n }\n\n private collectInitialMetrics(): void {\n this.collectNavigationTiming();\n const resourceEntries = performance.getEntriesByType('resource') as PerformanceResourceTiming[];\n this.processResourceEntries(resourceEntries);\n }\n\n private collectNavigationTiming(): void {\n const navigationEntries = performance.getEntriesByType('navigation');\n if (navigationEntries.length > 0) {\n const navTiming = navigationEntries[0] as PerformanceNavigationTiming;\n\n let ttfb = null;\n if (navTiming.responseStart > 0 && navTiming.fetchStart > 0) {\n ttfb = navTiming.responseStart - navTiming.fetchStart;\n }\n\n let loadTime = null;\n if (navTiming.loadEventEnd > 0) {\n loadTime = navTiming.loadEventEnd - navTiming.startTime;\n }\n\n let domInteractive = null;\n if (navTiming.domInteractive > 0) {\n domInteractive = navTiming.domInteractive - navTiming.startTime;\n }\n\n this.metrics.navigation = { ttfb, loadTime, domInteractive };\n this.updateTrend('loadTime', loadTime);\n this.updateTrend('ttfb', ttfb);\n }\n }\n\n private processPerformanceEntry(entry: PerformanceEntry): void {\n switch (entry.entryType) {\n case 'largest-contentful-paint':\n this.metrics.coreWebVitals.LCP = entry.startTime;\n this.updateTrend('LCP', entry.startTime);\n break;\n case 'event': {\n const eventEntry = entry as PerformanceEventTiming;\n if (eventEntry.interactionId && eventEntry.duration > this.maxINP) {\n this.maxINP = eventEntry.duration;\n this.metrics.coreWebVitals.INP = this.maxINP;\n this.updateTrend('INP', this.maxINP);\n }\n this.inpEntries.push(eventEntry);\n break;\n }\n case 'layout-shift': {\n const lsEntry = entry as LayoutShift;\n if (!lsEntry.hadRecentInput) {\n this.clsEntries.push(lsEntry);\n this.calculateSessionWindowCLS();\n }\n break;\n }\n case 'paint':\n if (entry.name === 'first-contentful-paint') {\n this.metrics.coreWebVitals.FCP = entry.startTime;\n this.updateTrend('FCP', entry.startTime);\n }\n break;\n case 'resource':\n this.processResourceEntries([entry as PerformanceResourceTiming]);\n return;\n case 'longtask': {\n const ltEntry = entry as PerformanceLongTaskTiming;\n this.longTaskEntries.push(ltEntry);\n this.calculateLongTasksAndTBT();\n break;\n }\n }\n this.requestRender();\n }\n\n private calculateSessionWindowCLS(): void {\n let maxCls = 0;\n let currentSessionCls = 0;\n let sessionStartTime = Infinity;\n let lastTime = -Infinity;\n\n this.clsEntries.sort((a, b) => a.startTime - b.startTime);\n\n for (const entry of this.clsEntries) {\n const timeDiff = entry.startTime - lastTime;\n\n if (timeDiff > 1000 || entry.startTime - sessionStartTime > 5000) {\n if (currentSessionCls > 0) {\n maxCls = Math.max(maxCls, currentSessionCls);\n }\n currentSessionCls = 0;\n sessionStartTime = entry.startTime;\n }\n\n currentSessionCls += entry.value;\n lastTime = entry.startTime;\n }\n\n maxCls = Math.max(maxCls, currentSessionCls);\n this.metrics.coreWebVitals.CLS = maxCls;\n this.updateTrend('CLS', maxCls);\n }\n\n private processResourceEntries(entries: PerformanceResourceTiming[]): void {\n const summary = this.metrics.resources;\n\n entries.forEach((entry) => {\n const size = entry.transferSize || 0;\n const initiator = entry.initiatorType;\n const name = entry.name.toLowerCase();\n\n if (initiator === 'script' || name.endsWith('.js')) {\n summary.js.count++;\n summary.js.size += size;\n } else if (initiator === 'css' || name.endsWith('.css') || initiator === 'link') {\n summary.css.count++;\n summary.css.size += size;\n } else if (initiator === 'img' || initiator === 'image' || /\\.(jpg|jpeg|png|gif|svg|webp|avif)$/.test(name)) {\n summary.img.count++;\n summary.img.size += size;\n } else {\n summary.other.count++;\n summary.other.size += size;\n }\n summary.totalSize += size;\n });\n }\n\n private calculateLongTasksAndTBT(): void {\n let tbt = 0;\n let count = 0;\n const referenceTime = this.metrics.coreWebVitals.FCP ?? 0;\n\n this.longTaskEntries.forEach((task) => {\n if (task.startTime >= referenceTime) {\n count++;\n if (task.duration > 50) {\n tbt += task.duration - 50;\n }\n }\n });\n this.metrics.longTasks = { count, totalDuration: tbt };\n this.metrics.coreWebVitals.TBT = tbt;\n this.updateTrend('TBT', tbt);\n }\n\n private startMemoryMonitoring(): void {\n if (!performance.memory) {\n return;\n }\n\n const updateMemory = () => {\n if (performance.memory) {\n const mem = performance.memory;\n this.metrics.memory = {\n jsHeapSizeLimit: Number(mem.jsHeapSizeLimit) || 0,\n totalJSHeapSize: Number(mem.totalJSHeapSize) || 0,\n usedJSHeapSize: Number(mem.usedJSHeapSize) || 0\n };\n this.requestRender();\n }\n };\n\n updateMemory();\n this.memoryInterval = window.setInterval(updateMemory, 3000);\n }\n\n private stopMemoryMonitoring(): void {\n if (this.memoryInterval) {\n clearInterval(this.memoryInterval);\n this.memoryInterval = null;\n }\n }\n\n private initNetworkMonitoring(): void {\n if (navigator.connection) {\n this.updateNetworkInfo();\n navigator.connection.addEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private stopNetworkMonitoring(): void {\n if (navigator.connection) {\n navigator.connection.removeEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private updateNetworkInfo = (): void => {\n if (navigator.connection) {\n this.network = {\n effectiveType: navigator.connection.effectiveType ?? 'N/A',\n rtt: navigator.connection.rtt ?? 0\n };\n }\n };\n\n private updateTrend(key: MetricKey, value: number | null): void {\n if (value === null) {\n return;\n }\n const history = this.trendHistory[key] || [];\n history.push(value);\n if (history.length > this.maxTrendLength) {\n history.shift();\n }\n this.trendHistory[key] = history;\n }\n\n private getTrendDirection(key: MetricKey): string {\n const history = this.trendHistory[key];\n if (!history || history.length < 2) {\n return '';\n }\n\n const currentValue = history[history.length - 1];\n const previousAvg = history.slice(0, history.length - 1).reduce((a, b) => a + b, 0) / (history.length - 1);\n\n const threshold = Math.abs(previousAvg * 0.05);\n const delta = currentValue ?? 0 - previousAvg;\n\n if (Math.abs(delta) < threshold) {\n return '→';\n }\n\n if (key === 'fps') {\n return delta > 0 ? '↑' : '↓';\n } else {\n return delta < 0 ? '↓' : '↑';\n }\n }\n\n private getOverallStatus(): MetricRating {\n const ratings: MetricRating[] = [\n rateMetric('LCP', this.metrics.coreWebVitals.LCP),\n rateMetric('CLS', this.metrics.coreWebVitals.CLS),\n rateMetric('INP', this.metrics.coreWebVitals.INP),\n rateMetric('fps', this.metrics.fps)\n ];\n\n if (ratings.includes('poor')) {\n return 'poor';\n }\n if (ratings.includes('needs-improvement')) {\n return 'needs-improvement';\n }\n if (ratings.every((r) => r === 'unknown')) {\n return 'unknown';\n }\n\n if (ratings.some((r) => r === 'good')) {\n return 'good';\n }\n\n return 'unknown';\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n ${this.renderExpanded()}\n </div>\n `;\n }\n\n private renderExpanded(): TemplateResult {\n return html`\n <div part=\"header\">\n <div part=\"title\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline></svg>\n Performance Monitor\n </div>\n </div>\n <div part=\"content\">\n ${this.renderVitalsAndTiming()}\n ${this.renderRealtime()}\n ${this.renderNetworkInfo()}\n ${this.renderResources()}\n </div>\n `;\n }\n\n private renderMetricBox(label: string, key: MetricKey, value: number | null, description: string): TemplateResult {\n const rating = rateMetric(key, value);\n const formattedValue = formatMetric(key, value);\n const trend = this.getTrendDirection(key);\n const benchmark = GLOBAL_BENCHMARKS[key];\n const vsBenchmark = benchmark ? ` (vs avg ${formatMetric(key, benchmark)})` : '';\n return html`\n <div class=\"metric-box\" title=\"${description}${vsBenchmark}\">\n <div part=\"metric-label\" class=\"metric-label\">${label}</div>\n <div part=\"metric-value\" class=\"metric-value rating-${rating}\" data-rating=${rating}>\n ${formattedValue}\n <span class=\"trend-indicator\">${trend}</span>\n </div>\n </div>\n `;\n }\n\n private renderVitalsAndTiming(): TemplateResult {\n const { LCP, INP, CLS, FCP, TBT } = this.metrics.coreWebVitals;\n const { ttfb, loadTime } = this.metrics.navigation;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Vitals & Timing</div>\n <div class=\"metrics-grid\">\n ${this.renderMetricBox('LCP', 'LCP', LCP, 'Largest Contentful Paint: Measures loading performance.')}\n ${this.renderMetricBox('INP', 'INP', INP, 'Interaction to Next Paint: Measures responsiveness.')}\n ${this.renderMetricBox('CLS', 'CLS', CLS, 'Cumulative Layout Shift: Measures visual stability.')}\n ${this.renderMetricBox('FCP', 'FCP', FCP, 'First Contentful Paint: When the browser renders the first bit of content.')}\n ${this.renderMetricBox('TBT', 'TBT', TBT, 'Total Blocking Time: Sum of blocking portions of long tasks.')}\n ${this.renderMetricBox('TTFB', 'ttfb', ttfb, 'Time to First Byte: Measures server responsiveness.')}\n ${this.renderMetricBox('Load', 'loadTime', loadTime, 'Total Page Load Time.')}\n </div>\n </section>\n `;\n }\n\n private renderRealtime(): TemplateResult {\n const { memory, longTasks } = this.metrics;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Realtime Monitoring</div>\n <ease-monitor-fps></ease-monitor-fps>\n <div class=\"longtask-item\">\n <span>Long Tasks (Count / Blocked ms)</span>\n <span>${longTasks.count} / ${longTasks.totalDuration.toFixed(0)}ms</span>\n </div>\n ${this.renderMemory(memory)}\n </section>\n `;\n }\n\n private renderMemory(memory: MemoryUsage): TemplateResult {\n if (!memory) {\n return html`\n <div class=\"memory-usage\">\n (performance.memory API not supported)\n </div>\n `;\n }\n\n const usedPercent = memory.totalJSHeapSize > 0 ? (memory.usedJSHeapSize / memory.totalJSHeapSize) * 100 : 0;\n\n let rating: MetricRating = 'good';\n if (usedPercent > 85) {\n rating = 'poor';\n } else if (usedPercent > 60) {\n rating = 'needs-improvement';\n }\n\n return html`\n <div class=\"memory-usage\">\n <div class=\"resource-item\">\n <span>Used / Total Heap</span>\n <span>${formatBytes(memory.usedJSHeapSize)} / ${formatBytes(memory.totalJSHeapSize)}</span>\n </div>\n <div class=\"memory-bar\" title=\"${usedPercent.toFixed(1)}% Used\">\n <div class=\"memory-used rating-${rating}\" style=${styleObject({ width: `${Math.min(100, usedPercent)}%` })} data-rating=${rating}></div>\n </div>\n <div class=\"resource-item\">\n <span>Heap Limit</span>\n <span>${formatBytes(memory.jsHeapSizeLimit)}</span>\n </div>\n </div>\n `;\n }\n\n private renderNetworkInfo(): TemplateResult {\n const { effectiveType, rtt } = this.network;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Network Connection</div>\n <div class=\"network-info\">\n <div class=\"network-item\">\n <span>Effective Type</span>\n <span>${effectiveType.toUpperCase()}</span>\n </div>\n <div class=\"network-item\">\n <span>Round Trip Time (RTT)</span>\n <span>${rtt > 0 ? `${rtt}ms` : 'N/A'}</span>\n </div>\n </div>\n </section>\n `;\n }\n\n private renderResources(): TemplateResult {\n const { js, css, img, other, totalSize } = this.metrics.resources;\n const totalCount = js.count + css.count + img.count + other.count;\n\n const renderItem = (label: string, data: { count: number; size: number }) => html`\n <div class=\"resource-item\">\n <span>${label} (${data.count})</span>\n <span>${formatBytes(data.size)}</span>\n </div>\n `;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Resources (Total: ${formatBytes(totalSize)} / ${totalCount} reqs)</div>\n <div class=\"resource-list\">\n ${renderItem('JS', js)}\n ${renderItem('CSS/Links', css)}\n ${renderItem('Images', img)}\n ${renderItem('Other', other)}\n </div>\n <div part=\"carbon-estimate\" class=\"carbon-estimate\">\n Est. Carbon: ${estimateCarbonFootprint(totalSize)}\n </div>\n <div>\n Overall Status: ${this.getOverallStatus()}\n </div>\n </section>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nimport '../input';\nimport '../icons/interface/minus';\nimport '../icons/interface/plus';\n@Component({\n tag: 'ease-number-input',\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n }\n\n [part=\"container\"] {\n min-width: 0;\n }\n\n ease-input {\n --ease-input-padding: 0;\n text-align: center;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n }\n\n [part=\"button\"] {\n position: relative;\n overflow: hidden;\n \n & > div {\n animation: blink .75s forwards;\n position: absolute;\n pointer-events: none;\n inset: 0;\n background-color: var(--ease-number-blink-color, var(--color-white-8));\n }\n }\n\n @keyframes blink {\n 0%,\n 90%,\n 100% {\n opacity: 0;\n }\n 30% {\n opacity: 1;\n }\n }\n `,\n template(this: NumberInput) {\n return html`\n <div part=\"container\">\n <ease-input\n part=\"control\"\n type=\"number\"\n .value=${this.value}\n ?disabled=${this.disabled}\n ?min=${this.min}\n ?max=${this.max}\n ?step=${this.step}\n @input=${this.handleInput}\n @change=${this.handleChange}\n >\n <button\n slot=\"prefix\"\n @click=${this.handleDecrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n ?aria-disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n >\n <ease-icon-minus />\n </button>\n <button\n slot=\"suffix\"\n @click=${this.handleIncrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n ?aria-disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n >\n <ease-icon-plus />\n </button>\n </ease-input>\n </div>\n `;\n }\n})\nexport class NumberInput extends HTMLElement {\n declare requestRender: () => void;\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.value = this.value === null || this.value === undefined ? '' : String(this.value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n addActiveLayer(button: HTMLButtonElement): void {\n const layer = document.createElement('div');\n layer.classList.add('active-layer');\n button.appendChild(layer);\n\n setTimeout(() => {\n layer.remove();\n }, 600);\n }\n\n handleDecrement(event: MouseEvent): void {\n if (this.disabled || this.min === null || Number(this.control?.value) <= this.min) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current - (this.step ?? 1);\n\n if (this.value <= this.min) {\n this.disabled = true;\n }\n }\n\n handleIncrement(event: MouseEvent): void {\n if (this.disabled || this.max === null || Number(this.control?.value) >= this.max) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current + (this.step ?? 1);\n\n if (this.value >= this.max) {\n this.disabled = true;\n }\n }\n}\n","import '../dropdown';\n\nimport type { Dropdown } from '../dropdown';\n\nimport { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-origin',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n flex: 1;\n width: 100%;\n display: grid;\n grid-template-columns: 30px auto;\n grid-gap: 8px;\n }\n\n [part=\"preview\"] {\n width: 30px;\n height: 30px;\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n cursor: pointer;\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n border-radius: var(--radii-md);\n position: relative;\n\n &::before,\n &::after {\n content: '';\n display: block;\n width: 3px;\n height: 3px;\n background-color: var(--color-blue-100);\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -1.5px;\n margin-left: -1.5px;\n }\n\n &::before {\n background-color: var(--color-gray-700);\n box-shadow: -6.5px -6.5px 0 0 var(--color-gray-700), 0 -6.5px 0 0 var(--color-gray-700), 6.5px -6.5px 0 0 var(--color-gray-700), -6.5px 0 0 0 var(--color-gray-700), 6.5px 0 0 0 var(--color-gray-700), -6.5px 6.5px 0 0 var(--color-gray-700), 0 6.5px 0 0 var(--color-gray-700), 6.5px 6.5px 0 0 var(--color-gray-700);\n }\n\n &::after {\n translate: var(--ease-origin-translate-x, 0) var(--ease-origin-translate-y, 0);\n scale: 1.25;\n transition: translate 0.3s cubic-bezier(0.25, 0, 0.5, 1);\n }\n\n &:hover {\n background-color: var(--color-gray-850);\n }\n\n &:focus-within {\n background-color: var(--color-gray-825);\n }\n\n &[data-value=\"top-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"top-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: -6.5px; \n }\n \n &[data-value=\"top-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"center-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 0\n }\n\n &[data-value=\"center-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 0;\n }\n\n &[data-value=\"center-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 0;\n }\n \n &[data-value=\"bottom-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n }\n\n ease-dropdown[part=\"dropdown\"] {\n --ease-dropdown-max-height: 180px;\n\n width: 100%;\n }\n `,\n template(this: Origin) {\n return html`\n <div part=\"container\">\n <div part=\"preview\" data-value=${this.value ?? 'center-center'}></div>\n \n <ease-dropdown part=\"dropdown\" placeholder=\"Select\" id=\"origin-dropdown\" .value=${this.value ?? 'center-center'} fullWidth name=${this.name} @value-change=${this.handleValueChange}>\n <button slot=\"content\" value=\"top-left\">Top Left</button>\n <button slot=\"content\" value=\"top-center\">Top Center</button>\n <button slot=\"content\" value=\"top-right\">Top Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"center-left\">Center Left</button>\n <button slot=\"content\" value=\"center-center\">Center Center</button>\n <button slot=\"content\" value=\"center-right\">Center Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"bottom-left\">Bottom Left</button>\n <button slot=\"content\" value=\"bottom-center\">Bottom Center</button>\n <button slot=\"content\" value=\"bottom-right\">Bottom Right</button>\n </ease-dropdown>\n </div>\n `;\n }\n})\nexport class Origin extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string>({ reflect: true, defaultValue: 'center-center' })\n accessor value: string = 'center-center';\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<Dropdown>('ease-dropdown')\n accessor control!: Dropdown | null;\n\n @Prop<string>({ reflect: true, defaultValue: '' })\n accessor name: string = '';\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Origin, Event, Dropdown>('change', { selector: 'ease-dropdown' })\n handleChange(event: Event, target?: Dropdown | null): void {\n if (!target) {\n return;\n }\n\n this.value = String(target.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n handleValueChange = (event: Event): void => {\n this.value = String(this.control?.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n}\n","import { html, nothing, type TemplateResult } from 'lit-html';\n\nimport { setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n/**\n * Event detail for tab change events\n */\nexport interface TabChangeEventDetail {\n /** The index of the active tab */\n index: number;\n /** The tab id */\n id: string;\n /** The original event */\n event: Event;\n}\n\n/**\n * Panel component - visual container with optional tabs and header actions.\n *\n * Use this component when you want the panel UI without state management,\n * or wrap it around `<ease-state>` for full functionality.\n *\n * @tag ease-panel\n *\n * @slot headline - Panel title text (hidden when tabs are present)\n * @slot actions - Header action buttons, links, or dropdowns\n * @slot - Default slot for main content\n * @slot tab-{id} - Tab panel content (use `data-tab-label` for display name)\n * @slot footer - Footer content below all panels\n *\n * @csspart section - Outer container\n * @csspart header - Header row containing headline/tabs and actions\n * @csspart headline - Title element\n * @csspart tabs - Tab button container\n * @csspart tab - Individual tab button\n * @csspart actions - Actions container\n * @csspart content - Content wrapper (handles height animations)\n * @csspart body - Inner body container\n * @csspart tab-panel - Individual tab panel\n * @csspart footer - Footer container\n *\n * @fires tab-change - Fired when the active tab changes\n */\n@Component({\n tag: 'ease-panel',\n shadowMode: 'open',\n styles: `\n :host {\n --ease-panel-transition-duration: 120ms;\n --ease-panel-transition-easing: cubic-bezier(.25, 0, .5, 1);\n }\n\n [part=\"section\"] {\n display: block;\n width: 100%;\n max-width: var(--ease-panel-max-width, 332px);\n border-radius: var(--ease-panel-radius, 12px);\n border: 1px solid var(--ease-panel-border-color, var(--color-white-6));\n background-clip: padding-box;\n background: var(--ease-panel-background, var(--color-gray-1000));\n box-shadow: var(--ease-panel-shadow, 0 0 40px 0 var(--color-white-2) inset);\n box-sizing: border-box;\n padding: var(--ease-panel-padding, 12px);\n margin: auto;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n margin-bottom: 12px;\n }\n\n [part=\"header\"]:not(:has([part=\"headline\"] slot[name=\"headline\"]::slotted(*))):not(:has([part=\"tabs\"]:not(:empty))):not(:has([part=\"actions\"] slot[name=\"actions\"]::slotted(*))) {\n display: none;\n margin-bottom: 0;\n }\n\n [part=\"headline\"] {\n font-size: var(--ease-panel-title-font-size, 14px);\n font-weight: var(--ease-panel-title-font-weight, 500);\n line-height: var(--ease-panel-title-line-height, 24px);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n color: var(--ease-panel-title-color, var(--color-blue-100));\n margin: 0 0 0 4px;\n flex-grow: 1;\n text-ellipsis: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"headline\"]:has(+ [part=\"tabs\"]:not(:empty)) {\n display: none;\n }\n\n [part=\"tabs\"] {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-grow: 1;\n margin: 0 0 0 4px;\n }\n\n [part=\"tabs\"]:empty {\n display: none;\n }\n\n [part=\"tab\"] {\n appearance: none;\n font-size: var(--ease-panel-tab-font-size, 13px);\n font-weight: var(--ease-panel-tab-font-weight, 500);\n line-height: var(--ease-panel-tab-line-height, 24px);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n color: var(--ease-panel-tab-color, var(--color-gray-600));\n background: transparent;\n border: none;\n padding: 4px 8px;\n margin: 0;\n cursor: pointer;\n border-radius: var(--ease-panel-tab-radius, 6px);\n transition: color 0.2s, background-color 0.2s;\n }\n\n [part=\"tab\"]:hover {\n color: var(--ease-panel-tab-color-hover, var(--color-blue-100));\n }\n\n [part=\"tab\"][aria-selected=\"true\"] {\n color: var(--ease-panel-tab-color-active, var(--color-blue-100));\n background: var(--ease-panel-tab-background-active, var(--color-white-4));\n }\n\n [part=\"actions\"] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n }\n\n slot[name=\"actions\"]::slotted(button),\n slot[name=\"actions\"]::slotted(a) {\n --ease-icon-size: var(--ease-panel-action-icon-size, 16px);\n\n appearance: none;\n flex: 0 0 24px;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 4px;\n margin: 0;\n cursor: pointer;\n color: var(--color-gray-600);\n transition: color 0.2s;\n text-decoration: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n slot[name=\"actions\"]::slotted(button:hover),\n slot[name=\"actions\"]::slotted(button:focus-visible),\n slot[name=\"actions\"]::slotted(a:hover),\n slot[name=\"actions\"]::slotted(a:focus-visible) {\n color: var(--color-blue-100);\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown) {\n flex: 0 0 auto;\n width: auto;\n\n --ease-icon-size: var(--ease-panel-action-icon-size, 16px);\n --ease-dropdown-trigger-padding: 4px;\n --ease-dropdown-radius: 6px;\n --ease-dropdown-background: transparent;\n --ease-dropdown-background-hover: transparent;\n --ease-dropdown-shadow: none;\n --ease-dropdown-color: var(--color-gray-600);\n --ease-popover-placement: bottom-end;\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown:hover),\n slot[name=\"actions\"]::slotted(ease-dropdown:focus-within) {\n --ease-dropdown-color: var(--color-blue-100);\n }\n\n [part=\"content\"] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n margin: auto;\n overflow: hidden;\n }\n\n [part=\"content\"][data-animating=\"true\"] {\n transition: height var(--ease-panel-transition-duration) var(--ease-panel-transition-easing);\n }\n\n [part=\"body\"] {\n width: 100%;\n position: relative;\n }\n\n [part=\"tab-panel\"] {\n width: 100%;\n pointer-events: none;\n display: none;\n }\n\n [part=\"tab-panel\"][data-state=\"active\"] {\n display: block;\n pointer-events: auto;\n }\n\n [part=\"tab-panel\"][data-state=\"hidden\"] {\n display: none;\n pointer-events: none;\n }\n\n [part=\"footer\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--ease-panel-footer-padding, 12px);\n box-sizing: border-box;\n border-top: 1px solid var(--color-white-4);\n\n &:not(:has([data-has-content=\"true\"])) {\n display: none;\n }\n }\n\n ::slotted(:not([slot])),\n ::slotted([slot^=\"tab-\"]) {\n display: grid;\n gap: 12px;\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class Panel extends HTMLElement {\n declare requestRender: () => void;\n\n #tabs: { id: string; label: string }[] = [];\n #isAnimating = false;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n attribute: 'active-tab',\n defaultValue: 0,\n onChange(next, previous) {\n const self = this as Panel;\n if (next !== previous && previous !== undefined) {\n self.handleActiveTabChange(previous, next);\n }\n }\n })\n accessor activeTab: number = 0;\n\n /** @internal */\n handleActiveTabChange(previous: number, next: number): void {\n this.performTabAnimation(previous, next);\n }\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor contentElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[part=\"body\"]')\n accessor bodyElement!: HTMLElement | null;\n\n /**\n * Get the tab configuration\n */\n get tabs(): ReadonlyArray<{ id: string; label: string }> {\n return this.#tabs;\n }\n\n /**\n * Switch to a specific tab by index\n * @param index - The tab index (0-based)\n */\n setTab(index: number): void {\n if (index >= 0 && index < this.#tabs.length && index !== this.activeTab) {\n this.activeTab = index;\n }\n }\n\n connectedCallback(): void {\n this.#syncTabs();\n }\n\n afterRender(): void {\n this.#syncTabs();\n }\n\n render(): TemplateResult {\n const hasTabs = this.#tabs.length > 0;\n\n return html`\n <section part=\"section\">\n <div part=\"header\">\n <h3 part=\"headline\"><slot name=\"headline\"></slot></h3>\n ${this.#renderTabs()}\n <div part=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div part=\"content\">\n <div part=\"body\">\n ${hasTabs ? this.#renderTabPanels() : html`<slot></slot>`}\n </div>\n </div>\n <div part=\"footer\">\n <slot name=\"footer\"></slot>\n </div>\n </section>\n `;\n }\n\n #renderTabs(): TemplateResult | typeof nothing {\n if (this.#tabs.length === 0) {\n return nothing;\n }\n\n return html`\n <div part=\"tabs\" role=\"tablist\">\n ${this.#tabs.map(\n (tab, index) => html`\n <button\n part=\"tab\"\n role=\"tab\"\n aria-selected=${index === this.activeTab ? 'true' : 'false'}\n aria-controls=${`panel-${tab.id}`}\n tabindex=${index === this.activeTab ? 0 : -1}\n @click=${(e: Event) => this.#handleTabClick(index, tab.id, e)}\n @keydown=${(e: KeyboardEvent) => this.#handleTabKeydown(e, index)}\n >\n ${tab.label}\n </button>\n `\n )}\n </div>\n `;\n }\n\n #renderTabPanels(): TemplateResult {\n return html`\n ${this.#tabs.map(\n (tab, index) => html`\n <div\n part=\"tab-panel\"\n role=\"tabpanel\"\n id=${`panel-${tab.id}`}\n aria-labelledby=${`tab-${tab.id}`}\n data-state=${index === this.activeTab ? 'active' : 'hidden'}\n data-index=${index}\n >\n <slot name=${`tab-${tab.id}`}></slot>\n </div>\n `\n )}\n `;\n }\n\n #handleTabClick(index: number, id: string, event: Event): void {\n if (index === this.activeTab) {\n return;\n }\n\n this.activeTab = index;\n\n this.dispatchEvent(\n new CustomEvent<TabChangeEventDetail>('tab-change', {\n detail: { index, id, event },\n bubbles: true,\n composed: true\n })\n );\n }\n\n #handleTabKeydown(event: KeyboardEvent, currentIndex: number): void {\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : this.#tabs.length - 1;\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = currentIndex < this.#tabs.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = this.#tabs.length - 1;\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n this.activeTab = newIndex;\n\n // Focus the new tab button\n queueMicrotask(() => {\n const tabButtons = this.shadowRoot?.querySelectorAll('[part=\"tab\"]');\n const newTabButton = tabButtons?.[newIndex] as HTMLButtonElement | undefined;\n newTabButton?.focus();\n });\n }\n }\n\n async performTabAnimation(fromIndex: number, toIndex: number): Promise<void> {\n if (this.#isAnimating) {\n return;\n }\n\n this.#isAnimating = true;\n\n const duration = 120;\n const easing = 'cubic-bezier(.25, 0, .5, 1)';\n\n const content = this.contentElement;\n\n if (!content) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Get the panels by data-index attribute for reliability\n const fromPanel = this.shadowRoot?.querySelector(\n `[part=\"tab-panel\"][data-index=\"${fromIndex}\"]`\n ) as HTMLElement | null;\n const toPanel = this.shadowRoot?.querySelector(`[part=\"tab-panel\"][data-index=\"${toIndex}\"]`) as HTMLElement | null;\n\n if (!fromPanel || !toPanel) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Lock the current height\n const startHeight = content.getBoundingClientRect().height;\n content.style.height = `${startHeight}px`;\n\n // FIX: Ensure the new panel is hidden immediately.\n toPanel.style.display = 'none';\n toPanel.style.opacity = '0';\n\n // Fade out old content via WAAPI\n try {\n const fadeOut = fromPanel.animate([{ opacity: 1 }, { opacity: 0 }], { duration, easing, fill: 'forwards' });\n await fadeOut.finished;\n fadeOut.cancel();\n } catch {\n // ignore\n }\n\n fromPanel.setAttribute('data-state', 'hidden');\n\n // Prepare and measure new panel while completely invisible\n const previousToState = toPanel.getAttribute('data-state');\n\n toPanel.style.display = 'block';\n toPanel.style.visibility = 'hidden';\n toPanel.style.opacity = '0';\n\n // Force layout, then measure\n void toPanel.offsetHeight;\n const endHeight = toPanel.getBoundingClientRect().height;\n\n // Animate height\n if (startHeight !== endHeight) {\n content.setAttribute('data-animating', 'true');\n void content.offsetHeight;\n content.style.height = `${endHeight}px`;\n await this.#wait(duration);\n }\n\n // Show panel but keep opacity at 0, then fade in\n toPanel.style.visibility = 'visible';\n toPanel.style.opacity = '0';\n\n void toPanel.offsetHeight;\n\n try {\n const fadeIn = toPanel.animate([{ opacity: 0 }, { opacity: 1 }], { duration, easing, fill: 'forwards' });\n await fadeIn.finished;\n fadeIn.cancel();\n } catch {\n // ignore\n }\n\n // Finalize new tab state and cleanup\n toPanel.style.display = '';\n toPanel.style.visibility = '';\n toPanel.style.opacity = '';\n\n if (previousToState !== 'active') {\n toPanel.setAttribute('data-state', 'active');\n }\n\n content.style.height = '';\n content.removeAttribute('data-animating');\n this.#isAnimating = false;\n }\n\n #wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n #syncTabs(): void {\n const tabs: { id: string; label: string }[] = [];\n\n for (const child of Array.from(this.children)) {\n const slot = child.getAttribute('slot');\n if (slot?.startsWith('tab-')) {\n const id = slot.replace('tab-', '');\n const label = child.getAttribute('data-tab-label') || id;\n tabs.push({ id, label });\n }\n }\n\n this.#tabs = tabs.slice(0, 3);\n\n if (this.activeTab >= this.#tabs.length && this.#tabs.length > 0) {\n this.activeTab = 0;\n }\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"footer\"]' })\n onFooterSlotChange(): void {\n this.updateFooterAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot:not([name])' })\n onDefaultSlotChange(): void {\n this.#syncTabs();\n this.requestRender();\n }\n\n private updateFooterAttribute(): void {\n const footer = this.shadowRoot?.querySelector('[part=\"footer\"]');\n\n if (!footer) {\n return;\n }\n\n const footerSlot = this.shadowRoot?.querySelector('slot[name=\"footer\"]') as HTMLSlotElement;\n const hasFooter = Boolean(footerSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(footer, 'data-has-content', hasFooter);\n }\n}\n","export class RadioOption extends HTMLElement {\n connectedCallback(): void {\n this.hidden = true;\n if (!this.hasAttribute('slot')) {\n this.setAttribute('slot', 'option');\n }\n }\n}\n\nif (!customElements.get('radio-option')) {\n customElements.define('radio-option', RadioOption);\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../button';\n\nimport { dispatchControlEvent } from '../shared';\n\nexport * from './option';\n\ninterface RadioEntry {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-radio-group',\n shadowMode: 'open',\n styles: `\n :host {\n display: flex;\n }\n\n [part=\"option\"] {\n flex: 0 0 50%;\n display: block;\n }\n\n [part=\"group\"] {\n display: flex;\n position: relative;\n z-index: 0;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n padding: var(--ease-radio-padding, 3px);\n border-radius: var(--ease-radio-radius, var(--radii-md));\n background-color: var(--ease-radio-background, var(--color-gray-875));\n box-shadow: var(\n --ease-radio-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n ::slotted(button) {\n padding: var(--ease-radio-option-padding, 4px 0);\n line-height: var(--ease-radio-option-line-height, 16px);\n margin: 0;\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-radio-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-radio-option-font-weight, 500);\n color: var(--ease-radio-option-color, var(--color-gray-600));\n transition: color 0.2s;\n flex-grow: 1;\n }\n\n ::slotted(button:hover),\n ::slotted(button:focus-visible) {\n color: var(--color-blue-100);\n }\n\n ::slotted(button[data-active=\"true\"]) {\n color: var(--color-blue-100);\n }\n }\n `,\n template() {\n return html`\n <div part=\"group\">\n <slot name=\"content\"></slot>\n </div>\n `;\n }\n})\nexport class RadioGroup extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null, RadioGroup>({\n reflect: true,\n defaultValue: null,\n onChange(this: RadioGroup, next, previous) {\n if (next === previous) {\n return;\n }\n this.updateOptionSelectionState();\n }\n })\n accessor value: string | null = null;\n\n @Query<HTMLElement>('[part=\"group\"]')\n accessor groupElement!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: RadioEntry[] = [];\n #currentSlot: HTMLSlotElement | null = null;\n #optionsInitialized = false;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n }\n\n afterRender(): void {\n const panel = this.groupElement;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'radiogroup');\n }\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.updateOptionSelectionState();\n }\n }\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: RadioEntry[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.setAttribute('variant', this.value === value ? 'default' : 'link');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as RadioEntry['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n }\n\n #removeOptionListeners(options: RadioEntry[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n return;\n }\n\n let selectedLabel: string | null = null;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n option.element.setAttribute('variant', isSelected ? 'default' : 'link');\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n const hasValue = Boolean(this.value && selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-radio-input',\n shadowMode: 'open',\n styles: `\n .radio {\n display: table;\n border-radius: var(--ease-radio-input-radius, 12px);\n position: relative;\n }\n\n [part=\"radio\"] {\n display: table;\n appearance: none;\n outline: none;\n border: none;\n background: none;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-radio-input-size, 24px);\n height: var(--ease-radio-input-size, 24px);\n }\n\n .radio svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-radio-input-dot-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n\n .radio svg .top {\n transform-origin: 12px -12px;\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .dot {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .drop {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .top {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .drop {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"].anim-checked {\n animation: radio-border-expand 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-checked + svg .top {\n animation: radio-top 0.8s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .dot {\n animation: radio-dot 0.6s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .drop {\n animation: radio-drop 0.6s ease-out 0.4s forwards;\n }\n\n [part=\"control\"].anim-unchecked {\n animation: radio-border-contract 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .top {\n animation: radio-top-reverse 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .dot {\n animation: radio-dot-reverse 0.6s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .drop {\n animation: radio-drop-reverse 0.6s ease-out forwards;\n }\n\n @keyframes radio-border-expand {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n 25% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes radio-top {\n 0% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n }\n 25% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n }\n 100% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n }\n }\n\n @keyframes radio-dot {\n 0% {\n transform: translateY(-17px) translateZ(0);\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-drop {\n 0% {\n transform: translateY(-14px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-border-contract {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 75% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes radio-top-reverse {\n 0% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n 75% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-dot-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-drop-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n }\n `,\n template(this: RadioInput) {\n return html`\n <button part=\"radio\" type=\"button\" role=\"radio\" aria-checked=${this.checked} ?disabled=${this.disabled}>\n <div class=\"radio\">\n <input part=\"control\" name=${this.name} value=${this.value} ?checked=${this.checked} ?disabled=${this.disabled} type=\"radio\" />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <circle class=\"top\" cx=\"12\" cy=\"-12\" r=\"8\" />\n <circle class=\"dot\" cx=\"12\" cy=\"12\" r=\"5\" />\n <circle class=\"drop\" cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"1.25\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class RadioInput extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, RadioInput>({\n type: Boolean,\n reflect: true,\n onChange(this: RadioInput, next: boolean) {\n if (next && this.name) {\n const form = this.closest('form');\n const root = form ?? (this.getRootNode() as Document | ShadowRoot);\n const others = Array.from(root.querySelectorAll(`ease-radio-input[name=\"${this.name}\"]`)) as RadioInput[];\n\n others.forEach((other) => {\n if (other !== this && other.checked) {\n other.checked = false;\n }\n });\n }\n }\n })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n private _firstRender = true;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n if (this._firstRender) {\n this._firstRender = false;\n this._prevChecked = this.checked;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const input = this.shadowRoot?.querySelector('[part=\"control\"]') as HTMLInputElement;\n const svg = this.shadowRoot?.querySelector('svg[viewBox=\"0 0 24 24\"]');\n if (!input || !svg) {\n return;\n }\n\n input.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n input.classList.add(animClass);\n svg.classList.add(animClass);\n\n const duration = 800; // Longest animation duration in ms\n\n setTimeout(() => {\n input.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<RadioInput, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled || this.checked) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = true;\n\n dispatchControlEvent(this, 'radio', { value: this.checked, event });\n }\n}\n","import '../input';\n\nimport { html } from 'lit-html';\n\nimport { type ControlEventDetail, coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-slider',\n styles: `\n :host {\n display: contents;\n --track-color: var(--ease-slider-track-color, var(--color-gray-825));\n --active-track-color: var(--ease-slider-active-track-color, var(--color-blue-1100));\n --thumb-color: var(--ease-slider-thumb-color, var(--color-blue-900));\n --thumb-size: var(--ease-slider-thumb-size, 18px);\n --track-height: var(--ease-slider-track-height, 4px);\n }\n\n [part=\"container\"] {\n flex: 1;\n display: grid;\n grid-template-columns: auto var(--ease-slider-value-width, 36px);\n grid-gap: var(--ease-slider-gap, 12px);\n }\n\n ease-input[part=\"value\"] {\n --ease-input-padding: 8px 0;\n min-width: 0;\n text-align: center;\n width: var(--ease-slider-value-width, 36px);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n input[part=\"control\"][type=\"range\"] {\n height: var(--ease-slider-height, 30px);\n margin: 0;\n padding: 0;\n appearance: none;\n background-color: transparent;\n width: 100%;\n cursor: pointer;\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n height: var(--track-height);\n background: linear-gradient(to right, var(--active-track-color) var(--progress, 0%), var(--track-color) var(--progress, 0%));\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-track {\n width: 100%;\n height: var(--track-height);\n background: var(--track-color);\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-progress {\n background-color: var(--active-track-color);\n height: var(--track-height);\n border-radius: calc(var(--track-height) / 2);\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-thumb {\n appearance: none;\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n margin-top: calc((var(--track-height) - var(--thumb-size)) / 2);\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n }\n \n input[part=\"control\"][type=\"range\"]:hover::-webkit-slider-thumb {\n transform: scale(1.075);\n }\n \n input[part=\"control\"][type=\"range\"]:active::-webkit-slider-thumb {\n transform: scale(.975);\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-thumb {\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n border: none;\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n }\n\n input[part=\"control\"][type=\"range\"]:hover::-moz-range-thumb {\n transform: scale(1.075);\n }\n\n input[part=\"control\"][type=\"range\"]:active::-moz-range-thumb {\n transform: scale(.975);\n }\n `,\n template(this: Slider) {\n return html`\n <div part=\"container\">\n <input\n part=\"control\"\n type=\"range\"\n .min=${this.min ?? 0}\n .max=${this.max ?? 100}\n .step=${this.step ?? 1}\n .value=${String(this.value ?? 0)}\n ?disabled=${this.disabled}\n ?aria-disabled=${this.disabled}\n />\n \n <ease-input\n part=\"value\"\n type=\"number\"\n placeholder=\"-\"\n .disabled=${Boolean(this.disabled)}\n .value=${this.value === null || this.value === undefined ? '' : String(this.value)}\n />\n </div>\n `;\n }\n})\nexport class Slider extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n @Query<HTMLElement>('ease-input')\n accessor valueControl!: (HTMLElement & { value?: string | null }) | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? 0;\n\n control.value = String(value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.type = 'range';\n control.setAttribute('part', 'control');\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n this.updateProgress();\n }\n\n @Listen<Slider, Event, HTMLInputElement>('input', { selector: 'input[type=\"range\"]' })\n handleRangeInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<Slider, Event, HTMLInputElement>('change', { selector: 'input[type=\"range\"]' })\n handleRangeChange(event: Event, target?: HTMLInputElement | null): void {\n if (target) {\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('input', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueInput(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event: event.detail?.event ?? event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('change', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueChange(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event: event.detail?.event ?? event });\n }\n\n updateProgress(): void {\n if (!this.control) {\n return;\n }\n\n // Ensure numeric coercion for proper calculation\n const value = Number(this.value) || 0;\n const min = Number(this.min) || 0;\n const max = Number(this.max) || 100;\n const percent = max === min ? 0 : ((value - min) / (max - min)) * 100;\n this.control.style.setProperty('--progress', `${Math.max(0, Math.min(100, percent))}%`);\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { CONTROL_CHANGE_EVENT, type ControlEventDetail, dispatchControlEvent } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n name?: string;\n};\n\ntype StateChangeCallback<T = unknown> = (value: T, name: string) => void;\ntype StateSubscription = { unsubscribe: () => void };\n\n/**\n * Event detail for state change events\n */\nexport interface StateChangeEventDetail {\n /** The name of the control that changed */\n name: string;\n /** The new value */\n value: unknown;\n /** The complete state object */\n state: Record<string, unknown>;\n /** The original event */\n event: Event;\n}\n\nconst readControlValue = (element: ControlElement): unknown => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return element.value;\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked;\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n\nconst getControlName = (element: ControlElement): string | null => {\n if (typeof element.name === 'string' && element.name) {\n return element.name;\n }\n return element.getAttribute?.('name') ?? null;\n};\n\n/**\n * State aggregator component - collects and manages state from child controls.\n *\n * This component provides state management without any visual styling.\n * Use it standalone or wrap it with `<ease-panel>` for a styled container.\n *\n * @tag ease-state\n *\n * @slot - Default slot for controls\n *\n * @fires state-change - Fired when any control value changes\n *\n * @example\n * ```html\n * <!-- Standalone usage (no panel) -->\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * <ease-field label=\"Loop\">\n * <ease-toggle name=\"loop\"></ease-toggle>\n * </ease-field>\n * </ease-state>\n *\n * <!-- With panel wrapper -->\n * <ease-panel>\n * <span slot=\"headline\">Animation Controls</span>\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * </ease-state>\n * </ease-panel>\n * ```\n */\n@Component({\n tag: 'ease-state',\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n display: grid;\n gap: var(--ease-state-gap, 12px);\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class State extends HTMLElement {\n declare requestRender: () => void;\n\n #controls: Map<string, ControlElement> = new Map();\n #state: Record<string, unknown> = {};\n #initialState: Record<string, unknown> = {};\n #subscribers: Map<string | '*', Set<StateChangeCallback>> = new Map();\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Query<HTMLSlotElement>('slot')\n accessor defaultSlot!: HTMLSlotElement | null;\n\n /**\n * Get the current state object with all control values\n */\n get state(): Readonly<Record<string, unknown>> {\n return { ...this.#state };\n }\n\n /**\n * Get a specific control value by name\n * @param name - The control name\n * @returns The control value or undefined\n */\n get(name: string): unknown {\n return this.#state[name];\n }\n\n /**\n * Set a control value programmatically\n * @param name - The control name\n * @param value - The new value\n */\n set(name: string, value: unknown): void {\n const control = this.#controls.get(name);\n if (control) {\n // Update the control element\n if ('value' in control) {\n (control as { value: unknown }).value = value;\n } else if (typeof value === 'boolean' && 'checked' in control) {\n (control as { checked: boolean }).checked = value;\n }\n }\n\n this.#updateState(name, value, new Event('programmatic'));\n }\n\n /**\n * Subscribe to state changes\n * @param nameOrCallback - Control name to watch, '*' for all, or callback for all changes\n * @param callback - Callback when using name filter\n * @returns Subscription with unsubscribe method\n */\n subscribe(callback: StateChangeCallback): StateSubscription;\n subscribe(name: string, callback: StateChangeCallback): StateSubscription;\n subscribe(nameOrCallback: string | StateChangeCallback, callback?: StateChangeCallback): StateSubscription {\n let name: string;\n let cb: StateChangeCallback;\n\n if (typeof nameOrCallback === 'function') {\n name = '*';\n cb = nameOrCallback;\n } else {\n name = nameOrCallback;\n if (!callback) {\n throw new Error('[ease-state] subscribe(name, callback) requires a callback');\n }\n cb = callback;\n }\n\n if (!this.#subscribers.has(name)) {\n this.#subscribers.set(name, new Set());\n }\n this.#subscribers.get(name)?.add(cb);\n\n return {\n unsubscribe: () => {\n this.#subscribers.get(name)?.delete(cb);\n }\n };\n }\n\n /**\n * Reset all controls to their initial values\n */\n reset(): void {\n for (const [name, value] of Object.entries(this.#initialState)) {\n this.set(name, value);\n }\n }\n\n connectedCallback(): void {\n this.#attach();\n this.defaultSlot?.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n disconnectedCallback(): void {\n this.#detach();\n this.defaultSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('input', { target: (host) => host })\n handleInternalInput(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('change', { target: (host) => host })\n handleInternalChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>(CONTROL_CHANGE_EVENT, { target: (host) => host })\n handleControlChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n #handleControlEvent(event: Event | CustomEvent<ControlEventDetail>): void {\n if ('detail' in event && event.detail?.name) {\n this.#updateState(event.detail.name, event.detail.value, event);\n return;\n }\n\n if (!(event.target instanceof Element)) {\n return;\n }\n\n const control = event.target as ControlElement;\n const name = getControlName(control);\n\n if (!name || !this.#controls.has(name)) {\n return;\n }\n\n const value = readControlValue(control);\n this.#updateState(name, value, event);\n }\n\n #handleSlotChange = (): void => {\n this.#detach();\n this.#attach();\n };\n\n #attach(): void {\n const slot = this.defaultSlot;\n if (!slot) {\n return;\n }\n\n const findControls = (el: Element): ControlElement[] => {\n const controls: ControlElement[] = [];\n const name = getControlName(el as ControlElement);\n\n if (name) {\n controls.push(el as ControlElement);\n }\n\n if (el.shadowRoot) {\n for (const child of el.shadowRoot.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n }\n\n for (const child of el.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n\n return controls;\n };\n\n this.#controls.clear();\n this.#state = {};\n\n const elements = slot.assignedElements({ flatten: true });\n\n for (const element of elements) {\n const controls = findControls(element);\n for (const control of controls) {\n const name = getControlName(control);\n if (name) {\n this.#controls.set(name, control);\n const value = readControlValue(control);\n this.#state[name] = value;\n this.#initialState[name] = value;\n }\n }\n }\n\n const first = this.#controls.values().next().value;\n if (first) {\n const name = getControlName(first);\n this.value = name && this.#state[name] != null ? String(this.#state[name]) : null;\n }\n }\n\n #detach(): void {\n this.#controls.clear();\n }\n\n #updateState(name: string, value: unknown, event: Event): void {\n const prevValue = this.#state[name];\n if (prevValue === value) {\n return;\n }\n\n this.#state[name] = value;\n\n this.value = String(value);\n\n for (const cb of this.#subscribers.get(name) ?? []) {\n cb(value, name);\n }\n for (const cb of this.#subscribers.get('*') ?? []) {\n cb(value, name);\n }\n\n dispatchControlEvent(this, 'state-change', {\n name,\n value,\n state: this.state,\n event\n } as StateChangeEventDetail & { event: Event });\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-toggle',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"control\"] {\n display: block;\n border-radius: var(--ease-toggle-radius, 10px);\n padding: var(--ease-toggle-padding, 4px);\n margin: 0;\n border: none;\n outline: none;\n appearance: none;\n cursor: pointer;\n background-color: var(--ease-toggle-on-background, var(--color-blue-900));\n transition: box-shadow 0.2s, background-color 0.2s;\n }\n\n [part=\"control\"] svg {\n width: var(--ease-toggle-width, 26px);\n height: var(--ease-toggle-height, 12px);\n display: block;\n fill: none;\n overflow: visible;\n\n path {\n transition: scale 0.2s, translate 0.2s, opacity 0.2s;\n stroke: var(--color-white);\n fill: var(--color-white-80);\n stroke-width: 1.5;\n }\n\n [part=\"default\"] {\n transform-origin: 6px 6px;\n }\n\n [part=\"active\"] {\n transform-origin: 23px 6px;\n }\n\n }\n\n :host([disabled]) [part=\"control\"] {\n cursor: default;\n opacity: 0.75;\n }\n\n :host([checked]) [part=\"control\"] {\n box-shadow: inset 0 0 0 1px var(--color-white-15), inset 0 1px 0 0 var(--color-white-20), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-12));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-30);\n }\n\n svg {\n [part=\"default\"] {\n scale: .25;\n translate: 10px 0;\n opacity: 0;\n }\n\n [part=\"active\"] {\n scale: 1;\n translate: 0 0;\n }\n }\n }\n\n :host(:not([checked])) [part=\"control\"] {\n background-color: var(--ease-toggle-off-background, var(--color-gray-800));\n box-shadow: inset 0 0 0 1px var(--color-white-10), inset 0 1px 0 0 var(--color-white-10), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-6));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-12);\n }\n\n svg {\n [part=\"default\"] {\n scale: 1;\n translate: 0 0;\n }\n\n [part=\"active\"] {\n scale: .25;\n translate: -10px 0;\n opacity: 0;\n }\n }\n }\n `,\n template(this: Toggle) {\n return html`\n <button part=\"control\" type=\"button\" aria-pressed=\"false\">\n <svg viewBox=\"0 0 26 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"url(#${this.filterId})\">\n <path part=\"default\" d=\"M0 6C0 2.68629 2.68629 0 6 0V0C9.31371 0 12 2.68629 12 6V6C12 9.31371 9.31371 12 6 12V12C2.68629 12 0 9.31371 0 6V6Z\" />\n <path part=\"active\" d=\"M14 6C14 2.68629 16.6863 0 20 0V0C23.3137 0 26 2.68629 26 6V6C26 9.31371 23.3137 12 20 12V12C16.6863 12 14 9.31371 14 6V6Z\" />\n </svg>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Toggle extends HTMLElement {\n declare requestRender: () => void;\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n filterId: string = `filter-${crypto.randomUUID()}`;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.setAttribute('aria-pressed', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Toggle, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'toggle', { value: this.checked, event });\n }\n}\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-tooltip',\n shadowMode: 'open',\n styles: `\n :host {\n display: inline-block;\n position: relative;\n }\n\n ease-popover::part(content) {\n inset: auto;\n }\n\n [data-tooltip-content] {\n background-color: var(--ease-tooltip-background, var(--color-gray-400));\n color: var(--ease-tooltip-color, var(--color-gray-900));\n padding: var(--ease-tooltip-padding, 4px 8px);\n border-radius: var(--ease-tooltip-radius, 4px);\n font-family: var(--ease-font-family, inherit);\n font-size: var(--ease-tooltip-font-size, 10px);\n font-weight: var(--ease-tooltip-font-weight, 500);\n max-width: var(--ease-tooltip-max-width, 220px);\n box-shadow: var(--ease-tooltip-shadow, 0 2px 8px rgba(0, 0, 0, 0.2));\n display: none;\n }\n\n :host([open]) [data-tooltip-content] {\n display: block;\n }\n `\n})\nexport class Tooltip extends HTMLElement {\n #hoverTimer: number | null = null;\n\n #trigger: HTMLElement | null = null;\n #content: HTMLElement | null = null;\n\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Tooltip)._handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 300 })\n accessor delay = 300;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'top-center' })\n accessor placement: Placement = 'top-center';\n\n @Query<HTMLElement>('[slot=\"trigger\"]')\n accessor triggerElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[data-tooltip-content]')\n accessor contentElement!: HTMLElement | null;\n\n disconnectedCallback(): void {\n this.#clearTimer();\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n this.#trigger = null;\n }\n\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n this.#content = null;\n }\n }\n\n afterRender(): void {\n this.#updateListeners();\n const content = this.contentElement;\n const isVisible = this.open;\n\n if (content) {\n content.setAttribute('role', 'tooltip');\n content.setAttribute('aria-hidden', isVisible ? 'false' : 'true');\n content.dataset.open = isVisible ? 'true' : 'false';\n content.hidden = !isVisible;\n }\n }\n\n render(): TemplateResult {\n return html`\n <ease-popover .placement=${this.placement} ?open=${this.open}>\n <slot name=\"trigger\" slot=\"trigger\"></slot>\n <div\n data-tooltip-content\n role=\"tooltip\"\n data-open=${this.open ? 'true' : 'false'}\n ?hidden=${!this.open}\n >\n <slot></slot>\n </div>\n </ease-popover>\n `;\n }\n\n _handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#clearTimer();\n }\n\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Tooltip>({\n content: (host) => host.contentElement,\n triggers: (host) => [host.triggerElement],\n disabled: (host) => !host.open\n })\n handleOutsideDismiss(): void {\n if (!this.open) {\n return;\n }\n\n this.#clearTimer();\n this.open = false;\n }\n\n #clearTimer(): void {\n if (this.#hoverTimer !== null) {\n window.clearTimeout(this.#hoverTimer);\n this.#hoverTimer = null;\n }\n }\n\n #startTimer(callback: () => void): void {\n this.#clearTimer();\n const wait = this.delay ?? 0;\n\n if (wait > 0) {\n this.#hoverTimer = window.setTimeout(callback, wait);\n } else {\n callback();\n }\n }\n\n #handleEnter = (): void => {\n this.#startTimer(() => {\n this.open = true;\n });\n };\n\n #handleLeave = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #handleFocusIn = (): void => {\n this.#clearTimer();\n this.open = true;\n };\n\n #handleFocusOut = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #updateListeners(): void {\n const trigger = this.triggerElement;\n const content = this.contentElement ?? null;\n\n if (trigger !== this.#trigger) {\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n }\n if (trigger) {\n trigger.addEventListener('mouseenter', this.#handleEnter);\n trigger.addEventListener('mouseleave', this.#handleLeave);\n trigger.addEventListener('focusin', this.#handleFocusIn);\n trigger.addEventListener('focusout', this.#handleFocusOut);\n }\n this.#trigger = trigger;\n }\n\n if (content !== this.#content) {\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n }\n if (content) {\n content.addEventListener('mouseenter', this.#handleEnter);\n content.addEventListener('mouseleave', this.#handleLeave);\n }\n this.#content = content ?? null;\n }\n }\n}\n","/**\n * Style injection utilities for runtime CSS application.\n */\n\nconst STYLE_ID_PREFIX = 'ease-webkit-';\n\n/**\n * Check if we're in a browser environment.\n */\nexport const isBrowser = (): boolean => typeof document !== 'undefined' && typeof window !== 'undefined';\n\n/**\n * Inject a style tag with the given CSS content.\n */\nexport function injectStyle(id: string, css: string, nonce?: string): HTMLStyleElement | null {\n if (!isBrowser()) {\n return null;\n }\n\n const fullId = STYLE_ID_PREFIX + id;\n\n // Check if already injected\n let style = document.getElementById(fullId) as HTMLStyleElement | null;\n if (style) {\n // Update content if different\n if (style.textContent !== css) {\n style.textContent = css;\n }\n return style;\n }\n\n // Create new style element\n style = document.createElement('style');\n style.id = fullId;\n style.textContent = css;\n\n if (nonce) {\n style.nonce = nonce;\n }\n\n document.head.appendChild(style);\n return style;\n}\n\n/**\n * Remove an injected style tag.\n */\nexport function removeStyle(id: string): void {\n if (!isBrowser()) {\n return;\n }\n\n const fullId = STYLE_ID_PREFIX + id;\n const style = document.getElementById(fullId);\n if (style) {\n style.remove();\n }\n}\n\n/**\n * Check if a style is already injected.\n */\nexport function hasStyle(id: string): boolean {\n if (!isBrowser()) {\n return false;\n }\n\n const fullId = STYLE_ID_PREFIX + id;\n return document.getElementById(fullId) !== null;\n}\n\n// --------------------------\n// Preset styles\n// --------------------------\n\n/**\n * Minimal reset styles (box-sizing, etc.)\n */\nexport const RESET_CSS = `\n@layer ease-reset {\n *,\n *::after,\n *::before {\n box-sizing: border-box;\n transition-timing-function: cubic-bezier(0.25, 0, 0.5, 1);\n }\n\n :where(html) {\n color-scheme: light dark;\n hanging-punctuation: first allow-end last;\n interpolate-size: allow-keywords;\n scroll-behavior: smooth;\n scrollbar-gutter: stable;\n text-size-adjust: none;\n -webkit-text-size-adjust: none;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-smoothing: antialiased;\n }\n\n :where(html.translated-rtl) {\n direction: rtl;\n }\n\n @media (prefers-reduced-motion: reduce) {\n :where(html) {\n scroll-behavior: auto;\n }\n }\n\n :where(body) {\n min-block-size: 100svb;\n min-inline-size: 300px;\n }\n\n :where(canvas, img, picture, svg, video) {\n block-size: auto;\n border: none;\n display: block;\n max-inline-size: 100%;\n }\n\n :where(button) {\n cursor: pointer;\n user-select: none;\n }\n\n :where(textarea) {\n resize: vertical;\n }\n\n :where(textarea:not([rows])) {\n field-sizing: content;\n }\n\n :where(fieldset, iframe) {\n border: none;\n }\n\n :where(p, li, h1, h2, h3, h4, h5, h6) {\n overflow-wrap: break-word;\n text-wrap: pretty;\n margin: 0;\n }\n\n :where(abbr[title]) {\n border: none;\n text-decoration: none;\n }\n\n :where(cite) {\n font-style: inherit;\n }\n\n :where(small) {\n font-size: inherit;\n }\n\n :where(li, ol, ul) {\n list-style: none;\n }\n\n :where(nav:not([role='list'])):is(ul, li, ol, ul) {\n margin: 0;\n padding: 0;\n }\n\n :where(dialog, [popover]) {\n background: transparent;\n border: none;\n color: inherit;\n margin: auto;\n max-block-size: none;\n max-inline-size: none;\n position: fixed;\n }\n\n :where([popover]) {\n inset: auto;\n }\n\n :where(dialog:not([open], [popover]), [popover]:not(:popover-open)) {\n display: none;\n }\n\n :where([hidden]:not([hidden='until-found'])) {\n display: none;\n }\n}\n`.trim();\n\n/**\n * Base body/html styles for dark theme.\n */\nexport const BASE_CSS = `\nhtml,\nbody {\n background-color: var(--color-gray-900);\n}\n\nbody {\n font-family: var(--ease-font-family, 'Instrument Sans', sans-serif);\n font-optical-sizing: auto;\n font-weight: 400;\n font-style: normal;\n font-variation-settings: 'wdth' 100;\n min-height: 100dvh;\n color: var(--color-gray-600);\n}\n`.trim();\n\n/**\n * Combined main styles (reset + base).\n */\nexport const MAIN_CSS = `${RESET_CSS}\\n\\n${BASE_CSS}`;\n\nexport type StylePreset = 'reset' | 'base' | 'main';\n\n/**\n * Get CSS content for a preset.\n */\nexport function getPresetCSS(preset: StylePreset): string {\n switch (preset) {\n case 'reset':\n return RESET_CSS;\n case 'base':\n return BASE_CSS;\n case 'main':\n return MAIN_CSS;\n default:\n return '';\n }\n}\n\n/**\n * Inject preset styles.\n */\nexport function injectPreset(preset: StylePreset, nonce?: string): HTMLStyleElement | null {\n const css = getPresetCSS(preset);\n return injectStyle(preset, css, nonce);\n}\n\n/**\n * Remove preset styles.\n */\nexport function removePreset(preset: StylePreset): void {\n removeStyle(preset);\n}\n","/**\n * Font loading utilities.\n */\n\nimport { isBrowser } from './style-inject';\n\nconst FONT_LINK_ID_PREFIX = 'ease-webkit-font-';\nconst PRECONNECT_ID = 'ease-webkit-preconnect-google';\n\n/**\n * Font source configuration.\n */\nexport interface FontSource {\n /** Source type */\n source: 'google' | 'css';\n /** For Google fonts: the family name */\n family?: string;\n /** For Google fonts: the css2 query params (e.g., 'wght@400..700') */\n css2?: string;\n /** For CSS source: the URL to the CSS file */\n url?: string;\n}\n\n/**\n * Font configuration map.\n */\nexport type FontConfig = Record<string, FontSource>;\n\n/**\n * Default fonts used by the kit.\n */\nexport const DEFAULT_FONTS: FontConfig = {\n 'Instrument Sans': {\n source: 'google',\n family: 'Instrument Sans',\n css2: 'opsz,wght@14..32,400..700'\n },\n 'Geist Mono': {\n source: 'google',\n family: 'Geist Mono',\n css2: 'wght@100..900'\n }\n};\n\n/**\n * Generate a Google Fonts URL.\n */\nfunction buildGoogleFontUrl(family: string, css2?: string): string {\n const encodedFamily = encodeURIComponent(family).replace(/%20/g, '+');\n const params = css2 ? `:${css2}` : '';\n return `https://fonts.googleapis.com/css2?family=${encodedFamily}${params}&display=swap`;\n}\n\n/**\n * Inject preconnect links for Google Fonts.\n */\nfunction injectPreconnect(): void {\n if (!isBrowser()) {\n return;\n }\n\n // Check if already added\n if (document.getElementById(PRECONNECT_ID)) {\n return;\n }\n\n const head = document.head;\n\n // preconnect to fonts.googleapis.com\n const preconnect1 = document.createElement('link');\n preconnect1.id = PRECONNECT_ID;\n preconnect1.rel = 'preconnect';\n preconnect1.href = 'https://fonts.googleapis.com';\n head.appendChild(preconnect1);\n\n // preconnect to fonts.gstatic.com\n const preconnect2 = document.createElement('link');\n preconnect2.rel = 'preconnect';\n preconnect2.href = 'https://fonts.gstatic.com';\n preconnect2.crossOrigin = 'anonymous';\n head.appendChild(preconnect2);\n}\n\n/**\n * Inject a font link.\n */\nfunction injectFontLink(id: string, url: string): HTMLLinkElement | null {\n if (!isBrowser()) {\n return null;\n }\n\n const fullId = FONT_LINK_ID_PREFIX + id;\n\n // Check if already injected\n let link = document.getElementById(fullId) as HTMLLinkElement | null;\n if (link) {\n return link;\n }\n\n link = document.createElement('link');\n link.id = fullId;\n link.rel = 'stylesheet';\n link.href = url;\n\n document.head.appendChild(link);\n return link;\n}\n\n/**\n * Remove a font link.\n */\nfunction removeFontLink(id: string): void {\n if (!isBrowser()) {\n return;\n }\n\n const fullId = FONT_LINK_ID_PREFIX + id;\n const link = document.getElementById(fullId);\n if (link) {\n link.remove();\n }\n}\n\n/**\n * Inject fonts based on configuration.\n */\nexport function injectFonts(config: FontConfig | 'default' | false, preconnect = true): void {\n if (config === false) {\n return;\n }\n\n const fonts = config === 'default' ? DEFAULT_FONTS : config;\n\n if (preconnect) {\n // Check if any Google fonts are being loaded\n const hasGoogleFonts = Object.values(fonts).some((f) => f.source === 'google');\n if (hasGoogleFonts) {\n injectPreconnect();\n }\n }\n\n for (const [name, source] of Object.entries(fonts)) {\n const id = name.toLowerCase().replace(/\\s+/g, '-');\n\n if (source.source === 'google' && source.family) {\n const url = buildGoogleFontUrl(source.family, source.css2);\n injectFontLink(id, url);\n } else if (source.source === 'css' && source.url) {\n injectFontLink(id, source.url);\n }\n }\n}\n\n/**\n * Remove all injected fonts.\n */\nexport function removeFonts(config: FontConfig | 'default'): void {\n const fonts = config === 'default' ? DEFAULT_FONTS : config;\n\n for (const name of Object.keys(fonts)) {\n const id = name.toLowerCase().replace(/\\s+/g, '-');\n removeFontLink(id);\n }\n}\n","/**\n * Side-effect import that registers all custom elements.\n * Use this for browser environments where you want all components available immediately.\n *\n * @example\n * ```ts\n * import '@easemate/web-kit/register';\n * ```\n */\n\n// JSX type augmentation - export a non-empty type to force TS to include the module\n// This ensures JSX types are available when this module is imported\nexport type { EaseElements as WebKitJSXElements } from './react/jsx';\n\n// Elements (side-effects - each imports and registers its custom element)\nimport './elements/button';\nimport './elements/checkbox';\nimport './elements/color';\nimport './elements/color/picker';\nimport './elements/dropdown';\nimport './elements/field';\nimport './elements/icons';\nimport './elements/input';\nimport './elements/logo';\nimport './elements/monitor';\nimport './elements/monitor/fps';\nimport './elements/number';\nimport './elements/origin';\nimport './elements/panel';\nimport './elements/popover';\nimport './elements/radio';\nimport './elements/radio/input';\nimport './elements/radio/option';\nimport './elements/slider';\nimport './elements/state';\nimport './elements/toggle';\nimport './elements/tooltip';\n\n// Components (advanced elements)\nimport './components/code';\nimport './components/curve';\n","/**\n * Component loader map for dynamic imports.\n * Maps tag names to their module paths for selective/lazy loading.\n */\n\n/**\n * All root-level web-kit element tags (excludes internal sub-components).\n */\nexport const WEB_KIT_ELEMENT_TAGS = [\n // Controls\n 'ease-button',\n 'ease-checkbox',\n 'ease-color-input',\n 'ease-color-picker',\n 'ease-dropdown',\n 'ease-input',\n 'ease-number-input',\n 'ease-origin',\n 'ease-radio-group',\n 'ease-radio-input',\n 'ease-slider',\n 'ease-toggle',\n\n // Layout\n 'ease-field',\n 'ease-panel',\n 'ease-popover',\n 'ease-state',\n 'ease-tooltip',\n\n // Display\n 'ease-logo-loader',\n 'ease-monitor',\n 'ease-monitor-fps',\n\n // Icons\n 'ease-icon-anchor-add',\n 'ease-icon-anchor-remove',\n 'ease-icon-arrow-up',\n 'ease-icon-arrows-vertical',\n 'ease-icon-bezier',\n 'ease-icon-bezier-angle',\n 'ease-icon-bezier-distribute',\n 'ease-icon-bezier-length',\n 'ease-icon-bezier-mirror',\n 'ease-icon-check',\n 'ease-icon-chevron',\n 'ease-icon-circle-arrow-left',\n 'ease-icon-circle-arrow-right',\n 'ease-icon-clear',\n 'ease-icon-code',\n 'ease-icon-dots',\n 'ease-icon-grid',\n 'ease-icon-loading',\n 'ease-icon-mention',\n 'ease-icon-minus',\n 'ease-icon-picker',\n 'ease-icon-plus',\n 'ease-icon-settings',\n 'ease-icon-snap'\n] as const;\n\n/**\n * Advanced component tags (curve, code editor, etc.)\n */\nexport const WEB_KIT_COMPONENT_TAGS = ['ease-curve', 'ease-code'] as const;\n\n/**\n * All public web-kit tags.\n */\nexport const WEB_KIT_ALL_TAGS = [...WEB_KIT_ELEMENT_TAGS, ...WEB_KIT_COMPONENT_TAGS] as const;\n\n/**\n * Union type of all element tag names.\n */\nexport type WebKitElementTag = (typeof WEB_KIT_ELEMENT_TAGS)[number];\n\n/**\n * Union type of all component tag names.\n */\nexport type WebKitComponentTag = (typeof WEB_KIT_COMPONENT_TAGS)[number];\n\n/**\n * Union type of all public tag names.\n */\nexport type WebKitTag = (typeof WEB_KIT_ALL_TAGS)[number];\n\n/**\n * Internal/sub-component tags that are auto-registered with their parents.\n */\nexport const WEB_KIT_INTERNAL_TAGS = [\n 'ease-curve-canvas',\n 'ease-curve-canvas-controls',\n 'ease-curve-controls',\n 'ease-curve-output',\n 'ease-curve-toolbar',\n 'radio-option'\n] as const;\n\n/**\n * Map of tag names to their loader functions.\n * These use dynamic imports so we only load what's needed.\n */\nexport const COMPONENT_LOADERS: Record<WebKitTag, () => Promise<unknown>> = {\n // Controls\n 'ease-button': () => import('../elements/button'),\n 'ease-checkbox': () => import('../elements/checkbox'),\n 'ease-color-input': () => import('../elements/color'),\n 'ease-color-picker': () => import('../elements/color/picker'),\n 'ease-dropdown': () => import('../elements/dropdown'),\n 'ease-input': () => import('../elements/input'),\n 'ease-number-input': () => import('../elements/number'),\n 'ease-origin': () => import('../elements/origin'),\n 'ease-radio-group': () => import('../elements/radio'),\n 'ease-radio-input': () => import('../elements/radio/input'),\n 'ease-slider': () => import('../elements/slider'),\n 'ease-toggle': () => import('../elements/toggle'),\n\n // Layout\n 'ease-field': () => import('../elements/field'),\n 'ease-panel': () => import('../elements/panel'),\n 'ease-popover': () => import('../elements/popover'),\n 'ease-state': () => import('../elements/state'),\n 'ease-tooltip': () => import('../elements/tooltip'),\n\n // Display\n 'ease-logo-loader': () => import('../elements/logo'),\n 'ease-monitor': () => import('../elements/monitor'),\n 'ease-monitor-fps': () => import('../elements/monitor/fps'),\n\n // Icons\n 'ease-icon-anchor-add': () => import('../elements/icons/interface/anchor-add'),\n 'ease-icon-anchor-remove': () => import('../elements/icons/interface/anchor-remove'),\n 'ease-icon-arrow-up': () => import('../elements/icons/interface/arrow-up'),\n 'ease-icon-arrows-vertical': () => import('../elements/icons/interface/arrows-vertical'),\n 'ease-icon-bezier': () => import('../elements/icons/interface/bezier'),\n 'ease-icon-bezier-angle': () => import('../elements/icons/interface/bezier-angle'),\n 'ease-icon-bezier-distribute': () => import('../elements/icons/interface/bezier-distribute'),\n 'ease-icon-bezier-length': () => import('../elements/icons/interface/bezier-length'),\n 'ease-icon-bezier-mirror': () => import('../elements/icons/interface/bezier-mirror'),\n 'ease-icon-check': () => import('../elements/icons/interface/check'),\n 'ease-icon-chevron': () => import('../elements/icons/animation/chevron'),\n 'ease-icon-circle-arrow-left': () => import('../elements/icons/interface/circle-arrow-left'),\n 'ease-icon-circle-arrow-right': () => import('../elements/icons/interface/circle-arrow-right'),\n 'ease-icon-clear': () => import('../elements/icons/animation/clear'),\n 'ease-icon-code': () => import('../elements/icons/interface/code'),\n 'ease-icon-dots': () => import('../elements/icons/interface/dots'),\n 'ease-icon-grid': () => import('../elements/icons/animation/grid'),\n 'ease-icon-loading': () => import('../elements/icons/animation/loading'),\n 'ease-icon-mention': () => import('../elements/icons/interface/mention'),\n 'ease-icon-minus': () => import('../elements/icons/interface/minus'),\n 'ease-icon-picker': () => import('../elements/icons/interface/picker'),\n 'ease-icon-plus': () => import('../elements/icons/interface/plus'),\n 'ease-icon-settings': () => import('../elements/icons/interface/settings'),\n 'ease-icon-snap': () => import('../elements/icons/animation/snap'),\n\n // Advanced components\n 'ease-curve': () => import('../components/curve'),\n 'ease-code': () => import('../components/code')\n};\n\n/**\n * Load specific components by tag name.\n */\nexport async function loadComponents(tags: readonly WebKitTag[]): Promise<void> {\n const promises = tags.map((tag) => {\n const loader = COMPONENT_LOADERS[tag];\n if (loader) {\n return loader();\n }\n return Promise.resolve();\n });\n await Promise.all(promises);\n}\n\n/**\n * Load all components (equivalent to importing register.ts).\n */\nexport async function loadAllComponents(): Promise<void> {\n await import('../register');\n}\n\n/**\n * Resolve which tags to load based on include/exclude options.\n */\nexport function resolveTags(options: { include?: readonly string[]; exclude?: readonly string[] }): WebKitTag[] {\n const { include, exclude } = options;\n\n // If include is specified, use those (filtered to valid tags)\n if (include && include.length > 0) {\n return include.filter((tag): tag is WebKitTag => WEB_KIT_ALL_TAGS.includes(tag as WebKitTag));\n }\n\n // Otherwise, start with all tags and remove excluded ones\n let tags: WebKitTag[] = [...WEB_KIT_ALL_TAGS];\n\n if (exclude && exclude.length > 0) {\n const excludeSet = new Set(exclude);\n tags = tags.filter((tag) => !excludeSet.has(tag));\n }\n\n return tags;\n}\n","/**\n * Lazy loading utilities using MutationObserver.\n */\n\nimport { COMPONENT_LOADERS, WEB_KIT_ALL_TAGS, type WebKitTag } from './component-loaders';\nimport { isBrowser } from './style-inject';\n\n/**\n * Lazy load configuration.\n */\nexport interface LazyLoadConfig {\n /** MutationObserver strategy */\n strategy?: 'mutation';\n /** Root element to observe (default: document) */\n root?: Document | Element;\n /** Tags to include in lazy loading */\n include?: readonly string[];\n /** Tags to exclude from lazy loading */\n exclude?: readonly string[];\n /** Tags to preload immediately */\n preload?: readonly string[];\n}\n\n/**\n * Lazy loader instance.\n */\nexport interface LazyLoader {\n /** Stop observing and cleanup */\n dispose: () => void;\n /** Manually load a component */\n load: (tag: WebKitTag) => Promise<void>;\n}\n\n/**\n * Create a lazy loader that auto-registers components when they appear in DOM.\n */\nexport function createLazyLoader(config: LazyLoadConfig = {}): LazyLoader {\n if (!isBrowser()) {\n return {\n dispose: () => {},\n load: async () => {}\n };\n }\n\n const { root = document, include, exclude, preload } = config;\n\n // Determine which tags to watch\n let watchTags = new Set<WebKitTag>([...WEB_KIT_ALL_TAGS]);\n\n if (include && include.length > 0) {\n watchTags = new Set(include.filter((tag): tag is WebKitTag => WEB_KIT_ALL_TAGS.includes(tag as WebKitTag)));\n }\n\n if (exclude && exclude.length > 0) {\n for (const tag of exclude) {\n watchTags.delete(tag as WebKitTag);\n }\n }\n\n // Track loaded components\n const loaded = new Set<string>();\n\n // Load a component\n const load = async (tag: WebKitTag): Promise<void> => {\n if (loaded.has(tag)) {\n return;\n }\n\n const loader = COMPONENT_LOADERS[tag];\n if (loader) {\n loaded.add(tag);\n await loader();\n }\n };\n\n // Check if an element or its descendants need loading\n const checkElement = (element: Element): void => {\n const tagName = element.tagName.toLowerCase();\n\n if (watchTags.has(tagName as WebKitTag) && !loaded.has(tagName)) {\n void load(tagName as WebKitTag);\n }\n\n // Check children\n for (const child of element.querySelectorAll('*')) {\n const childTag = child.tagName.toLowerCase();\n if (watchTags.has(childTag as WebKitTag) && !loaded.has(childTag)) {\n void load(childTag as WebKitTag);\n }\n }\n };\n\n // Create observer\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof Element) {\n checkElement(node);\n }\n }\n }\n });\n\n // Start observing\n const target = root instanceof Document ? root.documentElement : root;\n observer.observe(target, {\n childList: true,\n subtree: true\n });\n\n // Check existing elements\n checkElement(target);\n\n // Preload specified tags\n if (preload && preload.length > 0) {\n for (const tag of preload) {\n if (WEB_KIT_ALL_TAGS.includes(tag as WebKitTag)) {\n void load(tag as WebKitTag);\n }\n }\n }\n\n return {\n dispose: () => {\n observer.disconnect();\n },\n load\n };\n}\n","// JSX type augmentation - export a non-empty type to force TS to include the module\n// This ensures JSX types are available when the package is imported (no consumer .d.ts needed)\nexport type { EaseElements as WebKitJSXElements } from './react/jsx';\n\n// Components\nexport * from './components';\n// Decorators\nexport * from './decorators';\n// Elements (components)\nexport * from './elements';\n// Init API\nexport {\n type FontConfig,\n type FontSource,\n type InitWebKitOptions,\n initWebKit,\n type LazyLoadConfig,\n type LazyLoader,\n type ReplaceConfig,\n type StylePreset,\n type StylesConfig,\n type ThemeModeConfig,\n type WebKitComponentTag,\n type WebKitController,\n type WebKitElementTag,\n type WebKitTag\n} from './init';\n// Theming\nexport * from './theme';\n// Utilities\nexport {\n classMap,\n ifDefined,\n optionalAttribute,\n renderIf,\n renderList,\n repeat,\n styleMap,\n styleObject,\n unsafeHTML,\n when\n} from './utils/template-helpers';\n","export * from './code';\nexport * from './curve';\n","import { html, render, type TemplateResult } from 'lit-html';\n\ntype Constructor<T extends HTMLElement> = new (...args: unknown[]) => T;\n\ninterface LifecycleElement {\n connectedCallback?(): void;\n disconnectedCallback?(): void;\n attributeChangedCallback?(name: string, oldValue: string | null, newValue: string | null): void;\n}\n\ntype RenderableElement = HTMLElement & {\n render?(): TemplateResult | null | undefined;\n afterRender?(): void;\n wrapRender?(commit: () => void, context: RenderContext): void;\n onAttributeChange?(name: string, oldValue: string | null, newValue: string | null): void;\n requestRender?(): void;\n renderRoot?: ShadowRoot | HTMLElement;\n};\n\ntype TemplateValue<TElement extends RenderableElement> =\n | TemplateResult\n | null\n | undefined\n | ((this: TElement, host: TElement) => TemplateResult | null | undefined);\n\ninterface ComponentOptions<TElement extends RenderableElement = RenderableElement> {\n tag: string;\n template?: TemplateValue<TElement>;\n styles?: string;\n styleUrls?: string[];\n observedAttributes?: string[];\n shadowMode?: ShadowRootMode;\n autoSlot?: boolean;\n}\n\n// Exporting RenderContext\nexport interface RenderContext {\n fragment: DocumentFragment;\n root: ShadowRoot | HTMLElement;\n}\n\nconst styleCache = new Map<string, Promise<string>>();\n\nconst normalizeTemplate = <TElement extends RenderableElement>(\n template?: TemplateValue<TElement>\n): ((this: TElement, host: TElement) => TemplateResult | null | undefined) => {\n if (typeof template === 'function') {\n return template as (this: TElement, host: TElement) => TemplateResult | null | undefined;\n }\n\n if (template && typeof template === 'object' && '_$litTemplate$' in template) {\n return function (this: TElement): TemplateResult | null | undefined {\n return template as TemplateResult;\n };\n }\n\n return function (this: TElement): TemplateResult | null | undefined {\n return null;\n };\n};\n\nconst fetchStyles = async (urls: readonly string[]): Promise<string[]> =>\n Promise.all(\n urls.map((url) => {\n const cached = styleCache.get(url);\n if (cached) {\n return cached;\n }\n\n const request = fetch(url)\n .then((response) => (response.ok ? response.text() : ''))\n .catch(() => '');\n\n styleCache.set(url, request);\n return request;\n })\n );\n\nexport const Component =\n <TElement extends RenderableElement = RenderableElement>(options: ComponentOptions<TElement>) =>\n <TBase extends Constructor<TElement> & { observedAttributes?: string[] }>(\n Base: TBase,\n _context: ClassDecoratorContext\n ): TBase => {\n const {\n tag,\n template,\n styles = '',\n styleUrls = [],\n observedAttributes = [],\n shadowMode = 'open',\n autoSlot = true\n } = options;\n\n if (!tag) {\n throw new Error('@Component requires a \"tag\" option.');\n }\n\n const templateFn = normalizeTemplate<TElement>(template);\n\n class Decorated extends (Base as unknown as Constructor<RenderableElement>) {\n static get observedAttributes(): string[] {\n const parent =\n 'observedAttributes' in Base && Array.isArray(Base.observedAttributes)\n ? (Base.observedAttributes as string[])\n : [];\n const own = Array.isArray(observedAttributes) ? observedAttributes : [];\n return Array.from(new Set([...parent, ...own]));\n }\n\n #shadow: ShadowRoot;\n #styles = styles;\n #styleUrls = [...styleUrls];\n #renderScheduled = false;\n\n constructor(...args: unknown[]) {\n super(...args);\n this.#shadow = this.attachShadow({ mode: shadowMode });\n this.renderRoot = this.#shadow;\n }\n\n get shadow(): HTMLElement | ShadowRoot | undefined {\n return this.renderRoot;\n }\n\n connectedCallback(): void {\n (Base.prototype as LifecycleElement).connectedCallback?.call(this);\n\n void this.#loadStyles().finally(() => {\n this.requestRender();\n });\n }\n\n disconnectedCallback(): void {\n (Base.prototype as LifecycleElement).disconnectedCallback?.call(this);\n this.#renderScheduled = false;\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n (Base.prototype as LifecycleElement).attributeChangedCallback?.call(this, name, oldValue, newValue);\n\n if (oldValue !== newValue) {\n this.onAttributeChange?.(name, oldValue, newValue);\n }\n }\n\n requestRender(): void {\n if (this.#renderScheduled) {\n return;\n }\n\n this.#renderScheduled = true;\n\n requestAnimationFrame(() => {\n this.#renderScheduled = false;\n this.#render();\n });\n }\n\n async #loadStyles(): Promise<void> {\n if (!this.#styleUrls.length) {\n return;\n }\n\n const fetched = await fetchStyles(this.#styleUrls);\n const inlineStyles = this.#styles ? [this.#styles] : [];\n this.#styles = [...inlineStyles, ...fetched.filter(Boolean)].join('\\n');\n }\n\n #render(): void {\n const root = this.#shadow;\n\n let templateResult: TemplateResult | null | undefined;\n\n if (typeof this.render === 'function') {\n templateResult = this.render();\n } else {\n templateResult = templateFn.call(this as unknown as TElement, this as unknown as TElement);\n }\n\n const styleTemplate = this.#styles ? html`<style>${this.#styles}</style>` : null;\n const slotTemplate = autoSlot ? html`<slot></slot>` : null;\n\n const completeTemplate = html`\n ${styleTemplate}\n ${templateResult ?? null}\n ${slotTemplate}\n `;\n\n const commit = (): void => {\n render(completeTemplate, root);\n this.afterRender?.();\n };\n\n if (typeof this.wrapRender === 'function') {\n const fragment = document.createDocumentFragment();\n const tempDiv = document.createElement('div');\n\n render(completeTemplate, tempDiv);\n\n fragment.append(...tempDiv.childNodes);\n\n this.wrapRender(commit, { fragment, root });\n return;\n }\n\n commit();\n }\n }\n\n // SSR safety: only register in browser environments\n if (typeof customElements !== 'undefined' && !customElements.get(tag)) {\n customElements.define(tag, Decorated as unknown as CustomElementConstructor);\n }\n\n return Decorated as unknown as TBase;\n };\n","type ListenHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype LifecycleHookName = 'connectedCallback' | 'disconnectedCallback';\n\ntype LifecycleCallback<THost extends ListenHost> = (this: THost) => void;\n\ntype ListenTargetResolver<THost extends ListenHost> =\n | 'document'\n | 'window'\n | 'shadow'\n | 'root'\n | 'light'\n | EventTarget\n | ((host: THost) => EventTarget | null | undefined);\n\ntype Predicate<TEvent extends Event, TElement extends Element> = (event: TEvent, matched: TElement | null) => boolean;\n\ninterface ListenOptions<THost extends ListenHost, TElement extends Element, TEvent extends Event> {\n selector?: string;\n target?: ListenTargetResolver<THost>;\n prevent?: boolean;\n stop?: boolean;\n stopImmediate?: boolean;\n once?: boolean;\n passive?: boolean;\n capture?: boolean;\n when?: Predicate<TEvent, TElement>;\n}\n\ntype Cleanup = () => void;\n\nconst lifecycleHooks: Record<LifecycleHookName, WeakMap<ListenHost, Set<LifecycleCallback<ListenHost>>>> = {\n connectedCallback: new WeakMap(),\n disconnectedCallback: new WeakMap()\n};\n\nconst cleanupRegistry = new WeakMap<ListenHost, Set<Cleanup>>();\n\nconst addLifecycleHook = <THost extends ListenHost>(\n instance: THost,\n hookName: LifecycleHookName,\n handler: LifecycleCallback<THost>\n): void => {\n const store = lifecycleHooks[hookName] as WeakMap<THost, Set<LifecycleCallback<THost>>>;\n let callbacks = store.get(instance);\n\n if (!callbacks) {\n callbacks = new Set<LifecycleCallback<THost>>();\n store.set(instance, callbacks);\n\n const original = (instance as unknown as Record<LifecycleHookName, unknown>)[hookName];\n\n (instance as unknown as Record<LifecycleHookName, unknown>)[hookName] = function (...args: unknown[]) {\n callbacks?.forEach((callback) => {\n callback.apply(this as THost);\n });\n\n if (typeof original === 'function') {\n return (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n return undefined;\n };\n }\n\n callbacks.add(handler);\n};\n\nconst registerCleanup = <THost extends ListenHost>(instance: THost, cleanup: Cleanup): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n addLifecycleHook(instance, 'disconnectedCallback', function (this: THost) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((fn) => {\n try {\n fn();\n } catch (error) {\n console.error('[Listen] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n });\n }\n\n callbacks.add(cleanup);\n};\n\nconst resolveTarget = <THost extends ListenHost>(\n host: THost,\n target: ListenTargetResolver<THost> | undefined\n): EventTarget | null => {\n if (typeof target === 'function') {\n return target(host) ?? null;\n }\n\n if (target instanceof EventTarget) {\n return target;\n }\n\n switch (target) {\n case 'document':\n return document;\n case 'window':\n return window;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst normalizeOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n selectorOrOptions: string | ListenOptions<THost, TElement, TEvent> | undefined\n): ListenOptions<THost, TElement, TEvent> => {\n if (typeof selectorOrOptions === 'string') {\n return { selector: selectorOrOptions };\n }\n\n return selectorOrOptions ?? {};\n};\n\nconst buildOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n options: ListenOptions<THost, TElement, TEvent>\n) => {\n return {\n selector: options.selector ?? null,\n target: options.target ?? 'shadow',\n prevent: options.prevent ?? false,\n stop: options.stop ?? false,\n stopImmediate: options.stopImmediate ?? false,\n once: options.once ?? false,\n passive: options.passive,\n capture: options.capture ?? false,\n when: options.when ?? null\n };\n};\n\nexport function Listen<THost extends ListenHost, TEvent extends Event = Event, TElement extends Element = Element>(\n eventName: keyof HTMLElementEventMap | string,\n selectorOrOptions?: string | ListenOptions<THost, TElement, TEvent>\n) {\n if (!eventName) {\n throw new Error('@Listen requires an event name.');\n }\n\n const listenConfig = buildOptions(normalizeOptions(selectorOrOptions));\n\n return (\n originalMethod: (this: THost, event: TEvent, matched?: TElement | null) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n let attached = false;\n\n const attach = () => {\n if (attached) {\n return;\n }\n\n const target = resolveTarget(this, listenConfig.target);\n\n if (!target || typeof (target as EventTarget).addEventListener !== 'function') {\n console.warn(`@Listen unable to resolve target for ${String(eventName)}`);\n return;\n }\n\n const eventOptions: AddEventListenerOptions = {\n capture: listenConfig.capture,\n once: listenConfig.once,\n passive: listenConfig.passive !== undefined ? listenConfig.passive : !listenConfig.prevent\n };\n\n const handler = (event: Event): void => {\n const typedEvent = event as TEvent;\n\n if (listenConfig.prevent) {\n typedEvent.preventDefault();\n }\n\n if (listenConfig.stopImmediate) {\n typedEvent.stopImmediatePropagation();\n } else if (listenConfig.stop) {\n typedEvent.stopPropagation();\n }\n\n let matched: TElement | null = null;\n\n if (listenConfig.selector) {\n const path = typedEvent.composedPath();\n matched =\n path.find(\n (node): node is TElement => node instanceof Element && node.matches(listenConfig.selector as string)\n ) ?? null;\n\n if (!matched) {\n return;\n }\n }\n\n if (listenConfig.when && !listenConfig.when(typedEvent, matched)) {\n return;\n }\n\n if (listenConfig.selector) {\n void originalMethod.call(this, typedEvent, matched);\n } else {\n const targetNode = (\n typedEvent.target instanceof Element ? (typedEvent.target as TElement) : null\n ) as TElement | null;\n void originalMethod.call(this, typedEvent, targetNode);\n }\n };\n\n target.addEventListener(eventName as string, handler, eventOptions);\n attached = true;\n\n registerCleanup(this, () => {\n target.removeEventListener(eventName as string, handler, eventOptions);\n attached = false;\n });\n };\n\n // IMPORTANT:\n // Many components are created inside templates/shadow DOM. At construction time they are often not connected yet,\n // and patching instance lifecycle callbacks is not reliably invoked by the platform.\n // Attach the listener ASAP (microtask) so it works for nested components as well.\n queueMicrotask(attach);\n\n // Best-effort attach on connect too (idempotent).\n addLifecycleHook(this, 'connectedCallback', attach);\n });\n };\n}\n","import type { OutsideClickResolution } from '~/utils/outside-click';\n\nimport {\n createOutsideClickHandle,\n disconnectOutsideClickHandles,\n registerOutsideClickHandle,\n updateOutsideClickHandles\n} from '~/utils/outside-click';\n\ntype OutsideClickHost = HTMLElement & {\n connectedCallback?: (...args: unknown[]) => unknown;\n disconnectedCallback?: (...args: unknown[]) => unknown;\n afterRender?: (...args: unknown[]) => unknown;\n};\n\ntype HookName = 'connectedCallback' | 'disconnectedCallback' | 'afterRender';\n\ninterface OutsideClickOptions<THost extends OutsideClickHost> {\n resolve?: (host: THost) => OutsideClickResolution | null | undefined;\n owner?: (host: THost) => HTMLElement | null | undefined;\n content?: (host: THost) => HTMLElement | null | undefined;\n triggers?: (host: THost) => Array<HTMLElement | null | undefined>;\n disabled?: (host: THost) => boolean;\n}\n\nconst lifecycleApplied = new WeakSet<OutsideClickHost>();\n\nconst wrapMethod = (\n host: OutsideClickHost,\n name: HookName,\n hook: (this: OutsideClickHost) => void,\n callHookFirst = false\n): void => {\n const original = host[name];\n\n (host as Required<OutsideClickHost>)[name] = function (...args: unknown[]) {\n if (callHookFirst) {\n hook.call(this);\n }\n\n let result: unknown;\n\n if (typeof original === 'function') {\n result = (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n if (!callHookFirst) {\n hook.call(this);\n }\n\n return result;\n };\n};\n\nconst ensureLifecycle = (host: OutsideClickHost): void => {\n if (lifecycleApplied.has(host)) {\n return;\n }\n\n lifecycleApplied.add(host);\n\n wrapMethod(host, 'connectedCallback', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(host, 'afterRender', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(\n host,\n 'disconnectedCallback',\n function (this: OutsideClickHost) {\n disconnectOutsideClickHandles(this);\n },\n true\n );\n};\n\nexport function OutsideClick<THost extends OutsideClickHost, TEvent extends Event = Event>(\n options: OutsideClickOptions<THost> = {}\n) {\n return (\n originalMethod: (this: THost, event: TEvent) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n ensureLifecycle(this);\n\n const resolve =\n options.resolve ??\n ((host: THost): OutsideClickResolution => {\n return {\n owner: options.owner?.(host),\n content: options.content?.(host),\n triggers: options.triggers?.(host)\n };\n });\n\n const handle = createOutsideClickHandle(\n this,\n (event) => {\n originalMethod.call(this, event as TEvent);\n },\n {\n resolve,\n disabled: options.disabled\n }\n );\n\n registerOutsideClickHandle(this, handle);\n\n if (this.isConnected) {\n updateOutsideClickHandles(this);\n }\n });\n };\n}\n\nexport { requestOutsideClickUpdate } from '~/utils/outside-click';\nexport type { OutsideClickOptions };\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n connectedCallback?(): void;\n disconnectedCallback?(...args: unknown[]): void;\n};\n\ntype PropTypeDescriptor =\n | BooleanConstructor\n | NumberConstructor\n | StringConstructor\n | ObjectConstructor\n | ArrayConstructor\n | 'boolean'\n | 'number'\n | 'string'\n | 'json';\n\ntype Formatter<TValue, THost extends RenderHost> = (this: THost, value: TValue) => string | null | undefined;\ntype Parser<TValue, THost extends RenderHost> = (this: THost, value: string | null) => TValue;\n\ninterface PropOptions<TValue, THost extends RenderHost> {\n attribute?: string;\n reflect?: boolean;\n type?: PropTypeDescriptor;\n parse?: Parser<TValue, THost>;\n format?: Formatter<TValue, THost>;\n defaultValue?: TValue | ((this: THost) => TValue);\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n onAttributeChange?: (this: THost, next: TValue, previous: TValue) => void;\n}\n\ninterface AttributeObserverEntry {\n observer: MutationObserver;\n callbacks: Map<string, Set<(value: string | null) => void>>;\n}\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\nconst cleanupRegistry = new WeakMap<RenderHost, Set<() => void>>();\nconst observerRegistry = new WeakMap<RenderHost, AttributeObserverEntry>();\nconst internalMutations = new WeakMap<RenderHost, Set<string>>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.delete(instance);\n instance.render?.();\n });\n};\n\nconst toKebabCase = (value: PropertyKey): string =>\n String(value)\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n\nconst registerCleanup = (instance: RenderHost, cleanup: () => void): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n const original = instance.disconnectedCallback;\n\n instance.disconnectedCallback = function (this: RenderHost, ...args: unknown[]) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error('[Prop] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n\n if (typeof original === 'function') {\n return original.apply(this, args as []);\n }\n\n return undefined;\n } as typeof instance.disconnectedCallback;\n }\n\n callbacks.add(cleanup);\n};\n\nconst markInternalMutation = (host: RenderHost, attribute: string): void => {\n let attributes = internalMutations.get(host);\n\n if (!attributes) {\n attributes = new Set();\n internalMutations.set(host, attributes);\n }\n\n attributes.add(attribute);\n};\n\nconst isInternalMutation = (host: RenderHost, attribute: string): boolean => {\n const attributes = internalMutations.get(host);\n\n if (!attributes) {\n return false;\n }\n\n const hasAttribute = attributes.has(attribute);\n\n if (hasAttribute) {\n attributes.delete(attribute);\n if (attributes.size === 0) {\n internalMutations.delete(host);\n }\n }\n\n return hasAttribute;\n};\n\nconst observeAttribute = (host: RenderHost, attribute: string, handler: (value: string | null) => void): void => {\n let entry = observerRegistry.get(host);\n\n if (!entry) {\n const callbacks = new Map<string, Set<(value: string | null) => void>>();\n const observer = new MutationObserver((records) => {\n records.forEach((record) => {\n const attributeName = record.attributeName;\n\n if (!attributeName) {\n return;\n }\n\n if (isInternalMutation(host, attributeName)) {\n return;\n }\n\n const listeners = callbacks.get(attributeName);\n if (!listeners) {\n return;\n }\n\n const currentValue = (record.target as Element).getAttribute(attributeName);\n\n for (const listener of listeners) {\n listener(currentValue);\n }\n });\n });\n\n observer.observe(host, { attributes: true });\n\n entry = { observer, callbacks };\n observerRegistry.set(host, entry);\n\n registerCleanup(host, () => {\n observer.disconnect();\n observerRegistry.delete(host);\n });\n }\n\n let listeners = entry.callbacks.get(attribute);\n\n if (!listeners) {\n listeners = new Set();\n entry.callbacks.set(attribute, listeners);\n }\n\n listeners.add(handler);\n};\n\nconst updateAttribute = (host: RenderHost, attribute: string, value: string | null | undefined | boolean): void => {\n markInternalMutation(host, attribute);\n\n if (value === undefined || value === null || value === false) {\n host.removeAttribute(attribute);\n return;\n }\n\n if (value === true) {\n host.setAttribute(attribute, '');\n return;\n }\n\n host.setAttribute(attribute, String(value));\n};\n\nconst resolveType = (type: PropTypeDescriptor | undefined): 'boolean' | 'number' | 'json' | 'string' | null => {\n if (!type) {\n return null;\n }\n\n if (type === Boolean || type === 'boolean') {\n return 'boolean';\n }\n\n if (type === Number || type === 'number') {\n return 'number';\n }\n\n if (type === Object || type === Array || type === 'json') {\n return 'json';\n }\n\n return 'string';\n};\n\nconst typeParsers: Record<'boolean' | 'number' | 'json' | 'string', Parser<unknown, RenderHost>> = {\n boolean(value: string | null): boolean {\n return value !== null;\n },\n number(value: string | null): number | null {\n if (value === null || value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n },\n json(value: string | null): unknown {\n if (!value) {\n return null;\n }\n\n try {\n return JSON.parse(value);\n } catch (error) {\n console.warn('[Prop] failed to parse JSON attribute', error);\n return null;\n }\n },\n string(value: string | null): string | null {\n return value;\n }\n};\n\nconst typeFormatters: Record<'boolean' | 'number' | 'json' | 'string', Formatter<unknown, RenderHost>> = {\n boolean(value: unknown): string | null {\n return value ? '' : null;\n },\n number(value: unknown): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n return String(value);\n },\n json(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return null;\n }\n },\n string(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n return String(value);\n }\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\nexport function Prop<TValue, THost extends RenderHost = RenderHost>(options: PropOptions<TValue, THost> = {}) {\n const {\n attribute,\n reflect = true,\n type,\n parse,\n format,\n defaultValue,\n compare = defaultCompare,\n onChange,\n onAttributeChange\n } = options;\n\n const resolvedType = resolveType(type);\n\n const parseValue: Parser<TValue, THost> = parse\n ? parse\n : function (this: THost, value) {\n if (!resolvedType) {\n return value as unknown as TValue;\n }\n return typeParsers[resolvedType].call(this, value) as TValue;\n };\n\n const formatValue: Formatter<TValue, THost> = format\n ? format\n : function (this: THost, value) {\n if (!resolvedType) {\n return (value as unknown as string | null | undefined) ?? null;\n }\n return typeFormatters[resolvedType].call(this, value as unknown) as string | null;\n };\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Prop requires the \"accessor\" keyword on the property.');\n }\n\n const attributeName = attribute ?? toKebabCase(context.name);\n\n context.addInitializer(function (this: THost) {\n if (!reflect) {\n return;\n }\n\n observeAttribute(this, attributeName, (rawValue) => {\n if (isInternalMutation(this, attributeName)) {\n return;\n }\n\n const parsed = parseValue.call(this, rawValue);\n const previous = accessor.get.call(this);\n\n if (compare(previous, parsed)) {\n return;\n }\n\n accessor.set.call(this, parsed);\n\n onAttributeChange?.call(this, parsed, previous);\n scheduleRender(this);\n });\n });\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n onChange?.call(this, value, previous);\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n let value = initialValue;\n\n if (this.hasAttribute(attributeName)) {\n value = parseValue.call(this, this.getAttribute(attributeName));\n } else if (value === undefined && defaultValue !== undefined) {\n value =\n typeof defaultValue === 'function' ? (defaultValue as (this: THost) => TValue).call(this) : defaultValue;\n }\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n return value;\n }\n };\n };\n}\n","type QueryRoot = 'shadow' | 'light' | 'document';\n\ntype QueryHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype QueryFallback<TResult, THost extends QueryHost> = TResult | ((host: THost) => TResult);\n\ninterface BaseQueryOptions<TResult, THost extends QueryHost> {\n from?: QueryRoot;\n fallback?: QueryFallback<TResult, THost>;\n}\n\ninterface QueryAllOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement[], THost> {\n all: true;\n closest?: false;\n}\n\ninterface QueryClosestOptions<THost extends QueryHost> extends BaseQueryOptions<Element | null, THost> {\n closest: true;\n all?: false;\n}\n\ninterface QuerySingleOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement | null, THost> {\n all?: false;\n closest?: false;\n}\n\ntype QueryOptions<TElement extends Element, THost extends QueryHost> =\n | QueryAllOptions<TElement, THost>\n | QueryClosestOptions<THost>\n | QuerySingleOptions<TElement, THost>;\n\ntype QueryReturnType<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = TOptions extends QueryAllOptions<TElement, THost>\n ? TElement[]\n : TOptions extends QueryClosestOptions<THost>\n ? Element | null\n : TElement | null;\n\ntype QueryDecorator<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = (\n target: ClassAccessorDecoratorTarget<THost, QueryReturnType<TElement, THost, TOptions>> | undefined,\n context:\n | ClassFieldDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n | ClassAccessorDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n) => ClassAccessorDecoratorResult<THost, QueryReturnType<TElement, THost, TOptions>> | undefined;\n\nconst defaultOptions = {\n all: false,\n closest: false,\n from: 'shadow' as QueryRoot | undefined,\n fallback: null\n} as const satisfies QuerySingleOptions<Element, QueryHost>;\n\nconst resolveFallback = <TResult, THost extends QueryHost>(\n fallback: QueryFallback<TResult, THost> | undefined,\n host: THost\n): TResult | undefined => {\n if (typeof fallback === 'function') {\n return (fallback as (instance: THost) => TResult)(host);\n }\n\n return fallback;\n};\n\nconst resolveRoot = (host: QueryHost, option: QueryRoot | undefined): ParentNode | null => {\n switch (option) {\n case 'document':\n return document;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst resolveQuery = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n host: THost,\n selector: string,\n options: TOptions\n) => {\n if (options.closest) {\n const result = host.closest(selector);\n return result ?? resolveFallback(options.fallback as QueryFallback<Element | null, THost>, host) ?? null;\n }\n\n const root = resolveRoot(host, options.from);\n\n if (!root) {\n return options.all\n ? (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? [])\n : (resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null);\n }\n\n if (options.all) {\n const elements = Array.from(root.querySelectorAll<TElement>(selector));\n return elements.length > 0\n ? elements\n : (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? []);\n }\n\n const match = root.querySelector<TElement>(selector);\n return match ?? resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null;\n};\n\nconst createQueryDecorator = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n selector: string,\n options: TOptions\n): QueryDecorator<TElement, THost, TOptions> => {\n type Result = QueryReturnType<TElement, THost, TOptions>;\n\n return (\n _target: ClassAccessorDecoratorTarget<THost, Result> | undefined,\n context: ClassFieldDecoratorContext<THost, Result> | ClassAccessorDecoratorContext<THost, Result>\n ): ClassAccessorDecoratorResult<THost, Result> | undefined => {\n if (context.kind === 'accessor') {\n const descriptor: ClassAccessorDecoratorResult<THost, Result> = {\n get(this: THost) {\n return resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result;\n },\n set(_value: Result) {\n // Readonly accessor\n }\n };\n return descriptor;\n }\n\n context.addInitializer(function (this: THost) {\n Object.defineProperty(this, context.name, {\n configurable: true,\n enumerable: true,\n get: () => resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result\n });\n });\n\n return;\n };\n};\n\nexport function Query<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(selector: string, userOptions: TOptions): QueryDecorator<TElement, THost, TOptions>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string\n): QueryDecorator<TElement, THost, QuerySingleOptions<TElement, THost>>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string,\n userOptions?: QueryOptions<TElement, THost>\n) {\n if (!selector) {\n throw new Error('@Query requires a selector.');\n }\n\n if (userOptions) {\n const merged = { ...defaultOptions, ...userOptions } as QueryOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n }\n\n const merged = defaultOptions as QuerySingleOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n}\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n};\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.set(instance, false);\n\n instance.render?.();\n });\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\ninterface WatchOptions<TValue, THost extends RenderHost> {\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n transform?: (this: THost, initial: TValue) => TValue;\n}\n\nexport function Watch<TValue, THost extends RenderHost = RenderHost>(options: WatchOptions<TValue, THost> = {}) {\n const { compare = defaultCompare, onChange, transform } = options;\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Watch requires the \"accessor\" keyword on the property.');\n }\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (onChange) {\n onChange.call(this, value, previous);\n }\n\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n if (transform) {\n return transform.call(this, initialValue);\n }\n\n return initialValue;\n }\n };\n };\n}\n","export { Button } from './button';\nexport { Checkbox } from './checkbox';\nexport { ColorInput } from './color';\nexport { ColorPicker } from './color/picker';\nexport { Dropdown } from './dropdown';\nexport { Field } from './field';\nexport * from './icons';\nexport { Input } from './input';\nexport * from './logo';\nexport { Monitor } from './monitor';\nexport { MonitorFps } from './monitor/fps';\nexport { NumberInput } from './number';\nexport { Origin } from './origin';\nexport { Panel, type TabChangeEventDetail } from './panel';\nexport { type Placement, Popover } from './popover';\nexport { RadioGroup } from './radio';\nexport { RadioInput } from './radio/input';\nexport { RadioOption } from './radio/option';\nexport {\n CONTROL_CHANGE_EVENT,\n type ControlEventDetail,\n coerceNumber,\n dispatchControlEvent,\n readControlValue,\n setBooleanAttribute\n} from './shared';\nexport { Slider } from './slider';\nexport { State, type StateChangeEventDetail } from './state';\nexport { Toggle } from './toggle';\nexport { Tooltip } from './tooltip';\n","/**\n * Color scale levels\n */\nexport type ColorScale = {\n 100?: string;\n 200?: string;\n 300?: string;\n 400?: string;\n 500?: string;\n 600?: string;\n 700?: string;\n 800?: string;\n 900?: string;\n 1000?: string;\n 1100?: string;\n};\n\n/**\n * Gray color scale with additional intermediate values\n */\nexport type GrayScale = ColorScale & {\n 0?: string;\n 825?: string;\n 850?: string;\n 875?: string;\n};\n\n/**\n * Alpha color variations\n */\nexport type AlphaColors = {\n 0?: string;\n 2?: string;\n 4?: string;\n 6?: string;\n 8?: string;\n 10?: string;\n 12?: string;\n 15?: string;\n 20?: string;\n 30?: string;\n 40?: string;\n 50?: string;\n 70?: string;\n 80?: string;\n 90?: string;\n};\n\n/**\n * Color palette configuration\n */\nexport interface ColorPalette {\n /** Gray scale colors */\n gray?: GrayScale;\n /** Blue scale colors */\n blue?: ColorScale;\n /** Green scale colors */\n green?: ColorScale;\n /** Red scale colors */\n red?: ColorScale;\n /** Orange scale colors */\n orange?: ColorScale;\n /** Yellow scale colors */\n yellow?: ColorScale;\n /** Base white color */\n white?: string;\n /** Base black color */\n black?: string;\n /** White alpha variations */\n whiteAlpha?: AlphaColors;\n /** Black alpha variations */\n blackAlpha?: AlphaColors;\n /** Foreground color */\n foreground?: string;\n}\n\n/**\n * Border radius configuration\n */\nexport interface RadiiConfig {\n /** Small radius (4px default) */\n sm?: string;\n /** Medium radius (8px default) */\n md?: string;\n /** Large radius (12px default) */\n lg?: string;\n /** Extra large radius (16px default) */\n xl?: string;\n /** Full/pill radius */\n full?: string;\n}\n\n/**\n * Spacing configuration\n */\nexport interface SpacingConfig {\n /** Extra small spacing */\n xs?: string;\n /** Small spacing */\n sm?: string;\n /** Medium spacing */\n md?: string;\n /** Large spacing */\n lg?: string;\n /** Extra large spacing */\n xl?: string;\n}\n\n/**\n * Typography configuration\n */\nexport interface TypographyConfig {\n /** Font family for body text */\n fontFamily?: string;\n /** Font family for monospace/code */\n fontMono?: string;\n /** Base font size */\n fontSize?: string;\n /** Line height */\n lineHeight?: string;\n}\n\n/**\n * Arbitrary CSS custom properties to apply alongside the theme tokens.\n *\n * Keys may be provided with or without the `--` prefix.\n *\n * @example\n * ```ts\n * vars: {\n * '--ease-panel-padding': '16px',\n * 'ease-field-label-width': '40%'\n * }\n * ```\n */\nexport type ThemeVars = Record<string, string | number | null | undefined>;\n\n/**\n * Complete theme configuration\n */\nexport interface ThemeConfig {\n /** Color palette */\n colors?: ColorPalette;\n /** Border radii */\n radii?: RadiiConfig;\n /** Spacing values */\n spacing?: SpacingConfig;\n /** Typography settings */\n typography?: TypographyConfig;\n /**\n * Extra CSS variables (component tokens, app tokens, etc).\n * This is the recommended place to set `--ease-*` variables.\n */\n vars?: ThemeVars;\n}\n\n/**\n * Default color values (oklab)\n */\nexport const defaultColors: Required<ColorPalette> = {\n gray: {\n 0: 'oklab(98.81% 0 0)',\n 100: 'oklab(97.64% 0.0004 -0.0013)',\n 300: 'oklab(93.49% 0.0011 -0.0039)',\n 400: 'oklab(89.52% 0.0009 -0.0068)',\n 500: 'oklab(81.71% -0.0002 -0.0073)',\n 600: 'oklab(65.21% -0.0019 -0.0144)',\n 700: 'oklab(37.92% -0.0006 -0.0179)',\n 800: 'oklab(28.45% -0.0012 -0.0118)',\n 825: 'oklab(26.45% -0.0012 -0.0105)',\n 850: 'oklab(24.50% -0.0012 -0.0105)',\n 875: 'oklab(22.66% -0.0009 -0.0097)',\n 900: 'oklab(20.68% -0.0006 -0.0065)',\n 1000: 'oklab(18.81% -0.0012 -0.006)'\n },\n blue: {\n 100: 'oklab(98.65% 0.0019 -0.0063)',\n 200: 'oklab(97.45% 0.0057 -0.0121)',\n 300: 'oklab(95.88% 0.0086 -0.0183)',\n 400: 'oklab(91.21% 0.0179 -0.0399)',\n 500: 'oklab(84.61% 0.0327 -0.0725)',\n 600: 'oklab(76.85% 0.0462 -0.1115)',\n 700: 'oklab(68.28% 0.0582 -0.1575)',\n 800: 'oklab(59.36% 0.0641 -0.2083)',\n 900: 'oklab(50.69% 0.0492 -0.2575)',\n 1000: 'oklab(46.82% 0.0475 -0.2273)',\n 1100: 'oklch(0.4013 0.171 284.66)'\n },\n green: {\n 100: 'oklab(98.44% -0.009 0.0042)',\n 200: 'oklab(97.57% -0.0127 0.0058)',\n 300: 'oklab(96.32% -0.0176 0.0071)',\n 400: 'oklab(93.66% -0.0341 0.0149)',\n 500: 'oklab(89.96% -0.0529 0.0237)',\n 600: 'oklab(85.44% -0.0759 0.0346)',\n 700: 'oklab(80.59% -0.1005 0.0484)',\n 800: 'oklab(75.87% -0.1245 0.0639)',\n 900: 'oklab(71.18% -0.1439 0.0799)',\n 1000: 'oklab(64.89% -0.1265 0.0677)'\n },\n red: {\n 100: 'oklab(99.04% 0.0031 0.0009)',\n 200: 'oklab(97.85% 0.0072 0.0022)',\n 300: 'oklab(95.52% 0.0159 0.0036)',\n 400: 'oklab(89.9% 0.037 0.0091)',\n 500: 'oklab(82.78% 0.0664 0.0181)',\n 600: 'oklab(74.46% 0.105 0.031)',\n 700: 'oklab(65.73% 0.1467 0.0503)',\n 800: 'oklab(58.28% 0.1811 0.0773)',\n 900: 'oklab(53.11% 0.1914 0.1028)',\n 1000: 'oklab(48.4% 0.1727 0.0903)'\n },\n orange: {\n 100: 'oklab(99.47% 0.0009 0.0044)',\n 200: 'oklab(98.95% 0.0018 0.0088)',\n 300: 'oklab(97.58% 0.0073 0.0133)',\n 400: 'oklab(94.81% 0.0136 0.0305)',\n 500: 'oklab(90.97% 0.0248 0.0519)',\n 600: 'oklab(86.55% 0.0389 0.0778)',\n 700: 'oklab(81.73% 0.0568 0.1053)',\n 800: 'oklab(77.05% 0.0777 0.1296)',\n 900: 'oklab(72.25% 0.108 0.143)',\n 1000: 'oklab(65.81% 0.092 0.1281)'\n },\n yellow: {\n 100: 'oklab(99.14% 0.0004 0.0098)',\n 200: 'oklab(97.98% 0.0003 0.0248)',\n 300: 'oklab(96.81% -0.0002 0.0409)',\n 400: 'oklab(95.68% -0.0003 0.0555)',\n 500: 'oklab(91.97% 0.0002 0.102)',\n 600: 'oklab(88.75% 0.0018 0.1409)',\n 700: 'oklab(85.67% 0.0101 0.1648)',\n 800: 'oklab(76.85% 0.0212 0.1568)'\n },\n white: 'oklab(95.14% -0.0013 -0.0186)',\n black: 'oklab(0% 0 0)',\n whiteAlpha: {\n 0: 'oklab(95.14% -0.0013 -0.0186 / 0)',\n 2: 'oklab(95.14% -0.0013 -0.0186 / 0.02)',\n 4: 'oklab(95.14% -0.0013 -0.0186 / 0.04)',\n 6: 'oklab(95.14% -0.0013 -0.0186 / 0.06)',\n 8: 'oklab(95.14% -0.0013 -0.0186 / 0.08)',\n 10: 'oklab(95.14% -0.0013 -0.0186 / 0.1)',\n 12: 'oklab(95.14% -0.0013 -0.0186 / 0.12)',\n 15: 'oklab(95.14% -0.0013 -0.0186 / 0.15)',\n 20: 'oklab(95.14% -0.0013 -0.0186 / 0.2)',\n 30: 'oklab(95.14% -0.0013 -0.0186 / 0.3)',\n 40: 'oklab(95.14% -0.0013 -0.0186 / 0.4)',\n 50: 'oklab(95.14% -0.0013 -0.0186 / 0.5)',\n 70: 'oklab(95.14% -0.0013 -0.0186 / 0.7)',\n 80: 'oklab(95.14% -0.0013 -0.0186 / 0.8)',\n 90: 'oklab(95.14% -0.0013 -0.0186 / 0.9)'\n },\n blackAlpha: {\n 0: 'oklab(0% 0 0 / 0)',\n 2: 'oklab(0% 0 0 / 0.02)',\n 4: 'oklab(0% 0 0 / 0.04)',\n 6: 'oklab(0% 0 0 / 0.06)',\n 8: 'oklab(0% 0 0 / 0.08)',\n 10: 'oklab(0% 0 0 / 0.1)',\n 12: 'oklab(0% 0 0 / 0.12)',\n 15: 'oklab(0% 0 0 / 0.15)',\n 20: 'oklab(0% 0 0 / 0.2)',\n 30: 'oklab(0% 0 0 / 0.3)',\n 40: 'oklab(0% 0 0 / 0.4)',\n 50: 'oklab(0% 0 0 / 0.5)',\n 70: 'oklab(0% 0 0 / 0.7)',\n 80: 'oklab(0% 0 0 / 0.8)',\n 90: 'oklab(0% 0 0 / 0.9)'\n },\n foreground: 'var(--color-gray-0)'\n};\n\n/**\n * Default border radius values\n */\nexport const defaultRadii: Required<RadiiConfig> = {\n sm: '4px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n full: '9999px'\n};\n\n/**\n * Default spacing values\n */\nexport const defaultSpacing: Required<SpacingConfig> = {\n xs: '4px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n xl: '24px'\n};\n\n/**\n * Default typography values\n */\nexport const defaultTypography: Required<TypographyConfig> = {\n fontFamily: '\"Instrument Sans\", system-ui, sans-serif',\n fontMono: '\"Geist Mono\", monospace',\n fontSize: '13px',\n lineHeight: '1.5'\n};\n","import type { ThemeConfig, ThemeVars } from './tokens';\n\nimport { defaultColors, defaultRadii, defaultSpacing, defaultTypography } from './tokens';\n\n/**\n * Default ease UI kit CSS variables (--ease-*).\n * These are component-level design tokens that components consume.\n */\nexport const defaultEaseVars: ThemeVars = {\n // Typography aliases\n '--ease-font-family': 'var(--font-family)',\n '--ease-font-mono': 'var(--font-mono)',\n '--ease-font-size': 'var(--font-size)',\n '--ease-font-size-sm': '12px',\n '--ease-line-height': 'var(--font-line-height)',\n\n // Panel (ease-state)\n '--ease-panel-max-width': '332px',\n '--ease-panel-padding': 'var(--spacing-md)',\n '--ease-panel-radius': 'var(--radii-lg)',\n '--ease-panel-border-color': 'var(--color-white-6)',\n '--ease-panel-background': 'var(--color-gray-1000)',\n '--ease-panel-shadow': '0 0 40px 0 var(--color-white-2) inset',\n '--ease-panel-title-font-size': '14px',\n '--ease-panel-title-font-weight': '500',\n '--ease-panel-title-line-height': '24px',\n '--ease-panel-title-color': 'var(--color-blue-100)',\n\n // Field (ease-field)\n '--ease-field-label-width': '36%',\n '--ease-field-column-gap': 'var(--spacing-md)',\n '--ease-field-row-gap': '6px',\n '--ease-field-min-height': '30px',\n '--ease-field-label-font-size': 'var(--ease-font-size-sm)',\n '--ease-field-label-color': 'var(--color-gray-600)',\n '--ease-field-label-padding-left': '4px'\n};\n\n/**\n * The complete default (dark) theme configuration.\n * Includes colors, radii, spacing, typography, and component-level --ease-* vars.\n */\nexport const defaultThemeConfig: ThemeConfig = {\n colors: defaultColors,\n radii: defaultRadii,\n spacing: defaultSpacing,\n typography: defaultTypography,\n vars: defaultEaseVars\n};\n\n/**\n * Default built-in theme name.\n */\nexport const DEFAULT_THEME_NAME = 'default' as const;\n\n/**\n * Legacy alias for the built-in dark theme.\n */\nexport const DARK_THEME_ALIAS = 'dark' as const;\n","import type { ThemeConfig } from './tokens';\n\nimport { DARK_THEME_ALIAS, DEFAULT_THEME_NAME, defaultThemeConfig } from './presets';\n\n// --------------------------\n// Type definitions\n// --------------------------\n\n/**\n * Augmentable interface for theme names.\n * Consumers can extend this via module augmentation to add custom theme names:\n *\n * @example\n * ```ts\n * declare module '@easemate/web-kit' {\n * interface WebKitThemeRegistry {\n * custom: true;\n * brand: true;\n * }\n * }\n * ```\n */\nexport interface WebKitThemeRegistry {\n default: true;\n dark: true;\n}\n\n/**\n * Union of all registered theme names.\n */\nexport type WebKitThemeName = keyof WebKitThemeRegistry;\n\n/**\n * A strongly-typed theme reference.\n * Use this for type-safe theme references without module augmentation.\n */\nexport interface WebKitThemeRef<Name extends string = string> {\n readonly __brand: 'WebKitThemeRef';\n readonly name: Name;\n}\n\n/**\n * Valid theme input for APIs: a registered theme name, a theme ref, or an inline config.\n */\nexport type ThemeInput = WebKitThemeName | WebKitThemeRef | ThemeConfig;\n\n/**\n * Options for registering a theme.\n */\nexport interface RegisterThemeOptions {\n /**\n * Base theme to extend from.\n * - `'default'` (or any registered name) - extends that theme\n * - `null` - no base, starts from scratch\n * - `undefined` - defaults to `'default'`\n */\n base?: WebKitThemeName | WebKitThemeRef | null;\n /**\n * Theme configuration (overrides on top of base).\n */\n config?: ThemeConfig;\n}\n\n/**\n * Resolved theme entry in the registry.\n */\ninterface ThemeEntry {\n name: string;\n base: string | null;\n config: ThemeConfig;\n resolved: ThemeConfig | null; // lazily computed\n}\n\n// --------------------------\n// Registry implementation\n// --------------------------\n\nconst registry = new Map<string, ThemeEntry>();\n\n/**\n * Deep merge two theme configs.\n */\nconst mergeConfigs = (base: ThemeConfig, overrides: ThemeConfig): ThemeConfig => {\n return {\n colors: {\n ...base.colors,\n ...overrides.colors,\n gray: { ...base.colors?.gray, ...overrides.colors?.gray },\n blue: { ...base.colors?.blue, ...overrides.colors?.blue },\n green: { ...base.colors?.green, ...overrides.colors?.green },\n red: { ...base.colors?.red, ...overrides.colors?.red },\n orange: { ...base.colors?.orange, ...overrides.colors?.orange },\n yellow: { ...base.colors?.yellow, ...overrides.colors?.yellow },\n whiteAlpha: { ...base.colors?.whiteAlpha, ...overrides.colors?.whiteAlpha },\n blackAlpha: { ...base.colors?.blackAlpha, ...overrides.colors?.blackAlpha }\n },\n radii: { ...base.radii, ...overrides.radii },\n spacing: { ...base.spacing, ...overrides.spacing },\n typography: { ...base.typography, ...overrides.typography },\n vars: { ...base.vars, ...overrides.vars }\n };\n};\n\n/**\n * Resolve a theme by name, following base chain.\n */\nconst resolveThemeConfig = (name: string, visited = new Set<string>()): ThemeConfig => {\n if (visited.has(name)) {\n throw new Error(`[web-kit] Circular theme dependency detected: ${Array.from(visited).join(' -> ')} -> ${name}`);\n }\n\n const entry = registry.get(name);\n if (!entry) {\n throw new Error(`[web-kit] Theme \"${name}\" is not registered.`);\n }\n\n // Return cached resolution\n if (entry.resolved) {\n return entry.resolved;\n }\n\n visited.add(name);\n\n let resolved: ThemeConfig;\n if (entry.base === null) {\n // No base - use config as-is\n resolved = entry.config;\n } else {\n // Resolve base first\n const baseConfig = resolveThemeConfig(entry.base, visited);\n resolved = mergeConfigs(baseConfig, entry.config);\n }\n\n // Cache the resolution\n entry.resolved = resolved;\n return resolved;\n};\n\n/**\n * Initialize built-in themes.\n */\nconst initBuiltInThemes = (): void => {\n if (registry.has(DEFAULT_THEME_NAME)) {\n return;\n }\n\n // Register 'default' theme\n registry.set(DEFAULT_THEME_NAME, {\n name: DEFAULT_THEME_NAME,\n base: null,\n config: defaultThemeConfig,\n resolved: defaultThemeConfig\n });\n\n // Register 'dark' as alias to 'default'\n registry.set(DARK_THEME_ALIAS, {\n name: DARK_THEME_ALIAS,\n base: DEFAULT_THEME_NAME,\n config: {},\n resolved: null\n });\n};\n\n// Initialize on module load\ninitBuiltInThemes();\n\n// --------------------------\n// Public API\n// --------------------------\n\n/**\n * Check if a value is a theme ref.\n */\nexport const isThemeRef = (value: unknown): value is WebKitThemeRef =>\n typeof value === 'object' && value !== null && '__brand' in value && value.__brand === 'WebKitThemeRef';\n\n/**\n * Check if a value is a theme config object.\n */\nexport const isThemeConfig = (value: unknown): value is ThemeConfig => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n if (isThemeRef(value)) {\n return false;\n }\n // Check if it looks like a ThemeConfig\n const obj = value as Record<string, unknown>;\n return (\n obj.colors !== undefined ||\n obj.radii !== undefined ||\n obj.spacing !== undefined ||\n obj.typography !== undefined ||\n obj.vars !== undefined\n );\n};\n\n/**\n * Register a custom theme.\n *\n * @param name - Theme name (must be unique)\n * @param options - Theme options (base + config)\n * @returns A typed theme reference\n *\n * @example\n * ```ts\n * const custom = registerTheme('custom', {\n * base: 'default',\n * config: {\n * vars: { '--ease-panel-radius': '14px' }\n * }\n * });\n *\n * initWebKit({ theme: custom });\n * ```\n */\nexport function registerTheme<Name extends string>(\n name: Name,\n options: RegisterThemeOptions = {}\n): WebKitThemeRef<Name> {\n const { base = DEFAULT_THEME_NAME, config = {} } = options;\n\n // Resolve base name\n let baseName: string | null = null;\n if (base !== null) {\n baseName = isThemeRef(base) ? base.name : base;\n // Validate base exists\n if (!registry.has(baseName)) {\n throw new Error(`[web-kit] Base theme \"${baseName}\" is not registered.`);\n }\n }\n\n // Invalidate cache for themes that depend on this one (if re-registering)\n if (registry.has(name)) {\n for (const entry of registry.values()) {\n if (entry.base === name) {\n entry.resolved = null;\n }\n }\n }\n\n registry.set(name, {\n name,\n base: baseName,\n config,\n resolved: null\n });\n\n return {\n __brand: 'WebKitThemeRef',\n name\n } as WebKitThemeRef<Name>;\n}\n\n/**\n * Get a theme's resolved configuration.\n *\n * @param theme - Theme name, ref, or inline config\n * @returns Resolved theme configuration\n */\nexport function getTheme(theme: ThemeInput): ThemeConfig {\n if (isThemeConfig(theme)) {\n return theme;\n }\n\n const name = isThemeRef(theme) ? theme.name : theme;\n return resolveThemeConfig(name);\n}\n\n/**\n * Check if a theme is registered.\n */\nexport function hasTheme(name: string): boolean {\n return registry.has(name);\n}\n\n/**\n * Get all registered theme names.\n */\nexport function getThemeNames(): string[] {\n return Array.from(registry.keys());\n}\n\n/**\n * Create a theme ref for a registered theme name.\n * Useful for type-safe references without module augmentation.\n */\nexport function themeRef<Name extends WebKitThemeName>(name: Name): WebKitThemeRef<Name> {\n if (!registry.has(name)) {\n throw new Error(`[web-kit] Theme \"${name}\" is not registered.`);\n }\n return {\n __brand: 'WebKitThemeRef',\n name\n } as WebKitThemeRef<Name>;\n}\n","import {\n type ColorPalette,\n defaultColors,\n defaultRadii,\n defaultSpacing,\n defaultTypography,\n type RadiiConfig,\n type SpacingConfig,\n type ThemeConfig,\n type ThemeVars,\n type TypographyConfig\n} from './tokens';\n\nexport * from './presets';\nexport * from './registry';\nexport * from './tokens';\n\n/**\n * CSS variable prefix\n */\nconst CSS_PREFIX = '--color';\nconst RADII_PREFIX = '--radii';\nconst SPACING_PREFIX = '--spacing';\nconst TYPOGRAPHY_PREFIX = '--font';\n\n/**\n * Convert a nested object path to CSS variable name\n * e.g., ['gray', '100'] -> '--color-gray-100'\n */\nconst toVarName = (prefix: string, ...parts: (string | number)[]): string => `${prefix}-${parts.join('-')}`;\n\n/**\n * Generate CSS variables from a color scale\n */\nconst generateColorScaleVars = (\n name: string,\n scale: Record<string | number, string | undefined>\n): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n for (const [level, value] of Object.entries(scale)) {\n if (value !== undefined) {\n vars[toVarName(CSS_PREFIX, name, level)] = value;\n }\n }\n\n return vars;\n};\n\n/**\n * Add alpha to an OKLab/OKLCH color string.\n * Falls back to `color-mix()` for non-oklab/oklch formats.\n */\nconst withAlpha = (color: string, alpha: number): string => {\n const trimmed = color.trim();\n const match = /^(oklab|oklch)\\((.+)\\)$/.exec(trimmed);\n if (match) {\n const fn = match[1];\n const innerRaw = match[2];\n\n if (fn && innerRaw) {\n const inner = innerRaw.trim();\n\n // If the color already has an alpha, keep it as-is.\n if (inner.includes('/')) {\n return `${fn}(${inner})`;\n }\n\n return `${fn}(${inner} / ${alpha})`;\n }\n }\n\n // Fallback: approximate alpha using color-mix\n const pct = Math.round(alpha * 1000) / 10;\n return `color-mix(in oklab, ${trimmed} ${pct}%, transparent)`;\n};\n\n/**\n * Generate CSS variables from a color palette\n */\nconst generateColorVars = (colors: ColorPalette): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n if (colors.gray) {\n Object.assign(vars, generateColorScaleVars('gray', colors.gray));\n }\n\n if (colors.blue) {\n Object.assign(vars, generateColorScaleVars('blue', colors.blue));\n }\n\n // Derived convenience tokens used by some components\n const blue = colors.blue as Record<string, string | undefined> | undefined;\n if (blue?.['200']) {\n vars[toVarName(CSS_PREFIX, 'blue', '100-50')] = withAlpha(blue['200'], 0.5);\n }\n if (blue?.['300']) {\n vars[toVarName(CSS_PREFIX, 'blue', '300-40')] = withAlpha(blue['300'], 0.4);\n }\n\n if (colors.green) {\n Object.assign(vars, generateColorScaleVars('green', colors.green));\n }\n\n if (colors.red) {\n Object.assign(vars, generateColorScaleVars('red', colors.red));\n }\n\n if (colors.orange) {\n Object.assign(vars, generateColorScaleVars('orange', colors.orange));\n }\n\n if (colors.yellow) {\n Object.assign(vars, generateColorScaleVars('yellow', colors.yellow));\n }\n\n if (colors.white) {\n vars[toVarName(CSS_PREFIX, 'white')] = colors.white;\n }\n\n if (colors.black) {\n vars[toVarName(CSS_PREFIX, 'black')] = colors.black;\n }\n\n if (colors.whiteAlpha) {\n for (const [level, value] of Object.entries(colors.whiteAlpha)) {\n if (value !== undefined) {\n vars[toVarName(CSS_PREFIX, 'white', level)] = value;\n }\n }\n }\n\n // Ensure `--color-white-0` exists (used by slider thumb gradients)\n if (!vars[toVarName(CSS_PREFIX, 'white', 0)] && colors.white) {\n vars[toVarName(CSS_PREFIX, 'white', 0)] = withAlpha(colors.white, 0);\n }\n\n if (colors.blackAlpha) {\n for (const [level, value] of Object.entries(colors.blackAlpha)) {\n if (value !== undefined) {\n vars[toVarName(CSS_PREFIX, 'black', level)] = value;\n }\n }\n }\n\n if (colors.foreground) {\n vars[toVarName(CSS_PREFIX, 'foreground')] = colors.foreground;\n }\n\n return vars;\n};\n\n/**\n * Resolve the theme target element.\n * This keeps the theme API SSR-safe (no-ops when `document` is not available).\n */\nconst resolveThemeTarget = (element?: HTMLElement | null): HTMLElement | null => {\n if (element) {\n return element;\n }\n if (typeof document === 'undefined') {\n return null;\n }\n return document.documentElement;\n};\n\n/**\n * Generate CSS variables from radii config\n */\nconst generateRadiiVars = (radii: RadiiConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n for (const [name, value] of Object.entries(radii)) {\n if (value !== undefined) {\n vars[toVarName(RADII_PREFIX, name)] = value;\n }\n }\n\n return vars;\n};\n\n/**\n * Generate CSS variables from spacing config\n */\nconst generateSpacingVars = (spacing: SpacingConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n for (const [name, value] of Object.entries(spacing)) {\n if (value !== undefined) {\n vars[toVarName(SPACING_PREFIX, name)] = value;\n }\n }\n\n return vars;\n};\n\n/**\n * Generate CSS variables from typography config\n */\nconst generateTypographyVars = (typography: TypographyConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n if (typography.fontFamily) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'family')] = typography.fontFamily;\n }\n\n if (typography.fontMono) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'mono')] = typography.fontMono;\n }\n\n if (typography.fontSize) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'size')] = typography.fontSize;\n }\n\n if (typography.lineHeight) {\n vars[toVarName(TYPOGRAPHY_PREFIX, 'line-height')] = typography.lineHeight;\n }\n\n return vars;\n};\n\nconst normalizeCustomVarName = (name: string): string | null => {\n const trimmed = name.trim();\n if (!trimmed) {\n return null;\n }\n return trimmed.startsWith('--') ? trimmed : `--${trimmed}`;\n};\n\nconst generateCustomVars = (vars: ThemeVars): Record<string, string> => {\n const out: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(vars)) {\n if (value === null || value === undefined) {\n continue;\n }\n\n const name = normalizeCustomVarName(key);\n if (!name) {\n continue;\n }\n\n out[name] = String(value);\n }\n\n return out;\n};\n\n/**\n * Generate all CSS variables from a theme config\n */\nconst generateThemeVars = (config: ThemeConfig): Record<string, string> => {\n const vars: Record<string, string> = {};\n\n if (config.colors) {\n Object.assign(vars, generateColorVars(config.colors));\n }\n\n if (config.radii) {\n Object.assign(vars, generateRadiiVars(config.radii));\n }\n\n if (config.spacing) {\n Object.assign(vars, generateSpacingVars(config.spacing));\n }\n\n if (config.typography) {\n Object.assign(vars, generateTypographyVars(config.typography));\n }\n\n if (config.vars) {\n Object.assign(vars, generateCustomVars(config.vars));\n }\n\n return vars;\n};\n\n/**\n * Create a CSS string from theme configuration\n *\n * @param config - Theme configuration object\n * @param selector - CSS selector to apply variables to (default: ':root')\n * @returns CSS string with variables\n *\n * @example\n * ```typescript\n * const css = createTheme({\n * colors: {\n * blue: { 500: '#3b82f6' }\n * }\n * });\n * // Returns: ':root { --color-blue-500: #3b82f6; }'\n * ```\n */\nexport const createTheme = (config: ThemeConfig, selector = ':root'): string => {\n const vars = generateThemeVars(config);\n const declarations = Object.entries(vars)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${declarations}\\n}`;\n};\n\n/**\n * Apply theme configuration to an element (default: document root)\n *\n * @param config - Theme configuration object\n * @param element - Target element (default: document.documentElement)\n *\n * @example\n * ```typescript\n * // Apply to document root\n * defineTheme({\n * colors: {\n * blue: { 500: '#3b82f6' }\n * }\n * });\n *\n * // Apply to specific element\n * defineTheme({ colors: { gray: { 900: '#111' } } }, myElement);\n * ```\n */\nexport const defineTheme = (config: ThemeConfig, element?: HTMLElement | null): void => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return;\n }\n\n const vars = generateThemeVars(config);\n\n for (const [name, value] of Object.entries(vars)) {\n target.style.setProperty(name, value);\n }\n};\n\n/**\n * Remove theme configuration from an element\n *\n * @param config - Theme configuration object (to know which variables to remove)\n * @param element - Target element (default: document.documentElement)\n */\nexport const removeTheme = (config: ThemeConfig, element?: HTMLElement | null): void => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return;\n }\n\n const vars = generateThemeVars(config);\n\n for (const name of Object.keys(vars)) {\n target.style.removeProperty(name);\n }\n};\n\n/**\n * Get the current value of a CSS theme variable\n *\n * @param token - Variable name (with or without '--' prefix)\n * @param element - Element to read from (default: document.documentElement)\n * @returns The computed value or empty string if not found\n *\n * @example\n * ```typescript\n * const blue500 = getThemeValue('color-blue-500');\n * const radius = getThemeValue('--radii-md');\n * ```\n */\nexport const getThemeValue = (token: string, element?: HTMLElement | null): string => {\n const target = resolveThemeTarget(element);\n if (!target || typeof getComputedStyle === 'undefined') {\n return '';\n }\n\n const varName = token.startsWith('--') ? token : `--${token}`;\n return getComputedStyle(target).getPropertyValue(varName).trim();\n};\n\n/**\n * Set a single theme variable\n *\n * @param token - Variable name (with or without '--' prefix)\n * @param value - Value to set\n * @param element - Target element (default: document.documentElement)\n *\n * @example\n * ```typescript\n * setThemeValue('color-blue-500', '#3b82f6');\n * ```\n */\nexport const setThemeValue = (token: string, value: string, element?: HTMLElement | null): void => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return;\n }\n\n const varName = token.startsWith('--') ? token : `--${token}`;\n target.style.setProperty(varName, value);\n};\n\nexport type SystemThemeMode = 'dark' | 'light';\n\n/** Attribute used for CSS-based theme switching */\nexport const EASE_THEME_ATTRIBUTE = 'data-ease-theme';\n\n/**\n * Merge a theme with the library defaults (dark baseline).\n * Use this when you want to start from the built-in design tokens and override a few values.\n */\nexport const mergeTheme = (overrides: ThemeConfig = {}): ThemeConfig => {\n return {\n colors: {\n ...defaultColors,\n ...overrides.colors,\n gray: { ...defaultColors.gray, ...overrides.colors?.gray },\n blue: { ...defaultColors.blue, ...overrides.colors?.blue },\n green: { ...defaultColors.green, ...overrides.colors?.green },\n red: { ...defaultColors.red, ...overrides.colors?.red },\n orange: { ...defaultColors.orange, ...overrides.colors?.orange },\n yellow: { ...defaultColors.yellow, ...overrides.colors?.yellow },\n whiteAlpha: { ...defaultColors.whiteAlpha, ...overrides.colors?.whiteAlpha },\n blackAlpha: { ...defaultColors.blackAlpha, ...overrides.colors?.blackAlpha }\n },\n radii: { ...defaultRadii, ...overrides.radii },\n spacing: { ...defaultSpacing, ...overrides.spacing },\n typography: { ...defaultTypography, ...overrides.typography },\n vars: overrides.vars ? { ...overrides.vars } : undefined\n };\n};\n\n/**\n * Alias for `mergeTheme()`.\n * This package ships a dark baseline theme; light/custom themes should be provided by the consumer.\n */\nexport const createDarkTheme = (overrides: ThemeConfig = {}): ThemeConfig => mergeTheme(overrides);\n\nexport interface SetThemeNameOptions {\n /** Target element (defaults to `document.documentElement` in the browser). */\n element?: HTMLElement | null;\n /** Attribute name to set (defaults to `data-ease-theme`). */\n attribute?: string;\n /** Optional `color-scheme` value to set on the target element. */\n colorScheme?: SystemThemeMode;\n /** Set `element.style.colorScheme` (default: true when `colorScheme` is provided). */\n setColorScheme?: boolean;\n}\n\n/**\n * Set the active theme name on an element via `[data-ease-theme=\"<name>\"]`.\n * Useful for CSS-scoped themes.\n */\nexport const setThemeName = (name: string, options: SetThemeNameOptions = {}): void => {\n const target = resolveThemeTarget(options.element);\n if (!target) {\n return;\n }\n\n const attribute = options.attribute ?? EASE_THEME_ATTRIBUTE;\n target.setAttribute(attribute, name);\n\n if (options.colorScheme && options.setColorScheme !== false) {\n target.style.colorScheme = options.colorScheme;\n }\n};\n\nexport const getThemeName = (element?: HTMLElement | null, attribute = EASE_THEME_ATTRIBUTE): string | null => {\n const target = resolveThemeTarget(element);\n if (!target) {\n return null;\n }\n\n return target.getAttribute(attribute);\n};\n\nexport interface ApplyThemeOptions {\n /** Target element (defaults to `document.documentElement` in the browser). */\n element?: HTMLElement | null;\n /** Optional theme name to set as `[data-ease-theme=\"<name>\"]`. */\n name?: string;\n /** Attribute name to use when `name` is provided. Defaults to `data-ease-theme`. */\n attribute?: string;\n /** Optional `color-scheme` value to set on the target element. */\n colorScheme?: SystemThemeMode;\n /** Set `[data-ease-theme]` when `name` is provided (default: true). */\n setAttribute?: boolean;\n /** Set `element.style.colorScheme` when `colorScheme` is provided (default: true). */\n setColorScheme?: boolean;\n /**\n * If true, the provided theme is first merged with the library defaults via `mergeTheme()`.\n * Use this when you only pass partial overrides.\n */\n mergeWithDefaults?: boolean;\n}\n\n/**\n * Apply a theme config (and optional theme name + color-scheme) to an element.\n * This is SSR-safe: it becomes a no-op when `document` is not available.\n */\nexport const applyTheme = (theme: ThemeConfig, options: ApplyThemeOptions = {}): ThemeConfig => {\n const target = resolveThemeTarget(options.element);\n const attribute = options.attribute ?? EASE_THEME_ATTRIBUTE;\n\n const config = options.mergeWithDefaults ? mergeTheme(theme) : theme;\n\n defineTheme(config, target);\n\n if (!target) {\n return config;\n }\n\n if (options.name && options.setAttribute !== false) {\n target.setAttribute(attribute, options.name);\n }\n\n if (options.colorScheme && options.setColorScheme !== false) {\n target.style.colorScheme = options.colorScheme;\n }\n\n return config;\n};\n\nexport const getSystemThemeMode = (): SystemThemeMode => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return 'dark';\n }\n return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';\n};\n\nexport interface FollowSystemThemeOptions extends Omit<ApplyThemeOptions, 'name' | 'colorScheme'> {\n /** Theme name for dark mode (default: 'dark'). */\n darkName?: string;\n /** Theme name for light mode (default: 'light'). */\n lightName?: string;\n}\n\n/**\n * Follow `prefers-color-scheme` and apply the provided themes.\n *\n * This package does NOT ship a light theme preset; you supply both themes.\n * Returns a cleanup function to remove the media query listener.\n */\nexport const followSystemTheme = (\n themes: { dark: ThemeConfig; light: ThemeConfig },\n options: FollowSystemThemeOptions = {}\n): (() => void) => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return () => {};\n }\n\n const media = window.matchMedia('(prefers-color-scheme: light)');\n const apply = (): void => {\n const mode: SystemThemeMode = media.matches ? 'light' : 'dark';\n const theme = mode === 'light' ? themes.light : themes.dark;\n\n applyTheme(theme, {\n ...options,\n name: mode === 'light' ? (options.lightName ?? 'light') : (options.darkName ?? 'dark'),\n colorScheme: mode\n });\n };\n\n apply();\n\n media.addEventListener('change', apply);\n return () => media.removeEventListener('change', apply);\n};\n","/**\n * Main initialization API for @easemate/web-kit\n */\n\nimport type { FontConfig } from './internal/fonts';\nimport type { LazyLoadConfig } from './internal/lazy-load';\nimport type { StylePreset } from './internal/style-inject';\n\nimport { applyTheme, followSystemTheme, type SystemThemeMode } from './theme';\nimport { getTheme, isThemeRef, type ThemeInput } from './theme/registry';\n\n// --------------------------\n// Types\n// --------------------------\n\n/**\n * Theme mode configuration for light/dark switching.\n */\nexport interface ThemeModeConfig {\n /** Mode selection: 'light', 'dark', or 'system' for auto-switching */\n mode: 'light' | 'dark' | 'system';\n /** Theme to use in light mode */\n light: ThemeInput;\n /** Theme to use in dark mode */\n dark: ThemeInput;\n /** Persist user preference to localStorage */\n persist?: { key: string };\n}\n\n/**\n * Style injection configuration.\n */\nexport type StylesConfig = false | StylePreset | { reset?: boolean; base?: boolean };\n\n/**\n * Component replacement configuration.\n * Keys are tag names, values are either:\n * - A custom element constructor\n * - A string tag name to alias to\n */\nexport type ReplaceConfig = Record<string, CustomElementConstructor | string>;\n\n/**\n * initWebKit options.\n */\nexport interface InitWebKitOptions {\n /**\n * Tags to include (register only these).\n * If not provided, all components are registered.\n */\n include?: readonly string[];\n\n /**\n * Tags to exclude (register all except these).\n * Ignored if `include` is provided.\n */\n exclude?: readonly string[];\n\n /**\n * Replace components with custom implementations.\n * - Constructor: registers your class under the tag name\n * - String: creates a bridge element that renders the aliased tag\n */\n replace?: ReplaceConfig;\n\n /**\n * Theme to apply.\n * - String: registered theme name (e.g., 'default', 'dark')\n * - WebKitThemeRef: theme reference from registerTheme()\n * - ThemeConfig: inline theme configuration\n * - ThemeModeConfig: light/dark mode configuration\n */\n theme?: ThemeInput | ThemeModeConfig;\n\n /**\n * Element to scope theme variables to (default: document.documentElement).\n */\n target?: HTMLElement;\n\n /**\n * Inject global styles.\n * - false: no styles (default)\n * - 'reset': minimal CSS reset\n * - 'base': body/html dark theme styles\n * - 'main': reset + base\n * - { reset?: boolean; base?: boolean }: fine-grained control\n */\n styles?: StylesConfig;\n\n /**\n * Font loading configuration.\n * - false: no font loading (default)\n * - 'default': load default fonts (Instrument Sans, Geist Mono)\n * - FontConfig: custom font configuration\n */\n fonts?: FontConfig | 'default' | false;\n\n /**\n * Enable lazy loading of components.\n * - false: eager loading (default)\n * - true: lazy load with default config\n * - LazyLoadConfig: custom lazy load config\n */\n lazyLoad?: boolean | LazyLoadConfig;\n\n /**\n * CSP nonce for injected style/link elements.\n */\n cspNonce?: string;\n\n /**\n * Development mode options.\n */\n dev?: {\n /** Warn about unknown tag names in include/exclude */\n warnUnknownTags?: boolean;\n /** Log component loads */\n logLoads?: boolean;\n };\n}\n\n/**\n * Controller returned by initWebKit.\n */\nexport interface WebKitController {\n /** Cleanup all injected styles, fonts, and listeners */\n dispose: () => void;\n\n /** Theme controller (if theme was configured) */\n theme?: {\n /** Set theme by name or config */\n set: (theme: ThemeInput) => void;\n /** Set theme mode (only for ThemeModeConfig) */\n mode?: (mode: 'light' | 'dark' | 'system') => void;\n };\n\n /** Promise that resolves when all components are loaded */\n ready: Promise<void>;\n}\n\n// --------------------------\n// Helpers\n// --------------------------\n\nconst isBrowser = (): boolean => typeof document !== 'undefined' && typeof window !== 'undefined';\n\nconst isThemeModeConfig = (value: unknown): value is ThemeModeConfig => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const obj = value as Record<string, unknown>;\n return obj.mode !== undefined && (obj.light !== undefined || obj.dark !== undefined);\n};\n\n/**\n * Register replacement components before loading built-in ones.\n */\nfunction registerReplacements(replace: ReplaceConfig): void {\n if (!isBrowser()) {\n return;\n }\n\n for (const [tag, replacement] of Object.entries(replace)) {\n // Skip if already defined\n if (customElements.get(tag)) {\n continue;\n }\n\n if (typeof replacement === 'function') {\n // Register custom constructor\n customElements.define(tag, replacement);\n } else if (typeof replacement === 'string') {\n // Create a bridge element that renders the aliased tag\n const aliasTag = replacement;\n class BridgeElement extends HTMLElement {\n private _inner: HTMLElement | null = null;\n\n connectedCallback(): void {\n // Create the aliased element\n this._inner = document.createElement(aliasTag);\n\n // Copy attributes\n for (const attr of this.attributes) {\n this._inner.setAttribute(attr.name, attr.value);\n }\n\n // Move children\n while (this.firstChild) {\n this._inner.appendChild(this.firstChild);\n }\n\n // Use shadow DOM to contain the aliased element\n const shadow = this.attachShadow({ mode: 'open' });\n shadow.appendChild(this._inner);\n }\n\n disconnectedCallback(): void {\n this._inner = null;\n }\n }\n customElements.define(tag, BridgeElement);\n }\n }\n}\n\n/**\n * Resolve and apply styles configuration.\n */\nasync function applyStyles(styles: StylesConfig, nonce?: string): Promise<{ dispose: () => void }> {\n if (styles === false) {\n return { dispose: () => {} };\n }\n\n const { injectPreset, removePreset } = await import('./internal/style-inject');\n\n const injected: StylePreset[] = [];\n\n if (typeof styles === 'string') {\n injectPreset(styles, nonce);\n injected.push(styles);\n } else if (typeof styles === 'object') {\n if (styles.reset) {\n injectPreset('reset', nonce);\n injected.push('reset');\n }\n if (styles.base) {\n injectPreset('base', nonce);\n injected.push('base');\n }\n }\n\n return {\n dispose: () => {\n for (const preset of injected) {\n removePreset(preset);\n }\n }\n };\n}\n\n/**\n * Resolve and apply theme configuration.\n */\nfunction applyThemeConfig(\n theme: ThemeInput | ThemeModeConfig,\n target?: HTMLElement\n): { dispose: () => void; controller?: WebKitController['theme'] } {\n if (isThemeModeConfig(theme)) {\n // Light/dark mode configuration\n const lightConfig = getTheme(theme.light);\n const darkConfig = getTheme(theme.dark);\n\n if (theme.mode === 'system') {\n const cleanup = followSystemTheme({ light: lightConfig, dark: darkConfig }, { element: target });\n\n return {\n dispose: cleanup,\n controller: {\n set: (t: ThemeInput) => {\n const config = getTheme(t);\n applyTheme(config, { element: target });\n },\n mode: (m: 'light' | 'dark' | 'system') => {\n if (m === 'system') {\n // Re-apply system theme\n const systemMode: SystemThemeMode = window.matchMedia('(prefers-color-scheme: light)').matches\n ? 'light'\n : 'dark';\n const config = systemMode === 'light' ? lightConfig : darkConfig;\n applyTheme(config, {\n element: target,\n name: systemMode,\n colorScheme: systemMode\n });\n } else {\n const config = m === 'light' ? lightConfig : darkConfig;\n applyTheme(config, {\n element: target,\n name: m,\n colorScheme: m\n });\n }\n }\n }\n };\n }\n\n // Fixed mode\n const config = theme.mode === 'light' ? lightConfig : darkConfig;\n applyTheme(config, {\n element: target,\n name: theme.mode,\n colorScheme: theme.mode\n });\n\n return {\n dispose: () => {},\n controller: {\n set: (t: ThemeInput) => {\n const resolvedConfig = getTheme(t);\n applyTheme(resolvedConfig, { element: target });\n }\n }\n };\n }\n\n // Simple theme (name, ref, or config)\n const config = getTheme(theme);\n const name = isThemeRef(theme) ? theme.name : typeof theme === 'string' ? theme : undefined;\n\n applyTheme(config, {\n element: target,\n name,\n colorScheme: 'dark'\n });\n\n return {\n dispose: () => {},\n controller: {\n set: (t: ThemeInput) => {\n const resolvedConfig = getTheme(t);\n const themeName = isThemeRef(t) ? t.name : typeof t === 'string' ? t : undefined;\n applyTheme(resolvedConfig, { element: target, name: themeName });\n }\n }\n };\n}\n\n// --------------------------\n// Main API\n// --------------------------\n\n/**\n * Initialize the web-kit.\n *\n * @example\n * ```ts\n * // Basic usage - register all components with default theme\n * initWebKit({ theme: 'default' });\n *\n * // Selective loading\n * initWebKit({\n * include: ['ease-button', 'ease-slider'],\n * theme: 'default'\n * });\n *\n * // With styles\n * initWebKit({\n * theme: 'default',\n * styles: 'main',\n * fonts: 'default'\n * });\n *\n * // Light/dark mode\n * initWebKit({\n * theme: {\n * mode: 'system',\n * light: myLightTheme,\n * dark: 'default'\n * }\n * });\n * ```\n */\nexport function initWebKit(options: InitWebKitOptions = {}): WebKitController {\n // SSR safety - no-op on server\n if (!isBrowser()) {\n return {\n dispose: () => {},\n ready: Promise.resolve()\n };\n }\n\n const {\n include,\n exclude,\n replace,\n theme,\n target,\n styles = false,\n fonts = false,\n lazyLoad = false,\n cspNonce,\n dev\n } = options;\n\n const disposers: Array<() => void> = [];\n\n // Controller object that will be populated\n const controller: WebKitController = {\n dispose: () => {\n for (const dispose of disposers) {\n dispose();\n }\n },\n theme: undefined,\n ready: Promise.resolve()\n };\n\n // Build the ready promise\n const readyPromise = (async () => {\n // 1. Register replacements first (before loading any components)\n if (replace) {\n registerReplacements(replace);\n }\n\n // 2. Apply styles\n const stylesResult = await applyStyles(styles, cspNonce);\n disposers.push(stylesResult.dispose);\n\n // 3. Apply theme\n if (theme) {\n const themeResult = applyThemeConfig(theme, target);\n disposers.push(themeResult.dispose);\n controller.theme = themeResult.controller;\n }\n\n // 4. Load fonts\n if (fonts !== false) {\n const { injectFonts, removeFonts } = await import('./internal/fonts');\n injectFonts(fonts);\n const fontsToRemove = fonts;\n disposers.push(() => removeFonts(fontsToRemove));\n }\n\n // 5. Load components\n if (lazyLoad) {\n // Lazy loading mode\n const { createLazyLoader } = await import('./internal/lazy-load');\n const lazyConfig: LazyLoadConfig = typeof lazyLoad === 'object' ? lazyLoad : {};\n\n // Apply include/exclude to lazy loader\n if (include) {\n lazyConfig.include = include;\n } else if (exclude) {\n lazyConfig.exclude = exclude;\n }\n\n const loader = createLazyLoader(lazyConfig);\n disposers.push(loader.dispose);\n } else {\n // Eager loading mode\n const { loadAllComponents, loadComponents, resolveTags } = await import('./internal/component-loaders');\n\n if (include || exclude) {\n const tags = resolveTags({ include, exclude });\n\n if (dev?.warnUnknownTags) {\n const { WEB_KIT_ALL_TAGS } = await import('./internal/component-loaders');\n const allTags = new Set(WEB_KIT_ALL_TAGS);\n const unknown = (include ?? exclude ?? []).filter((t) => !allTags.has(t as never));\n if (unknown.length > 0) {\n console.warn('[web-kit] Unknown tags:', unknown);\n }\n }\n\n if (dev?.logLoads) {\n console.log('[web-kit] Loading components:', tags);\n }\n\n await loadComponents(tags);\n } else {\n if (dev?.logLoads) {\n console.log('[web-kit] Loading all components');\n }\n await loadAllComponents();\n }\n }\n })();\n\n controller.ready = readyPromise;\n return controller;\n}\n\nexport type { WebKitComponentTag, WebKitElementTag, WebKitTag } from './internal/component-loaders';\n// Re-export useful types\nexport type { FontConfig, FontSource } from './internal/fonts';\nexport type { LazyLoadConfig, LazyLoader } from './internal/lazy-load';\nexport type { StylePreset } from './internal/style-inject';\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n"],"mappings":"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YAIAC,sBACAC,sBAYAC;AA5Bb;;;AAEO,IAAMV,kBAAkB;AAExB,IAAMC,uBAAuB;AAC7B,IAAMC,sBAAsB;AAC5B,IAAMC,8BAA8B;AACpC,IAAMC,sCAAsCD,8BAA8BA;AAE1E,IAAME,wBAAwB;AAC9B,IAAMC,YAAY;AAClB,IAAMC,aAAa;AAInB,IAAMC,uBAAuB;AAC7B,IAAMC,uBAAuB;AAY7B,IAAMC,iBAAiC;MAC5C;QACEC,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OACE;YACFF,OAAO;UACT;UACA;YACEE,OACE;YACFF,OAAO;UACT;;MAEJ;MACA;QACEA,OAAO;QACPC,SAAS;UACP;YACEC,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;UACA;YACEE,OAAO;YACPF,OAAO;UACT;;MAEJ;;;;;;ACjOF,IAAAG,kBAIaC;AAJb;;;IAAAD,mBAA4C;AAE5C;AAEO,IAAMC,oBAAoB,CAACC,aAAAA;AAChC,YAAMC,QAA6B,CAAA;AAEnC,YAAMC,SAASC,KAAKC,KAAKC,YAAYL,QAAAA;AACrC,YAAMM,SAASH,KAAKC,KAAKG,aAAaP,QAAAA;AAEtC,eAASQ,IAAI,GAAGA,KAAKN,QAAQM,KAAK;AAChC,cAAMC,IAAID,IAAIR;AACd,YAAIS,IAAIJ,WAAW;AACjB;QACF;AAEAJ,cAAMS,KAAKC;;;aAGFF,CAAAA;;aAEAA,CAAAA;aACAF,UAAAA;;KAER;MACH;AAEA,eAASC,IAAI,GAAGA,KAAKF,QAAQE,KAAK;AAChC,cAAMI,IAAIJ,IAAIR;AACd,YAAIY,IAAIL,YAAY;AAClB;QACF;AAEAN,cAAMS,KAAKC;;;;aAIFC,CAAAA;aACAP,SAAAA;aACAO,CAAAA;;KAER;MACH;AAEA,aAAOX;IACT;;;;;AC/CA,IAiCaY;AAjCb;;;AAiCO,IAAMA,uBAAuB,CAClCC,MACAC,MACAC,WAAAA;AAEAF,WAAKG,cACH,IAAIC,YAAwCH,MAAM;QAChDC;QACAG,SAAS;QACTC,UAAU;MACZ,CAAA,CAAA;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7CAC,sCAkFiCC,eAAAA,QAAAA,QAAAA,QAAAA,OAAAA,OAAAA,OAAAA,OAAAA,OAAAA,OAItBC,kBAGAC,cAGAC,gBAGAC,kBAGAC,gBAGAC,0BAGAC,gBAGAC,aAGAC,kBAAAA,2BA5BEC,aA8wCPC,MAEAC,WAQAC,WA0BAC,mBA+DAC;;;;AAn8CN,IAAAhB,mBAAkD;AAElD;AAWA;AACA;AACA;AAQA;AAaA;AACA;AACA;AACA;YAcCiB,UAAU;MACTC,KAAK;MACLC,QAAQC;MACRC,WAAAA;AACE,cAAMC,mBAAmB,KAAKC,kBAAiB;AAC/C,cAAMC,kBAAkB,KAAKC,mBAAkB;AAC/C,cAAMC,sBAAsB,KAAKC,uBAAsB;AACvD,cAAMC,YAAY,KAAKC,aAAY;AAEnC,eAAOC;;uBAEYC,SAAAA,IAAaC,UAAAA;iBACnBD,SAAAA;kBACCC,UAAAA;uBACK,KAAKC,iBAAiB;uBACtB,KAAKC,iBAAiB;qBACxB,KAAKC,eAAe;wBACjB,KAAKC,kBAAkB;yBACtB,KAAKA,kBAAkB;;UAEtC,KAAKhC,WAAWiC,mEAAkD,KAAKC,aAAY,CAAA,SAAW,IAAA;UAC9FhB,mBAAmBQ,uEAAsDR,gBAAAA,aAA6B,IAAA;qCAC3EM,SAAAA;UAC3BJ,eAAAA;UACAE,mBAAAA;;;MAGR;IACF,CAAA,GAAAa,SAIGC,KAAiB;MAAEC,SAAS;IAAK,CAAA,GAAAC,SAGjCF,KAAuC;MAAEG,MAAMC;MAAQH,SAAS;IAAM,CAAA,GAAAI,SAGtEL,KAAc;MAAEG,MAAMG;MAASL,SAAS;MAAMM,cAAc;IAAK,CAAA,GAAA,QAGjEP,KAAc;MAAEG,MAAMG;MAASL,SAAS;MAAMM,cAAc;IAAM,CAAA,GAAA,QAGlEP,KAAa;MAAEG,MAAMK;MAAQP,SAAS;MAAMM,cAAc;IAAE,CAAA,GAAA,QAG5DP,KAAoB;MAAEG,MAAMK;MAAQP,SAAS;MAAOM,cAAc;IAAK,CAAA,GAAA,QAGvEP,KAAa;MAAEG,MAAMK;MAAQP,SAAS;MAAMM,cAAc;IAAE,CAAA,GAAA,QAG5DP,KAAa;MAAEG,MAAMK;MAAQP,SAAS;MAAMM,cAAc;IAAE,CAAA,GAAA,QAG5DE,MAAqB,KAAA;AA3BjB,IAAMtC,cAAN,eAA0BV,gBAAAA,aAAAA;;eAItBC,kBAGAC,cAGAC,gBAGAC,kBAGAC,gBAGAC,0BAGAC,gBAGAC,aAGAC,kBAAAA,WAAAA,GAAAA,GAAAA,CAAAA,cAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YAxBAR;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;WA5BsBT,aAAAA;;MAItBC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,qBAAAA;oBAAAA;;UAAAA,mBAAAA,IAAAA;aAAAA,mCAAkB;;MAGlBC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAEnB;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MAGA;MAQA;MAgEA;MAOA;MAqEA,oBACEwC,UACAC,OACAC,WACAC,OACAC,WAAuB;AAEvB,cAAMC,KAAKD,cAAc,OAAQH,MAAMK,SAAS,IAAML,MAAMM,UAAU;AACtE,cAAMC,KAAKJ,cAAc,OAAQH,MAAMQ,SAAS,IAAMR,MAAMS,UAAU;AAEtE,cAAMC,YAAY;UAAEC,GAAGX,MAAMW,IAAIP;UAAIQ,GAAGZ,MAAMY,IAAIL;QAAG;AACrD,cAAMM,YAAY,KAAK,aAAaH,SAAAA;AACpC,cAAMI,OAAOX,cAAc,OAAO,aAAa;AAC/C,cAAMY,WAAWZ,cAAc,OAAO,aAAa;AAEnD,cAAMa,iBAAiB,KAAK,cAAcD,YAAY,KAAK,eAAeb;AAE1E,cAAMe,aAAa,KAAK,kBAAkBhB,WAAWY,SAAAA;AAErD,YAAI,CAACI,YAAY;AACf;QACF;AAEAlB,iBAASmB,KAAKhC;;cAEJ2B,UAAUF,CAAC;cACXE,UAAUD,CAAC;aACZO,eAAAA;sBACSjB,KAAAA;qBACDY,IAAAA;OACd;AAEHf,iBAASmB,KAAKhC;+BACa8B,iBAAiB,aAAa,EAAA;aAChDC,UAAAA;sBACSf,KAAAA;qBACDY,IAAAA;wBACGX,SAAAA,KAAciB,KAAK9D,MAAMoD,UAAUC,IAAI,GAAA,CAAA,MAAUS,KAAK9D,MAAMoD,UAAUE,IAAI,GAAA,CAAA;OAC3F;MACL;MAEA;MAkCA;MAkCApC,yBAAmD;AACjD,YAAI,KAAKzB,eAAesE,WAAWC,QAAQ;AACzC,iBAAO;QACT;AAEA,cAAMC,UAAU,KAAK;AACrB,YAAI,CAACA,WAAW,CAACA,QAAQC,eAAe;AACtC,iBAAO;QACT;AAEA,cAAMxB,QAAQuB,QAAQC;AACtB,cAAMC,SAAS,KAAK,aAAazB,KAAAA;AACjC,cAAMD,WAAgC,CAAA;AAEtC,YAAIC,MAAMK,UAAUqB,UAAa1B,MAAMQ,UAAUkB,QAAW;AAC1D,gBAAMC,cAAc,KAAK,aAAa;YACpChB,GAAGX,MAAMW,KAAKX,MAAMK,SAAS;YAC7BO,GAAGZ,MAAMY,KAAKZ,MAAMQ,SAAS;UAC/B,CAAA;AACA,gBAAMS,aAAa,KAAK,kBAAkBQ,QAAQE,WAAAA;AAClD,cAAIV,YAAY;AACdlB,qBAASmB,KACPhC;;iBAEO+B,UAAAA;aACJ;UAEP;QACF;AAEA,YAAIjB,MAAMM,WAAWoB,UAAa1B,MAAMS,WAAWiB,QAAW;AAC5D,gBAAMC,cAAc,KAAK,aAAa;YACpChB,GAAGX,MAAMW,KAAKX,MAAMM,UAAU;YAC9BM,GAAGZ,MAAMY,KAAKZ,MAAMS,UAAU;UAChC,CAAA;AACA,gBAAMQ,aAAa,KAAK,kBAAkBQ,QAAQE,WAAAA;AAClD,cAAIV,YAAY;AACdlB,qBAASmB,KACPhC;;iBAEO+B,UAAAA;aACJ;UAEP;QACF;AAEAlB,iBAASmB,KAAKhC,8EAA6DuC,OAAOd,CAAC,SAASc,OAAOb,CAAC,MAAM;AAE1G,eAAO1B,6EAA4Da,QAAAA;MACrE;MAEA,kBAAkBE,WAAkBY,WAAgB;AAClD,cAAMe,OAAOf,UAAUF,IAAIV,UAAUU;AACrC,cAAMkB,OAAOhB,UAAUD,IAAIX,UAAUW;AACrC,cAAMkB,SAASV,KAAKW,KAAKH,OAAOA,OAAOC,OAAOA,IAAAA;AAE9C,cAAMG,eAAe;AACrB,cAAMC,gBAAgB;AAEtB,YAAIH,SAASE,eAAe,GAAG;AAC7B,iBAAO;QACT;AAEA,cAAME,OAAON,OAAOE;AACpB,cAAMK,OAAON,OAAOC;AACpB,cAAMM,QAAQ,CAACD;AACf,cAAME,QAAQH;AAEd,cAAMI,KAAKzB,UAAUF;AACrB,cAAM4B,KAAK1B,UAAUD;AAErB,cAAM4B,iBAAiBpB,KAAKqB,IAAI,IAAIX,SAASE,gBAAgB,GAAA;AAE7D,cAAMU,aAAaZ,SAASE,eAAeQ;AAE3C,cAAMG,eAAe1C,UAAUU,IAAIyB,QAAQH;AAC3C,cAAMW,eAAe3C,UAAUW,IAAIyB,QAAQJ;AAC3C,cAAMY,kBAAkB5C,UAAUU,IAAIyB,QAAQH;AAC9C,cAAMa,kBAAkB7C,UAAUW,IAAIyB,QAAQJ;AAE9C,cAAMc,aAAa9C,UAAUU,IAAIuB,OAAOQ,aAAaN,QAAQH;AAC7D,cAAMe,aAAa/C,UAAUW,IAAIuB,OAAOO,aAAaL,QAAQJ;AAC7D,cAAMgB,gBAAgBhD,UAAUU,IAAIuB,OAAOQ,aAAaN,QAAQH;AAChE,cAAMiB,gBAAgBjD,UAAUW,IAAIuB,OAAOO,aAAaL,QAAQJ;AAEhE,cAAMkB,aAAab,KAAKF,QAAQJ;AAChC,cAAMoB,aAAab,KAAKF,QAAQL;AAChC,cAAMqB,gBAAgBf,KAAKF,QAAQJ;AACnC,cAAMsB,gBAAgBf,KAAKF,QAAQL;AAEnC,cAAMuB,YAAYf,iBAAiB;AACnC,cAAMgB,YAAYhB,iBAAiB;AAEnC,cAAMiB,YAAYV,aAAab,OAAOqB;AACtC,cAAMG,YAAYV,aAAab,OAAOoB;AACtC,cAAMI,YAAYR,aAAajB,OAAOsB;AACtC,cAAMI,YAAYR,aAAajB,OAAOqB;AAEtC,cAAMK,eAAeZ,gBAAgBf,OAAOqB;AAC5C,cAAMO,eAAeZ,gBAAgBf,OAAOoB;AAC5C,cAAMQ,eAAeV,gBAAgBnB,OAAOsB;AAC5C,cAAMQ,eAAeV,gBAAgBnB,OAAOqB;AAE5C,eAAO;UACDH,aAAAA,IAAiBC,aAAAA;UACjBS,YAAAA,IAAgBC,YAAAA,IAAgBH,YAAAA,IAAgBC,YAAAA,IAAgBb,aAAAA,IAAiBC,aAAAA;UACjFL,eAAAA,IAAmBC,eAAAA;UACnBb,aAAAA,IAAiBA,aAAAA,UAAuBU,YAAAA,IAAgBC,YAAAA;UACxDG,UAAAA,IAAcC,UAAAA;UACdS,SAAAA,IAAaC,SAAAA,IAAaC,SAAAA,IAAaC,SAAAA,IAAaT,UAAAA,IAAcC,UAAAA;UAClEpB,YAAAA,IAAgBA,YAAAA,UAAsBqB,aAAAA,IAAiBC,aAAAA;;;MAG/D;MAEA;MAQA;MASA;MAaA;MAkBA,yBAAyBtD,OAAchD,QAAoB;AACzD,YAAIA,OAAO8E,SAAS,GAAG;AACrB,iBAAOjC,OAAOoE;QAChB;AAEA,YAAIC,qBAAqBrE,OAAOoE;AAEhC,iBAAS/D,QAAQ,GAAGA,QAAQlD,OAAO8E,SAAS,GAAG5B,SAAS,GAAG;AACzD,gBAAMiE,QAAQnH,OAAOkD,KAAAA;AACrB,gBAAMkE,MAAMpH,OAAOkD,QAAQ,CAAA;AAE3B,cAAI,CAACiE,SAAS,CAACC,KAAK;AAClB;UACF;AAEA,gBAAMC,MAAM;YACV1D,GAAGwD,MAAMxD,KAAKwD,MAAM7D,UAAU;YAC9BM,GAAGuD,MAAMvD,KAAKuD,MAAM1D,UAAU;UAChC;AAEA,gBAAM6D,MAAM;YACV3D,GAAGyD,IAAIzD,KAAKyD,IAAI/D,SAAS;YACzBO,GAAGwD,IAAIxD,KAAKwD,IAAI5D,SAAS;UAC3B;AAEA,mBAAS+D,SAAS,GAAGA,UAAUC,qBAAqBD,UAAU,GAAG;AAC/D,kBAAME,IAAIF,SAASC;AACnB,kBAAME,cAAc7G,6BAA6B4G,GAAGN,OAAOE,KAAKC,KAAKF,GAAAA;AACrE,kBAAMhE,KAAKJ,MAAMW,IAAI+D,YAAY/D;AACjC,kBAAMJ,KAAKP,MAAMY,IAAI8D,YAAY9D;AACjC,kBAAM+D,kBAAkBvE,KAAKA,KAAKG,KAAKA;AACvC,gBAAIoE,kBAAkBT,oBAAoB;AACxCA,mCAAqBS;YACvB;UACF;QACF;AAEA,eAAOvD,KAAKW,KAAKmC,kBAAAA;MACnB;MAEA,uBAAuBlE,OAAchD,QAAoB;AACvD,cAAM4H,WAAW,KAAK,yBAAyB5E,OAAOhD,MAAAA;AACtD,eAAO4H,YAAYC;MACrB;MAEA,6BAA6BC,UAAiB9H,QAAoB;AAChE,cAAM+H,WAAW,KAAK,aAAaD,QAAAA;AACnC,cAAME,mBAAmB7D,kBAAkBA;AAE3C,mBAAWnB,SAAShD,QAAQ;AAC1B,cAAI,CAACgD,OAAO;AACV;UACF;AAEA,gBAAMiF,WAAW,KAAK,aAAajF,KAAAA;AACnC,gBAAMI,KAAK6E,SAAStE,IAAIoE,SAASpE;AACjC,gBAAMJ,KAAK0E,SAASrE,IAAImE,SAASnE;AAEjC,cAAIR,KAAKA,KAAKG,KAAKA,KAAKyE,kBAAkB;AACxC,mBAAO;UACT;AAEA,cAAIhF,MAAMK,UAAUqB,UAAa1B,MAAMQ,UAAUkB,QAAW;AAC1D,kBAAMwD,WAAW;cACfvE,GAAGX,MAAMW,KAAKX,MAAMK,SAAS;cAC7BO,GAAGZ,MAAMY,KAAKZ,MAAMQ,SAAS;YAC/B;AACA,kBAAM2E,cAAc,KAAK,aAAaD,QAAAA;AACtC,kBAAME,MAAMD,YAAYxE,IAAIoE,SAASpE;AACrC,kBAAM0E,MAAMF,YAAYvE,IAAImE,SAASnE;AAErC,gBAAIwE,MAAMA,MAAMC,MAAMA,MAAML,kBAAkB;AAC5C,qBAAO;YACT;UACF;AAEA,cAAIhF,MAAMM,WAAWoB,UAAa1B,MAAMS,WAAWiB,QAAW;AAC5D,kBAAM4D,YAAY;cAChB3E,GAAGX,MAAMW,KAAKX,MAAMM,UAAU;cAC9BM,GAAGZ,MAAMY,KAAKZ,MAAMS,UAAU;YAChC;AACA,kBAAM8E,eAAe,KAAK,aAAaD,SAAAA;AACvC,kBAAMF,MAAMG,aAAa5E,IAAIoE,SAASpE;AACtC,kBAAM0E,MAAME,aAAa3E,IAAImE,SAASnE;AAEtC,gBAAIwE,MAAMA,MAAMC,MAAMA,MAAML,kBAAkB;AAC5C,qBAAO;YACT;UACF;QACF;AAEA,eAAO;MACT;MAEA;MAoCA;MAqBA;MAOA;MASA;MA8BA,qBAAqBhF,OAAoBE,OAAelD,QAAoB;AAC1E,cAAMwI,OAAOxI,OAAOkD,QAAQ,CAAA;AAC5B,cAAMuF,OAAOzI,OAAOkD,QAAQ,CAAA;AAE5B,YAAIwF,QAAQ1F,MAAMM,UAAU,EAAEN,MAAMK,SAAS;AAC7C,YAAIsF,QAAQ3F,MAAMS,UAAU,EAAET,MAAMQ,SAAS;AAE7C,YAAIkF,UAAU,KAAKC,UAAU,GAAG;AAC9B,cAAIzD,OAAO;AACX,cAAIC,OAAO;AAEX,cAAIqD,QAAQC,MAAM;AAChBvD,mBAAOuD,KAAK9E,IAAI6E,KAAK7E;AACrBwB,mBAAOsD,KAAK7E,IAAI4E,KAAK5E;UACvB,WAAW6E,MAAM;AACfvD,mBAAOuD,KAAK9E,IAAIX,MAAMW;AACtBwB,mBAAOsD,KAAK7E,IAAIZ,MAAMY;UACxB,WAAW4E,MAAM;AACftD,mBAAOlC,MAAMW,IAAI6E,KAAK7E;AACtBwB,mBAAOnC,MAAMY,IAAI4E,KAAK5E;UACxB,OAAO;AACLsB,mBAAO;AACPC,mBAAO;UACT;AAEA,gBAAMhC,YAAYyF,gBAAgB1D,MAAMC,IAAAA;AACxC,gBAAML,SAAS+D;AAEf7F,gBAAMK,QAAQ,CAACF,UAAUC,KAAK0B;AAC9B9B,gBAAMQ,QAAQ,CAACL,UAAUI,KAAKuB;AAC9B9B,gBAAMM,SAASH,UAAUC,KAAK0B;AAC9B9B,gBAAMS,SAASN,UAAUI,KAAKuB;AAC9B4D,kBAAQ1F,MAAMM;AACdqF,kBAAQ3F,MAAMS;QAChB;AAEA,YAAIiF,UAAU,KAAKC,UAAU,GAAG;AAC9B;QACF;AAEA,cAAMG,aAAaF,gBAAgBF,OAAOC,KAAAA;AAC1C,cAAMI,kBAAkBC,aAAaN,OAAOC,KAAAA,KAAUE;AAEtD,cAAMI,WAAWD,aAAahG,MAAMK,SAAS,GAAGL,MAAMQ,SAAS,CAAA,KAAMuF;AACrE/F,cAAMK,QAAQ,CAACyF,WAAW1F,KAAK6F;AAC/BjG,cAAMQ,QAAQ,CAACsF,WAAWvF,KAAK0F;AAE/B,cAAMC,YAAYF,aAAahG,MAAMM,UAAU,GAAGN,MAAMS,UAAU,CAAA,KAAMsF;AACxE/F,cAAMM,SAASwF,WAAW1F,KAAK8F;AAC/BlG,cAAMS,SAASqF,WAAWvF,KAAK2F;AAE/B,YAAIlG,MAAMmG,iBAAiB,OAAO;AAChC,eAAK,0BAA0BnG,KAAAA;QACjC;MACF;MAEA,0BAA0BA,OAAkB;AAC1C,YAAI,CAACA,MAAMoG,UAAU;AACnBpG,gBAAMmG,eAAe;AACrB;QACF;AAEA,cAAMD,YAAYF,aAAahG,MAAMM,UAAU,GAAGN,MAAMS,UAAU,CAAA;AAClE,cAAMwF,WAAWD,aAAahG,MAAMK,SAAS,GAAGL,MAAMQ,SAAS,CAAA;AAC/D,cAAM6F,eAAejF,KAAKkF,IAAIJ,WAAWD,QAAAA;AAEzC,YAAII,gBAAgB,GAAG;AACrB;QACF;AAEA,YAAIH,YAAY,GAAG;AACjB,gBAAMK,eAAeX,gBAAgB5F,MAAMM,UAAU,GAAGN,MAAMS,UAAU,CAAA;AACxET,gBAAMM,SAASiG,aAAanG,KAAKiG;AACjCrG,gBAAMS,SAAS8F,aAAahG,KAAK8F;QACnC,WAAWJ,WAAW,GAAG;AACvB,gBAAMO,cAAcZ,gBAAgB5F,MAAMK,SAAS,GAAGL,MAAMQ,SAAS,CAAA;AACrER,gBAAMM,SAAS,CAACkG,YAAYpG,KAAKiG;AACjCrG,gBAAMS,SAAS,CAAC+F,YAAYjG,KAAK8F;QACnC;AAEA,YAAIJ,WAAW,GAAG;AAChB,gBAAMO,cAAcZ,gBAAgB5F,MAAMK,SAAS,GAAGL,MAAMQ,SAAS,CAAA;AACrER,gBAAMK,QAAQmG,YAAYpG,KAAKiG;AAC/BrG,gBAAMQ,QAAQgG,YAAYjG,KAAK8F;QACjC,WAAWH,YAAY,GAAG;AACxB,gBAAMK,eAAeX,gBAAgB5F,MAAMM,UAAU,GAAGN,MAAMS,UAAU,CAAA;AACxET,gBAAMK,QAAQ,CAACkG,aAAanG,KAAKiG;AACjCrG,gBAAMQ,QAAQ,CAAC+F,aAAahG,KAAK8F;QACnC;MACF;MAEAlH,eAAoC;AAClC,eAAOsH,kBAAkB,KAAKtJ,QAAQ;MACxC;MAEAmB,qBAA0C;AACxC,eAAO,KAAKvB,eAAesE,WAAWqF,eAAe,KAAK,mBAAkB,IAAK,KAAK,cAAa;MACrG;MAEAhI,eAAuB;AACrB,eAAO,KAAK,cAAa;MAC3B;MAEAN,oBAA4B;AAC1B,eAAO,KAAK,mBAAkB;MAChC;MAqOA,uBAAuBpB,QAAsBkD,OAAe4E,UAAiB6B,OAAmB;AAC9F,YAAIC,kBAAkB9B;AACtB,cAAM+B,eAAe7J,OAAOkD,KAAAA;AAC5B,cAAM4G,gBAAgBD,eAAgB,KAAK,gBAAgBE,oBAAoBF,YAAAA,IAAiB;AAEhG,YAAIF,MAAMK,YAAY,KAAK,oBAAoBF,eAAe;AAC5D,gBAAMG,aAAa,KAAK,iBAAiBC,IAAIJ,aAAAA;AAC7C,cAAIG,YAAY;AACd,kBAAME,SAAS/F,KAAKgG,IAAItC,SAASnE,IAAIsG,WAAWtG,CAAC;AACjD,kBAAM0G,SAASjG,KAAKgG,IAAItC,SAASlE,IAAIqG,WAAWrG,CAAC;AACjDgG,8BAAkBO,SAASE,SAAS;cAAE1G,GAAGmE,SAASnE;cAAGC,GAAGqG,WAAWrG;YAAE,IAAI;cAAED,GAAGsG,WAAWtG;cAAGC,GAAGkE,SAASlE;YAAE;UAC5G;QACF;AAEA,cAAM0G,mBAAmB,KAAK,sBAAsBpH,OAAO0G,iBAAiB5J,MAAAA;AAC5E,cAAMuK,gBAA8BvK,OAAOwK,IAAI,CAACxH,OAAOyH,MAAAA;AACrD,cAAIA,MAAMvH,OAAO;AACf,mBAAOoH;UACT;AACA,iBAAO;YAAE,GAAGtH;UAAM;QACpB,CAAA;AAEA,cAAM0H,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,aAAKvK,SAAS0K;AACd,aAAK,YAAYA,kBAAkBf,KAAAA;AAEnC,YAAIG,eAAe;AACjB,gBAAMc,WAAWF,iBAAiBG,UAAU,CAAC7H,UAAUA,OAAO8H,OAAOhB,aAAAA;AACrE,cAAIc,aAAa,IAAI;AACnB,iBAAK,aAAaA;AAClB,iBAAK,eAAed;AACpB,iBAAK,mBAAmBc,UAAUjB,KAAAA;UACpC,OAAO;AACL,iBAAK,mBAAmBzG,OAAOyG,KAAAA;UACjC;QACF,OAAO;AACL,eAAK,mBAAmBzG,OAAOyG,KAAAA;QACjC;AAEA,aAAKoB,cAAa;MACpB;MAEA,wBAAwB/K,QAAsBkD,OAAe4E,UAAiB6B,OAAmB;AAC/F,cAAM3G,QAAQhD,OAAOkD,KAAAA;AACrB,YAAI,CAACF,OAAO;AACV;QACF;AAEA,cAAM8G,gBAAgB,KAAK,gBAAgBC,oBAAoB/G,KAAAA;AAC/D,cAAMG,YAAY,KAAK,cAAc,aAAa,OAAO;AAEzD,YAAIC,KAAK0E,SAASnE,IAAIX,MAAMW;AAC5B,cAAMJ,KAAKuE,SAASlE,IAAIZ,MAAMY;AAE9B,YAAIT,cAAc,MAAM;AACtBC,eAAKgB,KAAKqB,IAAI,GAAGrC,EAAAA;QACnB,OAAO;AACLA,eAAKgB,KAAKkF,IAAI,GAAGlG,EAAAA;QACnB;AAEA,YAAIgG,WAAWpG,MAAMoG,YAAY;AACjC,YAAIO,MAAMK,UAAU;AAClBZ,qBAAW;QACb;AAEA,cAAMmB,gBAAgB;aAAIvK;;AAC1B,cAAMgL,eAAe;UAAE,GAAGhI;QAAM;AAChCuH,sBAAcrH,KAAAA,IAAS8H;AAEvBA,qBAAa5B,WAAWA;AAExB,YAAIjG,cAAc,MAAM;AACtB6H,uBAAa3H,QAAQD;AACrB4H,uBAAaxH,QAAQD;QACvB,OAAO;AACLyH,uBAAa1H,SAASF;AACtB4H,uBAAavH,SAASF;QACxB;AAEA,cAAM0H,cAAc7B;AACpB,cAAMD,eAAe8B,eAAeD,aAAa7B,iBAAiB;AAElE,YAAI8B,eAAe9B,cAAc;AAC/B,gBAAM+B,gBAAgBlC,aAAa5F,IAAIG,EAAAA;AAEvC,cAAI2H,iBAAiBC,kBAAkB;AACrC,gBAAIhI,cAAc,MAAM;AACtB,qBAAO6H,aAAa3H;AACpB,qBAAO2H,aAAaxH;AACpB,kBAAIyH,aAAa;AACf,uBAAOD,aAAa1H;AACpB,uBAAO0H,aAAavH;cACtB;YACF,OAAO;AACL,qBAAOuH,aAAa1H;AACpB,qBAAO0H,aAAavH;AACpB,kBAAIwH,aAAa;AACf,uBAAOD,aAAa3H;AACpB,uBAAO2H,aAAaxH;cACtB;YACF;UACF,OAAO;AACL,kBAAMsF,aAAaF,gBAAgBxF,IAAIG,EAAAA;AAEvC,gBAAI0H,aAAa;AACf,kBAAI9H,cAAc,MAAM;AACtB,sBAAMiI,iBAAiBjC,eACnB+B,gBACAlC,aAAagC,aAAa1H,UAAU,GAAG0H,aAAavH,UAAU,CAAA,KAAMyH;AACxEF,6BAAa1H,SAAS,CAACwF,WAAW1F,KAAKgI;AACvCJ,6BAAavH,SAAS,CAACqF,WAAWvF,KAAK6H;cACzC,OAAO;AACL,sBAAMA,iBAAiBjC,eACnB+B,gBACAlC,aAAagC,aAAa3H,SAAS,GAAG2H,aAAaxH,SAAS,CAAA,KAAM0H;AACtEF,6BAAa3H,QAAQ,CAACyF,WAAW1F,KAAKgI;AACtCJ,6BAAaxH,QAAQ,CAACsF,WAAWvF,KAAK6H;cACxC;YACF,WAAWjC,cAAc;AACvB,kBAAIhG,cAAc,MAAM;AACtB,sBAAMqG,cAAcZ,gBAAgBoC,aAAa3H,SAAS,GAAG2H,aAAaxH,SAAS,CAAA;AACnF,sBAAM+F,eAAeX,gBAAgBoC,aAAa1H,UAAU,GAAG0H,aAAavH,UAAU,CAAA;AACtF,sBAAMyF,YAAYF,aAAagC,aAAa1H,UAAU,GAAG0H,aAAavH,UAAU,CAAA;AAChF,oBAAIyF,YAAY,GAAG;AACjB8B,+BAAa1H,SAASiG,aAAanG,KAAK8H;AACxCF,+BAAavH,SAAS8F,aAAahG,KAAK2H;gBAC1C;AACAF,6BAAa3H,QAAQmG,YAAYpG,KAAK8H;AACtCF,6BAAaxH,QAAQgG,YAAYjG,KAAK2H;cACxC,OAAO;AACL,sBAAM1B,cAAcZ,gBAAgBoC,aAAa3H,SAAS,GAAG2H,aAAaxH,SAAS,CAAA;AACnF,sBAAM+F,eAAeX,gBAAgBoC,aAAa1H,UAAU,GAAG0H,aAAavH,UAAU,CAAA;AACtF,sBAAMwF,WAAWD,aAAagC,aAAa3H,SAAS,GAAG2H,aAAaxH,SAAS,CAAA;AAC7E,oBAAIyF,WAAW,GAAG;AAChB+B,+BAAa3H,QAAQmG,YAAYpG,KAAK8H;AACtCF,+BAAaxH,QAAQgG,YAAYjG,KAAK2H;gBACxC;AACAF,6BAAa1H,SAASiG,aAAanG,KAAK8H;AACxCF,6BAAavH,SAAS8F,aAAahG,KAAK2H;cAC1C;YACF;AAEA,gBAAI/B,cAAc;AAChB,mBAAK,0BAA0B6B,YAAAA;YACjC;UACF;QACF;AAEA,cAAMN,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,aAAKvK,SAAS0K;AACd,aAAK,YAAYA,kBAAkBf,KAAAA;AAEnC,YAAIG,eAAe;AACjB,gBAAMc,WAAWF,iBAAiBG,UAAU,CAACQ,cAAcA,WAAWP,OAAOhB,aAAAA;AAC7E,cAAIc,aAAa,IAAI;AACnB,iBAAK,aAAaA;AAClB,iBAAK,eAAed;AACpB,iBAAK,mBAAmBc,UAAUjB,KAAAA;UACpC,OAAO;AACL,iBAAK,mBAAmBzG,OAAOyG,KAAAA;UACjC;QACF,OAAO;AACL,eAAK,mBAAmBzG,OAAOyG,KAAAA;QACjC;AAEA,aAAKoB,cAAa;MACpB;MAmCA,mBAAmBjD,UAAiB6B,OAAmB;AACrD,cAAMpF,UAAU,KAAK,uBAAuB,KAAK,0BAA0BuD,QAAAA;AAC3E,YAAI,CAACvD,SAAS;AACZ,iBAAO;QACT;AAEA,cAAM,EAAEmG,kBAAkBY,eAAe9G,cAAa,IAAKD;AAC3D,cAAMgH,kBAAkB/G,gBAAgBuF,oBAAoBvF,aAAAA,IAAiB;AAE7E,aAAKxE,SAAS0K;AACd,aAAK,YAAYA,kBAAkBf,KAAAA;AACnC,aAAKoB,cAAa;AAClB,aAAK,sBAAsB;AAE3B,eAAO;UACL7H,OAAOoI;UACPE,SAASD;QACX;MACF;MAEA,0BAA0BzD,UAAe;AACvC,YAAI,KAAK/H,eAAesE,WAAWC,QAAQ;AACzC,iBAAO;QACT;AAEA,cAAMtE,SAAS,KAAK,iBAAgB;AACpC,YAAI,CAACA,UAAUA,OAAO8E,UAAU2G,mBAAmB;AACjD,iBAAO;QACT;AAGA,cAAMC,UAAUC,WAAW7D,UAAU;UAAE8D,MAAM;UAAIC,MAAM;QAAE,CAAA;AACzD,YAAI,CAAC,KAAK,uBAAuBH,SAAS1L,MAAAA,GAAS;AACjD,iBAAO;QACT;AAEA,cAAM8L,cAAc9L,OAAO6K,UAAU,CAAC7H,UAAU0I,QAAQ/H,IAAIX,MAAMW,CAAC;AACnE,YAAImI,eAAe,GAAG;AACpB,iBAAO;QACT;AAEA,cAAMtD,OAAOxI,OAAO8L,cAAc,CAAA;AAClC,cAAMrD,OAAOzI,OAAO8L,WAAAA;AAEpB,YAAI,CAACtD,QAAQ,CAACC,MAAM;AAClB,iBAAO;QACT;AAEA,YAAIiD,QAAQ/H,IAAI6E,KAAK7E,IAAIwH,oBAAoB1C,KAAK9E,IAAI+H,QAAQ/H,IAAIwH,kBAAkB;AAClF,iBAAO;QACT;AAEA,YAAIZ;AACJ,YAAIgB,kBAAiC;AAErC,cAAMQ,cAAcnL,kBAAkB4H,MAAMC,MAAMiD,OAAAA;AAElD,YAAIK,aAAa;AACf,gBAAM,EAAEvD,MAAMwD,SAASC,UAAUxD,MAAMyD,QAAO,IAAKH;AACnDR,4BAAkBxB,oBAAoBkC,QAAAA;AACtC1B,0BAAgB;eACXvK,OAAOmM,MAAM,GAAGL,cAAc,CAAA;YACjCE;YACAC;YACAC;eACGlM,OAAOmM,MAAML,cAAc,CAAA;;QAElC,OAAO;AACL,gBAAMG,WAAwB;YAC5BtI,GAAG+H,QAAQ/H;YACXC,GAAG8H,QAAQ9H;YACXP,OAAO;YACPG,OAAO;YACPF,QAAQ;YACRG,QAAQ;YACR2F,UAAU;YACVD,cAAc;UAChB;AACAoC,4BAAkBxB,oBAAoBkC,QAAAA;AACtC1B,0BAAgB;eAAIvK,OAAOmM,MAAM,GAAGL,WAAAA;YAAcG;eAAajM,OAAOmM,MAAML,WAAAA;;QAC9E;AAEA,cAAMpB,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,cAAM6B,kBACJb,oBAAoB,OAAOb,iBAAiBG,UAAU,CAAC7H,UAAUA,OAAO8H,OAAOS,eAAAA,IAAmB;AAEpG,cAAMD,gBAAgBc,oBAAoB,KAAKA,kBAAkBN;AACjE,cAAMtH,gBAAgBkG,iBAAiBY,aAAAA;AAEvC,YAAI,CAAC9G,eAAe;AAClB,iBAAO;QACT;AAEA,eAAO;UACL6H,MAAMC,kBAAkB5B,gBAAAA;UACxBA;UACAY;UACA9G;QACF;MACF;;;;;AA3wCK,cAAA,GAAA,IAAA,GAAA,KAIIzE,4BAAUwM,YAAA,IAAA,GAAVxM,iBAAAA,IAAAA,IAAAA,KAGAC,uBAAAA,aAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,eAAAA,IAAAA,GAAAA,KAGAC,2BAAAA,iBAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,eAAAA,MAAmB,CAAA,GAAA,KAGnBC,mCAAAA,yBAAAA,MAAoC,IAAA,GAAA,KAGpCC,yBAAAA,eAAAA,MAAmB,CAAA,GAAA,KAGnBC,sBAAAA,YAAAA,MAAgB,CAAA,GAAA,KAGhBC,2BAAAA,iBAAAA,IAAAA,GAAAA,KAET,cAAc,OAAA,KACd,aAA4B,MAAA,KAC5B,YAAuD,MAAA,KACvD,cAA4B,MAAA,KAC5B,sBAAkD,MAAA,KAClD,mBAAoD,MAAA,KACpD,eAA8B,MAAA,KAC9B,eACE,MAAA,KAEF,kBAAkB,MAAA;AAChB,gBAAMiM,OAAO,KAAKC,YAAW;AAC7B,cAAID,gBAAgBE,cAAcF,KAAKG,gBAAgB7M,aAAa;AAClE,mBAAO0M,KAAKG;UACd;AACA,iBAAO;QACT,GAAA,KAEA,qBAAqB,MAAA;AACnB,gBAAM3M,SAAS,KAAK,sBAAqB;AAEzC,cAAI,CAACA,QAAQ;AACX4M,oBAAQC,KAAK,8CAA8C,KAAK7M,MAAM;AACtE,mBAAO,CAAA;UACT;AAEA,cAAI;AACF,kBAAM8M,cAAc,KAAK,aAAa;cAAEnJ,GAAG;cAAGC,GAAG;YAAE,CAAA;AACnD,kBAAMmJ,YAAY,KAAK,aAAa;cAAEpJ,GAAG;cAAGC,GAAG;YAAE,CAAA;AACjD,kBAAMoJ,aAAa,KAAK,aAAahN,OAAOiN,EAAE;AAC9C,kBAAMC,aAAa,KAAK,aAAalN,OAAOmN,EAAE;AAE9C,kBAAMpK,WAAgC,CAAA;AAEtC,kBAAMqK,gBAAgB,KAAK,kBAAkBN,aAAaE,UAAAA;AAC1D,kBAAMK,gBAAgB,KAAK,kBAAkBN,WAAWG,UAAAA;AAExDnK,qBAASmB,KAAKhC;;cAEN8K,WAAWrJ,CAAC;cACZqJ,WAAWpJ,CAAC;aACbO,eAAAA;;;SAGJ;AACHpB,qBAASmB,KAAKhC;;cAENgL,WAAWvJ,CAAC;cACZuJ,WAAWtJ,CAAC;aACbO,eAAAA;;;SAGJ;AAEH,gBAAIiJ,eAAe;AACjBrK,uBAASmB,KAAKhC;iCACW,KAAK,eAAe,KAAK,KAAK,cAAc,UAAU,aAAa,EAAA;eACrFkL,aAAAA;;;WAGJ;YACL;AAEA,gBAAIC,eAAe;AACjBtK,uBAASmB,KAAKhC;iCACW,KAAK,eAAe,KAAK,KAAK,cAAc,UAAU,aAAa,EAAA;eACrFmL,aAAAA;;;WAGJ;YACL;AAEAtK,qBAASmB,KAAKhC,8DAA6C4K,YAAYnJ,CAAC,SAASmJ,YAAYlJ,CAAC,MAAM;AACpGb,qBAASmB,KAAKhC,8DAA6C6K,UAAUpJ,CAAC,SAASoJ,UAAUnJ,CAAC,MAAM;AAEhG,mBAAOb;UACT,SAASuK,OAAO;AACdV,oBAAQU,MAAM,0CAA0CA,KAAAA;AACxD,mBAAO,CAAA;UACT;QACF,GAAA,KAEA,eAAe,CAACC,MAAAA;AACd,iBAAO;YACL5J,GAAG4J,EAAE5J,IAAI/B;YACTgC,IAAI,IAAI2J,EAAE3J,KAAK/B;UACjB;QACF,GAAA,KAEA,gBAAgB,MAAA;AACd,gBAAM7B,SAAS,KAAK,iBAAgB;AAEpC,cAAI,CAACA,QAAQ;AACX,mBAAO,CAAA;UACT;AAEA,cAAI;AACF,kBAAM+C,WAAgC,CAAA;AACtC,kBAAMyK,eAAe,KAAKpN;AAE1BJ,mBAAOyN,QAAQ,CAACzK,OAAOE,UAAAA;AACrB,kBAAI,CAACF,OAAO;AACV;cACF;AAEA,oBAAM0K,iBAAiBF,iBAAiBtK;AACxC,oBAAMyK,kBAAkB,KAAK,eAAe,KAAK,eAAezK;AAEhE,kBAAI,CAACwK,kBAAkB,CAACC,iBAAiB;AACvC;cACF;AAEA,oBAAM1K,YAAY,KAAK,aAAaD,KAAAA;AAEpC,kBAAIE,QAAQ,MAAMF,MAAMK,UAAUqB,UAAa1B,MAAMQ,UAAUkB,SAAY;AACzE,qBAAK,oBAAoB3B,UAAUC,OAAOC,WAAWC,OAAO,IAAA;cAC9D;AAEA,kBAAIA,QAAQlD,OAAO8E,SAAS,MAAM9B,MAAMM,WAAWoB,UAAa1B,MAAMS,WAAWiB,SAAY;AAC3F,qBAAK,oBAAoB3B,UAAUC,OAAOC,WAAWC,OAAO,KAAA;cAC9D;YACF,CAAA;AAEAlD,mBAAOyN,QAAQ,CAACzK,OAAOE,UAAAA;AACrB,kBAAI,CAACF,OAAO;AACV;cACF;AAEA,oBAAM0K,iBAAiBF,iBAAiBtK;AACxC,oBAAM0K,gBAAiB,KAAK,cAAc,WAAW,KAAK,eAAe1K,SAAUwK;AAEnF,oBAAMzK,YAAY,KAAK,aAAaD,KAAAA;AAEpCD,uBAASmB,KAAKhC;;gBAENe,UAAUU,CAAC;gBACXV,UAAUW,CAAC;eACZO,eAAAA;wBACSjB,KAAAA;;WAEb;AACHH,uBAASmB,KAAKhC;gCACU0L,gBAAgB,aAAa,EAAA;gBAC7C3K,UAAUU,CAAC;gBACXV,UAAUW,CAAC;wBACHV,KAAAA;;0BAEEA,QAAQ,CAAA,KAAMkB,KAAK9D,MAAM0C,MAAMW,IAAI,GAAA,CAAA,MAAUS,KAAK9D,MAAM0C,MAAMY,IAAI,GAAA,CAAA;WACjF;YACL,CAAA;AAEA,mBAAOb;UACT,SAASuK,OAAO;AACdV,oBAAQU,MAAM,kCAAkCA,KAAAA;AAChD,mBAAO,CAAA;UACT;QACF,GAAA,KA2CA,gBAAgB,MAAA;AACd,cAAI;AACF,gBAAI,KAAKvN,eAAesE,WAAWqF,cAAc;AAC/C,oBAAM1J,UAAS,KAAK,sBAAqB;AAEzC,kBAAI,CAACA,SAAQ;AACX4M,wBAAQC,KAAK,gCAAgC,KAAK7M,MAAM;AACxD,uBAAO;cACT;AAEA,qBAAO6N,gBAAgB7N,OAAAA;YACzB;AAEA,kBAAMA,SAAS,KAAK,iBAAgB;AAEpC,gBAAI,CAACA,UAAUA,OAAO8E,SAAS,GAAG;AAChC,qBAAO;YACT;AAEA,gBAAI,KAAKzE,WAAW,GAAG;AACrB,oBAAMyN,eAAeC,uBAAuB/N,QAAQ;gBAClDK,UAAU,KAAKA;gBACfC,OAAO,KAAKA;cACd,CAAA;AACA,qBAAOgM,kBAAkBwB,YAAAA;YAC3B;AAEA,mBAAOxB,kBAAkBtM,MAAAA;UAC3B,SAASsN,OAAO;AACdV,oBAAQU,MAAM,gCAAgCA,KAAAA;AAC9C,mBAAO;UACT;QACF,GAAA,KAEA,qBAAqB,MAAA;AACnB,cAAI,KAAK,aAAa;AACpB,mBAAO;UACT;AAEA,cAAI;AACF,gBAAI,KAAKvN,eAAesE,WAAWqF,cAAc;AAC/C,oBAAMsE,aAAa,KAAK;AACxB,kBAAI,CAACA,YAAY;AACf,uBAAO;cACT;AAEA,oBAAMhO,SAAS,KAAK,sBAAqB;AACzC,kBAAI,CAACA,QAAQ;AACX,uBAAO;cACT;AAEA,qBAAO6N,gBAAgB;gBACrBZ,IAAIe;gBACJb,IAAInN,OAAOmN;cACb,CAAA;YACF;AAEA,gBAAI,KAAKpN,eAAesE,WAAWC,QAAQ;AACzC,qBAAO,KAAK,qBAAqB+H,QAAQ;YAC3C;AAEA,mBAAO;UACT,SAASiB,OAAO;AACdV,oBAAQU,MAAM,sCAAsCA,KAAAA;AACpD,mBAAO;UACT;QACF,GAAA,KAqHA,wBAAwB,MAAA;AACtB,cAAIW,MAAMC,QAAQ,KAAKlO,MAAM,GAAG;AAC9B,mBAAO;UACT;AAEA,iBAAO,KAAKA,UAAU;QACxB,GAAA,KAEA,mBAAmB,MAAA;AACjB,cAAI,CAACiO,MAAMC,QAAQ,KAAKlO,MAAM,GAAG;AAC/B,mBAAO;UACT;AAEA,eAAK,sBAAsB,KAAKA,MAAM;AACtC,iBAAO,KAAKA;QACd,GAAA,KAEA,wBAAwB,CAACA,WAAAA;AACvB,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,qBAAWgD,SAAShD,QAAQ;AAC1B,gBAAI,CAACgD,OAAO;AACV;YACF;AACA+G,gCAAoB/G,KAAAA;UACtB;QACF,GAAA,KAEA,6BAA6B,CAAChD,WAAAA;AAC5B,cAAI,CAACA,QAAQ;AACX,mBAAO;UACT;AAEA,gBAAMwK,MAAM,oBAAI2D,IAAAA;AAEhB,qBAAWnL,SAAShD,QAAQ;AAC1B,gBAAI,CAACgD,OAAO;AACV;YACF;AACA,kBAAM8H,KAAKf,oBAAoB/G,KAAAA;AAC/BwH,gBAAI4D,IAAItD,IAAIuD,iBAAiBrL,KAAAA,CAAAA;UAC/B;AAEA,iBAAOwH;QACT,GAAA,KAgGA,oBAAoB,CAACb,OAAqB2E,YAAAA;AACxC,gBAAM/N,aAAa,KAAKA;AAExB,cAAI,CAACA,YAAY;AACf,mBAAO;cAAEoD,GAAG;cAAGC,GAAG;YAAE;UACtB;AAEA,gBAAM2K,OAAOhO,WAAWiO,sBAAqB;AAC7C,gBAAMC,OAAO9E,MAAM+E,UAAUH,KAAKI;AAClC,gBAAMC,OAAOjF,MAAMkF,UAAUN,KAAKO;AAElC,cAAInL,IAAI8K,OAAOF,KAAKQ;AACpB,cAAInL,IAAI,IAAIgL,OAAOL,KAAKS;AAExB,gBAAMC,WAAWX,SAASW,YAAY;AAEtC,gBAAMC,aACJ,CAACD,YACD,KAAK/O,cACL,EAAE,KAAK,gBAAgB,KAAK,cAAc,cAAc,KAAK,cAAc;AAE7E,cAAIgP,YAAY;AACd,kBAAMC,SAASvN,YAAY,KAAKzB;AAChC,kBAAMiP,SAASvN,aAAa,KAAK1B;AACjCwD,gBAAIS,KAAK9D,MAAMqD,IAAIwL,MAAAA,IAAUA;AAC7BvL,gBAAIQ,KAAK9D,MAAMsD,IAAIwL,MAAAA,IAAUA;UAC/B;AAEA,gBAAMC,eACJ,KAAKtP,eAAesE,WAAWqF,eAC3B;YAAEkC,MAAM0D;YAAsBzD,MAAM0D;UAAqB,IACzD7K;AAEN,iBAAOiH,WAAW;YAAEhI;YAAGC;UAAE,GAAGyL,YAAAA;QAC9B,GAAA,KAEA,wBAAwB,CAACnM,OAAe4E,UAAiB9H,WAAAA;AACvD,cAAI2D,IAAImE,SAASnE;AAEjB,cAAIT,UAAU,GAAG;AACfS,gBAAI;UACN,WAAWT,UAAUlD,OAAO8E,SAAS,GAAG;AACtCnB,gBAAI;UACN,OAAO;AACLA,gBAAIS,KAAKqB,IAAIrB,KAAKkF,IAAI3F,GAAGwH,gBAAAA,GAAmB,IAAIA,gBAAAA;UAClD;AAEA,gBAAMO,UAAUC,WAAW;YAAEhI;YAAGC,GAAGkE,SAASlE;UAAE,GAAG;YAAEgI,MAAM;YAAIC,MAAM;UAAE,CAAA;AACrE,gBAAM2D,cAAcxP,OAAOkD,KAAAA;AAE3B,iBAAO;YACL,GAAGsM;YACH7L,GAAG+H,QAAQ/H;YACXC,GAAG8H,QAAQ9H;UACb;QACF,GAAA,KAEA,cAAc,CAAC6L,OAAyC9F,UAAAA;AACtD,gBAAM+F,SAAS,KAAK,gBAAe;AACnC,gBAAMC,SAA+D;YAAEF;YAAO9F;UAAM;AAEpFiG,+BAAqBF,QAAQ,iBAAiBC,MAAAA;QAChD,GAAA,KAEA,qBAAqB,CAACzM,OAAsByG,UAAAA;AAC1C,cAAI,KAAK5J,eAAesE,WAAWC,QAAQ;AACzC;UACF;AACA,gBAAMoL,SAAS,KAAK,gBAAe;AACnC,gBAAMC,SAA4C;YAAEF,OAAOvM;YAAOyG;UAAM;AACxEiG,+BAAqBF,QAAQ,sBAAsBC,MAAAA;QACrD,GAAA,KAEA,6BAA6B,CAACzM,OAAeyG,UAAAA;AAC3C,gBAAM3J,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,UAAUkD,QAAQ,KAAKA,SAASlD,OAAO8E,QAAQ;AAClD;UACF;AAEA,gBAAM9B,QAAQhD,OAAOkD,KAAAA;AACrB,cAAI,CAACF,OAAO;AACV;UACF;AAEA,gBAAMuH,gBAAgB;eAAIvK;;AAC1B,gBAAMgL,eAAe;YAAE,GAAGhI;UAAM;AAChCuH,wBAAcrH,KAAAA,IAAS8H;AAEvB,gBAAM6E,kBAAkB,CAAC7E,aAAa5B;AACtC4B,uBAAa5B,WAAWyG;AACxB7E,uBAAa7B,eAAexG,QAAQkN,eAAAA;AAEpC,cAAIA,iBAAiB;AACnB,iBAAK,qBAAqB7E,cAAc9H,OAAOlD,MAAAA;UACjD;AAEA,gBAAM0K,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,eAAKvK,SAAS0K;AACd,eAAK,YAAYA,kBAAkBf,KAAAA;AACnC,eAAK,mBAAmBzG,OAAOyG,KAAAA;AAC/B,eAAKoB,cAAa;QACpB,GAAA,KA6GSjJ,oBAAoB,CAAC6H,UAAAA;AAC5BA,gBAAMmG,eAAc;AACpB,cAAIC,eAAe,KAAKhQ,eAAesE,WAAWC,SAAS,KAAK,iBAAgB,IAAK;AACrF,eAAK,mBAAmB,KAAK,2BAA2ByL,YAAAA;AACxD,eAAK,eAAe;AACpB,eAAK,eAAe;AAEpB,gBAAML,SAAS/F,MAAM+F;AAErB,cAAI,EAAEA,kBAAkBM,aAAa;AACnC;UACF;AAEA,gBAAMlM,OAAO4L,OAAOO,aAAa,WAAA;AACjC,gBAAMC,iBAAiBR,OAAOO,aAAa,YAAA;AAE3C,cAAIC,mBAAmB,MAAM;AAC3B,kBAAMhN,QAAQL,OAAOsN,SAASD,gBAAgB,EAAA;AAC9C,gBAAIrN,OAAOuN,MAAMlN,KAAAA,GAAQ;AACvB;YACF;AAEA,gBAAI,KAAKnD,eAAesE,WAAWC,QAAQ;AACzC,kBAAIR,SAAS,cAAcA,SAAS,aAAa;AAC/C,sBAAMd,QAAQ+M,eAAe7M,KAAAA;AAC7B,oBAAIF,OAAO;AACT,uBAAK,eAAe+G,oBAAoB/G,KAAAA;gBAC1C;AACA,qBAAKzC,YAAY8P,kBAAkB1G,MAAM2G,SAAS;AAClD,qBAAK,cAAc;AACnB,qBAAK,YAAYxM;AACjB,qBAAK,aAAaZ;AAClB,qBAAK,eAAe;AACpB,qBAAK,cAAc;AACnB,qBAAK,mBAAmBA,OAAOyG,KAAAA;AAC/B,qBAAK5H,kBAAkB4H,KAAAA;AACvB,qBAAKoB,cAAa;AAClB;cACF;AAEA,kBAAIjH,SAAS,SAAS;AACpB,oBAAI6F,MAAMgG,WAAW,GAAG;AACtB,uBAAK,2BAA2BzM,OAAOyG,KAAAA;AACvC;gBACF;AAEA,sBAAM3G,QAAQ+M,eAAe7M,KAAAA;AAC7B,oBAAIF,OAAO;AACT,uBAAK,eAAe+G,oBAAoB/G,KAAAA;gBAC1C;AACA,qBAAK,mBAAmBE,OAAOyG,KAAAA;AAC/B,qBAAKpJ,YAAY8P,kBAAkB1G,MAAM2G,SAAS;AAClD,qBAAK,cAAc;AACnB,qBAAK,YAAY;AACjB,qBAAK,aAAapN;AAClB,qBAAK,eAAe;kBAClBqN,MAAM;kBACNrN;kBACAsN,QAAQ7G,MAAM+E;kBACd+B,QAAQ9G,MAAMkF;gBAChB;AACA,qBAAK,cAAc;AACnB,qBAAK9D,cAAa;AAClB;cACF;YACF;AAEA,gBAAI,KAAKhL,eAAesE,WAAWqF,gBAAgB5F,SAAS,SAAS;AACnE,mBAAKvD,YAAY8P,kBAAkB1G,MAAM2G,SAAS;AAClD,mBAAK,cAAc;AACnB,mBAAK,YAAY;AACjB,mBAAK,aAAapN;AAClB,mBAAK,cAAc;AACnB,mBAAK6H,cAAa;AAClB;YACF;UACF;AAEA,cAAImF,mBAAmB,MAAM;AAC3B,gBAAI,KAAKnQ,eAAesE,WAAWC,QAAQ;AACzC,oBAAMoM,eAAe,KAAK,mBAAmB,KAAK,kBAAkB/G,KAAAA,GAAQA,KAAAA;AAE5E,kBAAI+G,cAAc;AAChBX,+BAAe,KAAK,iBAAgB;AACpC,qBAAK,mBAAmB,KAAK,2BAA2BA,YAAAA;AACxD,qBAAK,eAAeW,aAAalF;AACjC,qBAAKjL,YAAY8P,kBAAkB1G,MAAM2G,SAAS;AAClD,qBAAK,cAAc;AACnB,qBAAK,YAAY;AACjB,qBAAK,aAAaI,aAAaxN;AAC/B,qBAAK,eAAe;AACpB,qBAAK,cAAc;AACnB,qBAAK,mBAAmBwN,aAAaxN,OAAOyG,KAAAA;AAC5C,qBAAKoB,cAAa;AAClB;cACF,OAAO;AACL,qBAAK,mBAAmB,MAAMpB,KAAAA;cAChC;YACF;AAEA,gBAAI,KAAK5J,eAAesE,WAAWqF,cAAc;AAC/C,mBAAK,cAAc,KAAK,kBAAkBC,KAAAA;AAC1C,mBAAKpJ,YAAY8P,kBAAkB1G,MAAM2G,SAAS;AAClD,mBAAK,cAAc;AACnB,mBAAK,YAAY;AACjB,mBAAK,aAAa;AAClB,mBAAK,eAAe;AACpB,mBAAKvO,kBAAkB4H,KAAAA;AACvB,mBAAKoB,cAAa;AAClB;YACF;UACF;QACF,GAAA,KAEShJ,oBAAoB,CAAC4H,UAAAA;AAC5B,cAAI,CAAC,KAAKpJ,YAAY;AACpB;UACF;AAEA,gBAAMoQ,qBAAqB,CAAC,KAAK,eAAe,KAAK,iBAAiB,QAAQ,KAAK,aAAaJ,SAAS;AACzG,cAAIzI,WAAW,KAAK,kBAAkB6B,OAAO;YAAEsF,UAAU0B;UAAmB,CAAA;AAE5E,cAAI,KAAK,gBAAgB,CAAC,KAAK,aAAa;AAC1C,kBAAMxG,SAASR,MAAM+E,UAAU,KAAK,aAAa8B;AACjD,kBAAMnG,SAASV,MAAMkF,UAAU,KAAK,aAAa4B;AACjD,kBAAM9I,kBAAkBwC,SAASA,SAASE,SAASA;AAEnD,gBAAI1C,mBAAmBiJ,qCAAqC;AAC1D,mBAAK,cAAc;AACnB,mBAAK,eAAe;AAEpB,kBAAID,oBAAoB;AACtB7I,2BAAW,KAAK,kBAAkB6B,KAAAA;cACpC;YACF,OAAO;AACL;YACF;UACF;AAEA,cAAI,KAAK,eAAe,KAAK,eAAe,MAAM;AAChDA,kBAAMmG,eAAc;AACpB,iBAAK,sBAAsB;AAE3B,gBAAI,KAAK/P,eAAesE,WAAWC,QAAQ;AACzC,oBAAMtE,SAAS,KAAK,iBAAgB;AACpC,kBAAI,CAACA,UAAU,KAAK,cAAcA,OAAO8E,QAAQ;AAC/C;cACF;AAEA,kBAAI,KAAK,cAAc,SAAS;AAC9B,qBAAK,uBAAuB9E,QAAQ,KAAK,YAAY8H,UAAU6B,KAAAA;AAC/D;cACF;AAEA,kBAAI,KAAK,cAAc,cAAc,KAAK,cAAc,aAAa;AACnE,qBAAK,wBAAwB3J,QAAQ,KAAK,YAAY8H,UAAU6B,KAAAA;AAChE;cACF;YACF;AAEA,gBAAI,KAAK5J,eAAesE,WAAWqF,cAAc;AAC/C,oBAAM1J,SAAS,KAAK,sBAAqB;AACzC,kBAAI,CAACA,QAAQ;AACX;cACF;AAEA,oBAAMuK,gBAAmC;gBAAE,GAAGvK;cAAO;AACrD,kBAAI6Q,mBAAmB/I;AAEvB,kBAAI6B,MAAMK,UAAU;AAClB,sBAAM8G,YAAY,KAAK,eAAe,IAAI9Q,OAAOiN,KAAKjN,OAAOmN;AAE7D,oBAAI2D,WAAW;AACb,wBAAM3G,SAAS/F,KAAKgG,IAAItC,SAASnE,IAAImN,UAAUnN,CAAC;AAChD,wBAAM0G,SAASjG,KAAKgG,IAAItC,SAASlE,IAAIkN,UAAUlN,CAAC;AAEhDiN,qCAAmB1G,SAASE,SAAS;oBAAE1G,GAAGmE,SAASnE;oBAAGC,GAAGkN,UAAUlN;kBAAE,IAAI;oBAAED,GAAGmN,UAAUnN;oBAAGC,GAAGkE,SAASlE;kBAAE;gBAC3G;cACF;AAEA,oBAAMmN,kBAAkBpF,WAAWkF,kBAAkB;gBACnDjF,MAAM0D;gBACNzD,MAAM0D;cACR,CAAA;AAEA,kBAAI,KAAK,eAAe,GAAG;AACzBhF,8BAAc0C,KAAK8D;cACrB,WAAW,KAAK,eAAe,GAAG;AAChCxG,8BAAc4C,KAAK4D;cACrB,OAAO;AACL;cACF;AAEA,mBAAK/Q,SAASuK;AACd,mBAAK,YAAYA,eAAeZ,KAAAA;AAChC,mBAAKoB,cAAa;AAClB;YACF;AAEA;UACF;AAEA,cAAI,KAAKhL,eAAesE,WAAWC,QAAQ;AACzC,kBAAMtE,SAAS,KAAK,iBAAgB;AAEpC,gBAAIA,UAAU,KAAK,6BAA6B8H,UAAU9H,MAAAA,GAAS;AACjE,mBAAK,sBAAsB;AAC3B,mBAAK,cAAc;AACnB,mBAAK+K,cAAa;AAClB;YACF;AAEA,kBAAMxG,UAAU,KAAK,0BAA0BuD,QAAAA;AAC/C,iBAAK,sBAAsBvD;AAC3B,gBAAI,CAACA,SAAS;AACZ,mBAAK,cAAc;AACnB,mBAAKwG,cAAa;AAClB;YACF;UACF,OAAO;AACL,iBAAK,sBAAsB;UAC7B;AAEA,eAAK,cAAcjD;AACnB,eAAKiD,cAAa;QACpB,GAAA,KA0KS/I,kBAAkB,CAAC2H,UAAAA;AAC1B,gBAAMqH,gBAAgB,KAAK;AAE3B,cAAI,KAAKzQ,YAAY0Q,kBAAkBtH,MAAM2G,SAAS,GAAG;AACvD,iBAAK/P,WAAW2Q,sBAAsBvH,MAAM2G,SAAS;UACvD;AAEA,eAAK,cAAc;AACnB,eAAK,aAAa;AAClB,eAAK,YAAY;AACjB,eAAK,mBAAmB;AACxB,eAAK,eAAe;AACpB,eAAK,eAAe;AACpB,eAAK,sBAAsB;AAE3B,cAAIU,kBAAkB,QAAQ,KAAKjR,eAAesE,WAAWC,QAAQ;AACnE,iBAAK,mBAAmB0M,eAAerH,KAAAA;UACzC;AACA,eAAKoB,cAAa;QACpB,GAAA,KAES9I,qBAAqB,CAAC0H,UAAAA;AAC7B,cAAI,KAAK,aAAa;AACpB,iBAAK3H,gBAAgB2H,KAAAA;UACvB;AAEA,eAAK,eAAe;AACpB,eAAK,cAAc;AACnB,eAAK,eAAe;AACpB,eAAK,sBAAsB;AAC3B,eAAKoB,cAAa;QACpB;;IAsGF;AAEA,IAAMtK,OAAO,CAAC0Q,GAAWC,GAAW3J,MAAsB0J,KAAKC,IAAID,KAAK1J;AAExE,IAAM/G,YAAY,CAACuM,IAAWE,IAAW1F,MAAAA;AACvC,aAAO;QACL9D,GAAGlD,KAAKwM,GAAGtJ,GAAGwJ,GAAGxJ,GAAG8D,CAAAA;QACpB7D,GAAGnD,KAAKwM,GAAGrJ,GAAGuJ,GAAGvJ,GAAG6D,CAAAA;MACtB;IACF;AAGA,IAAM9G,YAAY,CAACgD,GAAW0N,IAAWhK,KAAYC,KAAYgK,OAAAA;AAC/D,UAAIC,OAAO;AACX,UAAIC,OAAO;AACX,UAAI/J,IAAI;AACR,YAAMgK,YAAY;AAClB,YAAMC,gBAAgB;AAGtB,eAASjH,IAAI,GAAGA,IAAIiH,eAAejH,KAAK;AACtC,cAAMkH,MAAM,IAAIlK,MAAM,IAAI4J,GAAG1N,IAAI,KAAK,IAAI8D,MAAM,IAAIA,IAAIJ,IAAI1D,IAAI,KAAK,IAAI8D,KAAKA,KAAK,IAAIH,IAAI3D,IAAI8D,KAAK,IAAI6J,GAAG3N;AAE3G,YAAIS,KAAKgG,IAAIuH,KAAKhO,CAAAA,IAAK8N,WAAW;AAChC,iBAAOhK;QACT;AAEA,YAAIkK,KAAKhO,GAAG;AACV4N,iBAAO9J;QACT,OAAO;AACL+J,iBAAO/J;QACT;AACAA,aAAK8J,OAAOC,QAAQ;MACtB;AAEA,aAAO/J;IACT;AAEA,IAAM7G,oBAAoB,CACxB4H,MACAC,MACAX,aAAAA;AAEA,YAAMT,MAAM;QACV1D,GAAG6E,KAAK7E,KAAK6E,KAAKlF,UAAU;QAC5BM,GAAG4E,KAAK5E,KAAK4E,KAAK/E,UAAU;MAC9B;AACA,YAAM6D,MAAM;QACV3D,GAAG8E,KAAK9E,KAAK8E,KAAKpF,SAAS;QAC3BO,GAAG6E,KAAK7E,KAAK6E,KAAKjF,SAAS;MAC7B;AAEA,YAAMoO,YAAYpJ,KAAKlF,UAAUkF,KAAK/E,UAAUgF,KAAKpF,SAASoF,KAAKjF;AAEnE,UAAI,CAACoO,WAAW;AACd,eAAO;MACT;AAGA,YAAMnK,IAAI9G,UAAUmH,SAASnE,GAAG6E,MAAMnB,KAAKC,KAAKmB,IAAAA;AAEhD,YAAMoJ,MAAMnR,UAAU8H,MAAMnB,KAAKI,CAAAA;AACjC,YAAMqK,MAAMpR,UAAU2G,KAAKC,KAAKG,CAAAA;AAChC,YAAMsK,MAAMrR,UAAU4G,KAAKmB,MAAMhB,CAAAA;AAEjC,YAAMuK,OAAOtR,UAAUmR,KAAKC,KAAKrK,CAAAA;AACjC,YAAMwK,OAAOvR,UAAUoR,KAAKC,KAAKtK,CAAAA;AAEjC,YAAMyK,QAAQxR,UAAUsR,MAAMC,MAAMxK,CAAAA;AAEpC,YAAMwE,WAAwB;QAC5BtI,GAAGuO,MAAMvO;QACTC,GAAGsO,MAAMtO;QACTP,OAAO2O,KAAKrO,IAAIuO,MAAMvO;QACtBH,OAAOwO,KAAKpO,IAAIsO,MAAMtO;QACtBN,QAAQ2O,KAAKtO,IAAIuO,MAAMvO;QACvBF,QAAQwO,KAAKrO,IAAIsO,MAAMtO;QACvBwF,UAAU;QACVD,cAAcX,KAAKW,iBAAiB,SAASV,KAAKU;MACpD;AACAY,0BAAoBkC,QAAAA;AAEpB,YAAMD,UAAuB;QAC3B,GAAGxD;QACHlF,QAAQuO,IAAIlO,IAAI6E,KAAK7E;QACrBF,QAAQoO,IAAIjO,IAAI4E,KAAK5E;MACvB;AAEA,YAAMsI,UAAuB;QAC3B,GAAGzD;QACHpF,OAAO0O,IAAIpO,IAAI8E,KAAK9E;QACpBH,OAAOuO,IAAInO,IAAI6E,KAAK7E;MACtB;AAEA,aAAO;QACL4E,MAAMwD;QACNC;QACAxD,MAAMyD;MACR;IACF;AAEA,IAAMrL,+BAA+B,CAAC4G,GAAW4J,IAAWhK,KAAYC,KAAYgK,OAAAA;AAClF,YAAMO,MAAMnR,UAAU2Q,IAAIhK,KAAKI,CAAAA;AAC/B,YAAMqK,MAAMpR,UAAU2G,KAAKC,KAAKG,CAAAA;AAChC,YAAMsK,MAAMrR,UAAU4G,KAAKgK,IAAI7J,CAAAA;AAE/B,YAAMuK,OAAOtR,UAAUmR,KAAKC,KAAKrK,CAAAA;AACjC,YAAMwK,OAAOvR,UAAUoR,KAAKC,KAAKtK,CAAAA;AAEjC,aAAO/G,UAAUsR,MAAMC,MAAMxK,CAAAA;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC58CA0K,uCAgGoCC,eAAAA,QAAAA,QAAAA,QAIzBC,mBAGAC,eAGAC,2BAAAA,8BAVEC;;;;AAhGb,IAAAL,mBAAqB;AAErB;AACA;AACA;AACA;AAEA;AACA;AACA;aAiBCM,UAAU;MACTC,KAAK;MACLC,QAAQC;MACRC,WAAAA;AACE,YAAI,KAAKR,eAAeS,WAAWC,UAAU,CAACC,MAAMC,QAAQ,KAAKX,MAAM,GAAG;AACxE,iBAAO;QACT;AAEA,cAAMY,eAAe,KAAKX;AAC1B,YAAIW,iBAAiB,MAAM;AACzB,iBAAO;QACT;AAEA,cAAMZ,SAAS,KAAKA;AACpB,cAAMa,gBAAgBb,OAAOY,YAAAA;AAC7B,YAAI,CAACC,eAAe;AAClB,iBAAO;QACT;AAEA,cAAMC,eAAeF,eAAe,KAAKA,eAAeZ,OAAOe,SAAS;AACxE,YAAI,CAACD,cAAc;AACjB,iBAAO;QACT;AAEA,cAAME,cAAcH,cAAcI,UAAUC,UAAaL,cAAcM,UAAUD;AACjF,cAAME,eAAeP,cAAcQ,WAAWH,UAAaL,cAAcS,WAAWJ;AACpF,cAAMK,eAAeP,eAAeI;AAEpC,eAAOI;;;;kCAIuBX,cAAcY,WAAW,WAAW,UAAA;mBACnD,KAAKC,uBAAuB;;;;;;kCAMbb,cAAcc,iBAAiB,SAASd,cAAcY,WAAW,WAAW,UAAA;mBAC3F,KAAKG,wBAAwB;sBAC1B,CAACf,cAAcY,QAAQ;;;;UAKnCF,eACIC;;;;uBAIS,KAAKK,qBAAqB;;;;cAKnCL;;;;uBAIS,KAAKM,kBAAkB;;;;WAInC;;;MAIT;IACF,CAAA,GAAAC,SAIGC,KAAiB;MAAEC,SAAS;IAAK,CAAA,GAAAC,SAGjCF,KAAuC;MAAEG,MAAMC;MAAQH,SAAS;IAAM,CAAA,GAAAI,SAGtEL,KAAoB;MAAEG,MAAMG;MAAQL,SAAS;MAAOM,cAAc;IAAK,CAAA;AATnE,IAAMrC,iBAAN,eAA6BJ,gBAAAA,aAAAA;;eAIzBC,mBAGAC,eAGAC,2BAAAA,WAAAA,GAAAA,GAAAA,CAAAA,iBAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YANAF;;;;;YAGAC;;;;;YAGAC;;;;WAVyBH,aAAAA;;MAIzBC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,qBAAAA;oBAAAA;;UAAAA,mBAAAA,IAAAA;aAAAA,mCAAkB;;MAE3B;MAQA;MAOA;MAMA;MA8IA,qBAAqBuC,OAAoBC,OAAezC,QAAoB;AAC1E,cAAM0C,OAAO1C,OAAOyC,QAAQ,CAAA;AAC5B,cAAME,OAAO3C,OAAOyC,QAAQ,CAAA;AAE5B,YAAIG,QAAQJ,MAAMnB,UAAU,EAAEmB,MAAMvB,SAAS;AAC7C,YAAI4B,QAAQL,MAAMlB,UAAU,EAAEkB,MAAMrB,SAAS;AAE7C,YAAIyB,UAAU,KAAKC,UAAU,GAAG;AAC9B,cAAIC,OAAO;AACX,cAAIC,OAAO;AAEX,cAAIL,QAAQC,MAAM;AAChBG,mBAAOH,KAAKK,IAAIN,KAAKM;AACrBD,mBAAOJ,KAAKM,IAAIP,KAAKO;UACvB,WAAWN,MAAM;AACfG,mBAAOH,KAAKK,IAAIR,MAAMQ;AACtBD,mBAAOJ,KAAKM,IAAIT,MAAMS;UACxB,WAAWP,MAAM;AACfI,mBAAON,MAAMQ,IAAIN,KAAKM;AACtBD,mBAAOP,MAAMS,IAAIP,KAAKO;UACxB,OAAO;AACLH,mBAAO;AACPC,mBAAO;UACT;AAEA,gBAAMG,YAAYC,gBAAgBL,MAAMC,IAAAA;AACxC,gBAAMhC,SAASqC;AAEfZ,gBAAMvB,QAAQ,CAACiC,UAAUG,KAAKtC;AAC9ByB,gBAAMrB,QAAQ,CAAC+B,UAAUI,KAAKvC;AAC9ByB,gBAAMnB,SAAS6B,UAAUG,KAAKtC;AAC9ByB,gBAAMlB,SAAS4B,UAAUI,KAAKvC;AAC9B6B,kBAAQJ,MAAMnB;AACdwB,kBAAQL,MAAMlB;QAChB;AAEA,YAAIsB,UAAU,KAAKC,UAAU,GAAG;AAC9B;QACF;AAEA,cAAMU,aAAaJ,gBAAgBP,OAAOC,KAAAA;AAC1C,cAAMW,kBAAkBC,aAAab,OAAOC,KAAAA;AAE5C,cAAMa,WAAWD,aAAajB,MAAMvB,SAAS,GAAGuB,MAAMrB,SAAS,CAAA,KAAMqC;AACrEhB,cAAMvB,QAAQ,CAACsC,WAAWF,KAAKK;AAC/BlB,cAAMrB,QAAQ,CAACoC,WAAWD,KAAKI;AAE/B,cAAMC,YAAYF,aAAajB,MAAMnB,UAAU,GAAGmB,MAAMlB,UAAU,CAAA,KAAMkC;AACxEhB,cAAMnB,SAASkC,WAAWF,KAAKM;AAC/BnB,cAAMlB,SAASiC,WAAWD,KAAKK;MACjC;MAEA,mBAAmBnB,OAAkB;AACnC,YAAI,CAACA,MAAMf,UAAU;AACnBe,gBAAMb,eAAe;AACrB;QACF;AAEA,cAAMgC,YAAYF,aAAajB,MAAMnB,UAAU,GAAGmB,MAAMlB,UAAU,CAAA;AAClE,cAAMoC,WAAWD,aAAajB,MAAMvB,SAAS,GAAGuB,MAAMrB,SAAS,CAAA;AAC/D,cAAMyC,eAAeC,KAAKC,IAAIH,WAAWD,QAAAA;AAEzC,YAAIE,gBAAgB,GAAG;AACrB;QACF;AAEA,YAAID,YAAY,GAAG;AACjB,gBAAMI,eAAeZ,gBAAgBX,MAAMnB,UAAU,GAAGmB,MAAMlB,UAAU,CAAA;AACxEkB,gBAAMnB,SAAS0C,aAAaV,KAAKO;AACjCpB,gBAAMlB,SAASyC,aAAaT,KAAKM;QACnC,WAAWF,WAAW,GAAG;AACvB,gBAAMM,cAAcb,gBAAgBX,MAAMvB,SAAS,GAAGuB,MAAMrB,SAAS,CAAA;AACrEqB,gBAAMnB,SAAS,CAAC2C,YAAYX,KAAKO;AACjCpB,gBAAMlB,SAAS,CAAC0C,YAAYV,KAAKM;QACnC;AAEA,YAAIF,WAAW,GAAG;AAChB,gBAAMM,cAAcb,gBAAgBX,MAAMvB,SAAS,GAAGuB,MAAMrB,SAAS,CAAA;AACrEqB,gBAAMvB,QAAQ+C,YAAYX,KAAKO;AAC/BpB,gBAAMrB,QAAQ6C,YAAYV,KAAKM;QACjC,WAAWD,YAAY,GAAG;AACxB,gBAAMI,eAAeZ,gBAAgBX,MAAMnB,UAAU,GAAGmB,MAAMlB,UAAU,CAAA;AACxEkB,gBAAMvB,QAAQ,CAAC8C,aAAaV,KAAKO;AACjCpB,gBAAMrB,QAAQ,CAAC4C,aAAaT,KAAKM;QACnC;MACF;;;;;AApQK,cAAA,GAAA,IAAA,GAAA,KAII7D,4BAAUkE,YAAA,IAAA,GAAVlE,kBAAAA,IAAAA,IAAAA,KAGAC,uBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,mCAAAA,0BAAAA,MAAoC,IAAA,GAAA,KAE7C,kBAAkB,MAAA;AAChB,gBAAMiE,OAAO,KAAKC,YAAW;AAC7B,cAAID,gBAAgBE,cAAcF,KAAKG,gBAAgBvE,aAAa;AAClE,mBAAOoE,KAAKG;UACd;AACA,iBAAO;QACT,GAAA,KAEA,mBAAmB,MAAA;AACjB,cAAI,CAAC3D,MAAMC,QAAQ,KAAKX,MAAM,GAAG;AAC/B,mBAAO;UACT;AACA,iBAAO,KAAKA;QACd,GAAA,KAEA,cAAc,CAASmC,MAAqBmC,OAAeC,UAAAA;AACzD,gBAAMC,SAAS,KAAK,gBAAe;AACnC,gBAAMC,SAAqC;YAAEH;YAAOC;UAAM;AAC1DG,+BAAqBF,QAAQrC,MAAMsC,MAAAA;QACrC,GAAA,KAEA,cAAc,CAACzE,QAAsBuE,UAAAA;AACnC,eAAKvE,SAASA;AACd,eAAK,YAAY,iBAAiBA,QAAQuE,KAAAA;QAC5C,GAAA,KAES7C,0BAA0B,CAAC6C,UAAAA;AAClCA,gBAAMI,eAAc;AACpB,gBAAM3E,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMyC,QAAQ,KAAKxC;AACnB,cAAIwC,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMD,QAAQxC,OAAOyC,KAAAA;AACrB,cAAI,CAACD,OAAO;AACV;UACF;AAEA,gBAAMoC,gBAAgB;eAAI5E;;AAC1B,gBAAM6E,eAAe;YAAE,GAAGrC;UAAM;AAChCoC,wBAAcnC,KAAAA,IAASoC;AAEvB,gBAAMC,YAAY,CAACD,aAAapD;AAChC,cAAIqD,WAAW;AACb,iBAAK,qBAAqBD,cAAcpC,OAAOzC,MAAAA;AAC/C6E,yBAAalD,eAAe;AAC5B,iBAAK,mBAAmBkD,YAAAA;UAC1B,OAAO;AACLA,yBAAalD,eAAe;UAC9B;AACAkD,uBAAapD,WAAWqD;AAExB,gBAAMC,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,eAAK,YAAYG,kBAAkBR,KAAAA;AACnC,eAAKtE,qBAAqBwC;AAC1B,eAAK,YAAY,sBAAsBA,OAAO8B,KAAAA;QAChD,GAAA,KAES3C,2BAA2B,CAAC2C,UAAAA;AACnCA,gBAAMI,eAAc;AACpB,gBAAM3E,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMyC,QAAQ,KAAKxC;AACnB,cAAIwC,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMD,QAAQxC,OAAOyC,KAAAA;AACrB,cAAI,CAACD,SAAS,CAACA,MAAMf,UAAU;AAC7B;UACF;AAEA,gBAAMmD,gBAAgB;eAAI5E;;AAC1B,gBAAM6E,eAAe;YAAE,GAAGrC;UAAM;AAChCoC,wBAAcnC,KAAAA,IAASoC;AAEvB,gBAAMC,YAAYD,aAAalD,iBAAiB;AAChDkD,uBAAalD,eAAemD;AAC5B,cAAIA,WAAW;AACb,iBAAK,qBAAqBD,cAAcpC,OAAOzC,MAAAA;AAC/C,iBAAK,mBAAmB6E,YAAAA;UAC1B;AAEA,gBAAME,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,eAAK,YAAYG,kBAAkBR,KAAAA;AACnC,eAAKtE,qBAAqBwC;AAC1B,eAAK,YAAY,sBAAsBA,OAAO8B,KAAAA;QAChD,GAAA,KAES1C,wBAAwB,CAAC0C,UAAAA;AAChCA,gBAAMI,eAAc;AACpB,gBAAM3E,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMyC,QAAQ,KAAKxC;AACnB,cAAIwC,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMwC,gBAAgBjF,OAAOyC,KAAAA;AAC7B,cAAI,CAACwC,eAAe;AAClB;UACF;AAEA,gBAAML,gBAAgB;eAAI5E;;AAC1B,gBAAM6E,eAA4B;YAAE,GAAGI;UAAc;AACrDL,wBAAcnC,KAAAA,IAASoC;AAEvB,iBAAOA,aAAa5D;AACpB,iBAAO4D,aAAa1D;AACpB,iBAAO0D,aAAaxD;AACpB,iBAAOwD,aAAavD;AACpB,iBAAOuD,aAAapD;AACpB,iBAAOoD,aAAalD;AAEpB,gBAAMoD,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,eAAK,YAAYG,kBAAkBR,KAAAA;AACnC,eAAKtE,qBAAqBwC;AAC1B,eAAK,YAAY,sBAAsBA,OAAO8B,KAAAA;QAChD,GAAA,KAESzC,qBAAqB,CAACyC,UAAAA;AAC7BA,gBAAMI,eAAc;AACpB,gBAAM3E,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMyC,QAAQ,KAAKxC;AACnB,cAAIwC,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMD,QAAQxC,OAAOyC,KAAAA;AACrB,cAAI,CAACD,OAAO;AACV;UACF;AAEA,gBAAMoC,gBAAgB;eAAI5E;;AAC1B,gBAAM6E,eAAe;YAAE,GAAGrC;UAAM;AAChCoC,wBAAcnC,KAAAA,IAASoC;AAEvB,eAAK,qBAAqBA,cAAcpC,OAAOzC,MAAAA;AAC/C6E,uBAAapD,WAAW;AACxBoD,uBAAalD,eAAe;AAC5B,eAAK,mBAAmBkD,YAAAA;AAExB,gBAAME,mBAAmBC,sBAAsBJ,aAAAA;AAC/C,eAAK,YAAYG,kBAAkBR,KAAAA;AACnC,eAAKtE,qBAAqBwC;AAC1B,eAAK,YAAY,sBAAsBA,OAAO8B,KAAAA;QAChD;;IAwFF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrWAW,uCA+FmCC,eAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAIxBC,mBASAC,eAGAC,iBAGAC,mBAGAC,iBAUAC,2BAAAA,6BAhCEC;;;;AA/Fb,IAAAR,mBAA0C;AAE1C;AACA;AACA;AAQA;AAWA;AACA;AACA;aAgCCS,UAAU;MACTC,KAAK;MACLC,QAAQC;MACRC,WAAAA;AACE,eAAOC;;;;;;;;mBAQQ,KAAKC,kBAAkB;oBACtB,KAAKC,qBAAqB;;YAElCC,eAAeC,IACf,CAAC,EAAEC,OAAOC,QAAO,GAAIC,UAAUP;cAC7BO,QAAQ,IAAIP,+CAA8B,IAAA;;iCAEvBK,KAAAA;cACnBC,QAAQF,IACR,CAAC,EAAEI,OAAOH,OAAAA,OAAK,MAAOL;2DACuBQ,KAAAA,IAASH,MAAAA,WAAgB,CAAA;WAEzE,CAAA;;;;;mCAMwB,KAAKjB,UAAU,YAAY,KAAKqB,gBAAgB;yCAC1CC,WAAWC,YAAY;yCACvBD,WAAWE,MAAM;;;;MAIxD;IACF,CAAA,GAAAC,SAIGC,KAAiB;MAAEC,SAAS;IAAK,CAAA,GAAAC,SAGjCF,KAAsD;MACrDG,MAAMC;MACNH,SAAS;MACTI,WAAAA;AACE,aAAKC,uBAAsB;MAC7B;IACF,CAAA,GAAAC,SAGCP,KAAc;MAAEG,MAAMK;MAASP,SAAS;MAAMQ,cAAc;IAAK,CAAA,GAAAC,SAGjEV,KAAc;MAAEG,MAAMK;MAASP,SAAS;MAAMQ,cAAc;IAAM,CAAA,GAAAE,SAGlEX,KAAa;MAAEG,MAAMS;MAAQX,SAAS;MAAMQ,cAAc;IAAE,CAAA,GAAAI,SAG5Db,KAAmC;MAClCG,MAAMS;MACNX,SAAS;MACTQ,cAAc;MACdJ,SAA8BX,OAAoB;AAChD,aAAKoB,mCAAmCpB,KAAAA;MAC1C;IACF,CAAA;AA/BK,IAAMd,gBAAN,eAA4BP,gBAAAA,aAAAA;;eAIxBC,mBASAC,eAGAC,iBAGAC,mBAGAC,iBAUAC,2BAAAA,WAAAA,GAAAA,GAAAA,CAAAA,gBAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YA5BAL;;;;;YASAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAUAC;;;;WAhCwBN,aAAAA;;MAIxBC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MASVC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAURC;UAAAA,qBAAAA;oBAAAA;;UAAAA,mBAAAA,IAAAA;aAAAA,mCAAkB;;MAK3B,iBAAiBe,OAAoB;AACnC,YAAI,KAAKP,uBAAuBO,OAAO;AACrC;QACF;AACA,aAAKP,qBAAqBO;AAC1B,aAAKqB,cAAa;MACpB;MAEA,qBAAkB;AAChB,YAAI,KAAK5B,uBAAuB,MAAM;AACpC;QACF;AACA,aAAKA,qBAAqB;AAC1B,aAAK4B,cAAa;MACpB;MAEAD,mCAAmCE,QAA6B;AAC9D,aAAKD,cAAa;MACpB;MAEAT,yBAA+B;AAC7B,YAAI,KAAKW,kBAAkB;AACzB;QACF;AACA,aAAK,mBAAkB;MACzB;MAEA,IAAIC,mBAA4B;AAC9B,cAAM3C,SAAS,KAAK,iBAAgB;AACpC,eAAOA,WAAW,QAAQA,OAAO4C,UAAUC;MAC7C;MAEA,IAAIC,mBAA4B;AAC9B,cAAM9C,SAAS,KAAK,iBAAgB;AACpC,eAAOA,WAAW,QAAQA,OAAO4C,UAAUG;MAC7C;MAEA;MAQA;MAQAC,8BAAqD;AACnD,cAAMhD,SAAS,KAAK,iBAAgB;AAEpC,YAAI,CAACA,QAAQ;AACX,iBAAO;QACT;AAEA,YAAIA,OAAO4C,SAASG,mBAAmB;AACrC,iBAAOpC;;;;;QAKT;AAEA,cAAMsC,eAAe,KAAK7C;AAE1B,YAAI6C,iBAAiB,MAAM;AACzB,iBAAOtC;;;;;;;QAOT;AAEA,cAAMuC,gBAAgBlD,OAAOiD,YAAAA;AAC7B,YAAI,CAACC,eAAe;AAClB,iBAAO;QACT;AAEA,cAAMC,gBAAgBF,eAAe,IAAIA,eAAe,IAAI;AAC5D,cAAMG,YAAYH,eAAejD,OAAO4C,SAAS,IAAIK,eAAe,IAAI;AAExE,cAAMI,eAAeJ,eAAe,KAAKA,eAAejD,OAAO4C,SAAS;AAExE,cAAMU,YAAY,IAAIJ,cAAcK,IAAI,KAAKC,QAAQ,CAAA,CAAA,OAASN,cAAcO,IAAI,KAAKD,QAAQ,CAAA,CAAA;AAC7F,cAAME,YAAYR,cAAcS,WAAW,WAAW;AACtD,cAAMC,cAAcV,cAAcW,UAAUC,UAAaZ,cAAca,UAAUD;AACjF,cAAME,eAAed,cAAce,WAAWH,UAAaZ,cAAcgB,WAAWJ;AACpF,cAAMK,eAAeP,eAAeI;AAEpC,eAAOrD;;;;;;;uBAOY,CAACyD,UAAiB,KAAK,YAAYA,OAAOjB,aAAAA,CAAAA;0BACvCA,kBAAkB,IAAA;;;;;uBAKrBF,eAAe,CAAA;sBAChBK,SAAAA;uBACCI,SAAAA;;;;;uBAKA,CAACU,UAAiB,KAAK,YAAYA,OAAOhB,SAAAA,CAAAA;0BACvCA,cAAc,IAAA;;;;;;;;;;;;;;yBAcfF,cAAcK,EAAEC,QAAQ,CAAA,CAAA;;4BAErB,CAACH,YAAAA;0BACH,KAAK,sBAAsB;;;;;;;;;;yBAU5BH,cAAcO,EAAED,QAAQ,CAAA,CAAA;;0BAEvB,KAAK,sBAAsB;;;;;;0BAM3B,CAACH,gBAAgBrD,OAAO4C,UAAUG,iBAAAA;uBACrC,KAAK,0BAA0B;;;;;;YAO1CM,eACI1C;;;;8CAI8B,CAACuC,cAAcS,WAAW,WAAW,EAAA;;+BAEpD,KAAK,sBAAsB;;;;;;8CAMZT,cAAcS,WAAW,WAAW,EAAA;;+BAEnD,KAAK,sBAAsB;;;;;;8CAMZT,cAAcS,WAAW,WAAW,EAAA;;+BAEnD,KAAK,sBAAsB;;sCAEpBT,cAAcS,WAAW,OAAO,KAAA;;;;8CAIxBT,cAAcmB,iBAAiB,QAAQ,WAAW,EAAA;;+BAEjE,KAAK,sBAAsB;kCACxB,CAACnB,cAAcS,QAAQ;;uCAElBT,cAAcmB,iBAAiB,QAAQ,QAAQ,IAAA;;;;;;;;;+BASvD,KAAK,oBAAoB;kCACtB,CAACF,YAAAA;;;;;;;;+BAQJ,KAAK,oBAAoB;kCACtB,CAACP,WAAAA;;;;;;;;+BAQJ,KAAK,oBAAoB;kCACtB,CAACI,YAAAA;;;;;oBAMnB,KAAK,8BAA8Bd,eAAeD,YAAAA,CAAAA;;;;MAKhE;MAEA;MAqEA;MAUA;MA0EA,qBAAqBqB,OAAoBpD,OAAelB,QAAoB;AAC1E,cAAMuE,OAAOvE,OAAOkB,QAAQ,CAAA;AAC5B,cAAMsD,OAAOxE,OAAOkB,QAAQ,CAAA;AAE5B,YAAIuD,QAAQH,MAAML,UAAU,EAAEK,MAAMT,SAAS;AAC7C,YAAIa,QAAQJ,MAAMJ,UAAU,EAAEI,MAAMP,SAAS;AAE7C,YAAIU,UAAU,KAAKC,UAAU,GAAG;AAC9B,cAAIC,OAAO;AACX,cAAIC,OAAO;AAEX,cAAIL,QAAQC,MAAM;AAChBG,mBAAOH,KAAKjB,IAAIgB,KAAKhB;AACrBqB,mBAAOJ,KAAKf,IAAIc,KAAKd;UACvB,WAAWe,MAAM;AACfG,mBAAOH,KAAKjB,IAAIe,MAAMf;AACtBqB,mBAAOJ,KAAKf,IAAIa,MAAMb;UACxB,WAAWc,MAAM;AACfI,mBAAOL,MAAMf,IAAIgB,KAAKhB;AACtBqB,mBAAON,MAAMb,IAAIc,KAAKd;UACxB,OAAO;AACLkB,mBAAO;AACPC,mBAAO;UACT;AAEA,gBAAMC,YAAYC,gBAAgBH,MAAMC,IAAAA;AACxC,gBAAMhC,SAASmC;AAEfT,gBAAMT,QAAQ,CAACgB,UAAUG,KAAKpC;AAC9B0B,gBAAMP,QAAQ,CAACc,UAAUI,KAAKrC;AAC9B0B,gBAAML,SAASY,UAAUG,KAAKpC;AAC9B0B,gBAAMJ,SAASW,UAAUI,KAAKrC;AAC9B6B,kBAAQH,MAAML;AACdS,kBAAQJ,MAAMJ;QAChB;AAEA,YAAIO,UAAU,KAAKC,UAAU,GAAG;AAC9B;QACF;AAEA,cAAMQ,aAAaJ,gBAAgBL,OAAOC,KAAAA;AAC1C,cAAMS,kBAAkBC,aAAaX,OAAOC,KAAAA;AAE5C,cAAMW,WAAWD,aAAad,MAAMT,SAAS,GAAGS,MAAMP,SAAS,CAAA,KAAMoB;AACrEb,cAAMT,QAAQ,CAACqB,WAAWF,KAAKK;AAC/Bf,cAAMP,QAAQ,CAACmB,WAAWD,KAAKI;AAE/B,cAAMC,YAAYF,aAAad,MAAML,UAAU,GAAGK,MAAMJ,UAAU,CAAA,KAAMiB;AACxEb,cAAML,SAASiB,WAAWF,KAAKM;AAC/BhB,cAAMJ,SAASgB,WAAWD,KAAKK;MACjC;MAEA,mBAAmBhB,OAAkB;AACnC,YAAI,CAACA,MAAMX,UAAU;AACnBW,gBAAMD,eAAe;AACrB;QACF;AAEA,cAAMiB,YAAYF,aAAad,MAAML,UAAU,GAAGK,MAAMJ,UAAU,CAAA;AAClE,cAAMmB,WAAWD,aAAad,MAAMT,SAAS,GAAGS,MAAMP,SAAS,CAAA;AAC/D,cAAMwB,eAAeC,KAAKC,IAAIH,WAAWD,QAAAA;AAEzC,YAAIE,gBAAgB,GAAG;AACrB;QACF;AAEA,YAAID,YAAY,GAAG;AACjB,gBAAMI,eAAeZ,gBAAgBR,MAAML,UAAU,GAAGK,MAAMJ,UAAU,CAAA;AACxEI,gBAAML,SAASyB,aAAaV,KAAKO;AACjCjB,gBAAMJ,SAASwB,aAAaT,KAAKM;QACnC,WAAWF,WAAW,GAAG;AACvB,gBAAMM,cAAcb,gBAAgBR,MAAMT,SAAS,GAAGS,MAAMP,SAAS,CAAA;AACrEO,gBAAML,SAAS,CAAC0B,YAAYX,KAAKO;AACjCjB,gBAAMJ,SAAS,CAACyB,YAAYV,KAAKM;QACnC;AAEA,YAAIF,WAAW,GAAG;AAChB,gBAAMM,cAAcb,gBAAgBR,MAAMT,SAAS,GAAGS,MAAMP,SAAS,CAAA;AACrEO,gBAAMT,QAAQ8B,YAAYX,KAAKO;AAC/BjB,gBAAMP,QAAQ4B,YAAYV,KAAKM;QACjC,WAAWD,YAAY,GAAG;AACxB,gBAAMI,eAAeZ,gBAAgBR,MAAML,UAAU,GAAGK,MAAMJ,UAAU,CAAA;AACxEI,gBAAMT,QAAQ,CAAC6B,aAAaV,KAAKO;AACjCjB,gBAAMP,QAAQ,CAAC2B,aAAaT,KAAKM;QACnC;MACF;MAEA;MAuDA,8BAA8BjB,OAAoBpD,OAAa;AAC7D,cAAM0E,UAAU1E,UAAU;AAC1B,cAAM2E,YAA0BD,UAAU,QAAQ;AAClD,cAAME,cAAcF,UAAU,aAAa;AAC3C,cAAMG,YACJF,cAAc,QACVvB,MAAML,WAAWH,UAAaQ,MAAMJ,WAAWJ,SAC/CQ,MAAMT,UAAUC,UAAaQ,MAAMP,UAAUD;AAEnD,eAAOnD;6DACkDmF,WAAAA;;;;wBAIrCD,SAAAA;mBACL,KAAK,wBAAwB;sBAC1BE,SAAAA;;gBAEND,WAAAA;;;;;wBAKQD,SAAAA;mBACL,KAAK,oBAAoB;sBACtB,CAACE,SAAAA;;mBAEJD,WAAAA;;;;MAIjB;MAEA;MA6CA,sBAAsBxB,OAAoB0B,UAAuBC,QAAoB;AACnF,cAAMjB,KAAKgB,SAASzC,IAAIe,MAAMf;AAC9B,cAAM0B,KAAKe,SAASvC,IAAIa,MAAMb;AAE9B,cAAMoB,YAAYC,gBAAgBE,IAAIC,EAAAA;AACtC,cAAMiB,oBAAoBD,WAAW,QAAQ;UAAEjB,IAAI;UAAGC,IAAI;QAAE,IAAI;UAAED,IAAI;UAAIC,IAAI;QAAE;AAChF,cAAMkB,iBAAiBtB,UAAUG,OAAO,KAAKH,UAAUI,OAAO,IAAIiB,oBAAoBrB;AAEtF,cAAMuB,MAAMZ,KAAKa,IAAIrB,EAAAA;AACrB,cAAMsB,aAAaF,MAAM,IAAIA,MAAM,MAAMG,mBAAmB;AAC5D,cAAM3D,SAAS4C,KAAKgB,IAAIzB,uBAAuBS,KAAKC,IAAIc,mBAAmB,KAAKD,UAAAA,CAAAA;AAEhF,YAAIL,WAAW,OAAO;AACpB3B,gBAAML,SAASkC,eAAenB,KAAKpC;AACnC0B,gBAAMJ,SAASiC,eAAelB,KAAKrC;QACrC,OAAO;AACL0B,gBAAMT,QAAQsC,eAAenB,KAAKpC;AAClC0B,gBAAMP,QAAQoC,eAAelB,KAAKrC;QACpC;AAEA0B,cAAMX,WAAW;AACjBW,cAAMD,eAAe;MACvB;MAEA,qBAAqBnD,OAAekD,OAAY;AAC9C,cAAMpE,SAAS,KAAK,iBAAgB;AAEpC,YAAI,CAACA,UAAUA,OAAO4C,UAAUG,mBAAmB;AACjD;QACF;AAEA,YAAI7B,SAAS,KAAKA,SAASlB,OAAO4C,SAAS,GAAG;AAC5C;QACF;AAEA,cAAM6D,gBAA8BzG,OACjC0G,OAAO,CAACC,GAAGC,eAAeA,eAAe1F,KAAAA,EACzCH,IAAI,CAACuD,UAAAA;AACJ,iBAAO;YAAE,GAAGA;UAAM;QACpB,CAAA;AAEF,cAAMuC,mBAAmBC,sBAAsBL,aAAAA;AAC/C,aAAK,YAAYI,kBAAkBzC,KAAAA;AAEnC,cAAMhB,YAAYlC,QAAQ;AAE1B,aAAKd,qBAAqBgD;AAC1B,aAAK,YAAY,sBAAsBA,WAAWgB,KAAAA;MACpD;MAkEA;MAQA;MAaA;MAQA;MAwPA;MAEA;MAWA;;;;;AAzhCK,cAAA,GAAA,IAAA,GAAA,KAIIrE,4BAAUgH,YAAA,IAAA,GAAVhH,kBAAAA,IAAAA,IAAAA,KASAC,uBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,2BAAAA,kBAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,MAAmB,CAAA,GAAA,KAUnBC,mCAAAA,0BAAAA,MAAoC,IAAA,GAAA,KAErCQ,qBAAoC,MAAA,KACpC8B,mBAAmB,OAAA,KAuC3B,kBAAkB,MAAA;AAChB,gBAAMsE,OAAO,KAAKC,YAAW;AAC7B,cAAID,gBAAgBE,cAAcF,KAAKG,gBAAgBrH,aAAa;AAClE,mBAAOkH,KAAKG;UACd;AACA,iBAAO;QACT,GAAA,KAEA,mBAAmB,MAAA;AACjB,cAAI,CAACC,MAAMC,QAAQ,KAAKrH,MAAM,GAAG;AAC/B,mBAAO;UACT;AAEA,iBAAO,KAAKA;QACd,GAAA,KAwLA,yBAAyB,CAACoE,UAAAA;AACxB,gBAAMkD,SAASlD,MAAMkD;AACrB,cAAI,EAAEA,kBAAkBC,mBAAmB;AACzC;UACF;AAEA,gBAAMC,OAAOF,OAAOG,QAAQD;AAC5B,cAAIA,SAAS,OAAOA,SAAS,KAAK;AAChC;UACF;AAEA,gBAAMxH,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMkB,QAAQ,KAAKd;AACnB,cAAIc,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMgC,gBAAgBlD,OAAOkB,KAAAA;AAC7B,cAAI,CAACgC,eAAe;AAClB;UACF;AAEA,gBAAMwE,SAASrF,OAAOsF,WAAWL,OAAOnG,KAAK;AAE7C,cAAIkB,OAAOuF,MAAMF,MAAAA,GAAS;AACxBJ,mBAAOnG,QAAQ+B,cAAcsE,IAAAA,EAAMhE,QAAQ,CAAA;AAC3C;UACF;AAEA,gBAAMiD,gBAA8BzG,OAAOe,IAAI,CAACuD,OAAOsC,eAAAA;AACrD,gBAAIA,eAAe1F,OAAO;AACxB,qBAAO;gBAAE,GAAGoD;cAAM;YACpB;AAEA,kBAAMuD,UAAuB;cAAE,GAAGvD;YAAM;AAExC,gBAAIkD,SAAS,KAAK;AAChB,kBAAItG,UAAU,KAAKA,UAAUlB,OAAO4C,SAAS,GAAG;AAC9C,uBAAOiF;cACT;AAEA,oBAAMC,WAAW9H,OAAOkB,QAAQ,CAAA;AAChC,oBAAMsD,OAAOxE,OAAOkB,QAAQ,CAAA;AAC5B,oBAAM6G,OAAOD,WAAWA,SAASvE,IAAIgD,mBAAmB;AACxD,oBAAMyB,OAAOxD,OAAOA,KAAKjB,IAAIgD,mBAAmB;AAChDsB,sBAAQtE,IAAIiC,KAAKgB,IAAIhB,KAAKC,IAAIiC,QAAQK,IAAAA,GAAOC,IAAAA;YAC/C,OAAO;AACLH,sBAAQpE,IAAI+B,KAAKgB,IAAIhB,KAAKC,IAAIiC,QAAQ,CAAA,GAAI,CAAA;YAC5C;AAEA,mBAAOG;UACT,CAAA;AAEA,gBAAMhB,mBAAmBC,sBAAsBL,aAAAA;AAC/C,eAAK,YAAYI,kBAAkBzC,KAAAA;AACnC,eAAKhE,qBAAqBc;AAC1B,eAAK,YAAY,sBAAsBA,OAAOkD,KAAAA;AAE9C,gBAAM6D,iBAAiBpB,iBAAiB3F,KAAAA;AAExC,cAAI+G,gBAAgB;AAClBX,mBAAOnG,QAAQ8G,eAAeT,IAAAA,EAAMhE,QAAQ,CAAA;UAC9C;QACF,GAAA,KAEA,6BAA6B,CAACY,UAAAA;AAC5B,gBAAMlD,QAAQ,KAAKd;AAEnB,cAAIc,UAAU,MAAM;AAClB;UACF;AAEA,eAAK,qBAAqBA,OAAOkD,KAAAA;QACnC,GAAA,KAEA,yBAAyB,CAACA,UAAAA;AACxBA,gBAAM8D,eAAc;AACpB,gBAAMZ,SAASlD,MAAM+D;AACrB,cAAI,EAAEb,kBAAkBc,oBAAoB;AAC1C;UACF;AAEA,gBAAMxG,OAAO0F,OAAOG,QAAQ7F;AAC5B,gBAAM5B,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMkB,QAAQ,KAAKd;AACnB,cAAIc,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMoD,QAAQtE,OAAOkB,KAAAA;AACrB,cAAI,CAACoD,OAAO;AACV;UACF;AAEA,gBAAMmC,gBAAgB;eAAIzG;;AAC1B,gBAAMqI,eAAe;YAAE,GAAG/D;UAAM;AAChCmC,wBAAcvF,KAAAA,IAASmH;AAEvB,kBAAQzG,MAAAA;YACN,KAAK,UAAU;AACbyG,2BAAa1E,WAAW;AACxB0E,2BAAahE,eAAe;AAC5B;YACF;YACA,KAAK,UAAU;AACb,mBAAK,qBAAqBgE,cAAcnH,OAAOlB,MAAAA;AAC/CqI,2BAAa1E,WAAW;AACxB0E,2BAAahE,eAAe;AAC5B,mBAAK,mBAAmBgE,YAAAA;AACxB;YACF;YACA,KAAK,gBAAgB;AACnB,oBAAMC,YAAY,CAACD,aAAa1E;AAChC,kBAAI2E,WAAW;AACb,qBAAK,qBAAqBD,cAAcnH,OAAOlB,MAAAA;AAC/CqI,6BAAahE,eAAe;AAC5B,qBAAK,mBAAmBgE,YAAAA;cAC1B,OAAO;AACLA,6BAAahE,eAAe;cAC9B;AACAgE,2BAAa1E,WAAW2E;AACxB;YACF;YACA,KAAK,iBAAiB;AACpB,kBAAI,CAACD,aAAa1E,UAAU;AAC1B;cACF;AACA,oBAAM2E,YAAYD,aAAahE,iBAAiB;AAChDgE,2BAAahE,eAAeiE;AAC5B,kBAAIA,WAAW;AACb,qBAAK,qBAAqBD,cAAcnH,OAAOlB,MAAAA;AAC/C,qBAAK,mBAAmBqI,YAAAA;cAC1B;AACA;YACF;YACA;AACE;UACJ;AAEA,gBAAMxB,mBAAmBC,sBAAsBL,aAAAA;AAC/C,eAAK,YAAYI,kBAAkBzC,KAAAA;AACnC,eAAKhE,qBAAqBc;AAC1B,eAAK,YAAY,sBAAsBA,OAAOkD,KAAAA;QAChD,GAAA,KAyFA,uBAAuB,CAACA,UAAAA;AACtBA,gBAAM8D,eAAc;AACpB,gBAAMZ,SAASlD,MAAM+D;AACrB,cAAI,EAAEb,kBAAkBc,oBAAoB;AAC1C;UACF;AAEA,gBAAMG,OAAQjB,OAAOG,QAAQxB,UAAgD;AAE7E,gBAAMjG,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMkB,QAAQ,KAAKd;AACnB,cAAIc,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMuF,gBAAgB;eAAIzG;;AAC1B,gBAAMwI,gBAAgB/B,cAAcvF,KAAAA;AACpC,cAAI,CAACsH,eAAe;AAClB;UACF;AAEA,gBAAMH,eAA4B;YAAE,GAAGG;UAAc;AACrD/B,wBAAcvF,KAAAA,IAASmH;AAEvB,gBAAMI,iBAAiBF,SAAS,UAAUA,SAAS;AACnD,gBAAMG,iBAAiBH,SAAS,UAAUA,SAAS;AAEnD,cAAIE,gBAAgB;AAClB,mBAAOJ,aAAaxE;AACpB,mBAAOwE,aAAatE;UACtB;AAEA,cAAI2E,gBAAgB;AAClB,mBAAOL,aAAapE;AACpB,mBAAOoE,aAAanE;UACtB;AAEA,cAAIuE,kBAAkBC,gBAAgB;AACpC,mBAAOL,aAAa1E;AACpB,mBAAO0E,aAAahE;UACtB,WAAWoE,kBAAkBC,gBAAgB;AAC3CL,yBAAa1E,WAAW;AACxB0E,yBAAahE,eAAe;UAC9B;AAEA,gBAAMwC,mBAAmBC,sBAAsBL,aAAAA;AAC/C,eAAK,YAAYI,kBAAkBzC,KAAAA;AACnC,eAAKhE,qBAAqBc;AAC1B,eAAK,YAAY,sBAAsBA,OAAOkD,KAAAA;QAChD,GAAA,KAmCA,2BAA2B,CAACA,UAAAA;AAC1BA,gBAAM8D,eAAc;AACpB,gBAAMZ,SAASlD,MAAM+D;AACrB,cAAI,EAAEb,kBAAkBc,oBAAoB;AAC1C;UACF;AAEA,gBAAMnC,SAASqB,OAAOG,QAAQxB;AAC9B,cAAIA,WAAW,QAAQA,WAAW,OAAO;AACvC;UACF;AAEA,gBAAMjG,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAMkB,QAAQ,KAAKd;AACnB,cAAIc,UAAU,MAAM;AAClB;UACF;AAEA,gBAAMyH,gBAAgB1C,WAAW,QAAQ/E,QAAQ,IAAIA,QAAQ;AAC7D,gBAAM8E,WAAWhG,OAAO2I,aAAAA;AACxB,cAAI,CAAC3C,UAAU;AACb;UACF;AAEA,gBAAMS,gBAAgB;eAAIzG;;AAC1B,gBAAMwI,gBAAgB/B,cAAcvF,KAAAA;AACpC,cAAI,CAACsH,eAAe;AAClB;UACF;AAEA,gBAAMH,eAA4B;YAAE,GAAGG;UAAc;AACrD/B,wBAAcvF,KAAAA,IAASmH;AAEvB,eAAK,sBAAsBA,cAAcrC,UAAUC,MAAAA;AAEnD,gBAAMY,mBAAmBC,sBAAsBL,aAAAA;AAC/C,eAAK,YAAYI,kBAAkBzC,KAAAA;AACnC,eAAKhE,qBAAqBc;AAC1B,eAAK,YAAY,sBAAsBA,OAAOkD,KAAAA;QAChD,GAAA,KAoDSwE,aAAa,CAACxE,UAAAA;AACrBA,gBAAM8D,eAAc;AACpB,eAAK,mBAAkB;AAEvB,cAAI,KAAKnI,eAAesB,WAAWC,cAAc;AAC/C,kBAAMuH,YAA8B;cAClCC,IAAI;gBAAEvF,GAAG;gBAAME,GAAG;cAAI;cACtBsF,IAAI;gBAAExF,GAAG;gBAAME,GAAG;cAAE;YACtB;AACA,iBAAKzD,SAAS6I;AACd,iBAAK,YAAY,iBAAiBA,WAAUzE,KAAAA;AAC5C;UACF;AAEA,gBAAMyE,WAAyB;YAC7B;cAAEtF,GAAG;cAAGE,GAAG;YAAE;YACb;cAAEF,GAAG;cAAGE,GAAG;YAAE;;AAEf,eAAKzD,SAAS6I;AACd,eAAK,YAAY,iBAAiBA,UAAUzE,KAAAA;AAC5C,eAAKhE,qBAAqB;AAC1B,eAAK,YAAY,sBAAsB,MAAMgE,KAAAA;QAC/C,GAAA,KAES4E,yBAAyB,CAAC5E,UAAAA;AACjCA,gBAAM8D,eAAc;AAEpB,gBAAMlI,SAAS,KAAK,iBAAgB;AAEpC,cAAI,CAACA,UAAUA,OAAO4C,UAAUG,mBAAmB;AACjD;UACF;AAEA,gBAAMkG,YAAYjJ,OAAO4C,SAAS;AAClC,gBAAMsG,OAAOD,YAAY,IAAI,IAAIA,YAAY;AAE7C,gBAAME,cAA4BnJ,OAAOe,IAAI,CAACuD,OAAOpD,UAAAA;AACnD,kBAAM2G,UAAuB;cAAE,GAAGvD;YAAM;AAExC,gBAAIpD,UAAU,GAAG;AACf2G,sBAAQtE,IAAI;YACd,WAAWrC,UAAU+H,WAAW;AAC9BpB,sBAAQtE,IAAI;YACd,OAAO;AACLsE,sBAAQtE,IAAIlB,OAAOsF,YAAYuB,OAAOhI,OAAOsC,QAAQ,CAAA,CAAA;YACvD;AAEA,mBAAOqE,QAAQhE;AACf,mBAAOgE,QAAQ9D;AACf,mBAAO8D,QAAQ5D;AACf,mBAAO4D,QAAQ3D;AACf,mBAAO2D,QAAQlE;AAEf,mBAAOkE;UACT,CAAA;AAEA,gBAAMhB,mBAAmBC,sBAAsBqC,WAAAA;AAC/C,eAAK,YAAYtC,kBAAkBzC,KAAAA;AAEnC,cAAI,KAAKhE,uBAAuB,MAAM;AACpC,iBAAK,YAAY,sBAAsB,KAAKA,oBAAoBgE,KAAAA;UAClE;QACF,GAAA,KAEA,cAAc,CAACA,OAAclD,UAAAA;AAC3BkD,gBAAM8D,eAAc;AACpB,cAAIhH,UAAU,MAAM;AAClB,iBAAKd,qBAAqBc;AAC1B,iBAAK,YAAY,sBAAsBA,OAAOkD,KAAAA;UAChD;QACF,GAAA,KAEA,iBAAiB,CAACxC,MAAkBwC,UAAAA;AAClC,cAAI,KAAKrE,eAAe6B,MAAM;AAC5B;UACF;AAEA,cAAI,CAAC,KAAKc,kBAAkB;AAC1B,iBAAK,mBAAkB;UACzB;AAEA,eAAK3C,aAAa6B;AAClB,eAAK,YAAY,sBAAsBA,MAAMwC,KAAAA;QAC/C,GAAA,KAEA,cAAc,CAACpE,QAAsBoE,UAAAA;AACnC,cAAI,CAAC,KAAK1B,kBAAkB;AAC1B,iBAAK,mBAAkB;UACzB;AACA,eAAK1C,SAASA;AACd,eAAK,YAAY,iBAAiBA,QAAQoE,KAAAA;QAC5C,GAAA,KAEA,eAAe,CACbpE,QACA4B,MACAwH,aACAhF,UAAAA;AAEA,eAAK1B,mBAAmB;AACxB,cAAI,KAAK3C,eAAe6B,MAAM;AAC5B,iBAAK,eAAeA,MAAMwC,KAAAA;UAC5B;AAEA,eAAKpE,SAASA;AACd,eAAKI,qBAAqB;AAC1B,eAAK,iBAAiBgJ,WAAAA;AACtB,eAAK,YAAY,iBAAiBpJ,QAAQoE,KAAAA;AAE1C,cAAIxC,SAASP,WAAWE,QAAQ;AAC9B,iBAAK,YAAY,sBAAsB,MAAM6C,KAAAA;UAC/C;AAEA,eAAK1B,mBAAmB;QAC1B,GAAA,KAEStB,mBAAmB,CAACgD,UAAAA;AAC3B,gBAAMiF,SAASjF,MAAMiF;AAErB,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAM,EAAElI,OAAOiD,OAAOkF,YAAW,IAAKD;AAEtC,cAAIlI,UAAUE,WAAWC,gBAAgBH,UAAUE,WAAWE,QAAQ;AACpE,iBAAK,mBAAkB;AACvB,iBAAK,eAAeJ,OAAOmI,eAAelF,KAAAA;UAC5C;QACF,GAAA,KAESvD,wBAAwB,CAACuD,UAAAA;AAChC,gBAAMiF,SAASjF,MAAMiF;AAErB,cAAI,CAACA,QAAQ;AACX;UACF;AAEA,gBAAME,WAAWF,OAAOlI;AACxB,gBAAMmI,cAAcD,OAAOjF,SAASA;AAEpC,cAAI,OAAOmF,aAAa,UAAU;AAChC;UACF;AAEA,gBAAMC,WAAWD,SAASE,KAAI;AAE9B,cAAID,SAAS5G,WAAW,GAAG;AACzB,iBAAK,mBAAkB;AACvB;UACF;AAEA,cAAI4G,SAASE,WAAWrI,WAAWC,YAAY,GAAG;AAChD,kBAAMoG,SAASiC,sBAAsBH,QAAAA;AACrC,gBAAI,CAAC9B,QAAQ;AACX,mBAAK,mBAAkB;AACvB;YACF;AACA,iBAAK,aAAaA,QAAQrG,WAAWC,cAAckI,UAAUF,WAAAA;AAC7D;UACF;AAEA,cAAIE,SAASE,WAAWrI,WAAWE,MAAM,GAAG;AAC1C,kBAAMqI,eAAeC,0BAA0BL,QAAAA;AAC/C,gBAAI,CAACI,cAAc;AACjB,mBAAK,mBAAkB;AACvB;YACF;AAEA,kBAAME,iBAAiBC,mBAAmBH,cAAc,GAAA;AACxD,iBAAK,aAAaE,gBAAgBzI,WAAWE,QAAQiI,UAAUF,WAAAA;AAC/D;UACF;AAEA,eAAK,mBAAkB;QACzB,GAAA,KAESU,oBAAoB,CAAC5F,UAAAA;AAC5BA,gBAAM8D,eAAc;AACpB,eAAK,eAAe7G,WAAWC,cAAc8C,KAAAA;QAC/C,GAAA,KAES6F,qBAAqB,CAAC7F,UAAAA;AAC7BA,gBAAM8D,eAAc;AACpB,eAAK,eAAe7G,WAAWE,QAAQ6C,KAAAA;QACzC,GAAA,KAES8F,iBAAiB,CAAC9F,UAAAA;AACzBA,gBAAM8D,eAAc;AAEpB,cAAI,KAAKnI,eAAesB,WAAWE,QAAQ;AACzC;UACF;AAEA,gBAAMvB,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,UAAU,KAAK2C,kBAAkB;AACpC;UACF;AAEA,cAAIwH,cAAc;AAClB,cAAIC,aAAa;AAEjB,mBAASlJ,QAAQ,GAAGA,QAAQlB,OAAO4C,SAAS,GAAG1B,SAAS,GAAG;AACzD,kBAAMmJ,QAAQrK,OAAOkB,KAAAA;AACrB,kBAAMoJ,MAAMtK,OAAOkB,QAAQ,CAAA;AAE3B,gBAAI,CAACmJ,SAAS,CAACC,KAAK;AAClB;YACF;AAEA,kBAAMlE,MAAMkE,IAAI/G,IAAI8G,MAAM9G;AAE1B,gBAAI6C,MAAMgE,YAAY;AACpBA,2BAAahE;AACb+D,4BAAcjJ;YAChB;UACF;AAEA,gBAAMqJ,aAAavK,OAAOmK,WAAAA;AAC1B,gBAAMK,WAAWxK,OAAOmK,cAAc,CAAA;AAEtC,cAAI,CAACI,cAAc,CAACC,UAAU;AAC5B;UACF;AAEA,gBAAMC,mBAAmBC,WAAW;YAClCnH,IAAIgH,WAAWhH,IAAIiH,SAASjH,KAAK;YACjCE,IAAI8G,WAAW9G,IAAI+G,SAAS/G,KAAK;UACnC,CAAA;AACA,gBAAMkH,WAAwB;YAC5BpH,GAAGkH,iBAAiBlH;YACpBE,GAAGgH,iBAAiBhH;YACpBI,OAAO;YACPE,OAAO;YACPE,QAAQ;YACRC,QAAQ;YACRP,UAAU;YACVU,cAAc;UAChB;AAEA,gBAAMoC,gBAA8B;eAC/BzG,OAAO4K,MAAM,GAAGT,cAAc,CAAA;YACjCQ;eACG3K,OAAO4K,MAAMT,cAAc,CAAA;;AAGhC,gBAAMU,gBAAgBV,cAAc;AACpC,gBAAMtD,mBAAmBC,sBAAsBL,aAAAA;AAC/C,eAAK,YAAYI,kBAAkBzC,KAAAA;AACnC,eAAKhE,qBAAqByK;AAC1B,eAAK,YAAY,sBAAsBA,eAAezG,KAAAA;QACxD,GAAA,KAES0G,oBAAoB,CAAC1G,UAAAA;AAC5BA,gBAAM8D,eAAc;AAEpB,cAAI,KAAKnI,eAAesB,WAAWE,QAAQ;AACzC;UACF;AAEA,gBAAMvB,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,UAAU,KAAK8C,kBAAkB;AACpC;UACF;AAEA,cAAIiI,cAAc;AAClB,cAAIC,eAAe3I,OAAO4I;AAE1B,mBAAS/J,QAAQ,GAAGA,QAAQlB,OAAO4C,SAAS,GAAG1B,SAAS,GAAG;AACzD,kBAAM4G,WAAW9H,OAAOkB,QAAQ,CAAA;AAChC,kBAAMsD,OAAOxE,OAAOkB,QAAQ,CAAA;AAE5B,gBAAI,CAAC4G,YAAY,CAACtD,MAAM;AACtB;YACF;AAEA,kBAAM0G,OAAO1G,KAAKjB,IAAIuE,SAASvE;AAE/B,gBAAI2H,OAAOF,cAAc;AACvBA,6BAAeE;AACfH,4BAAc7J;YAChB;UACF;AAEA,cAAI6J,cAAc,KAAKA,cAAc/K,OAAO4C,SAAS,GAAG;AACtD,iBAAK,qBAAqBmI,aAAa3G,KAAAA;UACzC;QACF,GAAA,KAES+G,aAAa,CAAC/G,UAAAA;AACrBA,gBAAM8D,eAAc;AAEpB,gBAAMkD,YAAY,CAAC,KAAKnL;AACxB,eAAKA,WAAWmL;AAChB,eAAK,YAAY,eAAeA,WAAWhH,KAAAA;QAC7C,GAAA,KAESiH,mBAAmB,CAACjH,UAAAA;AAC3BA,gBAAM8D,eAAc;AAEpB,gBAAMkD,YAAY,CAAC,KAAKlL;AACxB,eAAKA,aAAakL;AAClB,eAAK,YAAY,eAAeA,WAAWhH,KAAAA;QAC7C,GAAA,KAESkH,oBAAoB,CAAClH,UAAAA;AAC5BA,gBAAM8D,eAAc;AAEpB,eAAK,gBAAgB,KAAK/H,WAAW,GAAGiE,KAAAA;QAC1C,GAAA,KAESmH,oBAAoB,CAACnH,UAAAA;AAC5BA,gBAAM8D,eAAc;AAEpB,eAAK,gBAAgB,KAAK/H,WAAW,GAAGiE,KAAAA;QAC1C,GAAA,KAESoH,wBAAwB,CAACpH,UAAAA;AAChCA,gBAAM8D,eAAc;AACpB,gBAAMZ,SAASlD,MAAMkD;AACrB,cAAI,EAAEA,kBAAkBC,mBAAmB;AACzC;UACF;AACA,eAAK,gBAAgBlF,OAAOiF,OAAOnG,KAAK,GAAGiD,KAAAA;QAC7C,GAAA,KAESqH,uBAAuB,CAACrH,UAAAA;AAC/BA,gBAAM8D,eAAc;AACpB,gBAAMZ,SAASlD,MAAMkD;AACrB,cAAI,EAAEA,kBAAkBC,mBAAmB;AACzC;UACF;AACA,gBAAMG,SAASrF,OAAOiF,OAAOnG,KAAK;AAClC,cAAIkB,OAAOuF,MAAMF,MAAAA,GAAS;AACxBJ,mBAAOnG,QAAQuK,OAAO,KAAKvL,QAAQ;AACnC;UACF;AACA,eAAK,gBAAgBuH,QAAQtD,KAAAA;AAC7BkD,iBAAOnG,QAAQuK,OAAO,KAAKvL,QAAQ;QACrC,GAAA,KAEA,iBAAiB,CAACgB,UAA0BqE,KAAKC,IAAI,GAAGD,KAAKgB,IAAI,IAAIhB,KAAKmG,MAAMxK,KAAAA,CAAAA,CAAAA,GAAAA,KAEhF,kBAAkB,CAACA,OAAeiD,UAAAA;AAChC,gBAAMgH,YAAY,KAAK,eAAejK,KAAAA;AACtC,cAAI,KAAKhB,aAAaiL,WAAW;AAC/B,iBAAK5I,cAAa;AAClB;UACF;AACA,eAAKrC,WAAWiL;AAChB,eAAK,YAAY,oBAAoB,KAAKjL,UAAUiE,KAAAA;AACpD,eAAK5B,cAAa;QACpB,GAAA,KAEA,cAAc,CAASZ,MAAqBT,OAAeiD,UAAAA;AACzD,gBAAMkD,SAAS,KAAK,gBAAe;AACnC,gBAAM+B,SAAqC;YAAElI;YAAOiD;UAAM;AAE1DwH,+BAAqBtE,QAAQ1F,MAAMyH,MAAAA;QACrC;;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC9nCAwC,uCA2BiCC,eAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAItBC,mBAGAC,eAGAC,YAGAC,eAGAC,iBAGAC,cAAAA,2BAnBEC;;;;AA3Bb,IAAAR,mBAAqB;AAErB;AACA;AACA;AAEA;AACA;aAGCS,UAAU;MACTC,KAAK;MACLC,QAAQC;MACRC,WAAAA;AACE,eAAOC;;;;sCAI2B,KAAKC,aAAaC,IAAI;+CACb,KAAKC,eAAe;cACrD,KAAKC,UAAU;;;;;MAK3B;IACF,CAAA,GAAAC,SAIGC,KAAiB;MAAEC,MAAMC;MAAQC,SAAS;IAAK,CAAA,GAAAC,SAG/CJ,KAAuC;MAAEC,MAAMI;MAAQF,SAAS;IAAM,CAAA,GAAAG,SAGtEN,KAAa;MAAEG,SAAS;MAAMI,cAAc;IAAc,CAAA,GAAAC,SAG1DR,KAAiC;MAAEG,SAAS;MAAMI,cAAc;IAAY,CAAA,GAAAE,SAG5ET,KAAa;MAAEC,MAAMS;MAAQP,SAAS;MAAMI,cAAc;IAAE,CAAA,GAAAI,SAG5DX,KAAa;MAAEC,MAAMS;MAAQP,SAAS;MAAMI,cAAc;IAAE,CAAA;AAlBxD,IAAMnB,cAAN,eAA0BP,gBAAAA,aAAAA;;eAItBC,mBAGAC,eAGAC,YAGAC,eAGAC,iBAGAC,cAAAA,WAAAA,GAAAA,GAAAA,CAAAA,cAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YAfAL;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;WAnBsBN,aAAAA;;MAItBC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAGPC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAEd;MACA;MACA;MAEA,IAAIyB,iBAAyB;AAC3B,cAAM,EAAEA,eAAc,IAAK,KAAKjB;AAChC,eAAOiB;MACT;MAEA,IAAIjB,eAAwB;AAC1B,YAAI,KAAKb,eAAe+B,WAAWC,cAAc;AAC/C,cAAI,CAAC,KAAK/B,UAAUgC,MAAMC,QAAQ,KAAKjC,MAAM,GAAG;AAC9C,kBAAM6B,kBAAiB;AACvB,kBAAMhB,QAAO;aACR,KAAKZ,IAAI;cACR,KAAKC,OAAO,qBAAqB2B,eAAAA;;;AAIvC,mBAAO;cAAEhB,MAAAA;cAAMgB,gBAAAA;YAAe;UAChC;AAEA,iBAAOK,uBAAuB,KAAKlC,QAA6B,KAAKC,MAAM,KAAKC,OAAO;QACzF;AAEA,YAAI,KAAKH,eAAe+B,WAAWK,QAAQ;AACzC,cAAIH,MAAMC,QAAQ,KAAKjC,MAAM,GAAG;AAC9B,mBAAOoC,kBAAkB,KAAKpC,QAAQ,KAAKC,MAAM,KAAKC,SAAS;cAC7DC,UAAU,KAAKA;cACfC,OAAO,KAAKA;YACd,CAAA;UACF;AAEA,gBAAMyB,kBAAiB;AACvB,gBAAMhB,QAAO;WACR,KAAKZ,IAAI;YACR,KAAKC,OAAO,qBAAqB2B,eAAAA;;;AAIvC,iBAAO;YAAEhB,MAAAA;YAAMgB,gBAAAA;UAAe;QAChC;AAEA,cAAMA,iBAAiB;AACvB,cAAMhB,OAAO;SACR,KAAKZ,IAAI;UACR,KAAKC,OAAO,qBAAqB2B,cAAAA;;;AAIvC,eAAO;UAAEhB;UAAMgB;QAAe;MAChC;MAEA,IAAId,aAAqB;AACvB,eAAO,KAAK,eAAe,YAAY;MACzC;MAEA,IAAIsB,cAAuB;AACzB,eAAO,KAAK;MACd;MAEA;MAqBA;MA2BAC,mBAAmBC,OAAoB;AACrC,aAAK,aAAaA,KAAAA;MACpB;MAEAC,uBAA6B;AAC3B,YAAI,KAAK,cAAc;AACrBC,uBAAa,KAAK,YAAY;AAE9B,eAAK,eAAe;QACtB;AAEA,YAAI,KAAK,mBAAmB;AAC1BA,uBAAa,KAAK,iBAAiB;AAEnC,eAAK,oBAAoB;QAC3B;MACF;;;;;AAlJK,cAAA,GAAA,IAAA,GAAA,KAII1C,4BAAU2C,YAAA,IAAA,GAAV3C,kBAAAA,IAAAA,IAAAA,KAGAC,uBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,sBAAAA,aAAAA,IAAAA,GAAAA,KAET,eAA8B,MAAA,KAC9B,oBAAmC,MAAA,KACnC,eAAe,OAAA,KA2Df,mBAAmB,OAAOmC,UAAAA;AACxBA,gBAAMI,eAAc;AAEpB,cAAI;AACF,kBAAMC,UAAUC,UAAUC,UAAU,KAAKjB,cAAc;AAEvD,gBAAI,KAAK,cAAc;AACrBY,2BAAa,KAAK,YAAY;YAChC;AAEA,iBAAK,eAAeM,OAAOC,WAAW,MAAA;AACpC,mBAAK,eAAe;AACpB,mBAAKC,cAAa;YACpB,GAAG,GAAA;AAEH,iBAAKA,cAAa;UACpB,SAASC,OAAO;AACdC,oBAAQD,MAAM,gCAAgCA,KAAAA;UAChD;QACF,GAAA,KAEA,eAAe,CAACX,UAAAA;AACdA,gBAAMI,eAAc;AAEpB,cAAI,KAAK,cAAc;AACrB,iBAAK,eAAe;AACpB,iBAAKM,cAAa;AAClB,iBAAK,KAAKG;UACZ;AAEA,cAAI,KAAK,mBAAmB;AAC1BX,yBAAa,KAAK,iBAAiB;UACrC;AAEA,eAAK,eAAe;AACpB,eAAKQ,cAAa;AAElB,eAAK,oBAAoBF,OAAOC,WAAW,MAAA;AACzC,iBAAK,eAAe;AAEpB,iBAAKC,cAAa;UACpB,GAAG,GAAA;QACL,GAAA,KAESnC,kBAAkB,CAACyB,UAAAA;AAC1B,eAAK,KAAK,iBAAiBA,KAAAA;QAC7B;;IAmBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC9KAc,uCAgJ6BC,eAAAA,QAAAA,QAAAA,QAkBlBC,iBAUAC,cAGAC,YAAAA,aA5JLC,0BA6HOC,SA2Fb;;;;AA3OA,IAAAN,mBAA0C;AAE1C;AACA;AAgBA,IAAMK,iBAAiB,MAAc,yBAAyBE,OAAOC,WAAU,CAAA;aAE9EC,UAAU;MACTC,KAAK;MACLC,UAAU;MACVC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsHV,CAAA,GAAAC,SAYGC,KAAgB;MACfC,SAAS;MACTC,cAAc;MACdC,WAAAA;AACG,aAAiBC,sBAAqB;MACzC;IACF,CAAA,GAAAC,SAGCL,KAAa;MACZM,MAAMC;MACNN,SAAS;MACTC,cAAc;MACdC,WAAAA;AACG,aAAiBK,mBAAkB;MACtC;IACF,CAAA,GAAAC,SAGCT,KAAc;MAAEM,MAAMI;MAAST,SAAS;IAAK,CAAA;AA9BzC,IAAMV,UAAN,eAAsBL,gBAAAA,aAAAA;;eAkBlBC,iBAUAC,cAGAC,YAAAA,WAAAA,GAAAA,GAAAA,CAAAA,UAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YAbAF;;;;;YAUAC;;;;;YAGAC;;;;WA/BkBH,aAAAA;;MAC3B;MACA;MACA;MAIA,IAAWyB,iBAAqC;AAC9C,eAAO,KAAK;MACd;MASSxB;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;MAUTC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAEbuB,oBAA0B;AACxB,aAAK,gBAAe;AACpB,aAAK,YAAW;MAClB;MAEAC,uBAA6B;AAC3B,aAAK,kBAAkB;AACvB,aAAK,eAAe;MACtB;MAEAC,SAAyB;AACvB,eAAOC;;;;;;yBAMc,KAAK5B,SAAS;;;;;MAKrC;MAEAiB,wBAA8B;AAC5B,YAAI,CAAC,KAAK,cAAc;AACtB,eAAKY,cAAa;AAClB;QACF;AACA,aAAK,eAAc;MACrB;MAEAR,qBAA2B;AACzB,YAAI,CAAC,KAAK,cAAc;AACtB,eAAKQ,cAAa;AAClB;QACF;AACA,aAAK,YAAW;MAClB;MAEA,iBAAc;AACZ,aAAKC,QAAQ9B,YAAY,KAAKA;AAE9B,YAAI,KAAK,iBAAiB;AACxB,eAAK,gBAAgB8B,QAAQ9B,YAAY,KAAKA;QAChD;MACF;MAEA,cAAW;AACT,cAAMC,SAASmB,OAAOW,SAAS,KAAK9B,MAAM,IAAI,KAAKA,SAAS;AAC5D,aAAK+B,MAAMC,YAAY,yBAAyB,GAAGhC,MAAAA,IAAU;MAC/D;MAEA,kBAAe;AACb,aAAK+B,MAAMC,YAAY,8BAA8B,KAAK,WAAW;MACvE;;;;;AAxFK,cAAA,GAAA,IAAA,GAAA,KACL,eAAWC,YAAA,IAAA,GAAG/B,eAAAA,IAAAA,KACd,kBAAsC,MAAA,KACtC,eAAe,OAAA,KAeNH,0BAAAA,gBAAAA,IAAAA,GAAAA,KAUAC,uBAAAA,aAAAA,MAAS,CAAA,GAAA,KAGTC,qBAAAA,WAAAA,MAAO,KAAA;;IA0DlB;AAEA,IAAA,kBAAe;MACbE,SAAAA;IACF;;;;;ACnOA,IAAa+B;AAAb;;;AAAO,IAAMA,oBAAN,MAAMA;MACX;MACA;MAKA;MAEA,YAAYC,SAAmC;aAP/C,WAIW;aACX,UAAU;aA+BV,qBAAqB,CAACC,UAAAA;AACpB,cAAI,CAAC,KAAK,UAAU;AAClB;UACF;AAEA,gBAAM,EAAEC,OAAOC,SAASC,SAAQ,IAAK,KAAK;AAC1C,gBAAMC,OAAOJ,MAAMK,aAAY;AAE/B,cAAID,KAAKE,KAAK,CAACC,SAASA,gBAAgBC,WAAWD,KAAKE,aAAa,oBAAA,CAAA,GAAwB;AAC3F;UACF;AAEA,cAAIL,KAAKM,SAAST,KAAAA,GAAQ;AACxB;UACF;AAEA,cAAIC,WAAWE,KAAKM,SAASR,OAAAA,GAAU;AACrC;UACF;AAEA,cAAIC,SAASG,KAAK,CAACK,YAAYP,KAAKM,SAASC,OAAAA,CAAAA,GAAW;AACtD;UACF;AAEA,eAAK,WAAWX,KAAAA;QAClB;aAEA,iBAAiB,CAACA,UAAAA;AAChB,cAAIA,MAAMY,QAAQ,YAAY,CAAC,KAAK,UAAU;AAC5C;UACF;AAEAZ,gBAAMa,eAAc;AAEpB,gBAAMC,SAASC,SAASC;AAExB,cAAI,CAACF,QAAQ;AACX,iBAAK,WAAWd,KAAAA;AAChB;UACF;AAEA,gBAAM,EAAEC,OAAOC,SAASC,SAAQ,IAAK,KAAK;AAC1C,gBAAMC,OAAOJ,MAAMK,aAAY;AAE/B,cAAID,KAAKM,SAAST,KAAAA,KAAUA,MAAMgB,SAASH,MAAAA,GAAS;AAClD,iBAAK,WAAWd,KAAAA;AAChB;UACF;AAEA,cAAIE,YAAYE,KAAKM,SAASR,OAAAA,KAAYA,QAAQe,SAASH,MAAAA,IAAU;AACnE,iBAAK,WAAWd,KAAAA;AAChB;UACF;AAEA,cAAIG,SAASG,KAAK,CAACK,YAAYP,KAAKM,SAASC,OAAAA,KAAYA,QAAQM,SAASH,MAAAA,CAAAA,GAAU;AAClF,iBAAK,WAAWd,KAAAA;UAClB;QACF;AArFE,aAAK,aAAaD,QAAQmB;MAC5B;MAEAC,QAAQC,SAA+B;AACrC,aAAK,WAAW;UACdnB,OAAOmB,QAAQnB;UACfC,SAASkB,QAAQlB,WAAW;UAC5BC,WAAWiB,QAAQjB,YAAY,CAAA,GAAIkB,OAAO,CAACC,OAA0BA,cAAcC,WAAAA;QACrF;AAEA,YAAI,CAAC,KAAK,SAAS;AACjBR,mBAASS,iBAAiB,eAAe,KAAK,oBAAoB,IAAA;AAClET,mBAASS,iBAAiB,WAAW,KAAK,gBAAgB,IAAA;AAC1D,eAAK,UAAU;QACjB;MACF;MAEAC,aAAmB;AACjB,YAAI,CAAC,KAAK,SAAS;AACjB;QACF;AAEAV,iBAASW,oBAAoB,eAAe,KAAK,oBAAoB,IAAA;AACrEX,iBAASW,oBAAoB,WAAW,KAAK,gBAAgB,IAAA;AAC7D,aAAK,UAAU;AACf,aAAK,WAAW;MAClB;MAEA;MA2BA;IA+BF;;;;;ACxGA,IAkBMC,UAEAC,kBA+BOC,0BA+BAC,4BAWAC,2BAYAC,+BAYAC;AArHb;;;;AAkBA,IAAMN,WAAW,oBAAIO,QAAAA;AAErB,IAAMN,mBAAmB,CACvBO,MACAC,YAAAA;AAEA,UAAIA,QAAQC,WAAWF,IAAAA,GAAO;AAC5B,eAAO;MACT;AAEA,YAAMG,WAAWF,QAAQG,QAAQJ,IAAAA;AAEjC,UAAI,CAACG,UAAU;AACb,eAAO;MACT;AAEA,YAAME,QAAQF,SAASE,SAASL,QAAQ;AAExC,UAAI,EAAEK,iBAAiBC,cAAc;AACnC,eAAO;MACT;AAEA,YAAMC,UAAUJ,SAASI,WAAWJ,SAASI,mBAAmBD,cAAcH,SAASI,UAAU;AAEjG,YAAMC,WAAWL,SAASK,UAAUC,OAAO,CAACC,YAAoCA,mBAAmBJ,WAAAA,KAAgB,CAAA;AAEnH,aAAO;QACLD;QACAE;QACAC;MACF;IACF;AAEO,IAAMd,2BAA2B,CACtCM,MACAW,WACAV,YAAAA;AAEA,YAAMW,aAAa,IAAIC,kBAAkB;QACvCF,UAAUG,OAAK;AACb,cAAIb,QAAQC,WAAWF,IAAAA,GAAO;AAC5B;UACF;AAEAW,oBAAUI,KAAKf,MAAMc,KAAAA;QACvB;MACF,CAAA;AAEA,aAAO;QACLE,SAAAA;AACE,gBAAMC,UAAUxB,iBAAiBO,MAAMC,OAAAA;AACvC,cAAI,CAACgB,SAAS;AACZL,uBAAWM,WAAU;AACrB;UACF;AAEAN,qBAAWO,QAAQF,OAAAA;QACrB;QACAC,aAAAA;AACEN,qBAAWM,WAAU;QACvB;MACF;IACF;AAEO,IAAMvB,6BAA6B,CAACK,MAAmBoB,WAAAA;AAC5D,UAAIC,UAAU7B,SAAS8B,IAAItB,IAAAA;AAE3B,UAAI,CAACqB,SAAS;AACZA,kBAAU,oBAAIE,IAAAA;AACd/B,iBAASgC,IAAIxB,MAAMqB,OAAAA;MACrB;AAEAA,cAAQI,IAAIL,MAAAA;IACd;AAEO,IAAMxB,4BAA4B,CAACI,SAAAA;AACxC,YAAMqB,UAAU7B,SAAS8B,IAAItB,IAAAA;AAE7B,UAAI,CAACqB,SAAS;AACZ;MACF;AAEAA,cAAQK,QAAQ,CAACN,WAAAA;AACfA,eAAOJ,OAAM;MACf,CAAA;IACF;AAEO,IAAMnB,gCAAgC,CAACG,SAAAA;AAC5C,YAAMqB,UAAU7B,SAAS8B,IAAItB,IAAAA;AAE7B,UAAI,CAACqB,SAAS;AACZ;MACF;AAEAA,cAAQK,QAAQ,CAACN,WAAAA;AACfA,eAAOF,WAAU;MACnB,CAAA;IACF;AAEO,IAAMpB,4BAA4B,CAACE,SAAAA;AACxCJ,gCAA0BI,IAAAA;IAC5B;;;;;AC1CO,SAAS2B,aACdC,UAAsC,CAAC,GAAC;AAExC,SAAO,CACLC,gBACAC,YAAAA;AAEAA,YAAQC,eAAe,WAAA;AACrBC,sBAAgB,IAAI;AAEpB,YAAMC,UACJL,QAAQK,YACP,CAACC,SAAAA;AACA,eAAO;UACLC,OAAOP,QAAQO,QAAQD,IAAAA;UACvBE,SAASR,QAAQQ,UAAUF,IAAAA;UAC3BG,UAAUT,QAAQS,WAAWH,IAAAA;QAC/B;MACF;AAEF,YAAMI,SAASC,yBACb,MACA,CAACC,UAAAA;AACCX,uBAAeY,KAAK,MAAMD,KAAAA;MAC5B,GACA;QACEP;QACAS,UAAUd,QAAQc;MACpB,CAAA;AAGFC,iCAA2B,MAAML,MAAAA;AAEjC,UAAI,KAAKM,aAAa;AACpBC,kCAA0B,IAAI;MAChC;IACF,CAAA;EACF;AACF;AAnHA,IAuBMC,kBAEAC,YA2BAf;AApDN;;;;AAqHA;AA9FA,IAAMc,mBAAmB,oBAAIE,QAAAA;AAE7B,IAAMD,aAAa,CACjBb,MACAe,MACAC,MACAC,gBAAgB,UAAK;AAErB,YAAMC,WAAWlB,KAAKe,IAAAA;AAErBf,WAAoCe,IAAAA,IAAQ,YAAaI,MAAe;AACvE,YAAIF,eAAe;AACjBD,eAAKT,KAAK,IAAI;QAChB;AAEA,YAAIa;AAEJ,YAAI,OAAOF,aAAa,YAAY;AAClCE,mBAAUF,SAA+CG,MAAM,MAAMF,IAAAA;QACvE;AAEA,YAAI,CAACF,eAAe;AAClBD,eAAKT,KAAK,IAAI;QAChB;AAEA,eAAOa;MACT;IACF;AAEA,IAAMtB,kBAAkB,CAACE,SAAAA;AACvB,UAAIY,iBAAiBU,IAAItB,IAAAA,GAAO;AAC9B;MACF;AAEAY,uBAAiBW,IAAIvB,IAAAA;AAErBa,iBAAWb,MAAM,qBAAqB,WAAA;AACpCW,kCAA0B,IAAI;MAChC,CAAA;AAEAE,iBAAWb,MAAM,eAAe,WAAA;AAC9BW,kCAA0B,IAAI;MAChC,CAAA;AAEAE,iBACEb,MACA,wBACA,WAAA;AACEwB,sCAA8B,IAAI;MACpC,GACA,IAAA;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7EAC,uCAmLkCC,eAAAA,SAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAIvBC,mBAGAC,eAGAC,iBAGAC,mBAGAC,iBAGAC,iBAGAC,cAAAA,4BAtBEC;;;;AAnLb,IAAAT,mBAAqB;AAErB;AACA;AAQA;AAEA;AACA;AACA;aAmCCU,UAAU;MACTC,KAAK;MACLC,QAAQC;MACRC,WAAAA;AACE,cAAMC,kBAAkB,KAAKT,YAAY;AACzC,cAAMU,kBAAkB,KAAKV,YAAY;AACzC,cAAMW,WAAW,KAAKf,eAAegB,WAAWC;AAChD,cAAMhB,SAASc,YAAYG,MAAMC,QAAQ,KAAKlB,MAAM,IAAK,KAAKA,SAA0B;AAExF,eAAOmB;;;;;;;sCAO2B,KAAKlB,WAAW,WAAW,EAAA;uBAC1C,KAAKmB,UAAU;;;sCAGA,KAAKnB,WAAW,SAAS,MAAA;;;;;;;;sCAQzB,KAAKC,aAAa,WAAW,EAAA;uBAC5C,KAAKmB,gBAAgB;;;sCAGN,KAAKnB,aAAa,WAAW,SAAA;;;;;;;;;uBAS5C,KAAKoB,UAAU;;;;;;;;;;;;uBAYf,KAAKC,cAAc;0BACfvB,UAAUA,OAAOwB,UAAUC,qBAAsB,CAACX,QAAAA;;;;;;;;;;;;uBAYtD,KAAKY,iBAAiB;0BAClB1B,UAAUA,OAAOwB,UAAUG,qBAAsB,CAACb,QAAAA;;;;;;;;;;;;uBAYtD,KAAKc,sBAAsB;0BACxB,CAACd,QAAAA;;;;;;;;;;;;;;;uBAeJ,KAAKe,iBAAiB;0BACnBjB,eAAAA;;;;;gBAKV,KAAKT,QAAQ;;;;;;;;uBAQN,KAAK2B,iBAAiB;0BACnBjB,eAAAA;;;;;;;;gCAQM,KAAKT,QAAQ,SAAS,CAAA,SAAU,IAAA,UAAc,IAAA,WAAgB,KAAK2B,mBAAmB;;;;gCAItF,KAAK1B,KAAK,SAAS,CAAA,SAAU,CAAA,UAAW,CAAA,WAAY,KAAK2B,gBAAgB;;;;;MAKvG;IACF,CAAA,GAAAC,UAIGC,KAAiB;MAAEC,SAAS;IAAK,CAAA,GAAAC,SAGjCF,KAAuC;MAAEG,MAAMC;MAAQH,SAAS;IAAM,CAAA,GAAAI,SAGtEL,KAAc;MAAEG,MAAMG;MAASL,SAAS;MAAMM,cAAc;IAAK,CAAA,GAAAC,SAGjER,KAAc;MAAEG,MAAMG;MAASL,SAAS;MAAMM,cAAc;IAAM,CAAA,GAAAE,SAGlET,KAAa;MAAEG,MAAMO;MAAQT,SAAS;MAAMM,cAAc;IAAE,CAAA,GAAAI,SAG5DX,KAAa;MAAEG,MAAMO;MAAQT,SAAS;MAAMM,cAAc;IAAE,CAAA,GAAAK,SAG5DZ,KAAa;MAAEG,MAAMO;MAAQT,SAAS;MAAMM,cAAc;IAAE,CAAA;AArBxD,IAAMnC,eAAN,eAA2BR,gBAAAA,aAAAA;;eAIvBC,mBAGAC,eAGAC,iBAGAC,mBAGAC,iBAGAC,iBAGAC,cAAAA,WAAAA,GAAAA,GAAAA,CAAAA,eAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YAlBAN;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;WAtBuBP,aAAAA;;MAIvBC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAEd;MAQA;MAOA;MAMA;MAsNA;MAEA;;;;;AArQK,cAAA,GAAA,IAAA,GAAA,KAIIN,4BAAUgD,YAAA,IAAA,GAAVhD,kBAAAA,IAAAA,IAAAA,KAGAC,uBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,2BAAAA,kBAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,MAAmB,CAAA,GAAA,KAGnBC,yBAAAA,gBAAAA,MAAmB,CAAA,GAAA,KAGnBC,sBAAAA,aAAAA,MAAgB,CAAA,GAAA,KAEzB,kBAAkB,MAAA;AAChB,gBAAM2C,OAAO,KAAKC,YAAW;AAC7B,cAAID,gBAAgBE,cAAcF,KAAKG,gBAAgBrD,aAAa;AAClE,mBAAOkD,KAAKG;UACd;AACA,iBAAO;QACT,GAAA,KAEA,mBAAmB,MAAA;AACjB,cAAI,CAAClC,MAAMC,QAAQ,KAAKlB,MAAM,GAAG;AAC/B,mBAAO;UACT;AACA,iBAAO,KAAKA;QACd,GAAA,KAEA,cAAc,CAASqC,MAAqBe,OAAeC,UAAAA;AACzD,gBAAMC,SAAS,KAAK,gBAAe;AACnC,gBAAMC,SAAqC;YAAEH;YAAOC;UAAM;AAC1DG,+BAAqBF,QAAQjB,MAAMkB,MAAAA;QACrC,GAAA,KAEA,cAAc,CAACvD,QAAsBqD,UAAAA;AACnC,eAAKrD,SAASA;AACd,eAAK,YAAY,iBAAiBA,QAAQqD,KAAAA;QAC5C,GAAA,KAESjC,aAAa,CAACiC,UAAAA;AACrBA,gBAAMI,eAAc;AACpB,gBAAMC,YAAY,CAAC,KAAKzD;AACxB,eAAKA,WAAWyD;AAChB,eAAK,YAAY,eAAeA,WAAWL,KAAAA;QAC7C,GAAA,KAEShC,mBAAmB,CAACgC,UAAAA;AAC3BA,gBAAMI,eAAc;AACpB,gBAAMC,YAAY,CAAC,KAAKxD;AACxB,eAAKA,aAAawD;AAClB,eAAK,YAAY,eAAeA,WAAWL,KAAAA;QAC7C,GAAA,KAES/B,aAAa,CAAC+B,UAAAA;AACrBA,gBAAMI,eAAc;AAEpB,cAAI,KAAK1D,eAAegB,WAAW4C,cAAc;AAC/C,kBAAMC,YAA8B;cAClCC,IAAI;gBAAEC,GAAG;gBAAMC,GAAG;cAAI;cACtBC,IAAI;gBAAEF,GAAG;gBAAMC,GAAG;cAAE;YACtB;AACA,iBAAK/D,SAAS4D;AACd,iBAAK,YAAY,iBAAiBA,WAAUP,KAAAA;AAC5C;UACF;AAEA,gBAAMO,WAAyB;YAC7B;cAAEE,GAAG;cAAGC,GAAG;YAAE;YACb;cAAED,GAAG;cAAGC,GAAG;YAAE;;AAEf,eAAK/D,SAAS4D;AACd,eAAK,YAAY,iBAAiBA,UAAUP,KAAAA;AAC5C,eAAK,YAAY,sBAAsB,MAAMA,KAAAA;QAC/C,GAAA,KAESzB,yBAAyB,CAACyB,UAAAA;AACjCA,gBAAMI,eAAc;AAEpB,gBAAMzD,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,UAAUA,OAAOwB,UAAUG,mBAAmB;AACjD;UACF;AAEA,gBAAMsC,YAAYjE,OAAOwB,SAAS;AAClC,gBAAM0C,OAAOD,YAAY,IAAI,IAAIA,YAAY;AAE7C,gBAAME,cAA4BnE,OAAOoE,IAAI,CAACC,OAAOC,UAAAA;AACnD,kBAAMC,UAAuB;cAAE,GAAGF;YAAM;AAExC,gBAAIC,UAAU,GAAG;AACfC,sBAAQT,IAAI;YACd,WAAWQ,UAAUL,WAAW;AAC9BM,sBAAQT,IAAI;YACd,OAAO;AACLS,sBAAQT,IAAIlB,OAAO4B,YAAYN,OAAOI,OAAOG,QAAQ,CAAA,CAAA;YACvD;AAEA,mBAAOF,QAAQG;AACf,mBAAOH,QAAQI;AACf,mBAAOJ,QAAQK;AACf,mBAAOL,QAAQM;AACf,mBAAON,QAAQO;AAEf,mBAAOP;UACT,CAAA;AAEA,gBAAMQ,mBAAmBC,sBAAsBb,WAAAA;AAC/C,eAAK,YAAYY,kBAAkB1B,KAAAA;QACrC,GAAA,KAES9B,iBAAiB,CAAC8B,UAAAA;AACzBA,gBAAMI,eAAc;AAEpB,cAAI,KAAK1D,eAAegB,WAAWC,QAAQ;AACzC;UACF;AAEA,gBAAMhB,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,UAAUA,OAAOwB,UAAUC,mBAAmB;AACjD;UACF;AAEA,cAAIwD,cAAc;AAClB,cAAIC,aAAa;AAEjB,mBAASZ,QAAQ,GAAGA,QAAQtE,OAAOwB,SAAS,GAAG8C,SAAS,GAAG;AACzD,kBAAMa,QAAQnF,OAAOsE,KAAAA;AACrB,kBAAMc,MAAMpF,OAAOsE,QAAQ,CAAA;AAE3B,gBAAI,CAACa,SAAS,CAACC,KAAK;AAClB;YACF;AAEA,kBAAMC,MAAMD,IAAItB,IAAIqB,MAAMrB;AAE1B,gBAAIuB,MAAMH,YAAY;AACpBA,2BAAaG;AACbJ,4BAAcX;YAChB;UACF;AAEA,gBAAMgB,aAAatF,OAAOiF,WAAAA;AAC1B,gBAAMM,WAAWvF,OAAOiF,cAAc,CAAA;AAEtC,cAAI,CAACK,cAAc,CAACC,UAAU;AAC5B;UACF;AAEA,gBAAMC,mBAAmBC,WACvB;YACE3B,IAAIwB,WAAWxB,IAAIyB,SAASzB,KAAK;YACjCC,IAAIuB,WAAWvB,IAAIwB,SAASxB,KAAK;UACnC,GACA;YAAE2B,MAAM;YAAIC,MAAM;UAAE,CAAA;AAEtB,gBAAMC,WAAwB;YAC5B9B,GAAG0B,iBAAiB1B;YACpBC,GAAGyB,iBAAiBzB;YACpBW,OAAO;YACPC,OAAO;YACPC,QAAQ;YACRC,QAAQ;YACRC,UAAU;YACVe,cAAc;UAChB;AAEA,gBAAMC,gBAA8B;eAC/B9F,OAAO+F,MAAM,GAAGd,cAAc,CAAA;YACjCW;eACG5F,OAAO+F,MAAMd,cAAc,CAAA;;AAGhC,gBAAMe,gBAAgBf,cAAc;AACpC,gBAAMF,mBAAmBC,sBAAsBc,aAAAA;AAC/C,eAAK,YAAYf,kBAAkB1B,KAAAA;AACnC,eAAK,YAAY,sBAAsB2C,eAAe3C,KAAAA;QACxD,GAAA,KAES3B,oBAAoB,CAAC2B,UAAAA;AAC5BA,gBAAMI,eAAc;AAEpB,cAAI,KAAK1D,eAAegB,WAAWC,QAAQ;AACzC;UACF;AAEA,gBAAMhB,SAAS,KAAK,iBAAgB;AACpC,cAAI,CAACA,UAAUA,OAAOwB,UAAUG,mBAAmB;AACjD;UACF;AAEA,cAAIsE,cAAc;AAClB,cAAIC,eAAetD,OAAOuD;AAE1B,mBAAS7B,QAAQ,GAAGA,QAAQtE,OAAOwB,SAAS,GAAG8C,SAAS,GAAG;AACzD,kBAAM8B,WAAWpG,OAAOsE,QAAQ,CAAA;AAChC,kBAAM+B,OAAOrG,OAAOsE,QAAQ,CAAA;AAE5B,gBAAI,CAAC8B,YAAY,CAACC,MAAM;AACtB;YACF;AAEA,kBAAMC,OAAOD,KAAKvC,IAAIsC,SAAStC;AAE/B,gBAAIwC,OAAOJ,cAAc;AACvBA,6BAAeI;AACfL,4BAAc3B;YAChB;UACF;AAEA,cAAI2B,cAAc,KAAKA,cAAcjG,OAAOwB,SAAS,GAAG;AACtD,kBAAMsE,gBAA8B9F,OACjCuG,OAAO,CAACC,GAAGC,eAAeA,eAAeR,WAAAA,EACzC7B,IAAI,CAACC,UAAAA;AACJ,qBAAO;gBAAE,GAAGA;cAAM;YACpB,CAAA;AAEF,kBAAMU,mBAAmBC,sBAAsBc,aAAAA;AAC/C,iBAAK,YAAYf,kBAAkB1B,KAAAA;AAEnC,kBAAMqD,YAAYT,cAAc;AAChC,iBAAK,YAAY,sBAAsBS,WAAWrD,KAAAA;UACpD;QACF,GAAA,KAESvB,oBAAoB,CAACuB,UAAAA;AAC5BA,gBAAMI,eAAc;AACpB,eAAK,gBAAgB,KAAKtD,WAAW,GAAGkD,KAAAA;QAC1C,GAAA,KAESxB,oBAAoB,CAACwB,UAAAA;AAC5BA,gBAAMI,eAAc;AACpB,eAAK,gBAAgB,KAAKtD,WAAW,GAAGkD,KAAAA;QAC1C,GAAA,KAEStB,sBAAsB,CAACsB,UAAAA;AAC9B,gBAAMsD,cAActD;AACpB,gBAAMD,QAAQuD,YAAYpD,QAAQH,SAAS;AAC3C,eAAKhD,WAAWwC,OAAOQ,KAAAA;AACvB,eAAK,YAAY,mBAAmB,KAAKhD,UAAUiD,KAAAA;QACrD,GAAA,KAESrB,mBAAmB,CAACqB,UAAAA;AAC3B,gBAAMsD,cAActD;AACpB,gBAAMD,QAAQuD,YAAYpD,QAAQH,SAAS;AAC3C,eAAK/C,QAAQuC,OAAOQ,KAAAA;AACpB,eAAK,YAAY,gBAAgB,KAAK/C,OAAOgD,KAAAA;QAC/C,GAAA,KAEA,iBAAiB,CAACD,UAA0BwD,KAAKC,IAAI,GAAGD,KAAKE,IAAI,IAAIF,KAAKvG,MAAM+C,KAAAA,CAAAA,CAAAA,GAAAA,KAEhF,kBAAkB,CAACA,OAAeC,UAAAA;AAChC,gBAAMK,YAAY,KAAK,eAAeN,KAAAA;AACtC,cAAI,KAAKjD,aAAauD,WAAW;AAC/B,iBAAKqD,cAAa;AAClB;UACF;AACA,eAAK5G,WAAWuD;AAChB,eAAK,YAAY,oBAAoB,KAAKvD,UAAUkD,KAAAA;AACpD,eAAK0D,cAAa;QACpB;;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChcAC,wCAyE2BC,eAAAA,SAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAIhBC,aAYAC,mBASAC,eAGAC,iBAGAC,mBAGAC,iBAGAC,iBAGAC,cAGAC,2BAAAA,qBA3CEC;;;;AAzEb,IAAAX,oBAAqB;AAErB;AACA;AACA;AACA;AAEA;AACA;AACA;AAgXA;AACA;AACA;AACA;AACA;AAEA;aApXCY,UAAU;MACTC,KAAK;MACLC,QAAQC;MACRC,WAAAA;AACE,eAAOC;;;;0BAIe,KAAKd,UAAU;sBACnB,KAAKC,MAAM;wBACT,KAAKC,QAAQ;0BACX,KAAKC,UAAU;wBACjB,KAAKC,QAAQ;kCACH,KAAKG,kBAAkB;;;;;;;4BAO7B,KAAKP,UAAU;wBACnB,KAAKC,MAAM;0BACT,KAAKC,QAAQ;4BACX,KAAKC,UAAU;0BACjB,KAAKC,QAAQ;oCACH,KAAKG,kBAAkB;0BACjC,KAAKF,QAAQ;uBAChB,KAAKC,KAAK;;;;0BAIP,KAAKN,UAAU;sBACnB,KAAKC,MAAM;kCACC,KAAKM,kBAAkB;;;;;;0BAM/B,KAAKP,UAAU;sBACnB,KAAKC,MAAM;wBACT,KAAKC,QAAQ;0BACX,KAAKC,UAAU;wBACjB,KAAKC,QAAQ;wBACb,KAAKC,QAAQ;qBAChB,KAAKC,KAAK;;;;;;0BAML,KAAKN,UAAU;sBACnB,KAAKC,MAAM;oBACb,KAAKF,IAAI;wBACL,KAAKM,QAAQ;qBAChB,KAAKC,KAAK;;;;;MAK7B;IACF,CAAA,GAAAS,UAIGC,KAAa;MAAEC,SAAS;MAAMC,cAAc;IAAc,CAAA,GAAAC,SAG1DH,KAAwB;MACvBC,SAAS;MACTC,cAAcE,WAAWC;MACzBC,SAAsBC,MAAkBC,UAAoB;AAC1D,YAAID,SAASC,UAAU;AACrB,eAAKvB,SAAS,KAAKwB,wBAAwBF,IAAAA;AAC3C,eAAKhB,qBAAqB;QAC5B;MACF;IACF,CAAA,GAAAmB,SAGCV,KAAuC;MACtCW,MAAMC;MACNX,SAAS;MACTC,cAAc,MAAA;AACZ,eAAO;UAAEW,IAAI;YAAEC,GAAG;YAAMC,GAAG;UAAI;UAAGC,IAAI;YAAEF,GAAG;YAAMC,GAAG;UAAE;QAAE;MAC1D;IACF,CAAA,GAAAE,SAGCjB,KAAc;MAAEW,MAAMO;MAASjB,SAAS;MAAMC,cAAc;IAAK,CAAA,GAAAiB,SAGjEnB,KAAc;MAAEW,MAAMO;MAASjB,SAAS;MAAMC,cAAc;IAAM,CAAA,GAAAkB,SAGlEpB,KAAa;MAAEW,MAAMU;MAAQpB,SAAS;MAAMC,cAAc;IAAE,CAAA,GAAAoB,SAG5DtB,KAAa;MAAEW,MAAMU;MAAQpB,SAAS;MAAMC,cAAc;IAAE,CAAA,GAAAqB,SAG5DvB,KAAa;MAAEW,MAAMU;MAAQpB,SAAS;MAAMC,cAAc;IAAE,CAAA,GAAAsB,SAG5DxB,KAAoB;MAAEW,MAAMU;MAAQpB,SAAS;MAAOC,cAAc;IAAK,CAAA,GAAAuB,UAYvEC,OAA2D,sBAAsB;MAAEC,QAAQ;IAAQ,CAAA,GAAAC,UAoCnGF,OAAwD,eAAe;MAAEC,QAAQ;IAAQ,CAAA,GAAAE,UAWzFH,OAAwD,eAAe;MAAEC,QAAQ;IAAQ,CAAA,GAAAG,UAWzFJ,OAAuD,oBAAoB;MAAEC,QAAQ;IAAQ,CAAA,GAAAI,UAW7FL,OAAuD,mBAAmB;MAAEC,QAAQ;IAAQ,CAAA,GAAAK,UAU5FN,OAAuD,gBAAgB;MAAEC,QAAQ;IAAQ,CAAA,GAAAM,UAUzFP,OAAiF,iBAAiB;MACjGC,QAAQ;IACV,CAAA,GAAAO,UAgBCR,OAA6B,WAAW;MAAEC,QAAQ;MAAUQ,SAAS;IAAM,CAAA,GAAAC,UAsH3EV,OAA8D,sBAAsB;MAAEC,QAAQ;IAAQ,CAAA;AAvRlG,IAAMnC,QAAN,eAAoBV,gBAAAA,aAAAA;;eAIhBC,aAYAC,mBASAC,eAGAC,iBAGAC,mBAGAC,iBAGAC,iBAGAC,cAGAC,2BAAAA,WAAAA,GAAAA,GAAAA,CAAAA,QAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YAvCAR;;;;;YAYAC;;;;;YASAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAYT8C;;;;;YAoCAC;;;;;YAWAC;;;;;YAWAC;;;;;YAWAC;;;;;YAUAC;;;;;YAYAC;;;;;YAgBAC;;;;;YAsHAC;;;;WAxRyB/D,aAAAA;;MAIhBC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAYJC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MASVC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAGVC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,qBAAAA;oBAAAA;;UAAAA,mBAAAA,IAAAA;aAAAA,mCAAkB;;MAEnBkB,wBAAwBE,MAAoD;AAClF,eAAOA,SAASP,WAAWC,eACvB;UAAEQ,IAAI;YAAEC,GAAG;YAAMC,GAAG;UAAI;UAAGC,IAAI;YAAEF,GAAG;YAAMC,GAAG;UAAE;QAAE,IACjD;UACE;YAAED,GAAG;YAAGC,GAAG;UAAE;UACb;YAAED,GAAG;YAAGC,GAAG;UAAE;;MAErB;MAGAsB,uBAAuBS,OAA0D;AAC/E,cAAM,EAAEC,MAAK,IAAKD,MAAME;AAExB,YAAI,KAAKhE,eAAe+D,OAAO;AAC7B;QACF;AAEA,cAAME,eAAe,KAAKjE;AAC1B,cAAMkE,iBAAiB,KAAKjE;AAC5B,aAAKD,aAAa+D;AAClB,aAAKxD,qBAAqB;AAE1B,YAAI0D,iBAAiB7C,WAAWC,gBAAgB0C,UAAU3C,WAAW+C,QAAQ;AAC3E,cAAID,kBAAkB,CAACE,MAAMC,QAAQH,cAAAA,GAAiB;AACpD,kBAAMI,eAAeJ;AACrB,kBAAMK,eAAeC,0BAA0BF,YAAAA;AAC/C,iBAAKrE,SAASsE;AACd,iBAAKE,iBAAiBF,cAAcT,MAAME,OAAOF,KAAK;AACtD;UACF,OAAO;AACL,iBAAK7D,SAAS,KAAKwB,wBAAwBsC,KAAAA;AAC3C,iBAAKU,iBAAiB,KAAKxE,QAAQ6D,MAAME,OAAOF,KAAK;AACrD;UACF;QACF,WAAWG,iBAAiB7C,WAAW+C,UAAUJ,UAAU3C,WAAWC,cAAc;AAClF,eAAKpB,SAAS,KAAKwB,wBAAwBsC,KAAAA;AAC3C,eAAKU,iBAAiB,KAAKxE,QAAQ6D,MAAME,OAAOF,KAAK;AACrD;QACF,OAAO;AACL,eAAK7D,SAAS,KAAKwB,wBAAwBsC,KAAAA;AAC3C,eAAKU,iBAAiB,KAAKxE,QAAQ6D,MAAME,OAAOF,KAAK;AACrD;QACF;MACF;MAGAR,iBAAiBQ,OAAuD;AACtE,cAAM,EAAEC,MAAK,IAAKD,MAAME;AAExB,YAAI,KAAK9D,aAAa6D,OAAO;AAC3B;QACF;AAEA,aAAK7D,WAAW6D;MAClB;MAGAR,iBAAiBO,OAAuD;AACtE,cAAM,EAAEC,MAAK,IAAKD,MAAME;AAExB,YAAI,KAAK7D,eAAe4D,OAAO;AAC7B;QACF;AAEA,aAAK5D,aAAa4D;MACpB;MAGAP,qBAAqBM,OAAsD;AACzE,YAAI,EAAEC,MAAK,IAAKD,MAAME;AACtBD,gBAAQW,KAAKC,IAAI,GAAGD,KAAKE,IAAI,IAAIb,KAAAA,CAAAA;AACjC,YAAI,KAAK3D,aAAa2D,OAAO;AAC3B;QACF;AACA,aAAK3D,WAAW2D;AAChB,aAAKc,cAAa;MACpB;MAGApB,qBAAqBK,OAAsD;AACzE,cAAM,EAAEC,MAAK,IAAKD,MAAME;AACxB,YAAI,KAAK3D,aAAa0D,OAAO;AAC3B;QACF;AACA,aAAK1D,WAAW0D;AAChB,aAAKc,cAAa;MACpB;MAGAnB,kBAAkBI,OAAsD;AACtE,cAAM,EAAEC,MAAK,IAAKD,MAAME;AACxB,YAAI,KAAK1D,UAAUyD,OAAO;AACxB;QACF;AACA,aAAKzD,QAAQyD;AACb,aAAKc,cAAa;MACpB;MAKAlB,mBAAmBG,OAAgF;AACjG,cAAM,EAAEC,MAAK,IAAKD,MAAME;AACxB,aAAK/D,SAAS8D;AAEd,YAAIK,MAAMC,QAAQN,KAAAA,GAAQ;AACxB,cAAI,KAAKxD,uBAAuB,MAAM;AACpC,gBAAI,KAAKA,sBAAsBwD,MAAMe,QAAQ;AAC3C,mBAAKvE,qBAAqBwD,MAAMe,SAAS;YAC3C;UACF;QACF,OAAO;AACL,eAAKvE,qBAAqB;QAC5B;MACF;MAGAqD,wBAAwBE,OAA4B;AAClD,YAAIA,MAAMiB,kBAAkB;AAC1B;QACF;AAEA,cAAMC,gBAAgBlB,MAAMnB;AAE5B,YACEqC,yBAAyBC,oBACzBD,yBAAyBE,uBACxBF,yBAAyBlF,eAAekF,cAAcG,mBACvD;AACA;QACF;AAEA,YAAI,KAAKnF,eAAeoB,WAAW+C,UAAU,CAACC,MAAMC,QAAQ,KAAKpE,MAAM,GAAG;AACxE;QACF;AAEA,cAAMmF,QAAQ,KAAK7E;AAEnB,YAAI6E,UAAU,MAAM;AAClB;QACF;AAEA,cAAMC,YAAY,KAAKpF,OAAO6E,SAAS;AACvC,cAAMQ,eAA6B,KAAKrF,OAAOsF,IAAI,CAACC,WAAAA;AAClD,iBAAO;YAAE,GAAGA;UAAM;QACpB,CAAA;AACA,cAAMA,QAAQF,aAAaF,KAAAA;AAE3B,YAAI,CAACI,OAAO;AACV;QACF;AAEA,cAAMC,OAAO3B,MAAM4B,WAAW,OAAO;AACrC,YAAIC,UAAU;AAEd,gBAAQ7B,MAAM8B,KAAG;UACf,KAAK,aAAa;AAChB,gBAAIR,SAAS,KAAKA,SAASC,WAAW;AACpC;YACF;AACA,kBAAM7D,WAAW8D,aAAaF,QAAQ,CAAA;AACtC,kBAAM7D,OAAO+D,aAAaF,QAAQ,CAAA;AAElC,gBAAI,CAAC5D,YAAY,CAACD,MAAM;AACtB;YACF;AAEA,kBAAMsE,OAAOrE,SAASM,IAAIgE;AAC1B,kBAAMC,OAAOxE,KAAKO,IAAIgE;AACtBN,kBAAM1D,IAAI4C,KAAKE,IAAIF,KAAKC,IAAIa,MAAM1D,IAAI2D,MAAMI,IAAAA,GAAOE,IAAAA;AACnDJ,sBAAU;AACV;UACF;UACA,KAAK,cAAc;AACjB,gBAAIP,SAAS,KAAKA,SAASC,WAAW;AACpC;YACF;AACA,kBAAM7D,WAAW8D,aAAaF,QAAQ,CAAA;AACtC,kBAAM7D,OAAO+D,aAAaF,QAAQ,CAAA;AAElC,gBAAI,CAAC5D,YAAY,CAACD,MAAM;AACtB;YACF;AAEA,kBAAMsE,OAAOrE,SAASM,IAAIgE;AAC1B,kBAAMC,OAAOxE,KAAKO,IAAIgE;AACtBN,kBAAM1D,IAAI4C,KAAKE,IAAIF,KAAKC,IAAIa,MAAM1D,IAAI2D,MAAMI,IAAAA,GAAOE,IAAAA;AACnDJ,sBAAU;AACV;UACF;UACA,KAAK,WAAW;AACdH,kBAAMzD,IAAI2C,KAAKE,IAAIF,KAAKC,IAAIa,MAAMzD,IAAI0D,MAAM,CAAA,GAAI,CAAA;AAChDE,sBAAU;AACV;UACF;UACA,KAAK,aAAa;AAChBH,kBAAMzD,IAAI2C,KAAKE,IAAIF,KAAKC,IAAIa,MAAMzD,IAAI0D,MAAM,CAAA,GAAI,CAAA;AAChDE,sBAAU;AACV;UACF;UACA,KAAK;UACL,KAAK,aAAa;AAChB,gBAAIL,aAAaR,UAAUkB,qBAAqBZ,SAAS,KAAKA,SAASC,WAAW;AAChF;YACF;AAEAC,yBAAaW,OAAOb,OAAO,CAAA;AAE3B,kBAAMc,aAAaC,sBAAsBb,YAAAA;AACzC,iBAAKrF,SAASiG;AACd,iBAAKzB,iBAAiByB,YAAYpC,KAAAA;AAElC,kBAAMsC,YAAYhB,QAAQ;AAE1B,iBAAK7E,qBAAqB6F;AAC1BT,sBAAU;AACV;UACF;UACA;AACE;QACJ;AAEA,YAAIA,WAAW7B,MAAM8B,QAAQ,YAAY9B,MAAM8B,QAAQ,aAAa;AAClE,gBAAMM,aAAaC,sBAAsBb,YAAAA;AACzC,eAAKrF,SAASiG;AACd,eAAKzB,iBAAiByB,YAAYpC,KAAAA;AAClC,eAAKvD,qBAAqB6E;QAC5B;AAEA,YAAIO,SAAS;AACX7B,gBAAMuC,eAAc;QACtB;MACF;MAGAxC,uBAAuBC,OAA6D;AAClF,cAAM,EAAEC,MAAK,IAAKD,MAAME;AACxB,YAAI,KAAKzD,uBAAuBwD,OAAO;AACrC;QACF;AACA,aAAKxD,qBAAqBwD,SAAS;MACrC;MAEQU,iBAAiBV,OAAyCuC,aAA2B;AAC3F,cAAMtC,SAA+D;UACnED;UACAD,OAAOwC,eAAe,IAAIC,MAAM,eAAA;QAClC;AAEA,aAAKC,cACH,IAAIC,YAAY,iBAAiB;UAC/BzC;UACA0C,SAAS;UACTC,UAAU;QACZ,CAAA,CAAA;MAEJ;;;;;AA7SK,cAAA,GAAA,IAAA,GAAA,KAII5G,sBAAI6G,YAAA,IAAA,GAAJ7G,YAAAA,IAAAA,IAAAA,KAYAC,2BAAAA,kBAAAA,IAAAA,GAAAA,KASAC,uBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,2BAAAA,kBAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,sBAAAA,aAAAA,IAAAA,GAAAA,KAGAC,mCAAAA,0BAAAA,MAAoC,IAAA;;IAmQ/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICzXAsG,wCA6K4BC,eAAAA,SAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAIjBC,gBAGAC,YAGAC,iBAGAC,YAUAC,aAOAC,gBAAAA,sBA9BEC;;;;AA7Kb,IAAAR,oBAA0C;AAE1C;AACA;aAECS,UAAU;MACTC,KAAK;MACLC,UAAU;MACVC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmKV,CAAA,GAAAC,UAIGC,KAAc;MAAEV,MAAMW;MAASC,SAAS;IAAK,CAAA,GAAAC,SAG7CH,KAAc;MAAEV,MAAMW;MAASC,SAAS;IAAK,CAAA,GAAAE,SAG7CJ,KAAc;MAAEV,MAAMW;MAASC,SAAS;IAAK,CAAA,GAAAG,SAG7CL,KAAoC;MAAEV,MAAMgB;MAAQJ,SAAS;MAAMK,cAAc;IAAS,CAAA,GAAAC,SAG1FR,KAA4C;MAC3CV,MAAMgB;MACNJ,SAAS;MACTK,cAAc;MACdE,oBAAAA;AACE,aAAKC,gBAAa;MACpB;IACF,CAAA,GAAAC,SAGCX,KAAqE;MACpEV,MAAMgB;MACNJ,SAAS;MACTK,cAAc;IAChB,CAAA;AA7BK,IAAMd,SAAN,eAAqBP,gBAAAA,aAAAA;;eAIjBC,gBAGAC,YAGAC,iBAGAC,YAUAC,aAOAC,gBAAAA,WAAAA,GAAAA,GAAAA,CAAAA,SAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;YA1BAL;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAUAC;;;;;YAOAC;;;;WA9BiBN,aAAAA;;MAIjBC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;MAGTC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAUJC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAOLC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAEhBoB,SAAyB;AACvB,eAAOC;;eAEI,KAAKvB,IAAI;oBACJ,KAAKH,QAAQ;uBACV,KAAKK,OAAO;0BACT,KAAKH,SAAS;oBACpB,KAAKD,IAAI;sBACP,KAAKG,KAAK;;;;;MAK9B;;;;;AA7CK,cAAA,GAAA,IAAA,GAAA,KAIIJ,0BAAQ2B,YAAA,IAAA,GAAR3B,eAAAA,MAAoB,KAAA,IAAA,KAGpBC,qBAAAA,WAAAA,MAAgB,KAAA,GAAA,KAGhBC,0BAAAA,gBAAAA,MAAqB,KAAA,GAAA,KAGrBC,qBAAAA,WAAAA,IAAAA,GAAAA,KAUAC,sBAAAA,YAAAA,MAA+C,QAAA,GAAA,KAO/CC,wBAAAA,eAAAA,IAAAA;;IAgBX;;;;;AC3NA,IAcauB,sBAmBAC,uBAcAC,qBAYAC,cAcAC;AAzEb,IAAAC,eAAA;;;AAcO,IAAML,uBAAuB;AAmB7B,IAAMC,wBAAuB,CAClCK,MACAC,MACAC,WAAAA;AAEAF,WAAKG,cACH,IAAIC,YAAwCH,MAAM;QAChDC;QACAG,SAAS;QACTC,UAAU;MACZ,CAAA,CAAA;IAEJ;AAEO,IAAMV,sBAAsB,CAACW,SAAqCC,MAAcC,UAAAA;AACrF,UAAI,CAACF,SAAS;AACZ;MACF;AAEA,UAAIE,OAAO;AACTF,gBAAQG,aAAaF,MAAM,EAAA;MAC7B,OAAO;AACLD,gBAAQI,gBAAgBH,IAAAA;MAC1B;IACF;AAEO,IAAMX,eAAe,CAACY,UAAAA;AAC3B,UAAIA,UAAU,IAAI;AAChB,eAAO;MACT;AAEA,YAAMG,SAASC,OAAOJ,KAAAA;AACtB,aAAOI,OAAOC,MAAMF,MAAAA,IAAU,OAAOA;IACvC;AAOO,IAAMd,mBAAmB,CAACS,YAAAA;AAC/B,UAAI,OAAOA,QAAQE,UAAU,YAAY,OAAOF,QAAQE,UAAU,UAAU;AAC1E,eAAOM,OAAOR,QAAQE,KAAK;MAC7B;AAEA,UAAI,OAAOF,QAAQS,YAAY,WAAW;AACxC,eAAOT,QAAQS,UAAU,SAAS;MACpC;AAEA,UAAI,kBAAkBT,SAAS;AAC7B,cAAMU,OAAQV,QAAoBW,aAAa,OAAA;AAC/C,YAAID,SAAS,MAAM;AACjB,iBAAOA;QACT;MACF;AAEA,aAAOV,QAAQY,aAAaC,KAAAA,KAAU;IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC1FAC,yCA+P8BC,gBAAAA,SAAAA,SAAAA,SAAAA,QAAAA,QAAAA,QAInBC,eAGAC,aAGAC,aAGAC,iBAGAC,eAAAA,yBAhBEC;;;;AA/Pb,IAAAP,oBAAqB;AAErB,IAAAQ;AAEA;AACA;AACA;AACA;aAECC,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqMRC,WAAAA;AACE,eAAOC;;;;;uBAKY,KAAKX,OAAO;oBACf,KAAKG,QAAQ;;;;;mBAKd,KAAKF,IAAI;oBACR,KAAKC,KAAK;uBACP,KAAKF,OAAO;wBACX,KAAKG,QAAQ;;;kDAGa,KAAKS,QAAQ;;;;;;;;;0BASrC,KAAKA,QAAQ;;;;;;;;;;;;;;;;;;MAkBrC;IACF,CAAA,GAAAC,UAIGC,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAC,UAG7CJ,KAAoB;MAAEG,SAAS;IAAK,CAAA,GAAAE,UAGpCL,KAAoB;MAAEG,SAAS;IAAK,CAAA,GAAAG,SAGpCN,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAI,SAG7CC,MAAyB,QAAA,GAAAC,SAmDzBC,OAAgD,SAAS;MACxDC,UAAU;IACZ,CAAA;AApEK,IAAMpB,WAAN,eAAuBN,iBAAAA,aAAAA;;eAInBC,eAGAC,aAGAC,aAGAC,iBAGAC,eAAAA,YAAAA,GAAAA,GAAAA,CAAAA,WAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAZAJ;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAqDTsB;;;;WArE4B3B,cAAAA;;MAInBC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAGPC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAMhBuB,oBAA0B;AACxB,aAAKC,eAAe,KAAK5B;MAC3B;MAEA6B,cAAoB;AAClB,YAAI,CAAC,KAAKzB,SAAS;AACjB;QACF;AAEA,cAAM0B,UAAU,OAAO,KAAKF,iBAAiB,eAAe,KAAK5B,YAAY,KAAK4B;AAElF,YAAIE,SAAS;AACX,eAAKC,kBAAkB,KAAK/B,OAAO;AACnC,eAAK4B,eAAe,KAAK5B;QAC3B;AAEA,cAAMI,UAAU,KAAKA;AACrBA,gBAAQ4B,aAAa,gBAAgB,KAAKhC,UAAU,SAAS,OAAA;AAC7DI,gBAAQD,WAAWa,QAAQ,KAAKb,QAAQ;AACxC8B,4BAAoB,MAAM,YAAYjB,QAAQ,KAAKb,QAAQ,CAAA;MAC7D;MAEQ4B,kBAAkB/B,SAAwB;AAChD,cAAMI,UAAU,KAAK8B,YAAYC,cAAc,kBAAA;AAC/C,cAAMC,OAAM,KAAKF,YAAYC,cAAc,KAAA;AAC3C,YAAI,CAAC/B,WAAW,CAACgC,MAAK;AACpB;QACF;AAEAhC,gBAAQiC,UAAUC,OAAO,gBAAgB,gBAAA;AACzCF,QAAAA,KAAIC,UAAUC,OAAO,gBAAgB,gBAAA;AAErC,cAAMC,YAAYvC,UAAU,iBAAiB;AAC7C,cAAMwC,WAAWxC,UAAU,MAAM;AAEjCI,gBAAQiC,UAAUI,IAAIF,SAAAA;AACtBH,QAAAA,KAAIC,UAAUI,IAAIF,SAAAA;AAElBG,mBAAW,MAAA;AACTtC,kBAAQiC,UAAUC,OAAOC,SAAAA;AACzBH,UAAAA,KAAIC,UAAUC,OAAOC,SAAAA;QACvB,GAAGC,QAAAA;MACL;MAKAd,YAAYiB,OAAyB;AACnC,YAAI,KAAKxC,UAAU;AACjBwC,gBAAMC,eAAc;AACpBD,gBAAME,gBAAe;AAErB;QACF;AAEA,aAAK7C,UAAU,CAAC,KAAKA;AAErB8C,QAAAA,sBAAqB,MAAM,YAAY;UAAE5C,OAAO,KAAKF;UAAS2C;QAAM,CAAA;MACtE;;;;;AAhFK,cAAA,GAAA,IAAA,GAAA,KAII3C,yBAAO+C,aAAA,IAAA,GAAP/C,cAAAA,IAAAA,IAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,sBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,cAAAA,IAAAA,GAAAA,KAITQ,WAAmB,OAAOoC,OAAOC,WAAU,CAAA;;IA6D7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChVAC,yCA4BiCC,gBAAAA,SA2BtBC,aAAAA,4BA3BEC;;;;AA5Bb,IAAAH,oBAA0C;AAE1C;AACA;aAKCI,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;MAgBRC,oBAAoB;QAAC;;IACvB,CAAA,GAAAC,UASGC,KAAmB;MAClBC,SAAS;MACTC,WAAW;MACXC,cAAc;MACdC,kBAAkBC,MAAoBC,UAAsB;AAC1D,aAAKC,YACDC,cAA8B,MAAA,GAC9BC,QACA;UACE;YAAEC,GAAG,SAAU,KAAqBC,MAAML,QAAAA,CAAS;UAAK;UACxD;YAAEI,GAAG,SAAU,KAAqBC,MAAMN,IAAAA,CAAK;UAAK;WAEtD;UACEO,UAAU;UACVC,QAAQ;QACV,CAAA;MAEN;IACF,CAAA;AA1BK,IAAMnB,cAAN,eAA0BF,iBAAAA,aAAAA;;eA2BtBC,aAAAA,YAAAA,GAAAA,GAAAA,CAAAA,cAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAAAA;;;;WA3BsBD,cAAAA;;MAGtBmB;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAwBLlB;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAEdqB,SAAyB;AACvB,eAAOC;sDAC2C,KAAKtB,KAAK;kBAC9C,KAAKkB,MAAM,KAAKlB,KAAK,CAAC;;;MAGtC;;;;;AAnCK,cAAA,GAAA,IAAA,GAAA,KAGIkB,uBAAKK,aAAA,IAAA,GAAgB;UAC5BC,MAAM;UACNC,IAAI;QACN,IAAA,KAqBSzB,sBAAAA,YAAAA,IAAAA;;IASX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5DA0B,yCAsR8BC,gBAAAA,SAAAA,SAAAA,SAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAUnBC,aAGAC,iBAGAC,aAGAC,gBAGAC,kBAUAC,cASAC,iBAGAC,aAGAC,cAOAC,mBAGAC,kBAGAC,eAGAC,mBAGAC,oBAGAC,mBAAAA,cAvULC,cAQAC,wBA0POC;;;;AAzRb;AACA;AAEA,IAAAnB,oBAA0C;AAE1C,IAAAoB;AAEA;AACA;AACA;AACA;AAaA,IAAMH,eAAgB,uBAAA;AACpB,UAAII,UAAU;AACd,aAAO,MAAA;AACLA,mBAAW;AACX,eAAO,wBAAwBA,OAAAA;MACjC;IACF,GAAA;AAEA,IAAMH,cAAe,uBAAA;AACnB,UAAIG,UAAU;AACd,aAAO,MAAA;AACLA,mBAAW;AACX,eAAO,yBAAyBA,OAAAA;MAClC;IACF,GAAA;aAECC,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+OV,CAAA,GAAAC,UAIGC,KAAc;MACbC,MAAMC;MACNC,SAAS;MACTC,SAASC,MAAMC,UAAQ;AACpB,aAAkBC,iBAAiBF,MAAMC,QAAAA;MAC5C;IACF,CAAA,GAAAE,UAGCR,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAM,UAG7CT,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAO,SAG7CV,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAQ,SAG7CX,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAS,SAG7CZ,KAAmC;MAClCC,MAAMY;MACNV,SAAS;MACTW,cAAc;MACdC,oBAAAA;AACE,aAAKC,gBAAa;MACpB;IACF,CAAA,GAAAC,SAGCjB,KAAa;MACZG,SAAS;MACTW,cAAc;MACdV,SAASC,MAAI;AACV,aAAkBa,MAAMC,YAAY,8BAA8Bd,QAAQ,MAAA;MAC7E;IACF,CAAA,GAAAe,SAGCpB,KAAoB;MAAEG,SAAS;MAAMW,cAAc;IAAK,CAAA,GAAAO,SAGxDrB,KAAoB;MAAEG,SAAS;MAAMW,cAAc;IAAK,CAAA,GAAAQ,UAGxDtB,KAAoB;MACnBG,SAAS;MACToB,WAAW;MACXT,cAAc;IAChB,CAAA,GAAAU,UAGCxB,KAAgB;MAAEG,SAAS;MAAMW,cAAc;IAAe,CAAA,GAAAW,UAG9DC,MAAmB,kBAAA,GAAAC,UAGnBD,MAAwB,6BAAA,GAAAE,UAGxBF,MAAmB,kBAAA,GAAAG,UAGnBH,MAAuB,sBAAA,GAAAI,UA+PvBC,aAAuB;MACtBC,SAAS,CAACC,SAASA,KAAK5C;MACxB6C,UAAU,CAACD,SAAS;QAACA,KAAK9C;QAAS8C,KAAK5C;;MACxCZ,UAAU,CAACwD,SAASA,KAAKxD,YAAY,CAACwD,KAAKzD;IAC7C,CAAA;AAvUK,IAAMiB,WAAN,eAAuBlB,iBAAAA,aAAAA;;eAUnBC,aAGAC,iBAGAC,aAGAC,gBAGAC,kBAUAC,cASAC,iBAGAC,aAGAC,cAOAC,mBAGAC,kBAGAC,eAGAC,mBAGAC,oBAGAC,mBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,WAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YA3DAd;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAUAC;;;;;YASAC;;;;;YAGAC;;;;;YAGAC;;;;;YAOAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAmQT6C;;;;WAxU4B5D,cAAAA;;MAUnBC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,aAAAA;oBAAAA;;UAAAA,WAAAA,IAAAA;aAAAA,2BAAU;;MAUVC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MASLC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;MAGTC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAOLC;UAAAA,cAAAA;oBAAAA;;UAAAA,YAAAA,IAAAA;aAAAA,6BAAW;;MAGXC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,2BAAS;;MAGTC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,yBAAO;;MAGPC;UAAAA,cAAAA;oBAAAA;;UAAAA,YAAAA,IAAAA;aAAAA,6BAAW;;MAGXC;UAAAA,eAAAA;oBAAAA;;UAAAA,aAAAA,IAAAA;aAAAA,8BAAY;;MAGZC;UAAAA,cAAAA;oBAAAA;;UAAAA,YAAAA,IAAAA;aAAAA,6BAAW;;MAEpB;MACA;MACA;MACA;MACA;MACA;MACA;MAIA8C,oBAA0B;AACxB,aAAK,oBAAmB;MAC1B;MAEAC,uBAA6B;AAC3B,aAAK,oBAAmB;AACxB,aAAK,iBAAgB;AACrB,aAAK,oBAAoB;MAC3B;MAEAC,cAAoB;AAClB,cAAMnD,UAAU,KAAKA;AACrB,cAAMoD,YAAY,KAAKC,aAAa,YAAA;AAEpC,YAAIrD,SAAS;AACX,cAAIA,mBAAmBsD,mBAAmB;AACxCtD,oBAAQV,WAAWyB,QAAQ,KAAKzB,QAAQ;UAC1C;AACAU,kBAAQuD,aAAa,iBAAiB,KAAKlE,QAAQ,CAAC,KAAKC,WAAW,SAAS,OAAA;AAC7EU,kBAAQuD,aAAa,iBAAiB,SAAA;AAEtC,cAAIvD,mBAAmBsD,mBAAmB;AACxC,gBAAIF,aAAaA,UAAUI,KAAI,EAAGC,SAAS,GAAG;AAC5CzD,sBAAQuD,aAAa,cAAcH,UAAUI,KAAI,CAAA;YACnD,OAAO;AACLxD,sBAAQ0D,gBAAgB,YAAA;YAC1B;UACF;QACF;AAEA,YAAI,KAAKzD,aAAa;AACpB,eAAKA,YAAYX,WAAWyB,QAAQ,KAAKzB,QAAQ;AAEjD,cAAI8D,aAAaA,UAAUI,KAAI,EAAGC,SAAS,GAAG;AAC5C,iBAAKxD,YAAYsD,aAAa,cAAcH,UAAUI,KAAI,CAAA;UAC5D,OAAO;AACL,iBAAKvD,YAAYyD,gBAAgB,YAAA;UACnC;QACF;AAEA,cAAMC,QAAQ,KAAKzD;AACnB,cAAM0D,gBAAgB,KAAKvE,QAAQ,CAAC,KAAKC;AAEzC,YAAIqE,OAAO;AACT,cAAI,CAACA,MAAME,IAAI;AACbF,kBAAME,KAAKxD,YAAAA;UACb;AACAsD,gBAAMG,WAAW;AACjBH,gBAAMJ,aAAa,QAAQ,SAAA;AAC3BI,gBAAMJ,aAAa,eAAeK,gBAAgB,UAAU,MAAA;AAE5D,cAAI5D,SAAS;AACXA,oBAAQuD,aAAa,iBAAiBI,MAAME,EAAE;UAChD;QACF,WAAW7D,SAAS;AAClBA,kBAAQ0D,gBAAgB,eAAA;QAC1B;AAEAK,4BAAoB,MAAM,YAAYhD,QAAQ,KAAKzB,QAAQ,CAAA;AAE3D,aAAK,oBAAmB;AAExB,YAAI,CAAC,KAAK,qBAAqB;AAC7B0E,yBAAe,MAAA;AACb,iBAAK,aAAY;UACnB,CAAA;QACF,OAAO;AACL,eAAK,4BAA2B;QAClC;AAEA,YAAI,KAAK1E,YAAY,KAAKD,MAAM;AAC9B,eAAK,oBAAoB;AACzB,eAAKA,OAAO;QACd;MACF;MAEA4E,SAAyB;AACvB,cAAMC,oBAAoB,KAAK,qBAAoB;AAEnD,eAAOC;;qBAEU,KAAKpE,SAAS;gBACnB,KAAKV,QAAQ,CAAC,KAAKC,QAAQ;;UAEjC,KAAKG,aAAa,KAAK,qBAAqByE,iBAAAA,IAAqB,KAAK,qBAAqBA,iBAAAA,CAAAA;;;;;sBAK/E,KAAK7E,QAAQ,CAAC,KAAKC,WAAW,SAAS,OAAA;oBACzC,CAAC,KAAKD,QAAQ,KAAKC,QAAQ;qBAC1B,KAAK,mBAAmB;;;;;;;;MAQ3C;MAEA,qBAAqB4E,mBAA0B;AAC7C,eAAOC;;;;;6BAKkBD,oBAAoB,SAAS,OAAA;0BAChC,KAAK1E,QAAQ;qBAClB,KAAK,qBAAqB;mBAC5B,KAAK,mBAAmB;sBACrB,KAAKD,IAAI;;;0DAG2B2E,oBAAoB,SAAS,OAAA;gBACvE,KAAK,iBAAgB,CAAA;;;2DAGsB,KAAK7E,OAAO,OAAO,MAAA;;;;MAI5E;MAEA,qBAAqB6E,mBAA0B;AAC7C,eAAOC;;;;6BAIkBD,oBAAoB,SAAS,OAAA;0BAChC,KAAK1E,QAAQ;mBACpB,KAAK,yBAAyB;sBAC3B,KAAKD,IAAI;;;;;;yBAMN,KAAKF,OAAQ,KAAKY,aAAaJ,SAAS,KAAM,KAAK,iBAAgB,CAAA;8BAC9D,KAAKC,eAAe,EAAA;4BACtB,CAAC,KAAKT,IAAI;yBACb,KAAK,kBAAkB;2BACrB,KAAK,qBAAqB;;2DAEM,KAAKA,OAAO,OAAO,MAAA;;;;MAI5E;MAEA;MAoBA;MASA,eAAe+E,OAAa;AAC1B,cAAMC,aAAaD,MAAME,YAAW;AACpC,aAAK,SAASC,QAAQ,CAACC,WAAAA;AACrB,gBAAMC,QAAQD,OAAOE,MAAMJ,YAAW,EAAGK,SAASN,UAAAA;AAClD,cAAII,OAAO;AACTD,mBAAOI,QAAQ7C,MAAM8C,UAAU;UACjC,OAAO;AACLL,mBAAOI,QAAQ7C,MAAM8C,UAAU;UACjC;QACF,CAAA;MACF;MAEAC,OAAOC,OAAiBC,aAA2B;AACjD,YAAI,KAAK1F,UAAU;AACjB;QACF;AAEA,cAAM2F,UAAU,KAAK5F;AACrB,cAAM6B,OAAO6D,SAAS,CAACE;AAEvB,YAAIA,YAAY/D,MAAM;AACpB;QACF;AAEA,aAAK,oBAAoB8D,eAAe;AACxC,aAAK3F,OAAO6B;AAEZ,YAAI,CAACA,MAAM;AACT,eAAK,gBAAgB;AAErB,eAAK,eAAe,EAAA;AAEpB,cAAI,KAAKzB,cAAc,KAAKQ,aAAa;AACvC,iBAAKA,YAAYJ,QAAQ,KAAK,iBAAgB;AAC9C,iBAAKI,YAAYiF,KAAI;UACvB;QACF;MACF;MAEA9D,iBAAiBF,MAAeC,UAAyB;AACvD,YAAID,SAASC,UAAU;AACrB;QACF;AAEA,YAAI,CAACD,MAAM;AACT,eAAK,gBAAgB;QACvB;AAEA,cAAMiE,SAAS,KAAK,qBAAqB,IAAIC,MAAMlE,OAAO,SAAS,OAAA;AACnE,aAAK,oBAAoB;AAEzB,YAAIA,MAAM;AACR,cAAI,KAAKzB,cAAc,KAAKQ,aAAa;AACvC,iBAAKA,YAAYoF,MAAK;UACxB,OAAO;AACLrB,2BAAe,MAAM,KAAK,mBAAkB,CAAA;UAC9C;QACF;AAEAsB,QAAAA,sBAAqB,MAAM,UAAU;UAAEzF,OAAOqB;UAAMqE,OAAOJ;QAAO,CAAA;AAClEK,kCAA0B,IAAI;MAChC;MAOAxC,qBAAqBuC,OAAoB;AACvC,YAAI,CAAC,KAAKlG,MAAM;AACd;QACF;AAEA,aAAKyF,OAAO,OAAOS,KAAAA;MACrB;MAEA;MAmCA,sBAAmB;AACjB,cAAME,OAAO,KAAKtF;AAElB,YAAIsF,SAAS,KAAK,cAAc;AAC9B;QACF;AAEA,YAAI,KAAK,cAAc;AACrB,eAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;QAC5E;AAEA,YAAID,MAAM;AACRA,eAAKE,iBAAiB,cAAc,KAAK,iBAAiB;QAC5D;AAEA,aAAK,eAAeF,QAAQ;MAC9B;MAEA,sBAAmB;AACjB,YAAI,CAAC,KAAK,cAAc;AACtB;QACF;AAEA,aAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;AAC1E,aAAK,eAAe;MACtB;MAEA;MAIA,eAAY;AACV,cAAME,WAAW,KAAKzF,aAAa0F,iBAAiB;UAAEC,SAAS;QAAK,CAAA,KAAM,CAAA;AAC1E,cAAMC,WAAWH,SAASI,OAAO,CAACC,SAA8BA,gBAAgB7G,WAAAA;AAEhF,aAAK,uBAAuB,KAAK,QAAQ;AAEzC,cAAM8G,UAA0B,CAAA;AAEhCH,iBAASxB,QAAQ,CAACK,YAAAA;AAChB,cAAIA,QAAQuB,aAAa,oBAAA,KAAyBvB,QAAQvB,aAAa,MAAA,MAAY,aAAa;AAC9F;UACF;AAEA,gBAAMxD,QAAQ,KAAK,oBAAoB+E,OAAAA;AACvC,gBAAMF,QAAQ,KAAK,oBAAoBE,SAAS/E,KAAAA;AAChD,gBAAMgE,KAAKe,QAAQf,MAAMe,QAAQf,GAAGL,KAAI,EAAGC,SAAS,IAAImB,QAAQf,KAAKzD,aAAAA;AAErE,cAAI,CAACwE,QAAQf,IAAI;AACfe,oBAAQf,KAAKA;UACf;AAEAe,kBAAQrB,aAAa,QAAQ,QAAA;AAC7BqB,kBAAQrB,aAAa,iBAAiB,OAAA;AACtCqB,kBAAQwB,QAAQC,SAAS;AACzBzB,kBAAQd,WAAW;AAEnB,gBAAMwC,WAAW;YACfC,OAAO,CAAChB,UAAAA;AACNA,oBAAMiB,eAAc;AACpBjB,oBAAMkB,gBAAe;AACrB,mBAAK,cAAc5G,OAAO6E,OAAOa,KAAAA;YACnC;YACAmB,SAAS,CAACnB,UAAAA;AACR,kBAAIA,MAAMoB,QAAQ,WAAWpB,MAAMoB,QAAQ,KAAK;AAC9CpB,sBAAMiB,eAAc;AACpB,qBAAK,cAAc3G,OAAO6E,OAAOa,KAAAA;cACnC;YACF;UACF;AAEAX,kBAAQe,iBAAiB,SAASW,SAASC,OAAO;YAAEK,SAAS;UAAM,CAAA;AACnEhC,kBAAQe,iBAAiB,WAAWW,SAASI,OAAO;AAEpDR,kBAAQW,KAAK;YAAEjC;YAAS/E;YAAO6E;YAAOb;YAAIyC;UAAS,CAAA;QACrD,CAAA;AAEA,aAAK,WAAWJ;AAChB,aAAK,sBAAsBA,QAAQzC,SAAS;AAE5C,YAAI,KAAK5D,UAAU,QAAQqG,QAAQzC,SAAS,GAAG;AAC7C,gBAAMqD,cAAcZ,QAAQa,KAC1B,CAACvC,WACCA,OAAOI,QAAQuB,aAAa,UAAA,KAC5B3B,OAAOI,QAAQwB,QAAQY,aAAa,UACpCxC,OAAOI,QAAQvB,aAAa,eAAA,MAAqB,MAAA;AAGrD,cAAIyD,aAAa;AACf,iBAAKjH,QAAQiH,YAAYjH;UAC3B;QACF;AAEA,aAAK,4BAA2B;MAClC;MAEA,mBAAgB;AACd,aAAK,uBAAuB,KAAK,QAAQ;AACzC,aAAK,WAAW,CAAA;AAChB,aAAK,sBAAsB;AAC3B,aAAK,iBAAiB;MACxB;MAEA,uBAAuBqG,SAAuB;AAC5CA,gBAAQ3B,QAAQ,CAACC,WAAAA;AACfA,iBAAOI,QAAQc,oBAAoB,SAASlB,OAAO8B,SAASC,KAAK;AACjE/B,iBAAOI,QAAQc,oBAAoB,WAAWlB,OAAO8B,SAASI,OAAO;AACrElC,iBAAOI,QAAQwB,QAAQC,SAAS;AAChC7B,iBAAOI,QAAQrB,aAAa,iBAAiB,OAAA;AAC7CiB,iBAAOI,QAAQd,WAAW;QAC5B,CAAA;MACF;MAEA,8BAA2B;AACzB,YAAI,CAAC,KAAK,qBAAqB;AAC7B,eAAKmD,gBAAgB,kBAAkB,KAAA;AACvC;QACF;AAEA,YAAIC,gBAA+B;AACnC,cAAMC,gBAAgB,KAAK;AAE3B,cAAMjB,UAAU,KAAK;AAErBA,gBAAQ3B,QAAQ,CAACC,WAAAA;AACf,gBAAM4C,aAAa,KAAKvH,UAAU,QAAQ2E,OAAO3E,UAAU,KAAKA;AAChE2E,iBAAOI,QAAQrB,aAAa,iBAAiB6D,aAAa,SAAS,OAAA;AACnE5C,iBAAOI,QAAQwB,QAAQC,SAASe,aAAa,SAAS;AACtD5C,iBAAOI,QAAQd,WAAWsD,aAAa,IAAI;AAE3C,cAAIA,YAAY;AACdF,4BAAgB1C,OAAOE;UACzB;QACF,CAAA;AAEA,YAAI,CAACwC,eAAe;AAClB,gBAAMG,WAAWnB,QAAQ,CAAA;AACzB,cAAImB,UAAU;AACZA,qBAASzC,QAAQd,WAAW;UAC9B;QACF;AAEA,aAAK,iBAAiBoD;AACtB,cAAMI,WAAWvG,QAAQ,KAAKlB,SAAS,KAAK,cAAc;AAC1D,aAAKoH,gBAAgB,kBAAkBK,QAAAA;AAEvC,YAAIH,kBAAkB,KAAK,kBAAkB,OAAO,KAAKtF,kBAAkB,YAAY;AACrF,eAAKA,cAAa;QACpB;MACF;MAEA,uBAAoB;AAClB,eAAO,CAAC,KAAKhC,SAAS,CAAC,KAAK;MAC9B;MAEA,mBAAgB;AACd,YAAI,KAAK,gBAAgB;AACvB,iBAAO,KAAK;QACd;AAEA,YAAI,OAAO,KAAKC,gBAAgB,YAAY,KAAKA,YAAY0D,KAAI,EAAGC,SAAS,GAAG;AAC9E,iBAAO,KAAK3D,YAAY0D,KAAI;QAC9B;AAEA,eAAO;MACT;MAEA,qBAAkB;AAChB,YAAI,CAAC,KAAKnE,MAAM;AACd;QACF;AAEA,cAAM6G,UAAU,KAAK,SAASF,OAAO,CAACuB,MAAMA,EAAE3C,QAAQ7C,MAAM8C,YAAY,MAAA;AAExE,YAAIqB,QAAQzC,WAAW,GAAG;AACxB,eAAKvD,cAAcmF,MAAAA;AACnB;QACF;AAEA,YAAImC,SAAmCtB,QAAQ,CAAA;AAE/C,YAAI,KAAK,kBAAkB,SAAS;AAClCsB,mBAAStB,QAAQ,CAAA;QACnB,WAAW,KAAK,kBAAkB,QAAQ;AACxCsB,mBAAStB,QAAQA,QAAQzC,SAAS,CAAA;QACpC,WAAW,KAAK,kBAAkB,QAAQ,KAAK5D,UAAU,MAAM;AAC7D,gBAAM4E,QAAQ,KAAK,mBAAmB,KAAK5E,KAAK;AAChD,cAAI4E,SAASA,MAAMG,QAAQ7C,MAAM8C,YAAY,QAAQ;AACnD2C,qBAAS/C;UACX;QACF;AAEA,YAAI+C,QAAQ;AACV,eAAK,aAAaA,MAAAA;QACpB;AACA,aAAK,gBAAgB;MACvB;MAEA,aAAahD,QAAoB;AAC/B,aAAK,SAASD,QAAQ,CAACkD,UAAAA;AACrBA,gBAAM7C,QAAQd,WAAW2D,UAAUjD,SAAS,IAAI;QAClD,CAAA;AAEAA,eAAOI,QAAQS,MAAM;UAAEqC,eAAe;QAAK,CAAA;MAC7C;MAEA,oBAAoBC,OAAa;AAC/B,cAAMzB,UAAU,KAAK,SAASF,OAAO,CAACuB,MAAMA,EAAE3C,QAAQ7C,MAAM8C,YAAY,MAAA;AAExE,YAAIqB,QAAQzC,WAAW,GAAG;AACxB,eAAKvD,cAAcmF,MAAAA;AACnB;QACF;AAEA,cAAMuC,aAAaC,KAAKC,IAAI,GAAGD,KAAKE,IAAIJ,OAAOzB,QAAQzC,SAAS,CAAA,CAAA;AAChE,cAAMe,SAAS0B,QAAQ0B,UAAAA;AACvB,YAAIpD,QAAQ;AACV,eAAK,aAAaA,MAAAA;QACpB;MACF;MAEA,mBAAmB3E,OAAoB;AACrC,YAAIA,UAAU,MAAM;AAClB,iBAAOmI;QACT;AAEA,eAAO,KAAK,SAASjB,KAAK,CAACvC,WAAWA,OAAO3E,UAAUA,KAAAA;MACzD;MAEA,WAAWoI,MAAY;AACrB,cAAM/B,UAAU,KAAK,SAASF,OAAO,CAACuB,MAAMA,EAAE3C,QAAQ7C,MAAM8C,YAAY,MAAA;AAExE,YAAIqB,QAAQzC,WAAW,GAAG;AACxB,eAAKvD,cAAcmF,MAAAA;AACnB;QACF;AAEA,cAAM6C,gBAAgBC,SAASD;AAC/B,cAAME,eAAelC,QAAQmC,UAAU,CAAC7D,WAAWA,OAAOI,YAAYsD,aAAAA;AAEtE,YAAIE,iBAAiB,IAAI;AACvB,eAAK,oBAAoBH,OAAO,IAAI,IAAI/B,QAAQzC,SAAS,CAAA;AACzD;QACF;AAEA,cAAM6E,aAAaF,eAAeH,OAAO/B,QAAQzC,UAAUyC,QAAQzC;AACnE,aAAK,oBAAoB6E,SAAAA;MAC3B;MAEA;MAkCA,uBAAuB/C,OAAY;AACjC,cAAMc,SAAS,KAAK,SAASU,KAAK,CAACvC,WAAWA,OAAOI,YAAYuD,SAASD,aAAa;AAEvF,YAAI7B,QAAQ;AACV,eAAK,cAAcA,OAAOxG,OAAOwG,OAAO3B,OAAOa,KAAAA;QACjD;MACF;MAEA,cAAc1F,OAAe6E,OAAeM,aAAkB;AAC5D,YAAI,KAAK1F,UAAU;AACjB;QACF;AAEA0F,oBAAYwB,eAAc;AAC1BxB,oBAAYyB,gBAAe;AAE3B,cAAM8B,gBAAgB,KAAK1I;AAC3B,aAAKA,QAAQA;AACb,aAAK,iBAAiB6E;AACtB,aAAK,4BAA2B;AAEhC,aAAKI,OAAO,OAAOE,WAAAA;AAEnB,YAAIuD,kBAAkB1I,OAAO;AAC3B,eAAK,qBAAqBA,OAAO6E,OAAOM,WAAAA;QAC1C;AAEA,YAAI,CAAC,KAAKvF,YAAY;AACpBuE,yBAAe,MAAM,KAAKhE,SAASqF,MAAAA,CAAAA;QACrC;MACF;MAEA,oBAAoBT,SAAoB;AACtC,cAAM4D,gBAAgB5D,QAAQvB,aAAa,OAAA,KAAYuB,QAAQvB,aAAa,YAAA,KAAiBuB,QAAQwB,QAAQvG;AAE7G,YAAI2I,iBAAiBA,cAAchF,KAAI,EAAGC,SAAS,GAAG;AACpD,iBAAO+E,cAAchF,KAAI;QAC3B;AAEA,cAAMiF,OAAO7D,QAAQ8D,aAAalF,KAAAA;AAElC,YAAIiF,QAAQA,KAAKhF,SAAS,GAAG;AAC3B,iBAAOgF;QACT;AAEA,cAAMpB,WAAWjH,aAAAA;AACjBwE,gBAAQwB,QAAQvG,QAAQwH;AACxB,eAAOA;MACT;MAEA,oBAAoBzC,SAAsByC,UAAgB;AACxD,cAAMsB,gBAAgB/D,QAAQvB,aAAa,YAAA,KAAiBuB,QAAQvB,aAAa,YAAA;AAEjF,YAAIsF,iBAAiBA,cAAcnF,KAAI,EAAGC,SAAS,GAAG;AACpD,iBAAOkF,cAAcnF,KAAI;QAC3B;AAEA,cAAMiF,OAAO7D,QAAQ8D,aAAalF,KAAAA;AAElC,YAAIiF,QAAQA,KAAKhF,SAAS,GAAG;AAC3B,iBAAOgF;QACT;AAEA,eAAOpB;MACT;MAEA,qBAAqBxH,OAAe6E,OAAea,OAAY;AAC7DD,QAAAA,sBAAqB,MAAM,UAAU;UAAEzF;UAAO0F;QAAM,CAAA;AAEpD,aAAKqD,cACH,IAAIC,YAAY,gBAAgB;UAC9BC,QAAQ;YAAEjJ;YAAO6E;YAAOa;UAAM;UAC9BwD,SAAS;UACTC,UAAU;QACZ,CAAA,CAAA;MAEJ;;;;;AA1tBK,cAAA,GAAA,IAAA,GAAA,KAUI3J,sBAAI4J,aAAA,IAAA,GAAJ5J,YAAAA,MAAO,KAAA,IAAA,KAGPC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,qBAAAA,YAAAA,MAAO,KAAA,GAAA,KAGPC,yBAAAA,eAAAA,MAAW,KAAA,GAAA,KAGXC,2BAAAA,iBAAAA,MAAa,KAAA,GAAA,KAUbC,sBAAAA,aAAAA,MAAsC,QAAA,GAAA,KAStCC,0BAAAA,gBAAAA,MAAoB,MAAA,GAAA,KAGpBC,qBAAAA,YAAAA,MAAsB,IAAA,GAAA,KAGtBC,sBAAAA,aAAAA,MAAuB,IAAA,GAAA,KAOvBC,6BAAAA,kBAAAA,MAA6B,kBAAA,GAAA,KAG7BC,2BAAAA,iBAAAA,MAAuB,cAAA,GAAA,KAGvBC,yBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,6BAAAA,kBAAAA,IAAAA,GAAAA,KAGAC,8BAAAA,mBAAAA,IAAAA,GAAAA,KAGAC,6BAAAA,kBAAAA,IAAAA,GAAAA,KAET,WAA2B,CAAA,GAAE,KAC7B,iBAAgC,MAAA,KAChC,eAAuC,MAAA,KACvC,gBAAyC,MAAA,KACzC,sBAAsB,OAAA,KACtB,oBAAkC,MAAA,KAClC,oBAAoB,MAAA;AAClB,eAAK,aAAY;QACnB,GAAA,KAwJA,4BAA4B,CAACoF,UAAAA;AAC3B,cAAI,KAAKjG,UAAU;AACjB;UACF;AAEA,cAAI,CAAC,KAAKD,MAAM;AACd,iBAAKyF,OAAO,MAAMS,KAAAA;AAElB,gBAAI,KAAKtF,aAAa;AACpB,mBAAKA,YAAYJ,QAAQ;AACzB,mBAAK,eAAe,EAAA;AACpB,mBAAKI,YAAYoF,MAAK;YACxB;UACF,OAAO;AACL,gBAAIE,MAAMiC,WAAW,KAAKvH,aAAa;AACrC,mBAAK6E,OAAO,OAAOS,KAAAA;YACrB;UACF;QACF,GAAA,KAEA,qBAAqB,CAACA,UAAAA;AACpB,gBAAM2D,QAAQ3D,MAAMiC;AACpB,eAAK,eAAe0B,MAAMrJ,KAAK;AAE/B,cAAI,CAAC,KAAKR,MAAM;AACd,iBAAKyF,OAAO,MAAMS,KAAAA;UACpB;QACF,GAAA,KA8EA,wBAAwB,CAACA,UAAAA;AACvB,kBAAQA,MAAMoB,KAAG;YACf,KAAK;AACHpB,oBAAMiB,eAAc;AACpB,mBAAK,gBAAgB;AACrB,mBAAK1B,OAAO,MAAMS,KAAAA;AAClB;YACF,KAAK;AACHA,oBAAMiB,eAAc;AACpB,mBAAK,gBAAgB;AACrB,mBAAK1B,OAAO,MAAMS,KAAAA;AAClB;YACF,KAAK;AACH,kBAAI,CAAC,KAAK9F,YAAY;AACpB8F,sBAAMiB,eAAc;AACpB,qBAAK1B,OAAO,MAAMS,KAAAA;cACpB;AACA;YACF,KAAK;AACH,kBAAI,CAAC,KAAK9F,YAAY;AACpB8F,sBAAMiB,eAAc;AACpB,qBAAK1B,OAAO,MAAMS,KAAAA;cACpB;AACA;YACF,KAAK;AACH,kBAAI,KAAKlG,MAAM;AACbkG,sBAAMiB,eAAc;AACpB,qBAAK1B,OAAO,OAAOS,KAAAA;cACrB;AACA;YACF;AACE;UACJ;QACF,GAAA,KA6BA,sBAAsB,CAACA,UAAAA;AACrB,eAAKT,OAAO,CAAC,KAAKzF,MAAMkG,KAAAA;QAC1B,GAAA,KA4NA,sBAAsB,CAACA,UAAAA;AACrB,kBAAQA,MAAMoB,KAAG;YACf,KAAK;AACHpB,oBAAMiB,eAAc;AACpB,mBAAK,WAAW,CAAA;AAChB;YACF,KAAK;AACHjB,oBAAMiB,eAAc;AACpB,mBAAK,WAAW,EAAC;AACjB;YACF,KAAK;AACHjB,oBAAMiB,eAAc;AACpB,mBAAK,oBAAoB,CAAA;AACzB;YACF,KAAK;AACHjB,oBAAMiB,eAAc;AACpB,mBAAK,oBAAoB,KAAK,SAAS/C,SAAS,CAAA;AAChD;YACF,KAAK;YACL,KAAK,KAAK;AACR8B,oBAAMiB,eAAc;AACpB,mBAAK,uBAAuBjB,KAAAA;AAC5B;YACF;YACA,KAAK;AACHA,oBAAMiB,eAAc;AACpB,mBAAK1B,OAAO,OAAOS,KAAAA;AACnB,mBAAKvF,SAASqF,MAAAA;AACd;YACF;AACE;UACJ;QACF;;IA+EF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICr/BA8D,yCAqM2BC,gBAAAA,SAAAA,SAAAA,SAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,QAAAA,SAAAA,SAIhBC,cAGAC,oBAGAC,aAGAC,aAGAC,iBAGAC,iBAGAC,gBAAAA,sBAtBEC;;;;AArMb,IAAAT,oBAAqB;AAErB,IAAAU;AAEA;AACA;AACA;AACA;aAECC,UAAU;MACTC,KAAK;MACLC,YAAY;MACZC,UAAU;MACVC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6KRC,WAAAA;AACE,eAAOC;4CACiCC,QAAQ,KAAKX,QAAQ,CAAA;;0CAEvBW,QAAQ,KAAKZ,QAAQ,CAAA,cAAeY,QAAQ,KAAKZ,QAAQ,CAAA,mBAAoBY,QAAQ,KAAKZ,QAAQ,CAAA;;;;;MAK1I;IACF,CAAA,GAAAa,UAIGC,KAAoB;MAAEC,SAAS;IAAK,CAAA,GAAAC,UAGpCF,KAAoB;MAAEC,SAAS;IAAK,CAAA,GAAAE,UAGpCH,KAAa;MAAEC,SAAS;MAAMG,cAAc;IAAO,CAAA,GAAAC,SAGnDL,KAAoB;MAAEC,SAAS;IAAK,CAAA,GAAAK,SAGpCN,KAAc;MAAEhB,MAAMc;MAASG,SAAS;MAAMG,cAAc;IAAM,CAAA,GAAAG,SAGlEP,KAAc;MAAEhB,MAAMc;MAASG,SAAS;MAAMG,cAAc;IAAM,CAAA,GAAAI,SAGlEC,MAAwB,OAAA,GAAAC,SAgDxBC,OAAO,cAAc;MAAEC,UAAU;IAAsB,CAAA,GAAAC,SAKvDF,OAAO,cAAc;MAAEC,UAAU;IAAsB,CAAA,GAAAE,UAKvDH,OAAuC,SAAS;MAAEC,UAAU;IAAQ,CAAA,GAAAG,UAUpEJ,OAAuC,UAAU;MAAEC,UAAU;IAAQ,CAAA;AAzFjE,IAAMvB,QAAN,eAAoBR,iBAAAA,aAAAA;;eAIhBC,cAGAC,oBAGAC,aAGAC,aAGAC,iBAGAC,iBAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,QAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAlBAN;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAgDT4B;;;;;YAKAC;;;;;YAKAC;;;;;YAUAC;;;;WA1FyBtC,cAAAA;;MAIhBC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,cAAAA;oBAAAA;;UAAAA,YAAAA,IAAAA;aAAAA,4BAAW;;MAGXC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAERgC,wBAA8B;AACpC,cAAMC,YAAY,KAAKC,YAAYC,cAAc,oBAAA;AACjD,YAAI,CAACF,WAAW;AACd;QACF;AAEA,cAAMG,aAAa,KAAKF,YAAYC,cAAc,qBAAA;AAClD,cAAME,YAAY3B,QAAQ0B,YAAYE,cAAc;UAAEC,SAAS;QAAK,CAAA,EAAGC,SAAS,CAAA;AAChFC,4BAAoBR,WAAW,mBAAmBI,SAAAA;MACpD;MAEQK,wBAA8B;AACpC,cAAMT,YAAY,KAAKC,YAAYC,cAAc,oBAAA;AACjD,YAAI,CAACF,WAAW;AACd;QACF;AAEA,cAAMU,aAAa,KAAKT,YAAYC,cAAc,qBAAA;AAClD,cAAMS,YAAYlC,QAAQiC,YAAYL,cAAc;UAAEC,SAAS;QAAK,CAAA,EAAGC,SAAS,CAAA;AAChFC,4BAAoBR,WAAW,mBAAmBW,SAAAA;MACpD;MAEAC,cAAoB;AAClB,YAAI,CAAC,KAAK7C,SAAS;AACjB;QACF;AAEA,cAAMA,UAAU,KAAKA;AACrB,cAAMN,QAAQ,KAAKA,SAAS;AAE5B,YAAIM,QAAQN,UAAUA,OAAO;AAC3BM,kBAAQN,QAAQA;QAClB;AAEAM,gBAAQJ,OAAO,KAAKA,QAAQ;AAC5BI,gBAAQL,cAAc,KAAKA,eAAe;AAC1CK,gBAAQH,OAAO,KAAKA,QAAQ;AAC5BG,gBAAQF,WAAWY,QAAQ,KAAKZ,QAAQ;AAExC,aAAKkC,sBAAqB;AAC1B,aAAKU,sBAAqB;AAE1BD,4BAAoB,MAAM,YAAY/B,QAAQ,KAAKZ,QAAQ,CAAA;MAC7D;MAGA8B,qBAA2B;AACzB,aAAKI,sBAAqB;MAC5B;MAGAH,qBAA2B;AACzB,aAAKa,sBAAqB;MAC5B;MAGAZ,YAAYgB,OAAcC,QAAwC;AAChE,YAAI,CAACA,QAAQ;AACX;QACF;AAEA,aAAKrD,QAAQqD,OAAOrD;AACpBsD,QAAAA,sBAAqB,MAAM,SAAS;UAAEtD,OAAO,KAAKA,SAAS;UAAIoD;QAAM,CAAA;MACvE;MAGAf,aAAae,OAAcC,QAAwC;AACjE,YAAI,CAACA,QAAQ;AACX;QACF;AAEA,aAAKrD,QAAQqD,OAAOrD;AACpBsD,QAAAA,sBAAqB,MAAM,UAAU;UAAEtD,OAAO,KAAKA,SAAS;UAAIoD;QAAM,CAAA;MACxE;;;;;AAjGK,cAAA,GAAA,IAAA,GAAA,KAIIpD,uBAAKuD,aAAA,IAAA,GAALvD,aAAAA,IAAAA,IAAAA,KAGAC,4BAAAA,mBAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,wBAAAA,eAAAA,IAAAA;;IA4EX;;;;;ACjRO,SAASkD,SAASC,GAAWC,GAAWC,GAAS;AACtD,MAAIC,OAAQH,IAAI,MAAO,OAAO;AAC9BG,SAAO;AAEP,QAAMC,aAAaC,SAAQJ,CAAAA;AAC3B,QAAMK,QAAQD,SAAQH,CAAAA;AACtB,QAAMK,IAAID,QAAQF;AAClB,QAAMI,IAAID,KAAK,IAAIE,KAAKC,IAAKP,MAAM,IAAK,CAAA;AACxC,QAAMQ,IAAIL,QAAQC;AAElB,MAAIK,IAAI;AACR,MAAIC,IAAI;AACR,MAAIC,IAAI;AAER,MAAIX,MAAM,GAAG;AACXS,QAAIL;AACJM,QAAIL;EACN,WAAWL,MAAM,GAAG;AAClBS,QAAIJ;AACJK,QAAIN;EACN,WAAWJ,MAAM,GAAG;AAClBU,QAAIN;AACJO,QAAIN;EACN,WAAWL,MAAM,GAAG;AAClBU,QAAIL;AACJM,QAAIP;EACN,WAAWJ,MAAM,GAAG;AAClBS,QAAIJ;AACJM,QAAIP;EACN,OAAO;AACLK,QAAIL;AACJO,QAAIN;EACN;AAEA,SAAO;IACLI,GAAGH,KAAKM,OAAOH,IAAID,KAAK,GAAA;IACxBE,GAAGJ,KAAKM,OAAOF,IAAIF,KAAK,GAAA;IACxBG,GAAGL,KAAKM,OAAOD,IAAIH,KAAK,GAAA;EAC1B;AACF;AAEO,SAASK,SAASJ,GAAWC,GAAWC,GAAS;AACtD,QAAMG,KAAKL,IAAI;AACf,QAAMM,KAAKL,IAAI;AACf,QAAMM,KAAKL,IAAI;AAEf,QAAMM,MAAMX,KAAKW,IAAIH,IAAIC,IAAIC,EAAAA;AAC7B,QAAME,MAAMZ,KAAKY,IAAIJ,IAAIC,IAAIC,EAAAA;AAC7B,QAAMG,QAAQF,MAAMC;AAEpB,MAAIrB,IAAI;AACR,QAAMC,IAAImB,QAAQ,IAAI,IAAIE,QAAQF;AAClC,QAAMlB,IAAIkB;AAEV,MAAIE,UAAU,GAAG;AACf,YAAQF,KAAAA;MACN,KAAKH;AACHjB,aAAKkB,KAAKC,MAAMG,SAASJ,KAAKC,KAAK,IAAI;AACvC;MACF,KAAKD;AACHlB,aAAKmB,KAAKF,MAAMK,QAAQ;AACxB;MACF,KAAKH;AACHnB,aAAKiB,KAAKC,MAAMI,QAAQ;AACxB;MACF;AACE;IACJ;AAEAtB,SAAK;EACP;AAEA,SAAO;IAAEA;IAAGC;IAAGC;EAAE;AACnB;AAEO,SAASqB,SAASX,GAAWC,GAAWC,GAAS;AACtD,QAAMU,QAAQ,CAACC,cAAsBA,UAAUC,SAAS,EAAA,EAAIC,SAAS,GAAG,GAAA;AACxE,SAAO,IAAIH,MAAMZ,CAAAA,CAAAA,GAAKY,MAAMX,CAAAA,CAAAA,GAAKW,MAAMV,CAAAA,CAAAA,GAAKc,YAAW;AACzD;AAEO,SAASC,SAASC,KAAW;AAClC,MAAIC,aAAaD,IAAIE,KAAI;AAEzB,MAAI,oBAAoBC,KAAKF,UAAAA,GAAa;AACxCA,iBAAa,IAAIA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE;EAChH;AAEA,QAAMG,QAAQ,4CAA4CC,KAAKJ,UAAAA;AAE/D,MAAI,CAACG,SAAS,CAACA,MAAM,CAAA,KAAM,CAACA,MAAM,CAAA,KAAM,CAACA,MAAM,CAAA,GAAI;AACjD,WAAO;EACT;AAEA,SAAO;IACLtB,GAAGwB,SAASF,MAAM,CAAA,GAAI,EAAA;IACtBrB,GAAGuB,SAASF,MAAM,CAAA,GAAI,EAAA;IACtBpB,GAAGsB,SAASF,MAAM,CAAA,GAAI,EAAA;EACxB;AACF;AAEO,SAASG,SAASP,KAAW;AAClC,QAAMQ,MAAMT,SAASC,GAAAA;AACrB,SAAOQ,MAAMtB,SAASsB,IAAI1B,GAAG0B,IAAIzB,GAAGyB,IAAIxB,CAAC,IAAI;AAC/C;AAEO,SAASyB,SAASvC,GAAWC,GAAWC,GAAS;AACtD,QAAMoC,MAAMvC,SAASC,GAAGC,GAAGC,CAAAA;AAC3B,SAAOqB,SAASe,IAAI1B,GAAG0B,IAAIzB,GAAGyB,IAAIxB,CAAC;AACrC;AAEO,SAAS0B,WAAWV,KAAW;AACpC,SAAO,qCAAqCG,KAAKH,IAAIE,KAAI,CAAA;AAC3D;AAEO,SAASS,aAAa7B,GAAWC,GAAWC,GAAS;AAC1D,UAAQ,QAAQF,IAAI,QAAQC,IAAI,QAAQC,KAAK;AAC/C;AAEO,SAAS4B,aAAa9B,GAAWC,GAAWC,GAAS;AAC1D,SAAO2B,aAAa7B,GAAGC,GAAGC,CAAAA,IAAK;AACjC;AAEO,SAAS6B,SAAS3C,GAAWC,GAAWC,GAAS;AACtD,QAAM0C,IAAI1C,KAAK,IAAID,IAAI;AACvB,QAAM4C,KAAKD,MAAM,KAAKA,MAAM,IAAI,KAAK1C,IAAI0C,KAAKnC,KAAKY,IAAIuB,GAAG,IAAIA,CAAAA;AAC9D,SAAO;IAAE5C;IAAGC,GAAG4C;IAAID;EAAE;AACvB;AAEO,SAASE,SAAS9C,GAAWC,GAAW2C,GAAS;AACtD,QAAM1C,IAAI0C,IAAI3C,IAAIQ,KAAKY,IAAIuB,GAAG,IAAIA,CAAAA;AAClC,QAAMG,KAAK7C,MAAM,IAAI,IAAI,KAAK,IAAI0C,IAAI1C;AACtC,SAAO;IAAEF;IAAGC,GAAG8C;IAAI7C;EAAE;AACvB;AA8BO,SAAS8C,mBAAmBC,KAAUC,QAAmB;AAC9D,QAAM,EAAElD,GAAGC,GAAGC,EAAC,IAAK+C;AAEpB,UAAQC,QAAAA;IACN,KAAK;AACH,aAAO;QACLC,QAAQ;UAAC;;QACTC,QAAQ;UAACb,SAASvC,GAAGC,GAAGC,CAAAA;;QACxBkB,KAAK;UAAC;;QACNiC,QAAQ;UAAC;;MACX;IACF,KAAK,OAAO;AACV,YAAMf,MAAMvC,SAASC,GAAGC,GAAGC,CAAAA;AAC3B,aAAO;QACLiD,QAAQ;UAAC;UAAK;UAAK;;QACnBC,QAAQ;UAACd,IAAI1B;UAAG0B,IAAIzB;UAAGyB,IAAIxB;;QAC3BM,KAAK;UAAC;UAAK;UAAK;;QAChBiC,QAAQ;UAAC;UAAI;UAAI;;MACnB;IACF;IACA,KAAK,OAAO;AACV,YAAMC,MAAMX,SAAS3C,GAAGC,GAAGC,CAAAA;AAC3B,aAAO;QACLiD,QAAQ;UAAC;UAAK;UAAK;;QACnBC,QAAQ;UAAC3C,KAAKM,MAAMuC,IAAItD,CAAC;UAAGS,KAAKM,MAAMuC,IAAIrD,IAAI,GAAA;UAAMQ,KAAKM,MAAMuC,IAAIV,IAAI,GAAA;;QACxExB,KAAK;UAAC;UAAK;UAAK;;QAChBiC,QAAQ;UAAC;UAAK;UAAK;;MACrB;IACF;IACA,KAAK;AACH,aAAO;QACLF,QAAQ;UAAC;UAAK;UAAK;;QACnBC,QAAQ;UAAC3C,KAAKM,MAAMf,CAAAA;UAAIS,KAAKM,MAAMd,IAAI,GAAA;UAAMQ,KAAKM,MAAMb,IAAI,GAAA;;QAC5DkB,KAAK;UAAC;UAAK;UAAK;;QAChBiC,QAAQ;UAAC;UAAK;UAAK;;MACrB;IACF;AACE,aAAO;QACLF,QAAQ;UAAC;;QACTC,QAAQ;UAACb,SAASvC,GAAGC,GAAGC,CAAAA;;QACxBkB,KAAK;UAAC;;QACNiC,QAAQ;UAAC;;MACX;EACJ;AACF;AAEO,SAASE,wBAAwBN,KAAUC,QAAqBM,OAAelD,OAAsB;AAC1G,QAAMmD,SAAS;IAAE,GAAGR;EAAI;AAExB,UAAQC,QAAAA;IACN,KAAK,OAAO;AACV,UAAI,OAAO5C,UAAU,YAAYkC,WAAWlC,KAAAA,GAAQ;AAClD,cAAMoD,SAASrB,SAAS/B,KAAAA;AACxB,YAAIoD,QAAQ;AACV,iBAAOA;QACT;MACF;AACA;IACF;IACA,KAAK,OAAO;AACV,YAAMpB,MAAMvC,SAASkD,IAAIjD,GAAGiD,IAAIhD,GAAGgD,IAAI/C,CAAC;AACxC,YAAMyD,OAAiC;QAACrB,IAAI1B;QAAG0B,IAAIzB;QAAGyB,IAAIxB;;AAC1D6C,WAAKH,KAAAA,IAAS/C,KAAKW,IAAI,GAAGX,KAAKY,IAAI,KAAKuC,OAAOtD,KAAAA,CAAAA,CAAAA;AAC/C,aAAOU,SAAS2C,KAAK,CAAA,GAAIA,KAAK,CAAA,GAAIA,KAAK,CAAA,CAAE;IAC3C;IACA,KAAK,OAAO;AACV,YAAML,MAAMX,SAASM,IAAIjD,GAAGiD,IAAIhD,GAAGgD,IAAI/C,CAAC;AACxC,YAAMyD,OAAiC;QAACL,IAAItD;QAAGsD,IAAIrD,IAAI;QAAKqD,IAAIV,IAAI;;AACpEe,WAAKH,KAAAA,IAASI,OAAOtD,KAAAA;AACrBqD,WAAK,CAAA,IAAKlD,KAAKW,IAAI,GAAGX,KAAKY,IAAI,KAAKsC,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKlD,KAAKW,IAAI,GAAGX,KAAKY,IAAI,KAAKsC,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKlD,KAAKW,IAAI,GAAGX,KAAKY,IAAI,KAAKsC,KAAK,CAAA,CAAE,CAAA;AAC3C,aAAOb,SAASa,KAAK,CAAA,GAAIA,KAAK,CAAA,IAAK,KAAKA,KAAK,CAAA,IAAK,GAAA;IACpD;IACA,KAAK,OAAO;AACV,YAAMA,OAAiC;QAACV,IAAIjD;QAAGiD,IAAIhD,IAAI;QAAKgD,IAAI/C,IAAI;;AACpEyD,WAAKH,KAAAA,IAASI,OAAOtD,KAAAA;AACrBqD,WAAK,CAAA,IAAKlD,KAAKW,IAAI,GAAGX,KAAKY,IAAI,KAAKsC,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKlD,KAAKW,IAAI,GAAGX,KAAKY,IAAI,KAAKsC,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKlD,KAAKW,IAAI,GAAGX,KAAKY,IAAI,KAAKsC,KAAK,CAAA,CAAE,CAAA;AAC3C,aAAO;QAAE3D,GAAG2D,KAAK,CAAA;QAAI1D,GAAG0D,KAAK,CAAA,IAAK;QAAKzD,GAAGyD,KAAK,CAAA,IAAK;MAAI;IAC1D;EACF;AAEA,SAAOF;AACT;AAzPA,IAAMpD,UA2POwD;AA3Pb,IAAAC,cAAA;;;IAAMzD,WAAU,CAACC,UAAkBG,KAAKW,IAAI,GAAGX,KAAKY,IAAI,GAAGf,KAAAA,CAAAA;AA2PpD,IAAMuD,gBAA+B;MAAC;MAAO;MAAO;MAAO;;;;;;AChP3D,SAASE,YAAYC,OAAyD;AACnF,QAAMC,iBAAiBC,OAAOC,QAAQH,KAAAA,EAAOI,OAA+B,CAACC,KAAK,CAACC,UAAUC,KAAAA,MAAM;AACjG,QAAIA,UAAU,QAAQA,UAAUC,UAAaD,UAAU,IAAI;AACzD,aAAOF;IACT;AAEAA,QAAIC,QAAAA,IAAY,OAAOC,UAAU,WAAW,GAAGA,KAAAA,KAAUA;AACzD,WAAOF;EACT,GAAG,CAAC,CAAA;AAEJ,aAAOI,2BAASR,cAAAA;AAClB;AAxCA,IAAAS,mBACA,kBACA,mBACA,eACA,kBACA,oBACA;AANA;;;IAAAA,oBAAwB;AACxB,uBAAyB;AACzB,wBAA0B;AAC1B,oBAAuB;AACvB,uBAAyB;AACzB,yBAA2B;AAC3B,kBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICRrBC,yCA0BwCC,qCAA3BC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,qBAAN,eAAiCD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,yCA8BgCC,6BAAnBC;;;;AA9Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;MAgBRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,aAAN,eAAyBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChCAO,yCA0ViCC,gBAAAA,SAAAA,SAAAA,SAAAA,SAaQC,sBACPC,eACwBC,gBAW/CC,cAAAA,4BA1BEC,aAkQb;;;;AA5lBA,IAAAN,oBAAqB;AAErB,IAAAO;AACA,IAAAC;AAaA;AACA;AACA;AACA;AACA;AACA;aAECC,UAAU;MACTC,KAAK;MACLC,UAAU;MACVC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmORC,WAAAA;AACE,cAAM,EAAEC,GAAGC,GAAGC,EAAC,IAAK,KAAKC;AACzB,cAAMC,UAAUC,SAASL,GAAG,GAAG,CAAA;AAC/B,cAAMM,aAAaD,SAASL,GAAGC,GAAGC,CAAAA;AAClC,cAAMK,eAAe,OAAOH,QAAQI,CAAC,KAAKJ,QAAQK,CAAC,KAAKL,QAAQM,CAAC;AACjE,cAAMC,aAAaX,IAAI;AACvB,cAAMY,YAAY,IAAIV;AAEtB,cAAMW,yBAAyB;UAC7BC,MAAM,QAAQb,IAAI,GAAA,OAAUA,IAAI,EAAA;UAChCc,KAAK,QAAQH,YAAY,GAAA,OAAUA,YAAY,EAAA;QACjD;AACA,cAAMI,kBAAkB;UACtBF,MAAM,QAAQH,aAAa,GAAA,OAAUA,aAAa,EAAA;QACpD;AACA,cAAMM,UAAUC,aAAaZ,WAAWE,GAAGF,WAAWG,GAAGH,WAAWI,CAAC;AACrE,cAAMS,gBAAgB,gBAAgBC;AACtC,cAAMC,gBAAgB;UACpBC,iBAAiB,KAAK/B;UACtB,gBAAgB0B,UAAU,0BAA0B;QACtD;AACA,cAAMM,aAAaC,mBAAmB,KAAKrB,KAAK,KAAKsB,MAAM;AAE3D,eAAOC;;;oBAGKC,2BAAS;UAAEL,iBAAiBf;QAAa,CAAA,CAAA;uBAClC,KAAKqB,2BAA2B;uBAChC,KAAKC,2BAA2B;qBAClC,KAAKC,yBAAyB;yBAC1B,KAAKA,yBAAyB;;kDAETH,2BAASd,sBAAAA,CAAAA;;;;;yBAK9B,KAAKkB,oBAAoB;yBACzB,KAAKC,oBAAoB;uBAC3B,KAAKC,kBAAkB;2BACnB,KAAKA,kBAAkB;;6CAETN,2BAASX,eAAAA,CAAAA;;;;;sBAKhCW,2BAASN,aAAAA,CAAAA;6BACEF,aAAAA;mBACVA,gBAAgB,KAAKe,wBAAwB,IAAA;;YAEpDf,gBAAgBO,gEAA8C,IAAA;;;;4CAI9B,KAAKS,iBAAiB;qDACb,KAAKC,eAAe,IAAI,KAAKX,OAAOY,YAAW,CAAA;;;;YAKxF,KAAKZ,WAAW,QACZC;;;;;yBAKSH,WAAWe,OAAO,CAAA,CAAE;yBACpB,CAACC,MAAa,KAAKC,sBAAsB,GAAID,EAAEE,OAA4BlD,KAAK,CAAA;;gBAGzFgC,WAAWmB,OAAOC,IAChB,CAACC,GAAGC,MAAMnB;;;;;wBAKJH,WAAWuB,IAAID,CAAAA,CAAE;2BACdE,OAAOxB,WAAWe,OAAOO,CAAAA,CAAE,CAAA;2BAC3B,CAACN,MAAa,KAAKC,sBAAsBK,GAAGG,OAAQT,EAAEE,OAA4BlD,KAAK,CAAA,CAAA;;aAErG,CAAA;;;;uDAM0C,KAAK0D,uBAAuB;iDAClC,KAAKC,sBAAsB;;;MAG1E;IACF,CAAA,GAAAC,UAcGC,MAAM,qBAAA,GAAAC,UACND,MAAM,cAAA,GAAAE,UACNF,MAAwB,oBAAA,GAAAG,UAExBC,KAAK;MACJC,SAAS;MACTC,cAAc;MACdC,SAA4BpE,OAAoB;AAC9C,YAAI,CAAC,KAAKqE,kBAAkB;AAC1B,eAAKC,cAActE,SAAS,SAAA;QAC9B;MACF;IACF,CAAA;AAzBK,IAAMC,cAAN,eAA0BL,iBAAAA,aAAAA;;eAaQC,sBACPC,eACwBC,gBAW/CC,cAAAA,YAAAA,GAAAA,GAAAA,CAAAA,cAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAb8BH;;;;;YACPC;;;;;YACwBC;;;;;YAW/CC;;;;WA1BsBJ,cAAAA;;MAO/B;MACA;MACA;MACA;MAGuCC;UAAAA,iBAAAA;oBAAAA;;UAAAA,eAAAA,IAAAA;aAAAA,+BAAc;;MACrBC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MACiBC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAWvDC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAEduE,oBAA0B;AACxB,aAAKC,gBAAgB,KAAKxE;AAC1B,aAAKsE,cAAc,KAAKtE,KAAK;MAC/B;MAEQsE,cAAcG,KAAmB;AACvC,YAAI,CAACC,WAAWD,GAAAA,GAAM;AACpB;QACF;AAEA,cAAM7D,MAAM+D,SAASF,GAAAA;AAErB,YAAI7D,KAAK;AACP,eAAKA,MAAMA;QACb;MACF;MAEA,aAAagE,OAAmB;AAC9B,cAAMC,WAAWC,SAAS,KAAKlE,IAAIH,GAAG,KAAKG,IAAIF,GAAG,KAAKE,IAAID,CAAC;AAE5D,YAAI,KAAKX,UAAU6E,UAAU;AAC3B,eAAKR,mBAAmB;AACxB,eAAKrE,QAAQ6E;AACb,eAAKR,mBAAmB;AAExB,cAAI,KAAKtE,YAAYgF,SAASC,kBAAkB,KAAKjF,UAAU;AAC7D,iBAAKA,SAASC,QAAQ6E;UACxB;AAEA,cAAID,OAAO;AACTK,YAAAA,sBAAqB,MAAM,SAAS;cAAEjF,OAAO,KAAKA;cAAO4E;YAAM,CAAA;UACjE;QACF;MACF;MA4CQM,sBAAsBN,OAA2B;AACvD,YAAI,CAAC,KAAK/E,gBAAgB;AACxB;QACF;AACA,cAAMsF,OAAO,KAAKtF,eAAeuF,sBAAqB;AACtD,cAAMC,IAAIC,KAAK/B,IAAI,GAAG+B,KAAKC,IAAIJ,KAAKK,OAAOZ,MAAMa,UAAUN,KAAK5D,IAAI,CAAA;AACpE,cAAMmE,IAAIJ,KAAK/B,IAAI,GAAG+B,KAAKC,IAAIJ,KAAKQ,QAAQf,MAAMgB,UAAUT,KAAK3D,GAAG,CAAA;AAEpE,aAAKZ,IAAIF,IAAI2E,IAAIF,KAAKK;AACtB,aAAK5E,IAAID,IAAI,IAAI+E,IAAIP,KAAKQ;AAE1B,aAAK,aAAaf,KAAAA;AAClB,aAAKiB,cAAa;MACpB;MA4CQC,UAAUlB,OAA2B;AAC3C,YAAI,CAAC,KAAK9E,SAAS;AACjB;QACF;AACA,cAAMqF,OAAO,KAAKrF,QAAQsF,sBAAqB;AAC/C,cAAMC,IAAIC,KAAK/B,IAAI,GAAG+B,KAAKC,IAAIJ,KAAKK,OAAOZ,MAAMa,UAAUN,KAAK5D,IAAI,CAAA;AAEpE,aAAKX,IAAIH,IAAK4E,IAAIF,KAAKK,QAAS;AAEhC,aAAK,aAAaZ,KAAAA;AAClB,aAAKiB,cAAa;MACpB;;;;;AA7KK,cAAA,GAAA,IAAA,GAAA,KAGGjF,OAAAA,aAAAA,IAAAA,GAAW;UAAEH,GAAG;UAAGC,GAAG;UAAGC,GAAG;QAAE,IAAA,KAC9B6D,gBAAwB,WAAA,KACxBtC,SAAsB,OAAA,KAC9BW,kBAAyC,QAAA,KACzC,wBAAwB,OAAA,KACxB,iBAAiB,OAAA,KACjB,2BAA0C,MAAA,KAC1C,oBAAmC,MAAA,KACnCwB,mBAAmB,OAAA,KAEoBxE,+BAAAA,qBAAAA,IAAAA,GAAAA,KACPC,wBAAAA,cAAAA,IAAAA,GAAAA,KACwBC,yBAAAA,eAAAA,IAAAA,GAAAA,KAW/CC,sBAAAA,aAAAA,IAAAA,GAAAA,KAqCAqC,8BAA8B,CAACuC,UAAAA;AACtC,cAAI,CAAC,KAAK/E,gBAAgB;AACxB;UACF;AAEA,cAAI+E,MAAMmB,WAAWC,UAAapB,MAAMmB,WAAW,GAAG;AACpD;UACF;AAEAnB,gBAAMqB,eAAc;AACpBrB,gBAAMsB,gBAAe;AAErB,eAAK,wBAAwB;AAC7B,eAAK,2BAA2BtB,MAAMuB;AACtC,eAAKtG,eAAeuG,kBAAkBxB,MAAMuB,SAAS;AACrD,eAAKjB,sBAAsBN,KAAAA;QAC7B,GAAA,KAEStC,8BAA8B,CAACsC,UAAAA;AACtC,cAAI,CAAC,KAAK,yBAAyBA,MAAMuB,cAAc,KAAK,0BAA0B;AACpF;UACF;AAEAvB,gBAAMqB,eAAc;AACpB,eAAKf,sBAAsBN,KAAAA;QAC7B,GAAA,KAESrC,4BAA4B,CAACqC,UAAAA;AACpC,cAAI,CAAC,KAAK,yBAAyBA,MAAMuB,cAAc,KAAK,0BAA0B;AACpF;UACF;AAEA,eAAK,wBAAwB;AAC7B,eAAK,2BAA2B;AAEhC,cAAI,KAAKtG,gBAAgBwG,kBAAkBzB,MAAMuB,SAAS,GAAG;AAC3D,iBAAKtG,eAAeyG,sBAAsB1B,MAAMuB,SAAS;UAC3D;AAEAlB,UAAAA,sBAAqB,MAAM,UAAU;YAAEjF,OAAO,KAAKA;YAAO4E;UAAM,CAAA;QAClE,GAAA,KAiBSpC,uBAAuB,CAACoC,UAAAA;AAC/B,cAAI,CAAC,KAAK9E,SAAS;AACjB;UACF;AAEA,cAAI8E,MAAMmB,WAAWC,UAAapB,MAAMmB,WAAW,GAAG;AACpD;UACF;AAEAnB,gBAAMqB,eAAc;AACpBrB,gBAAMsB,gBAAe;AAErB,eAAK,iBAAiB;AACtB,eAAK,oBAAoBtB,MAAMuB;AAC/B,eAAKrG,QAAQsG,kBAAkBxB,MAAMuB,SAAS;AAC9C,eAAKL,UAAUlB,KAAAA;QACjB,GAAA,KAESnC,uBAAuB,CAACmC,UAAAA;AAC/B,cAAI,CAAC,KAAK,kBAAkBA,MAAMuB,cAAc,KAAK,mBAAmB;AACtE;UACF;AAEAvB,gBAAMqB,eAAc;AACpB,eAAKH,UAAUlB,KAAAA;QACjB,GAAA,KAESlC,qBAAqB,CAACkC,UAAAA;AAC7B,cAAI,CAAC,KAAK,kBAAkBA,MAAMuB,cAAc,KAAK,mBAAmB;AACtE;UACF;AAEA,eAAK,iBAAiB;AACtB,eAAK,oBAAoB;AAEzB,cAAI,KAAKrG,SAASuG,kBAAkBzB,MAAMuB,SAAS,GAAG;AACpD,iBAAKrG,QAAQwG,sBAAsB1B,MAAMuB,SAAS;UACpD;AAEAlB,UAAAA,sBAAqB,MAAM,UAAU;YAAEjF,OAAO,KAAKA;YAAO4E;UAAM,CAAA;QAClE,GAAA,KAeS2B,uBAAuB,CAAC3B,UAAAA;AAC/B,gBAAM4B,QAAQ5B,MAAM1B;AACpB,gBAAM2B,WAAW2B,MAAMxG;AAEvB,cAAI0E,WAAWG,QAAAA,GAAW;AACxB,iBAAKP,cAAcO,QAAAA;AACnB,iBAAK,aAAaD,KAAAA;AAClB,iBAAKiB,cAAa;AAClBZ,YAAAA,sBAAqB,MAAM,UAAU;cAAEjF,OAAO,KAAKA;cAAO4E;YAAM,CAAA;UAClE,WAAW,KAAK7E,UAAU;AACxB,iBAAKA,SAASC,QAAQ,KAAKA;UAC7B;QACF,GAAA,KAESiD,wBAAwB,CAACwD,OAAezG,UAAAA;AAC/C,eAAKY,MAAM8F,wBAAwB,KAAK9F,KAAK,KAAKsB,QAAQuE,OAAOzG,KAAAA;AACjE,eAAK,aAAa,IAAA;AAClB,eAAK6F,cAAa;QACpB,GAAA,KAESc,qBAAqB,CAACzE,WAAAA;AAC7B,eAAKA,SAASA;AACd,eAAK2D,cAAa;QACpB,GAAA,KAESjD,oBAAoB,MAAA;AAE3B,eAAKC,kBAAkB;AACvB,eAAKgD,cAAa;AAGlBe,qBAAW,MAAA;AACT,kBAAMC,eAAeC,cAAcC,QAAQ,KAAK7E,MAAM;AACtD,kBAAM8E,aAAaH,eAAe,KAAKC,cAAcG;AACrD,iBAAK/E,SAAS4E,cAAcE,SAAAA;AAC5B,iBAAKnE,kBAAkB;AACvB,iBAAKgD,cAAa;AAGlBe,uBAAW,MAAA;AACT,mBAAK/D,kBAAkB;AACvB,mBAAKgD,cAAa;YACpB,GAAG,GAAA;UACL,GAAG,GAAA;QACL,GAAA,KAESnC,0BAA0B,CAACkB,UAAAA;AAClC,eAAKN,cAAc,KAAKE,aAAa;AACrC,eAAKH,mBAAmB;AACxB,eAAKrE,QAAQ,KAAKwE;AAClB,eAAKH,mBAAmB;AACxB,eAAKwB,cAAa;AAClBZ,UAAAA,sBAAqB,MAAM,UAAU;YAAEjF,OAAO,KAAKwE;YAAeI;UAAM,CAAA;QAC1E,GAAA,KAESjB,yBAAyB,CAACiB,UAAAA;AACjC,eAAKJ,gBAAgB,KAAKxE;AAC1BiF,UAAAA,sBAAqB,MAAM,SAAS;YAAEjF,OAAO,KAAKA;YAAO4E;UAAM,CAAA;QACjE,GAAA,KAESjC,wBAAwB,OAAOiC,UAAAA;AACtC,cAAI,EAAE,gBAAgB/C,SAAS;AAC7B;UACF;AAEA,cAAI;AACF,kBAAMqF,aAAa,IACjBrF,OACAsF,WAAU;AACZ,kBAAMC,SAAS,MAAMF,WAAWG,KAAI;AAEpC,gBAAID,OAAOE,SAAS;AAClB,mBAAKhD,cAAc8C,OAAOE,OAAO;AACjC,mBAAK,aAAa1C,KAAAA;AAClB,mBAAKiB,cAAa;AAClBZ,cAAAA,sBAAqB,MAAM,UAAU;gBAAEjF,OAAO,KAAKA;gBAAO4E;cAAM,CAAA;YAClE;UACF,QAAQ;UAER;QACF;;IACF;AAEA,IAAA,iBAAe;MACb3E,aAAAA;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5lBAsH,yCAsEgCC,gBAAAA,SAAAA,SAAAA,SAAAA,SAKGC,gBAgBxBC,cAGAC,iBAGAC,kBAAAA,2BA3BEC;;;;AAtEb,IAAAN,oBAA0C;AAE1C,IAAAO;AAEA;AACA;AACA;AACA;AACA;AACA,IAAAC;AAEA,IAAAC;AAEA;aAECC,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoDV,CAAA,GAAAC,UAMGC,MAAM,eAAA,GAAAC,UAENC,KAAyB;MACxBC,SAAS;MACTC,cAAc;MACdC,SAASC,MAAI;AACX,YAAIA,QAAQC,WAAWD,IAAAA,GAAO;AAC5B,gBAAME,aAAaF,KAAKG,YAAW;AACnC,cAAI,KAAKpB,UAAUmB,YAAY;AAC7B,iBAAKnB,QAAQmB;UACf;QACF,WAAW,CAACF,MAAM;AAChB,eAAKjB,QAAQ;QACf;MACF;IACF,CAAA,GAAAqB,UAGCR,KAAc;MAAES,MAAMC;MAAST,SAAS;IAAK,CAAA,GAAAU,UAG7CX,KAAgB;MAAEC,SAAS;MAAMC,cAAc;IAAe,CAAA;AA1B1D,IAAMZ,aAAN,eAAyBL,iBAAAA,aAAAA;;eAKGC,gBAgBxBC,cAGAC,iBAGAC,kBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAtBwBH;;;;;YAgBxBC;;;;;YAGAC;;;;;YAGAC;;;;WA3BqBJ,cAAAA;;MAG9B;MAEiCC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAgBhCC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;MAElBuB,oBAA0B;AACxB,aAAK,oBAAoB,KAAKC,cAAc,kBAAA,MAAwB;AACpEC,4BAAoB,MAAM,kBAAkB,KAAK,iBAAiB;MACpE;MAEAC,cAAoB;AAClBD,4BAAoB,MAAM,YAAYJ,QAAQ,KAAKtB,QAAQ,CAAA;MAC7D;MAEA,wBAAqB;AACnB,cAAM4B,cAAc;UAClBC,iBAAiB,KAAK9B;QACxB;AAEA,eAAO+B;;sDAE2C,KAAK/B,KAAK,YAAY,KAAK,kBAAkB;yCAC9DgC,2BAASH,WAAAA,CAAAA;;;;MAI5C;MAEAI,SAAyB;AACvB,eAAOF;iCACsB,KAAK9B,QAAQ,eAAe,KAAKC,SAAS;UACjE,KAAK,oBAAoB6B,sEAAoD,KAAK,sBAAqB,CAAA;;;mBAG9F,KAAK/B,KAAK;mBACV,KAAK,kBAAkB;oBACtB,KAAK,mBAAmB;oBACxB,KAAK,mBAAmB;mBACzB,KAAK,kBAAkB;;;;MAIxC;MAEA;MAKA;MAKA;MAKA;MAQA;;;;;AA3FK,cAAA,GAAA,IAAA,GAAA,KAGL,qBAAiBkC,aAAA,IAAA,GAAG,QAAA,KAEanC,yBAAAA,eAAAA,IAAAA,GAAAA,KAgBxBC,sBAAAA,aAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,0BAAAA,iBAAAA,MAAuB,cAAA,GAAA,KAyChC,qBAAqB,CAACiC,UAAAA;AACpB,eAAKnC,QAASmC,MAAMC,OAA4BpC;AAChDqC,UAAAA,sBAAqB,MAAM,SAAS;YAAErC,OAAO,KAAKA;YAAOmC;UAAM,CAAA;QACjE,GAAA,KAEA,qBAAqB,CAACA,UAAAA;AACpB,eAAKnC,QAAQmC,MAAMG,OAAOtC;AAC1BqC,UAAAA,sBAAqB,MAAM,SAAS;YAAErC,OAAO,KAAKA;YAAOmC;UAAM,CAAA;QACjE,GAAA,KAEA,sBAAsB,CAACA,UAAAA;AACrB,eAAKnC,QAAQmC,MAAMG,OAAOtC;AAC1BqC,UAAAA,sBAAqB,MAAM,UAAU;YAAErC,OAAO,KAAKA;YAAOmC;UAAM,CAAA;QAClE,GAAA,KAEA,sBAAsB,CAACA,UAAAA;AACrB,eAAKnC,QAAQmC,MAAMG,OAAOtC;AAC1B,eAAKuC,cAAa;AAClB,cAAI,KAAKxC,UAAU;AACjB,iBAAKA,SAASyC,OAAO;UACvB;QACF,GAAA,KAEA,qBAAqB,CAACL,UAAAA;AACpB,eAAKnC,QAAQmC,MAAMG,OAAOtC;AAC1BqC,UAAAA,sBAAqB,MAAM,UAAU;YAAErC,OAAO,KAAKA;YAAOmC;UAAM,CAAA;AAChE,cAAI,KAAKpC,UAAU;AACjB,iBAAKA,SAASyC,OAAO;UACvB;QACF;;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC1KAC,yCA0E2BC,gBAAAA,SAAAA,SAEhBC,aAGAC,kBAAAA,sBALEC;;;;AA1Eb,IAAAJ,oBAAqB;AAErB;AACA;aAECK,UAAU;MACTC,KAAK;MACLC,UAAU;MACVC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmDRC,WAAAA;AACE,eAAOC;;;cAGG,KAAKT,SAAS,EAAA;;;oCAGQ,KAAKC,YAAY,eAAe,EAAA;;;;;MAKlE;IACF,CAAA,GAAAS,UAEGC,KAAoB;MAAEC,SAAS;IAAK,CAAA,GAAAC,UAGpCF,KAAc;MAAEG,MAAMC;MAASH,SAAS;IAAK,CAAA;AAJzC,IAAMV,QAAN,eAAoBH,iBAAAA,aAAAA;;eAEhBC,aAGAC,kBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,QAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAHAD;;;;;YAGAC;;;;WALgBF,cAAAA;;MAEhBC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;;;;;AALb,cAAA,GAAA,IAAA,GAAA,KAEID,uBAAKgB,aAAA,IAAA,GAALhB,YAAAA,IAAAA,IAAAA,KAGAC,0BAAAA,iBAAAA,MAAY,KAAA;;IACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChFAgB,yCAsE+BC,4BAAlBC;;;;AAtEb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkDRC,WAAAA;AACE,eAAOC;;;;;;;;;;;MAWT;IACF,CAAA;AACO,IAAML,YAAN,eAAwBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICxEAO,yCAmD8BC,gBAAAA,SAQnBC,cAAAA,yBAREC;;;;AAnDb,IAAAH,oBAA0C;AAE1C;AACA;aAICI,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwCRC,oBAAoB;QAAC;;IACvB,CAAA,GAAAC,UAIGC,KAAgB;MACfC,SAAS;MACTC,WAAW;MACXC,cAAc;IAChB,CAAA;AAPK,IAAMT,WAAN,eAAuBF,iBAAAA,aAAAA;;eAQnBC,cAAAA,YAAAA,GAAAA,GAAAA,CAAAA,WAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAAAA;;;;WARmBD,cAAAA;;MAQnBC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAEdW,SAAyB;AACvB,eAAOC;mDACwC,KAAKZ,KAAK;;wBAErC,KAAKA,KAAK;;;;;;;wBAOV,KAAKA,KAAK;;;;;;MAMhC;;;;;AA3BK,cAAA,GAAA,IAAA,GAAA,KAQIA,uBAAKa,aAAA,IAAA,GAALb,aAAAA,IAAAA;;IAoBX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC/EAc,yCAgE6BC,0BAAhBC;;;;AAhEb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiDRC,WAAAA;AACE,eAAOC;;;;;;MAMT;IACF,CAAA;AACO,IAAML,UAAN,eAAsBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IClEAO,yCA6F0BC,gBAAAA,SAQfC,cAAAA,qBAREC;;;;AA7Fb,IAAAH,oBAA0C;AAE1C;AACA;aAICI,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkFRC,oBAAoB;QAAC;;IACvB,CAAA,GAAAC,UAIGC,KAAgB;MACfC,SAAS;MACTC,WAAW;MACXC,cAAc;IAChB,CAAA;AAPK,IAAMT,OAAN,eAAmBF,iBAAAA,aAAAA;;eAQfC,cAAAA,YAAAA,GAAAA,GAAAA,CAAAA,OAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAAAA;;;;WAReD,cAAAA;;MAQfC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAEdW,SAAyB;AACvB,cAAMC,cACJ;AAEF,cAAMC,eACJ;AAEF,cAAMC,aACJ;AAEF,cAAMC,cACJ;AAEF,cAAMC,QAAQ,KAAKhB,UAAU,WAAWc,aAAaF;AACrD,cAAMK,QAAQ,KAAKjB,UAAU,WAAWe,cAAcF;AAEtD,eAAOK;mDACwC,KAAKlB,KAAK;;oBAEzCgB,KAAAA;oBACAC,KAAAA;;;;;;;;;;;;;;;;;;;;MAoBlB;;;;;AAlDK,cAAA,GAAA,IAAA,GAAA,KAQIjB,uBAAKmB,aAAA,IAAA,GAALnB,aAAAA,IAAAA;;IA2CX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChJAoB,yCA+BmCC,gCAAtBC;;;;AA/Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;;;;;;MAUT;IACF,CAAA;AACO,IAAML,gBAAN,eAA4BD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICjCAO,yCA8BsCC,mCAAzBC;;;;AA9Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;;;;;MAST;IACF,CAAA;AACO,IAAML,mBAAN,eAA+BD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChCAO,yCA0B6BC,0BAAhBC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,UAAN,eAAsBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,yCAsBgCC,6BAAnBC;;;;AAtBb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;MAQRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,aAAN,eAAyBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICxBAO,yCA6BqCC,kCAAxBC;;;;AA7Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;MAQRC,WAAAA;AACE,eAAOC;;;;;;;;;;;;MAYT;IACF,CAAA;AACO,IAAML,kBAAN,eAA8BD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC/BAO,yCA8B0CC,uCAA7BC;;;;AA9Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;MAQRC,WAAAA;AACE,eAAOC;;;;;;;;;;;;;MAaT;IACF,CAAA;AACO,IAAML,uBAAN,eAAmCD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IChCAO,yCA2BsCC,mCAAzBC;;;;AA3Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;MAQRC,WAAAA;AACE,eAAOC;;;;;;;;;;MAUT;IACF,CAAA;AACO,IAAML,mBAAN,eAA+BD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7BAO,yCA2BsCC,mCAAzBC;;;;AA3Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;MAQRC,WAAAA;AACE,eAAOC;;;;;;;;;;MAUT;IACF,CAAA;AACO,IAAML,mBAAN,eAA+BD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC7BAO,yCA0B+BC,4BAAlBC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,YAAN,eAAwBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,yCA0ByCC,sCAA5BC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,sBAAN,eAAkCD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,yCA0B0CC,uCAA7BC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,uBAAN,eAAmCD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,yCA0B8BC,2BAAjBC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,WAAN,eAAuBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,yCA4B8BC,2BAAjBC;;;;AA5Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;;;MAOT;IACF,CAAA;AACO,IAAML,WAAN,eAAuBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC9BAO,yCA0BiCC,8BAApBC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,cAAN,eAA0BD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,yCA0B+BC,4BAAlBC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;aAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,YAAN,eAAwBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,0CA0B8BC,2BAAjBC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;cAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,WAAN,eAAuBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5BAO,0CA0B8BC,2BAAjBC;;;;AA1Bb,IAAAF,oBAAqB;AAErB;cAECG,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;MAYRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA;AACO,IAAML,WAAN,eAAuBD,iBAAAA,aAAAA;;;;WAAAA,cAAAA;;;;;IAE9B;;;;;AC5BA;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAAO;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvBAC,0CAuSgCC,gBAAAA,SAAAA,SAAAA,SAAAA,SAWrBC,eAOAC,aAOAC,YAOAC,iBAAAA,cAxTLC,QAEAC,WA4BAC,eAEAC,eAEAC,aAIAC,UAEAC,aAMAC,eACAC,gCAyOOC;;;;AAvSb,IAAAf,oBAAqB;AAErB;AACA;AAYA,IAAMM,SAAS;MAAEU,GAAG;MAAIC,GAAG;IAAG;AAE9B,IAAMV,YAAuB;MAC3B;QAAEW,IAAI;QAASC,IAAI;QAASC,IAAI;MAAS;MACzC;QAAEF,IAAI;QAASC,IAAI;QAAKC,IAAI;MAAU;MACtC;QAAEF,IAAI;QAASC,IAAI;QAAUC,IAAI;MAAQ;MACzC;QAAEF,IAAI;QAASC,IAAI;QAAUC,IAAI;MAAS;MAC1C;QAAEF,IAAI;QAASC,IAAI;QAAUC,IAAI;MAAU;MAC3C;QAAEF,IAAI;QAASC,IAAI;QAAUC,IAAI;MAAU;MAC3C;QAAEF,IAAI;QAASC,IAAI;QAAUC,IAAI;MAAQ;MACzC;QAAEF,IAAI;QAASC,IAAI;QAAUC,IAAI;MAAU;MAC3C;QAAEF,IAAI;QAASC,IAAI;QAAWC,IAAI;MAAQ;MAC1C;QAAEF,IAAI;QAAUC,IAAI;QAAWC,IAAI;MAAS;MAC5C;QAAEF,IAAI;QAAUC,IAAI;QAAWC,IAAI;MAAU;MAC7C;QAAEF,IAAI;QAAUC,IAAI;QAAWC,IAAI;MAAS;MAC5C;QAAEF,IAAI;QAAUC,IAAI;QAAWC,IAAI;MAAS;MAC5C;QAAEF,IAAI;QAAUC,IAAI;QAAWC,IAAI;MAAU;MAC7C;QAAEF,IAAI;QAAUC,IAAI;QAAUC,IAAI;MAAS;MAC3C;QAAEF,IAAI;QAAUC,IAAI;QAAUC,IAAI;MAAS;MAC3C;QAAEF,IAAI;QAAUC,IAAI;QAAUC,IAAI;MAAS;MAC3C;QAAEF,IAAI;QAAUC,IAAI;QAAUC,IAAI;MAAU;MAC5C;QAAEF,IAAI;QAAUC,IAAI;QAAWC,IAAI;MAAS;MAC5C;QAAEF,IAAI;QAAUC,IAAI;QAAWC,IAAI;MAAU;MAC7C;QAAEF,IAAI;QAAUC,IAAI;QAAQC,IAAI;MAAK;MACrC;QAAEF,IAAI;QAAUC,IAAI;QAAQC,IAAI;MAAO;MACvC;QAAEF,IAAI;QAAUC,IAAI;QAASC,IAAI;MAAO;MACxC;QAAEF,IAAI;QAAUC,IAAI;QAASC,IAAI;MAAK;MACtC;QAAEF,IAAI;QAAUC,IAAI;QAASC,IAAI;MAAO;;AAG1C,IAAMZ,gBAAgB;MAAC;MAAU;MAAU;MAAU;MAAU;MAAU;;AAEzE,IAAMC,gBAAgBF,UAAUc,IAAI,CAACC,MAAMA,EAAEJ,EAAE,EAAEK,OAAO,CAACL,OAAO,CAACV,cAAcgB,SAASN,EAAAA,CAAAA;AAExF,IAAMR,cAAc,CAACe,OAAAA;AACnB,WAAKC,OAAOC,iBAAiBF,EAAAA,EAAIG;IACnC;AAEA,IAAMjB,WAAW,CAACkB,QAAyBC,KAAKC,MAAMF,IAAIT,KAAKd,OAAOW,GAAGY,IAAIV,KAAKb,OAAOU,CAAC;AAE1F,IAAMJ,cAAc,CAACoB,QACnBA,IACGX,IAAI,CAACH,OAAOX,UAAU0B,KAAK,CAACX,MAAMA,EAAEJ,OAAOA,EAAAA,CAAAA,EAC3CK,OAAO,CAACM,QAAwBA,OAAO,IAAA,EACvCK,KAAK,CAACC,GAAGC,MAAMzB,SAASwB,CAAAA,IAAKxB,SAASyB,CAAAA,CAAAA;AAE3C,IAAMvB,gBAAgB;AACtB,IAAMC,oBAAoB;cAEzBuB,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6KRC,SAASC,MAAgB;AACvB,cAAMrC,OAAOqC,KAAKrC,QAAQ;AAC1B,cAAMsC,QAAQD,KAAKC;AACnB,cAAMrC,YAAYoC,KAAKpC;AACvB,cAAMsC,mBAAmBtC,WAAWuC,KAAAA,KAAU;AAE9C,eAAOC;;;qBAGUH,KAAAA;gBACL,sBAAsBtC,IAAAA,KAAS;;;;;;;iBAO9BuC,mBAAmB,QAAQ,IAAA;uBACrBA,oBAAoB,IAAA;wBACnBA,mBAAmB,OAAO,MAAA;sBAC5BA,mBAAmB,OAAO,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkC9C;IACF,CAAA,GAAAG,UAIGC,KAA0B;MACzBC,MAAMC;MACNC,WAAW;MACXC,cAAc;MACdC,SAASC,MAAI;AACV,aAAoBC,oBAAoBD,IAAAA;MAC3C;IACF,CAAA,GAAAE,UAGCR,KAAmC;MAClCC,MAAM;MACNE,WAAW;MACXC,cAAc;IAChB,CAAA,GAAAK,UAGCT,KAAgC;MAC/BC,MAAMS;MACNP,WAAW;MACXC,cAAc;IAChB,CAAA,GAAAO,UAGCX,KAAgC;MAC/BC,MAAM;MACNE,WAAW;MACXC,cAAc;IAChB,CAAA;AA/BK,IAAMpC,aAAN,eAAyBd,iBAAAA,aAAAA;;eAWrBC,eAOAC,aAOAC,YAOAC,iBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YArBAH;;;;;YAOAC;;;;;YAOAC;;;;;YAOAC;;;;WAhCqBJ,cAAAA;;MAWrBC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAOPC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAOLC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAOJC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;MAElB;MACA;MACA;MACA;MAEA,IAAIqC,QAAyB;AAC3B,eAAO,KAAK;MACd;MAEA,IAAIA,MAAMiB,OAAwB;AAChC,YAAI,KAAK,WAAWA,OAAO;AACzB;QACF;AACA,aAAK,SAASA;AACd,YAAI,OAAO,KAAKC,kBAAkB,YAAY;AAC5C,eAAKA,cAAa;QACpB;MACF;MAEAC,oBAA0B;AAGxBC,8BAAsB,MAAA;AAEpBA,gCAAsB,MAAA;AACpB,gBAAI,KAAK5D,SAAS;AAChB,mBAAK,UAAU,MAAA;AACb,qBAAK,kBAAkB;AACvB,qBAAK,oBAAmB;cAC1B,CAAA;YACF,OAAO;AACL,mBAAK,UAAU,MAAA;AACb,qBAAK,kBAAkB;AACvB,qBAAKwC,QAAQ;cACf,CAAA;YACF;UACF,CAAA;QACF,CAAA;MACF;MAEAqB,uBAA6B;AAC3B,aAAK,aAAY;MACnB;MAEA,eAAY;AACV,mBAAW7C,MAAM,KAAK,kBAAkB;AACtCQ,iBAAOsC,aAAa9C,EAAAA;QACtB;AACA,aAAK,mBAAmB,CAAA;MAC1B;MAEA,YAAY+C,IAAgBC,OAAa;AACvC,cAAMhD,KAAKQ,OAAOyC,WAAWF,IAAIC,KAAAA;AACjC,aAAK,iBAAiBE,KAAKlD,EAAAA;AAC3B,eAAOA;MACT;MAEA,QAAQA,IAAU;AAChB,cAAMmD,OAAM,KAAKC,YAAYC,cAAc,mBAAA;AAC3C,eAAOF,MAAKE,cAAc,IAAIrD,EAAAA,EAAI;MACpC;MAEA,yBAAsB;AACpB,eAAO,KAAKoD,YAAYC,cAAc,sBAAA;MACxC;MAEA,gBAAgBC,UAAU,OAAOC,cAAc,OAAK;AAClD,cAAMC,YAAY,KAAK,uBAAsB;AAC7C,YAAIA,WAAW;AACbA,oBAAUC,YAAY;QACxB;AAEA,mBAAW9C,OAAOtB,WAAW;AAC3B,gBAAMkB,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,cAAI,CAACO,IAAI;AACP;UACF;AAEA,cAAI+C,SAAS;AACX/C,eAAGmD,MAAMC,aAAa;UACxB,OAAO;AACLpD,eAAGmD,MAAMC,aAAa;UACxB;AAGApD,aAAGqD,UAAUC,OAAO,eAAe,qBAAqB,aAAa,kBAAkB,iBAAA;AAEvFtD,aAAGmD,MAAMI,eAAe,cAAA;AACxBvD,aAAGmD,MAAMI,eAAe,SAAA;AACxBvD,aAAGmD,MAAMI,eAAe,eAAA;AACxBvD,aAAGmD,MAAMI,eAAe,kBAAA;AAGxBvD,aAAGmD,MAAMK,YAAY;AAErB,cAAI,CAACR,aAAa;AAChBhD,eAAGmD,MAAMhD,UAAU4C,UAAU,MAAM;UACrC;AACA/C,aAAGmD,MAAMI,eAAe,MAAA;AACxBvD,aAAGmD,MAAMI,eAAe,QAAA;AAExB,cAAIR,SAAS;AACX9D,wBAAYe,EAAAA;AACZA,eAAGmD,MAAMI,eAAe,YAAA;UAC1B;QACF;MACF;;MAGA,oBAAiB;AACf,mBAAWnD,OAAOtB,WAAW;AAC3B,gBAAMkB,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,cAAIO,OAAOA,GAAGmD,MAAMhD,YAAY,OAAOH,GAAGmD,MAAMhD,YAAY,KAAK;AAC/DH,eAAGmD,MAAMC,aAAa;AACtBpD,eAAGmD,MAAMhD,UAAU;UACrB;QACF;MACF;;MAGA,cAAcsD,YAAuB;AACnC,aAAKxC,QAAQ;AAGb,mBAAWb,OAAOtB,WAAW;AAC3B,gBAAMkB,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,cAAI,CAACO,IAAI;AACP;UACF;AACAA,aAAGmD,MAAMC,aAAa;AACtBpD,aAAGmD,MAAMhD,UAAU;AACnBH,aAAGmD,MAAMK,YAAY;AACrBvE,sBAAYe,EAAAA;QACd;AAEA,cAAM0D,cAAc,IAAIC,IAAI5E,aAAAA;AAC5B,cAAM6E,YAAY9E,UAAUgB,OAAO,CAACD,MAAM6D,YAAYG,IAAIhE,EAAEJ,EAAE,CAAA;AAC9D,cAAMqE,YAAYhF,UAAUgB,OAAO,CAACD,MAAM,CAAC6D,YAAYG,IAAIhE,EAAEJ,EAAE,CAAA;AAG/D,cAAMsE,eAAe5E,YAAYyE,UAAUhE,IAAI,CAACC,MAAMA,EAAEJ,EAAE,CAAA;AAC1DsE,qBAAaC,QAAQ,CAAC5D,KAAK6D,UAAAA;AACzB,gBAAMjE,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,cAAI,CAACO,IAAI;AACP;UACF;AAEAA,aAAGmD,MAAMe,OAAO;AAChBjF,sBAAYe,EAAAA;AACZA,aAAGmD,MAAMI,eAAe,YAAA;AAExB,gBAAMd,QAAQwB,QAAQ;AACtB,eAAK,YAAY,MAAA;AACfjE,eAAGmD,MAAMC,aAAa;AACtBpD,eAAGmD,MAAMhD,UAAU;AACnBH,eAAGmD,MAAMK,YAAY;UACvB,GAAGf,KAAAA;QACL,CAAA;AAGA,aAAK,YAAY,MAAA;AAEfsB,uBAAaC,QAAQ,CAAC5D,KAAK6D,UAAAA;AACzB,kBAAMjE,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,gBAAI,CAACO,IAAI;AACP;YACF;AAEA,kBAAMyC,QAAQwB,QAAQ;AACtB,iBAAK,YAAY,MAAA;AACfjE,iBAAGmD,MAAMC,aAAa;AACtBpD,iBAAGmD,MAAMK,YAAY;AACrBxD,iBAAGmD,MAAMI,eAAe,MAAA;YAC1B,GAAGd,KAAAA;UACL,CAAA;AAGA,gBAAM0B,eAAehF,YAAY2E,UAAUlE,IAAI,CAACC,MAAMA,EAAEJ,EAAE,CAAA;AAC1D0E,uBAAaH,QAAQ,CAAC5D,KAAK6D,UAAAA;AACzB,kBAAMjE,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,gBAAI,CAACO,IAAI;AACP;YACF;AAEAA,eAAGmD,MAAMI,eAAe,YAAA;AACxB,kBAAMd,QAAQ,MAAMwB,QAAQ;AAC5B,iBAAK,YAAY,MAAA;AACfjE,iBAAGmD,MAAMC,aAAa;AACtBpD,iBAAGmD,MAAMhD,UAAU;AACnBH,iBAAGmD,MAAMK,YAAY;YACvB,GAAGf,KAAAA;UACL,CAAA;QACF,GAAG,GAAA;AAGH,aAAK,YAAY,MAAA;AACfgB,uBAAAA;QACF,GAAG,IAAA;MACL;;MAGA,kBAAkBA,YAAuB;AACvC,aAAKxC,QAAQ;AAGb,mBAAWb,OAAOtB,WAAW;AAC3B,gBAAMkB,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,cAAI,CAACO,IAAI;AACP;UACF;AACAA,aAAGmD,MAAMC,aAAa;AACtBpD,aAAGmD,MAAMhD,UAAU;AACnBH,aAAGmD,MAAMK,YAAY;AACrBvE,sBAAYe,EAAAA;QACd;AAEA,cAAM0D,cAAc,IAAIC,IAAI5E,aAAAA;AAG5B,cAAMqF,YAAYtF,UAAUc,IAAI,CAACQ,KAAK6D,UAAAA;AACpC,gBAAMI,aAAanF,SAASkB,GAAAA;AAC5B,gBAAMkE,gBAAgB,MAAMjE,KAAKkE,OAAM,IAAK;AAC5C,gBAAMC,kBAAkBnE,KAAKkE,OAAM,IAAK,OAAOlE,KAAKoE,KAAK;AACzD,gBAAMC,aAAaL,aAAaG;AAChC,gBAAMG,SAAStE,KAAKuE,IAAIF,UAAAA,IAAcJ;AACtC,gBAAMO,SAASxE,KAAKyE,IAAIJ,UAAAA,IAAcJ;AAEtC,gBAAMS,YAAY1E,KAAKkE,OAAM,IAAK,MAAM;AACxC,gBAAMS,eAAeN,cAAcrE,KAAKkE,OAAM,IAAK,OAAOlE,KAAKoE,KAAKM;AACpE,gBAAME,kBAAkBX,gBAAgB;AACxC,gBAAMY,WAAW7E,KAAKuE,IAAII,YAAAA,IAAgBC;AAC1C,gBAAME,WAAW9E,KAAKyE,IAAIE,YAAAA,IAAgBC;AAE1C,gBAAMG,QAAQ/E,KAAKgF,MAAMpB,QAAQ,CAAA;AACjC,gBAAMqB,aAAaF,QAAQ;AAC3B,gBAAMG,mBAAoBtB,QAAQ,IAAK;AACvC,gBAAMxB,QAAQ6C,aAAaC,mBAAmBlF,KAAKkE,OAAM,IAAK;AAC9D,gBAAMiB,WAAW,MAAMnF,KAAKkE,OAAM,IAAK;AAEvC,iBAAO;YACL,GAAGnE;YACHuE;YACAE;YACAK;YACAC;YACA1C;YACA+C;YACAC,YAAYhD,QAAQ+C;YACpBE,eAAe,MAAMrF,KAAKkE,OAAM,IAAK;YACrCoB,SAASjC,YAAYG,IAAIzD,IAAIX,EAAE;UACjC;QACF,CAAA;AAEA2E,kBAAU3D,KAAK,CAACC,GAAGC,MAAMD,EAAE+B,QAAQ9B,EAAE8B,KAAK;AAG1C,cAAMmD,qBAAqBxB,UACxBtE,OAAO,CAAC+F,MAAMA,EAAEF,OAAO,EACvBlF,KAAK,CAACC,GAAGC,MAAMD,EAAE+E,aAAa9E,EAAE8E,UAAU,EAC1CK,MAAM,GAAG,CAAA;AACZ,cAAMC,eAAe,IAAIpC,IAAIiC,mBAAmBhG,IAAI,CAACiG,MAAMA,EAAEpG,EAAE,CAAA;AAG/D,mBAAWuG,YAAY5B,WAAW;AAChC,gBAAMpE,KAAK,KAAK,QAAQgG,SAASvG,EAAE;AACnC,cAAI,CAACO,IAAI;AACP;UACF;AAEAA,aAAGmD,MAAMK,YAAY,aAAawC,SAASrB,MAAM,OAAOqB,SAASnB,MAAM;AAEvE,eAAK,YAAY,MAAA;AACf7E,eAAGmD,MAAMhD,UAAU;AAEnB,kBAAM8F,QAAQ;AACd,gBAAIC,OAAO;AAEX,kBAAMC,cAAc,MAAA;AAClBD;AACA,oBAAME,WAAWF,OAAOD;AACxB,oBAAMI,IAAID;AACV,oBAAME,KAAK,IAAID;AAEf,oBAAM9G,IAAI+G,KAAKA,KAAKN,SAASrB,SAAS,IAAI2B,KAAKD,IAAIL,SAASd,WAAWmB,IAAIA,IAAI;AAC/E,oBAAM7G,IAAI8G,KAAKA,KAAKN,SAASnB,SAAS,IAAIyB,KAAKD,IAAIL,SAASb,WAAWkB,IAAIA,IAAI;AAE/E,oBAAME,UAAU,KAAK,IAAIH,aAAa;AACtC,oBAAMI,QAAQ,OAAOD,UAAU;AAC/B,oBAAME,WAAWL,WAAWJ,SAASN;AAErC1F,iBAAGmD,MAAMC,aAAa;AACtBpD,iBAAGmD,MAAMK,YAAY,aAAajE,CAAAA,OAAQC,CAAAA,aAAcgH,KAAAA,YAAiBC,QAAAA;AAEzE,kBAAIP,OAAOD,OAAO;AAChB5D,sCAAsB8D,WAAAA;cACxB,OAAO;AAEL,sBAAMO,iBAAiB;AACvB1G,mBAAGmD,MAAMC,aAAa,aAAasD,cAAAA;AACnC1G,mBAAGmD,MAAMK,YAAY;AAErB,oBAAIuC,aAAalC,IAAImC,SAASvG,EAAE,GAAG;AACjC,uBAAK,kBAAkBuG,QAAAA;gBACzB;AAEA,qBAAK,YAAY,MAAA;AACfhG,qBAAGqD,UAAUsD,IAAI,iBAAA;AACjB,uBAAK,YAAY,MAAA;AACf3G,uBAAGqD,UAAUC,OAAO,iBAAA;kBACtB,GAAG,GAAA;gBACL,GAAGoD,cAAAA;cACL;YACF;AAEArE,kCAAsB8D,WAAAA;UACxB,GAAGH,SAASvD,KAAK;QACnB;AAGA,cAAMmE,kBAAkBvG,KAAKwG,IAAG,GAAIzC,UAAUxE,IAAI,CAACiG,MAAMA,EAAEpD,KAAK,CAAA,IAAK;AACrE,aAAK,YAAY,MAAA;AACfgB,uBAAAA;QACF,GAAGmD,eAAAA;AAGH,cAAME,UAAUzG,KAAKwG,IAAG,GAAIzC,UAAUxE,IAAI,CAACiG,MAAMA,EAAEJ,aAAa,GAAA,CAAA;AAChE,aAAK,YAAY,MAAA;AACf,eAAK,gBAAgB,OAAO,IAAA;QAC9B,GAAGqB,OAAAA;MACL;MAEA,kBAAkB1G,KAAY;AAC5B,cAAM6C,YAAY,KAAK,uBAAsB;AAC7C,YAAI,CAACA,WAAW;AACd;QACF;AAEA,cAAM8D,OAAOC,SAASC,gBAAgB,8BAA8B,QAAA;AACpEF,aAAKG,aAAa,MAAMC,OAAO/G,IAAIV,EAAE,CAAA;AACrCqH,aAAKG,aAAa,MAAMC,OAAO/G,IAAIT,EAAE,CAAA;AACrCoH,aAAKG,aAAa,KAAK,OAAA;AACvBH,aAAK1D,UAAUsD,IAAI,gBAAA;AAEnB1D,kBAAUmE,YAAYL,IAAAA;AAEtB,aAAK,YAAY,MAAA;AACfA,eAAKzD,OAAM;QACb,GAAG,GAAA;MACL;MAEA,UAAUG,YAAuB;AAC/B,YAAI,KAAK/E,UAAU,YAAY;AAC7B,eAAK,kBAAkB+E,UAAAA;QACzB,OAAO;AACL,eAAK,cAAcA,UAAAA;QACrB;MACF;MAEA,sBAAmB;AACjB,aAAK,iBAAiB4D,YAAYC,IAAG;AACrC,aAAK,kBAAiB;AAGtB,cAAMC,mBAAmBpI,YAAYJ,aAAAA;AACrC,YAAIyI,YAAY;AAEhBD,yBAAiBvD,QAAQ,CAAC5D,QAAAA;AACxB,eAAK,YAAY,MAAA;AACf,kBAAMJ,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,gBAAI,CAACO,IAAI;AACP;YACF;AAEA,kBAAMyH,cAAc;AAEpBzH,eAAGmD,MAAMC,aAAa;AACtBpD,eAAGmD,MAAMK,YAAY,SAASiE,WAAAA;AAC9BzH,eAAGmD,MAAMe,OAAO;AAChBlE,eAAGmD,MAAMhD,UAAU;AAEnBH,eAAGmD,MAAMuE,YAAY,gBAAgB,GAAGD,WAAAA,EAAa;AAErD,kBAAME,QAAQzI,SAASkB,GAAAA;AACvB,kBAAMwH,mBAAmBD,QAAQtH,KAAKoE,OAAO,IAAIpE,KAAKoE;AACtD,kBAAMoD,mBAAmBD,kBAAkBxI;AAC3CY,eAAGmD,MAAMuE,YAAY,WAAW,GAAGG,gBAAAA,IAAoB;AAEvD,iBAAK,YAAY,MAAA;AACf7H,iBAAGqD,UAAUsD,IAAI,mBAAA;YACnB,GAAG,GAAA;UACL,GAAGa,SAAAA;AAEHA,uBAAa;QACf,CAAA;AAEA,cAAMM,mBAAmB3I,YAAYH,aAAAA;AACrC,aAAK,YAAY,MAAA;AACf8I,2BAAiB9D,QAAQ,CAAC5D,QAAAA;AACxB,kBAAMJ,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,gBAAI,CAACO,IAAI;AACP;YACF;AAEAA,eAAGmD,MAAMC,aAAa;AAEtB,kBAAM2E,YAAY;AAClB/H,eAAGmD,MAAMuE,YAAY,gBAAgB,GAAGK,SAAAA,EAAW;AAEnD,kBAAMJ,QAAQzI,SAASkB,GAAAA;AACvB,kBAAMwH,mBAAmBD,QAAQtH,KAAKoE,OAAO,IAAIpE,KAAKoE;AACtD,kBAAMoD,mBAAmBD,kBAAkBvI;AAC3CW,eAAGmD,MAAMuE,YAAY,WAAW,GAAGG,gBAAAA,IAAoB;AAEvD,iBAAK,YAAY,MAAA;AACf7H,iBAAGqD,UAAUsD,IAAI,aAAA;YACnB,GAAG,EAAA;UACL,CAAA;AAEA,eAAK1F,QAAQ;QACf,GAAGuG,YAAY,GAAA;MACjB;MAEA,oBAAiB;AACf,cAAMF,MAAMD,YAAYC,IAAG;AAC3B,cAAMU,UAAU3H,KAAKwG,IAAI,GAAGS,MAAM,KAAK,cAAc;AAErD,cAAMW,cAAcD,UAAU5I;AAC9B,cAAM8I,WAAW9I,gBAAgB6I,cAAc;AAE/C,aAAKhH,QAAQ;AAEb,aAAK,YAAY,MAAA;AACf,gBAAMkH,iBAAiBhJ,YAAYL,UAAUc,IAAI,CAACC,MAAMA,EAAEJ,EAAE,CAAA;AAE5D0I,yBAAenE,QAAQ,CAAC5D,KAAKgI,MAAAA;AAC3B,kBAAMpI,KAAK,KAAK,QAAQI,IAAIX,EAAE;AAC9B,gBAAI,CAACO,IAAI;AACP;YACF;AAEA,kBAAMyC,QAAQ2F,IAAI;AAElB,iBAAK,YAAY,MAAA;AACfpI,iBAAGqD,UAAUC,OAAO,eAAe,mBAAA;AACnCtD,iBAAGmD,MAAMI,eAAe,SAAA;AACxBvD,iBAAGmD,MAAMI,eAAe,cAAA;AAExBvD,iBAAGqD,UAAUsD,IAAI,WAAA;AACjB3G,iBAAGmD,MAAMK,YAAY;AACrBxD,iBAAGmD,MAAMhD,UAAU;AACnBH,iBAAGmD,MAAMI,eAAe,MAAA;AAExB,mBAAK,YAAY,MAAA;AACfvD,mBAAGqD,UAAUC,OAAO,WAAA;cACtB,GAAG,GAAA;YACL,GAAGb,KAAAA;UACL,CAAA;AAEA,eAAK,YACH,MAAA;AACE,iBAAKxB,QAAQ;UACf,GACAkH,eAAeE,SAAS,KAAK,GAAA;QAEjC,GAAGH,QAAAA;MACL;MAEArG,oBAAoBD,MAAqB;AACvC,YAAI,CAAC,KAAK,iBAAiB;AACzB;QACF;AAEA,aAAK,aAAY;AAEjB,YAAIA,MAAM;AACR,cAAI,KAAKX,UAAU,UAAU,KAAKA,UAAU,QAAQ;AAClD,iBAAK,gBAAgB,MAAM,IAAA;AAC3B,iBAAK,oBAAmB;UAC1B;QACF,OAAO;AACL,cAAI,KAAKA,UAAU,QAAQ;AACzB,iBAAK,kBAAiB;UACxB,WAAW,KAAKA,UAAU,WAAW,KAAKA,UAAU,QAAQ;AAC1D,iBAAKA,QAAQ;UACf;QACF;MACF;MAEAqH,UAAUC,SAAkC;AAC1C,aAAK,aAAY;AACjB,aAAK,gBAAgB,IAAA;AAErB,cAAMC,gBAAgB,KAAK9J;AAC3B,YAAI6J,SAAS;AACX,eAAK7J,QAAQ6J;QACf;AAEA,aAAK,UAAU,MAAA;AACb,eAAK,kBAAkB;AACvB,cAAI,KAAK9J,SAAS;AAChB,iBAAK,oBAAmB;UAC1B,OAAO;AACL,iBAAKwC,QAAQ;UACf;QACF,CAAA;AAEA,YAAIsH,SAAS;AACX,eAAK7J,QAAQ8J;QACf;MACF;;;;;AA/hBK,cAAA,GAAA,IAAA,GAAA,KAWI/J,yBAAOgK,aAAA,IAAA,GAAPhK,cAAAA,MAAU,KAAA,IAAA,KAOVC,sBAAAA,YAAAA,MAA0B,MAAA,GAAA,KAO1BC,qBAAAA,WAAAA,MAAsB,EAAA,GAAA,KAOtBC,0BAAAA,gBAAAA,MAA2B,IAAA,GAAA,KAEpC,SAA0B,SAAA,KAC1B,iBAAiB,GAAA,KACjB,mBAA6B,CAAA,GAAE,KAC/B,kBAAkB;;IA2fpB;;;;;ACjyBO,SAAS8J,OAAqDC,UAAuC,CAAC,GAAC;AAC5G,QAAM,EAAEC,UAAUC,iBAAgBC,UAAUC,UAAS,IAAKJ;AAE1D,SAAO,CACLK,UACAC,YAAAA;AAEA,QAAIA,QAAQC,SAAS,YAAY;AAC/B,YAAM,IAAIC,MAAM,yDAAA;IAClB;AAEA,WAAO;MACLC,MAAAA;AACE,eAAOJ,SAASI,IAAIC,KAAK,IAAI;MAC/B;MACAC,IAAiBC,OAAa;AAC5B,cAAMC,WAAWR,SAASI,IAAIC,KAAK,IAAI;AAEvC,YAAIT,QAAQY,UAAUD,KAAAA,GAAQ;AAC5B;QACF;AAEAP,iBAASM,IAAID,KAAK,MAAME,KAAAA;AAExB,YAAIT,UAAU;AACZA,mBAASO,KAAK,MAAME,OAAOC,QAAAA;QAC7B;AAEAC,QAAAA,gBAAe,IAAI;MACrB;MACAC,KAAkBC,cAAoB;AACpC,YAAIZ,WAAW;AACb,iBAAOA,UAAUM,KAAK,MAAMM,YAAAA;QAC9B;AAEA,eAAOA;MACT;IACF;EACF;AACF;AAxEA,IAAMC,cAEAH,iBAuBAZ;AAzBN;;;IAAMe,eAAc,oBAAIC,QAAAA;AAExB,IAAMJ,kBAAiB,CAACK,aAAAA;AACtB,UAAI,OAAOA,SAASC,kBAAkB,YAAY;AAChDD,iBAASC,cAAa;AACtB;MACF;AAEA,UAAI,OAAOD,SAASE,WAAW,YAAY;AACzC;MACF;AAEA,UAAIJ,aAAYR,IAAIU,QAAAA,GAAW;AAC7B;MACF;AAEAF,MAAAA,aAAYN,IAAIQ,UAAU,IAAA;AAE1BG,4BAAsB,MAAA;AACpBL,QAAAA,aAAYN,IAAIQ,UAAU,KAAA;AAE1BA,iBAASE,SAAM;MACjB,CAAA;IACF;AAEA,IAAMnB,kBAAiB,CAASW,UAAkBU,SAA0BV,aAAaU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC9BzFC,0CAmLgCC,gBAAAA,SAAAA,SAIrBC,cAGAC,gBAAAA,cAzKLC,OAEAC,MAWAC,UASAC,mBAQAC,eAEAC,cAOAC,UAOAC,sBAoHOC;;;;AAnLb,IAAAZ,oBAA0C;AAE1C;AACA;AACA;AAaA,IAAMI,QAAQ,CAACS,OAAeC,KAAaC,QAAwBC,KAAKD,IAAID,KAAKE,KAAKF,IAAIC,KAAKF,KAAAA,CAAAA;AAE/F,IAAMR,OAAO,CAACY,WAAAA;AACZ,UAAIA,OAAOC,WAAW,GAAG;AACvB,eAAO;MACT;AACA,UAAIC,MAAM;AACV,iBAAWN,SAASI,QAAQ;AAC1BE,eAAON;MACT;AACA,aAAOM,MAAMF,OAAOC;IACtB;AAEA,IAAMZ,WAAW,CAACc,QAA2BC,MAAAA;AAC3C,UAAID,OAAOF,WAAW,GAAG;AACvB,eAAO;MACT;AACA,YAAMI,UAAUlB,MAAMiB,GAAG,GAAG,CAAA;AAC5B,YAAME,QAAQP,KAAKQ,MAAMF,WAAWF,OAAOF,SAAS,EAAA;AACpD,aAAOE,OAAOG,KAAAA,KAAU;IAC1B;AAEA,IAAMhB,oBAAoB,CAACU,QAA2BI,MAAAA;AACpD,UAAIJ,OAAOC,WAAW,GAAG;AACvB,eAAO;MACT;AACA,YAAME,SAAS;WAAIH;QAAQQ,KAAK,CAACC,GAAGC,MAAMD,IAAIC,CAAAA;AAC9C,aAAOrB,SAASc,QAAQC,CAAAA;IAC1B;AAEA,IAAMb,gBAAgB,CAACS,WAA6CV,kBAAkBU,QAAQ,GAAA;AAE9F,IAAMR,eAAe,CAACI,OAAsBe,WAAW,MAAC;AACtD,UAAIf,UAAU,QAAQ,CAACgB,OAAOC,SAASjB,KAAAA,GAAQ;AAC7C,eAAO;MACT;AACA,aAAOA,MAAMkB,QAAQH,QAAAA;IACvB;AAEA,IAAMlB,WAAW,CAACG,OAAsBe,WAAW,MAAC;AAClD,UAAIf,UAAU,QAAQ,CAACgB,OAAOC,SAASjB,KAAAA,GAAQ;AAC7C,eAAO;MACT;AACA,aAAO,GAAGA,MAAMkB,QAAQH,QAAAA,CAAAA;IAC1B;AAEA,IAAMjB,UAAU,CAACqB,KAAoBC,cAAAA;AACnC,UAAID,QAAQ,QAAQ,CAACH,OAAOC,SAASE,GAAAA,GAAM;AACzC,eAAO;MACT;AACA,YAAME,SAASD,aAAaJ,OAAOC,SAASG,SAAAA,IAAaA,YAAY;AACrE,YAAME,QAAQH,MAAME;AACpB,UAAIC,SAAS,MAAM;AACjB,eAAO;MACT;AACA,UAAIA,SAAS,MAAM;AACjB,eAAO;MACT;AACA,aAAO;IACT;cAECC,UAAU;MACTC,KAAK;MACLC,UAAU;MACVC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgGV,CAAA,GAAAC,UAIGC,KAAc;MAAEC,MAAMC;MAASC,SAAS;MAAMC,cAAc;IAAM,CAAA,GAAAC,UAGlEC,MAAyB,sBAAA;AANrB,IAAMpC,aAAN,eAAyBX,iBAAAA,aAAAA;;eAIrBC,cAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAHAD;;;;;YAGAC;;;;WAPqBF,cAAAA;;MAIrBC;UAAAA,SAAAA;oBAAAA;;UAAAA,OAAAA,IAAAA;aAAAA,uBAAM;;MAGNC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAEjB;MACA;MACA;MACA;MAEA;MACA;MAEA;MACA;MACA;MACA;MAEA;MAWA8C,oBAA0B;AACxB,aAAK,0BAAyB;AAC9B,YAAI,CAAC,KAAK/C,UAAU,CAACgD,SAASC,QAAQ;AACpC,eAAK,OAAM;QACb;MACF;MAEAC,uBAA6B;AAC3B,aAAK,MAAK;AACVF,iBAASG,oBAAoB,oBAAoB,KAAK,uBAAuB;MAC/E;MAEAC,cAAoB;AAClB,aAAK,gBAAe;AACpB,aAAK,MAAK;MACZ;MAEAC,SAAyB;AACvB,cAAMvB,MAAM,KAAK,MAAMA;AACvB,cAAMwB,KAAK,KAAK,MAAMC;AACtB,cAAMC,SAAS/C,QAAQqB,KAAKwB,EAAAA;AAE5B,cAAMG,gBAAgB;UACpB,KAAK,MAAMC,iBAAiB,OAAO,OAAOlD,SAAS,KAAK,MAAMkD,YAAY,CAAA,KAAM;UAChF,KAAK,MAAMC,iBAAiB,OAAO,OAAOnD,SAAS,KAAK,MAAMmD,YAAY,CAAA,KAAM;UAChFC,OAAOlB,OAAAA;AAET,eAAOmB;;;;2CAIgCL,MAAAA,IAAUjD,aAAauB,KAAK,CAAA,CAAA;;;iCAGtC2B,cAAcK,KAAK,QAAA,CAAA;;;;;;yDAMKR,KAAK,IAAI/C,aAAa+C,IAAI,CAAA,CAAA,OAAS,QAAA;yDACnC,KAAK,MAAMS,aAAa;sDAC3B,KAAK,MAAMC,UAAU;6DACd,KAAK,MAAMC,UAAU;uDAC3BzD,SAAS,KAAK,MAAM0D,YAAY,CAAA;qDAClC1D,SAAS,KAAK,MAAMkD,YAAY,CAAA;;;;MAInF;MAEA,4BAAyB;AACvBV,iBAASG,oBAAoB,oBAAoB,KAAK,uBAAuB;AAC7EH,iBAASmB,iBAAiB,oBAAoB,KAAK,yBAAyB;UAAEC,SAAS;QAAK,CAAA;MAC9F;MAEA;MAWA,SAAM;AACJ,YAAI,KAAK,WAAW,MAAM;AACxB;QACF;AAEA,cAAMC,MAAMC,YAAYD,IAAG;AAC3B,aAAK,WAAWA;AAChB,aAAK,iBAAiBA;AACtB,aAAK,qBAAqB;AAE1B,aAAK,SAASE,sBAAsB,KAAK,KAAK;MAChD;MAEA,QAAK;AACH,YAAI,KAAK,WAAW,MAAM;AACxBC,+BAAqB,KAAK,MAAM;AAChC,eAAK,SAAS;QAChB;MACF;MAEA;MAuCA,eAAY;AACV,cAAMC,cAAc,KAAK,aAAaC,MAAM,CAAC,KAAK,kBAAkB;AACpE,cAAMC,YAAY,KAAK,YAAYD,MAAM,CAAC5D,KAAKF,IAAI,GAAG,KAAK,YAAYI,MAAM,CAAA;AAE7E,cAAM4D,WAAWzE,KAAKsE,WAAAA;AACtB,cAAMI,WAAWxE,kBAAkBoE,aAAa,IAAA;AAChD,cAAMK,WAAWL,YAAYzD,SAAS,IAAIF,KAAKD,IAAG,GAAI4D,WAAAA,IAAe;AACrE,cAAMM,SAASzE,cAAcmE,WAAAA;AAE7B,cAAMlB,cACJwB,UAAUA,SAAS,IAAI7E,MAAO,MAAO6E,QAAmB,IAAI,GAAA,IAAQ,KAAK,MAAMxB,eAAe;AAEhG,cAAMyB,QAAQzB,cAAc,MAAOA,cAAc,MAAO;AAExD,YAAIQ,gBAAgB;AACpB,YAAIC,aAAa;AACjB,YAAIC,aAAa;AAEjB,mBAAWgB,MAAMR,aAAa;AAC5B,gBAAMS,SAASpE,KAAKD,IAAI,GAAGC,KAAKqE,MAAMF,KAAKD,KAAAA,IAAS,CAAA;AACpDjB,2BAAiBmB;AAEjB,cAAID,KAAKD,QAAQ,KAAK;AACpBhB,0BAAc;UAChB;AAEA,cAAIiB,KAAKnE,KAAKD,IAAI,IAAImE,QAAQ,CAAA,GAAI;AAChCf,0BAAc;UAChB;QACF;AAEA,cAAMnC,MAAM6C,UAAU3D,SAAS,IAAIb,KAAKwE,SAAAA,IAAa;AAErD,aAAK,QAAQ;UACX7C;UACAyB;UACAG,cAAckB;UACdjB,cAAckB;UACdX,cAAcY;UACdf;UACAC;UACAC;QACF;MACF;MAEA,QAAK;AACH,aAAKmB,cACH,IAAIC,YAA8B,eAAe;UAC/CC,QAAQ,KAAK;UACbC,SAAS;UACTC,UAAU;QACZ,CAAA,CAAA;MAEJ;MAEA,kBAAe;AACb,cAAMC,SAAS,KAAKxF;AACpB,YAAI,CAACwF,QAAQ;AACX;QACF;AAEA,cAAMC,OAAOD,OAAOE,sBAAqB;AACzC,cAAMC,MAAM9E,KAAKD,IAAI,GAAGgF,OAAOC,oBAAoB,CAAA;AACnD,cAAMC,QAAQjF,KAAKD,IAAI,GAAGC,KAAKQ,MAAMoE,KAAKK,QAAQH,GAAAA,CAAAA;AAClD,cAAMI,SAASlF,KAAKD,IAAI,GAAGC,KAAKQ,MAAMoE,KAAKM,SAASJ,GAAAA,CAAAA;AAEpD,YAAIH,OAAOM,UAAUA,SAASN,OAAOO,WAAWA,QAAQ;AACtDP,iBAAOM,QAAQA;AACfN,iBAAOO,SAASA;QAClB;MACF;MAEA,QAAK;AACH,cAAMP,SAAS,KAAKxF;AACpB,YAAI,CAACwF,QAAQ;AACX;QACF;AAEA,cAAMQ,MAAMR,OAAOS,WAAW,IAAA;AAC9B,YAAI,CAACD,KAAK;AACR;QACF;AAEA,cAAML,MAAM9E,KAAKD,IAAI,GAAGgF,OAAOC,oBAAoB,CAAA;AACnD,cAAMC,QAAQN,OAAOM,QAAQH;AAC7B,cAAMI,SAASP,OAAOO,SAASJ;AAE/BK,YAAIE,aAAaP,KAAK,GAAG,GAAGA,KAAK,GAAG,CAAA;AACpCK,YAAIG,UAAU,GAAG,GAAGL,OAAOC,MAAAA;AAE3B,cAAMK,UAAU,KAAK;AACrB,YAAIA,QAAQrF,SAAS,GAAG;AACtB;QACF;AAEA,cAAMgB,SAAS,KAAK,MAAMuB,eAAe;AACzC,cAAM+C,WAAWxF,KAAKD,IAAI,IAAIC,KAAKqE,MAAMnD,SAAS,EAAA,IAAM,EAAA;AAExD,cAAMwB,SAAS/C,QAAQ,KAAK,MAAMqB,KAAK,KAAK,MAAMyB,WAAW;AAC7D,cAAMgD,SACJ/C,WAAW,SACP,YACAA,WAAW,sBACT,YACAA,WAAW,SACT,YACA;AAGVyC,YAAIO,KAAI;AACRP,YAAIQ,cAAc;AAClBR,YAAIS,cAAc;AAClBT,YAAIU,YAAY;AAChBV,YAAIW,YAAY;UAAC;UAAG;SAAE;AAEtB,cAAMC,YAAY,CAAC/E,QAAAA;AACjB,gBAAMgF,IAAId,SAAS9F,MAAM4B,MAAMwE,UAAU,GAAG,CAAA,IAAKN;AACjDC,cAAIc,UAAS;AACbd,cAAIe,OAAO,GAAGF,CAAAA;AACdb,cAAIgB,OAAOlB,OAAOe,CAAAA;AAClBb,cAAIM,OAAM;QACZ;AAEAM,kBAAU/F,KAAKF,IAAI,IAAI0F,QAAAA,CAAAA;AACvBO,kBAAU/F,KAAKF,IAAI,IAAI0F,QAAAA,CAAAA;AAEvBL,YAAIiB,QAAO;AAEX,cAAMC,MAAM,CAACrF,QAAgBkE,SAAS9F,MAAM4B,MAAMwE,UAAU,GAAG,CAAA,IAAKN;AAGpEC,YAAIc,UAAS;AACb,iBAASK,IAAI,GAAGA,IAAIf,QAAQrF,QAAQoG,KAAK,GAAG;AAC1C,gBAAMzG,QAAQ0F,QAAQe,CAAAA,KAAM;AAC5B,gBAAMC,IAAKD,KAAKf,QAAQrF,SAAS,KAAM+E;AACvC,gBAAMe,IAAIK,IAAIxG,KAAAA;AACd,cAAIyG,MAAM,GAAG;AACXnB,gBAAIe,OAAOK,GAAGP,CAAAA;UAChB,OAAO;AACLb,gBAAIgB,OAAOI,GAAGP,CAAAA;UAChB;QACF;AACAb,YAAIgB,OAAOlB,OAAOC,MAAAA;AAClBC,YAAIgB,OAAO,GAAGjB,MAAAA;AACdC,YAAIqB,UAAS;AACbrB,YAAIQ,cAAc;AAClBR,YAAIsB,YAAYhB;AAChBN,YAAIuB,KAAI;AAGRvB,YAAIc,UAAS;AACb,iBAASK,IAAI,GAAGA,IAAIf,QAAQrF,QAAQoG,KAAK,GAAG;AAC1C,gBAAMzG,QAAQ0F,QAAQe,CAAAA,KAAM;AAC5B,gBAAMC,IAAKD,KAAKf,QAAQrF,SAAS,KAAM+E;AACvC,gBAAMe,IAAIK,IAAIxG,KAAAA;AACd,cAAIyG,MAAM,GAAG;AACXnB,gBAAIe,OAAOK,GAAGP,CAAAA;UAChB,OAAO;AACLb,gBAAIgB,OAAOI,GAAGP,CAAAA;UAChB;QACF;AACAb,YAAIQ,cAAc;AAClBR,YAAIS,cAAcH;AAClBN,YAAIU,YAAY;AAChBV,YAAIW,YAAY,CAAA,CAAE;AAClBX,YAAIwB,WAAW;AACfxB,YAAIyB,UAAU;AACdzB,YAAIM,OAAM;MACZ;;;;;AAvUK,cAAA,GAAA,IAAA,GAAA,KAIIvG,wBAAM2H,aAAA,IAAA,GAAN3H,aAAAA,MAAkB,KAAA,IAAA,KAGlBC,yBAAAA,eAAAA,IAAAA,GAAAA,KAET,SAAwB,MAAA,KACxB,WAAW,GAAA,KACX,iBAAiB,GAAA,KACjB,qBAAqB,GAAA,KAErB,eAAyB,CAAA,GAAE,KAC3B,cAAwB,CAAA,GAAE,KAE1B,kBAAkB,KAAA,KAClB,iBAAiB,SACjB,oBAAoB,KAAA,KACpB,qBAAqB,KAAA,KAErB,QAA0B;UACxB6B,KAAK;UACLyB,aAAa;UACbG,cAAc;UACdC,cAAc;UACdO,cAAc;UACdH,eAAe;UACfC,YAAY;UACZC,YAAY;QACd,GAAA,KA0DA,0BAA0B,MAAA;AACxB,cAAIjB,SAASC,QAAQ;AACnB,iBAAK,MAAK;AACV;UACF;AAEA,cAAI,CAAC,KAAKjD,QAAQ;AAChB,iBAAK,OAAM;UACb;QACF,GAAA,KAsBA,QAAQ,CAACqE,QAAAA;AACP,cAAI,KAAKrE,QAAQ;AACf,iBAAK,MAAK;AACV;UACF;AAEA,gBAAM4H,QAAQvD,MAAM,KAAK;AACzB,eAAK,WAAWA;AAGhB,cAAIuD,QAAQ,KAAKA,QAAQ,KAAK;AAC5B,iBAAK,aAAaC,KAAKD,KAAAA;AACvB,gBAAI,KAAK,aAAa5G,SAAS,KAAK,iBAAiB;AACnD,mBAAK,aAAa8G,MAAK;YACzB;UACF;AAEA,eAAK,sBAAsB;AAE3B,cAAIzD,MAAM,KAAK,kBAAkB,KAAK,mBAAmB;AACvD,kBAAM0D,UAAU1D,MAAM,KAAK;AAC3B,kBAAM2D,YAAYD,UAAU,IAAK,KAAK,qBAAqB,MAAQA,UAAU;AAE7E,iBAAK,YAAYF,KAAKG,SAAAA;AACtB,gBAAI,KAAK,YAAYhH,SAAS,KAAK,gBAAgB;AACjD,mBAAK,YAAY8G,MAAK;YACxB;AAEA,iBAAK,iBAAiBzD;AACtB,iBAAK,qBAAqB;AAE1B,iBAAK,aAAY;AACjB,iBAAK,MAAK;AACV,iBAAK4D,cAAa;UACpB;AAEA,eAAK,SAAS1D,sBAAsB,KAAK,KAAK;QAChD;;IA2KF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICzfA2D,0CAuS6BC,gBAAAA,SAAAA,SAAAA,SAIlBC,eAgBAC,eAAAA,cArOLC,mBAYAC,mBAQAC,YA4BAC,cAgBAC,aAYAC,mCAqIOC;;;;AAvSb,IAAAV,oBAA0C;AAE1C;AACA;AACA;AACA;AACA;AAgFA,IAAMI,oBAAoB;MACxBO,KAAK;QAAEC,MAAM;QAAMC,MAAM;MAAK;MAC9BC,KAAK;QAAEF,MAAM;QAAKC,MAAM;MAAI;MAC5BE,KAAK;QAAEH,MAAM;QAAKC,MAAM;MAAK;MAC7BG,KAAK;QAAEJ,MAAM;QAAMC,MAAM;MAAK;MAC9BI,MAAM;QAAEL,MAAM;QAAKC,MAAM;MAAK;MAC9BK,UAAU;QAAEN,MAAM;QAAMC,MAAM;MAAK;MACnCM,gBAAgB;QAAEP,MAAM;QAAMC,MAAM;MAAK;MACzCO,KAAK;QAAER,MAAM;QAAIC,MAAM;MAAG;MAC1BQ,KAAK;QAAET,MAAM;QAAKC,MAAM;MAAI;IAC9B;AAEA,IAAMR,oBAAwD;MAC5DM,KAAK;MACLG,KAAK;MACLC,KAAK;MACLC,KAAK;MACLK,KAAK;IACP;AAEA,IAAMf,aAAa,CAACgB,QAAmBC,UAAAA;AACrC,UAAIA,UAAU,MAAM;AAClB,eAAO;MACT;AACA,YAAMC,aAAapB,kBAAkBkB,MAAAA;AACrC,UAAI,CAACE,YAAY;AACf,eAAO;MACT;AAEA,UAAIF,WAAW,OAAO;AACpB,YAAIC,SAASC,WAAWZ,MAAM;AAC5B,iBAAO;QACT;AACA,YAAIW,SAASC,WAAWX,MAAM;AAC5B,iBAAO;QACT;AACA,eAAO;MACT;AAEA,UAAIU,SAASC,WAAWZ,MAAM;AAC5B,eAAO;MACT;AACA,UAAIW,QAAQC,WAAWX,MAAM;AAC3B,eAAO;MACT;AACA,aAAO;IACT;AAEA,IAAMN,eAAe,CAACe,QAAmBC,UAAAA;AACvC,UAAIA,UAAU,MAAM;AAClB,eAAO;MACT;AACA,UAAID,WAAW,OAAO;AACpB,eAAOC,MAAME,QAAQ,CAAA;MACvB;AACA,UAAIH,WAAW,OAAO;AACpB,eAAO,GAAGI,KAAKC,MAAMJ,KAAAA,CAAAA;MACvB;AACA,UAAIA,QAAQ,KAAM;AAChB,eAAO,GAAGG,KAAKC,MAAMJ,KAAAA,CAAAA;MACvB;AACA,aAAO,IAAIA,QAAQ,KAAME,QAAQ,CAAA,CAAA;IACnC;AAEA,IAAMjB,cAAc,CAACoB,OAAkCC,WAAW,MAAC;AACjE,UAAID,SAAS,QAAQ,CAACE,OAAOC,SAASH,KAAAA,KAAUA,SAAS,GAAG;AAC1D,eAAO;MACT;AAEA,YAAMI,IAAI;AACV,YAAMC,KAAKJ,WAAW,IAAI,IAAIA;AAC9B,YAAMK,QAAQ;QAAC;QAAK;QAAM;QAAM;QAAM;;AACtC,YAAMC,IAAIT,KAAKU,MAAMV,KAAKW,IAAIT,KAAAA,IAASF,KAAKW,IAAIL,CAAAA,CAAAA;AAChD,aAAO,GAAGM,YAAYV,QAAQI,KAAKG,GAAGV,QAAQQ,EAAAA,CAAAA,CAAAA,IAAQC,MAAMC,CAAAA,CAAE;IAChE;AAEA,IAAM1B,0BAA0B,CAAC8B,eAAAA;AAC/B,UAAIA,cAAc,GAAG;AACnB,eAAO;MACT;AACA,YAAMC,YAAaD,aAAa,MAAc;AAC9C,aAAO,GAAGC,UAAUf,QAAQ,CAAA,CAAA;IAC9B;cAECgB,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0HV,CAAA,GAAAC,UAIGC,OAA0B,CAAC,CAAA,GAAAC,UAgB3BD,OAAsB,CAAC,CAAA,GAAAE,UA0CvBC,OAA+C,aAAA;AA7D3C,IAAMtC,UAAN,eAAsBT,iBAAAA,aAAAA;;eAIlBC,eAgBAC,eAAAA,YAAAA,GAAAA,GAAAA,CAAAA,UAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAhBAD;;;;;YAgBAC;;;;;YA0CT8C;;;;WA9D2BhD,cAAAA;;MAIlBC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAgBPC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAkBhB+C,oBAA0B;AACxB,aAAKC,cAAa;AAClB,aAAKC,sBAAqB;AAC1B,aAAKC,sBAAqB;AAC1B,aAAKC,sBAAqB;AAE1B,YAAIC,SAASC,eAAe,YAAY;AACtCC,iBAAOC,iBAAiB,QAAQ,KAAKC,cAAc;QACrD,OAAO;AACL,eAAKA,eAAc;QACrB;MACF;MAEAC,uBAA6B;AAC3B,aAAKC,UAAUC,QAAQ,CAACC,aAAAA;AACtBA,mBAASC,WAAU;QACrB,CAAA;AACA,aAAKH,YAAY,CAAA;AACjB,aAAKI,qBAAoB;AACzB,aAAKC,sBAAqB;AAC1BT,eAAOU,oBAAoB,QAAQ,KAAKR,cAAc;MACxD;MAGAV,gBAAgBmB,OAA4C;AAC1D,cAAMhD,MAAMgD,MAAMC,QAAQjD,OAAO;AACjC,aAAKlB,QAAQkB,MAAMA;AACnB,aAAKkD,YAAY,OAAOlD,GAAAA;AACxB,aAAKmD,cAAa;MACpB;MASQpB,gBAAsB;AAC5B,YAAI,EAAE,yBAAyBM,SAAS;AACtCe,kBAAQC,KAAK,wCAAA;AACb;QACF;AAEA,YAAI;AACF,gBAAMV,WAAW,IAAIW,oBAAoB,CAACC,SAAAA;AACxC,uBAAWC,SAASD,KAAKE,WAAU,GAAI;AACrC,mBAAKC,wBAAwBF,KAAAA;YAC/B;UACF,CAAA;AAEAb,mBAASgB,QAAQ;YAAEC,MAAM;YAA4BC,UAAU;UAAK,CAAA;AACpElB,mBAASgB,QAAQ;YAAEC,MAAM;YAASC,UAAU;UAAK,CAAA;AACjDlB,mBAASgB,QAAQ;YAAEC,MAAM;YAAgBC,UAAU;UAAK,CAAA;AACxDlB,mBAASgB,QAAQ;YAAEC,MAAM;YAASC,UAAU;UAAK,CAAA;AACjDlB,mBAASgB,QAAQ;YAAEC,MAAM;YAAYC,UAAU;UAAK,CAAA;AACpDlB,mBAASgB,QAAQ;YAAEC,MAAM;YAAYC,UAAU;UAAK,CAAA;AAEpD,eAAKpB,UAAUqB,KAAKnB,QAAAA;QACtB,SAASoB,GAAG;AACVX,kBAAQY,MAAM,2CAA2CD,CAAAA;QAC3D;MACF;MAEQ/B,wBAA8B;AACpC,aAAKiC,wBAAuB;AAC5B,cAAMC,kBAAkBC,YAAYC,iBAAiB,UAAA;AACrD,aAAKC,uBAAuBH,eAAAA;MAC9B;MAEQD,0BAAgC;AACtC,cAAMK,oBAAoBH,YAAYC,iBAAiB,YAAA;AACvD,YAAIE,kBAAkBC,SAAS,GAAG;AAChC,gBAAMC,YAAYF,kBAAkB,CAAA;AAEpC,cAAIzE,OAAO;AACX,cAAI2E,UAAUC,gBAAgB,KAAKD,UAAUE,aAAa,GAAG;AAC3D7E,mBAAO2E,UAAUC,gBAAgBD,UAAUE;UAC7C;AAEA,cAAI5E,WAAW;AACf,cAAI0E,UAAUG,eAAe,GAAG;AAC9B7E,uBAAW0E,UAAUG,eAAeH,UAAUI;UAChD;AAEA,cAAI7E,iBAAiB;AACrB,cAAIyE,UAAUzE,iBAAiB,GAAG;AAChCA,6BAAiByE,UAAUzE,iBAAiByE,UAAUI;UACxD;AAEA,eAAK9F,QAAQ+F,aAAa;YAAEhF;YAAMC;YAAUC;UAAe;AAC3D,eAAKmD,YAAY,YAAYpD,QAAAA;AAC7B,eAAKoD,YAAY,QAAQrD,IAAAA;QAC3B;MACF;MAEQ6D,wBAAwBF,OAA+B;AAC7D,gBAAQA,MAAMsB,WAAS;UACrB,KAAK;AACH,iBAAKhG,QAAQiG,cAAcxF,MAAMiE,MAAMoB;AACvC,iBAAK1B,YAAY,OAAOM,MAAMoB,SAAS;AACvC;UACF,KAAK,SAAS;AACZ,kBAAMI,aAAaxB;AACnB,gBAAIwB,WAAWC,iBAAiBD,WAAWE,WAAW,KAAKC,QAAQ;AACjE,mBAAKA,SAASH,WAAWE;AACzB,mBAAKpG,QAAQiG,cAAcrF,MAAM,KAAKyF;AACtC,mBAAKjC,YAAY,OAAO,KAAKiC,MAAM;YACrC;AACA,iBAAKC,WAAWtB,KAAKkB,UAAAA;AACrB;UACF;UACA,KAAK,gBAAgB;AACnB,kBAAMK,UAAU7B;AAChB,gBAAI,CAAC6B,QAAQC,gBAAgB;AAC3B,mBAAKC,WAAWzB,KAAKuB,OAAAA;AACrB,mBAAKG,0BAAyB;YAChC;AACA;UACF;UACA,KAAK;AACH,gBAAIhC,MAAMiC,SAAS,0BAA0B;AAC3C,mBAAK3G,QAAQiG,cAAcnF,MAAM4D,MAAMoB;AACvC,mBAAK1B,YAAY,OAAOM,MAAMoB,SAAS;YACzC;AACA;UACF,KAAK;AACH,iBAAKP,uBAAuB;cAACb;aAAmC;AAChE;UACF,KAAK,YAAY;AACf,kBAAMkC,UAAUlC;AAChB,iBAAKmC,gBAAgB7B,KAAK4B,OAAAA;AAC1B,iBAAKE,yBAAwB;AAC7B;UACF;QACF;AACA,aAAKzC,cAAa;MACpB;MAEQqC,4BAAkC;AACxC,YAAIK,SAAS;AACb,YAAIC,oBAAoB;AACxB,YAAIC,mBAAmBC;AACvB,YAAIC,WAAW;AAEf,aAAKV,WAAWW,KAAK,CAACC,GAAGC,MAAMD,EAAEvB,YAAYwB,EAAExB,SAAS;AAExD,mBAAWpB,SAAS,KAAK+B,YAAY;AACnC,gBAAMc,WAAW7C,MAAMoB,YAAYqB;AAEnC,cAAII,WAAW,OAAQ7C,MAAMoB,YAAYmB,mBAAmB,KAAM;AAChE,gBAAID,oBAAoB,GAAG;AACzBD,uBAASvF,KAAKgG,IAAIT,QAAQC,iBAAAA;YAC5B;AACAA,gCAAoB;AACpBC,+BAAmBvC,MAAMoB;UAC3B;AAEAkB,+BAAqBtC,MAAMrD;AAC3B8F,qBAAWzC,MAAMoB;QACnB;AAEAiB,iBAASvF,KAAKgG,IAAIT,QAAQC,iBAAAA;AAC1B,aAAKhH,QAAQiG,cAAcpF,MAAMkG;AACjC,aAAK3C,YAAY,OAAO2C,MAAAA;MAC1B;MAEQxB,uBAAuBkC,SAA4C;AACzE,cAAMC,UAAU,KAAK1H,QAAQ2H;AAE7BF,gBAAQ7D,QAAQ,CAACc,UAAAA;AACf,gBAAMkD,OAAOlD,MAAMmD,gBAAgB;AACnC,gBAAMC,YAAYpD,MAAMqD;AACxB,gBAAMpB,OAAOjC,MAAMiC,KAAKqB,YAAW;AAEnC,cAAIF,cAAc,YAAYnB,KAAKsB,SAAS,KAAA,GAAQ;AAClDP,oBAAQQ,GAAGC;AACXT,oBAAQQ,GAAGN,QAAQA;UACrB,WAAWE,cAAc,SAASnB,KAAKsB,SAAS,MAAA,KAAWH,cAAc,QAAQ;AAC/EJ,oBAAQU,IAAID;AACZT,oBAAQU,IAAIR,QAAQA;UACtB,WAAWE,cAAc,SAASA,cAAc,WAAW,sCAAsCO,KAAK1B,IAAAA,GAAO;AAC3Ge,oBAAQY,IAAIH;AACZT,oBAAQY,IAAIV,QAAQA;UACtB,OAAO;AACLF,oBAAQa,MAAMJ;AACdT,oBAAQa,MAAMX,QAAQA;UACxB;AACAF,kBAAQc,aAAaZ;QACvB,CAAA;MACF;MAEQd,2BAAiC;AACvC,YAAI2B,MAAM;AACV,YAAIN,QAAQ;AACZ,cAAMO,gBAAgB,KAAK1I,QAAQiG,cAAcnF,OAAO;AAExD,aAAK+F,gBAAgBjD,QAAQ,CAAC+E,SAAAA;AAC5B,cAAIA,KAAK7C,aAAa4C,eAAe;AACnCP;AACA,gBAAIQ,KAAKvC,WAAW,IAAI;AACtBqC,qBAAOE,KAAKvC,WAAW;YACzB;UACF;QACF,CAAA;AACA,aAAKpG,QAAQ4I,YAAY;UAAET;UAAOU,eAAeJ;QAAI;AACrD,aAAKzI,QAAQiG,cAAc9E,MAAMsH;AACjC,aAAKrE,YAAY,OAAOqE,GAAAA;MAC1B;MAEQtF,wBAA8B;AACpC,YAAI,CAACkC,YAAYyD,QAAQ;AACvB;QACF;AAEA,cAAMC,eAAe,MAAA;AACnB,cAAI1D,YAAYyD,QAAQ;AACtB,kBAAME,MAAM3D,YAAYyD;AACxB,iBAAK9I,QAAQ8I,SAAS;cACpBG,iBAAiBrH,OAAOoH,IAAIC,eAAe,KAAK;cAChDC,iBAAiBtH,OAAOoH,IAAIE,eAAe,KAAK;cAChDC,gBAAgBvH,OAAOoH,IAAIG,cAAc,KAAK;YAChD;AACA,iBAAK9E,cAAa;UACpB;QACF;AAEA0E,qBAAAA;AACA,aAAKK,iBAAiB7F,OAAO8F,YAAYN,cAAc,GAAA;MACzD;MAEQhF,uBAA6B;AACnC,YAAI,KAAKqF,gBAAgB;AACvBE,wBAAc,KAAKF,cAAc;AACjC,eAAKA,iBAAiB;QACxB;MACF;MAEQhG,wBAA8B;AACpC,YAAImG,UAAUC,YAAY;AACxB,eAAKC,kBAAiB;AACtBF,oBAAUC,WAAWhG,iBAAiB,UAAU,KAAKiG,iBAAiB;QACxE;MACF;MAEQzF,wBAA8B;AACpC,YAAIuF,UAAUC,YAAY;AACxBD,oBAAUC,WAAWvF,oBAAoB,UAAU,KAAKwF,iBAAiB;QAC3E;MACF;MAWQrF,YAAYsF,KAAgBrI,OAA4B;AAC9D,YAAIA,UAAU,MAAM;AAClB;QACF;AACA,cAAMsI,UAAU,KAAKC,aAAaF,GAAAA,KAAQ,CAAA;AAC1CC,gBAAQ3E,KAAK3D,KAAAA;AACb,YAAIsI,QAAQlE,SAAS,KAAKoE,gBAAgB;AACxCF,kBAAQG,MAAK;QACf;AACA,aAAKF,aAAaF,GAAAA,IAAOC;MAC3B;MAEQI,kBAAkBL,KAAwB;AAChD,cAAMC,UAAU,KAAKC,aAAaF,GAAAA;AAClC,YAAI,CAACC,WAAWA,QAAQlE,SAAS,GAAG;AAClC,iBAAO;QACT;AAEA,cAAMuE,eAAeL,QAAQA,QAAQlE,SAAS,CAAA;AAC9C,cAAMwE,cAAcN,QAAQO,MAAM,GAAGP,QAAQlE,SAAS,CAAA,EAAG0E,OAAO,CAAC9C,GAAGC,MAAMD,IAAIC,GAAG,CAAA,KAAMqC,QAAQlE,SAAS;AAExG,cAAM2E,YAAY5I,KAAK6I,IAAIJ,cAAc,IAAA;AACzC,cAAMK,QAAQN,gBAAgB,IAAIC;AAElC,YAAIzI,KAAK6I,IAAIC,KAAAA,IAASF,WAAW;AAC/B,iBAAO;QACT;AAEA,YAAIV,QAAQ,OAAO;AACjB,iBAAOY,QAAQ,IAAI,WAAM;QAC3B,OAAO;AACL,iBAAOA,QAAQ,IAAI,WAAM;QAC3B;MACF;MAEQC,mBAAiC;AACvC,cAAMC,UAA0B;UAC9BpK,WAAW,OAAO,KAAKJ,QAAQiG,cAAcxF,GAAG;UAChDL,WAAW,OAAO,KAAKJ,QAAQiG,cAAcpF,GAAG;UAChDT,WAAW,OAAO,KAAKJ,QAAQiG,cAAcrF,GAAG;UAChDR,WAAW,OAAO,KAAKJ,QAAQkB,GAAG;;AAGpC,YAAIsJ,QAAQC,SAAS,MAAA,GAAS;AAC5B,iBAAO;QACT;AACA,YAAID,QAAQC,SAAS,mBAAA,GAAsB;AACzC,iBAAO;QACT;AACA,YAAID,QAAQE,MAAM,CAACC,MAAMA,MAAM,SAAA,GAAY;AACzC,iBAAO;QACT;AAEA,YAAIH,QAAQI,KAAK,CAACD,MAAMA,MAAM,MAAA,GAAS;AACrC,iBAAO;QACT;AAEA,eAAO;MACT;MAEAE,SAAyB;AACvB,eAAOC;;UAED,KAAKC,eAAc,CAAA;;;MAG3B;MAEQA,iBAAiC;AACvC,eAAOD;;;;;;;;UAQD,KAAKE,sBAAqB,CAAA;UAC1B,KAAKC,eAAc,CAAA;UACnB,KAAKC,kBAAiB,CAAA;UACtB,KAAKC,gBAAe,CAAA;;;MAG5B;MAEQC,gBAAgBC,OAAe3B,KAAgBrI,OAAsBiK,aAAqC;AAChH,cAAMC,SAASnL,WAAWsJ,KAAKrI,KAAAA;AAC/B,cAAMmK,iBAAiBnL,aAAaqJ,KAAKrI,KAAAA;AACzC,cAAMoK,QAAQ,KAAK1B,kBAAkBL,GAAAA;AACrC,cAAMgC,YAAYvL,kBAAkBuJ,GAAAA;AACpC,cAAMiC,cAAcD,YAAY,YAAYrL,aAAaqJ,KAAKgC,SAAAA,CAAAA,MAAgB;AAC9E,eAAOZ;yCAC8BQ,WAAAA,GAAcK,WAAAA;4DACKN,KAAAA;kEACME,MAAAA,iBAAuBA,MAAAA;kBACvEC,cAAAA;gDAC8BC,KAAAA;;;;MAI9C;MAEQT,wBAAwC;AAC9C,cAAM,EAAEvK,KAAKG,KAAKC,KAAKC,KAAKK,IAAG,IAAK,KAAKnB,QAAQiG;AACjD,cAAM,EAAElF,MAAMC,SAAQ,IAAK,KAAKhB,QAAQ+F;AACxC,eAAO+E;;;;kBAIO,KAAKM,gBAAgB,OAAO,OAAO3K,KAAK,yDAAA,CAAA;kBACxC,KAAK2K,gBAAgB,OAAO,OAAOxK,KAAK,qDAAA,CAAA;kBACxC,KAAKwK,gBAAgB,OAAO,OAAOvK,KAAK,qDAAA,CAAA;kBACxC,KAAKuK,gBAAgB,OAAO,OAAOtK,KAAK,4EAAA,CAAA;kBACxC,KAAKsK,gBAAgB,OAAO,OAAOjK,KAAK,8DAAA,CAAA;kBACxC,KAAKiK,gBAAgB,QAAQ,QAAQrK,MAAM,qDAAA,CAAA;kBAC3C,KAAKqK,gBAAgB,QAAQ,YAAYpK,UAAU,uBAAA,CAAA;;;;MAInE;MAEQiK,iBAAiC;AACvC,cAAM,EAAEnC,QAAQF,UAAS,IAAK,KAAK5I;AAEnC,eAAO8K;;;;;;wBAMalC,UAAUT,KAAK,MAAMS,UAAUC,cAActH,QAAQ,CAAA,CAAA;;cAE/D,KAAKqK,aAAa9C,MAAAA,CAAAA;;;MAG9B;MAEQ8C,aAAa9C,QAAqC;AACxD,YAAI,CAACA,QAAQ;AACX,iBAAOgC;;;;;QAKT;AAEA,cAAMe,cAAc/C,OAAOI,kBAAkB,IAAKJ,OAAOK,iBAAiBL,OAAOI,kBAAmB,MAAM;AAE1G,YAAIqC,SAAuB;AAC3B,YAAIM,cAAc,IAAI;AACpBN,mBAAS;QACX,WAAWM,cAAc,IAAI;AAC3BN,mBAAS;QACX;AAEA,eAAOT;;;;wBAIaxK,YAAYwI,OAAOK,cAAc,CAAA,MAAO7I,YAAYwI,OAAOI,eAAe,CAAA;;6CAErD2C,YAAYtK,QAAQ,CAAA,CAAA;iDAChBgK,MAAAA,WAAiBO,YAAY;UAAEC,OAAO,GAAGvK,KAAKwK,IAAI,KAAKH,WAAAA,CAAAA;QAAgB,CAAA,CAAA,gBAAkBN,MAAAA;;;;wBAIlHjL,YAAYwI,OAAOG,eAAe,CAAA;;;;MAIxD;MAEQiC,oBAAoC;AAC1C,cAAM,EAAEe,eAAeC,IAAG,IAAK,KAAKjM;AACpC,eAAO6K;;;;;;4BAMiBmB,cAAcE,YAAW,CAAA;;;;4BAIzBD,MAAM,IAAI,GAAGA,GAAAA,OAAU,KAAA;;;;;MAKjD;MAEQf,kBAAkC;AACxC,cAAM,EAAEjD,IAAIE,KAAKE,KAAKC,OAAOC,UAAS,IAAK,KAAKxI,QAAQ2H;AACxD,cAAMyE,aAAalE,GAAGC,QAAQC,IAAID,QAAQG,IAAIH,QAAQI,MAAMJ;AAE5D,cAAMkE,aAAa,CAAChB,OAAeiB,SAA0CxB;;oBAE7DO,KAAAA,KAAUiB,KAAKnE,KAAK;oBACpB7H,YAAYgM,KAAK1E,IAAI,CAAA;;;AAIrC,eAAOkD;;gFAEqExK,YAAYkI,SAAAA,CAAAA,MAAgB4D,UAAAA;;kBAE1FC,WAAW,MAAMnE,EAAAA,CAAAA;kBACjBmE,WAAW,aAAajE,GAAAA,CAAAA;kBACxBiE,WAAW,UAAU/D,GAAAA,CAAAA;kBACrB+D,WAAW,SAAS9D,KAAAA,CAAAA;;;+BAGPhI,wBAAwBiI,SAAAA,CAAAA;;;gCAGvB,KAAK+B,iBAAgB,CAAA;;;;MAInD;;;;;AArgBK,cAAA,GAAA,IAAA,GAAA,KAIIvK,yBAAOuM,aAAA,IAAA,GAAPvM,cAAAA,MAA8B;UACrC+F,YAAY;YAAE/E,UAAU;YAAMC,gBAAgB;YAAMF,MAAM;UAAK;UAC/DkF,eAAe;YAAExF,KAAK;YAAMG,KAAK;YAAMC,KAAK;YAAGC,KAAK;YAAMK,KAAK;UAAE;UACjEwG,WAAW;YACTO,IAAI;cAAEC,OAAO;cAAGP,MAAM;YAAE;YACxBQ,KAAK;cAAED,OAAO;cAAGP,MAAM;YAAE;YACzBU,KAAK;cAAEH,OAAO;cAAGP,MAAM;YAAE;YACzBW,OAAO;cAAEJ,OAAO;cAAGP,MAAM;YAAE;YAC3BY,WAAW;UACb;UACAM,QAAQ;UACR5H,KAAK;UACL0H,WAAW;YAAET,OAAO;YAAGU,eAAe;UAAE;QAC1C,CAAA,IAAA,KAGS5I,wBAAAA,cAAAA,MAA0B;UACjCgM,eAAe;UACfC,KAAK;QACP,CAAA,GAAA,KAEQvI,YAAmC,CAAA,GAAE,KACrCyF,iBAAgC,MAAA,KAEhC3C,aAA4B,CAAA,GAAE,KAE9BH,aAAuC,CAAA,GAAE,KACzCD,SAAS,GAAA,KAETQ,kBAA+C,CAAA,GAAE,KAEjD+C,eAAqD,CAAC,GAAA,KACtDC,iBAAiB,GAAA,KAiCjBpG,iBAAiB,MAAA;AACvB+I,qBAAW,MAAA;AACT,iBAAKrH,wBAAuB;AAC5B,iBAAKd,cAAa;UACpB,GAAG,GAAA;QACL,GAAA,KAuNQoF,oBAAoB,MAAA;AAC1B,cAAIF,UAAUC,YAAY;AACxB,iBAAKvJ,UAAU;cACbgM,eAAe1C,UAAUC,WAAWyC,iBAAiB;cACrDC,KAAK3C,UAAUC,WAAW0C,OAAO;YACnC;UACF;QACF;;IA8NF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC/yBAO,0CA+FiCC,gBAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAGtBC,cAGAC,WAGAC,WAGAC,YAGAC,aAGAC,iBAGAC,gBAAAA,4BArBEC;;;;AA/Fb,IAAAT,oBAAqB;AAErB,IAAAU;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;cACCC,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0CRC,WAAAA;AACE,eAAOC;;;;;mBAKQ,KAAKb,KAAK;sBACP,KAAKK,QAAQ;iBAClB,KAAKJ,GAAG;iBACR,KAAKC,GAAG;kBACP,KAAKC,IAAI;mBACR,KAAKW,WAAW;oBACf,KAAKC,YAAY;;;;qBAIhB,KAAKC,gBAAgBC,KAAK,IAAI,CAAA;;;wBAG3B,KAAKZ,YAAY,KAAKJ,QAAQ,QAAQiB,OAAO,KAAKZ,SAASN,KAAAA,KAAU,KAAKC,GAAG;6BACxE,KAAKI,YAAY,KAAKJ,QAAQ,QAAQiB,OAAO,KAAKZ,SAASN,KAAAA,KAAU,KAAKC,GAAG;;;;;;qBAMrF,KAAKkB,gBAAgBF,KAAK,IAAI,CAAA;;;wBAG3B,KAAKZ,YAAY,KAAKH,QAAQ,QAAQgB,OAAO,KAAKZ,SAASN,KAAAA,KAAU,KAAKE,GAAG;6BACxE,KAAKG,YAAY,KAAKH,QAAQ,QAAQgB,OAAO,KAAKZ,SAASN,KAAAA,KAAU,KAAKE,GAAG;;;;;;;MAOxG;IACF,CAAA,GAAAkB,UAGGC,KAAoB;MAAEC,MAAMJ;MAAQK,SAAS;IAAK,CAAA,GAAAC,UAGlDH,KAAoB;MAAEC,MAAMJ;MAAQK,SAAS;IAAK,CAAA,GAAAE,UAGlDJ,KAAoB;MAAEC,MAAMJ;MAAQK,SAAS;IAAK,CAAA,GAAAG,UAGlDL,KAAoB;MAAEC,MAAMJ;MAAQK,SAAS;IAAK,CAAA,GAAAI,UAGlDN,KAAoB;MAAEE,SAAS;IAAK,CAAA,GAAAK,UAGpCP,KAAc;MAAEC,MAAMO;MAASN,SAAS;IAAK,CAAA,GAAAO,UAG7CC,MAAwB,OAAA,GAAAC,UAmBxBC,OAA6C,SAAS;MAAEC,UAAU;IAAQ,CAAA,GAAAC,UAU1EF,OAA6C,UAAU;MAAEC,UAAU;IAAQ,CAAA;AAjDvE,IAAM3B,cAAN,eAA0BR,iBAAAA,aAAAA;;eAGtBC,cAGAC,WAGAC,WAGAC,YAGAC,aAGAC,iBAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,cAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAlBAN;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAmBTQ;;;;;YAUAC;;;;WAlD+BhB,cAAAA;;MAGtBC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,MAAAA;oBAAAA;;UAAAA,IAAAA,IAAAA;aAAAA,oBAAG;;MAGHC;UAAAA,MAAAA;oBAAAA;;UAAAA,IAAAA,IAAAA;aAAAA,oBAAG;;MAGHC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAEhB8B,cAAoB;AAClB,YAAI,CAAC,KAAK9B,SAAS;AACjB;QACF;AAEA,cAAMA,UAAU,KAAKA;AACrBA,gBAAQN,QAAQ,KAAKA,UAAU,QAAQ,KAAKA,UAAUqC,SAAY,KAAKC,OAAO,KAAKtC,KAAK;AACxFM,gBAAQL,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQoC,SAAY,KAAKC,OAAO,KAAKrC,GAAG;AAChFK,gBAAQJ,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQmC,SAAY,KAAKC,OAAO,KAAKpC,GAAG;AAChFI,gBAAQH,OAAO,KAAKA,SAAS,QAAQ,KAAKA,SAASkC,SAAY,KAAKC,OAAO,KAAKnC,IAAI;AACpFG,gBAAQF,OAAO,KAAKA,QAAQ;AAC5BE,gBAAQD,WAAWwB,QAAQ,KAAKxB,QAAQ;AAExCkC,4BAAoB,MAAM,YAAYV,QAAQ,KAAKxB,QAAQ,CAAA;MAC7D;MAGAS,YAAY0B,OAAcC,QAAwC;AAChE,YAAI,CAACA,QAAQ;AACX;QACF;AAEA,aAAKzC,QAAQ0C,aAAaD,OAAOzC,KAAK;AACtC2C,QAAAA,sBAAqB,MAAM,SAAS;UAAE3C,OAAO,KAAKA;UAAOwC;QAAM,CAAA;MACjE;MAGAzB,aAAayB,OAAcC,QAAwC;AACjE,YAAI,CAACA,QAAQ;AACX;QACF;AAEA,aAAKzC,QAAQ0C,aAAaD,OAAOzC,KAAK;AACtC2C,QAAAA,sBAAqB,MAAM,UAAU;UAAE3C,OAAO,KAAKA;UAAOwC;QAAM,CAAA;MAClE;MAEAI,eAAeC,QAAiC;AAC9C,cAAMC,QAAQC,SAASC,cAAc,KAAA;AACrCF,cAAMG,UAAUC,IAAI,cAAA;AACpBL,eAAOM,YAAYL,KAAAA;AAEnBM,mBAAW,MAAA;AACTN,gBAAMO,OAAM;QACd,GAAG,GAAA;MACL;MAEArC,gBAAgBwB,OAAyB;AACvC,YAAI,KAAKnC,YAAY,KAAKJ,QAAQ,QAAQiB,OAAO,KAAKZ,SAASN,KAAAA,KAAU,KAAKC,KAAK;AACjF;QACF;AAEA,cAAM4C,SAASL,MAAMc;AACrB,aAAKV,eAAeC,MAAAA;AAEpB,cAAMU,UAAU,OAAO,KAAKvD,UAAU,WAAW,KAAKA,QAAQ;AAC9D,aAAKA,QAAQuD,WAAW,KAAKpD,QAAQ;AAErC,YAAI,KAAKH,SAAS,KAAKC,KAAK;AAC1B,eAAKI,WAAW;QAClB;MACF;MAEAc,gBAAgBqB,OAAyB;AACvC,YAAI,KAAKnC,YAAY,KAAKH,QAAQ,QAAQgB,OAAO,KAAKZ,SAASN,KAAAA,KAAU,KAAKE,KAAK;AACjF;QACF;AAEA,cAAM2C,SAASL,MAAMc;AACrB,aAAKV,eAAeC,MAAAA;AAEpB,cAAMU,UAAU,OAAO,KAAKvD,UAAU,WAAW,KAAKA,QAAQ;AAC9D,aAAKA,QAAQuD,WAAW,KAAKpD,QAAQ;AAErC,YAAI,KAAKH,SAAS,KAAKE,KAAK;AAC1B,eAAKG,WAAW;QAClB;MACF;;;;;AAnGK,cAAA,GAAA,IAAA,GAAA,KAGIL,uBAAKwD,aAAA,IAAA,GAALxD,aAAAA,IAAAA,IAAAA,KAGAC,oBAAAA,UAAAA,IAAAA,GAAAA,KAGAC,oBAAAA,UAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA;;IA+EX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC/LAmD,0CA8I4BC,gBAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAIjBC,cAGAC,iBAGAC,gBAGAC,aAAAA,uBAbEC;;;;AAlJb;AAIA,IAAAN,oBAAqB;AAErB,IAAAO;AAEA;AACA;AACA;AACA;cAECC,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6GRC,WAAAA;AACE,eAAOC;;yCAE8B,KAAKV,SAAS,eAAA;;0FAEmC,KAAKA,SAAS,eAAA,mBAAkC,KAAKG,IAAI,kBAAkB,KAAKQ,iBAAiB;;;;;;;;;;;;;;;MAezL;IACF,CAAA,GAAAC,UAIGC,KAAa;MAAEC,SAAS;MAAMC,cAAc;IAAgB,CAAA,GAAAC,UAG5DH,KAAc;MAAEI,MAAMC;MAASJ,SAAS;IAAK,CAAA,GAAAK,UAG7CC,MAAgB,eAAA,GAAAC,UAGhBR,KAAa;MAAEC,SAAS;MAAMC,cAAc;IAAG,CAAA,GAAAO,UAO/CC,OAAgC,UAAU;MAAEC,UAAU;IAAgB,CAAA;AAnBlE,IAAMpB,SAAN,eAAqBL,iBAAAA,aAAAA;;eAIjBC,cAGAC,iBAGAC,gBAGAC,aAAAA,YAAAA,GAAAA,GAAAA,CAAAA,SAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YATAH;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAOTsB;;;;WApB0B1B,cAAAA;;MAIjBC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAGPC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAEbuB,cAAoB;AAClBC,4BAAoB,MAAM,YAAYT,QAAQ,KAAKjB,QAAQ,CAAA;MAC7D;MAGAwB,aAAaG,OAAcC,QAAgC;AACzD,YAAI,CAACA,QAAQ;AACX;QACF;AAEA,aAAK7B,QAAQ8B,OAAOD,OAAO7B,SAAS,eAAA;AAEpC+B,QAAAA,sBAAqB,MAAM,UAAU;UAAE/B,OAAO,KAAKA;UAAO4B;QAAM,CAAA;MAClE;;;;;AA5BK,cAAA,GAAA,IAAA,GAAA,KAII5B,uBAAKgC,aAAA,IAAA,GAALhC,aAAAA,MAAgB,eAAA,IAAA,KAGhBC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,MAAe,EAAA,GAAA,KAiBxBQ,oBAAoB,CAACiB,UAAAA;AACnB,eAAK5B,QAAQ8B,OAAO,KAAK5B,SAASF,SAAS,eAAA;AAE3C+B,UAAAA,sBAAqB,MAAM,UAAU;YAAE/B,OAAO,KAAKA;YAAO4B;UAAM,CAAA;QAClE;;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrLAK,0CAuP2BC,gBAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAkBhBC,iBAQAC,sBAGAC,mBAAAA,sBA7BEC;;;;AAvPb,IAAAL,oBAAmD;AAEnD,IAAAM;AAEA;AACA;AACA;AACA;cAyCCC,UAAU;MACTC,KAAK;MACLC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmMV,CAAA,GAAAC,UAOGC,KAAa;MACZC,MAAMC;MACNC,SAAS;MACTC,WAAW;MACXC,cAAc;MACdC,SAASC,MAAMC,UAAQ;AACrB,cAAMC,OAAO;AACb,YAAIF,SAASC,YAAYA,aAAaE,QAAW;AAC/CD,eAAKE,sBAAsBH,UAAUD,IAAAA;QACvC;MACF;IACF,CAAA,GAAAK,UAQCC,MAAmB,kBAAA,GAAAC,UAGnBD,MAAmB,eAAA,GAAAE,UA4QnBC,OAAO,cAAc;MAAEC,UAAU;IAAsB,CAAA,GAAAC,UAKvDF,OAAO,cAAc;MAAEC,UAAU;IAAmB,CAAA;AA7ShD,IAAMxB,QAAN,eAAoBJ,iBAAAA,aAAAA;;eAkBhBC,iBAQAC,sBAGAC,mBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,QAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAXAF;;;;;YAQAC;;;;;YAGAC;;;;;YA4QT2B;;;;;YAKAC;;;;WA9SyB/B,cAAAA;;MAGzB;MACA;MAcSC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;;MAGlBqB,sBAAsBH,UAAkBD,MAAoB;AAC1D,aAAKc,oBAAoBb,UAAUD,IAAAA;MACrC;MAGShB;UAAAA,iBAAAA;oBAAAA;;UAAAA,eAAAA,IAAAA;aAAAA,+BAAc;;MAGdC;UAAAA,cAAAA;oBAAAA;;UAAAA,YAAAA,IAAAA;aAAAA,4BAAW;;;;;MAKpB,IAAI8B,OAAqD;AACvD,eAAO,KAAK;MACd;;;;;MAMAC,OAAOC,OAAqB;AAC1B,YAAIA,SAAS,KAAKA,QAAQ,KAAK,MAAMC,UAAUD,UAAU,KAAKlC,WAAW;AACvE,eAAKA,YAAYkC;QACnB;MACF;MAEAE,oBAA0B;AACxB,aAAK,UAAS;MAChB;MAEAC,cAAoB;AAClB,aAAK,UAAS;MAChB;MAEAC,SAAyB;AACvB,cAAMC,UAAU,KAAK,MAAMJ,SAAS;AAEpC,eAAOK;;;;YAIC,KAAK,YAAW,CAAA;;;;;;;cAOdD,UAAU,KAAK,iBAAgB,IAAKC,qCAAmB;;;;;;;;MAQnE;MAEA,cAAW;AACT,YAAI,KAAK,MAAML,WAAW,GAAG;AAC3B,iBAAOM;QACT;AAEA,eAAOD;;UAED,KAAK,MAAME,IACX,CAACC,KAAKT,UAAUM;;;;8BAIIN,UAAU,KAAKlC,YAAY,SAAS,OAAA;8BACpC,SAAS2C,IAAIC,EAAE,EAAE;yBACtBV,UAAU,KAAKlC,YAAY,IAAI,EAAC;uBAClC,CAAC6C,MAAa,KAAK,gBAAgBX,OAAOS,IAAIC,IAAIC,CAAAA,CAAAA;yBAChD,CAACA,MAAqB,KAAK,kBAAkBA,GAAGX,KAAAA,CAAAA;;gBAEzDS,IAAIG,KAAK;;WAEd,CAAA;;;MAIT;MAEA,mBAAgB;AACd,eAAON;QACH,KAAK,MAAME,IACX,CAACC,KAAKT,UAAUM;;;;iBAIP,SAASG,IAAIC,EAAE,EAAE;8BACJ,OAAOD,IAAIC,EAAE,EAAE;yBACpBV,UAAU,KAAKlC,YAAY,WAAW,QAAA;yBACtCkC,KAAAA;;yBAEA,OAAOS,IAAIC,EAAE,EAAE;;SAE/B,CAAA;;MAGP;MAEA,gBAAgBV,OAAeU,IAAYG,OAAY;AACrD,YAAIb,UAAU,KAAKlC,WAAW;AAC5B;QACF;AAEA,aAAKA,YAAYkC;AAEjB,aAAKc,cACH,IAAIC,YAAkC,cAAc;UAClDC,QAAQ;YAAEhB;YAAOU;YAAIG;UAAM;UAC3BI,SAAS;UACTC,UAAU;QACZ,CAAA,CAAA;MAEJ;MAEA,kBAAkBL,OAAsBM,cAAoB;AAC1D,YAAIC,WAAWD;AAEf,gBAAQN,MAAMQ,KAAG;UACf,KAAK;AACHR,kBAAMS,eAAc;AACpBF,uBAAWD,eAAe,IAAIA,eAAe,IAAI,KAAK,MAAMlB,SAAS;AACrE;UACF,KAAK;AACHY,kBAAMS,eAAc;AACpBF,uBAAWD,eAAe,KAAK,MAAMlB,SAAS,IAAIkB,eAAe,IAAI;AACrE;UACF,KAAK;AACHN,kBAAMS,eAAc;AACpBF,uBAAW;AACX;UACF,KAAK;AACHP,kBAAMS,eAAc;AACpBF,uBAAW,KAAK,MAAMnB,SAAS;AAC/B;UACF;AACE;QACJ;AAEA,YAAImB,aAAaD,cAAc;AAC7B,eAAKrD,YAAYsD;AAGjBG,yBAAe,MAAA;AACb,kBAAMC,aAAa,KAAKC,YAAYC,iBAAiB,cAAA;AACrD,kBAAMC,eAAeH,aAAaJ,QAAAA;AAClCO,0BAAcC,MAAAA;UAChB,CAAA;QACF;MACF;MAEA,MAAM/B,oBAAoBgC,WAAmBC,SAAgC;AAC3E,YAAI,KAAK,cAAc;AACrB;QACF;AAEA,aAAK,eAAe;AAEpB,cAAMC,WAAW;AACjB,cAAMC,SAAS;AAEf,cAAMC,UAAU,KAAKlE;AAErB,YAAI,CAACkE,SAAS;AACZ,eAAK,eAAe;AACpB,eAAKC,cAAa;AAClB;QACF;AAGA,cAAMC,YAAY,KAAKV,YAAYW,cACjC,kCAAkCP,SAAAA,IAAa;AAEjD,cAAMQ,UAAU,KAAKZ,YAAYW,cAAc,kCAAkCN,OAAAA,IAAW;AAE5F,YAAI,CAACK,aAAa,CAACE,SAAS;AAC1B,eAAK,eAAe;AACpB,eAAKH,cAAa;AAClB;QACF;AAGA,cAAMI,cAAcL,QAAQM,sBAAqB,EAAGC;AACpDP,gBAAQQ,MAAMD,SAAS,GAAGF,WAAAA;AAG1BD,gBAAQI,MAAMC,UAAU;AACxBL,gBAAQI,MAAME,UAAU;AAGxB,YAAI;AACF,gBAAMC,UAAUT,UAAUU,QAAQ;YAAC;cAAEF,SAAS;YAAE;YAAG;cAAEA,SAAS;YAAE;aAAI;YAAEZ;YAAUC;YAAQc,MAAM;UAAW,CAAA;AACzG,gBAAMF,QAAQG;AACdH,kBAAQI,OAAM;QAChB,QAAQ;QAER;AAEAb,kBAAUc,aAAa,cAAc,QAAA;AAGrC,cAAMC,kBAAkBb,QAAQc,aAAa,YAAA;AAE7Cd,gBAAQI,MAAMC,UAAU;AACxBL,gBAAQI,MAAMW,aAAa;AAC3Bf,gBAAQI,MAAME,UAAU;AAGxB,aAAKN,QAAQgB;AACb,cAAMC,YAAYjB,QAAQE,sBAAqB,EAAGC;AAGlD,YAAIF,gBAAgBgB,WAAW;AAC7BrB,kBAAQgB,aAAa,kBAAkB,MAAA;AACvC,eAAKhB,QAAQoB;AACbpB,kBAAQQ,MAAMD,SAAS,GAAGc,SAAAA;AAC1B,gBAAM,KAAK,MAAMvB,QAAAA;QACnB;AAGAM,gBAAQI,MAAMW,aAAa;AAC3Bf,gBAAQI,MAAME,UAAU;AAExB,aAAKN,QAAQgB;AAEb,YAAI;AACF,gBAAME,SAASlB,QAAQQ,QAAQ;YAAC;cAAEF,SAAS;YAAE;YAAG;cAAEA,SAAS;YAAE;aAAI;YAAEZ;YAAUC;YAAQc,MAAM;UAAW,CAAA;AACtG,gBAAMS,OAAOR;AACbQ,iBAAOP,OAAM;QACf,QAAQ;QAER;AAGAX,gBAAQI,MAAMC,UAAU;AACxBL,gBAAQI,MAAMW,aAAa;AAC3Bf,gBAAQI,MAAME,UAAU;AAExB,YAAIO,oBAAoB,UAAU;AAChCb,kBAAQY,aAAa,cAAc,QAAA;QACrC;AAEAhB,gBAAQQ,MAAMD,SAAS;AACvBP,gBAAQuB,gBAAgB,gBAAA;AACxB,aAAK,eAAe;MACtB;MAEA,MAAMC,IAAU;AACd,eAAO,IAAIC,QAAQ,CAACC,YAAYC,WAAWD,SAASF,EAAAA,CAAAA;MACtD;MAEA,YAAS;AACP,cAAM3D,OAAwC,CAAA;AAE9C,mBAAW+D,SAASC,MAAMC,KAAK,KAAKC,QAAQ,GAAG;AAC7C,gBAAMC,OAAOJ,MAAMV,aAAa,MAAA;AAChC,cAAIc,MAAMC,WAAW,MAAA,GAAS;AAC5B,kBAAMxD,KAAKuD,KAAKE,QAAQ,QAAQ,EAAA;AAChC,kBAAMvD,QAAQiD,MAAMV,aAAa,gBAAA,KAAqBzC;AACtDZ,iBAAKsE,KAAK;cAAE1D;cAAIE;YAAM,CAAA;UACxB;QACF;AAEA,aAAK,QAAQd,KAAKuE,MAAM,GAAG,CAAA;AAE3B,YAAI,KAAKvG,aAAa,KAAK,MAAMmC,UAAU,KAAK,MAAMA,SAAS,GAAG;AAChE,eAAKnC,YAAY;QACnB;MACF;MAGA6B,qBAA2B;AACzB,aAAK2E,sBAAqB;MAC5B;MAGA1E,sBAA4B;AAC1B,aAAK,UAAS;AACd,aAAKsC,cAAa;MACpB;MAEQoC,wBAA8B;AACpC,cAAMC,SAAS,KAAK9C,YAAYW,cAAc,iBAAA;AAE9C,YAAI,CAACmC,QAAQ;AACX;QACF;AAEA,cAAMC,aAAa,KAAK/C,YAAYW,cAAc,qBAAA;AAClD,cAAMqC,YAAYC,QAAQF,YAAYG,cAAc;UAAEC,SAAS;QAAK,CAAA,EAAG3E,SAAS,CAAA;AAChF4E,4BAAoBN,QAAQ,oBAAoBE,SAAAA;MAClD;;;;;AA7TK,cAAA,GAAA,IAAA,GAAA,KAGL,SAAKK,aAAA,IAAA,GAAoC,CAAA,IAAE,KAC3C,eAAe,OAAA,KAcNhH,0BAAAA,gBAAAA,MAAoB,CAAA,GAAA,KAQpBC,+BAAAA,qBAAAA,IAAAA,GAAAA,KAGAC,4BAAAA,kBAAAA,IAAAA;;IAiSX;;;;;ACrjBA,IAAa+G;AAAb;;;AAAO,IAAMA,cAAN,cAA0BC,YAAAA;MAC/BC,oBAA0B;AACxB,aAAKC,SAAS;AACd,YAAI,CAAC,KAAKC,aAAa,MAAA,GAAS;AAC9B,eAAKC,aAAa,QAAQ,QAAA;QAC5B;MACF;IACF;AAEA,QAAI,CAACC,eAAeC,IAAI,cAAA,GAAiB;AACvCD,qBAAeE,OAAO,gBAAgBR,WAAAA;IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICXAS,0CAqGgCC,gBAAAA,SAAAA,SAAAA,SAarBC,cAGAC,oBAGAC,oBAAAA,cAnGLC,eAQAC,2BAwEOC;;;;AArGb,IAAAP,oBAAqB;AAErB;AACA;AACA;AACA;AAEA,IAAAQ;AAEA;AAYA,IAAMH,gBAAgB,uBAAA;AACpB,UAAII,UAAU;AACd,aAAO,MAAA;AACLA,mBAAW;AACX,eAAO,qBAAqBA,OAAAA;MAC9B;IACF,GAAA;AAEA,IAAMH,eAAe,uBAAA;AACnB,UAAIG,UAAU;AACd,aAAO,MAAA;AACLA,mBAAW;AACX,eAAO,sBAAsBA,OAAAA;MAC/B;IACF,GAAA;cAECC,UAAU;MACTC,KAAK;MACLC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqDRC,WAAAA;AACE,eAAOC;;;;;MAKT;IACF,CAAA,GAAAC,UAIGC,KAAgC;MAC/BC,SAAS;MACTC,cAAc;MACdC,SAA2BC,MAAMC,UAAQ;AACvC,YAAID,SAASC,UAAU;AACrB;QACF;AACA,aAAKC,2BAA0B;MACjC;IACF,CAAA,GAAAC,UAGCC,MAAmB,gBAAA,GAAAC,UAGnBD,MAAuB,sBAAA;AAlBnB,IAAMlB,aAAN,eAAyBN,iBAAAA,aAAAA;;eAarBC,cAGAC,oBAGAC,oBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YANAF;;;;;YAGAC;;;;;YAGAC;;;;WAnBqBH,cAAAA;;MAarBC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,eAAAA;oBAAAA;;UAAAA,aAAAA,IAAAA;aAAAA,6BAAY;;MAGZC;UAAAA,cAAAA;oBAAAA;;UAAAA,YAAAA,IAAAA;aAAAA,4BAAW;;MAEpB;MACA;MACA;MACA;MAIAuB,oBAA0B;AACxB,aAAK,oBAAmB;MAC1B;MAEAC,uBAA6B;AAC3B,aAAK,oBAAmB;AACxB,aAAK,iBAAgB;MACvB;MAEAC,cAAoB;AAClB,cAAMC,QAAQ,KAAK3B;AAEnB,YAAI2B,OAAO;AACT,cAAI,CAACA,MAAMC,IAAI;AACbD,kBAAMC,KAAKzB,aAAAA;UACb;AACAwB,gBAAME,WAAW;AACjBF,gBAAMG,aAAa,QAAQ,YAAA;QAC7B;AAEA,aAAK,oBAAmB;AAExB,YAAI,CAAC,KAAK,qBAAqB;AAC7BC,yBAAe,MAAA;AACb,iBAAK,aAAY;UACnB,CAAA;QACF,OAAO;AACL,eAAKX,2BAA0B;QACjC;MACF;MAEA,sBAAmB;AACjB,cAAMY,OAAO,KAAK/B;AAElB,YAAI+B,SAAS,KAAK,cAAc;AAC9B;QACF;AAEA,YAAI,KAAK,cAAc;AACrB,eAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;QAC5E;AAEA,YAAID,MAAM;AACRA,eAAKE,iBAAiB,cAAc,KAAK,iBAAiB;QAC5D;AAEA,aAAK,eAAeF,QAAQ;MAC9B;MAEA,sBAAmB;AACjB,YAAI,CAAC,KAAK,cAAc;AACtB;QACF;AAEA,aAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;AAC1E,aAAK,eAAe;MACtB;MAEA,eAAY;AACV,cAAME,WAAW,KAAKlC,aAAamC,iBAAiB;UAAEC,SAAS;QAAK,CAAA,KAAM,CAAA;AAC1E,cAAMC,WAAWH,SAASI,OAAO,CAACC,SAA8BA,gBAAgB1C,WAAAA;AAEhF,aAAK,uBAAuB,KAAK,QAAQ;AAEzC,cAAM2C,UAAwB,CAAA;AAE9BH,iBAASI,QAAQ,CAACC,YAAAA;AAChB,cAAIA,QAAQC,aAAa,oBAAA,KAAyBD,QAAQE,aAAa,MAAA,MAAY,aAAa;AAC9F;UACF;AAEA,gBAAM9C,QAAQ,KAAK,oBAAoB4C,OAAAA;AACvC,gBAAMG,QAAQ,KAAK,oBAAoBH,SAAS5C,KAAAA;AAChD,gBAAM6B,KAAKe,QAAQf,MAAMe,QAAQf,GAAGmB,KAAI,EAAGC,SAAS,IAAIL,QAAQf,KAAK1B,cAAAA;AAErE,cAAI,CAACyC,QAAQf,IAAI;AACfe,oBAAQf,KAAKA;UACf;AAEAe,kBAAQb,aAAa,QAAQ,QAAA;AAC7Ba,kBAAQb,aAAa,iBAAiB,OAAA;AACtCa,kBAAQb,aAAa,WAAW,KAAK/B,UAAUA,QAAQ,YAAY,MAAA;AACnE4C,kBAAQM,QAAQC,SAAS;AACzBP,kBAAQd,WAAW;AAEnB,gBAAMsB,WAAW;YACfC,OAAO,CAACC,UAAAA;AACNA,oBAAMC,eAAc;AACpBD,oBAAME,gBAAe;AACrB,mBAAK,cAAcxD,OAAO+C,OAAOO,KAAAA;YACnC;YACAG,SAAS,CAACH,UAAAA;AACR,kBAAIA,MAAMI,QAAQ,WAAWJ,MAAMI,QAAQ,KAAK;AAC9CJ,sBAAMC,eAAc;AACpB,qBAAK,cAAcvD,OAAO+C,OAAOO,KAAAA;cACnC;YACF;UACF;AAEAV,kBAAQT,iBAAiB,SAASiB,SAASC,OAAO;YAAEM,SAAS;UAAM,CAAA;AACnEf,kBAAQT,iBAAiB,WAAWiB,SAASK,OAAO;AAEpDf,kBAAQkB,KAAK;YAAEhB;YAAS5C;YAAO+C;YAAOlB;YAAIuB;UAAS,CAAA;QACrD,CAAA;AAEA,aAAK,WAAWV;AAChB,aAAK,sBAAsBA,QAAQO,SAAS;AAE5C,YAAI,KAAKjD,UAAU,QAAQ0C,QAAQO,SAAS,GAAG;AAC7C,gBAAMY,cAAcnB,QAAQoB,KAC1B,CAACC,WACCA,OAAOnB,QAAQC,aAAa,UAAA,KAC5BkB,OAAOnB,QAAQM,QAAQc,aAAa,UACpCD,OAAOnB,QAAQE,aAAa,eAAA,MAAqB,MAAA;AAGrD,cAAIe,aAAa;AACf,iBAAK7D,QAAQ6D,YAAY7D;UAC3B;QACF;AAEA,aAAKqB,2BAA0B;MACjC;MAEA,mBAAgB;AACd,aAAK,uBAAuB,KAAK,QAAQ;AACzC,aAAK,WAAW,CAAA;AAChB,aAAK,sBAAsB;MAC7B;MAEA,uBAAuBqB,SAAqB;AAC1CA,gBAAQC,QAAQ,CAACoB,WAAAA;AACfA,iBAAOnB,QAAQV,oBAAoB,SAAS6B,OAAOX,SAASC,KAAK;AACjEU,iBAAOnB,QAAQV,oBAAoB,WAAW6B,OAAOX,SAASK,OAAO;AACrEM,iBAAOnB,QAAQM,QAAQC,SAAS;AAChCY,iBAAOnB,QAAQb,aAAa,iBAAiB,OAAA;AAC7CgC,iBAAOnB,QAAQd,WAAW;QAC5B,CAAA;MACF;MAEAT,6BAAmC;AACjC,YAAI,CAAC,KAAK,qBAAqB;AAC7B;QACF;AAEA,YAAI4C,gBAA+B;AAEnC,cAAMvB,UAAU,KAAK;AAErBA,gBAAQC,QAAQ,CAACoB,WAAAA;AACf,gBAAMG,aAAa,KAAKlE,UAAU,QAAQ+D,OAAO/D,UAAU,KAAKA;AAChE+D,iBAAOnB,QAAQb,aAAa,iBAAiBmC,aAAa,SAAS,OAAA;AACnEH,iBAAOnB,QAAQM,QAAQC,SAASe,aAAa,SAAS;AACtDH,iBAAOnB,QAAQd,WAAWoC,aAAa,IAAI;AAC3CH,iBAAOnB,QAAQb,aAAa,WAAWmC,aAAa,YAAY,MAAA;AAEhE,cAAIA,YAAY;AACdD,4BAAgBF,OAAOhB;UACzB;QACF,CAAA;AAEA,YAAI,CAACkB,eAAe;AAClB,gBAAME,WAAWzB,QAAQ,CAAA;AACzB,cAAIyB,UAAU;AACZA,qBAASvB,QAAQd,WAAW;UAC9B;QACF;AACA,cAAMsC,WAAWC,QAAQ,KAAKrE,SAASiE,aAAAA;AACvC,aAAKK,gBAAgB,kBAAkBF,QAAAA;MACzC;MAEA,cAAcpE,OAAe+C,OAAewB,aAAkB;AAC5DA,oBAAYhB,eAAc;AAC1BgB,oBAAYf,gBAAe;AAE3B,cAAMgB,gBAAgB,KAAKxE;AAC3B,aAAKA,QAAQA;AAEb,YAAIwE,kBAAkBxE,OAAO;AAC3B,eAAK,qBAAqBA,OAAO+C,OAAOwB,WAAAA;QAC1C;MACF;MAEA,oBAAoB3B,SAAoB;AACtC,cAAM6B,gBAAgB7B,QAAQE,aAAa,OAAA,KAAYF,QAAQE,aAAa,YAAA,KAAiBF,QAAQM,QAAQlD;AAE7G,YAAIyE,iBAAiBA,cAAczB,KAAI,EAAGC,SAAS,GAAG;AACpD,iBAAOwB,cAAczB,KAAI;QAC3B;AAEA,cAAM0B,OAAO9B,QAAQ+B,aAAa3B,KAAAA;AAElC,YAAI0B,QAAQA,KAAKzB,SAAS,GAAG;AAC3B,iBAAOyB;QACT;AAEA,cAAMP,WAAWhE,cAAAA;AACjByC,gBAAQM,QAAQlD,QAAQmE;AACxB,eAAOA;MACT;MAEA,oBAAoBvB,SAAsBuB,UAAgB;AACxD,cAAMS,gBAAgBhC,QAAQE,aAAa,YAAA,KAAiBF,QAAQE,aAAa,YAAA;AAEjF,YAAI8B,iBAAiBA,cAAc5B,KAAI,EAAGC,SAAS,GAAG;AACpD,iBAAO2B,cAAc5B,KAAI;QAC3B;AAEA,cAAM0B,OAAO9B,QAAQ+B,aAAa3B,KAAAA;AAElC,YAAI0B,QAAQA,KAAKzB,SAAS,GAAG;AAC3B,iBAAOyB;QACT;AAEA,eAAOP;MACT;MAEA,qBAAqBnE,OAAe+C,OAAeO,OAAY;AAC7DuB,QAAAA,sBAAqB,MAAM,UAAU;UAAE7E;UAAOsD;QAAM,CAAA;AAEpD,aAAKwB,cACH,IAAIC,YAAY,gBAAgB;UAC9BC,QAAQ;YAAEhF;YAAO+C;YAAOO;UAAM;UAC9B2B,SAAS;UACTC,UAAU;QACZ,CAAA,CAAA;MAEJ;;;;;AA/PK,cAAA,GAAA,IAAA,GAAA,KAaIlF,uBAAKmF,aAAA,IAAA,GAALnF,aAAAA,MAAuB,IAAA,IAAA,KAGvBC,6BAAAA,mBAAAA,IAAAA,GAAAA,KAGAC,4BAAAA,mBAAAA,IAAAA,GAAAA,KAET,WAAyB,CAAA,GAAE,KAC3B,eAAuC,MAAA,KACvC,sBAAsB,OAAA,KACtB,oBAAoB,MAAA;AAClB,eAAK,aAAY;QACnB;;IAsOF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICrWAkF,0CA0PgCC,gBAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAoBrBC,gBAGAC,aAGAC,cAGAC,iBAGAC,gBAAAA,2BAhCEC;;;;AA1Pb,IAAAP,oBAAqB;AAErB,IAAAQ;AAEA;AACA;AACA;AACA;cAECC,UAAU;MACTC,KAAK;MACLC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqNRC,WAAAA;AACE,eAAOC;qEAC0D,KAAKZ,OAAO,cAAc,KAAKG,QAAQ;;uCAErE,KAAKF,IAAI,UAAU,KAAKC,KAAK,aAAa,KAAKF,OAAO,cAAc,KAAKG,QAAQ;kDACtE,KAAKU,QAAQ;;;;;;;;;0BASrC,KAAKA,QAAQ;;;;;;;;;MASrC;IACF,CAAA,GAAAC,UAIGC,KAA0B;MACzBC,MAAMC;MACNC,SAAS;MACTC,SAA2BC,MAAa;AACtC,YAAIA,QAAQ,KAAKnB,MAAM;AACrB,gBAAMoB,OAAO,KAAKC,QAAQ,MAAA;AAC1B,gBAAMC,OAAOF,QAAS,KAAKG,YAAW;AACtC,gBAAMC,SAASC,MAAMC,KAAKJ,KAAKK,iBAAiB,0BAA0B,KAAK3B,IAAI,IAAI,CAAA;AAEvFwB,iBAAOI,QAAQ,CAACC,UAAAA;AACd,gBAAIA,UAAU,QAAQA,MAAM9B,SAAS;AACnC8B,oBAAM9B,UAAU;YAClB;UACF,CAAA;QACF;MACF;IACF,CAAA,GAAA+B,UAGChB,KAAoB;MAAEG,SAAS;IAAK,CAAA,GAAAc,UAGpCjB,KAAoB;MAAEG,SAAS;IAAK,CAAA,GAAAe,UAGpClB,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAgB,UAG7CC,MAAyB,QAAA,GAAAC,UAwDzBC,OAAkD,SAAS;MAAEC,UAAU;IAAS,CAAA;AAvF5E,IAAMjC,aAAN,eAAyBN,iBAAAA,aAAAA;;eAoBrBC,gBAGAC,aAGAC,cAGAC,iBAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAZAJ;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAwDTmC;;;;WAxF8BxC,cAAAA;;MAoBrBC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAGPC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAOhBoC,oBAA0B;AACxB,aAAKC,eAAe,KAAKzC;MAC3B;MAEA0C,cAAoB;AAClB,YAAI,CAAC,KAAKtC,SAAS;AACjB;QACF;AAEA,YAAI,KAAKuC,cAAc;AACrB,eAAKA,eAAe;AACpB,eAAKF,eAAe,KAAKzC;QAC3B;AAEA,cAAM4C,UAAU,OAAO,KAAKH,iBAAiB,eAAe,KAAKzC,YAAY,KAAKyC;AAClF,YAAIG,SAAS;AACX,eAAKC,kBAAkB,KAAK7C,OAAO;AACnC,eAAKyC,eAAe,KAAKzC;QAC3B;AAEA,cAAMI,UAAU,KAAKA;AACrBA,gBAAQ0C,aAAa,gBAAgB,KAAK9C,UAAU,SAAS,OAAA;AAC7DI,gBAAQD,WAAWc,QAAQ,KAAKd,QAAQ;AACxC4C,4BAAoB,MAAM,YAAY9B,QAAQ,KAAKd,QAAQ,CAAA;MAC7D;MAEQ0C,kBAAkB7C,SAAwB;AAChD,cAAMgD,QAAQ,KAAKC,YAAYC,cAAc,kBAAA;AAC7C,cAAMC,OAAM,KAAKF,YAAYC,cAAc,0BAAA;AAC3C,YAAI,CAACF,SAAS,CAACG,MAAK;AAClB;QACF;AAEAH,cAAMI,UAAUC,OAAO,gBAAgB,gBAAA;AACvCF,QAAAA,KAAIC,UAAUC,OAAO,gBAAgB,gBAAA;AAErC,cAAMC,YAAYtD,UAAU,iBAAiB;AAC7CgD,cAAMI,UAAUG,IAAID,SAAAA;AACpBH,QAAAA,KAAIC,UAAUG,IAAID,SAAAA;AAElB,cAAME,WAAW;AAEjBC,mBAAW,MAAA;AACTT,gBAAMI,UAAUC,OAAOC,SAAAA;AACvBH,UAAAA,KAAIC,UAAUC,OAAOC,SAAAA;QACvB,GAAGE,QAAAA;MACL;MAGAjB,YAAYmB,OAAyB;AACnC,YAAI,KAAKvD,YAAY,KAAKH,SAAS;AACjC0D,gBAAMC,eAAc;AACpBD,gBAAME,gBAAe;AAErB;QACF;AAEA,aAAK5D,UAAU;AAEf6D,QAAAA,sBAAqB,MAAM,SAAS;UAAE3D,OAAO,KAAKF;UAAS0D;QAAM,CAAA;MACnE;;;;;AAnGK,cAAA,GAAA,IAAA,GAAA,KAoBI1D,yBAAO8D,aAAA,IAAA,GAAP9D,eAAAA,IAAAA,IAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,sBAAAA,aAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAGDuC,eAAe,MAAA,KAEvB9B,WAAmB,OAAOkD,OAAOC,WAAU,CAAA;;IA+D7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5VAC,0CAsI4BC,gBAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,UAAAA,UAIjBC,eAGAC,YAGAC,YAGAC,aAGAC,iBAGAC,gBAGAC,oBAAAA,uBAtBEC;;;;AAxIb;AAEA,IAAAT,oBAAqB;AAErB,IAAAU;AAEA;AACA;AACA;AACA;cAECC,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkGRC,WAAAA;AACE,eAAOC;;;;;iBAKM,KAAKZ,OAAO,CAAA;iBACZ,KAAKC,OAAO,GAAA;kBACX,KAAKC,QAAQ,CAAA;mBACZW,OAAO,KAAKd,SAAS,CAAA,CAAA;sBAClB,KAAKI,QAAQ;2BACR,KAAKA,QAAQ;;;;;;;sBAOlBW,QAAQ,KAAKX,QAAQ,CAAA;mBACxB,KAAKJ,UAAU,QAAQ,KAAKA,UAAUgB,SAAY,KAAKF,OAAO,KAAKd,KAAK,CAAA;;;;MAIzF;IACF,CAAA,GAAAiB,UAIGC,KAAoB;MAAEC,MAAMC;MAAQC,SAAS;IAAK,CAAA,GAAAC,UAGlDJ,KAAoB;MAAEC,MAAMC;MAAQC,SAAS;IAAK,CAAA,GAAAE,UAGlDL,KAAoB;MAAEC,MAAMC;MAAQC,SAAS;IAAK,CAAA,GAAAG,UAGlDN,KAAoB;MAAEC,MAAMC;MAAQC,SAAS;IAAK,CAAA,GAAAI,UAGlDP,KAAc;MAAEC,MAAMJ;MAASM,SAAS;IAAK,CAAA,GAAAK,UAG7CC,MAAwB,OAAA,GAAAC,UAGxBD,MAAmB,YAAA,GAAAE,UAuBnBC,OAAwC,SAAS;MAAEC,UAAU;IAAsB,CAAA,GAAAC,UAiBnFF,OAAwC,UAAU;MAAEC,UAAU;IAAsB,CAAA,GAAAE,WAepFH,OAAqE,SAAS;MAC7EC,UAAU;MACVG,MAAM,CAACC,UAAUA,iBAAiBC,eAAe,OAAQD,MAAsBE,QAAQrC,UAAU;IACnG,CAAA,GAAAsC,WAcCR,OAAqE,UAAU;MAC9EC,UAAU;MACVG,MAAM,CAACC,UAAUA,iBAAiBC,eAAe,OAAQD,MAAsBE,QAAQrC,UAAU;IACnG,CAAA;AAhGK,IAAMO,SAAN,eAAqBR,iBAAAA,aAAAA;;eAIjBC,eAGAC,YAGAC,YAGAC,aAGAC,iBAGAC,gBAGAC,oBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,SAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAlBAN;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAuBTiC;;;;;YAiBAC;;;;;YAkBAC;;;;;YAiBAC;;;;WAjG0B3C,cAAAA;;MAIjBC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,MAAAA;oBAAAA;;UAAAA,IAAAA,IAAAA;aAAAA,oBAAG;;MAGHC;UAAAA,MAAAA;oBAAAA;;UAAAA,IAAAA,IAAAA;aAAAA,oBAAG;;MAGHC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAGPC;UAAAA,eAAAA;oBAAAA;;UAAAA,aAAAA,IAAAA;aAAAA,6BAAY;;MAErBqC,cAAoB;AAClB,YAAI,CAAC,KAAKtC,SAAS;AACjB;QACF;AAEA,cAAMA,UAAU,KAAKA;AACrB,cAAML,QAAQ,KAAKA,SAAS;AAE5BK,gBAAQL,QAAQc,OAAOd,KAAAA;AACvBK,gBAAQJ,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQe,SAAY,KAAKF,OAAO,KAAKb,GAAG;AAChFI,gBAAQH,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQc,SAAY,KAAKF,OAAO,KAAKZ,GAAG;AAChFG,gBAAQF,OAAO,KAAKA,SAAS,QAAQ,KAAKA,SAASa,SAAY,KAAKF,OAAO,KAAKX,IAAI;AACpFE,gBAAQc,OAAO;AACfd,gBAAQuC,aAAa,QAAQ,SAAA;AAC7BvC,gBAAQD,WAAWW,QAAQ,KAAKX,QAAQ;AAExCyC,4BAAoB,MAAM,YAAY9B,QAAQ,KAAKX,QAAQ,CAAA;AAC3D,aAAK0C,eAAc;MACrB;MAGAP,iBAAiBJ,OAAcY,QAAwC;AACrE,YAAI,CAACA,QAAQ;AACX;QACF;AAEA,cAAMC,eAAeC,aAAaF,OAAO/C,KAAK;AAC9C,aAAKA,QAAQgD;AACb,aAAKF,eAAc;AAEnB,YAAI,KAAKxC,cAAc;AACrB,eAAKA,aAAaN,QAAQgD,iBAAiB,OAAO,KAAKlC,OAAOkC,YAAAA;QAChE;AAEAE,QAAAA,sBAAqB,MAAM,SAAS;UAAElD,OAAO,KAAKA;UAAOmC;QAAM,CAAA;MACjE;MAGAK,kBAAkBL,OAAcY,QAAwC;AACtE,YAAIA,QAAQ;AACV,gBAAMC,eAAeC,aAAaF,OAAO/C,KAAK;AAC9C,eAAKA,QAAQgD;AACb,eAAKF,eAAc;AAEnB,cAAI,KAAKxC,cAAc;AACrB,iBAAKA,aAAaN,QAAQgD,iBAAiB,OAAO,KAAKlC,OAAOkC,YAAAA;UAChE;QACF;AAEAE,QAAAA,sBAAqB,MAAM,UAAU;UAAElD,OAAO,KAAKA;UAAOmC;QAAM,CAAA;MAClE;MAMAM,iBAAiBN,OAAsD;AACrE,cAAMgB,WAAWhB,MAAME,QAAQrC,SAAS;AACxC,cAAMgD,eAAeC,aAAaE,QAAAA;AAClC,aAAKnD,QAAQgD;AACb,aAAKF,eAAc;AAEnB,YAAI,KAAKzC,SAAS;AAChB,eAAKA,QAAQL,QAAQc,OAAOkC,gBAAgB,CAAA;QAC9C;AAEAE,QAAAA,sBAAqB,MAAM,SAAS;UAAElD,OAAO,KAAKA;UAAOmC,OAAOA,MAAME,QAAQF,SAASA;QAAM,CAAA;MAC/F;MAMAO,kBAAkBP,OAAsD;AACtE,cAAMgB,WAAWhB,MAAME,QAAQrC,SAAS;AACxC,cAAMgD,eAAeC,aAAaE,QAAAA;AAClC,aAAKnD,QAAQgD;AACb,aAAKF,eAAc;AAEnB,YAAI,KAAKzC,SAAS;AAChB,eAAKA,QAAQL,QAAQc,OAAOkC,gBAAgB,CAAA;QAC9C;AAEAE,QAAAA,sBAAqB,MAAM,UAAU;UAAElD,OAAO,KAAKA;UAAOmC,OAAOA,MAAME,QAAQF,SAASA;QAAM,CAAA;MAChG;MAEAW,iBAAuB;AACrB,YAAI,CAAC,KAAKzC,SAAS;AACjB;QACF;AAGA,cAAML,QAAQoB,OAAO,KAAKpB,KAAK,KAAK;AACpC,cAAMC,MAAMmB,OAAO,KAAKnB,GAAG,KAAK;AAChC,cAAMC,MAAMkB,OAAO,KAAKlB,GAAG,KAAK;AAChC,cAAMkD,UAAUlD,QAAQD,MAAM,KAAMD,QAAQC,QAAQC,MAAMD,OAAQ;AAClE,aAAKI,QAAQgD,MAAMC,YAAY,cAAc,GAAGC,KAAKrD,IAAI,GAAGqD,KAAKtD,IAAI,KAAKmD,OAAAA,CAAAA,CAAAA,GAAY;MACxF;;;;;AAzHK,cAAA,GAAA,IAAA,GAAA,KAIIpD,uBAAKwD,aAAA,IAAA,GAALxD,cAAAA,IAAAA,IAAAA,KAGAC,oBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,oBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAGAC,6BAAAA,mBAAAA,IAAAA;;IAoGX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IClQAmD,0CA6G2BC,gBAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAShBC,eAGAC,mBAAAA,cAzFLC,mBAmBAC,wBA0DOC;;;;AA7Gb,IAAAN,oBAA0C;AAE1C,IAAAO;AAEA;AACA;AACA;AACA;AAyBA,IAAMH,oBAAmB,CAACI,YAAAA;AACxB,UAAI,OAAOA,QAAQN,UAAU,YAAY,OAAOM,QAAQN,UAAU,UAAU;AAC1E,eAAOM,QAAQN;MACjB;AAEA,UAAI,OAAOM,QAAQC,YAAY,WAAW;AACxC,eAAOD,QAAQC;MACjB;AAEA,UAAI,kBAAkBD,SAAS;AAC7B,cAAME,OAAQF,QAAoBG,aAAa,OAAA;AAC/C,YAAID,SAAS,MAAM;AACjB,iBAAOA;QACT;MACF;AAEA,aAAOF,QAAQI,aAAaC,KAAAA,KAAU;IACxC;AAEA,IAAMR,iBAAiB,CAACG,YAAAA;AACtB,UAAI,OAAOA,QAAQM,SAAS,YAAYN,QAAQM,MAAM;AACpD,eAAON,QAAQM;MACjB;AACA,aAAON,QAAQG,eAAe,MAAA,KAAW;IAC3C;cAqCCI,UAAU;MACTC,KAAK;MACLC,YAAY;MACZC,QAAQ;;;;;;;;;;;;IAYV,CAAA,GAAAC,UASGC,KAAoB;MAAEC,SAAS;IAAK,CAAA,GAAAC,UAGpCC,MAAuB,MAAA,GAAAC,UAoGvBC,OAA+C,SAAS;MAAEC,QAAQ,CAACC,SAASA;IAAK,CAAA,GAAAC,UAKjFH,OAA+C,UAAU;MAAEC,QAAQ,CAACC,SAASA;IAAK,CAAA,GAAAE,UAKlFJ,OAA+CK,sBAAsB;MAAEJ,QAAQ,CAACC,SAASA;IAAK,CAAA;AAzH1F,IAAMrB,QAAN,eAAoBL,iBAAAA,aAAAA;;eAShBC,eAGAC,mBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,QAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAHAD;;;;;YAGAC;;;;;YAoGT4B;;;;;YAKAC;;;;;YAKAC;;;;WA1HyBhC,cAAAA;;MAGzB;MACA;MACA;MACA;MAGSC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,cAAAA;oBAAAA;;UAAAA,YAAAA,IAAAA;aAAAA,4BAAW;;;;;MAKpB,IAAI+B,QAA2C;AAC7C,eAAO;UAAE,GAAG,KAAK;QAAO;MAC1B;;;;;;MAOAC,IAAIrB,MAAuB;AACzB,eAAO,KAAK,OAAOA,IAAAA;MACrB;;;;;;MAOAsB,IAAItB,MAAcZ,OAAsB;AACtC,cAAMmC,UAAU,KAAK,UAAUF,IAAIrB,IAAAA;AACnC,YAAIuB,SAAS;AAEX,cAAI,WAAWA,SAAS;AACrBA,oBAA+BnC,QAAQA;UAC1C,WAAW,OAAOA,UAAU,aAAa,aAAamC,SAAS;AAC5DA,oBAAiC5B,UAAUP;UAC9C;QACF;AAEA,aAAK,aAAaY,MAAMZ,OAAO,IAAIoC,MAAM,cAAA,CAAA;MAC3C;MAUAC,UAAUC,gBAA8CC,UAAmD;AACzG,YAAI3B;AACJ,YAAI4B;AAEJ,YAAI,OAAOF,mBAAmB,YAAY;AACxC1B,iBAAO;AACP4B,eAAKF;QACP,OAAO;AACL1B,iBAAO0B;AACP,cAAI,CAACC,UAAU;AACb,kBAAM,IAAIE,MAAM,4DAAA;UAClB;AACAD,eAAKD;QACP;AAEA,YAAI,CAAC,KAAK,aAAaG,IAAI9B,IAAAA,GAAO;AAChC,eAAK,aAAasB,IAAItB,MAAM,oBAAI+B,IAAAA,CAAAA;QAClC;AACA,aAAK,aAAaV,IAAIrB,IAAAA,GAAOgC,IAAIJ,EAAAA;AAEjC,eAAO;UACLK,aAAa,MAAA;AACX,iBAAK,aAAaZ,IAAIrB,IAAAA,GAAOkC,OAAON,EAAAA;UACtC;QACF;MACF;;;;MAKAO,QAAc;AACZ,mBAAW,CAACnC,MAAMZ,KAAAA,KAAUgD,OAAOC,QAAQ,KAAK,aAAa,GAAG;AAC9D,eAAKf,IAAItB,MAAMZ,KAAAA;QACjB;MACF;MAEAkD,oBAA0B;AACxB,aAAK,QAAO;AACZ,aAAKjD,aAAakD,iBAAiB,cAAc,KAAK,iBAAiB;MACzE;MAEAC,uBAA6B;AAC3B,aAAK,QAAO;AACZ,aAAKnD,aAAaoD,oBAAoB,cAAc,KAAK,iBAAiB;MAC5E;MAEAC,SAAyB;AACvB,eAAOC;;;;;MAKT;MAGA1B,oBAAoB2B,OAA8C;AAChE,aAAK,oBAAoBA,KAAAA;MAC3B;MAGA1B,qBAAqB0B,OAA8C;AACjE,aAAK,oBAAoBA,KAAAA;MAC3B;MAGAzB,oBAAoByB,OAA8C;AAChE,aAAK,oBAAoBA,KAAAA;MAC3B;MAEA,oBAAoBA,OAA8C;AAChE,YAAI,YAAYA,SAASA,MAAMC,QAAQ7C,MAAM;AAC3C,eAAK,aAAa4C,MAAMC,OAAO7C,MAAM4C,MAAMC,OAAOzD,OAAOwD,KAAAA;AACzD;QACF;AAEA,YAAI,EAAEA,MAAMhC,kBAAkBkC,UAAU;AACtC;QACF;AAEA,cAAMvB,UAAUqB,MAAMhC;AACtB,cAAMZ,OAAOT,eAAegC,OAAAA;AAE5B,YAAI,CAACvB,QAAQ,CAAC,KAAK,UAAU8B,IAAI9B,IAAAA,GAAO;AACtC;QACF;AAEA,cAAMZ,QAAQE,kBAAiBiC,OAAAA;AAC/B,aAAK,aAAavB,MAAMZ,OAAOwD,KAAAA;MACjC;MAEA;MAKA,UAAO;AACL,cAAMG,OAAO,KAAK1D;AAClB,YAAI,CAAC0D,MAAM;AACT;QACF;AAEA,cAAMC,eAAe,CAACC,OAAAA;AACpB,gBAAMC,WAA6B,CAAA;AACnC,gBAAMlD,OAAOT,eAAe0D,EAAAA;AAE5B,cAAIjD,MAAM;AACRkD,qBAASC,KAAKF,EAAAA;UAChB;AAEA,cAAIA,GAAGG,YAAY;AACjB,uBAAWC,SAASJ,GAAGG,WAAWE,iBAAiB,QAAA,GAAW;AAC5D,oBAAMC,YAAYhE,eAAe8D,KAAAA;AACjC,kBAAIE,WAAW;AACbL,yBAASC,KAAKE,KAAAA;cAChB;YACF;UACF;AAEA,qBAAWA,SAASJ,GAAGK,iBAAiB,QAAA,GAAW;AACjD,kBAAMC,YAAYhE,eAAe8D,KAAAA;AACjC,gBAAIE,WAAW;AACbL,uBAASC,KAAKE,KAAAA;YAChB;UACF;AAEA,iBAAOH;QACT;AAEA,aAAK,UAAUM,MAAK;AACpB,aAAK,SAAS,CAAC;AAEf,cAAMC,WAAWV,KAAKW,iBAAiB;UAAEC,SAAS;QAAK,CAAA;AAEvD,mBAAWjE,WAAW+D,UAAU;AAC9B,gBAAMP,WAAWF,aAAatD,OAAAA;AAC9B,qBAAW6B,WAAW2B,UAAU;AAC9B,kBAAMlD,OAAOT,eAAegC,OAAAA;AAC5B,gBAAIvB,MAAM;AACR,mBAAK,UAAUsB,IAAItB,MAAMuB,OAAAA;AACzB,oBAAMnC,QAAQE,kBAAiBiC,OAAAA;AAC/B,mBAAK,OAAOvB,IAAAA,IAAQZ;AACpB,mBAAK,cAAcY,IAAAA,IAAQZ;YAC7B;UACF;QACF;AAEA,cAAMwE,QAAQ,KAAK,UAAUC,OAAM,EAAGC,KAAI,EAAG1E;AAC7C,YAAIwE,OAAO;AACT,gBAAM5D,OAAOT,eAAeqE,KAAAA;AAC5B,eAAKxE,QAAQY,QAAQ,KAAK,OAAOA,IAAAA,KAAS,OAAO+D,OAAO,KAAK,OAAO/D,IAAAA,CAAK,IAAI;QAC/E;MACF;MAEA,UAAO;AACL,aAAK,UAAUwD,MAAK;MACtB;MAEA,aAAaxD,MAAcZ,OAAgBwD,OAAY;AACrD,cAAMoB,YAAY,KAAK,OAAOhE,IAAAA;AAC9B,YAAIgE,cAAc5E,OAAO;AACvB;QACF;AAEA,aAAK,OAAOY,IAAAA,IAAQZ;AAEpB,aAAKA,QAAQ2E,OAAO3E,KAAAA;AAEpB,mBAAWwC,MAAM,KAAK,aAAaP,IAAIrB,IAAAA,KAAS,CAAA,GAAI;AAClD4B,aAAGxC,OAAOY,IAAAA;QACZ;AACA,mBAAW4B,MAAM,KAAK,aAAaP,IAAI,GAAA,KAAQ,CAAA,GAAI;AACjDO,aAAGxC,OAAOY,IAAAA;QACZ;AAEAiE,QAAAA,sBAAqB,MAAM,gBAAgB;UACzCjE;UACAZ;UACAgC,OAAO,KAAKA;UACZwB;QACF,CAAA;MACF;;;;;AA7OK,cAAA,GAAA,IAAA,GAAA,KAGL,aAASsB,aAAA,IAAA,GAAgC,oBAAIC,IAAAA,IAAAA,KAC7C,SAAkC,CAAC,GAAA,KACnC,gBAAyC,CAAC,GAAA,KAC1C,eAA4D,oBAAIA,IAAAA,GAAAA,KAGvD/E,sBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,4BAAAA,kBAAAA,IAAAA,GAAAA,KAuIT,oBAAoB,MAAA;AAClB,eAAK,QAAO;AACZ,eAAK,QAAO;QACd;;IAwFF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC3VA+E,0CA0H4BC,gBAAAA,SAAAA,SAAAA,SAAAA,SAGjBC,gBAGAC,kBAGAC,gBAAAA,uBATEC;;;;AA1Hb,IAAAL,oBAAqB;AAErB,IAAAM;AAEA;AACA;AACA;AACA;cAECC,UAAU;MACTC,KAAK;MACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0FRC,WAAAA;AACE,eAAOC;;+FAEoF,KAAKC,QAAQ;;;;;;;0BAOlF,KAAKA,QAAQ;;;;;;;;;MASrC;IACF,CAAA,GAAAC,UAGGC,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAC,UAG7CJ,KAAc;MAAEC,MAAMC;MAASC,SAAS;IAAK,CAAA,GAAAE,UAG7CC,MAAyB,QAAA,GAAAC,UAgBzBC,OAA8C,SAAS;MAAEC,UAAU;IAAS,CAAA;AAxBxE,IAAMlB,SAAN,eAAqBJ,iBAAAA,aAAAA;;eAGjBC,gBAGAC,kBAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,SAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YANAF;;;;;YAGAC;;;;;YAGAC;;;;;YAgBToB;;;;WAzB0BvB,cAAAA;;MAGjBC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAGPC;UAAAA,WAAAA;oBAAAA;;UAAAA,SAAAA,IAAAA;aAAAA,yBAAQ;;MAGRC;UAAAA,UAAAA;oBAAAA;;UAAAA,QAAAA,IAAAA;aAAAA,wBAAO;;MAIhBqB,cAAoB;AAClB,YAAI,CAAC,KAAKrB,SAAS;AACjB;QACF;AAEA,cAAMA,UAAU,KAAKA;AACrBA,gBAAQsB,aAAa,gBAAgB,KAAKxB,UAAU,SAAS,OAAA;AAC7DE,gBAAQD,WAAWa,QAAQ,KAAKb,QAAQ;AACxCwB,4BAAoB,MAAM,YAAYX,QAAQ,KAAKb,QAAQ,CAAA;MAC7D;MAGAqB,YAAYI,OAAyB;AACnC,YAAI,KAAKzB,UAAU;AACjByB,gBAAMC,eAAc;AACpBD,gBAAME,gBAAe;AAErB;QACF;AAEA,aAAK5B,UAAU,CAAC,KAAKA;AAErB6B,QAAAA,sBAAqB,MAAM,UAAU;UAAEC,OAAO,KAAK9B;UAAS0B;QAAM,CAAA;MACpE;;;;;AApCK,cAAA,GAAA,IAAA,GAAA,KAGI1B,yBAAO+B,aAAA,IAAA,GAAP/B,eAAAA,IAAAA,IAAAA,KAGAC,yBAAAA,iBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAETQ,WAAmB,UAAUsB,OAAOC,WAAU,CAAA;;IA0BhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC5JAC,0CAsC6BC,gBAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAAAA,SAelBC,aAGAC,aAGAC,kBAGAC,sBAGAC,uBAAAA,wBA3BEC;;;;AAxCb;AAEA,IAAAP,oBAA0C;AAE1C;AACA;AACA;AACA;cAECQ,UAAU;MACTC,KAAK;MACLC,YAAY;MACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BV,CAAA,GAAAC,UASGC,KAAc;MACbC,MAAMC;MACNC,SAAS;MACTC,SAASC,MAAMC,UAAQ;AACpB,aAAiBC,kBAAkBF,MAAMC,QAAAA;MAC5C;IACF,CAAA,GAAAE,UAGCR,KAAa;MAAEC,MAAMQ;MAAQN,SAAS;MAAMO,cAAc;IAAI,CAAA,GAAAC,UAG9DX,KAAgB;MAAEG,SAAS;MAAMO,cAAc;IAAa,CAAA,GAAAE,UAG5DC,MAAmB,kBAAA,GAAAC,UAGnBD,MAAmB,wBAAA,GAAAE,UA6DnBC,aAAsB;MACrBC,SAAS,CAACC,SAASA,KAAKzB;MACxB0B,UAAU,CAACD,SAAS;QAACA,KAAK1B;;MAC1B4B,UAAU,CAACF,SAAS,CAACA,KAAK7B;IAC5B,CAAA;AA3FK,IAAMK,UAAN,eAAsBN,iBAAAA,aAAAA;;eAelBC,aAGAC,aAGAC,kBAGAC,sBAGAC,uBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,UAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;YAZAJ;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAGAC;;;;;YAiET4B;;;;WA5F2BjC,cAAAA;;MAC3B;MAEA;MACA;MAWSC;UAAAA,OAAAA;oBAAAA;;UAAAA,KAAAA,IAAAA;aAAAA,qBAAI;;MAGJC;UAAAA,QAAAA;oBAAAA;;UAAAA,MAAAA,IAAAA;aAAAA,sBAAK;;MAGLC;UAAAA,YAAAA;oBAAAA;;UAAAA,UAAAA,IAAAA;aAAAA,0BAAS;;MAGTC;UAAAA,iBAAAA;oBAAAA;;UAAAA,eAAAA,IAAAA;aAAAA,+BAAc;;MAGdC;UAAAA,iBAAAA;oBAAAA;;UAAAA,eAAAA,IAAAA;aAAAA,+BAAc;;MAEvB6B,uBAA6B;AAC3B,aAAK,YAAW;AAChB,YAAI,KAAK,UAAU;AACjB,eAAK,SAASC,oBAAoB,cAAc,KAAK,YAAY;AACjE,eAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,eAAK,SAASA,oBAAoB,WAAW,KAAK,cAAc;AAChE,eAAK,SAASA,oBAAoB,YAAY,KAAK,eAAe;AAClE,eAAK,WAAW;QAClB;AAEA,YAAI,KAAK,UAAU;AACjB,eAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,eAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,eAAK,WAAW;QAClB;MACF;MAEAC,cAAoB;AAClB,aAAK,iBAAgB;AACrB,cAAMP,UAAU,KAAKxB;AACrB,cAAMgC,YAAY,KAAKpC;AAEvB,YAAI4B,SAAS;AACXA,kBAAQS,aAAa,QAAQ,SAAA;AAC7BT,kBAAQS,aAAa,eAAeD,YAAY,UAAU,MAAA;AAC1DR,kBAAQU,QAAQtC,OAAOoC,YAAY,SAAS;AAC5CR,kBAAQW,SAAS,CAACH;QACpB;MACF;MAEAI,SAAyB;AACvB,eAAOC;iCACsB,KAAKvC,SAAS,UAAU,KAAKF,IAAI;;;;;sBAK5C,KAAKA,OAAO,SAAS,OAAA;oBACvB,CAAC,KAAKA,IAAI;;;;;;MAM5B;MAEAkB,kBAAkBF,MAAeC,UAAyB;AACxD,YAAID,SAASC,UAAU;AACrB;QACF;AAEA,YAAI,CAACD,MAAM;AACT,eAAK,YAAW;QAClB;AAEA0B,kCAA0B,IAAI;MAChC;MAOAV,uBAA6B;AAC3B,YAAI,CAAC,KAAKhC,MAAM;AACd;QACF;AAEA,aAAK,YAAW;AAChB,aAAKA,OAAO;MACd;MAEA,cAAW;AACT,YAAI,KAAK,gBAAgB,MAAM;AAC7B2C,iBAAOC,aAAa,KAAK,WAAW;AACpC,eAAK,cAAc;QACrB;MACF;MAEA,YAAYC,UAAoB;AAC9B,aAAK,YAAW;AAChB,cAAMC,OAAO,KAAK7C,SAAS;AAE3B,YAAI6C,OAAO,GAAG;AACZ,eAAK,cAAcH,OAAOI,WAAWF,UAAUC,IAAAA;QACjD,OAAO;AACLD,mBAAAA;QACF;MACF;MAEA;MAMA;MAKA;MAKA;MAKA,mBAAgB;AACd,cAAMG,UAAU,KAAK7C;AACrB,cAAMyB,UAAU,KAAKxB,kBAAkB;AAEvC,YAAI4C,YAAY,KAAK,UAAU;AAC7B,cAAI,KAAK,UAAU;AACjB,iBAAK,SAASd,oBAAoB,cAAc,KAAK,YAAY;AACjE,iBAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,iBAAK,SAASA,oBAAoB,WAAW,KAAK,cAAc;AAChE,iBAAK,SAASA,oBAAoB,YAAY,KAAK,eAAe;UACpE;AACA,cAAIc,SAAS;AACXA,oBAAQC,iBAAiB,cAAc,KAAK,YAAY;AACxDD,oBAAQC,iBAAiB,cAAc,KAAK,YAAY;AACxDD,oBAAQC,iBAAiB,WAAW,KAAK,cAAc;AACvDD,oBAAQC,iBAAiB,YAAY,KAAK,eAAe;UAC3D;AACA,eAAK,WAAWD;QAClB;AAEA,YAAIpB,YAAY,KAAK,UAAU;AAC7B,cAAI,KAAK,UAAU;AACjB,iBAAK,SAASM,oBAAoB,cAAc,KAAK,YAAY;AACjE,iBAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;UACnE;AACA,cAAIN,SAAS;AACXA,oBAAQqB,iBAAiB,cAAc,KAAK,YAAY;AACxDrB,oBAAQqB,iBAAiB,cAAc,KAAK,YAAY;UAC1D;AACA,eAAK,WAAWrB,WAAW;QAC7B;MACF;;;;;AA3KK,cAAA,GAAA,IAAA,GAAA,KACL,eAAWsB,aAAA,IAAA,GAAkB,OAAA,KAE7B,WAA+B,MAAA,KAC/B,WAA+B,MAAA,KAWtBlD,qBAAAA,YAAAA,MAAO,KAAA,GAAA,KAGPC,sBAAAA,YAAAA,MAAQ,GAAA,GAAA,KAGRC,0BAAAA,iBAAAA,MAAuB,YAAA,GAAA,KAGvBC,+BAAAA,qBAAAA,IAAAA,GAAAA,KAGAC,+BAAAA,sBAAAA,IAAAA,GAAAA,KA4FT,eAAe,MAAA;AACb,eAAK,YAAY,MAAA;AACf,iBAAKJ,OAAO;UACd,CAAA;QACF,GAAA,KAEA,eAAe,MAAA;AACb,eAAK,YAAW;AAChB,eAAKA,OAAO;QACd,GAAA,KAEA,iBAAiB,MAAA;AACf,eAAK,YAAW;AAChB,eAAKA,OAAO;QACd,GAAA,KAEA,kBAAkB,MAAA;AAChB,eAAK,YAAW;AAChB,eAAKA,OAAO;QACd;;IAkCF;;;;;ACrNA;;;;;;;;;;;;;AAcO,SAASmD,YAAYC,IAAYC,KAAaC,OAAc;AACjE,MAAI,CAACC,UAAAA,GAAa;AAChB,WAAO;EACT;AAEA,QAAMC,SAASC,kBAAkBL;AAGjC,MAAIM,QAAQC,SAASC,eAAeJ,MAAAA;AACpC,MAAIE,OAAO;AAET,QAAIA,MAAMG,gBAAgBR,KAAK;AAC7BK,YAAMG,cAAcR;IACtB;AACA,WAAOK;EACT;AAGAA,UAAQC,SAASG,cAAc,OAAA;AAC/BJ,QAAMN,KAAKI;AACXE,QAAMG,cAAcR;AAEpB,MAAIC,OAAO;AACTI,UAAMJ,QAAQA;EAChB;AAEAK,WAASI,KAAKC,YAAYN,KAAAA;AAC1B,SAAOA;AACT;AAKO,SAASO,YAAYb,IAAU;AACpC,MAAI,CAACG,UAAAA,GAAa;AAChB;EACF;AAEA,QAAMC,SAASC,kBAAkBL;AACjC,QAAMM,QAAQC,SAASC,eAAeJ,MAAAA;AACtC,MAAIE,OAAO;AACTA,UAAMQ,OAAM;EACd;AACF;AAKO,SAASC,SAASf,IAAU;AACjC,MAAI,CAACG,UAAAA,GAAa;AAChB,WAAO;EACT;AAEA,QAAMC,SAASC,kBAAkBL;AACjC,SAAOO,SAASC,eAAeJ,MAAAA,MAAY;AAC7C;AAuJO,SAASY,aAAaC,QAAmB;AAC9C,UAAQA,QAAAA;IACN,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOC;IACT;AACE,aAAO;EACX;AACF;AAKO,SAASC,aAAaJ,QAAqBf,OAAc;AAC9D,QAAMD,MAAMe,aAAaC,MAAAA;AACzB,SAAOlB,YAAYkB,QAAQhB,KAAKC,KAAAA;AAClC;AAKO,SAASoB,aAAaL,QAAmB;AAC9CJ,cAAYI,MAAAA;AACd;AAtPA,IAIMZ,iBAKOF,WAqEAe,WAmHAC,UAoBAC;AArNb;;;AAIA,IAAMf,kBAAkB;AAKjB,IAAMF,YAAY,MAAe,OAAOI,aAAa,eAAe,OAAOgB,WAAW;AAqEtF,IAAML,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8GvBM,KAAI;AAKC,IAAML,WAAW;;;;;;;;;;;;;;;EAetBK,KAAI;AAKC,IAAMJ,WAAW,GAAGF,SAAAA;;EAAgBC,QAAAA;;;;;ACrN3C;;;;;;AA+CA,SAASM,mBAAmBC,QAAgBC,MAAa;AACvD,QAAMC,gBAAgBC,mBAAmBH,MAAAA,EAAQI,QAAQ,QAAQ,GAAA;AACjE,QAAMC,SAASJ,OAAO,IAAIA,IAAAA,KAAS;AACnC,SAAO,4CAA4CC,aAAAA,GAAgBG,MAAAA;AACrE;AAKA,SAASC,mBAAAA;AACP,MAAI,CAACC,UAAAA,GAAa;AAChB;EACF;AAGA,MAAIC,SAASC,eAAeC,aAAAA,GAAgB;AAC1C;EACF;AAEA,QAAMC,OAAOH,SAASG;AAGtB,QAAMC,cAAcJ,SAASK,cAAc,MAAA;AAC3CD,cAAYE,KAAKJ;AACjBE,cAAYG,MAAM;AAClBH,cAAYI,OAAO;AACnBL,OAAKM,YAAYL,WAAAA;AAGjB,QAAMM,cAAcV,SAASK,cAAc,MAAA;AAC3CK,cAAYH,MAAM;AAClBG,cAAYF,OAAO;AACnBE,cAAYC,cAAc;AAC1BR,OAAKM,YAAYC,WAAAA;AACnB;AAKA,SAASE,eAAeN,IAAYO,KAAW;AAC7C,MAAI,CAACd,UAAAA,GAAa;AAChB,WAAO;EACT;AAEA,QAAMe,SAASC,sBAAsBT;AAGrC,MAAIU,OAAOhB,SAASC,eAAea,MAAAA;AACnC,MAAIE,MAAM;AACR,WAAOA;EACT;AAEAA,SAAOhB,SAASK,cAAc,MAAA;AAC9BW,OAAKV,KAAKQ;AACVE,OAAKT,MAAM;AACXS,OAAKR,OAAOK;AAEZb,WAASG,KAAKM,YAAYO,IAAAA;AAC1B,SAAOA;AACT;AAKA,SAASC,eAAeX,IAAU;AAChC,MAAI,CAACP,UAAAA,GAAa;AAChB;EACF;AAEA,QAAMe,SAASC,sBAAsBT;AACrC,QAAMU,OAAOhB,SAASC,eAAea,MAAAA;AACrC,MAAIE,MAAM;AACRA,SAAKE,OAAM;EACb;AACF;AAKO,SAASC,YAAYC,QAAwCC,aAAa,MAAI;AACnF,MAAID,WAAW,OAAO;AACpB;EACF;AAEA,QAAME,QAAQF,WAAW,YAAYG,gBAAgBH;AAErD,MAAIC,YAAY;AAEd,UAAMG,iBAAiBC,OAAOC,OAAOJ,KAAAA,EAAOK,KAAK,CAACC,MAAMA,EAAEC,WAAW,QAAA;AACrE,QAAIL,gBAAgB;AAClB1B,uBAAAA;IACF;EACF;AAEA,aAAW,CAACgC,MAAMD,MAAAA,KAAWJ,OAAOM,QAAQT,KAAAA,GAAQ;AAClD,UAAMhB,KAAKwB,KAAKE,YAAW,EAAGpC,QAAQ,QAAQ,GAAA;AAE9C,QAAIiC,OAAOA,WAAW,YAAYA,OAAOrC,QAAQ;AAC/C,YAAMqB,MAAMtB,mBAAmBsC,OAAOrC,QAAQqC,OAAOpC,IAAI;AACzDmB,qBAAeN,IAAIO,GAAAA;IACrB,WAAWgB,OAAOA,WAAW,SAASA,OAAOhB,KAAK;AAChDD,qBAAeN,IAAIuB,OAAOhB,GAAG;IAC/B;EACF;AACF;AAKO,SAASoB,YAAYb,QAA8B;AACxD,QAAME,QAAQF,WAAW,YAAYG,gBAAgBH;AAErD,aAAWU,QAAQL,OAAOS,KAAKZ,KAAAA,GAAQ;AACrC,UAAMhB,KAAKwB,KAAKE,YAAW,EAAGpC,QAAQ,QAAQ,GAAA;AAC9CqB,mBAAeX,EAAAA;EACjB;AACF;AAnKA,IAMMS,qBACAb,eAwBOqB;AA/Bb;;;AAIA;AAEA,IAAMR,sBAAsB;AAC5B,IAAMb,gBAAgB;AAwBf,IAAMqB,gBAA4B;MACvC,mBAAmB;QACjBM,QAAQ;QACRrC,QAAQ;QACRC,MAAM;MACR;MACA,cAAc;QACZoC,QAAQ;QACRrC,QAAQ;QACRC,MAAM;MACR;IACF;;;;;AC1CA;;;;AAeA;AACA;AACA;AACA,IAAA0C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAAC;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;;;;ACxCA;;;;;;;;;;;AAoKA,eAAsBC,eAAeC,MAA0B;AAC7D,QAAMC,WAAWD,KAAKE,IAAI,CAACC,QAAAA;AACzB,UAAMC,SAASC,kBAAkBF,GAAAA;AACjC,QAAIC,QAAQ;AACV,aAAOA,OAAAA;IACT;AACA,WAAOE,QAAQC,QAAO;EACxB,CAAA;AACA,QAAMD,QAAQE,IAAIP,QAAAA;AACpB;AAKA,eAAsBQ,oBAAAA;AACpB,QAAM;AACR;AAKO,SAASC,YAAYC,SAAqE;AAC/F,QAAM,EAAEC,SAASC,QAAO,IAAKF;AAG7B,MAAIC,WAAWA,QAAQE,SAAS,GAAG;AACjC,WAAOF,QAAQG,OAAO,CAACZ,QAA0Ba,iBAAiBC,SAASd,GAAAA,CAAAA;EAC7E;AAGA,MAAIH,OAAoB;OAAIgB;;AAE5B,MAAIH,WAAWA,QAAQC,SAAS,GAAG;AACjC,UAAMI,aAAa,IAAIC,IAAIN,OAAAA;AAC3Bb,WAAOA,KAAKe,OAAO,CAACZ,QAAQ,CAACe,WAAWE,IAAIjB,GAAAA,CAAAA;EAC9C;AAEA,SAAOH;AACT;AA1MA,IAQaqB,sBAyDAC,wBAKAN,kBAoBAO,uBAaAlB;AAvGb;;;AAQO,IAAMgB,uBAAuB;;MAElC;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MAGA;MACA;MACA;MACA;MACA;;MAGA;MACA;MACA;;MAGA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;AAMK,IAAMC,yBAAyB;MAAC;MAAc;;AAK9C,IAAMN,mBAAmB;SAAIK;SAAyBC;;AAoBtD,IAAMC,wBAAwB;MACnC;MACA;MACA;MACA;MACA;MACA;;AAOK,IAAMlB,oBAA+D;;MAE1E,eAAe,MAAM;MACrB,iBAAiB,MAAM;MACvB,oBAAoB,MAAM;MAC1B,qBAAqB,MAAM;MAC3B,iBAAiB,MAAM;MACvB,cAAc,MAAM;MACpB,qBAAqB,MAAM;MAC3B,eAAe,MAAM;MACrB,oBAAoB,MAAM;MAC1B,oBAAoB,MAAM;MAC1B,eAAe,MAAM;MACrB,eAAe,MAAM;;MAGrB,cAAc,MAAM;MACpB,cAAc,MAAM;MACpB,gBAAgB,MAAM;MACtB,cAAc,MAAM;MACpB,gBAAgB,MAAM;;MAGtB,oBAAoB,MAAM;MAC1B,gBAAgB,MAAM;MACtB,oBAAoB,MAAM;;MAG1B,wBAAwB,MAAM;MAC9B,2BAA2B,MAAM;MACjC,sBAAsB,MAAM;MAC5B,6BAA6B,MAAM;MACnC,oBAAoB,MAAM;MAC1B,0BAA0B,MAAM;MAChC,+BAA+B,MAAM;MACrC,2BAA2B,MAAM;MACjC,2BAA2B,MAAM;MACjC,mBAAmB,MAAM;MACzB,qBAAqB,MAAM;MAC3B,+BAA+B,MAAM;MACrC,gCAAgC,MAAM;MACtC,mBAAmB,MAAM;MACzB,kBAAkB,MAAM;MACxB,kBAAkB,MAAM;MACxB,kBAAkB,MAAM;MACxB,qBAAqB,MAAM;MAC3B,qBAAqB,MAAM;MAC3B,mBAAmB,MAAM;MACzB,oBAAoB,MAAM;MAC1B,kBAAkB,MAAM;MACxB,sBAAsB,MAAM;MAC5B,kBAAkB,MAAM;;MAGxB,cAAc,MAAM;MACpB,aAAa,MAAM;IACrB;;;;;AC/JA;;;;AAoCO,SAASmB,iBAAiBC,SAAyB,CAAC,GAAC;AAC1D,MAAI,CAACC,UAAAA,GAAa;AAChB,WAAO;MACLC,SAAS,MAAA;MAAO;MAChBC,MAAM,YAAA;MAAa;IACrB;EACF;AAEA,QAAM,EAAEC,OAAOC,UAAUC,SAASC,SAASC,QAAO,IAAKR;AAGvD,MAAIS,YAAY,oBAAIC,IAAe;OAAIC;GAAiB;AAExD,MAAIL,WAAWA,QAAQM,SAAS,GAAG;AACjCH,gBAAY,IAAIC,IAAIJ,QAAQO,OAAO,CAACC,QAA0BH,iBAAiBI,SAASD,GAAAA,CAAAA,CAAAA;EAC1F;AAEA,MAAIP,WAAWA,QAAQK,SAAS,GAAG;AACjC,eAAWE,OAAOP,SAAS;AACzBE,gBAAUO,OAAOF,GAAAA;IACnB;EACF;AAGA,QAAMG,SAAS,oBAAIP,IAAAA;AAGnB,QAAMP,OAAO,OAAOW,QAAAA;AAClB,QAAIG,OAAOC,IAAIJ,GAAAA,GAAM;AACnB;IACF;AAEA,UAAMK,SAASC,kBAAkBN,GAAAA;AACjC,QAAIK,QAAQ;AACVF,aAAOI,IAAIP,GAAAA;AACX,YAAMK,OAAAA;IACR;EACF;AAGA,QAAMG,eAAe,CAACC,YAAAA;AACpB,UAAMC,UAAUD,QAAQC,QAAQC,YAAW;AAE3C,QAAIhB,UAAUS,IAAIM,OAAAA,KAAyB,CAACP,OAAOC,IAAIM,OAAAA,GAAU;AAC/D,WAAKrB,KAAKqB,OAAAA;IACZ;AAGA,eAAWE,SAASH,QAAQI,iBAAiB,GAAA,GAAM;AACjD,YAAMC,WAAWF,MAAMF,QAAQC,YAAW;AAC1C,UAAIhB,UAAUS,IAAIU,QAAAA,KAA0B,CAACX,OAAOC,IAAIU,QAAAA,GAAW;AACjE,aAAKzB,KAAKyB,QAAAA;MACZ;IACF;EACF;AAGA,QAAMC,WAAW,IAAIC,iBAAiB,CAACC,cAAAA;AACrC,eAAWC,YAAYD,WAAW;AAChC,iBAAWE,QAAQD,SAASE,YAAY;AACtC,YAAID,gBAAgBE,SAAS;AAC3Bb,uBAAaW,IAAAA;QACf;MACF;IACF;EACF,CAAA;AAGA,QAAMG,SAAShC,gBAAgBiC,WAAWjC,KAAKkC,kBAAkBlC;AACjEyB,WAASU,QAAQH,QAAQ;IACvBI,WAAW;IACXC,SAAS;EACX,CAAA;AAGAnB,eAAac,MAAAA;AAGb,MAAI5B,WAAWA,QAAQI,SAAS,GAAG;AACjC,eAAWE,OAAON,SAAS;AACzB,UAAIG,iBAAiBI,SAASD,GAAAA,GAAmB;AAC/C,aAAKX,KAAKW,GAAAA;MACZ;IACF;EACF;AAEA,SAAO;IACLZ,SAAS,MAAA;AACP2B,eAASa,WAAU;IACrB;IACAvC;EACF;AACF;AAhIA;;;AAIA;AACA;;;;;ACLA;;;;;;;;;mBAAAwC;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAAC;EAAA;;;;;;sBAAAC;EAAA;;cAAAC;EAAA,aAAAC;EAAA;;;;;;;;;;;;;;;;;;;;;;8BAAAC;EAAA;;;;;;;;;;;;;;;;;;;;;;;qBAAAC;EAAA;;;;;;;ACAA;AACA;;;ACDA,IAAAC,oBAAkD;AAyClD,IAAMC,cAAa,oBAAIC,IAAAA;AAEvB,IAAMC,qBAAoB,CACxBC,aAAAA;AAEA,MAAI,OAAOA,aAAa,YAAY;AAClC,WAAOA;EACT;AAEA,MAAIA,YAAY,OAAOA,aAAa,YAAY,oBAAoBA,UAAU;AAC5E,WAAO,WAAA;AACL,aAAOA;IACT;EACF;AAEA,SAAO,WAAA;AACL,WAAO;EACT;AACF;AAEA,IAAMC,eAAc,OAAOC,SACzBC,QAAQC,IACNF,KAAKG,IAAI,CAACC,QAAAA;AACR,QAAMC,SAASV,YAAWW,IAAIF,GAAAA;AAC9B,MAAIC,QAAQ;AACV,WAAOA;EACT;AAEA,QAAME,UAAUC,MAAMJ,GAAAA,EACnBK,KAAK,CAACC,aAAcA,SAASC,KAAKD,SAASE,KAAI,IAAK,EAAA,EACpDC,MAAM,MAAM,EAAA;AAEflB,EAAAA,YAAWmB,IAAIV,KAAKG,OAAAA;AACpB,SAAOA;AACT,CAAA,CAAA;AAGG,IAAMQ,aACX,CAAyDC,YACzD,CACEC,MACAC,aAAAA;AAEA,QAAM,EACJC,KACArB,UACAsB,SAAS,IACTC,YAAY,CAAA,GACZC,qBAAqB,CAAA,GACrBC,aAAa,QACbC,WAAW,KAAI,IACbR;AAEJ,MAAI,CAACG,KAAK;AACR,UAAM,IAAIM,MAAM,qCAAA;EAClB;AAEA,QAAMC,aAAa7B,mBAA4BC,QAAAA;EAE/C,MAAM6B,kBAAmBV,KAAAA;IACvB,WAAWK,qBAA+B;AACxC,YAAMM,SACJ,wBAAwBX,QAAQY,MAAMC,QAAQb,KAAKK,kBAAkB,IAChEL,KAAKK,qBACN,CAAA;AACN,YAAMS,MAAMF,MAAMC,QAAQR,kBAAAA,IAAsBA,qBAAqB,CAAA;AACrE,aAAOO,MAAMG,KAAK,oBAAIC,IAAI;WAAIL;WAAWG;OAAI,CAAA;IAC/C;IAEA;IACA;IACA;IACA;IAEA,eAAeG,MAAiB;AAC9B,YAAK,GAAIA,IAAAA,GAAAA,KALX,UAAUd,QAAAA,KACV,aAAa;WAAIC;SAAU,KAC3B,mBAAmB;AAIjB,WAAK,UAAU,KAAKc,aAAa;QAAEC,MAAMb;MAAW,CAAA;AACpD,WAAKc,aAAa,KAAK;IACzB;IAEA,IAAIC,SAA+C;AACjD,aAAO,KAAKD;IACd;IAEAE,oBAA0B;AACvBtB,WAAKuB,UAA+BD,mBAAmBE,KAAK,IAAI;AAEjE,WAAK,KAAK,YAAW,EAAGC,QAAQ,MAAA;AAC9B,aAAKC,cAAa;MACpB,CAAA;IACF;IAEAC,uBAA6B;AAC1B3B,WAAKuB,UAA+BI,sBAAsBH,KAAK,IAAI;AACpE,WAAK,mBAAmB;IAC1B;IAEAI,yBAAyBC,MAAcC,UAAyBC,UAA+B;AAC5F/B,WAAKuB,UAA+BK,0BAA0BJ,KAAK,MAAMK,MAAMC,UAAUC,QAAAA;AAE1F,UAAID,aAAaC,UAAU;AACzB,aAAKC,oBAAoBH,MAAMC,UAAUC,QAAAA;MAC3C;IACF;IAEAL,gBAAsB;AACpB,UAAI,KAAK,kBAAkB;AACzB;MACF;AAEA,WAAK,mBAAmB;AAExBO,4BAAsB,MAAA;AACpB,aAAK,mBAAmB;AACxB,aAAK,QAAO;MACd,CAAA;IACF;IAEA,MAAM,cAAW;AACf,UAAI,CAAC,KAAK,WAAWC,QAAQ;AAC3B;MACF;AAEA,YAAMC,UAAU,MAAMrD,aAAY,KAAK,UAAU;AACjD,YAAMsD,eAAe,KAAK,UAAU;QAAC,KAAK;UAAW,CAAA;AACrD,WAAK,UAAU;WAAIA;WAAiBD,QAAQE,OAAOC,OAAAA;QAAUC,KAAK,IAAA;IACpE;IAEA,UAAO;AACL,YAAMC,OAAO,KAAK;AAElB,UAAIC;AAEJ,UAAI,OAAO,KAAKC,WAAW,YAAY;AACrCD,yBAAiB,KAAKC,OAAM;MAC9B,OAAO;AACLD,yBAAiBhC,WAAWe,KAAK,MAA6B,IAAI;MACpE;AAEA,YAAMmB,gBAAgB,KAAK,UAAUC,gCAAc,KAAK,OAAO,aAAa;AAC5E,YAAMC,eAAetC,WAAWqC,wCAAsB;AAEtD,YAAME,mBAAmBF;YACrBD,aAAAA;YACAF,kBAAkB,IAAA;YAClBI,YAAAA;;AAGJ,YAAME,SAAS,MAAA;AACbL,sCAAOI,kBAAkBN,IAAAA;AACzB,aAAKQ,cAAW;MAClB;AAEA,UAAI,OAAO,KAAKC,eAAe,YAAY;AACzC,cAAMC,WAAWC,SAASC,uBAAsB;AAChD,cAAMC,UAAUF,SAASG,cAAc,KAAA;AAEvCZ,sCAAOI,kBAAkBO,OAAAA;AAEzBH,iBAASK,OAAM,GAAIF,QAAQG,UAAU;AAErC,aAAKP,WAAWF,QAAQ;UAAEG;UAAUV;QAAK,CAAA;AACzC;MACF;AAEAO,aAAAA;IACF;EACF;AAGA,MAAI,OAAOU,mBAAmB,eAAe,CAACA,eAAepE,IAAIa,GAAAA,GAAM;AACrEuD,mBAAeC,OAAOxD,KAAKQ,SAAAA;EAC7B;AAEA,SAAOA;AACT;;;ACvLF,IAAMiD,kBAAqG;EACzGC,mBAAmB,oBAAIC,QAAAA;EACvBC,sBAAsB,oBAAID,QAAAA;AAC5B;AAEA,IAAME,mBAAkB,oBAAIF,QAAAA;AAE5B,IAAMG,oBAAmB,CACvBC,UACAC,UACAC,YAAAA;AAEA,QAAMC,QAAQT,gBAAeO,QAAAA;AAC7B,MAAIG,YAAYD,MAAME,IAAIL,QAAAA;AAE1B,MAAI,CAACI,WAAW;AACdA,gBAAY,oBAAIE,IAAAA;AAChBH,UAAMI,IAAIP,UAAUI,SAAAA;AAEpB,UAAMI,WAAYR,SAA2DC,QAAAA;AAE5ED,aAA2DC,QAAAA,IAAY,YAAaQ,MAAe;AAClGL,iBAAWM,QAAQ,CAACC,aAAAA;AAClBA,iBAASC,MAAM,IAAI;MACrB,CAAA;AAEA,UAAI,OAAOJ,aAAa,YAAY;AAClC,eAAQA,SAA+CI,MAAM,MAAMH,IAAAA;MACrE;AAEA,aAAOI;IACT;EACF;AAEAT,YAAUU,IAAIZ,OAAAA;AAChB;AAEA,IAAMa,mBAAkB,CAA2Bf,UAAiBgB,YAAAA;AAClE,MAAIZ,YAAYN,iBAAgBO,IAAIL,QAAAA;AAEpC,MAAI,CAACI,WAAW;AACdA,gBAAY,oBAAIE,IAAAA;AAChBR,IAAAA,iBAAgBS,IAAIP,UAAUI,SAAAA;AAE9BL,IAAAA,kBAAiBC,UAAU,wBAAwB,WAAA;AACjD,YAAMiB,aAAanB,iBAAgBO,IAAI,IAAI;AAC3CY,kBAAYP,QAAQ,CAACQ,OAAAA;AACnB,YAAI;AACFA,aAAAA;QACF,SAASC,OAAO;AACdC,kBAAQD,MAAM,2BAA2BA,KAAAA;QAC3C;MACF,CAAA;AACArB,MAAAA,iBAAgBuB,OAAO,IAAI;IAC7B,CAAA;EACF;AAEAjB,YAAUU,IAAIE,OAAAA;AAChB;AAEA,IAAMM,iBAAgB,CACpBC,MACAC,WAAAA;AAEA,MAAI,OAAOA,WAAW,YAAY;AAChC,WAAOA,OAAOD,IAAAA,KAAS;EACzB;AAEA,MAAIC,kBAAkBC,aAAa;AACjC,WAAOD;EACT;AAEA,UAAQA,QAAAA;IACN,KAAK;AACH,aAAOE;IACT,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOJ;IACT;AACE,aAAOA,KAAKK,cAAcL,KAAKM,cAAcN;EACjD;AACF;AAEA,IAAMO,oBAAmB,CACvBC,sBAAAA;AAEA,MAAI,OAAOA,sBAAsB,UAAU;AACzC,WAAO;MAAEC,UAAUD;IAAkB;EACvC;AAEA,SAAOA,qBAAqB,CAAC;AAC/B;AAEA,IAAME,gBAAe,CACnBC,YAAAA;AAEA,SAAO;IACLF,UAAUE,QAAQF,YAAY;IAC9BR,QAAQU,QAAQV,UAAU;IAC1BW,SAASD,QAAQC,WAAW;IAC5BC,MAAMF,QAAQE,QAAQ;IACtBC,eAAeH,QAAQG,iBAAiB;IACxCC,MAAMJ,QAAQI,QAAQ;IACtBC,SAASL,QAAQK;IACjBC,SAASN,QAAQM,WAAW;IAC5BC,MAAMP,QAAQO,QAAQ;EACxB;AACF;AAEO,SAASC,QACdC,WACAZ,mBAAmE;AAEnE,MAAI,CAACY,WAAW;AACd,UAAM,IAAIC,MAAM,iCAAA;EAClB;AAEA,QAAMC,eAAeZ,cAAaH,kBAAiBC,iBAAAA,CAAAA;AAEnD,SAAO,CACLe,gBACAC,YAAAA;AAEAA,YAAQC,eAAe,WAAA;AACrB,UAAIC,WAAW;AAEf,YAAMC,SAAS,MAAA;AACb,YAAID,UAAU;AACZ;QACF;AAEA,cAAMzB,SAASF,eAAc,MAAMuB,aAAarB,MAAM;AAEtD,YAAI,CAACA,UAAU,OAAQA,OAAuB2B,qBAAqB,YAAY;AAC7E/B,kBAAQgC,KAAK,wCAAwCC,OAAOV,SAAAA,CAAAA,EAAY;AACxE;QACF;AAEA,cAAMW,eAAwC;UAC5Cd,SAASK,aAAaL;UACtBF,MAAMO,aAAaP;UACnBC,SAASM,aAAaN,YAAY1B,SAAYgC,aAAaN,UAAU,CAACM,aAAaV;QACrF;AAEA,cAAMjC,UAAU,CAACqD,UAAAA;AACf,gBAAMC,aAAaD;AAEnB,cAAIV,aAAaV,SAAS;AACxBqB,uBAAWC,eAAc;UAC3B;AAEA,cAAIZ,aAAaR,eAAe;AAC9BmB,uBAAWE,yBAAwB;UACrC,WAAWb,aAAaT,MAAM;AAC5BoB,uBAAWG,gBAAe;UAC5B;AAEA,cAAIC,UAA2B;AAE/B,cAAIf,aAAab,UAAU;AACzB,kBAAM6B,OAAOL,WAAWM,aAAY;AACpCF,sBACEC,KAAKE,KACH,CAACC,SAA2BA,gBAAgBC,WAAWD,KAAKE,QAAQrB,aAAab,QAAQ,CAAA,KACtF;AAEP,gBAAI,CAAC4B,SAAS;AACZ;YACF;UACF;AAEA,cAAIf,aAAaJ,QAAQ,CAACI,aAAaJ,KAAKe,YAAYI,OAAAA,GAAU;AAChE;UACF;AAEA,cAAIf,aAAab,UAAU;AACzB,iBAAKc,eAAeqB,KAAK,MAAMX,YAAYI,OAAAA;UAC7C,OAAO;AACL,kBAAMQ,aACJZ,WAAWhC,kBAAkByC,UAAWT,WAAWhC,SAAsB;AAE3E,iBAAKsB,eAAeqB,KAAK,MAAMX,YAAYY,UAAAA;UAC7C;QACF;AAEA5C,eAAO2B,iBAAiBR,WAAqBzC,SAASoD,YAAAA;AACtDL,mBAAW;AAEXlC,QAAAA,iBAAgB,MAAM,MAAA;AACpBS,iBAAO6C,oBAAoB1B,WAAqBzC,SAASoD,YAAAA;AACzDL,qBAAW;QACb,CAAA;MACF;AAMAqB,qBAAepB,MAAAA;AAGfnD,MAAAA,kBAAiB,MAAM,qBAAqBmD,MAAAA;IAC9C,CAAA;EACF;AACF;;;AC5OA;AAuBA,IAAMqB,oBAAmB,oBAAIC,QAAAA;AAE7B,IAAMC,cAAa,CACjBC,MACAC,MACAC,MACAC,gBAAgB,UAAK;AAErB,QAAMC,WAAWJ,KAAKC,IAAAA;AAErBD,OAAoCC,IAAAA,IAAQ,YAAaI,MAAe;AACvE,QAAIF,eAAe;AACjBD,WAAKI,KAAK,IAAI;IAChB;AAEA,QAAIC;AAEJ,QAAI,OAAOH,aAAa,YAAY;AAClCG,eAAUH,SAA+CI,MAAM,MAAMH,IAAAA;IACvE;AAEA,QAAI,CAACF,eAAe;AAClBD,WAAKI,KAAK,IAAI;IAChB;AAEA,WAAOC;EACT;AACF;AAEA,IAAME,mBAAkB,CAACT,SAAAA;AACvB,MAAIH,kBAAiBa,IAAIV,IAAAA,GAAO;AAC9B;EACF;AAEAH,EAAAA,kBAAiBc,IAAIX,IAAAA;AAErBD,EAAAA,YAAWC,MAAM,qBAAqB,WAAA;AACpCY,8BAA0B,IAAI;EAChC,CAAA;AAEAb,EAAAA,YAAWC,MAAM,eAAe,WAAA;AAC9BY,8BAA0B,IAAI;EAChC,CAAA;AAEAb,EAAAA,YACEC,MACA,wBACA,WAAA;AACEa,kCAA8B,IAAI;EACpC,GACA,IAAA;AAEJ;AAEO,SAASC,cACdC,UAAsC,CAAC,GAAC;AAExC,SAAO,CACLC,gBACAC,YAAAA;AAEAA,YAAQC,eAAe,WAAA;AACrBT,MAAAA,iBAAgB,IAAI;AAEpB,YAAMU,UACJJ,QAAQI,YACP,CAACnB,SAAAA;AACA,eAAO;UACLoB,OAAOL,QAAQK,QAAQpB,IAAAA;UACvBqB,SAASN,QAAQM,UAAUrB,IAAAA;UAC3BsB,UAAUP,QAAQO,WAAWtB,IAAAA;QAC/B;MACF;AAEF,YAAMuB,SAASC,yBACb,MACA,CAACC,UAAAA;AACCT,uBAAeV,KAAK,MAAMmB,KAAAA;MAC5B,GACA;QACEN;QACAO,UAAUX,QAAQW;MACpB,CAAA;AAGFC,iCAA2B,MAAMJ,MAAAA;AAEjC,UAAI,KAAKK,aAAa;AACpBhB,kCAA0B,IAAI;MAChC;IACF,CAAA;EACF;AACF;;;AC/EA,IAAMiB,eAAc,oBAAIC,QAAAA;AACxB,IAAMC,mBAAkB,oBAAID,QAAAA;AAC5B,IAAME,oBAAmB,oBAAIF,QAAAA;AAC7B,IAAMG,qBAAoB,oBAAIH,QAAAA;AAE9B,IAAMI,kBAAiB,CAACC,aAAAA;AACtB,MAAI,OAAOA,SAASC,kBAAkB,YAAY;AAChDD,aAASC,cAAa;AACtB;EACF;AAEA,MAAI,OAAOD,SAASE,WAAW,YAAY;AACzC;EACF;AAEA,MAAIR,aAAYS,IAAIH,QAAAA,GAAW;AAC7B;EACF;AAEAN,EAAAA,aAAYU,IAAIJ,UAAU,IAAA;AAE1BK,wBAAsB,MAAA;AACpBX,IAAAA,aAAYY,OAAON,QAAAA;AACnBA,aAASE,SAAM;EACjB,CAAA;AACF;AAEA,IAAMK,eAAc,CAACC,UACnBC,OAAOD,KAAAA,EACJE,QAAQ,sBAAsB,OAAA,EAC9BA,QAAQ,WAAW,GAAA,EACnBC,YAAW;AAEhB,IAAMC,mBAAkB,CAACZ,UAAsBa,YAAAA;AAC7C,MAAIC,YAAYlB,iBAAgBO,IAAIH,QAAAA;AAEpC,MAAI,CAACc,WAAW;AACdA,gBAAY,oBAAIC,IAAAA;AAChBnB,IAAAA,iBAAgBQ,IAAIJ,UAAUc,SAAAA;AAE9B,UAAME,WAAWhB,SAASiB;AAE1BjB,aAASiB,uBAAuB,YAA+BC,MAAe;AAC5E,YAAMC,aAAavB,iBAAgBO,IAAI,IAAI;AAC3CgB,kBAAYC,QAAQ,CAACC,aAAAA;AACnB,YAAI;AACFA,mBAAAA;QACF,SAASC,OAAO;AACdC,kBAAQD,MAAM,yBAAyBA,KAAAA;QACzC;MACF,CAAA;AACA1B,MAAAA,iBAAgBU,OAAO,IAAI;AAE3B,UAAI,OAAOU,aAAa,YAAY;AAClC,eAAOA,SAASQ,MAAM,MAAMN,IAAAA;MAC9B;AAEA,aAAOO;IACT;EACF;AAEAX,YAAUY,IAAIb,OAAAA;AAChB;AAEA,IAAMc,wBAAuB,CAACC,MAAkBC,cAAAA;AAC9C,MAAIC,aAAahC,mBAAkBK,IAAIyB,IAAAA;AAEvC,MAAI,CAACE,YAAY;AACfA,iBAAa,oBAAIf,IAAAA;AACjBjB,IAAAA,mBAAkBM,IAAIwB,MAAME,UAAAA;EAC9B;AAEAA,aAAWJ,IAAIG,SAAAA;AACjB;AAEA,IAAME,sBAAqB,CAACH,MAAkBC,cAAAA;AAC5C,QAAMC,aAAahC,mBAAkBK,IAAIyB,IAAAA;AAEzC,MAAI,CAACE,YAAY;AACf,WAAO;EACT;AAEA,QAAME,eAAeF,WAAWG,IAAIJ,SAAAA;AAEpC,MAAIG,cAAc;AAChBF,eAAWxB,OAAOuB,SAAAA;AAClB,QAAIC,WAAWI,SAAS,GAAG;AACzBpC,MAAAA,mBAAkBQ,OAAOsB,IAAAA;IAC3B;EACF;AAEA,SAAOI;AACT;AAEA,IAAMG,oBAAmB,CAACP,MAAkBC,WAAmBO,YAAAA;AAC7D,MAAIC,QAAQxC,kBAAiBM,IAAIyB,IAAAA;AAEjC,MAAI,CAACS,OAAO;AACV,UAAMvB,YAAY,oBAAIwB,IAAAA;AACtB,UAAMC,WAAW,IAAIC,iBAAiB,CAACC,YAAAA;AACrCA,cAAQrB,QAAQ,CAACsB,WAAAA;AACf,cAAMC,gBAAgBD,OAAOC;AAE7B,YAAI,CAACA,eAAe;AAClB;QACF;AAEA,YAAIZ,oBAAmBH,MAAMe,aAAAA,GAAgB;AAC3C;QACF;AAEA,cAAMC,aAAY9B,UAAUX,IAAIwC,aAAAA;AAChC,YAAI,CAACC,YAAW;AACd;QACF;AAEA,cAAMC,eAAgBH,OAAOI,OAAmBC,aAAaJ,aAAAA;AAE7D,mBAAWK,YAAYJ,YAAW;AAChCI,mBAASH,YAAAA;QACX;MACF,CAAA;IACF,CAAA;AAEAN,aAASU,QAAQrB,MAAM;MAAEE,YAAY;IAAK,CAAA;AAE1CO,YAAQ;MAAEE;MAAUzB;IAAU;AAC9BjB,IAAAA,kBAAiBO,IAAIwB,MAAMS,KAAAA;AAE3BzB,IAAAA,iBAAgBgB,MAAM,MAAA;AACpBW,eAASW,WAAU;AACnBrD,MAAAA,kBAAiBS,OAAOsB,IAAAA;IAC1B,CAAA;EACF;AAEA,MAAIgB,YAAYP,MAAMvB,UAAUX,IAAI0B,SAAAA;AAEpC,MAAI,CAACe,WAAW;AACdA,gBAAY,oBAAI7B,IAAAA;AAChBsB,UAAMvB,UAAUV,IAAIyB,WAAWe,SAAAA;EACjC;AAEAA,YAAUlB,IAAIU,OAAAA;AAChB;AAEA,IAAMe,mBAAkB,CAACvB,MAAkBC,WAAmBrB,UAAAA;AAC5DmB,EAAAA,sBAAqBC,MAAMC,SAAAA;AAE3B,MAAIrB,UAAUiB,UAAajB,UAAU,QAAQA,UAAU,OAAO;AAC5DoB,SAAKwB,gBAAgBvB,SAAAA;AACrB;EACF;AAEA,MAAIrB,UAAU,MAAM;AAClBoB,SAAKyB,aAAaxB,WAAW,EAAA;AAC7B;EACF;AAEAD,OAAKyB,aAAaxB,WAAWpB,OAAOD,KAAAA,CAAAA;AACtC;AAEA,IAAM8C,eAAc,CAACC,SAAAA;AACnB,MAAI,CAACA,MAAM;AACT,WAAO;EACT;AAEA,MAAIA,SAASC,WAAWD,SAAS,WAAW;AAC1C,WAAO;EACT;AAEA,MAAIA,SAASE,UAAUF,SAAS,UAAU;AACxC,WAAO;EACT;AAEA,MAAIA,SAASG,UAAUH,SAASI,SAASJ,SAAS,QAAQ;AACxD,WAAO;EACT;AAEA,SAAO;AACT;AAEA,IAAMK,eAA6F;EACjGC,QAAQrD,OAAoB;AAC1B,WAAOA,UAAU;EACnB;EACAsD,OAAOtD,OAAoB;AACzB,QAAIA,UAAU,QAAQA,UAAU,IAAI;AAClC,aAAO;IACT;AAEA,UAAMuD,SAASN,OAAOjD,KAAAA;AACtB,WAAOiD,OAAOO,MAAMD,MAAAA,IAAU,OAAOA;EACvC;EACAE,KAAKzD,OAAoB;AACvB,QAAI,CAACA,OAAO;AACV,aAAO;IACT;AAEA,QAAI;AACF,aAAO0D,KAAKC,MAAM3D,KAAAA;IACpB,SAASc,OAAO;AACdC,cAAQ6C,KAAK,yCAAyC9C,KAAAA;AACtD,aAAO;IACT;EACF;EACA+C,OAAO7D,OAAoB;AACzB,WAAOA;EACT;AACF;AAEA,IAAM8D,kBAAmG;EACvGT,QAAQrD,OAAc;AACpB,WAAOA,QAAQ,KAAK;EACtB;EACAsD,OAAOtD,OAAc;AACnB,QAAIA,UAAU,QAAQA,UAAUiB,UAAajB,UAAU,IAAI;AACzD,aAAO;IACT;AACA,WAAOC,OAAOD,KAAAA;EAChB;EACAyD,KAAKzD,OAAc;AACjB,QAAIA,UAAU,QAAQA,UAAUiB,QAAW;AACzC,aAAO;IACT;AACA,QAAI;AACF,aAAOyC,KAAKK,UAAU/D,KAAAA;IACxB,QAAQ;AACN,aAAO;IACT;EACF;EACA6D,OAAO7D,OAAc;AACnB,QAAIA,UAAU,QAAQA,UAAUiB,QAAW;AACzC,aAAO;IACT;AACA,WAAOhB,OAAOD,KAAAA;EAChB;AACF;AAEA,IAAMgE,kBAAiB,CAASC,UAAkBC,SAA0BD,aAAaC;AAElF,SAASC,MAAoDC,UAAsC,CAAC,GAAC;AAC1G,QAAM,EACJ/C,WACAgD,UAAU,MACVtB,MACAY,OACAW,QACAC,cACAC,UAAUR,iBACVS,UACAC,kBAAiB,IACfN;AAEJ,QAAMO,eAAe7B,aAAYC,IAAAA;AAEjC,QAAM6B,aAAoCjB,QACtCA,QACA,SAAuB3D,OAAK;AAC1B,QAAI,CAAC2E,cAAc;AACjB,aAAO3E;IACT;AACA,WAAOoD,aAAYuB,YAAAA,EAAcE,KAAK,MAAM7E,KAAAA;EAC9C;AAEJ,QAAM8E,cAAwCR,SAC1CA,SACA,SAAuBtE,OAAK;AAC1B,QAAI,CAAC2E,cAAc;AACjB,aAAQ3E,SAAkD;IAC5D;AACA,WAAO8D,gBAAea,YAAAA,EAAcE,KAAK,MAAM7E,KAAAA;EACjD;AAEJ,SAAO,CACL+E,UACAC,YAAAA;AAEA,QAAIA,QAAQC,SAAS,YAAY;AAC/B,YAAM,IAAIC,MAAM,wDAAA;IAClB;AAEA,UAAM/C,gBAAgBd,aAAatB,aAAYiF,QAAQG,IAAI;AAE3DH,YAAQI,eAAe,WAAA;AACrB,UAAI,CAACf,SAAS;AACZ;MACF;AAEA1C,MAAAA,kBAAiB,MAAMQ,eAAe,CAACkD,aAAAA;AACrC,YAAI9D,oBAAmB,MAAMY,aAAAA,GAAgB;AAC3C;QACF;AAEA,cAAMoB,SAASqB,WAAWC,KAAK,MAAMQ,QAAAA;AACrC,cAAMpB,WAAWc,SAASpF,IAAIkF,KAAK,IAAI;AAEvC,YAAIL,QAAQP,UAAUV,MAAAA,GAAS;AAC7B;QACF;AAEAwB,iBAASnF,IAAIiF,KAAK,MAAMtB,MAAAA;AAExBmB,2BAAmBG,KAAK,MAAMtB,QAAQU,QAAAA;AACtC1E,QAAAA,gBAAe,IAAI;MACrB,CAAA;IACF,CAAA;AAEA,WAAO;MACLI,MAAAA;AACE,eAAOoF,SAASpF,IAAIkF,KAAK,IAAI;MAC/B;MACAjF,IAAiBI,OAAa;AAC5B,cAAMiE,WAAWc,SAASpF,IAAIkF,KAAK,IAAI;AAEvC,YAAIL,QAAQP,UAAUjE,KAAAA,GAAQ;AAC5B;QACF;AAEA+E,iBAASnF,IAAIiF,KAAK,MAAM7E,KAAAA;AAExB,YAAIqE,SAAS;AACX,gBAAMiB,YAAYR,YAAYD,KAAK,MAAM7E,KAAAA;AACzC2C,UAAAA,iBAAgB,MAAMR,eAAemD,SAAAA;QACvC;AAEAb,kBAAUI,KAAK,MAAM7E,OAAOiE,QAAAA;AAC5B1E,QAAAA,gBAAe,IAAI;MACrB;MACAgG,KAAkBC,cAAoB;AACpC,YAAIxF,QAAQwF;AAEZ,YAAI,KAAKhE,aAAaW,aAAAA,GAAgB;AACpCnC,kBAAQ4E,WAAWC,KAAK,MAAM,KAAKtC,aAAaJ,aAAAA,CAAAA;QAClD,WAAWnC,UAAUiB,UAAasD,iBAAiBtD,QAAW;AAC5DjB,kBACE,OAAOuE,iBAAiB,aAAcA,aAAyCM,KAAK,IAAI,IAAIN;QAChG;AAEA,YAAIF,SAAS;AACX,gBAAMiB,YAAYR,YAAYD,KAAK,MAAM7E,KAAAA;AACzC2C,UAAAA,iBAAgB,MAAMR,eAAemD,SAAAA;QACvC;AAEA,eAAOtF;MACT;IACF;EACF;AACF;;;ACzUA,IAAMyF,kBAAiB;EACrBC,KAAK;EACLC,SAAS;EACTC,MAAM;EACNC,UAAU;AACZ;AAEA,IAAMC,mBAAkB,CACtBD,UACAE,SAAAA;AAEA,MAAI,OAAOF,aAAa,YAAY;AAClC,WAAQA,SAA0CE,IAAAA;EACpD;AAEA,SAAOF;AACT;AAEA,IAAMG,eAAc,CAACD,MAAiBE,WAAAA;AACpC,UAAQA,QAAAA;IACN,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOH;IACT;AACE,aAAOA,KAAKI,cAAcJ,KAAKK,cAAcL;EACjD;AACF;AAEA,IAAMM,gBAAe,CAKnBN,MACAO,UACAC,YAAAA;AAEA,MAAIA,QAAQZ,SAAS;AACnB,UAAMa,SAAST,KAAKJ,QAAQW,QAAAA;AAC5B,WAAOE,UAAUV,iBAAgBS,QAAQV,UAAkDE,IAAAA,KAAS;EACtG;AAEA,QAAMU,OAAOT,aAAYD,MAAMQ,QAAQX,IAAI;AAE3C,MAAI,CAACa,MAAM;AACT,WAAOF,QAAQb,MACVI,iBAAgBS,QAAQV,UAA8CE,IAAAA,KAAS,CAAA,IAC/ED,iBAAgBS,QAAQV,UAAmDE,IAAAA,KAAS;EAC3F;AAEA,MAAIQ,QAAQb,KAAK;AACf,UAAMgB,WAAWC,MAAMf,KAAKa,KAAKG,iBAA2BN,QAAAA,CAAAA;AAC5D,WAAOI,SAASG,SAAS,IACrBH,WACCZ,iBAAgBS,QAAQV,UAA8CE,IAAAA,KAAS,CAAA;EACtF;AAEA,QAAMe,QAAQL,KAAKM,cAAwBT,QAAAA;AAC3C,SAAOQ,SAAShB,iBAAgBS,QAAQV,UAAmDE,IAAAA,KAAS;AACtG;AAEA,IAAMiB,wBAAuB,CAK3BV,UACAC,YAAAA;AAIA,SAAO,CACLU,SACAC,YAAAA;AAEA,QAAIA,QAAQC,SAAS,YAAY;AAC/B,YAAMC,aAA0D;QAC9DC,MAAAA;AACE,iBAAOhB,cAAwC,MAAMC,UAAUC,OAAAA;QACjE;QACAe,IAAIC,QAAc;QAElB;MACF;AACA,aAAOH;IACT;AAEAF,YAAQM,eAAe,WAAA;AACrBC,aAAOC,eAAe,MAAMR,QAAQS,MAAM;QACxCC,cAAc;QACdC,YAAY;QACZR,KAAK,MAAMhB,cAAwC,MAAMC,UAAUC,OAAAA;MACrE,CAAA;IACF,CAAA;AAEA;EACF;AACF;AAYO,SAASuB,OACdxB,UACAyB,aAA2C;AAE3C,MAAI,CAACzB,UAAU;AACb,UAAM,IAAI0B,MAAM,6BAAA;EAClB;AAEA,MAAID,aAAa;AACf,UAAME,UAAS;MAAE,GAAGxC;MAAgB,GAAGsC;IAAY;AACnD,WAAOf,sBAAqDV,UAAU2B,OAAAA;EACxE;AAEA,QAAMA,SAASxC;AACf,SAAOuB,sBAAqDV,UAAU2B,MAAAA;AACxE;;;AChLA,IAAMC,eAAc,oBAAIC,QAAAA;AAExB,IAAMC,kBAAiB,CAACC,aAAAA;AACtB,MAAI,OAAOA,SAASC,kBAAkB,YAAY;AAChDD,aAASC,cAAa;AACtB;EACF;AAEA,MAAI,OAAOD,SAASE,WAAW,YAAY;AACzC;EACF;AAEA,MAAIL,aAAYM,IAAIH,QAAAA,GAAW;AAC7B;EACF;AAEAH,EAAAA,aAAYO,IAAIJ,UAAU,IAAA;AAE1BK,wBAAsB,MAAA;AACpBR,IAAAA,aAAYO,IAAIJ,UAAU,KAAA;AAE1BA,aAASE,SAAM;EACjB,CAAA;AACF;AAEA,IAAMI,kBAAiB,CAASC,UAAkBC,SAA0BD,aAAaC;AAQlF,SAASC,MAAqDC,UAAuC,CAAC,GAAC;AAC5G,QAAM,EAAEC,UAAUL,iBAAgBM,UAAUC,UAAS,IAAKH;AAE1D,SAAO,CACLI,UACAC,YAAAA;AAEA,QAAIA,QAAQC,SAAS,YAAY;AAC/B,YAAM,IAAIC,MAAM,yDAAA;IAClB;AAEA,WAAO;MACLd,MAAAA;AACE,eAAOW,SAASX,IAAIe,KAAK,IAAI;MAC/B;MACAd,IAAiBe,OAAa;AAC5B,cAAMZ,WAAWO,SAASX,IAAIe,KAAK,IAAI;AAEvC,YAAIP,QAAQJ,UAAUY,KAAAA,GAAQ;AAC5B;QACF;AAEAL,iBAASV,IAAIc,KAAK,MAAMC,KAAAA;AAExB,YAAIP,UAAU;AACZA,mBAASM,KAAK,MAAMC,OAAOZ,QAAAA;QAC7B;AAEAR,QAAAA,gBAAe,IAAI;MACrB;MACAqB,KAAkBC,cAAoB;AACpC,YAAIR,WAAW;AACb,iBAAOA,UAAUK,KAAK,MAAMG,YAAAA;QAC9B;AAEA,eAAOA;MACT;IACF;EACF;AACF;;;AC7EA;AACA;AACA;AACAC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAC;AACA;AACAC;AAQA;AACA;AACA;AACA;;;ACkIO,IAAMC,gBAAwC;EACnDC,MAAM;IACJ,GAAG;IACH,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAM;EACR;EACAC,MAAM;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAM;IACN,MAAM;EACR;EACAC,OAAO;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAM;EACR;EACAC,KAAK;IACH,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAM;EACR;EACAC,QAAQ;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAM;EACR;EACAC,QAAQ;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;EACP;EACAC,OAAO;EACPC,OAAO;EACPC,YAAY;IACV,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;EACN;EACAC,YAAY;IACV,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;EACN;EACAC,YAAY;AACd;AAKO,IAAMC,eAAsC;EACjDC,IAAI;EACJC,IAAI;EACJC,IAAI;EACJC,IAAI;EACJC,MAAM;AACR;AAKO,IAAMC,iBAA0C;EACrDC,IAAI;EACJN,IAAI;EACJC,IAAI;EACJC,IAAI;EACJC,IAAI;AACN;AAKO,IAAMI,oBAAgD;EAC3DC,YAAY;EACZC,UAAU;EACVC,UAAU;EACVC,YAAY;AACd;;;ACvSO,IAAMC,kBAA6B;;EAExC,sBAAsB;EACtB,oBAAoB;EACpB,oBAAoB;EACpB,uBAAuB;EACvB,sBAAsB;;EAGtB,0BAA0B;EAC1B,wBAAwB;EACxB,uBAAuB;EACvB,6BAA6B;EAC7B,2BAA2B;EAC3B,uBAAuB;EACvB,gCAAgC;EAChC,kCAAkC;EAClC,kCAAkC;EAClC,4BAA4B;;EAG5B,4BAA4B;EAC5B,2BAA2B;EAC3B,wBAAwB;EACxB,2BAA2B;EAC3B,gCAAgC;EAChC,4BAA4B;EAC5B,mCAAmC;AACrC;AAMO,IAAMC,qBAAkC;EAC7CC,QAAQC;EACRC,OAAOC;EACPC,SAASC;EACTC,YAAYC;EACZC,MAAMV;AACR;AAKO,IAAMW,qBAAqB;AAK3B,IAAMC,mBAAmB;;;ACmBhC,IAAMC,YAAW,oBAAIC,IAAAA;AAKrB,IAAMC,eAAe,CAACC,MAAmBC,cAAAA;AACvC,SAAO;IACLC,QAAQ;MACN,GAAGF,KAAKE;MACR,GAAGD,UAAUC;MACbC,MAAM;QAAE,GAAGH,KAAKE,QAAQC;QAAM,GAAGF,UAAUC,QAAQC;MAAK;MACxDC,MAAM;QAAE,GAAGJ,KAAKE,QAAQE;QAAM,GAAGH,UAAUC,QAAQE;MAAK;MACxDC,OAAO;QAAE,GAAGL,KAAKE,QAAQG;QAAO,GAAGJ,UAAUC,QAAQG;MAAM;MAC3DC,KAAK;QAAE,GAAGN,KAAKE,QAAQI;QAAK,GAAGL,UAAUC,QAAQI;MAAI;MACrDC,QAAQ;QAAE,GAAGP,KAAKE,QAAQK;QAAQ,GAAGN,UAAUC,QAAQK;MAAO;MAC9DC,QAAQ;QAAE,GAAGR,KAAKE,QAAQM;QAAQ,GAAGP,UAAUC,QAAQM;MAAO;MAC9DC,YAAY;QAAE,GAAGT,KAAKE,QAAQO;QAAY,GAAGR,UAAUC,QAAQO;MAAW;MAC1EC,YAAY;QAAE,GAAGV,KAAKE,QAAQQ;QAAY,GAAGT,UAAUC,QAAQQ;MAAW;IAC5E;IACAC,OAAO;MAAE,GAAGX,KAAKW;MAAO,GAAGV,UAAUU;IAAM;IAC3CC,SAAS;MAAE,GAAGZ,KAAKY;MAAS,GAAGX,UAAUW;IAAQ;IACjDC,YAAY;MAAE,GAAGb,KAAKa;MAAY,GAAGZ,UAAUY;IAAW;IAC1DC,MAAM;MAAE,GAAGd,KAAKc;MAAM,GAAGb,UAAUa;IAAK;EAC1C;AACF;AAKA,IAAMC,qBAAqB,CAACC,MAAcC,UAAU,oBAAIC,IAAAA,MAAa;AACnE,MAAID,QAAQE,IAAIH,IAAAA,GAAO;AACrB,UAAM,IAAII,MAAM,iDAAiDC,MAAMC,KAAKL,OAAAA,EAASM,KAAK,MAAA,CAAA,OAAcP,IAAAA,EAAM;EAChH;AAEA,QAAMQ,QAAQ3B,UAAS4B,IAAIT,IAAAA;AAC3B,MAAI,CAACQ,OAAO;AACV,UAAM,IAAIJ,MAAM,oBAAoBJ,IAAAA,sBAA0B;EAChE;AAGA,MAAIQ,MAAME,UAAU;AAClB,WAAOF,MAAME;EACf;AAEAT,UAAQU,IAAIX,IAAAA;AAEZ,MAAIU;AACJ,MAAIF,MAAMxB,SAAS,MAAM;AAEvB0B,eAAWF,MAAMI;EACnB,OAAO;AAEL,UAAMC,aAAad,mBAAmBS,MAAMxB,MAAMiB,OAAAA;AAClDS,eAAW3B,aAAa8B,YAAYL,MAAMI,MAAM;EAClD;AAGAJ,QAAME,WAAWA;AACjB,SAAOA;AACT;AAKA,IAAMI,oBAAoB,MAAA;AACxB,MAAIjC,UAASsB,IAAIY,kBAAAA,GAAqB;AACpC;EACF;AAGAlC,EAAAA,UAASmC,IAAID,oBAAoB;IAC/Bf,MAAMe;IACN/B,MAAM;IACN4B,QAAQK;IACRP,UAAUO;EACZ,CAAA;AAGApC,EAAAA,UAASmC,IAAIE,kBAAkB;IAC7BlB,MAAMkB;IACNlC,MAAM+B;IACNH,QAAQ,CAAC;IACTF,UAAU;EACZ,CAAA;AACF;AAGAI,kBAAAA;AASO,IAAMK,aAAa,CAACC,UACzB,OAAOA,UAAU,YAAYA,UAAU,QAAQ,aAAaA,SAASA,MAAMC,YAAY;AAKlF,IAAMC,gBAAgB,CAACF,UAAAA;AAC5B,MAAI,OAAOA,UAAU,YAAYA,UAAU,MAAM;AAC/C,WAAO;EACT;AACA,MAAID,WAAWC,KAAAA,GAAQ;AACrB,WAAO;EACT;AAEA,QAAMG,MAAMH;AACZ,SACEG,IAAIrC,WAAWsC,UACfD,IAAI5B,UAAU6B,UACdD,IAAI3B,YAAY4B,UAChBD,IAAI1B,eAAe2B,UACnBD,IAAIzB,SAAS0B;AAEjB;AAqBO,SAASC,cACdzB,MACA0B,UAAgC,CAAC,GAAC;AAElC,QAAM,EAAE1C,OAAO+B,oBAAoBH,SAAS,CAAC,EAAC,IAAKc;AAGnD,MAAIC,WAA0B;AAC9B,MAAI3C,SAAS,MAAM;AACjB2C,eAAWR,WAAWnC,IAAAA,IAAQA,KAAKgB,OAAOhB;AAE1C,QAAI,CAACH,UAASsB,IAAIwB,QAAAA,GAAW;AAC3B,YAAM,IAAIvB,MAAM,yBAAyBuB,QAAAA,sBAA8B;IACzE;EACF;AAGA,MAAI9C,UAASsB,IAAIH,IAAAA,GAAO;AACtB,eAAWQ,SAAS3B,UAAS+C,OAAM,GAAI;AACrC,UAAIpB,MAAMxB,SAASgB,MAAM;AACvBQ,cAAME,WAAW;MACnB;IACF;EACF;AAEA7B,EAAAA,UAASmC,IAAIhB,MAAM;IACjBA;IACAhB,MAAM2C;IACNf;IACAF,UAAU;EACZ,CAAA;AAEA,SAAO;IACLW,SAAS;IACTrB;EACF;AACF;AAQO,SAAS6B,SAASC,OAAiB;AACxC,MAAIR,cAAcQ,KAAAA,GAAQ;AACxB,WAAOA;EACT;AAEA,QAAM9B,OAAOmB,WAAWW,KAAAA,IAASA,MAAM9B,OAAO8B;AAC9C,SAAO/B,mBAAmBC,IAAAA;AAC5B;AAKO,SAAS+B,SAAS/B,MAAY;AACnC,SAAOnB,UAASsB,IAAIH,IAAAA;AACtB;AAKO,SAASgC,gBAAAA;AACd,SAAO3B,MAAMC,KAAKzB,UAASoD,KAAI,CAAA;AACjC;AAMO,SAASC,SAAuClC,MAAU;AAC/D,MAAI,CAACnB,UAASsB,IAAIH,IAAAA,GAAO;AACvB,UAAM,IAAII,MAAM,oBAAoBJ,IAAAA,sBAA0B;EAChE;AACA,SAAO;IACLqB,SAAS;IACTrB;EACF;AACF;;;ACnRA,IAAMmC,aAAa;AACnB,IAAMC,eAAe;AACrB,IAAMC,iBAAiB;AACvB,IAAMC,oBAAoB;AAM1B,IAAMC,YAAY,CAACC,WAAmBC,UAAuC,GAAGD,MAAAA,IAAUC,MAAMC,KAAK,GAAA,CAAA;AAKrG,IAAMC,yBAAyB,CAC7BC,MACAC,UAAAA;AAEA,QAAMC,OAA+B,CAAC;AAEtC,aAAW,CAACC,OAAOC,KAAAA,KAAUC,OAAOC,QAAQL,KAAAA,GAAQ;AAClD,QAAIG,UAAUG,QAAW;AACvBL,WAAKP,UAAUJ,YAAYS,MAAMG,KAAAA,CAAAA,IAAUC;IAC7C;EACF;AAEA,SAAOF;AACT;AAMA,IAAMM,YAAY,CAACC,OAAeC,UAAAA;AAChC,QAAMC,UAAUF,MAAMG,KAAI;AAC1B,QAAMC,QAAQ,0BAA0BC,KAAKH,OAAAA;AAC7C,MAAIE,OAAO;AACT,UAAME,KAAKF,MAAM,CAAA;AACjB,UAAMG,WAAWH,MAAM,CAAA;AAEvB,QAAIE,MAAMC,UAAU;AAClB,YAAMC,QAAQD,SAASJ,KAAI;AAG3B,UAAIK,MAAMC,SAAS,GAAA,GAAM;AACvB,eAAO,GAAGH,EAAAA,IAAME,KAAAA;MAClB;AAEA,aAAO,GAAGF,EAAAA,IAAME,KAAAA,MAAWP,KAAAA;IAC7B;EACF;AAGA,QAAMS,MAAMC,KAAKC,MAAMX,QAAQ,GAAA,IAAQ;AACvC,SAAO,uBAAuBC,OAAAA,IAAWQ,GAAAA;AAC3C;AAKA,IAAMG,oBAAoB,CAACC,WAAAA;AACzB,QAAMrB,OAA+B,CAAC;AAEtC,MAAIqB,OAAOC,MAAM;AACfnB,WAAOoB,OAAOvB,MAAMH,uBAAuB,QAAQwB,OAAOC,IAAI,CAAA;EAChE;AAEA,MAAID,OAAOG,MAAM;AACfrB,WAAOoB,OAAOvB,MAAMH,uBAAuB,QAAQwB,OAAOG,IAAI,CAAA;EAChE;AAGA,QAAMA,OAAOH,OAAOG;AACpB,MAAIA,OAAO,KAAA,GAAQ;AACjBxB,SAAKP,UAAUJ,YAAY,QAAQ,QAAA,CAAA,IAAaiB,UAAUkB,KAAK,KAAA,GAAQ,GAAA;EACzE;AACA,MAAIA,OAAO,KAAA,GAAQ;AACjBxB,SAAKP,UAAUJ,YAAY,QAAQ,QAAA,CAAA,IAAaiB,UAAUkB,KAAK,KAAA,GAAQ,GAAA;EACzE;AAEA,MAAIH,OAAOI,OAAO;AAChBtB,WAAOoB,OAAOvB,MAAMH,uBAAuB,SAASwB,OAAOI,KAAK,CAAA;EAClE;AAEA,MAAIJ,OAAOK,KAAK;AACdvB,WAAOoB,OAAOvB,MAAMH,uBAAuB,OAAOwB,OAAOK,GAAG,CAAA;EAC9D;AAEA,MAAIL,OAAOM,QAAQ;AACjBxB,WAAOoB,OAAOvB,MAAMH,uBAAuB,UAAUwB,OAAOM,MAAM,CAAA;EACpE;AAEA,MAAIN,OAAOO,QAAQ;AACjBzB,WAAOoB,OAAOvB,MAAMH,uBAAuB,UAAUwB,OAAOO,MAAM,CAAA;EACpE;AAEA,MAAIP,OAAOQ,OAAO;AAChB7B,SAAKP,UAAUJ,YAAY,OAAA,CAAA,IAAYgC,OAAOQ;EAChD;AAEA,MAAIR,OAAOS,OAAO;AAChB9B,SAAKP,UAAUJ,YAAY,OAAA,CAAA,IAAYgC,OAAOS;EAChD;AAEA,MAAIT,OAAOU,YAAY;AACrB,eAAW,CAAC9B,OAAOC,KAAAA,KAAUC,OAAOC,QAAQiB,OAAOU,UAAU,GAAG;AAC9D,UAAI7B,UAAUG,QAAW;AACvBL,aAAKP,UAAUJ,YAAY,SAASY,KAAAA,CAAAA,IAAUC;MAChD;IACF;EACF;AAGA,MAAI,CAACF,KAAKP,UAAUJ,YAAY,SAAS,CAAA,CAAA,KAAOgC,OAAOQ,OAAO;AAC5D7B,SAAKP,UAAUJ,YAAY,SAAS,CAAA,CAAA,IAAMiB,UAAUe,OAAOQ,OAAO,CAAA;EACpE;AAEA,MAAIR,OAAOW,YAAY;AACrB,eAAW,CAAC/B,OAAOC,KAAAA,KAAUC,OAAOC,QAAQiB,OAAOW,UAAU,GAAG;AAC9D,UAAI9B,UAAUG,QAAW;AACvBL,aAAKP,UAAUJ,YAAY,SAASY,KAAAA,CAAAA,IAAUC;MAChD;IACF;EACF;AAEA,MAAImB,OAAOY,YAAY;AACrBjC,SAAKP,UAAUJ,YAAY,YAAA,CAAA,IAAiBgC,OAAOY;EACrD;AAEA,SAAOjC;AACT;AAMA,IAAMkC,qBAAqB,CAACC,YAAAA;AAC1B,MAAIA,SAAS;AACX,WAAOA;EACT;AACA,MAAI,OAAOC,aAAa,aAAa;AACnC,WAAO;EACT;AACA,SAAOA,SAASC;AAClB;AAKA,IAAMC,oBAAoB,CAACC,UAAAA;AACzB,QAAMvC,OAA+B,CAAC;AAEtC,aAAW,CAACF,MAAMI,KAAAA,KAAUC,OAAOC,QAAQmC,KAAAA,GAAQ;AACjD,QAAIrC,UAAUG,QAAW;AACvBL,WAAKP,UAAUH,cAAcQ,IAAAA,CAAAA,IAASI;IACxC;EACF;AAEA,SAAOF;AACT;AAKA,IAAMwC,sBAAsB,CAACC,YAAAA;AAC3B,QAAMzC,OAA+B,CAAC;AAEtC,aAAW,CAACF,MAAMI,KAAAA,KAAUC,OAAOC,QAAQqC,OAAAA,GAAU;AACnD,QAAIvC,UAAUG,QAAW;AACvBL,WAAKP,UAAUF,gBAAgBO,IAAAA,CAAAA,IAASI;IAC1C;EACF;AAEA,SAAOF;AACT;AAKA,IAAM0C,yBAAyB,CAACC,eAAAA;AAC9B,QAAM3C,OAA+B,CAAC;AAEtC,MAAI2C,WAAWC,YAAY;AACzB5C,SAAKP,UAAUD,mBAAmB,QAAA,CAAA,IAAamD,WAAWC;EAC5D;AAEA,MAAID,WAAWE,UAAU;AACvB7C,SAAKP,UAAUD,mBAAmB,MAAA,CAAA,IAAWmD,WAAWE;EAC1D;AAEA,MAAIF,WAAWG,UAAU;AACvB9C,SAAKP,UAAUD,mBAAmB,MAAA,CAAA,IAAWmD,WAAWG;EAC1D;AAEA,MAAIH,WAAWI,YAAY;AACzB/C,SAAKP,UAAUD,mBAAmB,aAAA,CAAA,IAAkBmD,WAAWI;EACjE;AAEA,SAAO/C;AACT;AAEA,IAAMgD,yBAAyB,CAAClD,SAAAA;AAC9B,QAAMW,UAAUX,KAAKY,KAAI;AACzB,MAAI,CAACD,SAAS;AACZ,WAAO;EACT;AACA,SAAOA,QAAQwC,WAAW,IAAA,IAAQxC,UAAU,KAAKA,OAAAA;AACnD;AAEA,IAAMyC,qBAAqB,CAAClD,SAAAA;AAC1B,QAAMmD,MAA8B,CAAC;AAErC,aAAW,CAACC,KAAKlD,KAAAA,KAAUC,OAAOC,QAAQJ,IAAAA,GAAO;AAC/C,QAAIE,UAAU,QAAQA,UAAUG,QAAW;AACzC;IACF;AAEA,UAAMP,OAAOkD,uBAAuBI,GAAAA;AACpC,QAAI,CAACtD,MAAM;AACT;IACF;AAEAqD,QAAIrD,IAAAA,IAAQuD,OAAOnD,KAAAA;EACrB;AAEA,SAAOiD;AACT;AAKA,IAAMG,oBAAoB,CAACC,WAAAA;AACzB,QAAMvD,OAA+B,CAAC;AAEtC,MAAIuD,OAAOlC,QAAQ;AACjBlB,WAAOoB,OAAOvB,MAAMoB,kBAAkBmC,OAAOlC,MAAM,CAAA;EACrD;AAEA,MAAIkC,OAAOhB,OAAO;AAChBpC,WAAOoB,OAAOvB,MAAMsC,kBAAkBiB,OAAOhB,KAAK,CAAA;EACpD;AAEA,MAAIgB,OAAOd,SAAS;AAClBtC,WAAOoB,OAAOvB,MAAMwC,oBAAoBe,OAAOd,OAAO,CAAA;EACxD;AAEA,MAAIc,OAAOZ,YAAY;AACrBxC,WAAOoB,OAAOvB,MAAM0C,uBAAuBa,OAAOZ,UAAU,CAAA;EAC9D;AAEA,MAAIY,OAAOvD,MAAM;AACfG,WAAOoB,OAAOvB,MAAMkD,mBAAmBK,OAAOvD,IAAI,CAAA;EACpD;AAEA,SAAOA;AACT;AAmBO,IAAMwD,cAAc,CAACD,QAAqBE,WAAW,YAAO;AACjE,QAAMzD,OAAOsD,kBAAkBC,MAAAA;AAC/B,QAAMG,eAAevD,OAAOC,QAAQJ,IAAAA,EACjC2D,IAAI,CAAC,CAAC7D,MAAMI,KAAAA,MAAW,KAAKJ,IAAAA,KAASI,KAAAA,GAAQ,EAC7CN,KAAK,IAAA;AAER,SAAO,GAAG6D,QAAAA;EAAeC,YAAAA;;AAC3B;AAqBO,IAAME,cAAc,CAACL,QAAqBpB,YAAAA;AAC/C,QAAM0B,SAAS3B,mBAAmBC,OAAAA;AAClC,MAAI,CAAC0B,QAAQ;AACX;EACF;AAEA,QAAM7D,OAAOsD,kBAAkBC,MAAAA;AAE/B,aAAW,CAACzD,MAAMI,KAAAA,KAAUC,OAAOC,QAAQJ,IAAAA,GAAO;AAChD6D,WAAOC,MAAMC,YAAYjE,MAAMI,KAAAA;EACjC;AACF;AAQO,IAAM8D,cAAc,CAACT,QAAqBpB,YAAAA;AAC/C,QAAM0B,SAAS3B,mBAAmBC,OAAAA;AAClC,MAAI,CAAC0B,QAAQ;AACX;EACF;AAEA,QAAM7D,OAAOsD,kBAAkBC,MAAAA;AAE/B,aAAWzD,QAAQK,OAAO8D,KAAKjE,IAAAA,GAAO;AACpC6D,WAAOC,MAAMI,eAAepE,IAAAA;EAC9B;AACF;AAeO,IAAMqE,gBAAgB,CAACC,OAAejC,YAAAA;AAC3C,QAAM0B,SAAS3B,mBAAmBC,OAAAA;AAClC,MAAI,CAAC0B,UAAU,OAAOQ,qBAAqB,aAAa;AACtD,WAAO;EACT;AAEA,QAAMC,UAAUF,MAAMnB,WAAW,IAAA,IAAQmB,QAAQ,KAAKA,KAAAA;AACtD,SAAOC,iBAAiBR,MAAAA,EAAQU,iBAAiBD,OAAAA,EAAS5D,KAAI;AAChE;AAcO,IAAM8D,gBAAgB,CAACJ,OAAelE,OAAeiC,YAAAA;AAC1D,QAAM0B,SAAS3B,mBAAmBC,OAAAA;AAClC,MAAI,CAAC0B,QAAQ;AACX;EACF;AAEA,QAAMS,UAAUF,MAAMnB,WAAW,IAAA,IAAQmB,QAAQ,KAAKA,KAAAA;AACtDP,SAAOC,MAAMC,YAAYO,SAASpE,KAAAA;AACpC;AAKO,IAAMuE,uBAAuB;AAM7B,IAAMC,aAAa,CAACC,YAAyB,CAAC,MAAC;AACpD,SAAO;IACLtD,QAAQ;MACN,GAAGuD;MACH,GAAGD,UAAUtD;MACbC,MAAM;QAAE,GAAGsD,cAActD;QAAM,GAAGqD,UAAUtD,QAAQC;MAAK;MACzDE,MAAM;QAAE,GAAGoD,cAAcpD;QAAM,GAAGmD,UAAUtD,QAAQG;MAAK;MACzDC,OAAO;QAAE,GAAGmD,cAAcnD;QAAO,GAAGkD,UAAUtD,QAAQI;MAAM;MAC5DC,KAAK;QAAE,GAAGkD,cAAclD;QAAK,GAAGiD,UAAUtD,QAAQK;MAAI;MACtDC,QAAQ;QAAE,GAAGiD,cAAcjD;QAAQ,GAAGgD,UAAUtD,QAAQM;MAAO;MAC/DC,QAAQ;QAAE,GAAGgD,cAAchD;QAAQ,GAAG+C,UAAUtD,QAAQO;MAAO;MAC/DG,YAAY;QAAE,GAAG6C,cAAc7C;QAAY,GAAG4C,UAAUtD,QAAQU;MAAW;MAC3EC,YAAY;QAAE,GAAG4C,cAAc5C;QAAY,GAAG2C,UAAUtD,QAAQW;MAAW;IAC7E;IACAO,OAAO;MAAE,GAAGsC;MAAc,GAAGF,UAAUpC;IAAM;IAC7CE,SAAS;MAAE,GAAGqC;MAAgB,GAAGH,UAAUlC;IAAQ;IACnDE,YAAY;MAAE,GAAGoC;MAAmB,GAAGJ,UAAUhC;IAAW;IAC5D3C,MAAM2E,UAAU3E,OAAO;MAAE,GAAG2E,UAAU3E;IAAK,IAAIK;EACjD;AACF;AAMO,IAAM2E,kBAAkB,CAACL,YAAyB,CAAC,MAAmBD,WAAWC,SAAAA;AAiBjF,IAAMM,eAAe,CAACnF,MAAcoF,UAA+B,CAAC,MAAC;AAC1E,QAAMrB,SAAS3B,mBAAmBgD,QAAQ/C,OAAO;AACjD,MAAI,CAAC0B,QAAQ;AACX;EACF;AAEA,QAAMsB,YAAYD,QAAQC,aAAaV;AACvCZ,SAAOuB,aAAaD,WAAWrF,IAAAA;AAE/B,MAAIoF,QAAQG,eAAeH,QAAQI,mBAAmB,OAAO;AAC3DzB,WAAOC,MAAMuB,cAAcH,QAAQG;EACrC;AACF;AAEO,IAAME,eAAe,CAACpD,SAA8BgD,YAAYV,yBAAoB;AACzF,QAAMZ,SAAS3B,mBAAmBC,OAAAA;AAClC,MAAI,CAAC0B,QAAQ;AACX,WAAO;EACT;AAEA,SAAOA,OAAO2B,aAAaL,SAAAA;AAC7B;AA0BO,IAAMM,aAAa,CAACC,OAAoBR,UAA6B,CAAC,MAAC;AAC5E,QAAMrB,SAAS3B,mBAAmBgD,QAAQ/C,OAAO;AACjD,QAAMgD,YAAYD,QAAQC,aAAaV;AAEvC,QAAMlB,SAAS2B,QAAQS,oBAAoBjB,WAAWgB,KAAAA,IAASA;AAE/D9B,cAAYL,QAAQM,MAAAA;AAEpB,MAAI,CAACA,QAAQ;AACX,WAAON;EACT;AAEA,MAAI2B,QAAQpF,QAAQoF,QAAQE,iBAAiB,OAAO;AAClDvB,WAAOuB,aAAaD,WAAWD,QAAQpF,IAAI;EAC7C;AAEA,MAAIoF,QAAQG,eAAeH,QAAQI,mBAAmB,OAAO;AAC3DzB,WAAOC,MAAMuB,cAAcH,QAAQG;EACrC;AAEA,SAAO9B;AACT;AAEO,IAAMqC,qBAAqB,MAAA;AAChC,MAAI,OAAOC,WAAW,eAAe,OAAOA,OAAOC,eAAe,YAAY;AAC5E,WAAO;EACT;AACA,SAAOD,OAAOC,WAAW,+BAAA,EAAiCC,UAAU,UAAU;AAChF;AAeO,IAAMC,oBAAoB,CAC/BC,QACAf,UAAoC,CAAC,MAAC;AAEtC,MAAI,OAAOW,WAAW,eAAe,OAAOA,OAAOC,eAAe,YAAY;AAC5E,WAAO,MAAA;IAAO;EAChB;AAEA,QAAMI,QAAQL,OAAOC,WAAW,+BAAA;AAChC,QAAMK,QAAQ,MAAA;AACZ,UAAMC,OAAwBF,MAAMH,UAAU,UAAU;AACxD,UAAML,QAAQU,SAAS,UAAUH,OAAOI,QAAQJ,OAAOK;AAEvDb,eAAWC,OAAO;MAChB,GAAGR;MACHpF,MAAMsG,SAAS,UAAWlB,QAAQqB,aAAa,UAAYrB,QAAQsB,YAAY;MAC/EnB,aAAae;IACf,CAAA;EACF;AAEAD,QAAAA;AAEAD,QAAMO,iBAAiB,UAAUN,KAAAA;AACjC,SAAO,MAAMD,MAAMQ,oBAAoB,UAAUP,KAAAA;AACnD;;;ACpaA,IAAMQ,aAAY,MAAe,OAAOC,aAAa,eAAe,OAAOC,WAAW;AAEtF,IAAMC,oBAAoB,CAACC,UAAAA;AACzB,MAAI,OAAOA,UAAU,YAAYA,UAAU,MAAM;AAC/C,WAAO;EACT;AACA,QAAMC,MAAMD;AACZ,SAAOC,IAAIC,SAASC,WAAcF,IAAIG,UAAUD,UAAaF,IAAII,SAASF;AAC5E;AAKA,SAASG,qBAAqBC,SAAsB;AAClD,MAAI,CAACX,WAAAA,GAAa;AAChB;EACF;AAEA,aAAW,CAACY,KAAKC,WAAAA,KAAgBC,OAAOC,QAAQJ,OAAAA,GAAU;AAExD,QAAIK,eAAeC,IAAIL,GAAAA,GAAM;AAC3B;IACF;AAEA,QAAI,OAAOC,gBAAgB,YAAY;AAErCG,qBAAeE,OAAON,KAAKC,WAAAA;IAC7B,WAAW,OAAOA,gBAAgB,UAAU;AAE1C,YAAMM,WAAWN;MACjB,MAAMO,sBAAsBC,YAAAA;QAG1BC,oBAA0B;AAExB,eAAKC,SAAStB,SAASuB,cAAcL,QAAAA;AAGrC,qBAAWM,QAAQ,KAAKC,YAAY;AAClC,iBAAKH,OAAOI,aAAaF,KAAKG,MAAMH,KAAKrB,KAAK;UAChD;AAGA,iBAAO,KAAKyB,YAAY;AACtB,iBAAKN,OAAOO,YAAY,KAAKD,UAAU;UACzC;AAGA,gBAAME,SAAS,KAAKC,aAAa;YAAE1B,MAAM;UAAO,CAAA;AAChDyB,iBAAOD,YAAY,KAAKP,MAAM;QAChC;QAEAU,uBAA6B;AAC3B,eAAKV,SAAS;QAChB;;AAxBF,gBAAA,GAAA,IAAA,GAAA,KACUA,SAA6B;;MAwBvC;AACAP,qBAAeE,OAAON,KAAKQ,aAAAA;IAC7B;EACF;AACF;AAKA,eAAec,YAAYC,QAAsBC,OAAc;AAC7D,MAAID,WAAW,OAAO;AACpB,WAAO;MAAEE,SAAS,MAAA;MAAO;IAAE;EAC7B;AAEA,QAAM,EAAEC,cAAAA,eAAcC,cAAAA,cAAY,IAAK,MAAM;AAE7C,QAAMC,WAA0B,CAAA;AAEhC,MAAI,OAAOL,WAAW,UAAU;AAC9BG,IAAAA,cAAaH,QAAQC,KAAAA;AACrBI,aAASC,KAAKN,MAAAA;EAChB,WAAW,OAAOA,WAAW,UAAU;AACrC,QAAIA,OAAOO,OAAO;AAChBJ,MAAAA,cAAa,SAASF,KAAAA;AACtBI,eAASC,KAAK,OAAA;IAChB;AACA,QAAIN,OAAOQ,MAAM;AACfL,MAAAA,cAAa,QAAQF,KAAAA;AACrBI,eAASC,KAAK,MAAA;IAChB;EACF;AAEA,SAAO;IACLJ,SAAS,MAAA;AACP,iBAAWO,UAAUJ,UAAU;AAC7BD,QAAAA,cAAaK,MAAAA;MACf;IACF;EACF;AACF;AAKA,SAASC,iBACPC,OACAC,QAAoB;AAEpB,MAAI5C,kBAAkB2C,KAAAA,GAAQ;AAE5B,UAAME,cAAcC,SAASH,MAAMtC,KAAK;AACxC,UAAM0C,aAAaD,SAASH,MAAMrC,IAAI;AAEtC,QAAIqC,MAAMxC,SAAS,UAAU;AAC3B,YAAM6C,UAAUC,kBAAkB;QAAE5C,OAAOwC;QAAavC,MAAMyC;MAAW,GAAG;QAAEG,SAASN;MAAO,CAAA;AAE9F,aAAO;QACLV,SAASc;QACTG,YAAY;UACVC,KAAK,CAACC,MAAAA;AACJ,kBAAMC,UAASR,SAASO,CAAAA;AACxBE,uBAAWD,SAAQ;cAAEJ,SAASN;YAAO,CAAA;UACvC;UACAzC,MAAM,CAACqD,MAAAA;AACL,gBAAIA,MAAM,UAAU;AAElB,oBAAMC,aAA8B1D,OAAO2D,WAAW,+BAAA,EAAiCC,UACnF,UACA;AACJ,oBAAML,UAASG,eAAe,UAAUZ,cAAcE;AACtDQ,yBAAWD,SAAQ;gBACjBJ,SAASN;gBACTnB,MAAMgC;gBACNG,aAAaH;cACf,CAAA;YACF,OAAO;AACL,oBAAMH,UAASE,MAAM,UAAUX,cAAcE;AAC7CQ,yBAAWD,SAAQ;gBACjBJ,SAASN;gBACTnB,MAAM+B;gBACNI,aAAaJ;cACf,CAAA;YACF;UACF;QACF;MACF;IACF;AAGA,UAAMF,UAASX,MAAMxC,SAAS,UAAU0C,cAAcE;AACtDQ,eAAWD,SAAQ;MACjBJ,SAASN;MACTnB,MAAMkB,MAAMxC;MACZyD,aAAajB,MAAMxC;IACrB,CAAA;AAEA,WAAO;MACL+B,SAAS,MAAA;MAAO;MAChBiB,YAAY;QACVC,KAAK,CAACC,MAAAA;AACJ,gBAAMQ,iBAAiBf,SAASO,CAAAA;AAChCE,qBAAWM,gBAAgB;YAAEX,SAASN;UAAO,CAAA;QAC/C;MACF;IACF;EACF;AAGA,QAAMU,SAASR,SAASH,KAAAA;AACxB,QAAMlB,OAAOqC,WAAWnB,KAAAA,IAASA,MAAMlB,OAAO,OAAOkB,UAAU,WAAWA,QAAQvC;AAElFmD,aAAWD,QAAQ;IACjBJ,SAASN;IACTnB;IACAmC,aAAa;EACf,CAAA;AAEA,SAAO;IACL1B,SAAS,MAAA;IAAO;IAChBiB,YAAY;MACVC,KAAK,CAACC,MAAAA;AACJ,cAAMQ,iBAAiBf,SAASO,CAAAA;AAChC,cAAMU,YAAYD,WAAWT,CAAAA,IAAKA,EAAE5B,OAAO,OAAO4B,MAAM,WAAWA,IAAIjD;AACvEmD,mBAAWM,gBAAgB;UAAEX,SAASN;UAAQnB,MAAMsC;QAAU,CAAA;MAChE;IACF;EACF;AACF;AAqCO,SAASC,WAAWC,UAA6B,CAAC,GAAC;AAExD,MAAI,CAACpE,WAAAA,GAAa;AAChB,WAAO;MACLqC,SAAS,MAAA;MAAO;MAChBgC,OAAOC,QAAQC,QAAO;IACxB;EACF;AAEA,QAAM,EACJC,SACAC,SACA9D,SACAmC,OACAC,QACAZ,SAAS,OACTuC,QAAQ,OACRC,WAAW,OACXC,UACAC,IAAG,IACDT;AAEJ,QAAMU,YAA+B,CAAA;AAGrC,QAAMxB,aAA+B;IACnCjB,SAAS,MAAA;AACP,iBAAWA,WAAWyC,WAAW;AAC/BzC,gBAAAA;MACF;IACF;IACAS,OAAOvC;IACP8D,OAAOC,QAAQC,QAAO;EACxB;AAGA,QAAMQ,gBAAgB,YAAA;AAEpB,QAAIpE,SAAS;AACXD,2BAAqBC,OAAAA;IACvB;AAGA,UAAMqE,eAAe,MAAM9C,YAAYC,QAAQyC,QAAAA;AAC/CE,cAAUrC,KAAKuC,aAAa3C,OAAO;AAGnC,QAAIS,OAAO;AACT,YAAMmC,cAAcpC,iBAAiBC,OAAOC,MAAAA;AAC5C+B,gBAAUrC,KAAKwC,YAAY5C,OAAO;AAClCiB,iBAAWR,QAAQmC,YAAY3B;IACjC;AAGA,QAAIoB,UAAU,OAAO;AACnB,YAAM,EAAEQ,aAAAA,cAAaC,aAAAA,aAAW,IAAK,MAAM;AAC3CD,MAAAA,aAAYR,KAAAA;AACZ,YAAMU,gBAAgBV;AACtBI,gBAAUrC,KAAK,MAAM0C,aAAYC,aAAAA,CAAAA;IACnC;AAGA,QAAIT,UAAU;AAEZ,YAAM,EAAEU,kBAAAA,kBAAgB,IAAK,MAAM;AACnC,YAAMC,aAA6B,OAAOX,aAAa,WAAWA,WAAW,CAAC;AAG9E,UAAIH,SAAS;AACXc,mBAAWd,UAAUA;MACvB,WAAWC,SAAS;AAClBa,mBAAWb,UAAUA;MACvB;AAEA,YAAMc,SAASF,kBAAiBC,UAAAA;AAChCR,gBAAUrC,KAAK8C,OAAOlD,OAAO;IAC/B,OAAO;AAEL,YAAM,EAAEmD,mBAAAA,oBAAmBC,gBAAAA,iBAAgBC,aAAAA,aAAW,IAAK,MAAM;AAEjE,UAAIlB,WAAWC,SAAS;AACtB,cAAMkB,OAAOD,aAAY;UAAElB;UAASC;QAAQ,CAAA;AAE5C,YAAII,KAAKe,iBAAiB;AACxB,gBAAM,EAAEC,kBAAAA,kBAAgB,IAAK,MAAM;AACnC,gBAAMC,UAAU,IAAIC,IAAIF,iBAAAA;AACxB,gBAAMG,WAAWxB,WAAWC,WAAW,CAAA,GAAIwB,OAAO,CAACzC,MAAM,CAACsC,QAAQI,IAAI1C,CAAAA,CAAAA;AACtE,cAAIwC,QAAQG,SAAS,GAAG;AACtBC,oBAAQC,KAAK,2BAA2BL,OAAAA;UAC1C;QACF;AAEA,YAAInB,KAAKyB,UAAU;AACjBF,kBAAQG,IAAI,iCAAiCZ,IAAAA;QAC/C;AAEA,cAAMF,gBAAeE,IAAAA;MACvB,OAAO;AACL,YAAId,KAAKyB,UAAU;AACjBF,kBAAQG,IAAI,kCAAA;QACd;AACA,cAAMf,mBAAAA;MACR;IACF;EACF,GAAA;AAEAlC,aAAWe,QAAQU;AACnB,SAAOzB;AACT;;;ACrdA,IAAAkD,oBAAwB;AACxB,IAAAC,oBAAyB;AACzB,IAAAC,qBAA0B;AAC1B,IAAAC,iBAAuB;AACvB,IAAAC,oBAAyB;AACzB,IAAAC,sBAA2B;AAC3B,IAAAC,eAAqB;AAId,SAASC,SACdC,WACAC,UAAiD;AAEjD,MAAI,CAACD,WAAW;AACd,WAAOE;EACT;AAEA,SAAO,OAAOD,aAAa,aAAaA,SAAAA,IAAaA;AACvD;AAEO,SAASE,WACdC,OACAH,UACAI,MAA2C,CAACC,SAASA,MAAI;AAEzD,aAAOC,uBAAOH,OAAOC,KAAKJ,QAAAA;AAC5B;AAEO,SAASO,aAAYC,OAAyD;AACnF,QAAMC,iBAAiBC,OAAOC,QAAQH,KAAAA,EAAOI,OAA+B,CAACC,KAAK,CAACC,UAAUC,KAAAA,MAAM;AACjG,QAAIA,UAAU,QAAQA,UAAUC,UAAaD,UAAU,IAAI;AACzD,aAAOF;IACT;AAEAA,QAAIC,QAAAA,IAAY,OAAOC,UAAU,WAAW,GAAGA,KAAAA,KAAUA;AACzD,WAAOF;EACT,GAAG,CAAC,CAAA;AAEJ,aAAOI,4BAASR,cAAAA;AAClB;AAEO,IAAMS,oBAAoBC;","names":["SUPPORTS_HIGHLIGHT_API","getHighlightAPI","window","CSS","highlights","Highlight","w","DEFAULT_THEME","generateHighlightStyles","keyword","string","comment","number","operator","tag","attribute","property","type","variable","selector","function","instanceId","theme","styles","color","Object","entries","highlightName","italic","JS_BASE","TS_ADDITIONS","HTML_BASE","CSS_BASE","JSON_BASE","baseGrammars","TSX_GRAMMAR","GRAMMARS","javascript","js","typescript","ts","html","css","json","filter","type","tsx","jsx","tokenize","normalizeIndent","code","language","grammar","GRAMMARS","toLowerCase","regexParts","groupMap","Map","groupIndex","forEach","type","pattern","groupName","set","push","source","masterRegex","RegExp","join","tokens","match","exec","index","lastIndex","groups","undefined","get","start","end","length","tagNameMatch","tagNameStart","tagNameEnd","lines","split","filter","line","trim","minIndent","Math","min","map","substring","styleCache","normalizeTemplate","fetchStyles","Component","Map","template","urls","Promise","all","map","url","cached","get","request","fetch","then","response","ok","text","catch","set","options","Base","_context","tag","styles","styleUrls","observedAttributes","shadowMode","autoSlot","Error","templateFn","Decorated","parent","Array","isArray","own","from","Set","args","attachShadow","mode","renderRoot","shadow","connectedCallback","prototype","call","finally","requestRender","disconnectedCallback","attributeChangedCallback","name","oldValue","newValue","onAttributeChange","requestAnimationFrame","length","fetched","inlineStyles","filter","Boolean","join","root","templateResult","render","styleTemplate","html","slotTemplate","completeTemplate","commit","afterRender","wrapRender","fragment","document","createDocumentFragment","tempDiv","createElement","append","childNodes","customElements","define","Prop","options","attribute","reflect","type","parse","format","defaultValue","compare","defaultCompare","onChange","onAttributeChange","resolvedType","resolveType","parseValue","value","typeParsers","call","formatValue","typeFormatters","accessor","context","kind","Error","attributeName","toKebabCase","name","addInitializer","observeAttribute","rawValue","isInternalMutation","parsed","previous","get","set","scheduleRender","formatted","updateAttribute","init","initialValue","hasAttribute","getAttribute","undefined","renderQueue","cleanupRegistry","observerRegistry","internalMutations","registerCleanup","markInternalMutation","WeakMap","instance","requestRender","render","requestAnimationFrame","delete","String","replace","toLowerCase","cleanup","callbacks","Set","original","disconnectedCallback","args","registered","forEach","callback","error","console","apply","add","host","attributes","has","size","handler","entry","Map","observer","MutationObserver","records","record","listeners","currentValue","target","listener","observe","disconnect","removeAttribute","setAttribute","Boolean","Number","Object","Array","boolean","number","isNaN","json","JSON","warn","string","stringify","next","Query","selector","userOptions","Error","merged","defaultOptions","createQueryDecorator","resolveFallback","resolveRoot","resolveQuery","all","closest","from","fallback","host","option","document","renderRoot","shadowRoot","options","result","root","elements","Array","querySelectorAll","length","match","querySelector","_target","context","kind","descriptor","get","set","_value","addInitializer","Object","defineProperty","name","configurable","enumerable","import_lit_html","HTMLElement","language","codeElement","Code","Component","tag","shadowMode","autoSlot","styles","template","html","Prop","reflect","Query","connectedCallback","MutationObserver","observe","childList","subtree","characterData","disconnectedCallback","disconnect","attributeChangedCallback","name","currentLanguage","toLowerCase","afterRender","shadowRoot","querySelectorAll","style","remove","type","rawCode","textContent","normalizeIndent","trim","SUPPORTS_HIGHLIGHT_API","textNode","firstChild","code","api","getHighlightAPI","tokens","tokenize","highlightMap","Map","token","start","end","range","document","createRange","setStart","setEnd","has","set","get","push","ranges","entries","length","highlightName","highlight","Highlight","highlights","add","delete","clear","crypto","randomUUID","Set","createElement","setAttribute","highlightStyles","generateHighlightStyles","appendChild","cubicBezierToLinearPoints","points","start","x","y","cpOutX","p1","cpOutY","isLinked","mirrorLength","end","cpInX","p2","cpInY","canvasStyles","controlsStyles","outputStyles","containerStyles","canvasControlsStyles","toolbarStyles","EasingType","MIN_LINEAR_POINTS","MAX_LINEAR_POINTS","clampPoint","MIN_LINEAR_DELTA","linearPointIdCounter","nextLinearPointId","ensureLinearPointId","cloneLinearPoint","cubicBezierPath","linearDisplayPath","perpendicularDistance","simplifyPoints","generateCubicBezierCSS","getLinearApproximation","generateLinearCSS","cubicBezier","normalizeLinearPoints","clamp01","parseCubicBezierValue","ensureStopPositions","parseLinearTimingFunction","vectorLength","normalizeVector","smoothLinearPoints","point","bounds","minX","maxX","minY","maxY","x","Math","max","min","y","id","sourceId","points","p1","p2","startX","startY","endX","endY","cp1x","cp1y","cp2x","cp2y","length","toSvg","p","startPoint","start","d","index","cp1","cpOutX","cpOutY","cp2","cpInX","cpInY","end","svgCp1","svgCp2","lineStart","lineEnd","dx","dy","sqrt","numerator","abs","denominator","epsilon","dmax","endPoint","i","recResults1","slice","recResults2","name","variant","timingFunction","toFixed","code","options","simplify","round","samples","numSamplesPerSegment","sortedPoints","sort","a","b","push","step","t","normalizedSamples","lastX","sample","clampedX","clampedY","firstPoint","firstSample","lastPoint","lastSample","finalSamples","map","Number","Array","isArray","parts","join","p0","p3","u","tt","uu","uuu","ttt","normalized","first","last","handleThreshold","undefined","isLinked","mirrorLength","value","isNaN","input","match","trim","body","split","part","parseFloat","filter","isFinite","x1","y1","x2","y2","some","stops","lastIndex","assignBetween","startIndex","endIndex","startStop","endStop","span","segments","offset","ratio","target","lastDefined","segment","valueToken","position","token","percentMatch","percentValue","parsed","rawPoints","stop","tension","prev","next","smoothedPoint","handleLength","tangentX","tangentY","tangentLength","normalizedTx","normalizedTy","distToPrev","distToNext","inHandleLength","outHandleLength","Listen","eventName","selectorOrOptions","Error","listenConfig","buildOptions","normalizeOptions","originalMethod","context","addInitializer","attached","attach","target","resolveTarget","addEventListener","console","warn","String","eventOptions","capture","once","passive","undefined","prevent","handler","event","typedEvent","preventDefault","stopImmediate","stopImmediatePropagation","stop","stopPropagation","matched","selector","path","composedPath","find","node","Element","matches","when","call","targetNode","registerCleanup","removeEventListener","queueMicrotask","addLifecycleHook","lifecycleHooks","cleanupRegistry","connectedCallback","WeakMap","disconnectedCallback","instance","hookName","store","callbacks","get","Set","set","original","args","forEach","callback","apply","add","cleanup","registered","fn","error","delete","host","EventTarget","document","window","renderRoot","shadowRoot","options","HIT_AREA_RADIUS","LINEAR_HIT_THRESHOLD","LINEAR_PATH_SAMPLES","DRAG_ACTIVATION_DISTANCE_PX","DRAG_ACTIVATION_DISTANCE_PX_SQUARED","DEFAULT_HANDLE_LENGTH","SVG_WIDTH","SVG_HEIGHT","BEZIER_CONTROL_MIN_Y","BEZIER_CONTROL_MAX_Y","EASING_PRESETS","label","options","value","import_lit_html","generateGridLines","gridStep","lines","xSteps","Math","ceil","SVG_WIDTH","ySteps","SVG_HEIGHT","i","x","push","svg","y","dispatchControlEvent","host","type","detail","dispatchEvent","CustomEvent","bubbles","composed","import_lit_html","HTMLElement","easingType","points","showGrid","snapToGrid","gridSize","focusedLinearIndex","simplify","round","svgElement","CurveCanvas","lerp","lerpPoint","findTForX","splitCurveSegment","evaluateCubicPointNormalized","Component","tag","styles","canvasStyles","template","hoverPreviewPath","getHoverCurvePath","controlElements","getControlElements","hoverInsertElements","getHoverInsertElements","curvePath","getCurvePath","html","SVG_WIDTH","SVG_HEIGHT","handlePointerDown","handlePointerMove","handlePointerUp","handlePointerLeave","svg","getGridLines","_dec1","Prop","reflect","_dec2","type","Object","_dec3","Boolean","defaultValue","Number","Query","elements","point","anchorSvg","index","direction","dx","cpInX","cpOutX","dy","cpInY","cpOutY","handlePos","x","y","handleSvg","role","dragMode","isHandleActive","handlePath","push","HIT_AREA_RADIUS","Math","EasingType","LINEAR","preview","insertedPoint","anchor","undefined","handlePoint","vecX","vecY","length","sqrt","circleRadius","barHalfHeight","dirX","dirY","perpX","perpY","cx","cy","transitionZone","min","barEndDist","barTopStartX","barTopStartY","barBottomStartX","barBottomStartY","barTopEndX","barTopEndY","barBottomEndX","barBottomEndY","circleTopX","circleTopY","circleBottomX","circleBottomY","ctrl1Dist","ctrl2Dist","ctrl1TopX","ctrl1TopY","ctrl2TopX","ctrl2TopY","ctrl1BottomX","ctrl1BottomY","ctrl2BottomX","ctrl2BottomY","POSITIVE_INFINITY","minDistanceSquared","start","end","cp1","cp2","sample","LINEAR_PATH_SAMPLES","t","samplePoint","distanceSquared","distance","LINEAR_HIT_THRESHOLD","position","mouseSvg","thresholdSquared","pointSvg","handleIn","handleInSvg","hdx","hdy","handleOut","handleOutSvg","prev","next","refDx","refDy","normalizeVector","DEFAULT_HANDLE_LENGTH","normalized","referenceLength","vectorLength","inLength","outLength","mirrorLength","isLinked","targetLength","max","outDirection","inDirection","generateGridLines","CUBIC_BEZIER","event","workingPosition","currentPoint","activePointId","ensureLinearPointId","shiftKey","startPoint","get","deltaX","abs","deltaY","constrainedPoint","updatedPoints","map","i","normalizedPoints","normalizeLinearPoints","newIndex","findIndex","id","requestRender","updatedPoint","mirrorAngle","draggedLength","MIN_LINEAR_DELTA","existingLength","candidate","insertedIndex","insertedPointId","pointId","MAX_LINEAR_POINTS","clamped","clampPoint","minY","maxY","insertIndex","splitResult","newPrev","newPoint","newNext","slice","normalizedIndex","path","linearDisplayPath","_initProto","root","getRootNode","ShadowRoot","host","console","warn","anchorStart","anchorEnd","controlOne","p1","controlTwo","p2","handlePathOne","handlePathTwo","error","p","focusedIndex","forEach","isPointFocused","isDraggingPoint","isPointActive","cubicBezierPath","approxPoints","getLinearApproximation","hoverPoint","Array","isArray","Map","set","cloneLinearPoint","options","rect","getBoundingClientRect","svgX","clientX","left","svgY","clientY","top","width","height","skipSnap","shouldSnap","ratioX","ratioY","bezierBounds","BEZIER_CONTROL_MIN_Y","BEZIER_CONTROL_MAX_Y","sourcePoint","value","target","detail","dispatchControlEvent","newLinkingState","preventDefault","linearPoints","SVGElement","getAttribute","indexAttribute","parseInt","isNaN","setPointerCapture","pointerId","mode","startX","startY","insertResult","skipSnapForPending","DRAG_ACTIVATION_DISTANCE_PX_SQUARED","adjustedPosition","reference","clampedPosition","previousIndex","hasPointerCapture","releasePointerCapture","a","b","p0","p3","minT","maxT","tolerance","maxIterations","px","wasCurved","P01","P12","P23","P012","P123","P_new","import_lit_html","HTMLElement","easingType","points","focusedLinearIndex","CanvasControls","Component","tag","styles","canvasControlsStyles","template","EasingType","LINEAR","Array","isArray","focusedIndex","selectedPoint","isInnerPoint","length","hasInHandle","cpInX","undefined","cpInY","hasOutHandle","cpOutX","cpOutY","hasAnyHandle","html","isLinked","handleToggleMirrorAngle","mirrorLength","handleToggleMirrorLength","handleRemoveSmoothing","handleAddSmoothing","_dec1","Prop","reflect","_dec2","type","Object","_dec3","Number","defaultValue","point","index","prev","next","refDx","refDy","dirX","dirY","x","y","direction","normalizeVector","DEFAULT_HANDLE_LENGTH","dx","dy","normalized","referenceLength","vectorLength","inLength","outLength","targetLength","Math","max","outDirection","inDirection","_initProto","root","getRootNode","ShadowRoot","host","value","event","target","detail","dispatchControlEvent","preventDefault","updatedPoints","updatedPoint","nextState","normalizedPoints","normalizeLinearPoints","existingPoint","import_lit_html","HTMLElement","easingType","points","showGrid","snapToGrid","gridSize","focusedLinearIndex","CurveControls","Component","tag","styles","controlsStyles","template","html","_activePresetValue","handlePresetSelection","EASING_PRESETS","map","label","options","index","value","handleTypeChange","EasingType","CUBIC_BEZIER","LINEAR","_dec1","Prop","reflect","_dec2","type","Object","onChange","handlePointsPropChange","_dec3","Boolean","defaultValue","_dec4","_dec5","Number","_dec6","handleFocusedLinearIndexPropChange","requestRender","_value","isApplyingPreset","maxPointsReached","length","MAX_LINEAR_POINTS","minPointsReached","MIN_LINEAR_POINTS","renderLinearDetailsControls","focusedIndex","selectedPoint","previousIndex","nextIndex","isInnerPoint","pointMeta","x","toFixed","y","pointType","isLinked","hasInHandle","cpInX","undefined","cpInY","hasOutHandle","cpOutX","cpOutY","hasAnyHandle","event","mirrorLength","point","prev","next","refDx","refDy","dirX","dirY","direction","normalizeVector","DEFAULT_HANDLE_LENGTH","dx","dy","normalized","referenceLength","vectorLength","inLength","outLength","targetLength","Math","max","outDirection","inDirection","isStart","handleKey","handleLabel","hasHandle","neighbor","handle","fallbackDirection","finalDirection","gap","abs","baseLength","MIN_LINEAR_DELTA","min","updatedPoints","filter","_","pointIndex","normalizedPoints","normalizeLinearPoints","_initProto","root","getRootNode","ShadowRoot","host","Array","isArray","target","HTMLInputElement","axis","dataset","parsed","parseFloat","isNaN","updated","previous","minX","maxX","refreshedPoint","preventDefault","currentTarget","HTMLButtonElement","updatedPoint","nextState","mode","existingPoint","removeIncoming","removeOutgoing","neighborIndex","resetCurve","defaults","p1","p2","distributeLinearPoints","lastIndex","step","distributed","presetValue","detail","originEvent","rawValue","cssValue","trim","startsWith","parseCubicBezierValue","parsedLinear","parseLinearTimingFunction","smoothedLinear","smoothLinearPoints","handleSelectCubic","handleSelectLinear","addLinearPoint","insertIndex","largestGap","start","end","startPoint","endPoint","newPointPosition","clampPoint","newPoint","slice","insertedIndex","removeLinearPoint","removeIndex","smallestSpan","POSITIVE_INFINITY","span","toggleGrid","nextValue","toggleSnapToGrid","incrementGridSize","decrementGridSize","handleGridSliderInput","handleGridSizeChange","String","round","dispatchControlEvent","import_lit_html","HTMLElement","easingType","points","name","variant","simplify","round","CurveOutput","Component","tag","styles","outputStyles","template","html","generatedCSS","code","handleCopyClick","copyStatus","_dec1","Prop","type","String","reflect","_dec2","Object","_dec3","defaultValue","_dec4","_dec5","Number","_dec6","timingFunction","EasingType","CUBIC_BEZIER","Array","isArray","generateCubicBezierCSS","LINEAR","generateLinearCSS","isAnimating","handlePreviewClick","event","disconnectedCallback","clearTimeout","_initProto","preventDefault","navigator","clipboard","writeText","window","setTimeout","requestRender","error","console","offsetHeight","import_lit_html","HTMLElement","placement","offset","open","nextAnchorName","Popover","crypto","randomUUID","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","reflect","defaultValue","onChange","handlePlacementChange","_dec2","type","Number","handleOffsetChange","_dec3","Boolean","contentElement","connectedCallback","disconnectedCallback","render","html","requestRender","dataset","isFinite","style","setProperty","_initProto","DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","registry","toDismissContext","createOutsideClickHandle","registerOutsideClickHandle","updateOutsideClickHandles","disconnectOutsideClickHandles","requestOutsideClickUpdate","WeakMap","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","handle","handles","get","Set","set","add","forEach","OutsideClick","options","originalMethod","context","addInitializer","ensureLifecycle","resolve","host","owner","content","triggers","handle","createOutsideClickHandle","event","call","disabled","registerOutsideClickHandle","isConnected","updateOutsideClickHandles","lifecycleApplied","wrapMethod","WeakSet","name","hook","callHookFirst","original","args","result","apply","has","add","disconnectOutsideClickHandles","import_lit_html","HTMLElement","easingType","points","showGrid","snapToGrid","gridSize","simplify","round","CurveToolbar","Component","tag","styles","toolbarStyles","template","isGridAtMinimum","isGridAtMaximum","isLinear","EasingType","LINEAR","Array","isArray","html","toggleGrid","toggleSnapToGrid","resetCurve","addLinearPoint","length","MAX_LINEAR_POINTS","removeLinearPoint","MIN_LINEAR_POINTS","distributeLinearPoints","decrementGridSize","incrementGridSize","handleSimplifyInput","handleRoundInput","_dec1","Prop","reflect","_dec2","type","Object","_dec3","Boolean","defaultValue","_dec4","_dec5","Number","_dec6","_dec7","_initProto","root","getRootNode","ShadowRoot","host","value","event","target","detail","dispatchControlEvent","preventDefault","nextValue","CUBIC_BEZIER","defaults","p1","x","y","p2","lastIndex","step","distributed","map","point","index","updated","parseFloat","toFixed","cpInX","cpInY","cpOutX","cpOutY","isLinked","normalizedPoints","normalizeLinearPoints","insertIndex","largestGap","start","end","gap","startPoint","endPoint","newPointPosition","clampPoint","minY","maxY","newPoint","mirrorLength","updatedPoints","slice","insertedIndex","removeIndex","smallestSpan","POSITIVE_INFINITY","previous","next","span","filter","_","pointIndex","nextIndex","customEvent","Math","max","min","requestRender","import_lit_html","HTMLElement","name","easingType","points","showGrid","snapToGrid","gridSize","simplify","round","focusedLinearIndex","Curve","Component","tag","styles","containerStyles","template","html","_dec1","Prop","reflect","defaultValue","_dec2","EasingType","CUBIC_BEZIER","onChange","next","previous","getDefaultPointsForType","_dec3","type","Object","p1","x","y","p2","_dec4","Boolean","_dec5","_dec6","Number","_dec7","_dec8","_dec9","_dec10","Listen","target","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","passive","_dec18","handleEasingTypeChange","handleGridToggle","handleSnapToggle","handleGridSizeChange","handleSimplifyChange","handleRoundChange","handlePointsChange","handleKeyboardShortcuts","handleLinearPointFocus","event","value","detail","previousType","previousPoints","LINEAR","Array","isArray","bezierPoints","linearPoints","cubicBezierToLinearPoints","emitPointsChange","Math","max","min","requestRender","length","defaultPrevented","activeElement","HTMLInputElement","HTMLTextAreaElement","isContentEditable","index","lastIndex","clonedPoints","map","point","step","shiftKey","handled","key","minX","MIN_LINEAR_DELTA","maxX","MIN_LINEAR_POINTS","splice","normalized","normalizeLinearPoints","nextFocus","preventDefault","sourceEvent","Event","dispatchEvent","CustomEvent","bubbles","composed","_initProto","import_lit_html","HTMLElement","disabled","pill","fullWidth","type","block","variant","Button","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","Boolean","reflect","_dec2","_dec3","_dec4","String","defaultValue","_dec5","onAttributeChange","requestRender","_dec6","render","html","_initProto","CONTROL_CHANGE_EVENT","dispatchControlEvent","setBooleanAttribute","coerceNumber","readControlValue","init_shared","host","type","detail","dispatchEvent","CustomEvent","bubbles","composed","element","name","value","setAttribute","removeAttribute","parsed","Number","isNaN","String","checked","attr","getAttribute","textContent","trim","import_lit_html","HTMLElement","checked","name","value","disabled","control","Checkbox","init_shared","Component","tag","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","handleClick","connectedCallback","_prevChecked","afterRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","shadowRoot","querySelector","svg","classList","remove","animClass","duration","add","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","import_lit_html","HTMLElement","state","IconChevron","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","onAttributeChange","next","previous","shadowRoot","querySelector","animate","d","paths","duration","easing","render","html","_initProto","down","up","import_lit_html","HTMLElement","open","disabled","pill","headless","searchable","block","maxHeight","name","value","placeholder","placement","trigger","searchInput","panelContent","contentSlot","nextOptionId","nextPanelId","Dropdown","init_shared","counter","Component","tag","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","handleOpenChange","_dec2","_dec3","_dec4","_dec5","_dec6","String","defaultValue","onAttributeChange","requestRender","_dec7","style","setProperty","_dec8","_dec9","_dec10","attribute","_dec11","_dec12","Query","_dec13","_dec14","_dec15","_dec16","OutsideClick","content","host","triggers","handleOutsideDismiss","connectedCallback","disconnectedCallback","afterRender","ariaLabel","getAttribute","HTMLButtonElement","setAttribute","trim","length","removeAttribute","panel","isInteractive","id","tabIndex","setBooleanAttribute","queueMicrotask","render","placeholderActive","html","query","lowerQuery","toLowerCase","forEach","option","match","label","includes","element","display","toggle","force","originEvent","current","blur","origin","Event","focus","dispatchControlEvent","event","requestOutsideClickUpdate","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","hasAttribute","dataset","active","handlers","click","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","selected","toggleAttribute","selectedLabel","previousLabel","isSelected","fallback","hasValue","o","target","entry","preventScroll","index","normalized","Math","max","min","undefined","step","activeElement","document","currentIndex","findIndex","nextIndex","previousValue","explicitValue","text","textContent","explicitLabel","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","input","import_lit_html","HTMLElement","value","placeholder","type","name","disabled","headless","control","Input","init_shared","Component","tag","shadowMode","autoSlot","styles","template","html","Boolean","_dec1","Prop","reflect","_dec2","_dec3","defaultValue","_dec4","_dec5","_dec6","_dec7","Query","_dec8","Listen","selector","_dec9","_dec10","_dec11","onPrefixSlotChange","onSuffixSlotChange","handleInput","handleChange","updatePrefixAttribute","container","shadowRoot","querySelector","prefixSlot","hasPrefix","assignedNodes","flatten","length","setBooleanAttribute","updateSuffixAttribute","suffixSlot","hasSuffix","afterRender","event","target","dispatchControlEvent","_initProto","hsvToRgb","h","s","v","hue","saturation","clamp01","value","c","x","Math","abs","m","r","g","b","round","rgbToHsv","rn","gn","bn","max","min","delta","rgbToHex","toHex","component","toString","padStart","toUpperCase","hexToRgb","hex","normalized","trim","test","match","exec","parseInt","hexToHsv","rgb","hsvToHex","isValidHex","getLuminance","isLightColor","hsvToHsl","l","sl","hslToHsv","sv","getColorComponents","hsv","format","labels","values","suffix","hsl","updateHsvFromComponents","index","newHsv","parsed","vals","Number","COLOR_FORMATS","init_utils","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","import_lit_html","import_lit_html","HTMLElement","IconArrowsVertical","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconPicker","Component","tag","styles","template","html","import_lit_html","HTMLElement","saturationArea","hueArea","hexInput","value","ColorPicker","init_shared","init_utils","Component","tag","autoSlot","styles","template","h","s","v","hsv","pureHue","hsvToRgb","currentRgb","saturationBg","r","g","b","huePercent","vInverted","saturationHandleStyles","left","top","hueHandleStyles","isLight","isLightColor","hasEyeDropper","window","previewStyles","backgroundColor","components","getColorComponents","format","html","styleMap","handleSaturationPointerDown","handleSaturationPointerMove","handleSaturationPointerUp","handleHuePointerDown","handleHuePointerMove","handleHuePointerUp","handleEyeDropperClick","handleFormatCycle","formatAnimating","toUpperCase","values","e","handleComponentChange","target","labels","map","_","i","max","String","Number","handleCancelButtonClick","handleApplyButtonClick","_dec1","Query","_dec2","_dec3","_dec4","Prop","reflect","defaultValue","onChange","isInternalUpdate","updateFromHex","connectedCallback","originalValue","hex","isValidHex","hexToHsv","event","newValue","hsvToHex","document","activeElement","dispatchControlEvent","updateSaturationValue","rect","getBoundingClientRect","x","Math","min","width","clientX","y","height","clientY","requestRender","updateHue","button","undefined","preventDefault","stopPropagation","pointerId","setPointerCapture","hasPointerCapture","releasePointerCapture","handleHexInputChange","input","index","updateHsvFromComponents","handleFormatChange","setTimeout","currentIndex","COLOR_FORMATS","indexOf","nextIndex","length","eyeDropper","EyeDropper","result","open","sRGBHex","import_lit_html","HTMLElement","dropdown","value","disabled","placement","ColorInput","init_shared","init_picker","init_utils","Component","tag","styles","_dec1","Query","_dec2","Prop","reflect","defaultValue","onChange","next","isValidHex","normalized","toUpperCase","_dec3","type","Boolean","_dec4","connectedCallback","querySelector","setBooleanAttribute","afterRender","swatchStyle","backgroundColor","html","styleMap","render","_initProto","event","target","dispatchControlEvent","detail","requestRender","open","import_lit_html","HTMLElement","label","fullWidth","Field","Component","tag","autoSlot","shadowMode","styles","template","html","_dec1","Prop","reflect","_dec2","type","Boolean","_initProto","import_lit_html","HTMLElement","IconClear","Component","tag","styles","template","html","import_lit_html","HTMLElement","state","IconGrid","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","render","html","_initProto","import_lit_html","HTMLElement","Loading","Component","tag","styles","template","html","import_lit_html","HTMLElement","state","Snap","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","render","defaultPath","defaultPath2","activePath","activePath2","path1","path2","html","_initProto","import_lit_html","HTMLElement","IconAnchorAdd","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconAnchorRemove","Component","tag","styles","template","html","import_lit_html","HTMLElement","ArrowUp","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconBezier","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconBezierAngle","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconBezierDistribute","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconBezierLength","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconBezierMirror","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconCheck","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconCircleArrowLeft","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconCircleArrowRight","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconCode","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconDots","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconMention","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconMinus","Component","tag","styles","template","html","import_lit_html","HTMLElement","IconPlus","Component","tag","styles","template","html","import_lit_html","HTMLElement","Settings","Component","tag","styles","template","html","init_code","import_lit_html","HTMLElement","loading","intro","size","ariaLabel","CENTER","DOTS_DATA","INNER_DOT_IDS","OUTER_DOT_IDS","forceReflow","getAngle","sortByAngle","LOOP_DURATION","ROTATION_DURATION","LogoLoader","x","y","id","cx","cy","map","d","filter","includes","el","window","getComputedStyle","opacity","dot","Math","atan2","ids","find","sort","a","b","Component","tag","styles","template","host","state","ariaLabelTrimmed","trim","html","_dec1","Prop","type","Boolean","attribute","defaultValue","onChange","next","handleLoadingChange","_dec2","_dec3","Number","_dec4","value","requestRender","connectedCallback","requestAnimationFrame","disconnectedCallback","clearTimeout","fn","delay","setTimeout","push","svg","shadowRoot","querySelector","instant","keepOpacity","container","innerHTML","style","transition","classList","remove","removeProperty","transform","onComplete","innerDotIds","Set","innerDots","has","outerDots","orderedInner","forEach","index","fill","orderedOuter","particles","finalAngle","startDistance","random","angleVariation","PI","startAngle","startX","cos","startY","sin","curvature","controlAngle","controlDistance","controlX","controlY","group","floor","groupDelay","withinGroupDelay","duration","impactTime","rotationSpeed","isInner","shockwaveParticles","p","slice","shockwaveSet","particle","steps","step","animateStep","progress","t","mt","easeOut","scale","rotation","bounceDuration","add","earlyRevealTime","max","maxTime","ring","document","createElementNS","setAttribute","String","appendChild","performance","now","orderedInnerDots","seedDelay","targetScale","setProperty","angle","normalizedAngle","animationDelayMs","orderedOuterDots","baseScale","elapsed","timeInCycle","timeLeft","orderedAllDots","i","length","playIntro","variant","originalIntro","_initProto","Watch","options","compare","defaultCompare","onChange","transform","accessor","context","kind","Error","get","call","set","value","previous","scheduleRender","init","initialValue","renderQueue","WeakMap","instance","requestRender","render","requestAnimationFrame","next","import_lit_html","HTMLElement","paused","canvasEl","clamp","mean","quantile","computePercentile","computeMedian","formatNumber","formatMs","rateFps","MonitorFps","value","min","max","Math","values","length","sum","sorted","q","clamped","index","floor","sort","a","b","decimals","Number","isFinite","toFixed","fps","targetFps","target","ratio","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","defaultValue","_dec2","Query","connectedCallback","document","hidden","disconnectedCallback","removeEventListener","afterRender","render","hz","refreshRate","rating","subtitleParts","frameTimeAvg","frameTimeP95","filter","html","join","droppedFrames","jankFrames","longFrames","frameTimeMax","addEventListener","passive","now","performance","requestAnimationFrame","cancelAnimationFrame","frameWindow","slice","fpsWindow","frameAvg","frameP95","frameMax","median","ideal","ft","missed","round","dispatchEvent","CustomEvent","detail","bubbles","composed","canvas","rect","getBoundingClientRect","dpr","window","devicePixelRatio","width","height","ctx","getContext","setTransform","clearRect","samples","scaleMax","stroke","save","globalAlpha","strokeStyle","lineWidth","setLineDash","drawGuide","y","beginPath","moveTo","lineTo","restore","toY","i","x","closePath","fillStyle","fill","lineJoin","lineCap","_initProto","delta","push","shift","elapsed","fpsSample","requestRender","import_lit_html","HTMLElement","metrics","network","METRIC_THRESHOLDS","GLOBAL_BENCHMARKS","rateMetric","formatMetric","formatBytes","estimateCarbonFootprint","Monitor","LCP","good","poor","INP","CLS","FCP","ttfb","loadTime","domInteractive","fps","TBT","metric","value","thresholds","toFixed","Math","round","bytes","decimals","Number","isFinite","k","dm","sizes","i","floor","log","parseFloat","totalBytes","emissions","Component","tag","styles","_dec1","Watch","_dec2","_dec3","Listen","handleFpsUpdate","connectedCallback","initObservers","collectInitialMetrics","startMemoryMonitoring","initNetworkMonitoring","document","readyState","window","addEventListener","handlePageLoad","disconnectedCallback","observers","forEach","observer","disconnect","stopMemoryMonitoring","stopNetworkMonitoring","removeEventListener","event","detail","updateTrend","requestRender","console","warn","PerformanceObserver","list","entry","getEntries","processPerformanceEntry","observe","type","buffered","push","e","error","collectNavigationTiming","resourceEntries","performance","getEntriesByType","processResourceEntries","navigationEntries","length","navTiming","responseStart","fetchStart","loadEventEnd","startTime","navigation","entryType","coreWebVitals","eventEntry","interactionId","duration","maxINP","inpEntries","lsEntry","hadRecentInput","clsEntries","calculateSessionWindowCLS","name","ltEntry","longTaskEntries","calculateLongTasksAndTBT","maxCls","currentSessionCls","sessionStartTime","Infinity","lastTime","sort","a","b","timeDiff","max","entries","summary","resources","size","transferSize","initiator","initiatorType","toLowerCase","endsWith","js","count","css","test","img","other","totalSize","tbt","referenceTime","task","longTasks","totalDuration","memory","updateMemory","mem","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memoryInterval","setInterval","clearInterval","navigator","connection","updateNetworkInfo","key","history","trendHistory","maxTrendLength","shift","getTrendDirection","currentValue","previousAvg","slice","reduce","threshold","abs","delta","getOverallStatus","ratings","includes","every","r","some","render","html","renderExpanded","renderVitalsAndTiming","renderRealtime","renderNetworkInfo","renderResources","renderMetricBox","label","description","rating","formattedValue","trend","benchmark","vsBenchmark","renderMemory","usedPercent","styleObject","width","min","effectiveType","rtt","toUpperCase","totalCount","renderItem","data","_initProto","setTimeout","import_lit_html","HTMLElement","value","min","max","step","name","disabled","control","NumberInput","init_shared","Component","tag","styles","template","html","handleInput","handleChange","handleDecrement","bind","Number","handleIncrement","_dec1","Prop","type","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Boolean","_dec7","Query","_dec8","Listen","selector","_dec9","afterRender","undefined","String","setBooleanAttribute","event","target","coerceNumber","dispatchControlEvent","addActiveLayer","button","layer","document","createElement","classList","add","appendChild","setTimeout","remove","currentTarget","current","_initProto","import_lit_html","HTMLElement","value","disabled","control","name","Origin","init_shared","Component","tag","styles","template","html","handleValueChange","_dec1","Prop","reflect","defaultValue","_dec2","type","Boolean","_dec3","Query","_dec4","_dec5","Listen","selector","handleChange","afterRender","setBooleanAttribute","event","target","String","dispatchControlEvent","_initProto","import_lit_html","HTMLElement","activeTab","contentElement","bodyElement","Panel","init_shared","Component","tag","shadowMode","styles","_dec1","Prop","type","Number","reflect","attribute","defaultValue","onChange","next","previous","self","undefined","handleActiveTabChange","_dec2","Query","_dec3","_dec4","Listen","selector","_dec5","onFooterSlotChange","onDefaultSlotChange","performTabAnimation","tabs","setTab","index","length","connectedCallback","afterRender","render","hasTabs","html","nothing","map","tab","id","e","label","event","dispatchEvent","CustomEvent","detail","bubbles","composed","currentIndex","newIndex","key","preventDefault","queueMicrotask","tabButtons","shadowRoot","querySelectorAll","newTabButton","focus","fromIndex","toIndex","duration","easing","content","requestRender","fromPanel","querySelector","toPanel","startHeight","getBoundingClientRect","height","style","display","opacity","fadeOut","animate","fill","finished","cancel","setAttribute","previousToState","getAttribute","visibility","offsetHeight","endHeight","fadeIn","removeAttribute","ms","Promise","resolve","setTimeout","child","Array","from","children","slot","startsWith","replace","push","slice","updateFooterAttribute","footer","footerSlot","hasFooter","Boolean","assignedNodes","flatten","setBooleanAttribute","_initProto","RadioOption","HTMLElement","connectedCallback","hidden","hasAttribute","setAttribute","customElements","get","define","import_lit_html","HTMLElement","value","groupElement","contentSlot","nextOptionId","nextPanelId","RadioGroup","init_shared","counter","Component","tag","shadowMode","styles","template","html","_dec1","Prop","reflect","defaultValue","onChange","next","previous","updateOptionSelectionState","_dec2","Query","_dec3","connectedCallback","disconnectedCallback","afterRender","panel","id","tabIndex","setAttribute","queueMicrotask","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","forEach","element","hasAttribute","getAttribute","label","trim","length","dataset","active","handlers","click","event","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","option","selected","selectedLabel","isSelected","fallback","hasValue","Boolean","toggleAttribute","originEvent","previousValue","explicitValue","text","textContent","explicitLabel","dispatchControlEvent","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","import_lit_html","HTMLElement","checked","name","value","disabled","control","RadioInput","init_shared","Component","tag","shadowMode","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","onChange","next","form","closest","root","getRootNode","others","Array","from","querySelectorAll","forEach","other","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","handleClick","connectedCallback","_prevChecked","afterRender","_firstRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","input","shadowRoot","querySelector","svg","classList","remove","animClass","add","duration","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","import_lit_html","HTMLElement","value","min","max","step","disabled","control","valueControl","Slider","init_shared","Component","tag","styles","template","html","String","Boolean","undefined","_dec1","Prop","type","Number","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Query","_dec7","_dec8","Listen","selector","_dec9","_dec10","when","event","CustomEvent","detail","_dec11","handleRangeInput","handleRangeChange","handleValueInput","handleValueChange","afterRender","setAttribute","setBooleanAttribute","updateProgress","target","numericValue","coerceNumber","dispatchControlEvent","rawValue","percent","style","setProperty","Math","_initProto","import_lit_html","HTMLElement","value","defaultSlot","readControlValue","getControlName","State","init_shared","element","checked","attr","getAttribute","textContent","trim","name","Component","tag","shadowMode","styles","_dec1","Prop","reflect","_dec2","Query","_dec3","Listen","target","host","_dec4","_dec5","CONTROL_CHANGE_EVENT","handleInternalInput","handleInternalChange","handleControlChange","state","get","set","control","Event","subscribe","nameOrCallback","callback","cb","Error","has","Set","add","unsubscribe","delete","reset","Object","entries","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","render","html","event","detail","Element","slot","findControls","el","controls","push","shadowRoot","child","querySelectorAll","childName","clear","elements","assignedElements","flatten","first","values","next","String","prevValue","dispatchControlEvent","_initProto","Map","import_lit_html","HTMLElement","checked","disabled","control","Toggle","init_shared","Component","tag","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","Query","_dec4","Listen","selector","handleClick","afterRender","setAttribute","setBooleanAttribute","event","preventDefault","stopPropagation","dispatchControlEvent","value","_initProto","crypto","randomUUID","import_lit_html","HTMLElement","open","delay","placement","triggerElement","contentElement","Tooltip","Component","tag","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","_handleOpenChange","_dec2","Number","defaultValue","_dec3","_dec4","Query","_dec5","_dec6","OutsideClick","content","host","triggers","disabled","handleOutsideDismiss","disconnectedCallback","removeEventListener","afterRender","isVisible","setAttribute","dataset","hidden","render","html","requestOutsideClickUpdate","window","clearTimeout","callback","wait","setTimeout","trigger","addEventListener","_initProto","injectStyle","id","css","nonce","isBrowser","fullId","STYLE_ID_PREFIX","style","document","getElementById","textContent","createElement","head","appendChild","removeStyle","remove","hasStyle","getPresetCSS","preset","RESET_CSS","BASE_CSS","MAIN_CSS","injectPreset","removePreset","window","trim","buildGoogleFontUrl","family","css2","encodedFamily","encodeURIComponent","replace","params","injectPreconnect","isBrowser","document","getElementById","PRECONNECT_ID","head","preconnect1","createElement","id","rel","href","appendChild","preconnect2","crossOrigin","injectFontLink","url","fullId","FONT_LINK_ID_PREFIX","link","removeFontLink","remove","injectFonts","config","preconnect","fonts","DEFAULT_FONTS","hasGoogleFonts","Object","values","some","f","source","name","entries","toLowerCase","removeFonts","keys","init_picker","init_input","loadComponents","tags","promises","map","tag","loader","COMPONENT_LOADERS","Promise","resolve","all","loadAllComponents","resolveTags","options","include","exclude","length","filter","WEB_KIT_ALL_TAGS","includes","excludeSet","Set","has","WEB_KIT_ELEMENT_TAGS","WEB_KIT_COMPONENT_TAGS","WEB_KIT_INTERNAL_TAGS","createLazyLoader","config","isBrowser","dispose","load","root","document","include","exclude","preload","watchTags","Set","WEB_KIT_ALL_TAGS","length","filter","tag","includes","delete","loaded","has","loader","COMPONENT_LOADERS","add","checkElement","element","tagName","toLowerCase","child","querySelectorAll","childTag","observer","MutationObserver","mutations","mutation","node","addedNodes","Element","target","Document","documentElement","observe","childList","subtree","disconnect","Component","Listen","OutsideClick","Prop","Query","dispatchControlEvent","styleObject","import_lit_html","styleCache","Map","normalizeTemplate","template","fetchStyles","urls","Promise","all","map","url","cached","get","request","fetch","then","response","ok","text","catch","set","Component","options","Base","_context","tag","styles","styleUrls","observedAttributes","shadowMode","autoSlot","Error","templateFn","Decorated","parent","Array","isArray","own","from","Set","args","attachShadow","mode","renderRoot","shadow","connectedCallback","prototype","call","finally","requestRender","disconnectedCallback","attributeChangedCallback","name","oldValue","newValue","onAttributeChange","requestAnimationFrame","length","fetched","inlineStyles","filter","Boolean","join","root","templateResult","render","styleTemplate","html","slotTemplate","completeTemplate","commit","afterRender","wrapRender","fragment","document","createDocumentFragment","tempDiv","createElement","append","childNodes","customElements","define","lifecycleHooks","connectedCallback","WeakMap","disconnectedCallback","cleanupRegistry","addLifecycleHook","instance","hookName","handler","store","callbacks","get","Set","set","original","args","forEach","callback","apply","undefined","add","registerCleanup","cleanup","registered","fn","error","console","delete","resolveTarget","host","target","EventTarget","document","window","renderRoot","shadowRoot","normalizeOptions","selectorOrOptions","selector","buildOptions","options","prevent","stop","stopImmediate","once","passive","capture","when","Listen","eventName","Error","listenConfig","originalMethod","context","addInitializer","attached","attach","addEventListener","warn","String","eventOptions","event","typedEvent","preventDefault","stopImmediatePropagation","stopPropagation","matched","path","composedPath","find","node","Element","matches","call","targetNode","removeEventListener","queueMicrotask","lifecycleApplied","WeakSet","wrapMethod","host","name","hook","callHookFirst","original","args","call","result","apply","ensureLifecycle","has","add","updateOutsideClickHandles","disconnectOutsideClickHandles","OutsideClick","options","originalMethod","context","addInitializer","resolve","owner","content","triggers","handle","createOutsideClickHandle","event","disabled","registerOutsideClickHandle","isConnected","renderQueue","WeakMap","cleanupRegistry","observerRegistry","internalMutations","scheduleRender","instance","requestRender","render","get","set","requestAnimationFrame","delete","toKebabCase","value","String","replace","toLowerCase","registerCleanup","cleanup","callbacks","Set","original","disconnectedCallback","args","registered","forEach","callback","error","console","apply","undefined","add","markInternalMutation","host","attribute","attributes","isInternalMutation","hasAttribute","has","size","observeAttribute","handler","entry","Map","observer","MutationObserver","records","record","attributeName","listeners","currentValue","target","getAttribute","listener","observe","disconnect","updateAttribute","removeAttribute","setAttribute","resolveType","type","Boolean","Number","Object","Array","typeParsers","boolean","number","parsed","isNaN","json","JSON","parse","warn","string","typeFormatters","stringify","defaultCompare","previous","next","Prop","options","reflect","format","defaultValue","compare","onChange","onAttributeChange","resolvedType","parseValue","call","formatValue","accessor","context","kind","Error","name","addInitializer","rawValue","formatted","init","initialValue","defaultOptions","all","closest","from","fallback","resolveFallback","host","resolveRoot","option","document","renderRoot","shadowRoot","resolveQuery","selector","options","result","root","elements","Array","querySelectorAll","length","match","querySelector","createQueryDecorator","_target","context","kind","descriptor","get","set","_value","addInitializer","Object","defineProperty","name","configurable","enumerable","Query","userOptions","Error","merged","renderQueue","WeakMap","scheduleRender","instance","requestRender","render","get","set","requestAnimationFrame","defaultCompare","previous","next","Watch","options","compare","onChange","transform","accessor","context","kind","Error","call","value","init","initialValue","init_picker","init_input","init_shared","defaultColors","gray","blue","green","red","orange","yellow","white","black","whiteAlpha","blackAlpha","foreground","defaultRadii","sm","md","lg","xl","full","defaultSpacing","xs","defaultTypography","fontFamily","fontMono","fontSize","lineHeight","defaultEaseVars","defaultThemeConfig","colors","defaultColors","radii","defaultRadii","spacing","defaultSpacing","typography","defaultTypography","vars","DEFAULT_THEME_NAME","DARK_THEME_ALIAS","registry","Map","mergeConfigs","base","overrides","colors","gray","blue","green","red","orange","yellow","whiteAlpha","blackAlpha","radii","spacing","typography","vars","resolveThemeConfig","name","visited","Set","has","Error","Array","from","join","entry","get","resolved","add","config","baseConfig","initBuiltInThemes","DEFAULT_THEME_NAME","set","defaultThemeConfig","DARK_THEME_ALIAS","isThemeRef","value","__brand","isThemeConfig","obj","undefined","registerTheme","options","baseName","values","getTheme","theme","hasTheme","getThemeNames","keys","themeRef","CSS_PREFIX","RADII_PREFIX","SPACING_PREFIX","TYPOGRAPHY_PREFIX","toVarName","prefix","parts","join","generateColorScaleVars","name","scale","vars","level","value","Object","entries","undefined","withAlpha","color","alpha","trimmed","trim","match","exec","fn","innerRaw","inner","includes","pct","Math","round","generateColorVars","colors","gray","assign","blue","green","red","orange","yellow","white","black","whiteAlpha","blackAlpha","foreground","resolveThemeTarget","element","document","documentElement","generateRadiiVars","radii","generateSpacingVars","spacing","generateTypographyVars","typography","fontFamily","fontMono","fontSize","lineHeight","normalizeCustomVarName","startsWith","generateCustomVars","out","key","String","generateThemeVars","config","createTheme","selector","declarations","map","defineTheme","target","style","setProperty","removeTheme","keys","removeProperty","getThemeValue","token","getComputedStyle","varName","getPropertyValue","setThemeValue","EASE_THEME_ATTRIBUTE","mergeTheme","overrides","defaultColors","defaultRadii","defaultSpacing","defaultTypography","createDarkTheme","setThemeName","options","attribute","setAttribute","colorScheme","setColorScheme","getThemeName","getAttribute","applyTheme","theme","mergeWithDefaults","getSystemThemeMode","window","matchMedia","matches","followSystemTheme","themes","media","apply","mode","light","dark","lightName","darkName","addEventListener","removeEventListener","isBrowser","document","window","isThemeModeConfig","value","obj","mode","undefined","light","dark","registerReplacements","replace","tag","replacement","Object","entries","customElements","get","define","aliasTag","BridgeElement","HTMLElement","connectedCallback","_inner","createElement","attr","attributes","setAttribute","name","firstChild","appendChild","shadow","attachShadow","disconnectedCallback","applyStyles","styles","nonce","dispose","injectPreset","removePreset","injected","push","reset","base","preset","applyThemeConfig","theme","target","lightConfig","getTheme","darkConfig","cleanup","followSystemTheme","element","controller","set","t","config","applyTheme","m","systemMode","matchMedia","matches","colorScheme","resolvedConfig","isThemeRef","themeName","initWebKit","options","ready","Promise","resolve","include","exclude","fonts","lazyLoad","cspNonce","dev","disposers","readyPromise","stylesResult","themeResult","injectFonts","removeFonts","fontsToRemove","createLazyLoader","lazyConfig","loader","loadAllComponents","loadComponents","resolveTags","tags","warnUnknownTags","WEB_KIT_ALL_TAGS","allTags","Set","unknown","filter","has","length","console","warn","logLoads","log","import_lit_html","import_class_map","import_if_defined","import_repeat","import_style_map","import_unsafe_html","import_when","renderIf","condition","template","nothing","renderList","items","key","item","repeat","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","optionalAttribute","ifDefined"]}