@mhmo91/schmancy 0.10.25 → 0.10.26

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 (295) hide show
  1. package/dist/agent/{overlay.confirm-body-DozUyDYx.js → overlay.confirm-body-DJrL6tio.js} +1 -1
  2. package/dist/agent/{overlay.confirm-body-DozUyDYx.js.map → overlay.confirm-body-DJrL6tio.js.map} +1 -1
  3. package/dist/agent/schmancy.agent.js +1779 -1792
  4. package/dist/agent/schmancy.agent.js.map +1 -1
  5. package/dist/{area-DrVE5pXW.cjs → area-DkvO_oiO.cjs} +1 -1
  6. package/dist/{area-DrVE5pXW.cjs.map → area-DkvO_oiO.cjs.map} +1 -1
  7. package/dist/{area-1EG1LrkX.js → area-fC1_kvAW.js} +1 -1
  8. package/dist/{area-1EG1LrkX.js.map → area-fC1_kvAW.js.map} +1 -1
  9. package/dist/area.cjs +1 -1
  10. package/dist/area.js +1 -1
  11. package/dist/{autocomplete-6pdZxEab.cjs → autocomplete-Aa2IstyX.cjs} +1 -1
  12. package/dist/{autocomplete-6pdZxEab.cjs.map → autocomplete-Aa2IstyX.cjs.map} +1 -1
  13. package/dist/{autocomplete-nrIcCilw.js → autocomplete-Hb-C11a3.js} +2 -2
  14. package/dist/{autocomplete-nrIcCilw.js.map → autocomplete-Hb-C11a3.js.map} +1 -1
  15. package/dist/autocomplete.cjs +1 -1
  16. package/dist/autocomplete.js +1 -1
  17. package/dist/avatar.cjs +1 -1
  18. package/dist/avatar.js +2 -2
  19. package/dist/badge.cjs +1 -1
  20. package/dist/badge.js +1 -1
  21. package/dist/boat-BEq-AHmL.cjs +85 -0
  22. package/dist/boat-BEq-AHmL.cjs.map +1 -0
  23. package/dist/{boat--fLgbDAE.js → boat-BW6aRcdY.js} +27 -21
  24. package/dist/boat-BW6aRcdY.js.map +1 -0
  25. package/dist/boat.cjs +1 -1
  26. package/dist/boat.js +1 -1
  27. package/dist/breadcrumb.cjs +1 -1
  28. package/dist/breadcrumb.js +1 -1
  29. package/dist/{busy-DVCIxBVf.cjs → busy-CKpIblIO.cjs} +1 -1
  30. package/dist/{busy-DVCIxBVf.cjs.map → busy-CKpIblIO.cjs.map} +1 -1
  31. package/dist/{busy-DshZcVZ4.js → busy-D-ucQFSB.js} +1 -1
  32. package/dist/{busy-DshZcVZ4.js.map → busy-D-ucQFSB.js.map} +1 -1
  33. package/dist/busy.cjs +1 -1
  34. package/dist/busy.js +1 -1
  35. package/dist/{button-D9UJ7I6Z.js → button-BU-X0a0S.js} +1 -1
  36. package/dist/{button-D9UJ7I6Z.js.map → button-BU-X0a0S.js.map} +1 -1
  37. package/dist/{button-JrTMzwHY.cjs → button-HzLpB3NP.cjs} +1 -1
  38. package/dist/{button-JrTMzwHY.cjs.map → button-HzLpB3NP.cjs.map} +1 -1
  39. package/dist/button.cjs +1 -1
  40. package/dist/button.js +1 -1
  41. package/dist/{card-CTotavhH.cjs → card-CcrUlgd3.cjs} +1 -1
  42. package/dist/{card-CTotavhH.cjs.map → card-CcrUlgd3.cjs.map} +1 -1
  43. package/dist/{card-BvCFuX3J.js → card-ueXBeJ6q.js} +1 -1
  44. package/dist/{card-BvCFuX3J.js.map → card-ueXBeJ6q.js.map} +1 -1
  45. package/dist/card.cjs +1 -1
  46. package/dist/card.js +1 -1
  47. package/dist/{checkbox-GPsdCUbs.js → checkbox-CW1kk4Tu.js} +1 -1
  48. package/dist/{checkbox-GPsdCUbs.js.map → checkbox-CW1kk4Tu.js.map} +1 -1
  49. package/dist/{checkbox-By4fFmjt.cjs → checkbox-qsp-I5C6.cjs} +1 -1
  50. package/dist/{checkbox-By4fFmjt.cjs.map → checkbox-qsp-I5C6.cjs.map} +1 -1
  51. package/dist/checkbox.cjs +1 -1
  52. package/dist/checkbox.js +1 -1
  53. package/dist/{chips-27umqnat.js → chips-C_F6-gfe.js} +2 -2
  54. package/dist/{chips-27umqnat.js.map → chips-C_F6-gfe.js.map} +1 -1
  55. package/dist/{chips-BZf9sGA8.cjs → chips-Dluk6RV4.cjs} +1 -1
  56. package/dist/{chips-BZf9sGA8.cjs.map → chips-Dluk6RV4.cjs.map} +1 -1
  57. package/dist/chips.cjs +1 -1
  58. package/dist/chips.js +2 -2
  59. package/dist/connectivity.cjs +1 -1
  60. package/dist/connectivity.js +1 -1
  61. package/dist/content-drawer.cjs +1 -1
  62. package/dist/content-drawer.js +1 -1
  63. package/dist/{date-range-wDVHcr0u.js → date-range-ASZ8h_Il.js} +2 -2
  64. package/dist/{date-range-wDVHcr0u.js.map → date-range-ASZ8h_Il.js.map} +1 -1
  65. package/dist/{date-range-BJnLWCRF.cjs → date-range-BFOqXAI2.cjs} +1 -1
  66. package/dist/{date-range-BJnLWCRF.cjs.map → date-range-BFOqXAI2.cjs.map} +1 -1
  67. package/dist/{date-range-inline-B6uKUliV.cjs → date-range-inline-BNmNOpL0.cjs} +1 -1
  68. package/dist/{date-range-inline-B6uKUliV.cjs.map → date-range-inline-BNmNOpL0.cjs.map} +1 -1
  69. package/dist/{date-range-inline-BNbbRfIA.js → date-range-inline-DHrgolLn.js} +1 -1
  70. package/dist/{date-range-inline-BNbbRfIA.js.map → date-range-inline-DHrgolLn.js.map} +1 -1
  71. package/dist/date-range-inline.cjs +1 -1
  72. package/dist/date-range-inline.js +1 -1
  73. package/dist/date-range.cjs +1 -1
  74. package/dist/date-range.js +1 -1
  75. package/dist/delay.cjs +1 -1
  76. package/dist/delay.js +1 -1
  77. package/dist/{details-Ckxpwacj.js → details-B9RgRw6c.js} +1 -1
  78. package/dist/{details-Ckxpwacj.js.map → details-B9RgRw6c.js.map} +1 -1
  79. package/dist/{details-DNrWIes6.cjs → details-Bx9c4XQR.cjs} +1 -1
  80. package/dist/{details-DNrWIes6.cjs.map → details-Bx9c4XQR.cjs.map} +1 -1
  81. package/dist/details.cjs +1 -1
  82. package/dist/details.js +1 -1
  83. package/dist/{directives-F15SJZUR.cjs → directives-Dq0zi2KR.cjs} +13 -11
  84. package/dist/{directives-F15SJZUR.cjs.map → directives-Dq0zi2KR.cjs.map} +1 -1
  85. package/dist/{directives-BBMqe8x3.js → directives-sWKTEJDb.js} +27 -46
  86. package/dist/{directives-BBMqe8x3.js.map → directives-sWKTEJDb.js.map} +1 -1
  87. package/dist/directives.cjs +1 -1
  88. package/dist/directives.js +1 -1
  89. package/dist/{divider-BzcZGo4S.js → divider-C7BtzDcK.js} +1 -1
  90. package/dist/{divider-BzcZGo4S.js.map → divider-C7BtzDcK.js.map} +1 -1
  91. package/dist/{divider-Cde33ivs.cjs → divider-DH0BvTOv.cjs} +1 -1
  92. package/dist/{divider-Cde33ivs.cjs.map → divider-DH0BvTOv.cjs.map} +1 -1
  93. package/dist/divider.cjs +1 -1
  94. package/dist/divider.js +1 -1
  95. package/dist/dropdown.cjs +1 -1
  96. package/dist/dropdown.js +1 -1
  97. package/dist/{expand-Db4V0jj-.cjs → expand-CPMF44eL.cjs} +1 -1
  98. package/dist/{expand-Db4V0jj-.cjs.map → expand-CPMF44eL.cjs.map} +1 -1
  99. package/dist/{expand-DI144OzN.js → expand-DcMx9dHY.js} +2 -2
  100. package/dist/{expand-DI144OzN.js.map → expand-DcMx9dHY.js.map} +1 -1
  101. package/dist/expand.cjs +1 -1
  102. package/dist/expand.js +1 -1
  103. package/dist/{float--RScf9BZ.cjs → float-CgBN4H3g.cjs} +1 -1
  104. package/dist/{float--RScf9BZ.cjs.map → float-CgBN4H3g.cjs.map} +1 -1
  105. package/dist/{float-DIyzy1c2.js → float-DkUw5TN4.js} +1 -1
  106. package/dist/{float-DIyzy1c2.js.map → float-DkUw5TN4.js.map} +1 -1
  107. package/dist/float.cjs +1 -1
  108. package/dist/float.js +1 -1
  109. package/dist/{form-DWNpOsIU.cjs → form-DxApnyVx.cjs} +1 -1
  110. package/dist/{form-DWNpOsIU.cjs.map → form-DxApnyVx.cjs.map} +1 -1
  111. package/dist/{form-RtXH8UHQ.js → form-kSgJf_h4.js} +8 -8
  112. package/dist/{form-RtXH8UHQ.js.map → form-kSgJf_h4.js.map} +1 -1
  113. package/dist/form.cjs +1 -1
  114. package/dist/form.js +6 -6
  115. package/dist/handover/agent-runtime-followups.md +1 -1
  116. package/dist/handover/agent-runtime-v1.md +3 -3
  117. package/dist/{icons-bNxlWLlk.cjs → icons-3F1nQAn_.cjs} +1 -1
  118. package/dist/{icons-bNxlWLlk.cjs.map → icons-3F1nQAn_.cjs.map} +1 -1
  119. package/dist/{icons-DXanGDZ_.js → icons-DsfpmrVO.js} +1 -1
  120. package/dist/{icons-DXanGDZ_.js.map → icons-DsfpmrVO.js.map} +1 -1
  121. package/dist/icons.cjs +1 -1
  122. package/dist/icons.js +1 -1
  123. package/dist/{iframe-BlHK0cjy.js → iframe-KrV4Cak-.js} +1 -1
  124. package/dist/{iframe-BlHK0cjy.js.map → iframe-KrV4Cak-.js.map} +1 -1
  125. package/dist/{iframe-B1XWRaLC.cjs → iframe-sTXBw6zB.cjs} +1 -1
  126. package/dist/{iframe-B1XWRaLC.cjs.map → iframe-sTXBw6zB.cjs.map} +1 -1
  127. package/dist/iframe.cjs +1 -1
  128. package/dist/iframe.js +1 -1
  129. package/dist/index.cjs +1 -1
  130. package/dist/index.js +28 -28
  131. package/dist/{input-C-_XU9AX.cjs → input-DMoggdSN.cjs} +1 -1
  132. package/dist/{input-C-_XU9AX.cjs.map → input-DMoggdSN.cjs.map} +1 -1
  133. package/dist/{input-chip-5aYnuRZ_.cjs → input-chip-B1iNQW2m.cjs} +1 -1
  134. package/dist/{input-chip-5aYnuRZ_.cjs.map → input-chip-B1iNQW2m.cjs.map} +1 -1
  135. package/dist/{input-chip-l--zCMGR.js → input-chip-DHbfUatc.js} +1 -1
  136. package/dist/{input-chip-l--zCMGR.js.map → input-chip-DHbfUatc.js.map} +1 -1
  137. package/dist/{input-CiGa8Dkl.js → input-zj3eaZM_.js} +1 -1
  138. package/dist/{input-CiGa8Dkl.js.map → input-zj3eaZM_.js.map} +1 -1
  139. package/dist/input.cjs +1 -1
  140. package/dist/input.js +1 -1
  141. package/dist/json.cjs +1 -1
  142. package/dist/json.js +2 -2
  143. package/dist/kbd.cjs +1 -1
  144. package/dist/kbd.js +1 -1
  145. package/dist/layout.cjs +1 -1
  146. package/dist/layout.js +1 -1
  147. package/dist/{lightbox-CfRDkeeb.cjs → lightbox-86F2RgXy.cjs} +1 -1
  148. package/dist/{lightbox-CfRDkeeb.cjs.map → lightbox-86F2RgXy.cjs.map} +1 -1
  149. package/dist/{lightbox-D9oiu1Nv.js → lightbox-CAcXlJlv.js} +1 -1
  150. package/dist/{lightbox-D9oiu1Nv.js.map → lightbox-CAcXlJlv.js.map} +1 -1
  151. package/dist/lightbox.cjs +1 -1
  152. package/dist/lightbox.js +1 -1
  153. package/dist/{list-BOlRka4v.js → list-BIjJ6T1c.js} +1 -1
  154. package/dist/{list-BOlRka4v.js.map → list-BIjJ6T1c.js.map} +1 -1
  155. package/dist/{list-CDJi3_Ut.cjs → list-CUbI0RM6.cjs} +1 -1
  156. package/dist/{list-CDJi3_Ut.cjs.map → list-CUbI0RM6.cjs.map} +1 -1
  157. package/dist/list.cjs +1 -1
  158. package/dist/list.js +1 -1
  159. package/dist/{menu-XyrLmCi_.js → menu-CtFcvxgU.js} +2 -2
  160. package/dist/{menu-XyrLmCi_.js.map → menu-CtFcvxgU.js.map} +1 -1
  161. package/dist/{menu-CJaDL2cd.cjs → menu-DGMrjR_a.cjs} +1 -1
  162. package/dist/{menu-CJaDL2cd.cjs.map → menu-DGMrjR_a.cjs.map} +1 -1
  163. package/dist/menu.cjs +1 -1
  164. package/dist/menu.js +1 -1
  165. package/dist/mixins-CKbQ6BJo.js +642 -0
  166. package/dist/{mixins-DySzfmal.js.map → mixins-CKbQ6BJo.js.map} +1 -1
  167. package/dist/mixins-DSy-enUd.cjs +254 -0
  168. package/dist/{mixins-CsYsIJOI.cjs.map → mixins-DSy-enUd.cjs.map} +1 -1
  169. package/dist/mixins.cjs +1 -1
  170. package/dist/mixins.js +1 -1
  171. package/dist/nav-drawer.cjs +1 -1
  172. package/dist/nav-drawer.js +1 -1
  173. package/dist/navigation-bar.cjs +1 -1
  174. package/dist/navigation-bar.js +1 -1
  175. package/dist/navigation-rail.cjs +1 -1
  176. package/dist/navigation-rail.js +1 -1
  177. package/dist/{notification-CHrEY4u8.js → notification-BqyMYtP7.js} +2 -2
  178. package/dist/{notification-CHrEY4u8.js.map → notification-BqyMYtP7.js.map} +1 -1
  179. package/dist/{notification-DKp4tjaB.cjs → notification-D5eOdsMT.cjs} +1 -1
  180. package/dist/{notification-DKp4tjaB.cjs.map → notification-D5eOdsMT.cjs.map} +1 -1
  181. package/dist/notification.cjs +1 -1
  182. package/dist/notification.js +1 -1
  183. package/dist/{option-Vpy4UQ-D.js → option-C3UyYQi_.js} +1 -1
  184. package/dist/{option-Vpy4UQ-D.js.map → option-C3UyYQi_.js.map} +1 -1
  185. package/dist/{option-nRk4MuXH.cjs → option-DJ3R-2Wn.cjs} +1 -1
  186. package/dist/{option-nRk4MuXH.cjs.map → option-DJ3R-2Wn.cjs.map} +1 -1
  187. package/dist/option.cjs +1 -1
  188. package/dist/option.js +1 -1
  189. package/dist/{overlay-jlkcrt8F.js → overlay-D1hFkcFA.js} +3 -3
  190. package/dist/{overlay-jlkcrt8F.js.map → overlay-D1hFkcFA.js.map} +1 -1
  191. package/dist/{overlay-HNrWZ4sB.cjs → overlay-D7nQaT5U.cjs} +1 -1
  192. package/dist/{overlay-HNrWZ4sB.cjs.map → overlay-D7nQaT5U.cjs.map} +1 -1
  193. package/dist/overlay.cjs +1 -1
  194. package/dist/{overlay.confirm-body-CYShkjI6.js → overlay.confirm-body-B4eCDLmU.js} +1 -1
  195. package/dist/{overlay.confirm-body-CYShkjI6.js.map → overlay.confirm-body-B4eCDLmU.js.map} +1 -1
  196. package/dist/{overlay.confirm-body-B8dFI3cj.cjs → overlay.confirm-body-P18SmJL2.cjs} +1 -1
  197. package/dist/{overlay.confirm-body-B8dFI3cj.cjs.map → overlay.confirm-body-P18SmJL2.cjs.map} +1 -1
  198. package/dist/overlay.js +3 -3
  199. package/dist/{overlay.service-BqhhxVJp.js → overlay.service-02ZLZ8Ib.js} +2 -2
  200. package/dist/{overlay.service-BqhhxVJp.js.map → overlay.service-02ZLZ8Ib.js.map} +1 -1
  201. package/dist/{overlay.service-BTPn7Uv7.cjs → overlay.service-m-8omCA-.cjs} +1 -1
  202. package/dist/{overlay.service-BTPn7Uv7.cjs.map → overlay.service-m-8omCA-.cjs.map} +1 -1
  203. package/dist/{progress-CAp_4jtq.cjs → progress-CY-UbvOB.cjs} +1 -1
  204. package/dist/{progress-CAp_4jtq.cjs.map → progress-CY-UbvOB.cjs.map} +1 -1
  205. package/dist/{progress-8Bn88GK_.js → progress-YjdEWDI5.js} +1 -1
  206. package/dist/{progress-8Bn88GK_.js.map → progress-YjdEWDI5.js.map} +1 -1
  207. package/dist/progress.cjs +1 -1
  208. package/dist/progress.js +1 -1
  209. package/dist/{radio-group-CN44mAoc.cjs → radio-group--UamzqAm.cjs} +1 -1
  210. package/dist/{radio-group-CN44mAoc.cjs.map → radio-group--UamzqAm.cjs.map} +1 -1
  211. package/dist/{radio-group-GNHA7qJR.js → radio-group-aKXKHqUp.js} +1 -1
  212. package/dist/{radio-group-GNHA7qJR.js.map → radio-group-aKXKHqUp.js.map} +1 -1
  213. package/dist/radio-group.cjs +1 -1
  214. package/dist/radio-group.js +1 -1
  215. package/dist/range.cjs +1 -1
  216. package/dist/range.js +1 -1
  217. package/dist/{select-BnuXRHS4.js → select-B0Qk4PfT.js} +2 -2
  218. package/dist/{select-BnuXRHS4.js.map → select-B0Qk4PfT.js.map} +1 -1
  219. package/dist/{select-DZNns5Pa.cjs → select-CIquL8LY.cjs} +1 -1
  220. package/dist/{select-DZNns5Pa.cjs.map → select-CIquL8LY.cjs.map} +1 -1
  221. package/dist/select.cjs +1 -1
  222. package/dist/select.js +1 -1
  223. package/dist/skeleton.cjs +1 -1
  224. package/dist/skeleton.js +1 -1
  225. package/dist/slider.cjs +1 -1
  226. package/dist/slider.js +1 -1
  227. package/dist/{splash-screen-CUP_elaT.js → splash-screen-CP_Idse2.js} +1 -1
  228. package/dist/{splash-screen-CUP_elaT.js.map → splash-screen-CP_Idse2.js.map} +1 -1
  229. package/dist/{splash-screen-DeoPRrOu.cjs → splash-screen-rg56AXCf.cjs} +1 -1
  230. package/dist/{splash-screen-DeoPRrOu.cjs.map → splash-screen-rg56AXCf.cjs.map} +1 -1
  231. package/dist/splash-screen.cjs +1 -1
  232. package/dist/splash-screen.js +1 -1
  233. package/dist/{src-DQ4wr0qq.cjs → src-BAaNnqwc.cjs} +1 -1
  234. package/dist/{src-DQ4wr0qq.cjs.map → src-BAaNnqwc.cjs.map} +1 -1
  235. package/dist/{src-B1VkLX3l.js → src-Do0IGupa.js} +34 -34
  236. package/dist/{src-B1VkLX3l.js.map → src-Do0IGupa.js.map} +1 -1
  237. package/dist/steps.cjs +1 -1
  238. package/dist/steps.js +1 -1
  239. package/dist/{surface-LkaZQXZn.cjs → surface-B7a2O5-9.cjs} +1 -1
  240. package/dist/{surface-LkaZQXZn.cjs.map → surface-B7a2O5-9.cjs.map} +1 -1
  241. package/dist/{surface-hOvkrjGN.js → surface-DGewe6IV.js} +1 -1
  242. package/dist/{surface-hOvkrjGN.js.map → surface-DGewe6IV.js.map} +1 -1
  243. package/dist/surface.cjs +1 -1
  244. package/dist/surface.js +1 -1
  245. package/dist/switch.cjs +1 -1
  246. package/dist/switch.js +1 -1
  247. package/dist/table.cjs +1 -1
  248. package/dist/table.js +1 -1
  249. package/dist/{tabs-CfwIHhHo.js → tabs-g2aM43TH.js} +1 -1
  250. package/dist/{tabs-CfwIHhHo.js.map → tabs-g2aM43TH.js.map} +1 -1
  251. package/dist/{tabs-bplzstz6.cjs → tabs-n4dO5fo1.cjs} +1 -1
  252. package/dist/{tabs-bplzstz6.cjs.map → tabs-n4dO5fo1.cjs.map} +1 -1
  253. package/dist/tabs.cjs +1 -1
  254. package/dist/tabs.js +1 -1
  255. package/dist/teleport.cjs +1 -1
  256. package/dist/teleport.js +1 -1
  257. package/dist/{textarea-C1A5xuw9.js → textarea-D5hw4jsP.js} +1 -1
  258. package/dist/{textarea-C1A5xuw9.js.map → textarea-D5hw4jsP.js.map} +1 -1
  259. package/dist/{textarea-hrDp5gQq.cjs → textarea-DDx_7AfQ.cjs} +1 -1
  260. package/dist/{textarea-hrDp5gQq.cjs.map → textarea-DDx_7AfQ.cjs.map} +1 -1
  261. package/dist/textarea.cjs +1 -1
  262. package/dist/textarea.js +1 -1
  263. package/dist/{theme-BniFOMEo.js → theme-BMYkheaA.js} +1 -1
  264. package/dist/{theme-BniFOMEo.js.map → theme-BMYkheaA.js.map} +1 -1
  265. package/dist/{theme-DmR6PKV8.cjs → theme-BdZAj0CO.cjs} +1 -1
  266. package/dist/{theme-DmR6PKV8.cjs.map → theme-BdZAj0CO.cjs.map} +1 -1
  267. package/dist/{theme-button--ruZIb0T.js → theme-button-DdI6kxY3.js} +1 -1
  268. package/dist/{theme-button--ruZIb0T.js.map → theme-button-DdI6kxY3.js.map} +1 -1
  269. package/dist/{theme-button-a0LgZ7hQ.cjs → theme-button-R2f_kLEl.cjs} +1 -1
  270. package/dist/{theme-button-a0LgZ7hQ.cjs.map → theme-button-R2f_kLEl.cjs.map} +1 -1
  271. package/dist/theme-button.cjs +1 -1
  272. package/dist/theme-button.js +1 -1
  273. package/dist/theme.cjs +1 -1
  274. package/dist/theme.js +2 -2
  275. package/dist/tree.cjs +1 -1
  276. package/dist/tree.js +1 -1
  277. package/dist/typography.cjs +1 -1
  278. package/dist/typography.js +1 -1
  279. package/dist/visually-hidden.cjs +1 -1
  280. package/dist/visually-hidden.js +1 -1
  281. package/dist/{window-Bp7zWZpu.cjs → window-LOGPpN8K.cjs} +1 -1
  282. package/dist/{window-Bp7zWZpu.cjs.map → window-LOGPpN8K.cjs.map} +1 -1
  283. package/dist/{window-BT9JecWy.js → window-MQxhTodp.js} +1 -1
  284. package/dist/{window-BT9JecWy.js.map → window-MQxhTodp.js.map} +1 -1
  285. package/dist/window.cjs +1 -1
  286. package/dist/window.js +1 -1
  287. package/package.json +1 -1
  288. package/src/boat/boat.ts +33 -23
  289. package/src/directives/nebula.ts +64 -61
  290. package/types/src/directives/nebula.d.ts +1 -1
  291. package/dist/boat--fLgbDAE.js.map +0 -1
  292. package/dist/boat-BIB-gPqy.cjs +0 -80
  293. package/dist/boat-BIB-gPqy.cjs.map +0 -1
  294. package/dist/mixins-CsYsIJOI.cjs +0 -254
  295. package/dist/mixins-DySzfmal.js +0 -642
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boat-BEq-AHmL.cjs","names":[],"sources":["../src/boat/boat.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, 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 { when } from 'lit/directives/when.js'\nimport { filter, finalize, fromEvent, map, merge, switchMap, takeUntil, tap } from 'rxjs'\nimport { SPRING_SMOOTH, SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport { theme } from '../theme/theme.service.js'\n\nconst FAB_HEIGHT = 36\nconst DRAG_THRESHOLD = 5\nconst POSITION_STORAGE_KEY_PREFIX = 'schmancy-boat-'\n\ntype Corner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\ntype BoatState = 'collapsed' | 'expanded'\ninterface Position {\n\tx: number\n\ty: number\n}\n\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: contents;\n\t\tposition: relative;\n\t\tz-index: 1000;\n\t}\n\t:host([hidden]) {\n\t\tdisplay: none !important;\n\t}\n`]\n\n\t@property({ type: String }) id: string = 'default'\n\t@property({ type: String }) icon?: string\n\t@property({ type: String }) label?: string\n\t/** Override the expanded panel width (e.g. '320px', '24rem'). Defaults to responsive sizing. */\n\t@property({ type: String }) expandedWidth?: string\n\t/** When true, uses a lower elevation shadow in the minimized (FAB) state. */\n\t@property({ type: Boolean, reflect: true }) lowered: boolean = false\n\t/** Corner the boat is anchored to. */\n\t@property({ type: String }) corner: Corner = 'bottom-right'\n\t/** Whether the panel is open. */\n\t@property({ type: Boolean, reflect: true }) open: boolean = false\n\n\t/**\n\t * State property.\n\t * Maps 'expanded' → open=true, 'collapsed' → open=false (FAB visible).\n\t */\n\tget state(): BoatState {\n\t\treturn this.open ? 'expanded' : 'collapsed'\n\t}\n\tset state(val: BoatState) {\n\t\tif (val === 'expanded') {\n\t\t\tthis.expand()\n\t\t} else {\n\t\t\t// collapsed\n\t\t\tthis.close()\n\t\t}\n\t}\n\n\t// Internal drag state (triggers re-render for cursor class)\n\t@state() private isDragging = false\n\n\t// Internal position — plain fields, updated directly during drag (no re-render needed)\n\tprivate _position: Position = { x: 16, y: 16 }\n\t@state() private _currentCorner: Corner = 'bottom-right'\n\n\t// Refs\n\tprivate _containerRef = createRef<HTMLElement>()\n\tprivate _contentRef = createRef<HTMLElement>()\n\tprivate _headerRef = createRef<HTMLElement>()\n\tprivate _currentAnimation?: Animation\n\n\t// ============================================\n\t// COMPUTED\n\t// ============================================\n\n\tprivate get panelWidth(): string {\n\t\treturn this.expandedWidth ?? 'min(360px, calc(100vw - 32px))'\n\t}\n\n\tprivate get isBottomCorner(): boolean {\n\t\treturn this._currentCorner.startsWith('bottom')\n\t}\n\n\tprivate get closedClipPath(): string {\n\t\treturn this.isBottomCorner\n\t\t\t? `inset(calc(100% - ${FAB_HEIGHT}px) 0px 0px 0px round 10px)`\n\t\t\t: `inset(0px 0px calc(100% - ${FAB_HEIGHT}px) 0px round 10px)`\n\t}\n\n\tprivate get openClipPath(): string {\n\t\treturn 'inset(0px 0px 0px 0px round 4px)'\n\t}\n\n\tprivate get elevation(): 0 | 1 | 2 | 3 | 4 | 5 {\n\t\tif (this.open) return 4\n\t\treturn this.lowered ? 1 : 3\n\t}\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\n\t// ============================================\n\t// CORNER SNAPPING\n\t// ============================================\n\n\tprivate _reorientToNearestCorner(skipAnimation = false): void {\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\n\t\t// F — record current screen position before DOM mutation\n\t\tconst rect = container.getBoundingClientRect()\n\n\t\t// L — calculate nearest corner using FAB visual center (container is always collapsed during drag)\n\t\tconst currentIsBottom = this._currentCorner.includes('bottom')\n\t\tconst fabCenterX = rect.left + rect.width / 2\n\t\tconst fabCenterY = currentIsBottom\n\t\t\t? rect.bottom - FAB_HEIGHT / 2\n\t\t\t: rect.top + FAB_HEIGHT / 2\n\t\tconst side = fabCenterX > window.innerWidth / 2 ? 'right' : 'left'\n\t\tconst vert = fabCenterY > window.innerHeight / 2 ? 'bottom' : 'top'\n\t\tconst newCorner: Corner = `${vert}-${side}` as Corner\n\n\t\t// Snap corner and reset offset to standard edge gap\n\t\tthis._currentCorner = newCorner\n\t\tthis._position = { x: 16, y: 16 }\n\t\tthis._applyContainerPosition()\n\t\t// Sync clip-path to new corner — managed imperatively, not via styleMap\n\t\tif (!this.open) {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t}\n\n\t\tif (skipAnimation || reducedMotion$.value) {\n\t\t\tthis._savePosition()\n\t\t\treturn\n\t\t}\n\n\t\t// I — invert: shift element back to its original visual position\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\t// P — play: animate from the inverse offset to natural resting position\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) {\n\t\t\t\tcontainer.style.transform = ''\n\t\t\t}\n\t\t\treturn\n\t\t})\n\n\t\tthis._savePosition()\n\t}\n\n\t// ============================================\n\t// DRAG PIPELINE\n\t// ============================================\n\n\tprivate _setupDrag() {\n\t\tconst header = this._headerRef.value\n\t\tconst container = this._containerRef.value\n\t\tif (!header || !container) return\n\n\t\tlet didDrag = false\n\n\t\tfromEvent<PointerEvent>(header, 'pointerdown')\n\t\t\t.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\te.stopPropagation()\n\t\t\t\t\theader.setPointerCapture(e.pointerId)\n\t\t\t\t}),\n\t\t\t\tmap(e => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst isBottom = this._currentCorner.includes('bottom')\n\t\t\t\t\tconst wasOpen = this.open\n\t\t\t\t\tdidDrag = false\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tstartX: e.clientX,\n\t\t\t\t\t\tstartY: e.clientY,\n\t\t\t\t\t\toffsetX: e.clientX - rect.left,\n\t\t\t\t\t\toffsetY: e.clientY - rect.top,\n\t\t\t\t\t\trect,\n\t\t\t\t\t\tisBottom,\n\t\t\t\t\t\twasOpen,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tswitchMap(({ pointerId, startX, startY, offsetX, offsetY, rect, isBottom, wasOpen }) => {\n\t\t\t\t\tconst sameId = (e: PointerEvent) => e.pointerId === pointerId\n\t\t\t\t\tconst move$ = fromEvent<PointerEvent>(window, 'pointermove').pipe(filter(sameId))\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 move$.pipe(\n\t\t\t\t\t\ttap(({ clientX, clientY }) => {\n\t\t\t\t\t\t\tconst dx = clientX - startX\n\t\t\t\t\t\t\tconst dy = clientY - startY\n\t\t\t\t\t\t\tif (Math.sqrt(dx * dx + dy * dy) > DRAG_THRESHOLD && !didDrag) {\n\t\t\t\t\t\t\t\tdidDrag = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t\t// Collapse on first confirmed drag move (not on click)\n\t\t\t\t\t\t\t\tif (wasOpen) {\n\t\t\t\t\t\t\t\t\tthis._currentAnimation?.cancel()\n\t\t\t\t\t\t\t\t\tthis.open = false\n\t\t\t\t\t\t\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\t\t\t\t\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\t\t\t\t\t\t\tconst content = this._contentRef.value\n\t\t\t\t\t\t\t\t\tif (content) {\n\t\t\t\t\t\t\t\t\t\tcontent.inert = true\n\t\t\t\t\t\t\t\t\t\tcontent.style.visibility = 'hidden'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!didDrag) return\n\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(clientX - offsetX, vw - rect.width))\n\t\t\t\t\t\t\t// Allow container to go partially off-screen so FAB stays reachable at all edges\n\t\t\t\t\t\t\tconst minTop = isBottom ? FAB_HEIGHT - rect.height : 0\n\t\t\t\t\t\t\tconst maxTop = isBottom ? vh - rect.height : vh - FAB_HEIGHT\n\t\t\t\t\t\t\tconst top = Math.max(minTop, Math.min(clientY - offsetY, maxTop))\n\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: isBottom ? 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 (didDrag) {\n\t\t\t\t\t\t\t\tthis._reorientToNearestCorner()\n\t\t\t\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\t\t\t\tdidDrag = false\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\t\t\t\tdidDrag = false\n\t\t\t\t\t\t\t\tthis.toggle()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t// ============================================\n\t// LIFECYCLE\n\t// ============================================\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tfromEvent(window, 'resize')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(() => this._validateBounds())\n\n\t\ttheme.bottomOffset$.pipe(\n\t\t\ttap(() => this._applyContainerPosition()),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\tfirstUpdated() {\n\t\t// Initialize corner from property\n\t\tthis._currentCorner = this.corner\n\n\t\t// Load saved drag position from localStorage\n\t\tthis._loadPosition()\n\n\t\tconst container = this._containerRef.value\n\t\tconst content = this._contentRef.value\n\t\tif (!container) return\n\n\t\t// Apply initial position\n\t\tthis._applyContainerPosition()\n\n\t\t// Set initial open/closed visual state\n\t\tif (this.open) {\n\t\t\tcontainer.style.overflow = ''\n\t\t\tif (content) {\n\t\t\t\tcontent.inert = false\n\t\t\t\tcontent.style.visibility = 'visible'\n\t\t\t}\n\t\t} else {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\tif (content) {\n\t\t\t\tcontent.inert = true\n\t\t\t\tcontent.style.visibility = 'hidden'\n\t\t\t}\n\t\t}\n\n\t\t// Set up drag\n\t\tthis._setupDrag()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis._currentAnimation?.cancel()\n\t}\n\n\t// ============================================\n\t// ANIMATION\n\t// ============================================\n\n\tprivate async _animateOpen(): Promise<void> {\n\t\tconst container = this._containerRef.value\n\t\tconst content = this._contentRef.value\n\t\tif (!container) return\n\n\t\tif (content) {\n\t\t\tcontent.style.visibility = 'visible'\n\t\t\tcontent.inert = false\n\t\t}\n\n\t\tthis.open = true\n\t\tawait this.updateComplete\n\n\t\tif (reducedMotion$.value) {\n\t\t\tcontainer.style.clipPath = ''\n\t\t\tcontainer.style.overflow = ''\n\t\t\tthis.dispatchScopedEvent('toggle', 'expanded')\n\t\t\treturn\n\t\t}\n\n\t\tthis._currentAnimation?.cancel()\n\t\tcontainer.style.overflow = 'hidden'\n\n\t\tconst openKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: this.closedClipPath, opacity: 0.85 },\n\t\t\t{ clipPath: this.openClipPath, opacity: 1 },\n\t\t]\n\t\tconst anim = container.animate(openKeyframes, {\n\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tthis._currentAnimation = anim\n\n\t\t// Clear clip-path so overflow/scroll work normally after animation\n\t\tanim.finished.then(() => {\n\t\t\tif (container.isConnected) {\n\t\t\t\tcontainer.style.clipPath = ''\n\t\t\t\tcontainer.style.overflow = ''\n\t\t\t}\n\t\t\treturn\n\t\t})\n\n\t\tthis.dispatchScopedEvent('toggle', 'expanded')\n\t}\n\n\tprivate async _animateClose(): Promise<void> {\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\n\t\tif (reducedMotion$.value) {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\tthis.open = false\n\t\t\tconst content = this._contentRef.value\n\t\t\tif (content) {\n\t\t\t\tcontent.inert = true\n\t\t\t\tcontent.style.visibility = 'hidden'\n\t\t\t}\n\t\t\tthis.dispatchScopedEvent('toggle', 'collapsed')\n\t\t\treturn\n\t\t}\n\n\t\tthis._currentAnimation?.cancel()\n\t\tcontainer.style.overflow = 'hidden'\n\n\t\tconst closeKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: this.openClipPath, opacity: 1 },\n\t\t\t{ clipPath: this.closedClipPath, opacity: 0.85 },\n\t\t]\n\t\tconst anim = container.animate(closeKeyframes, {\n\t\t\tduration: Math.round(SPRING_SNAPPY.duration * 0.9),\n\t\t\teasing: 'cubic-bezier(0.4, 0, 0.8, 0.15)',\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tthis._currentAnimation = anim\n\n\t\tawait anim.finished\n\n\t\tthis.open = false\n\n\t\tconst content = this._contentRef.value\n\t\tif (content) {\n\t\t\tcontent.inert = true\n\t\t\tcontent.style.visibility = 'hidden'\n\t\t}\n\n\t\tthis.dispatchScopedEvent('toggle', 'collapsed')\n\t}\n\n\t// ============================================\n\t// PUBLIC API\n\t// ============================================\n\n\ttoggle() {\n\t\tif (this.open) this._animateClose()\n\t\telse this._animateOpen()\n\t}\n\n\texpand() {\n\t\tif (this.open) return\n\t\tthis.removeAttribute('hidden')\n\t\tif (!this._containerRef.value) {\n\t\t\tthis.open = true\n\t\t\treturn\n\t\t}\n\t\tthis._animateOpen()\n\t}\n\n\t/** Alias for expand() — kept for backwards compatibility. */\n\tshow() {\n\t\tthis.expand()\n\t}\n\n\tclose() {\n\t\tif (!this.open) return\n\t\tif (!this._containerRef.value) {\n\t\t\tthis.open = false\n\t\t\treturn\n\t\t}\n\t\tthis._animateClose()\n\t}\n\n\t// ============================================\n\t// RENDER\n\t// ============================================\n\n\tprotected render(): unknown {\n\t\tconst isBottom = this._currentCorner.startsWith('bottom')\n\n\t\tconst containerClasses = classMap({\n\t\t\tflex: true,\n\t\t\t'flex-col': isBottom,\n\t\t\t'flex-col-reverse': !isBottom,\n\t\t\t'will-change-[clip-path]': true,\n\t\t\t'z-1000': true,\n\t\t\t// open: 4px radius (instrument-sharp); closed: 10px (status-bar pill)\n\t\t\t'rounded': this.open,\n\t\t\t'rounded-lg': !this.open,\n\t\t\t'overflow-hidden': true,\n\t\t\t// micro-scale + reduced opacity signals lift during drag\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\twidth: this.panelWidth,\n\t\t\t'max-height': 'calc(100vh - 32px)',\n\t\t\t'pointer-events': 'none',\n\t\t})\n\n\t\tconst contentStyles = styleMap({\n\t\t\t'pointer-events': this.open ? 'auto' : 'none',\n\t\t})\n\n\t\tconst headerClasses = classMap({\n\t\t\t'h-full': true,\n\t\t\t'px-3': true,\n\t\t\tflex: true,\n\t\t\t'items-center': true,\n\t\t\t'gap-2': true,\n\t\t\t'select-none': true,\n\t\t\t'touch-none': true,\n\t\t\t'cursor-grabbing': this.isDragging,\n\t\t\t'cursor-move': !this.isDragging,\n\t\t\t'transition-opacity': true,\n\t\t\t'duration-200': true,\n\t\t})\n\n\t\treturn html`\n\t\t\t<!-- schmancy-surface owns background color and elevation-based shadow.\n\t\t\t Position is managed imperatively via _applyContainerPosition(). -->\n\t\t\t<schmancy-surface\n\t\t\t\t${ref(this._containerRef)}\n\t\t\t\ttype=\"glass\"\n\t\t\t\t.elevation=${this.elevation}\n\t\t\t\tclass=${containerClasses}\n\t\t\t\tstyle=${containerStyles}\n\t\t\t\taria-expanded=${this.open}\n\t\t\t>\n\t\t\t\t<!-- Content section (visually above header for bottom corners) -->\n\t\t\t\t<section\n\t\t\t\t\t${ref(this._contentRef)}\n\t\t\t\t\tclass=\"flex-1 min-h-0 overflow-hidden flex flex-col\"\n\t\t\t\t\tstyle=${contentStyles}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-label=\"${this.label ?? 'Floating panel'}\"\n\t\t\t\t>\n\t\t\t\t\t<schmancy-surface type=\"solid\" class=\"flex flex-col flex-1 min-h-0 overflow-hidden\">\n\t\t\t\t\t\t<schmancy-scroll hide class=\"flex-1\">\n\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\n\t\t\t\t<!-- Header / FAB section — always interactive, always visible -->\n\t\t\t\t<section\n\t\t\t\t\tclass=\"shrink-0 bg-surface-containerLowest relative\"\n\t\t\t\t\tstyle=${styleMap({ 'pointer-events': 'auto', height: `${FAB_HEIGHT}px` })}\n\t\t\t\t>\n\t\t\t\t\t<!-- 1px top inner highlight — reads as a lit edge when open, instrument-panel HUD accent -->\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.open,\n\t\t\t\t\t\t() => html`<div\n\t\t\t\t\t\t\tclass=\"absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-primary-default/40 to-transparent pointer-events-none\"\n\t\t\t\t\t\t></div>`,\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\t${ref(this._headerRef)}\n\t\t\t\t\t\tclass=${headerClasses}\n\t\t\t\t\t\ttitle=\"Drag to move\"\n\t\t\t\t\t\taria-label=\"Drag to reposition panel\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<!-- Grip indicator: only visible when collapsed, signals \"this is a handle\" -->\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t!this.open,\n\t\t\t\t\t\t\t() => html`<div\n\t\t\t\t\t\t\t\tclass=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-6 h-0.5 rounded-full bg-on-surface/20 pointer-events-none\"\n\t\t\t\t\t\t\t\tstyle=\"z-index:0\"\n\t\t\t\t\t\t\t></div>`,\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<!-- Summary slot rendered once — avoids DOM teardown on toggle -->\n\t\t\t\t\t\t<div class=\"flex-1 min-w-0 relative\" style=\"z-index:1\">\n\t\t\t\t\t\t\t<slot name=\"summary\"></slot>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Toggle button: chevron up/down matches open/close direction per corner -->\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\tthis.open,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.close()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Collapse\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t${isBottom ? 'expand_more' : 'expand_less'}\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.expand()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Expand\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t${isBottom ? 'expand_less' : 'expand_more'}\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\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,4 +1,4 @@
1
- import { c as e } from "./mixins-DySzfmal.js";
1
+ import { c as e } from "./mixins-CKbQ6BJo.js";
2
2
  import { a as t } from "./active-host-BP0zy_Y9.js";
