@mhmo91/schmancy 0.10.39 → 0.10.41

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 (334) hide show
  1. package/dist/SchmancyElement-D9WA9FP9.cjs +2 -0
  2. package/dist/{SchmancyElement-C41uPa6l.cjs.map → SchmancyElement-D9WA9FP9.cjs.map} +1 -1
  3. package/dist/SchmancyElement-OWgz9ePG.js +286 -0
  4. package/dist/{SchmancyElement-BNnyBOwk.js.map → SchmancyElement-OWgz9ePG.js.map} +1 -1
  5. package/dist/agent/schmancy.agent.js +15 -8
  6. package/dist/agent/schmancy.agent.js.map +1 -1
  7. package/dist/{area-KVDzhT4s.js → area-BiM7V2ns.js} +2 -2
  8. package/dist/{area-KVDzhT4s.js.map → area-BiM7V2ns.js.map} +1 -1
  9. package/dist/{area-2FrTZI_T.cjs → area-C7XjCoet.cjs} +1 -1
  10. package/dist/{area-2FrTZI_T.cjs.map → area-C7XjCoet.cjs.map} +1 -1
  11. package/dist/area.cjs +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{audio-D3gnp15Y.js → audio-CxO_j__6.js} +1 -1
  14. package/dist/{audio-D3gnp15Y.js.map → audio-CxO_j__6.js.map} +1 -1
  15. package/dist/{audio-EaD0Ggfh.cjs → audio-xXFfMPCS.cjs} +1 -1
  16. package/dist/{audio-EaD0Ggfh.cjs.map → audio-xXFfMPCS.cjs.map} +1 -1
  17. package/dist/audio.cjs +1 -1
  18. package/dist/audio.js +2 -2
  19. package/dist/{autocomplete-DMmxsvUe.cjs → autocomplete-DD7Hd59N.cjs} +1 -1
  20. package/dist/{autocomplete-DMmxsvUe.cjs.map → autocomplete-DD7Hd59N.cjs.map} +1 -1
  21. package/dist/{autocomplete-DWiEqlQf.js → autocomplete-DUBY9RtH.js} +3 -3
  22. package/dist/{autocomplete-DWiEqlQf.js.map → autocomplete-DUBY9RtH.js.map} +1 -1
  23. package/dist/autocomplete.cjs +1 -1
  24. package/dist/autocomplete.js +1 -1
  25. package/dist/avatar.cjs +1 -1
  26. package/dist/avatar.js +3 -3
  27. package/dist/badge.cjs +1 -1
  28. package/dist/badge.js +1 -1
  29. package/dist/boat-BIYaPAHp.cjs +34 -0
  30. package/dist/boat-BIYaPAHp.cjs.map +1 -0
  31. package/dist/{boat-fqodYt2n.js → boat-ScvAima3.js} +13 -8
  32. package/dist/boat-ScvAima3.js.map +1 -0
  33. package/dist/boat.cjs +1 -1
  34. package/dist/boat.js +1 -1
  35. package/dist/breadcrumb.cjs +1 -1
  36. package/dist/breadcrumb.js +2 -2
  37. package/dist/{busy-enYCTssB.js → busy-BjsO3y2A.js} +2 -2
  38. package/dist/{busy-enYCTssB.js.map → busy-BjsO3y2A.js.map} +1 -1
  39. package/dist/{busy-Cj_PV7oC.cjs → busy-UbCGkTAi.cjs} +1 -1
  40. package/dist/{busy-Cj_PV7oC.cjs.map → busy-UbCGkTAi.cjs.map} +1 -1
  41. package/dist/busy.cjs +1 -1
  42. package/dist/busy.js +1 -1
  43. package/dist/{button-B9RfBt-n.cjs → button-BTpxQ1Kd.cjs} +1 -1
  44. package/dist/{button-B9RfBt-n.cjs.map → button-BTpxQ1Kd.cjs.map} +1 -1
  45. package/dist/{button-D6LJC-HC.js → button-D7QHfYf4.js} +2 -2
  46. package/dist/{button-D6LJC-HC.js.map → button-D7QHfYf4.js.map} +1 -1
  47. package/dist/button.cjs +1 -1
  48. package/dist/button.js +3 -3
  49. package/dist/{card-BHTz1GwB.js → card-DCdtJ5Dy.js} +2 -2
  50. package/dist/{card-BHTz1GwB.js.map → card-DCdtJ5Dy.js.map} +1 -1
  51. package/dist/{card-ThG_ZaQE.cjs → card-rprhCYIC.cjs} +1 -1
  52. package/dist/{card-ThG_ZaQE.cjs.map → card-rprhCYIC.cjs.map} +1 -1
  53. package/dist/card.cjs +1 -1
  54. package/dist/card.js +1 -1
  55. package/dist/{checkbox-C4zeib84.cjs → checkbox-CYGOVPP-.cjs} +1 -1
  56. package/dist/{checkbox-C4zeib84.cjs.map → checkbox-CYGOVPP-.cjs.map} +1 -1
  57. package/dist/{checkbox-Ce0DlAdW.js → checkbox-DVtyPk7l.js} +2 -2
  58. package/dist/{checkbox-Ce0DlAdW.js.map → checkbox-DVtyPk7l.js.map} +1 -1
  59. package/dist/checkbox.cjs +1 -1
  60. package/dist/checkbox.js +1 -1
  61. package/dist/{chips-BoZSpSh_.js → chips-C5bpgWyf.js} +4 -4
  62. package/dist/{chips-BoZSpSh_.js.map → chips-C5bpgWyf.js.map} +1 -1
  63. package/dist/{chips-wfJ7YtWv.cjs → chips-DVes-BSz.cjs} +1 -1
  64. package/dist/{chips-wfJ7YtWv.cjs.map → chips-DVes-BSz.cjs.map} +1 -1
  65. package/dist/chips.cjs +1 -1
  66. package/dist/chips.js +2 -2
  67. package/dist/connectivity.cjs +1 -1
  68. package/dist/connectivity.js +3 -3
  69. package/dist/content-drawer.cjs +1 -1
  70. package/dist/content-drawer.js +1 -1
  71. package/dist/{date-range-BHSzlwSL.cjs → date-range-DDUuBlJ6.cjs} +1 -1
  72. package/dist/{date-range-BHSzlwSL.cjs.map → date-range-DDUuBlJ6.cjs.map} +1 -1
  73. package/dist/{date-range-DJrdpzev.js → date-range-IPlbrhwW.js} +3 -3
  74. package/dist/{date-range-DJrdpzev.js.map → date-range-IPlbrhwW.js.map} +1 -1
  75. package/dist/{date-range-inline-DjRdMZ1z.js → date-range-inline-DPqY9YYf.js} +2 -2
  76. package/dist/{date-range-inline-DjRdMZ1z.js.map → date-range-inline-DPqY9YYf.js.map} +1 -1
  77. package/dist/{date-range-inline-D0I6k84h.cjs → date-range-inline-Dx4Reboo.cjs} +1 -1
  78. package/dist/{date-range-inline-D0I6k84h.cjs.map → date-range-inline-Dx4Reboo.cjs.map} +1 -1
  79. package/dist/date-range-inline.cjs +1 -1
  80. package/dist/date-range-inline.js +1 -1
  81. package/dist/date-range.cjs +1 -1
  82. package/dist/date-range.js +1 -1
  83. package/dist/delay.cjs +1 -1
  84. package/dist/delay.js +2 -2
  85. package/dist/{details-CY49XVfp.js → details-BnleHmYe.js} +2 -2
  86. package/dist/{details-CY49XVfp.js.map → details-BnleHmYe.js.map} +1 -1
  87. package/dist/{details-DQNj2oaU.cjs → details-Bx2jSJxG.cjs} +1 -1
  88. package/dist/{details-DQNj2oaU.cjs.map → details-Bx2jSJxG.cjs.map} +1 -1
  89. package/dist/details.cjs +1 -1
  90. package/dist/details.js +1 -1
  91. package/dist/{directives-Bb0S1DKZ.cjs → directives-CYf2fAdA.cjs} +2 -2
  92. package/dist/{directives-Bb0S1DKZ.cjs.map → directives-CYf2fAdA.cjs.map} +1 -1
  93. package/dist/{directives-Bfm1lkoy.js → directives-d1rEbW1A.js} +8 -6
  94. package/dist/{directives-Bfm1lkoy.js.map → directives-d1rEbW1A.js.map} +1 -1
  95. package/dist/directives.cjs +1 -1
  96. package/dist/directives.js +2 -2
  97. package/dist/{divider-Ck2C1sKl.cjs → divider-CimQJVr3.cjs} +1 -1
  98. package/dist/{divider-Ck2C1sKl.cjs.map → divider-CimQJVr3.cjs.map} +1 -1
  99. package/dist/{divider-BeyX_C0A.js → divider-Cr-rx3vA.js} +2 -2
  100. package/dist/{divider-BeyX_C0A.js.map → divider-Cr-rx3vA.js.map} +1 -1
  101. package/dist/divider.cjs +1 -1
  102. package/dist/divider.js +1 -1
  103. package/dist/dropdown.cjs +1 -1
  104. package/dist/dropdown.js +2 -2
  105. package/dist/{expand-BYsSEtp6.js → expand-DNrWuG_-.js} +3 -3
  106. package/dist/{expand-BYsSEtp6.js.map → expand-DNrWuG_-.js.map} +1 -1
  107. package/dist/{expand-CUF163mg.cjs → expand-_cp8oBjp.cjs} +1 -1
  108. package/dist/{expand-CUF163mg.cjs.map → expand-_cp8oBjp.cjs.map} +1 -1
  109. package/dist/expand.cjs +1 -1
  110. package/dist/expand.js +1 -1
  111. package/dist/fab.cjs +1 -1
  112. package/dist/fab.js +2 -2
  113. package/dist/{float-Cgllk_H9.js → float-C_CMle0q.js} +2 -2
  114. package/dist/{float-Cgllk_H9.js.map → float-C_CMle0q.js.map} +1 -1
  115. package/dist/{float-OvqX0nqG.cjs → float-V7VQKTb8.cjs} +1 -1
  116. package/dist/{float-OvqX0nqG.cjs.map → float-V7VQKTb8.cjs.map} +1 -1
  117. package/dist/float.cjs +1 -1
  118. package/dist/float.js +1 -1
  119. package/dist/{form-DxaV_Ose.js → form-CMgYSZ3y.js} +3 -3
  120. package/dist/{form-DxaV_Ose.js.map → form-CMgYSZ3y.js.map} +1 -1
  121. package/dist/{form-4GKROq2P.cjs → form-DaaAQd2A.cjs} +1 -1
  122. package/dist/{form-4GKROq2P.cjs.map → form-DaaAQd2A.cjs.map} +1 -1
  123. package/dist/form.cjs +1 -1
  124. package/dist/form.js +12 -12
  125. package/dist/handover/agent-runtime-followups.md +1 -1
  126. package/dist/handover/agent-runtime-v1.md +3 -3
  127. package/dist/{icons-sZ-LybA9.cjs → icons-C2RkSXjP.cjs} +1 -1
  128. package/dist/{icons-sZ-LybA9.cjs.map → icons-C2RkSXjP.cjs.map} +1 -1
  129. package/dist/{icons-CJ2mXcBi.js → icons-mbpHO_73.js} +2 -2
  130. package/dist/{icons-CJ2mXcBi.js.map → icons-mbpHO_73.js.map} +1 -1
  131. package/dist/icons.cjs +1 -1
  132. package/dist/icons.js +1 -1
  133. package/dist/{iframe-DpCv-QH2.cjs → iframe-88SN5JPu.cjs} +1 -1
  134. package/dist/{iframe-DpCv-QH2.cjs.map → iframe-88SN5JPu.cjs.map} +1 -1
  135. package/dist/{iframe-DWvN5nGB.js → iframe-U3P1DnQv.js} +2 -2
  136. package/dist/{iframe-DWvN5nGB.js.map → iframe-U3P1DnQv.js.map} +1 -1
  137. package/dist/iframe.cjs +1 -1
  138. package/dist/iframe.js +1 -1
  139. package/dist/index.cjs +1 -1
  140. package/dist/index.js +34 -34
  141. package/dist/{input-Z-3N5JMv.cjs → input-BY4Korc5.cjs} +1 -1
  142. package/dist/{input-Z-3N5JMv.cjs.map → input-BY4Korc5.cjs.map} +1 -1
  143. package/dist/{input-BCCHz6tB.js → input-CPWvGjE4.js} +2 -2
  144. package/dist/{input-BCCHz6tB.js.map → input-CPWvGjE4.js.map} +1 -1
  145. package/dist/{input-chip-BOrcKH-H.js → input-chip-CCZ3i3Sf.js} +2 -2
  146. package/dist/{input-chip-BOrcKH-H.js.map → input-chip-CCZ3i3Sf.js.map} +1 -1
  147. package/dist/{input-chip-ChAgRCXZ.cjs → input-chip-kytMdbaM.cjs} +1 -1
  148. package/dist/{input-chip-ChAgRCXZ.cjs.map → input-chip-kytMdbaM.cjs.map} +1 -1
  149. package/dist/input.cjs +1 -1
  150. package/dist/input.js +1 -1
  151. package/dist/json.cjs +1 -1
  152. package/dist/json.js +3 -3
  153. package/dist/kbd.cjs +1 -1
  154. package/dist/kbd.js +2 -2
  155. package/dist/{layout-DZ4dpLh9.cjs → layout-BhfC26Ks.cjs} +1 -1
  156. package/dist/{layout-DZ4dpLh9.cjs.map → layout-BhfC26Ks.cjs.map} +1 -1
  157. package/dist/{layout-CFiG3lNT.js → layout-DC0Npqu7.js} +1 -1
  158. package/dist/{layout-CFiG3lNT.js.map → layout-DC0Npqu7.js.map} +1 -1
  159. package/dist/layout.cjs +1 -1
  160. package/dist/layout.js +2 -2
  161. package/dist/{lightbox-B7Y4Nij_.js → lightbox-BSwWvDQc.js} +2 -2
  162. package/dist/{lightbox-B7Y4Nij_.js.map → lightbox-BSwWvDQc.js.map} +1 -1
  163. package/dist/{lightbox-Dpwsn8Qr.cjs → lightbox-KrZQH9w9.cjs} +1 -1
  164. package/dist/{lightbox-Dpwsn8Qr.cjs.map → lightbox-KrZQH9w9.cjs.map} +1 -1
  165. package/dist/lightbox.cjs +1 -1
  166. package/dist/lightbox.js +1 -1
  167. package/dist/{list-C5WVoIfJ.js → list-BwGtAAfi.js} +2 -2
  168. package/dist/{list-C5WVoIfJ.js.map → list-BwGtAAfi.js.map} +1 -1
  169. package/dist/{list-BhM-6dAi.cjs → list-DIs02A3d.cjs} +1 -1
  170. package/dist/{list-BhM-6dAi.cjs.map → list-DIs02A3d.cjs.map} +1 -1
  171. package/dist/list.cjs +1 -1
  172. package/dist/list.js +1 -1
  173. package/dist/{menu-Dvi_tQgH.js → menu-DX8d96x-.js} +3 -3
  174. package/dist/{menu-Dvi_tQgH.js.map → menu-DX8d96x-.js.map} +1 -1
  175. package/dist/{menu-GZARYp6I.cjs → menu-jT_yAk5V.cjs} +1 -1
  176. package/dist/{menu-GZARYp6I.cjs.map → menu-jT_yAk5V.cjs.map} +1 -1
  177. package/dist/menu.cjs +1 -1
  178. package/dist/menu.js +1 -1
  179. package/dist/{mixins-DGBI7YPO.js → mixins-COeG4DiX.js} +1 -1
  180. package/dist/{mixins-DGBI7YPO.js.map → mixins-COeG4DiX.js.map} +1 -1
  181. package/dist/{mixins-fIpzhVMd.cjs → mixins-XGVIOvKt.cjs} +1 -1
  182. package/dist/{mixins-fIpzhVMd.cjs.map → mixins-XGVIOvKt.cjs.map} +1 -1
  183. package/dist/mixins.cjs +1 -1
  184. package/dist/mixins.js +2 -2
  185. package/dist/nav-drawer.cjs +1 -1
  186. package/dist/nav-drawer.js +1 -1
  187. package/dist/navigation-bar.cjs +1 -1
  188. package/dist/navigation-bar.js +1 -1
  189. package/dist/navigation-rail.cjs +1 -1
  190. package/dist/navigation-rail.js +2 -2
  191. package/dist/{notification-BB9OBRCr.js → notification-CAJVpLne.js} +4 -4
  192. package/dist/{notification-BB9OBRCr.js.map → notification-CAJVpLne.js.map} +1 -1
  193. package/dist/{notification-B6yDL91t.cjs → notification-DO3VXceY.cjs} +1 -1
  194. package/dist/{notification-B6yDL91t.cjs.map → notification-DO3VXceY.cjs.map} +1 -1
  195. package/dist/notification.cjs +1 -1
  196. package/dist/notification.js +1 -1
  197. package/dist/{option-CJQM5I9q.cjs → option-BNo1Zs-l.cjs} +1 -1
  198. package/dist/{option-CJQM5I9q.cjs.map → option-BNo1Zs-l.cjs.map} +1 -1
  199. package/dist/{option-B21ImL0k.js → option-JISY0wZJ.js} +2 -2
  200. package/dist/{option-B21ImL0k.js.map → option-JISY0wZJ.js.map} +1 -1
  201. package/dist/option.cjs +1 -1
  202. package/dist/option.js +1 -1
  203. package/dist/{overlay-N0trD-4u.cjs → overlay-B1jVf-ge.cjs} +1 -1
  204. package/dist/{overlay-N0trD-4u.cjs.map → overlay-B1jVf-ge.cjs.map} +1 -1
  205. package/dist/{overlay-DwJWVyk2.js → overlay-CT-tMHDX.js} +5 -5
  206. package/dist/{overlay-DwJWVyk2.js.map → overlay-CT-tMHDX.js.map} +1 -1
  207. package/dist/overlay.cjs +1 -1
  208. package/dist/{overlay.confirm-body-DwzKhXxM.js → overlay.confirm-body-Dn-Zgogx.js} +6 -6
  209. package/dist/{overlay.confirm-body-DwzKhXxM.js.map → overlay.confirm-body-Dn-Zgogx.js.map} +1 -1
  210. package/dist/{overlay.confirm-body-CtXIi421.cjs → overlay.confirm-body-mYDYoJL8.cjs} +1 -1
  211. package/dist/{overlay.confirm-body-CtXIi421.cjs.map → overlay.confirm-body-mYDYoJL8.cjs.map} +1 -1
  212. package/dist/overlay.js +3 -3
  213. package/dist/{overlay.service-Dbu5uP9E.cjs → overlay.service-BQmva9GY.cjs} +1 -1
  214. package/dist/{overlay.service-Dbu5uP9E.cjs.map → overlay.service-BQmva9GY.cjs.map} +1 -1
  215. package/dist/{overlay.service-BDLi0p5M.js → overlay.service-yqTOyLlr.js} +2 -2
  216. package/dist/{overlay.service-BDLi0p5M.js.map → overlay.service-yqTOyLlr.js.map} +1 -1
  217. package/dist/{progress-CUSS1sNz.js → progress-CGWozq_n.js} +2 -2
  218. package/dist/{progress-CUSS1sNz.js.map → progress-CGWozq_n.js.map} +1 -1
  219. package/dist/{progress-B-Qg44XY.cjs → progress-DOVJhsR0.cjs} +1 -1
  220. package/dist/{progress-B-Qg44XY.cjs.map → progress-DOVJhsR0.cjs.map} +1 -1
  221. package/dist/progress.cjs +1 -1
  222. package/dist/progress.js +1 -1
  223. package/dist/{radio-group-AHLvrN8O.js → radio-group-CXkq6qAF.js} +2 -2
  224. package/dist/{radio-group-AHLvrN8O.js.map → radio-group-CXkq6qAF.js.map} +1 -1
  225. package/dist/{radio-group-BEtvCSS1.cjs → radio-group-DoSX5D2V.cjs} +1 -1
  226. package/dist/{radio-group-BEtvCSS1.cjs.map → radio-group-DoSX5D2V.cjs.map} +1 -1
  227. package/dist/radio-group.cjs +1 -1
  228. package/dist/radio-group.js +1 -1
  229. package/dist/range.cjs +1 -1
  230. package/dist/range.js +2 -2
  231. package/dist/{select-BWpV2iv-.cjs → select-CObZenqg.cjs} +1 -1
  232. package/dist/{select-BWpV2iv-.cjs.map → select-CObZenqg.cjs.map} +1 -1
  233. package/dist/{select-Cawz88lG.js → select-CU90i50_.js} +3 -3
  234. package/dist/{select-Cawz88lG.js.map → select-CU90i50_.js.map} +1 -1
  235. package/dist/select.cjs +1 -1
  236. package/dist/select.js +1 -1
  237. package/dist/skeleton.cjs +1 -1
  238. package/dist/skeleton.js +2 -2
  239. package/dist/skills/SKILL.md +4 -0
  240. package/dist/skills/chips.md +41 -1
  241. package/dist/skills/schmancy/SKILL.md +4 -0
  242. package/dist/skills/schmancy/chips.md +41 -1
  243. package/dist/slider.cjs +1 -1
  244. package/dist/slider.js +2 -2
  245. package/dist/{sound.service-D2GGaBXc.cjs → sound.service-Qhr8nCeG.cjs} +1 -1
  246. package/dist/{sound.service-D2GGaBXc.cjs.map → sound.service-Qhr8nCeG.cjs.map} +1 -1
  247. package/dist/{sound.service-CK-5zob-.js → sound.service-m8WjOhjn.js} +1 -1
  248. package/dist/{sound.service-CK-5zob-.js.map → sound.service-m8WjOhjn.js.map} +1 -1
  249. package/dist/{splash-screen-DqPuipox.cjs → splash-screen-Ca6Ew8p6.cjs} +1 -1
  250. package/dist/{splash-screen-DqPuipox.cjs.map → splash-screen-Ca6Ew8p6.cjs.map} +1 -1
  251. package/dist/{splash-screen-BUEtjHXC.js → splash-screen-Cs3dbPN3.js} +2 -2
  252. package/dist/{splash-screen-BUEtjHXC.js.map → splash-screen-Cs3dbPN3.js.map} +1 -1
  253. package/dist/splash-screen.cjs +1 -1
  254. package/dist/splash-screen.js +1 -1
  255. package/dist/{src-8VJ7eluk.js → src-CCVbLLgC.js} +35 -35
  256. package/dist/{src-8VJ7eluk.js.map → src-CCVbLLgC.js.map} +1 -1
  257. package/dist/{src-GJA8uSAS.cjs → src-CpftzdZV.cjs} +1 -1
  258. package/dist/{src-GJA8uSAS.cjs.map → src-CpftzdZV.cjs.map} +1 -1
  259. package/dist/{state-BxDNox-2.cjs → state--x58-AuK.cjs} +1 -1
  260. package/dist/{state-BxDNox-2.cjs.map → state--x58-AuK.cjs.map} +1 -1
  261. package/dist/{state-CnZCDMT0.js → state-QSwQ61sA.js} +1 -1
  262. package/dist/{state-CnZCDMT0.js.map → state-QSwQ61sA.js.map} +1 -1
  263. package/dist/state.cjs +1 -1
  264. package/dist/state.js +2 -2
  265. package/dist/steps.cjs +1 -1
  266. package/dist/steps.js +2 -2
  267. package/dist/{surface-CWwYD_z2.cjs → surface-bTjOiq8n.cjs} +1 -1
  268. package/dist/{surface-CWwYD_z2.cjs.map → surface-bTjOiq8n.cjs.map} +1 -1
  269. package/dist/{surface-BMdG3dKQ.js → surface-cqMsHJHM.js} +2 -2
  270. package/dist/{surface-BMdG3dKQ.js.map → surface-cqMsHJHM.js.map} +1 -1
  271. package/dist/surface.cjs +1 -1
  272. package/dist/surface.js +1 -1
  273. package/dist/switch.cjs +1 -1
  274. package/dist/switch.js +2 -2
  275. package/dist/table.cjs +1 -1
  276. package/dist/table.js +2 -2
  277. package/dist/{tabs-CbD9E1gd.cjs → tabs-Dk9UDWpq.cjs} +1 -1
  278. package/dist/{tabs-CbD9E1gd.cjs.map → tabs-Dk9UDWpq.cjs.map} +1 -1
  279. package/dist/{tabs-CDQYDc6v.js → tabs-Ib0Mh__1.js} +2 -2
  280. package/dist/{tabs-CDQYDc6v.js.map → tabs-Ib0Mh__1.js.map} +1 -1
  281. package/dist/tabs.cjs +1 -1
  282. package/dist/tabs.js +1 -1
  283. package/dist/teleport.cjs +1 -1
  284. package/dist/teleport.js +1 -1
  285. package/dist/{textarea-MPyrMi-S.js → textarea-CcRsw08B.js} +2 -2
  286. package/dist/{textarea-MPyrMi-S.js.map → textarea-CcRsw08B.js.map} +1 -1
  287. package/dist/{textarea-Brgi-vD2.cjs → textarea-Cntd9tfV.cjs} +1 -1
  288. package/dist/{textarea-Brgi-vD2.cjs.map → textarea-Cntd9tfV.cjs.map} +1 -1
  289. package/dist/textarea.cjs +1 -1
  290. package/dist/textarea.js +1 -1
  291. package/dist/{theme-DZu-xmVp.js → theme-CKYXG0le.js} +5 -5
  292. package/dist/{theme-DZu-xmVp.js.map → theme-CKYXG0le.js.map} +1 -1
  293. package/dist/{theme-button-B0OLb-43.cjs → theme-button-DE9Lrl7m.cjs} +1 -1
  294. package/dist/{theme-button-B0OLb-43.cjs.map → theme-button-DE9Lrl7m.cjs.map} +1 -1
  295. package/dist/{theme-button-D_qGvEYs.js → theme-button-iLqT56KA.js} +2 -2
  296. package/dist/{theme-button-D_qGvEYs.js.map → theme-button-iLqT56KA.js.map} +1 -1
  297. package/dist/theme-button.cjs +1 -1
  298. package/dist/theme-button.js +1 -1
  299. package/dist/{theme-BMbXoqi0.cjs → theme-wwFbvp5e.cjs} +1 -1
  300. package/dist/{theme-BMbXoqi0.cjs.map → theme-wwFbvp5e.cjs.map} +1 -1
  301. package/dist/theme.cjs +1 -1
  302. package/dist/theme.js +3 -3
  303. package/dist/{theme.service-7VkM-hVf.js → theme.service-5RjyR7Sy.js} +1 -1
  304. package/dist/{theme.service-7VkM-hVf.js.map → theme.service-5RjyR7Sy.js.map} +1 -1
  305. package/dist/{theme.service-B15FdjOS.cjs → theme.service-DA6KY52G.cjs} +1 -1
  306. package/dist/{theme.service-B15FdjOS.cjs.map → theme.service-DA6KY52G.cjs.map} +1 -1
  307. package/dist/tree.cjs +1 -1
  308. package/dist/tree.js +2 -2
  309. package/dist/{typography-SZhjb_4R.js → typography-DeEYdMhW.js} +2 -2
  310. package/dist/{typography-SZhjb_4R.js.map → typography-DeEYdMhW.js.map} +1 -1
  311. package/dist/{typography-D4Fo1UGh.cjs → typography-Tm7wSaB2.cjs} +1 -1
  312. package/dist/{typography-D4Fo1UGh.cjs.map → typography-Tm7wSaB2.cjs.map} +1 -1
  313. package/dist/typography.cjs +1 -1
  314. package/dist/typography.js +1 -1
  315. package/dist/visually-hidden.cjs +1 -1
  316. package/dist/visually-hidden.js +2 -2
  317. package/dist/{window-BDVyrBnk.js → window-Db5ZYY6t.js} +3 -3
  318. package/dist/{window-BDVyrBnk.js.map → window-Db5ZYY6t.js.map} +1 -1
  319. package/dist/{window-BbBYjm7R.cjs → window-oQqx5xqQ.cjs} +1 -1
  320. package/dist/{window-BbBYjm7R.cjs.map → window-oQqx5xqQ.cjs.map} +1 -1
  321. package/dist/window.cjs +1 -1
  322. package/dist/window.js +1 -1
  323. package/package.json +2 -1
  324. package/skills/schmancy/SKILL.md +4 -0
  325. package/skills/schmancy/chips.md +41 -1
  326. package/src/boat/boat.ts +20 -5
  327. package/src/directives/reveal.ts +7 -1
  328. package/types/src/boat/boat.d.ts +1 -0
  329. package/types/src/directives/reveal.d.ts +2 -0
  330. package/dist/SchmancyElement-BNnyBOwk.js +0 -286
  331. package/dist/SchmancyElement-C41uPa6l.cjs +0 -2
  332. package/dist/boat-DsFJNfPH.cjs +0 -34
  333. package/dist/boat-DsFJNfPH.cjs.map +0 -1
  334. package/dist/boat-fqodYt2n.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-range-inline-D0I6k84h.cjs","names":[],"sources":["../src/date-range-inline/date-range-inline.ts"],"sourcesContent":["import { html } from 'lit'\r\nimport { customElement, property, state } from 'lit/decorators.js'\r\nimport { SchmancyFormField } from '@mixins/index'\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'schmancy-date-range-inline': SchmancyDateRangeInline\r\n\t}\r\n}\r\n\r\nexport type SchmancyDateRangeInlineChangeEvent = CustomEvent<{\r\n\tdateFrom: string\r\n\tdateTo: string\r\n\tisValid: boolean\r\n}>\r\n\r\n/**\r\n * Smart inline date range picker that handles all the heavy lifting.\r\n * Auto-corrects invalid ranges, provides smart defaults, and validates dates.\r\n */\r\n@customElement('schmancy-date-range-inline')\r\nexport default class SchmancyDateRangeInline extends SchmancyFormField() {\r\n\t/**\r\n\t * Input type - 'date' or 'datetime-local'\r\n\t */\r\n\t@property({ type: String })\r\n\ttype: 'date' | 'datetime-local' = 'date'\r\n\r\n\t/**\r\n\t * From date configuration\r\n\t */\r\n\t@property({ type: Object })\r\n\tdateFrom: { label: string; value: string } = { label: 'From', value: '' }\r\n\r\n\t/**\r\n\t * To date configuration\r\n\t */\r\n\t@property({ type: Object })\r\n\tdateTo: { label: string; value: string } = { label: 'To', value: '' }\r\n\r\n\t/**\r\n\t * Minimum allowed date\r\n\t */\r\n\t@property({ type: String })\r\n\tminDate?: string\r\n\r\n\t/**\r\n\t * Maximum allowed date\r\n\t */\r\n\t@property({ type: String })\r\n\tmaxDate?: string\r\n\r\n\t/**\r\n\t * Compact mode for smaller UI\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tcompact = false\r\n\r\n\t/**\r\n\t * Auto-correct invalid date ranges\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tautoCorrect = true\r\n\r\n\t/**\r\n\t * Minimum gap between dates (in days)\r\n\t */\r\n\t@property({ type: Number })\r\n\tminGap = 0\r\n\r\n\t/**\r\n\t * Maximum gap between dates (in days)\r\n\t */\r\n\t@property({ type: Number })\r\n\tmaxGap?: number\r\n\r\n\t/**\r\n\t * Default gap when auto-setting dates (in days)\r\n\t */\r\n\t@property({ type: Number })\r\n\tdefaultGap = 1\r\n\r\n\t/**\r\n\t * Whether to allow same date selection\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tallowSameDate = false\r\n\r\n\t/**\r\n\t * Internal validation state\r\n\t */\r\n\t@state()\r\n\tprivate validationState = {\r\n\t\tdateFromError: '',\r\n\t\tdateToError: '',\r\n\t\trangeError: ''\r\n\t}\r\n\r\n\tconnectedCallback() {\r\n\t\tsuper.connectedCallback()\r\n\t\t// Initialize with smart defaults if no values provided\r\n\t\tif (!this.dateFrom.value && !this.dateTo.value) {\r\n\t\t\tthis.setSmartDefaults()\r\n\t\t} else {\r\n\t\t\t// Validate initial values\r\n\t\t\tthis.validateAndCorrect()\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Set smart default dates based on context\r\n\t */\r\n\tprivate setSmartDefaults() {\r\n\t\tconst today = new Date()\r\n\t\tconst tomorrow = new Date(today)\r\n\t\ttomorrow.setDate(tomorrow.getDate() + this.defaultGap)\r\n\r\n\t\tconst format = this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'\r\n\t\t\r\n\t\tthis.dateFrom = {\r\n\t\t\t...this.dateFrom,\r\n\t\t\tvalue: this.formatDate(today, format)\r\n\t\t}\r\n\t\t\r\n\t\tthis.dateTo = {\r\n\t\t\t...this.dateTo,\r\n\t\t\tvalue: this.formatDate(tomorrow, format)\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Format date to required string format\r\n\t */\r\n\tprivate formatDate(date: Date, format: string): string {\r\n\t\tconst year = date.getFullYear()\r\n\t\tconst month = String(date.getMonth() + 1).padStart(2, '0')\r\n\t\tconst day = String(date.getDate()).padStart(2, '0')\r\n\t\t\r\n\t\tif (format === 'YYYY-MM-DD') {\r\n\t\t\treturn `${year}-${month}-${day}`\r\n\t\t} else {\r\n\t\t\tconst hours = String(date.getHours()).padStart(2, '0')\r\n\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0')\r\n\t\t\treturn `${year}-${month}-${day}T${hours}:${minutes}`\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Parse date string to Date object\r\n\t */\r\n\tprivate parseDate(dateStr: string): Date | null {\r\n\t\tif (!dateStr) return null\r\n\t\tconst date = new Date(dateStr)\r\n\t\treturn isNaN(date.getTime()) ? null : date\r\n\t}\r\n\r\n\t/**\r\n\t * Calculate days between two dates\r\n\t */\r\n\tprivate getDaysBetween(date1: Date, date2: Date): number {\r\n\t\tconst msPerDay = 24 * 60 * 60 * 1000\r\n\t\treturn Math.floor((date2.getTime() - date1.getTime()) / msPerDay)\r\n\t}\r\n\r\n\t/**\r\n\t * Handle from date change with validation and auto-correction\r\n\t */\r\n\tprivate handleDateFromChange(e: Event) {\r\n\t\tconst input = e.target as HTMLInputElement\r\n\t\tconst newValue = input.value\r\n\r\n\t\t// Update the value\r\n\t\tthis.dateFrom = { ...this.dateFrom, value: newValue }\r\n\r\n\t\t// Clear previous errors\r\n\t\tthis.validationState = { ...this.validationState, dateFromError: '', rangeError: '' }\r\n\r\n\t\tif (!newValue) {\r\n\t\t\t// Allow empty for optional fields\r\n\t\t\tif (!this.required) {\r\n\t\t\t\tthis.emitChange()\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tthis.validationState = { ...this.validationState, dateFromError: 'Start date is required' }\r\n\t\t\tthis.error = true\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Validate and potentially auto-correct\r\n\t\tthis.validateAndCorrect('from')\r\n\t}\r\n\r\n\t/**\r\n\t * Handle to date change with validation and auto-correction\r\n\t */\r\n\tprivate handleDateToChange(e: Event) {\r\n\t\tconst input = e.target as HTMLInputElement\r\n\t\tconst newValue = input.value\r\n\r\n\t\t// Update the value\r\n\t\tthis.dateTo = { ...this.dateTo, value: newValue }\r\n\r\n\t\t// Clear previous errors\r\n\t\tthis.validationState = { ...this.validationState, dateToError: '', rangeError: '' }\r\n\r\n\t\tif (!newValue) {\r\n\t\t\t// Allow empty for optional fields\r\n\t\t\tif (!this.required) {\r\n\t\t\t\tthis.emitChange()\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tthis.validationState = { ...this.validationState, dateToError: 'End date is required' }\r\n\t\t\tthis.error = true\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Validate and potentially auto-correct\r\n\t\tthis.validateAndCorrect('to')\r\n\t}\r\n\r\n\t/**\r\n\t * Validate dates and auto-correct if enabled\r\n\t */\r\n\tprivate validateAndCorrect(changedField?: 'from' | 'to') {\r\n\t\tconst fromDate = this.parseDate(this.dateFrom.value)\r\n\t\tconst toDate = this.parseDate(this.dateTo.value)\r\n\r\n\t\t// Reset validation state\r\n\t\tlet hasError = false\r\n\t\tconst newValidationState = { dateFromError: '', dateToError: '', rangeError: '' }\r\n\r\n\t\t// Validate individual dates\r\n\t\tif (this.dateFrom.value && !fromDate) {\r\n\t\t\tnewValidationState.dateFromError = 'Invalid date format'\r\n\t\t\thasError = true\r\n\t\t}\r\n\r\n\t\tif (this.dateTo.value && !toDate) {\r\n\t\t\tnewValidationState.dateToError = 'Invalid date format'\r\n\t\t\thasError = true\r\n\t\t}\r\n\r\n\t\t// If both dates are valid, check range constraints\r\n\t\tif (fromDate && toDate) {\r\n\t\t\tconst daysBetween = this.getDaysBetween(fromDate, toDate)\r\n\r\n\t\t\t// Check if from date is after to date\r\n\t\t\tif (fromDate > toDate) {\r\n\t\t\t\tif (this.autoCorrect) {\r\n\t\t\t\t\t// Auto-correct based on which field changed\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\t// User changed from date, adjust to date\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.defaultGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (changedField === 'to') {\r\n\t\t\t\t\t\t// User changed to date, adjust from date\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.defaultGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// No specific field changed, swap them\r\n\t\t\t\t\t\tconst tempValue = this.dateFrom.value\r\n\t\t\t\t\t\tthis.dateFrom = { ...this.dateFrom, value: this.dateTo.value }\r\n\t\t\t\t\t\tthis.dateTo = { ...this.dateTo, value: tempValue }\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = 'End date must be after start date'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check same date constraint\r\n\t\t\tif (!this.allowSameDate && daysBetween === 0) {\r\n\t\t\t\tif (this.autoCorrect && changedField) {\r\n\t\t\t\t\t// Auto-correct by adjusting the other date\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.defaultGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.defaultGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = 'Start and end dates cannot be the same'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check minimum gap\r\n\t\t\tif (this.minGap > 0 && daysBetween < this.minGap) {\r\n\t\t\t\tif (this.autoCorrect && changedField) {\r\n\t\t\t\t\t// Auto-correct to maintain minimum gap\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.minGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.minGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = `Minimum ${this.minGap} day${this.minGap > 1 ? 's' : ''} required between dates`\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check maximum gap\r\n\t\t\tif (this.maxGap !== undefined && daysBetween > this.maxGap) {\r\n\t\t\t\tif (this.autoCorrect && changedField) {\r\n\t\t\t\t\t// Auto-correct to maintain maximum gap\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.maxGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.maxGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = `Maximum ${this.maxGap} day${this.maxGap > 1 ? 's' : ''} allowed between dates`\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check against min/max date constraints\r\n\t\t\tif (this.minDate) {\r\n\t\t\t\tconst minDateObj = this.parseDate(this.minDate)\r\n\t\t\t\tif (minDateObj && fromDate < minDateObj) {\r\n\t\t\t\t\tnewValidationState.dateFromError = 'Date is before minimum allowed date'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.maxDate) {\r\n\t\t\t\tconst maxDateObj = this.parseDate(this.maxDate)\r\n\t\t\t\tif (maxDateObj && toDate > maxDateObj) {\r\n\t\t\t\t\tnewValidationState.dateToError = 'Date is after maximum allowed date'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update validation state\r\n\t\tthis.validationState = newValidationState\r\n\t\tthis.error = hasError\r\n\r\n\t\t// Emit change event with validation status\r\n\t\tthis.emitChange()\r\n\t}\r\n\r\n\t/**\r\n\t * Get computed min date for the \"to\" field based on \"from\" value\r\n\t */\r\n\tprivate getComputedMinDateTo(): string | undefined {\r\n\t\tif (!this.dateFrom.value) return this.minDate\r\n\r\n\t\tconst fromDate = this.parseDate(this.dateFrom.value)\r\n\t\tif (!fromDate) return this.minDate\r\n\r\n\t\t// Calculate minimum date based on constraints\r\n\t\tconst minToDate = new Date(fromDate)\r\n\t\t\r\n\t\tif (!this.allowSameDate) {\r\n\t\t\tminToDate.setDate(minToDate.getDate() + 1)\r\n\t\t}\r\n\t\t\r\n\t\tif (this.minGap > 0) {\r\n\t\t\tminToDate.setDate(fromDate.getDate() + this.minGap)\r\n\t\t}\r\n\r\n\t\t// Compare with global minDate if set\r\n\t\tif (this.minDate) {\r\n\t\t\tconst globalMin = this.parseDate(this.minDate)\r\n\t\t\tif (globalMin && globalMin > minToDate) {\r\n\t\t\t\treturn this.minDate\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.formatDate(minToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t}\r\n\r\n\t/**\r\n\t * Get computed max date for the \"from\" field based on \"to\" value\r\n\t */\r\n\tprivate getComputedMaxDateFrom(): string | undefined {\r\n\t\tif (!this.dateTo.value) return this.maxDate\r\n\r\n\t\tconst toDate = this.parseDate(this.dateTo.value)\r\n\t\tif (!toDate) return this.maxDate\r\n\r\n\t\t// Calculate maximum date based on constraints\r\n\t\tconst maxFromDate = new Date(toDate)\r\n\t\t\r\n\t\tif (!this.allowSameDate) {\r\n\t\t\tmaxFromDate.setDate(maxFromDate.getDate() - 1)\r\n\t\t}\r\n\t\t\r\n\t\tif (this.minGap > 0) {\r\n\t\t\tmaxFromDate.setDate(toDate.getDate() - this.minGap)\r\n\t\t}\r\n\r\n\t\t// Compare with global maxDate if set\r\n\t\tif (this.maxDate) {\r\n\t\t\tconst globalMax = this.parseDate(this.maxDate)\r\n\t\t\tif (globalMax && globalMax < maxFromDate) {\r\n\t\t\t\treturn this.maxDate\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.formatDate(maxFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t}\r\n\r\n\temitChange() {\r\n\t\tconst isValid = !this.error && \r\n\t\t\t!!this.dateFrom.value && \r\n\t\t\t!!this.dateTo.value && \r\n\t\t\t!this.validationState.dateFromError && \r\n\t\t\t!this.validationState.dateToError && \r\n\t\t\t!this.validationState.rangeError\r\n\r\n\t\tthis.dispatchEvent(new CustomEvent<SchmancyDateRangeInlineChangeEvent['detail']>('change', {\r\n\t\t\tdetail: {\r\n\t\t\t\tdateFrom: this.dateFrom.value,\r\n\t\t\t\tdateTo: this.dateTo.value,\r\n\t\t\t\tisValid\r\n\t\t\t},\r\n\t\t\tbubbles: true,\r\n\t\t\tcomposed: true\r\n\t\t}))\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\t// Determine which error to show on each input\r\n\t\tconst fromError = this.validationState.dateFromError || this.validationState.rangeError\r\n\t\tconst toError = this.validationState.dateToError || this.validationState.rangeError\r\n\r\n\t\treturn html`\r\n\t\t\t<div class=\"w-full\">\r\n\t\t\t\t<div class=\"flex items-start gap-2 w-full\">\r\n\t\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t\t<schmancy-input\r\n\t\t\t\t\t\t\t.type=${this.type}\r\n\t\t\t\t\t\t\t.label=${this.dateFrom.label}\r\n\t\t\t\t\t\t\t.value=${this.dateFrom.value}\r\n\t\t\t\t\t\t\t.min=${this.minDate}\r\n\t\t\t\t\t\t\t.max=${this.getComputedMaxDateFrom()}\r\n\t\t\t\t\t\t\t@change=${this.handleDateFromChange}\r\n\t\t\t\t\t\t\t.error=${!!fromError}\r\n\t\t\t\t\t\t\t.hint=${fromError || ''}\r\n\t\t\t\t\t\t\t.required=${this.required}\r\n\t\t\t\t\t\t\t.disabled=${this.disabled}\r\n\t\t\t\t\t\t\tsize=${this.compact ? 'sm' : 'md'}\r\n\t\t\t\t\t\t></schmancy-input>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"flex items-center justify-center ${this.compact ? 'pt-8' : 'pt-10'} px-1\">\r\n\t\t\t\t\t\t<schmancy-icon class=\"text-surface-onVariant opacity-50\">\r\n\t\t\t\t\t\t\tarrow_forward\r\n\t\t\t\t\t\t</schmancy-icon>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t\t<schmancy-input\r\n\t\t\t\t\t\t\t.type=${this.type}\r\n\t\t\t\t\t\t\t.label=${this.dateTo.label}\r\n\t\t\t\t\t\t\t.value=${this.dateTo.value}\r\n\t\t\t\t\t\t\t.min=${this.getComputedMinDateTo()}\r\n\t\t\t\t\t\t\t.max=${this.maxDate}\r\n\t\t\t\t\t\t\t@change=${this.handleDateToChange}\r\n\t\t\t\t\t\t\t.error=${!!toError}\r\n\t\t\t\t\t\t\t.hint=${toError || ''}\r\n\t\t\t\t\t\t\t.required=${this.required}\r\n\t\t\t\t\t\t\t.disabled=${this.disabled}\r\n\t\t\t\t\t\t\tsize=${this.compact ? 'sm' : 'md'}\r\n\t\t\t\t\t\t></schmancy-input>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t`\r\n\t}\r\n}"],"mappings":"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"}
1
+ {"version":3,"file":"date-range-inline-Dx4Reboo.cjs","names":[],"sources":["../src/date-range-inline/date-range-inline.ts"],"sourcesContent":["import { html } from 'lit'\r\nimport { customElement, property, state } from 'lit/decorators.js'\r\nimport { SchmancyFormField } from '@mixins/index'\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'schmancy-date-range-inline': SchmancyDateRangeInline\r\n\t}\r\n}\r\n\r\nexport type SchmancyDateRangeInlineChangeEvent = CustomEvent<{\r\n\tdateFrom: string\r\n\tdateTo: string\r\n\tisValid: boolean\r\n}>\r\n\r\n/**\r\n * Smart inline date range picker that handles all the heavy lifting.\r\n * Auto-corrects invalid ranges, provides smart defaults, and validates dates.\r\n */\r\n@customElement('schmancy-date-range-inline')\r\nexport default class SchmancyDateRangeInline extends SchmancyFormField() {\r\n\t/**\r\n\t * Input type - 'date' or 'datetime-local'\r\n\t */\r\n\t@property({ type: String })\r\n\ttype: 'date' | 'datetime-local' = 'date'\r\n\r\n\t/**\r\n\t * From date configuration\r\n\t */\r\n\t@property({ type: Object })\r\n\tdateFrom: { label: string; value: string } = { label: 'From', value: '' }\r\n\r\n\t/**\r\n\t * To date configuration\r\n\t */\r\n\t@property({ type: Object })\r\n\tdateTo: { label: string; value: string } = { label: 'To', value: '' }\r\n\r\n\t/**\r\n\t * Minimum allowed date\r\n\t */\r\n\t@property({ type: String })\r\n\tminDate?: string\r\n\r\n\t/**\r\n\t * Maximum allowed date\r\n\t */\r\n\t@property({ type: String })\r\n\tmaxDate?: string\r\n\r\n\t/**\r\n\t * Compact mode for smaller UI\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tcompact = false\r\n\r\n\t/**\r\n\t * Auto-correct invalid date ranges\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tautoCorrect = true\r\n\r\n\t/**\r\n\t * Minimum gap between dates (in days)\r\n\t */\r\n\t@property({ type: Number })\r\n\tminGap = 0\r\n\r\n\t/**\r\n\t * Maximum gap between dates (in days)\r\n\t */\r\n\t@property({ type: Number })\r\n\tmaxGap?: number\r\n\r\n\t/**\r\n\t * Default gap when auto-setting dates (in days)\r\n\t */\r\n\t@property({ type: Number })\r\n\tdefaultGap = 1\r\n\r\n\t/**\r\n\t * Whether to allow same date selection\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tallowSameDate = false\r\n\r\n\t/**\r\n\t * Internal validation state\r\n\t */\r\n\t@state()\r\n\tprivate validationState = {\r\n\t\tdateFromError: '',\r\n\t\tdateToError: '',\r\n\t\trangeError: ''\r\n\t}\r\n\r\n\tconnectedCallback() {\r\n\t\tsuper.connectedCallback()\r\n\t\t// Initialize with smart defaults if no values provided\r\n\t\tif (!this.dateFrom.value && !this.dateTo.value) {\r\n\t\t\tthis.setSmartDefaults()\r\n\t\t} else {\r\n\t\t\t// Validate initial values\r\n\t\t\tthis.validateAndCorrect()\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Set smart default dates based on context\r\n\t */\r\n\tprivate setSmartDefaults() {\r\n\t\tconst today = new Date()\r\n\t\tconst tomorrow = new Date(today)\r\n\t\ttomorrow.setDate(tomorrow.getDate() + this.defaultGap)\r\n\r\n\t\tconst format = this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'\r\n\t\t\r\n\t\tthis.dateFrom = {\r\n\t\t\t...this.dateFrom,\r\n\t\t\tvalue: this.formatDate(today, format)\r\n\t\t}\r\n\t\t\r\n\t\tthis.dateTo = {\r\n\t\t\t...this.dateTo,\r\n\t\t\tvalue: this.formatDate(tomorrow, format)\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Format date to required string format\r\n\t */\r\n\tprivate formatDate(date: Date, format: string): string {\r\n\t\tconst year = date.getFullYear()\r\n\t\tconst month = String(date.getMonth() + 1).padStart(2, '0')\r\n\t\tconst day = String(date.getDate()).padStart(2, '0')\r\n\t\t\r\n\t\tif (format === 'YYYY-MM-DD') {\r\n\t\t\treturn `${year}-${month}-${day}`\r\n\t\t} else {\r\n\t\t\tconst hours = String(date.getHours()).padStart(2, '0')\r\n\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0')\r\n\t\t\treturn `${year}-${month}-${day}T${hours}:${minutes}`\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Parse date string to Date object\r\n\t */\r\n\tprivate parseDate(dateStr: string): Date | null {\r\n\t\tif (!dateStr) return null\r\n\t\tconst date = new Date(dateStr)\r\n\t\treturn isNaN(date.getTime()) ? null : date\r\n\t}\r\n\r\n\t/**\r\n\t * Calculate days between two dates\r\n\t */\r\n\tprivate getDaysBetween(date1: Date, date2: Date): number {\r\n\t\tconst msPerDay = 24 * 60 * 60 * 1000\r\n\t\treturn Math.floor((date2.getTime() - date1.getTime()) / msPerDay)\r\n\t}\r\n\r\n\t/**\r\n\t * Handle from date change with validation and auto-correction\r\n\t */\r\n\tprivate handleDateFromChange(e: Event) {\r\n\t\tconst input = e.target as HTMLInputElement\r\n\t\tconst newValue = input.value\r\n\r\n\t\t// Update the value\r\n\t\tthis.dateFrom = { ...this.dateFrom, value: newValue }\r\n\r\n\t\t// Clear previous errors\r\n\t\tthis.validationState = { ...this.validationState, dateFromError: '', rangeError: '' }\r\n\r\n\t\tif (!newValue) {\r\n\t\t\t// Allow empty for optional fields\r\n\t\t\tif (!this.required) {\r\n\t\t\t\tthis.emitChange()\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tthis.validationState = { ...this.validationState, dateFromError: 'Start date is required' }\r\n\t\t\tthis.error = true\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Validate and potentially auto-correct\r\n\t\tthis.validateAndCorrect('from')\r\n\t}\r\n\r\n\t/**\r\n\t * Handle to date change with validation and auto-correction\r\n\t */\r\n\tprivate handleDateToChange(e: Event) {\r\n\t\tconst input = e.target as HTMLInputElement\r\n\t\tconst newValue = input.value\r\n\r\n\t\t// Update the value\r\n\t\tthis.dateTo = { ...this.dateTo, value: newValue }\r\n\r\n\t\t// Clear previous errors\r\n\t\tthis.validationState = { ...this.validationState, dateToError: '', rangeError: '' }\r\n\r\n\t\tif (!newValue) {\r\n\t\t\t// Allow empty for optional fields\r\n\t\t\tif (!this.required) {\r\n\t\t\t\tthis.emitChange()\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tthis.validationState = { ...this.validationState, dateToError: 'End date is required' }\r\n\t\t\tthis.error = true\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Validate and potentially auto-correct\r\n\t\tthis.validateAndCorrect('to')\r\n\t}\r\n\r\n\t/**\r\n\t * Validate dates and auto-correct if enabled\r\n\t */\r\n\tprivate validateAndCorrect(changedField?: 'from' | 'to') {\r\n\t\tconst fromDate = this.parseDate(this.dateFrom.value)\r\n\t\tconst toDate = this.parseDate(this.dateTo.value)\r\n\r\n\t\t// Reset validation state\r\n\t\tlet hasError = false\r\n\t\tconst newValidationState = { dateFromError: '', dateToError: '', rangeError: '' }\r\n\r\n\t\t// Validate individual dates\r\n\t\tif (this.dateFrom.value && !fromDate) {\r\n\t\t\tnewValidationState.dateFromError = 'Invalid date format'\r\n\t\t\thasError = true\r\n\t\t}\r\n\r\n\t\tif (this.dateTo.value && !toDate) {\r\n\t\t\tnewValidationState.dateToError = 'Invalid date format'\r\n\t\t\thasError = true\r\n\t\t}\r\n\r\n\t\t// If both dates are valid, check range constraints\r\n\t\tif (fromDate && toDate) {\r\n\t\t\tconst daysBetween = this.getDaysBetween(fromDate, toDate)\r\n\r\n\t\t\t// Check if from date is after to date\r\n\t\t\tif (fromDate > toDate) {\r\n\t\t\t\tif (this.autoCorrect) {\r\n\t\t\t\t\t// Auto-correct based on which field changed\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\t// User changed from date, adjust to date\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.defaultGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (changedField === 'to') {\r\n\t\t\t\t\t\t// User changed to date, adjust from date\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.defaultGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// No specific field changed, swap them\r\n\t\t\t\t\t\tconst tempValue = this.dateFrom.value\r\n\t\t\t\t\t\tthis.dateFrom = { ...this.dateFrom, value: this.dateTo.value }\r\n\t\t\t\t\t\tthis.dateTo = { ...this.dateTo, value: tempValue }\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = 'End date must be after start date'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check same date constraint\r\n\t\t\tif (!this.allowSameDate && daysBetween === 0) {\r\n\t\t\t\tif (this.autoCorrect && changedField) {\r\n\t\t\t\t\t// Auto-correct by adjusting the other date\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.defaultGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.defaultGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = 'Start and end dates cannot be the same'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check minimum gap\r\n\t\t\tif (this.minGap > 0 && daysBetween < this.minGap) {\r\n\t\t\t\tif (this.autoCorrect && changedField) {\r\n\t\t\t\t\t// Auto-correct to maintain minimum gap\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.minGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.minGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = `Minimum ${this.minGap} day${this.minGap > 1 ? 's' : ''} required between dates`\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check maximum gap\r\n\t\t\tif (this.maxGap !== undefined && daysBetween > this.maxGap) {\r\n\t\t\t\tif (this.autoCorrect && changedField) {\r\n\t\t\t\t\t// Auto-correct to maintain maximum gap\r\n\t\t\t\t\tif (changedField === 'from') {\r\n\t\t\t\t\t\tconst newToDate = new Date(fromDate)\r\n\t\t\t\t\t\tnewToDate.setDate(newToDate.getDate() + this.maxGap)\r\n\t\t\t\t\t\tthis.dateTo = {\r\n\t\t\t\t\t\t\t...this.dateTo,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst newFromDate = new Date(toDate)\r\n\t\t\t\t\t\tnewFromDate.setDate(newFromDate.getDate() - this.maxGap)\r\n\t\t\t\t\t\tthis.dateFrom = {\r\n\t\t\t\t\t\t\t...this.dateFrom,\r\n\t\t\t\t\t\t\tvalue: this.formatDate(newFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Re-validate after correction\r\n\t\t\t\t\tthis.validateAndCorrect()\r\n\t\t\t\t\treturn\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewValidationState.rangeError = `Maximum ${this.maxGap} day${this.maxGap > 1 ? 's' : ''} allowed between dates`\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check against min/max date constraints\r\n\t\t\tif (this.minDate) {\r\n\t\t\t\tconst minDateObj = this.parseDate(this.minDate)\r\n\t\t\t\tif (minDateObj && fromDate < minDateObj) {\r\n\t\t\t\t\tnewValidationState.dateFromError = 'Date is before minimum allowed date'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.maxDate) {\r\n\t\t\t\tconst maxDateObj = this.parseDate(this.maxDate)\r\n\t\t\t\tif (maxDateObj && toDate > maxDateObj) {\r\n\t\t\t\t\tnewValidationState.dateToError = 'Date is after maximum allowed date'\r\n\t\t\t\t\thasError = true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update validation state\r\n\t\tthis.validationState = newValidationState\r\n\t\tthis.error = hasError\r\n\r\n\t\t// Emit change event with validation status\r\n\t\tthis.emitChange()\r\n\t}\r\n\r\n\t/**\r\n\t * Get computed min date for the \"to\" field based on \"from\" value\r\n\t */\r\n\tprivate getComputedMinDateTo(): string | undefined {\r\n\t\tif (!this.dateFrom.value) return this.minDate\r\n\r\n\t\tconst fromDate = this.parseDate(this.dateFrom.value)\r\n\t\tif (!fromDate) return this.minDate\r\n\r\n\t\t// Calculate minimum date based on constraints\r\n\t\tconst minToDate = new Date(fromDate)\r\n\t\t\r\n\t\tif (!this.allowSameDate) {\r\n\t\t\tminToDate.setDate(minToDate.getDate() + 1)\r\n\t\t}\r\n\t\t\r\n\t\tif (this.minGap > 0) {\r\n\t\t\tminToDate.setDate(fromDate.getDate() + this.minGap)\r\n\t\t}\r\n\r\n\t\t// Compare with global minDate if set\r\n\t\tif (this.minDate) {\r\n\t\t\tconst globalMin = this.parseDate(this.minDate)\r\n\t\t\tif (globalMin && globalMin > minToDate) {\r\n\t\t\t\treturn this.minDate\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.formatDate(minToDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t}\r\n\r\n\t/**\r\n\t * Get computed max date for the \"from\" field based on \"to\" value\r\n\t */\r\n\tprivate getComputedMaxDateFrom(): string | undefined {\r\n\t\tif (!this.dateTo.value) return this.maxDate\r\n\r\n\t\tconst toDate = this.parseDate(this.dateTo.value)\r\n\t\tif (!toDate) return this.maxDate\r\n\r\n\t\t// Calculate maximum date based on constraints\r\n\t\tconst maxFromDate = new Date(toDate)\r\n\t\t\r\n\t\tif (!this.allowSameDate) {\r\n\t\t\tmaxFromDate.setDate(maxFromDate.getDate() - 1)\r\n\t\t}\r\n\t\t\r\n\t\tif (this.minGap > 0) {\r\n\t\t\tmaxFromDate.setDate(toDate.getDate() - this.minGap)\r\n\t\t}\r\n\r\n\t\t// Compare with global maxDate if set\r\n\t\tif (this.maxDate) {\r\n\t\t\tconst globalMax = this.parseDate(this.maxDate)\r\n\t\t\tif (globalMax && globalMax < maxFromDate) {\r\n\t\t\t\treturn this.maxDate\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.formatDate(maxFromDate, this.type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD')\r\n\t}\r\n\r\n\temitChange() {\r\n\t\tconst isValid = !this.error && \r\n\t\t\t!!this.dateFrom.value && \r\n\t\t\t!!this.dateTo.value && \r\n\t\t\t!this.validationState.dateFromError && \r\n\t\t\t!this.validationState.dateToError && \r\n\t\t\t!this.validationState.rangeError\r\n\r\n\t\tthis.dispatchEvent(new CustomEvent<SchmancyDateRangeInlineChangeEvent['detail']>('change', {\r\n\t\t\tdetail: {\r\n\t\t\t\tdateFrom: this.dateFrom.value,\r\n\t\t\t\tdateTo: this.dateTo.value,\r\n\t\t\t\tisValid\r\n\t\t\t},\r\n\t\t\tbubbles: true,\r\n\t\t\tcomposed: true\r\n\t\t}))\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\t// Determine which error to show on each input\r\n\t\tconst fromError = this.validationState.dateFromError || this.validationState.rangeError\r\n\t\tconst toError = this.validationState.dateToError || this.validationState.rangeError\r\n\r\n\t\treturn html`\r\n\t\t\t<div class=\"w-full\">\r\n\t\t\t\t<div class=\"flex items-start gap-2 w-full\">\r\n\t\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t\t<schmancy-input\r\n\t\t\t\t\t\t\t.type=${this.type}\r\n\t\t\t\t\t\t\t.label=${this.dateFrom.label}\r\n\t\t\t\t\t\t\t.value=${this.dateFrom.value}\r\n\t\t\t\t\t\t\t.min=${this.minDate}\r\n\t\t\t\t\t\t\t.max=${this.getComputedMaxDateFrom()}\r\n\t\t\t\t\t\t\t@change=${this.handleDateFromChange}\r\n\t\t\t\t\t\t\t.error=${!!fromError}\r\n\t\t\t\t\t\t\t.hint=${fromError || ''}\r\n\t\t\t\t\t\t\t.required=${this.required}\r\n\t\t\t\t\t\t\t.disabled=${this.disabled}\r\n\t\t\t\t\t\t\tsize=${this.compact ? 'sm' : 'md'}\r\n\t\t\t\t\t\t></schmancy-input>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"flex items-center justify-center ${this.compact ? 'pt-8' : 'pt-10'} px-1\">\r\n\t\t\t\t\t\t<schmancy-icon class=\"text-surface-onVariant opacity-50\">\r\n\t\t\t\t\t\t\tarrow_forward\r\n\t\t\t\t\t\t</schmancy-icon>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t\t<schmancy-input\r\n\t\t\t\t\t\t\t.type=${this.type}\r\n\t\t\t\t\t\t\t.label=${this.dateTo.label}\r\n\t\t\t\t\t\t\t.value=${this.dateTo.value}\r\n\t\t\t\t\t\t\t.min=${this.getComputedMinDateTo()}\r\n\t\t\t\t\t\t\t.max=${this.maxDate}\r\n\t\t\t\t\t\t\t@change=${this.handleDateToChange}\r\n\t\t\t\t\t\t\t.error=${!!toError}\r\n\t\t\t\t\t\t\t.hint=${toError || ''}\r\n\t\t\t\t\t\t\t.required=${this.required}\r\n\t\t\t\t\t\t\t.disabled=${this.disabled}\r\n\t\t\t\t\t\t\tsize=${this.compact ? 'sm' : 'md'}\r\n\t\t\t\t\t\t></schmancy-input>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t`\r\n\t}\r\n}"],"mappings":"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"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./date-range-inline-D0I6k84h.cjs`);exports.SchmancyDateRangeInline=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./date-range-inline-Dx4Reboo.cjs`);exports.SchmancyDateRangeInline=e.t;
@@ -1,2 +1,2 @@
1
- import { t as e } from "./date-range-inline-DjRdMZ1z.js";
1
+ import { t as e } from "./date-range-inline-DPqY9YYf.js";
2
2
  export { e as SchmancyDateRangeInline };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./date-range-BHSzlwSL.cjs`);Object.defineProperty(exports,`SchmancyDateRange`,{enumerable:!0,get:function(){return e.t}}),exports.validateInitialDateRange=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./date-range-DDUuBlJ6.cjs`);Object.defineProperty(exports,`SchmancyDateRange`,{enumerable:!0,get:function(){return e.t}}),exports.validateInitialDateRange=e.n;
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./date-range-DJrdpzev.js";
1
+ import { n as e, t } from "./date-range-IPlbrhwW.js";
2
2
  export { t as SchmancyDateRange, e as validateInitialDateRange };
package/dist/delay.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`);require(`./mixins-fIpzhVMd.cjs`);const t=require(`./hashContent-iRZJJWtE.cjs`);let n=require(`rxjs`),r=require(`rxjs/operators`),i=require(`@lit/context`),a=require(`lit/decorators.js`),o=require(`lit`),s=require(`@lit-labs/motion`),c=require(`lit/directives/cache.js`);var l,u=(0,i.createContext)(`delay-context`),d=l=class extends e.t{constructor(...e){super(...e),this.delay=0,this.motion=`flyBelow`,this.rendered=!1,this.parentDelay=0,this.effectiveDelay=0,this.once=!0,this.sessionKey=``}firstUpdated(){this.observeSlotChanges(),this.updateRenderState()}disconnectedCallback(){super.disconnectedCallback(),this.mutationObserver?.disconnect()}observeSlotChanges(){let e=this.shadowRoot?.querySelector(`slot`);e&&(this.mutationObserver=new MutationObserver(()=>{this.sessionKey=this.generateSessionKey()}),this.mutationObserver.observe(e,{childList:!0,subtree:!0}))}getTotalSiblingDelay(e){if(!(e&&e instanceof HTMLElement))return 0;let t=0,n=e.previousElementSibling;for(;n;)n instanceof l&&(t+=n.delay),n=n.previousElementSibling;return e.parentElement&&(t+=this.getTotalSiblingDelay(e.parentElement)),t}updateRenderState(){if(this.sessionKey=this.generateSessionKey(),this.once&&sessionStorage.getItem(this.sessionKey)===`true`)return void(this.rendered=!0);let e=this.getTotalSiblingDelay(this);this.effectiveDelay=this.delay+this.parentDelay+e,(0,n.timer)(this.effectiveDelay).pipe((0,r.takeUntil)(this.disconnecting)).subscribe(()=>{if(this.rendered=!0,this.once)try{sessionStorage.setItem(this.sessionKey,`true`)}catch{}})}generateSessionKey(){let e=this.assignedElements.map(e=>e.outerHTML).join(``);return this.once?t.t(e):``}get motionLit(){return this.motion===`flyBelow`?s.flyBelow:this.motion===`flyAbove`?s.flyAbove:s.fadeIn}render(){return(0,c.cache)(this.rendered?o.html`<div
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-D9WA9FP9.cjs`);require(`./mixins-XGVIOvKt.cjs`);const t=require(`./hashContent-iRZJJWtE.cjs`);let n=require(`rxjs`),r=require(`rxjs/operators`),i=require(`@lit/context`),a=require(`lit/decorators.js`),o=require(`lit`),s=require(`@lit-labs/motion`),c=require(`lit/directives/cache.js`);var l,u=(0,i.createContext)(`delay-context`),d=l=class extends e.t{constructor(...e){super(...e),this.delay=0,this.motion=`flyBelow`,this.rendered=!1,this.parentDelay=0,this.effectiveDelay=0,this.once=!0,this.sessionKey=``}firstUpdated(){this.observeSlotChanges(),this.updateRenderState()}disconnectedCallback(){super.disconnectedCallback(),this.mutationObserver?.disconnect()}observeSlotChanges(){let e=this.shadowRoot?.querySelector(`slot`);e&&(this.mutationObserver=new MutationObserver(()=>{this.sessionKey=this.generateSessionKey()}),this.mutationObserver.observe(e,{childList:!0,subtree:!0}))}getTotalSiblingDelay(e){if(!(e&&e instanceof HTMLElement))return 0;let t=0,n=e.previousElementSibling;for(;n;)n instanceof l&&(t+=n.delay),n=n.previousElementSibling;return e.parentElement&&(t+=this.getTotalSiblingDelay(e.parentElement)),t}updateRenderState(){if(this.sessionKey=this.generateSessionKey(),this.once&&sessionStorage.getItem(this.sessionKey)===`true`)return void(this.rendered=!0);let e=this.getTotalSiblingDelay(this);this.effectiveDelay=this.delay+this.parentDelay+e,(0,n.timer)(this.effectiveDelay).pipe((0,r.takeUntil)(this.disconnecting)).subscribe(()=>{if(this.rendered=!0,this.once)try{sessionStorage.setItem(this.sessionKey,`true`)}catch{}})}generateSessionKey(){let e=this.assignedElements.map(e=>e.outerHTML).join(``);return this.once?t.t(e):``}get motionLit(){return this.motion===`flyBelow`?s.flyBelow:this.motion===`flyAbove`?s.flyAbove:s.fadeIn}render(){return(0,c.cache)(this.rendered?o.html`<div
2
2
  ${(0,s.animate)({in:this.motionLit,keyframeOptions:{duration:300,easing:`ease-out`}})}
3
3
  >
4
4
  <slot></slot>
package/dist/delay.js CHANGED
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
- import "./mixins-DGBI7YPO.js";
1
+ import { t as e, u as t } from "./SchmancyElement-OWgz9ePG.js";
2
+ import "./mixins-COeG4DiX.js";
3
3
  import { t as n } from "./hashContent-BqU6v1Xr.js";
4
4
  import { timer as r } from "rxjs";
5
5
  import { takeUntil as i } from "rxjs/operators";
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
- import { t as n } from "./mixins-DGBI7YPO.js";
1
+ import { t as e, u as t } from "./SchmancyElement-OWgz9ePG.js";
2
+ import { t as n } from "./mixins-COeG4DiX.js";
3
3
  import { f as r } from "./animation-DCznELuT.js";
4
4
  import { t as i } from "./reduced-motion-D-L12p7G.js";
5
5
  import { t as a } from "./cursor-glow-Ah7VXSj7.js";
@@ -1 +1 @@
1
- {"version":3,"file":"details-CY49XVfp.js","names":["#open$","#animateIndicator","#updateIndicatorSlot","#closeSub","#handleToggle","#handleSummaryClick","#indicatorRef","#handleIndicatorSlotChange","#contentRef","#closing","#nativeAnim","#startClose","#indicatorIsOpen","#currentAnimation"],"sources":["../src/details/details.ts"],"sourcesContent":["import { SchmancyElement, SurfaceMixin } from '@mixins/index'\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { magnetic } from '../directives/magnetic'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { BehaviorSubject, fromEvent, Subscription } from 'rxjs'\nimport { distinctUntilChanged, filter, take, takeUntil, tap } from 'rxjs/operators'\nimport { SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\n\n@customElement('schmancy-details')\nexport default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t:host([overlay]) {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t:host([open]) {\n\t\t\tz-index: 10;\n\t\t}\n\n\t\tdetails {\n\t\t\tbackground: inherit;\n\t\t\tcolor: inherit;\n\t\t\tborder-radius: inherit;\n\t\t}\n\n\t\tsummary::-webkit-details-marker {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tsummary {\n\t\t\tlist-style: none;\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\t/*\n\t\t * Blackbird 2.1 — CSS-driven collapse/expand\n\t\t *\n\t\t * Single animation system: CSS grid transition handles height,\n\t\t * coordinated opacity fade for buttery smooth feel.\n\t\t * No competing Web Animations API on content.\n\t\t */\n\n\t\t.content-wrapper {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: 0fr;\n\t\t\toverflow: hidden;\n\t\t\topacity: 0;\n\t\t\ttransition:\n\t\t\t\tgrid-template-rows 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\topacity 250ms ease;\n\t\t}\n\n\t\t/* Spring easing when linear() is supported */\n\t\t@supports (animation-timing-function: linear(0, 1)) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition:\n\t\t\t\t\tgrid-template-rows 400ms linear(\n\t\t\t\t\t\t0, 0.006, 0.025 2.8%, 0.101 6.1%, 0.539 18.9%, 0.721 25.3%, 0.849 31.5%,\n\t\t\t\t\t\t0.937 38.1%, 0.968 41.8%, 0.991 45.7%, 1.006 50%, 1.015 54.8%,\n\t\t\t\t\t\t1.017 63.3%, 1.001\n\t\t\t\t\t),\n\t\t\t\t\topacity 250ms ease;\n\t\t\t}\n\t\t}\n\n\t\t.content-wrapper[data-open='true'] {\n\t\t\tgrid-template-rows: 1fr;\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.content-inner {\n\t\t\tmin-height: 0;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\t/*\n\t\t * Progressive Enhancement: ::details-content (Chrome 131+)\n\t\t *\n\t\t * When both ::details-content AND interpolate-size are supported,\n\t\t * the browser handles height animation natively — including animated\n\t\t * close via transition-behavior: allow-discrete on content-visibility.\n\t\t * The grid wrapper becomes transparent (display: contents).\n\t\t */\n\t\t@supports selector(::details-content) and (interpolate-size: allow-keywords) {\n\t\t\t:host {\n\t\t\t\tinterpolate-size: allow-keywords;\n\t\t\t}\n\n\t\t\t.content-wrapper {\n\t\t\t\tdisplay: contents;\n\t\t\t}\n\n\t\t\tdetails::details-content {\n\t\t\t\tblock-size: 0;\n\t\t\t\toverflow-y: clip;\n\t\t\t\topacity: 0;\n\t\t\t\ttransition:\n\t\t\t\t\tblock-size 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\t\topacity 250ms ease,\n\t\t\t\t\tcontent-visibility 400ms;\n\t\t\t\ttransition-behavior: allow-discrete;\n\t\t\t}\n\n\t\t\tdetails[open]::details-content {\n\t\t\t\tblock-size: auto;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t\tdetails::details-content {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t}\n\t`];\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open' as const,\n\t\tdelegatesFocus: true,\n\t}\n\n\t@property() summary = ''\n\n\t@property({ type: Boolean, reflect: true })\n\tget open() {\n\t\treturn this.#open$.value\n\t}\n\tset open(value: boolean) {\n\t\tif (this.#open$.value !== value) {\n\t\t\tthis.#open$.next(value)\n\t\t}\n\t}\n\n\t@property({ attribute: 'indicator-placement', reflect: true })\n\tindicatorPlacement: 'start' | 'end' = 'end'\n\n\t@property({ type: Boolean, attribute: 'hide-indicator' })\n\thideIndicator = false\n\n\t@property({ type: Number, attribute: 'indicator-rotate' })\n\tindicatorRotate: number = 90\n\n\t@property({ type: Boolean, reflect: true })\n\tlocked = false\n\n\t@property({ type: Boolean, reflect: true })\n\toverlay = false\n\n\t@property({ attribute: 'summary-padding' })\n\tsummaryPadding = 'p-3'\n\n\t@property({ attribute: 'content-padding' })\n\tcontentPadding = 'p-3'\n\n\t#open$ = new BehaviorSubject<boolean>(false)\n\t#indicatorRef: Ref<HTMLElement> = createRef()\n\t#contentRef: Ref<HTMLDivElement> = createRef()\n\t#currentAnimation?: Animation\n\t#indicatorIsOpen = false\n\t#closing = false\n\t#closeSub?: Subscription\n\n\t/** True when browser handles close animation natively via ::details-content */\n\t#nativeAnim =\n\t\ttypeof CSS !== 'undefined' &&\n\t\t!!CSS.supports?.('selector(::details-content)') &&\n\t\t!!CSS.supports?.('interpolate-size', 'allow-keywords')\n\n\t/**\n\t * Lazy rendering: tracks if content has ever been opened.\n\t * Once true, content stays rendered (even when closed) for smooth animations.\n\t */\n\t@state() private hasOpened = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.type = 'solid'\n\t\tthis.rounded = 'all'\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tthis.#open$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(isOpen => {\n\t\t\t\t\tif (isOpen && !this.hasOpened) {\n\t\t\t\t\t\tthis.hasOpened = true\n\t\t\t\t\t}\n\t\t\t\t\tthis.#animateIndicator(isOpen)\n\t\t\t\t\tthis.#updateIndicatorSlot()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => this.requestUpdate())\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.#closeSub?.unsubscribe()\n\t}\n\n\trender() {\n\t\tconst isOpen = this.#open$.value\n\n\t\tconst detailsClasses = this.classMap({\n\t\t\t'w-full rounded-xl transition-shadow duration-200 ease-out': true,\n\t\t\t'overflow-visible': !this.overlay,\n\t\t\t'overflow-visible relative': this.overlay,\n\t\t})\n\n\t\tconst summaryClasses = this.classMap({\n\t\t\t[this.summaryPadding]: true,\n\t\t\t'select-none relative flex items-center gap-2 rounded-xl': true,\n\t\t\t'transition-colors duration-150': true,\n\t\t\t'hover:bg-surface-on/5 active:bg-surface-on/8': !this.locked,\n\t\t\t'focus-visible:ring-2 focus-visible:ring-primary-default/50 focus-visible:ring-offset-1': !this.locked,\n\t\t\t'cursor-pointer group': !this.locked,\n\t\t\t'cursor-default': this.locked,\n\t\t\t'flex-row': this.indicatorPlacement === 'start',\n\t\t\t'flex-row-reverse': this.indicatorPlacement === 'end',\n\t\t})\n\n\t\tconst contentClasses = this.classMap({\n\t\t\t[this.contentPadding]: true,\n\t\t\t'text-sm': true,\n\t\t\t'absolute inset-x-0 bg-surface-lowest/55 backdrop-blur-[16px] shadow-2xl rounded-b-xl z-20':\n\t\t\t\tthis.overlay,\n\t\t})\n\n\t\treturn html`\n\t\t\t<details ?open=${isOpen} @toggle=${this.#handleToggle} class=${detailsClasses}>\n\t\t\t\t<summary ${this.locked ? '' : magnetic({ strength: 2, radius: 50 })} ${this.locked ? '' : cursorGlow({ radius: 250, intensity: 0.08 })} class=${summaryClasses} tabindex=${this.locked ? -1 : 0} @click=${this.#handleSummaryClick}>\n\t\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t${ref(this.#indicatorRef)}\n\t\t\t\t\t\t\t\t\tclass=\"flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<slot name=\"indicator\" @slotchange=${this.#handleIndicatorSlotChange}>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-5 h-5\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M9 6L15 12L9 18\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: ''}\n\n\t\t\t\t\t<span class=\"flex-1 min-w-0\">\n\t\t\t\t\t\t<slot name=\"summary\">${this.summary}</slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t</summary>\n\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.#contentRef)}\n\t\t\t\t\tclass=\"content-wrapper\"\n\t\t\t\t\tdata-open=${isOpen && !this.#closing}\n\t\t\t\t\taria-hidden=${isOpen ? 'false' : 'true'}\n\t\t\t\t>\n\t\t\t\t\t<div class=\"content-inner\">\n\t\t\t\t\t\t${this.hasOpened\n\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t<div class=${contentClasses}>\n\t\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t\t\t<slot name=\"details\"></slot>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t`\n\t}\n\n\t#handleSummaryClick(e: MouseEvent) {\n\t\tif ((e.target as HTMLElement).closest('[slot=\"actions\"]')) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.locked) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.#closing) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\n\t\t// Native animated path (Chromium 131+): browser handles everything via CSS\n\t\tif (this.#nativeAnim) return\n\n\t\t// Fallback: manually animate close via CSS transition, then close native details\n\t\tif (this.#open$.value) {\n\t\t\te.preventDefault()\n\t\t\tthis.#startClose()\n\t\t}\n\t\t// If closed, let native open happen (handled by #handleToggle)\n\t}\n\n\t#handleToggle(e: Event) {\n\t\te.stopPropagation()\n\n\t\tconst ownDetails = this.shadowRoot?.querySelector('details')\n\t\tif (e.target !== ownDetails) return\n\n\t\tconst newState = ownDetails.open\n\n\t\tif (this.#nativeAnim) {\n\t\t\t// Native path: handle both open and close\n\t\t\tif (this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t} else {\n\t\t\t// Fallback path: only handle OPEN (close is driven by #startClose)\n\t\t\tif (newState && this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fallback close: trigger CSS grid+opacity transition, then close native <details>.\n\t * The CSS transition (400ms) handles the visual collapse — no WAAPI needed.\n\t */\n\t#startClose() {\n\t\tthis.#closing = true\n\t\tthis.#closeSub?.unsubscribe()\n\n\t\t// Immediately collapse the grid wrapper via DOM attribute\n\t\tthis.#contentRef.value?.setAttribute('data-open', 'false')\n\n\t\t// Animate indicator immediately\n\t\tthis.#animateIndicator(false)\n\n\t\t// After CSS transition completes, close native details and update state\n\t\tconst wrapper = this.#contentRef.value\n\t\tif (!wrapper) return\n\n\t\tthis.#closeSub = fromEvent<TransitionEvent>(wrapper, 'transitionend').pipe(\n\t\t\tfilter(e => e.propertyName === 'grid-template-rows'),\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.#closing = false\n\t\t\t\tthis.open = false\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: false })\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\t#handleIndicatorSlotChange(e: Event) {\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tslot.assignedElements().forEach(el => {\n\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t})\n\t}\n\n\t#updateIndicatorSlot() {\n\t\tconst slot = this.shadowRoot?.querySelector('slot[name=\"indicator\"]') as HTMLSlotElement | null\n\t\tif (slot) {\n\t\t\tslot.assignedElements().forEach(el => {\n\t\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t\t})\n\t\t}\n\t}\n\n\t/** Idempotent indicator rotation — skips if already at target state */\n\t#animateIndicator(isOpen: boolean) {\n\t\tif (this.#indicatorIsOpen === isOpen) return\n\t\tthis.#indicatorIsOpen = isOpen\n\n\t\tconst indicator = this.#indicatorRef.value\n\t\tif (!indicator || reducedMotion$.value) return\n\n\t\tthis.#currentAnimation?.cancel()\n\n\t\tthis.#currentAnimation = indicator.animate(\n\t\t\t[\n\t\t\t\t{ transform: `rotate(${isOpen ? '0deg' : `${this.indicatorRotate}deg`})` },\n\t\t\t\t{ transform: `rotate(${isOpen ? `${this.indicatorRotate}deg` : '0deg'})` },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\teasing: SPRING_SNAPPY.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-details': SchmancyDetails\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"details-BnleHmYe.js","names":["#open$","#animateIndicator","#updateIndicatorSlot","#closeSub","#handleToggle","#handleSummaryClick","#indicatorRef","#handleIndicatorSlotChange","#contentRef","#closing","#nativeAnim","#startClose","#indicatorIsOpen","#currentAnimation"],"sources":["../src/details/details.ts"],"sourcesContent":["import { SchmancyElement, SurfaceMixin } from '@mixins/index'\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { magnetic } from '../directives/magnetic'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { BehaviorSubject, fromEvent, Subscription } from 'rxjs'\nimport { distinctUntilChanged, filter, take, takeUntil, tap } from 'rxjs/operators'\nimport { SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\n\n@customElement('schmancy-details')\nexport default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t:host([overlay]) {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t:host([open]) {\n\t\t\tz-index: 10;\n\t\t}\n\n\t\tdetails {\n\t\t\tbackground: inherit;\n\t\t\tcolor: inherit;\n\t\t\tborder-radius: inherit;\n\t\t}\n\n\t\tsummary::-webkit-details-marker {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tsummary {\n\t\t\tlist-style: none;\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\t/*\n\t\t * Blackbird 2.1 — CSS-driven collapse/expand\n\t\t *\n\t\t * Single animation system: CSS grid transition handles height,\n\t\t * coordinated opacity fade for buttery smooth feel.\n\t\t * No competing Web Animations API on content.\n\t\t */\n\n\t\t.content-wrapper {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: 0fr;\n\t\t\toverflow: hidden;\n\t\t\topacity: 0;\n\t\t\ttransition:\n\t\t\t\tgrid-template-rows 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\topacity 250ms ease;\n\t\t}\n\n\t\t/* Spring easing when linear() is supported */\n\t\t@supports (animation-timing-function: linear(0, 1)) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition:\n\t\t\t\t\tgrid-template-rows 400ms linear(\n\t\t\t\t\t\t0, 0.006, 0.025 2.8%, 0.101 6.1%, 0.539 18.9%, 0.721 25.3%, 0.849 31.5%,\n\t\t\t\t\t\t0.937 38.1%, 0.968 41.8%, 0.991 45.7%, 1.006 50%, 1.015 54.8%,\n\t\t\t\t\t\t1.017 63.3%, 1.001\n\t\t\t\t\t),\n\t\t\t\t\topacity 250ms ease;\n\t\t\t}\n\t\t}\n\n\t\t.content-wrapper[data-open='true'] {\n\t\t\tgrid-template-rows: 1fr;\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.content-inner {\n\t\t\tmin-height: 0;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\t/*\n\t\t * Progressive Enhancement: ::details-content (Chrome 131+)\n\t\t *\n\t\t * When both ::details-content AND interpolate-size are supported,\n\t\t * the browser handles height animation natively — including animated\n\t\t * close via transition-behavior: allow-discrete on content-visibility.\n\t\t * The grid wrapper becomes transparent (display: contents).\n\t\t */\n\t\t@supports selector(::details-content) and (interpolate-size: allow-keywords) {\n\t\t\t:host {\n\t\t\t\tinterpolate-size: allow-keywords;\n\t\t\t}\n\n\t\t\t.content-wrapper {\n\t\t\t\tdisplay: contents;\n\t\t\t}\n\n\t\t\tdetails::details-content {\n\t\t\t\tblock-size: 0;\n\t\t\t\toverflow-y: clip;\n\t\t\t\topacity: 0;\n\t\t\t\ttransition:\n\t\t\t\t\tblock-size 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\t\topacity 250ms ease,\n\t\t\t\t\tcontent-visibility 400ms;\n\t\t\t\ttransition-behavior: allow-discrete;\n\t\t\t}\n\n\t\t\tdetails[open]::details-content {\n\t\t\t\tblock-size: auto;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t\tdetails::details-content {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t}\n\t`];\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open' as const,\n\t\tdelegatesFocus: true,\n\t}\n\n\t@property() summary = ''\n\n\t@property({ type: Boolean, reflect: true })\n\tget open() {\n\t\treturn this.#open$.value\n\t}\n\tset open(value: boolean) {\n\t\tif (this.#open$.value !== value) {\n\t\t\tthis.#open$.next(value)\n\t\t}\n\t}\n\n\t@property({ attribute: 'indicator-placement', reflect: true })\n\tindicatorPlacement: 'start' | 'end' = 'end'\n\n\t@property({ type: Boolean, attribute: 'hide-indicator' })\n\thideIndicator = false\n\n\t@property({ type: Number, attribute: 'indicator-rotate' })\n\tindicatorRotate: number = 90\n\n\t@property({ type: Boolean, reflect: true })\n\tlocked = false\n\n\t@property({ type: Boolean, reflect: true })\n\toverlay = false\n\n\t@property({ attribute: 'summary-padding' })\n\tsummaryPadding = 'p-3'\n\n\t@property({ attribute: 'content-padding' })\n\tcontentPadding = 'p-3'\n\n\t#open$ = new BehaviorSubject<boolean>(false)\n\t#indicatorRef: Ref<HTMLElement> = createRef()\n\t#contentRef: Ref<HTMLDivElement> = createRef()\n\t#currentAnimation?: Animation\n\t#indicatorIsOpen = false\n\t#closing = false\n\t#closeSub?: Subscription\n\n\t/** True when browser handles close animation natively via ::details-content */\n\t#nativeAnim =\n\t\ttypeof CSS !== 'undefined' &&\n\t\t!!CSS.supports?.('selector(::details-content)') &&\n\t\t!!CSS.supports?.('interpolate-size', 'allow-keywords')\n\n\t/**\n\t * Lazy rendering: tracks if content has ever been opened.\n\t * Once true, content stays rendered (even when closed) for smooth animations.\n\t */\n\t@state() private hasOpened = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.type = 'solid'\n\t\tthis.rounded = 'all'\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tthis.#open$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(isOpen => {\n\t\t\t\t\tif (isOpen && !this.hasOpened) {\n\t\t\t\t\t\tthis.hasOpened = true\n\t\t\t\t\t}\n\t\t\t\t\tthis.#animateIndicator(isOpen)\n\t\t\t\t\tthis.#updateIndicatorSlot()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => this.requestUpdate())\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.#closeSub?.unsubscribe()\n\t}\n\n\trender() {\n\t\tconst isOpen = this.#open$.value\n\n\t\tconst detailsClasses = this.classMap({\n\t\t\t'w-full rounded-xl transition-shadow duration-200 ease-out': true,\n\t\t\t'overflow-visible': !this.overlay,\n\t\t\t'overflow-visible relative': this.overlay,\n\t\t})\n\n\t\tconst summaryClasses = this.classMap({\n\t\t\t[this.summaryPadding]: true,\n\t\t\t'select-none relative flex items-center gap-2 rounded-xl': true,\n\t\t\t'transition-colors duration-150': true,\n\t\t\t'hover:bg-surface-on/5 active:bg-surface-on/8': !this.locked,\n\t\t\t'focus-visible:ring-2 focus-visible:ring-primary-default/50 focus-visible:ring-offset-1': !this.locked,\n\t\t\t'cursor-pointer group': !this.locked,\n\t\t\t'cursor-default': this.locked,\n\t\t\t'flex-row': this.indicatorPlacement === 'start',\n\t\t\t'flex-row-reverse': this.indicatorPlacement === 'end',\n\t\t})\n\n\t\tconst contentClasses = this.classMap({\n\t\t\t[this.contentPadding]: true,\n\t\t\t'text-sm': true,\n\t\t\t'absolute inset-x-0 bg-surface-lowest/55 backdrop-blur-[16px] shadow-2xl rounded-b-xl z-20':\n\t\t\t\tthis.overlay,\n\t\t})\n\n\t\treturn html`\n\t\t\t<details ?open=${isOpen} @toggle=${this.#handleToggle} class=${detailsClasses}>\n\t\t\t\t<summary ${this.locked ? '' : magnetic({ strength: 2, radius: 50 })} ${this.locked ? '' : cursorGlow({ radius: 250, intensity: 0.08 })} class=${summaryClasses} tabindex=${this.locked ? -1 : 0} @click=${this.#handleSummaryClick}>\n\t\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t${ref(this.#indicatorRef)}\n\t\t\t\t\t\t\t\t\tclass=\"flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<slot name=\"indicator\" @slotchange=${this.#handleIndicatorSlotChange}>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-5 h-5\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M9 6L15 12L9 18\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: ''}\n\n\t\t\t\t\t<span class=\"flex-1 min-w-0\">\n\t\t\t\t\t\t<slot name=\"summary\">${this.summary}</slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t</summary>\n\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.#contentRef)}\n\t\t\t\t\tclass=\"content-wrapper\"\n\t\t\t\t\tdata-open=${isOpen && !this.#closing}\n\t\t\t\t\taria-hidden=${isOpen ? 'false' : 'true'}\n\t\t\t\t>\n\t\t\t\t\t<div class=\"content-inner\">\n\t\t\t\t\t\t${this.hasOpened\n\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t<div class=${contentClasses}>\n\t\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t\t\t<slot name=\"details\"></slot>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t`\n\t}\n\n\t#handleSummaryClick(e: MouseEvent) {\n\t\tif ((e.target as HTMLElement).closest('[slot=\"actions\"]')) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.locked) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.#closing) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\n\t\t// Native animated path (Chromium 131+): browser handles everything via CSS\n\t\tif (this.#nativeAnim) return\n\n\t\t// Fallback: manually animate close via CSS transition, then close native details\n\t\tif (this.#open$.value) {\n\t\t\te.preventDefault()\n\t\t\tthis.#startClose()\n\t\t}\n\t\t// If closed, let native open happen (handled by #handleToggle)\n\t}\n\n\t#handleToggle(e: Event) {\n\t\te.stopPropagation()\n\n\t\tconst ownDetails = this.shadowRoot?.querySelector('details')\n\t\tif (e.target !== ownDetails) return\n\n\t\tconst newState = ownDetails.open\n\n\t\tif (this.#nativeAnim) {\n\t\t\t// Native path: handle both open and close\n\t\t\tif (this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t} else {\n\t\t\t// Fallback path: only handle OPEN (close is driven by #startClose)\n\t\t\tif (newState && this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fallback close: trigger CSS grid+opacity transition, then close native <details>.\n\t * The CSS transition (400ms) handles the visual collapse — no WAAPI needed.\n\t */\n\t#startClose() {\n\t\tthis.#closing = true\n\t\tthis.#closeSub?.unsubscribe()\n\n\t\t// Immediately collapse the grid wrapper via DOM attribute\n\t\tthis.#contentRef.value?.setAttribute('data-open', 'false')\n\n\t\t// Animate indicator immediately\n\t\tthis.#animateIndicator(false)\n\n\t\t// After CSS transition completes, close native details and update state\n\t\tconst wrapper = this.#contentRef.value\n\t\tif (!wrapper) return\n\n\t\tthis.#closeSub = fromEvent<TransitionEvent>(wrapper, 'transitionend').pipe(\n\t\t\tfilter(e => e.propertyName === 'grid-template-rows'),\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.#closing = false\n\t\t\t\tthis.open = false\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: false })\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\t#handleIndicatorSlotChange(e: Event) {\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tslot.assignedElements().forEach(el => {\n\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t})\n\t}\n\n\t#updateIndicatorSlot() {\n\t\tconst slot = this.shadowRoot?.querySelector('slot[name=\"indicator\"]') as HTMLSlotElement | null\n\t\tif (slot) {\n\t\t\tslot.assignedElements().forEach(el => {\n\t\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t\t})\n\t\t}\n\t}\n\n\t/** Idempotent indicator rotation — skips if already at target state */\n\t#animateIndicator(isOpen: boolean) {\n\t\tif (this.#indicatorIsOpen === isOpen) return\n\t\tthis.#indicatorIsOpen = isOpen\n\n\t\tconst indicator = this.#indicatorRef.value\n\t\tif (!indicator || reducedMotion$.value) return\n\n\t\tthis.#currentAnimation?.cancel()\n\n\t\tthis.#currentAnimation = indicator.animate(\n\t\t\t[\n\t\t\t\t{ transform: `rotate(${isOpen ? '0deg' : `${this.indicatorRotate}deg`})` },\n\t\t\t\t{ transform: `rotate(${isOpen ? `${this.indicatorRotate}deg` : '0deg'})` },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\teasing: SPRING_SNAPPY.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-details': SchmancyDetails\n\t}\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`),t=require(`./mixins-fIpzhVMd.cjs`),n=require(`./animation-CCOIW4wJ.cjs`),r=require(`./reduced-motion-Ds-HjMzn.cjs`),i=require(`./cursor-glow-Bulq-38P.cjs`),a=require(`./magnetic-DKtc4umC.cjs`);let o=require(`rxjs`),s=require(`rxjs/operators`),c=require(`lit/decorators.js`),l=require(`lit`),u=require(`lit/directives/ref.js`);var d=class extends t.t(e.t){static{this.styles=[l.css`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-D9WA9FP9.cjs`),t=require(`./mixins-XGVIOvKt.cjs`),n=require(`./animation-CCOIW4wJ.cjs`),r=require(`./reduced-motion-Ds-HjMzn.cjs`),i=require(`./cursor-glow-Bulq-38P.cjs`),a=require(`./magnetic-DKtc4umC.cjs`);let o=require(`rxjs`),s=require(`rxjs/operators`),c=require(`lit/decorators.js`),l=require(`lit`),u=require(`lit/directives/ref.js`);var d=class extends t.t(e.t){static{this.styles=[l.css`
2
2
  :host {
3
3
  display: block;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"details-DQNj2oaU.cjs","names":["#open$","#animateIndicator","#updateIndicatorSlot","#closeSub","#handleToggle","#handleSummaryClick","#indicatorRef","#handleIndicatorSlotChange","#contentRef","#closing","#nativeAnim","#startClose","#indicatorIsOpen","#currentAnimation"],"sources":["../src/details/details.ts"],"sourcesContent":["import { SchmancyElement, SurfaceMixin } from '@mixins/index'\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { magnetic } from '../directives/magnetic'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { BehaviorSubject, fromEvent, Subscription } from 'rxjs'\nimport { distinctUntilChanged, filter, take, takeUntil, tap } from 'rxjs/operators'\nimport { SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\n\n@customElement('schmancy-details')\nexport default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t:host([overlay]) {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t:host([open]) {\n\t\t\tz-index: 10;\n\t\t}\n\n\t\tdetails {\n\t\t\tbackground: inherit;\n\t\t\tcolor: inherit;\n\t\t\tborder-radius: inherit;\n\t\t}\n\n\t\tsummary::-webkit-details-marker {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tsummary {\n\t\t\tlist-style: none;\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\t/*\n\t\t * Blackbird 2.1 — CSS-driven collapse/expand\n\t\t *\n\t\t * Single animation system: CSS grid transition handles height,\n\t\t * coordinated opacity fade for buttery smooth feel.\n\t\t * No competing Web Animations API on content.\n\t\t */\n\n\t\t.content-wrapper {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: 0fr;\n\t\t\toverflow: hidden;\n\t\t\topacity: 0;\n\t\t\ttransition:\n\t\t\t\tgrid-template-rows 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\topacity 250ms ease;\n\t\t}\n\n\t\t/* Spring easing when linear() is supported */\n\t\t@supports (animation-timing-function: linear(0, 1)) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition:\n\t\t\t\t\tgrid-template-rows 400ms linear(\n\t\t\t\t\t\t0, 0.006, 0.025 2.8%, 0.101 6.1%, 0.539 18.9%, 0.721 25.3%, 0.849 31.5%,\n\t\t\t\t\t\t0.937 38.1%, 0.968 41.8%, 0.991 45.7%, 1.006 50%, 1.015 54.8%,\n\t\t\t\t\t\t1.017 63.3%, 1.001\n\t\t\t\t\t),\n\t\t\t\t\topacity 250ms ease;\n\t\t\t}\n\t\t}\n\n\t\t.content-wrapper[data-open='true'] {\n\t\t\tgrid-template-rows: 1fr;\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.content-inner {\n\t\t\tmin-height: 0;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\t/*\n\t\t * Progressive Enhancement: ::details-content (Chrome 131+)\n\t\t *\n\t\t * When both ::details-content AND interpolate-size are supported,\n\t\t * the browser handles height animation natively — including animated\n\t\t * close via transition-behavior: allow-discrete on content-visibility.\n\t\t * The grid wrapper becomes transparent (display: contents).\n\t\t */\n\t\t@supports selector(::details-content) and (interpolate-size: allow-keywords) {\n\t\t\t:host {\n\t\t\t\tinterpolate-size: allow-keywords;\n\t\t\t}\n\n\t\t\t.content-wrapper {\n\t\t\t\tdisplay: contents;\n\t\t\t}\n\n\t\t\tdetails::details-content {\n\t\t\t\tblock-size: 0;\n\t\t\t\toverflow-y: clip;\n\t\t\t\topacity: 0;\n\t\t\t\ttransition:\n\t\t\t\t\tblock-size 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\t\topacity 250ms ease,\n\t\t\t\t\tcontent-visibility 400ms;\n\t\t\t\ttransition-behavior: allow-discrete;\n\t\t\t}\n\n\t\t\tdetails[open]::details-content {\n\t\t\t\tblock-size: auto;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t\tdetails::details-content {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t}\n\t`];\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open' as const,\n\t\tdelegatesFocus: true,\n\t}\n\n\t@property() summary = ''\n\n\t@property({ type: Boolean, reflect: true })\n\tget open() {\n\t\treturn this.#open$.value\n\t}\n\tset open(value: boolean) {\n\t\tif (this.#open$.value !== value) {\n\t\t\tthis.#open$.next(value)\n\t\t}\n\t}\n\n\t@property({ attribute: 'indicator-placement', reflect: true })\n\tindicatorPlacement: 'start' | 'end' = 'end'\n\n\t@property({ type: Boolean, attribute: 'hide-indicator' })\n\thideIndicator = false\n\n\t@property({ type: Number, attribute: 'indicator-rotate' })\n\tindicatorRotate: number = 90\n\n\t@property({ type: Boolean, reflect: true })\n\tlocked = false\n\n\t@property({ type: Boolean, reflect: true })\n\toverlay = false\n\n\t@property({ attribute: 'summary-padding' })\n\tsummaryPadding = 'p-3'\n\n\t@property({ attribute: 'content-padding' })\n\tcontentPadding = 'p-3'\n\n\t#open$ = new BehaviorSubject<boolean>(false)\n\t#indicatorRef: Ref<HTMLElement> = createRef()\n\t#contentRef: Ref<HTMLDivElement> = createRef()\n\t#currentAnimation?: Animation\n\t#indicatorIsOpen = false\n\t#closing = false\n\t#closeSub?: Subscription\n\n\t/** True when browser handles close animation natively via ::details-content */\n\t#nativeAnim =\n\t\ttypeof CSS !== 'undefined' &&\n\t\t!!CSS.supports?.('selector(::details-content)') &&\n\t\t!!CSS.supports?.('interpolate-size', 'allow-keywords')\n\n\t/**\n\t * Lazy rendering: tracks if content has ever been opened.\n\t * Once true, content stays rendered (even when closed) for smooth animations.\n\t */\n\t@state() private hasOpened = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.type = 'solid'\n\t\tthis.rounded = 'all'\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tthis.#open$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(isOpen => {\n\t\t\t\t\tif (isOpen && !this.hasOpened) {\n\t\t\t\t\t\tthis.hasOpened = true\n\t\t\t\t\t}\n\t\t\t\t\tthis.#animateIndicator(isOpen)\n\t\t\t\t\tthis.#updateIndicatorSlot()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => this.requestUpdate())\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.#closeSub?.unsubscribe()\n\t}\n\n\trender() {\n\t\tconst isOpen = this.#open$.value\n\n\t\tconst detailsClasses = this.classMap({\n\t\t\t'w-full rounded-xl transition-shadow duration-200 ease-out': true,\n\t\t\t'overflow-visible': !this.overlay,\n\t\t\t'overflow-visible relative': this.overlay,\n\t\t})\n\n\t\tconst summaryClasses = this.classMap({\n\t\t\t[this.summaryPadding]: true,\n\t\t\t'select-none relative flex items-center gap-2 rounded-xl': true,\n\t\t\t'transition-colors duration-150': true,\n\t\t\t'hover:bg-surface-on/5 active:bg-surface-on/8': !this.locked,\n\t\t\t'focus-visible:ring-2 focus-visible:ring-primary-default/50 focus-visible:ring-offset-1': !this.locked,\n\t\t\t'cursor-pointer group': !this.locked,\n\t\t\t'cursor-default': this.locked,\n\t\t\t'flex-row': this.indicatorPlacement === 'start',\n\t\t\t'flex-row-reverse': this.indicatorPlacement === 'end',\n\t\t})\n\n\t\tconst contentClasses = this.classMap({\n\t\t\t[this.contentPadding]: true,\n\t\t\t'text-sm': true,\n\t\t\t'absolute inset-x-0 bg-surface-lowest/55 backdrop-blur-[16px] shadow-2xl rounded-b-xl z-20':\n\t\t\t\tthis.overlay,\n\t\t})\n\n\t\treturn html`\n\t\t\t<details ?open=${isOpen} @toggle=${this.#handleToggle} class=${detailsClasses}>\n\t\t\t\t<summary ${this.locked ? '' : magnetic({ strength: 2, radius: 50 })} ${this.locked ? '' : cursorGlow({ radius: 250, intensity: 0.08 })} class=${summaryClasses} tabindex=${this.locked ? -1 : 0} @click=${this.#handleSummaryClick}>\n\t\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t${ref(this.#indicatorRef)}\n\t\t\t\t\t\t\t\t\tclass=\"flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<slot name=\"indicator\" @slotchange=${this.#handleIndicatorSlotChange}>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-5 h-5\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M9 6L15 12L9 18\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: ''}\n\n\t\t\t\t\t<span class=\"flex-1 min-w-0\">\n\t\t\t\t\t\t<slot name=\"summary\">${this.summary}</slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t</summary>\n\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.#contentRef)}\n\t\t\t\t\tclass=\"content-wrapper\"\n\t\t\t\t\tdata-open=${isOpen && !this.#closing}\n\t\t\t\t\taria-hidden=${isOpen ? 'false' : 'true'}\n\t\t\t\t>\n\t\t\t\t\t<div class=\"content-inner\">\n\t\t\t\t\t\t${this.hasOpened\n\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t<div class=${contentClasses}>\n\t\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t\t\t<slot name=\"details\"></slot>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t`\n\t}\n\n\t#handleSummaryClick(e: MouseEvent) {\n\t\tif ((e.target as HTMLElement).closest('[slot=\"actions\"]')) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.locked) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.#closing) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\n\t\t// Native animated path (Chromium 131+): browser handles everything via CSS\n\t\tif (this.#nativeAnim) return\n\n\t\t// Fallback: manually animate close via CSS transition, then close native details\n\t\tif (this.#open$.value) {\n\t\t\te.preventDefault()\n\t\t\tthis.#startClose()\n\t\t}\n\t\t// If closed, let native open happen (handled by #handleToggle)\n\t}\n\n\t#handleToggle(e: Event) {\n\t\te.stopPropagation()\n\n\t\tconst ownDetails = this.shadowRoot?.querySelector('details')\n\t\tif (e.target !== ownDetails) return\n\n\t\tconst newState = ownDetails.open\n\n\t\tif (this.#nativeAnim) {\n\t\t\t// Native path: handle both open and close\n\t\t\tif (this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t} else {\n\t\t\t// Fallback path: only handle OPEN (close is driven by #startClose)\n\t\t\tif (newState && this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fallback close: trigger CSS grid+opacity transition, then close native <details>.\n\t * The CSS transition (400ms) handles the visual collapse — no WAAPI needed.\n\t */\n\t#startClose() {\n\t\tthis.#closing = true\n\t\tthis.#closeSub?.unsubscribe()\n\n\t\t// Immediately collapse the grid wrapper via DOM attribute\n\t\tthis.#contentRef.value?.setAttribute('data-open', 'false')\n\n\t\t// Animate indicator immediately\n\t\tthis.#animateIndicator(false)\n\n\t\t// After CSS transition completes, close native details and update state\n\t\tconst wrapper = this.#contentRef.value\n\t\tif (!wrapper) return\n\n\t\tthis.#closeSub = fromEvent<TransitionEvent>(wrapper, 'transitionend').pipe(\n\t\t\tfilter(e => e.propertyName === 'grid-template-rows'),\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.#closing = false\n\t\t\t\tthis.open = false\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: false })\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\t#handleIndicatorSlotChange(e: Event) {\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tslot.assignedElements().forEach(el => {\n\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t})\n\t}\n\n\t#updateIndicatorSlot() {\n\t\tconst slot = this.shadowRoot?.querySelector('slot[name=\"indicator\"]') as HTMLSlotElement | null\n\t\tif (slot) {\n\t\t\tslot.assignedElements().forEach(el => {\n\t\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t\t})\n\t\t}\n\t}\n\n\t/** Idempotent indicator rotation — skips if already at target state */\n\t#animateIndicator(isOpen: boolean) {\n\t\tif (this.#indicatorIsOpen === isOpen) return\n\t\tthis.#indicatorIsOpen = isOpen\n\n\t\tconst indicator = this.#indicatorRef.value\n\t\tif (!indicator || reducedMotion$.value) return\n\n\t\tthis.#currentAnimation?.cancel()\n\n\t\tthis.#currentAnimation = indicator.animate(\n\t\t\t[\n\t\t\t\t{ transform: `rotate(${isOpen ? '0deg' : `${this.indicatorRotate}deg`})` },\n\t\t\t\t{ transform: `rotate(${isOpen ? `${this.indicatorRotate}deg` : '0deg'})` },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\teasing: SPRING_SNAPPY.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-details': SchmancyDetails\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"details-Bx2jSJxG.cjs","names":["#open$","#animateIndicator","#updateIndicatorSlot","#closeSub","#handleToggle","#handleSummaryClick","#indicatorRef","#handleIndicatorSlotChange","#contentRef","#closing","#nativeAnim","#startClose","#indicatorIsOpen","#currentAnimation"],"sources":["../src/details/details.ts"],"sourcesContent":["import { SchmancyElement, SurfaceMixin } from '@mixins/index'\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { magnetic } from '../directives/magnetic'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { BehaviorSubject, fromEvent, Subscription } from 'rxjs'\nimport { distinctUntilChanged, filter, take, takeUntil, tap } from 'rxjs/operators'\nimport { SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\n\n@customElement('schmancy-details')\nexport default class SchmancyDetails extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t:host([overlay]) {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t:host([open]) {\n\t\t\tz-index: 10;\n\t\t}\n\n\t\tdetails {\n\t\t\tbackground: inherit;\n\t\t\tcolor: inherit;\n\t\t\tborder-radius: inherit;\n\t\t}\n\n\t\tsummary::-webkit-details-marker {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\tsummary {\n\t\t\tlist-style: none;\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\t/*\n\t\t * Blackbird 2.1 — CSS-driven collapse/expand\n\t\t *\n\t\t * Single animation system: CSS grid transition handles height,\n\t\t * coordinated opacity fade for buttery smooth feel.\n\t\t * No competing Web Animations API on content.\n\t\t */\n\n\t\t.content-wrapper {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-rows: 0fr;\n\t\t\toverflow: hidden;\n\t\t\topacity: 0;\n\t\t\ttransition:\n\t\t\t\tgrid-template-rows 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\topacity 250ms ease;\n\t\t}\n\n\t\t/* Spring easing when linear() is supported */\n\t\t@supports (animation-timing-function: linear(0, 1)) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition:\n\t\t\t\t\tgrid-template-rows 400ms linear(\n\t\t\t\t\t\t0, 0.006, 0.025 2.8%, 0.101 6.1%, 0.539 18.9%, 0.721 25.3%, 0.849 31.5%,\n\t\t\t\t\t\t0.937 38.1%, 0.968 41.8%, 0.991 45.7%, 1.006 50%, 1.015 54.8%,\n\t\t\t\t\t\t1.017 63.3%, 1.001\n\t\t\t\t\t),\n\t\t\t\t\topacity 250ms ease;\n\t\t\t}\n\t\t}\n\n\t\t.content-wrapper[data-open='true'] {\n\t\t\tgrid-template-rows: 1fr;\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.content-inner {\n\t\t\tmin-height: 0;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\t/*\n\t\t * Progressive Enhancement: ::details-content (Chrome 131+)\n\t\t *\n\t\t * When both ::details-content AND interpolate-size are supported,\n\t\t * the browser handles height animation natively — including animated\n\t\t * close via transition-behavior: allow-discrete on content-visibility.\n\t\t * The grid wrapper becomes transparent (display: contents).\n\t\t */\n\t\t@supports selector(::details-content) and (interpolate-size: allow-keywords) {\n\t\t\t:host {\n\t\t\t\tinterpolate-size: allow-keywords;\n\t\t\t}\n\n\t\t\t.content-wrapper {\n\t\t\t\tdisplay: contents;\n\t\t\t}\n\n\t\t\tdetails::details-content {\n\t\t\t\tblock-size: 0;\n\t\t\t\toverflow-y: clip;\n\t\t\t\topacity: 0;\n\t\t\t\ttransition:\n\t\t\t\t\tblock-size 400ms cubic-bezier(0.34, 1.2, 0.64, 1),\n\t\t\t\t\topacity 250ms ease,\n\t\t\t\t\tcontent-visibility 400ms;\n\t\t\t\ttransition-behavior: allow-discrete;\n\t\t\t}\n\n\t\t\tdetails[open]::details-content {\n\t\t\t\tblock-size: auto;\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t.content-wrapper {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t\tdetails::details-content {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t}\n\t`];\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open' as const,\n\t\tdelegatesFocus: true,\n\t}\n\n\t@property() summary = ''\n\n\t@property({ type: Boolean, reflect: true })\n\tget open() {\n\t\treturn this.#open$.value\n\t}\n\tset open(value: boolean) {\n\t\tif (this.#open$.value !== value) {\n\t\t\tthis.#open$.next(value)\n\t\t}\n\t}\n\n\t@property({ attribute: 'indicator-placement', reflect: true })\n\tindicatorPlacement: 'start' | 'end' = 'end'\n\n\t@property({ type: Boolean, attribute: 'hide-indicator' })\n\thideIndicator = false\n\n\t@property({ type: Number, attribute: 'indicator-rotate' })\n\tindicatorRotate: number = 90\n\n\t@property({ type: Boolean, reflect: true })\n\tlocked = false\n\n\t@property({ type: Boolean, reflect: true })\n\toverlay = false\n\n\t@property({ attribute: 'summary-padding' })\n\tsummaryPadding = 'p-3'\n\n\t@property({ attribute: 'content-padding' })\n\tcontentPadding = 'p-3'\n\n\t#open$ = new BehaviorSubject<boolean>(false)\n\t#indicatorRef: Ref<HTMLElement> = createRef()\n\t#contentRef: Ref<HTMLDivElement> = createRef()\n\t#currentAnimation?: Animation\n\t#indicatorIsOpen = false\n\t#closing = false\n\t#closeSub?: Subscription\n\n\t/** True when browser handles close animation natively via ::details-content */\n\t#nativeAnim =\n\t\ttypeof CSS !== 'undefined' &&\n\t\t!!CSS.supports?.('selector(::details-content)') &&\n\t\t!!CSS.supports?.('interpolate-size', 'allow-keywords')\n\n\t/**\n\t * Lazy rendering: tracks if content has ever been opened.\n\t * Once true, content stays rendered (even when closed) for smooth animations.\n\t */\n\t@state() private hasOpened = false\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.type = 'solid'\n\t\tthis.rounded = 'all'\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tthis.#open$\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(isOpen => {\n\t\t\t\t\tif (isOpen && !this.hasOpened) {\n\t\t\t\t\t\tthis.hasOpened = true\n\t\t\t\t\t}\n\t\t\t\t\tthis.#animateIndicator(isOpen)\n\t\t\t\t\tthis.#updateIndicatorSlot()\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => this.requestUpdate())\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.#closeSub?.unsubscribe()\n\t}\n\n\trender() {\n\t\tconst isOpen = this.#open$.value\n\n\t\tconst detailsClasses = this.classMap({\n\t\t\t'w-full rounded-xl transition-shadow duration-200 ease-out': true,\n\t\t\t'overflow-visible': !this.overlay,\n\t\t\t'overflow-visible relative': this.overlay,\n\t\t})\n\n\t\tconst summaryClasses = this.classMap({\n\t\t\t[this.summaryPadding]: true,\n\t\t\t'select-none relative flex items-center gap-2 rounded-xl': true,\n\t\t\t'transition-colors duration-150': true,\n\t\t\t'hover:bg-surface-on/5 active:bg-surface-on/8': !this.locked,\n\t\t\t'focus-visible:ring-2 focus-visible:ring-primary-default/50 focus-visible:ring-offset-1': !this.locked,\n\t\t\t'cursor-pointer group': !this.locked,\n\t\t\t'cursor-default': this.locked,\n\t\t\t'flex-row': this.indicatorPlacement === 'start',\n\t\t\t'flex-row-reverse': this.indicatorPlacement === 'end',\n\t\t})\n\n\t\tconst contentClasses = this.classMap({\n\t\t\t[this.contentPadding]: true,\n\t\t\t'text-sm': true,\n\t\t\t'absolute inset-x-0 bg-surface-lowest/55 backdrop-blur-[16px] shadow-2xl rounded-b-xl z-20':\n\t\t\t\tthis.overlay,\n\t\t})\n\n\t\treturn html`\n\t\t\t<details ?open=${isOpen} @toggle=${this.#handleToggle} class=${detailsClasses}>\n\t\t\t\t<summary ${this.locked ? '' : magnetic({ strength: 2, radius: 50 })} ${this.locked ? '' : cursorGlow({ radius: 250, intensity: 0.08 })} class=${summaryClasses} tabindex=${this.locked ? -1 : 0} @click=${this.#handleSummaryClick}>\n\t\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t${ref(this.#indicatorRef)}\n\t\t\t\t\t\t\t\t\tclass=\"flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<slot name=\"indicator\" @slotchange=${this.#handleIndicatorSlotChange}>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-5 h-5\"\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M9 6L15 12L9 18\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: ''}\n\n\t\t\t\t\t<span class=\"flex-1 min-w-0\">\n\t\t\t\t\t\t<slot name=\"summary\">${this.summary}</slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t</summary>\n\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.#contentRef)}\n\t\t\t\t\tclass=\"content-wrapper\"\n\t\t\t\t\tdata-open=${isOpen && !this.#closing}\n\t\t\t\t\taria-hidden=${isOpen ? 'false' : 'true'}\n\t\t\t\t>\n\t\t\t\t\t<div class=\"content-inner\">\n\t\t\t\t\t\t${this.hasOpened\n\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t<div class=${contentClasses}>\n\t\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t\t\t<slot name=\"details\"></slot>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</details>\n\t\t`\n\t}\n\n\t#handleSummaryClick(e: MouseEvent) {\n\t\tif ((e.target as HTMLElement).closest('[slot=\"actions\"]')) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.locked) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\t\tif (this.#closing) {\n\t\t\te.preventDefault()\n\t\t\treturn\n\t\t}\n\n\t\t// Native animated path (Chromium 131+): browser handles everything via CSS\n\t\tif (this.#nativeAnim) return\n\n\t\t// Fallback: manually animate close via CSS transition, then close native details\n\t\tif (this.#open$.value) {\n\t\t\te.preventDefault()\n\t\t\tthis.#startClose()\n\t\t}\n\t\t// If closed, let native open happen (handled by #handleToggle)\n\t}\n\n\t#handleToggle(e: Event) {\n\t\te.stopPropagation()\n\n\t\tconst ownDetails = this.shadowRoot?.querySelector('details')\n\t\tif (e.target !== ownDetails) return\n\n\t\tconst newState = ownDetails.open\n\n\t\tif (this.#nativeAnim) {\n\t\t\t// Native path: handle both open and close\n\t\t\tif (this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t} else {\n\t\t\t// Fallback path: only handle OPEN (close is driven by #startClose)\n\t\t\tif (newState && this.#open$.value !== newState) {\n\t\t\t\tthis.open = newState\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: newState })\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fallback close: trigger CSS grid+opacity transition, then close native <details>.\n\t * The CSS transition (400ms) handles the visual collapse — no WAAPI needed.\n\t */\n\t#startClose() {\n\t\tthis.#closing = true\n\t\tthis.#closeSub?.unsubscribe()\n\n\t\t// Immediately collapse the grid wrapper via DOM attribute\n\t\tthis.#contentRef.value?.setAttribute('data-open', 'false')\n\n\t\t// Animate indicator immediately\n\t\tthis.#animateIndicator(false)\n\n\t\t// After CSS transition completes, close native details and update state\n\t\tconst wrapper = this.#contentRef.value\n\t\tif (!wrapper) return\n\n\t\tthis.#closeSub = fromEvent<TransitionEvent>(wrapper, 'transitionend').pipe(\n\t\t\tfilter(e => e.propertyName === 'grid-template-rows'),\n\t\t\ttake(1),\n\t\t\ttap(() => {\n\t\t\t\tthis.#closing = false\n\t\t\t\tthis.open = false\n\t\t\t\tthis.dispatchScopedEvent('toggle', { open: false })\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\t#handleIndicatorSlotChange(e: Event) {\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tslot.assignedElements().forEach(el => {\n\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t})\n\t}\n\n\t#updateIndicatorSlot() {\n\t\tconst slot = this.shadowRoot?.querySelector('slot[name=\"indicator\"]') as HTMLSlotElement | null\n\t\tif (slot) {\n\t\t\tslot.assignedElements().forEach(el => {\n\t\t\t\tel.setAttribute('data-open', String(this.#open$.value))\n\t\t\t})\n\t\t}\n\t}\n\n\t/** Idempotent indicator rotation — skips if already at target state */\n\t#animateIndicator(isOpen: boolean) {\n\t\tif (this.#indicatorIsOpen === isOpen) return\n\t\tthis.#indicatorIsOpen = isOpen\n\n\t\tconst indicator = this.#indicatorRef.value\n\t\tif (!indicator || reducedMotion$.value) return\n\n\t\tthis.#currentAnimation?.cancel()\n\n\t\tthis.#currentAnimation = indicator.animate(\n\t\t\t[\n\t\t\t\t{ transform: `rotate(${isOpen ? '0deg' : `${this.indicatorRotate}deg`})` },\n\t\t\t\t{ transform: `rotate(${isOpen ? `${this.indicatorRotate}deg` : '0deg'})` },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\teasing: SPRING_SNAPPY.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-details': SchmancyDetails\n\t}\n}\n"],"mappings":"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"}
package/dist/details.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./details-DQNj2oaU.cjs`);exports.SchmancyDetails=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./details-Bx2jSJxG.cjs`);exports.SchmancyDetails=e.t;
package/dist/details.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as e } from "./details-CY49XVfp.js";
1
+ import { t as e } from "./details-BnleHmYe.js";
2
2
  export { e as SchmancyDetails };
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./audio-EaD0Ggfh.cjs`),t=require(`./animation-CCOIW4wJ.cjs`),n=require(`./reduced-motion-Ds-HjMzn.cjs`);require(`./cursor-glow-Bulq-38P.cjs`);const r=require(`./theme.service-B15FdjOS.cjs`),i=require(`./layout-DZ4dpLh9.cjs`),a=require(`./overlay-stack-Bdr9lOqi.cjs`);require(`./gravity-6pL6CfIr.cjs`);const o=require(`./discovery.service-CIa3Eeuk.cjs`);require(`./magnetic-DKtc4umC.cjs`);let s=require(`rxjs`),c=require(`rxjs/operators`),l=require(`lit`),u=require(`lit/async-directive.js`),d=require(`lit/directive.js`);var f={smooth:t.d,snappy:t.f,bouncy:t.l,gentle:t.u},p=class extends u.AsyncDirective{constructor(...e){super(...e),this.element=null,this.originalContent=``,this.animations=[],this.disconnecting$=new s.Subject,this.initialized=!1}render(e){return l.noChange}update(e,[t]){return this.element=e.element,this.initialized||(this.initialized=!0,this.disconnecting$.closed&&(this.disconnecting$=new s.Subject),t.text===void 0?this.originalContent=this.element.textContent||``:(this.originalContent=t.text,this.element.textContent=t.text),this.element.style.willChange=`transform, opacity`,t.animation===`typewriter`?this.element.textContent=``:this.element.style.opacity=`0`,this.initialize(t)),l.noChange}disconnected(){this.cleanup()}reconnected(){this.element&&(this.element.style.willChange=`transform, opacity`)}initialize(e){let{animation:t,delay:n=0,duration:r,stagger:i,preset:a=`snappy`,restart:o=!1}=e,l=f[a],u=r??l.duration,d=i??(t===`cyber-glitch`?30:50),p=this.createVisibilityObservable$();(o?p.pipe((0,c.switchMap)(e=>e?(0,s.timer)(n).pipe((0,c.switchMap)(()=>this.runAnimation$(t,u,d,l))):(0,s.defer)(()=>(this.resetToInitial(t),s.EMPTY)))):p.pipe((0,c.filter)(e=>e),(0,c.take)(1),(0,c.delay)(n),(0,c.switchMap)(()=>this.runAnimation$(t,u,d,l)))).pipe((0,c.takeUntil)(this.disconnecting$)).subscribe()}cleanup(){this.disconnecting$.next(),this.disconnecting$.complete(),this.cancelAnimations(),this.element&&(this.element.textContent=this.originalContent,this.element.style.opacity=``,this.element.style.willChange=`auto`,this.element.style.transform=``,this.element.style.filter=``),this.element=null,this.initialized=!1}cancelAnimations(){this.animations.forEach(e=>e.cancel()),this.animations=[]}resetToInitial(e){this.cancelAnimations(),this.element&&(e===`typewriter`?this.element.textContent=``:(this.element.textContent=this.originalContent,this.element.style.opacity=`0`),this.element.style.transform=``,this.element.style.filter=``,this.element.style.willChange=`transform, opacity`)}getAccumulatedOpacity(){if(!this.element)return 0;let e=1,t=this.element.parentElement,n=0;for(;t&&t!==document.body&&n<10;){let r=window.getComputedStyle(t);if(r.visibility===`hidden`||r.display===`none`)return 0;let i=parseFloat(r.opacity)||1;if(i<1&&(e*=i,e<=.5))return e;if(t.assignedSlot){let n=this.getSlotAncestorOpacity(t.assignedSlot);if(n===0)return 0;e*=n}t=t.parentElement,n++}return e}getSlotAncestorOpacity(e){let t=1,n=e.parentElement;for(;n;){let e=window.getComputedStyle(n);if(e.visibility===`hidden`||e.display===`none`)return 0;t*=parseFloat(e.opacity)||1,n=n.parentElement}return t}createVisibilityObservable$(){let e=(0,s.fromEvent)(document,`visibilitychange`).pipe((0,c.startWith)(null),(0,c.map)(()=>document.visibilityState===`visible`),(0,c.distinctUntilChanged)());return(0,s.combineLatest)([(0,s.interval)(200).pipe((0,c.startWith)(0),(0,c.map)(()=>{if(!this.element)return!1;let e=this.element.getBoundingClientRect();return e.width>0&&e.height>0&&e.top<window.innerHeight&&e.bottom>0&&this.getAccumulatedOpacity()>.5}),(0,c.distinctUntilChanged)()),e]).pipe((0,c.map)(([e,t])=>e&&t),(0,c.distinctUntilChanged)())}runAnimation$(e,t,n,r){if(!this.element)return s.EMPTY;switch(e){case`fade-up`:return this.animateFadeUp$(t,r);case`blur-reveal`:return this.animateBlurReveal$(t,n,r);case`word-reveal`:return this.animateWordReveal$(t,n,r);case`cyber-glitch`:return this.animateCyberGlitch$(t,n,r);case`typewriter`:return this.animateTypewriter$(t);default:return s.EMPTY}}animateFadeUp$(e,t){if(!this.element)return s.EMPTY;let n=this.element.animate([{opacity:0,transform:`translateY(30px)`},{opacity:1,transform:`translateY(0)`}],{duration:e,easing:t.easingFallback,fill:`forwards`});return this.animations.push(n),(0,s.from)(n.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.opacity=``,this.element.style.transform=``,this.element.style.willChange=`auto`)}),(0,c.catchError)(()=>s.EMPTY))}wrapTextNodes(e){let t=[],n=document.createDocumentFragment(),r=Array.from(e.childNodes);for(let e of r)if(e.nodeType===Node.TEXT_NODE){let r=(e.textContent||``).split(/(\s+)/);for(let e of r)if(/^\s+$/.test(e))n.appendChild(document.createTextNode(e));else if(e.length>0){let r=document.createElement(`span`);r.textContent=e,n.appendChild(r),t.push(r)}}else e instanceof HTMLElement&&(n.appendChild(e),t.push(e));return e.textContent=``,e.appendChild(n),t}animateBlurReveal$(e,t,n){if(!this.element)return s.EMPTY;let r=this.wrapTextNodes(this.element);this.element.style.opacity=`1`,r.forEach((r,i)=>{r.style.opacity=`0`,r.style.display=`inline-block`;let a=r.animate([{opacity:0,filter:`blur(8px)`,transform:`scale(0.9)`},{opacity:1,filter:`blur(0)`,transform:`scale(1)`}],{duration:e,easing:n.easingFallback,delay:i*t,fill:`forwards`});this.animations.push(a)});let i=this.animations[this.animations.length-1];return i?(0,s.from)(i.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.willChange=`auto`,r.forEach(e=>{e.style.willChange=`auto`}))}),(0,c.catchError)(()=>s.EMPTY)):s.EMPTY}animateWordReveal$(e,t,n){if(!this.element)return s.EMPTY;let r=this.wrapTextNodes(this.element);this.element.style.opacity=`1`,r.forEach((r,i)=>{r.style.opacity=`0`,r.style.display=`inline-block`;let a=r.animate([{opacity:0,transform:`translateY(20px)`},{opacity:1,transform:`translateY(0)`}],{duration:e,easing:n.easingFallback,delay:i*t,fill:`forwards`});this.animations.push(a)});let i=this.animations[this.animations.length-1];return i?(0,s.from)(i.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.willChange=`auto`,r.forEach(e=>{e.style.willChange=`auto`}))}),(0,c.catchError)(()=>s.EMPTY)):s.EMPTY}animateCyberGlitch$(e,t,n){if(!this.element)return s.EMPTY;let r=this.originalContent.split(``),i=document.createDocumentFragment(),a=[];for(let e of r){let t=document.createElement(`span`);t.style.display=`inline-block`,t.style.opacity=`0`,t.textContent=e===` `?`\xA0`:e,i.appendChild(t),a.push(t)}this.element.textContent=``,this.element.appendChild(i),this.element.style.opacity=`1`,a.forEach((i,a)=>{if(r[a]===` `)return void(i.style.opacity=`1`);let o=i.animate([{opacity:0,transform:`translateY(-8px) scale(1.4)`,filter:`blur(4px)`},{opacity:1,transform:`translateY(0) scale(1)`,filter:`blur(0)`}],{duration:e,easing:n.easingFallback,delay:a*t,fill:`forwards`});this.animations.push(o)});let o=this.animations[this.animations.length-1];return o?(0,s.from)(o.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.willChange=`auto`,a.forEach(e=>{e.style.willChange=`auto`}))}),(0,c.catchError)(()=>s.EMPTY)):s.EMPTY}animateTypewriter$(e){if(!this.element)return s.EMPTY;let t=this.originalContent,n=t.length;if(n===0)return s.EMPTY;let r=e/n,i=0;return(0,s.interval)(r).pipe((0,c.tap)(()=>{i++,this.element&&(this.element.textContent=t.slice(0,i))}),(0,c.takeWhile)(()=>i<n),(0,c.finalize)(()=>{this.element&&(this.element.textContent=this.originalContent,this.element.style.willChange=`auto`)}))}},m=(0,u.directive)(p),h=class extends u.AsyncDirective{constructor(...e){super(...e),this.state=null}render(e){return l.noChange}update(e,[t=``]){let n=e.element;if(!t)return this.cleanup(),l.noChange;if(this.state)return l.noChange;this.state={message:t,element:n,badge:null,animation:null},getComputedStyle(n).position===`static`&&(n.style.position=`relative`);let r=document.createElement(`div`);return r.style.cssText=`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./audio-xXFfMPCS.cjs`),t=require(`./animation-CCOIW4wJ.cjs`),n=require(`./reduced-motion-Ds-HjMzn.cjs`);require(`./cursor-glow-Bulq-38P.cjs`);const r=require(`./theme.service-DA6KY52G.cjs`),i=require(`./layout-BhfC26Ks.cjs`),a=require(`./overlay-stack-Bdr9lOqi.cjs`);require(`./gravity-6pL6CfIr.cjs`);const o=require(`./discovery.service-CIa3Eeuk.cjs`);require(`./magnetic-DKtc4umC.cjs`);let s=require(`rxjs`),c=require(`rxjs/operators`),l=require(`lit`),u=require(`lit/async-directive.js`),d=require(`lit/directive.js`);var f={smooth:t.d,snappy:t.f,bouncy:t.l,gentle:t.u},p=class extends u.AsyncDirective{constructor(...e){super(...e),this.element=null,this.originalContent=``,this.animations=[],this.disconnecting$=new s.Subject,this.initialized=!1}render(e){return l.noChange}update(e,[t]){return this.element=e.element,this.initialized||(this.initialized=!0,this.disconnecting$.closed&&(this.disconnecting$=new s.Subject),t.text===void 0?this.originalContent=this.element.textContent||``:(this.originalContent=t.text,this.element.textContent=t.text),this.element.style.willChange=`transform, opacity`,t.animation===`typewriter`?this.element.textContent=``:this.element.style.opacity=`0`,this.initialize(t)),l.noChange}disconnected(){this.cleanup()}reconnected(){this.element&&(this.element.style.willChange=`transform, opacity`)}initialize(e){let{animation:t,delay:n=0,duration:r,stagger:i,preset:a=`snappy`,restart:o=!1}=e,l=f[a],u=r??l.duration,d=i??(t===`cyber-glitch`?30:50),p=this.createVisibilityObservable$();(o?p.pipe((0,c.switchMap)(e=>e?(0,s.timer)(n).pipe((0,c.switchMap)(()=>this.runAnimation$(t,u,d,l))):(0,s.defer)(()=>(this.resetToInitial(t),s.EMPTY)))):p.pipe((0,c.filter)(e=>e),(0,c.take)(1),(0,c.delay)(n),(0,c.switchMap)(()=>this.runAnimation$(t,u,d,l)))).pipe((0,c.takeUntil)(this.disconnecting$)).subscribe()}cleanup(){this.disconnecting$.next(),this.disconnecting$.complete(),this.cancelAnimations(),this.element&&(this.element.textContent=this.originalContent,this.element.style.opacity=``,this.element.style.willChange=`auto`,this.element.style.transform=``,this.element.style.filter=``),this.element=null,this.initialized=!1}cancelAnimations(){this.animations.forEach(e=>e.cancel()),this.animations=[]}resetToInitial(e){this.cancelAnimations(),this.element&&(e===`typewriter`?this.element.textContent=``:(this.element.textContent=this.originalContent,this.element.style.opacity=`0`),this.element.style.transform=``,this.element.style.filter=``,this.element.style.willChange=`transform, opacity`)}getAccumulatedOpacity(){if(!this.element)return 0;let e=1,t=this.element.parentElement,n=0;for(;t&&t!==document.body&&n<10;){let r=window.getComputedStyle(t);if(r.visibility===`hidden`||r.display===`none`)return 0;let i=parseFloat(r.opacity)||1;if(i<1&&(e*=i,e<=.5))return e;if(t.assignedSlot){let n=this.getSlotAncestorOpacity(t.assignedSlot);if(n===0)return 0;e*=n}t=t.parentElement,n++}return e}getSlotAncestorOpacity(e){let t=1,n=e.parentElement;for(;n;){let e=window.getComputedStyle(n);if(e.visibility===`hidden`||e.display===`none`)return 0;t*=parseFloat(e.opacity)||1,n=n.parentElement}return t}createVisibilityObservable$(){let e=(0,s.fromEvent)(document,`visibilitychange`).pipe((0,c.startWith)(null),(0,c.map)(()=>document.visibilityState===`visible`),(0,c.distinctUntilChanged)());return(0,s.combineLatest)([(0,s.interval)(200).pipe((0,c.startWith)(0),(0,c.map)(()=>{if(!this.element)return!1;let e=this.element.getBoundingClientRect();return e.width>0&&e.height>0&&e.top<window.innerHeight&&e.bottom>0&&this.getAccumulatedOpacity()>.5}),(0,c.distinctUntilChanged)()),e]).pipe((0,c.map)(([e,t])=>e&&t),(0,c.distinctUntilChanged)())}runAnimation$(e,t,n,r){if(!this.element)return s.EMPTY;switch(e){case`fade-up`:return this.animateFadeUp$(t,r);case`blur-reveal`:return this.animateBlurReveal$(t,n,r);case`word-reveal`:return this.animateWordReveal$(t,n,r);case`cyber-glitch`:return this.animateCyberGlitch$(t,n,r);case`typewriter`:return this.animateTypewriter$(t);default:return s.EMPTY}}animateFadeUp$(e,t){if(!this.element)return s.EMPTY;let n=this.element.animate([{opacity:0,transform:`translateY(30px)`},{opacity:1,transform:`translateY(0)`}],{duration:e,easing:t.easingFallback,fill:`forwards`});return this.animations.push(n),(0,s.from)(n.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.opacity=``,this.element.style.transform=``,this.element.style.willChange=`auto`)}),(0,c.catchError)(()=>s.EMPTY))}wrapTextNodes(e){let t=[],n=document.createDocumentFragment(),r=Array.from(e.childNodes);for(let e of r)if(e.nodeType===Node.TEXT_NODE){let r=(e.textContent||``).split(/(\s+)/);for(let e of r)if(/^\s+$/.test(e))n.appendChild(document.createTextNode(e));else if(e.length>0){let r=document.createElement(`span`);r.textContent=e,n.appendChild(r),t.push(r)}}else e instanceof HTMLElement&&(n.appendChild(e),t.push(e));return e.textContent=``,e.appendChild(n),t}animateBlurReveal$(e,t,n){if(!this.element)return s.EMPTY;let r=this.wrapTextNodes(this.element);this.element.style.opacity=`1`,r.forEach((r,i)=>{r.style.opacity=`0`,r.style.display=`inline-block`;let a=r.animate([{opacity:0,filter:`blur(8px)`,transform:`scale(0.9)`},{opacity:1,filter:`blur(0)`,transform:`scale(1)`}],{duration:e,easing:n.easingFallback,delay:i*t,fill:`forwards`});this.animations.push(a)});let i=this.animations[this.animations.length-1];return i?(0,s.from)(i.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.willChange=`auto`,r.forEach(e=>{e.style.willChange=`auto`}))}),(0,c.catchError)(()=>s.EMPTY)):s.EMPTY}animateWordReveal$(e,t,n){if(!this.element)return s.EMPTY;let r=this.wrapTextNodes(this.element);this.element.style.opacity=`1`,r.forEach((r,i)=>{r.style.opacity=`0`,r.style.display=`inline-block`;let a=r.animate([{opacity:0,transform:`translateY(20px)`},{opacity:1,transform:`translateY(0)`}],{duration:e,easing:n.easingFallback,delay:i*t,fill:`forwards`});this.animations.push(a)});let i=this.animations[this.animations.length-1];return i?(0,s.from)(i.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.willChange=`auto`,r.forEach(e=>{e.style.willChange=`auto`}))}),(0,c.catchError)(()=>s.EMPTY)):s.EMPTY}animateCyberGlitch$(e,t,n){if(!this.element)return s.EMPTY;let r=this.originalContent.split(``),i=document.createDocumentFragment(),a=[];for(let e of r){let t=document.createElement(`span`);t.style.display=`inline-block`,t.style.opacity=`0`,t.textContent=e===` `?`\xA0`:e,i.appendChild(t),a.push(t)}this.element.textContent=``,this.element.appendChild(i),this.element.style.opacity=`1`,a.forEach((i,a)=>{if(r[a]===` `)return void(i.style.opacity=`1`);let o=i.animate([{opacity:0,transform:`translateY(-8px) scale(1.4)`,filter:`blur(4px)`},{opacity:1,transform:`translateY(0) scale(1)`,filter:`blur(0)`}],{duration:e,easing:n.easingFallback,delay:a*t,fill:`forwards`});this.animations.push(o)});let o=this.animations[this.animations.length-1];return o?(0,s.from)(o.finished).pipe((0,c.tap)(()=>{this.element&&(this.element.style.willChange=`auto`,a.forEach(e=>{e.style.willChange=`auto`}))}),(0,c.catchError)(()=>s.EMPTY)):s.EMPTY}animateTypewriter$(e){if(!this.element)return s.EMPTY;let t=this.originalContent,n=t.length;if(n===0)return s.EMPTY;let r=e/n,i=0;return(0,s.interval)(r).pipe((0,c.tap)(()=>{i++,this.element&&(this.element.textContent=t.slice(0,i))}),(0,c.takeWhile)(()=>i<n),(0,c.finalize)(()=>{this.element&&(this.element.textContent=this.originalContent,this.element.style.willChange=`auto`)}))}},m=(0,u.directive)(p),h=class extends u.AsyncDirective{constructor(...e){super(...e),this.state=null}render(e){return l.noChange}update(e,[t=``]){let n=e.element;if(!t)return this.cleanup(),l.noChange;if(this.state)return l.noChange;this.state={message:t,element:n,badge:null,animation:null},getComputedStyle(n).position===`static`&&(n.style.position=`relative`);let r=document.createElement(`div`);return r.style.cssText=`
2
2
  display: block;
3
3
  position: absolute;
4
4
  bottom: -8px;
@@ -307,7 +307,7 @@ require(`./chunk-CncqDLb2.cjs`);const e=require(`./audio-EaD0Ggfh.cjs`),t=requir
307
307
  transition: opacity 0s !important;
308
308
  }
309
309
  }
310
- `,document.head.appendChild(e)})(),this.state?.autoHideSub&&(this.state.autoHideSub.unsubscribe(),this.state.autoHideSub=null);let r=n.t.value;if(this.state?.overlay&&this.state.isDimmed)return this.state.isDimmed=!1,this.state.options=t,this.state.fadeFinishedSub?.unsubscribe(),this.state.fadeFinishedSub=null,this.awakenOverlay(t,r),void this.scheduleAutoHide(t);this.state?.overlay||this.createOverlay(e,t,r),this.scheduleAutoHide(t)}awakenOverlay(e,n){if(!this.state?.overlay)return;let r=this.state.overlay;r.style.setProperty(`--nebula-intensity`,String(e.intensity)),r.animate([{opacity:e.idleOpacity,transform:`scale(0.98) translateZ(0)`},{opacity:.7*e.intensity,transform:`scale(1.01) translateZ(0)`},{opacity:e.intensity,transform:`scale(1) translateZ(0)`}],{duration:n?0:.6*e.fadeInDuration,easing:n?`linear`:t._(t.d),fill:`forwards`}),r.classList.remove(`paused`,`dimmed`),r.classList.add(`running`),r.style.animation=``}createOverlay(e,n,r){let i=window.getComputedStyle(e).position,a=e.style.position,o=e.style.overflow,s=e.style.contain;i===`static`&&(e.style.position=`relative`),e.style.overflow=`hidden`,e.style.contain=`paint`;let c=n.temperature,l=Math.max(0,c),u=Math.max(0,-c),d=n.intensity,f=Math.round(3+5*n.chromaticAberration),p=Math.round(20+60*u),m=Math.round(80+80*u),h=Math.round(20+80*l),g=Math.round(255-55*l),_=Math.round(100+100*u),v=Math.round(100*l),y=Math.round(255-55*l),b=Math.round(100+55*u),x=Math.round(255-55*u),S=document.createElement(`div`);if(S.className=`nebula-overlay running`,Object.assign(S.style,{position:`absolute`,inset:`-20%`,zIndex:n.background?`-1`:`9999`,opacity:`0`,"--nebula-intensity":String(d),"--nebula-blur-base":10*n.blur+`px`,"--nebula-idle-opacity":String(n.idleOpacity),"--nebula-aberration":`${f}px`,"--nebula-blur-core":12*n.blur+`px`}),r){let e=document.createElement(`div`);Object.assign(e.style,{position:`absolute`,inset:`0`,background:`\n\t\t\t\t\tradial-gradient(ellipse 45% 40% at 50% 50%,\n\t\t\t\t\t\trgba(255,${b},${x},${.12*d}) 0%,\n\t\t\t\t\t\trgba(${h},100,${g},${.06*d}) 40%,\n\t\t\t\t\t\ttransparent 70%),\n\t\t\t\t\tradial-gradient(circle 8% at 50% 50%,\n\t\t\t\t\t\trgba(255,255,255,${.15*d}) 0%,\n\t\t\t\t\t\ttransparent 100%)`,filter:`blur(${10*n.blur}px)`,opacity:String(d)}),S.appendChild(e)}else{let e=document.createElement(`div`);e.className=`nebula-layer`,Object.assign(e.style,{position:`absolute`,inset:`-5%`,background:`\n\t\t\t\t\tlinear-gradient(155deg,\n\t\t\t\t\t\ttransparent 0%, transparent 38%,\n\t\t\t\t\t\trgba(8,2,18,${.35*d}) 44%,\n\t\t\t\t\t\trgba(0,0,0,${.4*d}) 49%,\n\t\t\t\t\t\trgba(8,2,18,${.35*d}) 54%,\n\t\t\t\t\t\ttransparent 60%, transparent 100%),\n\t\t\t\t\tlinear-gradient(225deg,\n\t\t\t\t\t\ttransparent 0%, transparent 42%,\n\t\t\t\t\t\trgba(5,0,12,${.28*d}) 47%,\n\t\t\t\t\t\trgba(0,0,0,${.32*d}) 50%,\n\t\t\t\t\t\trgba(5,0,12,${.28*d}) 53%,\n\t\t\t\t\t\ttransparent 58%, transparent 100%),\n\t\t\t\t\tradial-gradient(ellipse 110% 110% at 50% 50%,\n\t\t\t\t\t\ttransparent 35%,\n\t\t\t\t\t\trgba(3,0,8,${.2*d}) 60%,\n\t\t\t\t\t\trgba(0,0,0,${.35*d}) 85%),\n\t\t\t\t\tradial-gradient(ellipse 50% 45% at 30% 35%,\n\t\t\t\t\t\trgba(0,0,0,${.3*d}) 0%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 40% 55% at 70% 65%,\n\t\t\t\t\t\trgba(0,0,0,${.25*d}) 0%,\n\t\t\t\t\t\ttransparent 60%)`,filter:`blur(${4*n.blur}px)`,mixBlendMode:`multiply`,transform:`translateZ(0)`}),S.appendChild(e);let t=document.createElement(`div`);t.className=`nebula-layer`,Object.assign(t.style,{position:`absolute`,inset:`-15%`,background:`\n\t\t\t\t\tradial-gradient(ellipse 55% 50% at 48% 50%,\n\t\t\t\t\t\trgba(255,${p},${m},${.14*d}) 0%,\n\t\t\t\t\t\trgba(255,${p},${m},${.06*d}) 35%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 30% 35% at 30% 35%,\n\t\t\t\t\t\trgba(255,${_},200,${.1*d}) 0%,\n\t\t\t\t\t\trgba(255,${_},200,${.03*d}) 50%,\n\t\t\t\t\t\ttransparent 70%),\n\t\t\t\t\tradial-gradient(ellipse 25% 30% at 65% 70%,\n\t\t\t\t\t\trgba(255,${Math.min(255,p+30)},${m},${.08*d}) 0%,\n\t\t\t\t\t\ttransparent 60%)`,filter:`blur(${18*n.blur}px) saturate(1.4)`,mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-chromatic-red ${35e3/n.speed}ms ${We} infinite`}),S.appendChild(t);let r=document.createElement(`div`);r.className=`nebula-layer`,Object.assign(r.style,{position:`absolute`,inset:`-15%`,background:`\n\t\t\t\t\tradial-gradient(ellipse 50% 55% at 52% 50%,\n\t\t\t\t\t\trgba(${h},100,${g},${.12*d}) 0%,\n\t\t\t\t\t\trgba(${h},100,${g},${.05*d}) 35%,\n\t\t\t\t\t\ttransparent 60%),\n\t\t\t\t\tradial-gradient(ellipse 35% 30% at 68% 40%,\n\t\t\t\t\t\trgba(${v},${y},200,${.09*d}) 0%,\n\t\t\t\t\t\trgba(${v},${y},200,${.03*d}) 45%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 28% 25% at 35% 65%,\n\t\t\t\t\t\trgba(${h},100,${Math.min(255,g+20)},${.07*d}) 0%,\n\t\t\t\t\t\ttransparent 55%)`,filter:`blur(${18*n.blur}px) saturate(1.4)`,mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-chromatic-blue ${35e3/n.speed}ms ${We} infinite`}),S.appendChild(r);let i=document.createElement(`div`);i.className=`nebula-layer`,Object.assign(i.style,{position:`absolute`,inset:`0`,background:`\n\t\t\t\t\tradial-gradient(ellipse 20% 22% at 50% 50%,\n\t\t\t\t\t\trgba(255,${b},${x},${.18*d}) 0%,\n\t\t\t\t\t\trgba(255,${_},200,${.08*d}) 40%,\n\t\t\t\t\t\trgba(${h},100,${g},${.03*d}) 65%,\n\t\t\t\t\t\ttransparent 80%),\n\t\t\t\t\tradial-gradient(circle 6% at 50% 50%,\n\t\t\t\t\t\trgba(255,255,255,${.25*d}) 0%,\n\t\t\t\t\t\trgba(255,240,245,${.1*d}) 50%,\n\t\t\t\t\t\ttransparent 100%)`,mixBlendMode:`screen`,transform:`translateZ(0)`,transformOrigin:`50% 50%`,filter:`blur(${12*n.blur}px) saturate(1.6)`,animation:`nebula-iridescent ${28e3/n.speed}ms linear infinite`}),S.appendChild(i);let a=document.createElement(`div`);if(a.className=`nebula-layer`,Object.assign(a.style,{position:`absolute`,inset:`-12%`,background:`\n\t\t\t\t\tradial-gradient(ellipse 60% 12% at 50% 48%,\n\t\t\t\t\t\trgba(255,${_},200,${.1*d}) 0%,\n\t\t\t\t\t\ttransparent 70%),\n\t\t\t\t\tradial-gradient(ellipse 12% 55% at 48% 50%,\n\t\t\t\t\t\trgba(${v},${y},200,${.08*d}) 0%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 45% 10% at 45% 35%,\n\t\t\t\t\t\trgba(255,${b},${x},${.07*d}) 0%,\n\t\t\t\t\t\ttransparent 60%),\n\t\t\t\t\tradial-gradient(ellipse 10% 40% at 60% 60%,\n\t\t\t\t\t\trgba(${h},100,${g},${.06*d}) 0%,\n\t\t\t\t\t\ttransparent 55%)`,filter:`blur(${14*n.blur}px)`,mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-tendrils-breathe ${22e3/n.speed}ms ${X} infinite`}),S.appendChild(a),n.particleCount>0){let e=document.createElement(`div`);e.className=`nebula-layer`;let t=[];for(let e=0;e<n.particleCount;e++){let e=5+90*Math.random(),n=5+90*Math.random(),r=.5+2*Math.random(),i=Math.round(360*Math.random()),a=(.3+.5*Math.random())*d;t.push(`radial-gradient(circle ${r}px at ${e}% ${n}%, hsla(${i},80%,70%,${a}) 0%, transparent 100%)`)}Object.assign(e.style,{position:`absolute`,inset:`0`,background:t.join(`,`),mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-particle-twinkle ${5e3/n.speed}ms ${X} infinite`}),S.appendChild(e)}}e.appendChild(S);let C=r?0:n.fadeInDuration,w=r?`linear`:t._(t.d);S.animate([{opacity:0,transform:`scale(0.85) translateZ(0)`},{opacity:.4*n.intensity,transform:`scale(0.97) translateZ(0)`},{opacity:n.intensity,transform:`scale(1) translateZ(0)`}],{duration:C,easing:w,fill:`forwards`}),this.state={element:e,overlay:S,originalPosition:a,originalOverflow:o,originalContain:s,isDimmed:!1,autoHideSub:null,fadeFinishedSub:null,options:n,reducedMotion:r,isVisible:document.visibilityState===`visible`},this.coordinator.register(this,e)}scheduleAutoHide(e){!this.state||e.autoHideDuration<=0||(this.state.autoHideSub=(0,s.timer)(e.autoHideDuration).pipe((0,c.take)(1),(0,c.tap)(()=>{this.state&&(this.state.autoHideSub=null,this.hide(this.state.options))})).subscribe())}hide(e){if(!this.state?.overlay||(this.state.autoHideSub&&(this.state.autoHideSub.unsubscribe(),this.state.autoHideSub=null),this.state.isDimmed))return;this.state.isDimmed=!0;let n=this.state.overlay,r=this.state.options,i=this.state.reducedMotion,a=i?0:e.fadeOutDuration,o=i?`linear`:t._(t.u);if(e.idleOpacity<=0)return void n.animate([{opacity:r.intensity,transform:`scale(1) translateZ(0)`},{opacity:.4*r.intensity,transform:`scale(0.95) translateZ(0)`},{opacity:0,transform:`scale(0.9) translateZ(0)`}],{duration:a,easing:o,fill:`forwards`});let l=n.animate([{opacity:r.intensity,transform:`scale(1) translateZ(0)`},{opacity:.5*r.intensity,transform:`scale(0.99) translateZ(0)`},{opacity:e.idleOpacity,transform:`scale(1) translateZ(0)`}],{duration:a,easing:o,fill:`forwards`});this.state.fadeFinishedSub?.unsubscribe(),this.state.fadeFinishedSub=(0,s.from)(l.finished).pipe((0,c.take)(1),(0,c.tap)(()=>{this.state?.overlay&&(this.state.overlay.classList.add(`dimmed`),e.idleBreathe&&!i&&(this.state.overlay.style.animation=`nebula-idle-breathe ${12e3/r.speed}ms ${X} infinite`))}),(0,c.catchError)(()=>s.EMPTY)).subscribe()}cleanup(){this.state&&=(this.coordinator.unregister(this,this.state.element),this.state.autoHideSub?.unsubscribe(),this.state.fadeFinishedSub?.unsubscribe(),this.state.overlay?.remove(),this.state.element.style.position=this.state.originalPosition,this.state.element.style.overflow=this.state.originalOverflow,this.state.element.style.contain=this.state.originalContain,null)}disconnected(){this.cleanup()}reconnected(){this.state&&this.coordinator.register(this,this.state.element)}},Je=(0,u.directive)(qe),Ye={smooth:t.d,snappy:t.f,bouncy:t.l,gentle:t.u},Xe=class extends u.AsyncDirective{constructor(e){if(super(e),this.initialized=!1,this.teardown$=new s.Subject,this.firstUpdate=!0,e.type!==d.PartType.ELEMENT)throw Error(`reveal() can only be used on elements`)}render(e,t){return l.noChange}update(e,[r=!1,i={}]){let a=e.element,{preset:o=`smooth`,maxHeight:u,duration:d,easing:f}=i,p=u!==void 0,m=Ye[o],h=d??m.duration,g=f??t._(m),_=n.t.value,v=this.firstUpdate;if(this.firstUpdate=!1,this.initialized||(this.initialized=!0,a.style.transition=_?`none`:[`max-height ${h}ms ${g}`,`opacity ${h}ms ${g}`,`transform ${h}ms ${g}`,`padding ${h}ms ${g}`,`margin ${h}ms ${g}`].join(`, `)),r){if(v)p?(a.style.maxHeight=u,a.style.overflow=`auto`):(a.style.maxHeight=``,a.style.overflow=``),a.style.opacity=`1`,a.style.transform=`translateY(0) scale(1)`;else if(_)p?(a.style.maxHeight=u,a.style.overflow=`auto`):(a.style.maxHeight=``,a.style.overflow=``),a.style.opacity=`1`,a.style.transform=`translateY(0) scale(1)`;else{a.style.overflow=`hidden`,a.style.maxHeight=`0`,a.offsetHeight;let e=p?u:`${a.scrollHeight}px`;a.style.maxHeight=e,a.style.opacity=`1`,a.style.transform=`translateY(0) scale(1)`,p?(0,s.fromEvent)(a,`transitionend`).pipe((0,c.filter)(e=>e.propertyName===`max-height`&&e.target===a),(0,c.take)(1),(0,c.takeUntil)(this.teardown$)).subscribe(()=>{a.style.overflow=`auto`}):(0,s.fromEvent)(a,`transitionend`).pipe((0,c.filter)(e=>e.propertyName===`max-height`&&e.target===a),(0,c.take)(1),(0,c.takeUntil)(this.teardown$)).subscribe(()=>{a.style.maxHeight=``,a.style.overflow=``})}a.style.pointerEvents=``,a.style.paddingTop=``,a.style.paddingBottom=``,a.style.marginTop=``,a.style.marginBottom=``,a.removeAttribute(`aria-hidden`),a.removeAttribute(`inert`)}else a.style.maxHeight===``||a.style.maxHeight===`none`?(a.style.overflow=`hidden`,a.style.maxHeight=`${a.scrollHeight}px`,a.offsetHeight):a.style.overflow=`hidden`,a.style.maxHeight=`0`,a.style.opacity=`0`,a.style.transform=`translateY(-8px) scale(0.98)`,a.style.pointerEvents=`none`,a.style.paddingTop=`0`,a.style.paddingBottom=`0`,a.style.marginTop=`0`,a.style.marginBottom=`0`,a.setAttribute(`aria-hidden`,`true`),a.setAttribute(`inert`,``);return l.noChange}disconnected(){this.teardown$.next()}reconnected(){}},Ze=(0,u.directive)(Xe),Qe=!1,$e=class extends u.AsyncDirective{constructor(...e){super(...e),this.teardown$=new s.Subject}render(){}update(e){if(e.type!==d.PartType.ELEMENT)throw Error(`ripple directive must be used on an element`);this.element=e.element,function(){if(Qe)return;let e=document.createElement(`style`);e.id=`schmancy-ripple-shared`,e.textContent=`
310
+ `,document.head.appendChild(e)})(),this.state?.autoHideSub&&(this.state.autoHideSub.unsubscribe(),this.state.autoHideSub=null);let r=n.t.value;if(this.state?.overlay&&this.state.isDimmed)return this.state.isDimmed=!1,this.state.options=t,this.state.fadeFinishedSub?.unsubscribe(),this.state.fadeFinishedSub=null,this.awakenOverlay(t,r),void this.scheduleAutoHide(t);this.state?.overlay||this.createOverlay(e,t,r),this.scheduleAutoHide(t)}awakenOverlay(e,n){if(!this.state?.overlay)return;let r=this.state.overlay;r.style.setProperty(`--nebula-intensity`,String(e.intensity)),r.animate([{opacity:e.idleOpacity,transform:`scale(0.98) translateZ(0)`},{opacity:.7*e.intensity,transform:`scale(1.01) translateZ(0)`},{opacity:e.intensity,transform:`scale(1) translateZ(0)`}],{duration:n?0:.6*e.fadeInDuration,easing:n?`linear`:t._(t.d),fill:`forwards`}),r.classList.remove(`paused`,`dimmed`),r.classList.add(`running`),r.style.animation=``}createOverlay(e,n,r){let i=window.getComputedStyle(e).position,a=e.style.position,o=e.style.overflow,s=e.style.contain;i===`static`&&(e.style.position=`relative`),e.style.overflow=`hidden`,e.style.contain=`paint`;let c=n.temperature,l=Math.max(0,c),u=Math.max(0,-c),d=n.intensity,f=Math.round(3+5*n.chromaticAberration),p=Math.round(20+60*u),m=Math.round(80+80*u),h=Math.round(20+80*l),g=Math.round(255-55*l),_=Math.round(100+100*u),v=Math.round(100*l),y=Math.round(255-55*l),b=Math.round(100+55*u),x=Math.round(255-55*u),S=document.createElement(`div`);if(S.className=`nebula-overlay running`,Object.assign(S.style,{position:`absolute`,inset:`-20%`,zIndex:n.background?`-1`:`9999`,opacity:`0`,"--nebula-intensity":String(d),"--nebula-blur-base":10*n.blur+`px`,"--nebula-idle-opacity":String(n.idleOpacity),"--nebula-aberration":`${f}px`,"--nebula-blur-core":12*n.blur+`px`}),r){let e=document.createElement(`div`);Object.assign(e.style,{position:`absolute`,inset:`0`,background:`\n\t\t\t\t\tradial-gradient(ellipse 45% 40% at 50% 50%,\n\t\t\t\t\t\trgba(255,${b},${x},${.12*d}) 0%,\n\t\t\t\t\t\trgba(${h},100,${g},${.06*d}) 40%,\n\t\t\t\t\t\ttransparent 70%),\n\t\t\t\t\tradial-gradient(circle 8% at 50% 50%,\n\t\t\t\t\t\trgba(255,255,255,${.15*d}) 0%,\n\t\t\t\t\t\ttransparent 100%)`,filter:`blur(${10*n.blur}px)`,opacity:String(d)}),S.appendChild(e)}else{let e=document.createElement(`div`);e.className=`nebula-layer`,Object.assign(e.style,{position:`absolute`,inset:`-5%`,background:`\n\t\t\t\t\tlinear-gradient(155deg,\n\t\t\t\t\t\ttransparent 0%, transparent 38%,\n\t\t\t\t\t\trgba(8,2,18,${.35*d}) 44%,\n\t\t\t\t\t\trgba(0,0,0,${.4*d}) 49%,\n\t\t\t\t\t\trgba(8,2,18,${.35*d}) 54%,\n\t\t\t\t\t\ttransparent 60%, transparent 100%),\n\t\t\t\t\tlinear-gradient(225deg,\n\t\t\t\t\t\ttransparent 0%, transparent 42%,\n\t\t\t\t\t\trgba(5,0,12,${.28*d}) 47%,\n\t\t\t\t\t\trgba(0,0,0,${.32*d}) 50%,\n\t\t\t\t\t\trgba(5,0,12,${.28*d}) 53%,\n\t\t\t\t\t\ttransparent 58%, transparent 100%),\n\t\t\t\t\tradial-gradient(ellipse 110% 110% at 50% 50%,\n\t\t\t\t\t\ttransparent 35%,\n\t\t\t\t\t\trgba(3,0,8,${.2*d}) 60%,\n\t\t\t\t\t\trgba(0,0,0,${.35*d}) 85%),\n\t\t\t\t\tradial-gradient(ellipse 50% 45% at 30% 35%,\n\t\t\t\t\t\trgba(0,0,0,${.3*d}) 0%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 40% 55% at 70% 65%,\n\t\t\t\t\t\trgba(0,0,0,${.25*d}) 0%,\n\t\t\t\t\t\ttransparent 60%)`,filter:`blur(${4*n.blur}px)`,mixBlendMode:`multiply`,transform:`translateZ(0)`}),S.appendChild(e);let t=document.createElement(`div`);t.className=`nebula-layer`,Object.assign(t.style,{position:`absolute`,inset:`-15%`,background:`\n\t\t\t\t\tradial-gradient(ellipse 55% 50% at 48% 50%,\n\t\t\t\t\t\trgba(255,${p},${m},${.14*d}) 0%,\n\t\t\t\t\t\trgba(255,${p},${m},${.06*d}) 35%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 30% 35% at 30% 35%,\n\t\t\t\t\t\trgba(255,${_},200,${.1*d}) 0%,\n\t\t\t\t\t\trgba(255,${_},200,${.03*d}) 50%,\n\t\t\t\t\t\ttransparent 70%),\n\t\t\t\t\tradial-gradient(ellipse 25% 30% at 65% 70%,\n\t\t\t\t\t\trgba(255,${Math.min(255,p+30)},${m},${.08*d}) 0%,\n\t\t\t\t\t\ttransparent 60%)`,filter:`blur(${18*n.blur}px) saturate(1.4)`,mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-chromatic-red ${35e3/n.speed}ms ${We} infinite`}),S.appendChild(t);let r=document.createElement(`div`);r.className=`nebula-layer`,Object.assign(r.style,{position:`absolute`,inset:`-15%`,background:`\n\t\t\t\t\tradial-gradient(ellipse 50% 55% at 52% 50%,\n\t\t\t\t\t\trgba(${h},100,${g},${.12*d}) 0%,\n\t\t\t\t\t\trgba(${h},100,${g},${.05*d}) 35%,\n\t\t\t\t\t\ttransparent 60%),\n\t\t\t\t\tradial-gradient(ellipse 35% 30% at 68% 40%,\n\t\t\t\t\t\trgba(${v},${y},200,${.09*d}) 0%,\n\t\t\t\t\t\trgba(${v},${y},200,${.03*d}) 45%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 28% 25% at 35% 65%,\n\t\t\t\t\t\trgba(${h},100,${Math.min(255,g+20)},${.07*d}) 0%,\n\t\t\t\t\t\ttransparent 55%)`,filter:`blur(${18*n.blur}px) saturate(1.4)`,mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-chromatic-blue ${35e3/n.speed}ms ${We} infinite`}),S.appendChild(r);let i=document.createElement(`div`);i.className=`nebula-layer`,Object.assign(i.style,{position:`absolute`,inset:`0`,background:`\n\t\t\t\t\tradial-gradient(ellipse 20% 22% at 50% 50%,\n\t\t\t\t\t\trgba(255,${b},${x},${.18*d}) 0%,\n\t\t\t\t\t\trgba(255,${_},200,${.08*d}) 40%,\n\t\t\t\t\t\trgba(${h},100,${g},${.03*d}) 65%,\n\t\t\t\t\t\ttransparent 80%),\n\t\t\t\t\tradial-gradient(circle 6% at 50% 50%,\n\t\t\t\t\t\trgba(255,255,255,${.25*d}) 0%,\n\t\t\t\t\t\trgba(255,240,245,${.1*d}) 50%,\n\t\t\t\t\t\ttransparent 100%)`,mixBlendMode:`screen`,transform:`translateZ(0)`,transformOrigin:`50% 50%`,filter:`blur(${12*n.blur}px) saturate(1.6)`,animation:`nebula-iridescent ${28e3/n.speed}ms linear infinite`}),S.appendChild(i);let a=document.createElement(`div`);if(a.className=`nebula-layer`,Object.assign(a.style,{position:`absolute`,inset:`-12%`,background:`\n\t\t\t\t\tradial-gradient(ellipse 60% 12% at 50% 48%,\n\t\t\t\t\t\trgba(255,${_},200,${.1*d}) 0%,\n\t\t\t\t\t\ttransparent 70%),\n\t\t\t\t\tradial-gradient(ellipse 12% 55% at 48% 50%,\n\t\t\t\t\t\trgba(${v},${y},200,${.08*d}) 0%,\n\t\t\t\t\t\ttransparent 65%),\n\t\t\t\t\tradial-gradient(ellipse 45% 10% at 45% 35%,\n\t\t\t\t\t\trgba(255,${b},${x},${.07*d}) 0%,\n\t\t\t\t\t\ttransparent 60%),\n\t\t\t\t\tradial-gradient(ellipse 10% 40% at 60% 60%,\n\t\t\t\t\t\trgba(${h},100,${g},${.06*d}) 0%,\n\t\t\t\t\t\ttransparent 55%)`,filter:`blur(${14*n.blur}px)`,mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-tendrils-breathe ${22e3/n.speed}ms ${X} infinite`}),S.appendChild(a),n.particleCount>0){let e=document.createElement(`div`);e.className=`nebula-layer`;let t=[];for(let e=0;e<n.particleCount;e++){let e=5+90*Math.random(),n=5+90*Math.random(),r=.5+2*Math.random(),i=Math.round(360*Math.random()),a=(.3+.5*Math.random())*d;t.push(`radial-gradient(circle ${r}px at ${e}% ${n}%, hsla(${i},80%,70%,${a}) 0%, transparent 100%)`)}Object.assign(e.style,{position:`absolute`,inset:`0`,background:t.join(`,`),mixBlendMode:`screen`,transform:`translateZ(0)`,animation:`nebula-particle-twinkle ${5e3/n.speed}ms ${X} infinite`}),S.appendChild(e)}}e.appendChild(S);let C=r?0:n.fadeInDuration,w=r?`linear`:t._(t.d);S.animate([{opacity:0,transform:`scale(0.85) translateZ(0)`},{opacity:.4*n.intensity,transform:`scale(0.97) translateZ(0)`},{opacity:n.intensity,transform:`scale(1) translateZ(0)`}],{duration:C,easing:w,fill:`forwards`}),this.state={element:e,overlay:S,originalPosition:a,originalOverflow:o,originalContain:s,isDimmed:!1,autoHideSub:null,fadeFinishedSub:null,options:n,reducedMotion:r,isVisible:document.visibilityState===`visible`},this.coordinator.register(this,e)}scheduleAutoHide(e){!this.state||e.autoHideDuration<=0||(this.state.autoHideSub=(0,s.timer)(e.autoHideDuration).pipe((0,c.take)(1),(0,c.tap)(()=>{this.state&&(this.state.autoHideSub=null,this.hide(this.state.options))})).subscribe())}hide(e){if(!this.state?.overlay||(this.state.autoHideSub&&(this.state.autoHideSub.unsubscribe(),this.state.autoHideSub=null),this.state.isDimmed))return;this.state.isDimmed=!0;let n=this.state.overlay,r=this.state.options,i=this.state.reducedMotion,a=i?0:e.fadeOutDuration,o=i?`linear`:t._(t.u);if(e.idleOpacity<=0)return void n.animate([{opacity:r.intensity,transform:`scale(1) translateZ(0)`},{opacity:.4*r.intensity,transform:`scale(0.95) translateZ(0)`},{opacity:0,transform:`scale(0.9) translateZ(0)`}],{duration:a,easing:o,fill:`forwards`});let l=n.animate([{opacity:r.intensity,transform:`scale(1) translateZ(0)`},{opacity:.5*r.intensity,transform:`scale(0.99) translateZ(0)`},{opacity:e.idleOpacity,transform:`scale(1) translateZ(0)`}],{duration:a,easing:o,fill:`forwards`});this.state.fadeFinishedSub?.unsubscribe(),this.state.fadeFinishedSub=(0,s.from)(l.finished).pipe((0,c.take)(1),(0,c.tap)(()=>{this.state?.overlay&&(this.state.overlay.classList.add(`dimmed`),e.idleBreathe&&!i&&(this.state.overlay.style.animation=`nebula-idle-breathe ${12e3/r.speed}ms ${X} infinite`))}),(0,c.catchError)(()=>s.EMPTY)).subscribe()}cleanup(){this.state&&=(this.coordinator.unregister(this,this.state.element),this.state.autoHideSub?.unsubscribe(),this.state.fadeFinishedSub?.unsubscribe(),this.state.overlay?.remove(),this.state.element.style.position=this.state.originalPosition,this.state.element.style.overflow=this.state.originalOverflow,this.state.element.style.contain=this.state.originalContain,null)}disconnected(){this.cleanup()}reconnected(){this.state&&this.coordinator.register(this,this.state.element)}},Je=(0,u.directive)(qe),Ye={smooth:t.d,snappy:t.f,bouncy:t.l,gentle:t.u},Xe=class extends u.AsyncDirective{constructor(e){if(super(e),this.initialized=!1,this.teardown$=new s.Subject,this.firstUpdate=!0,this.prevShow=void 0,e.type!==d.PartType.ELEMENT)throw Error(`reveal() can only be used on elements`)}render(e,t){return l.noChange}update(e,[r=!1,i={}]){let a=e.element,{preset:o=`smooth`,maxHeight:u,duration:d,easing:f}=i,p=u!==void 0,m=Ye[o],h=d??m.duration,g=f??t._(m),_=n.t.value,v=this.firstUpdate;this.firstUpdate=!1;let y=r!==this.prevShow;if(this.prevShow=r,this.initialized||(this.initialized=!0,a.style.transition=_?`none`:[`max-height ${h}ms ${g}`,`opacity ${h}ms ${g}`,`transform ${h}ms ${g}`,`padding ${h}ms ${g}`,`margin ${h}ms ${g}`].join(`, `)),r){if(v)p?(a.style.maxHeight=u,a.style.overflow=`auto`):(a.style.maxHeight=``,a.style.overflow=``),a.style.opacity=`1`,a.style.transform=`translateY(0) scale(1)`;else if(y)if(_)p?(a.style.maxHeight=u,a.style.overflow=`auto`):(a.style.maxHeight=``,a.style.overflow=``),a.style.opacity=`1`,a.style.transform=`translateY(0) scale(1)`;else{a.style.overflow=`hidden`,a.style.maxHeight=`0`,a.offsetHeight;let e=p?u:`${a.scrollHeight}px`;a.style.maxHeight=e,a.style.opacity=`1`,a.style.transform=`translateY(0) scale(1)`,p?(0,s.fromEvent)(a,`transitionend`).pipe((0,c.filter)(e=>e.propertyName===`max-height`&&e.target===a),(0,c.take)(1),(0,c.takeUntil)(this.teardown$)).subscribe(()=>{a.style.overflow=`auto`}):(0,s.fromEvent)(a,`transitionend`).pipe((0,c.filter)(e=>e.propertyName===`max-height`&&e.target===a),(0,c.take)(1),(0,c.takeUntil)(this.teardown$)).subscribe(()=>{a.style.maxHeight=``,a.style.overflow=``})}a.style.pointerEvents=``,a.style.paddingTop=``,a.style.paddingBottom=``,a.style.marginTop=``,a.style.marginBottom=``,a.removeAttribute(`aria-hidden`),a.removeAttribute(`inert`)}else a.style.maxHeight===``||a.style.maxHeight===`none`?(a.style.overflow=`hidden`,a.style.maxHeight=`${a.scrollHeight}px`,a.offsetHeight):a.style.overflow=`hidden`,a.style.maxHeight=`0`,a.style.opacity=`0`,a.style.transform=`translateY(-8px) scale(0.98)`,a.style.pointerEvents=`none`,a.style.paddingTop=`0`,a.style.paddingBottom=`0`,a.style.marginTop=`0`,a.style.marginBottom=`0`,a.setAttribute(`aria-hidden`,`true`),a.setAttribute(`inert`,``);return l.noChange}disconnected(){this.teardown$.next()}reconnected(){}},Ze=(0,u.directive)(Xe),Qe=!1,$e=class extends u.AsyncDirective{constructor(...e){super(...e),this.teardown$=new s.Subject}render(){}update(e){if(e.type!==d.PartType.ELEMENT)throw Error(`ripple directive must be used on an element`);this.element=e.element,function(){if(Qe)return;let e=document.createElement(`style`);e.id=`schmancy-ripple-shared`,e.textContent=`
311
311
  .schmancy-ripple-effect {
312
312
  position: absolute;
313
313
  border-radius: 50%;