@mhmo91/schmancy 0.10.35 → 0.10.36

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 (413) hide show
  1. package/custom-elements.json +1155 -1083
  2. package/dist/SchmancyElement-BBzRWB1w.cjs +2 -0
  3. package/dist/SchmancyElement-BBzRWB1w.cjs.map +1 -0
  4. package/dist/SchmancyElement-C3CpdNsi.js +284 -0
  5. package/dist/SchmancyElement-C3CpdNsi.js.map +1 -0
  6. package/dist/agent/schmancy.agent.js +3387 -3228
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/agent/schmancy.manifest.json +333 -255
  9. package/dist/{area-DviXdbDx.js → area-BA96mwFY.js} +2 -2
  10. package/dist/{area-DviXdbDx.js.map → area-BA96mwFY.js.map} +1 -1
  11. package/dist/{area-CTSTgjlx.cjs → area-DtyQDdOF.cjs} +1 -1
  12. package/dist/{area-CTSTgjlx.cjs.map → area-DtyQDdOF.cjs.map} +1 -1
  13. package/dist/area.cjs +1 -1
  14. package/dist/area.js +1 -1
  15. package/dist/{audio-Q9oB_cQR.cjs → audio-B_jT9Xr7.cjs} +1 -1
  16. package/dist/{audio-Q9oB_cQR.cjs.map → audio-B_jT9Xr7.cjs.map} +1 -1
  17. package/dist/{audio-DFYoaw0M.js → audio-D52h1jAT.js} +1 -1
  18. package/dist/{audio-DFYoaw0M.js.map → audio-D52h1jAT.js.map} +1 -1
  19. package/dist/audio.cjs +1 -1
  20. package/dist/audio.js +2 -2
  21. package/dist/{autocomplete-DmLXJr7C.cjs → autocomplete-Bts5Jwwr.cjs} +1 -1
  22. package/dist/{autocomplete-DmLXJr7C.cjs.map → autocomplete-Bts5Jwwr.cjs.map} +1 -1
  23. package/dist/{autocomplete-BDvuma6D.js → autocomplete-CI4QJXAN.js} +3 -3
  24. package/dist/{autocomplete-BDvuma6D.js.map → autocomplete-CI4QJXAN.js.map} +1 -1
  25. package/dist/autocomplete.cjs +1 -1
  26. package/dist/autocomplete.js +1 -1
  27. package/dist/avatar.cjs +1 -1
  28. package/dist/avatar.js +3 -3
  29. package/dist/badge.cjs +1 -1
  30. package/dist/badge.js +1 -1
  31. package/dist/boat-I4B1UNMc.cjs +34 -0
  32. package/dist/boat-I4B1UNMc.cjs.map +1 -0
  33. package/dist/{boat-lr7MPZ7H.js → boat-_N1x5U_3.js} +67 -83
  34. package/dist/boat-_N1x5U_3.js.map +1 -0
  35. package/dist/boat.cjs +1 -1
  36. package/dist/boat.js +1 -1
  37. package/dist/breadcrumb.cjs +1 -1
  38. package/dist/breadcrumb.js +2 -2
  39. package/dist/{busy-CgzZbGfx.cjs → busy-BIUonyPk.cjs} +1 -1
  40. package/dist/{busy-CgzZbGfx.cjs.map → busy-BIUonyPk.cjs.map} +1 -1
  41. package/dist/{busy-DgQ4ux5N.js → busy-CCB3qKnh.js} +2 -2
  42. package/dist/{busy-DgQ4ux5N.js.map → busy-CCB3qKnh.js.map} +1 -1
  43. package/dist/busy.cjs +1 -1
  44. package/dist/busy.js +1 -1
  45. package/dist/{button-qbN1muQ0.js → button-C89bPnHt.js} +2 -2
  46. package/dist/{button-qbN1muQ0.js.map → button-C89bPnHt.js.map} +1 -1
  47. package/dist/{button-DFvR1iXX.cjs → button-CkwQH-g3.cjs} +1 -1
  48. package/dist/{button-DFvR1iXX.cjs.map → button-CkwQH-g3.cjs.map} +1 -1
  49. package/dist/button.cjs +4 -4
  50. package/dist/button.cjs.map +1 -1
  51. package/dist/button.js +16 -22
  52. package/dist/button.js.map +1 -1
  53. package/dist/{card-D_GlwZ5q.cjs → card-BO93_oxQ.cjs} +1 -1
  54. package/dist/{card-D_GlwZ5q.cjs.map → card-BO93_oxQ.cjs.map} +1 -1
  55. package/dist/{card-DAbr-7Vy.js → card-CFsCgJKZ.js} +2 -2
  56. package/dist/{card-DAbr-7Vy.js.map → card-CFsCgJKZ.js.map} +1 -1
  57. package/dist/card.cjs +1 -1
  58. package/dist/card.js +1 -1
  59. package/dist/{checkbox-BNORaxMF.js → checkbox-Bh7q0djq.js} +2 -2
  60. package/dist/{checkbox-BNORaxMF.js.map → checkbox-Bh7q0djq.js.map} +1 -1
  61. package/dist/{checkbox-BUY_uc_r.cjs → checkbox-CFUBUFtW.cjs} +1 -1
  62. package/dist/{checkbox-BUY_uc_r.cjs.map → checkbox-CFUBUFtW.cjs.map} +1 -1
  63. package/dist/checkbox.cjs +1 -1
  64. package/dist/checkbox.js +1 -1
  65. package/dist/{chips-Dg6Lk6BT.js → chips-6YaoRmeG.js} +145 -122
  66. package/dist/chips-6YaoRmeG.js.map +1 -0
  67. package/dist/{chips-CXZ4dJCK.cjs → chips-BfzpsyV1.cjs} +44 -33
  68. package/dist/chips-BfzpsyV1.cjs.map +1 -0
  69. package/dist/chips.cjs +1 -1
  70. package/dist/chips.js +2 -2
  71. package/dist/connectivity.cjs +1 -1
  72. package/dist/connectivity.js +3 -3
  73. package/dist/content-drawer.cjs +1 -1
  74. package/dist/content-drawer.js +1 -1
  75. package/dist/{date-range-BU6WX7d5.js → date-range-CEo_Kjqw.js} +129 -137
  76. package/dist/date-range-CEo_Kjqw.js.map +1 -0
  77. package/dist/{date-range-C-_be3_E.cjs → date-range-N-A249O9.cjs} +25 -19
  78. package/dist/date-range-N-A249O9.cjs.map +1 -0
  79. package/dist/{date-range-inline-7o7xtVIu.js → date-range-inline-BwialV9j.js} +2 -2
  80. package/dist/{date-range-inline-7o7xtVIu.js.map → date-range-inline-BwialV9j.js.map} +1 -1
  81. package/dist/{date-range-inline-DJtUmHKF.cjs → date-range-inline-DFopysWF.cjs} +1 -1
  82. package/dist/{date-range-inline-DJtUmHKF.cjs.map → date-range-inline-DFopysWF.cjs.map} +1 -1
  83. package/dist/date-range-inline.cjs +1 -1
  84. package/dist/date-range-inline.js +1 -1
  85. package/dist/date-range.cjs +1 -1
  86. package/dist/date-range.js +1 -1
  87. package/dist/delay.cjs +1 -1
  88. package/dist/delay.js +2 -2
  89. package/dist/{details-Bs0MyyvF.cjs → details-BLRPV8sY.cjs} +1 -1
  90. package/dist/{details-Bs0MyyvF.cjs.map → details-BLRPV8sY.cjs.map} +1 -1
  91. package/dist/{details-EfbDPVEo.js → details-GtpfI2hA.js} +2 -2
  92. package/dist/{details-EfbDPVEo.js.map → details-GtpfI2hA.js.map} +1 -1
  93. package/dist/details.cjs +1 -1
  94. package/dist/details.js +1 -1
  95. package/dist/{directives-zi1Mm2er.js → directives-C2dXgpCY.js} +13 -6
  96. package/dist/directives-C2dXgpCY.js.map +1 -0
  97. package/dist/{directives-fLwDj6b0.cjs → directives-CvYGSW_a.cjs} +2 -2
  98. package/dist/directives-CvYGSW_a.cjs.map +1 -0
  99. package/dist/directives.cjs +1 -1
  100. package/dist/directives.js +2 -2
  101. package/dist/{divider-CEPfrIwe.js → divider-D0pGX2VB.js} +2 -2
  102. package/dist/{divider-CEPfrIwe.js.map → divider-D0pGX2VB.js.map} +1 -1
  103. package/dist/{divider-CdIsWZrM.cjs → divider-rNsWCvMi.cjs} +1 -1
  104. package/dist/{divider-CdIsWZrM.cjs.map → divider-rNsWCvMi.cjs.map} +1 -1
  105. package/dist/divider.cjs +1 -1
  106. package/dist/divider.js +1 -1
  107. package/dist/dropdown.cjs +1 -1
  108. package/dist/dropdown.js +2 -2
  109. package/dist/{expand-g1vqqUp1.js → expand-FcKAzJta.js} +3 -3
  110. package/dist/{expand-g1vqqUp1.js.map → expand-FcKAzJta.js.map} +1 -1
  111. package/dist/{expand--at1k3qo.cjs → expand-tffQHGbZ.cjs} +1 -1
  112. package/dist/{expand--at1k3qo.cjs.map → expand-tffQHGbZ.cjs.map} +1 -1
  113. package/dist/expand.cjs +1 -1
  114. package/dist/expand.js +1 -1
  115. package/dist/fab.cjs +77 -0
  116. package/dist/fab.cjs.map +1 -0
  117. package/dist/fab.js +151 -0
  118. package/dist/fab.js.map +1 -0
  119. package/dist/{float-P9HukAm-.cjs → float-CDjgxWyy.cjs} +1 -1
  120. package/dist/{float-P9HukAm-.cjs.map → float-CDjgxWyy.cjs.map} +1 -1
  121. package/dist/{float-DxVzgI9o.js → float-CQ1WEp3M.js} +2 -2
  122. package/dist/{float-DxVzgI9o.js.map → float-CQ1WEp3M.js.map} +1 -1
  123. package/dist/float.cjs +1 -1
  124. package/dist/float.js +1 -1
  125. package/dist/{form-CqLaozHp.js → form-H24puioV.js} +3 -3
  126. package/dist/{form-CqLaozHp.js.map → form-H24puioV.js.map} +1 -1
  127. package/dist/{form-ByYhXe1p.cjs → form-VYhbbir3.cjs} +1 -1
  128. package/dist/{form-ByYhXe1p.cjs.map → form-VYhbbir3.cjs.map} +1 -1
  129. package/dist/form.cjs +6 -6
  130. package/dist/form.cjs.map +1 -1
  131. package/dist/form.js +25 -23
  132. package/dist/form.js.map +1 -1
  133. package/dist/handover/agent-runtime-followups.md +1 -1
  134. package/dist/handover/agent-runtime-v1.md +3 -3
  135. package/dist/{icons-DYtiRU5V.cjs → icons-B_a1HStW.cjs} +1 -1
  136. package/dist/{icons-DYtiRU5V.cjs.map → icons-B_a1HStW.cjs.map} +1 -1
  137. package/dist/{icons-CkphcMp6.js → icons-DBxfN91B.js} +2 -2
  138. package/dist/{icons-CkphcMp6.js.map → icons-DBxfN91B.js.map} +1 -1
  139. package/dist/icons.cjs +1 -1
  140. package/dist/icons.js +1 -1
  141. package/dist/{iframe-CjqJksl8.js → iframe-BDVElN8z.js} +2 -2
  142. package/dist/{iframe-CjqJksl8.js.map → iframe-BDVElN8z.js.map} +1 -1
  143. package/dist/{iframe-C3trkP8q.cjs → iframe-CG-z9qev.cjs} +1 -1
  144. package/dist/{iframe-C3trkP8q.cjs.map → iframe-CG-z9qev.cjs.map} +1 -1
  145. package/dist/iframe.cjs +1 -1
  146. package/dist/iframe.js +1 -1
  147. package/dist/index.cjs +1 -1
  148. package/dist/index.js +57 -56
  149. package/dist/{input-DuavpwNL.cjs → input-B14Nn6xD.cjs} +1 -1
  150. package/dist/{input-DuavpwNL.cjs.map → input-B14Nn6xD.cjs.map} +1 -1
  151. package/dist/{input-CG51zDVh.js → input-Bt_o4sYo.js} +2 -2
  152. package/dist/{input-CG51zDVh.js.map → input-Bt_o4sYo.js.map} +1 -1
  153. package/dist/{input-chip-C6Lq1927.js → input-chip-DEqO0DXc.js} +2 -2
  154. package/dist/input-chip-DEqO0DXc.js.map +1 -0
  155. package/dist/{input-chip-57tgNXKT.cjs → input-chip-ugYu9Fn9.cjs} +1 -1
  156. package/dist/input-chip-ugYu9Fn9.cjs.map +1 -0
  157. package/dist/input.cjs +1 -1
  158. package/dist/input.js +1 -1
  159. package/dist/json.cjs +1 -1
  160. package/dist/json.js +3 -3
  161. package/dist/kbd.cjs +1 -1
  162. package/dist/kbd.js +2 -2
  163. package/dist/{layout-D4IOwx7p.js → layout-BJ_43VrH.js} +1 -1
  164. package/dist/{layout-D4IOwx7p.js.map → layout-BJ_43VrH.js.map} +1 -1
  165. package/dist/{layout-6ipbiWTl.cjs → layout-DF9ZaQ-b.cjs} +1 -1
  166. package/dist/{layout-6ipbiWTl.cjs.map → layout-DF9ZaQ-b.cjs.map} +1 -1
  167. package/dist/layout.cjs +1 -1
  168. package/dist/layout.js +2 -2
  169. package/dist/{lightbox-H8pVWGMX.cjs → lightbox-B47Zoqv-.cjs} +1 -1
  170. package/dist/{lightbox-H8pVWGMX.cjs.map → lightbox-B47Zoqv-.cjs.map} +1 -1
  171. package/dist/{lightbox-CsyO2XSr.js → lightbox-ZmuoBBFT.js} +2 -2
  172. package/dist/{lightbox-CsyO2XSr.js.map → lightbox-ZmuoBBFT.js.map} +1 -1
  173. package/dist/lightbox.cjs +1 -1
  174. package/dist/lightbox.js +1 -1
  175. package/dist/{list-BAwH0pQW.js → list-C47xzld_.js} +2 -2
  176. package/dist/{list-BAwH0pQW.js.map → list-C47xzld_.js.map} +1 -1
  177. package/dist/{list-Bs9m8kw7.cjs → list-CaSWrlG2.cjs} +1 -1
  178. package/dist/{list-Bs9m8kw7.cjs.map → list-CaSWrlG2.cjs.map} +1 -1
  179. package/dist/list.cjs +1 -1
  180. package/dist/list.js +1 -1
  181. package/dist/{menu-tQVARVaC.js → menu-8RObM6Ie.js} +3 -3
  182. package/dist/{menu-tQVARVaC.js.map → menu-8RObM6Ie.js.map} +1 -1
  183. package/dist/{menu-BMcGzj1h.cjs → menu-Jpsy85SX.cjs} +1 -1
  184. package/dist/{menu-BMcGzj1h.cjs.map → menu-Jpsy85SX.cjs.map} +1 -1
  185. package/dist/menu.cjs +1 -1
  186. package/dist/menu.js +1 -1
  187. package/dist/{mixins-CGXSzZc7.cjs → mixins-DPdzC9ZH.cjs} +1 -1
  188. package/dist/{mixins-CGXSzZc7.cjs.map → mixins-DPdzC9ZH.cjs.map} +1 -1
  189. package/dist/{mixins-Bp0wIHg2.js → mixins-DTzfFVyv.js} +1 -1
  190. package/dist/{mixins-Bp0wIHg2.js.map → mixins-DTzfFVyv.js.map} +1 -1
  191. package/dist/mixins.cjs +1 -1
  192. package/dist/mixins.js +2 -2
  193. package/dist/nav-drawer.cjs +1 -1
  194. package/dist/nav-drawer.js +1 -1
  195. package/dist/navigation-bar.cjs +1 -1
  196. package/dist/navigation-bar.js +1 -1
  197. package/dist/navigation-rail.cjs +1 -1
  198. package/dist/navigation-rail.js +2 -2
  199. package/dist/{notification-D1tX2nx5.js → notification-Ccktcj9H.js} +4 -4
  200. package/dist/{notification-D1tX2nx5.js.map → notification-Ccktcj9H.js.map} +1 -1
  201. package/dist/{notification-Bz00zdpV.cjs → notification-DSkB-sn0.cjs} +1 -1
  202. package/dist/{notification-Bz00zdpV.cjs.map → notification-DSkB-sn0.cjs.map} +1 -1
  203. package/dist/notification.cjs +1 -1
  204. package/dist/notification.js +1 -1
  205. package/dist/{option-BnybLEDO.cjs → option-0aNiVB3Q.cjs} +1 -1
  206. package/dist/{option-BnybLEDO.cjs.map → option-0aNiVB3Q.cjs.map} +1 -1
  207. package/dist/{option-BpGV8Apj.js → option-CkMxwBqU.js} +2 -2
  208. package/dist/{option-BpGV8Apj.js.map → option-CkMxwBqU.js.map} +1 -1
  209. package/dist/option.cjs +1 -1
  210. package/dist/option.js +1 -1
  211. package/dist/{overlay-UQR2Dy3u.cjs → overlay-BS-ta-zq.cjs} +5 -5
  212. package/dist/overlay-BS-ta-zq.cjs.map +1 -0
  213. package/dist/{overlay-BpNhd74N.js → overlay-H3Wt_dgQ.js} +108 -108
  214. package/dist/overlay-H3Wt_dgQ.js.map +1 -0
  215. package/dist/overlay.cjs +1 -1
  216. package/dist/{overlay.confirm-body-CVDtVk5X.cjs → overlay.confirm-body-CR9xaqOE.cjs} +1 -1
  217. package/dist/{overlay.confirm-body-CVDtVk5X.cjs.map → overlay.confirm-body-CR9xaqOE.cjs.map} +1 -1
  218. package/dist/{overlay.confirm-body-BHcXu5Wk.js → overlay.confirm-body-Dxn_wNm3.js} +6 -6
  219. package/dist/{overlay.confirm-body-BHcXu5Wk.js.map → overlay.confirm-body-Dxn_wNm3.js.map} +1 -1
  220. package/dist/overlay.js +3 -3
  221. package/dist/{overlay.service-DTE6NwIM.js → overlay.service-C46kOtUi.js} +2 -2
  222. package/dist/{overlay.service-DTE6NwIM.js.map → overlay.service-C46kOtUi.js.map} +1 -1
  223. package/dist/{overlay.service-C8RsQzgM.cjs → overlay.service-DEj3rfRr.cjs} +1 -1
  224. package/dist/{overlay.service-C8RsQzgM.cjs.map → overlay.service-DEj3rfRr.cjs.map} +1 -1
  225. package/dist/{progress-CAKsxp29.js → progress-BK7gSq8j.js} +2 -2
  226. package/dist/{progress-CAKsxp29.js.map → progress-BK7gSq8j.js.map} +1 -1
  227. package/dist/{progress-gbIALDRs.cjs → progress-zs18GR6C.cjs} +1 -1
  228. package/dist/{progress-gbIALDRs.cjs.map → progress-zs18GR6C.cjs.map} +1 -1
  229. package/dist/progress.cjs +1 -1
  230. package/dist/progress.js +1 -1
  231. package/dist/{radio-group-otyvZvUk.js → radio-group-1HCpzRUB.js} +2 -2
  232. package/dist/{radio-group-otyvZvUk.js.map → radio-group-1HCpzRUB.js.map} +1 -1
  233. package/dist/{radio-group-CfJ5DtI4.cjs → radio-group-DbYlyPc-.cjs} +1 -1
  234. package/dist/{radio-group-CfJ5DtI4.cjs.map → radio-group-DbYlyPc-.cjs.map} +1 -1
  235. package/dist/radio-group.cjs +1 -1
  236. package/dist/radio-group.js +1 -1
  237. package/dist/range.cjs +1 -1
  238. package/dist/range.js +2 -2
  239. package/dist/{select-81jniVTs.cjs → select-B-SSmUDe.cjs} +1 -1
  240. package/dist/{select-81jniVTs.cjs.map → select-B-SSmUDe.cjs.map} +1 -1
  241. package/dist/{select-9vXx1fhr.js → select-CEyhNtZ2.js} +3 -3
  242. package/dist/{select-9vXx1fhr.js.map → select-CEyhNtZ2.js.map} +1 -1
  243. package/dist/select.cjs +1 -1
  244. package/dist/select.js +1 -1
  245. package/dist/skeleton.cjs +1 -1
  246. package/dist/skeleton.js +2 -2
  247. package/dist/skills/INDEX.md +1 -1
  248. package/dist/skills/SKILL.md +6 -7
  249. package/dist/skills/boat.md +21 -15
  250. package/dist/skills/fab.md +75 -0
  251. package/dist/skills/schmancy/INDEX.md +1 -1
  252. package/dist/skills/schmancy/SKILL.md +6 -7
  253. package/dist/skills/schmancy/boat.md +21 -15
  254. package/dist/skills/schmancy/fab.md +75 -0
  255. package/dist/skills/schmancy/theme.md +1 -1
  256. package/dist/skills/theme.md +1 -1
  257. package/dist/slider.cjs +1 -1
  258. package/dist/slider.js +2 -2
  259. package/dist/{sound.service-D3ZSq1Kj.js → sound.service-DO4SmUUT.js} +1 -1
  260. package/dist/{sound.service-D3ZSq1Kj.js.map → sound.service-DO4SmUUT.js.map} +1 -1
  261. package/dist/{sound.service-CmIw63aM.cjs → sound.service-G_8GV_6L.cjs} +1 -1
  262. package/dist/{sound.service-CmIw63aM.cjs.map → sound.service-G_8GV_6L.cjs.map} +1 -1
  263. package/dist/{splash-screen-BOjrmGLk.js → splash-screen-B1mM4_xz.js} +2 -2
  264. package/dist/{splash-screen-BOjrmGLk.js.map → splash-screen-B1mM4_xz.js.map} +1 -1
  265. package/dist/{splash-screen-C5KAWXvA.cjs → splash-screen-cbz4bxjB.cjs} +1 -1
  266. package/dist/{splash-screen-C5KAWXvA.cjs.map → splash-screen-cbz4bxjB.cjs.map} +1 -1
  267. package/dist/splash-screen.cjs +1 -1
  268. package/dist/splash-screen.js +1 -1
  269. package/dist/{src-qzUpLbje.cjs → src-czeiuT1m.cjs} +1 -1
  270. package/dist/{src-qzUpLbje.cjs.map → src-czeiuT1m.cjs.map} +1 -1
  271. package/dist/{src-C5g3p1J5.js → src-tncsWsTY.js} +36 -35
  272. package/dist/{src-C5g3p1J5.js.map → src-tncsWsTY.js.map} +1 -1
  273. package/dist/{state-Cex3rmx2.cjs → state-Cx0aoL5e.cjs} +1 -1
  274. package/dist/{state-Cex3rmx2.cjs.map → state-Cx0aoL5e.cjs.map} +1 -1
  275. package/dist/{state-CWBRTSvE.js → state-DJDp3N7J.js} +1 -1
  276. package/dist/{state-CWBRTSvE.js.map → state-DJDp3N7J.js.map} +1 -1
  277. package/dist/state.cjs +1 -1
  278. package/dist/state.js +2 -2
  279. package/dist/steps.cjs +1 -1
  280. package/dist/steps.js +2 -2
  281. package/dist/{surface-PfiejLuw.cjs → surface-C3cxTcJD.cjs} +1 -1
  282. package/dist/{surface-PfiejLuw.cjs.map → surface-C3cxTcJD.cjs.map} +1 -1
  283. package/dist/{surface-9S5scTsD.js → surface-CYBl8_a3.js} +2 -2
  284. package/dist/{surface-9S5scTsD.js.map → surface-CYBl8_a3.js.map} +1 -1
  285. package/dist/surface.cjs +1 -1
  286. package/dist/surface.js +1 -1
  287. package/dist/switch.cjs +1 -1
  288. package/dist/switch.js +2 -2
  289. package/dist/table.cjs +1 -1
  290. package/dist/table.js +2 -2
  291. package/dist/{tabs-BBOjAmgG.js → tabs-DHy93Q3N.js} +2 -2
  292. package/dist/{tabs-BBOjAmgG.js.map → tabs-DHy93Q3N.js.map} +1 -1
  293. package/dist/{tabs-uYvb1P06.cjs → tabs-ORQ_Zd43.cjs} +1 -1
  294. package/dist/{tabs-uYvb1P06.cjs.map → tabs-ORQ_Zd43.cjs.map} +1 -1
  295. package/dist/tabs.cjs +1 -1
  296. package/dist/tabs.js +1 -1
  297. package/dist/teleport.cjs +1 -1
  298. package/dist/teleport.js +1 -1
  299. package/dist/{textarea-YPHX4g7Y.cjs → textarea-CEUaDURR.cjs} +1 -1
  300. package/dist/{textarea-YPHX4g7Y.cjs.map → textarea-CEUaDURR.cjs.map} +1 -1
  301. package/dist/{textarea-QzSj8Dkl.js → textarea-DHIMt-ly.js} +2 -2
  302. package/dist/{textarea-QzSj8Dkl.js.map → textarea-DHIMt-ly.js.map} +1 -1
  303. package/dist/textarea.cjs +1 -1
  304. package/dist/textarea.js +1 -1
  305. package/dist/theme-CJpjkqHr.cjs +181 -0
  306. package/dist/{theme-iKUaS9JB.cjs.map → theme-CJpjkqHr.cjs.map} +1 -1
  307. package/dist/{theme-C2Mp-VGt.js → theme-CgI9PRco.js} +6 -5
  308. package/dist/{theme-C2Mp-VGt.js.map → theme-CgI9PRco.js.map} +1 -1
  309. package/dist/{theme-button-CJmhxfMe.cjs → theme-button--FuBkuVr.cjs} +1 -1
  310. package/dist/{theme-button-CJmhxfMe.cjs.map → theme-button--FuBkuVr.cjs.map} +1 -1
  311. package/dist/{theme-button-DGWAXhzd.js → theme-button-D-FXb3oO.js} +2 -2
  312. package/dist/{theme-button-DGWAXhzd.js.map → theme-button-D-FXb3oO.js.map} +1 -1
  313. package/dist/theme-button.cjs +1 -1
  314. package/dist/theme-button.js +1 -1
  315. package/dist/theme.cjs +1 -1
  316. package/dist/theme.js +3 -3
  317. package/dist/{theme.service-hc4N-1Oz.js → theme.service-BfTK1Wtl.js} +1 -1
  318. package/dist/{theme.service-hc4N-1Oz.js.map → theme.service-BfTK1Wtl.js.map} +1 -1
  319. package/dist/{theme.service-p61RsJBF.cjs → theme.service-Dg7LO0Qz.cjs} +1 -1
  320. package/dist/{theme.service-p61RsJBF.cjs.map → theme.service-Dg7LO0Qz.cjs.map} +1 -1
  321. package/dist/tree.cjs +1 -1
  322. package/dist/tree.js +2 -2
  323. package/dist/{typography-DwV0sqht.js → typography-BEGLfHwz.js} +2 -2
  324. package/dist/{typography-DwV0sqht.js.map → typography-BEGLfHwz.js.map} +1 -1
  325. package/dist/{typography-Bdt8RlX2.cjs → typography-CxA3sx9B.cjs} +1 -1
  326. package/dist/{typography-Bdt8RlX2.cjs.map → typography-CxA3sx9B.cjs.map} +1 -1
  327. package/dist/typography.cjs +1 -1
  328. package/dist/typography.js +1 -1
  329. package/dist/visually-hidden.cjs +1 -1
  330. package/dist/visually-hidden.js +2 -2
  331. package/dist/{window-n4jN60B_.js → window-B_n4P9az.js} +3 -3
  332. package/dist/{window-n4jN60B_.js.map → window-B_n4P9az.js.map} +1 -1
  333. package/dist/{window-D2WfvNng.cjs → window-Vl1u1-EG.cjs} +1 -1
  334. package/dist/{window-D2WfvNng.cjs.map → window-Vl1u1-EG.cjs.map} +1 -1
  335. package/dist/window.cjs +1 -1
  336. package/dist/window.js +1 -1
  337. package/package.json +1 -1
  338. package/skills/schmancy/INDEX.md +1 -1
  339. package/skills/schmancy/SKILL.md +6 -7
  340. package/skills/schmancy/boat.md +21 -15
  341. package/skills/schmancy/fab.md +75 -0
  342. package/skills/schmancy/theme.md +1 -1
  343. package/src/CLAUDE.md +22 -16
  344. package/src/boat/boat.test.ts +130 -0
  345. package/src/boat/boat.ts +144 -121
  346. package/src/button/icon-button.ts +18 -30
  347. package/src/chips/assist-chip.ts +2 -263
  348. package/src/chips/chips.ts +2 -259
  349. package/src/chips/filter-chip.ts +2 -255
  350. package/src/chips/index.ts +2 -5
  351. package/src/chips/input-chip.ts +2 -413
  352. package/src/chips/suggestion-chip.ts +2 -266
  353. package/src/directives/fill.ts +28 -5
  354. package/src/fab/fab.test.ts +101 -0
  355. package/src/fab/fab.ts +226 -0
  356. package/src/fab/index.ts +1 -0
  357. package/src/form/fields/chips/assist-chip.ts +263 -0
  358. package/src/form/fields/chips/chips.ts +234 -0
  359. package/src/form/fields/chips/filter-chip.ts +255 -0
  360. package/src/form/fields/chips/index.ts +5 -0
  361. package/src/form/fields/chips/input-chip.ts +413 -0
  362. package/src/form/fields/chips/suggestion-chip.ts +266 -0
  363. package/src/form/fields/date-range/date-range.test.ts +44 -0
  364. package/src/form/fields/date-range/date-range.ts +103 -97
  365. package/src/form/fields/index.ts +1 -0
  366. package/src/index.ts +2 -1
  367. package/src/overlay/overlay.animations.ts +2 -3
  368. package/src/overlay/overlay.component.ts +8 -4
  369. package/src/overlay/overlay.types.ts +14 -2
  370. package/src/theme/theme.component.ts +1 -0
  371. package/src/theme/theme.style.css +3 -0
  372. package/types/src/boat/boat.d.ts +27 -9
  373. package/types/src/boat/boat.test.d.ts +2 -0
  374. package/types/src/button/icon-button.d.ts +3 -2
  375. package/types/src/chips/assist-chip.d.ts +1 -47
  376. package/types/src/chips/chips.d.ts +1 -43
  377. package/types/src/chips/filter-chip.d.ts +1 -67
  378. package/types/src/chips/index.d.ts +1 -5
  379. package/types/src/chips/input-chip.d.ts +1 -82
  380. package/types/src/chips/suggestion-chip.d.ts +1 -52
  381. package/types/src/fab/fab.d.ts +80 -0
  382. package/types/src/fab/fab.test.d.ts +2 -0
  383. package/types/src/fab/index.d.ts +1 -0
  384. package/types/src/form/fields/chips/assist-chip.d.ts +47 -0
  385. package/types/src/form/fields/chips/chips.d.ts +35 -0
  386. package/types/src/form/fields/chips/filter-chip.d.ts +67 -0
  387. package/types/src/form/fields/chips/index.d.ts +5 -0
  388. package/types/src/form/fields/chips/input-chip.d.ts +82 -0
  389. package/types/src/form/fields/chips/suggestion-chip.d.ts +52 -0
  390. package/types/src/form/fields/date-range/date-range.d.ts +5 -10
  391. package/types/src/form/fields/index.d.ts +1 -0
  392. package/types/src/index.d.ts +2 -1
  393. package/types/src/overlay/overlay.component.d.ts +1 -0
  394. package/types/src/overlay/overlay.types.d.ts +12 -2
  395. package/types/src/theme/theme.component.d.ts +1 -0
  396. package/dist/SchmancyElement-CA0Wqt8m.js +0 -284
  397. package/dist/SchmancyElement-CA0Wqt8m.js.map +0 -1
  398. package/dist/SchmancyElement-CYIif26I.cjs +0 -2
  399. package/dist/SchmancyElement-CYIif26I.cjs.map +0 -1
  400. package/dist/boat-Vqjgo10B.cjs +0 -33
  401. package/dist/boat-Vqjgo10B.cjs.map +0 -1
  402. package/dist/boat-lr7MPZ7H.js.map +0 -1
  403. package/dist/chips-CXZ4dJCK.cjs.map +0 -1
  404. package/dist/chips-Dg6Lk6BT.js.map +0 -1
  405. package/dist/date-range-BU6WX7d5.js.map +0 -1
  406. package/dist/date-range-C-_be3_E.cjs.map +0 -1
  407. package/dist/directives-fLwDj6b0.cjs.map +0 -1
  408. package/dist/directives-zi1Mm2er.js.map +0 -1
  409. package/dist/input-chip-57tgNXKT.cjs.map +0 -1
  410. package/dist/input-chip-C6Lq1927.js.map +0 -1
  411. package/dist/overlay-BpNhd74N.js.map +0 -1
  412. package/dist/overlay-UQR2Dy3u.cjs.map +0 -1
  413. package/dist/theme-iKUaS9JB.cjs +0 -181
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boat-I4B1UNMc.cjs","names":["#sub","#captured","#ready"],"sources":["../src/boat/boat.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html, type PropertyValues } from 'lit'\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { exhaustMap, filter, finalize, fromEvent, merge, type Subscription, takeUntil, tap } from 'rxjs'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport { show } from '../overlay/overlay.service'\nimport { theme } from '../theme/theme.service.js'\nimport { SPRING_SMOOTH } from '../utils/animation.js'\n\nconst DRAG_THRESHOLD = 5\nconst POSITION_STORAGE_KEY_PREFIX = 'schmancy-boat-'\n\ntype Corner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\ninterface Position {\n\tx: number\n\ty: number\n}\n\n/**\n * Corner-anchored launcher that delegates its expanded panel to the `show()`\n * overlay service.\n *\n * Three slots, three non-overlapping intents — no element-type sniffing,\n * ever:\n *\n * - `trigger` — pure consumer content. A native click anywhere on it\n * opens the panel; interactive children (buttons, FABs, inputs) work\n * with zero special-casing because the boat never calls\n * `preventDefault` / `stopPropagation` / `setPointerCapture` here.\n * - `drag-handle` — opt-in. Pointer-drag is wired ONLY to this slot's\n * boat-owned wrapper. Slot it to make the boat draggable; omit it and\n * the boat is static at its corner. (A no-move tap on the handle also\n * opens, so the grip doubles as a launcher.)\n * - _(default)_ — the panel body; parked hidden while collapsed,\n * relocated into the `show()` overlay on open.\n *\n * The boat owns drag, corner-snapping, position persistence and the glass\n * surface — never the collapsed shape.\n */\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends SchmancyElement {\n\n\n\t/** Identity for localStorage drag-position persistence. */\n\t@property({ type: String }) id: string = 'default'\n\t/** Corner the launcher is anchored to. */\n\t@property({ type: String }) corner: Corner = 'bottom-right'\n\t/** Open state. Bind `?open=${…}` to drive the overlay; reflected to the attribute. */\n\t@property({ type: Boolean, reflect: true }) open: boolean = false\n\n\t@state() private isDragging = false\n\t@state() private currentCorner: Corner = 'bottom-right'\n\t@state() private hasHandle = false\n\n\t/** Default-slot nodes — the overlay body. */\n\t@queryAssignedElements() private slotted!: Element[]\n\t/** Slotted drag-handle nodes — presence toggles draggability. */\n\t@queryAssignedElements({ slot: 'drag-handle' }) private handleNodes!: Element[]\n\n\tprivate position: Position = { x: 16, y: 16 }\n\tprivate containerRef = createRef<HTMLElement>()\n\tprivate triggerRef = createRef<HTMLElement>()\n\tprivate handleRef = createRef<HTMLElement>()\n\tprivate currentAnimation?: Animation\n\n\t#ready = false\n\t#sub?: Subscription\n\t#captured: Element[] = []\n\n\t// ============================================\n\t// POSITION MANAGEMENT\n\t// ============================================\n\n\tprivate applyContainerPosition() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\t\tcontainer.style.removeProperty('left')\n\t\tcontainer.style.removeProperty('right')\n\t\tcontainer.style.removeProperty('top')\n\t\tcontainer.style.removeProperty('bottom')\n\t\tconst { x, y } = this.position\n\t\tif (this.currentCorner.includes('right')) {\n\t\t\tcontainer.style.right = `${x}px`\n\t\t} else {\n\t\t\tcontainer.style.left = `${x}px`\n\t\t}\n\t\tif (this.currentCorner.includes('bottom')) {\n\t\t\tcontainer.style.bottom = `${y + theme.bottomOffset}px`\n\t\t} else {\n\t\t\tcontainer.style.top = `${y}px`\n\t\t}\n\t}\n\n\tprivate loadPosition() {\n\t\ttry {\n\t\t\tconst saved = localStorage.getItem(POSITION_STORAGE_KEY_PREFIX + this.id)\n\t\t\tif (saved) {\n\t\t\t\tconst parsed = JSON.parse(saved) as { x: number; y: number; anchor: Corner }\n\t\t\t\tthis.position = { x: parsed.x, y: parsed.y }\n\t\t\t\tthis.currentCorner = parsed.anchor\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore localStorage errors\n\t\t}\n\t}\n\n\tprivate savePosition() {\n\t\ttry {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tPOSITION_STORAGE_KEY_PREFIX + this.id,\n\t\t\t\tJSON.stringify({ ...this.position, anchor: this.currentCorner }),\n\t\t\t)\n\t\t} catch {\n\t\t\t// ignore localStorage errors\n\t\t}\n\t}\n\n\tprivate validateBounds() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\t\tconst rect = container.getBoundingClientRect()\n\t\tif (rect.width === 0) return\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\t\tconst isRight = this.currentCorner.includes('right')\n\t\tconst isBottom = this.currentCorner.includes('bottom')\n\t\tconst actualLeft = isRight ? vw - this.position.x - rect.width : this.position.x\n\t\tconst actualTop = isBottom ? vh - this.position.y - rect.height : this.position.y\n\t\tconst newLeft = Math.max(0, Math.min(actualLeft, vw - rect.width))\n\t\tconst newTop = Math.max(0, Math.min(actualTop, vh - rect.height))\n\t\tthis.position = {\n\t\t\tx: isRight ? vw - newLeft - rect.width : newLeft,\n\t\t\ty: isBottom ? vh - newTop - rect.height : newTop,\n\t\t}\n\t\tthis.applyContainerPosition()\n\t}\n\n\t// ============================================\n\t// CORNER SNAPPING (FLIP)\n\t// ============================================\n\n\tprivate reorientToNearestCorner(): void {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst fabCenterX = rect.left + rect.width / 2\n\t\tconst fabCenterY = rect.top + rect.height / 2\n\t\tconst side = fabCenterX > window.innerWidth / 2 ? 'right' : 'left'\n\t\tconst vert = fabCenterY > window.innerHeight / 2 ? 'bottom' : 'top'\n\t\tthis.currentCorner = `${vert}-${side}` as Corner\n\t\tthis.position = { x: 16, y: 16 }\n\t\tthis.applyContainerPosition()\n\n\t\tif (reducedMotion$.value) {\n\t\t\tthis.savePosition()\n\t\t\treturn\n\t\t}\n\n\t\tconst newRect = container.getBoundingClientRect()\n\t\tconst dx = rect.left - newRect.left\n\t\tconst dy = rect.top - newRect.top\n\t\tcontainer.style.transform = `translate(${dx}px, ${dy}px)`\n\n\t\tthis.currentAnimation?.cancel()\n\t\tconst anim = container.animate(\n\t\t\t[{ transform: container.style.transform }, { transform: 'translate(0,0)' }],\n\t\t\t{\n\t\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t\tthis.currentAnimation = anim\n\t\tanim.finished.then(() => {\n\t\t\tif (container.isConnected) container.style.transform = ''\n\t\t\treturn\n\t\t})\n\n\t\tthis.savePosition()\n\t}\n\n\t// ============================================\n\t// OVERLAY DELEGATION\n\t// ============================================\n\n\tprivate openOverlay() {\n\t\tif (this.#sub) return\n\t\tconst anchor = this.containerRef.value\n\t\tconst wrapper = document.createElement('div')\n\t\twrapper.className = 'flex flex-col'\n\t\tthis.#captured = [...this.slotted]\n\t\tthis.#captured.forEach(node => wrapper.appendChild(node))\n\n\t\tthis.#sub = show(wrapper, {\n\t\t\tanchor: anchor ?? undefined,\n\t\t\tdismissable: true,\n\t\t\thistoryStrategy: 'silent',\n\t\t})\n\t\t\t.pipe(\n\t\t\t\tfinalize(() => this.restoreSlotted()),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\tthis.dispatchScopedEvent('toggle', 'open')\n\t}\n\n\tprivate restoreSlotted() {\n\t\tthis.#captured.forEach(node => this.appendChild(node))\n\t\tthis.#captured = []\n\t\tthis.#sub = undefined\n\t\tif (this.open) this.open = false\n\t\tthis.dispatchScopedEvent('toggle', 'closed')\n\t}\n\n\t// ============================================\n\t// LIFECYCLE\n\t// ============================================\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// One concern: keep the container in place when the environment\n\t\t// shifts. Viewport resize re-validates bounds; a theme bottom-offset\n\t\t// change (e.g. a snackbar pushing the safe area) re-applies position.\n\t\tmerge(\n\t\t\tfromEvent(window, 'resize').pipe(tap(() => this.validateBounds())),\n\t\t\ttheme.bottomOffset$.pipe(tap(() => this.applyContainerPosition())),\n\t\t)\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\tfirstUpdated() {\n\t\tthis.currentCorner = this.corner\n\t\tthis.hasHandle = this.handleNodes.length > 0\n\t\tthis.loadPosition()\n\t\tconst container = this.containerRef.value\n\t\tconst trigger = this.triggerRef.value\n\t\tconst handle = this.handleRef.value\n\t\tif (!container || !trigger || !handle) return\n\t\tthis.applyContainerPosition()\n\n\t\t// Three intents, three sources, one pipeline, one subscribe.\n\t\t//\n\t\t// open$ — a plain click/Enter/Space on the trigger region. No\n\t\t// preventDefault/stopPropagation: a slotted button's own\n\t\t// click still fires; it merely also bubbles to \"open\".\n\t\t// drag$ — pointerdown on the boat-owned drag-handle wrapper. A\n\t\t// dedicated region, so every pointerdown there is a drag\n\t\t// intent — no element-type sniffing. A session ends on\n\t\t// pointerup/cancel; settle = move past threshold ? snap to\n\t\t// the nearest corner : treat as a tap and open.\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(trigger, 'click').pipe(tap(() => this.toggle())),\n\t\t\tfromEvent<KeyboardEvent>(trigger, 'keydown').pipe(\n\t\t\t\tfilter(e => e.key === 'Enter' || e.key === ' '),\n\t\t\t\ttap(e => {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tthis.toggle()\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<PointerEvent>(handle, 'pointerdown').pipe(\n\t\t\t\tfilter(e => e.button === 0),\n\t\t\t\ttap(e => {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\t// Capture can throw InvalidStateError if the pointer is\n\t\t\t\t\t// already released (fast tap) — drag still works without it.\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandle.setPointerCapture(e.pointerId)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// no active pointer to capture; ignore\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\texhaustMap(down => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst offsetX = down.clientX - rect.left\n\t\t\t\t\tconst offsetY = down.clientY - rect.top\n\t\t\t\t\tlet moved = false\n\t\t\t\t\tconst sameId = (e: PointerEvent) => e.pointerId === down.pointerId\n\t\t\t\t\tconst end$ = merge(\n\t\t\t\t\t\tfromEvent<PointerEvent>(window, 'pointerup'),\n\t\t\t\t\t\tfromEvent<PointerEvent>(window, 'pointercancel'),\n\t\t\t\t\t).pipe(filter(sameId))\n\n\t\t\t\t\treturn fromEvent<PointerEvent>(window, 'pointermove').pipe(\n\t\t\t\t\t\tfilter(sameId),\n\t\t\t\t\t\ttap(e => {\n\t\t\t\t\t\t\tconst dx = e.clientX - down.clientX\n\t\t\t\t\t\t\tconst dy = e.clientY - down.clientY\n\t\t\t\t\t\t\tif (!moved && Math.sqrt(dx * dx + dy * dy) > DRAG_THRESHOLD) {\n\t\t\t\t\t\t\t\tmoved = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!moved) return\n\t\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\t\tconst vh = window.innerHeight\n\t\t\t\t\t\t\tconst left = Math.max(0, Math.min(e.clientX - offsetX, vw - rect.width))\n\t\t\t\t\t\t\tconst top = Math.max(0, Math.min(e.clientY - offsetY, vh - rect.height))\n\t\t\t\t\t\t\tthis.position = {\n\t\t\t\t\t\t\t\tx: this.currentCorner.includes('right') ? vw - left - rect.width : left,\n\t\t\t\t\t\t\t\ty: this.currentCorner.includes('bottom') ? vh - top - rect.height : top,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.applyContainerPosition()\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttakeUntil(end$),\n\t\t\t\t\t\tfinalize(() => {\n\t\t\t\t\t\t\tif (moved) this.reorientToNearestCorner()\n\t\t\t\t\t\t\telse this.toggle()\n\t\t\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe()\n\n\t\tthis.#ready = true\n\t\tif (this.open) this.openOverlay()\n\t}\n\n\tprotected willUpdate(changed: PropertyValues<this>) {\n\t\tif (!this.#ready || !changed.has('open')) return\n\t\tif (this.open && !this.#sub) this.openOverlay()\n\t\telse if (!this.open && this.#sub) this.#sub.unsubscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.currentAnimation?.cancel()\n\t\tthis.#sub?.unsubscribe()\n\t}\n\n\t// ============================================\n\t// PUBLIC API\n\t// ============================================\n\n\t/** Flip open ↔ closed. */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\t// ============================================\n\t// RENDER\n\t// ============================================\n\n\tprivate onHandleSlotChange = () => {\n\t\tthis.hasHandle = this.handleNodes.length > 0\n\t}\n\n\tprotected render(): unknown {\n\t\tconst containerClasses = classMap({\n\t\t\t'inline-flex': true,\n\t\t\t'transition-opacity': true,\n\t\t\t'duration-200': true,\n\t\t\t'opacity-85': this.isDragging,\n\t\t\t'scale-95': this.isDragging,\n\t\t})\n\n\t\tconst containerStyles = styleMap({\n\t\t\tposition: 'fixed',\n\t\t\t'pointer-events': 'auto',\n\t\t})\n\n\t\t// Boat-owned drag region — wraps ONLY the drag-handle slot, so every\n\t\t// pointerdown inside it is unambiguously a drag intent. Hidden (and\n\t\t// out of layout) when the consumer slots no handle: the boat is then\n\t\t// simply not draggable.\n\t\tconst handleClasses = classMap({\n\t\t\tflex: true,\n\t\t\t'items-center': true,\n\t\t\t'touch-none': true,\n\t\t\t'select-none': true,\n\t\t\thidden: !this.hasHandle,\n\t\t\t'cursor-grabbing': this.isDragging,\n\t\t\t'cursor-grab': !this.isDragging,\n\t\t})\n\n\t\treturn html`\n\t\t\t<schmancy-surface\n\t\t\t\t${ref(this.containerRef)}\n\t\t\t\ttype=\"glass\"\n\t\t\t\trounded=\"all\"\n\t\t\t\t.elevation=${3}\n\t\t\t\tclass=\"${containerClasses} overflow-hidden rounded-2xl\"\n\t\t\t\tstyle=${containerStyles}\n\t\t\t\taria-expanded=${this.open}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.handleRef)}\n\t\t\t\t\tclass=${handleClasses}\n\t\t\t\t\taria-label=\"Drag to move\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"drag-handle\" @slotchange=${this.onHandleSlotChange}></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.triggerRef)}\n\t\t\t\t\tclass=\"flex items-center cursor-pointer\"\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\taria-label=\"Open panel\"\n\t\t\t\t\ttitle=\"Click to open\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Default-slot content parks here (hidden) while collapsed;\n\t\t\t\t relocated into the show() overlay on open. -->\n\t\t\t\t<div hidden><slot></slot></div>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-boat': SchmancyBoat\n\t}\n}\n"],"mappings":"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"}
@@ -1,31 +1,23 @@
1
- import { t as e, u as t } from "./SchmancyElement-CA0Wqt8m.js";
2
- import "./mixins-Bp0wIHg2.js";
1
+ import { t as e, u as t } from "./SchmancyElement-C3CpdNsi.js";
2
+ import "./mixins-DTzfFVyv.js";
3
3
  import { d as n } from "./animation-DCznELuT.js";
