@mhmo91/schmancy 0.9.11 → 0.9.13

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 (395) hide show
  1. package/README.md +34 -0
  2. package/custom-elements.json +42 -0
  3. package/dist/agent/flow-CaPi2G8y.js +386 -0
  4. package/dist/agent/flow-CaPi2G8y.js.map +1 -0
  5. package/dist/agent/rolldown-runtime-DsMetpgY.js +11 -0
  6. package/dist/agent/schmancy.agent.js +36368 -0
  7. package/dist/agent/schmancy.agent.js.map +1 -0
  8. package/dist/agent/schmancy.manifest.json +6879 -0
  9. package/dist/agent/vendor-highlight-CHJZQQB7.js +2178 -0
  10. package/dist/agent/vendor-highlight-CHJZQQB7.js.map +1 -0
  11. package/dist/agent/vendor-jsqr-r7GNh4P3.js +10212 -0
  12. package/dist/agent/vendor-jsqr-r7GNh4P3.js.map +1 -0
  13. package/dist/agent/vendor-material-color-Be96dpGE.js +3309 -0
  14. package/dist/agent/vendor-material-color-Be96dpGE.js.map +1 -0
  15. package/dist/{area-BafkBc1f.cjs → area-CApZWjqs.cjs} +1 -1
  16. package/dist/area-CApZWjqs.cjs.map +1 -0
  17. package/dist/{area-D03HRn1L.js → area-D_p1YBgP.js} +1 -1
  18. package/dist/area-D_p1YBgP.js.map +1 -0
  19. package/dist/area.cjs +1 -1
  20. package/dist/area.js +1 -1
  21. package/dist/audio-C7TzWI8M.js.map +1 -1
  22. package/dist/audio-DUVz7Ars.cjs.map +1 -1
  23. package/dist/{autocomplete-BotVnTfP.js → autocomplete-DAK35swc.js} +2 -2
  24. package/dist/{autocomplete-BotVnTfP.js.map → autocomplete-DAK35swc.js.map} +1 -1
  25. package/dist/{autocomplete-BeLg4A3T.cjs → autocomplete-DlCqS1gW.cjs} +1 -1
  26. package/dist/{autocomplete-BeLg4A3T.cjs.map → autocomplete-DlCqS1gW.cjs.map} +1 -1
  27. package/dist/autocomplete.cjs +1 -1
  28. package/dist/autocomplete.js +1 -1
  29. package/dist/badge.cjs +1 -1
  30. package/dist/badge.js +1 -1
  31. package/dist/{boat-4hSLFsGy.cjs → boat-C57YTPbb.cjs} +1 -1
  32. package/dist/{boat-4hSLFsGy.cjs.map → boat-C57YTPbb.cjs.map} +1 -1
  33. package/dist/{boat-C1wGdoaF.js → boat-Dms45k4o.js} +1 -1
  34. package/dist/{boat-C1wGdoaF.js.map → boat-Dms45k4o.js.map} +1 -1
  35. package/dist/boat.cjs +1 -1
  36. package/dist/boat.js +1 -1
  37. package/dist/breadcrumb.cjs +1 -1
  38. package/dist/breadcrumb.js +1 -1
  39. package/dist/{busy-C0qP0TiL.cjs → busy-BfN1p1n8.cjs} +1 -1
  40. package/dist/{busy-C0qP0TiL.cjs.map → busy-BfN1p1n8.cjs.map} +1 -1
  41. package/dist/{busy-D74-XaFn.js → busy-IKS9obYj.js} +1 -1
  42. package/dist/{busy-D74-XaFn.js.map → busy-IKS9obYj.js.map} +1 -1
  43. package/dist/busy.cjs +1 -1
  44. package/dist/busy.js +1 -1
  45. package/dist/button.cjs +1 -1
  46. package/dist/button.cjs.map +1 -1
  47. package/dist/button.js +3 -3
  48. package/dist/button.js.map +1 -1
  49. package/dist/{card-DiNYPJ9b.js → card-DQNBal9V.js} +1 -1
  50. package/dist/{card-DiNYPJ9b.js.map → card-DQNBal9V.js.map} +1 -1
  51. package/dist/{card-Bht1QcYl.cjs → card-ZObyqkFF.cjs} +1 -1
  52. package/dist/{card-Bht1QcYl.cjs.map → card-ZObyqkFF.cjs.map} +1 -1
  53. package/dist/card.cjs +1 -1
  54. package/dist/card.js +1 -1
  55. package/dist/charts.cjs +1 -1
  56. package/dist/charts.js +1 -1
  57. package/dist/{checkbox-dRBf89qt.js → checkbox-COhTJ1x5.js} +1 -1
  58. package/dist/{checkbox-dRBf89qt.js.map → checkbox-COhTJ1x5.js.map} +1 -1
  59. package/dist/{checkbox-CRzu7URt.cjs → checkbox-CiAtIrqB.cjs} +1 -1
  60. package/dist/{checkbox-CRzu7URt.cjs.map → checkbox-CiAtIrqB.cjs.map} +1 -1
  61. package/dist/checkbox.cjs +1 -1
  62. package/dist/checkbox.js +1 -1
  63. package/dist/{chips-Bma_B3J-.js → chips-B5o3vNQF.js} +3 -3
  64. package/dist/{chips-Bma_B3J-.js.map → chips-B5o3vNQF.js.map} +1 -1
  65. package/dist/{chips-CXknD-vY.cjs → chips-D2xmsC36.cjs} +1 -1
  66. package/dist/{chips-CXknD-vY.cjs.map → chips-D2xmsC36.cjs.map} +1 -1
  67. package/dist/chips.cjs +1 -1
  68. package/dist/chips.js +2 -2
  69. package/dist/{code-highlight-BROOsNA_.cjs → code-highlight-BToHh8T6.cjs} +1 -1
  70. package/dist/{code-highlight-BROOsNA_.cjs.map → code-highlight-BToHh8T6.cjs.map} +1 -1
  71. package/dist/{code-highlight-DjiyaDcX.js → code-highlight-SkMMTkIJ.js} +1 -1
  72. package/dist/{code-highlight-DjiyaDcX.js.map → code-highlight-SkMMTkIJ.js.map} +1 -1
  73. package/dist/code-highlight.cjs +1 -1
  74. package/dist/code-highlight.js +1 -1
  75. package/dist/{components-ubXwQbGs.cjs → components-B-XYvUWn.cjs} +1 -1
  76. package/dist/{components-ubXwQbGs.cjs.map → components-B-XYvUWn.cjs.map} +1 -1
  77. package/dist/{components-DKgu88mm.js → components-Ca7OTgbQ.js} +1 -1
  78. package/dist/{components-DKgu88mm.js.map → components-Ca7OTgbQ.js.map} +1 -1
  79. package/dist/components.cjs +1 -1
  80. package/dist/components.js +1 -1
  81. package/dist/connectivity.cjs +1 -1
  82. package/dist/connectivity.js +1 -1
  83. package/dist/content-drawer.cjs +1 -1
  84. package/dist/content-drawer.js +1 -1
  85. package/dist/context-C6GwmNJJ.cjs +1 -0
  86. package/dist/{context-B81Q3U_1.cjs.map → context-C6GwmNJJ.cjs.map} +1 -1
  87. package/dist/context-oBTPHrbc.js +3 -0
  88. package/dist/{context-Dnj4ofbV.js.map → context-oBTPHrbc.js.map} +1 -1
  89. package/dist/cursor-glow-82y5h3E4.cjs.map +1 -1
  90. package/dist/{date-range-n_xPONd5.cjs → date-range-BTA9nKbw.cjs} +1 -1
  91. package/dist/{date-range-n_xPONd5.cjs.map → date-range-BTA9nKbw.cjs.map} +1 -1
  92. package/dist/{date-range-CwqFuGGK.js → date-range-DUWpF0Qw.js} +2 -2
  93. package/dist/{date-range-CwqFuGGK.js.map → date-range-DUWpF0Qw.js.map} +1 -1
  94. package/dist/date-range.cjs +1 -1
  95. package/dist/date-range.js +1 -1
  96. package/dist/{delay-BFpu_Yz9.cjs → delay-Co89XWry.cjs} +1 -1
  97. package/dist/{delay-BFpu_Yz9.cjs.map → delay-Co89XWry.cjs.map} +1 -1
  98. package/dist/{delay-Bkd3SOTy.js → delay-CtDrlf1Q.js} +3 -3
  99. package/dist/{delay-Bkd3SOTy.js.map → delay-CtDrlf1Q.js.map} +1 -1
  100. package/dist/delay.cjs +1 -1
  101. package/dist/delay.js +1 -1
  102. package/dist/{details-DZq61CD5.js → details-B1Ax7WiP.js} +1 -1
  103. package/dist/{details-DZq61CD5.js.map → details-B1Ax7WiP.js.map} +1 -1
  104. package/dist/{details-Bal2g3J4.cjs → details-CyXyVdb2.cjs} +1 -1
  105. package/dist/{details-Bal2g3J4.cjs.map → details-CyXyVdb2.cjs.map} +1 -1
  106. package/dist/details.cjs +1 -1
  107. package/dist/details.js +1 -1
  108. package/dist/dialog-service-CCFGpU7a.js.map +1 -1
  109. package/dist/dialog-service-DXLGSshF.cjs.map +1 -1
  110. package/dist/dialog.cjs +1 -1
  111. package/dist/dialog.cjs.map +1 -1
  112. package/dist/dialog.js +1 -1
  113. package/dist/directives.cjs.map +1 -1
  114. package/dist/directives.js.map +1 -1
  115. package/dist/{divider-ChK7lCQF.js → divider-DuwCrKQu.js} +1 -1
  116. package/dist/{divider-ChK7lCQF.js.map → divider-DuwCrKQu.js.map} +1 -1
  117. package/dist/{divider-RjZbewe8.cjs → divider-xcvHqVBc.cjs} +1 -1
  118. package/dist/{divider-RjZbewe8.cjs.map → divider-xcvHqVBc.cjs.map} +1 -1
  119. package/dist/divider.cjs +1 -1
  120. package/dist/divider.js +1 -1
  121. package/dist/dropdown.cjs +1 -1
  122. package/dist/dropdown.js +2 -2
  123. package/dist/{expand-DwZKr9hD.cjs → expand-DUgOh1af.cjs} +1 -1
  124. package/dist/{expand-DwZKr9hD.cjs.map → expand-DUgOh1af.cjs.map} +1 -1
  125. package/dist/{expand-CUrWPZu-.js → expand-X0C1W279.js} +2 -2
  126. package/dist/{expand-CUrWPZu-.js.map → expand-X0C1W279.js.map} +1 -1
  127. package/dist/expand.cjs +1 -1
  128. package/dist/expand.js +1 -1
  129. package/dist/{extra-C7xp1GQG.js → extra-BTyq-5Z6.js} +1 -1
  130. package/dist/{extra-C7xp1GQG.js.map → extra-BTyq-5Z6.js.map} +1 -1
  131. package/dist/{extra-BE9p8l3U.cjs → extra-BqfYIC_q.cjs} +1 -1
  132. package/dist/{extra-BE9p8l3U.cjs.map → extra-BqfYIC_q.cjs.map} +1 -1
  133. package/dist/extra.cjs +1 -1
  134. package/dist/extra.js +1 -1
  135. package/dist/{float-kRCgEf_1.js → float-BgGeLER6.js} +1 -1
  136. package/dist/{float-kRCgEf_1.js.map → float-BgGeLER6.js.map} +1 -1
  137. package/dist/{float-DoHSvH7R.cjs → float-yZoLnUg0.cjs} +1 -1
  138. package/dist/{float-DoHSvH7R.cjs.map → float-yZoLnUg0.cjs.map} +1 -1
  139. package/dist/float.cjs +1 -1
  140. package/dist/float.js +1 -1
  141. package/dist/{icons-D93IZn6-.js → icons-BDcb8dNb.js} +2 -2
  142. package/dist/{icons-D93IZn6-.js.map → icons-BDcb8dNb.js.map} +1 -1
  143. package/dist/{icons-Bz84Dr-q.cjs → icons-BLFEJFDG.cjs} +1 -1
  144. package/dist/{icons-Bz84Dr-q.cjs.map → icons-BLFEJFDG.cjs.map} +1 -1
  145. package/dist/icons.cjs +1 -1
  146. package/dist/icons.js +1 -1
  147. package/dist/{iframe-Cmanzy9x.cjs → iframe-CrDpQkhj.cjs} +1 -1
  148. package/dist/{iframe-Cmanzy9x.cjs.map → iframe-CrDpQkhj.cjs.map} +1 -1
  149. package/dist/{iframe-DyOg96rn.js → iframe-qCW0HzwB.js} +1 -1
  150. package/dist/{iframe-DyOg96rn.js.map → iframe-qCW0HzwB.js.map} +1 -1
  151. package/dist/iframe.cjs +1 -1
  152. package/dist/iframe.js +1 -1
  153. package/dist/index.cjs +1 -1
  154. package/dist/index.js +32 -32
  155. package/dist/{input-DIuyi3Gm.cjs → input-C1MIZaKq.cjs} +1 -1
  156. package/dist/{input-DIuyi3Gm.cjs.map → input-C1MIZaKq.cjs.map} +1 -1
  157. package/dist/{input-HzweUBSn.js → input-Dv-HtkM9.js} +1 -1
  158. package/dist/{input-HzweUBSn.js.map → input-Dv-HtkM9.js.map} +1 -1
  159. package/dist/{input-chip-B4uw64rQ.js → input-chip-CyvjhQSw.js} +1 -1
  160. package/dist/{input-chip-B4uw64rQ.js.map → input-chip-CyvjhQSw.js.map} +1 -1
  161. package/dist/{input-chip-DY9IEbQj.cjs → input-chip-DnfthOSY.cjs} +1 -1
  162. package/dist/{input-chip-DY9IEbQj.cjs.map → input-chip-DnfthOSY.cjs.map} +1 -1
  163. package/dist/input.cjs +1 -1
  164. package/dist/input.js +1 -1
  165. package/dist/json.cjs +1 -1
  166. package/dist/json.js +2 -2
  167. package/dist/kbd.cjs +1 -1
  168. package/dist/kbd.js +1 -1
  169. package/dist/{layout-DIuACbuC.cjs → layout-D0cR3hT1.cjs} +1 -1
  170. package/dist/{layout-DIuACbuC.cjs.map → layout-D0cR3hT1.cjs.map} +1 -1
  171. package/dist/layout-PZCF3kwl.cjs.map +1 -1
  172. package/dist/{layout-D7OCZ8rE.js → layout-Y5qo3er8.js} +2 -2
  173. package/dist/{layout-D7OCZ8rE.js.map → layout-Y5qo3er8.js.map} +1 -1
  174. package/dist/layout.cjs +1 -1
  175. package/dist/layout.js +2 -2
  176. package/dist/{lightbox-DL-v1tk9.js → lightbox-C_pqYF6q.js} +2 -2
  177. package/dist/{lightbox-DL-v1tk9.js.map → lightbox-C_pqYF6q.js.map} +1 -1
  178. package/dist/{lightbox-DFbqNGoX.cjs → lightbox-Ce8nMldr.cjs} +1 -1
  179. package/dist/{lightbox-DFbqNGoX.cjs.map → lightbox-Ce8nMldr.cjs.map} +1 -1
  180. package/dist/lightbox.cjs +1 -1
  181. package/dist/lightbox.js +1 -1
  182. package/dist/{list-D99W7WvC.cjs → list-CLc_OQ5k.cjs} +1 -1
  183. package/dist/{list-D99W7WvC.cjs.map → list-CLc_OQ5k.cjs.map} +1 -1
  184. package/dist/{list-DZTLJ-2e.js → list-DcnTGee0.js} +2 -2
  185. package/dist/{list-DZTLJ-2e.js.map → list-DcnTGee0.js.map} +1 -1
  186. package/dist/list.cjs +1 -1
  187. package/dist/list.js +1 -1
  188. package/dist/{litElement.mixin-De5SG5z7.cjs → litElement.mixin-DeT3kAOS.cjs} +1 -1
  189. package/dist/{litElement.mixin-De5SG5z7.cjs.map → litElement.mixin-DeT3kAOS.cjs.map} +1 -1
  190. package/dist/{litElement.mixin-D6ZHgGZv.js → litElement.mixin-Mi8bar6B.js} +1 -1
  191. package/dist/{litElement.mixin-D6ZHgGZv.js.map → litElement.mixin-Mi8bar6B.js.map} +1 -1
  192. package/dist/magnetic-aBBnj_vk.cjs.map +1 -1
  193. package/dist/{mailbox-BBV6hDAa.js → mailbox-BrLZPj2o.js} +4 -4
  194. package/dist/{mailbox-BBV6hDAa.js.map → mailbox-BrLZPj2o.js.map} +1 -1
  195. package/dist/{mailbox-CW7zc0v-.cjs → mailbox-CE5sTDsQ.cjs} +1 -1
  196. package/dist/{mailbox-CW7zc0v-.cjs.map → mailbox-CE5sTDsQ.cjs.map} +1 -1
  197. package/dist/mailbox.cjs +1 -1
  198. package/dist/mailbox.js +1 -1
  199. package/dist/{map-CSQMA89X.cjs → map-CKzhM6uY.cjs} +1 -1
  200. package/dist/{map-CSQMA89X.cjs.map → map-CKzhM6uY.cjs.map} +1 -1
  201. package/dist/{map-PvojF8B3.js → map-SNb-3q5h.js} +1 -1
  202. package/dist/{map-PvojF8B3.js.map → map-SNb-3q5h.js.map} +1 -1
  203. package/dist/map.cjs +1 -1
  204. package/dist/map.js +1 -1
  205. package/dist/{menu-3XXOfmrj.cjs → menu-BnGjBrdD.cjs} +1 -1
  206. package/dist/{menu-3XXOfmrj.cjs.map → menu-BnGjBrdD.cjs.map} +1 -1
  207. package/dist/{menu-B_o1fOPW.js → menu-VErqs9NG.js} +1 -1
  208. package/dist/{menu-B_o1fOPW.js.map → menu-VErqs9NG.js.map} +1 -1
  209. package/dist/menu.cjs +1 -1
  210. package/dist/menu.js +1 -1
  211. package/dist/mixins.cjs +1 -1
  212. package/dist/mixins.js +2 -2
  213. package/dist/nav-drawer.cjs +1 -1
  214. package/dist/nav-drawer.js +1 -1
  215. package/dist/navigation-bar.cjs +1 -1
  216. package/dist/navigation-bar.js +1 -1
  217. package/dist/navigation-rail.cjs +1 -1
  218. package/dist/navigation-rail.js +1 -1
  219. package/dist/{notification-BMtrJG-Y.js → notification-B_Fkxv7d.js} +2 -2
  220. package/dist/notification-B_Fkxv7d.js.map +1 -0
  221. package/dist/{notification-NnsatHAh.cjs → notification-DE5dFf8G.cjs} +1 -1
  222. package/dist/notification-DE5dFf8G.cjs.map +1 -0
  223. package/dist/notification.cjs +1 -1
  224. package/dist/notification.js +1 -1
  225. package/dist/{option-DxIFpYpC.cjs → option-BmbP5ulK.cjs} +1 -1
  226. package/dist/{option-DxIFpYpC.cjs.map → option-BmbP5ulK.cjs.map} +1 -1
  227. package/dist/{option-CNzW-sdU.js → option-DuAlGv27.js} +1 -1
  228. package/dist/{option-CNzW-sdU.js.map → option-DuAlGv27.js.map} +1 -1
  229. package/dist/option.cjs +1 -1
  230. package/dist/option.js +1 -1
  231. package/dist/page.cjs +1 -1
  232. package/dist/page.cjs.map +1 -1
  233. package/dist/page.js +2 -2
  234. package/dist/{progress-DHmYCHmy.js → progress-BnXr7aAs.js} +1 -1
  235. package/dist/{progress-DHmYCHmy.js.map → progress-BnXr7aAs.js.map} +1 -1
  236. package/dist/{progress-Cw6Qn3Kb.cjs → progress-Bt9gUiGP.cjs} +1 -1
  237. package/dist/{progress-Cw6Qn3Kb.cjs.map → progress-Bt9gUiGP.cjs.map} +1 -1
  238. package/dist/progress.cjs +1 -1
  239. package/dist/progress.js +1 -1
  240. package/dist/{provide-Dsoh3FdP.cjs → provide-CnXCF-UP.cjs} +1 -1
  241. package/dist/{provide-Dsoh3FdP.cjs.map → provide-CnXCF-UP.cjs.map} +1 -1
  242. package/dist/{provide-C4L6R1lo.js → provide-Disc6_zz.js} +1 -1
  243. package/dist/{provide-C4L6R1lo.js.map → provide-Disc6_zz.js.map} +1 -1
  244. package/dist/qr-scanner.cjs +1 -1
  245. package/dist/qr-scanner.js +1 -1
  246. package/dist/{radio-group-DneItRXU.js → radio-group-BgZgHMoA.js} +1 -1
  247. package/dist/{radio-group-DneItRXU.js.map → radio-group-BgZgHMoA.js.map} +1 -1
  248. package/dist/{radio-group-xgKQTd6h.cjs → radio-group-DkBFgq_3.cjs} +1 -1
  249. package/dist/{radio-group-xgKQTd6h.cjs.map → radio-group-DkBFgq_3.cjs.map} +1 -1
  250. package/dist/radio-group.cjs +1 -1
  251. package/dist/radio-group.js +1 -1
  252. package/dist/range.cjs +1 -1
  253. package/dist/range.js +1 -1
  254. package/dist/{scroll-D7QJYev7.js → scroll-57rkTHm8.js} +1 -1
  255. package/dist/{scroll-D7QJYev7.js.map → scroll-57rkTHm8.js.map} +1 -1
  256. package/dist/{scroll-DZAB4JFv.cjs → scroll-hWt0b1gK.cjs} +1 -1
  257. package/dist/{scroll-DZAB4JFv.cjs.map → scroll-hWt0b1gK.cjs.map} +1 -1
  258. package/dist/{select-D2eLEDUT.cjs → select-BDonPD5a.cjs} +1 -1
  259. package/dist/{select-D2eLEDUT.cjs.map → select-BDonPD5a.cjs.map} +1 -1
  260. package/dist/{select-B2T3RZng.js → select-CkOAwmxC.js} +1 -1
  261. package/dist/{select-B2T3RZng.js.map → select-CkOAwmxC.js.map} +1 -1
  262. package/dist/select.cjs +1 -1
  263. package/dist/select.js +1 -1
  264. package/dist/{sheet-NaecDxuR.cjs → sheet-Bv2mPHWk.cjs} +1 -1
  265. package/dist/{sheet-NaecDxuR.cjs.map → sheet-Bv2mPHWk.cjs.map} +1 -1
  266. package/dist/{sheet-BiGXZPdu.js → sheet-NUgEmozP.js} +3 -3
  267. package/dist/{sheet-BiGXZPdu.js.map → sheet-NUgEmozP.js.map} +1 -1
  268. package/dist/sheet.cjs +1 -1
  269. package/dist/sheet.js +2 -2
  270. package/dist/{sheet.service-CQq5hUNb.cjs → sheet.service-BKmnlkpZ.cjs} +1 -1
  271. package/dist/{sheet.service-CQq5hUNb.cjs.map → sheet.service-BKmnlkpZ.cjs.map} +1 -1
  272. package/dist/{sheet.service-gek7Spb6.js → sheet.service-CanLo8ko.js} +1 -1
  273. package/dist/{sheet.service-gek7Spb6.js.map → sheet.service-CanLo8ko.js.map} +1 -1
  274. package/dist/skeleton.cjs +1 -1
  275. package/dist/skeleton.js +1 -1
  276. package/dist/skills/SKILL.md +5 -3
  277. package/dist/skills/schmancy/SKILL.md +5 -3
  278. package/dist/slider.cjs +1 -1
  279. package/dist/slider.js +1 -1
  280. package/dist/{splash-screen-Dc6LDIbK.js → splash-screen-B0ppA3f1.js} +1 -1
  281. package/dist/{splash-screen-Dc6LDIbK.js.map → splash-screen-B0ppA3f1.js.map} +1 -1
  282. package/dist/{splash-screen-CxPHf-SC.cjs → splash-screen-BemqNFNj.cjs} +1 -1
  283. package/dist/{splash-screen-CxPHf-SC.cjs.map → splash-screen-BemqNFNj.cjs.map} +1 -1
  284. package/dist/splash-screen.cjs +1 -1
  285. package/dist/splash-screen.js +1 -1
  286. package/dist/{src-BP8bYUHc.cjs → src-ByGCYD-E.cjs} +1 -1
  287. package/dist/src-ByGCYD-E.cjs.map +1 -0
  288. package/dist/{src-BYrvfmFF.js → src-Cjy9zCiU.js} +41 -41
  289. package/dist/src-Cjy9zCiU.js.map +1 -0
  290. package/dist/steps.cjs +1 -1
  291. package/dist/steps.js +3 -3
  292. package/dist/store-Bmj6rvZY.js.map +1 -1
  293. package/dist/store-CO4nJyGj.cjs.map +1 -1
  294. package/dist/{surface-C9plkl5F.cjs → surface-CoLYICO1.cjs} +1 -1
  295. package/dist/{surface-C9plkl5F.cjs.map → surface-CoLYICO1.cjs.map} +1 -1
  296. package/dist/{surface-B2cmGNZ2.js → surface-CtpWeSGn.js} +2 -2
  297. package/dist/{surface-B2cmGNZ2.js.map → surface-CtpWeSGn.js.map} +1 -1
  298. package/dist/surface.cjs +1 -1
  299. package/dist/surface.js +1 -1
  300. package/dist/switch.cjs +1 -1
  301. package/dist/switch.js +1 -1
  302. package/dist/{table-6xNLZh3K.cjs → table-COQKtlJB.cjs} +1 -1
  303. package/dist/{table-6xNLZh3K.cjs.map → table-COQKtlJB.cjs.map} +1 -1
  304. package/dist/{table-BCJgjSvq.js → table-bgFb1KYU.js} +1 -1
  305. package/dist/{table-BCJgjSvq.js.map → table-bgFb1KYU.js.map} +1 -1
  306. package/dist/table.cjs +1 -1
  307. package/dist/table.js +1 -1
  308. package/dist/{tabs-BDqvhB54.js → tabs-BicCpU1B.js} +2 -2
  309. package/dist/{tabs-BDqvhB54.js.map → tabs-BicCpU1B.js.map} +1 -1
  310. package/dist/{tabs-pvevSaFB.cjs → tabs-CoMJAXDy.cjs} +1 -1
  311. package/dist/{tabs-pvevSaFB.cjs.map → tabs-CoMJAXDy.cjs.map} +1 -1
  312. package/dist/tabs.cjs +1 -1
  313. package/dist/tabs.js +1 -1
  314. package/dist/tailwind.mixin-BfdVIGgD.cjs +2 -0
  315. package/dist/{tailwind.mixin-Bug3G6K6.cjs.map → tailwind.mixin-BfdVIGgD.cjs.map} +1 -1
  316. package/dist/tailwind.mixin-CNdR3zFD.js +219 -0
  317. package/dist/{tailwind.mixin-ywtUNG2c.js.map → tailwind.mixin-CNdR3zFD.js.map} +1 -1
  318. package/dist/teleport.cjs +1 -1
  319. package/dist/teleport.js +1 -1
  320. package/dist/{textarea-D2v000gK.cjs → textarea-CxTSwn3x.cjs} +1 -1
  321. package/dist/{textarea-D2v000gK.cjs.map → textarea-CxTSwn3x.cjs.map} +1 -1
  322. package/dist/{textarea-BvZn41aa.js → textarea-D7O9Uo15.js} +1 -1
  323. package/dist/{textarea-BvZn41aa.js.map → textarea-D7O9Uo15.js.map} +1 -1
  324. package/dist/textarea.cjs +1 -1
  325. package/dist/textarea.js +1 -1
  326. package/dist/{theme-Dw9Ag_VS.cjs → theme-CCez6SRm.cjs} +1 -1
  327. package/dist/{theme-Dw9Ag_VS.cjs.map → theme-CCez6SRm.cjs.map} +1 -1
  328. package/dist/{theme-JvXazXJr.js → theme-DGiyJMTT.js} +3 -3
  329. package/dist/{theme-JvXazXJr.js.map → theme-DGiyJMTT.js.map} +1 -1
  330. package/dist/{theme-button-qHd4AFsE.cjs → theme-button-BV0CxpGn.cjs} +1 -1
  331. package/dist/{theme-button-qHd4AFsE.cjs.map → theme-button-BV0CxpGn.cjs.map} +1 -1
  332. package/dist/{theme-button-Bh8wKXtV.js → theme-button-s9GfSQL5.js} +1 -1
  333. package/dist/{theme-button-Bh8wKXtV.js.map → theme-button-s9GfSQL5.js.map} +1 -1
  334. package/dist/theme-button.cjs +1 -1
  335. package/dist/theme-button.js +1 -1
  336. package/dist/theme.cjs +1 -1
  337. package/dist/theme.js +2 -2
  338. package/dist/theme.service-ETiKUwVy.cjs.map +1 -1
  339. package/dist/theme.service-_qP5WvB9.js.map +1 -1
  340. package/dist/tree.cjs +1 -1
  341. package/dist/tree.cjs.map +1 -1
  342. package/dist/tree.js +1 -1
  343. package/dist/{typewriter-PpYJFsVi.js → typewriter-BTqEQXsX.js} +3 -3
  344. package/dist/{typewriter-PpYJFsVi.js.map → typewriter-BTqEQXsX.js.map} +1 -1
  345. package/dist/{typewriter-C5uDB2Lu.cjs → typewriter-DeaL3NfZ.cjs} +1 -1
  346. package/dist/{typewriter-C5uDB2Lu.cjs.map → typewriter-DeaL3NfZ.cjs.map} +1 -1
  347. package/dist/typewriter.cjs +1 -1
  348. package/dist/typewriter.js +1 -1
  349. package/dist/typography.cjs +1 -1
  350. package/dist/typography.js +1 -1
  351. package/dist/utils-C8PD8So2.cjs.map +1 -1
  352. package/dist/utils-DVuCPDfw.js.map +1 -1
  353. package/dist/visually-hidden.cjs +1 -1
  354. package/dist/visually-hidden.js +1 -1
  355. package/dist/{window-ChDgkb97.js → window-CDHDVOwO.js} +1 -1
  356. package/dist/{window-ChDgkb97.js.map → window-CDHDVOwO.js.map} +1 -1
  357. package/dist/{window-Czfu-i4Y.cjs → window-IGZgxuUC.cjs} +1 -1
  358. package/dist/{window-Czfu-i4Y.cjs.map → window-IGZgxuUC.cjs.map} +1 -1
  359. package/dist/window.cjs +1 -1
  360. package/dist/window.js +1 -1
  361. package/package.json +15 -3
  362. package/skills/schmancy/SKILL.md +5 -3
  363. package/src/agent/agent-bundle.test.ts +92 -0
  364. package/src/agent/agent-entry.ts +17 -0
  365. package/src/agent/helpers.ts +161 -0
  366. package/src/agent/index.ts +1 -0
  367. package/src/agent/schmancy-skill.ts +71 -0
  368. package/src/agent/virtual-manifest.d.ts +10 -0
  369. package/src/area/area.service.ts +11 -0
  370. package/src/content-drawer/drawer.service.ts +9 -0
  371. package/src/dialog/dialog-service.ts +11 -1
  372. package/src/notification/notification-service.ts +11 -1
  373. package/src/sheet/sheet.service.ts +10 -0
  374. package/src/theme/theme.service.ts +11 -1
  375. package/types/src/agent/agent-bundle.test.d.ts +1 -0
  376. package/types/src/agent/agent-entry.d.ts +4 -0
  377. package/types/src/agent/helpers.d.ts +87 -0
  378. package/types/src/agent/index.d.ts +1 -0
  379. package/types/src/agent/schmancy-skill.d.ts +33 -0
  380. package/types/src/area/area.service.d.ts +11 -0
  381. package/types/src/content-drawer/drawer.service.d.ts +9 -0
  382. package/types/src/dialog/dialog-service.d.ts +11 -1
  383. package/types/src/notification/notification-service.d.ts +11 -1
  384. package/types/src/sheet/sheet.service.d.ts +9 -0
  385. package/types/src/theme/theme.service.d.ts +11 -0
  386. package/dist/area-BafkBc1f.cjs.map +0 -1
  387. package/dist/area-D03HRn1L.js.map +0 -1
  388. package/dist/context-B81Q3U_1.cjs +0 -1
  389. package/dist/context-Dnj4ofbV.js +0 -3
  390. package/dist/notification-BMtrJG-Y.js.map +0 -1
  391. package/dist/notification-NnsatHAh.cjs.map +0 -1
  392. package/dist/src-BP8bYUHc.cjs.map +0 -1
  393. package/dist/src-BYrvfmFF.js.map +0 -1
  394. package/dist/tailwind.mixin-Bug3G6K6.cjs +0 -2
  395. package/dist/tailwind.mixin-ywtUNG2c.js +0 -219
