@mhmo91/schmancy 0.8.3 → 0.8.6

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 (365) hide show
  1. package/dist/{animated-text-Bc3qyXjp.cjs → animated-text-B3DQRJBy.cjs} +2 -2
  2. package/dist/{animated-text-Bc3qyXjp.cjs.map → animated-text-B3DQRJBy.cjs.map} +1 -1
  3. package/dist/{animated-text-CNx6Pmlo.js → animated-text-BAj4-6hE.js} +3 -3
  4. package/dist/{animated-text-CNx6Pmlo.js.map → animated-text-BAj4-6hE.js.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-7mWxekxE.js → area.component-CP4DZ0d8.js} +3 -3
  9. package/dist/{area.component-7mWxekxE.js.map → area.component-CP4DZ0d8.js.map} +1 -1
  10. package/dist/{area.component-CS_gSutH.cjs → area.component-ChxSLt16.cjs} +2 -2
  11. package/dist/{area.component-CS_gSutH.cjs.map → area.component-ChxSLt16.cjs.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-y-IyzH4r.cjs → autocomplete-CAaVSg4g.cjs} +2 -2
  14. package/dist/{autocomplete-y-IyzH4r.cjs.map → autocomplete-CAaVSg4g.cjs.map} +1 -1
  15. package/dist/{autocomplete-Ci4jo3Ur.js → autocomplete-CGbACUYd.js} +4 -4
  16. package/dist/{autocomplete-Ci4jo3Ur.js.map → autocomplete-CGbACUYd.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/{avatar-DBfJucB9.cjs → avatar-nWOZXEsW.cjs} +3 -3
  20. package/dist/avatar-nWOZXEsW.cjs.map +1 -0
  21. package/dist/{avatar-BdyuuIk7.js → avatar-rLCF6MSI.js} +58 -58
  22. package/dist/avatar-rLCF6MSI.js.map +1 -0
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-CowHieO2.js → boat-Ckt9v__d.js} +3 -3
  26. package/dist/{boat-CowHieO2.js.map → boat-Ckt9v__d.js.map} +1 -1
  27. package/dist/{boat-DkNUc1UO.cjs → boat-yNAZ2LLB.cjs} +2 -2
  28. package/dist/{boat-DkNUc1UO.cjs.map → boat-yNAZ2LLB.cjs.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/busy.cjs +1 -1
  32. package/dist/busy.js +1 -1
  33. package/dist/button.cjs +1 -1
  34. package/dist/button.js +1 -1
  35. package/dist/card.cjs +1 -1
  36. package/dist/card.js +1 -1
  37. package/dist/charts.cjs +1 -1
  38. package/dist/charts.js +1 -1
  39. package/dist/{checkbox-BvWcABPr.cjs → checkbox-BnAlpsJN.cjs} +2 -2
  40. package/dist/{checkbox-BvWcABPr.cjs.map → checkbox-BnAlpsJN.cjs.map} +1 -1
  41. package/dist/{checkbox-BY4Sn8F2.js → checkbox-D22yfGe3.js} +2 -2
  42. package/dist/{checkbox-BY4Sn8F2.js.map → checkbox-D22yfGe3.js.map} +1 -1
  43. package/dist/checkbox.cjs +1 -1
  44. package/dist/checkbox.js +1 -1
  45. package/dist/chips.cjs +1 -1
  46. package/dist/chips.js +2 -2
  47. package/dist/code-highlight.cjs +1 -1
  48. package/dist/code-highlight.js +1 -1
  49. package/dist/{code-preview-CYjmAxfs.js → code-preview-DPlQayFd.js} +2 -2
  50. package/dist/{code-preview-CYjmAxfs.js.map → code-preview-DPlQayFd.js.map} +1 -1
  51. package/dist/{code-preview-BIFIJigy.cjs → code-preview-jPnX60FF.cjs} +2 -2
  52. package/dist/{code-preview-BIFIJigy.cjs.map → code-preview-jPnX60FF.cjs.map} +1 -1
  53. package/dist/components.cjs +1 -1
  54. package/dist/components.js +1 -1
  55. package/dist/content-drawer.cjs +1 -1
  56. package/dist/content-drawer.js +1 -1
  57. package/dist/{date-range-BdIqI7LC.js → date-range-GFm5NG33.js} +4 -4
  58. package/dist/{date-range-BdIqI7LC.js.map → date-range-GFm5NG33.js.map} +1 -1
  59. package/dist/{date-range-inline-Df8u6Ecy.cjs → date-range-inline-CgX2o0FP.cjs} +2 -2
  60. package/dist/{date-range-inline-Df8u6Ecy.cjs.map → date-range-inline-CgX2o0FP.cjs.map} +1 -1
  61. package/dist/{date-range-inline-Cnhs9atd.js → date-range-inline-DTQLESAZ.js} +3 -3
  62. package/dist/{date-range-inline-Cnhs9atd.js.map → date-range-inline-DTQLESAZ.js.map} +1 -1
  63. package/dist/date-range-inline.cjs +1 -1
  64. package/dist/date-range-inline.js +1 -1
  65. package/dist/{date-range-B80Ummtv.cjs → date-range-ug3B9CFT.cjs} +2 -2
  66. package/dist/{date-range-B80Ummtv.cjs.map → date-range-ug3B9CFT.cjs.map} +1 -1
  67. package/dist/date-range.cjs +1 -1
  68. package/dist/date-range.js +1 -1
  69. package/dist/{delay-BWsVHQib.cjs → delay-CWtBL0VD.cjs} +2 -2
  70. package/dist/{delay-BWsVHQib.cjs.map → delay-CWtBL0VD.cjs.map} +1 -1
  71. package/dist/{delay-CCa9nN4A.js → delay-DEe1CmHc.js} +2 -2
  72. package/dist/{delay-CCa9nN4A.js.map → delay-DEe1CmHc.js.map} +1 -1
  73. package/dist/delay.cjs +1 -1
  74. package/dist/delay.js +1 -1
  75. package/dist/{details-Bee5ya0L.js → details-D-LXW23W.js} +2 -2
  76. package/dist/{details-Bee5ya0L.js.map → details-D-LXW23W.js.map} +1 -1
  77. package/dist/{details-oaVHXU7U.cjs → details-DVke77dU.cjs} +2 -2
  78. package/dist/{details-oaVHXU7U.cjs.map → details-DVke77dU.cjs.map} +1 -1
  79. package/dist/details.cjs +1 -1
  80. package/dist/details.js +1 -1
  81. package/dist/dialog.cjs +1 -1
  82. package/dist/{dialog.component-BriB-kFi.cjs → dialog.component-BM0D-hK9.cjs} +2 -2
  83. package/dist/{dialog.component-BriB-kFi.cjs.map → dialog.component-BM0D-hK9.cjs.map} +1 -1
  84. package/dist/{dialog.component-CMUoCC7O.js → dialog.component-a7FlKhGD.js} +3 -3
  85. package/dist/{dialog.component-CMUoCC7O.js.map → dialog.component-a7FlKhGD.js.map} +1 -1
  86. package/dist/dialog.js +1 -1
  87. package/dist/{divider-B7DBbYFI.js → divider-CzTpxOqt.js} +3 -3
  88. package/dist/{divider-B7DBbYFI.js.map → divider-CzTpxOqt.js.map} +1 -1
  89. package/dist/{divider-Dl4TToQZ.cjs → divider-D8KStUhN.cjs} +2 -2
  90. package/dist/{divider-Dl4TToQZ.cjs.map → divider-D8KStUhN.cjs.map} +1 -1
  91. package/dist/divider.cjs +1 -1
  92. package/dist/divider.js +1 -1
  93. package/dist/{dropdown-content-C2W7OttQ.cjs → dropdown-content-CngZN3vv.cjs} +2 -2
  94. package/dist/{dropdown-content-C2W7OttQ.cjs.map → dropdown-content-CngZN3vv.cjs.map} +1 -1
  95. package/dist/{dropdown-content-DzhOtilY.js → dropdown-content-DCn-g0-f.js} +3 -3
  96. package/dist/{dropdown-content-DzhOtilY.js.map → dropdown-content-DCn-g0-f.js.map} +1 -1
  97. package/dist/dropdown.cjs +1 -1
  98. package/dist/dropdown.js +1 -1
  99. package/dist/{email-recipients-Bh5VC0rc.cjs → email-recipients-BhntMZMf.cjs} +2 -2
  100. package/dist/{email-recipients-Bh5VC0rc.cjs.map → email-recipients-BhntMZMf.cjs.map} +1 -1
  101. package/dist/{email-recipients-BWqZKo3m.js → email-recipients-BzjAKNJ0.js} +6 -6
  102. package/dist/{email-recipients-BWqZKo3m.js.map → email-recipients-BzjAKNJ0.js.map} +1 -1
  103. package/dist/extra.cjs +1 -1
  104. package/dist/extra.js +1 -1
  105. package/dist/{flex-53G-PJx7.js → flex-5dR48zie.js} +2 -2
  106. package/dist/{flex-53G-PJx7.js.map → flex-5dR48zie.js.map} +1 -1
  107. package/dist/{flex-DFSIy0t4.cjs → flex-oHl2EfYB.cjs} +2 -2
  108. package/dist/{flex-DFSIy0t4.cjs.map → flex-oHl2EfYB.cjs.map} +1 -1
  109. package/dist/{form-Zq7g2JS8.cjs → form-BlPiAPt7.cjs} +2 -2
  110. package/dist/{form-Zq7g2JS8.cjs.map → form-BlPiAPt7.cjs.map} +1 -1
  111. package/dist/{form-BtRK9bnp.js → form-BxVM6JTn.js} +2 -2
  112. package/dist/{form-BtRK9bnp.js.map → form-BxVM6JTn.js.map} +1 -1
  113. package/dist/form.cjs +1 -1
  114. package/dist/form.js +1 -1
  115. package/dist/{formField.mixin-2jSL7WF_.js → formField.mixin-BCGA7Ea3.js} +2 -2
  116. package/dist/{formField.mixin-2jSL7WF_.js.map → formField.mixin-BCGA7Ea3.js.map} +1 -1
  117. package/dist/{formField.mixin-DkN2ufR_.cjs → formField.mixin-BfJMifU9.cjs} +2 -2
  118. package/dist/{formField.mixin-DkN2ufR_.cjs.map → formField.mixin-BfJMifU9.cjs.map} +1 -1
  119. package/dist/{icon-pU_cfmpD.cjs → icon-DHEXr3c-.cjs} +2 -2
  120. package/dist/{icon-pU_cfmpD.cjs.map → icon-DHEXr3c-.cjs.map} +1 -1
  121. package/dist/{icon-B5qeYrDu.js → icon-DYpLoegR.js} +2 -2
  122. package/dist/{icon-B5qeYrDu.js.map → icon-DYpLoegR.js.map} +1 -1
  123. package/dist/{icon-button-HSYaQBNF.js → icon-button-CmZBLHWC.js} +3 -3
  124. package/dist/{icon-button-HSYaQBNF.js.map → icon-button-CmZBLHWC.js.map} +1 -1
  125. package/dist/{icon-button-BpmGFjaR.cjs → icon-button-IbSX8C98.cjs} +2 -2
  126. package/dist/{icon-button-BpmGFjaR.cjs.map → icon-button-IbSX8C98.cjs.map} +1 -1
  127. package/dist/icons.cjs +1 -1
  128. package/dist/icons.js +1 -1
  129. package/dist/index.cjs +1 -1
  130. package/dist/index.js +56 -56
  131. package/dist/{input-8G9YY9qv.cjs → input-BByjYlgl.cjs} +2 -2
  132. package/dist/{input-8G9YY9qv.cjs.map → input-BByjYlgl.cjs.map} +1 -1
  133. package/dist/{input-BJMF5Fyk.js → input-D0cQ9DOY.js} +3 -3
  134. package/dist/{input-BJMF5Fyk.js.map → input-D0cQ9DOY.js.map} +1 -1
  135. package/dist/{input-chip-tbrw56ix.js → input-chip-B5ErXgCB.js} +2 -2
  136. package/dist/{input-chip-tbrw56ix.js.map → input-chip-B5ErXgCB.js.map} +1 -1
  137. package/dist/{input-chip-CocdqTzr.cjs → input-chip-DkWaTciP.cjs} +2 -2
  138. package/dist/{input-chip-CocdqTzr.cjs.map → input-chip-DkWaTciP.cjs.map} +1 -1
  139. package/dist/input.cjs +1 -1
  140. package/dist/input.js +1 -1
  141. package/dist/{json-DPnyOA3K.cjs → json-BZVe74np.cjs} +2 -2
  142. package/dist/{json-DPnyOA3K.cjs.map → json-BZVe74np.cjs.map} +1 -1
  143. package/dist/{json-CvcloKQv.js → json-PKewOWuJ.js} +3 -3
  144. package/dist/{json-CvcloKQv.js.map → json-PKewOWuJ.js.map} +1 -1
  145. package/dist/json.cjs +1 -1
  146. package/dist/json.js +1 -1
  147. package/dist/layout.cjs +1 -1
  148. package/dist/layout.js +2 -2
  149. package/dist/{lightbox-service-3mHqBKEh.cjs → lightbox-service-D-0JtxB1.cjs} +2 -2
  150. package/dist/lightbox-service-D-0JtxB1.cjs.map +1 -0
  151. package/dist/{lightbox-service-DxbYZAuv.js → lightbox-service-DZMnb1eU.js} +3 -3
  152. package/dist/lightbox-service-DZMnb1eU.js.map +1 -0
  153. package/dist/lightbox.cjs +1 -1
  154. package/dist/lightbox.js +1 -1
  155. package/dist/{list-JjR7WOrd.cjs → list-B_2m7l3g.cjs} +6 -6
  156. package/dist/list-B_2m7l3g.cjs.map +1 -0
  157. package/dist/{list-FWXmY-eQ.js → list-CW56LV-v.js} +13 -13
  158. package/dist/list-CW56LV-v.js.map +1 -0
  159. package/dist/list.cjs +1 -1
  160. package/dist/list.js +1 -1
  161. package/dist/{litElement.mixin-BVBdv0GP.cjs → litElement.mixin-CrpeGpZ7.cjs} +2 -2
  162. package/dist/{litElement.mixin-BVBdv0GP.cjs.map → litElement.mixin-CrpeGpZ7.cjs.map} +1 -1
  163. package/dist/{litElement.mixin-Wcu4yIIs.js → litElement.mixin-DHZXtvYq.js} +2 -2
  164. package/dist/{litElement.mixin-Wcu4yIIs.js.map → litElement.mixin-DHZXtvYq.js.map} +1 -1
  165. package/dist/mailbox.cjs +1 -1
  166. package/dist/mailbox.js +1 -1
  167. package/dist/{map-Br6xJFxG.js → map-2Hl60a0A.js} +6 -6
  168. package/dist/{map-Br6xJFxG.js.map → map-2Hl60a0A.js.map} +1 -1
  169. package/dist/{map-D9R3OCne.cjs → map-DyPS9G7M.cjs} +3 -3
  170. package/dist/{map-D9R3OCne.cjs.map → map-DyPS9G7M.cjs.map} +1 -1
  171. package/dist/map.cjs +1 -1
  172. package/dist/map.js +1 -1
  173. package/dist/{media-DibPwAjJ.cjs → media-CS8HpKnK.cjs} +2 -2
  174. package/dist/{media-DibPwAjJ.cjs.map → media-CS8HpKnK.cjs.map} +1 -1
  175. package/dist/{media-BV_1DfcW.js → media-DtWbcRxL.js} +2 -2
  176. package/dist/{media-BV_1DfcW.js.map → media-DtWbcRxL.js.map} +1 -1
  177. package/dist/{menu-HKqlq99V.js → menu-Caju5-zd.js} +3 -3
  178. package/dist/{menu-HKqlq99V.js.map → menu-Caju5-zd.js.map} +1 -1
  179. package/dist/{menu-vNrV-Nuq.cjs → menu-rX5RPAI2.cjs} +2 -2
  180. package/dist/{menu-vNrV-Nuq.cjs.map → menu-rX5RPAI2.cjs.map} +1 -1
  181. package/dist/menu.cjs +1 -1
  182. package/dist/menu.js +1 -1
  183. package/dist/mixins.cjs +1 -1
  184. package/dist/mixins.js +3 -3
  185. package/dist/nav-drawer.cjs +1 -1
  186. package/dist/nav-drawer.js +1 -1
  187. package/dist/navigation-bar.cjs +1 -1
  188. package/dist/navigation-bar.js +1 -1
  189. package/dist/{navigation-rail-DKXumnmt.js → navigation-rail-Ctketq5a.js} +32 -25
  190. package/dist/navigation-rail-Ctketq5a.js.map +1 -0
  191. package/dist/{navigation-rail-D1o3qDe_.cjs → navigation-rail-DC9_oSIM.cjs} +12 -12
  192. package/dist/navigation-rail-DC9_oSIM.cjs.map +1 -0
  193. package/dist/navigation-rail.cjs +1 -1
  194. package/dist/navigation-rail.js +1 -1
  195. package/dist/{notification-service-B5ljba4P.js → notification-service-CUlfXqmj.js} +3 -3
  196. package/dist/{notification-service-B5ljba4P.js.map → notification-service-CUlfXqmj.js.map} +1 -1
  197. package/dist/{notification-service-ICRT05L0.cjs → notification-service-DknbpqTt.cjs} +2 -2
  198. package/dist/{notification-service-ICRT05L0.cjs.map → notification-service-DknbpqTt.cjs.map} +1 -1
  199. package/dist/notification.cjs +1 -1
  200. package/dist/notification.js +2 -2
  201. package/dist/{notify-B9CpO1Ru.js → notify-DJSOWTxv.js} +2 -2
  202. package/dist/{notify-B9CpO1Ru.js.map → notify-DJSOWTxv.js.map} +1 -1
  203. package/dist/{notify-NX-dl60E.cjs → notify-DickIEHW.cjs} +2 -2
  204. package/dist/{notify-NX-dl60E.cjs.map → notify-DickIEHW.cjs.map} +1 -1
  205. package/dist/{option-B4JKMrLg.js → option-Bng41-rY.js} +2 -2
  206. package/dist/{option-B4JKMrLg.js.map → option-Bng41-rY.js.map} +1 -1
  207. package/dist/{option-epyXLWoY.cjs → option-DYT5Rkgy.cjs} +2 -2
  208. package/dist/{option-epyXLWoY.cjs.map → option-DYT5Rkgy.cjs.map} +1 -1
  209. package/dist/option.cjs +1 -1
  210. package/dist/option.js +1 -1
  211. package/dist/{page-Bmi1QHtq.cjs → page-BLn9gtSd.cjs} +2 -2
  212. package/dist/{page-Bmi1QHtq.cjs.map → page-BLn9gtSd.cjs.map} +1 -1
  213. package/dist/{page-BpygEntU.js → page-D-ROcQDd.js} +4 -4
  214. package/dist/{page-BpygEntU.js.map → page-D-ROcQDd.js.map} +1 -1
  215. package/dist/page.cjs +1 -1
  216. package/dist/page.js +1 -1
  217. package/dist/{payment-card-form-3kAXDbXf.cjs → payment-card-form-5UtfWzoW.cjs} +2 -2
  218. package/dist/{payment-card-form-3kAXDbXf.cjs.map → payment-card-form-5UtfWzoW.cjs.map} +1 -1
  219. package/dist/{payment-card-form-BxkHuSls.js → payment-card-form-BJa4RgF2.js} +3 -3
  220. package/dist/{payment-card-form-BxkHuSls.js.map → payment-card-form-BJa4RgF2.js.map} +1 -1
  221. package/dist/{pills-C3fIvfn8.js → pills-BS5rZ6C3.js} +3 -3
  222. package/dist/{pills-C3fIvfn8.js.map → pills-BS5rZ6C3.js.map} +1 -1
  223. package/dist/{pills-MmHyBGQu.cjs → pills-Blf7IAeq.cjs} +2 -2
  224. package/dist/{pills-MmHyBGQu.cjs.map → pills-Blf7IAeq.cjs.map} +1 -1
  225. package/dist/{progress-qx8jtrOA.cjs → progress-DlhYniW_.cjs} +5 -5
  226. package/dist/progress-DlhYniW_.cjs.map +1 -0
  227. package/dist/{progress-0POmJs5o.js → progress-yTIX6EqC.js} +10 -13
  228. package/dist/progress-yTIX6EqC.js.map +1 -0
  229. package/dist/progress.cjs +1 -1
  230. package/dist/progress.js +1 -1
  231. package/dist/{qr-scanner-DQq-WLyo.cjs → qr-scanner-DOs7uNS_.cjs} +2 -2
  232. package/dist/{qr-scanner-DQq-WLyo.cjs.map → qr-scanner-DOs7uNS_.cjs.map} +1 -1
  233. package/dist/{qr-scanner-jwOSrD0N.js → qr-scanner-DjZ8mgHV.js} +2 -2
  234. package/dist/{qr-scanner-jwOSrD0N.js.map → qr-scanner-DjZ8mgHV.js.map} +1 -1
  235. package/dist/qr-scanner.cjs +1 -1
  236. package/dist/qr-scanner.js +1 -1
  237. package/dist/{radio-button-DraEYR2R.cjs → radio-button-N_PrrxKB.cjs} +2 -2
  238. package/dist/{radio-button-DraEYR2R.cjs.map → radio-button-N_PrrxKB.cjs.map} +1 -1
  239. package/dist/{radio-button-B0EUK_wg.js → radio-button-me3SRHGu.js} +3 -3
  240. package/dist/{radio-button-B0EUK_wg.js.map → radio-button-me3SRHGu.js.map} +1 -1
  241. package/dist/radio-group.cjs +1 -1
  242. package/dist/radio-group.js +1 -1
  243. package/dist/{schmancy-steps-container-C2StAA5K.js → schmancy-steps-container-J6P-NNNj.js} +2 -2
  244. package/dist/{schmancy-steps-container-C2StAA5K.js.map → schmancy-steps-container-J6P-NNNj.js.map} +1 -1
  245. package/dist/{schmancy-steps-container-B5aiqgMA.cjs → schmancy-steps-container-T57BKMzi.cjs} +2 -2
  246. package/dist/{schmancy-steps-container-B5aiqgMA.cjs.map → schmancy-steps-container-T57BKMzi.cjs.map} +1 -1
  247. package/dist/{scroll-Bu-vAg3d.js → scroll-C_gfUgjn.js} +2 -2
  248. package/dist/{scroll-Bu-vAg3d.js.map → scroll-C_gfUgjn.js.map} +1 -1
  249. package/dist/{scroll-BqT7bvhu.cjs → scroll-CecsowP7.cjs} +2 -2
  250. package/dist/{scroll-BqT7bvhu.cjs.map → scroll-CecsowP7.cjs.map} +1 -1
  251. package/dist/{select-i-uKur-W.js → select-BBA0gBHf.js} +3 -3
  252. package/dist/{select-i-uKur-W.js.map → select-BBA0gBHf.js.map} +1 -1
  253. package/dist/{select-HiEGJvOX.cjs → select-D9oCjv7N.cjs} +2 -2
  254. package/dist/{select-HiEGJvOX.cjs.map → select-D9oCjv7N.cjs.map} +1 -1
  255. package/dist/select.cjs +1 -1
  256. package/dist/select.js +1 -1
  257. package/dist/{sheet-BbrRW0S5.cjs → sheet-0oUfBmXX.cjs} +2 -2
  258. package/dist/{sheet-BbrRW0S5.cjs.map → sheet-0oUfBmXX.cjs.map} +1 -1
  259. package/dist/{sheet-B1g7E4dQ.js → sheet-CNcDT3VP.js} +5 -5
  260. package/dist/{sheet-B1g7E4dQ.js.map → sheet-CNcDT3VP.js.map} +1 -1
  261. package/dist/sheet.cjs +1 -1
  262. package/dist/sheet.js +2 -2
  263. package/dist/{sheet.service-4etIM-p6.js → sheet.service-2MobB-9z.js} +2 -2
  264. package/dist/{sheet.service-4etIM-p6.js.map → sheet.service-2MobB-9z.js.map} +1 -1
  265. package/dist/{sheet.service-BiRZjCdN.cjs → sheet.service-su_7yDQ-.cjs} +2 -2
  266. package/dist/{sheet.service-BiRZjCdN.cjs.map → sheet.service-su_7yDQ-.cjs.map} +1 -1
  267. package/dist/{slider-VYnbIRH2.cjs → slider-CV-Ehp_5.cjs} +2 -2
  268. package/dist/{slider-VYnbIRH2.cjs.map → slider-CV-Ehp_5.cjs.map} +1 -1
  269. package/dist/{slider-8E3Wad0t.js → slider-CkE-iFUy.js} +3 -3
  270. package/dist/{slider-8E3Wad0t.js.map → slider-CkE-iFUy.js.map} +1 -1
  271. package/dist/slider.cjs +1 -1
  272. package/dist/slider.js +1 -1
  273. package/dist/{spinner-DJgcI5wr.cjs → spinner-Bfn8KC-9.cjs} +2 -2
  274. package/dist/{spinner-DJgcI5wr.cjs.map → spinner-Bfn8KC-9.cjs.map} +1 -1
  275. package/dist/{spinner-CKm13CKN.js → spinner-DiMbWXp9.js} +2 -2
  276. package/dist/{spinner-CKm13CKN.js.map → spinner-DiMbWXp9.js.map} +1 -1
  277. package/dist/steps.cjs +1 -1
  278. package/dist/steps.js +1 -1
  279. package/dist/{suggestion-chip-6njXvvHm.js → suggestion-chip-CEDqUNoS.js} +3 -3
  280. package/dist/{suggestion-chip-6njXvvHm.js.map → suggestion-chip-CEDqUNoS.js.map} +1 -1
  281. package/dist/{suggestion-chip-DdLfqk7o.cjs → suggestion-chip-HhsLtZXR.cjs} +2 -2
  282. package/dist/{suggestion-chip-DdLfqk7o.cjs.map → suggestion-chip-HhsLtZXR.cjs.map} +1 -1
  283. package/dist/{surface-DcqbWGub.cjs → surface-CW3H23Va.cjs} +2 -2
  284. package/dist/{surface-DcqbWGub.cjs.map → surface-CW3H23Va.cjs.map} +1 -1
  285. package/dist/{surface-BYU3l_Q2.js → surface-eBfnSwQS.js} +2 -2
  286. package/dist/{surface-BYU3l_Q2.js.map → surface-eBfnSwQS.js.map} +1 -1
  287. package/dist/surface.cjs +1 -1
  288. package/dist/surface.js +1 -1
  289. package/dist/{table-C9fzDjjk.cjs → table-D0tiSL_u.cjs} +2 -2
  290. package/dist/{table-C9fzDjjk.cjs.map → table-D0tiSL_u.cjs.map} +1 -1
  291. package/dist/{table-Dq12ollZ.js → table-Dmo4TvTx.js} +2 -2
  292. package/dist/{table-Dq12ollZ.js.map → table-Dmo4TvTx.js.map} +1 -1
  293. package/dist/table.cjs +1 -1
  294. package/dist/table.js +1 -1
  295. package/dist/{tabs-compatibility-wnzlHtln.js → tabs-compatibility-Bit6y6en.js} +2 -2
  296. package/dist/{tabs-compatibility-wnzlHtln.js.map → tabs-compatibility-Bit6y6en.js.map} +1 -1
  297. package/dist/{tabs-compatibility-Dwtjfkcf.cjs → tabs-compatibility-Vq_2-ekz.cjs} +2 -2
  298. package/dist/{tabs-compatibility-Dwtjfkcf.cjs.map → tabs-compatibility-Vq_2-ekz.cjs.map} +1 -1
  299. package/dist/tabs.cjs +1 -1
  300. package/dist/tabs.js +1 -1
  301. package/dist/{tailwind.mixin-Ddt05Frc.js → tailwind.mixin-Bp_PR6yc.js} +2 -2
  302. package/dist/{tailwind.mixin-Ddt05Frc.js.map → tailwind.mixin-Bp_PR6yc.js.map} +1 -1
  303. package/dist/{tailwind.mixin-UijsBrYW.cjs → tailwind.mixin-Cp4PyXok.cjs} +2 -2
  304. package/dist/{tailwind.mixin-UijsBrYW.cjs.map → tailwind.mixin-Cp4PyXok.cjs.map} +1 -1
  305. package/dist/teleport.cjs +1 -1
  306. package/dist/teleport.js +1 -1
  307. package/dist/{textarea-Vd3zayJZ.js → textarea-B1d1QCqT.js} +2 -2
  308. package/dist/{textarea-Vd3zayJZ.js.map → textarea-B1d1QCqT.js.map} +1 -1
  309. package/dist/{textarea-DGmsw1B_.cjs → textarea-DG8CHhZA.cjs} +2 -2
  310. package/dist/{textarea-DGmsw1B_.cjs.map → textarea-DG8CHhZA.cjs.map} +1 -1
  311. package/dist/textarea.cjs +1 -1
  312. package/dist/textarea.js +1 -1
  313. package/dist/{theme-button-DG_Xwg9H.cjs → theme-button-CPL6Eaqd.cjs} +2 -2
  314. package/dist/{theme-button-DG_Xwg9H.cjs.map → theme-button-CPL6Eaqd.cjs.map} +1 -1
  315. package/dist/{theme-button-rGpEW_xS.js → theme-button-CrLuMQNe.js} +2 -2
  316. package/dist/{theme-button-rGpEW_xS.js.map → theme-button-CrLuMQNe.js.map} +1 -1
  317. package/dist/theme-button.cjs +1 -1
  318. package/dist/theme-button.js +1 -1
  319. package/dist/{theme-controller-boat-pLzK5zxL.cjs → theme-controller-boat-CXbNJSI3.cjs} +2 -2
  320. package/dist/{theme-controller-boat-pLzK5zxL.cjs.map → theme-controller-boat-CXbNJSI3.cjs.map} +1 -1
  321. package/dist/{theme-controller-boat-B1fjcqJI.js → theme-controller-boat-CzSmjyKq.js} +3 -3
  322. package/dist/{theme-controller-boat-B1fjcqJI.js.map → theme-controller-boat-CzSmjyKq.js.map} +1 -1
  323. package/dist/theme.cjs +1 -1
  324. package/dist/theme.js +1 -1
  325. package/dist/{timezone-IQkwr6Oh.js → timezone-4vwX0BgA.js} +3 -3
  326. package/dist/{timezone-IQkwr6Oh.js.map → timezone-4vwX0BgA.js.map} +1 -1
  327. package/dist/{timezone-BhUaIAV7.cjs → timezone-BxvQcqe1.cjs} +2 -2
  328. package/dist/{timezone-BhUaIAV7.cjs.map → timezone-BxvQcqe1.cjs.map} +1 -1
  329. package/dist/{tooltip-CwaiZC8f.js → tooltip-CjdvBf4X.js} +2 -2
  330. package/dist/{tooltip-CwaiZC8f.js.map → tooltip-CjdvBf4X.js.map} +1 -1
  331. package/dist/{tooltip-iEvxKg8g.cjs → tooltip-ZtnGjoJd.cjs} +2 -2
  332. package/dist/{tooltip-iEvxKg8g.cjs.map → tooltip-ZtnGjoJd.cjs.map} +1 -1
  333. package/dist/tooltip.cjs +1 -1
  334. package/dist/tooltip.js +1 -1
  335. package/dist/{tree-D9EbEsxn.js → tree-CBEjV7jP.js} +2 -2
  336. package/dist/{tree-D9EbEsxn.js.map → tree-CBEjV7jP.js.map} +1 -1
  337. package/dist/{tree-Bclu6uvv.cjs → tree-DP5U00NA.cjs} +2 -2
  338. package/dist/{tree-Bclu6uvv.cjs.map → tree-DP5U00NA.cjs.map} +1 -1
  339. package/dist/tree.cjs +1 -1
  340. package/dist/tree.js +1 -1
  341. package/dist/{typewriter-Bscwd-36.cjs → typewriter-C6kFjLcX.cjs} +2 -2
  342. package/dist/{typewriter-Bscwd-36.cjs.map → typewriter-C6kFjLcX.cjs.map} +1 -1
  343. package/dist/{typewriter-BjDPgRlj.js → typewriter-Eo5qXoGC.js} +4 -4
  344. package/dist/{typewriter-BjDPgRlj.js.map → typewriter-Eo5qXoGC.js.map} +1 -1
  345. package/dist/typewriter.cjs +1 -1
  346. package/dist/typewriter.js +1 -1
  347. package/dist/{typography-CConBBFH.js → typography-C_1gdM2I.js} +2 -2
  348. package/dist/{typography-CConBBFH.js.map → typography-C_1gdM2I.js.map} +1 -1
  349. package/dist/{typography-DLGT3DGz.cjs → typography-DGyjlLCE.cjs} +2 -2
  350. package/dist/{typography-DLGT3DGz.cjs.map → typography-DGyjlLCE.cjs.map} +1 -1
  351. package/dist/typography.cjs +1 -1
  352. package/dist/typography.js +1 -1
  353. package/package.json +1 -1
  354. package/types/src/navigation-rail/navigation-rail.d.ts +2 -0
  355. package/types/src/progress/progress.d.ts +1 -1
  356. package/dist/avatar-BdyuuIk7.js.map +0 -1
  357. package/dist/avatar-DBfJucB9.cjs.map +0 -1
  358. package/dist/lightbox-service-3mHqBKEh.cjs.map +0 -1
  359. package/dist/lightbox-service-DxbYZAuv.js.map +0 -1
  360. package/dist/list-FWXmY-eQ.js.map +0 -1
  361. package/dist/list-JjR7WOrd.cjs.map +0 -1
  362. package/dist/navigation-rail-D1o3qDe_.cjs.map +0 -1
  363. package/dist/navigation-rail-DKXumnmt.js.map +0 -1
  364. package/dist/progress-0POmJs5o.js.map +0 -1
  365. package/dist/progress-qx8jtrOA.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"boat-CowHieO2.js","sources":["../src/boat/boat.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { fromEvent, interval, merge, race } from 'rxjs'\nimport { filter, finalize, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators'\n\ntype BoatState = 'hidden' | 'minimized' | 'expanded'\n\ninterface Position {\n\tx: number\n\ty: number\n}\n\ninterface SavedPosition {\n\tx: number\n\ty: number\n\tanchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n}\n\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends $LitElement(css`\n\t:host {\n\t\tdisplay: contents;\n\t\tposition: relative;\n\t\tz-index: 1000;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tget state(): BoatState {\n\t\treturn this.currentState\n\t}\n\tset state(value: BoatState) {\n\t\tif (this.isAnimating || value === this.currentState) return\n\t\tthis.animateToState(value)\n\t}\n\n\t@property({ type: String }) id: string = 'default'\n\n\t@property({ type: Boolean, reflect: true })\n\tget lowered(): boolean {\n\t\treturn this.isLowered\n\t}\n\tset lowered(value: boolean) {\n\t\tthis.isLowered = value\n\t\tthis.requestUpdate()\n\t}\n\n\t// New properties for simplified API\n\t@property({ type: String }) icon?: string\n\t@property({ type: String }) label?: string\n\t@property() badge?: string | number\n\n\t// Element references\n\tprivate containerRef: Ref<HTMLDivElement> = createRef()\n\tprivate contentRef: Ref<HTMLElement> = createRef()\n\tprivate iconRef: Ref<HTMLElement> = createRef()\n\tprivate headerRef: Ref<HTMLElement> = createRef()\n\n\t// Current animation reference\n\tprivate currentAnimation?: Animation\n\n\t// Animation configuration\n\tprivate readonly ANIMATION_CONFIG = {\n\t\tdurations: {\n\t\t\texpand: 350,\n\t\t\tminimize: 250,\n\t\t\thide: 200,\n\t\t\tcontent: 300,\n\t\t},\n\t\teasing: {\n\t\t\temphasized: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\tdecelerate: 'cubic-bezier(0.05, 0.7, 0.1, 1.0)',\n\t\t\taccelerate: 'cubic-bezier(0.3, 0.0, 0.8, 0.15)',\n\t\t\tstandard: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\n\t\t},\n\t\tshadows: {\n\t\t\tfab: '0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12)',\n\t\t\tfabLowered:\n\t\t\t\t'0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12)',\n\t\t\texpanded: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n\t\t},\n\t}\n\n\t// Reactive state for template\n\t@state() private currentState: BoatState = 'minimized'\n\t@state() private isContentVisible: boolean = false\n\t@state() private isAnimating: boolean = false\n\t@state() private isLowered: boolean = false\n\t@state() private isDragging: boolean = false\n\t@state() private position: Position = { x: 16, y: 16 }\n\t@state() private anchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' = 'bottom-right'\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\tfromEvent(window, 'resize')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.updateExpandedWidth()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Validate viewport after resize to ensure boat stays visible\n\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\tif (container) {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\t// Only validate if dimensions are ready\n\t\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" repositioned after resize:`, this.position)\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\n\t\t\t// Keyboard shortcut - Escape key\n\t\t\tfromEvent<KeyboardEvent>(window, 'keydown')\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter(e => e.key === 'Escape' && this.currentState !== 'hidden'),\n\t\t\t\t\ttap(e => e.preventDefault()),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.toggleState() // Minimize on Esc if expanded\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.close() // Hide on Esc if minimized\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\n\tprivate async animateToState(targetState: BoatState) {\n\t\tif (this.isAnimating || targetState === this.currentState) return\n\n\t\tconst previousState = this.currentState\n\t\tthis.isAnimating = true\n\n\t\ttry {\n\t\t\tawait this.performTransition(previousState, targetState)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\n\t\t\t// Dispatch event\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('toggle', {\n\t\t\t\t\tdetail: targetState,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} catch (err) {\n\t\t\tconsole.warn('Animation error:', err)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\t\t} finally {\n\t\t\tthis.isAnimating = false\n\t\t}\n\t}\n\n\t// Simplified animation transition\n\tprivate async performTransition(fromState: BoatState, toState: BoatState): Promise<void> {\n\t\tthis.currentAnimation?.cancel()\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Update content visibility before expand and wait for render\n\t\tif (toState === 'expanded') {\n\t\t\tthis.isContentVisible = true\n\t\t\tawait this.updateComplete\n\t\t}\n\n\t\t// Create animations\n\t\tconst animations = this.createAnimations(fromState, toState)\n\n\t\t// Wait for main animation to complete\n\t\tif (animations.container) {\n\t\t\tthis.currentAnimation = animations.container\n\t\t\tawait animations.container.finished\n\n\t\t\t// Wait for content fade-out animation before removing from DOM\n\t\t\tif (animations.content) {\n\t\t\t\tawait animations.content.finished\n\t\t\t}\n\n\t\t\t// Hide content after minimize\n\t\t\tif (toState !== 'expanded') {\n\t\t\t\tthis.isContentVisible = false\n\t\t\t} else {\n\t\t\t\t// CRITICAL: After expanding, validate viewport bounds\n\t\t\t\t// The expanded boat is much larger and might go outside viewport\n\t\t\t\tconst container = this.containerRef.value\n\t\t\t\tif (container) {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped after expand:`, this.position)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Create animations for state transition\n\tprivate createAnimations(fromState: BoatState, toState: BoatState) {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\t\tconst animations: { container?: Animation; content?: Animation; icon?: Animation } = {}\n\n\t\tif (!container) return animations\n\n\t\tconst config = this.ANIMATION_CONFIG\n\t\tconst fromStyles = this.getStyleForState(fromState)\n\t\tconst toStyles = this.getStyleForState(toState)\n\n\t\t// Container animation\n\t\tif (toState === 'expanded') {\n\t\t\t// Expand animation without transform\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: config.durations.expand,\n\t\t\t\teasing: config.easing.decelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t} else {\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: toState === 'hidden' ? config.durations.hide : config.durations.minimize,\n\t\t\t\teasing: config.easing.accelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\t// Content animation (only for expand/minimize transitions)\n\t\tif (content && fromState === 'expanded' && toState === 'minimized') {\n\t\t\t// Fade out content before minimizing - MUST await this before removing from DOM\n\t\t\tanimations.content = content.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(-8px)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 150,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t} else if (content && toState === 'expanded') {\n\t\t\t// Fade in content when expanding\n\t\t\tcontent.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(8px)' },\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: config.durations.content,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\t// Icon rotation animation\n\t\tif (icon) {\n\t\t\tconst isExpanding = toState === 'expanded'\n\t\t\tconst isCollapsing = fromState === 'expanded' && toState === 'minimized'\n\n\t\t\tif (isExpanding || isCollapsing) {\n\t\t\t\ticon.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(0deg)' : 'rotate(180deg)' },\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(180deg)' : 'rotate(0deg)' },\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: config.easing.emphasized,\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn animations\n\t}\n\n\t// Get styles for a specific state\n\tprivate getStyleForState(state: BoatState): Keyframe {\n\t\tconst { shadows } = this.ANIMATION_CONFIG\n\t\tconst baseStyles = {\n\t\t\tmaxWidth: 'fit',\n\t\t\tmaxHeight: 'auto',\n\t\t\tborderRadius: '16px',\n\t\t}\n\n\t\tconst stateStyles: Record<BoatState, Keyframe> = {\n\t\t\thidden: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '0',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tboxShadow: 'none',\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\tminimized: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\tboxShadow: this.isLowered ? shadows.fabLowered : shadows.fab,\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\texpanded: {\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\twidth: this.getResponsiveWidth(),\n\t\t\t\tmaxWidth: '100%',\n\t\t\t\tmaxHeight: '80vh',\n\t\t\t\tboxShadow: shadows.expanded,\n\t\t\t\tborderRadius: '8px 8px 0 0',\n\t\t\t\tbackdropFilter: 'blur(12px)',\n\t\t\t},\n\t\t}\n\n\t\treturn stateStyles[state] as Keyframe\n\t}\n\n\t// Calculate responsive width based on viewport\n\tprivate getResponsiveWidth(): string {\n\t\tif (typeof window === 'undefined') return '40vw'\n\n\t\tconst vw = window.innerWidth\n\t\tif (vw < 768) return 'calc(100vw - 32px)'\n\t\tif (vw < 1024) return '70vw'\n\t\tif (vw < 1280) return '60vw'\n\t\treturn '40vw'\n\t}\n\n\t// Update expanded width on window resize\n\tprivate updateExpandedWidth() {\n\t\tconst container = this.containerRef.value\n\t\tif (container && this.currentState === 'expanded') {\n\t\t\tcontainer.style.width = this.getResponsiveWidth()\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.applyInitialStyles()\n\t\tthis.updateContainerPosition()\n\n\t\t// Wait for container to have actual dimensions before validation\n\t\t// Uses pattern from animated-text.ts - poll until dimensions are ready\n\t\tconst container = this.containerRef.value\n\t\tif (container) {\n\t\t\tinterval(10)\n\t\t\t\t.pipe(\n\t\t\t\t\tstartWith(true),\n\t\t\t\t\tfilter(() => {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t\t}),\n\t\t\t\t\ttake(1),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\t// Validate and snap to viewport if needed\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t// Calculate actual position based on anchor\n\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t// Check if boat is outside viewport bounds\n\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t// Snap to viewport edges if outside (16px padding)\n\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update position if boat was outside viewport\n\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t// Convert back to anchor-relative coordinates\n\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t// Ensure position is never negative\n\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped to viewport edge:`, this.position, this.anchor)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\tthis.setupDragPipeline()\n\n\t\t// Check for deprecated header slot usage\n\t\tconst hasHeaderSlot = this.querySelector('[slot=\"header\"]')\n\t\tif (hasHeaderSlot && !this.icon && !this.label) {\n\t\t\tconsole.warn(\n\t\t\t\t'[schmancy-boat] Using slot=\"header\" is deprecated. ' +\n\t\t\t\t\t'Please use the icon, label, and badge properties instead. ' +\n\t\t\t\t\t'Example: <schmancy-boat icon=\"info\" label=\"Title\" badge=\"5\">',\n\t\t\t)\n\t\t}\n\t}\n\n\t// Apply initial styles to elements\n\tprivate applyInitialStyles() {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\n\t\tif (container) {\n\t\t\tconst initialStyle = this.getStyleForState(this.currentState)\n\t\t\tObject.assign(container.style, initialStyle)\n\n\t\t\t// Safari compatibility for backdrop filter\n\t\t\tif ('webkitBackdropFilter' in container.style) {\n\t\t\t\t;(container.style as any).webkitBackdropFilter = initialStyle.backdropFilter\n\t\t\t}\n\t\t}\n\n\t\t// Set initial content opacity\n\t\tif (content) {\n\t\t\tcontent.style.opacity = this.isContentVisible ? '1' : '0'\n\t\t}\n\n\t\t// Set initial icon rotation\n\t\tif (icon && this.currentState === 'expanded') {\n\t\t\ticon.style.transform = 'rotate(180deg)'\n\t\t}\n\t}\n\n\t// Public method to toggle between minimized and expanded\n\ttoggleState() {\n\t\tconst newState = this.currentState === 'minimized' ? 'expanded' : 'minimized'\n\t\tthis.animateToState(newState)\n\t}\n\n\t// Public method to close (hide) the boat\n\tclose() {\n\t\tthis.animateToState('hidden')\n\t}\n\n\tprivate closeAndAddToNav() {\n\t\trace(\n\t\t\tthis.discover<any>('schmancy-navigation-rail'),\n\t\t\tthis.discover<any>('schmancy-navigation-bar'),\n\t\t\tthis.discover<any>('schmancy-nav-drawer'),\n\t\t\tthis.discover<any>('app-navigation-rail'),\n\t\t\tthis.discover<any>('app-navigation-bar'),\n\t\t\tthis.discover<any>('app-nav-drawer'),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\ttake(1),\n\t\t\t\ttap(navComponent => {\n\t\t\t\t\tif (navComponent && typeof navComponent.addBoatItem === 'function') {\n\t\t\t\t\t\t// Use properties first, fall back to slot parsing\n\t\t\t\t\t\tconst icon =\n\t\t\t\t\t\t\tthis.icon ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tconst iconElement = headerSlot?.querySelector('schmancy-icon')\n\t\t\t\t\t\t\t\treturn iconElement?.textContent?.trim() || 'widgets'\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\tthis.label ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tlet title = headerSlot?.textContent?.trim() || 'Boat'\n\t\t\t\t\t\t\t\tif (icon && title.includes(icon)) {\n\t\t\t\t\t\t\t\t\ttitle = title.replace(icon, '').trim()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn title || this.id\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\t// Add the boat to navigation\n\t\t\t\t\t\tconst navItem = navComponent.addBoatItem({\n\t\t\t\t\t\t\tid: `boat-${this.id}`,\n\t\t\t\t\t\t\ttitle: label,\n\t\t\t\t\t\t\ticon: icon,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (navItem) {\n\t\t\t\t\t\t\t// Simple fade out then hide\n\t\t\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\t\t\tif (container) {\n\t\t\t\t\t\t\t\tcontainer\n\t\t\t\t\t\t\t\t\t.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 150, easing: 'ease-out', fill: 'forwards' })\n\t\t\t\t\t\t\t\t\t.finished.then(() => {\n\t\t\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set up click listener to reopen - using RxJS pattern\n\t\t\t\t\t\t\tfromEvent(navItem, 'click')\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\ttap(() => (this.state = 'expanded')),\n\t\t\t\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.subscribe()\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No nav component found, just hide\n\t\t\t\t\t\tthis.close()\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate calculateDragPosition(\n\t\tclientX: number,\n\t\tclientY: number,\n\t\toffsetX: number,\n\t\toffsetY: number,\n\t\tinitialRect: DOMRect,\n\t): Position {\n\t\tconst targetLeft = clientX - offsetX\n\t\tconst targetTop = clientY - offsetY\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\t\tconst clampedLeft = Math.max(0, Math.min(targetLeft, vw - initialRect.width))\n\t\tconst clampedTop = Math.max(0, Math.min(targetTop, vh - initialRect.height))\n\n\t\tconst newX = this.anchor.includes('right') ? vw - (clampedLeft + initialRect.width) : clampedLeft\n\n\t\tconst newY = this.anchor.includes('bottom') ? vh - (clampedTop + initialRect.height) : clampedTop\n\n\t\treturn { x: Math.max(0, newX), y: Math.max(0, newY) }\n\t}\n\n\tprivate savePosition() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst toSave: SavedPosition = {\n\t\t\tx: this.position.x,\n\t\t\ty: this.position.y,\n\t\t\tanchor: this.anchor,\n\t\t}\n\t\tconst key = `schmancy-boat-${this.id}`\n\t\tlocalStorage.setItem(key, JSON.stringify(toSave))\n\t\tconsole.log('💾 Saved position:', key, toSave)\n\t}\n\n\tprivate setupDragPipeline() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst header = this.headerRef.value\n\t\tconst container = this.containerRef.value\n\t\tif (!header || !container) return\n\n\t\tlet hasDragged = false\n\t\tconst DRAG_THRESHOLD = 5\n\n\t\t// Merge mouse and touch start events\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(header, 'mousedown').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}),\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.clientX,\n\t\t\t\t\tclientY: e.clientY,\n\t\t\t\t\ttype: 'mouse' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t\tfromEvent<TouchEvent>(header, 'touchstart').pipe(\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.touches[0].clientX,\n\t\t\t\t\tclientY: e.touches[0].clientY,\n\t\t\t\t\ttype: 'touch' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tmap(({ clientX, clientY, type }) => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\thasDragged = false\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstartX: clientX,\n\t\t\t\t\t\tstartY: clientY,\n\t\t\t\t\t\toffsetX: clientX - rect.left,\n\t\t\t\t\t\toffsetY: clientY - rect.top,\n\t\t\t\t\t\tinitialRect: rect,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(({ startX, startY, offsetX, offsetY, initialRect, type }) => {\n\t\t\t\t\tconst move$ =\n\t\t\t\t\t\ttype === 'mouse'\n\t\t\t\t\t\t\t? fromEvent<MouseEvent>(window, 'mousemove').pipe(map(e => ({ clientX: e.clientX, clientY: e.clientY })))\n\t\t\t\t\t\t\t: fromEvent<TouchEvent>(window, 'touchmove').pipe(\n\t\t\t\t\t\t\t\t\tmap(e => ({ clientX: e.touches[0].clientX, clientY: e.touches[0].clientY })),\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\tconst end$ = type === 'mouse' ? fromEvent(window, 'mouseup') : fromEvent(window, 'touchend')\n\n\t\t\t\t\treturn move$.pipe(\n\t\t\t\t\t\tmap(({ clientX, clientY }) => {\n\t\t\t\t\t\t\tconst deltaX = clientX - startX\n\t\t\t\t\t\t\tconst deltaY = clientY - startY\n\t\t\t\t\t\t\tconst distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n\n\t\t\t\t\t\t\tif (distance > DRAG_THRESHOLD && !hasDragged) {\n\t\t\t\t\t\t\t\thasDragged = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!hasDragged) return null\n\n\t\t\t\t\t\t\treturn this.calculateDragPosition(clientX, clientY, offsetX, offsetY, initialRect)\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfilter(position => position !== null),\n\t\t\t\t\t\ttap(position => {\n\t\t\t\t\t\t\tif (position) {\n\t\t\t\t\t\t\t\tthis.position = position\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttakeUntil(end$),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tif (hasDragged) {\n\t\t\t\t\t\tthis.updateAnchor()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t}\n\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\thasDragged = false\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// Update container position based on anchor and position values\n\tprivate updateContainerPosition() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Reset all position styles\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\n\t\t// Apply new position based on anchor\n\t\tif (this.anchor.includes('right')) {\n\t\t\tcontainer.style.right = `${this.position.x}px`\n\t\t} else {\n\t\t\tcontainer.style.left = `${this.position.x}px`\n\t\t}\n\n\t\tif (this.anchor.includes('bottom')) {\n\t\t\tcontainer.style.bottom = `${this.position.y}px`\n\t\t} else {\n\t\t\tcontainer.style.top = `${this.position.y}px`\n\t\t}\n\t}\n\n\t// Update anchor based on current position\n\tprivate updateAnchor() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\n\t\tconst isRight = rect.left > vw / 2\n\t\tconst isBottom = rect.top > vh / 2\n\n\t\tconst newAnchor = `${isBottom ? 'bottom' : 'top'}-${isRight ? 'right' : 'left'}` as typeof this.anchor\n\n\t\tif (newAnchor !== this.anchor) {\n\t\t\t// Calculate new position values for the new anchor\n\t\t\tif (isRight) {\n\t\t\t\tthis.position.x = vw - rect.right\n\t\t\t} else {\n\t\t\t\tthis.position.x = rect.left\n\t\t\t}\n\n\t\t\tif (isBottom) {\n\t\t\t\tthis.position.y = vh - rect.bottom\n\t\t\t} else {\n\t\t\t\tthis.position.y = rect.top\n\t\t\t}\n\n\t\t\tthis.anchor = newAnchor\n\t\t}\n\t}\n\n\t// Cleanup on component disconnect\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.currentAnimation?.cancel()\n\t}\n\n\tprotected render(): unknown {\n\t\tconst surfaceElevation = this.currentState === 'minimized' ? (this.isLowered ? '1' : '3') : '4'\n\t\tconst isMinimized = this.currentState === 'minimized'\n\n\t\t// Set transform origin based on anchor for proper expansion\n\t\tconst transformOrigin = this.anchor.includes('bottom')\n\t\t\t? this.anchor.includes('right')\n\t\t\t\t? 'bottom right'\n\t\t\t\t: 'bottom left'\n\t\t\t: this.anchor.includes('right')\n\t\t\t\t? 'top right'\n\t\t\t\t: 'top left'\n\n\t\tconst containerClasses = {\n\t\t\tfixed: true,\n\t\t\t'overflow-y-auto': true,\n\t\t\tflex: true,\n\t\t\t'flex-col': true,\n\t\t\t'select-none': true,\n\t\t\t'will-change-transform': true,\n\t\t\t'[contain:layout_style]': true,\n\t\t\t'[transform:translate3d(0,0,0)]': true,\n\t\t\t'[backface-visibility:hidden]': true,\n\t\t\t'transition-shadow': true,\n\t\t\t'opacity-95': this.isDragging,\n\t\t\t'shadow-[0_24px_48px_-8px_rgba(0,0,0,0.2),0_12px_24px_-4px_rgba(0,0,0,0.12)]': this.isDragging,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${this.classMap(containerClasses)}\n\t\t\t\tstyle=\"transform-origin: ${transformOrigin}\"\n\t\t\t\t${ref(this.containerRef)}\n\t\t\t>\n\t\t\t\t<!-- Header section -->\n\t\t\t\t<section class=\"sticky top-0 z-100\">\n\t\t\t\t\t<schmancy-surface\n\t\t\t\t\t\televation=\"${surfaceElevation}\"\n\t\t\t\t\t\trounded=\"${isMinimized ? 'none' : 'top'}\"\n\t\t\t\t\t\ttype=\"containerHigh\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"group sticky top-0 px-3 py-2 flex items-center justify-between gap-3 ${this.isDragging\n\t\t\t\t\t\t\t\t? 'cursor-grabbing'\n\t\t\t\t\t\t\t\t: 'cursor-move'}\"\n\t\t\t\t\t\t\t${ref(this.headerRef)}\n\t\t\t\t\t\t\ttitle=\"Drag to move, double-click to toggle\"\n\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<!-- Drag handle indicator -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex items-center text-surface-onVariant opacity-40 transition-opacity duration-200 group-hover:opacity-100\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon style=\"font-size: 20px\">drag_indicator</schmancy-icon>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Header content - use properties if provided, else fallback to slot -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex-1 min-w-fit items-center flex justify-start ${isMinimized ? 'cursor-pointer' : ''}\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\t\tif (isMinimized) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\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\ttitle=\"${isMinimized ? 'Click to expand' : ''}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t${this.icon || this.label\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"flex gap-2 items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t${this.icon ? html`<schmancy-icon>${this.icon}</schmancy-icon>` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-typography type=\"title\" token=\"md\">${this.label}</schmancy-typography>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.badge !== undefined && this.badge !== null && this.badge !== ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-badge>${this.badge}</schmancy-badge>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`<slot name=\"header\"></slot>`}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Control buttons -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-1 shrink-0\">\n\t\t\t\t\t\t\t\t${isMinimized\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Expand button (when minimized) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Expand\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tfullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Minimize button (when expanded) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"filled tonal\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'minimized'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Minimize\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tclose_fullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`}\n\n\t\t\t\t\t\t\t\t<!-- Close button -->\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\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.closeAndAddToNav()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Close and add to navigation\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tremove\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\n\t\t\t\t<!-- Content section -->\n\t\t\t\t${cache(\n\t\t\t\t\tthis.isContentVisible\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<schmancy-surface type=\"containerHigh\" class=\"flex-1\" ${ref(this.contentRef)}>\n\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t\t `\n\t\t\t\t\t\t: html``,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-boat': SchmancyBoat\n\t}\n}\n"],"names":["SchmancyBoat","$LitElement","css","constructor","super","arguments","this","id","containerRef","createRef","contentRef","iconRef","headerRef","ANIMATION_CONFIG","durations","expand","minimize","hide","content","easing","emphasized","decelerate","accelerate","standard","shadows","fab","fabLowered","expanded","currentState","isContentVisible","isAnimating","isLowered","isDragging","position","x","y","anchor","state","value","animateToState","lowered","requestUpdate","connectedCallback","window","fromEvent","pipe","takeUntil","disconnecting","subscribe","updateExpandedWidth","container","rect","getBoundingClientRect","width","height","vw","innerWidth","vh","innerHeight","actualLeft","includes","actualTop","needsUpdate","newLeft","newTop","Math","max","updateContainerPosition","savePosition","filter","e","key","tap","preventDefault","toggleState","close","targetState","previousState","performTransition","dispatchEvent","CustomEvent","detail","bubbles","composed","err","fromState","toState","currentAnimation","cancel","updateComplete","animations","createAnimations","finished","icon","config","fromStyles","getStyleForState","toStyles","animate","duration","fill","opacity","transform","isExpanding","baseStyles","maxWidth","maxHeight","borderRadius","hidden","pointerEvents","boxShadow","backdropFilter","minimized","getResponsiveWidth","style","applyInitialStyles","interval","startWith","take","setupDragPipeline","querySelector","label","initialStyle","Object","assign","webkitBackdropFilter","newState","race","discover","navComponent","addBoatItem","textContent","trim","title","replace","navItem","then","clientX","clientY","offsetX","offsetY","initialRect","targetLeft","targetTop","clampedLeft","min","clampedTop","newX","newY","toSave","localStorage","setItem","JSON","stringify","header","hasDragged","merge","button","stopPropagation","map","type","touches","startX","startY","left","top","switchMap","move$","end$","deltaX","deltaY","sqrt","calculateDragPosition","finalize","updateAnchor","removeProperty","right","bottom","isRight","isBottom","newAnchor","disconnectedCallback","render","surfaceElevation","isMinimized","transformOrigin","containerClasses","fixed","flex","html","classMap","ref","badge","closeAndAddToNav","cache","__decorateClass","property","String","reflect","prototype","Boolean","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"boat-Ckt9v__d.js","sources":["../src/boat/boat.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { fromEvent, interval, merge, race } from 'rxjs'\nimport { filter, finalize, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators'\n\ntype BoatState = 'hidden' | 'minimized' | 'expanded'\n\ninterface Position {\n\tx: number\n\ty: number\n}\n\ninterface SavedPosition {\n\tx: number\n\ty: number\n\tanchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n}\n\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends $LitElement(css`\n\t:host {\n\t\tdisplay: contents;\n\t\tposition: relative;\n\t\tz-index: 1000;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tget state(): BoatState {\n\t\treturn this.currentState\n\t}\n\tset state(value: BoatState) {\n\t\tif (this.isAnimating || value === this.currentState) return\n\t\tthis.animateToState(value)\n\t}\n\n\t@property({ type: String }) id: string = 'default'\n\n\t@property({ type: Boolean, reflect: true })\n\tget lowered(): boolean {\n\t\treturn this.isLowered\n\t}\n\tset lowered(value: boolean) {\n\t\tthis.isLowered = value\n\t\tthis.requestUpdate()\n\t}\n\n\t// New properties for simplified API\n\t@property({ type: String }) icon?: string\n\t@property({ type: String }) label?: string\n\t@property() badge?: string | number\n\n\t// Element references\n\tprivate containerRef: Ref<HTMLDivElement> = createRef()\n\tprivate contentRef: Ref<HTMLElement> = createRef()\n\tprivate iconRef: Ref<HTMLElement> = createRef()\n\tprivate headerRef: Ref<HTMLElement> = createRef()\n\n\t// Current animation reference\n\tprivate currentAnimation?: Animation\n\n\t// Animation configuration\n\tprivate readonly ANIMATION_CONFIG = {\n\t\tdurations: {\n\t\t\texpand: 350,\n\t\t\tminimize: 250,\n\t\t\thide: 200,\n\t\t\tcontent: 300,\n\t\t},\n\t\teasing: {\n\t\t\temphasized: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\tdecelerate: 'cubic-bezier(0.05, 0.7, 0.1, 1.0)',\n\t\t\taccelerate: 'cubic-bezier(0.3, 0.0, 0.8, 0.15)',\n\t\t\tstandard: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\n\t\t},\n\t\tshadows: {\n\t\t\tfab: '0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12)',\n\t\t\tfabLowered:\n\t\t\t\t'0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12)',\n\t\t\texpanded: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n\t\t},\n\t}\n\n\t// Reactive state for template\n\t@state() private currentState: BoatState = 'minimized'\n\t@state() private isContentVisible: boolean = false\n\t@state() private isAnimating: boolean = false\n\t@state() private isLowered: boolean = false\n\t@state() private isDragging: boolean = false\n\t@state() private position: Position = { x: 16, y: 16 }\n\t@state() private anchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' = 'bottom-right'\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\tfromEvent(window, 'resize')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.updateExpandedWidth()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Validate viewport after resize to ensure boat stays visible\n\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\tif (container) {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\t// Only validate if dimensions are ready\n\t\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" repositioned after resize:`, this.position)\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\n\t\t\t// Keyboard shortcut - Escape key\n\t\t\tfromEvent<KeyboardEvent>(window, 'keydown')\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter(e => e.key === 'Escape' && this.currentState !== 'hidden'),\n\t\t\t\t\ttap(e => e.preventDefault()),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.toggleState() // Minimize on Esc if expanded\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.close() // Hide on Esc if minimized\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\n\tprivate async animateToState(targetState: BoatState) {\n\t\tif (this.isAnimating || targetState === this.currentState) return\n\n\t\tconst previousState = this.currentState\n\t\tthis.isAnimating = true\n\n\t\ttry {\n\t\t\tawait this.performTransition(previousState, targetState)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\n\t\t\t// Dispatch event\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('toggle', {\n\t\t\t\t\tdetail: targetState,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} catch (err) {\n\t\t\tconsole.warn('Animation error:', err)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\t\t} finally {\n\t\t\tthis.isAnimating = false\n\t\t}\n\t}\n\n\t// Simplified animation transition\n\tprivate async performTransition(fromState: BoatState, toState: BoatState): Promise<void> {\n\t\tthis.currentAnimation?.cancel()\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Update content visibility before expand and wait for render\n\t\tif (toState === 'expanded') {\n\t\t\tthis.isContentVisible = true\n\t\t\tawait this.updateComplete\n\t\t}\n\n\t\t// Create animations\n\t\tconst animations = this.createAnimations(fromState, toState)\n\n\t\t// Wait for main animation to complete\n\t\tif (animations.container) {\n\t\t\tthis.currentAnimation = animations.container\n\t\t\tawait animations.container.finished\n\n\t\t\t// Wait for content fade-out animation before removing from DOM\n\t\t\tif (animations.content) {\n\t\t\t\tawait animations.content.finished\n\t\t\t}\n\n\t\t\t// Hide content after minimize\n\t\t\tif (toState !== 'expanded') {\n\t\t\t\tthis.isContentVisible = false\n\t\t\t} else {\n\t\t\t\t// CRITICAL: After expanding, validate viewport bounds\n\t\t\t\t// The expanded boat is much larger and might go outside viewport\n\t\t\t\tconst container = this.containerRef.value\n\t\t\t\tif (container) {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped after expand:`, this.position)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Create animations for state transition\n\tprivate createAnimations(fromState: BoatState, toState: BoatState) {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\t\tconst animations: { container?: Animation; content?: Animation; icon?: Animation } = {}\n\n\t\tif (!container) return animations\n\n\t\tconst config = this.ANIMATION_CONFIG\n\t\tconst fromStyles = this.getStyleForState(fromState)\n\t\tconst toStyles = this.getStyleForState(toState)\n\n\t\t// Container animation\n\t\tif (toState === 'expanded') {\n\t\t\t// Expand animation without transform\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: config.durations.expand,\n\t\t\t\teasing: config.easing.decelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t} else {\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: toState === 'hidden' ? config.durations.hide : config.durations.minimize,\n\t\t\t\teasing: config.easing.accelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\t// Content animation (only for expand/minimize transitions)\n\t\tif (content && fromState === 'expanded' && toState === 'minimized') {\n\t\t\t// Fade out content before minimizing - MUST await this before removing from DOM\n\t\t\tanimations.content = content.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(-8px)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 150,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t} else if (content && toState === 'expanded') {\n\t\t\t// Fade in content when expanding\n\t\t\tcontent.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(8px)' },\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: config.durations.content,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\t// Icon rotation animation\n\t\tif (icon) {\n\t\t\tconst isExpanding = toState === 'expanded'\n\t\t\tconst isCollapsing = fromState === 'expanded' && toState === 'minimized'\n\n\t\t\tif (isExpanding || isCollapsing) {\n\t\t\t\ticon.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(0deg)' : 'rotate(180deg)' },\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(180deg)' : 'rotate(0deg)' },\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: config.easing.emphasized,\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn animations\n\t}\n\n\t// Get styles for a specific state\n\tprivate getStyleForState(state: BoatState): Keyframe {\n\t\tconst { shadows } = this.ANIMATION_CONFIG\n\t\tconst baseStyles = {\n\t\t\tmaxWidth: 'fit',\n\t\t\tmaxHeight: 'auto',\n\t\t\tborderRadius: '16px',\n\t\t}\n\n\t\tconst stateStyles: Record<BoatState, Keyframe> = {\n\t\t\thidden: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '0',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tboxShadow: 'none',\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\tminimized: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\tboxShadow: this.isLowered ? shadows.fabLowered : shadows.fab,\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\texpanded: {\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\twidth: this.getResponsiveWidth(),\n\t\t\t\tmaxWidth: '100%',\n\t\t\t\tmaxHeight: '80vh',\n\t\t\t\tboxShadow: shadows.expanded,\n\t\t\t\tborderRadius: '8px 8px 0 0',\n\t\t\t\tbackdropFilter: 'blur(12px)',\n\t\t\t},\n\t\t}\n\n\t\treturn stateStyles[state] as Keyframe\n\t}\n\n\t// Calculate responsive width based on viewport\n\tprivate getResponsiveWidth(): string {\n\t\tif (typeof window === 'undefined') return '40vw'\n\n\t\tconst vw = window.innerWidth\n\t\tif (vw < 768) return 'calc(100vw - 32px)'\n\t\tif (vw < 1024) return '70vw'\n\t\tif (vw < 1280) return '60vw'\n\t\treturn '40vw'\n\t}\n\n\t// Update expanded width on window resize\n\tprivate updateExpandedWidth() {\n\t\tconst container = this.containerRef.value\n\t\tif (container && this.currentState === 'expanded') {\n\t\t\tcontainer.style.width = this.getResponsiveWidth()\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.applyInitialStyles()\n\t\tthis.updateContainerPosition()\n\n\t\t// Wait for container to have actual dimensions before validation\n\t\t// Uses pattern from animated-text.ts - poll until dimensions are ready\n\t\tconst container = this.containerRef.value\n\t\tif (container) {\n\t\t\tinterval(10)\n\t\t\t\t.pipe(\n\t\t\t\t\tstartWith(true),\n\t\t\t\t\tfilter(() => {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t\t}),\n\t\t\t\t\ttake(1),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\t// Validate and snap to viewport if needed\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t// Calculate actual position based on anchor\n\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t// Check if boat is outside viewport bounds\n\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t// Snap to viewport edges if outside (16px padding)\n\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update position if boat was outside viewport\n\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t// Convert back to anchor-relative coordinates\n\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t// Ensure position is never negative\n\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped to viewport edge:`, this.position, this.anchor)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\tthis.setupDragPipeline()\n\n\t\t// Check for deprecated header slot usage\n\t\tconst hasHeaderSlot = this.querySelector('[slot=\"header\"]')\n\t\tif (hasHeaderSlot && !this.icon && !this.label) {\n\t\t\tconsole.warn(\n\t\t\t\t'[schmancy-boat] Using slot=\"header\" is deprecated. ' +\n\t\t\t\t\t'Please use the icon, label, and badge properties instead. ' +\n\t\t\t\t\t'Example: <schmancy-boat icon=\"info\" label=\"Title\" badge=\"5\">',\n\t\t\t)\n\t\t}\n\t}\n\n\t// Apply initial styles to elements\n\tprivate applyInitialStyles() {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\n\t\tif (container) {\n\t\t\tconst initialStyle = this.getStyleForState(this.currentState)\n\t\t\tObject.assign(container.style, initialStyle)\n\n\t\t\t// Safari compatibility for backdrop filter\n\t\t\tif ('webkitBackdropFilter' in container.style) {\n\t\t\t\t;(container.style as any).webkitBackdropFilter = initialStyle.backdropFilter\n\t\t\t}\n\t\t}\n\n\t\t// Set initial content opacity\n\t\tif (content) {\n\t\t\tcontent.style.opacity = this.isContentVisible ? '1' : '0'\n\t\t}\n\n\t\t// Set initial icon rotation\n\t\tif (icon && this.currentState === 'expanded') {\n\t\t\ticon.style.transform = 'rotate(180deg)'\n\t\t}\n\t}\n\n\t// Public method to toggle between minimized and expanded\n\ttoggleState() {\n\t\tconst newState = this.currentState === 'minimized' ? 'expanded' : 'minimized'\n\t\tthis.animateToState(newState)\n\t}\n\n\t// Public method to close (hide) the boat\n\tclose() {\n\t\tthis.animateToState('hidden')\n\t}\n\n\tprivate closeAndAddToNav() {\n\t\trace(\n\t\t\tthis.discover<any>('schmancy-navigation-rail'),\n\t\t\tthis.discover<any>('schmancy-navigation-bar'),\n\t\t\tthis.discover<any>('schmancy-nav-drawer'),\n\t\t\tthis.discover<any>('app-navigation-rail'),\n\t\t\tthis.discover<any>('app-navigation-bar'),\n\t\t\tthis.discover<any>('app-nav-drawer'),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\ttake(1),\n\t\t\t\ttap(navComponent => {\n\t\t\t\t\tif (navComponent && typeof navComponent.addBoatItem === 'function') {\n\t\t\t\t\t\t// Use properties first, fall back to slot parsing\n\t\t\t\t\t\tconst icon =\n\t\t\t\t\t\t\tthis.icon ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tconst iconElement = headerSlot?.querySelector('schmancy-icon')\n\t\t\t\t\t\t\t\treturn iconElement?.textContent?.trim() || 'widgets'\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\tthis.label ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tlet title = headerSlot?.textContent?.trim() || 'Boat'\n\t\t\t\t\t\t\t\tif (icon && title.includes(icon)) {\n\t\t\t\t\t\t\t\t\ttitle = title.replace(icon, '').trim()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn title || this.id\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\t// Add the boat to navigation\n\t\t\t\t\t\tconst navItem = navComponent.addBoatItem({\n\t\t\t\t\t\t\tid: `boat-${this.id}`,\n\t\t\t\t\t\t\ttitle: label,\n\t\t\t\t\t\t\ticon: icon,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (navItem) {\n\t\t\t\t\t\t\t// Simple fade out then hide\n\t\t\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\t\t\tif (container) {\n\t\t\t\t\t\t\t\tcontainer\n\t\t\t\t\t\t\t\t\t.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 150, easing: 'ease-out', fill: 'forwards' })\n\t\t\t\t\t\t\t\t\t.finished.then(() => {\n\t\t\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set up click listener to reopen - using RxJS pattern\n\t\t\t\t\t\t\tfromEvent(navItem, 'click')\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\ttap(() => (this.state = 'expanded')),\n\t\t\t\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.subscribe()\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No nav component found, just hide\n\t\t\t\t\t\tthis.close()\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate calculateDragPosition(\n\t\tclientX: number,\n\t\tclientY: number,\n\t\toffsetX: number,\n\t\toffsetY: number,\n\t\tinitialRect: DOMRect,\n\t): Position {\n\t\tconst targetLeft = clientX - offsetX\n\t\tconst targetTop = clientY - offsetY\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\t\tconst clampedLeft = Math.max(0, Math.min(targetLeft, vw - initialRect.width))\n\t\tconst clampedTop = Math.max(0, Math.min(targetTop, vh - initialRect.height))\n\n\t\tconst newX = this.anchor.includes('right') ? vw - (clampedLeft + initialRect.width) : clampedLeft\n\n\t\tconst newY = this.anchor.includes('bottom') ? vh - (clampedTop + initialRect.height) : clampedTop\n\n\t\treturn { x: Math.max(0, newX), y: Math.max(0, newY) }\n\t}\n\n\tprivate savePosition() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst toSave: SavedPosition = {\n\t\t\tx: this.position.x,\n\t\t\ty: this.position.y,\n\t\t\tanchor: this.anchor,\n\t\t}\n\t\tconst key = `schmancy-boat-${this.id}`\n\t\tlocalStorage.setItem(key, JSON.stringify(toSave))\n\t\tconsole.log('💾 Saved position:', key, toSave)\n\t}\n\n\tprivate setupDragPipeline() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst header = this.headerRef.value\n\t\tconst container = this.containerRef.value\n\t\tif (!header || !container) return\n\n\t\tlet hasDragged = false\n\t\tconst DRAG_THRESHOLD = 5\n\n\t\t// Merge mouse and touch start events\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(header, 'mousedown').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}),\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.clientX,\n\t\t\t\t\tclientY: e.clientY,\n\t\t\t\t\ttype: 'mouse' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t\tfromEvent<TouchEvent>(header, 'touchstart').pipe(\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.touches[0].clientX,\n\t\t\t\t\tclientY: e.touches[0].clientY,\n\t\t\t\t\ttype: 'touch' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tmap(({ clientX, clientY, type }) => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\thasDragged = false\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstartX: clientX,\n\t\t\t\t\t\tstartY: clientY,\n\t\t\t\t\t\toffsetX: clientX - rect.left,\n\t\t\t\t\t\toffsetY: clientY - rect.top,\n\t\t\t\t\t\tinitialRect: rect,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(({ startX, startY, offsetX, offsetY, initialRect, type }) => {\n\t\t\t\t\tconst move$ =\n\t\t\t\t\t\ttype === 'mouse'\n\t\t\t\t\t\t\t? fromEvent<MouseEvent>(window, 'mousemove').pipe(map(e => ({ clientX: e.clientX, clientY: e.clientY })))\n\t\t\t\t\t\t\t: fromEvent<TouchEvent>(window, 'touchmove').pipe(\n\t\t\t\t\t\t\t\t\tmap(e => ({ clientX: e.touches[0].clientX, clientY: e.touches[0].clientY })),\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\tconst end$ = type === 'mouse' ? fromEvent(window, 'mouseup') : fromEvent(window, 'touchend')\n\n\t\t\t\t\treturn move$.pipe(\n\t\t\t\t\t\tmap(({ clientX, clientY }) => {\n\t\t\t\t\t\t\tconst deltaX = clientX - startX\n\t\t\t\t\t\t\tconst deltaY = clientY - startY\n\t\t\t\t\t\t\tconst distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n\n\t\t\t\t\t\t\tif (distance > DRAG_THRESHOLD && !hasDragged) {\n\t\t\t\t\t\t\t\thasDragged = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!hasDragged) return null\n\n\t\t\t\t\t\t\treturn this.calculateDragPosition(clientX, clientY, offsetX, offsetY, initialRect)\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfilter(position => position !== null),\n\t\t\t\t\t\ttap(position => {\n\t\t\t\t\t\t\tif (position) {\n\t\t\t\t\t\t\t\tthis.position = position\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttakeUntil(end$),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tif (hasDragged) {\n\t\t\t\t\t\tthis.updateAnchor()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t}\n\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\thasDragged = false\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// Update container position based on anchor and position values\n\tprivate updateContainerPosition() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Reset all position styles\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\n\t\t// Apply new position based on anchor\n\t\tif (this.anchor.includes('right')) {\n\t\t\tcontainer.style.right = `${this.position.x}px`\n\t\t} else {\n\t\t\tcontainer.style.left = `${this.position.x}px`\n\t\t}\n\n\t\tif (this.anchor.includes('bottom')) {\n\t\t\tcontainer.style.bottom = `${this.position.y}px`\n\t\t} else {\n\t\t\tcontainer.style.top = `${this.position.y}px`\n\t\t}\n\t}\n\n\t// Update anchor based on current position\n\tprivate updateAnchor() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\n\t\tconst isRight = rect.left > vw / 2\n\t\tconst isBottom = rect.top > vh / 2\n\n\t\tconst newAnchor = `${isBottom ? 'bottom' : 'top'}-${isRight ? 'right' : 'left'}` as typeof this.anchor\n\n\t\tif (newAnchor !== this.anchor) {\n\t\t\t// Calculate new position values for the new anchor\n\t\t\tif (isRight) {\n\t\t\t\tthis.position.x = vw - rect.right\n\t\t\t} else {\n\t\t\t\tthis.position.x = rect.left\n\t\t\t}\n\n\t\t\tif (isBottom) {\n\t\t\t\tthis.position.y = vh - rect.bottom\n\t\t\t} else {\n\t\t\t\tthis.position.y = rect.top\n\t\t\t}\n\n\t\t\tthis.anchor = newAnchor\n\t\t}\n\t}\n\n\t// Cleanup on component disconnect\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.currentAnimation?.cancel()\n\t}\n\n\tprotected render(): unknown {\n\t\tconst surfaceElevation = this.currentState === 'minimized' ? (this.isLowered ? '1' : '3') : '4'\n\t\tconst isMinimized = this.currentState === 'minimized'\n\n\t\t// Set transform origin based on anchor for proper expansion\n\t\tconst transformOrigin = this.anchor.includes('bottom')\n\t\t\t? this.anchor.includes('right')\n\t\t\t\t? 'bottom right'\n\t\t\t\t: 'bottom left'\n\t\t\t: this.anchor.includes('right')\n\t\t\t\t? 'top right'\n\t\t\t\t: 'top left'\n\n\t\tconst containerClasses = {\n\t\t\tfixed: true,\n\t\t\t'overflow-y-auto': true,\n\t\t\tflex: true,\n\t\t\t'flex-col': true,\n\t\t\t'select-none': true,\n\t\t\t'will-change-transform': true,\n\t\t\t'[contain:layout_style]': true,\n\t\t\t'[transform:translate3d(0,0,0)]': true,\n\t\t\t'[backface-visibility:hidden]': true,\n\t\t\t'transition-shadow': true,\n\t\t\t'opacity-95': this.isDragging,\n\t\t\t'shadow-[0_24px_48px_-8px_rgba(0,0,0,0.2),0_12px_24px_-4px_rgba(0,0,0,0.12)]': this.isDragging,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${this.classMap(containerClasses)}\n\t\t\t\tstyle=\"transform-origin: ${transformOrigin}\"\n\t\t\t\t${ref(this.containerRef)}\n\t\t\t>\n\t\t\t\t<!-- Header section -->\n\t\t\t\t<section class=\"sticky top-0 z-100\">\n\t\t\t\t\t<schmancy-surface\n\t\t\t\t\t\televation=\"${surfaceElevation}\"\n\t\t\t\t\t\trounded=\"${isMinimized ? 'none' : 'top'}\"\n\t\t\t\t\t\ttype=\"containerHigh\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"group sticky top-0 px-3 py-2 flex items-center justify-between gap-3 ${this.isDragging\n\t\t\t\t\t\t\t\t? 'cursor-grabbing'\n\t\t\t\t\t\t\t\t: 'cursor-move'}\"\n\t\t\t\t\t\t\t${ref(this.headerRef)}\n\t\t\t\t\t\t\ttitle=\"Drag to move, double-click to toggle\"\n\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<!-- Drag handle indicator -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex items-center text-surface-onVariant opacity-40 transition-opacity duration-200 group-hover:opacity-100\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon style=\"font-size: 20px\">drag_indicator</schmancy-icon>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Header content - use properties if provided, else fallback to slot -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex-1 min-w-fit items-center flex justify-start ${isMinimized ? 'cursor-pointer' : ''}\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\t\tif (isMinimized) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\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\ttitle=\"${isMinimized ? 'Click to expand' : ''}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t${this.icon || this.label\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"flex gap-2 items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t${this.icon ? html`<schmancy-icon>${this.icon}</schmancy-icon>` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-typography type=\"title\" token=\"md\">${this.label}</schmancy-typography>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.badge !== undefined && this.badge !== null && this.badge !== ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-badge>${this.badge}</schmancy-badge>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`<slot name=\"header\"></slot>`}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Control buttons -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-1 shrink-0\">\n\t\t\t\t\t\t\t\t${isMinimized\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Expand button (when minimized) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Expand\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tfullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Minimize button (when expanded) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"filled tonal\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'minimized'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Minimize\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tclose_fullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`}\n\n\t\t\t\t\t\t\t\t<!-- Close button -->\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\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.closeAndAddToNav()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Close and add to navigation\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tremove\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\n\t\t\t\t<!-- Content section -->\n\t\t\t\t${cache(\n\t\t\t\t\tthis.isContentVisible\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<schmancy-surface type=\"containerHigh\" class=\"flex-1\" ${ref(this.contentRef)}>\n\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t\t `\n\t\t\t\t\t\t: html``,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-boat': SchmancyBoat\n\t}\n}\n"],"names":["SchmancyBoat","$LitElement","css","constructor","super","arguments","this","id","containerRef","createRef","contentRef","iconRef","headerRef","ANIMATION_CONFIG","durations","expand","minimize","hide","content","easing","emphasized","decelerate","accelerate","standard","shadows","fab","fabLowered","expanded","currentState","isContentVisible","isAnimating","isLowered","isDragging","position","x","y","anchor","state","value","animateToState","lowered","requestUpdate","connectedCallback","window","fromEvent","pipe","takeUntil","disconnecting","subscribe","updateExpandedWidth","container","rect","getBoundingClientRect","width","height","vw","innerWidth","vh","innerHeight","actualLeft","includes","actualTop","needsUpdate","newLeft","newTop","Math","max","updateContainerPosition","savePosition","filter","e","key","tap","preventDefault","toggleState","close","targetState","previousState","performTransition","dispatchEvent","CustomEvent","detail","bubbles","composed","err","fromState","toState","currentAnimation","cancel","updateComplete","animations","createAnimations","finished","icon","config","fromStyles","getStyleForState","toStyles","animate","duration","fill","opacity","transform","isExpanding","baseStyles","maxWidth","maxHeight","borderRadius","hidden","pointerEvents","boxShadow","backdropFilter","minimized","getResponsiveWidth","style","applyInitialStyles","interval","startWith","take","setupDragPipeline","querySelector","label","initialStyle","Object","assign","webkitBackdropFilter","newState","race","discover","navComponent","addBoatItem","textContent","trim","title","replace","navItem","then","clientX","clientY","offsetX","offsetY","initialRect","targetLeft","targetTop","clampedLeft","min","clampedTop","newX","newY","toSave","localStorage","setItem","JSON","stringify","header","hasDragged","merge","button","stopPropagation","map","type","touches","startX","startY","left","top","switchMap","move$","end$","deltaX","deltaY","sqrt","calculateDragPosition","finalize","updateAnchor","removeProperty","right","bottom","isRight","isBottom","newAnchor","disconnectedCallback","render","surfaceElevation","isMinimized","transformOrigin","containerClasses","fixed","flex","html","classMap","ref","badge","closeAndAddToNav","cache","__decorateClass","property","String","reflect","prototype","Boolean","customElement"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";const m=require("rxjs"),r=require("rxjs/operators");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const l=require("lit/decorators.js");require("./tailwind.mixin-UijsBrYW.cjs");const v=require("./litElement.mixin-BVBdv0GP.cjs"),g=require("lit"),f=require("lit/directives/ref.js"),S=require("lit/directives/cache.js");var R=Object.defineProperty,C=Object.getOwnPropertyDescriptor,u=(t,i,o,n)=>{for(var e,a=n>1?void 0:n?C(i,o):i,s=t.length-1;s>=0;s--)(e=t[s])&&(a=(n?e(i,o,a):e(a))||a);return n&&a&&R(i,o,a),a};exports.SchmancyBoat=class extends v.$LitElement(g.css`
1
+ "use strict";const m=require("rxjs"),r=require("rxjs/operators");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const l=require("lit/decorators.js");require("./tailwind.mixin-Cp4PyXok.cjs");const v=require("./litElement.mixin-CrpeGpZ7.cjs"),g=require("lit"),f=require("lit/directives/ref.js"),S=require("lit/directives/cache.js");var R=Object.defineProperty,C=Object.getOwnPropertyDescriptor,u=(t,i,o,n)=>{for(var e,a=n>1?void 0:n?C(i,o):i,s=t.length-1;s>=0;s--)(e=t[s])&&(a=(n?e(i,o,a):e(a))||a);return n&&a&&R(i,o,a),a};exports.SchmancyBoat=class extends v.$LitElement(g.css`
2
2
  :host {
3
3
  display: contents;
4
4
  position: relative;
@@ -94,4 +94,4 @@
94
94
  `:g.html``)}
95
95
  </div>
96
96
  `}},u([l.property({type:String,reflect:!0})],exports.SchmancyBoat.prototype,"state",1),u([l.property({type:String})],exports.SchmancyBoat.prototype,"id",2),u([l.property({type:Boolean,reflect:!0})],exports.SchmancyBoat.prototype,"lowered",1),u([l.property({type:String})],exports.SchmancyBoat.prototype,"icon",2),u([l.property({type:String})],exports.SchmancyBoat.prototype,"label",2),u([l.property()],exports.SchmancyBoat.prototype,"badge",2),u([l.state()],exports.SchmancyBoat.prototype,"currentState",2),u([l.state()],exports.SchmancyBoat.prototype,"isContentVisible",2),u([l.state()],exports.SchmancyBoat.prototype,"isAnimating",2),u([l.state()],exports.SchmancyBoat.prototype,"isLowered",2),u([l.state()],exports.SchmancyBoat.prototype,"isDragging",2),u([l.state()],exports.SchmancyBoat.prototype,"position",2),u([l.state()],exports.SchmancyBoat.prototype,"anchor",2),exports.SchmancyBoat=u([l.customElement("schmancy-boat")],exports.SchmancyBoat);
97
- //# sourceMappingURL=boat-DkNUc1UO.cjs.map
97
+ //# sourceMappingURL=boat-yNAZ2LLB.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"boat-DkNUc1UO.cjs","sources":["../src/boat/boat.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { fromEvent, interval, merge, race } from 'rxjs'\nimport { filter, finalize, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators'\n\ntype BoatState = 'hidden' | 'minimized' | 'expanded'\n\ninterface Position {\n\tx: number\n\ty: number\n}\n\ninterface SavedPosition {\n\tx: number\n\ty: number\n\tanchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n}\n\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends $LitElement(css`\n\t:host {\n\t\tdisplay: contents;\n\t\tposition: relative;\n\t\tz-index: 1000;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tget state(): BoatState {\n\t\treturn this.currentState\n\t}\n\tset state(value: BoatState) {\n\t\tif (this.isAnimating || value === this.currentState) return\n\t\tthis.animateToState(value)\n\t}\n\n\t@property({ type: String }) id: string = 'default'\n\n\t@property({ type: Boolean, reflect: true })\n\tget lowered(): boolean {\n\t\treturn this.isLowered\n\t}\n\tset lowered(value: boolean) {\n\t\tthis.isLowered = value\n\t\tthis.requestUpdate()\n\t}\n\n\t// New properties for simplified API\n\t@property({ type: String }) icon?: string\n\t@property({ type: String }) label?: string\n\t@property() badge?: string | number\n\n\t// Element references\n\tprivate containerRef: Ref<HTMLDivElement> = createRef()\n\tprivate contentRef: Ref<HTMLElement> = createRef()\n\tprivate iconRef: Ref<HTMLElement> = createRef()\n\tprivate headerRef: Ref<HTMLElement> = createRef()\n\n\t// Current animation reference\n\tprivate currentAnimation?: Animation\n\n\t// Animation configuration\n\tprivate readonly ANIMATION_CONFIG = {\n\t\tdurations: {\n\t\t\texpand: 350,\n\t\t\tminimize: 250,\n\t\t\thide: 200,\n\t\t\tcontent: 300,\n\t\t},\n\t\teasing: {\n\t\t\temphasized: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\tdecelerate: 'cubic-bezier(0.05, 0.7, 0.1, 1.0)',\n\t\t\taccelerate: 'cubic-bezier(0.3, 0.0, 0.8, 0.15)',\n\t\t\tstandard: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\n\t\t},\n\t\tshadows: {\n\t\t\tfab: '0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12)',\n\t\t\tfabLowered:\n\t\t\t\t'0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12)',\n\t\t\texpanded: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n\t\t},\n\t}\n\n\t// Reactive state for template\n\t@state() private currentState: BoatState = 'minimized'\n\t@state() private isContentVisible: boolean = false\n\t@state() private isAnimating: boolean = false\n\t@state() private isLowered: boolean = false\n\t@state() private isDragging: boolean = false\n\t@state() private position: Position = { x: 16, y: 16 }\n\t@state() private anchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' = 'bottom-right'\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\tfromEvent(window, 'resize')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.updateExpandedWidth()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Validate viewport after resize to ensure boat stays visible\n\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\tif (container) {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\t// Only validate if dimensions are ready\n\t\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" repositioned after resize:`, this.position)\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\n\t\t\t// Keyboard shortcut - Escape key\n\t\t\tfromEvent<KeyboardEvent>(window, 'keydown')\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter(e => e.key === 'Escape' && this.currentState !== 'hidden'),\n\t\t\t\t\ttap(e => e.preventDefault()),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.toggleState() // Minimize on Esc if expanded\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.close() // Hide on Esc if minimized\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\n\tprivate async animateToState(targetState: BoatState) {\n\t\tif (this.isAnimating || targetState === this.currentState) return\n\n\t\tconst previousState = this.currentState\n\t\tthis.isAnimating = true\n\n\t\ttry {\n\t\t\tawait this.performTransition(previousState, targetState)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\n\t\t\t// Dispatch event\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('toggle', {\n\t\t\t\t\tdetail: targetState,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} catch (err) {\n\t\t\tconsole.warn('Animation error:', err)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\t\t} finally {\n\t\t\tthis.isAnimating = false\n\t\t}\n\t}\n\n\t// Simplified animation transition\n\tprivate async performTransition(fromState: BoatState, toState: BoatState): Promise<void> {\n\t\tthis.currentAnimation?.cancel()\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Update content visibility before expand and wait for render\n\t\tif (toState === 'expanded') {\n\t\t\tthis.isContentVisible = true\n\t\t\tawait this.updateComplete\n\t\t}\n\n\t\t// Create animations\n\t\tconst animations = this.createAnimations(fromState, toState)\n\n\t\t// Wait for main animation to complete\n\t\tif (animations.container) {\n\t\t\tthis.currentAnimation = animations.container\n\t\t\tawait animations.container.finished\n\n\t\t\t// Wait for content fade-out animation before removing from DOM\n\t\t\tif (animations.content) {\n\t\t\t\tawait animations.content.finished\n\t\t\t}\n\n\t\t\t// Hide content after minimize\n\t\t\tif (toState !== 'expanded') {\n\t\t\t\tthis.isContentVisible = false\n\t\t\t} else {\n\t\t\t\t// CRITICAL: After expanding, validate viewport bounds\n\t\t\t\t// The expanded boat is much larger and might go outside viewport\n\t\t\t\tconst container = this.containerRef.value\n\t\t\t\tif (container) {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped after expand:`, this.position)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Create animations for state transition\n\tprivate createAnimations(fromState: BoatState, toState: BoatState) {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\t\tconst animations: { container?: Animation; content?: Animation; icon?: Animation } = {}\n\n\t\tif (!container) return animations\n\n\t\tconst config = this.ANIMATION_CONFIG\n\t\tconst fromStyles = this.getStyleForState(fromState)\n\t\tconst toStyles = this.getStyleForState(toState)\n\n\t\t// Container animation\n\t\tif (toState === 'expanded') {\n\t\t\t// Expand animation without transform\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: config.durations.expand,\n\t\t\t\teasing: config.easing.decelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t} else {\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: toState === 'hidden' ? config.durations.hide : config.durations.minimize,\n\t\t\t\teasing: config.easing.accelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\t// Content animation (only for expand/minimize transitions)\n\t\tif (content && fromState === 'expanded' && toState === 'minimized') {\n\t\t\t// Fade out content before minimizing - MUST await this before removing from DOM\n\t\t\tanimations.content = content.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(-8px)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 150,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t} else if (content && toState === 'expanded') {\n\t\t\t// Fade in content when expanding\n\t\t\tcontent.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(8px)' },\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: config.durations.content,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\t// Icon rotation animation\n\t\tif (icon) {\n\t\t\tconst isExpanding = toState === 'expanded'\n\t\t\tconst isCollapsing = fromState === 'expanded' && toState === 'minimized'\n\n\t\t\tif (isExpanding || isCollapsing) {\n\t\t\t\ticon.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(0deg)' : 'rotate(180deg)' },\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(180deg)' : 'rotate(0deg)' },\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: config.easing.emphasized,\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn animations\n\t}\n\n\t// Get styles for a specific state\n\tprivate getStyleForState(state: BoatState): Keyframe {\n\t\tconst { shadows } = this.ANIMATION_CONFIG\n\t\tconst baseStyles = {\n\t\t\tmaxWidth: 'fit',\n\t\t\tmaxHeight: 'auto',\n\t\t\tborderRadius: '16px',\n\t\t}\n\n\t\tconst stateStyles: Record<BoatState, Keyframe> = {\n\t\t\thidden: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '0',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tboxShadow: 'none',\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\tminimized: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\tboxShadow: this.isLowered ? shadows.fabLowered : shadows.fab,\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\texpanded: {\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\twidth: this.getResponsiveWidth(),\n\t\t\t\tmaxWidth: '100%',\n\t\t\t\tmaxHeight: '80vh',\n\t\t\t\tboxShadow: shadows.expanded,\n\t\t\t\tborderRadius: '8px 8px 0 0',\n\t\t\t\tbackdropFilter: 'blur(12px)',\n\t\t\t},\n\t\t}\n\n\t\treturn stateStyles[state] as Keyframe\n\t}\n\n\t// Calculate responsive width based on viewport\n\tprivate getResponsiveWidth(): string {\n\t\tif (typeof window === 'undefined') return '40vw'\n\n\t\tconst vw = window.innerWidth\n\t\tif (vw < 768) return 'calc(100vw - 32px)'\n\t\tif (vw < 1024) return '70vw'\n\t\tif (vw < 1280) return '60vw'\n\t\treturn '40vw'\n\t}\n\n\t// Update expanded width on window resize\n\tprivate updateExpandedWidth() {\n\t\tconst container = this.containerRef.value\n\t\tif (container && this.currentState === 'expanded') {\n\t\t\tcontainer.style.width = this.getResponsiveWidth()\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.applyInitialStyles()\n\t\tthis.updateContainerPosition()\n\n\t\t// Wait for container to have actual dimensions before validation\n\t\t// Uses pattern from animated-text.ts - poll until dimensions are ready\n\t\tconst container = this.containerRef.value\n\t\tif (container) {\n\t\t\tinterval(10)\n\t\t\t\t.pipe(\n\t\t\t\t\tstartWith(true),\n\t\t\t\t\tfilter(() => {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t\t}),\n\t\t\t\t\ttake(1),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\t// Validate and snap to viewport if needed\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t// Calculate actual position based on anchor\n\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t// Check if boat is outside viewport bounds\n\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t// Snap to viewport edges if outside (16px padding)\n\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update position if boat was outside viewport\n\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t// Convert back to anchor-relative coordinates\n\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t// Ensure position is never negative\n\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped to viewport edge:`, this.position, this.anchor)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\tthis.setupDragPipeline()\n\n\t\t// Check for deprecated header slot usage\n\t\tconst hasHeaderSlot = this.querySelector('[slot=\"header\"]')\n\t\tif (hasHeaderSlot && !this.icon && !this.label) {\n\t\t\tconsole.warn(\n\t\t\t\t'[schmancy-boat] Using slot=\"header\" is deprecated. ' +\n\t\t\t\t\t'Please use the icon, label, and badge properties instead. ' +\n\t\t\t\t\t'Example: <schmancy-boat icon=\"info\" label=\"Title\" badge=\"5\">',\n\t\t\t)\n\t\t}\n\t}\n\n\t// Apply initial styles to elements\n\tprivate applyInitialStyles() {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\n\t\tif (container) {\n\t\t\tconst initialStyle = this.getStyleForState(this.currentState)\n\t\t\tObject.assign(container.style, initialStyle)\n\n\t\t\t// Safari compatibility for backdrop filter\n\t\t\tif ('webkitBackdropFilter' in container.style) {\n\t\t\t\t;(container.style as any).webkitBackdropFilter = initialStyle.backdropFilter\n\t\t\t}\n\t\t}\n\n\t\t// Set initial content opacity\n\t\tif (content) {\n\t\t\tcontent.style.opacity = this.isContentVisible ? '1' : '0'\n\t\t}\n\n\t\t// Set initial icon rotation\n\t\tif (icon && this.currentState === 'expanded') {\n\t\t\ticon.style.transform = 'rotate(180deg)'\n\t\t}\n\t}\n\n\t// Public method to toggle between minimized and expanded\n\ttoggleState() {\n\t\tconst newState = this.currentState === 'minimized' ? 'expanded' : 'minimized'\n\t\tthis.animateToState(newState)\n\t}\n\n\t// Public method to close (hide) the boat\n\tclose() {\n\t\tthis.animateToState('hidden')\n\t}\n\n\tprivate closeAndAddToNav() {\n\t\trace(\n\t\t\tthis.discover<any>('schmancy-navigation-rail'),\n\t\t\tthis.discover<any>('schmancy-navigation-bar'),\n\t\t\tthis.discover<any>('schmancy-nav-drawer'),\n\t\t\tthis.discover<any>('app-navigation-rail'),\n\t\t\tthis.discover<any>('app-navigation-bar'),\n\t\t\tthis.discover<any>('app-nav-drawer'),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\ttake(1),\n\t\t\t\ttap(navComponent => {\n\t\t\t\t\tif (navComponent && typeof navComponent.addBoatItem === 'function') {\n\t\t\t\t\t\t// Use properties first, fall back to slot parsing\n\t\t\t\t\t\tconst icon =\n\t\t\t\t\t\t\tthis.icon ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tconst iconElement = headerSlot?.querySelector('schmancy-icon')\n\t\t\t\t\t\t\t\treturn iconElement?.textContent?.trim() || 'widgets'\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\tthis.label ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tlet title = headerSlot?.textContent?.trim() || 'Boat'\n\t\t\t\t\t\t\t\tif (icon && title.includes(icon)) {\n\t\t\t\t\t\t\t\t\ttitle = title.replace(icon, '').trim()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn title || this.id\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\t// Add the boat to navigation\n\t\t\t\t\t\tconst navItem = navComponent.addBoatItem({\n\t\t\t\t\t\t\tid: `boat-${this.id}`,\n\t\t\t\t\t\t\ttitle: label,\n\t\t\t\t\t\t\ticon: icon,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (navItem) {\n\t\t\t\t\t\t\t// Simple fade out then hide\n\t\t\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\t\t\tif (container) {\n\t\t\t\t\t\t\t\tcontainer\n\t\t\t\t\t\t\t\t\t.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 150, easing: 'ease-out', fill: 'forwards' })\n\t\t\t\t\t\t\t\t\t.finished.then(() => {\n\t\t\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set up click listener to reopen - using RxJS pattern\n\t\t\t\t\t\t\tfromEvent(navItem, 'click')\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\ttap(() => (this.state = 'expanded')),\n\t\t\t\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.subscribe()\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No nav component found, just hide\n\t\t\t\t\t\tthis.close()\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate calculateDragPosition(\n\t\tclientX: number,\n\t\tclientY: number,\n\t\toffsetX: number,\n\t\toffsetY: number,\n\t\tinitialRect: DOMRect,\n\t): Position {\n\t\tconst targetLeft = clientX - offsetX\n\t\tconst targetTop = clientY - offsetY\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\t\tconst clampedLeft = Math.max(0, Math.min(targetLeft, vw - initialRect.width))\n\t\tconst clampedTop = Math.max(0, Math.min(targetTop, vh - initialRect.height))\n\n\t\tconst newX = this.anchor.includes('right') ? vw - (clampedLeft + initialRect.width) : clampedLeft\n\n\t\tconst newY = this.anchor.includes('bottom') ? vh - (clampedTop + initialRect.height) : clampedTop\n\n\t\treturn { x: Math.max(0, newX), y: Math.max(0, newY) }\n\t}\n\n\tprivate savePosition() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst toSave: SavedPosition = {\n\t\t\tx: this.position.x,\n\t\t\ty: this.position.y,\n\t\t\tanchor: this.anchor,\n\t\t}\n\t\tconst key = `schmancy-boat-${this.id}`\n\t\tlocalStorage.setItem(key, JSON.stringify(toSave))\n\t\tconsole.log('💾 Saved position:', key, toSave)\n\t}\n\n\tprivate setupDragPipeline() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst header = this.headerRef.value\n\t\tconst container = this.containerRef.value\n\t\tif (!header || !container) return\n\n\t\tlet hasDragged = false\n\t\tconst DRAG_THRESHOLD = 5\n\n\t\t// Merge mouse and touch start events\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(header, 'mousedown').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}),\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.clientX,\n\t\t\t\t\tclientY: e.clientY,\n\t\t\t\t\ttype: 'mouse' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t\tfromEvent<TouchEvent>(header, 'touchstart').pipe(\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.touches[0].clientX,\n\t\t\t\t\tclientY: e.touches[0].clientY,\n\t\t\t\t\ttype: 'touch' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tmap(({ clientX, clientY, type }) => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\thasDragged = false\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstartX: clientX,\n\t\t\t\t\t\tstartY: clientY,\n\t\t\t\t\t\toffsetX: clientX - rect.left,\n\t\t\t\t\t\toffsetY: clientY - rect.top,\n\t\t\t\t\t\tinitialRect: rect,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(({ startX, startY, offsetX, offsetY, initialRect, type }) => {\n\t\t\t\t\tconst move$ =\n\t\t\t\t\t\ttype === 'mouse'\n\t\t\t\t\t\t\t? fromEvent<MouseEvent>(window, 'mousemove').pipe(map(e => ({ clientX: e.clientX, clientY: e.clientY })))\n\t\t\t\t\t\t\t: fromEvent<TouchEvent>(window, 'touchmove').pipe(\n\t\t\t\t\t\t\t\t\tmap(e => ({ clientX: e.touches[0].clientX, clientY: e.touches[0].clientY })),\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\tconst end$ = type === 'mouse' ? fromEvent(window, 'mouseup') : fromEvent(window, 'touchend')\n\n\t\t\t\t\treturn move$.pipe(\n\t\t\t\t\t\tmap(({ clientX, clientY }) => {\n\t\t\t\t\t\t\tconst deltaX = clientX - startX\n\t\t\t\t\t\t\tconst deltaY = clientY - startY\n\t\t\t\t\t\t\tconst distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n\n\t\t\t\t\t\t\tif (distance > DRAG_THRESHOLD && !hasDragged) {\n\t\t\t\t\t\t\t\thasDragged = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!hasDragged) return null\n\n\t\t\t\t\t\t\treturn this.calculateDragPosition(clientX, clientY, offsetX, offsetY, initialRect)\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfilter(position => position !== null),\n\t\t\t\t\t\ttap(position => {\n\t\t\t\t\t\t\tif (position) {\n\t\t\t\t\t\t\t\tthis.position = position\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttakeUntil(end$),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tif (hasDragged) {\n\t\t\t\t\t\tthis.updateAnchor()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t}\n\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\thasDragged = false\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// Update container position based on anchor and position values\n\tprivate updateContainerPosition() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Reset all position styles\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\n\t\t// Apply new position based on anchor\n\t\tif (this.anchor.includes('right')) {\n\t\t\tcontainer.style.right = `${this.position.x}px`\n\t\t} else {\n\t\t\tcontainer.style.left = `${this.position.x}px`\n\t\t}\n\n\t\tif (this.anchor.includes('bottom')) {\n\t\t\tcontainer.style.bottom = `${this.position.y}px`\n\t\t} else {\n\t\t\tcontainer.style.top = `${this.position.y}px`\n\t\t}\n\t}\n\n\t// Update anchor based on current position\n\tprivate updateAnchor() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\n\t\tconst isRight = rect.left > vw / 2\n\t\tconst isBottom = rect.top > vh / 2\n\n\t\tconst newAnchor = `${isBottom ? 'bottom' : 'top'}-${isRight ? 'right' : 'left'}` as typeof this.anchor\n\n\t\tif (newAnchor !== this.anchor) {\n\t\t\t// Calculate new position values for the new anchor\n\t\t\tif (isRight) {\n\t\t\t\tthis.position.x = vw - rect.right\n\t\t\t} else {\n\t\t\t\tthis.position.x = rect.left\n\t\t\t}\n\n\t\t\tif (isBottom) {\n\t\t\t\tthis.position.y = vh - rect.bottom\n\t\t\t} else {\n\t\t\t\tthis.position.y = rect.top\n\t\t\t}\n\n\t\t\tthis.anchor = newAnchor\n\t\t}\n\t}\n\n\t// Cleanup on component disconnect\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.currentAnimation?.cancel()\n\t}\n\n\tprotected render(): unknown {\n\t\tconst surfaceElevation = this.currentState === 'minimized' ? (this.isLowered ? '1' : '3') : '4'\n\t\tconst isMinimized = this.currentState === 'minimized'\n\n\t\t// Set transform origin based on anchor for proper expansion\n\t\tconst transformOrigin = this.anchor.includes('bottom')\n\t\t\t? this.anchor.includes('right')\n\t\t\t\t? 'bottom right'\n\t\t\t\t: 'bottom left'\n\t\t\t: this.anchor.includes('right')\n\t\t\t\t? 'top right'\n\t\t\t\t: 'top left'\n\n\t\tconst containerClasses = {\n\t\t\tfixed: true,\n\t\t\t'overflow-y-auto': true,\n\t\t\tflex: true,\n\t\t\t'flex-col': true,\n\t\t\t'select-none': true,\n\t\t\t'will-change-transform': true,\n\t\t\t'[contain:layout_style]': true,\n\t\t\t'[transform:translate3d(0,0,0)]': true,\n\t\t\t'[backface-visibility:hidden]': true,\n\t\t\t'transition-shadow': true,\n\t\t\t'opacity-95': this.isDragging,\n\t\t\t'shadow-[0_24px_48px_-8px_rgba(0,0,0,0.2),0_12px_24px_-4px_rgba(0,0,0,0.12)]': this.isDragging,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${this.classMap(containerClasses)}\n\t\t\t\tstyle=\"transform-origin: ${transformOrigin}\"\n\t\t\t\t${ref(this.containerRef)}\n\t\t\t>\n\t\t\t\t<!-- Header section -->\n\t\t\t\t<section class=\"sticky top-0 z-100\">\n\t\t\t\t\t<schmancy-surface\n\t\t\t\t\t\televation=\"${surfaceElevation}\"\n\t\t\t\t\t\trounded=\"${isMinimized ? 'none' : 'top'}\"\n\t\t\t\t\t\ttype=\"containerHigh\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"group sticky top-0 px-3 py-2 flex items-center justify-between gap-3 ${this.isDragging\n\t\t\t\t\t\t\t\t? 'cursor-grabbing'\n\t\t\t\t\t\t\t\t: 'cursor-move'}\"\n\t\t\t\t\t\t\t${ref(this.headerRef)}\n\t\t\t\t\t\t\ttitle=\"Drag to move, double-click to toggle\"\n\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<!-- Drag handle indicator -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex items-center text-surface-onVariant opacity-40 transition-opacity duration-200 group-hover:opacity-100\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon style=\"font-size: 20px\">drag_indicator</schmancy-icon>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Header content - use properties if provided, else fallback to slot -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex-1 min-w-fit items-center flex justify-start ${isMinimized ? 'cursor-pointer' : ''}\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\t\tif (isMinimized) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\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\ttitle=\"${isMinimized ? 'Click to expand' : ''}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t${this.icon || this.label\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"flex gap-2 items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t${this.icon ? html`<schmancy-icon>${this.icon}</schmancy-icon>` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-typography type=\"title\" token=\"md\">${this.label}</schmancy-typography>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.badge !== undefined && this.badge !== null && this.badge !== ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-badge>${this.badge}</schmancy-badge>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`<slot name=\"header\"></slot>`}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Control buttons -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-1 shrink-0\">\n\t\t\t\t\t\t\t\t${isMinimized\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Expand button (when minimized) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Expand\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tfullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Minimize button (when expanded) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"filled tonal\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'minimized'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Minimize\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tclose_fullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`}\n\n\t\t\t\t\t\t\t\t<!-- Close button -->\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\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.closeAndAddToNav()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Close and add to navigation\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tremove\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\n\t\t\t\t<!-- Content section -->\n\t\t\t\t${cache(\n\t\t\t\t\tthis.isContentVisible\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<schmancy-surface type=\"containerHigh\" class=\"flex-1\" ${ref(this.contentRef)}>\n\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t\t `\n\t\t\t\t\t\t: html``,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-boat': SchmancyBoat\n\t}\n}\n"],"names":["SchmancyBoat","$LitElement","css","constructor","super","arguments","this","id","containerRef","createRef","contentRef","iconRef","headerRef","ANIMATION_CONFIG","durations","expand","minimize","hide","content","easing","emphasized","decelerate","accelerate","standard","shadows","fab","fabLowered","expanded","currentState","isContentVisible","isAnimating","isLowered","isDragging","position","x","y","anchor","state","value","animateToState","lowered","requestUpdate","connectedCallback","window","fromEvent","pipe","takeUntil","disconnecting","subscribe","updateExpandedWidth","container","rect","getBoundingClientRect","width","height","vw","innerWidth","vh","innerHeight","actualLeft","includes","actualTop","needsUpdate","newLeft","newTop","Math","max","updateContainerPosition","savePosition","filter","e","key","tap","preventDefault","toggleState","close","targetState","previousState","performTransition","dispatchEvent","CustomEvent","detail","bubbles","composed","err","fromState","toState","currentAnimation","cancel","updateComplete","animations","createAnimations","finished","icon","config","fromStyles","getStyleForState","toStyles","animate","duration","fill","opacity","transform","isExpanding","baseStyles","maxWidth","maxHeight","borderRadius","hidden","pointerEvents","boxShadow","backdropFilter","minimized","getResponsiveWidth","style","firstUpdated","applyInitialStyles","interval","startWith","take","setupDragPipeline","querySelector","label","initialStyle","Object","assign","webkitBackdropFilter","newState","closeAndAddToNav","race","discover","navComponent","addBoatItem","textContent","trim","title","replace","navItem","then","clientX","clientY","offsetX","offsetY","initialRect","targetLeft","targetTop","clampedLeft","min","clampedTop","newX","newY","toSave","localStorage","setItem","JSON","stringify","header","hasDragged","merge","button","stopPropagation","map","type","touches","startX","startY","left","top","switchMap","move$","end$","deltaX","deltaY","sqrt","calculateDragPosition","finalize","updateAnchor","removeProperty","right","bottom","isRight","isBottom","newAnchor","disconnectedCallback","surfaceElevation","isMinimized","transformOrigin","containerClasses","fixed","flex","html","classMap","ref","badge","cache","__decorateClass","property","String","reflect","prototype","Boolean","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"boat-yNAZ2LLB.cjs","sources":["../src/boat/boat.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref, Ref } from 'lit/directives/ref.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { fromEvent, interval, merge, race } from 'rxjs'\nimport { filter, finalize, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators'\n\ntype BoatState = 'hidden' | 'minimized' | 'expanded'\n\ninterface Position {\n\tx: number\n\ty: number\n}\n\ninterface SavedPosition {\n\tx: number\n\ty: number\n\tanchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n}\n\n@customElement('schmancy-boat')\nexport default class SchmancyBoat extends $LitElement(css`\n\t:host {\n\t\tdisplay: contents;\n\t\tposition: relative;\n\t\tz-index: 1000;\n\t}\n`) {\n\t@property({ type: String, reflect: true })\n\tget state(): BoatState {\n\t\treturn this.currentState\n\t}\n\tset state(value: BoatState) {\n\t\tif (this.isAnimating || value === this.currentState) return\n\t\tthis.animateToState(value)\n\t}\n\n\t@property({ type: String }) id: string = 'default'\n\n\t@property({ type: Boolean, reflect: true })\n\tget lowered(): boolean {\n\t\treturn this.isLowered\n\t}\n\tset lowered(value: boolean) {\n\t\tthis.isLowered = value\n\t\tthis.requestUpdate()\n\t}\n\n\t// New properties for simplified API\n\t@property({ type: String }) icon?: string\n\t@property({ type: String }) label?: string\n\t@property() badge?: string | number\n\n\t// Element references\n\tprivate containerRef: Ref<HTMLDivElement> = createRef()\n\tprivate contentRef: Ref<HTMLElement> = createRef()\n\tprivate iconRef: Ref<HTMLElement> = createRef()\n\tprivate headerRef: Ref<HTMLElement> = createRef()\n\n\t// Current animation reference\n\tprivate currentAnimation?: Animation\n\n\t// Animation configuration\n\tprivate readonly ANIMATION_CONFIG = {\n\t\tdurations: {\n\t\t\texpand: 350,\n\t\t\tminimize: 250,\n\t\t\thide: 200,\n\t\t\tcontent: 300,\n\t\t},\n\t\teasing: {\n\t\t\temphasized: 'cubic-bezier(0.2, 0.0, 0, 1.0)',\n\t\t\tdecelerate: 'cubic-bezier(0.05, 0.7, 0.1, 1.0)',\n\t\t\taccelerate: 'cubic-bezier(0.3, 0.0, 0.8, 0.15)',\n\t\t\tstandard: 'cubic-bezier(0.4, 0.0, 0.2, 1)',\n\t\t},\n\t\tshadows: {\n\t\t\tfab: '0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12)',\n\t\t\tfabLowered:\n\t\t\t\t'0px 1px 3px 0px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 2px 1px -1px rgba(0, 0, 0, 0.12)',\n\t\t\texpanded: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',\n\t\t},\n\t}\n\n\t// Reactive state for template\n\t@state() private currentState: BoatState = 'minimized'\n\t@state() private isContentVisible: boolean = false\n\t@state() private isAnimating: boolean = false\n\t@state() private isLowered: boolean = false\n\t@state() private isDragging: boolean = false\n\t@state() private position: Position = { x: 16, y: 16 }\n\t@state() private anchor: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' = 'bottom-right'\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\tfromEvent(window, 'resize')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.updateExpandedWidth()\n\t\t\t\t\t}\n\n\t\t\t\t\t// Validate viewport after resize to ensure boat stays visible\n\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\tif (container) {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\t// Only validate if dimensions are ready\n\t\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" repositioned after resize:`, this.position)\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\n\t\t\t// Keyboard shortcut - Escape key\n\t\t\tfromEvent<KeyboardEvent>(window, 'keydown')\n\t\t\t\t.pipe(\n\t\t\t\t\tfilter(e => e.key === 'Escape' && this.currentState !== 'hidden'),\n\t\t\t\t\ttap(e => e.preventDefault()),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tif (this.currentState === 'expanded') {\n\t\t\t\t\t\tthis.toggleState() // Minimize on Esc if expanded\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.close() // Hide on Esc if minimized\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\n\tprivate async animateToState(targetState: BoatState) {\n\t\tif (this.isAnimating || targetState === this.currentState) return\n\n\t\tconst previousState = this.currentState\n\t\tthis.isAnimating = true\n\n\t\ttry {\n\t\t\tawait this.performTransition(previousState, targetState)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\n\t\t\t// Dispatch event\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('toggle', {\n\t\t\t\t\tdetail: targetState,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} catch (err) {\n\t\t\tconsole.warn('Animation error:', err)\n\t\t\tthis.currentState = targetState\n\t\t\tthis.isContentVisible = targetState === 'expanded'\n\t\t} finally {\n\t\t\tthis.isAnimating = false\n\t\t}\n\t}\n\n\t// Simplified animation transition\n\tprivate async performTransition(fromState: BoatState, toState: BoatState): Promise<void> {\n\t\tthis.currentAnimation?.cancel()\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Update content visibility before expand and wait for render\n\t\tif (toState === 'expanded') {\n\t\t\tthis.isContentVisible = true\n\t\t\tawait this.updateComplete\n\t\t}\n\n\t\t// Create animations\n\t\tconst animations = this.createAnimations(fromState, toState)\n\n\t\t// Wait for main animation to complete\n\t\tif (animations.container) {\n\t\t\tthis.currentAnimation = animations.container\n\t\t\tawait animations.container.finished\n\n\t\t\t// Wait for content fade-out animation before removing from DOM\n\t\t\tif (animations.content) {\n\t\t\t\tawait animations.content.finished\n\t\t\t}\n\n\t\t\t// Hide content after minimize\n\t\t\tif (toState !== 'expanded') {\n\t\t\t\tthis.isContentVisible = false\n\t\t\t} else {\n\t\t\t\t// CRITICAL: After expanding, validate viewport bounds\n\t\t\t\t// The expanded boat is much larger and might go outside viewport\n\t\t\t\tconst container = this.containerRef.value\n\t\t\t\tif (container) {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tif (rect.width > 0 && rect.height > 0) {\n\t\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped after expand:`, this.position)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Create animations for state transition\n\tprivate createAnimations(fromState: BoatState, toState: BoatState) {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\t\tconst animations: { container?: Animation; content?: Animation; icon?: Animation } = {}\n\n\t\tif (!container) return animations\n\n\t\tconst config = this.ANIMATION_CONFIG\n\t\tconst fromStyles = this.getStyleForState(fromState)\n\t\tconst toStyles = this.getStyleForState(toState)\n\n\t\t// Container animation\n\t\tif (toState === 'expanded') {\n\t\t\t// Expand animation without transform\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: config.durations.expand,\n\t\t\t\teasing: config.easing.decelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t} else {\n\t\t\tanimations.container = container.animate([fromStyles, toStyles], {\n\t\t\t\tduration: toState === 'hidden' ? config.durations.hide : config.durations.minimize,\n\t\t\t\teasing: config.easing.accelerate,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\t// Content animation (only for expand/minimize transitions)\n\t\tif (content && fromState === 'expanded' && toState === 'minimized') {\n\t\t\t// Fade out content before minimizing - MUST await this before removing from DOM\n\t\t\tanimations.content = content.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(-8px)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 150,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t} else if (content && toState === 'expanded') {\n\t\t\t// Fade in content when expanding\n\t\t\tcontent.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 0, transform: 'translateY(8px)' },\n\t\t\t\t\t{ opacity: 1, transform: 'translateY(0)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: config.durations.content,\n\t\t\t\t\teasing: config.easing.standard,\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\t// Icon rotation animation\n\t\tif (icon) {\n\t\t\tconst isExpanding = toState === 'expanded'\n\t\t\tconst isCollapsing = fromState === 'expanded' && toState === 'minimized'\n\n\t\t\tif (isExpanding || isCollapsing) {\n\t\t\t\ticon.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(0deg)' : 'rotate(180deg)' },\n\t\t\t\t\t\t{ transform: isExpanding ? 'rotate(180deg)' : 'rotate(0deg)' },\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: config.easing.emphasized,\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn animations\n\t}\n\n\t// Get styles for a specific state\n\tprivate getStyleForState(state: BoatState): Keyframe {\n\t\tconst { shadows } = this.ANIMATION_CONFIG\n\t\tconst baseStyles = {\n\t\t\tmaxWidth: 'fit',\n\t\t\tmaxHeight: 'auto',\n\t\t\tborderRadius: '16px',\n\t\t}\n\n\t\tconst stateStyles: Record<BoatState, Keyframe> = {\n\t\t\thidden: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '0',\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tboxShadow: 'none',\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\tminimized: {\n\t\t\t\t...baseStyles,\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\tboxShadow: this.isLowered ? shadows.fabLowered : shadows.fab,\n\t\t\t\tbackdropFilter: 'none',\n\t\t\t},\n\t\t\texpanded: {\n\t\t\t\topacity: '1',\n\t\t\t\tpointerEvents: 'auto',\n\t\t\t\twidth: this.getResponsiveWidth(),\n\t\t\t\tmaxWidth: '100%',\n\t\t\t\tmaxHeight: '80vh',\n\t\t\t\tboxShadow: shadows.expanded,\n\t\t\t\tborderRadius: '8px 8px 0 0',\n\t\t\t\tbackdropFilter: 'blur(12px)',\n\t\t\t},\n\t\t}\n\n\t\treturn stateStyles[state] as Keyframe\n\t}\n\n\t// Calculate responsive width based on viewport\n\tprivate getResponsiveWidth(): string {\n\t\tif (typeof window === 'undefined') return '40vw'\n\n\t\tconst vw = window.innerWidth\n\t\tif (vw < 768) return 'calc(100vw - 32px)'\n\t\tif (vw < 1024) return '70vw'\n\t\tif (vw < 1280) return '60vw'\n\t\treturn '40vw'\n\t}\n\n\t// Update expanded width on window resize\n\tprivate updateExpandedWidth() {\n\t\tconst container = this.containerRef.value\n\t\tif (container && this.currentState === 'expanded') {\n\t\t\tcontainer.style.width = this.getResponsiveWidth()\n\t\t}\n\t}\n\n\tfirstUpdated() {\n\t\tthis.applyInitialStyles()\n\t\tthis.updateContainerPosition()\n\n\t\t// Wait for container to have actual dimensions before validation\n\t\t// Uses pattern from animated-text.ts - poll until dimensions are ready\n\t\tconst container = this.containerRef.value\n\t\tif (container) {\n\t\t\tinterval(10)\n\t\t\t\t.pipe(\n\t\t\t\t\tstartWith(true),\n\t\t\t\t\tfilter(() => {\n\t\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t\t}),\n\t\t\t\t\ttake(1),\n\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t)\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\t// Validate and snap to viewport if needed\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\tconst vw = window.innerWidth\n\t\t\t\t\tconst vh = window.innerHeight\n\n\t\t\t\t\t// Calculate actual position based on anchor\n\t\t\t\t\tconst actualLeft = this.anchor.includes('right') ? vw - this.position.x - rect.width : this.position.x\n\n\t\t\t\t\tconst actualTop = this.anchor.includes('bottom') ? vh - this.position.y - rect.height : this.position.y\n\n\t\t\t\t\t// Check if boat is outside viewport bounds\n\t\t\t\t\tlet needsUpdate = false\n\t\t\t\t\tlet newLeft = actualLeft\n\t\t\t\t\tlet newTop = actualTop\n\n\t\t\t\t\t// Snap to viewport edges if outside (16px padding)\n\t\t\t\t\tif (actualLeft < 0) {\n\t\t\t\t\t\tnewLeft = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualLeft + rect.width > vw) {\n\t\t\t\t\t\tnewLeft = vw - rect.width - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop < 0) {\n\t\t\t\t\t\tnewTop = 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\t\t\t\t\tif (actualTop + rect.height > vh) {\n\t\t\t\t\t\tnewTop = vh - rect.height - 16\n\t\t\t\t\t\tneedsUpdate = true\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update position if boat was outside viewport\n\t\t\t\t\tif (needsUpdate) {\n\t\t\t\t\t\t// Convert back to anchor-relative coordinates\n\t\t\t\t\t\tthis.position.x = this.anchor.includes('right') ? vw - newLeft - rect.width : newLeft\n\n\t\t\t\t\t\tthis.position.y = this.anchor.includes('bottom') ? vh - newTop - rect.height : newTop\n\n\t\t\t\t\t\t// Ensure position is never negative\n\t\t\t\t\t\tthis.position.x = Math.max(0, this.position.x)\n\t\t\t\t\t\tthis.position.y = Math.max(0, this.position.y)\n\n\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t\tconsole.log(`✨ Boat \"${this.id}\" snapped to viewport edge:`, this.position, this.anchor)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\tthis.setupDragPipeline()\n\n\t\t// Check for deprecated header slot usage\n\t\tconst hasHeaderSlot = this.querySelector('[slot=\"header\"]')\n\t\tif (hasHeaderSlot && !this.icon && !this.label) {\n\t\t\tconsole.warn(\n\t\t\t\t'[schmancy-boat] Using slot=\"header\" is deprecated. ' +\n\t\t\t\t\t'Please use the icon, label, and badge properties instead. ' +\n\t\t\t\t\t'Example: <schmancy-boat icon=\"info\" label=\"Title\" badge=\"5\">',\n\t\t\t)\n\t\t}\n\t}\n\n\t// Apply initial styles to elements\n\tprivate applyInitialStyles() {\n\t\tconst container = this.containerRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst icon = this.iconRef.value\n\n\t\tif (container) {\n\t\t\tconst initialStyle = this.getStyleForState(this.currentState)\n\t\t\tObject.assign(container.style, initialStyle)\n\n\t\t\t// Safari compatibility for backdrop filter\n\t\t\tif ('webkitBackdropFilter' in container.style) {\n\t\t\t\t;(container.style as any).webkitBackdropFilter = initialStyle.backdropFilter\n\t\t\t}\n\t\t}\n\n\t\t// Set initial content opacity\n\t\tif (content) {\n\t\t\tcontent.style.opacity = this.isContentVisible ? '1' : '0'\n\t\t}\n\n\t\t// Set initial icon rotation\n\t\tif (icon && this.currentState === 'expanded') {\n\t\t\ticon.style.transform = 'rotate(180deg)'\n\t\t}\n\t}\n\n\t// Public method to toggle between minimized and expanded\n\ttoggleState() {\n\t\tconst newState = this.currentState === 'minimized' ? 'expanded' : 'minimized'\n\t\tthis.animateToState(newState)\n\t}\n\n\t// Public method to close (hide) the boat\n\tclose() {\n\t\tthis.animateToState('hidden')\n\t}\n\n\tprivate closeAndAddToNav() {\n\t\trace(\n\t\t\tthis.discover<any>('schmancy-navigation-rail'),\n\t\t\tthis.discover<any>('schmancy-navigation-bar'),\n\t\t\tthis.discover<any>('schmancy-nav-drawer'),\n\t\t\tthis.discover<any>('app-navigation-rail'),\n\t\t\tthis.discover<any>('app-navigation-bar'),\n\t\t\tthis.discover<any>('app-nav-drawer'),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\ttake(1),\n\t\t\t\ttap(navComponent => {\n\t\t\t\t\tif (navComponent && typeof navComponent.addBoatItem === 'function') {\n\t\t\t\t\t\t// Use properties first, fall back to slot parsing\n\t\t\t\t\t\tconst icon =\n\t\t\t\t\t\t\tthis.icon ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tconst iconElement = headerSlot?.querySelector('schmancy-icon')\n\t\t\t\t\t\t\t\treturn iconElement?.textContent?.trim() || 'widgets'\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\tconst label =\n\t\t\t\t\t\t\tthis.label ||\n\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\tconst headerSlot = this.querySelector('[slot=\"header\"]')\n\t\t\t\t\t\t\t\tlet title = headerSlot?.textContent?.trim() || 'Boat'\n\t\t\t\t\t\t\t\tif (icon && title.includes(icon)) {\n\t\t\t\t\t\t\t\t\ttitle = title.replace(icon, '').trim()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn title || this.id\n\t\t\t\t\t\t\t})()\n\n\t\t\t\t\t\t// Add the boat to navigation\n\t\t\t\t\t\tconst navItem = navComponent.addBoatItem({\n\t\t\t\t\t\t\tid: `boat-${this.id}`,\n\t\t\t\t\t\t\ttitle: label,\n\t\t\t\t\t\t\ticon: icon,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tif (navItem) {\n\t\t\t\t\t\t\t// Simple fade out then hide\n\t\t\t\t\t\t\tconst container = this.containerRef.value\n\t\t\t\t\t\t\tif (container) {\n\t\t\t\t\t\t\t\tcontainer\n\t\t\t\t\t\t\t\t\t.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 150, easing: 'ease-out', fill: 'forwards' })\n\t\t\t\t\t\t\t\t\t.finished.then(() => {\n\t\t\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.currentState = 'hidden'\n\t\t\t\t\t\t\t\tthis.isContentVisible = false\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Set up click listener to reopen - using RxJS pattern\n\t\t\t\t\t\t\tfromEvent(navItem, 'click')\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\ttap(() => (this.state = 'expanded')),\n\t\t\t\t\t\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.subscribe()\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No nav component found, just hide\n\t\t\t\t\t\tthis.close()\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate calculateDragPosition(\n\t\tclientX: number,\n\t\tclientY: number,\n\t\toffsetX: number,\n\t\toffsetY: number,\n\t\tinitialRect: DOMRect,\n\t): Position {\n\t\tconst targetLeft = clientX - offsetX\n\t\tconst targetTop = clientY - offsetY\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\t\tconst clampedLeft = Math.max(0, Math.min(targetLeft, vw - initialRect.width))\n\t\tconst clampedTop = Math.max(0, Math.min(targetTop, vh - initialRect.height))\n\n\t\tconst newX = this.anchor.includes('right') ? vw - (clampedLeft + initialRect.width) : clampedLeft\n\n\t\tconst newY = this.anchor.includes('bottom') ? vh - (clampedTop + initialRect.height) : clampedTop\n\n\t\treturn { x: Math.max(0, newX), y: Math.max(0, newY) }\n\t}\n\n\tprivate savePosition() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst toSave: SavedPosition = {\n\t\t\tx: this.position.x,\n\t\t\ty: this.position.y,\n\t\t\tanchor: this.anchor,\n\t\t}\n\t\tconst key = `schmancy-boat-${this.id}`\n\t\tlocalStorage.setItem(key, JSON.stringify(toSave))\n\t\tconsole.log('💾 Saved position:', key, toSave)\n\t}\n\n\tprivate setupDragPipeline() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst header = this.headerRef.value\n\t\tconst container = this.containerRef.value\n\t\tif (!header || !container) return\n\n\t\tlet hasDragged = false\n\t\tconst DRAG_THRESHOLD = 5\n\n\t\t// Merge mouse and touch start events\n\t\tmerge(\n\t\t\tfromEvent<MouseEvent>(header, 'mousedown').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}),\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.clientX,\n\t\t\t\t\tclientY: e.clientY,\n\t\t\t\t\ttype: 'mouse' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t\tfromEvent<TouchEvent>(header, 'touchstart').pipe(\n\t\t\t\tmap(e => ({\n\t\t\t\t\tclientX: e.touches[0].clientX,\n\t\t\t\t\tclientY: e.touches[0].clientY,\n\t\t\t\t\ttype: 'touch' as const,\n\t\t\t\t})),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tmap(({ clientX, clientY, type }) => {\n\t\t\t\t\tconst rect = container.getBoundingClientRect()\n\t\t\t\t\thasDragged = false\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstartX: clientX,\n\t\t\t\t\t\tstartY: clientY,\n\t\t\t\t\t\toffsetX: clientX - rect.left,\n\t\t\t\t\t\toffsetY: clientY - rect.top,\n\t\t\t\t\t\tinitialRect: rect,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(({ startX, startY, offsetX, offsetY, initialRect, type }) => {\n\t\t\t\t\tconst move$ =\n\t\t\t\t\t\ttype === 'mouse'\n\t\t\t\t\t\t\t? fromEvent<MouseEvent>(window, 'mousemove').pipe(map(e => ({ clientX: e.clientX, clientY: e.clientY })))\n\t\t\t\t\t\t\t: fromEvent<TouchEvent>(window, 'touchmove').pipe(\n\t\t\t\t\t\t\t\t\tmap(e => ({ clientX: e.touches[0].clientX, clientY: e.touches[0].clientY })),\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\tconst end$ = type === 'mouse' ? fromEvent(window, 'mouseup') : fromEvent(window, 'touchend')\n\n\t\t\t\t\treturn move$.pipe(\n\t\t\t\t\t\tmap(({ clientX, clientY }) => {\n\t\t\t\t\t\t\tconst deltaX = clientX - startX\n\t\t\t\t\t\t\tconst deltaY = clientY - startY\n\t\t\t\t\t\t\tconst distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n\n\t\t\t\t\t\t\tif (distance > DRAG_THRESHOLD && !hasDragged) {\n\t\t\t\t\t\t\t\thasDragged = true\n\t\t\t\t\t\t\t\tthis.isDragging = true\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!hasDragged) return null\n\n\t\t\t\t\t\t\treturn this.calculateDragPosition(clientX, clientY, offsetX, offsetY, initialRect)\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfilter(position => position !== null),\n\t\t\t\t\t\ttap(position => {\n\t\t\t\t\t\t\tif (position) {\n\t\t\t\t\t\t\t\tthis.position = position\n\t\t\t\t\t\t\t\tthis.updateContainerPosition()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttakeUntil(end$),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tif (hasDragged) {\n\t\t\t\t\t\tthis.updateAnchor()\n\t\t\t\t\t\tthis.savePosition()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t}\n\t\t\t\t\tthis.isDragging = false\n\t\t\t\t\thasDragged = false\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// Update container position based on anchor and position values\n\tprivate updateContainerPosition() {\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\t// Reset all position styles\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\n\t\t// Apply new position based on anchor\n\t\tif (this.anchor.includes('right')) {\n\t\t\tcontainer.style.right = `${this.position.x}px`\n\t\t} else {\n\t\t\tcontainer.style.left = `${this.position.x}px`\n\t\t}\n\n\t\tif (this.anchor.includes('bottom')) {\n\t\t\tcontainer.style.bottom = `${this.position.y}px`\n\t\t} else {\n\t\t\tcontainer.style.top = `${this.position.y}px`\n\t\t}\n\t}\n\n\t// Update anchor based on current position\n\tprivate updateAnchor() {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst container = this.containerRef.value\n\t\tif (!container) return\n\n\t\tconst rect = container.getBoundingClientRect()\n\t\tconst vw = window.innerWidth\n\t\tconst vh = window.innerHeight\n\n\t\tconst isRight = rect.left > vw / 2\n\t\tconst isBottom = rect.top > vh / 2\n\n\t\tconst newAnchor = `${isBottom ? 'bottom' : 'top'}-${isRight ? 'right' : 'left'}` as typeof this.anchor\n\n\t\tif (newAnchor !== this.anchor) {\n\t\t\t// Calculate new position values for the new anchor\n\t\t\tif (isRight) {\n\t\t\t\tthis.position.x = vw - rect.right\n\t\t\t} else {\n\t\t\t\tthis.position.x = rect.left\n\t\t\t}\n\n\t\t\tif (isBottom) {\n\t\t\t\tthis.position.y = vh - rect.bottom\n\t\t\t} else {\n\t\t\t\tthis.position.y = rect.top\n\t\t\t}\n\n\t\t\tthis.anchor = newAnchor\n\t\t}\n\t}\n\n\t// Cleanup on component disconnect\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.currentAnimation?.cancel()\n\t}\n\n\tprotected render(): unknown {\n\t\tconst surfaceElevation = this.currentState === 'minimized' ? (this.isLowered ? '1' : '3') : '4'\n\t\tconst isMinimized = this.currentState === 'minimized'\n\n\t\t// Set transform origin based on anchor for proper expansion\n\t\tconst transformOrigin = this.anchor.includes('bottom')\n\t\t\t? this.anchor.includes('right')\n\t\t\t\t? 'bottom right'\n\t\t\t\t: 'bottom left'\n\t\t\t: this.anchor.includes('right')\n\t\t\t\t? 'top right'\n\t\t\t\t: 'top left'\n\n\t\tconst containerClasses = {\n\t\t\tfixed: true,\n\t\t\t'overflow-y-auto': true,\n\t\t\tflex: true,\n\t\t\t'flex-col': true,\n\t\t\t'select-none': true,\n\t\t\t'will-change-transform': true,\n\t\t\t'[contain:layout_style]': true,\n\t\t\t'[transform:translate3d(0,0,0)]': true,\n\t\t\t'[backface-visibility:hidden]': true,\n\t\t\t'transition-shadow': true,\n\t\t\t'opacity-95': this.isDragging,\n\t\t\t'shadow-[0_24px_48px_-8px_rgba(0,0,0,0.2),0_12px_24px_-4px_rgba(0,0,0,0.12)]': this.isDragging,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${this.classMap(containerClasses)}\n\t\t\t\tstyle=\"transform-origin: ${transformOrigin}\"\n\t\t\t\t${ref(this.containerRef)}\n\t\t\t>\n\t\t\t\t<!-- Header section -->\n\t\t\t\t<section class=\"sticky top-0 z-100\">\n\t\t\t\t\t<schmancy-surface\n\t\t\t\t\t\televation=\"${surfaceElevation}\"\n\t\t\t\t\t\trounded=\"${isMinimized ? 'none' : 'top'}\"\n\t\t\t\t\t\ttype=\"containerHigh\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"group sticky top-0 px-3 py-2 flex items-center justify-between gap-3 ${this.isDragging\n\t\t\t\t\t\t\t\t? 'cursor-grabbing'\n\t\t\t\t\t\t\t\t: 'cursor-move'}\"\n\t\t\t\t\t\t\t${ref(this.headerRef)}\n\t\t\t\t\t\t\ttitle=\"Drag to move, double-click to toggle\"\n\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\tthis.toggleState()\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<!-- Drag handle indicator -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex items-center text-surface-onVariant opacity-40 transition-opacity duration-200 group-hover:opacity-100\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-icon style=\"font-size: 20px\">drag_indicator</schmancy-icon>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Header content - use properties if provided, else fallback to slot -->\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex-1 min-w-fit items-center flex justify-start ${isMinimized ? 'cursor-pointer' : ''}\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t@dblclick=${(e: Event) => {\n\t\t\t\t\t\t\t\t\tif (isMinimized) {\n\t\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\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\ttitle=\"${isMinimized ? 'Click to expand' : ''}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t${this.icon || this.label\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"flex gap-2 items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t${this.icon ? html`<schmancy-icon>${this.icon}</schmancy-icon>` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-typography type=\"title\" token=\"md\">${this.label}</schmancy-typography>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t\t${this.badge !== undefined && this.badge !== null && this.badge !== ''\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<schmancy-badge>${this.badge}</schmancy-badge>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`<slot name=\"header\"></slot>`}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Control buttons -->\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-1 shrink-0\">\n\t\t\t\t\t\t\t\t${isMinimized\n\t\t\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Expand button (when minimized) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'expanded'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Expand\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tfullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t\t\t\t<!-- Minimize button (when expanded) -->\n\t\t\t\t\t\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"filled tonal\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.state = 'minimized'\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Minimize\"\n\t\t\t\t\t\t\t\t\t\t\t\t${ref(this.iconRef)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tclose_fullscreen\n\t\t\t\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t\t\t\t`}\n\n\t\t\t\t\t\t\t\t<!-- Close button -->\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\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.closeAndAddToNav()\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttitle=\"Close and add to navigation\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tremove\n\t\t\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</section>\n\n\t\t\t\t<!-- Content section -->\n\t\t\t\t${cache(\n\t\t\t\t\tthis.isContentVisible\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<schmancy-surface type=\"containerHigh\" class=\"flex-1\" ${ref(this.contentRef)}>\n\t\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t\t</schmancy-surface>\n\t\t\t\t\t\t `\n\t\t\t\t\t\t: html``,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-boat': SchmancyBoat\n\t}\n}\n"],"names":["SchmancyBoat","$LitElement","css","constructor","super","arguments","this","id","containerRef","createRef","contentRef","iconRef","headerRef","ANIMATION_CONFIG","durations","expand","minimize","hide","content","easing","emphasized","decelerate","accelerate","standard","shadows","fab","fabLowered","expanded","currentState","isContentVisible","isAnimating","isLowered","isDragging","position","x","y","anchor","state","value","animateToState","lowered","requestUpdate","connectedCallback","window","fromEvent","pipe","takeUntil","disconnecting","subscribe","updateExpandedWidth","container","rect","getBoundingClientRect","width","height","vw","innerWidth","vh","innerHeight","actualLeft","includes","actualTop","needsUpdate","newLeft","newTop","Math","max","updateContainerPosition","savePosition","filter","e","key","tap","preventDefault","toggleState","close","targetState","previousState","performTransition","dispatchEvent","CustomEvent","detail","bubbles","composed","err","fromState","toState","currentAnimation","cancel","updateComplete","animations","createAnimations","finished","icon","config","fromStyles","getStyleForState","toStyles","animate","duration","fill","opacity","transform","isExpanding","baseStyles","maxWidth","maxHeight","borderRadius","hidden","pointerEvents","boxShadow","backdropFilter","minimized","getResponsiveWidth","style","firstUpdated","applyInitialStyles","interval","startWith","take","setupDragPipeline","querySelector","label","initialStyle","Object","assign","webkitBackdropFilter","newState","closeAndAddToNav","race","discover","navComponent","addBoatItem","textContent","trim","title","replace","navItem","then","clientX","clientY","offsetX","offsetY","initialRect","targetLeft","targetTop","clampedLeft","min","clampedTop","newX","newY","toSave","localStorage","setItem","JSON","stringify","header","hasDragged","merge","button","stopPropagation","map","type","touches","startX","startY","left","top","switchMap","move$","end$","deltaX","deltaY","sqrt","calculateDragPosition","finalize","updateAnchor","removeProperty","right","bottom","isRight","isBottom","newAnchor","disconnectedCallback","surfaceElevation","isMinimized","transformOrigin","containerClasses","fixed","flex","html","classMap","ref","badge","cache","__decorateClass","property","String","reflect","prototype","Boolean","customElement"],"mappings":"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"}
package/dist/boat.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./boat-DkNUc1UO.cjs");Object.defineProperty(exports,"SchmancyBoat",{enumerable:!0,get:()=>e.SchmancyBoat});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./boat-yNAZ2LLB.cjs");Object.defineProperty(exports,"SchmancyBoat",{enumerable:!0,get:()=>e.SchmancyBoat});
2
2
  //# sourceMappingURL=boat.cjs.map
package/dist/boat.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as c } from "./boat-CowHieO2.js";
1
+ import { S as c } from "./boat-Ckt9v__d.js";
2
2
  export {
3
3
  c as SchmancyBoat
4
4
  };
