@mhmo91/schmancy 0.9.28 → 0.10.2

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 (1049) hide show
  1. package/custom-elements.json +1005 -2215
  2. package/dist/active-host-CcIa2tmW.cjs +1 -0
  3. package/dist/active-host-CcIa2tmW.cjs.map +1 -0
  4. package/dist/active-host-CvNYoprt.js +57 -0
  5. package/dist/active-host-CvNYoprt.js.map +1 -0
  6. package/dist/agent/{flow-CvG1fLW5.js.map → flow-CaPi2G8y.js.map} +1 -1
  7. package/dist/agent/{rolldown-runtime-BIIoCavz.js → rolldown-runtime-DsMetpgY.js} +2 -9
  8. package/dist/agent/schmancy.agent.js +12678 -7791
  9. package/dist/agent/schmancy.agent.js.map +1 -1
  10. package/dist/agent/schmancy.manifest.json +265 -1453
  11. package/dist/agent/{vendor-highlight-Dow87ZL_.js → vendor-highlight-CHJZQQB7.js} +85 -90
  12. package/dist/agent/{vendor-highlight-Dow87ZL_.js.map → vendor-highlight-CHJZQQB7.js.map} +1 -1
  13. package/dist/agent/{vendor-jsqr-Bl4iAtKC.js → vendor-jsqr-r7GNh4P3.js} +1 -1
  14. package/dist/agent/{vendor-jsqr-Bl4iAtKC.js.map → vendor-jsqr-r7GNh4P3.js.map} +1 -1
  15. package/dist/agent/{vendor-material-color-DcL7ZPxx.js.map → vendor-material-color-Be96dpGE.js.map} +1 -1
  16. package/dist/{animation-hXFClrIn.js.map → animation-BK-8BwY8.js.map} +1 -1
  17. package/dist/{animation-CQRdLgzX.cjs.map → animation-CO_Csq84.cjs.map} +1 -1
  18. package/dist/{area-BGBCMC79.js → area-DHVANBbr.js} +20 -15
  19. package/dist/area-DHVANBbr.js.map +1 -0
  20. package/dist/area-ZupIezvU.cjs +12 -0
  21. package/dist/area-ZupIezvU.cjs.map +1 -0
  22. package/dist/area.cjs +1 -1
  23. package/dist/area.js +2 -2
  24. package/dist/{audio-Dvr-RBzE.cjs → audio-CluX8Qpq.cjs} +1 -1
  25. package/dist/{audio-Dvr-RBzE.cjs.map → audio-CluX8Qpq.cjs.map} +1 -1
  26. package/dist/{audio-ql6nvY0y.js → audio-DcXphulJ.js} +1 -1
  27. package/dist/{audio-ql6nvY0y.js.map → audio-DcXphulJ.js.map} +1 -1
  28. package/dist/audio.cjs +1 -1
  29. package/dist/audio.js +2 -2
  30. package/dist/autocomplete-Bn525CTp.cjs +115 -0
  31. package/dist/autocomplete-Bn525CTp.cjs.map +1 -0
  32. package/dist/{autocomplete-C2P0Soht.js → autocomplete-pHvsyfbH.js} +29 -26
  33. package/dist/autocomplete-pHvsyfbH.js.map +1 -0
  34. package/dist/autocomplete.cjs +1 -1
  35. package/dist/autocomplete.js +1 -1
  36. package/dist/avatar.cjs +7 -0
  37. package/dist/avatar.cjs.map +1 -0
  38. package/dist/avatar.js +87 -0
  39. package/dist/avatar.js.map +1 -0
  40. package/dist/badge.cjs +1 -1
  41. package/dist/badge.js +1 -1
  42. package/dist/boat-IyEtsNI4.cjs +80 -0
  43. package/dist/boat-IyEtsNI4.cjs.map +1 -0
  44. package/dist/{boat-DXZ0k7oa.js → boat-_Yv3M6YM.js} +43 -54
  45. package/dist/boat-_Yv3M6YM.js.map +1 -0
  46. package/dist/boat.cjs +1 -1
  47. package/dist/boat.js +1 -1
  48. package/dist/breadcrumb.cjs +4 -4
  49. package/dist/breadcrumb.cjs.map +1 -1
  50. package/dist/breadcrumb.js +16 -11
  51. package/dist/breadcrumb.js.map +1 -1
  52. package/dist/{busy-DGYhpTnO.cjs → busy-CjM39APN.cjs} +4 -4
  53. package/dist/busy-CjM39APN.cjs.map +1 -0
  54. package/dist/{busy-iRjq6Nvd.js → busy-Ck2IXJ4r.js} +14 -9
  55. package/dist/busy-Ck2IXJ4r.js.map +1 -0
  56. package/dist/busy.cjs +1 -1
  57. package/dist/busy.js +1 -1
  58. package/dist/button.cjs +24 -24
  59. package/dist/button.cjs.map +1 -1
  60. package/dist/button.js +42 -37
  61. package/dist/button.js.map +1 -1
  62. package/dist/{card-DjYnCckw.cjs → card-DIxDuuth.cjs} +6 -6
  63. package/dist/card-DIxDuuth.cjs.map +1 -0
  64. package/dist/{card-wUTjx0EC.js → card-DUWZmMHc.js} +41 -30
  65. package/dist/card-DUWZmMHc.js.map +1 -0
  66. package/dist/card.cjs +1 -1
  67. package/dist/card.js +1 -1
  68. package/dist/charts.cjs +5 -5
  69. package/dist/charts.cjs.map +1 -1
  70. package/dist/charts.js +21 -16
  71. package/dist/charts.js.map +1 -1
  72. package/dist/checkbox-CGdFXuWQ.cjs +39 -0
  73. package/dist/checkbox-CGdFXuWQ.cjs.map +1 -0
  74. package/dist/{checkbox-VBSenxgb.js → checkbox-DPS1mWG-.js} +86 -82
  75. package/dist/checkbox-DPS1mWG-.js.map +1 -0
  76. package/dist/checkbox.cjs +1 -1
  77. package/dist/checkbox.js +1 -1
  78. package/dist/{chips-BDS9lkPa.js → chips-BnnXQSA-.js} +146 -136
  79. package/dist/chips-BnnXQSA-.js.map +1 -0
  80. package/dist/{chips-D6ptH5re.cjs → chips-UoFbwmlG.cjs} +19 -19
  81. package/dist/chips-UoFbwmlG.cjs.map +1 -0
  82. package/dist/chips.cjs +1 -1
  83. package/dist/chips.js +2 -2
  84. package/dist/{code-highlight-BzRmBZzz.cjs → code-highlight-CMilN0B8.cjs} +15 -15
  85. package/dist/code-highlight-CMilN0B8.cjs.map +1 -0
  86. package/dist/{code-highlight-Bi91XHJN.js → code-highlight-kFUJ1Eet.js} +37 -40
  87. package/dist/code-highlight-kFUJ1Eet.js.map +1 -0
  88. package/dist/code-highlight.cjs +1 -1
  89. package/dist/code-highlight.js +1 -1
  90. package/dist/connectivity.cjs +2 -2
  91. package/dist/connectivity.cjs.map +1 -1
  92. package/dist/connectivity.js +10 -7
  93. package/dist/connectivity.js.map +1 -1
  94. package/dist/content-drawer.cjs +1 -1
  95. package/dist/content-drawer.js +2 -2
  96. package/dist/context-Bdu1xt0W.js +3 -0
  97. package/dist/{context-BerzpUhI.js.map → context-Bdu1xt0W.js.map} +1 -1
  98. package/dist/context-daN5G6HS.cjs +1 -0
  99. package/dist/{context-C6dHUHhi.cjs.map → context-daN5G6HS.cjs.map} +1 -1
  100. package/dist/{cursor-glow-BydlDInj.js → cursor-glow-Ah7VXSj7.js} +1 -1
  101. package/dist/{cursor-glow-BydlDInj.js.map → cursor-glow-Ah7VXSj7.js.map} +1 -1
  102. package/dist/{cursor-glow-Duw9jHmh.cjs → cursor-glow-Bulq-38P.cjs} +1 -1
  103. package/dist/{cursor-glow-Duw9jHmh.cjs.map → cursor-glow-Bulq-38P.cjs.map} +1 -1
  104. package/dist/date-range-BIyrzTRZ.cjs +131 -0
  105. package/dist/date-range-BIyrzTRZ.cjs.map +1 -0
  106. package/dist/{date-range-ClTMg1AB.js → date-range-DOstCIg8.js} +16 -17
  107. package/dist/date-range-DOstCIg8.js.map +1 -0
  108. package/dist/date-range-inline-4P7zqeVe.cjs +43 -0
  109. package/dist/{date-range-inline-B9Dp2z6C.cjs.map → date-range-inline-4P7zqeVe.cjs.map} +1 -1
  110. package/dist/{date-range-inline-CpKG6qt2.js → date-range-inline-BVycTWLb.js} +5 -5
  111. package/dist/{date-range-inline-CpKG6qt2.js.map → date-range-inline-BVycTWLb.js.map} +1 -1
  112. package/dist/date-range-inline.cjs +1 -1
  113. package/dist/date-range-inline.js +1 -1
  114. package/dist/date-range.cjs +1 -1
  115. package/dist/date-range.js +1 -1
  116. package/dist/delay.cjs +9 -1
  117. package/dist/delay.cjs.map +1 -0
  118. package/dist/delay.js +77 -2
  119. package/dist/delay.js.map +1 -0
  120. package/dist/{details-Cz9ok9si.cjs → details-BJBbZOO6.cjs} +9 -9
  121. package/dist/details-BJBbZOO6.cjs.map +1 -0
  122. package/dist/{details-CPjlqQD4.js → details-DPc5GxPa.js} +19 -18
  123. package/dist/details-DPc5GxPa.js.map +1 -0
  124. package/dist/details.cjs +1 -1
  125. package/dist/details.js +1 -1
  126. package/dist/{dialog-service-DH-tjPuE.js → dialog-service-DI9PPy4H.js} +2 -2
  127. package/dist/dialog-service-DI9PPy4H.js.map +1 -0
  128. package/dist/{dialog-service-CzDO08Gy.cjs → dialog-service-DJd5L0f5.cjs} +1 -1
  129. package/dist/dialog-service-DJd5L0f5.cjs.map +1 -0
  130. package/dist/dialog.cjs +2 -2
  131. package/dist/dialog.cjs.map +1 -1
  132. package/dist/dialog.js +13 -14
  133. package/dist/dialog.js.map +1 -1
  134. package/dist/directives.cjs +2 -11
  135. package/dist/directives.cjs.map +1 -1
  136. package/dist/directives.js +141 -227
  137. package/dist/directives.js.map +1 -1
  138. package/dist/discovery.cjs +1 -1
  139. package/dist/discovery.cjs.map +1 -1
  140. package/dist/discovery.js +1 -1
  141. package/dist/discovery.js.map +1 -1
  142. package/dist/{divider-ghgyw5CU.js → divider-BvJsmSPH.js} +11 -9
  143. package/dist/divider-BvJsmSPH.js.map +1 -0
  144. package/dist/{divider-CILo3_vi.cjs → divider-DPT3XnG5.cjs} +3 -3
  145. package/dist/divider-DPT3XnG5.cjs.map +1 -0
  146. package/dist/divider.cjs +1 -1
  147. package/dist/divider.js +1 -1
  148. package/dist/dropdown.cjs +4 -4
  149. package/dist/dropdown.cjs.map +1 -1
  150. package/dist/dropdown.js +29 -28
  151. package/dist/dropdown.js.map +1 -1
  152. package/dist/{expand-CbjBr_Ds.js → expand-BMzocdtj.js} +24 -20
  153. package/dist/expand-BMzocdtj.js.map +1 -0
  154. package/dist/expand-CTqBWVXo.cjs +141 -0
  155. package/dist/expand-CTqBWVXo.cjs.map +1 -0
  156. package/dist/expand.cjs +1 -1
  157. package/dist/expand.js +1 -1
  158. package/dist/{extra-DK9MQtPJ.js → extra-BeHlUhzv.js} +19 -14
  159. package/dist/extra-BeHlUhzv.js.map +1 -0
  160. package/dist/{extra-BZeZOMBI.cjs → extra-h_cuxRII.cjs} +6 -6
  161. package/dist/extra-h_cuxRII.cjs.map +1 -0
  162. package/dist/extra.cjs +1 -1
  163. package/dist/extra.js +1 -1
  164. package/dist/{float-BfCvGeY9.js → float-CTc1xxqH.js} +2 -2
  165. package/dist/{float-BfCvGeY9.js.map → float-CTc1xxqH.js.map} +1 -1
  166. package/dist/float-CwVBs11k.cjs +1 -0
  167. package/dist/{float-CuZ8LOgB.cjs.map → float-CwVBs11k.cjs.map} +1 -1
  168. package/dist/float.cjs +1 -1
  169. package/dist/float.js +1 -1
  170. package/dist/{form-rCZqoAoK.js → form-BtwOBMZ9.js} +1 -1
  171. package/dist/form-BtwOBMZ9.js.map +1 -0
  172. package/dist/{form-wI58M85H.cjs → form-CSJp687X.cjs} +1 -1
  173. package/dist/form-CSJp687X.cjs.map +1 -0
  174. package/dist/form.cjs +1 -1
  175. package/dist/form.js +1 -1
  176. package/dist/handover/agent-runtime-followups.md +1 -1
  177. package/dist/handover/agent-runtime-v1.md +3 -3
  178. package/dist/handover/claude-design-brief.md +19 -54
  179. package/dist/handover/claude-design-setup.md +57 -0
  180. package/dist/{hashContent-B2IntJQf.js.map → hashContent-1ARKIsx9.js.map} +1 -1
  181. package/dist/{hashContent-CahnEuut.cjs.map → hashContent-Bp5S6T4U.cjs.map} +1 -1
  182. package/dist/{icons-Drq4kKy2.js → icons-BbCVrcas.js} +27 -24
  183. package/dist/icons-BbCVrcas.js.map +1 -0
  184. package/dist/icons-qEQW4pjM.cjs +52 -0
  185. package/dist/icons-qEQW4pjM.cjs.map +1 -0
  186. package/dist/icons.cjs +1 -1
  187. package/dist/icons.js +1 -1
  188. package/dist/{iframe-BmyHW8km.js → iframe-BJfDIEJf.js} +17 -11
  189. package/dist/iframe-BJfDIEJf.js.map +1 -0
  190. package/dist/iframe-D6HTruav.cjs +24 -0
  191. package/dist/iframe-D6HTruav.cjs.map +1 -0
  192. package/dist/iframe.cjs +1 -1
  193. package/dist/iframe.js +1 -1
  194. package/dist/index.cjs +1 -1
  195. package/dist/index.js +77 -77
  196. package/dist/{input-Bc3bVISm.js → input-LTK3cctF.js} +34 -34
  197. package/dist/input-LTK3cctF.js.map +1 -0
  198. package/dist/input-U26axtcs.cjs +51 -0
  199. package/dist/input-U26axtcs.cjs.map +1 -0
  200. package/dist/{input-chip-DN-cwf11.cjs → input-chip-CADXt0X5.cjs} +2 -2
  201. package/dist/input-chip-CADXt0X5.cjs.map +1 -0
  202. package/dist/{input-chip-BQrjpjaQ.js → input-chip-Ch-aCs3c.js} +7 -4
  203. package/dist/input-chip-Ch-aCs3c.js.map +1 -0
  204. package/dist/input.cjs +1 -1
  205. package/dist/input.js +1 -1
  206. package/dist/json.cjs +1 -1
  207. package/dist/json.cjs.map +1 -1
  208. package/dist/json.js +7 -5
  209. package/dist/json.js.map +1 -1
  210. package/dist/kbd.cjs +2 -2
  211. package/dist/kbd.cjs.map +1 -1
  212. package/dist/kbd.js +9 -7
  213. package/dist/kbd.js.map +1 -1
  214. package/dist/{layout-fjM1DWlF.js → layout-C4xmnU4n.js} +1 -1
  215. package/dist/{layout-fjM1DWlF.js.map → layout-C4xmnU4n.js.map} +1 -1
  216. package/dist/{layout-CTfRXQoz.cjs → layout-Dmh6fxh0.cjs} +1 -1
  217. package/dist/{layout-CTfRXQoz.cjs.map → layout-Dmh6fxh0.cjs.map} +1 -1
  218. package/dist/layout.cjs +1 -1
  219. package/dist/layout.js +2 -3
  220. package/dist/{lazy-D6R5N5v4.js.map → lazy-B0ia54tT.js.map} +1 -1
  221. package/dist/{lazy-BDNnH_r7.cjs.map → lazy-Dq9mRRjT.cjs.map} +1 -1
  222. package/dist/lightbox-DbYUSfVl.cjs +202 -0
  223. package/dist/lightbox-DbYUSfVl.cjs.map +1 -0
  224. package/dist/{lightbox-CY52Z_ig.js → lightbox-DqG2z3Cn.js} +13 -12
  225. package/dist/lightbox-DqG2z3Cn.js.map +1 -0
  226. package/dist/lightbox.cjs +1 -1
  227. package/dist/lightbox.js +1 -1
  228. package/dist/list-CLX4sSAw.cjs +40 -0
  229. package/dist/list-CLX4sSAw.cjs.map +1 -0
  230. package/dist/{list-D7wUxu1C.js → list-D6-_E5ZD.js} +26 -21
  231. package/dist/list-D6-_E5ZD.js.map +1 -0
  232. package/dist/list.cjs +1 -1
  233. package/dist/list.js +1 -1
  234. package/dist/{magnetic-CVXEkYTA.cjs → magnetic-BH0TsofV.cjs} +1 -1
  235. package/dist/{magnetic-CVXEkYTA.cjs.map → magnetic-BH0TsofV.cjs.map} +1 -1
  236. package/dist/{magnetic-BhXebqF3.js → magnetic-BZGFxAWG.js} +2 -2
  237. package/dist/{magnetic-BhXebqF3.js.map → magnetic-BZGFxAWG.js.map} +1 -1
  238. package/dist/{mailbox-DLiBGJhY.cjs → mailbox-Ct6iYe-4.cjs} +64 -66
  239. package/dist/mailbox-Ct6iYe-4.cjs.map +1 -0
  240. package/dist/{mailbox--EN-JhjV.js → mailbox-DsPII8HR.js} +137 -126
  241. package/dist/mailbox-DsPII8HR.js.map +1 -0
  242. package/dist/mailbox.cjs +1 -1
  243. package/dist/mailbox.js +1 -1
  244. package/dist/{map-B0S_q3ma.js → map-Dhy3ta9v.js} +11 -9
  245. package/dist/map-Dhy3ta9v.js.map +1 -0
  246. package/dist/map-WXeVkx2K.cjs +80 -0
  247. package/dist/map-WXeVkx2K.cjs.map +1 -0
  248. package/dist/map.cjs +1 -1
  249. package/dist/map.js +1 -1
  250. package/dist/{menu-COeFpb6n.js → menu-Bhd3EapX.js} +15 -10
  251. package/dist/menu-Bhd3EapX.js.map +1 -0
  252. package/dist/{menu-3edZGQ1x.cjs → menu-Cg2aaDjs.cjs} +5 -5
  253. package/dist/menu-Cg2aaDjs.cjs.map +1 -0
  254. package/dist/menu.cjs +1 -1
  255. package/dist/menu.js +1 -1
  256. package/dist/mixins-CcIWET41.js +627 -0
  257. package/dist/mixins-CcIWET41.js.map +1 -0
  258. package/dist/mixins-De3xfjrm.cjs +298 -0
  259. package/dist/mixins-De3xfjrm.cjs.map +1 -0
  260. package/dist/mixins.cjs +1 -1
  261. package/dist/mixins.js +2 -87
  262. package/dist/nav-drawer.cjs +1 -1
  263. package/dist/nav-drawer.js +2 -2
  264. package/dist/navigation-bar.cjs +1 -1
  265. package/dist/navigation-bar.js +1 -1
  266. package/dist/navigation-rail.cjs +3 -3
  267. package/dist/navigation-rail.cjs.map +1 -1
  268. package/dist/navigation-rail.js +15 -16
  269. package/dist/navigation-rail.js.map +1 -1
  270. package/dist/{notification-CC-TFN5v.js → notification-CVLqQ8c_.js} +40 -38
  271. package/dist/notification-CVLqQ8c_.js.map +1 -0
  272. package/dist/notification-D_PQjBSf.cjs +23 -0
  273. package/dist/notification-D_PQjBSf.cjs.map +1 -0
  274. package/dist/notification.cjs +1 -1
  275. package/dist/notification.js +1 -1
  276. package/dist/option-DDU_goh1.cjs +43 -0
  277. package/dist/option-DDU_goh1.cjs.map +1 -0
  278. package/dist/{option-BwAF4nAw.js → option-rm4HebVs.js} +9 -7
  279. package/dist/option-rm4HebVs.js.map +1 -0
  280. package/dist/option.cjs +1 -1
  281. package/dist/option.js +1 -1
  282. package/dist/{overlay-stack-7bs4ZNnh.cjs → overlay-stack-BprhAE9a.cjs} +1 -1
  283. package/dist/{overlay-stack-7bs4ZNnh.cjs.map → overlay-stack-BprhAE9a.cjs.map} +1 -1
  284. package/dist/{overlay-stack-DXPYHPhk.js → overlay-stack-CAQno0CK.js} +1 -1
  285. package/dist/{overlay-stack-DXPYHPhk.js.map → overlay-stack-CAQno0CK.js.map} +1 -1
  286. package/dist/overlay.cjs +43 -45
  287. package/dist/overlay.cjs.map +1 -1
  288. package/dist/overlay.js +684 -268
  289. package/dist/overlay.js.map +1 -1
  290. package/dist/page.cjs +3 -3
  291. package/dist/page.cjs.map +1 -1
  292. package/dist/page.js +15 -13
  293. package/dist/page.js.map +1 -1
  294. package/dist/{components-DZgJWHdZ.js → payment-card-form-C0dHYZIv.js} +21 -22
  295. package/dist/{components-DZgJWHdZ.js.map → payment-card-form-C0dHYZIv.js.map} +1 -1
  296. package/dist/payment-card-form-DNvmZxs4.cjs +73 -0
  297. package/dist/{components-DkmEgyAc.cjs.map → payment-card-form-DNvmZxs4.cjs.map} +1 -1
  298. package/dist/payment-card-form.cjs +1 -0
  299. package/dist/payment-card-form.js +2 -0
  300. package/dist/{progress-Bk_Q1Shy.js → progress-BRerM5Bn.js} +16 -13
  301. package/dist/progress-BRerM5Bn.js.map +1 -0
  302. package/dist/{progress-Yz6EMNSu.cjs → progress-U3LQkpM2.cjs} +3 -3
  303. package/dist/progress-U3LQkpM2.cjs.map +1 -0
  304. package/dist/progress.cjs +1 -1
  305. package/dist/progress.js +1 -1
  306. package/dist/qr-scanner.cjs +5 -5
  307. package/dist/qr-scanner.cjs.map +1 -1
  308. package/dist/qr-scanner.js +14 -15
  309. package/dist/qr-scanner.js.map +1 -1
  310. package/dist/{radio-group-BcdcjLNC.js → radio-group-BZ2WoOXJ.js} +14 -12
  311. package/dist/radio-group-BZ2WoOXJ.js.map +1 -0
  312. package/dist/radio-group-D7mm-yvJ.cjs +40 -0
  313. package/dist/radio-group-D7mm-yvJ.cjs.map +1 -0
  314. package/dist/radio-group.cjs +1 -1
  315. package/dist/radio-group.js +1 -1
  316. package/dist/range.cjs +2 -2
  317. package/dist/range.cjs.map +1 -1
  318. package/dist/range.js +9 -7
  319. package/dist/range.js.map +1 -1
  320. package/dist/{reduced-motion-BZTLqAyl.js.map → reduced-motion-D-L12p7G.js.map} +1 -1
  321. package/dist/{reduced-motion-9RjNnhIg.cjs.map → reduced-motion-Ds-HjMzn.cjs.map} +1 -1
  322. package/dist/{rxjs-utils-DJbZRjp3.cjs.map → rxjs-utils-Csnks202.cjs.map} +1 -1
  323. package/dist/{rxjs-utils-CKTnEKUH.js.map → rxjs-utils-d-ivVN84.js.map} +1 -1
  324. package/dist/rxjs-utils.cjs +1 -1
  325. package/dist/rxjs-utils.js +1 -1
  326. package/dist/scroll-DJTjNIT_.cjs +26 -0
  327. package/dist/scroll-DJTjNIT_.cjs.map +1 -0
  328. package/dist/{scroll-DXQv0ejL.js → scroll-qL-HkMdP.js} +9 -7
  329. package/dist/scroll-qL-HkMdP.js.map +1 -0
  330. package/dist/search-BLCRsxIC.cjs +1 -0
  331. package/dist/{search-CwMav5QB.cjs.map → search-BLCRsxIC.cjs.map} +1 -1
  332. package/dist/{search-CvUZRLF1.js → search-BTz7-Rev.js} +1 -1
  333. package/dist/{search-CvUZRLF1.js.map → search-BTz7-Rev.js.map} +1 -1
  334. package/dist/{select-BV4lK2zy.cjs → select-BvA7v-gL.cjs} +6 -6
  335. package/dist/select-BvA7v-gL.cjs.map +1 -0
  336. package/dist/{select-DKyGWDsG.js → select-CnPXUeSf.js} +23 -20
  337. package/dist/select-CnPXUeSf.js.map +1 -0
  338. package/dist/select.cjs +1 -1
  339. package/dist/select.js +1 -1
  340. package/dist/{sheet-C3TLKItO.js → sheet-BRL07BB4.js} +22 -20
  341. package/dist/sheet-BRL07BB4.js.map +1 -0
  342. package/dist/sheet-BYQJAHQn.cjs +35 -0
  343. package/dist/sheet-BYQJAHQn.cjs.map +1 -0
  344. package/dist/sheet.cjs +1 -1
  345. package/dist/sheet.js +2 -2
  346. package/dist/sheet.service-B25bsrYG.cjs +1 -0
  347. package/dist/{sheet.service-RcDBwHmv.cjs.map → sheet.service-B25bsrYG.cjs.map} +1 -1
  348. package/dist/{sheet.service-Dlv20Zfc.js → sheet.service-SPQ8oLCi.js} +3 -3
  349. package/dist/{sheet.service-Dlv20Zfc.js.map → sheet.service-SPQ8oLCi.js.map} +1 -1
  350. package/dist/skeleton.cjs +2 -2
  351. package/dist/skeleton.cjs.map +1 -1
  352. package/dist/skeleton.js +9 -7
  353. package/dist/skeleton.js.map +1 -1
  354. package/dist/skills/INDEX.md +1 -1
  355. package/dist/skills/SKILL.md +17 -5
  356. package/dist/skills/mixins.md +78 -20
  357. package/dist/skills/schmancy/INDEX.md +1 -1
  358. package/dist/skills/schmancy/SKILL.md +17 -5
  359. package/dist/skills/schmancy/mixins.md +78 -20
  360. package/dist/skills/schmancy/state.md +501 -0
  361. package/dist/skills/schmancy/theme.md +15 -0
  362. package/dist/skills/schmancy/timeline-tile.md +95 -0
  363. package/dist/skills/state.md +501 -0
  364. package/dist/skills/theme.md +15 -0
  365. package/dist/skills/timeline-tile.md +95 -0
  366. package/dist/slider.cjs +5 -5
  367. package/dist/slider.cjs.map +1 -1
  368. package/dist/slider.js +18 -13
  369. package/dist/slider.js.map +1 -1
  370. package/dist/sound.service-BGs6m0Cm.cjs +1 -0
  371. package/dist/sound.service-BGs6m0Cm.cjs.map +1 -0
  372. package/dist/{sound.service-DWZe6swU.js → sound.service-kKfsN0m-.js} +3 -3
  373. package/dist/sound.service-kKfsN0m-.js.map +1 -0
  374. package/dist/splash-screen-BDt4PInk.cjs +41 -0
  375. package/dist/splash-screen-BDt4PInk.cjs.map +1 -0
  376. package/dist/{splash-screen-DbI5RgBf.js → splash-screen-C8JCqX5L.js} +12 -9
  377. package/dist/splash-screen-C8JCqX5L.js.map +1 -0
  378. package/dist/splash-screen.cjs +1 -1
  379. package/dist/splash-screen.js +1 -1
  380. package/dist/src-CpRNClhg.cjs +263 -0
  381. package/dist/src-CpRNClhg.cjs.map +1 -0
  382. package/dist/{src-00DfxCJq.js → src-CqdnWGgr.js} +299 -351
  383. package/dist/src-CqdnWGgr.js.map +1 -0
  384. package/dist/state-BusMG6sM.js +868 -0
  385. package/dist/state-BusMG6sM.js.map +1 -0
  386. package/dist/state-DNdCPITt.cjs +1 -0
  387. package/dist/state-DNdCPITt.cjs.map +1 -0
  388. package/dist/state.cjs +1 -0
  389. package/dist/state.js +3 -0
  390. package/dist/steps.cjs +10 -10
  391. package/dist/steps.cjs.map +1 -1
  392. package/dist/steps.js +29 -24
  393. package/dist/steps.js.map +1 -1
  394. package/dist/surface-C8jQy8Ym.js +24 -0
  395. package/dist/surface-C8jQy8Ym.js.map +1 -0
  396. package/dist/surface-Du2Y4vXd.cjs +7 -0
  397. package/dist/surface-Du2Y4vXd.cjs.map +1 -0
  398. package/dist/surface.cjs +1 -1
  399. package/dist/surface.js +1 -1
  400. package/dist/switch.cjs +2 -2
  401. package/dist/switch.cjs.map +1 -1
  402. package/dist/switch.js +7 -5
  403. package/dist/switch.js.map +1 -1
  404. package/dist/table.cjs +72 -1
  405. package/dist/table.cjs.map +1 -0
  406. package/dist/table.js +174 -2
  407. package/dist/table.js.map +1 -0
  408. package/dist/tabs-0RfeCa00.cjs +31 -0
  409. package/dist/tabs-0RfeCa00.cjs.map +1 -0
  410. package/dist/{tabs-Ce55RbwF.js → tabs-Cyahh9Q6.js} +22 -22
  411. package/dist/tabs-Cyahh9Q6.js.map +1 -0
  412. package/dist/tabs.cjs +1 -1
  413. package/dist/tabs.js +1 -1
  414. package/dist/teleport.cjs +1 -1
  415. package/dist/teleport.js +2 -2
  416. package/dist/{textarea-DjN1D9u0.js → textarea-CXCcTVnf.js} +30 -28
  417. package/dist/textarea-CXCcTVnf.js.map +1 -0
  418. package/dist/textarea-jqRrLxmo.cjs +39 -0
  419. package/dist/textarea-jqRrLxmo.cjs.map +1 -0
  420. package/dist/textarea.cjs +1 -1
  421. package/dist/textarea.js +1 -1
  422. package/dist/{theme-pbxlt72h.js → theme-2KZW2Rfs.js} +45 -41
  423. package/dist/{theme-pbxlt72h.js.map → theme-2KZW2Rfs.js.map} +1 -1
  424. package/dist/theme-Hjz9sCN-.cjs +181 -0
  425. package/dist/{theme-B-IJ2r7Q.cjs.map → theme-Hjz9sCN-.cjs.map} +1 -1
  426. package/dist/{theme-button-CEMeAUOL.js → theme-button-9uF1eoHz.js} +3 -4
  427. package/dist/theme-button-9uF1eoHz.js.map +1 -0
  428. package/dist/theme-button-C7QIbke1.cjs +8 -0
  429. package/dist/theme-button-C7QIbke1.cjs.map +1 -0
  430. package/dist/theme-button.cjs +1 -1
  431. package/dist/theme-button.js +1 -1
  432. package/dist/theme.cjs +1 -1
  433. package/dist/{theme.events-NuihzD_p.js.map → theme.events-Cv7N4Toe.js.map} +1 -1
  434. package/dist/{theme.events-DakXxZeP.cjs.map → theme.events-DM4H5F2d.cjs.map} +1 -1
  435. package/dist/{theme.interface-DTwkuAKJ.cjs.map → theme.interface-D9l33b-M.cjs.map} +1 -1
  436. package/dist/{theme.interface-Buged9Cg.js.map → theme.interface-DnVNre4O.js.map} +1 -1
  437. package/dist/theme.js +5 -5
  438. package/dist/theme.service-BrUbGoeQ.cjs +1 -0
  439. package/dist/theme.service-BrUbGoeQ.cjs.map +1 -0
  440. package/dist/{theme.service-cOfPrtfe.js → theme.service-CmbOGMA8.js} +4 -4
  441. package/dist/theme.service-CmbOGMA8.js.map +1 -0
  442. package/dist/timeline.cjs +277 -0
  443. package/dist/timeline.cjs.map +1 -0
  444. package/dist/timeline.js +326 -0
  445. package/dist/timeline.js.map +1 -0
  446. package/dist/tree.cjs +2 -2
  447. package/dist/tree.cjs.map +1 -1
  448. package/dist/tree.js +15 -13
  449. package/dist/tree.js.map +1 -1
  450. package/dist/typewriter.cjs +10 -123
  451. package/dist/typewriter.cjs.map +1 -1
  452. package/dist/typewriter.js +90 -212
  453. package/dist/typewriter.js.map +1 -1
  454. package/dist/typography.cjs +3 -3
  455. package/dist/typography.cjs.map +1 -1
  456. package/dist/typography.js +18 -112
  457. package/dist/typography.js.map +1 -1
  458. package/dist/utils-Cr-YO4Np.cjs +1 -0
  459. package/dist/utils-Cr-YO4Np.cjs.map +1 -0
  460. package/dist/{utils-Bp2jhyZc.js → utils-hp-DnFf5.js} +16 -6
  461. package/dist/utils-hp-DnFf5.js.map +1 -0
  462. package/dist/utils.cjs +1 -1
  463. package/dist/utils.js +4 -5
  464. package/dist/visually-hidden.cjs +2 -2
  465. package/dist/visually-hidden.cjs.map +1 -1
  466. package/dist/visually-hidden.js +7 -5
  467. package/dist/visually-hidden.js.map +1 -1
  468. package/dist/{window-CrjZdf7Y.js → window-C7yY9yp5.js} +28 -30
  469. package/dist/window-C7yY9yp5.js.map +1 -0
  470. package/dist/window-DtUOWiAj.cjs +59 -0
  471. package/dist/window-DtUOWiAj.cjs.map +1 -0
  472. package/dist/window.cjs +1 -1
  473. package/dist/window.js +1 -1
  474. package/package.json +15 -4
  475. package/plugins/vite-plugin-schmancy-auto-import.ts +143 -0
  476. package/plugins/vite-plugin-schmancy-manifest.ts +438 -0
  477. package/skills/schmancy/INDEX.md +1 -1
  478. package/skills/schmancy/SKILL.md +17 -5
  479. package/skills/schmancy/mixins.md +78 -20
  480. package/skills/schmancy/state.md +501 -0
  481. package/skills/schmancy/theme.md +15 -0
  482. package/skills/schmancy/timeline-tile.md +95 -0
  483. package/src/agent/agent-bundle.test.ts +71 -54
  484. package/src/agent/agent-entry.ts +5 -21
  485. package/src/agent/helpers.ts +159 -0
  486. package/src/agent/schmancy-skill.ts +71 -0
  487. package/src/agent/virtual-manifest.d.ts +1 -12
  488. package/src/area/area.component.ts +7 -19
  489. package/src/area/area.service.test.ts +4 -5
  490. package/src/area/area.service.ts +4 -3
  491. package/src/area/route.component.ts +17 -4
  492. package/src/area/utils.ts +3 -2
  493. package/src/audio/emotional-sounds.ts +0 -2
  494. package/src/audio/sound.service.ts +7 -13
  495. package/src/autocomplete/autocomplete.ts +18 -21
  496. package/src/{avatar.ts → avatar/avatar.ts} +2 -2
  497. package/src/avatar/index.ts +1 -0
  498. package/src/badge/badge.ts +4 -3
  499. package/src/boat/boat.ts +28 -36
  500. package/src/breadcrumb/breadcrumb.ts +11 -19
  501. package/src/busy/busy.ts +4 -3
  502. package/src/busy/spinner.ts +4 -3
  503. package/src/button/button.ts +6 -11
  504. package/src/button/icon-button.ts +8 -12
  505. package/src/card/actions.ts +4 -12
  506. package/src/card/card.ts +5 -23
  507. package/src/card/content.ts +4 -12
  508. package/src/card/media.ts +4 -9
  509. package/src/charts/area-chart.ts +7 -4
  510. package/src/charts/pills.ts +6 -4
  511. package/src/checkbox/checkbox.test.ts +2 -2
  512. package/src/checkbox/checkbox.ts +3 -9
  513. package/src/chips/assist-chip.ts +6 -14
  514. package/src/chips/chips.ts +7 -21
  515. package/src/chips/filter-chip.ts +4 -3
  516. package/src/chips/input-chip.ts +10 -9
  517. package/src/chips/suggestion-chip.ts +10 -12
  518. package/src/code-highlight/code-highlight.ts +28 -59
  519. package/src/code-highlight/code-preview.ts +11 -9
  520. package/src/connectivity/connectivity-status.ts +4 -3
  521. package/src/content-drawer/drawer.ts +5 -3
  522. package/src/content-drawer/main.ts +5 -3
  523. package/src/content-drawer/sheet.ts +6 -4
  524. package/src/date-range/date-range-dialog.ts +2 -2
  525. package/src/date-range/date-range.ts +3 -2
  526. package/src/delay/delay.ts +2 -2
  527. package/src/details/details.ts +4 -17
  528. package/src/dialog/dialog-service.ts +2 -0
  529. package/src/dialog/dialog.component.ts +9 -9
  530. package/src/directives/drag.ts +1 -9
  531. package/src/directives/index.ts +0 -1
  532. package/src/discovery/discovery.service.ts +1 -1
  533. package/src/divider/divider.ts +5 -14
  534. package/src/dropdown/dropdown-component.ts +5 -16
  535. package/src/dropdown/dropdown-content.ts +7 -14
  536. package/src/expand/expand-root.component.ts +5 -15
  537. package/src/expand/expand.component.ts +4 -17
  538. package/src/extra/countries/countries.ts +5 -13
  539. package/src/extra/timezone/timezone.ts +7 -12
  540. package/src/form/form.test.ts +2 -2
  541. package/src/form/form.ts +2 -9
  542. package/src/icons/icon.ts +4 -3
  543. package/src/iframe/iframe.ts +13 -4
  544. package/src/index.ts +3 -3
  545. package/src/input/input.ts +6 -13
  546. package/src/json/json.ts +4 -3
  547. package/src/kbd/kbd.ts +4 -3
  548. package/src/layout/index.ts +1 -5
  549. package/src/layout/scroll/scroll.ts +5 -8
  550. package/src/lightbox/flip-directive.ts +1 -1
  551. package/src/lightbox/lightbox.ts +5 -14
  552. package/src/list/list-item.ts +4 -13
  553. package/src/list/list.ts +12 -10
  554. package/src/mailbox/email-editor.ts +17 -11
  555. package/src/mailbox/email-layout-selector.ts +2 -2
  556. package/src/mailbox/email-recipients.ts +13 -8
  557. package/src/mailbox/email-template-picker.ts +6 -5
  558. package/src/mailbox/email-viewer.ts +5 -3
  559. package/src/mailbox/mailbox.ts +6 -5
  560. package/src/map/map.ts +8 -6
  561. package/src/menu/menu-item.ts +5 -16
  562. package/src/menu/menu.ts +27 -13
  563. package/src/nav-drawer/appbar.ts +4 -14
  564. package/src/nav-drawer/content.ts +5 -14
  565. package/src/nav-drawer/drawer.ts +5 -18
  566. package/src/nav-drawer/navbar.ts +3 -17
  567. package/src/navigation-bar/navigation-bar-item.ts +8 -6
  568. package/src/navigation-bar/navigation-bar.ts +19 -19
  569. package/src/navigation-rail/navigation-rail-item.ts +9 -5
  570. package/src/navigation-rail/navigation-rail.ts +10 -14
  571. package/src/notification/notification-service.ts +0 -2
  572. package/src/notification/notification.ts +6 -3
  573. package/src/option/option.ts +4 -3
  574. package/src/overlay/overlay.animations.ts +183 -37
  575. package/src/overlay/overlay.component.ts +397 -190
  576. package/src/overlay/overlay.confirm-body.ts +21 -7
  577. package/src/overlay/overlay.gestures.ts +72 -36
  578. package/src/overlay/overlay.layout.ts +103 -1
  579. package/src/overlay/overlay.positioning.ts +301 -0
  580. package/src/overlay/overlay.service.ts +81 -3
  581. package/src/overlay/overlay.stack.ts +8 -10
  582. package/src/overlay/overlay.types.ts +83 -5
  583. package/src/page/page.ts +16 -11
  584. package/src/payment-card-form/index.ts +1 -0
  585. package/src/{components/form-elements → payment-card-form}/payment-card-form.ts +23 -23
  586. package/src/progress/progress.ts +5 -3
  587. package/src/qr-scanner/qr-scanner.ts +7 -30
  588. package/src/radio-group/radio-button.ts +3 -13
  589. package/src/radio-group/radio-group.ts +5 -22
  590. package/src/range/range.ts +4 -3
  591. package/src/rxjs-utils/waitForElements.ts +1 -1
  592. package/src/rxjs-utils/waitForElementsAll.ts +1 -1
  593. package/src/select/select.ts +10 -18
  594. package/src/sheet/hook.ts +1 -1
  595. package/src/sheet/sheet.ts +5 -20
  596. package/src/skeleton/skeleton.ts +4 -3
  597. package/src/slider/slide.ts +5 -3
  598. package/src/slider/slider.ts +5 -3
  599. package/src/splash-screen/splash-screen.ts +5 -3
  600. package/src/state/CLAUDE.md +161 -0
  601. package/src/state/MIGRATION.md +258 -0
  602. package/src/state/SCOPING.md +134 -0
  603. package/src/state/active-host.ts +190 -0
  604. package/src/state/index.ts +877 -0
  605. package/src/state/persist.ts +208 -0
  606. package/src/state/schmancy-context.ts +130 -0
  607. package/src/state/state.test-d.ts +227 -0
  608. package/src/state/state.test.ts +868 -0
  609. package/src/steps/schmancy-step.ts +5 -3
  610. package/src/steps/schmancy-steps-container.ts +5 -3
  611. package/src/surface/surface.ts +14 -9
  612. package/src/switch/switch.test.ts +2 -2
  613. package/src/switch/switch.ts +8 -10
  614. package/src/table/row.ts +7 -4
  615. package/src/table/table.ts +17 -14
  616. package/src/tabs/index.ts +0 -2
  617. package/src/tabs/tab.ts +2 -2
  618. package/src/tabs/tabs-group.ts +7 -4
  619. package/src/teleport/teleport.component.ts +5 -3
  620. package/src/textarea/textarea.ts +6 -12
  621. package/src/theme/theme-audio-player.ts +7 -5
  622. package/src/theme/theme-controller.ts +2 -2
  623. package/src/theme/theme.component.ts +22 -15
  624. package/src/theme/theme.service.ts +6 -7
  625. package/src/theme/theme.style.css +1 -0
  626. package/src/theme-button/theme-button.ts +2 -2
  627. package/src/timeline/index.ts +1 -0
  628. package/src/timeline/timeline-tile.ts +431 -0
  629. package/src/tree/tree.ts +4 -16
  630. package/src/typewriter/index.ts +1 -1
  631. package/src/typography/typography.ts +5 -98
  632. package/src/utils/intersection.ts +5 -1
  633. package/src/utils/overlay-stack.ts +1 -1
  634. package/src/utils/search.ts +2 -2
  635. package/src/visually-hidden/visually-hidden.ts +4 -3
  636. package/src/window/window-position.ts +3 -6
  637. package/src/window/window.ts +9 -7
  638. package/types/mixins/SchmancyElement.d.ts +49 -0
  639. package/types/mixins/formField.mixin.d.ts +4 -2
  640. package/types/mixins/index.d.ts +1 -0
  641. package/types/mixins/litElement.mixin.d.ts +11 -0
  642. package/types/src/agent/agent-entry.d.ts +2 -19
  643. package/types/src/agent/helpers.d.ts +0 -27
  644. package/types/src/agent/schmancy-skill.d.ts +3 -5
  645. package/types/src/area/area.component.d.ts +3 -17
  646. package/types/src/area/route.component.d.ts +14 -4
  647. package/types/src/audio/emotional-sounds.d.ts +0 -1
  648. package/types/src/audio/sound.service.d.ts +1 -1
  649. package/types/src/autocomplete/autocomplete.d.ts +4 -15
  650. package/types/src/{avatar.d.ts → avatar/avatar.d.ts} +2 -3
  651. package/types/src/avatar/index.d.ts +1 -0
  652. package/types/src/badge/badge.d.ts +3 -3
  653. package/types/src/boat/boat.d.ts +3 -2
  654. package/types/src/breadcrumb/breadcrumb.d.ts +9 -19
  655. package/types/src/busy/busy.d.ts +3 -3
  656. package/types/src/busy/spinner.d.ts +3 -3
  657. package/types/src/button/button.d.ts +4 -10
  658. package/types/src/button/icon-button.d.ts +5 -11
  659. package/types/src/card/actions.d.ts +3 -12
  660. package/types/src/card/card.d.ts +4 -24
  661. package/types/src/card/content.d.ts +3 -12
  662. package/types/src/card/media.d.ts +3 -9
  663. package/types/src/charts/area-chart.d.ts +3 -3
  664. package/types/src/charts/pills.d.ts +3 -3
  665. package/types/src/checkbox/checkbox.d.ts +3 -10
  666. package/types/src/chips/assist-chip.d.ts +5 -15
  667. package/types/src/chips/chips.d.ts +3 -17
  668. package/types/src/chips/filter-chip.d.ts +3 -3
  669. package/types/src/chips/input-chip.d.ts +9 -10
  670. package/types/src/chips/suggestion-chip.d.ts +9 -13
  671. package/types/src/code-highlight/code-highlight.d.ts +4 -11
  672. package/types/src/code-highlight/code-preview.d.ts +3 -3
  673. package/types/src/connectivity/connectivity-status.d.ts +3 -3
  674. package/types/src/content-drawer/drawer.d.ts +4 -4
  675. package/types/src/content-drawer/main.d.ts +3 -3
  676. package/types/src/content-drawer/sheet.d.ts +4 -4
  677. package/types/src/date-range/date-range-dialog.d.ts +2 -3
  678. package/types/src/date-range/date-range.d.ts +2 -3
  679. package/types/src/delay/delay.d.ts +2 -3
  680. package/types/src/details/details.d.ts +3 -14
  681. package/types/src/dialog/dialog.component.d.ts +9 -9
  682. package/types/src/directives/drag.d.ts +1 -3
  683. package/types/src/directives/index.d.ts +0 -1
  684. package/types/src/divider/divider.d.ts +3 -14
  685. package/types/src/dropdown/dropdown-component.d.ts +4 -17
  686. package/types/src/dropdown/dropdown-content.d.ts +6 -14
  687. package/types/src/expand/expand-root.component.d.ts +4 -14
  688. package/types/src/expand/expand.component.d.ts +3 -17
  689. package/types/src/extra/countries/countries.d.ts +3 -13
  690. package/types/src/extra/timezone/timezone.d.ts +4 -11
  691. package/types/src/form/form.d.ts +2 -9
  692. package/types/src/icons/icon.d.ts +3 -3
  693. package/types/src/iframe/iframe.d.ts +5 -3
  694. package/types/src/index.d.ts +3 -3
  695. package/types/src/input/input.d.ts +4 -11
  696. package/types/src/json/json.d.ts +3 -3
  697. package/types/src/kbd/kbd.d.ts +3 -3
  698. package/types/src/layout/index.d.ts +0 -4
  699. package/types/src/layout/scroll/scroll.d.ts +4 -8
  700. package/types/src/lightbox/lightbox.d.ts +3 -14
  701. package/types/src/list/list-item.d.ts +3 -13
  702. package/types/src/list/list.d.ts +11 -10
  703. package/types/src/mailbox/email-editor.d.ts +3 -3
  704. package/types/src/mailbox/email-layout-selector.d.ts +2 -3
  705. package/types/src/mailbox/email-recipients.d.ts +7 -3
  706. package/types/src/mailbox/email-template-picker.d.ts +4 -4
  707. package/types/src/mailbox/email-viewer.d.ts +3 -3
  708. package/types/src/mailbox/mailbox.d.ts +4 -4
  709. package/types/src/map/map.d.ts +4 -3
  710. package/types/src/menu/menu-item.d.ts +3 -16
  711. package/types/src/menu/menu.d.ts +25 -13
  712. package/types/src/nav-drawer/appbar.d.ts +3 -14
  713. package/types/src/nav-drawer/content.d.ts +3 -14
  714. package/types/src/nav-drawer/drawer.d.ts +3 -18
  715. package/types/src/nav-drawer/navbar.d.ts +3 -18
  716. package/types/src/navigation-bar/navigation-bar-item.d.ts +7 -6
  717. package/types/src/navigation-bar/navigation-bar.d.ts +13 -7
  718. package/types/src/navigation-rail/navigation-rail-item.d.ts +9 -6
  719. package/types/src/navigation-rail/navigation-rail.d.ts +10 -15
  720. package/types/src/notification/notification-service.d.ts +0 -1
  721. package/types/src/notification/notification.d.ts +3 -3
  722. package/types/src/option/option.d.ts +3 -3
  723. package/types/src/overlay/overlay.animations.d.ts +54 -6
  724. package/types/src/overlay/overlay.component.d.ts +39 -15
  725. package/types/src/overlay/overlay.confirm-body.d.ts +4 -4
  726. package/types/src/overlay/overlay.gestures.d.ts +26 -17
  727. package/types/src/overlay/overlay.layout.d.ts +27 -1
  728. package/types/src/overlay/overlay.positioning.d.ts +87 -0
  729. package/types/src/overlay/overlay.stack.d.ts +0 -2
  730. package/types/src/overlay/overlay.types.d.ts +59 -5
  731. package/types/src/page/page.d.ts +14 -11
  732. package/types/src/{components/form-elements → payment-card-form}/payment-card-form.d.ts +2 -3
  733. package/types/src/progress/progress.d.ts +3 -3
  734. package/types/src/qr-scanner/qr-scanner.d.ts +3 -3
  735. package/types/src/radio-group/radio-button.d.ts +3 -12
  736. package/types/src/radio-group/radio-group.d.ts +4 -20
  737. package/types/src/range/range.d.ts +3 -3
  738. package/types/src/rxjs-utils/waitForElements.d.ts +1 -1
  739. package/types/src/rxjs-utils/waitForElementsAll.d.ts +1 -1
  740. package/types/src/select/select.d.ts +4 -15
  741. package/types/src/sheet/sheet.d.ts +3 -20
  742. package/types/src/skeleton/skeleton.d.ts +3 -3
  743. package/types/src/slider/slide.d.ts +3 -2
  744. package/types/src/slider/slider.d.ts +3 -3
  745. package/types/src/splash-screen/splash-screen.d.ts +3 -3
  746. package/types/src/state/active-host.d.ts +23 -0
  747. package/types/src/state/index.d.ts +145 -0
  748. package/types/src/state/persist.d.ts +14 -0
  749. package/types/src/state/schmancy-context.d.ts +32 -0
  750. package/types/src/state/state.test-d.d.ts +131 -0
  751. package/types/src/state/state.test.d.ts +1 -0
  752. package/types/src/steps/schmancy-step.d.ts +3 -3
  753. package/types/src/steps/schmancy-steps-container.d.ts +3 -3
  754. package/types/src/surface/surface.d.ts +13 -5
  755. package/types/src/switch/switch.d.ts +7 -11
  756. package/types/src/table/row.d.ts +2 -3
  757. package/types/src/table/table.d.ts +4 -11
  758. package/types/src/tabs/index.d.ts +0 -2
  759. package/types/src/tabs/tab.d.ts +2 -3
  760. package/types/src/tabs/tabs-group.d.ts +3 -3
  761. package/types/src/teleport/teleport.component.d.ts +3 -3
  762. package/types/src/textarea/textarea.d.ts +5 -12
  763. package/types/src/theme/theme-audio-player.d.ts +3 -3
  764. package/types/src/theme/theme-controller.d.ts +2 -2
  765. package/types/src/theme/theme.component.d.ts +18 -13
  766. package/types/src/theme-button/theme-button.d.ts +2 -3
  767. package/types/src/timeline/index.d.ts +1 -0
  768. package/types/src/timeline/timeline-tile.d.ts +44 -0
  769. package/types/src/tree/tree.d.ts +3 -16
  770. package/types/src/typewriter/index.d.ts +1 -1
  771. package/types/src/typography/typography.d.ts +3 -36
  772. package/types/src/visually-hidden/visually-hidden.d.ts +3 -3
  773. package/types/src/window/window.d.ts +3 -3
  774. package/dist/agent/index.es-Dymj8REP.js +0 -489
  775. package/dist/agent/index.es-Dymj8REP.js.map +0 -1
  776. package/dist/area-BGBCMC79.js.map +0 -1
  777. package/dist/area-D7l9KR2N.cjs +0 -12
  778. package/dist/area-D7l9KR2N.cjs.map +0 -1
  779. package/dist/autocomplete-BPD5uraA.cjs +0 -115
  780. package/dist/autocomplete-BPD5uraA.cjs.map +0 -1
  781. package/dist/autocomplete-C2P0Soht.js.map +0 -1
  782. package/dist/boat-BkIO-0No.cjs +0 -80
  783. package/dist/boat-BkIO-0No.cjs.map +0 -1
  784. package/dist/boat-DXZ0k7oa.js.map +0 -1
  785. package/dist/busy-DGYhpTnO.cjs.map +0 -1
  786. package/dist/busy-iRjq6Nvd.js.map +0 -1
  787. package/dist/card-DjYnCckw.cjs.map +0 -1
  788. package/dist/card-wUTjx0EC.js.map +0 -1
  789. package/dist/checkbox-CiYEtw9F.cjs +0 -39
  790. package/dist/checkbox-CiYEtw9F.cjs.map +0 -1
  791. package/dist/checkbox-VBSenxgb.js.map +0 -1
  792. package/dist/chips-BDS9lkPa.js.map +0 -1
  793. package/dist/chips-D6ptH5re.cjs.map +0 -1
  794. package/dist/code-highlight-Bi91XHJN.js.map +0 -1
  795. package/dist/code-highlight-BzRmBZzz.cjs.map +0 -1
  796. package/dist/components-DkmEgyAc.cjs +0 -73
  797. package/dist/components.cjs +0 -1
  798. package/dist/components.js +0 -2
  799. package/dist/context-BerzpUhI.js +0 -3
  800. package/dist/context-C6dHUHhi.cjs +0 -1
  801. package/dist/date-range-BmFxTXiU.cjs +0 -131
  802. package/dist/date-range-BmFxTXiU.cjs.map +0 -1
  803. package/dist/date-range-ClTMg1AB.js.map +0 -1
  804. package/dist/date-range-inline-B9Dp2z6C.cjs +0 -43
  805. package/dist/delay-BHODnTg-.cjs +0 -9
  806. package/dist/delay-BHODnTg-.cjs.map +0 -1
  807. package/dist/delay-Dlk0A3he.js +0 -347
  808. package/dist/delay-Dlk0A3he.js.map +0 -1
  809. package/dist/details-CPjlqQD4.js.map +0 -1
  810. package/dist/details-Cz9ok9si.cjs.map +0 -1
  811. package/dist/dialog-service-CzDO08Gy.cjs.map +0 -1
  812. package/dist/dialog-service-DH-tjPuE.js.map +0 -1
  813. package/dist/divider-CILo3_vi.cjs.map +0 -1
  814. package/dist/divider-ghgyw5CU.js.map +0 -1
  815. package/dist/expand-CbjBr_Ds.js.map +0 -1
  816. package/dist/expand-r3OrSoDk.cjs +0 -141
  817. package/dist/expand-r3OrSoDk.cjs.map +0 -1
  818. package/dist/extra-BZeZOMBI.cjs.map +0 -1
  819. package/dist/extra-DK9MQtPJ.js.map +0 -1
  820. package/dist/float-CuZ8LOgB.cjs +0 -1
  821. package/dist/flow-BPDtbhLe.js +0 -386
  822. package/dist/flow-BPDtbhLe.js.map +0 -1
  823. package/dist/flow-Dn9AZktE.cjs +0 -1
  824. package/dist/flow-Dn9AZktE.cjs.map +0 -1
  825. package/dist/form-rCZqoAoK.js.map +0 -1
  826. package/dist/form-wI58M85H.cjs.map +0 -1
  827. package/dist/handover/agent-runtime-v2-loopback.md +0 -71
  828. package/dist/handover/claude-design-v2-paste.md +0 -42
  829. package/dist/icons-Drq4kKy2.js.map +0 -1
  830. package/dist/icons-DtdhaZdc.cjs +0 -52
  831. package/dist/icons-DtdhaZdc.cjs.map +0 -1
  832. package/dist/iframe-BkwwWIbQ.cjs +0 -24
  833. package/dist/iframe-BkwwWIbQ.cjs.map +0 -1
  834. package/dist/iframe-BmyHW8km.js.map +0 -1
  835. package/dist/index.es-BgmFX1JM.cjs +0 -1
  836. package/dist/index.es-BgmFX1JM.cjs.map +0 -1
  837. package/dist/index.es-CLyb_o3Y.js +0 -489
  838. package/dist/index.es-CLyb_o3Y.js.map +0 -1
  839. package/dist/input-BGNZlfL8.cjs +0 -51
  840. package/dist/input-BGNZlfL8.cjs.map +0 -1
  841. package/dist/input-Bc3bVISm.js.map +0 -1
  842. package/dist/input-chip-BQrjpjaQ.js.map +0 -1
  843. package/dist/input-chip-DN-cwf11.cjs.map +0 -1
  844. package/dist/intersection-BrXp4YTO.js +0 -12
  845. package/dist/intersection-BrXp4YTO.js.map +0 -1
  846. package/dist/intersection-DqBqnpgh.cjs +0 -1
  847. package/dist/intersection-DqBqnpgh.cjs.map +0 -1
  848. package/dist/layout-7eyMBmZk.cjs +0 -17
  849. package/dist/layout-7eyMBmZk.cjs.map +0 -1
  850. package/dist/layout-Ox6nJkzC.js +0 -268
  851. package/dist/layout-Ox6nJkzC.js.map +0 -1
  852. package/dist/lightbox-CY52Z_ig.js.map +0 -1
  853. package/dist/lightbox-H8Uq3AXy.cjs +0 -202
  854. package/dist/lightbox-H8Uq3AXy.cjs.map +0 -1
  855. package/dist/list-BGjVo6zb.cjs +0 -40
  856. package/dist/list-BGjVo6zb.cjs.map +0 -1
  857. package/dist/list-D7wUxu1C.js.map +0 -1
  858. package/dist/litElement.mixin-CszkJuNl.js +0 -12
  859. package/dist/litElement.mixin-CszkJuNl.js.map +0 -1
  860. package/dist/litElement.mixin-qh5-IIUq.cjs +0 -1
  861. package/dist/litElement.mixin-qh5-IIUq.cjs.map +0 -1
  862. package/dist/mailbox--EN-JhjV.js.map +0 -1
  863. package/dist/mailbox-DLiBGJhY.cjs.map +0 -1
  864. package/dist/map-B0S_q3ma.js.map +0 -1
  865. package/dist/map-EDQN0I6e.cjs +0 -80
  866. package/dist/map-EDQN0I6e.cjs.map +0 -1
  867. package/dist/menu-3edZGQ1x.cjs.map +0 -1
  868. package/dist/menu-COeFpb6n.js.map +0 -1
  869. package/dist/metric.cjs +0 -69
  870. package/dist/metric.cjs.map +0 -1
  871. package/dist/metric.js +0 -93
  872. package/dist/metric.js.map +0 -1
  873. package/dist/mixins.cjs.map +0 -1
  874. package/dist/mixins.js.map +0 -1
  875. package/dist/notification-CC-TFN5v.js.map +0 -1
  876. package/dist/notification-P4c-kFdH.cjs +0 -23
  877. package/dist/notification-P4c-kFdH.cjs.map +0 -1
  878. package/dist/option-BwAF4nAw.js.map +0 -1
  879. package/dist/option-Cu0ertuF.cjs +0 -43
  880. package/dist/option-Cu0ertuF.cjs.map +0 -1
  881. package/dist/progress-Bk_Q1Shy.js.map +0 -1
  882. package/dist/progress-Yz6EMNSu.cjs.map +0 -1
  883. package/dist/provide-CYgj58u_.cjs +0 -1
  884. package/dist/provide-CYgj58u_.cjs.map +0 -1
  885. package/dist/provide-ydIskwf2.js +0 -107
  886. package/dist/provide-ydIskwf2.js.map +0 -1
  887. package/dist/radio-group-BcdcjLNC.js.map +0 -1
  888. package/dist/radio-group-BpBz5tRA.cjs +0 -40
  889. package/dist/radio-group-BpBz5tRA.cjs.map +0 -1
  890. package/dist/scroll-DXQv0ejL.js.map +0 -1
  891. package/dist/scroll-DbZMTv0K.cjs +0 -26
  892. package/dist/scroll-DbZMTv0K.cjs.map +0 -1
  893. package/dist/search-CwMav5QB.cjs +0 -1
  894. package/dist/select-BV4lK2zy.cjs.map +0 -1
  895. package/dist/select-DKyGWDsG.js.map +0 -1
  896. package/dist/sheet-BAI_jH1t.cjs +0 -35
  897. package/dist/sheet-BAI_jH1t.cjs.map +0 -1
  898. package/dist/sheet-C3TLKItO.js.map +0 -1
  899. package/dist/sheet.service-RcDBwHmv.cjs +0 -1
  900. package/dist/skills/schmancy/store.md +0 -126
  901. package/dist/skills/store.md +0 -126
  902. package/dist/sound.service-BEN6Xjy_.cjs +0 -1
  903. package/dist/sound.service-BEN6Xjy_.cjs.map +0 -1
  904. package/dist/sound.service-DWZe6swU.js.map +0 -1
  905. package/dist/splash-screen-DbI5RgBf.js.map +0 -1
  906. package/dist/splash-screen-DoHRTHi8.cjs +0 -41
  907. package/dist/splash-screen-DoHRTHi8.cjs.map +0 -1
  908. package/dist/src-00DfxCJq.js.map +0 -1
  909. package/dist/src-C_JjQovE.cjs +0 -269
  910. package/dist/src-C_JjQovE.cjs.map +0 -1
  911. package/dist/store-CjFHCSDb.cjs +0 -1
  912. package/dist/store-CjFHCSDb.cjs.map +0 -1
  913. package/dist/store-CjzZDQt8.js +0 -1654
  914. package/dist/store-CjzZDQt8.js.map +0 -1
  915. package/dist/store.cjs +0 -1
  916. package/dist/store.js +0 -2
  917. package/dist/surface-D-GWBcsh.cjs +0 -7
  918. package/dist/surface-D-GWBcsh.cjs.map +0 -1
  919. package/dist/surface-D23JtxYP.js +0 -22
  920. package/dist/surface-D23JtxYP.js.map +0 -1
  921. package/dist/surface.mixin-DqMwoddO.js +0 -320
  922. package/dist/surface.mixin-DqMwoddO.js.map +0 -1
  923. package/dist/surface.mixin-DxOi-xo0.cjs +0 -297
  924. package/dist/surface.mixin-DxOi-xo0.cjs.map +0 -1
  925. package/dist/table-C7b73kdg.cjs +0 -63
  926. package/dist/table-C7b73kdg.cjs.map +0 -1
  927. package/dist/table-CTrhV9-k.js +0 -631
  928. package/dist/table-CTrhV9-k.js.map +0 -1
  929. package/dist/tabs-Ce55RbwF.js.map +0 -1
  930. package/dist/tabs-DAzB8O7w.cjs +0 -31
  931. package/dist/tabs-DAzB8O7w.cjs.map +0 -1
  932. package/dist/tailwind.mixin-DRI1oTYQ.cjs +0 -2
  933. package/dist/tailwind.mixin-DRI1oTYQ.cjs.map +0 -1
  934. package/dist/tailwind.mixin-mdQR3BEO.js +0 -219
  935. package/dist/tailwind.mixin-mdQR3BEO.js.map +0 -1
  936. package/dist/textarea-DjN1D9u0.js.map +0 -1
  937. package/dist/textarea-PuHxBvJA.cjs +0 -39
  938. package/dist/textarea-PuHxBvJA.cjs.map +0 -1
  939. package/dist/theme-B-IJ2r7Q.cjs +0 -181
  940. package/dist/theme-button-BSbYmS4p.cjs +0 -8
  941. package/dist/theme-button-BSbYmS4p.cjs.map +0 -1
  942. package/dist/theme-button-CEMeAUOL.js.map +0 -1
  943. package/dist/theme.service-DxJPUGlu.cjs +0 -1
  944. package/dist/theme.service-DxJPUGlu.cjs.map +0 -1
  945. package/dist/theme.service-cOfPrtfe.js.map +0 -1
  946. package/dist/tslib.es6-Cnt75pb6.cjs +0 -1
  947. package/dist/tslib.es6-Cnt75pb6.cjs.map +0 -1
  948. package/dist/tslib.es6-DMzzJKHV.js +0 -7
  949. package/dist/tslib.es6-DMzzJKHV.js.map +0 -1
  950. package/dist/utils-Bp2jhyZc.js.map +0 -1
  951. package/dist/utils-CBPQvxNW.cjs +0 -1
  952. package/dist/utils-CBPQvxNW.cjs.map +0 -1
  953. package/dist/window-CrjZdf7Y.js.map +0 -1
  954. package/dist/window-DTUARSrU.cjs +0 -59
  955. package/dist/window-DTUARSrU.cjs.map +0 -1
  956. package/skills/schmancy/store.md +0 -126
  957. package/src/components/form-elements/index.ts +0 -1
  958. package/src/components/index.ts +0 -1
  959. package/src/layout/flex/flex.scss +0 -4
  960. package/src/layout/flex/flex.ts +0 -74
  961. package/src/layout/flex/index.ts +0 -1
  962. package/src/layout/grid/.readme +0 -79
  963. package/src/layout/grid/grid.scss +0 -5
  964. package/src/layout/grid/grid.ts +0 -121
  965. package/src/layout/grid/index.ts +0 -1
  966. package/src/layout/layout.ts +0 -122
  967. package/src/layout/v2/flex.ts +0 -243
  968. package/src/layout/v2/index.ts +0 -1
  969. package/src/metric/index.ts +0 -1
  970. package/src/metric/metric.ts +0 -127
  971. package/src/store/context-array.ts +0 -358
  972. package/src/store/context-collection.ts +0 -218
  973. package/src/store/context-create.ts +0 -284
  974. package/src/store/context-object.ts +0 -298
  975. package/src/store/filter-directive.ts +0 -614
  976. package/src/store/index.ts +0 -10
  977. package/src/store/selector-hook.ts +0 -259
  978. package/src/store/selectors.ts +0 -289
  979. package/src/store/storage-manager.ts +0 -269
  980. package/src/store/store.class.ts +0 -239
  981. package/src/store/types.ts +0 -327
  982. package/src/tabs/tabs-compatibility.ts +0 -20
  983. package/src/typewriter/typewriter.ts +0 -410
  984. package/types/src/agent/index.d.ts +0 -1
  985. package/types/src/area/route.test.d.ts +0 -20
  986. package/types/src/button/button.test.d.ts +0 -1
  987. package/types/src/chips/chip.d.ts +0 -3
  988. package/types/src/components/index.d.ts +0 -1
  989. package/types/src/content-drawer/$sheet.d.ts +0 -14
  990. package/types/src/dialog/dailog.d.ts +0 -116
  991. package/types/src/dialog/dialog-content.d.ts +0 -17
  992. package/types/src/directives/guard.d.ts +0 -1
  993. package/types/src/directives/visibility.d.ts +0 -11
  994. package/types/src/form/form-v2.d.ts +0 -22
  995. package/types/src/input/input-v2.d.ts +0 -250
  996. package/types/src/layout/flex/flex.d.ts +0 -26
  997. package/types/src/layout/flex/index.d.ts +0 -1
  998. package/types/src/layout/grid/grid.d.ts +0 -39
  999. package/types/src/layout/grid/index.d.ts +0 -1
  1000. package/types/src/layout/layout.d.ts +0 -59
  1001. package/types/src/layout/v2/flex.d.ts +0 -65
  1002. package/types/src/layout/v2/grid.d.ts +0 -51
  1003. package/types/src/layout/v2/index.d.ts +0 -1
  1004. package/types/src/lightbox/flip.directive.d.ts +0 -22
  1005. package/types/src/metric/index.d.ts +0 -1
  1006. package/types/src/metric/metric.d.ts +0 -39
  1007. package/types/src/notification/outlet.d.ts +0 -10
  1008. package/types/src/sheet/header.d.ts +0 -10
  1009. package/types/src/store/context-array.d.ts +0 -83
  1010. package/types/src/store/context-collection.d.ts +0 -74
  1011. package/types/src/store/context-create.d.ts +0 -43
  1012. package/types/src/store/context-object.d.ts +0 -46
  1013. package/types/src/store/filter-directive.d.ts +0 -116
  1014. package/types/src/store/immer-integration.d.ts +0 -54
  1015. package/types/src/store/index.d.ts +0 -10
  1016. package/types/src/store/selector-hook.d.ts +0 -46
  1017. package/types/src/store/selectors.d.ts +0 -90
  1018. package/types/src/store/storage-manager.d.ts +0 -48
  1019. package/types/src/store/store.class.d.ts +0 -73
  1020. package/types/src/store/types.d.ts +0 -241
  1021. package/types/src/tabs/tabs-compatibility.d.ts +0 -13
  1022. package/types/src/theme/theme.elevation.d.ts +0 -131
  1023. package/types/src/theme/theme.motion.d.ts +0 -198
  1024. package/types/src/theme/theme.shape.d.ts +0 -144
  1025. package/types/src/theme/theme.state.d.ts +0 -546
  1026. package/types/src/theme/theme.typography.d.ts +0 -74
  1027. package/types/src/tooltip/tooltip.d.ts +0 -33
  1028. package/types/src/typewriter/typewriter.d.ts +0 -94
  1029. /package/dist/agent/{flow-CvG1fLW5.js → flow-CaPi2G8y.js} +0 -0
  1030. /package/dist/agent/{vendor-material-color-DcL7ZPxx.js → vendor-material-color-Be96dpGE.js} +0 -0
  1031. /package/dist/{animation-hXFClrIn.js → animation-BK-8BwY8.js} +0 -0
  1032. /package/dist/{animation-CQRdLgzX.cjs → animation-CO_Csq84.cjs} +0 -0
  1033. /package/dist/{decorate-D_utPUsC.js → decorate-23nYs4Le.js} +0 -0
  1034. /package/dist/{decorate-F9CuyeHg.cjs → decorate-DpFmy0nm.cjs} +0 -0
  1035. /package/dist/{hashContent-B2IntJQf.js → hashContent-1ARKIsx9.js} +0 -0
  1036. /package/dist/{hashContent-CahnEuut.cjs → hashContent-Bp5S6T4U.cjs} +0 -0
  1037. /package/dist/{lazy-D6R5N5v4.js → lazy-B0ia54tT.js} +0 -0
  1038. /package/dist/{lazy-BDNnH_r7.cjs → lazy-Dq9mRRjT.cjs} +0 -0
  1039. /package/dist/{reduced-motion-BZTLqAyl.js → reduced-motion-D-L12p7G.js} +0 -0
  1040. /package/dist/{reduced-motion-9RjNnhIg.cjs → reduced-motion-Ds-HjMzn.cjs} +0 -0
  1041. /package/dist/{rxjs-utils-DJbZRjp3.cjs → rxjs-utils-Csnks202.cjs} +0 -0
  1042. /package/dist/{rxjs-utils-CKTnEKUH.js → rxjs-utils-d-ivVN84.js} +0 -0
  1043. /package/dist/{theme.events-NuihzD_p.js → theme.events-Cv7N4Toe.js} +0 -0
  1044. /package/dist/{theme.events-DakXxZeP.cjs → theme.events-DM4H5F2d.cjs} +0 -0
  1045. /package/dist/{theme.interface-DTwkuAKJ.cjs → theme.interface-D9l33b-M.cjs} +0 -0
  1046. /package/dist/{theme.interface-Buged9Cg.js → theme.interface-DnVNre4O.js} +0 -0
  1047. /package/src/{directives/typewriter.ts → typewriter/typewriter.directive.ts} +0 -0
  1048. /package/types/src/{components/form-elements → payment-card-form}/index.d.ts +0 -0
  1049. /package/types/src/{directives/typewriter.d.ts → typewriter/typewriter.directive.d.ts} +0 -0