3
3
  import { d as n, f as r } from "./animation-DCznELuT.js";
4
4
  import { t as i } from "./reduced-motion-D-L12p7G.js";
@@ -10,7 +10,7 @@ import { customElement as g, property as _, state as v } from "lit/decorators.js
10
10
  import { css as y, html as b } from "lit";
11
11
  import { createRef as x, ref as S } from "lit/directives/ref.js";
12
12
  import { when as C } from "lit/directives/when.js";
13
- var w = 44, T = "schmancy-boat-", E = class extends e {
13
+ var w = 36, T = "schmancy-boat-", E = class extends e {
14
14
  constructor(...e) {
15
15
  super(...e), this.id = "default", this.lowered = !1, this.corner = "bottom-right", this.open = !1, this.isDragging = !1, this._position = {
16
16
  x: 16,
@@ -42,10 +42,10 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
42
42
  return this._currentCorner.startsWith("bottom");
43
43
  }
44
44
  get closedClipPath() {
45
- return this.isBottomCorner ? "inset(calc(100% - 44px) 0px 0px 0px round 22px)" : "inset(0px 0px calc(100% - 44px) 0px round 22px)";
45
+ return this.isBottomCorner ? "inset(calc(100% - 36px) 0px 0px 0px round 10px)" : "inset(0px 0px calc(100% - 36px) 0px round 10px)";
46
46
  }
47
47
  get openClipPath() {
48
- return "inset(0px 0px 0px 0px round 12px)";
48
+ return "inset(0px 0px 0px 0px round 4px)";
49
49
  }
50
50
  get elevation() {
51
51
  return this.open ? 4 : this.lowered ? 1 : 3;
@@ -91,7 +91,7 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
91
91
  _reorientToNearestCorner(e = !1) {
92
92
  let t = this._containerRef.value;
93
93
  if (!t) return;
94
- let r = t.getBoundingClientRect(), a = this._currentCorner.includes("bottom"), o = r.left + r.width / 2, s = a ? r.bottom - 22 : r.top + 22, c = o > window.innerWidth / 2 ? "right" : "left", l = `${s > window.innerHeight / 2 ? "bottom" : "top"}-${c}`;
94
+ let r = t.getBoundingClientRect(), a = this._currentCorner.includes("bottom"), o = r.left + r.width / 2, s = a ? r.bottom - 18 : r.top + 18, c = o > window.innerWidth / 2 ? "right" : "left", l = `${s > window.innerHeight / 2 ? "bottom" : "top"}-${c}`;
95
95
  if (this._currentCorner = l, this._position = {
96
96
  x: 16,
97
97
  y: 16
@@ -163,7 +163,7 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
163
163
  this._currentAnimation?.cancel(), e.style.overflow = "hidden";
164
164
  let r = [{
165
165
  clipPath: this.closedClipPath,
166
- opacity: .95
166
+ opacity: .85
167
167
  }, {
168
168
  clipPath: this.openClipPath,
169
169
  opacity: 1
@@ -191,7 +191,7 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
191
191
  opacity: 1
192
192
  }, {
193
193
  clipPath: this.closedClipPath,
194
- opacity: .95
194
+ opacity: .85
195
195
  }], n = e.animate(t, {
196
196
  duration: Math.round(.9 * r.duration),
197
197
  easing: "cubic-bezier(0.4, 0, 0.8, 0.15)",
@@ -220,10 +220,11 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
220
220
  "flex-col-reverse": !e,
221
221
  "will-change-[clip-path]": !0,
222
222
  "z-1000": !0,
223
- "rounded-2xl": this.open,
224
- "rounded-[22px]": !this.open,
223
+ rounded: this.open,
224
+ "rounded-lg": !this.open,
225
225
  "overflow-hidden": !0,
226
- "opacity-95": this.isDragging
226
+ "opacity-85": this.isDragging,
227
+ "scale-95": this.isDragging
227
228
  }), n = h({
228
229
  position: "fixed",
229
230
  width: this.panelWidth,
@@ -268,31 +269,36 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
268
269
  </schmancy-surface>
269
270
  </section>
270
271
 
271
- <!-- Gradient separator between header and content — only when open -->
272
- ${C(this.open, () => b`<div
273
- class="h-px shrink-0 bg-linear-to-r from-transparent via-primary-default/30 to-transparent"
274
- ></div>`)}
275
-
276
272
  <!-- Header / FAB section — always interactive, always visible -->
277
273
  <section
278
- class="shrink-0 bg-surface-containerLowest"
274
+ class="shrink-0 bg-surface-containerLowest relative"
279
275
  style=${h({
280
276
  "pointer-events": "auto",
281
- height: "44px"
277
+ height: "36px"
282
278
  })}
283
279
  >
280
+ <!-- 1px top inner highlight — reads as a lit edge when open, instrument-panel HUD accent -->
281
+ ${C(this.open, () => b`<div
282
+ class="absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-primary-default/40 to-transparent pointer-events-none"
283
+ ></div>`)}
284
284
  <div
285
285
  ${S(this._headerRef)}
286
286
  class=${i}
287
287
  title="Drag to move"
288
288
  aria-label="Drag to reposition panel"
289
289
  >
290
+ <!-- Grip indicator: only visible when collapsed, signals "this is a handle" -->
291
+ ${C(!this.open, () => b`<div
292
+ class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-6 h-0.5 rounded-full bg-on-surface/20 pointer-events-none"
293
+ style="z-index:0"
294
+ ></div>`)}
295
+
290
296
  <!-- Summary slot rendered once — avoids DOM teardown on toggle -->
291
- <div class="flex-1 min-w-0">
297
+ <div class="flex-1 min-w-0 relative" style="z-index:1">
292
298
  <slot name="summary"></slot>
293
299
  </div>
294
300
 
295
- <!-- Toggle button: collapse when open, expand when closed -->
301
+ <!-- Toggle button: chevron up/down matches open/close direction per corner -->
296
302
  ${C(this.open, () => b`
297
303
  <schmancy-icon-button
298
304
  size="sm"
@@ -302,7 +308,7 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
302
308
  }}
303
309
  title="Collapse"
304
310
  >
305
- close_fullscreen
311
+ ${e ? "expand_more" : "expand_less"}
306
312
  </schmancy-icon-button>
307
313
  `, () => b`
308
314
  <schmancy-icon-button
@@ -313,7 +319,7 @@ var w = 44, T = "schmancy-boat-", E = class extends e {
313
319
  }}
314
320
  title="Expand"
315
321
  >
316
- fullscreen
322
+ ${e ? "expand_less" : "expand_more"}
317
323
  </schmancy-icon-button>
318
324
  `)}
319
325
  </div>
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boat-BW6aRcdY.js","names":[],"sources":["../src/boat/boat.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, 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 { when } from 'lit/directives/when.js'\nimport { filter, finalize, fromEvent, map, merge, switchMap, takeUntil, tap } from 'rxjs'\nimport { SPRING_SMOOTH, SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport { theme } from '../theme/theme.service.js'\n\nconst FAB_HEIGHT = 36\nconst DRAG_THRESHOLD = 5\nconst POSITION_STORAGE_KEY_PREFIX = 'schmancy-boat-'\n\ntype Corner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\ntype BoatState = 'collapsed' | 'expanded'\ninterface Position {\n\tx: number\n\ty: number\n}\n\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: contents;\n\t\tposition: relative;\n\t\tz-index: 1000;\n\t}\n\t:host([hidden]) {\n\t\tdisplay: none !important;\n\t}\n`]\n\n\t@property({ type: String }) id: string = 'default'\n\t@property({ type: String }) icon?: string\n\t@property({ type: String }) label?: string\n\t/** Override the expanded panel width (e.g. '320px', '24rem'). Defaults to responsive sizing. */\n\t@property({ type: String }) expandedWidth?: string\n\t/** When true, uses a lower elevation shadow in the minimized (FAB) state. */\n\t@property({ type: Boolean, reflect: true }) lowered: boolean = false\n\t/** Corner the boat is anchored to. */\n\t@property({ type: String }) corner: Corner = 'bottom-right'\n\t/** Whether the panel is open. */\n\t@property({ type: Boolean, reflect: true }) open: boolean = false\n\n\t/**\n\t * State property.\n\t * Maps 'expanded' → open=true, 'collapsed' → open=false (FAB visible).\n\t */\n\tget state(): BoatState {\n\t\treturn this.open ? 'expanded' : 'collapsed'\n\t}\n\tset state(val: BoatState) {\n\t\tif (val === 'expanded') {\n\t\t\tthis.expand()\n\t\t} else {\n\t\t\t// collapsed\n\t\t\tthis.close()\n\t\t}\n\t}\n\n\t// Internal drag state (triggers re-render for cursor class)\n\t@state() private isDragging = false\n\n\t// Internal position — plain fields, updated directly during drag (no re-render needed)\n\tprivate _position: Position = { x: 16, y: 16 }\n\t@state() private _currentCorner: Corner = 'bottom-right'\n\n\t// Refs\n\tprivate _containerRef = createRef<HTMLElement>()\n\tprivate _contentRef = createRef<HTMLElement>()\n\tprivate _headerRef = createRef<HTMLElement>()\n\tprivate _currentAnimation?: Animation\n\n\t// ============================================\n\t// COMPUTED\n\t// ============================================\n\n\tprivate get panelWidth(): string {\n\t\treturn this.expandedWidth ?? 'min(360px, calc(100vw - 32px))'\n\t}\n\n\tprivate get isBottomCorner(): boolean {\n\t\treturn this._currentCorner.startsWith('bottom')\n\t}\n\n\tprivate get closedClipPath(): string {\n\t\treturn this.isBottomCorner\n\t\t\t? `inset(calc(100% - ${FAB_HEIGHT}px) 0px 0px 0px round 10px)`\n\t\t\t: `inset(0px 0px calc(100% - ${FAB_HEIGHT}px) 0px round 10px)`\n\t}\n\n\tprivate get openClipPath(): string {\n\t\treturn 'inset(0px 0px 0px 0px round 4px)'\n\t}\n\n\tprivate get elevation(): 0 | 1 | 2 | 3 | 4 | 5 {\n\t\tif (this.open) return 4\n\t\treturn this.lowered ? 1 : 3\n\t}\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\n\t// ============================================\n\t// CORNER SNAPPING\n\t// ============================================\n\n\tprivate _reorientToNearestCorner(skipAnimation = false): void {\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\n\t\t// F — record current screen position before DOM mutation\n\t\tconst rect = container.getBoundingClientRect()\n\n\t\t// L — calculate nearest corner using FAB visual center (container is always collapsed during drag)\n\t\tconst currentIsBottom = this._currentCorner.includes('bottom')\n\t\tconst fabCenterX = rect.left + rect.width / 2\n\t\tconst fabCenterY = currentIsBottom\n\t\t\t? rect.bottom - FAB_HEIGHT / 2\n\t\t\t: rect.top + FAB_HEIGHT / 2\n\t\tconst side = fabCenterX > window.innerWidth / 2 ? 'right' : 'left'\n\t\tconst vert = fabCenterY > window.innerHeight / 2 ? 'bottom' : 'top'\n\t\tconst newCorner: Corner = `${vert}-${side}` as Corner\n\n\t\t// Snap corner and reset offset to standard edge gap\n\t\tthis._currentCorner = newCorner\n\t\tthis._position = { x: 16, y: 16 }\n\t\tthis._applyContainerPosition()\n\t\t// Sync clip-path to new corner — managed imperatively, not via styleMap\n\t\tif (!this.open) {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t}\n\n\t\tif (skipAnimation || reducedMotion$.value) {\n\t\t\tthis._savePosition()\n\t\t\treturn\n\t\t}\n\n\t\t// I — invert: shift element back to its original visual position\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\t// P — play: animate from the inverse offset to natural resting position\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) {\n\t\t\t\tcontainer.style.transform = ''\n\t\t\t}\n\t\t\treturn\n\t\t})\n\n\t\tthis._savePosition()\n\t}\n\n\t// ============================================\n\t// DRAG PIPELINE\n\t// ============================================\n\n\tprivate _setupDrag() {\n\t\tconst header = this._headerRef.value\n\t\tconst container = this._containerRef.value\n\t\tif (!header || !container) return\n\n\t\tlet didDrag = false\n\n\t\tfromEvent<PointerEvent>(header, 'pointerdown')\n\t\t\t.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\te.stopPropagation()\n\t\t\t\t\theader.setPointerCapture(e.pointerId)\n\t\t\t\t}),\n\t\t\t\tmap(e => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst isBottom = this._currentCorner.includes('bottom')\n\t\t\t\t\tconst wasOpen = this.open\n\t\t\t\t\tdidDrag = false\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tstartX: e.clientX,\n\t\t\t\t\t\tstartY: e.clientY,\n\t\t\t\t\t\toffsetX: e.clientX - rect.left,\n\t\t\t\t\t\toffsetY: e.clientY - rect.top,\n\t\t\t\t\t\trect,\n\t\t\t\t\t\tisBottom,\n\t\t\t\t\t\twasOpen,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tswitchMap(({ pointerId, startX, startY, offsetX, offsetY, rect, isBottom, wasOpen }) => {\n\t\t\t\t\tconst sameId = (e: PointerEvent) => e.pointerId === pointerId\n\t\t\t\t\tconst move$ = fromEvent<PointerEvent>(window, 'pointermove').pipe(filter(sameId))\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 move$.pipe(\n\t\t\t\t\t\ttap(({ clientX, clientY }) => {\n\t\t\t\t\t\t\tconst dx = clientX - startX\n\t\t\t\t\t\t\tconst dy = clientY - startY\n\t\t\t\t\t\t\tif (Math.sqrt(dx * dx + dy * dy) > DRAG_THRESHOLD && !didDrag) {\n\t\t\t\t\t\t\t\tdidDrag = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t\t// Collapse on first confirmed drag move (not on click)\n\t\t\t\t\t\t\t\tif (wasOpen) {\n\t\t\t\t\t\t\t\t\tthis._currentAnimation?.cancel()\n\t\t\t\t\t\t\t\t\tthis.open = false\n\t\t\t\t\t\t\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\t\t\t\t\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\t\t\t\t\t\t\tconst content = this._contentRef.value\n\t\t\t\t\t\t\t\t\tif (content) {\n\t\t\t\t\t\t\t\t\t\tcontent.inert = true\n\t\t\t\t\t\t\t\t\t\tcontent.style.visibility = 'hidden'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!didDrag) return\n\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(clientX - offsetX, vw - rect.width))\n\t\t\t\t\t\t\t// Allow container to go partially off-screen so FAB stays reachable at all edges\n\t\t\t\t\t\t\tconst minTop = isBottom ? FAB_HEIGHT - rect.height : 0\n\t\t\t\t\t\t\tconst maxTop = isBottom ? vh - rect.height : vh - FAB_HEIGHT\n\t\t\t\t\t\t\tconst top = Math.max(minTop, Math.min(clientY - offsetY, maxTop))\n\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: isBottom ? 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 (didDrag) {\n\t\t\t\t\t\t\t\tthis._reorientToNearestCorner()\n\t\t\t\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\t\t\t\tdidDrag = false\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\t\t\t\tdidDrag = false\n\t\t\t\t\t\t\t\tthis.toggle()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t// ============================================\n\t// LIFECYCLE\n\t// ============================================\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tfromEvent(window, 'resize')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(() => this._validateBounds())\n\n\t\ttheme.bottomOffset$.pipe(\n\t\t\ttap(() => this._applyContainerPosition()),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\tfirstUpdated() {\n\t\t// Initialize corner from property\n\t\tthis._currentCorner = this.corner\n\n\t\t// Load saved drag position from localStorage\n\t\tthis._loadPosition()\n\n\t\tconst container = this._containerRef.value\n\t\tconst content = this._contentRef.value\n\t\tif (!container) return\n\n\t\t// Apply initial position\n\t\tthis._applyContainerPosition()\n\n\t\t// Set initial open/closed visual state\n\t\tif (this.open) {\n\t\t\tcontainer.style.overflow = ''\n\t\t\tif (content) {\n\t\t\t\tcontent.inert = false\n\t\t\t\tcontent.style.visibility = 'visible'\n\t\t\t}\n\t\t} else {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\tif (content) {\n\t\t\t\tcontent.inert = true\n\t\t\t\tcontent.style.visibility = 'hidden'\n\t\t\t}\n\t\t}\n\n\t\t// Set up drag\n\t\tthis._setupDrag()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis._currentAnimation?.cancel()\n\t}\n\n\t// ============================================\n\t// ANIMATION\n\t// ============================================\n\n\tprivate async _animateOpen(): Promise<void> {\n\t\tconst container = this._containerRef.value\n\t\tconst content = this._contentRef.value\n\t\tif (!container) return\n\n\t\tif (content) {\n\t\t\tcontent.style.visibility = 'visible'\n\t\t\tcontent.inert = false\n\t\t}\n\n\t\tthis.open = true\n\t\tawait this.updateComplete\n\n\t\tif (reducedMotion$.value) {\n\t\t\tcontainer.style.clipPath = ''\n\t\t\tcontainer.style.overflow = ''\n\t\t\tthis.dispatchScopedEvent('toggle', 'expanded')\n\t\t\treturn\n\t\t}\n\n\t\tthis._currentAnimation?.cancel()\n\t\tcontainer.style.overflow = 'hidden'\n\n\t\tconst openKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: this.closedClipPath, opacity: 0.85 },\n\t\t\t{ clipPath: this.openClipPath, opacity: 1 },\n\t\t]\n\t\tconst anim = container.animate(openKeyframes, {\n\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tthis._currentAnimation = anim\n\n\t\t// Clear clip-path so overflow/scroll work normally after animation\n\t\tanim.finished.then(() => {\n\t\t\tif (container.isConnected) {\n\t\t\t\tcontainer.style.clipPath = ''\n\t\t\t\tcontainer.style.overflow = ''\n\t\t\t}\n\t\t\treturn\n\t\t})\n\n\t\tthis.dispatchScopedEvent('toggle', 'expanded')\n\t}\n\n\tprivate async _animateClose(): Promise<void> {\n\t\tconst container = this._containerRef.value\n\t\tif (!container) return\n\n\t\tif (reducedMotion$.value) {\n\t\t\tcontainer.style.clipPath = this.closedClipPath\n\t\t\tcontainer.style.overflow = 'hidden'\n\t\t\tthis.open = false\n\t\t\tconst content = this._contentRef.value\n\t\t\tif (content) {\n\t\t\t\tcontent.inert = true\n\t\t\t\tcontent.style.visibility = 'hidden'\n\t\t\t}\n\t\t\tthis.dispatchScopedEvent('toggle', 'collapsed')\n\t\t\treturn\n\t\t}\n\n\t\tthis._currentAnimation?.cancel()\n\t\tcontainer.style.overflow = 'hidden'\n\n\t\tconst closeKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: this.openClipPath, opacity: 1 },\n\t\t\t{ clipPath: this.closedClipPath, opacity: 0.85 },\n\t\t]\n\t\tconst anim = container.animate(closeKeyframes, {\n\t\t\tduration: Math.round(SPRING_SNAPPY.duration * 0.9),\n\t\t\teasing: 'cubic-bezier(0.4, 0, 0.8, 0.15)',\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tthis._currentAnimation = anim\n\n\t\tawait anim.finished\n\n\t\tthis.open = false\n\n\t\tconst content = this._contentRef.value\n\t\tif (content) {\n\t\t\tcontent.inert = true\n\t\t\tcontent.style.visibility = 'hidden'\n\t\t}\n\n\t\tthis.dispatchScopedEvent('toggle', 'collapsed')\n\t}\n\n\t// ============================================\n\t// PUBLIC API\n\t// ============================================\n\n\ttoggle() {\n\t\tif (this.open) this._animateClose()\n\t\telse this._animateOpen()\n\t}\n\n\texpand() {\n\t\tif (this.open) return\n\t\tthis.removeAttribute('hidden')\n\t\tif (!this._containerRef.value) {\n\t\t\tthis.open = true\n\t\t\treturn\n\t\t}\n\t\tthis._animateOpen()\n\t}\n\n\t/** Alias for expand() — kept for backwards compatibility. */\n\tshow() {\n\t\tthis.expand()\n\t}\n\n\tclose() {\n\t\tif (!this.open) return\n\t\tif (!this._containerRef.value) {\n\t\t\tthis.open = false\n\t\t\treturn\n\t\t}\n\t\tthis._animateClose()\n\t}\n\n\t// ============================================\n\t// RENDER\n\t// ============================================\n\n\tprotected render(): unknown {\n\t\tconst isBottom = this._currentCorner.startsWith('bottom')\n\n\t\tconst containerClasses = classMap({\n\t\t\tflex: true,\n\t\t\t'flex-col': isBottom,\n\t\t\t'flex-col-reverse': !isBottom,\n\t\t\t'will-change-[clip-path]': true,\n\t\t\t'z-1000': true,\n\t\t\t// open: 4px radius (instrument-sharp); closed: 10px (status-bar pill)\n\t\t\t'rounded': this.open,\n\t\t\t'rounded-lg': !this.open,\n\t\t\t'overflow-hidden': true,\n\t\t\t// micro-scale + reduced opacity signals lift during drag\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\twidth: this.panelWidth,\n\t\t\t'max-height': 'calc(100vh - 32px)',\n\t\t\t'pointer-events': 'none',\n\t\t})\n\n\t\tconst contentStyles = styleMap({\n\t\t\t'pointer-events': this.open ? 'auto' : 'none',\n\t\t})\n\n\t\tconst headerClasses = classMap({\n\t\t\t'h-full': true,\n\t\t\t'px-3': true,\n\t\t\tflex: true,\n\t\t\t'items-center': true,\n\t\t\t'gap-2': true,\n\t\t\t'select-none': true,\n\t\t\t'touch-none': true,\n\t\t\t'cursor-grabbing': this.isDragging,\n\t\t\t'cursor-move': !this.isDragging,\n\t\t\t'transition-opacity': true,\n\t\t\t'duration-200': true,\n\t\t})\n\n\t\treturn html`\n\t\t\t<!-- schmancy-surface owns background color and elevation-based shadow.\n\t\t\t Position is managed imperatively via _applyContainerPosition(). -->\n\t\t\t<schmancy-surface\n\t\t\t\t${ref(this._containerRef)}\n\t\t\t\ttype=\"glass\"\n\t\t\t\t.elevation=${this.elevation}\n\t\t\t\tclass=${containerClasses}\n\t\t\t\tstyle=${containerStyles}\n\t\t\t\taria-expanded=${this.open}\n\t\t\t>\n\t\t\t\t<!-- Content section (visually above header for bottom corners) -->\n\t\t\t\t<section\n\t\t\t\t\t${ref(this._contentRef)}\n\t\t\t\t\tclass=\"flex-1 min-h-0 overflow-hidden flex flex-col\"\n\t\t\t\t\tstyle=${contentStyles}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-label=\"${this.label ?? 'Floating panel'}\"\n\t\t\t\t>\n\t\t\t\t\t<schmancy-surface type=\"solid\" class=\"flex flex-col flex-1 min-h-0 overflow-hidden\">\n\t\t\t\t\t\t<schmancy-scroll hide class=\"flex-1\">\n\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\n\t\t\t\t<!-- Header / FAB section — always interactive, always visible -->\n\t\t\t\t<section\n\t\t\t\t\tclass=\"shrink-0 bg-surface-containerLowest relative\"\n\t\t\t\t\tstyle=${styleMap({ 'pointer-events': 'auto', height: `${FAB_HEIGHT}px` })}\n\t\t\t\t>\n\t\t\t\t\t<!-- 1px top inner highlight — reads as a lit edge when open, instrument-panel HUD accent -->\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.open,\n\t\t\t\t\t\t() => html`<div\n\t\t\t\t\t\t\tclass=\"absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-primary-default/40 to-transparent pointer-events-none\"\n\t\t\t\t\t\t></div>`,\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\t${ref(this._headerRef)}\n\t\t\t\t\t\tclass=${headerClasses}\n\t\t\t\t\t\ttitle=\"Drag to move\"\n\t\t\t\t\t\taria-label=\"Drag to reposition panel\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<!-- Grip indicator: only visible when collapsed, signals \"this is a handle\" -->\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\t!this.open,\n\t\t\t\t\t\t\t() => html`<div\n\t\t\t\t\t\t\t\tclass=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-6 h-0.5 rounded-full bg-on-surface/20 pointer-events-none\"\n\t\t\t\t\t\t\t\tstyle=\"z-index:0\"\n\t\t\t\t\t\t\t></div>`,\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<!-- Summary slot rendered once — avoids DOM teardown on toggle -->\n\t\t\t\t\t\t<div class=\"flex-1 min-w-0 relative\" style=\"z-index:1\">\n\t\t\t\t\t\t\t<slot name=\"summary\"></slot>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Toggle button: chevron up/down matches open/close direction per corner -->\n\t\t\t\t\t\t${when(\n\t\t\t\t\t\t\tthis.open,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.close()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Collapse\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t${isBottom ? 'expand_more' : 'expand_less'}\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.expand()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Expand\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t${isBottom ? 'expand_less' : 'expand_more'}\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</section>\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,IAAM,IAAa,IAEb,IAA8B,kBAUrB,IAAA,cAA2B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,KAYA,WAAA,KAAA,UAAA,CAMsB,GAAA,KAAA,SAElB,gBAAA,KAAA,OAAA,CAEe,GAAA,KAAA,aAAA,CAmB9B,GAAA,KAAA,YAGA;GAAE,GAAG;GAAI,GAAG;GAAA,EAAA,KAAA,iBACA,gBAAA,KAAA,gBAGlB,GAAA,EAAA,KAAA,cACF,GAAA,EAAA,KAAA,aACD,GAAA;;CAAA;EAAA,KAAA,SAjDL,CAAC,CAAG;;;;;;;;;;;CA2BpB,IAAA,QAAI;EACH,OAAO,KAAK,OAAO,aAAa;;CAEjC,IAAA,MAAU,GAAA;EACG,AAAR,MAAQ,aACX,KAAK,QAAA,GAGL,KAAK,OAAA;;CAqBP,IAAA,aAAY;EACX,OAAO,KAAK,iBAAiB;;CAG9B,IAAA,iBAAY;EACX,OAAO,KAAK,eAAe,WAAW,SAAA;;CAGvC,IAAA,iBAAY;EACX,OAAO,KAAK,iBACT,oDACA;;CAGJ,IAAA,eAAY;EACX,OAAO;;CAGR,IAAA,YAAY;EACX,OAAI,KAAK,OAAa,IACf,KAAK,UAAU,IAAI;;CAO3B,0BAAA;EACC,IAAM,IAAY,KAAK,cAAc;EACrC,IAAA,CAAK,GAAW;EAChB,EAAU,MAAM,eAAe,OAAA,EAC/B,EAAU,MAAM,eAAe,QAAA,EAC/B,EAAU,MAAM,eAAe,MAAA,EAC/B,EAAU,MAAM,eAAe,SAAA;EAC/B,IAAA,EAAM,GAAE,GAAA,GAAG,MAAM,KAAK;EAClB,KAAK,eAAe,SAAS,QAAA,GAChC,EAAU,MAAM,QAAQ,GAAG,EAAA,MAE3B,EAAU,MAAM,OAAO,GAAG,EAAA,KAEvB,KAAK,eAAe,SAAS,SAAA,GAChC,EAAU,MAAM,SAAS,GAAG,IAAI,EAAM,aAAA,MAEtC,EAAU,MAAM,MAAM,GAAG,EAAA;;CAI3B,gBAAA;EACC,IAAA;GACC,IAAM,IAAQ,aAAa,QAAQ,IAA8B,KAAK,GAAA;GACtE,IAAI,GAAO;IACV,IAAM,IAAS,KAAK,MAAM,EAAA;IAC1B,KAAK,YAAY;KAAE,GAAG,EAAO;KAAG,GAAG,EAAO;KAAA,EAC1C,KAAK,iBAAiB,EAAO;;UAAA;;CAOhC,gBAAA;EACC,IAAA;GACC,aAAa,QACZ,IAA8B,KAAK,IACnC,KAAK,UAAU;IAAA,GAAK,KAAK;IAAW,QAAQ,KAAK;IAAA,CAAA,CAAA;UAAA;;CAOpD,kBAAA;EACC,IAAM,IAAY,KAAK,cAAc;EACrC,IAAA,CAAK,GAAW;EAChB,IAAM,IAAO,EAAU,uBAAA;EACvB,IAAI,EAAK,UAAU,GAAG;EACtB,IAAM,IAAK,OAAO,YACZ,IAAK,OAAO,aACZ,IAAU,KAAK,eAAe,SAAS,QAAA,EACvC,IAAW,KAAK,eAAe,SAAS,SAAA,EACxC,IAAa,IAAU,IAAK,KAAK,UAAU,IAAI,EAAK,QAAQ,KAAK,UAAU,GAC3E,IAAY,IAAW,IAAK,KAAK,UAAU,IAAI,EAAK,SAAS,KAAK,UAAU,GAC5E,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAY,IAAK,EAAK,MAAA,CAAA,EACrD,IAAS,KAAK,IAAI,GAAG,KAAK,IAAI,GAAW,IAAK,EAAK,OAAA,CAAA;EACzD,KAAK,YAAY;GAChB,GAAG,IAAU,IAAK,IAAU,EAAK,QAAQ;GACzC,GAAG,IAAW,IAAK,IAAS,EAAK,SAAS;GAAA,EAE3C,KAAK,yBAAA;;CAQN,yBAAiC,IAAA,CAAgB,GAAA;EAChD,IAAM,IAAY,KAAK,cAAc;EACrC,IAAA,CAAK,GAAW;EAGhB,IAAM,IAAO,EAAU,uBAAA,EAGjB,IAAkB,KAAK,eAAe,SAAS,SAAA,EAC/C,IAAa,EAAK,OAAO,EAAK,QAAQ,GACtC,IAAa,IAChB,EAAK,SAAS,KACd,EAAK,MAAM,IACR,IAAO,IAAa,OAAO,aAAa,IAAI,UAAU,QAEtD,IAAoB,GADb,IAAa,OAAO,cAAc,IAAI,WAAW,MAAA,GACzB;EAWrC,IARA,KAAK,iBAAiB,GACtB,KAAK,YAAY;GAAE,GAAG;GAAI,GAAG;GAAA,EAC7B,KAAK,yBAAA,EAEA,KAAK,SACT,EAAU,MAAM,WAAW,KAAK,iBAG7B,KAAiB,EAAe,OAEnC,OAAA,KADA,KAAK,eAAA;EAKN,IAAM,IAAU,EAAU,uBAAA,EACpB,IAAK,EAAK,OAAO,EAAQ,MACzB,IAAK,EAAK,MAAM,EAAQ;EAC9B,EAAU,MAAM,YAAY,aAAa,EAAA,MAAS,EAAA,MAGlD,KAAK,mBAAmB,QAAA;EACxB,IAAM,IAAO,EAAU,QACtB,CAAC,EAAE,WAAW,EAAU,MAAM,WAAA,EAAa,EAAE,WAAW,kBAAA,CAAA,EACxD;GACC,UAAU,EAAc;GACxB,QAAQ,EAAc;GACtB,MAAM;GAAA,CAAA;EAGR,KAAK,oBAAoB,GACzB,EAAK,SAAS,WAAA;GACT,EAAU,gBACb,EAAU,MAAM,YAAY;IAAA,EAK9B,KAAK,eAAA;;CAON,aAAA;EACC,IAAM,IAAS,KAAK,WAAW,OACzB,IAAY,KAAK,cAAc;EACrC,IAAA,CAAK,KAAA,CAAW,GAAW;EAE3B,IAAI,IAAA,CAAU;EAEd,EAAwB,GAAQ,cAAA,CAC9B,KACA,GAAO,MAAK,EAAE,WAAW,EAAX,EACd,GAAI,MAAA;GACH,EAAE,gBAAA,EACF,EAAE,iBAAA,EACF,EAAO,kBAAkB,EAAE,UAAA;IAAA,EAE5B,GAAI,MAAA;GACH,IAAM,IAAO,EAAU,uBAAA,EACjB,IAAW,KAAK,eAAe,SAAS,SAAA,EACxC,IAAU,KAAK;GAErB,OADA,IAAA,CAAU,GACH;IACN,WAAW,EAAE;IACb,QAAQ,EAAE;IACV,QAAQ,EAAE;IACV,SAAS,EAAE,UAAU,EAAK;IAC1B,SAAS,EAAE,UAAU,EAAK;IAC1B,MAAA;IACA,UAAA;IACA,SAAA;IAAA;IAAA,EAGF,GAAA,EAAa,WAAA,GAAW,QAAA,GAAQ,QAAA,GAAQ,SAAA,GAAS,SAAA,GAAS,MAAA,GAAM,UAAA,GAAU,SAAA,QAAA;GACzE,IAAM,KAAU,MAAoB,EAAE,cAAc,GAC9C,IAAQ,EAAwB,QAAQ,cAAA,CAAe,KAAK,EAAO,EAAA,CAAA,EACnE,IAAO,EACZ,EAAwB,QAAQ,YAAA,EAChC,EAAwB,QAAQ,gBAAA,CAAA,CAC/B,KAAK,EAAO,EAAA,CAAA;GAEd,OAAO,EAAM,KACZ,GAAA,EAAO,SAAA,GAAS,SAAA,QAAA;IACf,IAAM,IAAK,IAAU,GACf,IAAK,IAAU;IACrB,IAAI,KAAK,KAAK,IAAK,IAAK,IAAK,EAAA,GA7Qb,KAAA,CA6QsC,MACrD,IAAA,CAAU,GACV,KAAK,aAAA,CAAa,GAEd,IAAS;KACZ,KAAK,mBAAmB,QAAA,EACxB,KAAK,OAAA,CAAO,GACZ,EAAU,MAAM,WAAW,KAAK,gBAChC,EAAU,MAAM,WAAW;KAC3B,IAAM,IAAU,KAAK,YAAY;KAC7B,MACH,EAAQ,QAAA,CAAQ,GAChB,EAAQ,MAAM,aAAa;;IAI9B,IAAA,CAAK,GAAS;IAEd,IAAM,IAAK,OAAO,YACZ,IAAK,OAAO,aACZ,IAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAU,GAAS,IAAK,EAAK,MAAA,CAAA,EAEzD,IAAS,IAAW,IAAa,EAAK,SAAS,GAC/C,IAAS,IAAW,IAAK,EAAK,SAAS,IAAK,GAC5C,IAAM,KAAK,IAAI,GAAQ,KAAK,IAAI,IAAU,GAAS,EAAA,CAAA;IAEzD,KAAK,YAAY;KAChB,GAAG,KAAK,eAAe,SAAS,QAAA,GAAW,IAAK,IAAO,EAAK,QAAQ;KACpE,GAAG,IAAW,IAAK,IAAM,EAAK,SAAS;KAAA,EAExC,KAAK,yBAAA;KAAA,EAEN,EAAU,EAAA,EACV,QAAA;IACK,KACH,KAAK,0BAAA,EACL,KAAK,aAAA,CAAa,GAClB,IAAA,CAAU,MAEV,KAAK,aAAA,CAAa,GAClB,IAAA,CAAU,GACV,KAAK,QAAA;KAAA,CAAA;IAAA,EAKT,EAAU,KAAK,cAAA,CAAA,CAEf,WAAA;;CAOH,oBAAA;EACC,MAAM,mBAAA,EAEN,EAAU,QAAQ,SAAA,CAChB,KAAK,EAAU,KAAK,cAAA,CAAA,CACpB,gBAAgB,KAAK,iBAAA,CAAA,EAEvB,EAAM,cAAc,KACnB,QAAU,KAAK,yBAAA,CAAA,EACf,EAAU,KAAK,cAAA,CAAA,CACd,WAAA;;CAGH,eAAA;EAEC,KAAK,iBAAiB,KAAK,QAG3B,KAAK,eAAA;EAEL,IAAM,IAAY,KAAK,cAAc,OAC/B,IAAU,KAAK,YAAY;EAC5B,MAGL,KAAK,yBAAA,EAGD,KAAK,QACR,EAAU,MAAM,WAAW,IACvB,MACH,EAAQ,QAAA,CAAQ,GAChB,EAAQ,MAAM,aAAa,eAG5B,EAAU,MAAM,WAAW,KAAK,gBAChC,EAAU,MAAM,WAAW,UACvB,MACH,EAAQ,QAAA,CAAQ,GAChB,EAAQ,MAAM,aAAa,YAK7B,KAAK,YAAA;;CAGN,uBAAA;EACC,MAAM,sBAAA,EACN,KAAK,mBAAmB,QAAA;;CAOzB,MAAA,eAAc;EACb,IAAM,IAAY,KAAK,cAAc,OAC/B,IAAU,KAAK,YAAY;EACjC,IAAA,CAAK,GAAW;EAUhB,IARI,MACH,EAAQ,MAAM,aAAa,WAC3B,EAAQ,QAAA,CAAQ,IAGjB,KAAK,OAAA,CAAO,GAAA,MACN,KAAK,gBAEP,EAAe,OAIlB,OAHA,EAAU,MAAM,WAAW,IAC3B,EAAU,MAAM,WAAW,IAAA,KAC3B,KAAK,oBAAoB,UAAU,WAAA;EAIpC,KAAK,mBAAmB,QAAA,EACxB,EAAU,MAAM,WAAW;EAE3B,IAAM,IAA4B,CACjC;GAAE,UAAU,KAAK;GAAgB,SAAS;GAAA,EAC1C;GAAE,UAAU,KAAK;GAAc,SAAS;GAAA,CAAA,EAEnC,IAAO,EAAU,QAAQ,GAAe;GAC7C,UAAU,EAAc;GACxB,QAAQ,EAAc;GACtB,MAAM;GAAA,CAAA;EAEP,KAAK,oBAAoB,GAGzB,EAAK,SAAS,WAAA;GACT,EAAU,gBACb,EAAU,MAAM,WAAW,IAC3B,EAAU,MAAM,WAAW;IAAA,EAK7B,KAAK,oBAAoB,UAAU,WAAA;;CAGpC,MAAA,gBAAc;EACb,IAAM,IAAY,KAAK,cAAc;EACrC,IAAA,CAAK,GAAW;EAEhB,IAAI,EAAe,OAAO;GACzB,EAAU,MAAM,WAAW,KAAK,gBAChC,EAAU,MAAM,WAAW,UAC3B,KAAK,OAAA,CAAO;GACZ,IAAM,IAAU,KAAK,YAAY;GAC7B,MACH,EAAQ,QAAA,CAAQ,GAChB,EAAQ,MAAM,aAAa,WAE5B,KAAK,oBAAoB,UAAU,YAAA;GACnC;;EAGD,KAAK,mBAAmB,QAAA,EACxB,EAAU,MAAM,WAAW;EAE3B,IAAM,IAA6B,CAClC;GAAE,UAAU,KAAK;GAAc,SAAS;GAAA,EACxC;GAAE,UAAU,KAAK;GAAgB,SAAS;GAAA,CAAA,EAErC,IAAO,EAAU,QAAQ,GAAgB;GAC9C,UAAU,KAAK,MAA+B,KAAzB,EAAc,SAAA;GACnC,QAAQ;GACR,MAAM;GAAA,CAAA;EAEP,KAAK,oBAAoB,GAAA,MAEnB,EAAK,UAEX,KAAK,OAAA,CAAO;EAEZ,IAAM,IAAU,KAAK,YAAY;EAC7B,MACH,EAAQ,QAAA,CAAQ,GAChB,EAAQ,MAAM,aAAa,WAG5B,KAAK,oBAAoB,UAAU,YAAA;;CAOpC,SAAA;EACK,KAAK,OAAM,KAAK,eAAA,GACf,KAAK,cAAA;;CAGX,SAAA;EACK,KAAK,SACT,KAAK,gBAAgB,SAAA,EAChB,KAAK,cAAc,QAIxB,KAAK,cAAA,GAHJ,KAAK,OAAA,CAAO;;CAOd,OAAA;EACC,KAAK,QAAA;;CAGN,QAAA;EACM,KAAK,SACL,KAAK,cAAc,QAIxB,KAAK,eAAA,GAHJ,KAAK,OAAA,CAAO;;CAUd,SAAA;EACC,IAAM,IAAW,KAAK,eAAe,WAAW,SAAA,EAE1C,IAAmB,EAAS;GACjC,MAAA,CAAM;GACN,YAAY;GACZ,oBAAA,CAAqB;GACrB,2BAAA,CAA2B;GAC3B,UAAA,CAAU;GAEV,SAAW,KAAK;GAChB,cAAA,CAAe,KAAK;GACpB,mBAAA,CAAmB;GAEnB,cAAc,KAAK;GACnB,YAAY,KAAK;GAAA,CAAA,EAGZ,IAAkB,EAAS;GAChC,UAAU;GACV,OAAO,KAAK;GACZ,cAAc;GACd,kBAAkB;GAAA,CAAA,EAGb,IAAgB,EAAS,EAC9B,kBAAkB,KAAK,OAAO,SAAS,QAAA,CAAA,EAGlC,IAAgB,EAAS;GAC9B,UAAA,CAAU;GACV,QAAA,CAAQ;GACR,MAAA,CAAM;GACN,gBAAA,CAAgB;GAChB,SAAA,CAAS;GACT,eAAA,CAAe;GACf,cAAA,CAAc;GACd,mBAAmB,KAAK;GACxB,eAAA,CAAgB,KAAK;GACrB,sBAAA,CAAsB;GACtB,gBAAA,CAAgB;GAAA,CAAA;EAGjB,OAAO,CAAI;;;;MAIP,EAAI,KAAK,cAAA,CAAA;;iBAEE,KAAK,UAAA;YACV,EAAA;YACA,EAAA;oBACQ,KAAK,KAAA;;;;OAIlB,EAAI,KAAK,YAAA,CAAA;;aAEH,EAAA;;mBAEM,KAAK,SAAS,iBAAA;;;;;;;;;;;;aAYpB,EAAS;GAAE,kBAAkB;GAAQ,QAAQ;GAAA,CAAA,CAAA;;;OAGnD,EACD,KAAK,YACC,CAAI;;;;QAKR,EAAI,KAAK,WAAA,CAAA;cACH,EAAA;;;;;QAKN,EAAA,CACA,KAAK,YACA,CAAI;;;;;;;;;;;QAYT,EACD,KAAK,YACC,CAAI;;;;mBAIE,MAAA;GACT,EAAE,iBAAA,EACF,KAAK,OAAA;IAAA;;;WAIJ,IAAW,gBAAgB,cAAA;;gBAGzB,CAAI;;;;mBAIE,MAAA;GACT,EAAE,iBAAA,EACF,KAAK,QAAA;IAAA;;;WAIJ,IAAW,gBAAgB,cAAA;;;;;;;;;GAnmBpC,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,MAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAE1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,iBAAA,KAAA,EAAA,EAAA,EAAA,CAE1B,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAE1C,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,UAAA,KAAA,EAAA,EAAA,EAAA,CAE1B,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CAmB1C,GAAA,CAAA,EAAO,EAAA,WAAA,cAAA,KAAA,EAAA,EAAA,EAAA,CAIP,GAAA,CAAA,EAAO,EAAA,WAAA,kBAAA,KAAA,EAAA;AAAA,IAAA,IAAA,IAAA,EAAA,CA9CR,EAAc,gBAAA,CAAA,EAAgB,EAAA;AAAA,SAAA,KAAA"}
package/dist/boat.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./boat-BIB-gPqy.cjs`);exports.SchmancyBoat=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./boat-BEq-AHmL.cjs`);exports.SchmancyBoat=e.t;
package/dist/boat.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as e } from "./boat--fLgbDAE.js";
1
+ import { t as e } from "./boat-BW6aRcdY.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(`./mixins-CsYsIJOI.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.c{constructor(...e){super(...e),this.separator=`/`}static{this.styles=[r.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-DSy-enUd.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.c{constructor(...e){super(...e),this.separator=`/`}static{this.styles=[r.css`
2
2
  :host {
3
3
  display: block;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { c as e } from "./mixins-DySzfmal.js";
1
+ import { c as e } from "./mixins-CKbQ6BJo.js";
2
2
  import { a as t } from "./active-host-BP0zy_Y9.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";
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-CsYsIJOI.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.c{static{this.styles=[r.css`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-DSy-enUd.cjs`),t=require(`./active-host-jH3iloCR.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.c{static{this.styles=[r.css`
2
2
  :host {
3
3
  display: inline;
4
4
  position: absolute;
@@ -1 +1 @@
1
- {"version":3,"file":"busy-DVCIxBVf.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":"qKAKe,IAAA,EAAA,cAA2B,EAAA,CAAA,CAAA,OAAA,KAAA,OACzB,CAAC,EAAA,GAAG;;;;;;;;GASpB,QAAA,CACC,MAAO,GAAA,IAAI;;;;;;;;;;;;;;;iCAZE,gBAAA,CAAA,CAAgB,EAAA,CCChB,IAAA,EAAA,cAA8B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,EAAA,CAAA,KAAA,KAyFmB,KAAA,KAAA,MAAA,CACjB,EAAA,OAAA,KAAA,OAzF9B,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FpB,QAAA,CAEC,IAAM,EAAqC,CAC1C,IAAK,GACL,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GAAA,CAID,EAEH,EADwB,OAAd,KAAK,MAAS,UAAY,KAAK,QAAQ,EACtC,EAAW,KAAK,MACI,OAAd,KAAK,MAAS,UAAa,MAAM,KAAK,KAAA,CAI5C,GAFY,EAAZ,KAAK,KAKjB,IAAM,EAAQ,CACb,MAAO,GAAG,EAAA,IACV,OAAQ,GAAG,EAAA,IAAA,CAGZ,OAAO,KAAK,MAAQ,EAAA,IAAI;yCACe,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;IAoBjD,EAAA,IAAI;gCACsB,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;0BA9DnC,CAAE,KAAM,OAAQ,QAAA,CAAS,EAAA,CAAA,CAAA,CAAO,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,WAAA,CAAA,CAW/B,EAAA,UAAA,OAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACD,CAAE,KAAM,QAAA,CAAA,CAAA,CAAU,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA3Fd,mBAAA,CAAA,CAAmB,EAAA"}
1
+ {"version":3,"file":"busy-CKpIblIO.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":"qKAKe,IAAA,EAAA,cAA2B,EAAA,CAAA,CAAA,OAAA,KAAA,OACzB,CAAC,EAAA,GAAG;;;;;;;;GASpB,QAAA,CACC,MAAO,GAAA,IAAI;;;;;;;;;;;;;;;iCAZE,gBAAA,CAAA,CAAgB,EAAA,CCChB,IAAA,EAAA,cAA8B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,EAAA,CAAA,KAAA,KAyFmB,KAAA,KAAA,MAAA,CACjB,EAAA,OAAA,KAAA,OAzF9B,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FpB,QAAA,CAEC,IAAM,EAAqC,CAC1C,IAAK,GACL,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,GAAA,CAID,EAEH,EADwB,OAAd,KAAK,MAAS,UAAY,KAAK,QAAQ,EACtC,EAAW,KAAK,MACI,OAAd,KAAK,MAAS,UAAa,MAAM,KAAK,KAAA,CAI5C,GAFY,EAAZ,KAAK,KAKjB,IAAM,EAAQ,CACb,MAAO,GAAG,EAAA,IACV,OAAQ,GAAG,EAAA,IAAA,CAGZ,OAAO,KAAK,MAAQ,EAAA,IAAI;yCACe,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;IAoBjD,EAAA,IAAI;gCACsB,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;0BA9DnC,CAAE,KAAM,OAAQ,QAAA,CAAS,EAAA,CAAA,CAAA,CAAO,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,WAAA,CAAA,CAW/B,EAAA,UAAA,OAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACD,CAAE,KAAM,QAAA,CAAA,CAAA,CAAU,EAAA,UAAA,QAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA3Fd,mBAAA,CAAA,CAAmB,EAAA"}
@@ -1,4 +1,4 @@
1
- import { c as e } from "./mixins-DySzfmal.js";
1
+ import { c as e } from "./mixins-CKbQ6BJo.js";
2
2
  import { a as t } from "./active-host-BP0zy_Y9.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";
@@ -1 +1 @@
1
- {"version":3,"file":"busy-DshZcVZ4.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;;;;;;;;;;;;;;;;;;OAZZ,EAAc,gBAAA,CAAA,EAAgB,EAAA;ACChB,IAAA,IAAA,cAA8B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,OAyFmB,MAAA,KAAA,QAAA,CACjB;;CAAA;EAAA,KAAA,SAzF9B,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FpB,SAAA;EAEC,IAAM,IAAqC;GAC1C,KAAK;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GAAA,EAID;EAEH,IADwB,OAAd,KAAK,QAAS,YAAY,KAAK,QAAQ,IACtC,EAAW,KAAK,QACI,OAAd,KAAK,QAAS,YAAa,MAAM,KAAK,KAAA,GAI5C,KAFY,IAAZ,KAAK;EAKjB,IAAM,IAAQ;GACb,OAAO,GAAG,EAAA;GACV,QAAQ,GAAG,EAAA;GAAA;EAGZ,OAAO,KAAK,QAAQ,CAAI;yCACe,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;MAoBjD,CAAI;gCACsB,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;;;;GA9D5C,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAWzC,GAAA,CAAA,EAAU,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CACV,EAAS,EAAE,MAAM,SAAA,CAAA,CAAA,EAAU,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CA3F5B,EAAc,mBAAA,CAAA,EAAmB,EAAA"}
1
+ {"version":3,"file":"busy-D-ucQFSB.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;;;;;;;;;;;;;;;;;;OAZZ,EAAc,gBAAA,CAAA,EAAgB,EAAA;ACChB,IAAA,IAAA,cAA8B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,OAyFmB,MAAA,KAAA,QAAA,CACjB;;CAAA;EAAA,KAAA,SAzF9B,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FpB,SAAA;EAEC,IAAM,IAAqC;GAC1C,KAAK;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GAAA,EAID;EAEH,IADwB,OAAd,KAAK,QAAS,YAAY,KAAK,QAAQ,IACtC,EAAW,KAAK,QACI,OAAd,KAAK,QAAS,YAAa,MAAM,KAAK,KAAA,GAI5C,KAFY,IAAZ,KAAK;EAKjB,IAAM,IAAQ;GACb,OAAO,GAAG,EAAA;GACV,QAAQ,GAAG,EAAA;GAAA;EAGZ,OAAO,KAAK,QAAQ,CAAI;yCACe,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;MAoBjD,CAAI;gCACsB,KAAK,SAAS,EAAA,CAAA;;;;;;;;;;;;;;;GA9D5C,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,EAAA,CAWzC,GAAA,CAAA,EAAU,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CACV,EAAS,EAAE,MAAM,SAAA,CAAA,CAAA,EAAU,EAAA,WAAA,SAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CA3F5B,EAAc,mBAAA,CAAA,EAAmB,EAAA"}
package/dist/busy.cjs CHANGED
@@ -1 +1 @@
1
- require(`./busy-DVCIxBVf.cjs`);
1
+ require(`./busy-CKpIblIO.cjs`);
package/dist/busy.js CHANGED
@@ -1 +1 @@
1
- import "./busy-DshZcVZ4.js";
1
+ import "./busy-D-ucQFSB.js";
@@ -1,4 +1,4 @@
1
- import { c as e } from "./mixins-DySzfmal.js";
1
+ import { c as e } from "./mixins-CKbQ6BJo.js";
2
2
  import { a as t } from "./active-host-BP0zy_Y9.js";
3
3
  import { t as n } from "./magnetic-mHXl54Z8.js";
4
4
  import { createContext as r, provide as i } from "@lit/context";