package/dist/busy.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";require("./spinner-DJgcI5wr.cjs");
1
+ "use strict";require("./spinner-Bfn8KC-9.cjs");
2
2
  //# sourceMappingURL=busy.cjs.map
package/dist/busy.js CHANGED
@@ -1,2 +1,2 @@
1
- import "./spinner-CKm13CKN.js";
1
+ import "./spinner-DiMbWXp9.js";
2
2
  //# sourceMappingURL=busy.js.map
package/dist/button.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./icon-button-BpmGFjaR.cjs");Object.defineProperty(exports,"SchmancyButton",{enumerable:!0,get:()=>e.SchmancyButton}),Object.defineProperty(exports,"SchmnacyIconButton",{enumerable:!0,get:()=>e.SchmnacyIconButton});
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./icon-button-IbSX8C98.cjs");Object.defineProperty(exports,"SchmancyButton",{enumerable:!0,get:()=>e.SchmancyButton}),Object.defineProperty(exports,"SchmnacyIconButton",{enumerable:!0,get:()=>e.SchmnacyIconButton});
2
2
  //# sourceMappingURL=button.cjs.map
package/dist/button.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as n, a as o } from "./icon-button-HSYaQBNF.js";
1
+ import { S as n, a as o } from "./icon-button-CmZBLHWC.js";
2
2
  export {
3
3
  n as SchmancyButton,
4
4
  o as SchmnacyIconButton
package/dist/card.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";require("./media-DibPwAjJ.cjs");
1
+ "use strict";require("./media-CS8HpKnK.cjs");
2
2
  //# sourceMappingURL=card.cjs.map
package/dist/card.js CHANGED
@@ -1,2 +1,2 @@
1
- import "./media-BV_1DfcW.js";
1
+ import "./media-DtWbcRxL.js";
2
2
  //# sourceMappingURL=card.js.map
package/dist/charts.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./pills-MmHyBGQu.cjs");Object.defineProperty(exports,"SchmancyAreaChart",{enumerable:!0,get:()=>e.SchmancyAreaChart}),Object.defineProperty(exports,"SchmancyPills",{enumerable:!0,get:()=>e.SchmancyPills}),exports.catmullRomSpline=e.catmullRomSpline,exports.easeOutCubic=e.easeOutCubic,exports.hexToRgba=e.hexToRgba;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./pills-Blf7IAeq.cjs");Object.defineProperty(exports,"SchmancyAreaChart",{enumerable:!0,get:()=>e.SchmancyAreaChart}),Object.defineProperty(exports,"SchmancyPills",{enumerable:!0,get:()=>e.SchmancyPills}),exports.catmullRomSpline=e.catmullRomSpline,exports.easeOutCubic=e.easeOutCubic,exports.hexToRgba=e.hexToRgba;
2
2
  //# sourceMappingURL=charts.cjs.map