4
4
  import { t as r } from "./reduced-motion-D-L12p7G.js";
5
- import { n as i } from "./theme.service-hc4N-1Oz.js";
6
- import { o as a } from "./overlay.service-DTE6NwIM.js";
7
- import { filter as o, finalize as s, fromEvent as c, map as l, merge as u, switchMap as d, takeUntil as f, tap as p } from "rxjs";
8
- import { classMap as m } from "lit/directives/class-map.js";
9
- import { styleMap as h } from "lit/directives/style-map.js";
10
- import { customElement as g, property as _, queryAssignedElements as v, state as y } from "lit/decorators.js";
11
- import { css as b, html as x } from "lit";
12
- import { createRef as S, ref as C } from "lit/directives/ref.js";
13
- var w = "schmancy-boat-", T = class extends e {
5
+ import { n as i } from "./theme.service-BfTK1Wtl.js";
6
+ import { o as a } from "./overlay.service-C46kOtUi.js";
7
+ import { exhaustMap as o, filter as s, finalize as c, fromEvent as l, merge as u, takeUntil as d, tap as f } from "rxjs";
8
+ import { classMap as p } from "lit/directives/class-map.js";
9
+ import { styleMap as m } from "lit/directives/style-map.js";
10
+ import { customElement as h, property as g, queryAssignedElements as _, state as v } from "lit/decorators.js";
11
+ import { html as y } from "lit";
12
+ import { createRef as b, ref as x } from "lit/directives/ref.js";
13
+ var S = "schmancy-boat-", C = class extends e {
14
14
  constructor(...e) {
15
- super(...e), this.id = "default", this.corner = "bottom-right", this.open = !1, this.isDragging = !1, this.currentCorner = "bottom-right", this.position = {
15
+ super(...e), this.id = "default", this.corner = "bottom-right", this.open = !1, this.isDragging = !1, this.currentCorner = "bottom-right", this.hasHandle = !1, this.position = {
16
16
  x: 16,
17
17
  y: 16
18
- }, this.containerRef = S(), this.headerRef = S(), this.#e = !1, this.#n = [];
19
- }
20
- static {
21
- this.styles = [b`
22
- :host {
23
- display: contents;
24
- }
25
- :host([hidden]) {
26
- display: none !important;
27
- }
28
- `];
18
+ }, this.containerRef = b(), this.triggerRef = b(), this.handleRef = b(), this.#e = !1, this.#n = [], this.onHandleSlotChange = () => {
19
+ this.hasHandle = this.handleNodes.length > 0;
20
+ };
29
21
  }
30
22
  #e;
31
23
  #t;
@@ -39,7 +31,7 @@ var w = "schmancy-boat-", T = class extends e {
39
31
  }
40
32
  loadPosition() {
41
33
  try {
42
- let e = localStorage.getItem(w + this.id);
34
+ let e = localStorage.getItem(S + this.id);
43
35
  if (e) {
44
36
  let t = JSON.parse(e);
45
37
  this.position = {
@@ -51,7 +43,7 @@ var w = "schmancy-boat-", T = class extends e {
51
43
  }
52
44
  savePosition() {
53
45
  try {
54
- localStorage.setItem(w + this.id, JSON.stringify({
46
+ localStorage.setItem(S + this.id, JSON.stringify({
55
47
  ...this.position,
56
48
  anchor: this.currentCorner
57
49
  }));
@@ -87,37 +79,6 @@ var w = "schmancy-boat-", T = class extends e {
87
79
  e.isConnected && (e.style.transform = "");
88
80
  }), this.savePosition();
89
81
  }
90
- setupDrag() {
91
- let e = this.headerRef.value, t = this.containerRef.value;
92
- if (!e || !t) return;
93
- let n = !1;
94
- c(e, "pointerdown").pipe(o((e) => e.button === 0), p((t) => {
95
- t.preventDefault(), t.stopPropagation(), e.setPointerCapture(t.pointerId);
96
- }), l((e) => {
97
- let r = t.getBoundingClientRect();
98
- return n = !1, {
99
- pointerId: e.pointerId,
100
- startX: e.clientX,
101
- startY: e.clientY,
102
- offsetX: e.clientX - r.left,
103
- offsetY: e.clientY - r.top,
104
- rect: r
105
- };
106
- }), d(({ pointerId: e, startX: t, startY: r, offsetX: i, offsetY: a, rect: l }) => {
107
- let d = (t) => t.pointerId === e, m = c(window, "pointermove").pipe(o(d)), h = u(c(window, "pointerup"), c(window, "pointercancel")).pipe(o(d));
108
- return m.pipe(p(({ clientX: e, clientY: o }) => {
109
- let s = e - t, c = o - r;
110
- if (Math.sqrt(s * s + c * c) > 5 && !n && (n = !0, this.isDragging = !0), !n) return;
111
- let u = window.innerWidth, d = window.innerHeight, f = Math.max(0, Math.min(e - i, u - l.width)), p = Math.max(0, Math.min(o - a, d - l.height));
112
- this.position = {
113
- x: this.currentCorner.includes("right") ? u - f - l.width : f,
114
- y: this.currentCorner.includes("bottom") ? d - p - l.height : p
115
- }, this.applyContainerPosition();
116
- }), f(h), s(() => {
117
- n ? (this.reorientToNearestCorner(), this.isDragging = !1, n = !1) : (this.isDragging = !1, n = !1, this.toggle());
118
- }));
119
- }), f(this.disconnecting)).subscribe();
120
- }
121
82
  openOverlay() {
122
83
  if (this.#t) return;
123
84
  let e = this.containerRef.value, t = document.createElement("div");
@@ -125,16 +86,38 @@ var w = "schmancy-boat-", T = class extends e {
125
86
  anchor: e ?? void 0,
126
87
  dismissable: !0,
127
88
  historyStrategy: "silent"
128
- }).pipe(s(() => this.restoreSlotted()), f(this.disconnecting)).subscribe(), this.dispatchScopedEvent("toggle", "open");
89
+ }).pipe(c(() => this.restoreSlotted()), d(this.disconnecting)).subscribe(), this.dispatchScopedEvent("toggle", "open");
129
90
  }
130
91
  restoreSlotted() {
131
92
  this.#n.forEach((e) => this.appendChild(e)), this.#n = [], this.#t = void 0, this.open &&= !1, this.dispatchScopedEvent("toggle", "closed");
132
93
  }
133
94
  connectedCallback() {
134
- super.connectedCallback(), c(window, "resize").pipe(f(this.disconnecting)).subscribe(() => this.validateBounds()), i.bottomOffset$.pipe(p(() => this.applyContainerPosition()), f(this.disconnecting)).subscribe();
95
+ super.connectedCallback(), u(l(window, "resize").pipe(f(() => this.validateBounds())), i.bottomOffset$.pipe(f(() => this.applyContainerPosition()))).pipe(d(this.disconnecting)).subscribe();
135
96
  }
136
97
  firstUpdated() {
137
- this.currentCorner = this.corner, this.loadPosition(), this.containerRef.value && (this.applyContainerPosition(), this.setupDrag(), this.#e = !0, this.open && this.openOverlay());
98
+ this.currentCorner = this.corner, this.hasHandle = this.handleNodes.length > 0, this.loadPosition();
99
+ let e = this.containerRef.value, t = this.triggerRef.value, n = this.handleRef.value;
100
+ e && t && n && (this.applyContainerPosition(), u(l(t, "click").pipe(f(() => this.toggle())), l(t, "keydown").pipe(s((e) => e.key === "Enter" || e.key === " "), f((e) => {
101
+ e.preventDefault(), this.toggle();
102
+ })), l(n, "pointerdown").pipe(s((e) => e.button === 0), f((e) => {
103
+ e.preventDefault();
104
+ try {
105
+ n.setPointerCapture(e.pointerId);
106
+ } catch {}
107
+ }), o((t) => {
108
+ let n = e.getBoundingClientRect(), r = t.clientX - n.left, i = t.clientY - n.top, a = !1, o = (e) => e.pointerId === t.pointerId, p = u(l(window, "pointerup"), l(window, "pointercancel")).pipe(s(o));
109
+ return l(window, "pointermove").pipe(s(o), f((e) => {
110
+ let o = e.clientX - t.clientX, s = e.clientY - t.clientY;
111
+ if (!a && Math.sqrt(o * o + s * s) > 5 && (a = !0, this.isDragging = !0), !a) return;
112
+ let c = window.innerWidth, l = window.innerHeight, u = Math.max(0, Math.min(e.clientX - r, c - n.width)), d = Math.max(0, Math.min(e.clientY - i, l - n.height));
113
+ this.position = {
114
+ x: this.currentCorner.includes("right") ? c - u - n.width : u,
115
+ y: this.currentCorner.includes("bottom") ? l - d - n.height : d
116
+ }, this.applyContainerPosition();
117
+ }), d(p), c(() => {
118
+ a ? this.reorientToNearestCorner() : this.toggle(), this.isDragging = !1;
119
+ }));
120
+ }))).pipe(d(this.disconnecting)).subscribe(), this.#e = !0, this.open && this.openOverlay());
138
121
  }
139
122
  willUpdate(e) {
140
123
  this.#e && e.has("open") && (this.open && !this.#t ? this.openOverlay() : !this.open && this.#t && this.#t.unsubscribe());
@@ -146,50 +129,51 @@ var w = "schmancy-boat-", T = class extends e {
146
129
  this.open = !this.open;
147
130
  }
148
131
  render() {
149
- let e = m({
132
+ let e = p({
150
133
  "inline-flex": !0,
151
- "rounded-full": !0,
152
- "overflow-hidden": !0,
153
134
  "transition-opacity": !0,
154
135
  "duration-200": !0,
155
136
  "opacity-85": this.isDragging,
156
137
  "scale-95": this.isDragging
157
- }), t = h({
138
+ }), t = m({
158
139
  position: "fixed",
159
140
  "pointer-events": "auto"
160
- }), n = m({
161
- "h-14": !0,
162
- "min-w-14": !0,
163
- "px-4": !0,
164
- "rounded-full": !0,
141
+ }), n = p({
165
142
  flex: !0,
166
143
  "items-center": !0,
167
- "justify-center": !0,
168
- "gap-3": !0,
169
- "select-none": !0,
170
144
  "touch-none": !0,
145
+ "select-none": !0,
146
+ hidden: !this.hasHandle,
171
147
  "cursor-grabbing": this.isDragging,
172
- "cursor-pointer": !this.isDragging
148
+ "cursor-grab": !this.isDragging
173
149
  });
174
- return x`
150
+ return y`
175
151
  <schmancy-surface
176
- ${C(this.containerRef)}
152
+ ${x(this.containerRef)}
177
153
  type="glass"
154
+ rounded="all"
178
155
  .elevation=${3}
179
- class=${e}
156
+ class="${e} overflow-hidden rounded-2xl"
180
157
  style=${t}
181
158
  aria-expanded=${this.open}
182
159
  >
183
160
  <div
184
- ${C(this.headerRef)}
161
+ ${x(this.handleRef)}
185
162
  class=${n}
163
+ aria-label="Drag to move"
164
+ >
165
+ <slot name="drag-handle" @slotchange=${this.onHandleSlotChange}></slot>
166
+ </div>
167
+
168
+ <div
169
+ ${x(this.triggerRef)}
170
+ class="flex items-center cursor-pointer"
186
171
  role="button"
187
172
  tabindex="0"
188
173
  aria-label="Open panel"
189
- title="Drag to move · click to open"
174
+ title="Click to open"
190
175
  >
191
- <slot name="header"></slot>
192
- <slot name="summary"></slot>
176
+ <slot name="trigger"></slot>
193
177
  </div>
194
178
 
195
179
  <!-- Default-slot content parks here (hidden) while collapsed;
@@ -199,9 +183,9 @@ var w = "schmancy-boat-", T = class extends e {
199
183
  `;
200
184
  }
201
185
  };
202
- t([_({ type: String })], T.prototype, "id", void 0), t([_({ type: String })], T.prototype, "corner", void 0), t([_({
186
+ t([g({ type: String })], C.prototype, "id", void 0), t([g({ type: String })], C.prototype, "corner", void 0), t([g({
203
187
  type: Boolean,
204
188
  reflect: !0
205
- })], T.prototype, "open", void 0), t([y()], T.prototype, "isDragging", void 0), t([y()], T.prototype, "currentCorner", void 0), t([v()], T.prototype, "slotted", void 0);
206
- var E = T = t([g("schmancy-boat")], T);
207
- export { E as t };
189
+ })], C.prototype, "open", void 0), t([v()], C.prototype, "isDragging", void 0), t([v()], C.prototype, "currentCorner", void 0), t([v()], C.prototype, "hasHandle", void 0), t([_()], C.prototype, "slotted", void 0), t([_({ slot: "drag-handle" })], C.prototype, "handleNodes", void 0);
190
+ var w = C = t([h("schmancy-boat")], C);
191
+ export { w as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boat-_N1x5U_3.js","names":["#sub","#captured","#ready"],"sources":["../src/boat/boat.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html, type PropertyValues } from 'lit'\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { exhaustMap, filter, finalize, fromEvent, merge, type Subscription, takeUntil, tap } from 'rxjs'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport { show } from '../overlay/overlay.service'\nimport { theme } from '../theme/theme.service.js'\nimport { SPRING_SMOOTH } from '../utils/animation.js'\n\nconst DRAG_THRESHOLD = 5\nconst POSITION_STORAGE_KEY_PREFIX = 'schmancy-boat-'\n\ntype Corner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\ninterface Position {\n\tx: number\n\ty: number\n}\n\n/**\n * Corner-anchored launcher that delegates its expanded panel to the `show()`\n * overlay service.\n *\n * Three slots, three non-overlapping intents — no element-type sniffing,\n * ever:\n *\n * - `trigger` — pure consumer content. A native click anywhere on it\n * opens the panel; interactive children (buttons, FABs, inputs) work\n * with zero special-casing because the boat never calls\n * `preventDefault` / `stopPropagation` / `setPointerCapture` here.\n * - `drag-handle` — opt-in. Pointer-drag is wired ONLY to this slot's\n * boat-owned wrapper. Slot it to make the boat draggable; omit it and\n * the boat is static at its corner. (A no-move tap on the handle also\n * opens, so the grip doubles as a launcher.)\n * - _(default)_ — the panel body; parked hidden while collapsed,\n * relocated into the `show()` overlay on open.\n *\n * The boat owns drag, corner-snapping, position persistence and the glass\n * surface — never the collapsed shape.\n */\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends SchmancyElement {\n\n\n\t/** Identity for localStorage drag-position persistence. */\n\t@property({ type: String }) id: string = 'default'\n\t/** Corner the launcher is anchored to. */\n\t@property({ type: String }) corner: Corner = 'bottom-right'\n\t/** Open state. Bind `?open=${…}` to drive the overlay; reflected to the attribute. */\n\t@property({ type: Boolean, reflect: true }) open: boolean = false\n\n\t@state() private isDragging = false\n\t@state() private currentCorner: Corner = 'bottom-right'\n\t@state() private hasHandle = false\n\n\t/** Default-slot nodes — the overlay body. */\n\t@queryAssignedElements() private slotted!: Element[]\n\t/** Slotted drag-handle nodes — presence toggles draggability. */\n\t@queryAssignedElements({ slot: 'drag-handle' }) private handleNodes!: Element[]\n\n\tprivate position: Position = { x: 16, y: 16 }\n\tprivate containerRef = createRef<HTMLElement>()\n\tprivate triggerRef = createRef<HTMLElement>()\n\tprivate handleRef = createRef<HTMLElement>()\n\tprivate currentAnimation?: Animation\n\n\t#ready = false\n\t#sub?: Subscription\n\t#captured: Element[] = []\n\n\t// ============================================\n\t// POSITION MANAGEMENT\n\t// ============================================\n\n\tprivate applyContainerPosition() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\t\tcontainer.style.removeProperty('left')\n\t\tcontainer.style.removeProperty('right')\n\t\tcontainer.style.removeProperty('top')\n\t\tcontainer.style.removeProperty('bottom')\n\t\tconst { x, y } = this.position\n\t\tif (this.currentCorner.includes('right')) {\n\t\t\tcontainer.style.right = `${x}px`\n\t\t} else {\n\t\t\tcontainer.style.left = `${x}px`\n\t\t}\n\t\tif (this.currentCorner.includes('bottom')) {\n\t\t\tcontainer.style.bottom = `${y + theme.bottomOffset}px`\n\t\t} else {\n\t\t\tcontainer.style.top = `${y}px`\n\t\t}\n\t}\n\n\tprivate loadPosition() {\n\t\ttry {\n\t\t\tconst saved = localStorage.getItem(POSITION_STORAGE_KEY_PREFIX + this.id)\n\t\t\tif (saved) {\n\t\t\t\tconst parsed = JSON.parse(saved) as { x: number; y: number; anchor: Corner }\n\t\t\t\tthis.position = { x: parsed.x, y: parsed.y }\n\t\t\t\tthis.currentCorner = parsed.anchor\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore localStorage errors\n\t\t}\n\t}\n\n\tprivate savePosition() {\n\t\ttry {\n\t\t\tlocalStorage.setItem(\n\t\t\t\tPOSITION_STORAGE_KEY_PREFIX + this.id,\n\t\t\t\tJSON.stringify({ ...this.position, anchor: this.currentCorner }),\n\t\t\t)\n\t\t} catch {\n\t\t\t// ignore localStorage errors\n\t\t}\n\t}\n\n\tprivate validateBounds() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\t\tconst rect = container.getBoundingClientRect()\n\t\tif (rect.width === 0) return\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\t\tconst isRight = this.currentCorner.includes('right')\n\t\tconst isBottom = this.currentCorner.includes('bottom')\n\t\tconst actualLeft = isRight ? vw - this.position.x - rect.width : this.position.x\n\t\tconst actualTop = isBottom ? vh - this.position.y - rect.height : this.position.y\n\t\tconst newLeft = Math.max(0, Math.min(actualLeft, vw - rect.width))\n\t\tconst newTop = Math.max(0, Math.min(actualTop, vh - rect.height))\n\t\tthis.position = {\n\t\t\tx: isRight ? vw - newLeft - rect.width : newLeft,\n\t\t\ty: isBottom ? vh - newTop - rect.height : newTop,\n\t\t}\n\t\tthis.applyContainerPosition()\n\t}\n\n\t// ============================================\n\t// CORNER SNAPPING (FLIP)\n\t// ============================================\n\n\tprivate reorientToNearestCorner(): void {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst fabCenterX = rect.left + rect.width / 2\n\t\tconst fabCenterY = rect.top + rect.height / 2\n\t\tconst side = fabCenterX > window.innerWidth / 2 ? 'right' : 'left'\n\t\tconst vert = fabCenterY > window.innerHeight / 2 ? 'bottom' : 'top'\n\t\tthis.currentCorner = `${vert}-${side}` as Corner\n\t\tthis.position = { x: 16, y: 16 }\n\t\tthis.applyContainerPosition()\n\n\t\tif (reducedMotion$.value) {\n\t\t\tthis.savePosition()\n\t\t\treturn\n\t\t}\n\n\t\tconst newRect = container.getBoundingClientRect()\n\t\tconst dx = rect.left - newRect.left\n\t\tconst dy = rect.top - newRect.top\n\t\tcontainer.style.transform = `translate(${dx}px, ${dy}px)`\n\n\t\tthis.currentAnimation?.cancel()\n\t\tconst anim = container.animate(\n\t\t\t[{ transform: container.style.transform }, { transform: 'translate(0,0)' }],\n\t\t\t{\n\t\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t\tthis.currentAnimation = anim\n\t\tanim.finished.then(() => {\n\t\t\tif (container.isConnected) container.style.transform = ''\n\t\t\treturn\n\t\t})\n\n\t\tthis.savePosition()\n\t}\n\n\t// ============================================\n\t// OVERLAY DELEGATION\n\t// ============================================\n\n\tprivate openOverlay() {\n\t\tif (this.#sub) return\n\t\tconst anchor = this.containerRef.value\n\t\tconst wrapper = document.createElement('div')\n\t\twrapper.className = 'flex flex-col'\n\t\tthis.#captured = [...this.slotted]\n\t\tthis.#captured.forEach(node => wrapper.appendChild(node))\n\n\t\tthis.#sub = show(wrapper, {\n\t\t\tanchor: anchor ?? undefined,\n\t\t\tdismissable: true,\n\t\t\thistoryStrategy: 'silent',\n\t\t})\n\t\t\t.pipe(\n\t\t\t\tfinalize(() => this.restoreSlotted()),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\tthis.dispatchScopedEvent('toggle', 'open')\n\t}\n\n\tprivate restoreSlotted() {\n\t\tthis.#captured.forEach(node => this.appendChild(node))\n\t\tthis.#captured = []\n\t\tthis.#sub = undefined\n\t\tif (this.open) this.open = false\n\t\tthis.dispatchScopedEvent('toggle', 'closed')\n\t}\n\n\t// ============================================\n\t// LIFECYCLE\n\t// ============================================\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// One concern: keep the container in place when the environment\n\t\t// shifts. Viewport resize re-validates bounds; a theme bottom-offset\n\t\t// change (e.g. a snackbar pushing the safe area) re-applies position.\n\t\tmerge(\n\t\t\tfromEvent(window, 'resize').pipe(tap(() => this.validateBounds())),\n\t\t\ttheme.bottomOffset$.pipe(tap(() => this.applyContainerPosition())),\n\t\t)\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\tfirstUpdated() {\n\t\tthis.currentCorner = this.corner\n\t\tthis.hasHandle = this.handleNodes.length > 0\n\t\tthis.loadPosition()\n\t\tconst container = this.containerRef.value\n\t\tconst trigger = this.triggerRef.value\n\t\tconst handle = this.handleRef.value\n\t\tif (!container || !trigger || !handle) return\n\t\tthis.applyContainerPosition()\n\n\t\t// Three intents, three sources, one pipeline, one subscribe.\n\t\t//\n\t\t// open$ — a plain click/Enter/Space on the trigger region. No\n\t\t// preventDefault/stopPropagation: a slotted button's own\n\t\t// click still fires; it merely also bubbles to \"open\".\n\t\t// drag$ — pointerdown on the boat-owned drag-handle wrapper. A\n\t\t// dedicated region, so every pointerdown there is a drag\n\t\t// intent — no element-type sniffing. A session ends on\n\t\t// pointerup/cancel; settle = move past threshold ? snap to\n\t\t// the nearest corner : treat as a tap and open.\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(trigger, 'click').pipe(tap(() => this.toggle())),\n\t\t\tfromEvent<KeyboardEvent>(trigger, 'keydown').pipe(\n\t\t\t\tfilter(e => e.key === 'Enter' || e.key === ' '),\n\t\t\t\ttap(e => {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tthis.toggle()\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<PointerEvent>(handle, 'pointerdown').pipe(\n\t\t\t\tfilter(e => e.button === 0),\n\t\t\t\ttap(e => {\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\t// Capture can throw InvalidStateError if the pointer is\n\t\t\t\t\t// already released (fast tap) — drag still works without it.\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandle.setPointerCapture(e.pointerId)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// no active pointer to capture; ignore\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\texhaustMap(down => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst offsetX = down.clientX - rect.left\n\t\t\t\t\tconst offsetY = down.clientY - rect.top\n\t\t\t\t\tlet moved = false\n\t\t\t\t\tconst sameId = (e: PointerEvent) => e.pointerId === down.pointerId\n\t\t\t\t\tconst end$ = merge(\n\t\t\t\t\t\tfromEvent<PointerEvent>(window, 'pointerup'),\n\t\t\t\t\t\tfromEvent<PointerEvent>(window, 'pointercancel'),\n\t\t\t\t\t).pipe(filter(sameId))\n\n\t\t\t\t\treturn fromEvent<PointerEvent>(window, 'pointermove').pipe(\n\t\t\t\t\t\tfilter(sameId),\n\t\t\t\t\t\ttap(e => {\n\t\t\t\t\t\t\tconst dx = e.clientX - down.clientX\n\t\t\t\t\t\t\tconst dy = e.clientY - down.clientY\n\t\t\t\t\t\t\tif (!moved && Math.sqrt(dx * dx + dy * dy) > DRAG_THRESHOLD) {\n\t\t\t\t\t\t\t\tmoved = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!moved) return\n\t\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\t\tconst vh = window.innerHeight\n\t\t\t\t\t\t\tconst left = Math.max(0, Math.min(e.clientX - offsetX, vw - rect.width))\n\t\t\t\t\t\t\tconst top = Math.max(0, Math.min(e.clientY - offsetY, vh - rect.height))\n\t\t\t\t\t\t\tthis.position = {\n\t\t\t\t\t\t\t\tx: this.currentCorner.includes('right') ? vw - left - rect.width : left,\n\t\t\t\t\t\t\t\ty: this.currentCorner.includes('bottom') ? vh - top - rect.height : top,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.applyContainerPosition()\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttakeUntil(end$),\n\t\t\t\t\t\tfinalize(() => {\n\t\t\t\t\t\t\tif (moved) this.reorientToNearestCorner()\n\t\t\t\t\t\t\telse this.toggle()\n\t\t\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe()\n\n\t\tthis.#ready = true\n\t\tif (this.open) this.openOverlay()\n\t}\n\n\tprotected willUpdate(changed: PropertyValues<this>) {\n\t\tif (!this.#ready || !changed.has('open')) return\n\t\tif (this.open && !this.#sub) this.openOverlay()\n\t\telse if (!this.open && this.#sub) this.#sub.unsubscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.currentAnimation?.cancel()\n\t\tthis.#sub?.unsubscribe()\n\t}\n\n\t// ============================================\n\t// PUBLIC API\n\t// ============================================\n\n\t/** Flip open ↔ closed. */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\t// ============================================\n\t// RENDER\n\t// ============================================\n\n\tprivate onHandleSlotChange = () => {\n\t\tthis.hasHandle = this.handleNodes.length > 0\n\t}\n\n\tprotected render(): unknown {\n\t\tconst containerClasses = classMap({\n\t\t\t'inline-flex': true,\n\t\t\t'transition-opacity': true,\n\t\t\t'duration-200': true,\n\t\t\t'opacity-85': this.isDragging,\n\t\t\t'scale-95': this.isDragging,\n\t\t})\n\n\t\tconst containerStyles = styleMap({\n\t\t\tposition: 'fixed',\n\t\t\t'pointer-events': 'auto',\n\t\t})\n\n\t\t// Boat-owned drag region — wraps ONLY the drag-handle slot, so every\n\t\t// pointerdown inside it is unambiguously a drag intent. Hidden (and\n\t\t// out of layout) when the consumer slots no handle: the boat is then\n\t\t// simply not draggable.\n\t\tconst handleClasses = classMap({\n\t\t\tflex: true,\n\t\t\t'items-center': true,\n\t\t\t'touch-none': true,\n\t\t\t'select-none': true,\n\t\t\thidden: !this.hasHandle,\n\t\t\t'cursor-grabbing': this.isDragging,\n\t\t\t'cursor-grab': !this.isDragging,\n\t\t})\n\n\t\treturn html`\n\t\t\t<schmancy-surface\n\t\t\t\t${ref(this.containerRef)}\n\t\t\t\ttype=\"glass\"\n\t\t\t\trounded=\"all\"\n\t\t\t\t.elevation=${3}\n\t\t\t\tclass=\"${containerClasses} overflow-hidden rounded-2xl\"\n\t\t\t\tstyle=${containerStyles}\n\t\t\t\taria-expanded=${this.open}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.handleRef)}\n\t\t\t\t\tclass=${handleClasses}\n\t\t\t\t\taria-label=\"Drag to move\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"drag-handle\" @slotchange=${this.onHandleSlotChange}></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.triggerRef)}\n\t\t\t\t\tclass=\"flex items-center cursor-pointer\"\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\taria-label=\"Open panel\"\n\t\t\t\t\ttitle=\"Click to open\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Default-slot content parks here (hidden) while collapsed;\n\t\t\t\t relocated into the show() overlay on open. -->\n\t\t\t\t<div hidden><slot></slot></div>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-boat': SchmancyBoat\n\t}\n}\n"],"mappings":";;;;;;;;;;;;AAYA,IACM,IAA8B,kBA8BrB,IAAA,cAA2B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,KAIA,WAAA,KAAA,SAEI,gBAAA,KAAA,OAAA,CAEe,GAAA,KAAA,aAAA,CAE9B,GAAA,KAAA,gBACW,gBAAA,KAAA,YAAA,CACZ,GAAA,KAAA,WAOA;GAAE,GAAG;GAAI,GAAG;EAAA,GAAA,KAAA,eAClB,EAAA,GAAA,KAAA,aACF,EAAA,GAAA,KAAA,YACD,EAAA,GAAA,KAAA,KAAA,CAGX,GAAA,KAAA,KAEc,CAAA,GAAA,KAAA,2BAAA;GA0RtB,KAAK,YAAY,KAAK,YAAY,SAAS;EAAA;CAAA;CA5R5C;CACA;CACA;CAMA,yBAAA;EACC,IAAM,IAAY,KAAK,aAAa;EACpC,IAAA,CAAK,GAAW;EAChB,EAAU,MAAM,eAAe,MAAA,GAC/B,EAAU,MAAM,eAAe,OAAA,GAC/B,EAAU,MAAM,eAAe,KAAA,GAC/B,EAAU,MAAM,eAAe,QAAA;EAC/B,IAAA,EAAM,GAAE,GAAA,GAAG,MAAM,KAAK;EAClB,KAAK,cAAc,SAAS,OAAA,IAC/B,EAAU,MAAM,QAAQ,GAAG,EAAA,MAE3B,EAAU,MAAM,OAAO,GAAG,EAAA,KAEvB,KAAK,cAAc,SAAS,QAAA,IAC/B,EAAU,MAAM,SAAS,GAAG,IAAI,EAAM,aAAA,MAEtC,EAAU,MAAM,MAAM,GAAG,EAAA;CAE3B;CAEA,eAAA;EACC,IAAA;GACC,IAAM,IAAQ,aAAa,QAAQ,IAA8B,KAAK,EAAA;GACtE,IAAI,GAAO;IACV,IAAM,IAAS,KAAK,MAAM,CAAA;IAC1B,KAAK,WAAW;KAAE,GAAG,EAAO;KAAG,GAAG,EAAO;IAAA,GACzC,KAAK,gBAAgB,EAAO;GAC7B;EACD,QAAA,CAEA;CACD;CAEA,eAAA;EACC,IAAA;GACC,aAAa,QACZ,IAA8B,KAAK,IACnC,KAAK,UAAU;IAAA,GAAK,KAAK;IAAU,QAAQ,KAAK;GAAA,CAAA,CAAA;EAElD,QAAA,CAEA;CACD;CAEA,iBAAA;EACC,IAAM,IAAY,KAAK,aAAa;EACpC,IAAA,CAAK,GAAW;EAChB,IAAM,IAAO,EAAU,sBAAA;EACvB,IAAI,EAAK,UAAU,GAAG;EACtB,IAAM,IAAK,OAAO,YACZ,IAAK,OAAO,aACZ,IAAU,KAAK,cAAc,SAAS,OAAA,GACtC,IAAW,KAAK,cAAc,SAAS,QAAA,GACvC,IAAa,IAAU,IAAK,KAAK,SAAS,IAAI,EAAK,QAAQ,KAAK,SAAS,GACzE,IAAY,IAAW,IAAK,KAAK,SAAS,IAAI,EAAK,SAAS,KAAK,SAAS,GAC1E,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAY,IAAK,EAAK,KAAA,CAAA,GACrD,IAAS,KAAK,IAAI,GAAG,KAAK,IAAI,GAAW,IAAK,EAAK,MAAA,CAAA;EACzD,KAAK,WAAW;GACf,GAAG,IAAU,IAAK,IAAU,EAAK,QAAQ;GACzC,GAAG,IAAW,IAAK,IAAS,EAAK,SAAS;EAAA,GAE3C,KAAK,uBAAA;CACN;CAMA,0BAAA;EACC,IAAM,IAAY,KAAK,aAAa;EACpC,IAAA,CAAK,GAAW;EAEhB,IAAM,IAAO,EAAU,sBAAA,GACjB,IAAa,EAAK,OAAO,EAAK,QAAQ,GACtC,IAAa,EAAK,MAAM,EAAK,SAAS,GACtC,IAAO,IAAa,OAAO,aAAa,IAAI,UAAU,QACtD,IAAO,IAAa,OAAO,cAAc,IAAI,WAAW;EAK9D,IAJA,KAAK,gBAAgB,GAAG,EAAA,GAAQ,KAChC,KAAK,WAAW;GAAE,GAAG;GAAI,GAAG;EAAA,GAC5B,KAAK,uBAAA,GAED,EAAe,OAElB,OAAA,KADA,KAAK,aAAA;EAIN,IAAM,IAAU,EAAU,sBAAA,GACpB,IAAK,EAAK,OAAO,EAAQ,MACzB,IAAK,EAAK,MAAM,EAAQ;EAC9B,EAAU,MAAM,YAAY,aAAa,EAAA,MAAS,EAAA,MAElD,KAAK,kBAAkB,OAAA;EACvB,IAAM,IAAO,EAAU,QACtB,CAAC,EAAE,WAAW,EAAU,MAAM,UAAA,GAAa,EAAE,WAAW,iBAAA,CAAA,GACxD;GACC,UAAU,EAAc;GACxB,QAAQ,EAAc;GACtB,MAAM;EAAA,CAAA;EAGR,KAAK,mBAAmB,GACxB,EAAK,SAAS,WAAA;GACT,EAAU,gBAAa,EAAU,MAAM,YAAY;EAAA,CAAA,GAIxD,KAAK,aAAA;CACN;CAMA,cAAA;EACC,IAAI,KAAA,IAAW;EACf,IAAM,IAAS,KAAK,aAAa,OAC3B,IAAU,SAAS,cAAc,KAAA;EACvC,EAAQ,YAAY,iBACpB,KAAA,KAAiB,CAAA,GAAI,KAAK,OAAA,GAC1B,KAAA,GAAe,SAAQ,MAAQ,EAAQ,YAAY,CAAA,CAAA,GAEnD,KAAA,KAAY,EAAK,GAAS;GACzB,QAAQ,KAAA,KAAU;GAClB,aAAA,CAAa;GACb,iBAAiB;EAAA,CAAA,EAEhB,KACA,QAAe,KAAK,eAAA,CAAA,GACpB,EAAU,KAAK,aAAA,CAAA,EAEf,UAAA,GAEF,KAAK,oBAAoB,UAAU,MAAA;CACpC;CAEA,iBAAA;EACC,KAAA,GAAe,SAAQ,MAAQ,KAAK,YAAY,CAAA,CAAA,GAChD,KAAA,KAAiB,CAAA,GACjB,KAAA,KAAKA,KAAO,GACR,AAAW,KAAK,SAAA,CAAO,GAC3B,KAAK,oBAAoB,UAAU,QAAA;CACpC;CAMA,oBAAA;EACC,MAAM,kBAAA,GAKN,EACC,EAAU,QAAQ,QAAA,EAAU,KAAK,QAAU,KAAK,eAAA,CAAA,CAAA,GAChD,EAAM,cAAc,KAAK,QAAU,KAAK,uBAAA,CAAA,CAAA,CAAA,EAEvC,KAAK,EAAU,KAAK,aAAA,CAAA,EACpB,UAAA;CACH;CAEA,eAAA;EACC,KAAK,gBAAgB,KAAK,QAC1B,KAAK,YAAY,KAAK,YAAY,SAAS,GAC3C,KAAK,aAAA;EACL,IAAM,IAAY,KAAK,aAAa,OAC9B,IAAU,KAAK,WAAW,OAC1B,IAAS,KAAK,UAAU;EACzB,KAAc,KAAY,MAC/B,KAAK,uBAAA,GAYL,EACC,EAAsB,GAAS,OAAA,EAAS,KAAK,QAAU,KAAK,OAAA,CAAA,CAAA,GAC5D,EAAyB,GAAS,SAAA,EAAW,KAC5C,GAAO,MAAK,EAAE,QAAQ,WAAW,EAAE,QAAQ,GAAR,GACnC,GAAI,MAAA;GACH,EAAE,eAAA,GACF,KAAK,OAAA;EAAA,CAAA,CAAA,GAGP,EAAwB,GAAQ,aAAA,EAAe,KAC9C,GAAO,MAAK,EAAE,WAAW,CAAX,GACd,GAAI,MAAA;GACH,EAAE,eAAA;GAGF,IAAA;IACC,EAAO,kBAAkB,EAAE,SAAA;GAC5B,QAAA,CAEA;EAAA,CAAA,GAED,GAAW,MAAA;GACV,IAAM,IAAO,EAAU,sBAAA,GACjB,IAAU,EAAK,UAAU,EAAK,MAC9B,IAAU,EAAK,UAAU,EAAK,KAChC,IAAA,CAAQ,GACN,KAAU,MAAoB,EAAE,cAAc,EAAK,WACnD,IAAO,EACZ,EAAwB,QAAQ,WAAA,GAChC,EAAwB,QAAQ,eAAA,CAAA,EAC/B,KAAK,EAAO,CAAA,CAAA;GAEd,OAAO,EAAwB,QAAQ,aAAA,EAAe,KACrD,EAAO,CAAA,GACP,GAAI,MAAA;IACH,IAAM,IAAK,EAAE,UAAU,EAAK,SACtB,IAAK,EAAE,UAAU,EAAK;IAK5B,IAAA,CAJK,KAAS,KAAK,KAAK,IAAK,IAAK,IAAK,CAAA,IA1RvB,MA2Rf,IAAA,CAAQ,GACR,KAAK,aAAA,CAAa,IAAA,CAEd,GAAO;IACZ,IAAM,IAAK,OAAO,YACZ,IAAK,OAAO,aACZ,IAAO,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,UAAU,GAAS,IAAK,EAAK,KAAA,CAAA,GAC3D,IAAM,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,UAAU,GAAS,IAAK,EAAK,MAAA,CAAA;IAChE,KAAK,WAAW;KACf,GAAG,KAAK,cAAc,SAAS,OAAA,IAAW,IAAK,IAAO,EAAK,QAAQ;KACnE,GAAG,KAAK,cAAc,SAAS,QAAA,IAAY,IAAK,IAAM,EAAK,SAAS;IAAA,GAErE,KAAK,uBAAA;GAAA,CAAA,GAEN,EAAU,CAAA,GACV,QAAA;IACK,IAAO,KAAK,wBAAA,IACX,KAAK,OAAA,GACV,KAAK,aAAA,CAAa;GAAA,CAAA,CAAA;EAAA,CAAA,CAAA,CAAA,EAMrB,KAAK,EAAU,KAAK,aAAA,CAAA,EACpB,UAAA,GAEF,KAAA,KAAKE,CAAS,GACV,KAAK,QAAM,KAAK,YAAA;CACrB;CAEA,WAAqB,GAAA;EACf,KAAA,MAAgB,EAAQ,IAAI,MAAA,MAC7B,KAAK,QAAA,CAAS,KAAA,KAAW,KAAK,YAAA,IAAA,CACxB,KAAK,QAAQ,KAAA,MAAW,KAAA,GAAU,YAAA;CAC7C;CAEA,uBAAA;EACC,MAAM,qBAAA,GACN,KAAK,kBAAkB,OAAA,GACvB,KAAA,IAAW,YAAA;CACZ;CAOA,SAAA;EACC,KAAK,OAAA,CAAQ,KAAK;CACnB;CAUA,SAAA;EACC,IAAM,IAAmB,EAAS;GACjC,eAAA,CAAe;GACf,sBAAA,CAAsB;GACtB,gBAAA,CAAgB;GAChB,cAAc,KAAK;GACnB,YAAY,KAAK;EAAA,CAAA,GAGZ,IAAkB,EAAS;GAChC,UAAU;GACV,kBAAkB;EAAA,CAAA,GAOb,IAAgB,EAAS;GAC9B,MAAA,CAAM;GACN,gBAAA,CAAgB;GAChB,cAAA,CAAc;GACd,eAAA,CAAe;GACf,QAAA,CAAS,KAAK;GACd,mBAAmB,KAAK;GACxB,eAAA,CAAgB,KAAK;EAAA,CAAA;EAGtB,OAAO,CAAI;;MAEP,EAAI,KAAK,YAAA,EAAA;;;iBAGE,EAAA;aACJ,EAAA;YACD,EAAA;oBACQ,KAAK,KAAA;;;OAGlB,EAAI,KAAK,SAAA,EAAA;aACH,EAAA;;;4CAG+B,KAAK,mBAAA;;;;OAI1C,EAAI,KAAK,UAAA,EAAA;;;;;;;;;;;;;;;CAef;AAAA;AAAA,EAAA,CAlXC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,MAAA,KAAA,CAAA,GAAA,EAAA,CAEzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,UAAA,KAAA,CAAA,GAAA,EAAA,CAEzB,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAEzC,EAAA,CAAA,GAAM,EAAA,WAAA,cAAA,KAAA,CAAA,GAAA,EAAA,CACN,EAAA,CAAA,GAAM,EAAA,WAAA,iBAAA,KAAA,CAAA,GAAA,EAAA,CACN,EAAA,CAAA,GAAM,EAAA,WAAA,aAAA,KAAA,CAAA,GAAA,EAAA,CAGN,EAAA,CAAA,GAAsB,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,EAAA,CAEtB,EAAsB,EAAE,MAAM,cAAA,CAAA,CAAA,GAAe,EAAA,WAAA,eAAA,KAAA,CAAA;AAAA,IAAA,IAAA,IAAA,EAAA,CAlB9C,EAAc,eAAA,CAAA,GAAe,CAAA;AAAA,SAAA,KAAA"}
package/dist/boat.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./boat-Vqjgo10B.cjs`);exports.SchmancyBoat=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./boat-I4B1UNMc.cjs`);exports.SchmancyBoat=e.t;
package/dist/boat.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as e } from "./boat-lr7MPZ7H.js";
1
+ import { t as e } from "./boat-_N1x5U_3.js";
2
2
  export { e as SchmancyBoat };
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-CYIif26I.cjs`);require(`./mixins-CGXSzZc7.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);var r=class extends e.t{constructor(...e){super(...e),this.separator=`/`}static{this.styles=[n.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-BBzRWB1w.cjs`);require(`./mixins-DPdzC9ZH.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);var r=class extends e.t{constructor(...e){super(...e),this.separator=`/`}static{this.styles=[n.css`
2
2
  :host {
3
3
  display: block;
4
4
  }
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-CA0Wqt8m.js";
2
- import "./mixins-Bp0wIHg2.js";
1
+ import { t as e, u as t } from "./SchmancyElement-C3CpdNsi.js";
2
+ import "./mixins-DTzfFVyv.js";
3
3
  import { customElement as n, property as r } from "lit/decorators.js";
4
4
  import { css as i, html as a } from "lit";
5
5
  var o = class extends e {
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-CYIif26I.cjs`);require(`./mixins-CGXSzZc7.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);var r=class extends e.t{static{this.styles=[n.css`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-BBzRWB1w.cjs`);require(`./mixins-DPdzC9ZH.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);var r=class extends e.t{static{this.styles=[n.css`
2
2
  :host {
3
3
  display: inline;
4
4
  position: absolute;
@@ -1 +1 @@
1
- {"version":3,"file":"busy-CgzZbGfx.cjs","names":[],"sources":["../src/busy/busy.ts","../src/busy/spinner.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-busy')\nexport default class SchmancyBusy extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline;\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: all;\n\t\tz-index: 50;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<!-- Clean overlay with subtle backdrop -->\n\t\t\t<div class=\"absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]\">\n\t\t\t\t<!-- Content container with clean surface -->\n\t\t\t\t<div class=\"relative flex items-center justify-center p-4\">\n\t\t\t\t\t\n\t\t\t\t\t<!-- Content slot -->\n\t\t\t\t\t<div class=\"relative z-10\">\n\t\t\t\t\t\t<slot>\n\t\t\t\t\t\t\t<!-- Default spinner if no content provided -->\n\t\t\t\t\t\t\t<schmancy-spinner ></schmancy-spinner>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-busy': SchmancyBusy\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-spinner')\nexport default class SchmnacySpinner extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\tcolor: inherit; /* Inherit from parent by default */\n\t}\n\n\t/* Explicit color options when needed */\n\t:host([color=\"primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-default);\n\t}\n\n\t:host([color=\"on-primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t}\n\n\t:host([color=\"secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-default);\n\t}\n\n\t:host([color=\"on-secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-on);\n\t}\n\n\t:host([color=\"tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-default);\n\t}\n\n\t:host([color=\"on-tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-on);\n\t}\n\n\t:host([color=\"error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-default);\n\t}\n\n\t:host([color=\"on-error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-on);\n\t}\n\n\t:host([color=\"success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-default);\n\t}\n\n\t:host([color=\"on-success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-on);\n\t}\n\n\t:host([color=\"surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-default);\n\t}\n\n\t:host([color=\"on-surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t}\n\n\t:host([color=\"surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-variant-default);\n\t}\n\n\t:host([color=\"on-surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t}\n\n\t.spinner {\n\t\tanimation: spin 1s linear infinite;\n\t\tanimation-direction: reverse;\n\t}\n\n\t@keyframes spin {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tcolor?: 'primary' | 'on-primary' | 'secondary' | 'on-secondary' |\n\t 'tertiary' | 'on-tertiary' | 'error' | 'on-error' |\n\t 'success' | 'on-success' | 'surface' | 'on-surface' |\n\t 'surface-variant' | 'on-surface-variant'\n\n\t/**\n\t * Size of the spinner - M3 aligned tokens or numeric Tailwind units\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Numeric: Tailwind units where each unit = 4px (e.g., 6 = 24px)\n\t */\n\t@property() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number = 'md'\n\t@property({ type: Boolean }) glass: boolean = false\n\n\tprotected render(): unknown {\n\t\t// M3 aligned token sizes (fit inside buttons of same token)\n\t\tconst tokenSizes: Record<string, number> = {\n\t\t\txxs: 12, // fits in 24px button (ultra-compact)\n\t\t\txs: 16, // fits in 32px button\n\t\t\tsm: 20, // fits in 40px button\n\t\t\tmd: 24, // fits in 48px button (default)\n\t\t\tlg: 32, // fits in 56px button\n\t\t}\n\n\t\t// Support both token and numeric sizes for backward compatibility\n\t\tlet sizeInPx: number\n\t\tif (typeof this.size === 'string' && this.size in tokenSizes) {\n\t\t\tsizeInPx = tokenSizes[this.size]\n\t\t} else if (typeof this.size === 'number' && !isNaN(this.size)) {\n\t\t\t// Legacy numeric: Tailwind units (each unit = 4px)\n\t\t\tsizeInPx = this.size * 4\n\t\t} else {\n\t\t\tsizeInPx = 24 // fallback to md\n\t\t}\n\n\t\tconst style = {\n\t\t\twidth: `${sizeInPx}px`,\n\t\t\theight: `${sizeInPx}px`,\n\t\t}\n\t\t\n\t\treturn this.glass ? html`\n\t\t\t<div class=\"spinner relative\" style=${this.styleMap(style)}>\n\t\t\t\t<!-- Glass container with Apple-style effect -->\n\t\t\t\t<div class=\"absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150\n\t\t\t\t\t\t\tbg-surface-container/20\n\t\t\t\t\t\t\tshadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]\n\t\t\t\t\t\t\tborder border-outline-variant/30\"></div>\n\t\t\t\t\n\t\t\t\t<!-- Spinner SVG -->\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" \n\t\t\t\t\t style=\"width: 100%; height: 100%;\" class=\"relative z-10\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".7\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\" opacity=\"0.8\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t` : html`\n\t\t\t<div class=\"spinner\" style=${this.styleMap(style)}>\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" style=\"width: 100%; height: 100%;\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".5\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-spinner': SchmnacySpinner\n\t}\n}\n"],"mappings":"uKAKe,IAAA,EAAA,cAA2B,EAAA,CAAA,CAAA,OAAA,KAAA,OACzB,CAAC,EAAA,GAAG;;;;;;;;GASpB,QAAA,CACC,MAAO,GAAA,IAAI;;;;;;;;;;;;;;;GAgBZ,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA5Bc,eAAA,CAAA,EAAe,CAAA,ECCf,IAAA,EAAA,cAA8B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KAyFmB,KAAA,KAAA,MAAA,CACjB,CAAA,CAAA,OAAA,KAAA,OAzF9B,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FpB,QAAA,CAEC,IAAM,EAAqC,CAC1C,IAAK,GACL,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EAAA,EAID,EAEH,EADwB,OAAd,KAAK,MAAS,UAAY,KAAK,QAAQ,EACtC,EAAW,KAAK,MACI,OAAd,KAAK,MAAS,UAAa,MAAM,KAAK,IAAA,EAI5C,GAFY,EAAZ,KAAK,KAKjB,IAAM,EAAQ,CACb,MAAO,GAAG,EAAA,IACV,OAAQ,GAAG,EAAA,GAAA,EAGZ,OAAO,KAAK,MAAQ,EAAA,IAAI;yCACe,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;;;;;;;;IAoBjD,EAAA,IAAI;gCACsB,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;GAa7C,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UA3EU,CAAE,KAAM,OAAQ,QAAA,CAAS,CAAA,CAAA,CAAA,EAAM,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAW/B,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACA,CAAE,KAAM,OAAA,CAAA,CAAA,EAAS,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA3Fb,kBAAA,CAAA,EAAkB,CAAA"}
1
+ {"version":3,"file":"busy-BIUonyPk.cjs","names":[],"sources":["../src/busy/busy.ts","../src/busy/spinner.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-busy')\nexport default class SchmancyBusy extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline;\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: all;\n\t\tz-index: 50;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<!-- Clean overlay with subtle backdrop -->\n\t\t\t<div class=\"absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]\">\n\t\t\t\t<!-- Content container with clean surface -->\n\t\t\t\t<div class=\"relative flex items-center justify-center p-4\">\n\t\t\t\t\t\n\t\t\t\t\t<!-- Content slot -->\n\t\t\t\t\t<div class=\"relative z-10\">\n\t\t\t\t\t\t<slot>\n\t\t\t\t\t\t\t<!-- Default spinner if no content provided -->\n\t\t\t\t\t\t\t<schmancy-spinner ></schmancy-spinner>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-busy': SchmancyBusy\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-spinner')\nexport default class SchmnacySpinner extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\tcolor: inherit; /* Inherit from parent by default */\n\t}\n\n\t/* Explicit color options when needed */\n\t:host([color=\"primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-default);\n\t}\n\n\t:host([color=\"on-primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t}\n\n\t:host([color=\"secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-default);\n\t}\n\n\t:host([color=\"on-secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-on);\n\t}\n\n\t:host([color=\"tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-default);\n\t}\n\n\t:host([color=\"on-tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-on);\n\t}\n\n\t:host([color=\"error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-default);\n\t}\n\n\t:host([color=\"on-error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-on);\n\t}\n\n\t:host([color=\"success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-default);\n\t}\n\n\t:host([color=\"on-success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-on);\n\t}\n\n\t:host([color=\"surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-default);\n\t}\n\n\t:host([color=\"on-surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t}\n\n\t:host([color=\"surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-variant-default);\n\t}\n\n\t:host([color=\"on-surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t}\n\n\t.spinner {\n\t\tanimation: spin 1s linear infinite;\n\t\tanimation-direction: reverse;\n\t}\n\n\t@keyframes spin {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tcolor?: 'primary' | 'on-primary' | 'secondary' | 'on-secondary' |\n\t 'tertiary' | 'on-tertiary' | 'error' | 'on-error' |\n\t 'success' | 'on-success' | 'surface' | 'on-surface' |\n\t 'surface-variant' | 'on-surface-variant'\n\n\t/**\n\t * Size of the spinner - M3 aligned tokens or numeric Tailwind units\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Numeric: Tailwind units where each unit = 4px (e.g., 6 = 24px)\n\t */\n\t@property() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number = 'md'\n\t@property({ type: Boolean }) glass: boolean = false\n\n\tprotected render(): unknown {\n\t\t// M3 aligned token sizes (fit inside buttons of same token)\n\t\tconst tokenSizes: Record<string, number> = {\n\t\t\txxs: 12, // fits in 24px button (ultra-compact)\n\t\t\txs: 16, // fits in 32px button\n\t\t\tsm: 20, // fits in 40px button\n\t\t\tmd: 24, // fits in 48px button (default)\n\t\t\tlg: 32, // fits in 56px button\n\t\t}\n\n\t\t// Support both token and numeric sizes for backward compatibility\n\t\tlet sizeInPx: number\n\t\tif (typeof this.size === 'string' && this.size in tokenSizes) {\n\t\t\tsizeInPx = tokenSizes[this.size]\n\t\t} else if (typeof this.size === 'number' && !isNaN(this.size)) {\n\t\t\t// Legacy numeric: Tailwind units (each unit = 4px)\n\t\t\tsizeInPx = this.size * 4\n\t\t} else {\n\t\t\tsizeInPx = 24 // fallback to md\n\t\t}\n\n\t\tconst style = {\n\t\t\twidth: `${sizeInPx}px`,\n\t\t\theight: `${sizeInPx}px`,\n\t\t}\n\t\t\n\t\treturn this.glass ? html`\n\t\t\t<div class=\"spinner relative\" style=${this.styleMap(style)}>\n\t\t\t\t<!-- Glass container with Apple-style effect -->\n\t\t\t\t<div class=\"absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150\n\t\t\t\t\t\t\tbg-surface-container/20\n\t\t\t\t\t\t\tshadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]\n\t\t\t\t\t\t\tborder border-outline-variant/30\"></div>\n\t\t\t\t\n\t\t\t\t<!-- Spinner SVG -->\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" \n\t\t\t\t\t style=\"width: 100%; height: 100%;\" class=\"relative z-10\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".7\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\" opacity=\"0.8\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t` : html`\n\t\t\t<div class=\"spinner\" style=${this.styleMap(style)}>\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" style=\"width: 100%; height: 100%;\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".5\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-spinner': SchmnacySpinner\n\t}\n}\n"],"mappings":"uKAKe,IAAA,EAAA,cAA2B,EAAA,CAAA,CAAA,OAAA,KAAA,OACzB,CAAC,EAAA,GAAG;;;;;;;;GASpB,QAAA,CACC,MAAO,GAAA,IAAI;;;;;;;;;;;;;;;GAgBZ,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA5Bc,eAAA,CAAA,EAAe,CAAA,ECCf,IAAA,EAAA,cAA8B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KAyFmB,KAAA,KAAA,MAAA,CACjB,CAAA,CAAA,OAAA,KAAA,OAzF9B,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FpB,QAAA,CAEC,IAAM,EAAqC,CAC1C,IAAK,GACL,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EAAA,EAID,EAEH,EADwB,OAAd,KAAK,MAAS,UAAY,KAAK,QAAQ,EACtC,EAAW,KAAK,MACI,OAAd,KAAK,MAAS,UAAa,MAAM,KAAK,IAAA,EAI5C,GAFY,EAAZ,KAAK,KAKjB,IAAM,EAAQ,CACb,MAAO,GAAG,EAAA,IACV,OAAQ,GAAG,EAAA,GAAA,EAGZ,OAAO,KAAK,MAAQ,EAAA,IAAI;yCACe,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;;;;;;;;IAoBjD,EAAA,IAAI;gCACsB,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;GAa7C,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UA3EU,CAAE,KAAM,OAAQ,QAAA,CAAS,CAAA,CAAA,CAAA,EAAM,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAW/B,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACA,CAAE,KAAM,OAAA,CAAA,CAAA,EAAS,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA3Fb,kBAAA,CAAA,EAAkB,CAAA"}
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-CA0Wqt8m.js";
2
- import "./mixins-Bp0wIHg2.js";
1
+ import { t as e, u as t } from "./SchmancyElement-C3CpdNsi.js";
2
+ import "./mixins-DTzfFVyv.js";
3
3
  import { customElement as n, property as r } from "lit/decorators.js";
4
4
  import { css as i, html as a } from "lit";
5
5
  var o = class extends e {
@@ -1 +1 @@
1
- {"version":3,"file":"busy-DgQ4ux5N.js","names":[],"sources":["../src/busy/busy.ts","../src/busy/spinner.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-busy')\nexport default class SchmancyBusy extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline;\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: all;\n\t\tz-index: 50;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<!-- Clean overlay with subtle backdrop -->\n\t\t\t<div class=\"absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]\">\n\t\t\t\t<!-- Content container with clean surface -->\n\t\t\t\t<div class=\"relative flex items-center justify-center p-4\">\n\t\t\t\t\t\n\t\t\t\t\t<!-- Content slot -->\n\t\t\t\t\t<div class=\"relative z-10\">\n\t\t\t\t\t\t<slot>\n\t\t\t\t\t\t\t<!-- Default spinner if no content provided -->\n\t\t\t\t\t\t\t<schmancy-spinner ></schmancy-spinner>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-busy': SchmancyBusy\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-spinner')\nexport default class SchmnacySpinner extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\tcolor: inherit; /* Inherit from parent by default */\n\t}\n\n\t/* Explicit color options when needed */\n\t:host([color=\"primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-default);\n\t}\n\n\t:host([color=\"on-primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t}\n\n\t:host([color=\"secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-default);\n\t}\n\n\t:host([color=\"on-secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-on);\n\t}\n\n\t:host([color=\"tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-default);\n\t}\n\n\t:host([color=\"on-tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-on);\n\t}\n\n\t:host([color=\"error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-default);\n\t}\n\n\t:host([color=\"on-error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-on);\n\t}\n\n\t:host([color=\"success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-default);\n\t}\n\n\t:host([color=\"on-success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-on);\n\t}\n\n\t:host([color=\"surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-default);\n\t}\n\n\t:host([color=\"on-surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t}\n\n\t:host([color=\"surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-variant-default);\n\t}\n\n\t:host([color=\"on-surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t}\n\n\t.spinner {\n\t\tanimation: spin 1s linear infinite;\n\t\tanimation-direction: reverse;\n\t}\n\n\t@keyframes spin {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tcolor?: 'primary' | 'on-primary' | 'secondary' | 'on-secondary' |\n\t 'tertiary' | 'on-tertiary' | 'error' | 'on-error' |\n\t 'success' | 'on-success' | 'surface' | 'on-surface' |\n\t 'surface-variant' | 'on-surface-variant'\n\n\t/**\n\t * Size of the spinner - M3 aligned tokens or numeric Tailwind units\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Numeric: Tailwind units where each unit = 4px (e.g., 6 = 24px)\n\t */\n\t@property() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number = 'md'\n\t@property({ type: Boolean }) glass: boolean = false\n\n\tprotected render(): unknown {\n\t\t// M3 aligned token sizes (fit inside buttons of same token)\n\t\tconst tokenSizes: Record<string, number> = {\n\t\t\txxs: 12, // fits in 24px button (ultra-compact)\n\t\t\txs: 16, // fits in 32px button\n\t\t\tsm: 20, // fits in 40px button\n\t\t\tmd: 24, // fits in 48px button (default)\n\t\t\tlg: 32, // fits in 56px button\n\t\t}\n\n\t\t// Support both token and numeric sizes for backward compatibility\n\t\tlet sizeInPx: number\n\t\tif (typeof this.size === 'string' && this.size in tokenSizes) {\n\t\t\tsizeInPx = tokenSizes[this.size]\n\t\t} else if (typeof this.size === 'number' && !isNaN(this.size)) {\n\t\t\t// Legacy numeric: Tailwind units (each unit = 4px)\n\t\t\tsizeInPx = this.size * 4\n\t\t} else {\n\t\t\tsizeInPx = 24 // fallback to md\n\t\t}\n\n\t\tconst style = {\n\t\t\twidth: `${sizeInPx}px`,\n\t\t\theight: `${sizeInPx}px`,\n\t\t}\n\t\t\n\t\treturn this.glass ? html`\n\t\t\t<div class=\"spinner relative\" style=${this.styleMap(style)}>\n\t\t\t\t<!-- Glass container with Apple-style effect -->\n\t\t\t\t<div class=\"absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150\n\t\t\t\t\t\t\tbg-surface-container/20\n\t\t\t\t\t\t\tshadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]\n\t\t\t\t\t\t\tborder border-outline-variant/30\"></div>\n\t\t\t\t\n\t\t\t\t<!-- Spinner SVG -->\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" \n\t\t\t\t\t style=\"width: 100%; height: 100%;\" class=\"relative z-10\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".7\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\" opacity=\"0.8\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t` : html`\n\t\t\t<div class=\"spinner\" style=${this.styleMap(style)}>\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" style=\"width: 100%; height: 100%;\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".5\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-spinner': SchmnacySpinner\n\t}\n}\n"],"mappings":";;;;AAKe,IAAA,IAAA,cAA2B,EAAA;CAAA;EAAA,KAAA,SACzB,CAAC,CAAG;;;;;;;;;;CASpB,SAAA;EACC,OAAO,CAAI;;;;;;;;;;;;;;;;CAgBZ;AAAA;AAAA,IAAA,EAAA,CA5BA,EAAc,eAAA,CAAA,GAAe,CAAA;ACCf,IAAA,IAAA,cAA8B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAyFmB,MAAA,KAAA,QAAA,CACjB;CAAA;CAAA;EAAA,KAAA,SAzF9B,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FpB,SAAA;EAEC,IAAM,IAAqC;GAC1C,KAAK;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EAAA,GAID;EAEH,IADwB,OAAd,KAAK,QAAS,YAAY,KAAK,QAAQ,IACtC,EAAW,KAAK,QACI,OAAd,KAAK,QAAS,YAAa,MAAM,KAAK,IAAA,IAI5C,KAFY,IAAZ,KAAK;EAKjB,IAAM,IAAQ;GACb,OAAO,GAAG,EAAA;GACV,QAAQ,GAAG,EAAA;EAAA;EAGZ,OAAO,KAAK,QAAQ,CAAI;yCACe,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;;;;;;;;MAoBjD,CAAI;gCACsB,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;CAa7C;AAAA;AAAA,EAAA,CA3EC,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,EAAA,CAWxC,EAAA,CAAA,GAAS,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CACT,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CA3F3B,EAAc,kBAAA,CAAA,GAAkB,CAAA"}
1
+ {"version":3,"file":"busy-CCB3qKnh.js","names":[],"sources":["../src/busy/busy.ts","../src/busy/spinner.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-busy')\nexport default class SchmancyBusy extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline;\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: all;\n\t\tz-index: 50;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<!-- Clean overlay with subtle backdrop -->\n\t\t\t<div class=\"absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]\">\n\t\t\t\t<!-- Content container with clean surface -->\n\t\t\t\t<div class=\"relative flex items-center justify-center p-4\">\n\t\t\t\t\t\n\t\t\t\t\t<!-- Content slot -->\n\t\t\t\t\t<div class=\"relative z-10\">\n\t\t\t\t\t\t<slot>\n\t\t\t\t\t\t\t<!-- Default spinner if no content provided -->\n\t\t\t\t\t\t\t<schmancy-spinner ></schmancy-spinner>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-busy': SchmancyBusy\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-spinner')\nexport default class SchmnacySpinner extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\tcolor: inherit; /* Inherit from parent by default */\n\t}\n\n\t/* Explicit color options when needed */\n\t:host([color=\"primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-default);\n\t}\n\n\t:host([color=\"on-primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t}\n\n\t:host([color=\"secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-default);\n\t}\n\n\t:host([color=\"on-secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-on);\n\t}\n\n\t:host([color=\"tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-default);\n\t}\n\n\t:host([color=\"on-tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-on);\n\t}\n\n\t:host([color=\"error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-default);\n\t}\n\n\t:host([color=\"on-error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-on);\n\t}\n\n\t:host([color=\"success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-default);\n\t}\n\n\t:host([color=\"on-success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-on);\n\t}\n\n\t:host([color=\"surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-default);\n\t}\n\n\t:host([color=\"on-surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t}\n\n\t:host([color=\"surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-variant-default);\n\t}\n\n\t:host([color=\"on-surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t}\n\n\t.spinner {\n\t\tanimation: spin 1s linear infinite;\n\t\tanimation-direction: reverse;\n\t}\n\n\t@keyframes spin {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tcolor?: 'primary' | 'on-primary' | 'secondary' | 'on-secondary' |\n\t 'tertiary' | 'on-tertiary' | 'error' | 'on-error' |\n\t 'success' | 'on-success' | 'surface' | 'on-surface' |\n\t 'surface-variant' | 'on-surface-variant'\n\n\t/**\n\t * Size of the spinner - M3 aligned tokens or numeric Tailwind units\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Numeric: Tailwind units where each unit = 4px (e.g., 6 = 24px)\n\t */\n\t@property() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number = 'md'\n\t@property({ type: Boolean }) glass: boolean = false\n\n\tprotected render(): unknown {\n\t\t// M3 aligned token sizes (fit inside buttons of same token)\n\t\tconst tokenSizes: Record<string, number> = {\n\t\t\txxs: 12, // fits in 24px button (ultra-compact)\n\t\t\txs: 16, // fits in 32px button\n\t\t\tsm: 20, // fits in 40px button\n\t\t\tmd: 24, // fits in 48px button (default)\n\t\t\tlg: 32, // fits in 56px button\n\t\t}\n\n\t\t// Support both token and numeric sizes for backward compatibility\n\t\tlet sizeInPx: number\n\t\tif (typeof this.size === 'string' && this.size in tokenSizes) {\n\t\t\tsizeInPx = tokenSizes[this.size]\n\t\t} else if (typeof this.size === 'number' && !isNaN(this.size)) {\n\t\t\t// Legacy numeric: Tailwind units (each unit = 4px)\n\t\t\tsizeInPx = this.size * 4\n\t\t} else {\n\t\t\tsizeInPx = 24 // fallback to md\n\t\t}\n\n\t\tconst style = {\n\t\t\twidth: `${sizeInPx}px`,\n\t\t\theight: `${sizeInPx}px`,\n\t\t}\n\t\t\n\t\treturn this.glass ? html`\n\t\t\t<div class=\"spinner relative\" style=${this.styleMap(style)}>\n\t\t\t\t<!-- Glass container with Apple-style effect -->\n\t\t\t\t<div class=\"absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150\n\t\t\t\t\t\t\tbg-surface-container/20\n\t\t\t\t\t\t\tshadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]\n\t\t\t\t\t\t\tborder border-outline-variant/30\"></div>\n\t\t\t\t\n\t\t\t\t<!-- Spinner SVG -->\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" \n\t\t\t\t\t style=\"width: 100%; height: 100%;\" class=\"relative z-10\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".7\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\" opacity=\"0.8\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t` : html`\n\t\t\t<div class=\"spinner\" style=${this.styleMap(style)}>\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" style=\"width: 100%; height: 100%;\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".5\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-spinner': SchmnacySpinner\n\t}\n}\n"],"mappings":";;;;AAKe,IAAA,IAAA,cAA2B,EAAA;CAAA;EAAA,KAAA,SACzB,CAAC,CAAG;;;;;;;;;;CASpB,SAAA;EACC,OAAO,CAAI;;;;;;;;;;;;;;;;CAgBZ;AAAA;AAAA,IAAA,EAAA,CA5BA,EAAc,eAAA,CAAA,GAAe,CAAA;ACCf,IAAA,IAAA,cAA8B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAyFmB,MAAA,KAAA,QAAA,CACjB;CAAA;CAAA;EAAA,KAAA,SAzF9B,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FpB,SAAA;EAEC,IAAM,IAAqC;GAC1C,KAAK;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EAAA,GAID;EAEH,IADwB,OAAd,KAAK,QAAS,YAAY,KAAK,QAAQ,IACtC,EAAW,KAAK,QACI,OAAd,KAAK,QAAS,YAAa,MAAM,KAAK,IAAA,IAI5C,KAFY,IAAZ,KAAK;EAKjB,IAAM,IAAQ;GACb,OAAO,GAAG,EAAA;GACV,QAAQ,GAAG,EAAA;EAAA;EAGZ,OAAO,KAAK,QAAQ,CAAI;yCACe,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;;;;;;;;MAoBjD,CAAI;gCACsB,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;CAa7C;AAAA;AAAA,EAAA,CA3EC,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,EAAA,CAWxC,EAAA,CAAA,GAAS,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CACT,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CA3F3B,EAAc,kBAAA,CAAA,GAAkB,CAAA"}
package/dist/busy.cjs CHANGED
@@ -1 +1 @@
1
- require(`./busy-CgzZbGfx.cjs`);
1
+ require(`./busy-BIUonyPk.cjs`);
package/dist/busy.js CHANGED
@@ -1 +1 @@
1
- import "./busy-DgQ4ux5N.js";
1
+ import "./busy-CCB3qKnh.js";
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-CA0Wqt8m.js";
2
- import "./mixins-Bp0wIHg2.js";
1
+ import { t as e, u as t } from "./SchmancyElement-C3CpdNsi.js";
2
+ import "./mixins-DTzfFVyv.js";
3
3
  import { t as n } from "./magnetic-DaOOv5Dz.js";
4
4
  import { createContext as r, provide as i } from "@lit/context";
5
5
  import { customElement as a, property as o, query as s, queryAssignedElements as c } from "lit/decorators.js";