@@ -1 +0,0 @@
1
- {"version":3,"file":"notification-NnsatHAh.cjs","names":[],"sources":["../src/notification/notification.scss?inline","../src/notification/notification.ts","../src/notification/notification-service.ts","../src/notification/notify.ts"],"sourcesContent":[":host {\n\tdisplay: block;\n}\n\n.notification {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: 10px;\n\tpadding: 12px;\n\tpadding-right: 32px;\n\tbackground: var(--schmancy-sys-color-surface-container);\n\tborder-radius: var(--schmancy-sys-shape-corner-extraLarge, 16px);\n\tcolor: var(--schmancy-sys-color-surface-on);\n\tmax-width: 320px;\n\toverflow: hidden;\n\n\t/* Type-colored luminous glow */\n\t--notification-glow-color: var(--schmancy-sys-color-primary-default);\n\tbox-shadow: 0 4px 24px -6px color-mix(in srgb, var(--notification-glow-color) 18%, transparent);\n\tborder-left: 2px solid color-mix(in srgb, var(--notification-glow-color) 50%, transparent);\n\n\ttransition:\n\t\tbox-shadow 300ms ease,\n\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\n\t&.info { --notification-glow-color: var(--schmancy-sys-color-primary-default); }\n\t&.success { --notification-glow-color: var(--schmancy-sys-color-success-default); }\n\t&.warning { --notification-glow-color: var(--schmancy-sys-color-warning-default); }\n\t&.error { --notification-glow-color: var(--schmancy-sys-color-error-default); }\n\n\t&.hovered {\n\t\tbox-shadow: 0 8px 32px -4px color-mix(in srgb, var(--notification-glow-color) 28%, transparent);\n\t\ttransform: translateY(-2px);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: box-shadow 200ms ease;\n\t\t&.hovered { transform: none; }\n\t}\n}\n\n.emoji {\n\tfont-size: 20px;\n\tline-height: 1;\n\tflex-shrink: 0;\n\tmargin-top: 1px;\n}\n\n.content {\n\tflex: 1;\n\tmin-width: 0;\n}\n\n.title {\n\tfont-weight: 500;\n\tfont-size: 13px;\n\tline-height: 1.4;\n\tmargin-bottom: 2px;\n\tletter-spacing: 0.01em;\n\n\t.info & {\n\t\tcolor: var(--schmancy-sys-color-primary-default);\n\t}\n\t.success & {\n\t\tcolor: var(--schmancy-sys-color-success-default);\n\t}\n\t.warning & {\n\t\tcolor: var(--schmancy-sys-color-tertiary-default);\n\t}\n\t.error & {\n\t\tcolor: var(--schmancy-sys-color-error-default);\n\t}\n}\n\n.message {\n\tfont-size: 13px;\n\tline-height: 1.4;\n\topacity: 0.75;\n\tletter-spacing: 0.01em;\n}\n\n.close {\n\tposition: absolute;\n\ttop: 8px;\n\tright: 6px;\n\tbackground: none;\n\tborder: none;\n\tfont-size: 16px;\n\tfont-weight: 300;\n\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\tcursor: pointer;\n\tpadding: 4px 6px;\n\tline-height: 1;\n\topacity: 0.4;\n\tborder-radius: var(--schmancy-sys-shape-corner-full, 50%);\n\ttransition: opacity 200ms ease;\n\n\t&:hover {\n\t\topacity: 0.8;\n\t}\n\n\t&:focus-visible {\n\t\toutline: none;\n\t\topacity: 1;\n\t\tbox-shadow:\n\t\t\t0 0 0 2px var(--schmancy-sys-color-primary-default),\n\t\t\t0 0 8px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 25%, transparent);\n\t}\n}\n\n.progress {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n}\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { BehaviorSubject, timer, interval, NEVER } from 'rxjs'\nimport { switchMap, takeUntil, map, tap, distinctUntilChanged } from 'rxjs/operators'\nimport '../progress/progress'\nimport style from './notification.scss?inline'\n\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error'\n\n/**\n * Calculate a point on an arc between two points\n */\nfunction calculateArcPoint(\n\tstart: { x: number; y: number },\n\tend: { x: number; y: number },\n\tarcDirection: 'up' | 'down' = 'up',\n\tintensity: number = 0.3,\n): { x: number; y: number } {\n\tconst midX = (start.x + end.x) / 2\n\tconst midY = (start.y + end.y) / 2\n\tconst distance = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2))\n\tconst arcHeight = Math.min(distance * intensity, 150)\n\treturn {\n\t\tx: midX,\n\t\ty: arcDirection === 'up' ? midY - arcHeight : midY + arcHeight,\n\t}\n}\n\n/**\n * @fires close - When notification is closed\n */\n@customElement('sch-notification')\nexport default class SchmancyNotification extends $LitElement(style) {\n\t@property({ type: String }) title = ''\n\t@property({ type: String }) message = ''\n\t@property({ type: String }) type: NotificationType = 'info'\n\t@property({ type: Boolean }) closable = true\n\t@property({ type: Number }) duration = 5000 // 0 means no auto-close\n\t@property({ type: String }) id = `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\t@property({ type: Boolean }) playSound = true\n\t@property({ type: Boolean }) showProgress = false // Show indeterminate progress bar\n\t@property({ type: Object }) startPosition: { x: number; y: number } = { x: 0, y: 0 }\n\n\t@state() private _visible = true\n\t@state() private _progress = 100\n\t@state() private _hovered = false\n\t@state() private _closing = false\n\n\tprivate paused$ = new BehaviorSubject<boolean>(false)\n\tprivate startTime = 0\n\tprivate pausedAt = 0\n\tprivate elapsedBeforePause = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Set fixed positioning for blackbird animation\n\t\tthis.style.position = 'fixed'\n\t\tthis.style.top = '16px'\n\t\tthis.style.right = '16px'\n\t\tthis.style.zIndex = '10001'\n\t\tthis.style.opacity = '0'\n\n\t\t// Animate in after first render\n\t\tthis.updateComplete.then(() => {\n\t\t\tthis.animateIn()\n\t\t})\n\n\t\tif (this.duration > 0) {\n\t\t\tthis.setupAutoClose()\n\t\t\tthis.setupProgressUpdates()\n\t\t}\n\n\t\tif (this.playSound) {\n\t\t\tthis._playSound()\n\t\t}\n\t}\n\n\tprivate async animateIn() {\n\t\t// Get the notification element's final position\n\t\tconst rect = this.getBoundingClientRect()\n\t\tconst targetX = rect.left + rect.width / 2\n\t\tconst targetY = rect.top + rect.height / 2\n\n\t\t// Calculate arc point for upward arc\n\t\tconst arcPoint = calculateArcPoint(this.startPosition, { x: targetX, y: targetY }, 'up', 0.3)\n\n\t\t// Animate from click position to final position with arc\n\t\tawait this.animate(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttransform: `translate(${this.startPosition.x - targetX}px, ${this.startPosition.y - targetY}px) scale(0.1)`,\n\t\t\t\t\topacity: 0,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttransform: `translate(${arcPoint.x - targetX}px, ${arcPoint.y - targetY}px) scale(0.6)`,\n\t\t\t\t\topacity: 0.9,\n\t\t\t\t\toffset: 0.5,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttransform: 'translate(0, 0) scale(1)',\n\t\t\t\t\topacity: 1,\n\t\t\t\t},\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: 400,\n\t\t\t\teasing: 'cubic-bezier(0.34, 1.2, 0.64, 1)',\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t).finished\n\t}\n\n\tprivate setupAutoClose() {\n\t\tif (this.duration <= 0) return\n\n\t\tthis.startTime = Date.now()\n\t\tthis.elapsedBeforePause = 0\n\n\t\tthis.paused$\n\t\t\t.pipe(\n\t\t\t\tswitchMap(paused => {\n\t\t\t\t\tif (paused) {\n\t\t\t\t\t\tthis.pausedAt = Date.now()\n\t\t\t\t\t\tthis.elapsedBeforePause += this.pausedAt - this.startTime\n\t\t\t\t\t\treturn NEVER\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.startTime = Date.now()\n\t\t\t\t\t\tconst remaining = this.duration - this.elapsedBeforePause\n\t\t\t\t\t\tif (remaining <= 0) {\n\t\t\t\t\t\t\tthis.close()\n\t\t\t\t\t\t\treturn NEVER\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn timer(remaining)\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => this.close())\n\t}\n\n\tprivate setupProgressUpdates() {\n\t\tif (this.duration <= 0) return\n\n\t\tinterval(16)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() =>\n\t\t\t\t\tthis.paused$.pipe(\n\t\t\t\t\t\tmap(paused => {\n\t\t\t\t\t\t\tif (paused) return this._progress\n\t\t\t\t\t\t\tconst elapsed = this.elapsedBeforePause + (Date.now() - this.startTime)\n\t\t\t\t\t\t\tconst remaining = Math.max(0, this.duration - elapsed)\n\t\t\t\t\t\t\treturn (remaining / this.duration) * 100\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(progress => {\n\t\t\t\t\tthis._progress = progress\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\tprivate _playSound() {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('playsound', {\n\t\t\t\tdetail: { type: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate _handleMouseEnter() {\n\t\tthis._hovered = true\n\t\tthis.paused$.next(true)\n\t}\n\n\tprivate _handleMouseLeave() {\n\t\tthis._hovered = false\n\t\tthis.paused$.next(false)\n\t}\n\n\tpublic async close() {\n\t\tif (this._closing) return\n\t\tthis._closing = true\n\t\tthis._visible = false\n\n\t\t// Animate out before dispatching close event\n\t\tawait this.animate(\n\t\t\t[\n\t\t\t\t{ transform: 'translate(0, 0) scale(1)', opacity: 1 },\n\t\t\t\t{ transform: 'translate(0, -20px) scale(0.8)', opacity: 0 },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: 200,\n\t\t\t\teasing: 'cubic-bezier(0.4, 0, 1, 1)',\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t).finished\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('close', {\n\t\t\t\tdetail: { id: this.id },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate _getEmoji(): string {\n\t\tswitch (this.type) {\n\t\t\tcase 'success':\n\t\t\t\treturn '\\u2705'\n\t\t\tcase 'warning':\n\t\t\t\treturn '\\u26A0\\uFE0F'\n\t\t\tcase 'error':\n\t\t\t\treturn '\\u274C'\n\t\t\tdefault:\n\t\t\t\treturn '\\u{1F4A1}'\n\t\t}\n\t}\n\n\trender() {\n\t\tif (!this._visible && this._closing) return html``\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"notification ${this.type} ${this._closing ? 'closing' : ''} ${this._hovered ? 'hovered' : ''}\"\n\t\t\t\trole=\"alert\"\n\t\t\t\t@mouseenter=${this._handleMouseEnter}\n\t\t\t\t@mouseleave=${this._handleMouseLeave}\n\t\t\t>\n\t\t\t\t<span class=\"emoji\">${this._getEmoji()}</span>\n\t\t\t\t<div class=\"content\">\n\t\t\t\t\t${this.title ? html`<div class=\"title\">${this.title}</div>` : ''}\n\t\t\t\t\t<div class=\"message\">${this.message}</div>\n\t\t\t\t</div>\n\t\t\t\t${this.closable\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<button class=\"close\" aria-label=\"Close notification\" @click=${this.close}>x</button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\t\t\t\t${this.showProgress || this.duration > 0\n\t\t\t\t\t? html`<schmancy-progress\n\t\t\t\t\t\tclass=\"progress\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t.value=${this._progress}\n\t\t\t\t\t\t?indeterminate=${this.showProgress && this.duration === 0}\n\t\t\t\t\t></schmancy-progress>`\n\t\t\t\t\t: ''}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-notification': SchmancyNotification\n\t}\n}\n","import { $sounds, type Feeling } from '../audio'\nimport SchmancyNotification, { NotificationType } from './notification'\n\nexport interface NotificationOptions {\n\tid?: string\n\ttitle?: string\n\tmessage: string\n\ttype?: NotificationType\n\tduration?: number\n\tclosable?: boolean\n\tplaySound?: boolean\n\tshowProgress?: boolean\n}\n\nconst typeToFeeling: Record<NotificationType, Feeling> = {\n\tinfo: 'curious',\n\tsuccess: 'content',\n\twarning: 'anxious',\n\terror: 'disappointed',\n}\n\n// Track last mouse position\nlet lastClickPosition = { x: window.innerWidth - 100, y: 50 }\n\n// Global mousedown listener to track click position\nif (typeof window !== 'undefined') {\n\twindow.addEventListener(\n\t\t'mousedown',\n\t\t(e: MouseEvent) => {\n\t\t\tlastClickPosition = { x: e.clientX, y: e.clientY }\n\t\t},\n\t\t{ capture: true, passive: true },\n\t)\n}\n\n// Track current notification element\nlet currentNotification: SchmancyNotification | null = null\n\n/**\n * Notification service for centralized notification management.\n * Provides a simple API for showing notifications.\n */\nexport class NotificationService {\n\tprivate static instance: NotificationService\n\tprivate notificationStack: string[] = []\n\tprivate audioVolume = 0.1\n\n\t// Default notification options\n\tprivate static DEFAULT_OPTIONS: Partial<NotificationOptions> = {\n\t\tduration: 1000, // 1 seconds - long enough to be readable\n\t\tclosable: true,\n\t\tplaySound: true,\n\t}\n\n\t// Type-specific default durations (in milliseconds)\n\tprivate static TYPE_DURATIONS: Record<NotificationType, number> = {\n\t\tsuccess: 1500, // 1.5 seconds - quick confirmation\n\t\tinfo: 2000, // 2 seconds - informational\n\t\twarning: 2500, // 2.5 seconds - needs attention\n\t\terror: 2500, // 2.5 seconds - important\n\t}\n\n\t// Private constructor for singleton pattern\n\tprivate constructor() {\n\t\t$sounds.setVolume(this.audioVolume)\n\t}\n\n\t/**\n\t * Get the singleton instance\n\t */\n\tpublic static getInstance(): NotificationService {\n\t\tif (!NotificationService.instance) {\n\t\t\tNotificationService.instance = new NotificationService()\n\t\t}\n\t\treturn NotificationService.instance\n\t}\n\n\t/**\n\t * Show a notification\n\t * @returns The ID of the created notification\n\t */\n\tpublic notify(options: NotificationOptions): string {\n\t\t// Apply default options\n\t\tconst completeOptions = {\n\t\t\t...NotificationService.DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t// Override with duraton from options if provided, otherwise use default\n\t\t\tduration: options.duration ?? NotificationService.DEFAULT_OPTIONS.duration,\n\t\t}\n\n\t\tconst id = completeOptions.id || `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\n\t\t// Add to stack for tracking\n\t\tthis.notificationStack.push(id)\n\n\t\t// Remove existing notification if any (only 1 at a time)\n\t\tif (currentNotification) {\n\t\t\tcurrentNotification.remove()\n\t\t\tcurrentNotification = null\n\t\t}\n\n\t\t// Create the notification element directly\n\t\tconst notification = document.createElement('sch-notification') as SchmancyNotification\n\t\tnotification.id = id\n\t\tnotification.title = completeOptions.title || ''\n\t\tnotification.message = completeOptions.message\n\t\tnotification.type = completeOptions.type || 'info'\n\t\tnotification.duration = completeOptions.duration ?? 1000\n\t\tnotification.closable = completeOptions.closable !== false\n\t\tnotification.playSound = false // We handle sound here\n\t\tnotification.showProgress = completeOptions.showProgress || false\n\t\tnotification.startPosition = { ...lastClickPosition }\n\n\t\t// Play sound if enabled\n\t\tif (completeOptions.playSound !== false) {\n\t\t\t$sounds.play(typeToFeeling[notification.type])\n\t\t}\n\n\t\t// Listen for close event\n\t\tnotification.addEventListener('close', () => {\n\t\t\tconst index = this.notificationStack.indexOf(id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.notificationStack.splice(index, 1)\n\t\t\t}\n\t\t\tnotification.remove()\n\t\t\tif (currentNotification === notification) {\n\t\t\t\tcurrentNotification = null\n\t\t\t}\n\t\t})\n\n\t\t// Append to body\n\t\tdocument.body.appendChild(notification)\n\t\tcurrentNotification = notification\n\n\t\treturn id\n\t}\n\n\t/**\n\t * Dismiss a notification\n\t * @param id Optional notification ID. If not provided, dismisses the most recent notification\n\t */\n\tpublic dismiss(id?: string): void {\n\t\tlet targetId: string | undefined\n\n\t\tif (id) {\n\t\t\t// Remove specific notification from stack\n\t\t\tconst index = this.notificationStack.indexOf(id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.notificationStack.splice(index, 1)\n\t\t\t\ttargetId = id\n\t\t\t}\n\t\t} else {\n\t\t\t// Remove most recent notification (last in stack)\n\t\t\ttargetId = this.notificationStack.pop()\n\t\t}\n\n\t\tif (targetId && currentNotification && currentNotification.id === targetId) {\n\t\t\tcurrentNotification.close()\n\t\t}\n\t}\n\n\t/**\n\t * Update a notification's content\n\t */\n\tpublic update(id: string, options: Partial<NotificationOptions>): void {\n\t\tif (currentNotification && currentNotification.id === id) {\n\t\t\tif (options.title !== undefined) currentNotification.title = options.title\n\t\t\tif (options.message !== undefined) currentNotification.message = options.message\n\t\t\tif (options.type !== undefined) currentNotification.type = options.type\n\t\t}\n\t}\n\n\t/**\n\t * Show an info notification\n\t */\n\tpublic info(message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage: message ?? '',\n\t\t\ttype: 'info',\n\t\t\tduration: message ? (options.duration ?? NotificationService.TYPE_DURATIONS.info) : 1,\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a success notification\n\t */\n\tpublic success(message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage: message ?? '',\n\t\t\ttype: 'success',\n\t\t\tduration: message ? (options.duration ?? NotificationService.TYPE_DURATIONS.success) : 1,\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a warning notification\n\t */\n\tpublic warning(message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage: message ?? '',\n\t\t\ttype: 'warning',\n\t\t\tduration: message ? (options.duration ?? NotificationService.TYPE_DURATIONS.warning) : 1,\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show an error notification\n\t */\n\tpublic error(message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage: message ?? '',\n\t\t\ttype: 'error',\n\t\t\tduration: message ? (options.duration ?? NotificationService.TYPE_DURATIONS.error) : 1,\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a notification with a custom duration\n\t */\n\tpublic customDuration(\n\t\tmessage: string,\n\t\tduration: number,\n\t\toptions: Partial<Omit<NotificationOptions, 'message' | 'duration'>> = {},\n\t): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\tduration,\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a persistent notification (won't auto-dismiss)\n\t */\n\tpublic persistent(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'duration'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\tduration: 0, // Zero duration means no auto-close\n\t\t\t...options,\n\t\t})\n\t}\n}\n\n/**\n * Global notification utility - provides a quick way to show notifications\n */\nexport const $notify = {\n\t/**\n\t * Show a notification\n\t */\n\tshow: (options: NotificationOptions): string => {\n\t\treturn NotificationService.getInstance().notify(options)\n\t},\n\n\t/**\n\t * Show an info notification\n\t */\n\tinfo: (message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().info(message, options)\n\t},\n\n\t/**\n\t * Show a success notification\n\t */\n\tsuccess: (message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().success(message, options)\n\t},\n\n\t/**\n\t * Show a warning notification\n\t */\n\twarning: (message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().warning(message, options)\n\t},\n\n\t/**\n\t * Show an error notification\n\t */\n\terror: (message?: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().error(message, options)\n\t},\n\n\t/**\n\t * Show a notification with a custom duration\n\t * @param message The notification message\n\t * @param duration Duration in milliseconds before auto-dismissing (0 for no auto-dismiss)\n\t * @param options Additional notification options\n\t */\n\tcustomDuration: (\n\t\tmessage: string,\n\t\tduration: number,\n\t\toptions: Partial<Omit<NotificationOptions, 'message' | 'duration'>> = {},\n\t): string => {\n\t\treturn NotificationService.getInstance().customDuration(message, duration, options)\n\t},\n\n\t/**\n\t * Show a persistent notification that won't auto-dismiss\n\t */\n\tpersistent: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'duration'>> = {}): string => {\n\t\treturn NotificationService.getInstance().persistent(message, options)\n\t},\n\n\t/**\n\t * Dismiss a notification\n\t * @param id Optional notification ID. If not provided, dismisses the most recent notification (queue-like behavior)\n\t */\n\tdismiss: (id?: string): void => {\n\t\treturn NotificationService.getInstance().dismiss(id)\n\t},\n\n\t/**\n\t * Update a notification's content\n\t */\n\tupdate: (id: string, options: Partial<NotificationOptions>): void => {\n\t\treturn NotificationService.getInstance().update(id, options)\n\t},\n}\n\nexport default NotificationService\n","import { Observable, tap, finalize, catchError } from 'rxjs'\r\nimport { $notify, NotificationOptions } from './notification-service'\r\n\r\nexport interface NotifyOptions {\r\n\t/**\r\n\t * Message to show while the operation is in progress\r\n\t */\r\n\tloadingMessage?: string\r\n\t/**\r\n\t * Message to show when the operation completes successfully\r\n\t */\r\n\tsuccessMessage?: string\r\n\t/**\r\n\t * Message to show when the operation fails (can be a function to format error)\r\n\t */\r\n\terrorMessage?: string | ((error: any) => string)\r\n\t/**\r\n\t * Type of notification for loading state\r\n\t */\r\n\tloadingType?: NotificationOptions['type']\r\n\t/**\r\n\t * Type of notification for success state\r\n\t */\r\n\tsuccessType?: NotificationOptions['type']\r\n\t/**\r\n\t * Type of notification for error state\r\n\t */\r\n\terrorType?: NotificationOptions['type']\r\n\t/**\r\n\t * Whether to auto-dismiss the loading notification on complete/error\r\n\t */\r\n\tautoDismissLoading?: boolean\r\n\t/**\r\n\t * Duration for success notification (ms). Use 0 for persistent\r\n\t */\r\n\tsuccessDuration?: number\r\n\t/**\r\n\t * Duration for error notification (ms). Use 0 for persistent\r\n\t */\r\n\terrorDuration?: number\r\n}\r\n\r\n/**\r\n * Wraps an Observable with notification lifecycle management.\r\n * Shows a loading notification with progress indicator, then auto-dismisses and shows success/error notification.\r\n * \r\n * @example\r\n * ```typescript\r\n * // Basic usage with progress indicator\r\n * someApiCall().pipe(\r\n * notify({\r\n * loadingMessage: 'Loading data...',\r\n * successMessage: 'Data loaded successfully!',\r\n * errorMessage: 'Failed to load data'\r\n * })\r\n * ).subscribe()\r\n * \r\n * // With custom durations\r\n * saveData().pipe(\r\n * notify({\r\n * loadingMessage: 'Saving...',\r\n * successMessage: 'Saved!',\r\n * successDuration: 5000, // Success stays for 5 seconds\r\n * errorMessage: (err) => `Save failed: ${err.message}`,\r\n * errorDuration: 0 // Error is persistent until dismissed\r\n * })\r\n * ).subscribe()\r\n * \r\n * // Full configuration example\r\n * uploadFile().pipe(\r\n * notify({\r\n * loadingMessage: 'Uploading file...',\r\n * loadingType: 'info',\r\n * successMessage: 'Upload complete!',\r\n * successType: 'success',\r\n * successDuration: 3000,\r\n * errorMessage: (err) => `Upload failed: ${err.message}`,\r\n * errorType: 'error',\r\n * errorDuration: 10000,\r\n * autoDismissLoading: true\r\n * })\r\n * ).subscribe()\r\n * ```\r\n */\r\nexport function notify<T>(options: NotifyOptions) {\r\n\treturn (source: Observable<T>): Observable<T> => {\r\n\t\tlet loadingNotificationId: string | undefined\r\n\r\n\t\t// Show loading notification if message provided\r\n\t\tif (options.loadingMessage) {\r\n\t\t\tloadingNotificationId = $notify.show({\r\n\t\t\t\tmessage: options.loadingMessage,\r\n\t\t\t\ttype: options.loadingType || 'info',\r\n\t\t\t\tduration: 0, // Persistent until dismissed\r\n\t\t\t\tshowProgress: true, // Show indeterminate progress by default\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn source.pipe(\r\n\t\t\ttap((value) => {\r\n\t\t\t\t// Check if the emitted value contains progress information\r\n\t\t\t\t// Common patterns: { progress: number }, { loaded: number, total: number }, etc.\r\n\t\t\t\tif (loadingNotificationId && typeof value === 'object' && value !== null) {\r\n\t\t\t\t\tlet progress: number | undefined\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Check for different progress patterns\r\n\t\t\t\t\tif ('progress' in value && typeof (value as any).progress === 'number') {\r\n\t\t\t\t\t\tprogress = (value as any).progress\r\n\t\t\t\t\t} else if ('loaded' in value && 'total' in value) {\r\n\t\t\t\t\t\tconst loaded = (value as any).loaded\r\n\t\t\t\t\t\tconst total = (value as any).total\r\n\t\t\t\t\t\tif (typeof loaded === 'number' && typeof total === 'number' && total > 0) {\r\n\t\t\t\t\t\t\tprogress = (loaded / total) * 100\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Update notification with progress if available\r\n\t\t\t\t\tif (progress !== undefined) {\r\n\t\t\t\t\t\t// We need to update the progress of the notification\r\n\t\t\t\t\t\t// For now, we'll update the message to show progress percentage\r\n\t\t\t\t\t\t$notify.update?.(loadingNotificationId, {\r\n\t\t\t\t\t\t\tmessage: `${options.loadingMessage} (${Math.round(progress)}%)`,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t// Check if this is the final success emission (not a progress update)\r\n\t\t\t\t// Typically file uploads emit progress events then a final result\r\n\t\t\t\tconst isProgressUpdate = typeof value === 'object' && value !== null && \r\n\t\t\t\t\t('progress' in value || ('loaded' in value && 'total' in value))\r\n\t\t\t\t\r\n\t\t\t\tif (!isProgressUpdate) {\r\n\t\t\t\t\t// On successful final emission, dismiss loading and show success\r\n\t\t\t\t\tif (loadingNotificationId && options.autoDismissLoading !== false) {\r\n\t\t\t\t\t\t$notify.dismiss(loadingNotificationId)\r\n\t\t\t\t\t\tloadingNotificationId = undefined\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (options.successMessage) {\r\n\t\t\t\t\t\t$notify.show({\r\n\t\t\t\t\t\t\tmessage: options.successMessage,\r\n\t\t\t\t\t\t\ttype: options.successType || 'success',\r\n\t\t\t\t\t\t\tduration: options.successDuration ?? 2000,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tcatchError((error) => {\r\n\t\t\t\t// On error, dismiss loading and show error\r\n\t\t\t\tif (loadingNotificationId && options.autoDismissLoading !== false) {\r\n\t\t\t\t\t$notify.dismiss(loadingNotificationId)\r\n\t\t\t\t\tloadingNotificationId = undefined\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (options.errorMessage) {\r\n\t\t\t\t\tconst message = typeof options.errorMessage === 'function' \r\n\t\t\t\t\t\t? options.errorMessage(error)\r\n\t\t\t\t\t\t: options.errorMessage\r\n\t\t\t\t\t\r\n\t\t\t\t\t$notify.show({\r\n\t\t\t\t\t\tmessage,\r\n\t\t\t\t\t\ttype: options.errorType || 'error',\r\n\t\t\t\t\t\tduration: options.errorDuration ?? 3000,\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Re-throw the error to maintain the error flow\r\n\t\t\t\tthrow error\r\n\t\t\t}),\r\n\t\t\tfinalize(() => {\r\n\t\t\t\t// Clean up any remaining loading notification\r\n\t\t\t\tif (loadingNotificationId && options.autoDismissLoading !== false) {\r\n\t\t\t\t\t$notify.dismiss(loadingNotificationId)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t)\r\n\t}\r\n}\r\n\r\n/**\r\n * Simplified version for API calls that just need loading and auto-dismiss.\r\n * Perfect for fire-and-forget operations where you want to show progress.\r\n * \r\n * @example\r\n * ```typescript\r\n * downloadData().pipe(\r\n * notifyProgress('Downloading...')\r\n * ).subscribe()\r\n * \r\n * // With custom messages\r\n * saveDocument().pipe(\r\n * notifyProgress('Saving document...', 'Document saved!', 'Save failed')\r\n * ).subscribe()\r\n * ```\r\n */\r\nexport function notifyProgress<T>(\r\n\tloadingMessage: string,\r\n\tsuccessMessage?: string,\r\n\terrorMessage?: string\r\n) {\r\n\treturn notify<T>({\r\n\t\tloadingMessage,\r\n\t\tsuccessMessage: successMessage || undefined,\r\n\t\terrorMessage: errorMessage || undefined,\r\n\t\tautoDismissLoading: true,\r\n\t})\r\n}"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-BP8bYUHc.cjs","names":[],"sources":["../src/badge/badge.ts","../src/content-drawer/drawer.service.ts","../src/content-drawer/context.ts","../src/content-drawer/drawer.ts","../src/content-drawer/main.ts","../src/content-drawer/sheet.ts","../src/nav-drawer/$navbar.ts","../src/nav-drawer/appbar.ts","../src/nav-drawer/content.ts","../src/nav-drawer/context.ts","../src/nav-drawer/drawer.ts","../src/nav-drawer/navbar.ts","../src/navigation-bar/navigation-bar-item.ts","../src/navigation-bar/navigation-bar.ts","../src/teleport/teleport.service.ts","../src/teleport/watcher.ts","../src/teleport/teleport.component.ts","../src/avatar.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { SchmancyTheme } from '..'\n\n/**\n * Badge color types for predefined styles\n */\nexport type BadgeColor = 'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'error' | 'neutral' | 'surface'\n\n/**\n * Badge size variants\n */\nexport type BadgeSize = 'xs' | 'sm' | 'md' | 'lg'\n\n/**\n * Badge shape variants\n */\nexport type BadgeShape = 'rounded' | 'pill' | 'square'\n\n/**\n * @element sch-badge\n * A versatile badge component for status indicators, labels, and counts\n *\n * @slot - The content of the badge (text or HTML)\n * @slot icon - Optional icon to display before the content\n *\n * @csspart badge - The badge element container\n * @csspart content - The content container\n * @csspart icon - The icon container\n */\n@customElement('schmancy-badge')\nexport class SchmancyBadgeV2 extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\twidth: fit-content;\n\t}\n\n\t/* Enhanced pulse animation for better attention-getting */\n\t@keyframes elegant-pulse {\n\t\t0%, 100% {\n\t\t\topacity: 1;\n\t\t}\n\t\t50% {\n\t\t\topacity: 0.85;\n\t\t}\n\t}\n\n\t.animate-pulse {\n\t\tanimation: elegant-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n\t}\n`) {\n\t/**\n\t * The color variant of the badge\n\t * @attr\n\t */\n\t@property({ type: String, reflect: true })\n\tcolor: BadgeColor = 'primary'\n\n\t/**\n\t * The size of the badge\n\t * @attr\n\t */\n\t@property({ type: String, reflect: true })\n\tsize: BadgeSize = 'md'\n\n\t/**\n\t * The shape of the badge\n\t * @attr\n\t */\n\t@property({ type: String, reflect: true })\n\tshape: BadgeShape = 'pill'\n\n\t/**\n\t * Whether the badge has an outlined style\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\toutlined = false\n\n\t/**\n\t * Custom icon name to display (if no icon slot is provided)\n\t * @attr\n\t */\n\t@property({ type: String })\n\ticon = ''\n\n\t/**\n\t * Whether to make the badge pulse to draw attention\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpulse = false\n\n\t/**\n\t * Convert the size to appropriate Tailwind classes for the badge container\n\t * Using harmonious padding ratios based on golden ratio principles\n\t * Refined for more elegant proportions\n\t */\n\tprivate getSizeClasses(): string {\n\t\tswitch (this.size) {\n\t\t\tcase 'xs':\n\t\t\t\treturn 'text-xs py-0.75 px-1.5 gap-0.5 leading-none'\n\t\t\tcase 'sm':\n\t\t\t\treturn 'text-xs py-1.5 px-2.5 gap-0.5 tracking-wide leading-none'\n\t\t\tcase 'lg':\n\t\t\t\treturn 'text-base py-2 px-4 gap-1 tracking-wide'\n\t\t\tcase 'md':\n\t\t\tdefault:\n\t\t\t\treturn 'text-sm py-1.5 px-3 gap-0.5'\n\t\t}\n\t}\n\n\t/**\n\t * Get shape classes based on selected shape\n\t */\n\tprivate getShapeClasses(): string {\n\t\tswitch (this.shape) {\n\t\t\tcase 'square':\n\t\t\t\treturn 'rounded'\n\t\t\tcase 'rounded':\n\t\t\t\treturn 'rounded-md'\n\t\t\tcase 'pill':\n\t\t\tdefault:\n\t\t\t\treturn 'rounded-full'\n\t\t}\n\t}\n\n\t/**\n\t * Get icon size based on badge size with harmonious proportions\n\t * Using golden ratio-inspired proportions relative to text size\n\t */\n\tprivate getIconSize(): string {\n\t\tswitch (this.size) {\n\t\t\tcase 'xs':\n\t\t\t\treturn '11px' // Approximately 0.9 × text size (12px × 0.9)\n\t\t\tcase 'sm':\n\t\t\t\treturn '13px' // Approximately 1.1 × text size (12px × 1.1)\n\t\t\tcase 'lg':\n\t\t\t\treturn '18px' // Approximately 1.1 × text size (16px × 1.1)\n\t\t\tcase 'md':\n\t\t\tdefault:\n\t\t\t\treturn '15px' // Approximately 1.1 × text size (14px × 1.1)\n\t\t}\n\t}\n\n\t/**\n\t * Get additional styling for specific sizes\n\t */\n\tprivate getExoticStyles(): Record<string, string> {\n\t\tconst styles: Record<string, string> = {}\n\n\t\tif (this.size === 'lg') {\n\t\t\tstyles.letterSpacing = '0.03em'\n\t\t\tstyles.fontWeight = '500'\n\t\t}\n\n\t\tif (this.size === 'sm') {\n\t\t\tstyles.letterSpacing = '0.02em'\n\t\t}\n\n\t\treturn styles\n\t}\n\n\t/**\n\t * Get background and text colors based on selected color variant\n\t * Enhanced for more elegant color combinations with refined contrasts\n\t */\n\tprivate getColorStyles() {\n\t\tconst colors: Record<BadgeColor, { bg: string; text: string; border?: string }> = {\n\t\t\tprimary: {\n\t\t\t\tbg: this.outlined ? 'transparent' : `color-mix(in srgb, ${SchmancyTheme.sys.color.primary.container} 92%, ${SchmancyTheme.sys.color.primary.default} 8%)`,\n\t\t\t\ttext: this.outlined ? SchmancyTheme.sys.color.primary.default : SchmancyTheme.sys.color.primary.onContainer,\n\t\t\t\tborder: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.primary.default} 90%, ${SchmancyTheme.sys.color.surface.highest} 10%)` : undefined,\n\t\t\t},\n\t\t\tsecondary: {\n\t\t\t\tbg: this.outlined ? 'transparent' : `color-mix(in srgb, ${SchmancyTheme.sys.color.secondary.container} 95%, ${SchmancyTheme.sys.color.secondary.default} 5%)`,\n\t\t\t\ttext: this.outlined ? SchmancyTheme.sys.color.secondary.default : SchmancyTheme.sys.color.secondary.onContainer,\n\t\t\t\tborder: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.secondary.default} 85%, ${SchmancyTheme.sys.color.surface.highest} 15%)` : undefined,\n\t\t\t},\n\t\t\ttertiary: {\n\t\t\t\tbg: this.outlined ? 'transparent' : `color-mix(in srgb, ${SchmancyTheme.sys.color.tertiary.container} 94%, ${SchmancyTheme.sys.color.tertiary.default} 6%)`,\n\t\t\t\ttext: this.outlined ? SchmancyTheme.sys.color.tertiary.default : SchmancyTheme.sys.color.tertiary.onContainer,\n\t\t\t\tborder: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.tertiary.default} 88%, ${SchmancyTheme.sys.color.surface.highest} 12%)` : undefined,\n\t\t\t},\n\t\t\tsuccess: {\n\t\t\t\tbg: this.outlined ? 'transparent' : `color-mix(in srgb, ${SchmancyTheme.sys.color.success.container} 90%, ${SchmancyTheme.sys.color.success.default} 10%)`,\n\t\t\t\ttext: this.outlined ? SchmancyTheme.sys.color.success.default : SchmancyTheme.sys.color.success.onContainer,\n\t\t\t\tborder: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.success.default} 85%, ${SchmancyTheme.sys.color.surface.bright} 15%)` : undefined,\n\t\t\t},\n\t\t\twarning: {\n\t\t\t\tbg: this.outlined ? 'transparent' : `color-mix(in srgb, ${SchmancyTheme.sys.color.tertiary.container} 85%, ${SchmancyTheme.sys.color.tertiary.default} 15%)`,\n\t\t\t\ttext: this.outlined ? SchmancyTheme.sys.color.tertiary.default : SchmancyTheme.sys.color.tertiary.onContainer,\n\t\t\t\tborder: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.tertiary.default} 90%, ${SchmancyTheme.sys.color.surface.highest} 10%)` : undefined,\n\t\t\t},\n\t\t\terror: {\n\t\t\t\tbg: this.outlined ? 'transparent' : `color-mix(in srgb, ${SchmancyTheme.sys.color.error.container} 92%, ${SchmancyTheme.sys.color.error.default} 8%)`,\n\t\t\t\ttext: this.outlined ? SchmancyTheme.sys.color.error.default : SchmancyTheme.sys.color.error.onContainer,\n\t\t\t\tborder: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.error.default} 88%, ${SchmancyTheme.sys.color.surface.bright} 12%)` : undefined,\n\t\t\t},\n\t\t\tneutral: {\n\t\t\t\tbg: this.outlined ? 'transparent' : `color-mix(in srgb, ${SchmancyTheme.sys.color.surface.high} 95%, ${SchmancyTheme.sys.color.outline} 5%)`,\n\t\t\t\ttext: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.surface.on} 95%, ${SchmancyTheme.sys.color.surface.default} 5%)` : SchmancyTheme.sys.color.surface.on,\n\t\t\t\tborder: this.outlined ? `color-mix(in srgb, ${SchmancyTheme.sys.color.outline} 85%, ${SchmancyTheme.sys.color.surface.highest} 15%)` : undefined,\n\t\t\t},\n\t\t\tsurface: {\n\t\t\t\tbg: this.outlined ? 'transparent' : SchmancyTheme.sys.color.surface.high,\n\t\t\t\ttext: SchmancyTheme.sys.color.surface.on,\n\t\t\t\tborder: this.outlined ? SchmancyTheme.sys.color.outline : undefined,\n\t\t\t},\n\t\t}\n\n\t\treturn colors[this.color]\n\t}\n\n\trender() {\n\t\tconst sizeClasses = this.getSizeClasses()\n\t\tconst shapeClasses = this.getShapeClasses()\n\t\tconst colorStyles = this.getColorStyles()\n\t\tconst iconSize = this.getIconSize()\n\t\tconst exoticStyles = this.getExoticStyles()\n\n\t\tconst badgeClasses = {\n\t\t\t'inline-flex items-center justify-center font-medium': true,\n\t\t\t'transition-all duration-200 ease-in-out': true,\n\t\t\t[sizeClasses]: true,\n\t\t\t[shapeClasses]: true,\n\t\t\t'animate-pulse': this.pulse,\n\t\t\t'border border-solid': this.outlined,\n\t\t\t'shadow-sm': !this.outlined && this.size === 'sm',\n\t\t\t'shadow': !this.outlined && this.size === 'md',\n\t\t\t'shadow-md': !this.outlined && this.size === 'lg',\n\t\t\t'hover:brightness-95 hover:-translate-y-px': this.outlined,\n\t\t\t'hover:brightness-[0.98]': !this.outlined,\n\t\t}\n\n\t\t// Refined styles for a more elegant look (only CSS that can't be done with Tailwind)\n\t\tconst styles = {\n\t\t\tborderColor: colorStyles.border,\n\t\t\tbackdropFilter: this.outlined ? 'blur(4px)' : undefined,\n\t\t\tboxShadow: this.size === 'lg' && !this.outlined ? '0 1px 2px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.1)' : undefined,\n\t\t\t...exoticStyles,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tpart=\"badge\"\n\t\t\t\tclass=\"${this.classMap(badgeClasses)}\"\n\t\t\t\tstyle=\"${this.styleMap(styles)}\"\n\t\t\t\t${color({\n\t\t\t\t\tbgColor: colorStyles.bg,\n\t\t\t\t\tcolor: colorStyles.text,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<!-- Icon slot or named icon -->\n\t\t\t\t<slot name=\"icon\">\n\t\t\t\t\t${this.icon\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<div part=\"icon\" class=\"shrink-0 flex items-center justify-center leading-none\">\n\t\t\t\t\t\t\t\t\t<schmancy-icon .size=${iconSize} class=\"flex items-center justify-center\">${this.icon}</schmancy-icon>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: ''}\n\t\t\t\t</slot>\n\n\t\t\t\t<!-- Content with proper spacing from icon -->\n\t\t\t\t<div part=\"content\" class=\"flex items-center leading-none tracking-[0.01em] ${this.icon ? 'ml-[0.38em]' : ''}\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-badge': SchmancyBadgeV2,\n\t\t'schmancy-badge': SchmancyBadgeV2\n\t}\n}\n\n\n// Register the component with the legacy tag name for backward compatibility\n@customElement('sch-badge')\nexport class ScBadgeV2 extends SchmancyBadgeV2 {}\n","import { SchmancyEvents } from '@schmancy/types/events'\nimport { BehaviorSubject, Subject, concatMap, delay, of, tap } from 'rxjs'\nimport { ComponentType } from '../area/router.types'\n\n// type DrawerAction = 'dismiss' | 'render' | 'push'\ntype TRef = Element | Window\ntype TRenderRequest = ComponentType\nexport type TRenderCustomEvent = CustomEvent<{\n\tcomponent: TRenderRequest\n\ttitle?: string\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\tprops?: Record<string, unknown>\n}>\n\nexport type DrawerPushOptions = {\n\tcomponent: ComponentType\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\tprops?: Record<string, unknown>\n}\n\ntype DrawerCommand =\n\t| { action: 'dismiss'; ref: TRef }\n\t| { action: 'render'; ref: TRef; component: TRenderRequest; title?: string }\n\t| { action: 'push'; ref: TRef; component: ComponentType; state?: Record<string, unknown>; params?: Record<string, unknown>; props?: Record<string, unknown> }\n\nclass DrawerService {\n\tprivate $drawer = new Subject<DrawerCommand>()\n\tprivate pushCounter = 0\n\tprivate isDismissing$ = new BehaviorSubject<boolean>(false)\n\n\tconstructor() {\n\t\t// Use concatMap to queue commands and process them sequentially\n\t\tthis.$drawer.pipe(\n\t\t\tconcatMap(command => {\n\t\t\t\tswitch (command.action) {\n\t\t\t\t\tcase 'dismiss':\n\t\t\t\t\t\treturn of(command).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tthis.isDismissing$.next(true)\n\t\t\t\t\t\t\t\tthis.dispatchToggleEvent(command.ref, 'close')\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t// Wait for dismiss animation (250ms from sheet.ts)\n\t\t\t\t\t\t\tdelay(300),\n\t\t\t\t\t\t\ttap(() => this.isDismissing$.next(false))\n\t\t\t\t\t\t)\n\t\t\t\t\tcase 'render':\n\t\t\t\t\t\treturn of(command).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tthis.dispatchToggleEvent(command.ref, 'open')\n\t\t\t\t\t\t\t\tthis.dispatchRenderEvent(command.ref, command.component, command.title)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\tcase 'push':\n\t\t\t\t\t\treturn of(command).pipe(\n\t\t\t\t\t\t\ttap(() => this.handlePush(command.ref, command.component, command.state, command.params, command.props))\n\t\t\t\t\t\t)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn of(null)\n\t\t\t\t}\n\t\t\t})\n\t\t).subscribe()\n\t}\n\n\tprivate dispatchToggleEvent(ref: TRef, state: 'open' | 'close') {\n\t\tref.dispatchEvent(\n\t\t\tnew CustomEvent(SchmancyEvents.ContentDrawerToggle, {\n\t\t\t\tdetail: { state },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t})\n\t\t)\n\t}\n\n\tprivate dispatchRenderEvent(\n\t\tref: TRef,\n\t\tcomponent: TRenderRequest,\n\t\ttitle?: string,\n\t\tstate?: Record<string, unknown>,\n\t\tparams?: Record<string, unknown>,\n\t\tprops?: Record<string, unknown>\n\t) {\n\t\tref.dispatchEvent(\n\t\t\tnew CustomEvent('schmancy-content-drawer-render', {\n\t\t\t\tdetail: { component, title, state, params, props },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t})\n\t\t)\n\t}\n\n\tdimiss(ref: TRef) {\n\t\tthis.$drawer.next({\n\t\t\taction: 'dismiss',\n\t\t\tref: ref,\n\t\t})\n\t}\n\n\trender(ref: TRef, component: TRenderRequest, title?: string) {\n\t\tref.dispatchEvent(new CustomEvent('custom-event'))\n\t\tthis.$drawer.next({\n\t\t\taction: 'render',\n\t\t\tref: ref,\n\t\t\tcomponent: component,\n\t\t\ttitle,\n\t\t})\n\t}\n\n\tprivate handlePush(\n\t\tref: TRef,\n\t\tcomponent: ComponentType,\n\t\tstate?: Record<string, unknown>,\n\t\tparams?: Record<string, unknown>,\n\t\tprops?: Record<string, unknown>\n\t) {\n\t\t// Auto-increment counter to make every push unique\n\t\t// Area router uses distinctUntilChanged on component+state+params+props\n\t\t// Without this, pushing same component with same props gets silently blocked\n\t\tconst enhancedState = {\n\t\t\t...state,\n\t\t\t_drawerPushId: ++this.pushCounter\n\t\t}\n\n\t\tthis.dispatchToggleEvent(ref, 'open')\n\t\tthis.dispatchRenderEvent(ref, component, undefined, enhancedState, params, props)\n\t}\n\n\t/**\n\t * Push a component to the content drawer\n\t * Every push is guaranteed to render (auto-incremented unique ID prevents deduplication)\n\t * @param options - Component configuration object with optional state/params/props\n\t * @example\n\t * schmancyContentDrawer.push({\n\t * component: myComponent,\n\t * props: { id: '123' }\n\t * })\n\t */\n\tpush(options: DrawerPushOptions): void {\n\t\tthis.$drawer.next({\n\t\t\taction: 'push',\n\t\t\tref: window,\n\t\t\t...options,\n\t\t})\n\t}\n}\n\nexport const schmancyContentDrawer = new DrawerService()","import { createContext } from '@lit/context'\nexport type TSchmancyContentDrawerSheetMode = 'push' | 'overlay'\nexport const SchmancyContentDrawerSheetMode = createContext<TSchmancyContentDrawerSheetMode>('push')\n\nexport type TSchmancyContentDrawerSheetState = 'open' | 'close'\nexport const SchmancyContentDrawerSheetState = createContext<TSchmancyContentDrawerSheetState>('close')\n\nexport const SchmancyContentDrawerID = createContext<string>(Math.floor(Math.random() * Date.now()).toString())\nexport const SchmancyContentDrawerMaxHeight = createContext<string>('100%')\nexport const SchmancyContentDrawerMinWidth = createContext<{\n\tmain: number\n\tsheet: number\n}>({})\n","import { provide } from '@lit/context'\nimport { $LitElement } from '@mixins/index'\nimport { css, html, nothing } from 'lit'\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'\nimport { debounceTime, distinctUntilChanged, fromEvent, map, merge, startWith, takeUntil, tap } from 'rxjs'\nimport { SchmancyEvents, TRenderCustomEvent, area, sheet } from '..'\nimport {\n\tSchmancyContentDrawerID,\n\tSchmancyContentDrawerMaxHeight,\n\tSchmancyContentDrawerMinWidth,\n\tSchmancyContentDrawerSheetMode,\n\tSchmancyContentDrawerSheetState,\n\tTSchmancyContentDrawerSheetMode,\n\tTSchmancyContentDrawerSheetState,\n} from './context'\n\n/**\n * @element schmancy-content-drawer\n * @slot appbar - The appbar slot\n * @slot - The content slot\n */\n@customElement('schmancy-content-drawer')\nexport class SchmancyContentDrawer extends $LitElement(css`\n\t:host {\n\t\tposition: relative;\n\t\tinset: 0;\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t}\n`) {\n\t/**\n\t * The minimum width of the sheet\n\t * @attr\tminWidth\n\t * @type {number}\n\t * @memberof SchmancyContentDrawer\n\t */\n\n\t@provide({ context: SchmancyContentDrawerMinWidth })\n\tminWidth: typeof SchmancyContentDrawerMinWidth.__context__ = {\n\t\tmain: 360,\n\t\tsheet: 576,\n\t}\n\n\t/**\n\t * The state of the sheet\n\t * @attr open\n\t * @type {TSchmancyContentDrawerSheetState}\n\t */\n\t@provide({ context: SchmancyContentDrawerSheetState })\n\t@property()\n\topen: TSchmancyContentDrawerSheetState\n\n\t/**\n\t * The mode of the sheet\n\t * @type {TSchmancyContentDrawerSheetMode}\n\t * @memberof SchmancyContentDrawer\n\t * @protected\n\t */\n\t@provide({ context: SchmancyContentDrawerSheetMode })\n\t@state()\n\tmode: TSchmancyContentDrawerSheetMode\n\n\t@provide({ context: SchmancyContentDrawerID })\n\tschmancyContentDrawerID = Math.floor(Math.random() * Date.now()).toString()\n\n\t@provide({ context: SchmancyContentDrawerMaxHeight })\n\tmaxHeight = '100%'\n\n\t@queryAssignedElements({ flatten: true })\n\tassignedElements!: HTMLElement[]\n\n\tfirstUpdated(): void {\n\t\tthis.setupResizeListener()\n\t\tthis.setupToggleListener()\n\t\tthis.setupRenderListener()\n\t}\n\n\tprivate setupResizeListener() {\n\t\tmerge(\n\t\t\tfromEvent<CustomEvent>(window, 'resize'),\n\t\t\tfromEvent<CustomEvent>(window, SchmancyEvents.ContentDrawerResize)\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tdebounceTime(100),\n\t\t\t\tmap(() => this.clientWidth || window.innerWidth),\n\t\t\t\tmap(width => width >= this.minWidth.main + this.minWidth.sheet),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(() => this.updateMaxHeight()),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t)\n\t\t\t.subscribe(isLargeScreen => this.updateMode(isLargeScreen))\n\t}\n\n\tprivate setupToggleListener() {\n\t\tfromEvent<CustomEvent>(window, SchmancyEvents.ContentDrawerToggle)\n\t\t\t.pipe(\n\t\t\t\ttap(event => event.stopPropagation()),\n\t\t\t\tmap(event => event.detail.state),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t)\n\t\t\t.subscribe(state => {\n\t\t\t\tthis.open = state\n\t\t\t})\n\t}\n\n\tprivate setupRenderListener() {\n\t\tfromEvent<TRenderCustomEvent>(window, 'schmancy-content-drawer-render')\n\t\t\t.pipe(\n\t\t\t\ttap(event => event.stopPropagation()),\n\t\t\t\tmap(event => event.detail),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t)\n\t\t\t.subscribe(detail => this.handleRender(detail))\n\t}\n\n\tprivate updateMaxHeight() {\n\t\tthis.maxHeight = `${window.innerHeight - this.getOffsetTop(this)}px`\n\t\tthis.style.setProperty('max-height', this.maxHeight)\n\t}\n\n\tprivate updateMode(isLargeScreen: boolean) {\n\t\tif (isLargeScreen) {\n\t\t\tthis.mode = 'push'\n\t\t\tthis.open = 'open'\n\t\t} else {\n\t\t\tthis.mode = 'overlay'\n\t\t\tthis.open = 'close'\n\t\t}\n\t}\n\n\tprivate handleRender(detail: TRenderCustomEvent['detail']) {\n\t\tif (this.mode === 'push') {\n\t\t\tarea.push({\n\t\t\t\tarea: this.schmancyContentDrawerID,\n\t\t\t\tcomponent: detail.component,\n\t\t\t\thistoryStrategy: 'silent',\n\t\t\t\tstate: detail.state,\n\t\t\t\tparams: detail.params,\n\t\t\t\tprops: detail.props,\n\t\t\t})\n\t\t} else if (this.mode === 'overlay') {\n\t\t\tsheet.open({\n\t\t\t\tcomponent: detail.component,\n\t\t\t\tuid: this.schmancyContentDrawerID,\n\t\t\t\tprops: detail.props,\n\t\t\t})\n\t\t}\n\t}\n\n\tgetOffsetTop(element: HTMLElement | null) {\n\t\tlet offsetTop = 0\n\t\twhile (element) {\n\t\t\toffsetTop += element.offsetTop\n\t\t\telement = element.offsetParent as HTMLElement | null\n\t\t}\n\t\treturn offsetTop\n\t}\n\n\tprotected render() {\n\t\tif (!this.mode || !this.open) return nothing\n\n\t\tconst gridClasses = [\n\t\t\t'grid h-full',\n\t\t\t'grid-flow-col auto-cols-max',\n\t\t\t'grid-rows-[1fr]',\n\t\t\t'justify-items-stretch items-stretch',\n\t\t\tthis.mode === 'overlay' ? 'grid-cols-[1fr]' : 'grid-cols-[auto_1fr]'\n\t\t].join(' ')\n\n\t\treturn html`\n\t\t\t<div class=${gridClasses}>\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-content-drawer': SchmancyContentDrawer\n\t}\n}\n","import { consume } from '@lit/context'\nimport { $LitElement } from '@mixins/index'\nimport { PropertyValueMap, css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyEvents } from '..'\nimport {\n\tSchmancyContentDrawerMaxHeight,\n\tSchmancyContentDrawerMinWidth,\n\tSchmancyContentDrawerSheetMode,\n\tTSchmancyContentDrawerSheetMode,\n} from './context'\nimport { when } from 'lit/directives/when.js'\n\n@customElement('schmancy-content-drawer-main')\nexport class SchmancyContentDrawerMain extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t}\n`) {\n\t@property({ type: Number })\n\tminWidth: number\n\n\t@consume({ context: SchmancyContentDrawerMinWidth, subscribe: true })\n\tdrawerMinWidth: typeof SchmancyContentDrawerMinWidth.__context__\n\n\t@consume({ context: SchmancyContentDrawerSheetMode, subscribe: true })\n\t@state()\n\tmode: TSchmancyContentDrawerSheetMode\n\n\t@consume({ context: SchmancyContentDrawerMaxHeight, subscribe: true })\n\t@state()\n\tmaxHeight: string\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tif (this.minWidth) this.drawerMinWidth.main = this.minWidth\n\t\telse this.minWidth = this.drawerMinWidth.main\n\t}\n\n\tprotected update(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n\t\tsuper.update(changedProperties)\n\t\tif (changedProperties.has('minWidth') && this.minWidth) {\n\t\t\tthis.drawerMinWidth.main = this.minWidth\n\t\t\tthis.dispatchEvent(new CustomEvent(SchmancyEvents.ContentDrawerResize, { bubbles: true, composed: true }))\n\t\t}\n\t}\n\n\trender() {\n\t\tconst styles = {\n\t\t\tminWidth: `${this.minWidth}px`,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\tconst gridClasses = [\n\t\t\t'grid h-full relative overflow-scroll',\n\t\t\t'grid-flow-col auto-cols-max',\n\t\t\t'grid-rows-[1fr]',\n\t\t\t'items-stretch justify-items-stretch',\n\t\t\tthis.mode === 'push' ? 'grid-cols-[auto_1fr]' : 'grid-cols-[1fr]'\n\t\t].join(' ')\n\n\t\treturn html`\n\t\t\t<section class=\"relative inset-0 h-full\">\n\t\t\t\t<div class=${gridClasses}>\n\t\t\t\t\t<section style=${this.styleMap(styles)}>\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</section>\n\t\t\t\t</div>\n\t\t\t\t${when(\n\t\t\t\t\tthis.mode === 'push',\n\t\t\t\t\t() => html` <schmancy-divider class=\"absolute right-0 top-0\" orientation=\"vertical\"></schmancy-divider>`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-content-drawer-main': SchmancyContentDrawerMain\n\t}\n}\n","import { consume } from '@lit/context'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { from, merge, Observable, of, takeUntil, tap } from 'rxjs'\nimport { SchmancyEvents, sheet } from '..'\nimport {\n\tSchmancyContentDrawerID,\n\tSchmancyContentDrawerMaxHeight,\n\tSchmancyContentDrawerMinWidth,\n\tSchmancyContentDrawerSheetMode,\n\tSchmancyContentDrawerSheetState,\n\tTSchmancyContentDrawerSheetMode,\n\tTSchmancyContentDrawerSheetState,\n} from './context'\n\n// --- 1) Removed the custom animate import\n// import { animate } from '@packages/anime-beta-master'\n\n@customElement('schmancy-content-drawer-sheet')\nexport class SchmancyContentDrawerSheet extends $LitElement(css`\n\t:host {\n\t\toverflow: scroll;\n\t}\n`) {\n\t@property({ type: Number })\n\tminWidth\n\n\t@consume({ context: SchmancyContentDrawerSheetMode, subscribe: true })\n\t@state()\n\tmode: TSchmancyContentDrawerSheetMode\n\n\t@consume({ context: SchmancyContentDrawerSheetState, subscribe: true })\n\t@state()\n\tstate: TSchmancyContentDrawerSheetState\n\n\t@consume({ context: SchmancyContentDrawerID })\n\tschmancyContentDrawerID\n\n\t@query('#sheet') sheet!: HTMLElement\n\t@queryAssignedElements({ flatten: true, slot: undefined }) defaultSlot!: HTMLElement[]\n\n\t@consume({ context: SchmancyContentDrawerMinWidth, subscribe: true })\n\tdrawerMinWidth: typeof SchmancyContentDrawerMinWidth.__context__\n\n\t@consume({ context: SchmancyContentDrawerMaxHeight, subscribe: true })\n\t@state()\n\tmaxHeight\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tif (this.minWidth) {\n\t\t\tthis.drawerMinWidth.sheet = this.minWidth\n\t\t} else {\n\t\t\tthis.minWidth = this.drawerMinWidth.sheet\n\t\t}\n\t}\n\n\tupdated(changedProperties: Map<string, any>) {\n\t\tsuper.updated(changedProperties)\n\t\tif (changedProperties.has('minWidth') && this.minWidth) {\n\t\t\t// If the 'minWidth' property changed\n\t\t\tthis.drawerMinWidth.sheet = this.minWidth\n\t\t\tthis.dispatchEvent(new CustomEvent(SchmancyEvents.ContentDrawerResize, { bubbles: true, composed: true }))\n\t\t} else if (changedProperties.has('state') || changedProperties.has('mode')) {\n\t\t\tif (this.mode === 'overlay') {\n\t\t\t\tif (this.state === 'close') {\n\t\t\t\t\tthis.closeAll()\n\t\t\t\t} else if (this.state === 'open') {\n\t\t\t\t\t// Overlay open logic if needed\n\t\t\t\t\t// this.open()\n\t\t\t\t}\n\t\t\t} else if (this.mode === 'push') {\n\t\t\t\tsheet.dismiss(this.schmancyContentDrawerID)\n\t\t\t\tif (this.state === 'close') {\n\t\t\t\t\tthis.closeAll()\n\t\t\t\t} else if (this.state === 'open') {\n\t\t\t\t\tthis.open()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Open the sheet by sliding it into view.\n\t */\n\topen() {\n\t\t// \"onBegin\" logic from the old `animate(...)`\n\t\tif (this.mode === 'overlay') {\n\t\t\tthis.sheet.style.position = 'fixed'\n\t\t} else {\n\t\t\tthis.sheet.style.position = 'relative'\n\t\t}\n\t\tthis.sheet.style.display = 'block'\n\n\t\t// --- 2) Use native Web Animations API ---\n\t\tthis.sheet.animate(\n\t\t\t[\n\t\t\t\t{ opacity: 0, transform: 'translateX(100%)' },\n\t\t\t\t{ opacity: 1, transform: 'translateX(0%)' },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: 250,\n\t\t\t\teasing: 'cubic-bezier(0.5, 0.01, 0.25, 1)',\n\t\t\t},\n\t\t)\n\t\t// No return is needed if you don't rely on the result\n\t}\n\n\t/**\n\t * Close everything (modal sheet + the sheet itself).\n\t */\n\tcloseAll() {\n\t\t// Merge them into a single subscription,\n\t\t// so that everything closes in parallel.\n\t\tmerge(from(this.closeModalSheet()), from(this.closeSheet())).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\t/**\n\t * Dismiss the \"modal sheet.\"\n\t * This just returns an Observable that completes immediately.\n\t */\n\tcloseModalSheet() {\n\t\treturn of(true).pipe(tap(() => sheet.dismiss(this.schmancyContentDrawerID)))\n\t}\n\n\t/**\n\t * Slide the sheet out of view + hide it.\n\t * Return an Observable so we can merge it with other close operations.\n\t */\n\tcloseSheet() {\n\t\t// --- 2) Use native Web Animations API and wrap in an Observable ---\n\t\treturn new Observable<void>(observer => {\n\t\t\tconst animation = this.sheet.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 1, transform: 'translateX(0%)' },\n\t\t\t\t\t{ opacity: 1, transform: 'translateX(100%)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 250,\n\t\t\t\t\teasing: 'cubic-bezier(0.5, 0.01, 0.25, 1)',\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tanimation.onfinish = () => {\n\t\t\t\t// \"onComplete\" logic\n\t\t\t\tthis.sheet.style.display = 'none'\n\t\t\t\tobserver.next()\n\t\t\t\tobserver.complete()\n\t\t\t}\n\t\t})\n\t}\n\n\tprotected render() {\n\t\tconst sheetClasses = {\n\t\t\t\"block h-full w-full\": this.mode === 'push',\n\t\t\t'absolute z-50': this.mode === 'overlay',\n\t\t\t'opacity-1': this.mode === 'overlay' && this.state === 'open',\n\t\t}\n\n\t\tconst styles = {\n\t\t\tminWidth: `${this.minWidth}px`,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"sheet\" class=\"${this.classMap(sheetClasses)}\" style=${this.styleMap(styles)}>\n\t\t\t\t<schmancy-area class=\"h-full w-full\" name=\"${this.schmancyContentDrawerID}\">\n\t\t\t\t\t<slot name=\"placeholder\"></slot>\n\t\t\t\t</schmancy-area>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-content-drawer-sheet': SchmancyContentDrawerSheet\n\t}\n}\n","import { SchmancyEvents } from '@schmancy/types/events'\nimport { debounceTime, Subject } from 'rxjs'\n\nclass Drawer {\n\tprivate $drawer = new Subject<{\n\t\tself: HTMLElement\n\t\tstate: boolean\n\t}>()\n\tconstructor() {\n\t\tthis.$drawer.pipe(debounceTime(10)).subscribe(data => {\n\t\t\tif (data.state) {\n\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\tnew CustomEvent(SchmancyEvents.NavDrawer_toggle, {\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tstate: 'open',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\tnew CustomEvent(SchmancyEvents.NavDrawer_toggle, {\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tstate: 'close',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n\topen(self?: HTMLElement) {\n\t\tthis.$drawer.next({\n\t\t\tself,\n\t\t\tstate: true,\n\t\t})\n\t}\n\tclose(self?: HTMLElement) {\n\t\tthis.$drawer.next({\n\t\t\tself,\n\t\t\tstate: false,\n\t\t})\n\t}\n}\n\nexport const schmancyNavDrawer = new Drawer()\nconst $drawer = schmancyNavDrawer\n\nexport { $drawer }\n","import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-nav-drawer-appbar\n * @slot - The default slot\n */\n@customElement('schmancy-nav-drawer-appbar')\nexport class SchmancyDrawerAppbar extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tmin-width: 0;\n\t}\n`) {\n\trender() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-nav-drawer-appbar': SchmancyDrawerAppbar\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport { fromEvent, takeUntil } from 'rxjs'\n\n@customElement('schmancy-nav-drawer-content')\nexport class SchmancyNavigationDrawerContent extends $LitElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tinset: 0;\n\t\toverflow-y: auto;\n\t}\n`) {\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(this, 'scroll')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(e => {\n\t\t\t\tthis.parentElement.dispatchEvent(new CustomEvent('scroll', { detail: e, bubbles: true, composed: true }))\n\t\t\t})\n\t}\n\trender() {\n\t\treturn html` <slot></slot> `\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-nav-drawer-content': SchmancyNavigationDrawerContent\n\t}\n}\n","import { createContext } from '@lit/context'\nexport type TSchmancyDrawerNavbarMode = 'push' | 'overlay' | undefined\nexport const SchmancyDrawerNavbarMode = createContext<TSchmancyDrawerNavbarMode>('push')\n\nexport type TSchmancyDrawerNavbarState = 'open' | 'close' | undefined\nexport const SchmancyDrawerNavbarState = createContext<TSchmancyDrawerNavbarState>('close')\n","import { provide } from '@lit/context'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { debounceTime, distinctUntilChanged, fromEvent, map, takeUntil, tap } from 'rxjs'\nimport { SchmancyEvents } from '..'\nimport {\n\tSchmancyDrawerNavbarMode,\n\tSchmancyDrawerNavbarState,\n\tTSchmancyDrawerNavbarMode,\n\tTSchmancyDrawerNavbarState,\n} from './context'\n\n/**\n * @element schmancy-nav-drawer\n * @slot - The content slot\n */\n@customElement('schmancy-nav-drawer')\nexport class SchmancyNavigationDrawer extends $LitElement(css`\n\t:host {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: auto 1fr;\n\t\tgrid-template-rows: 1fr;\n\t\tflex-grow: 1;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\t\t/* Initially hide the component until it's ready */\n\t\tvisibility: hidden;\n\t}\n\n\t:host([data-ready]) {\n\t\tvisibility: visible;\n\t}\n\n\t:host([fullscreen]) {\n\t\tgrid-template-columns: 1fr;\n\t}\n`) {\n\t@property({ type: Boolean, reflect: true })\n\tfullscreen: boolean = false\n\n\t/**\n\t * The breakpoint for the sidebar based on Tailwind CSS breakpoints.\n\t * Accepts: \"sm\", \"md\", \"lg\", or \"xl\".\n\t */\n\t@property({ type: String, attribute: 'breakpoint' })\n\tbreakpoint: 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\tprivate static BREAKPOINTS: Record<'sm' | 'md' | 'lg' | 'xl', number> = {\n\t\tsm: 640,\n\t\tmd: 768,\n\t\tlg: 1024,\n\t\txl: 1280,\n\t}\n\n\t@provide({ context: SchmancyDrawerNavbarMode })\n\t@state()\n\tmode: TSchmancyDrawerNavbarMode\n\n\t@provide({ context: SchmancyDrawerNavbarState })\n\t@property()\n\topen: TSchmancyDrawerNavbarState\n\n\tfirstUpdated() {\n\t\tthis.updateState(window.innerWidth)\n\t\tthis.setAttribute('data-ready', '')\n\n\t\tfromEvent(window, 'resize')\n\t\t\t.pipe(\n\t\t\t\tmap(event => (event.target as Window).innerWidth),\n\t\t\t\tmap(width => width >= SchmancyNavigationDrawer.BREAKPOINTS[this.breakpoint]),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\tdebounceTime(100),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(isLargeScreen => {\n\t\t\t\tif (isLargeScreen) {\n\t\t\t\t\tthis.mode = 'push'\n\t\t\t\t\tthis.open = 'open'\n\t\t\t\t} else {\n\t\t\t\t\tthis.mode = 'overlay'\n\t\t\t\t\tthis.open = 'close'\n\t\t\t\t}\n\t\t\t})\n\n\t\tfromEvent(window, 'fullscreen').pipe(\n\t\t\ttap((event: Event) => {\n\t\t\t\tconst customEvent = event as CustomEvent\n\t\t\t\tthis.fullscreen = customEvent.detail\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\n\t\tfromEvent(window, SchmancyEvents.NavDrawer_toggle)\n\t\t\t.pipe(\n\t\t\t\ttap((event: CustomEvent) => {\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t}),\n\t\t\t\tmap((event: CustomEvent) => event.detail.state),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdebounceTime(10),\n\t\t\t)\n\t\t\t.subscribe(state => {\n\t\t\t\t// Handle 'toggle' state\n\t\t\t\tif (state === 'toggle') {\n\t\t\t\t\tstate = this.open === 'open' ? 'close' : 'open'\n\t\t\t\t}\n\t\t\t\tif (this.mode === 'push' && state === 'close') return\n\t\t\t\tthis.open = state\n\t\t\t})\n\t}\n\n\tprivate updateState(width: number) {\n\t\tconst isLargeScreen = width >= SchmancyNavigationDrawer.BREAKPOINTS[this.breakpoint]\n\t\tthis.mode = isLargeScreen ? 'push' : 'overlay'\n\t\tthis.open = isLargeScreen ? 'open' : 'close'\n\t}\n\n\tprotected render() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-nav-drawer': SchmancyNavigationDrawer\n\t}\n}\n","import { consume } from '@lit/context'\nimport { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { SchmancyEvents, SchmancyTheme, color } from '..'\nimport {\n\tSchmancyDrawerNavbarMode,\n\tSchmancyDrawerNavbarState,\n\tTSchmancyDrawerNavbarMode,\n\tTSchmancyDrawerNavbarState,\n} from './context'\n\n// Animation configuration constants.\nconst ANIMATION_EASING = 'cubic-bezier(0.5, 0.01, 0.25, 1)'\nconst OVERLAY_ANIM_DURATION_OPEN = 200\nconst OVERLAY_ANIM_DURATION_CLOSE = 150\nconst NAV_ANIM_DURATION = 200\n\n@customElement('schmancy-nav-drawer-navbar')\nexport class SchmancyNavigationDrawerSidebar extends $LitElement() {\n\t// Consume context values. Renamed from \"state\" to \"drawerState\" to avoid confusion.\n\t@consume({ context: SchmancyDrawerNavbarMode, subscribe: true })\n\t@state()\n\tmode!: TSchmancyDrawerNavbarMode\n\n\t@consume({ context: SchmancyDrawerNavbarState, subscribe: true })\n\t@state()\n\tdrawerState!: TSchmancyDrawerNavbarState\n\n\t@query('#overlay') overlay!: HTMLElement\n\t@query('nav') nav!: HTMLElement\n\n\t@property({ type: String }) width = '220px'\n\t@state() private _initialized = false\n\n\t/**\n\t * firstUpdated()\n\t * Set initial styles based on the current mode and consumed state.\n\t */\n\tfirstUpdated() {\n\t\tif (this.mode === 'overlay') {\n\t\t\tif (this.drawerState === 'close') {\n\t\t\t\tthis.nav.style.transform = 'translateX(-100%)'\n\t\t\t\tthis.overlay.style.display = 'none'\n\t\t\t} else if (this.drawerState === 'open') {\n\t\t\t\tthis.nav.style.transform = 'translateX(0)'\n\t\t\t\tthis.overlay.style.display = 'block'\n\t\t\t\tthis.overlay.style.opacity = '0.4'\n\t\t\t}\n\t\t} else if (this.mode === 'push') {\n\t\t\t// In push mode, the nav is always visible and the overlay hidden.\n\t\t\tthis.nav.style.transform = 'translateX(0)'\n\t\t\tthis.overlay.style.display = 'none'\n\t\t}\n\t\tthis._initialized = true\n\t}\n\n\t/**\n\t * updated()\n\t * Trigger animations when either the consumed mode or state changes.\n\t */\n\tupdated(changedProperties: Map<string, any>) {\n\t\tif (!this._initialized) return\n\n\t\tif (changedProperties.has('drawerState') || changedProperties.has('mode')) {\n\t\t\tif (this.mode === 'overlay') {\n\t\t\t\tif (this.drawerState === 'open') {\n\t\t\t\t\t// Animate only if the nav isn’t already open.\n\t\t\t\t\tif (this.nav.style.transform !== 'translateX(0)') {\n\t\t\t\t\t\tthis.openOverlay()\n\t\t\t\t\t\tthis.showNavDrawer()\n\t\t\t\t\t}\n\t\t\t\t} else if (this.drawerState === 'close') {\n\t\t\t\t\tif (this.nav.style.transform !== 'translateX(-100%)') {\n\t\t\t\t\t\tthis.hideNavDrawer()\n\t\t\t\t\t\tthis.closeOverlay()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (this.mode === 'push') {\n\t\t\t\tif (this.nav.style.transform !== 'translateX(0)') {\n\t\t\t\t\tthis.showNavDrawer()\n\t\t\t\t}\n\t\t\t\tif (this.overlay.style.display !== 'none') {\n\t\t\t\t\tthis.closeOverlay()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Animate the overlay to fade in.\n\t */\n\topenOverlay() {\n\t\tthis.overlay.style.display = 'block'\n\t\tthis.overlay.animate([{ opacity: 0 }, { opacity: 0.4 }], {\n\t\t\tduration: OVERLAY_ANIM_DURATION_OPEN,\n\t\t\teasing: ANIMATION_EASING,\n\t\t\tfill: 'forwards',\n\t\t})\n\t}\n\n\t/**\n\t * Animate the overlay to fade out, then hide it.\n\t */\n\tcloseOverlay() {\n\t\tconst animation = this.overlay.animate([{ opacity: 0.4 }, { opacity: 0 }], {\n\t\t\tduration: OVERLAY_ANIM_DURATION_CLOSE,\n\t\t\teasing: ANIMATION_EASING,\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tanimation.onfinish = () => {\n\t\t\tthis.overlay.style.display = 'none'\n\t\t}\n\t}\n\tshowNavDrawer() {\n\t\t// Use computed style if needed, but here we directly update inline style after animation.\n\t\tconst animation = this.nav.animate([{ transform: 'translateX(-100%)' }, { transform: 'translateX(0)' }], {\n\t\t\tduration: NAV_ANIM_DURATION,\n\t\t\teasing: ANIMATION_EASING,\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tanimation.onfinish = () => {\n\t\t\tthis.nav.style.transform = 'translateX(0)'\n\t\t}\n\t}\n\n\thideNavDrawer() {\n\t\tconst animation = this.nav.animate([{ transform: 'translateX(0)' }, { transform: 'translateX(-100%)' }], {\n\t\t\tduration: NAV_ANIM_DURATION,\n\t\t\teasing: ANIMATION_EASING,\n\t\t\tfill: 'forwards',\n\t\t})\n\t\tanimation.onfinish = () => {\n\t\t\tthis.nav.style.transform = 'translateX(-100%)'\n\t\t}\n\t}\n\n\t/**\n\t * Handle overlay click events by dispatching a custom event\n\t * to close the navigation drawer.\n\t */\n\tprivate handleOverlayClick() {\n\t\twindow.dispatchEvent(\n\t\t\tnew CustomEvent(SchmancyEvents.NavDrawer_toggle, {\n\t\t\t\tdetail: { state: 'close' },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected render() {\n\t\tconst sidebarClasses = {\n\t\t\t'max-w-[360px] w-fit h-full overflow-auto': true,\n\t\t\tblock: this.mode === 'push',\n\t\t\t'fixed inset-0 z-50': this.mode === 'overlay',\n\t\t}\n\t\tconst overlayClass = {\n\t\t\t'fixed inset-0 z-49 hidden': true,\n\t\t}\n\t\tconst styleMap = {\n\t\t\twidth: this.width,\n\t\t}\n\n\t\treturn html`\n\t\t\t<nav\n\t\t\t\tstyle=${this.styleMap(styleMap)}\n\t\t\t\tclass=\"${this.classMap({ ...sidebarClasses })}\"\n\t\t\t\t${color({\n\t\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.containerLowest,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<slot></slot>\n\t\t\t</nav>\n\t\t\t<div\n\t\t\t\tid=\"overlay\"\n\t\t\t\t${color({\n\t\t\t\t\tbgColor: SchmancyTheme.sys.color.scrim,\n\t\t\t\t})}\n\t\t\t\t@click=${this.handleOverlayClick}\n\t\t\t\tclass=\"${this.classMap({ ...overlayClass })}\"\n\t\t\t></div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-nav-drawer-navbar': SchmancyNavigationDrawerSidebar\n\t}\n}\n","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { color } from '@schmancy/directives'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTheme } from '..'\nimport { BehaviorSubject, fromEvent, merge, timer } from 'rxjs'\nimport { takeUntil, tap, filter } from 'rxjs/operators'\n\n/**\n * `<schmancy-navigation-bar-item>` component\n *\n * Individual navigation item for use within a navigation bar.\n * Represents a single destination with an icon and optional label following Material Design 3 specifications.\n *\n * @element schmancy-navigation-bar-item\n * @slot icon - Slot for custom icon content\n * @slot - Default slot for custom content\n *\n * @fires bar-item-click - When the item is clicked\n * @fires focus - When the item receives focus\n * @fires blur - When the item loses focus\n *\n * @example\n * <schmancy-navigation-bar-item icon=\"home\" label=\"Home\" active></schmancy-navigation-bar-item>\n *\n * @example\n * <schmancy-navigation-bar-item label=\"Custom\">\n * <span slot=\"icon\">🏠</span>\n * </schmancy-navigation-bar-item>\n */\n@customElement('schmancy-navigation-bar-item')\nexport class SchmancyNavigationBarItem extends TailwindElement(css`\n\t:host {\n\t\tdisplay: flex;\n\t\tflex: 1;\n\t\tmin-width: 48px;\n\t\tmax-width: 168px;\n\t\tuser-select: none;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t}\n\n\tbutton {\n\t\tfont-family: inherit;\n\t\tborder: none;\n\t\tbackground: none;\n\t\twidth: 100%;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\ttext-align: center;\n\t\tcolor: inherit;\n\t}\n\n\tbutton:focus {\n\t\toutline: none;\n\t}\n\n\tbutton:focus-visible {\n\t\toutline: 2px solid var(--focus-color);\n\t\toutline-offset: 2px;\n\t\tborder-radius: 8px;\n\t}\n\n\t/* Ripple animation */\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n\n\t.ripple-effect {\n\t\tposition: absolute;\n\t\tborder-radius: 50%;\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tbackground-color: currentColor;\n\t\topacity: 0.25;\n\t\tanimation: ripple 0.6s ease-out;\n\t\tpointer-events: none;\n\t}\n`) {\n\t/**\n\t * Icon name for the navigation item (Material Symbols Outlined)\n\t */\n\t@property({ type: String })\n\ticon = ''\n\n\t/**\n\t * Label text for the navigation item\n\t */\n\t@property({ type: String })\n\tlabel = ''\n\n\t/**\n\t * Badge content (can be a number or short text)\n\t */\n\t@property({ type: String })\n\tbadge = ''\n\n\t/**\n\t * Observable for active state\n\t */\n\tprivate active$ = new BehaviorSubject<boolean>(false)\n\n\t/**\n\t * Whether this item is currently active/selected\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tget active() { return this.active$.value }\n\tset active(value: boolean) { this.active$.next(value) }\n\n\t/**\n\t * Whether this item is disabled\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled = false\n\n\t/**\n\t * Whether to hide labels (controlled by parent navigation bar)\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\thideLabels = false\n\n\t/**\n\t * Track ripple effects\n\t */\n\t@state()\n\tprivate ripples: { x: number; y: number; id: number }[] = []\n\n\t/**\n\t * Add ripple effect (immediate, no debounce)\n\t */\n\tprivate addRippleEffect = (event: MouseEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Find the icon indicator div for ripple positioning\n\t\tconst indicatorDiv = this.shadowRoot?.querySelector('.w-16.h-8')\n\t\tif (indicatorDiv) {\n\t\t\tconst rect = indicatorDiv.getBoundingClientRect()\n\t\t\tconst ripple = {\n\t\t\t\tx: event.clientX - rect.left,\n\t\t\t\ty: event.clientY - rect.top,\n\t\t\t\tid: Date.now()\n\t\t\t}\n\t\t\tthis.ripples = [...this.ripples, ripple]\n\n\t\t\t// Remove ripple after animation\n\t\t\ttimer(600).pipe(\n\t\t\t\ttap(() => {\n\t\t\t\t\tthis.ripples = this.ripples.filter(r => r.id !== ripple.id)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting)\n\t\t\t).subscribe()\n\t\t}\n\t}\n\n\t/**\n\t * Handle click events with RxJS\n\t */\n\tprivate handleClick = (event: MouseEvent) => {\n\t\tif (this.disabled) {\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t\treturn\n\t\t}\n\n\t\t// Add ripple immediately\n\t\tthis.addRippleEffect(event)\n\n\t\t// Navigation event is handled in connectedCallback\n\t}\n\n\t/**\n\t * Handle keyboard events for accessibility (non-Enter/Space keys)\n\t */\n\tprivate handleKeyDown = (event: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Enter and Space are handled by the RxJS stream\n\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\tevent.preventDefault()\n\t\t\t// Keyboard activation is handled in connectedCallback\n\t\t}\n\t}\n\n\t/**\n\t * Method called by parent to set active state\n\t */\n\tsetActive(isActive: boolean) {\n\t\tthis.active = isActive\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Subscribe to active state changes\n\t\tthis.active$.pipe(\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe(() => {\n\t\t\tthis.requestUpdate()\n\t\t})\n\n\t\t// Set up navigation event stream\n\t\tthis.setupNavigationStream()\n\t}\n\n\t/**\n\t * Set up RxJS stream for navigation events\n\t */\n\tprivate setupNavigationStream() {\n\t\tconst button = this.shadowRoot?.querySelector('button')\n\t\tif (!button) return\n\n\t\t// Create click stream\n\t\tconst click$ = fromEvent<MouseEvent>(button, 'click').pipe(\n\t\t\tfilter(() => !this.disabled)\n\t\t)\n\n\t\t// Create keyboard activation stream (Enter/Space)\n\t\tconst keyActivation$ = fromEvent<KeyboardEvent>(button, 'keydown').pipe(\n\t\t\tfilter(() => !this.disabled),\n\t\t\tfilter(event => event.key === 'Enter' || event.key === ' '),\n\t\t\ttap(event => event.preventDefault())\n\t\t)\n\n\t\t// Merge click and keyboard streams for instant navigation\n\t\tmerge(click$, keyActivation$).pipe(\n\t\t\ttap(() => {\n\t\t\t\t// Dispatch navigation event\n\t\t\t\tthis.dispatchEvent(new CustomEvent('bar-item-click', {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tlabel: this.label,\n\t\t\t\t\t\tactive: this.active\n\t\t\t\t\t},\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\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\t/**\n\t * Format badge content for display\n\t */\n\tprivate formatBadge(badge: string): string {\n\t\t// Convert to number if possible\n\t\tconst num = Number(badge)\n\t\tif (!isNaN(num)) {\n\t\t\t// Show 99+ for large numbers\n\t\t\treturn num > 99 ? '99+' : String(num)\n\t\t}\n\t\t// For text badges, limit to 3 characters\n\t\treturn badge.slice(0, 3)\n\t}\n\n\tprotected firstUpdated() {\n\t\t// Set up navigation stream after first render when button is available\n\t\tthis.setupNavigationStream()\n\t}\n\n\tprotected render() {\n\t\tconst hasSlotContent = this.querySelector('[slot]') || (this.textContent?.trim() && !this.label)\n\t\tconst badgeText = this.badge ? this.formatBadge(this.badge) : ''\n\t\tconst showBadgeText = badgeText && badgeText !== '0'\n\n\t\t// Check for custom icon slot content\n\t\tconst hasCustomIcon = this.querySelector('[slot=\"icon\"]')\n\n\t\t// Main container classes - now the clickable area\n\t\tconst containerClasses = {\n\t\t\t'relative flex flex-col items-center justify-center': true,\n\t\t\t'flex-1 min-w-[48px] max-w-[168px]': true, // Fill available space\n\t\t\t'py-2 px-1 cursor-pointer': !this.disabled,\n\t\t\t'transition-all duration-200': true,\n\t\t\t'hover:bg-surface-containerHigh': !this.disabled && !this.active,\n\t\t\t'cursor-not-allowed opacity-38': this.disabled,\n\t\t\t'outline-none': true,\n\t\t\t'focus-visible:outline-2 focus-visible:outline-offset-2': true\n\t\t}\n\n\t\t// Icon indicator - just visual, not clickable\n\t\tconst indicatorClasses = {\n\t\t\t'w-16 h-8 rounded-2xl': true,\n\t\t\t'flex items-center justify-center': true,\n\t\t\t'transition-all duration-200': true,\n\t\t\t'bg-secondary-container': this.active,\n\t\t\t'group-hover:bg-surface-containerHighest': !this.active && !this.disabled,\n\t\t\t'relative overflow-hidden': true\n\t\t}\n\n\t\tconst labelClasses = {\n\t\t\t'text-xs font-medium leading-4 mt-1': true,\n\t\t\t'text-center max-w-full': true,\n\t\t\t'overflow-hidden text-ellipsis whitespace-nowrap': true,\n\t\t\t'transition-all duration-200': true\n\t\t}\n\n\t\tconst badgeClasses = {\n\t\t\t'absolute top-0 right-3': true,\n\t\t\t'min-w-[6px] h-1.5': !showBadgeText,\n\t\t\t'min-w-[16px] h-4': showBadgeText,\n\t\t\t'rounded-full': !showBadgeText,\n\t\t\t'rounded-lg': showBadgeText,\n\t\t\t'flex items-center justify-center': showBadgeText,\n\t\t\t'px-1': showBadgeText,\n\t\t\t'transition-all duration-200': true,\n\t\t\t'z-10': true\n\t\t}\n\n\t\t// Determine colors\n\t\tconst containerColors = this.active\n\t\t\t? {\n\t\t\t\t\tcolor: SchmancyTheme.sys.color.secondary.onContainer\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\tcolor: SchmancyTheme.sys.color.surface.onVariant\n\t\t\t }\n\n\t\t// Set CSS variables for focus state\n\t\tconst styleVars = {\n\t\t\t'--focus-color': SchmancyTheme.sys.color.primary.default\n\t\t}\n\n\t\treturn html`\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=${this.classMap(containerClasses)}\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\taria-pressed=${this.active}\n\t\t\t\taria-label=${this.label || 'Navigation item'}\n\t\t\t\tstyle=${this.styleMap({\n\t\t\t\t\t...styleVars,\n\t\t\t\t\t'outline-color': 'var(--focus-color)'\n\t\t\t\t})}\n\t\t\t\t${color(containerColors)}\n\t\t\t>\n\t\t\t\t<!-- Icon with indicator background -->\n\t\t\t\t<div class=${this.classMap(indicatorClasses)}>\n\t\t\t\t\t<!-- Ripple effects -->\n\t\t\t\t\t${this.ripples.map(\n\t\t\t\t\t\tripple => html`\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"ripple-effect\"\n\t\t\t\t\t\t\t\tstyle=${this.styleMap({\n\t\t\t\t\t\t\t\t\tleft: `${ripple.x}px`,\n\t\t\t\t\t\t\t\t\ttop: `${ripple.y}px`,\n\t\t\t\t\t\t\t\t\ttransform: 'translate(-50%, -50%)'\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t`\n\t\t\t\t\t)}\n\n\t\t\t\t\t${hasCustomIcon\n\t\t\t\t\t\t? html`<slot name=\"icon\"></slot>`\n\t\t\t\t\t\t: this.icon\n\t\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t\t<schmancy-icon\n\t\t\t\t\t\t\t\t\t\t.fill=${this.active ? 1 : 0}\n\t\t\t\t\t\t\t\t\t\tclass=\"relative z-10 flex items-center justify-center transition-all duration-200\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"--schmancy-icon-size: 24px;\"\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t${this.icon}\n\t\t\t\t\t\t\t\t\t</schmancy-icon>\n\t\t\t\t\t\t\t `\n\t\t\t\t\t\t\t: hasSlotContent\n\t\t\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Label below icon -->\n\t\t\t\t${!this.hideLabels && this.label ? html`\n\t\t\t\t\t<span class=${this.classMap(labelClasses)}>${this.label}</span>\n\t\t\t\t` : ''}\n\n\t\t\t\t<!-- Badge -->\n\t\t\t\t${showBadgeText ? html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=${this.classMap(badgeClasses)}\n\t\t\t\t\t\taria-label=\"${badgeText} notifications\"\n\t\t\t\t\t\t${color({\n\t\t\t\t\t\t\tbgColor: SchmancyTheme.sys.color.error.default,\n\t\t\t\t\t\t\tcolor: SchmancyTheme.sys.color.error.on\n\t\t\t\t\t\t})}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"text-[10px] font-medium leading-none\">${badgeText}</span>\n\t\t\t\t\t</span>\n\t\t\t\t` : this.badge ? html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=${this.classMap(badgeClasses)}\n\t\t\t\t\t\taria-label=\"Has notifications\"\n\t\t\t\t\t\t${color({\n\t\t\t\t\t\t\tbgColor: SchmancyTheme.sys.color.error.default\n\t\t\t\t\t\t})}\n\t\t\t\t\t></span>\n\t\t\t\t` : ''}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-navigation-bar-item': SchmancyNavigationBarItem\n\t}\n}","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { color } from '@schmancy/directives'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyEvents, SchmancyTheme } from '..'\nimport { BehaviorSubject, fromEvent, Subject } from 'rxjs'\nimport { takeUntil, throttleTime, tap, pairwise, map, filter } from 'rxjs/operators'\nimport type { SchmancyNavigationBarItem } from './navigation-bar-item'\nimport { theme } from '../theme/theme.service'\n\n/** Height of the navigation bar in pixels */\nconst NAV_BAR_HEIGHT = 80\n\n/** Mobile breakpoint - matches md: in Tailwind (max-width for mobile) */\nconst MOBILE_BREAKPOINT = '(max-width: 767px)'\n\n/**\n * `<schmancy-navigation-bar>` component\n *\n * A horizontal navigation component following Material Design 3 specifications.\n * Navigation bars provide access to between 3-7 primary destinations.\n * Automatically hides in fullscreen mode when triggered via schmancyTheme.next({ fullscreen: true }).\n *\n * **IMPORTANT**: This component includes `z-10` by default (consistent with navigation-rail).\n * The consumer is responsible for positioning the navigation bar in their layout.\n * For typical bottom-fixed positioning, add: `class=\"fixed bottom-0 left-0 right-0\"`.\n *\n * @element schmancy-navigation-bar\n * @slot - Default slot for navigation bar items\n *\n * @fires navigation-change - When an item is selected\n *\n * @example\n * <!-- Fixed at bottom (typical usage) -->\n * <schmancy-navigation-bar activeIndex=\"0\" class=\"fixed bottom-0 left-0 right-0\">\n * <schmancy-navigation-bar-item icon=\"home\" label=\"Home\"></schmancy-navigation-bar-item>\n * <schmancy-navigation-bar-item icon=\"search\" label=\"Search\"></schmancy-navigation-bar-item>\n * <schmancy-navigation-bar-item icon=\"favorite\" label=\"Favorites\"></schmancy-navigation-bar-item>\n * <schmancy-navigation-bar-item icon=\"settings\" label=\"Settings\"></schmancy-navigation-bar-item>\n * </schmancy-navigation-bar>\n *\n * @example\n * <!-- Within a container (demo/mockup usage) -->\n * <div class=\"flex flex-col h-screen\">\n * <main class=\"flex-1\">Content</main>\n * <schmancy-navigation-bar activeIndex=\"0\">\n * <schmancy-navigation-bar-item icon=\"home\" label=\"Home\"></schmancy-navigation-bar-item>\n * </schmancy-navigation-bar>\n * </div>\n */\n@customElement('schmancy-navigation-bar')\nexport class SchmancyNavigationBar extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\ttransition: transform 0.3s ease-in-out;\n\t}\n\n\t:host([hide-on-scroll]) {\n\t\ttransition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n\t}\n\n\t/* Support 3-7 items with equal distribution */\n\t::slotted(schmancy-navigation-bar-item) {\n\t\tflex: 1;\n\t\tmax-width: 168px; /* Prevent items from being too wide */\n\t}\n\n\t/* Accessibility focus indicators */\n\t:host(:focus-within) {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary);\n\t\toutline-offset: -2px;\n\t}\n`) {\n\t/**\n\t * Observable for active index state\n\t */\n\tprivate activeIndex$ = new BehaviorSubject<number>(-1)\n\n\t/**\n\t * Currently active item index\n\t * @default -1\n\t */\n\t@property({ type: Number })\n\tget activeIndex() { return this.activeIndex$.value }\n\tset activeIndex(value: number) { this.activeIndex$.next(value) }\n\n\t/**\n\t * Hide labels and show only icons\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\thideLabels = false\n\n\t/**\n\t * Elevation level for the navigation bar\n\t * @default 2\n\t */\n\t@property({ type: Number, reflect: true })\n\televation = 2\n\n\t/**\n\t * Hide navigation bar on scroll down, show on scroll up\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\thideOnScroll = false\n\n\n\t/**\n\t * Current focused item index for keyboard navigation\n\t */\n\t@state()\n\tprivate focusedIndex = -1\n\n\t/**\n\t * Whether the navigation bar is hidden due to scrolling\n\t */\n\t@state()\n\tprivate isHiddenByScroll = false\n\n\t/**\n\t * Whether the navigation bar is hidden due to fullscreen mode\n\t */\n\t@state()\n\tprivate isFullscreen = false\n\n\t/**\n\t * Get all navigation bar items from the slot\n\t */\n\tprivate getItems(): SchmancyNavigationBarItem[] {\n\t\tconst slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement | null\n\t\tif (!slot) return []\n\t\treturn slot.assignedElements({ flatten: true })\n\t\t\t.filter((el): el is SchmancyNavigationBarItem =>\n\t\t\t\tel.tagName.toLowerCase() === 'schmancy-navigation-bar-item'\n\t\t\t)\n\t}\n\n\t/**\n\t * Minimum scroll threshold before triggering hide/show\n\t */\n\tprivate readonly SCROLL_THRESHOLD = 10\n\n\t/**\n\t * Media query for mobile detection\n\t */\n\tprivate mobileMediaQuery: MediaQueryList | null = null\n\n\t/**\n\t * Subject to track visibility state changes\n\t */\n\tprivate visibility$ = new Subject<boolean>()\n\n\t/**\n\t * Check if on mobile viewport\n\t */\n\tprivate isMobileViewport(): boolean {\n\t\treturn this.mobileMediaQuery?.matches ?? false\n\t}\n\n\t/**\n\t * Update bottom offset for schmancy-page/fullHeight consumers\n\t */\n\tprivate updateBottomOffset() {\n\t\tconst shouldSetOffset = !this.isFullscreen && this.isMobileViewport()\n\t\ttheme.setBottomOffset(shouldSetOffset ? NAV_BAR_HEIGHT : 0)\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Set up mobile media query\n\t\tthis.mobileMediaQuery = window.matchMedia(MOBILE_BREAKPOINT)\n\n\t\t// Listen to viewport changes\n\t\tfromEvent<MediaQueryListEvent>(this.mobileMediaQuery, 'change').pipe(\n\t\t\ttap(() => this.updateBottomOffset()),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\n\t\t// Subscribe to fullscreen observable\n\t\ttheme.fullscreen$.pipe(\n\t\t\ttap(isFullscreen => {\n\t\t\t\tthis.isFullscreen = isFullscreen\n\t\t\t\tthis.visibility$.next(!this.isFullscreen && !this.isHiddenByScroll)\n\t\t\t\tthis.updateBottomOffset()\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\n\t\t// Initial offset update\n\t\tthis.updateBottomOffset()\n\n\t\t// Listen to bar-item-click events using RxJS\n\t\tfromEvent(this, 'bar-item-click').pipe(\n\t\t\ttap((event: Event) => this.handleItemClick(event as CustomEvent)),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\n\t\t// Listen to keydown events using RxJS\n\t\tfromEvent(this, 'keydown').pipe(\n\t\t\ttap((event: Event) => this.handleKeyDown(event as KeyboardEvent)),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\n\t\t// Subscribe to active index changes\n\t\tthis.activeIndex$.pipe(\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe(index => {\n\t\t\tthis.updateActiveStates(index)\n\t\t})\n\n\t\t// Set up scroll listener if hideOnScroll is enabled\n\t\tif (this.hideOnScroll) {\n\t\t\tthis.setupScrollListener()\n\t\t}\n\n\t\tthis.updateItems()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\t// Clear offset when nav bar is removed\n\t\ttheme.setBottomOffset(0)\n\t\tthis.mobileMediaQuery = null\n\t}\n\n\t/**\n\t * Set up RxJS-based scroll listener\n\t */\n\tprivate setupScrollListener() {\n\t\t// Create scroll observable\n\t\tfromEvent(window, 'scroll').pipe(\n\t\t\tthrottleTime(100), // Throttle for performance\n\t\t\tmap(() => window.scrollY),\n\t\t\tpairwise(), // Get pairs of [previous, current] scroll positions\n\t\t\tfilter(([prev, curr]) => Math.abs(curr - prev) > this.SCROLL_THRESHOLD), // Only react if scrolled enough\n\t\t\ttap(([prev, curr]) => {\n\t\t\t\tconst scrollingDown = curr > prev\n\t\t\t\tconst scrollingUp = curr < prev\n\t\t\t\tconst previousHiddenState = this.isHiddenByScroll\n\n\t\t\t\t// Hide when scrolling down, show when scrolling up\n\t\t\t\tif (scrollingDown && !this.isHiddenByScroll) {\n\t\t\t\t\tthis.isHiddenByScroll = true\n\t\t\t\t} else if (scrollingUp && this.isHiddenByScroll) {\n\t\t\t\t\tthis.isHiddenByScroll = false\n\t\t\t\t}\n\n\t\t\t\t// Always show when near top\n\t\t\t\tif (curr <= this.SCROLL_THRESHOLD) {\n\t\t\t\t\tthis.isHiddenByScroll = false\n\t\t\t\t}\n\n\t\t\t\t// Update visibility if scroll state changed\n\t\t\t\tif (previousHiddenState !== this.isHiddenByScroll) {\n\t\t\t\t\tthis.visibility$.next(!this.isHiddenByScroll && !this.isFullscreen)\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\n\t/**\n\t * Handle item click events\n\t */\n\tprivate handleItemClick = (event: CustomEvent) => {\n\t\tconst items = this.getItems()\n\t\tconst clickedItem = event.target as HTMLElement\n\t\tconst index = items.indexOf(clickedItem as any)\n\n\t\tif (index === -1) return\n\n\t\t// Clicking the already-active item toggles the sidebar\n\t\tif (this.activeIndex === index) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(SchmancyEvents.NavDrawer_toggle, {\n\t\t\t\t\tdetail: { state: 'toggle' },\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\treturn\n\t\t}\n\n\t\tconst oldIndex = this.activeIndex\n\t\t// Setting activeIndex will trigger the BehaviorSubject\n\t\tthis.activeIndex = index\n\n\t\t// Emit navigation change event\n\t\tthis.dispatchEvent(new CustomEvent('navigation-change', {\n\t\t\tdetail: {\n\t\t\t\toldIndex,\n\t\t\t\tnewIndex: index,\n\t\t\t\titem: clickedItem\n\t\t\t},\n\t\t\tbubbles: true,\n\t\t\tcomposed: true\n\t\t}))\n\t}\n\n\t/**\n\t * Handle keyboard navigation\n\t */\n\tprivate handleKeyDown = (event: KeyboardEvent) => {\n\t\tconst items = this.getItems()\n\t\tconst currentIndex = this.focusedIndex === -1 ? this.activeIndex : this.focusedIndex\n\n\t\tswitch (event.key) {\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (currentIndex > 0) {\n\t\t\t\t\tthis.focusItem(currentIndex - 1)\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase 'ArrowRight':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (currentIndex < items.length - 1) {\n\t\t\t\t\tthis.focusItem(currentIndex + 1)\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase 'Home':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.focusItem(0)\n\t\t\t\tbreak\n\n\t\t\tcase 'End':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.focusItem(items.length - 1)\n\t\t\t\tbreak\n\n\t\t\tcase 'Enter':\n\t\t\tcase ' ':\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (this.focusedIndex !== -1) {\n\t\t\t\t\tconst item = items[this.focusedIndex] as any\n\t\t\t\t\titem?.click()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t/**\n\t * Focus a specific item by index\n\t */\n\tprivate focusItem(index: number) {\n\t\tconst items = this.getItems()\n\t\tif (items[index]) {\n\t\t\tthis.focusedIndex = index\n\t\t\t;(items[index] as HTMLElement).focus()\n\t\t}\n\t}\n\n\t/**\n\t * Update the list of navigation items\n\t */\n\tprivate updateItems() {\n\t\tconst slot = this.shadowRoot?.querySelector('slot')\n\t\tif (slot) {\n\t\t\tconst handleSlotChange = () => {\n\t\t\t\t// Update active states when slot content changes\n\t\t\t\tthis.updateActiveStates(this.activeIndex)\n\t\t\t}\n\t\t\tslot.addEventListener('slotchange', handleSlotChange)\n\t\t\thandleSlotChange() // Initial update\n\t\t}\n\t}\n\n\n\t/**\n\t * Add a boat item to the navigation bar\n\t * @param config Configuration for the boat item\n\t * @returns The created or existing navigation bar item element\n\t */\n\tpublic addBoatItem(config: { id: string; title: string; icon?: string }) {\n\t\t// Check if item already exists\n\t\tconst existingItem = this.querySelector(`[value=\"${config.id}\"]`) as HTMLElement\n\t\tif (existingItem) {\n\t\t\t// Item already exists, just return it\n\t\t\treturn existingItem\n\t\t}\n\n\t\t// Create new item\n\t\tconst item = document.createElement('schmancy-navigation-bar-item')\n\t\titem.setAttribute('value', config.id)\n\t\titem.innerHTML = `\n\t\t\t<schmancy-icon>${config.icon || 'widgets'}</schmancy-icon>\n\t\t\t<span>${config.title}</span>\n\t\t`\n\t\tthis.appendChild(item)\n\t\treturn item\n\t}\n\n\t/**\n\t * Update active states on all items\n\t */\n\tprivate updateActiveStates(activeIndex: number) {\n\t\tconst items = this.getItems()\n\t\titems.forEach((item, index) => {\n\t\t\tconst navItem = item as any\n\t\t\t// Use setActive method to trigger item's reactive update\n\t\t\tif (navItem.setActive) {\n\t\t\t\tnavItem.setActive(index === activeIndex)\n\t\t\t} else {\n\t\t\t\t// Fallback for backward compatibility\n\t\t\t\tnavItem.active = index === activeIndex\n\t\t\t}\n\t\t\tnavItem.hideLabels = this.hideLabels\n\t\t\t// Set tabindex for accessibility\n\t\t\t;(item as HTMLElement).tabIndex = index === activeIndex ? 0 : -1\n\t\t})\n\t}\n\n\tupdated(changedProperties: Map<string, any>) {\n\t\tsuper.updated(changedProperties)\n\n\t\tif (changedProperties.has('hideLabels')) {\n\t\t\t// Only update hide labels, active state is handled by the BehaviorSubject\n\t\t\tthis.updateActiveStates(this.activeIndex)\n\t\t}\n\n\t\tif (changedProperties.has('hideOnScroll')) {\n\t\t\tif (this.hideOnScroll && !changedProperties.get('hideOnScroll')) {\n\t\t\t\t// hideOnScroll was just enabled\n\t\t\t\tthis.setupScrollListener()\n\t\t\t} else if (!this.hideOnScroll) {\n\t\t\t\t// hideOnScroll was disabled, reset hidden state\n\t\t\t\tthis.isHiddenByScroll = false\n\t\t\t\t// Update visibility since we're now visible\n\t\t\t\tthis.visibility$.next(!this.isFullscreen)\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected render() {\n\t\t// Determine if the bar should be visually hidden\n\t\tconst isVisuallyHidden = this.isFullscreen || this.isHiddenByScroll\n\n\t\tconst containerClasses = {\n\t\t\t'h-20': true, // 80px height\n\t\t\t'flex items-center justify-around': true,\n\t\t\t'px-2 py-3 box-border': true,\n\t\t\t'transition-all duration-300 ease-in-out': true,\n\t\t\t'z-10': true, // Consistent with navigation-rail z-index\n\t\t\t// Elevation shadows\n\t\t\t'shadow-none': this.elevation === 0,\n\t\t\t'shadow-sm': this.elevation === 1,\n\t\t\t'shadow-md': this.elevation === 2,\n\t\t\t'shadow-lg': this.elevation === 3,\n\t\t\t'shadow-xl': this.elevation === 4,\n\t\t\t'shadow-2xl': this.elevation === 5,\n\t\t}\n\n\t\t// Apply transform for hide/show animation\n\t\tconst transformStyle = isVisuallyHidden ? 'translateY(100%)' : 'translateY(0)'\n\n\t\treturn html`\n\t\t\t<nav\n\t\t\t\tclass=${this.classMap(containerClasses)}\n\t\t\t\trole=\"navigation\"\n\t\t\t\taria-label=\"Main navigation\"\n\t\t\t\taria-hidden=${isVisuallyHidden}\n\t\t\t\tstyle=\"transform: ${transformStyle};\"\n\t\t\t\t${color({\n\t\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.container,\n\t\t\t\t\tcolor: SchmancyTheme.sys.color.surface.on\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<slot></slot>\n\t\t\t</nav>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-navigation-bar': SchmancyNavigationBar\n\t}\n}","import { bufferTime, concatMap, filter, fromEvent, map, of, Subject, take, tap, timeout, zip } from 'rxjs'\nimport { SchmancyTeleportation } from './teleport.component'\n\nexport type WhereAreYouRickyEvent = CustomEvent<{\n\tid: string\n\tcallerID: number\n}>\n\nexport const WhereAreYouRicky = 'whereAreYouRicky'\n\nexport type HereMortyEvent = CustomEvent<{\n\tcomponent: SchmancyTeleportation\n}>\n\nexport type FLIP_REQUEST = {\n\tfrom: {\n\t\trect: DOMRect\n\t\telement?: HTMLElement\n\t}\n\tto: {\n\t\trect: DOMRect\n\t\telement: HTMLElement\n\t}\n\tstagger?: number\n\thost: HTMLElement\n}\nexport const HereMorty = 'hereMorty'\n\nclass Teleportation {\n\tactiveTeleportations = new Map<string, DOMRect>()\n\tflipRequests = new Subject<FLIP_REQUEST>()\n\n\tconstructor() {\n\t\tthis.flipRequests\n\t\t\t.pipe(\n\t\t\t\tbufferTime(1),\n\t\t\t\tmap(requests =>\n\t\t\t\t\trequests.map(({ from, to, host }, i) => ({\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto,\n\t\t\t\t\t\thost,\n\t\t\t\t\t\ti,\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t\tconcatMap(requests => zip(requests.map(request => of(this.flip(request))))),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tfind = (component: SchmancyTeleportation) => {\n\t\treturn zip([\n\t\t\tfromEvent<HereMortyEvent>(window, HereMorty).pipe(\n\t\t\t\tfilter(\n\t\t\t\t\te =>\n\t\t\t\t\t\t!!e.detail.component.uuid &&\n\t\t\t\t\t\t!!component.id &&\n\t\t\t\t\t\te.detail.component.id === component.id &&\n\t\t\t\t\t\te.detail.component.uuid !== component.uuid,\n\t\t\t\t),\n\t\t\t\tmap(e => e.detail.component),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\tof(component).pipe(\n\t\t\t\ttap(() => {\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent<WhereAreYouRickyEvent['detail']>(WhereAreYouRicky, {\n\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\tid: component.id,\n\t\t\t\t\t\t\t\tcallerID: component.uuid,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t),\n\t\t]).pipe(\n\t\t\tmap(([component]) => component),\n\t\t\ttimeout(0),\n\t\t)\n\t}\n\n\tflip = (request: {\n\t\tfrom: {\n\t\t\trect: DOMRect\n\t\t}\n\t\tto: {\n\t\t\telement: HTMLElement\n\t\t\trect: DOMRect\n\t\t}\n\t\thost: HTMLElement\n\t\ti: number\n\t}) => {\n\t\tconst { from, to } = request\n\n\t\t// Prepare the element for animation\n\t\tconst originalZIndex = to.element.style.zIndex\n\t\tto.element.style.transformOrigin = 'top left'\n\t\tto.element.style.setProperty('visibility', 'visible')\n\t\tto.element.style.zIndex = '1000'\n\n\t\t// \"onBegin\" logic goes here (since Web Animations doesn't have onBegin).\n\t\t// If you had more logic, place it here:\n\n\t\t// Calculate starting and ending transforms\n\t\tconst startX = from.rect.left - to.rect.left\n\t\tconst startY = from.rect.top - to.rect.top\n\t\tconst startScaleX = from.rect.width / to.rect.width\n\t\tconst startScaleY = from.rect.height / to.rect.height\n\n\t\t// Create keyframes\n\t\tconst keyframes: Keyframe[] = [\n\t\t\t{\n\t\t\t\ttransform: `translate(${startX}px, ${startY}px) scale(${startScaleX}, ${startScaleY})`,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttransform: 'translate(0, 0) scale(1, 1)',\n\t\t\t},\n\t\t]\n\n\t\t// Use native Web Animations API\n\t\tconst animation = to.element.animate(keyframes, {\n\t\t\tduration: 250,\n\t\t\tdelay: 10, // if desired\n\t\t\t// Approximate 'inOutQuad' via a cubic-bezier easing.\n\t\t\t// You can adjust these values to taste, or use a standard one:\n\t\t\teasing: 'cubic-bezier(0.455, 0.03, 0.515, 0.955)',\n\t\t\t// or simply 'ease-in-out'\n\t\t})\n\n\t\t// \"onComplete\" logic goes here\n\t\tanimation.onfinish = () => {\n\t\t\tto.element.style.zIndex = originalZIndex\n\t\t\tto.element.style.transformOrigin = ''\n\t\t\t// If you have additional cleanup, place it here\n\t\t}\n\t}\n}\n\nexport const teleport = new Teleportation()\nexport default teleport\n","import { Observable, interval } from 'rxjs'\nimport { distinctUntilChanged, map, take } from 'rxjs/operators'\n\n// Function to monitor element's bounding client rect\nexport function watchElementRect(element: Element): Observable<DOMRectReadOnly> {\n\treturn interval(50).pipe(\n\t\t// startWith(true),\n\t\tmap(() => element.getBoundingClientRect()),\n\t\tdistinctUntilChanged(\n\t\t\t(prev, curr) =>\n\t\t\t\tprev.width === curr.width &&\n\t\t\t\tprev.height === curr.height &&\n\t\t\t\tprev.top === curr.top &&\n\t\t\t\tprev.right === curr.right &&\n\t\t\t\tprev.bottom === curr.bottom &&\n\t\t\t\tprev.left === curr.left,\n\t\t),\n\t\ttake(1),\n\t)\n}\n","import { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { filter, fromEvent, merge, of, takeUntil, tap, throwIfEmpty } from 'rxjs'\nimport { FINDING_MORTIES, FINDING_MORTIES_EVENT, HERE_RICKY, HERE_RICKY_EVENT } from '..'\nimport {\n\tHereMorty,\n\tHereMortyEvent,\n\tWhereAreYouRicky,\n\tWhereAreYouRickyEvent,\n\tdefault as teleport,\n\tdefault as teleportationService,\n} from './teleport.service'\nimport { watchElementRect } from './watcher'\nimport { $LitElement } from '@mixins/index'\n@customElement('schmancy-teleport')\nexport class SchmancyTeleportation extends $LitElement(css``) {\n\t/**\n\t * @attr {string} uuid - The component tag to teleport\n\t * @readonly\n\t */\n\t@property({ type: Number, reflect: true }) uuid = Math.floor(Math.random() * Date.now())\n\n\t/**\n\t * @attr {string} id - The component tag to teleport\n\t * @required\n\t */\n\t@property({ type: String }) id!: string\n\n\t@property({ type: Number }) delay = 0\n\n\tdebugging = import.meta.env.DEV ? true : false\n\n\tget _slottedChildren() {\n\t\tconst slot = this.shadowRoot.querySelector('slot')\n\t\treturn slot.assignedElements({ flatten: true })\n\t}\n\n\tconnectedCallback(): void {\n\t\tif (this.id === undefined) throw new Error('id is required')\n\t\tsuper.connectedCallback()\n\t\tmerge(\n\t\t\tfromEvent<FINDING_MORTIES_EVENT>(window, FINDING_MORTIES).pipe(\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\tnew CustomEvent<HERE_RICKY_EVENT['detail']>(HERE_RICKY, {\n\t\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\t\tcomponent: this,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfromEvent<WhereAreYouRickyEvent>(window, WhereAreYouRicky).pipe(\n\t\t\t\ttap({\n\t\t\t\t\tnext: e => {\n\t\t\t\t\t\tif (e.detail.id === this.id && this.uuid && e.detail.callerID !== this.uuid) {\n\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\tnew CustomEvent<HereMortyEvent['detail']>(HereMorty, {\n\t\t\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\t\t\tcomponent: this,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\tasync firstUpdated() {\n\t\tof(teleportationService.activeTeleportations.get(this.id))\n\t\t\t.pipe(\n\t\t\t\tfilter(a => !!a),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tthrowIfEmpty(),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: domRect => {\n\t\t\t\t\tconsole.count('teleport')\n\t\t\t\t\tthis.style.setProperty('visibility', 'hidden')\n\t\t\t\t\t// teleport.flipRequests.next({ from: component, to: this, stagger: 0 })\n\t\t\t\t\twatchElementRect(this)\n\t\t\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t\t\t.subscribe({\n\t\t\t\t\t\t\tnext: e => {\n\t\t\t\t\t\t\t\tteleportationService.activeTeleportations.set(this.id, e)\n\t\t\t\t\t\t\t\tteleport.flipRequests.next({\n\t\t\t\t\t\t\t\t\tfrom: {\n\t\t\t\t\t\t\t\t\t\trect: domRect,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tto: {\n\t\t\t\t\t\t\t\t\t\trect: e,\n\t\t\t\t\t\t\t\t\t\telement: this._slottedChildren[0] as HTMLElement,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\thost: this,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\terror: () => {\n\t\t\t\t\tthis.style.setProperty('visibility', 'visible')\n\t\t\t\t\twatchElementRect(this)\n\t\t\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t\t\t.subscribe({\n\t\t\t\t\t\t\tnext: e => {\n\t\t\t\t\t\t\t\tteleportationService.activeTeleportations.set(this.id, e)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tcomplete: () => {},\n\t\t\t})\n\t}\n\n\trender() {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-teleport': SchmancyTeleportation\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { color } from '@schmancy/directives'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\n\n/**\n * M3 avatar sizes: 20dp → 24dp → 32dp → 40dp → 48dp → 64dp\n * - xxs: Ultra-compact (20px) - for menu cards\n * - xs: 24px - M3 compact\n * - sm: 32px - M3 small\n * - md: 40px - M3 medium (default)\n * - lg: 48px - M3 large\n * - xl: 64px - M3 extra large\n */\nexport type AvatarSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type AvatarColor = 'primary' | 'secondary' | 'tertiary' | 'success' | 'error' | 'neutral'\nexport type AvatarShape = 'circle' | 'square'\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away' | 'none'\n\n/**\n * A customizable avatar component that displays initials or an icon\n * Designed to match the Schmancy design system\n *\n * @element schmancy-avatar\n *\n * @property {string} initials - Text initials to display (limited to 2 characters)\n * @property {string} src - URL of an image to display\n * @property {string} icon - Name of an icon to display\n * @property {AvatarSize} size - Size of the avatar (xs, sm, md, lg, xl)\n * @property {AvatarColor} color - Color theme of the avatar\n * @property {AvatarShape} shape - Shape of the avatar (circle or square)\n * @property {boolean} bordered - Whether to add a border around the avatar\n * @property {AvatarStatus} status - Optional status indicator to display\n *\n * @example\n * <schmancy-avatar\n * initials=\"JD\"\n * size=\"md\"\n * color=\"primary\"\n * ></schmancy-avatar>\n */\n@customElement('schmancy-avatar')\nexport class SchmancyAvatar extends $LitElement() {\n\t@property({ type: String }) initials: string = ''\n\t@property({ type: String }) src: string = ''\n\t@property({ type: String }) icon: string = ''\n\t@property({ type: String }) size: AvatarSize = 'md'\n\t@property({ type: String }) color: AvatarColor = 'primary'\n\t@property({ type: String }) shape: AvatarShape = 'circle'\n\t@property({ type: Boolean }) bordered: boolean = false\n\t@property({ type: String }) status: AvatarStatus = 'none'\n\n\trender() {\n\t\t// Determine content to display (image, initials, or icon)\n\t\tlet content\n\t\tif (this.src) {\n\t\t\tcontent = html`<img class=\"w-full h-full object-cover\" src=\"${this.src}\" alt=\"Avatar\" />`\n\t\t} else if (this.initials) {\n\t\t\tcontent = html`<span class=\"text-center font-medium\">${this.initials.substring(0, 2).toUpperCase()}</span>`\n\t\t} else if (this.icon) {\n\t\t\tcontent = html`<schmancy-icon>${this.icon}</schmancy-icon>`\n\t\t} else {\n\t\t\tcontent = html`<schmancy-icon>person</schmancy-icon>`\n\t\t}\n\n\t\t// Size classes - M3 aligned: 20dp → 24dp → 32dp → 40dp → 48dp → 64dp\n\t\tconst sizeClasses = {\n\t\t\txxs: 'w-5 h-5 text-[8px]', // 20px - Ultra-compact\n\t\t\txs: 'w-6 h-6 text-xs', // 24px - M3 compact\n\t\t\tsm: 'w-8 h-8 text-sm', // 32px - M3 small\n\t\t\tmd: 'w-10 h-10 text-base', // 40px - M3 medium (default)\n\t\t\tlg: 'w-12 h-12 text-lg', // 48px - M3 large\n\t\t\txl: 'w-16 h-16 text-xl', // 64px - M3 extra large\n\t\t}\n\n\t\t// Shape classes\n\t\tconst shapeClasses = {\n\t\t\tcircle: 'rounded-full',\n\t\t\tsquare: 'rounded-md',\n\t\t}\n\n\t\t// Combine classes\n\t\tconst avatarClasses = {\n\t\t\t'relative flex items-center justify-center overflow-hidden': true,\n\t\t\t[sizeClasses[this.size]]: true,\n\t\t\t[shapeClasses[this.shape]]: true,\n\t\t\t'border-2 border-surface-container': this.bordered,\n\t\t}\n\n\t\t// Get theme colors\n\t\tconst colorAttrs = this.getColorAttributes()\n\n\t\treturn html`\n\t\t\t<div class=\"${this.classMap(avatarClasses)}\" ${colorAttrs}>\n\t\t\t\t${content} ${this.status !== 'none' ? this.renderStatusIndicator() : ''}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate getColorAttributes() {\n\t\tconst colorMap = {\n\t\t\tprimary: {\n\t\t\t\tbgColor: SchmancyTheme.sys.color.primary.container,\n\t\t\t\tcolor: SchmancyTheme.sys.color.primary.onContainer,\n\t\t\t},\n\t\t\tsecondary: {\n\t\t\t\tbgColor: SchmancyTheme.sys.color.secondary.container,\n\t\t\t\tcolor: SchmancyTheme.sys.color.secondary.onContainer,\n\t\t\t},\n\t\t\ttertiary: {\n\t\t\t\tbgColor: SchmancyTheme.sys.color.tertiary.container,\n\t\t\t\tcolor: SchmancyTheme.sys.color.tertiary.onContainer,\n\t\t\t},\n\t\t\tsuccess: {\n\t\t\t\tbgColor: SchmancyTheme.sys.color.success.container,\n\t\t\t\tcolor: SchmancyTheme.sys.color.success.onContainer,\n\t\t\t},\n\t\t\terror: {\n\t\t\t\tbgColor: SchmancyTheme.sys.color.error.container,\n\t\t\t\tcolor: SchmancyTheme.sys.color.error.onContainer,\n\t\t\t},\n\t\t\tneutral: {\n\t\t\t\tbgColor: SchmancyTheme.sys.color.surface.container,\n\t\t\t\tcolor: SchmancyTheme.sys.color.surface.on,\n\t\t\t},\n\t\t}\n\n\t\treturn color(colorMap[this.color])\n\t}\n\n\tprivate renderStatusIndicator() {\n\t\tconst statusColors = {\n\t\t\tonline: SchmancyTheme.sys.color.success.default,\n\t\t\toffline: SchmancyTheme.sys.color.surface.onVariant,\n\t\t\tbusy: SchmancyTheme.sys.color.error.default,\n\t\t\taway: SchmancyTheme.sys.color.tertiary.default,\n\t\t}\n\n\t\tconst sizeMap = {\n\t\t\txxs: 'w-1 h-1',\n\t\t\txs: 'w-1.5 h-1.5',\n\t\t\tsm: 'w-2 h-2',\n\t\t\tmd: 'w-2.5 h-2.5',\n\t\t\tlg: 'w-3 h-3',\n\t\t\txl: 'w-4 h-4',\n\t\t}\n\n\t\tconst statusClasses = {\n\t\t\t'absolute bottom-0 right-0 rounded-full border-2 border-surface-default': true,\n\t\t\t[sizeMap[this.size]]: true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=\"${this.classMap(statusClasses)}\" style=\"background-color: ${statusColors[this.status]};\"></div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-avatar': SchmancyAvatar\n\t}\n}\n"],"mappings":"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AA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,GAAA,CAAA"}