package/dist/tree.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-DRI1oTYQ.cjs`),t=require(`./decorate-F9CuyeHg.cjs`);require(`./mixins.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`);var a=class extends e.t(i.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`);var a=class extends e.s{constructor(...e){super(...e),this.open=!1,this._a11yId=`schmancy-tree-${Math.random().toString(36).slice(2,10)}`,this._internals=(()=>{try{return this.attachInternals()}catch{return}})()}static{this.styles=[i.css`
2
2
  :host {
3
3
  display: block;
4
4
  position: relative;
@@ -11,7 +11,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
11
11
  ::slotted([slot='root'] + *) {
12
12
  margin-top: 0.5rem;
13
13
  }
14
- `){constructor(...e){super(...e),this.open=!1,this._a11yId=`schmancy-tree-${Math.random().toString(36).slice(2,10)}`,this._internals=(()=>{try{return this.attachInternals()}catch{return}})()}get _contentId(){return`${this._a11yId}-content`}updated(e){super.updated?.(e),e.has(`open`)&&(this.open?this._internals?.states.add(`open`):this._internals?.states.delete(`open`))}firstUpdated(){this.open||(this.defaultSlot.hidden=!0),(0,n.merge)((0,n.fromEvent)(this.toggler,`click`).pipe((0,n.takeUntil)(this.disconnecting),(0,n.tap)(e=>{e.preventDefault(),e.stopPropagation(),this.dispatchEvent(new CustomEvent(`toggle`,{bubbles:!1,composed:!0}))})),(0,n.fromEvent)(this.chevron,`click`)).pipe((0,n.switchMap)(()=>{let e=this.open?180:0,t=this.open?0:180,r=this.chevron.animate([{transform:`rotate(${e}deg)`},{transform:`rotate(${t}deg)`}],{duration:150,easing:`ease-in`,fill:`forwards`});this.open||(this.defaultSlot.hidden=!1);let i=+!!this.open,a=+!this.open,o=this.defaultSlot.animate([{opacity:i},{opacity:a}],{duration:150,easing:`ease-out`,fill:`forwards`});return o.onfinish=()=>{this.open?this.defaultSlot.hidden=!0:(this.defaultSlot.style.height=`auto`,this.defaultSlot.style.opacity=`1`)},(0,n.zip)((0,n.fromEvent)(r,`finish`),(0,n.fromEvent)(o,`finish`)).pipe((0,n.takeUntil)(this.disconnecting))}),(0,n.tap)(()=>{this.open=!this.open}),(0,n.takeUntil)(this.disconnecting)).subscribe()}render(){return i.html`
14
+ `]}get _contentId(){return`${this._a11yId}-content`}updated(e){super.updated?.(e),e.has(`open`)&&(this.open?this._internals?.states.add(`open`):this._internals?.states.delete(`open`))}firstUpdated(){this.open||(this.defaultSlot.hidden=!0),(0,n.merge)((0,n.fromEvent)(this.toggler,`click`).pipe((0,n.takeUntil)(this.disconnecting),(0,n.tap)(e=>{e.preventDefault(),e.stopPropagation(),this.dispatchEvent(new CustomEvent(`toggle`,{bubbles:!1,composed:!0}))})),(0,n.fromEvent)(this.chevron,`click`)).pipe((0,n.switchMap)(()=>{let e=this.open?180:0,t=this.open?0:180,r=this.chevron.animate([{transform:`rotate(${e}deg)`},{transform:`rotate(${t}deg)`}],{duration:150,easing:`ease-in`,fill:`forwards`});this.open||(this.defaultSlot.hidden=!1);let i=+!!this.open,a=+!this.open,o=this.defaultSlot.animate([{opacity:i},{opacity:a}],{duration:150,easing:`ease-out`,fill:`forwards`});return o.onfinish=()=>{this.open?this.defaultSlot.hidden=!0:(this.defaultSlot.style.height=`auto`,this.defaultSlot.style.opacity=`1`)},(0,n.zip)((0,n.fromEvent)(r,`finish`),(0,n.fromEvent)(o,`finish`)).pipe((0,n.takeUntil)(this.disconnecting))}),(0,n.tap)(()=>{this.open=!this.open}),(0,n.takeUntil)(this.disconnecting)).subscribe()}render(){return i.html`
15
15
  <div class="flex content-center items-center justify-between">
16
16
  <!-- Root toggler content -->
17
17
  <slot id="toggler" name="root"></slot>
package/dist/tree.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tree.cjs","names":[],"sources":["../src/tree/tree.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { fromEvent, merge, switchMap, takeUntil, tap, zip } from 'rxjs'\n\n/**\n * Expandable tree node — a recursive disclosure widget. One root slot, one default slot for child nodes. Each node can itself contain schmancy-tree children.\n *\n * @element schmancy-tree\n * @summary Use for hierarchical navigation / file-explorer layouts. Each level is a schmancy-tree with a `root` slot (the parent label) and default slot (the children, which may be more schmancy-trees).\n * @example\n * <schmancy-tree>\n * <schmancy-list-item slot=\"root\">src/</schmancy-list-item>\n * <schmancy-tree>\n * <schmancy-list-item slot=\"root\">components/</schmancy-list-item>\n * <schmancy-list-item>button.ts</schmancy-list-item>\n * </schmancy-tree>\n * </schmancy-tree>\n * @platform details toggle - Recursive `<details>`-like disclosure. Degrades to a plain nested list if the tag never registers — loses expand/collapse but stays navigable.\n * @slot root - The root element of the tree\n * @slot - The children of the tree\n * @fires toggle - When the root toggler or chevron is clicked. Fires before the open state flips; the host's `open` property reflects the new state on the next animation frame.\n */\n@customElement('schmancy-tree')\nexport class SchmancyTree extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tbackground-color: initial;\n\t}\n\t::slotted([slot='root']) {\n\t\twidth: 100%;\n\t\ttext-align: left;\n\t}\n\t::slotted([slot='root'] + *) {\n\t\tmargin-top: 0.5rem;\n\t}\n`) {\n\t/**\n\t * Whether the tree’s children are visible\n\t */\n\t@property({ type: Boolean }) open = false\n\n\t@query('#toggler') toggler!: HTMLSlotElement\n\t@query('slot:not([name=\"root\"])') defaultSlot!: HTMLSlotElement\n\n\t// Since it's actually a <schmancy-button>, use HTMLElement or a custom type\n\t@query('#chevron') chevron!: HTMLElement\n\n\tprivate readonly _a11yId = `schmancy-tree-${Math.random().toString(36).slice(2, 10)}`\n\tprivate get _contentId() { return `${this._a11yId}-content` }\n\n\t/** ElementInternals — broadcasts `:state(open)` for consumer CSS. */\n\tprivate readonly _internals: ElementInternals | undefined = (() => {\n\t\ttry { return this.attachInternals() } catch { return undefined }\n\t})()\n\n\tupdated(changed: Map<string, unknown>) {\n\t\tsuper.updated?.(changed)\n\t\tif (changed.has('open')) {\n\t\t\tif (this.open) this._internals?.states.add('open')\n\t\t\telse this._internals?.states.delete('open')\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\t// Hide or show the slot initially based on `open`\n\t\tif (!this.open) {\n\t\t\tthis.defaultSlot.hidden = true\n\t\t}\n\n\t\t// Root toggler\n\t\tconst toggleClick$ = fromEvent<MouseEvent>(this.toggler, 'click').pipe(\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopPropagation()\n\t\t\t\tthis.dispatchEvent(new CustomEvent('toggle', { bubbles: false, composed: true }))\n\t\t\t}),\n\t\t)\n\n\t\t// Chevron (the schmancy-button) click\n\t\tconst chevronClick$ = fromEvent<MouseEvent>(this.chevron, 'click')\n\n\t\tmerge(toggleClick$, chevronClick$)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// 1. Animate the chevron rotation\n\t\t\t\t\t// If `open` is true, rotate from 180 -> 0; if false, from 0 -> 180\n\t\t\t\t\tconst fromDeg = this.open ? 180 : 0\n\t\t\t\t\tconst toDeg = this.open ? 0 : 180\n\t\t\t\t\tconst chevronAnimation = this.chevron.animate(\n\t\t\t\t\t\t[{ transform: `rotate(${fromDeg}deg)` }, { transform: `rotate(${toDeg}deg)` }],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\t\teasing: 'ease-in',\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\t// 2. Animate the slot’s height + opacity\n\t\t\t\t\tif (!this.open) {\n\t\t\t\t\t\t// We are about to open, so remove `hidden` to measure scrollHeight\n\t\t\t\t\t\tthis.defaultSlot.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fromOpacity = this.open ? 1 : 0\n\t\t\t\t\tconst toOpacity = this.open ? 0 : 1\n\n\t\t\t\t\tconst slotAnimation = this.defaultSlot.animate([{ opacity: fromOpacity }, { opacity: toOpacity }], {\n\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Hide the slot if we just closed it\n\t\t\t\t\tslotAnimation.onfinish = () => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.defaultSlot.hidden = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.defaultSlot.style.height = 'auto'\n\t\t\t\t\t\t\tthis.defaultSlot.style.opacity = '1'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return an Observable that completes when both animations finish\n\t\t\t\t\treturn zip(fromEvent(chevronAnimation, 'finish'), fromEvent(slotAnimation, 'finish')).pipe(\n\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(() => {\n\t\t\t\t\t// Flip the open state\n\t\t\t\t\tthis.open = !this.open\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"flex content-center items-center justify-between\">\n\t\t\t\t<!-- Root toggler content -->\n\t\t\t\t<slot id=\"toggler\" name=\"root\"></slot>\n\n\t\t\t\t<!-- The chevron or arrow symbol -->\n\t\t\t\t<!-- Stop propagation on the schmancy-button itself just to avoid double triggers -->\n\t\t\t\t<schmancy-button\n\t\t\t\t\tslot=\"trailing\"\n\t\t\t\t\tid=\"chevron\"\n\t\t\t\t\taria-expanded=${this.open ? 'true' : 'false'}\n\t\t\t\t\taria-controls=${this._contentId}\n\t\t\t\t\taria-label=${this.open ? 'Collapse' : 'Expand'}\n\t\t\t\t\t@click=${(e: Event) => e.stopPropagation()}\n\t\t\t\t>\n\t\t\t\t\t⌅\n\t\t\t\t</schmancy-button>\n\t\t\t</div>\n\n\t\t\t<!-- The default slot: tree children -->\n\t\t\t<slot id=${this._contentId}></slot>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tree': SchmancyTree\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tree.cjs","names":[],"sources":["../src/tree/tree.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { fromEvent, merge, switchMap, takeUntil, tap, zip } from 'rxjs'\n\n/**\n * @element schmancy-tree\n * @slot root - The root element of the tree\n * @slot - The children of the tree\n */\n@customElement('schmancy-tree')\nexport class SchmancyTree extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tbackground-color: initial;\n\t}\n\t::slotted([slot='root']) {\n\t\twidth: 100%;\n\t\ttext-align: left;\n\t}\n\t::slotted([slot='root'] + *) {\n\t\tmargin-top: 0.5rem;\n\t}\n`];\n\t/**\n\t * Whether the tree’s children are visible\n\t */\n\t@property({ type: Boolean }) open = false\n\n\t@query('#toggler') toggler!: HTMLSlotElement\n\t@query('slot:not([name=\"root\"])') defaultSlot!: HTMLSlotElement\n\n\t// Since it's actually a <schmancy-button>, use HTMLElement or a custom type\n\t@query('#chevron') chevron!: HTMLElement\n\n\tprivate readonly _a11yId = `schmancy-tree-${Math.random().toString(36).slice(2, 10)}`\n\tprivate get _contentId() { return `${this._a11yId}-content` }\n\n\t/** ElementInternals — broadcasts `:state(open)` for consumer CSS. */\n\tprivate readonly _internals: ElementInternals | undefined = (() => {\n\t\ttry { return this.attachInternals() } catch { return undefined }\n\t})()\n\n\tupdated(changed: Map<string, unknown>) {\n\t\tsuper.updated?.(changed)\n\t\tif (changed.has('open')) {\n\t\t\tif (this.open) this._internals?.states.add('open')\n\t\t\telse this._internals?.states.delete('open')\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\t// Hide or show the slot initially based on `open`\n\t\tif (!this.open) {\n\t\t\tthis.defaultSlot.hidden = true\n\t\t}\n\n\t\t// Root toggler\n\t\tconst toggleClick$ = fromEvent<MouseEvent>(this.toggler, 'click').pipe(\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopPropagation()\n\t\t\t\tthis.dispatchEvent(new CustomEvent('toggle', { bubbles: false, composed: true }))\n\t\t\t}),\n\t\t)\n\n\t\t// Chevron (the schmancy-button) click\n\t\tconst chevronClick$ = fromEvent<MouseEvent>(this.chevron, 'click')\n\n\t\tmerge(toggleClick$, chevronClick$)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// 1. Animate the chevron rotation\n\t\t\t\t\t// If `open` is true, rotate from 180 -> 0; if false, from 0 -> 180\n\t\t\t\t\tconst fromDeg = this.open ? 180 : 0\n\t\t\t\t\tconst toDeg = this.open ? 0 : 180\n\t\t\t\t\tconst chevronAnimation = this.chevron.animate(\n\t\t\t\t\t\t[{ transform: `rotate(${fromDeg}deg)` }, { transform: `rotate(${toDeg}deg)` }],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\t\teasing: 'ease-in',\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\t// 2. Animate the slot’s height + opacity\n\t\t\t\t\tif (!this.open) {\n\t\t\t\t\t\t// We are about to open, so remove `hidden` to measure scrollHeight\n\t\t\t\t\t\tthis.defaultSlot.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fromOpacity = this.open ? 1 : 0\n\t\t\t\t\tconst toOpacity = this.open ? 0 : 1\n\n\t\t\t\t\tconst slotAnimation = this.defaultSlot.animate([{ opacity: fromOpacity }, { opacity: toOpacity }], {\n\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Hide the slot if we just closed it\n\t\t\t\t\tslotAnimation.onfinish = () => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.defaultSlot.hidden = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.defaultSlot.style.height = 'auto'\n\t\t\t\t\t\t\tthis.defaultSlot.style.opacity = '1'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return an Observable that completes when both animations finish\n\t\t\t\t\treturn zip(fromEvent(chevronAnimation, 'finish'), fromEvent(slotAnimation, 'finish')).pipe(\n\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(() => {\n\t\t\t\t\t// Flip the open state\n\t\t\t\t\tthis.open = !this.open\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"flex content-center items-center justify-between\">\n\t\t\t\t<!-- Root toggler content -->\n\t\t\t\t<slot id=\"toggler\" name=\"root\"></slot>\n\n\t\t\t\t<!-- The chevron or arrow symbol -->\n\t\t\t\t<!-- Stop propagation on the schmancy-button itself just to avoid double triggers -->\n\t\t\t\t<schmancy-button\n\t\t\t\t\tslot=\"trailing\"\n\t\t\t\t\tid=\"chevron\"\n\t\t\t\t\taria-expanded=${this.open ? 'true' : 'false'}\n\t\t\t\t\taria-controls=${this._contentId}\n\t\t\t\t\taria-label=${this.open ? 'Collapse' : 'Expand'}\n\t\t\t\t\t@click=${(e: Event) => e.stopPropagation()}\n\t\t\t\t>\n\t\t\t\t\t⌅\n\t\t\t\t</schmancy-button>\n\t\t\t</div>\n\n\t\t\t<!-- The default slot: tree children -->\n\t\t\t<slot id=${this._contentId}></slot>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tree': SchmancyTree\n\t}\n}\n"],"mappings":"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"}
package/dist/tree.js CHANGED
@@ -1,10 +1,20 @@
1
- import { t as e } from "./tailwind.mixin-mdQR3BEO.js";
2
- import { t } from "./decorate-D_utPUsC.js";
3
- import "./mixins.js";
1
+ import { s as e } from "./mixins-CcIWET41.js";
2
+ import { t } from "./decorate-23nYs4Le.js";
4
3
  import { fromEvent as n, merge as r, switchMap as i, takeUntil as a, tap as o, zip as s } from "rxjs";
5
4
  import { customElement as c, property as l, query as u } from "lit/decorators.js";
6
5
  import { css as d, html as f } from "lit";
7
- var p = class extends e(d`
6
+ var p = class extends e {
7
+ constructor(...e) {
8
+ super(...e), this.open = !1, this._a11yId = `schmancy-tree-${Math.random().toString(36).slice(2, 10)}`, this._internals = (() => {
9
+ try {
10
+ return this.attachInternals();
11
+ } catch {
12
+ return;
13
+ }
14
+ })();
15
+ }
16
+ static {
17
+ this.styles = [d`
8
18
  :host {
9
19
  display: block;
10
20
  position: relative;
@@ -17,15 +27,7 @@ var p = class extends e(d`
17
27
  ::slotted([slot='root'] + *) {
18
28
  margin-top: 0.5rem;
19
29
  }
20
- `) {
21
- constructor(...e) {
22
- super(...e), this.open = !1, this._a11yId = `schmancy-tree-${Math.random().toString(36).slice(2, 10)}`, this._internals = (() => {
23
- try {
24
- return this.attachInternals();
25
- } catch {
26
- return;
27
- }
28
- })();
30
+ `];
29
31
  }
30
32
  get _contentId() {
31
33
  return `${this._a11yId}-content`;
package/dist/tree.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tree.js","names":[],"sources":["../src/tree/tree.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { fromEvent, merge, switchMap, takeUntil, tap, zip } from 'rxjs'\n\n/**\n * Expandable tree node — a recursive disclosure widget. One root slot, one default slot for child nodes. Each node can itself contain schmancy-tree children.\n *\n * @element schmancy-tree\n * @summary Use for hierarchical navigation / file-explorer layouts. Each level is a schmancy-tree with a `root` slot (the parent label) and default slot (the children, which may be more schmancy-trees).\n * @example\n * <schmancy-tree>\n * <schmancy-list-item slot=\"root\">src/</schmancy-list-item>\n * <schmancy-tree>\n * <schmancy-list-item slot=\"root\">components/</schmancy-list-item>\n * <schmancy-list-item>button.ts</schmancy-list-item>\n * </schmancy-tree>\n * </schmancy-tree>\n * @platform details toggle - Recursive `<details>`-like disclosure. Degrades to a plain nested list if the tag never registers — loses expand/collapse but stays navigable.\n * @slot root - The root element of the tree\n * @slot - The children of the tree\n * @fires toggle - When the root toggler or chevron is clicked. Fires before the open state flips; the host's `open` property reflects the new state on the next animation frame.\n */\n@customElement('schmancy-tree')\nexport class SchmancyTree extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tbackground-color: initial;\n\t}\n\t::slotted([slot='root']) {\n\t\twidth: 100%;\n\t\ttext-align: left;\n\t}\n\t::slotted([slot='root'] + *) {\n\t\tmargin-top: 0.5rem;\n\t}\n`) {\n\t/**\n\t * Whether the tree’s children are visible\n\t */\n\t@property({ type: Boolean }) open = false\n\n\t@query('#toggler') toggler!: HTMLSlotElement\n\t@query('slot:not([name=\"root\"])') defaultSlot!: HTMLSlotElement\n\n\t// Since it's actually a <schmancy-button>, use HTMLElement or a custom type\n\t@query('#chevron') chevron!: HTMLElement\n\n\tprivate readonly _a11yId = `schmancy-tree-${Math.random().toString(36).slice(2, 10)}`\n\tprivate get _contentId() { return `${this._a11yId}-content` }\n\n\t/** ElementInternals — broadcasts `:state(open)` for consumer CSS. */\n\tprivate readonly _internals: ElementInternals | undefined = (() => {\n\t\ttry { return this.attachInternals() } catch { return undefined }\n\t})()\n\n\tupdated(changed: Map<string, unknown>) {\n\t\tsuper.updated?.(changed)\n\t\tif (changed.has('open')) {\n\t\t\tif (this.open) this._internals?.states.add('open')\n\t\t\telse this._internals?.states.delete('open')\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\t// Hide or show the slot initially based on `open`\n\t\tif (!this.open) {\n\t\t\tthis.defaultSlot.hidden = true\n\t\t}\n\n\t\t// Root toggler\n\t\tconst toggleClick$ = fromEvent<MouseEvent>(this.toggler, 'click').pipe(\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopPropagation()\n\t\t\t\tthis.dispatchEvent(new CustomEvent('toggle', { bubbles: false, composed: true }))\n\t\t\t}),\n\t\t)\n\n\t\t// Chevron (the schmancy-button) click\n\t\tconst chevronClick$ = fromEvent<MouseEvent>(this.chevron, 'click')\n\n\t\tmerge(toggleClick$, chevronClick$)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// 1. Animate the chevron rotation\n\t\t\t\t\t// If `open` is true, rotate from 180 -> 0; if false, from 0 -> 180\n\t\t\t\t\tconst fromDeg = this.open ? 180 : 0\n\t\t\t\t\tconst toDeg = this.open ? 0 : 180\n\t\t\t\t\tconst chevronAnimation = this.chevron.animate(\n\t\t\t\t\t\t[{ transform: `rotate(${fromDeg}deg)` }, { transform: `rotate(${toDeg}deg)` }],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\t\teasing: 'ease-in',\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\t// 2. Animate the slot’s height + opacity\n\t\t\t\t\tif (!this.open) {\n\t\t\t\t\t\t// We are about to open, so remove `hidden` to measure scrollHeight\n\t\t\t\t\t\tthis.defaultSlot.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fromOpacity = this.open ? 1 : 0\n\t\t\t\t\tconst toOpacity = this.open ? 0 : 1\n\n\t\t\t\t\tconst slotAnimation = this.defaultSlot.animate([{ opacity: fromOpacity }, { opacity: toOpacity }], {\n\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Hide the slot if we just closed it\n\t\t\t\t\tslotAnimation.onfinish = () => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.defaultSlot.hidden = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.defaultSlot.style.height = 'auto'\n\t\t\t\t\t\t\tthis.defaultSlot.style.opacity = '1'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return an Observable that completes when both animations finish\n\t\t\t\t\treturn zip(fromEvent(chevronAnimation, 'finish'), fromEvent(slotAnimation, 'finish')).pipe(\n\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(() => {\n\t\t\t\t\t// Flip the open state\n\t\t\t\t\tthis.open = !this.open\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"flex content-center items-center justify-between\">\n\t\t\t\t<!-- Root toggler content -->\n\t\t\t\t<slot id=\"toggler\" name=\"root\"></slot>\n\n\t\t\t\t<!-- The chevron or arrow symbol -->\n\t\t\t\t<!-- Stop propagation on the schmancy-button itself just to avoid double triggers -->\n\t\t\t\t<schmancy-button\n\t\t\t\t\tslot=\"trailing\"\n\t\t\t\t\tid=\"chevron\"\n\t\t\t\t\taria-expanded=${this.open ? 'true' : 'false'}\n\t\t\t\t\taria-controls=${this._contentId}\n\t\t\t\t\taria-label=${this.open ? 'Collapse' : 'Expand'}\n\t\t\t\t\t@click=${(e: Event) => e.stopPropagation()}\n\t\t\t\t>\n\t\t\t\t\t⌅\n\t\t\t\t</schmancy-button>\n\t\t\t</div>\n\n\t\t\t<!-- The default slot: tree children -->\n\t\t\t<slot id=${this._contentId}></slot>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tree': SchmancyTree\n\t}\n}\n"],"mappings":";;;;;;AAwBO,IAAA,IAAA,cAA2B,EAAgB,CAAG;;;;;;;;;;;;;;;4BAiBhB,GAAA,KAAA,UAQT,iBAAiB,KAAK,QAAA,CAAS,SAAS,GAAA,CAAI,MAAM,GAAG,GAAA,IAAA,KAAA,oBAAA;AAK/E,OAAA;AAAM,WAAO,KAAK,iBAAA;WAAA;AAA4B;;MAAA;;CAJ/C,IAAA,aAAY;AAAe,SAAO,GAAG,KAAK,QAAA;;CAO1C,QAAQ,GAAA;AACP,QAAM,UAAU,EAAA,EACZ,EAAQ,IAAI,OAAA,KACX,KAAK,OAAM,KAAK,YAAY,OAAO,IAAI,OAAA,GACtC,KAAK,YAAY,OAAO,OAAO,OAAA;;CAItC,eAAA;AAEM,OAAK,SACT,KAAK,YAAY,SAAA,CAAS,IAgB3B,EAZqB,EAAsB,KAAK,SAAS,QAAA,CAAS,KACjE,EAAU,KAAK,cAAA,EACf,GAAI,MAAA;AACH,KAAE,gBAAA,EACF,EAAE,iBAAA,EACF,KAAK,cAAc,IAAI,YAAY,UAAU;IAAE,SAAA,CAAS;IAAO,UAAA,CAAU;IAAA,CAAA,CAAA;IAAA,CAAA,EAKrD,EAAsB,KAAK,SAAS,QAAA,CAAA,CAGxD,KACA,QAAA;GAGC,IAAM,IAAU,KAAK,OAAO,MAAM,GAC5B,IAAQ,KAAK,OAAO,IAAI,KACxB,IAAmB,KAAK,QAAQ,QACrC,CAAC,EAAE,WAAW,UAAU,EAAA,OAAA,EAAiB,EAAE,WAAW,UAAU,EAAA,OAAA,CAAA,EAChE;IACC,UAAU;IACV,QAAQ;IACR,MAAM;IAAA,CAAA;AAKH,QAAK,SAET,KAAK,YAAY,SAAA,CAAS;GAG3B,IAAM,IAAc,QAAK,MACnB,IAAY,OAAK,MAEjB,IAAgB,KAAK,YAAY,QAAQ,CAAC,EAAE,SAAS,GAAA,EAAe,EAAE,SAAS,GAAA,CAAA,EAAc;IAClG,UAAU;IACV,QAAQ;IACR,MAAM;IAAA,CAAA;AAcP,UAVA,EAAc,iBAAA;AACT,SAAK,OACR,KAAK,YAAY,SAAA,CAAS,KAE1B,KAAK,YAAY,MAAM,SAAS,QAChC,KAAK,YAAY,MAAM,UAAU;MAK5B,EAAI,EAAU,GAAkB,SAAA,EAAW,EAAU,GAAe,SAAA,CAAA,CAAW,KACrF,EAAU,KAAK,cAAA,CAAA;IAAA,EAGjB,QAAA;AAEC,QAAK,OAAA,CAAQ,KAAK;IAAA,EAEnB,EAAU,KAAK,cAAA,CAAA,CAEf,WAAA;;CAGH,SAAA;AACC,SAAO,CAAI;;;;;;;;;;qBAUQ,KAAK,OAAO,SAAS,QAAA;qBACrB,KAAK,WAAA;kBACR,KAAK,OAAO,aAAa,SAAA;eAC5B,MAAa,EAAE,iBAAA,CAAA;;;;;;;cAOhB,KAAK,WAAA;;;;GAvHjB,EAAS,EAAE,MAAM,SAAA,CAAA,CAAA,EAAU,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CAE3B,EAAM,WAAA,CAAA,EAAW,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CACjB,EAAM,4BAAA,CAAA,EAA0B,EAAA,WAAA,eAAA,KAAA,EAAA,EAAA,EAAA,CAGhC,EAAM,WAAA,CAAA,EAAW,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAxBlB,EAAc,gBAAA,CAAA,EAAgB,EAAA;AAAA,SAAA,KAAA"}
1
+ {"version":3,"file":"tree.js","names":[],"sources":["../src/tree/tree.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { fromEvent, merge, switchMap, takeUntil, tap, zip } from 'rxjs'\n\n/**\n * @element schmancy-tree\n * @slot root - The root element of the tree\n * @slot - The children of the tree\n */\n@customElement('schmancy-tree')\nexport class SchmancyTree extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tbackground-color: initial;\n\t}\n\t::slotted([slot='root']) {\n\t\twidth: 100%;\n\t\ttext-align: left;\n\t}\n\t::slotted([slot='root'] + *) {\n\t\tmargin-top: 0.5rem;\n\t}\n`];\n\t/**\n\t * Whether the tree’s children are visible\n\t */\n\t@property({ type: Boolean }) open = false\n\n\t@query('#toggler') toggler!: HTMLSlotElement\n\t@query('slot:not([name=\"root\"])') defaultSlot!: HTMLSlotElement\n\n\t// Since it's actually a <schmancy-button>, use HTMLElement or a custom type\n\t@query('#chevron') chevron!: HTMLElement\n\n\tprivate readonly _a11yId = `schmancy-tree-${Math.random().toString(36).slice(2, 10)}`\n\tprivate get _contentId() { return `${this._a11yId}-content` }\n\n\t/** ElementInternals — broadcasts `:state(open)` for consumer CSS. */\n\tprivate readonly _internals: ElementInternals | undefined = (() => {\n\t\ttry { return this.attachInternals() } catch { return undefined }\n\t})()\n\n\tupdated(changed: Map<string, unknown>) {\n\t\tsuper.updated?.(changed)\n\t\tif (changed.has('open')) {\n\t\t\tif (this.open) this._internals?.states.add('open')\n\t\t\telse this._internals?.states.delete('open')\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\t// Hide or show the slot initially based on `open`\n\t\tif (!this.open) {\n\t\t\tthis.defaultSlot.hidden = true\n\t\t}\n\n\t\t// Root toggler\n\t\tconst toggleClick$ = fromEvent<MouseEvent>(this.toggler, 'click').pipe(\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopPropagation()\n\t\t\t\tthis.dispatchEvent(new CustomEvent('toggle', { bubbles: false, composed: true }))\n\t\t\t}),\n\t\t)\n\n\t\t// Chevron (the schmancy-button) click\n\t\tconst chevronClick$ = fromEvent<MouseEvent>(this.chevron, 'click')\n\n\t\tmerge(toggleClick$, chevronClick$)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// 1. Animate the chevron rotation\n\t\t\t\t\t// If `open` is true, rotate from 180 -> 0; if false, from 0 -> 180\n\t\t\t\t\tconst fromDeg = this.open ? 180 : 0\n\t\t\t\t\tconst toDeg = this.open ? 0 : 180\n\t\t\t\t\tconst chevronAnimation = this.chevron.animate(\n\t\t\t\t\t\t[{ transform: `rotate(${fromDeg}deg)` }, { transform: `rotate(${toDeg}deg)` }],\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\t\teasing: 'ease-in',\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\n\t\t\t\t\t// 2. Animate the slot’s height + opacity\n\t\t\t\t\tif (!this.open) {\n\t\t\t\t\t\t// We are about to open, so remove `hidden` to measure scrollHeight\n\t\t\t\t\t\tthis.defaultSlot.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\tconst fromOpacity = this.open ? 1 : 0\n\t\t\t\t\tconst toOpacity = this.open ? 0 : 1\n\n\t\t\t\t\tconst slotAnimation = this.defaultSlot.animate([{ opacity: fromOpacity }, { opacity: toOpacity }], {\n\t\t\t\t\t\tduration: 150,\n\t\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Hide the slot if we just closed it\n\t\t\t\t\tslotAnimation.onfinish = () => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.defaultSlot.hidden = true\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.defaultSlot.style.height = 'auto'\n\t\t\t\t\t\t\tthis.defaultSlot.style.opacity = '1'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return an Observable that completes when both animations finish\n\t\t\t\t\treturn zip(fromEvent(chevronAnimation, 'finish'), fromEvent(slotAnimation, 'finish')).pipe(\n\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(() => {\n\t\t\t\t\t// Flip the open state\n\t\t\t\t\tthis.open = !this.open\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"flex content-center items-center justify-between\">\n\t\t\t\t<!-- Root toggler content -->\n\t\t\t\t<slot id=\"toggler\" name=\"root\"></slot>\n\n\t\t\t\t<!-- The chevron or arrow symbol -->\n\t\t\t\t<!-- Stop propagation on the schmancy-button itself just to avoid double triggers -->\n\t\t\t\t<schmancy-button\n\t\t\t\t\tslot=\"trailing\"\n\t\t\t\t\tid=\"chevron\"\n\t\t\t\t\taria-expanded=${this.open ? 'true' : 'false'}\n\t\t\t\t\taria-controls=${this._contentId}\n\t\t\t\t\taria-label=${this.open ? 'Collapse' : 'Expand'}\n\t\t\t\t\t@click=${(e: Event) => e.stopPropagation()}\n\t\t\t\t>\n\t\t\t\t\t⌅\n\t\t\t\t</schmancy-button>\n\t\t\t</div>\n\n\t\t\t<!-- The default slot: tree children -->\n\t\t\t<slot id=${this._contentId}></slot>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tree': SchmancyTree\n\t}\n}\n"],"mappings":";;;;;AAWO,IAAA,IAAA,cAA2B,EAAA;CAAA,YAAA,GAAA,GAAA;AAAA,QAAA,GAAA,EAAA,EAAA,KAAA,OAAA,CAkBG,GAAA,KAAA,UAQT,iBAAiB,KAAK,QAAA,CAAS,SAAS,GAAA,CAAI,MAAM,GAAG,GAAA,IAAA,KAAA,oBAAA;AAK/E,OAAA;AAAM,WAAO,KAAK,iBAAA;WAAA;AAA4B;;MAAA;;CAAA;AAAA,OAAA,SA9B/B,CAAC,CAAG;;;;;;;;;;;;;;;CA0BpB,IAAA,aAAY;AAAe,SAAO,GAAG,KAAK,QAAA;;CAO1C,QAAQ,GAAA;AACP,QAAM,UAAU,EAAA,EACZ,EAAQ,IAAI,OAAA,KACX,KAAK,OAAM,KAAK,YAAY,OAAO,IAAI,OAAA,GACtC,KAAK,YAAY,OAAO,OAAO,OAAA;;CAItC,eAAA;AAEM,OAAK,SACT,KAAK,YAAY,SAAA,CAAS,IAgB3B,EAZqB,EAAsB,KAAK,SAAS,QAAA,CAAS,KACjE,EAAU,KAAK,cAAA,EACf,GAAI,MAAA;AACH,KAAE,gBAAA,EACF,EAAE,iBAAA,EACF,KAAK,cAAc,IAAI,YAAY,UAAU;IAAE,SAAA,CAAS;IAAO,UAAA,CAAU;IAAA,CAAA,CAAA;IAAA,CAAA,EAKrD,EAAsB,KAAK,SAAS,QAAA,CAAA,CAGxD,KACA,QAAA;GAGC,IAAM,IAAU,KAAK,OAAO,MAAM,GAC5B,IAAQ,KAAK,OAAO,IAAI,KACxB,IAAmB,KAAK,QAAQ,QACrC,CAAC,EAAE,WAAW,UAAU,EAAA,OAAA,EAAiB,EAAE,WAAW,UAAU,EAAA,OAAA,CAAA,EAChE;IACC,UAAU;IACV,QAAQ;IACR,MAAM;IAAA,CAAA;AAKH,QAAK,SAET,KAAK,YAAY,SAAA,CAAS;GAG3B,IAAM,IAAc,QAAK,MACnB,IAAY,OAAK,MAEjB,IAAgB,KAAK,YAAY,QAAQ,CAAC,EAAE,SAAS,GAAA,EAAe,EAAE,SAAS,GAAA,CAAA,EAAc;IAClG,UAAU;IACV,QAAQ;IACR,MAAM;IAAA,CAAA;AAcP,UAVA,EAAc,iBAAA;AACT,SAAK,OACR,KAAK,YAAY,SAAA,CAAS,KAE1B,KAAK,YAAY,MAAM,SAAS,QAChC,KAAK,YAAY,MAAM,UAAU;MAK5B,EAAI,EAAU,GAAkB,SAAA,EAAW,EAAU,GAAe,SAAA,CAAA,CAAW,KACrF,EAAU,KAAK,cAAA,CAAA;IAAA,EAGjB,QAAA;AAEC,QAAK,OAAA,CAAQ,KAAK;IAAA,EAEnB,EAAU,KAAK,cAAA,CAAA,CAEf,WAAA;;CAGH,SAAA;AACC,SAAO,CAAI;;;;;;;;;;qBAUQ,KAAK,OAAO,SAAS,QAAA;qBACrB,KAAK,WAAA;kBACR,KAAK,OAAO,aAAa,SAAA;eAC5B,MAAa,EAAE,iBAAA,CAAA;;;;;;;cAOhB,KAAK,WAAA;;;;GAvHjB,EAAS,EAAE,MAAM,SAAA,CAAA,CAAA,EAAU,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CAE3B,EAAM,WAAA,CAAA,EAAW,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CACjB,EAAM,4BAAA,CAAA,EAA0B,EAAA,WAAA,eAAA,KAAA,EAAA,EAAA,EAAA,CAGhC,EAAM,WAAA,CAAA,EAAW,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAzBlB,EAAc,gBAAA,CAAA,EAAgB,EAAA;AAAA,SAAA,KAAA"}
@@ -1,123 +1,10 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-DRI1oTYQ.cjs`),t=require(`./decorate-F9CuyeHg.cjs`),n=require(`./litElement.mixin-qh5-IIUq.cjs`);require(`./mixins.cjs`);const r=require(`./delay-BHODnTg-.cjs`),i=require(`./hashContent-CahnEuut.cjs`),a=require(`./intersection-DqBqnpgh.cjs`);let o=require(`lit/decorators.js`),s=require(`lit`);var c=null,l=class extends n.t(s.css`
2
- :host {
3
- display: inline-block;
4
- }
5
-
6
- #typewriter {
7
- position: relative;
8
- }
9
-
10
- /* Enhanced cursor with glow effect */
11
- #typewriter :global(.ti-cursor) {
12
- animation: cursor-pulse 1.2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
13
- color: currentColor;
14
- filter: drop-shadow(0 0 8px currentColor);
15
- }
16
-
17
- @keyframes cursor-pulse {
18
- 0%, 100% {
19
- opacity: 1;
20
- transform: scale(1);
21
- }
22
- 50% {
23
- opacity: 0.3;
24
- transform: scale(0.95);
25
- }
26
- }
27
-
28
- /* Character entrance animation */
29
- #typewriter :global(.ti-container *) {
30
- animation: char-entrance 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;
31
- }
32
-
33
- @keyframes char-entrance {
34
- 0% {
35
- opacity: 0;
36
- transform: scale(0.3) translateY(10px);
37
- filter: blur(4px);
38
- }
39
- 50% {
40
- opacity: 0.8;
41
- transform: scale(1.1) translateY(-2px);
42
- }
43
- 100% {
44
- opacity: 1;
45
- transform: scale(1) translateY(0);
46
- filter: blur(0);
47
- }
48
- }
49
-
50
- /* Subtle character wobble on appear */
51
- #typewriter :global(.ti-container *:nth-child(odd)) {
52
- animation: char-entrance 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) backwards,
53
- char-wobble 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) 0.15s backwards;
54
- }
55
-
56
- @keyframes char-wobble {
57
- 0%, 100% {
58
- transform: rotate(0deg);
59
- }
60
- 25% {
61
- transform: rotate(2deg);
62
- }
63
- 75% {
64
- transform: rotate(-2deg);
65
- }
66
- }
67
-
68
- /* Deletion animation - fade out and scale down */
69
- #typewriter :global(.ti-container .deleting) {
70
- animation: char-delete 0.2s cubic-bezier(0.4, 0, 1, 1) forwards;
71
- }
72
-
73
- @keyframes char-delete {
74
- 0% {
75
- opacity: 1;
76
- transform: scale(1);
77
- filter: blur(0);
78
- }
79
- 50% {
80
- opacity: 0.5;
81
- transform: scale(0.8) translateY(-3px);
82
- }
83
- 100% {
84
- opacity: 0;
85
- transform: scale(0.4) translateY(-8px);
86
- filter: blur(3px);
87
- }
88
- }
89
-
90
- /* Gradient text effect on typed text */
91
- #typewriter :global(.ti-container) {
92
- background: linear-gradient(
93
- 90deg,
94
- currentColor 0%,
95
- currentColor 70%,
96
- transparent 100%
97
- );
98
- -webkit-background-clip: text;
99
- background-clip: text;
100
- animation: gradient-shift 3s ease-in-out infinite;
101
- }
102
-
103
- @keyframes gradient-shift {
104
- 0%, 100% {
105
- filter: brightness(1) saturate(1);
106
- }
107
- 50% {
108
- filter: brightness(1.15) saturate(1.2);
109
- }
110
- }
111
-
112
- /* Smooth transitions for all text */
113
- #typewriter * {
114
- transition: opacity 0.15s ease-out, transform 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
115
- }
116
- `){constructor(...e){super(...e),this.speed=35,this.delay=0,this.autoStart=!0,this.cursorChar=``,this.deleteSpeed=20,this.once=!0,this.loop=!1,this.cyclePause=1500,this.typeItInstance=null,this.sessionKey=``}disconnectedCallback(){super.disconnectedCallback(),this._destroyTypeIt()}async _startTyping(){if(this._destroyTypeIt(),this.sessionKey=this.generateSessionKey(),this.once&&sessionStorage.getItem(this.sessionKey)===`true`)return void this.shadowRoot?.querySelector(`slot`)?.removeAttribute(`hidden`);if(!this.typewriterContainer)return;let e={speed:this.speed,startDelay:this.delay,cursor:!!this.cursorChar,cursorChar:this.cursorChar,deleteSpeed:this.deleteSpeed,loop:this.loop,afterComplete:()=>{if(this.once&&!this.loop)try{sessionStorage.setItem(this.sessionKey,`true`)}catch{}this.dispatchEvent(new CustomEvent(`typeit-complete`,{bubbles:!0,composed:!0})),this.loop||this.typewriterContainer.style.setProperty(`--ti-cursor-display`,`none`)}},t=await(c||=Promise.resolve().then(()=>require(`./index.es-BgmFX1JM.cjs`)).then(e=>e.default));this.isConnected&&(this.typeItInstance=new t(this.typewriterContainer,e),this._getSlottedNodes.forEach(e=>{if(e.nodeType===Node.TEXT_NODE){let t=e.textContent||``;t.trim()&&this.typeItInstance?.type(t)}else e instanceof HTMLElement&&this._processCustomElement(e)}),a.t(this.shadowRoot?.host).subscribe(()=>{this.typeItInstance?.go()}))}generateSessionKey(){let e=this._getSlottedElements.map(e=>e.outerHTML).join(``);return this.once?i.t(e):``}_destroyTypeIt(){if(this.typeItInstance){try{this.typeItInstance.destroy()}catch{}this.typeItInstance=null}}_processCustomElement(e){let t=e.getAttribute(`action`),n=e.getAttribute(`value`),r=e.getAttribute(`cycle`);if(r){let t=r.split(`|`).map(e=>e.trim());this._processCycle(t,e);return}switch(t){case`pause`:this.typeItInstance?.pause(parseInt(n||`0`,10));break;case`delete`:this.typeItInstance?.delete(parseInt(n||`0`,10));break;default:e.tagName===`P`&&this.typeItInstance?.break(),this.typeItInstance?.type(e.textContent||``)}}_processCycle(e,t){if(e.length===0)return;let n=t.getAttribute(`pause`),r=n?parseInt(n,10):this.cyclePause;e.forEach((t,n)=>{this.typeItInstance?.type(t),(n<e.length-1||this.loop)&&this.typeItInstance?.pause(r),(n<e.length-1||this.loop)&&this.typeItInstance?.delete(t.length)})}render(){return s.html`<div id="typewriter" aria-live="polite"></div>
117
-
118
- <div class="typewriter">
119
- <slot
120
- hidden
121
- @slotchange=${()=>{this._startTyping()}}
122
- ></slot>
123
- </div> `}};t.t([(0,o.property)({type:Number})],l.prototype,`speed`,void 0),t.t([e.a({context:r.n,subscribe:!0}),(0,o.property)({type:Number})],l.prototype,`delay`,void 0),t.t([(0,o.property)({type:Boolean})],l.prototype,`autoStart`,void 0),t.t([(0,o.property)({type:String})],l.prototype,`cursorChar`,void 0),t.t([(0,o.property)({type:Number})],l.prototype,`deleteSpeed`,void 0),t.t([(0,o.property)({type:Boolean})],l.prototype,`once`,void 0),t.t([(0,o.property)({type:Boolean})],l.prototype,`loop`,void 0),t.t([(0,o.property)({type:Number})],l.prototype,`cyclePause`,void 0),t.t([(0,o.query)(`#typewriter`)],l.prototype,`typewriterContainer`,void 0),t.t([(0,o.queryAssignedNodes)({flatten:!0})],l.prototype,`_getSlottedNodes`,void 0),t.t([(0,o.queryAssignedElements)({flatten:!0})],l.prototype,`_getSlottedElements`,void 0),l=t.t([(0,o.customElement)(`schmancy-typewriter`)],l),Object.defineProperty(exports,`TypewriterElement`,{enumerable:!0,get:function(){return l}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);let e=require(`rxjs`),t=require(`rxjs/operators`),n=require(`lit`),r=require(`lit/async-directive.js`);var i=class{constructor(e=.3){this.audioContext=new AudioContext,this.volume=Math.max(0,Math.min(1,e))}playKeyPress(){let e=this.audioContext.currentTime,t=this.audioContext.createOscillator(),n=this.audioContext.createGain(),r=800+200*Math.random();t.frequency.setValueAtTime(r,e),t.type=`sine`,n.gain.setValueAtTime(0,e),n.gain.linearRampToValueAtTime(.2*this.volume,e+.005),n.gain.exponentialRampToValueAtTime(.001,e+.03),t.connect(n),n.connect(this.audioContext.destination),t.start(e),t.stop(e+.03);let i=this.audioContext.createOscillator(),a=this.audioContext.createGain();i.frequency.setValueAtTime(1800+400*Math.random(),e),i.type=`sine`,a.gain.setValueAtTime(0,e),a.gain.linearRampToValueAtTime(.08*this.volume,e+.003),a.gain.exponentialRampToValueAtTime(.001,e+.015),i.connect(a),a.connect(this.audioContext.destination),i.start(e),i.stop(e+.015)}playDelete(){let e=this.audioContext.currentTime,t=this.audioContext.createOscillator(),n=this.audioContext.createGain();t.frequency.setValueAtTime(600,e),t.frequency.exponentialRampToValueAtTime(200,e+.04),t.type=`sine`,n.gain.setValueAtTime(0,e),n.gain.linearRampToValueAtTime(.12*this.volume,e+.005),n.gain.exponentialRampToValueAtTime(.001,e+.04),t.connect(n),n.connect(this.audioContext.destination),t.start(e),t.stop(e+.04)}cleanup(){this.audioContext.close()}},a=class extends r.AsyncDirective{constructor(...e){super(...e),this.state=null,this.soundEngine=null}render(e,t={}){return n.noChange}update(e,[t,r={}]){let a=e.element;if(!this.state||JSON.stringify(this.state.phrases)===JSON.stringify(t)&&JSON.stringify(this.state.options)===JSON.stringify(r)||this.cleanup(),!this.state){let e={typeSpeed:50,deleteSpeed:30,pauseDuration:1500,loop:!0,selector:`.typed`,cursor:!1,finalMessage:``,sound:!0,volume:.08};if(this.state={phrases:t,options:{...e,...r},element:a},this.state.options.sound&&(this.soundEngine=new i(this.state.options.volume)),this.state.targetElement=a.querySelector(this.state.options.selector)??void 0,!this.state.targetElement)return n.noChange;if(this.state.options.cursor){this.state.targetElement.style.position=`relative`,this.state.targetElement.style.display=`inline-block`;let e=document.createElement(`span`);if(e.className=`typewriter-cursor`,e.textContent=`|`,e.style.cssText=`
2
+ display: inline-block;
3
+ margin-left: 2px;
4
+ animation: typewriter-blink 1s step-end infinite;
5
+ `,this.state.targetElement.appendChild(e),!document.getElementById(`typewriter-styles`)){let e=document.createElement(`style`);e.id=`typewriter-styles`,e.textContent=`
6
+ @keyframes typewriter-blink {
7
+ 0%, 50% { opacity: 1; }
8
+ 51%, 100% { opacity: 0; }
9
+ }
10
+ `,document.head.appendChild(e)}}this.startTyping()}return n.noChange}startTyping(){if(!this.state||!this.state.targetElement)return;let{phrases:n,options:r,targetElement:i}=this.state,a=(n,a=!0)=>(0,e.concat)((0,e.defer)(()=>(0,e.concat)(...n.split(``).map(n=>(0,e.of)(n).pipe((0,t.delay)(r.typeSpeed),(0,t.tap)(e=>{let t=this.getTextNode(i);t&&(t.textContent+=e),this.soundEngine&&this.soundEngine.playKeyPress()}))))),(0,e.of)(null).pipe((0,t.delay)(r.pauseDuration)),a?(0,e.defer)(()=>{let a=n.length;return(0,e.interval)(r.deleteSpeed).pipe((0,t.take)(a),(0,t.tap)(()=>{let e=this.getTextNode(i);e&&e.textContent&&(e.textContent=e.textContent.slice(0,-1)),this.soundEngine&&this.soundEngine.playDelete()}))}):e.EMPTY,a?(0,e.of)(null).pipe((0,t.delay)(200)):e.EMPTY),o=(0,e.concat)(...n.map(e=>a(e))),s=r.finalMessage?(0,e.concat)(o,a(r.finalMessage,!1)):o;this.state.subscription=(r.loop?o.pipe((0,t.repeat)()):s).subscribe({error:e=>{}})}getTextNode(e){for(let t of Array.from(e.childNodes))if(t.nodeType===Node.TEXT_NODE)return t;let t=document.createTextNode(``);return e.insertBefore(t,e.firstChild),t}cleanup(){this.state&&=(this.state.subscription&&this.state.subscription.unsubscribe(),this.state.targetElement&&this.state.targetElement.querySelector(`.typewriter-cursor`)?.remove(),this.soundEngine&&=(this.soundEngine.cleanup(),null),null)}disconnected(){this.cleanup()}reconnected(){this.state&&!this.state.subscription&&this.startTyping()}},o=(0,r.directive)(a);exports.typewriter=o;
@@ -1 +1 @@
1
- {"version":3,"file":"typewriter.cjs","names":[],"sources":["../src/typewriter/typewriter.ts"],"sourcesContent":["import { consume } from '@lit/context'\nimport { $LitElement } from '@mixins/index'\nimport { delayContext } from '@schmancy/delay'\nimport hashContent from '@schmancy/utils/hashContent'\nimport { intersection$ } from '@schmancy/utils/intersection'\nimport { css, html, TemplateResult } from 'lit'\nimport { customElement, property, query, queryAssignedElements, queryAssignedNodes } from 'lit/decorators.js'\n// TypeIt is loaded lazily on first render — see ADR 0014 in the parent\n// monorepo. The static import was replaced with a type-only import plus a\n// memoised dynamic loader so the ~15 KB gzipped vendor chunk stays out of\n// the agent bundle's first paint for pages that don't render a typewriter.\nimport type { Options as TypeItOptions } from 'typeit'\ntype TypeItCtor = typeof import('typeit').default\ntype TypeItInstance = InstanceType<TypeItCtor>\n\nlet typeItPromise: Promise<TypeItCtor> | null = null\nfunction loadTypeIt(): Promise<TypeItCtor> {\n\tif (typeItPromise) return typeItPromise\n\ttypeItPromise = import('typeit').then(m => m.default)\n\treturn typeItPromise\n}\n\n/**\n * Typewriter effect — animates text typing/deletion with a cursor. Wraps the TypeIt library, lazy-loaded on first render.\n *\n * @element schmancy-typewriter\n * @summary Drop string content as the default slot or use `<p>` / `<span>` with `cycle=\"A|B|C\"` attribute children for cycling phrases. Set `loop` for infinite cycling, `once` to remember completion across sessions via sessionStorage.\n * @example\n * <schmancy-typewriter speed=\"35\" cursor-char=\"|\">\n * Hello, world.\n * </schmancy-typewriter>\n * @platform span - Animated text container. Degrades to its raw text content if the tag never registers — animation is lost but content stays visible.\n * @fires typeit-complete - When the animation finishes typing all content. Fires after the final `afterComplete` callback in the underlying TypeIt instance.\n */\n@customElement('schmancy-typewriter')\nexport class TypewriterElement extends $LitElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t}\n\n\t#typewriter {\n\t\tposition: relative;\n\t}\n\n\t/* Enhanced cursor with glow effect */\n\t#typewriter :global(.ti-cursor) {\n\t\tanimation: cursor-pulse 1.2s cubic-bezier(0.4, 0, 0.2, 1) infinite;\n\t\tcolor: currentColor;\n\t\tfilter: drop-shadow(0 0 8px currentColor);\n\t}\n\n\t@keyframes cursor-pulse {\n\t\t0%, 100% {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t\t50% {\n\t\t\topacity: 0.3;\n\t\t\ttransform: scale(0.95);\n\t\t}\n\t}\n\n\t/* Character entrance animation */\n\t#typewriter :global(.ti-container *) {\n\t\tanimation: char-entrance 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;\n\t}\n\n\t@keyframes char-entrance {\n\t\t0% {\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.3) translateY(10px);\n\t\t\tfilter: blur(4px);\n\t\t}\n\t\t50% {\n\t\t\topacity: 0.8;\n\t\t\ttransform: scale(1.1) translateY(-2px);\n\t\t}\n\t\t100% {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1) translateY(0);\n\t\t\tfilter: blur(0);\n\t\t}\n\t}\n\n\t/* Subtle character wobble on appear */\n\t#typewriter :global(.ti-container *:nth-child(odd)) {\n\t\tanimation: char-entrance 0.3s cubic-bezier(0.34, 1.56, 0.64, 1) backwards,\n\t\t char-wobble 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) 0.15s backwards;\n\t}\n\n\t@keyframes char-wobble {\n\t\t0%, 100% {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\t25% {\n\t\t\ttransform: rotate(2deg);\n\t\t}\n\t\t75% {\n\t\t\ttransform: rotate(-2deg);\n\t\t}\n\t}\n\n\t/* Deletion animation - fade out and scale down */\n\t#typewriter :global(.ti-container .deleting) {\n\t\tanimation: char-delete 0.2s cubic-bezier(0.4, 0, 1, 1) forwards;\n\t}\n\n\t@keyframes char-delete {\n\t\t0% {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t\tfilter: blur(0);\n\t\t}\n\t\t50% {\n\t\t\topacity: 0.5;\n\t\t\ttransform: scale(0.8) translateY(-3px);\n\t\t}\n\t\t100% {\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.4) translateY(-8px);\n\t\t\tfilter: blur(3px);\n\t\t}\n\t}\n\n\t/* Gradient text effect on typed text */\n\t#typewriter :global(.ti-container) {\n\t\tbackground: linear-gradient(\n\t\t\t90deg,\n\t\t\tcurrentColor 0%,\n\t\t\tcurrentColor 70%,\n\t\t\ttransparent 100%\n\t\t);\n\t\t-webkit-background-clip: text;\n\t\tbackground-clip: text;\n\t\tanimation: gradient-shift 3s ease-in-out infinite;\n\t}\n\n\t@keyframes gradient-shift {\n\t\t0%, 100% {\n\t\t\tfilter: brightness(1) saturate(1);\n\t\t}\n\t\t50% {\n\t\t\tfilter: brightness(1.15) saturate(1.2);\n\t\t}\n\t}\n\n\t/* Smooth transitions for all text */\n\t#typewriter * {\n\t\ttransition: opacity 0.15s ease-out, transform 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n`) {\n\t/**\n\t * Typing speed in milliseconds per character.\n\t */\n\t@property({ type: Number })\n\tspeed: number = 35\n\n\t/**\n\t * Delay before typing starts (ms).\n\t */\n\t@consume({ context: delayContext, subscribe: true })\n\t@property({ type: Number })\n\tdelay: number = 0\n\n\t/**\n\t * Automatically start typing on initialization.\n\t */\n\t@property({ type: Boolean })\n\tautoStart: boolean = true\n\n\t/**\n\t * The cursor character.\n\t */\n\t@property({ type: String })\n\tcursorChar: string = ''\n\n\t/**\n\t * Typing speed for deletions (ms per character).\n\t */\n\t@property({ type: Number })\n\tdeleteSpeed: number = 20\n\n\t/**\n\t * Only animate once per session.\n\t */\n\t@property({ type: Boolean }) once = true\n\n\t/**\n\t * Loop the animation infinitely (overrides once).\n\t */\n\t@property({ type: Boolean }) loop = false\n\n\t/**\n\t * Default pause duration for cycling (ms).\n\t */\n\t@property({ type: Number }) cyclePause = 1500\n\t/**\n\t * TypeIt instance. Populated after `loadTypeIt()` resolves inside\n\t * `_startTyping()` — null until then, which is correct for a cold start\n\t * where the vendor chunk hasn't loaded yet.\n\t */\n\tprivate typeItInstance: TypeItInstance | null = null\n\n\t/**\n\t * Reference to the typewriter container.\n\t */\n\t@query('#typewriter')\n\tprivate typewriterContainer!: HTMLElement\n\n\t@queryAssignedNodes({\n\t\tflatten: true,\n\t})\n\tprivate _getSlottedNodes!: Node[]\n\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate _getSlottedElements!: HTMLElement[]\n\t/**\n\t * Lifecycle method called when the component is disconnected from the DOM.\n\t * Ensures that TypeIt instances are properly cleaned up.\n\t */\n\n\tprivate sessionKey = ''\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis._destroyTypeIt()\n\t}\n\n\t/**\n\t * Initializes the TypeIt instance with the provided slotted content.\n\t * Async because TypeIt itself is lazy-loaded on first render.\n\t */\n\tprivate async _startTyping() {\n\t\t// Destroy any existing TypeIt instance\n\t\tthis._destroyTypeIt()\n\n\t\tthis.sessionKey = this.generateSessionKey()\n\n\t\tif (this.once && sessionStorage.getItem(this.sessionKey) === 'true') {\n\t\t\t// Skip delay and render immediately if once is set and already rendered\n\t\t\tthis.shadowRoot?.querySelector('slot')?.removeAttribute('hidden')\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.typewriterContainer) {\n\t\t\tconsole.warn('Typewriter container not found.')\n\t\t\treturn\n\t\t}\n\n\t\t// Configure TypeIt options\n\t\tconst typeItOptions: TypeItOptions = {\n\t\t\tspeed: this.speed,\n\t\t\tstartDelay: this.delay,\n\t\t\tcursor: !!this.cursorChar,\n\t\t\tcursorChar: this.cursorChar,\n\t\t\tdeleteSpeed: this.deleteSpeed,\n\t\t\tloop: this.loop,\n\t\t\tafterComplete: () => {\n\t\t\t\tif (this.once && !this.loop) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsessionStorage.setItem(this.sessionKey, 'true')\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error('Error saving to session storage:', error)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Dispatch the custom event\n\t\t\t\tthis.dispatchEvent(new CustomEvent('typeit-complete', { bubbles: true, composed: true }))\n\n\t\t\t\t// Hide the cursor (unless looping)\n\t\t\t\tif (!this.loop) {\n\t\t\t\t\tthis.typewriterContainer.style.setProperty('--ti-cursor-display', 'none')\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\n\t\t// Load TypeIt lazily on first call (module-scope memoised promise).\n\t\tconst TypeIt = await loadTypeIt()\n\t\t// Bail if we were disconnected during the load — avoids attaching to\n\t\t// a detached host.\n\t\tif (!this.isConnected) return\n\n\t\t// Initialize TypeIt\n\t\tthis.typeItInstance = new TypeIt(this.typewriterContainer, typeItOptions)\n\n\t\t// Process slotted content as actions\n\t\tconst slottedNodes = this._getSlottedNodes\n\t\tslottedNodes.forEach(node => {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\t// Handle plain text - skip whitespace-only text nodes\n\t\t\t\tconst textContent = node.textContent || ''\n\t\t\t\tif (textContent.trim()) {\n\t\t\t\t\tthis.typeItInstance?.type(textContent)\n\t\t\t\t}\n\t\t\t} else if (node instanceof HTMLElement) {\n\t\t\t\t// Handle custom element\n\t\t\t\tthis._processCustomElement(node)\n\t\t\t}\n\t\t})\n\n\t\t// Start the typing animation if autoStart is enabled\n\t\t// use rxjs to detect once we are in the view port\n\t\tintersection$(this.shadowRoot?.host as Element).subscribe(() => {\n\t\t\t// alert('in view')\n\t\t\tthis.typeItInstance?.go()\n\t\t})\n\t\t// Start the typing animation if autoStart is enabled\n\t}\n\n\tprivate generateSessionKey(): string {\n\t\tconst slotContent = this._getSlottedElements.map(el => el.outerHTML).join('')\n\t\treturn this.once ? hashContent(slotContent) : ''\n\t}\n\t/**\n\t * Destroys the current TypeIt instance if it exists.\n\t */\n\tprivate _destroyTypeIt() {\n\t\tif (this.typeItInstance) {\n\t\t\ttry {\n\t\t\t\tthis.typeItInstance.destroy()\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error destroying TypeIt instance:', error)\n\t\t\t}\n\t\t\tthis.typeItInstance = null\n\t\t}\n\t}\n\n\t/**\n\t * Processes a custom element for its typing behavior.\n\t */\n\tprivate _processCustomElement(element: HTMLElement) {\n\t\tconst action = element.getAttribute('action')\n\t\tconst value = element.getAttribute('value')\n\t\tconst cycle = element.getAttribute('cycle')\n\n\t\t// Handle cycle attribute - simple pipe-separated list\n\t\tif (cycle) {\n\t\t\tconst items = cycle.split('|').map(item => item.trim())\n\t\t\tthis._processCycle(items, element)\n\t\t\treturn\n\t\t}\n\n\t\tswitch (action) {\n\t\t\tcase 'pause':\n\t\t\t\tthis.typeItInstance?.pause(parseInt(value || '0', 10))\n\t\t\t\tbreak\n\t\t\tcase 'delete':\n\t\t\t\tthis.typeItInstance?.delete(parseInt(value || '0', 10))\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (element.tagName === 'P') {\n\t\t\t\t\tthis.typeItInstance?.break()\n\t\t\t\t}\n\t\t\t\t// Treat as text if no action is defined\n\t\t\t\tthis.typeItInstance?.type(element.textContent || '')\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t/**\n\t * Processes cycling text with auto-calculated delete counts.\n\t */\n\tprivate _processCycle(items: string[], element: HTMLElement) {\n\t\tif (items.length === 0) return\n\n\t\tconst customPause = element.getAttribute('pause')\n\t\tconst pauseDuration = customPause ? parseInt(customPause, 10) : this.cyclePause\n\n\t\t// Type each item with automatic deletion\n\t\titems.forEach((item, index) => {\n\t\t\t// Type the item\n\t\t\tthis.typeItInstance?.type(item)\n\n\t\t\t// Pause after typing (except after last item when not looping)\n\t\t\tif (index < items.length - 1 || this.loop) {\n\t\t\t\tthis.typeItInstance?.pause(pauseDuration)\n\t\t\t}\n\n\t\t\t// Delete back to start (except for last item when not looping)\n\t\t\tif (index < items.length - 1) {\n\t\t\t\tthis.typeItInstance?.delete(item.length)\n\t\t\t} else if (this.loop) {\n\t\t\t\t// For looping, delete and start over\n\t\t\t\tthis.typeItInstance?.delete(item.length)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Renders the component's HTML.\n\t */\n\trender(): TemplateResult {\n\t\treturn html`<div id=\"typewriter\" aria-live=\"polite\"></div>\n\n\t\t\t<div class=\"typewriter\">\n\t\t\t\t<slot\n\t\t\t\t\thidden\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tthis._startTyping()\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div> `\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-typewriter': TypewriterElement\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"typewriter.cjs","names":[],"sources":["../src/typewriter/typewriter.directive.ts"],"sourcesContent":["/**\n * Typewriter Directive - RxJS-based typing animation\n *\n * Creates a smooth typewriter effect with automatic cycling through phrases.\n * Uses RxJS for precise timing and clean reactive patterns.\n *\n * @example\n * ```ts\n * // Simple cycling through words\n * html`<div ${typewriter(['Trustless', 'Permissionless', 'Transparent'])}>\n * <span class=\"typed\"></span>\n * </div>`\n *\n * // Custom speeds and pauses\n * html`<div ${typewriter(['Fast', 'Typing'], { typeSpeed: 50, pauseDuration: 1000 })}>\n * <span class=\"typed\"></span>\n * </div>`\n *\n * // One-time typing (no loop)\n * html`<div ${typewriter(['Hello World'], { loop: false })}>\n * <span class=\"typed\"></span>\n * </div>`\n * ```\n */\n\nimport type { ElementPart } from 'lit'\nimport { noChange } from 'lit'\nimport { AsyncDirective, directive } from 'lit/async-directive.js'\nimport { concat, defer, EMPTY, interval, of, Subscription } from 'rxjs'\nimport { delay, repeat, take, tap } from 'rxjs/operators'\n\nexport interface TypewriterOptions {\n\ttypeSpeed?: number // Speed of typing (ms per character)\n\tdeleteSpeed?: number // Speed of deleting (ms per character)\n\tpauseDuration?: number // Pause after typing before deleting (ms)\n\tloop?: boolean // Whether to loop through phrases\n\tselector?: string // CSS selector for target element (default: '.typed')\n\tcursor?: boolean // Show cursor\n\tfinalMessage?: string // Message to display after cycling completes\n\tsound?: boolean // Play typewriter sounds (default: true)\n\tvolume?: number // Sound volume (0-1, default: 0.3)\n}\n\ninterface TypewriterState {\n\tphrases: string[]\n\toptions: Required<TypewriterOptions>\n\telement?: HTMLElement\n\ttargetElement?: HTMLElement\n\tsubscription?: Subscription\n\taudioContext?: AudioContext\n}\n\n// Typewriter sound generator using Web Audio API\nclass TypewriterSound {\n\tprivate audioContext: AudioContext\n\tprivate volume: number\n\n\tconstructor(volume: number = 0.3) {\n\t\tthis.audioContext = new AudioContext()\n\t\tthis.volume = Math.max(0, Math.min(1, volume))\n\t}\n\n\t// Generate cute, soft typing sound - like a gentle \"pop\"\n\tplayKeyPress() {\n\t\tconst now = this.audioContext.currentTime\n\n\t\t// Higher, softer main tone - more \"pop\" than \"clack\"\n\t\tconst osc = this.audioContext.createOscillator()\n\t\tconst gainNode = this.audioContext.createGain()\n\n\t\t// Higher base frequency for cute sound + randomness\n\t\tconst baseFreq = 800 + Math.random() * 200\n\t\tosc.frequency.setValueAtTime(baseFreq, now)\n\t\tosc.type = 'sine' // Smoother, rounder sound\n\n\t\t// Gentler attack, quick but soft\n\t\tgainNode.gain.setValueAtTime(0, now)\n\t\tgainNode.gain.linearRampToValueAtTime(this.volume * 0.2, now + 0.005)\n\t\tgainNode.gain.exponentialRampToValueAtTime(0.001, now + 0.03)\n\n\t\tosc.connect(gainNode)\n\t\tgainNode.connect(this.audioContext.destination)\n\n\t\tosc.start(now)\n\t\tosc.stop(now + 0.03)\n\n\t\t// Add a cute high \"bleep\" for character\n\t\tconst bleepOsc = this.audioContext.createOscillator()\n\t\tconst bleepGain = this.audioContext.createGain()\n\n\t\tbleepOsc.frequency.setValueAtTime(1800 + Math.random() * 400, now)\n\t\tbleepOsc.type = 'sine'\n\n\t\tbleepGain.gain.setValueAtTime(0, now)\n\t\tbleepGain.gain.linearRampToValueAtTime(this.volume * 0.08, now + 0.003)\n\t\tbleepGain.gain.exponentialRampToValueAtTime(0.001, now + 0.015)\n\n\t\tbleepOsc.connect(bleepGain)\n\t\tbleepGain.connect(this.audioContext.destination)\n\n\t\tbleepOsc.start(now)\n\t\tbleepOsc.stop(now + 0.015)\n\t}\n\n\t// Softer \"whoosh\" sound for deletion - like erasing\n\tplayDelete() {\n\t\tconst now = this.audioContext.currentTime\n\n\t\tconst osc = this.audioContext.createOscillator()\n\t\tconst gainNode = this.audioContext.createGain()\n\n\t\t// Descending pitch for \"erasing\" feel\n\t\tosc.frequency.setValueAtTime(600, now)\n\t\tosc.frequency.exponentialRampToValueAtTime(200, now + 0.04)\n\t\tosc.type = 'sine'\n\n\t\tgainNode.gain.setValueAtTime(0, now)\n\t\tgainNode.gain.linearRampToValueAtTime(this.volume * 0.12, now + 0.005)\n\t\tgainNode.gain.exponentialRampToValueAtTime(0.001, now + 0.04)\n\n\t\tosc.connect(gainNode)\n\t\tgainNode.connect(this.audioContext.destination)\n\n\t\tosc.start(now)\n\t\tosc.stop(now + 0.04)\n\t}\n\n\tcleanup() {\n\t\tthis.audioContext.close()\n\t}\n}\n\nclass TypewriterDirective extends AsyncDirective {\n\tprivate state: TypewriterState | null = null\n\tprivate soundEngine: TypewriterSound | null = null\n\n\trender(_phrases: string[], _options: TypewriterOptions = {}) {\n\t\treturn noChange\n\t}\n\n\toverride update(\n\t\tpart: ElementPart,\n\t\t[phrases, options = {}]: [string[], TypewriterOptions]\n\t) {\n\t\tconst element = part.element as HTMLElement\n\n\t\t// Clean up if params changed\n\t\tif (\n\t\t\tthis.state &&\n\t\t\t(JSON.stringify(this.state.phrases) !== JSON.stringify(phrases) ||\n\t\t\t\tJSON.stringify(this.state.options) !== JSON.stringify(options))\n\t\t) {\n\t\t\tthis.cleanup()\n\t\t}\n\n\t\t// Initialize state\n\t\tif (!this.state) {\n\t\t\tconst defaultOptions: Required<TypewriterOptions> = {\n\t\t\t\ttypeSpeed: 50,\n\t\t\t\tdeleteSpeed: 30,\n\t\t\t\tpauseDuration: 1500,\n\t\t\t\tloop: true,\n\t\t\t\tselector: '.typed',\n\t\t\t\tcursor: false,\n\t\t\t\tfinalMessage: '',\n\t\t\t\tsound: true,\n\t\t\t\tvolume: 0.08,\n\t\t\t}\n\n\t\t\tthis.state = {\n\t\t\t\tphrases,\n\t\t\t\toptions: { ...defaultOptions, ...options },\n\t\t\t\telement,\n\t\t\t}\n\n\t\t\t// Initialize sound engine if enabled\n\t\t\tif (this.state.options.sound) {\n\t\t\t\tthis.soundEngine = new TypewriterSound(this.state.options.volume)\n\t\t\t}\n\n\t\t\t// Find target element\n\t\t\tthis.state.targetElement = element.querySelector<HTMLElement>(\n\t\t\t\tthis.state.options.selector\n\t\t\t) ?? undefined\n\n\t\t\tif (!this.state.targetElement) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Typewriter: Target element \"${this.state.options.selector}\" not found`\n\t\t\t\t)\n\t\t\t\treturn noChange\n\t\t\t}\n\n\t\t\t// Add cursor if enabled\n\t\t\tif (this.state.options.cursor) {\n\t\t\t\tthis.state.targetElement.style.position = 'relative'\n\t\t\t\tthis.state.targetElement.style.display = 'inline-block'\n\t\t\t\tconst cursor = document.createElement('span')\n\t\t\t\tcursor.className = 'typewriter-cursor'\n\t\t\t\tcursor.textContent = '|'\n\t\t\t\tcursor.style.cssText = `\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tmargin-left: 2px;\n\t\t\t\t\tanimation: typewriter-blink 1s step-end infinite;\n\t\t\t\t`\n\t\t\t\tthis.state.targetElement.appendChild(cursor)\n\n\t\t\t\t// Add blink animation if not already present\n\t\t\t\tif (!document.getElementById('typewriter-styles')) {\n\t\t\t\t\tconst style = document.createElement('style')\n\t\t\t\t\tstyle.id = 'typewriter-styles'\n\t\t\t\t\tstyle.textContent = `\n\t\t\t\t\t\t@keyframes typewriter-blink {\n\t\t\t\t\t\t\t0%, 50% { opacity: 1; }\n\t\t\t\t\t\t\t51%, 100% { opacity: 0; }\n\t\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\tdocument.head.appendChild(style)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.startTyping()\n\t\t}\n\n\t\treturn noChange\n\t}\n\n\tprivate startTyping() {\n\t\tif (!this.state || !this.state.targetElement) return\n\n\t\tconst { phrases, options, targetElement } = this.state\n\n\t\t// Create typing observable for a single phrase\n\t\tconst typePhrase = (phrase: string, shouldDelete: boolean = true) => {\n\t\t\treturn concat(\n\t\t\t\t// Type each character\n\t\t\t\tdefer(() => {\n\t\t\t\t\tconst chars = phrase.split('')\n\t\t\t\t\treturn concat(\n\t\t\t\t\t\t...chars.map((char) =>\n\t\t\t\t\t\t\tof(char).pipe(\n\t\t\t\t\t\t\t\tdelay(options.typeSpeed),\n\t\t\t\t\t\t\t\ttap((c) => {\n\t\t\t\t\t\t\t\t\tconst textNode = this.getTextNode(targetElement)\n\t\t\t\t\t\t\t\t\tif (textNode) {\n\t\t\t\t\t\t\t\t\t\ttextNode.textContent += c\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Play key press sound\n\t\t\t\t\t\t\t\t\tif (this.soundEngine) {\n\t\t\t\t\t\t\t\t\t\tthis.soundEngine.playKeyPress()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\t// Pause after typing\n\t\t\t\tof(null).pipe(delay(options.pauseDuration)),\n\t\t\t\t// Delete each character (only if shouldDelete is true)\n\t\t\t\tshouldDelete ? defer(() => {\n\t\t\t\t\tconst deleteCount = phrase.length\n\t\t\t\t\treturn interval(options.deleteSpeed).pipe(\n\t\t\t\t\t\ttake(deleteCount),\n\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\tconst textNode = this.getTextNode(targetElement)\n\t\t\t\t\t\t\tif (textNode && textNode.textContent) {\n\t\t\t\t\t\t\t\ttextNode.textContent = textNode.textContent.slice(0, -1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Play delete sound\n\t\t\t\t\t\t\tif (this.soundEngine) {\n\t\t\t\t\t\t\t\tthis.soundEngine.playDelete()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}) : EMPTY,\n\t\t\t\t// Small pause before next phrase\n\t\t\t\tshouldDelete ? of(null).pipe(delay(200)) : EMPTY\n\t\t\t)\n\t\t}\n\n\t\t// Create observable that cycles through all phrases\n\t\tconst phrasesSequence = concat(\n\t\t\t...phrases.map((phrase) => typePhrase(phrase))\n\t\t)\n\n\t\t// Add final message if provided\n\t\tconst typingSequence = options.finalMessage\n\t\t\t? concat(\n\t\t\t\t\tphrasesSequence,\n\t\t\t\t\ttypePhrase(options.finalMessage, false) // Don't delete final message\n\t\t\t\t)\n\t\t\t: phrasesSequence\n\n\t\t// Subscribe and optionally loop\n\t\tthis.state.subscription = (\n\t\t\toptions.loop ? phrasesSequence.pipe(repeat()) : typingSequence\n\t\t).subscribe({\n\t\t\terror: (err) => console.error('Typewriter error:', err),\n\t\t})\n\t}\n\n\tprivate getTextNode(targetElement: HTMLElement): Text | null {\n\t\t// Get or create text node (ignoring cursor element)\n\t\tfor (const child of Array.from(targetElement.childNodes)) {\n\t\t\tif (child.nodeType === Node.TEXT_NODE) {\n\t\t\t\treturn child as Text\n\t\t\t}\n\t\t}\n\t\t// Create text node if it doesn't exist\n\t\tconst textNode = document.createTextNode('')\n\t\ttargetElement.insertBefore(textNode, targetElement.firstChild)\n\t\treturn textNode\n\t}\n\n\tprivate cleanup() {\n\t\tif (!this.state) return\n\n\t\t// Unsubscribe from typing observable\n\t\tif (this.state.subscription) {\n\t\t\tthis.state.subscription.unsubscribe()\n\t\t}\n\n\t\t// Remove cursor if present\n\t\tif (this.state.targetElement) {\n\t\t\tconst cursor = this.state.targetElement.querySelector('.typewriter-cursor')\n\t\t\tcursor?.remove()\n\t\t}\n\n\t\t// Cleanup sound engine\n\t\tif (this.soundEngine) {\n\t\t\tthis.soundEngine.cleanup()\n\t\t\tthis.soundEngine = null\n\t\t}\n\n\t\tthis.state = null\n\t}\n\n\toverride disconnected() {\n\t\tthis.cleanup()\n\t}\n\n\toverride reconnected(): void {\n\t\t// Re-start typing if state exists\n\t\tif (this.state && !this.state.subscription) {\n\t\t\tthis.startTyping()\n\t\t}\n\t}\n}\n\nexport const typewriter = directive(TypewriterDirective)\n"],"mappings":"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"}