@mhmo91/schmancy 0.10.40 → 0.10.42

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 (354) hide show
  1. package/custom-elements.json +27 -100
  2. package/dist/SchmancyElement-OG71FtNv.js +286 -0
  3. package/dist/{SchmancyElement-BNnyBOwk.js.map → SchmancyElement-OG71FtNv.js.map} +1 -1
  4. package/dist/SchmancyElement-PS1u0j1B.cjs +2 -0
  5. package/dist/{SchmancyElement-C41uPa6l.cjs.map → SchmancyElement-PS1u0j1B.cjs.map} +1 -1
  6. package/dist/agent/schmancy.agent.js +48 -213
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/agent/schmancy.manifest.json +10 -36
  9. package/dist/{area-2FrTZI_T.cjs → area-CaEI33G0.cjs} +1 -1
  10. package/dist/{area-2FrTZI_T.cjs.map → area-CaEI33G0.cjs.map} +1 -1
  11. package/dist/{area-KVDzhT4s.js → area-DtCNCb8w.js} +2 -2
  12. package/dist/{area-KVDzhT4s.js.map → area-DtCNCb8w.js.map} +1 -1
  13. package/dist/area.cjs +1 -1
  14. package/dist/area.js +1 -1
  15. package/dist/{audio-EaD0Ggfh.cjs → audio-B924fI5N.cjs} +1 -1
  16. package/dist/{audio-EaD0Ggfh.cjs.map → audio-B924fI5N.cjs.map} +1 -1
  17. package/dist/{audio-D3gnp15Y.js → audio-DdN76ikW.js} +1 -1
  18. package/dist/{audio-D3gnp15Y.js.map → audio-DdN76ikW.js.map} +1 -1
  19. package/dist/audio.cjs +1 -1
  20. package/dist/audio.js +2 -2
  21. package/dist/{autocomplete-DMmxsvUe.cjs → autocomplete-Dq3BkitV.cjs} +1 -1
  22. package/dist/{autocomplete-DMmxsvUe.cjs.map → autocomplete-Dq3BkitV.cjs.map} +1 -1
  23. package/dist/{autocomplete-DWiEqlQf.js → autocomplete-UNOknYUz.js} +3 -3
  24. package/dist/{autocomplete-DWiEqlQf.js.map → autocomplete-UNOknYUz.js.map} +1 -1
  25. package/dist/autocomplete.cjs +1 -1
  26. package/dist/autocomplete.js +1 -1
  27. package/dist/avatar.cjs +1 -1
  28. package/dist/avatar.js +3 -3
  29. package/dist/badge.cjs +1 -1
  30. package/dist/badge.js +1 -1
  31. package/dist/{boat-BeqA9_ms.js → boat-BZah1Sf9.js} +5 -7
  32. package/dist/{boat-BeqA9_ms.js.map → boat-BZah1Sf9.js.map} +1 -1
  33. package/dist/{boat-BJPl_Jti.cjs → boat-D3bEjxf8.cjs} +2 -4
  34. package/dist/{boat-BJPl_Jti.cjs.map → boat-D3bEjxf8.cjs.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 +2 -2
  39. package/dist/{busy-Cj_PV7oC.cjs → busy--WqiXKnl.cjs} +1 -1
  40. package/dist/{busy-Cj_PV7oC.cjs.map → busy--WqiXKnl.cjs.map} +1 -1
  41. package/dist/{busy-enYCTssB.js → busy-DzXyO0z6.js} +2 -2
  42. package/dist/{busy-enYCTssB.js.map → busy-DzXyO0z6.js.map} +1 -1
  43. package/dist/busy.cjs +1 -1
  44. package/dist/busy.js +1 -1
  45. package/dist/{button-B9RfBt-n.cjs → button-CTvS5YX4.cjs} +1 -1
  46. package/dist/{button-B9RfBt-n.cjs.map → button-CTvS5YX4.cjs.map} +1 -1
  47. package/dist/{button-D6LJC-HC.js → button-DgoDfcJx.js} +2 -2
  48. package/dist/{button-D6LJC-HC.js.map → button-DgoDfcJx.js.map} +1 -1
  49. package/dist/button.cjs +1 -1
  50. package/dist/button.js +3 -3
  51. package/dist/{card-BHTz1GwB.js → card-C6ijJZpF.js} +2 -2
  52. package/dist/{card-BHTz1GwB.js.map → card-C6ijJZpF.js.map} +1 -1
  53. package/dist/{card-ThG_ZaQE.cjs → card-Ci3_9Dd4.cjs} +1 -1
  54. package/dist/{card-ThG_ZaQE.cjs.map → card-Ci3_9Dd4.cjs.map} +1 -1
  55. package/dist/card.cjs +1 -1
  56. package/dist/card.js +1 -1
  57. package/dist/{checkbox-Ce0DlAdW.js → checkbox-7vEPZuGC.js} +2 -2
  58. package/dist/{checkbox-Ce0DlAdW.js.map → checkbox-7vEPZuGC.js.map} +1 -1
  59. package/dist/{checkbox-C4zeib84.cjs → checkbox-DXKdxkXE.cjs} +1 -1
  60. package/dist/{checkbox-C4zeib84.cjs.map → checkbox-DXKdxkXE.cjs.map} +1 -1
  61. package/dist/checkbox.cjs +1 -1
  62. package/dist/checkbox.js +1 -1
  63. package/dist/{chips-wfJ7YtWv.cjs → chips-9eG-96_D.cjs} +1 -1
  64. package/dist/{chips-wfJ7YtWv.cjs.map → chips-9eG-96_D.cjs.map} +1 -1
  65. package/dist/{chips-BoZSpSh_.js → chips-DF7akwz7.js} +4 -4
  66. package/dist/{chips-BoZSpSh_.js.map → chips-DF7akwz7.js.map} +1 -1
  67. package/dist/chips.cjs +1 -1
  68. package/dist/chips.js +2 -2
  69. package/dist/connectivity.cjs +2 -4
  70. package/dist/connectivity.cjs.map +1 -1
  71. package/dist/connectivity.js +4 -6
  72. package/dist/connectivity.js.map +1 -1
  73. package/dist/content-drawer.cjs +1 -1
  74. package/dist/content-drawer.js +1 -1
  75. package/dist/{date-range-DJrdpzev.js → date-range-C13_R3OA.js} +3 -3
  76. package/dist/{date-range-DJrdpzev.js.map → date-range-C13_R3OA.js.map} +1 -1
  77. package/dist/{date-range-BHSzlwSL.cjs → date-range-Q2xj5Syc.cjs} +1 -1
  78. package/dist/{date-range-BHSzlwSL.cjs.map → date-range-Q2xj5Syc.cjs.map} +1 -1
  79. package/dist/{date-range-inline-DjRdMZ1z.js → date-range-inline-BnOD-ddB.js} +2 -2
  80. package/dist/{date-range-inline-DjRdMZ1z.js.map → date-range-inline-BnOD-ddB.js.map} +1 -1
  81. package/dist/{date-range-inline-D0I6k84h.cjs → date-range-inline-DV2c_gWM.cjs} +1 -1
  82. package/dist/{date-range-inline-D0I6k84h.cjs.map → date-range-inline-DV2c_gWM.cjs.map} +1 -1
  83. package/dist/date-range-inline.cjs +1 -1
  84. package/dist/date-range-inline.js +1 -1
  85. package/dist/date-range.cjs +1 -1
  86. package/dist/date-range.js +1 -1
  87. package/dist/delay.cjs +1 -1
  88. package/dist/delay.js +2 -2
  89. package/dist/{details-DQNj2oaU.cjs → details-B2-jECBh.cjs} +3 -2
  90. package/dist/details-B2-jECBh.cjs.map +1 -0
  91. package/dist/{details-CY49XVfp.js → details-ByF66CyY.js} +4 -3
  92. package/dist/details-ByF66CyY.js.map +1 -0
  93. package/dist/details.cjs +1 -1
  94. package/dist/details.js +1 -1
  95. package/dist/{directives-BvRTjCFa.js → directives-BL7mzVsA.js} +3 -3
  96. package/dist/{directives-BvRTjCFa.js.map → directives-BL7mzVsA.js.map} +1 -1
  97. package/dist/{directives-BZIRQDBq.cjs → directives-DCb_LA9R.cjs} +1 -1
  98. package/dist/{directives-BZIRQDBq.cjs.map → directives-DCb_LA9R.cjs.map} +1 -1
  99. package/dist/directives.cjs +1 -1
  100. package/dist/directives.js +2 -2
  101. package/dist/{divider-Ck2C1sKl.cjs → divider-Bv2QiOZL.cjs} +1 -1
  102. package/dist/{divider-Ck2C1sKl.cjs.map → divider-Bv2QiOZL.cjs.map} +1 -1
  103. package/dist/{divider-BeyX_C0A.js → divider-gYuz0zDU.js} +2 -2
  104. package/dist/{divider-BeyX_C0A.js.map → divider-gYuz0zDU.js.map} +1 -1
  105. package/dist/divider.cjs +1 -1
  106. package/dist/divider.js +1 -1
  107. package/dist/dropdown.cjs +1 -1
  108. package/dist/dropdown.js +2 -2
  109. package/dist/{expand-CUF163mg.cjs → expand-B9IUGVtc.cjs} +1 -1
  110. package/dist/{expand-CUF163mg.cjs.map → expand-B9IUGVtc.cjs.map} +1 -1
  111. package/dist/{expand-BYsSEtp6.js → expand-cZ8rfCWP.js} +3 -3
  112. package/dist/{expand-BYsSEtp6.js.map → expand-cZ8rfCWP.js.map} +1 -1
  113. package/dist/expand.cjs +1 -1
  114. package/dist/expand.js +1 -1
  115. package/dist/fab.cjs +1 -1
  116. package/dist/fab.js +2 -2
  117. package/dist/{float-OvqX0nqG.cjs → float-DkGyWSWy.cjs} +1 -1
  118. package/dist/{float-OvqX0nqG.cjs.map → float-DkGyWSWy.cjs.map} +1 -1
  119. package/dist/{float-Cgllk_H9.js → float-zn3DgXBT.js} +2 -2
  120. package/dist/{float-Cgllk_H9.js.map → float-zn3DgXBT.js.map} +1 -1
  121. package/dist/float.cjs +1 -1
  122. package/dist/float.js +1 -1
  123. package/dist/{form-4GKROq2P.cjs → form-DowzVsgI.cjs} +1 -1
  124. package/dist/{form-4GKROq2P.cjs.map → form-DowzVsgI.cjs.map} +1 -1
  125. package/dist/{form-DxaV_Ose.js → form-tG7LwDm4.js} +3 -3
  126. package/dist/{form-DxaV_Ose.js.map → form-tG7LwDm4.js.map} +1 -1
  127. package/dist/form.cjs +1 -1
  128. package/dist/form.js +12 -12
  129. package/dist/handover/agent-runtime-followups.md +1 -1
  130. package/dist/handover/agent-runtime-v1.md +3 -3
  131. package/dist/{icons-sZ-LybA9.cjs → icons-BZeCloP9.cjs} +1 -1
  132. package/dist/{icons-sZ-LybA9.cjs.map → icons-BZeCloP9.cjs.map} +1 -1
  133. package/dist/{icons-CJ2mXcBi.js → icons-Dup5skuk.js} +2 -2
  134. package/dist/{icons-CJ2mXcBi.js.map → icons-Dup5skuk.js.map} +1 -1
  135. package/dist/icons.cjs +1 -1
  136. package/dist/icons.js +1 -1
  137. package/dist/{iframe-DpCv-QH2.cjs → iframe-CDJjnNmo.cjs} +1 -1
  138. package/dist/{iframe-DpCv-QH2.cjs.map → iframe-CDJjnNmo.cjs.map} +1 -1
  139. package/dist/{iframe-DWvN5nGB.js → iframe-Xc3EPMZT.js} +2 -2
  140. package/dist/{iframe-DWvN5nGB.js.map → iframe-Xc3EPMZT.js.map} +1 -1
  141. package/dist/iframe.cjs +1 -1
  142. package/dist/iframe.js +1 -1
  143. package/dist/index.cjs +1 -1
  144. package/dist/index.js +34 -34
  145. package/dist/{input-Z-3N5JMv.cjs → input-DnmC6J1T.cjs} +1 -1
  146. package/dist/{input-Z-3N5JMv.cjs.map → input-DnmC6J1T.cjs.map} +1 -1
  147. package/dist/{input-BCCHz6tB.js → input-cTyDxW9L.js} +2 -2
  148. package/dist/{input-BCCHz6tB.js.map → input-cTyDxW9L.js.map} +1 -1
  149. package/dist/{input-chip-ChAgRCXZ.cjs → input-chip-CV91URyU.cjs} +1 -1
  150. package/dist/{input-chip-ChAgRCXZ.cjs.map → input-chip-CV91URyU.cjs.map} +1 -1
  151. package/dist/{input-chip-BOrcKH-H.js → input-chip-CYI17YOq.js} +2 -2
  152. package/dist/{input-chip-BOrcKH-H.js.map → input-chip-CYI17YOq.js.map} +1 -1
  153. package/dist/input.cjs +1 -1
  154. package/dist/input.js +1 -1
  155. package/dist/json.cjs +1 -1
  156. package/dist/json.js +3 -3
  157. package/dist/kbd.cjs +1 -1
  158. package/dist/kbd.js +2 -2
  159. package/dist/{layout-DZ4dpLh9.cjs → layout-CNlZSJFU.cjs} +1 -1
  160. package/dist/{layout-DZ4dpLh9.cjs.map → layout-CNlZSJFU.cjs.map} +1 -1
  161. package/dist/{layout-CFiG3lNT.js → layout-DDxw0EwL.js} +1 -1
  162. package/dist/{layout-CFiG3lNT.js.map → layout-DDxw0EwL.js.map} +1 -1
  163. package/dist/layout.cjs +1 -1
  164. package/dist/layout.js +2 -2
  165. package/dist/{lightbox-B7Y4Nij_.js → lightbox-CH-y3rYB.js} +2 -2
  166. package/dist/{lightbox-B7Y4Nij_.js.map → lightbox-CH-y3rYB.js.map} +1 -1
  167. package/dist/{lightbox-Dpwsn8Qr.cjs → lightbox-CvtqoInF.cjs} +1 -1
  168. package/dist/{lightbox-Dpwsn8Qr.cjs.map → lightbox-CvtqoInF.cjs.map} +1 -1
  169. package/dist/lightbox.cjs +1 -1
  170. package/dist/lightbox.js +1 -1
  171. package/dist/{list-BhM-6dAi.cjs → list-Dl8KfxrF.cjs} +2 -2
  172. package/dist/{list-BhM-6dAi.cjs.map → list-Dl8KfxrF.cjs.map} +1 -1
  173. package/dist/{list-C5WVoIfJ.js → list-DrsawQ5R.js} +10 -3
  174. package/dist/{list-C5WVoIfJ.js.map → list-DrsawQ5R.js.map} +1 -1
  175. package/dist/list.cjs +1 -1
  176. package/dist/list.js +1 -1
  177. package/dist/{menu-GZARYp6I.cjs → menu-BFRcTe3o.cjs} +1 -1
  178. package/dist/{menu-GZARYp6I.cjs.map → menu-BFRcTe3o.cjs.map} +1 -1
  179. package/dist/{menu-Dvi_tQgH.js → menu-CsY5lMqY.js} +3 -3
  180. package/dist/{menu-Dvi_tQgH.js.map → menu-CsY5lMqY.js.map} +1 -1
  181. package/dist/menu.cjs +1 -1
  182. package/dist/menu.js +1 -1
  183. package/dist/{mixins-fIpzhVMd.cjs → mixins-BoMURWag.cjs} +2 -72
  184. package/dist/{mixins-fIpzhVMd.cjs.map → mixins-BoMURWag.cjs.map} +1 -1
  185. package/dist/{mixins-DGBI7YPO.js → mixins-bCEXbwJV.js} +3 -79
  186. package/dist/{mixins-DGBI7YPO.js.map → mixins-bCEXbwJV.js.map} +1 -1
  187. package/dist/mixins.cjs +1 -1
  188. package/dist/mixins.js +2 -2
  189. package/dist/nav-drawer.cjs +1 -1
  190. package/dist/nav-drawer.js +1 -1
  191. package/dist/navigation-bar.cjs +1 -1
  192. package/dist/navigation-bar.js +1 -1
  193. package/dist/navigation-rail.cjs +1 -1
  194. package/dist/navigation-rail.js +2 -2
  195. package/dist/{notification-BB9OBRCr.js → notification-DFKRMmSq.js} +4 -4
  196. package/dist/{notification-BB9OBRCr.js.map → notification-DFKRMmSq.js.map} +1 -1
  197. package/dist/{notification-B6yDL91t.cjs → notification-FBf3Mb2e.cjs} +1 -1
  198. package/dist/{notification-B6yDL91t.cjs.map → notification-FBf3Mb2e.cjs.map} +1 -1
  199. package/dist/notification.cjs +1 -1
  200. package/dist/notification.js +1 -1
  201. package/dist/{option-B21ImL0k.js → option-Ct0lGdH3.js} +2 -2
  202. package/dist/{option-B21ImL0k.js.map → option-Ct0lGdH3.js.map} +1 -1
  203. package/dist/{option-CJQM5I9q.cjs → option-Il1KpU8M.cjs} +1 -1
  204. package/dist/{option-CJQM5I9q.cjs.map → option-Il1KpU8M.cjs.map} +1 -1
  205. package/dist/option.cjs +1 -1
  206. package/dist/option.js +1 -1
  207. package/dist/{overlay-DwJWVyk2.js → overlay-Bh8Q_R01.js} +5 -5
  208. package/dist/{overlay-DwJWVyk2.js.map → overlay-Bh8Q_R01.js.map} +1 -1
  209. package/dist/{overlay-N0trD-4u.cjs → overlay-sRXiMkjn.cjs} +1 -1
  210. package/dist/{overlay-N0trD-4u.cjs.map → overlay-sRXiMkjn.cjs.map} +1 -1
  211. package/dist/overlay.cjs +1 -1
  212. package/dist/{overlay.confirm-body-DwzKhXxM.js → overlay.confirm-body-CQihsR20.js} +6 -6
  213. package/dist/{overlay.confirm-body-DwzKhXxM.js.map → overlay.confirm-body-CQihsR20.js.map} +1 -1
  214. package/dist/{overlay.confirm-body-CtXIi421.cjs → overlay.confirm-body-Jc1EuMGs.cjs} +1 -1
  215. package/dist/{overlay.confirm-body-CtXIi421.cjs.map → overlay.confirm-body-Jc1EuMGs.cjs.map} +1 -1
  216. package/dist/overlay.js +3 -3
  217. package/dist/{overlay.service-Dbu5uP9E.cjs → overlay.service-9Dp3g7ot.cjs} +1 -1
  218. package/dist/{overlay.service-Dbu5uP9E.cjs.map → overlay.service-9Dp3g7ot.cjs.map} +1 -1
  219. package/dist/{overlay.service-BDLi0p5M.js → overlay.service-BXPgS7ay.js} +2 -2
  220. package/dist/{overlay.service-BDLi0p5M.js.map → overlay.service-BXPgS7ay.js.map} +1 -1
  221. package/dist/{progress-B-Qg44XY.cjs → progress-CWC5XYZ_.cjs} +1 -1
  222. package/dist/{progress-B-Qg44XY.cjs.map → progress-CWC5XYZ_.cjs.map} +1 -1
  223. package/dist/{progress-CUSS1sNz.js → progress-CYLshdo2.js} +2 -2
  224. package/dist/{progress-CUSS1sNz.js.map → progress-CYLshdo2.js.map} +1 -1
  225. package/dist/progress.cjs +1 -1
  226. package/dist/progress.js +1 -1
  227. package/dist/{radio-group-BEtvCSS1.cjs → radio-group-6kCgOgBL.cjs} +1 -1
  228. package/dist/{radio-group-BEtvCSS1.cjs.map → radio-group-6kCgOgBL.cjs.map} +1 -1
  229. package/dist/{radio-group-AHLvrN8O.js → radio-group-bZtZHOj_.js} +2 -2
  230. package/dist/{radio-group-AHLvrN8O.js.map → radio-group-bZtZHOj_.js.map} +1 -1
  231. package/dist/radio-group.cjs +1 -1
  232. package/dist/radio-group.js +1 -1
  233. package/dist/range.cjs +1 -1
  234. package/dist/range.js +2 -2
  235. package/dist/{select-CGBsblDA.js → select-CU3X-PIa.js} +3 -3
  236. package/dist/{select-CGBsblDA.js.map → select-CU3X-PIa.js.map} +1 -1
  237. package/dist/{select-LWdPs7b_.cjs → select-MXsF8KsU.cjs} +1 -1
  238. package/dist/{select-LWdPs7b_.cjs.map → select-MXsF8KsU.cjs.map} +1 -1
  239. package/dist/select.cjs +1 -1
  240. package/dist/select.js +1 -1
  241. package/dist/skeleton.cjs +1 -1
  242. package/dist/skeleton.js +2 -2
  243. package/dist/skills/schmancy/surface.md +51 -27
  244. package/dist/skills/surface.md +51 -27
  245. package/dist/slider.cjs +1 -1
  246. package/dist/slider.js +2 -2
  247. package/dist/{sound.service-CK-5zob-.js → sound.service-B4ZmXpH9.js} +1 -1
  248. package/dist/{sound.service-CK-5zob-.js.map → sound.service-B4ZmXpH9.js.map} +1 -1
  249. package/dist/{sound.service-D2GGaBXc.cjs → sound.service-DjlMvicQ.cjs} +1 -1
  250. package/dist/{sound.service-D2GGaBXc.cjs.map → sound.service-DjlMvicQ.cjs.map} +1 -1
  251. package/dist/{splash-screen-DqPuipox.cjs → splash-screen-CN9dZcqC.cjs} +1 -1
  252. package/dist/{splash-screen-DqPuipox.cjs.map → splash-screen-CN9dZcqC.cjs.map} +1 -1
  253. package/dist/{splash-screen-BUEtjHXC.js → splash-screen-emCLYoVl.js} +2 -2
  254. package/dist/{splash-screen-BUEtjHXC.js.map → splash-screen-emCLYoVl.js.map} +1 -1
  255. package/dist/splash-screen.cjs +1 -1
  256. package/dist/splash-screen.js +1 -1
  257. package/dist/{src-Dmqjtcmp.js → src-DGDTkOvC.js} +160 -252
  258. package/dist/src-DGDTkOvC.js.map +1 -0
  259. package/dist/{src-SAXA4LEH.cjs → src-DK3111z_.cjs} +7 -31
  260. package/dist/src-DK3111z_.cjs.map +1 -0
  261. package/dist/{state-BxDNox-2.cjs → state-CumAEPQH.cjs} +1 -1
  262. package/dist/{state-BxDNox-2.cjs.map → state-CumAEPQH.cjs.map} +1 -1
  263. package/dist/{state-CnZCDMT0.js → state-DMd_FUeA.js} +1 -1
  264. package/dist/{state-CnZCDMT0.js.map → state-DMd_FUeA.js.map} +1 -1
  265. package/dist/state.cjs +1 -1
  266. package/dist/state.js +2 -2
  267. package/dist/steps.cjs +1 -1
  268. package/dist/steps.js +2 -2
  269. package/dist/{surface-CWwYD_z2.cjs → surface-DGI-FBoi.cjs} +1 -1
  270. package/dist/surface-DGI-FBoi.cjs.map +1 -0
  271. package/dist/{surface-BMdG3dKQ.js → surface-DNiYigsX.js} +2 -2
  272. package/dist/surface-DNiYigsX.js.map +1 -0
  273. package/dist/surface.cjs +1 -1
  274. package/dist/surface.js +1 -1
  275. package/dist/switch.cjs +1 -1
  276. package/dist/switch.js +2 -2
  277. package/dist/table.cjs +2 -2
  278. package/dist/table.cjs.map +1 -1
  279. package/dist/table.js +3 -3
  280. package/dist/table.js.map +1 -1
  281. package/dist/{tabs-CDQYDc6v.js → tabs-4T_4kCf-.js} +2 -2
  282. package/dist/{tabs-CDQYDc6v.js.map → tabs-4T_4kCf-.js.map} +1 -1
  283. package/dist/{tabs-CbD9E1gd.cjs → tabs-Byxxt-AH.cjs} +1 -1
  284. package/dist/{tabs-CbD9E1gd.cjs.map → tabs-Byxxt-AH.cjs.map} +1 -1
  285. package/dist/tabs.cjs +1 -1
  286. package/dist/tabs.js +1 -1
  287. package/dist/teleport.cjs +1 -1
  288. package/dist/teleport.js +1 -1
  289. package/dist/{textarea-Brgi-vD2.cjs → textarea-BwYwH9fu.cjs} +1 -1
  290. package/dist/{textarea-Brgi-vD2.cjs.map → textarea-BwYwH9fu.cjs.map} +1 -1
  291. package/dist/{textarea-MPyrMi-S.js → textarea-kkYNk1ET.js} +2 -2
  292. package/dist/{textarea-MPyrMi-S.js.map → textarea-kkYNk1ET.js.map} +1 -1
  293. package/dist/textarea.cjs +1 -1
  294. package/dist/textarea.js +1 -1
  295. package/dist/{theme-BMbXoqi0.cjs → theme-BG0EnzYP.cjs} +2 -2
  296. package/dist/{theme-BMbXoqi0.cjs.map → theme-BG0EnzYP.cjs.map} +1 -1
  297. package/dist/{theme-DZu-xmVp.js → theme-DwQBl6sr.js} +6 -6
  298. package/dist/{theme-DZu-xmVp.js.map → theme-DwQBl6sr.js.map} +1 -1
  299. package/dist/{theme-button-D_qGvEYs.js → theme-button-BD8anzsZ.js} +2 -2
  300. package/dist/{theme-button-D_qGvEYs.js.map → theme-button-BD8anzsZ.js.map} +1 -1
  301. package/dist/{theme-button-B0OLb-43.cjs → theme-button-DlrNoCMA.cjs} +1 -1
  302. package/dist/{theme-button-B0OLb-43.cjs.map → theme-button-DlrNoCMA.cjs.map} +1 -1
  303. package/dist/theme-button.cjs +1 -1
  304. package/dist/theme-button.js +1 -1
  305. package/dist/theme.cjs +1 -1
  306. package/dist/theme.js +3 -3
  307. package/dist/{theme.service-7VkM-hVf.js → theme.service-Dv_55nfE.js} +1 -1
  308. package/dist/{theme.service-7VkM-hVf.js.map → theme.service-Dv_55nfE.js.map} +1 -1
  309. package/dist/{theme.service-B15FdjOS.cjs → theme.service-pjkTM209.cjs} +1 -1
  310. package/dist/{theme.service-B15FdjOS.cjs.map → theme.service-pjkTM209.cjs.map} +1 -1
  311. package/dist/tree.cjs +1 -1
  312. package/dist/tree.js +2 -2
  313. package/dist/{typography-SZhjb_4R.js → typography-BVkU11_q.js} +2 -2
  314. package/dist/{typography-SZhjb_4R.js.map → typography-BVkU11_q.js.map} +1 -1
  315. package/dist/{typography-D4Fo1UGh.cjs → typography-aaQaIcNc.cjs} +1 -1
  316. package/dist/{typography-D4Fo1UGh.cjs.map → typography-aaQaIcNc.cjs.map} +1 -1
  317. package/dist/typography.cjs +1 -1
  318. package/dist/typography.js +1 -1
  319. package/dist/visually-hidden.cjs +1 -1
  320. package/dist/visually-hidden.js +2 -2
  321. package/dist/{window-BDVyrBnk.js → window-C76zstbV.js} +7 -8
  322. package/dist/window-C76zstbV.js.map +1 -0
  323. package/dist/window-CmB9XZzT.cjs +58 -0
  324. package/dist/window-CmB9XZzT.cjs.map +1 -0
  325. package/dist/window.cjs +1 -1
  326. package/dist/window.js +1 -1
  327. package/package.json +1 -1
  328. package/skills/schmancy/surface.md +51 -27
  329. package/src/badge/badge.ts +48 -200
  330. package/src/boat/boat.ts +1 -3
  331. package/src/connectivity/connectivity-status.ts +1 -3
  332. package/src/details/details.ts +1 -1
  333. package/src/list/list.ts +1 -1
  334. package/src/surface/surface.styles.ts +2 -87
  335. package/src/surface/surface.ts +8 -8
  336. package/src/table/table.ts +1 -1
  337. package/src/theme/theme-audio-player.ts +1 -1
  338. package/src/window/window.ts +3 -6
  339. package/types/mixins/surface.mixin.d.ts +8 -14
  340. package/types/src/badge/badge.d.ts +15 -48
  341. package/types/src/surface/surface.d.ts +9 -7
  342. package/types/src/surface/surface.styles.d.ts +2 -14
  343. package/types/src/window/window.d.ts +0 -1
  344. package/dist/SchmancyElement-BNnyBOwk.js +0 -286
  345. package/dist/SchmancyElement-C41uPa6l.cjs +0 -2
  346. package/dist/details-CY49XVfp.js.map +0 -1
  347. package/dist/details-DQNj2oaU.cjs.map +0 -1
  348. package/dist/src-Dmqjtcmp.js.map +0 -1
  349. package/dist/src-SAXA4LEH.cjs.map +0 -1
  350. package/dist/surface-BMdG3dKQ.js.map +0 -1
  351. package/dist/surface-CWwYD_z2.cjs.map +0 -1
  352. package/dist/window-BDVyrBnk.js.map +0 -1
  353. package/dist/window-BbBYjm7R.cjs +0 -59
  354. package/dist/window-BbBYjm7R.cjs.map +0 -1
package/dist/state.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`),t=require(`./state-BxDNox-2.cjs`);let n=require(`@lit-labs/signals`);exports.SchmancyContext=t.s,Object.defineProperty(exports,`Signal`,{enumerable:!0,get:function(){return n.Signal}}),exports._activeHost=e.r,exports.bindState=t.t,Object.defineProperty(exports,`computed`,{enumerable:!0,get:function(){return n.computed}}),exports.effect=t.n,exports.observe=t.r,exports.schmancyContext=t.i,exports.state=t.a,exports.stateFromObservable=t.o;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`),t=require(`./state-CumAEPQH.cjs`);let n=require(`@lit-labs/signals`);exports.SchmancyContext=t.s,Object.defineProperty(exports,`Signal`,{enumerable:!0,get:function(){return n.Signal}}),exports._activeHost=e.r,exports.bindState=t.t,Object.defineProperty(exports,`computed`,{enumerable:!0,get:function(){return n.computed}}),exports.effect=t.n,exports.observe=t.r,exports.schmancyContext=t.i,exports.state=t.a,exports.stateFromObservable=t.o;
package/dist/state.js CHANGED
@@ -1,3 +1,3 @@
1
- import { r as e } from "./SchmancyElement-BNnyBOwk.js";
2
- import { a as t, c as n, i as r, l as i, n as a, o, r as s, s as c, t as l } from "./state-CnZCDMT0.js";
1
+ import { r as e } from "./SchmancyElement-OG71FtNv.js";
2
+ import { a as t, c as n, i as r, l as i, n as a, o, r as s, s as c, t as l } from "./state-DMd_FUeA.js";
3
3
  export { i as SchmancyContext, l as Signal, e as _activeHost, a as bindState, s as computed, r as effect, t as observe, o as schmancyContext, c as state, n as stateFromObservable };
package/dist/steps.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`);require(`./mixins-fIpzhVMd.cjs`);let t=require(`rxjs`),n=require(`rxjs/operators`),r=require(`@lit/context`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/when.js`);var s=class{constructor(){this.stepSubject=new t.BehaviorSubject(1),this.lockBack=!1}get currentStep$(){return this.stepSubject.asObservable()}get currentStep(){return this.stepSubject.value}setStep(e){this.stepSubject.next(e)}},c=(0,r.createContext)(Symbol(`SchmancyStepsContext`)),l=class extends e.t{constructor(...e){super(...e),this.position=1,this.label=``,this.description=``,this.completed=!1,this.currentStep=1,this.hasContent=!1}static{this.styles=[a.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`);require(`./mixins-BoMURWag.cjs`);let t=require(`rxjs`),n=require(`rxjs/operators`),r=require(`@lit/context`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/when.js`);var s=class{constructor(){this.stepSubject=new t.BehaviorSubject(1),this.lockBack=!1}get currentStep$(){return this.stepSubject.asObservable()}get currentStep(){return this.stepSubject.value}setStep(e){this.stepSubject.next(e)}},c=(0,r.createContext)(Symbol(`SchmancyStepsContext`)),l=class extends e.t{constructor(...e){super(...e),this.position=1,this.label=``,this.description=``,this.completed=!1,this.currentStep=1,this.hasContent=!1}static{this.styles=[a.css`
2
2
  :host {
3
3
  display: block;
4
4
  transition: all 0.2s ease-in-out;
package/dist/steps.js CHANGED
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
- import "./mixins-DGBI7YPO.js";
1
+ import { t as e, u as t } from "./SchmancyElement-OG71FtNv.js";
2
+ import "./mixins-bCEXbwJV.js";
3
3
  import { BehaviorSubject as n } from "rxjs";
4
4
  import { distinctUntilChanged as r, takeUntil as i, tap as a } from "rxjs/operators";
5
5
  import { consume as o, createContext as s, provide as c } from "@lit/context";
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`),t=require(`./mixins-fIpzhVMd.cjs`);let n=require(`@lit/context`),r=require(`lit/decorators.js`),i=require(`lit`);var a=(0,n.createContext)(`surface`),o=class extends t.t(e.t){constructor(...e){super(...e),this.type=`subtle`}static{this.styles=[i.css`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`),t=require(`./mixins-BoMURWag.cjs`);let n=require(`@lit/context`),r=require(`lit/decorators.js`),i=require(`lit`);var a=(0,n.createContext)(`surface`),o=class extends t.t(e.t){constructor(...e){super(...e),this.type=`subtle`}static{this.styles=[i.css`
2
2
  :host {
3
3
  display: block;
4
4
  box-sizing: border-box;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-DGI-FBoi.cjs","names":[],"sources":["../src/surface/surface.ts"],"sourcesContent":["import { createContext, provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { SurfaceMixin } from '@mixins/surface.mixin'\nimport { TSurfaceColor } from '@schmancy/types'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n\n/**\n * `<schmancy-surface>` component\n *\n * Color-variant container that paints a background and establishes the inherited\n * text color for descendants. Corner radius, shadow depth, and cursor behavior\n * are the consumer's responsibility — apply stock Tailwind classes directly on\n * the element.\n *\n * Sizing is the consumer's responsibility — use Tailwind utilities\n * (`class=\"w-full h-full\"`) on the element directly.\n *\n * @element schmancy-surface\n * @slot - Default slot for projecting child content.\n *\n * @example\n * <schmancy-surface type=\"surfaceBright\" class=\"rounded-2xl shadow-lg w-full\">\n * <p>Content here</p>\n * </schmancy-surface>\n */\n@customElement('schmancy-surface')\nexport class SchmancySurface extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t\tbox-sizing: border-box;\n\t\t\toverflow: visible;\n\t\t}\n\t`];\n\t/**\n\t * Specifies the surface type for styling.\n\t * Provided to descendant components via context.\n\t * @default 'container'\n\t */\n\t@provide({ context: SchmancySurfaceTypeContext })\n\t@property({ reflect: true })\n\toverride type: TSurfaceColor = 'subtle'\n\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-surface': SchmancySurface\n\t}\n}\n"],"mappings":"mMAOA,IAAa,GAAA,EAAA,EAAA,eAA0D,SAAA,EAsBhE,EAAA,cAA8B,EAAA,EAAa,EAAA,CAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KAelB,QAAA,CAAA,OAAA,KAAA,OAdf,CAAC,EAAA,GAAG;;;;;;IAgBpB,QAAA,CACC,MAAO,GAAA,IAAI,eACZ,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,SANS,CAAE,QAAS,CAAA,CAAA,GAA4B,EAAA,EAAA,UACtC,CAAE,QAAA,CAAS,CAAA,CAAA,CAAA,EAAM,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAfb,kBAAA,CAAA,EAAkB,CAAA,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA"}
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
- import { t as n } from "./mixins-DGBI7YPO.js";
1
+ import { t as e, u as t } from "./SchmancyElement-OG71FtNv.js";
2
+ import { t as n } from "./mixins-bCEXbwJV.js";
3
3
  import { createContext as r, provide as i } from "@lit/context";
4
4
  import { customElement as a, property as o } from "lit/decorators.js";
5
5
  import { css as s, html as c } from "lit";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-DNiYigsX.js","names":[],"sources":["../src/surface/surface.ts"],"sourcesContent":["import { createContext, provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { SurfaceMixin } from '@mixins/surface.mixin'\nimport { TSurfaceColor } from '@schmancy/types'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n\n/**\n * `<schmancy-surface>` component\n *\n * Color-variant container that paints a background and establishes the inherited\n * text color for descendants. Corner radius, shadow depth, and cursor behavior\n * are the consumer's responsibility — apply stock Tailwind classes directly on\n * the element.\n *\n * Sizing is the consumer's responsibility — use Tailwind utilities\n * (`class=\"w-full h-full\"`) on the element directly.\n *\n * @element schmancy-surface\n * @slot - Default slot for projecting child content.\n *\n * @example\n * <schmancy-surface type=\"surfaceBright\" class=\"rounded-2xl shadow-lg w-full\">\n * <p>Content here</p>\n * </schmancy-surface>\n */\n@customElement('schmancy-surface')\nexport class SchmancySurface extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t\tbox-sizing: border-box;\n\t\t\toverflow: visible;\n\t\t}\n\t`];\n\t/**\n\t * Specifies the surface type for styling.\n\t * Provided to descendant components via context.\n\t * @default 'container'\n\t */\n\t@provide({ context: SchmancySurfaceTypeContext })\n\t@property({ reflect: true })\n\toverride type: TSurfaceColor = 'subtle'\n\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-surface': SchmancySurface\n\t}\n}\n"],"mappings":";;;;;AAOA,IAAa,IAA6B,EAA6B,SAAA,GAsBhE,IAAA,cAA8B,EAAa,CAAA,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAelB;CAAA;CAAA;EAAA,KAAA,SAdf,CAAC,CAAG;;;;;;;;CAgBpB,SAAA;EACC,OAAO,CAAI;CACZ;AAAA;AAAA,EAAA,CANC,EAAQ,EAAE,SAAS,EAAA,CAAA,GACnB,EAAS,EAAE,SAAA,CAAS,EAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CAf3B,EAAc,kBAAA,CAAA,GAAkB,CAAA;AAAA,SAAA,KAAA,GAAA,KAAA"}
package/dist/surface.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./surface-CWwYD_z2.cjs`);Object.defineProperty(exports,`SchmancySurface`,{enumerable:!0,get:function(){return e.t}}),exports.SchmancySurfaceTypeContext=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./surface-DGI-FBoi.cjs`);Object.defineProperty(exports,`SchmancySurface`,{enumerable:!0,get:function(){return e.t}}),exports.SchmancySurfaceTypeContext=e.n;
package/dist/surface.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./surface-BMdG3dKQ.js";
1
+ import { n as e, t } from "./surface-DNiYigsX.js";
2
2
  export { t as SchmancySurface, e as SchmancySurfaceTypeContext };
package/dist/switch.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`),t=require(`./mixins-fIpzhVMd.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends t.o(r.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`),t=require(`./mixins-BoMURWag.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends t.o(r.css`
2
2
  :host {
3
3
  display: inline-block;
4
4
  }
package/dist/switch.js CHANGED
@@ -1,5 +1,5 @@
1
- import { u as e } from "./SchmancyElement-BNnyBOwk.js";
2
- import { o as t } from "./mixins-DGBI7YPO.js";
1
+ import { u as e } from "./SchmancyElement-OG71FtNv.js";
2
+ import { o as t } from "./mixins-bCEXbwJV.js";
3
3
  import { customElement as n, property as r } from "lit/decorators.js";
4
4
  import { LitElement as i, css as a, html as o, nothing as s } from "lit";
5
5
  var c = class extends t(a`
package/dist/table.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`);require(`./mixins-fIpzhVMd.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);require(`@lit-labs/virtualizer`);var r=class extends e.t{constructor(...e){super(...e),this.columns=[],this.cols=this.columns.map(()=>`1fr`).join(` `)}renderCell(e){if(e.render)return n.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`);require(`./mixins-BoMURWag.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);require(`@lit-labs/virtualizer`);var r=class extends e.t{constructor(...e){super(...e),this.columns=[],this.cols=this.columns.map(()=>`1fr`).join(` `)}renderCell(e){if(e.render)return n.html`
2
2
  <div class="overflow-hidden text-ellipsis">
3
3
  <schmancy-typography align="${e.align||`left`}" maxLines="2" weight="${e.weight||`normal`}">
4
4
  ${e.render(this.item)}
@@ -28,7 +28,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
28
28
  class="grid h-full w-full"
29
29
  style="grid-template-columns: 1fr; grid-template-rows: auto 1fr;"
30
30
  >
31
- <schmancy-surface rounded="top" elevation="1" type="glass" class="sticky top-0 z-10">
31
+ <schmancy-surface type="glass" class="rounded-t-2xl shadow-sm sticky top-0 z-10">
32
32
  <div
33
33
  class="grid items-center gap-4 px-4 py-3"
34
34
  style=${this.styleMap({gridTemplateColumns:this.cols,gridTemplateRows:`1fr`})}
@@ -1 +1 @@
1
- {"version":3,"file":"table.cjs","names":[],"sources":["../src/table/row.ts","../src/table/table.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { TableColumn } from './table' // Import TableColumn interface with updated types\n\n@customElement('schmancy-table-row')\nexport class SchmancyTableRow<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Object, attribute: false })\n\titem!: T\n\n\t@property({ type: String })\n\tcols: string = this.columns.map(() => '1fr').join(' ')\n\n\t/**\n\t * Renders a cell based on column configuration.\n\t * Uses custom render function if provided, otherwise extracts data from item.\n\t */\n\tprivate renderCell(column: TableColumn<T>): TemplateResult {\n\t\t// Use the render function if provided\n\t\tif (column.render) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t\t${column.render(this.item)}\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise extract data using the key if available\n\t\tconst value = column.key ? this.item[column.key] : ''\n\n\t\treturn html`\n\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t${value}\n\t\t\t\t</schmancy-typography>\n\t\t\t</div>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<schmancy-list-item class=\"w-full\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"grid items-center gap-4\"\n\t\t\t\t\tstyle=${this.styleMap({ gridTemplateColumns: this.cols })}\n\t\t\t\t>\n\t\t\t\t\t${this.columns.map(column => this.renderCell(column))}\n\t\t\t\t</div>\n\t\t\t</schmancy-list-item>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-table-row': SchmancyTableRow\n\t}\n}\n","import '@lit-labs/virtualizer'\nimport { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport './row' // Import the schmancy-table-row component\n\n// Define a generic TableColumn interface.\n// The `key` is now a key of T, and the render function accepts T.\nexport interface TableColumn<T extends Record<string, any> = any> {\n\tname: string\n\tkey?: keyof T // Key to access the property on the data object.\n\talign?: 'left' | 'right' | 'center'\n\tweight?: 'normal' | 'bold'\n\trender?: (item: T) => TemplateResult | string | number // Custom render function for complex content\n\tsortable?: boolean // Whether this column is sortable\n\tvalue?: (item: T) => any // Custom value function for sorting\n}\n\n// Define an event detail interface for row events.\nexport interface RowEventDetail<T> {\n\titem: T\n\tindex: number\n}\n\n// Define sort direction type\nexport type SortDirection = 'asc' | 'desc' | null\n\n/**\n * SchmancyDataTable is a generic data table component.\n * It supports sorting, filtering, and custom rendering of rows.\n *\n */\n@customElement('schmancy-table')\nexport class SchmancyDataTable<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Array, attribute: false })\n\tdata: T[] = []\n\n\t// The keyField is now of type keyof T.\n\t@property({ type: String })\n\tkeyField: keyof T = 'id' as keyof T\n\n\t@property({ type: String })\n\tcols: string = '1fr'\n\n\t// Sorting property\n\t@property({ type: Boolean })\n\tsortable: boolean = false\n\n\t// Internal state properties\n\t@state() private sortColumn: keyof T | null = null\n\t@state() private sortDirection: SortDirection = null\n\t@state() private filteredData: T[] = []\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.filteredData = this.data\n\t}\n\n\t// Process the data whenever our dependencies change\n\tprotected willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n\t\tif (\n\t\t\tchangedProperties.has('data') ||\n\t\t\tchangedProperties.has('sortColumn') ||\n\t\t\tchangedProperties.has('sortDirection')\n\t\t) {\n\t\t\tthis.processData()\n\t\t}\n\t}\n\n\t/**\n\t * Helper function to check if a value is a Date object in a type-safe way\n\t */\n\tprivate isDate(value: any): value is Date {\n\t\treturn value && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]'\n\t}\n\n\tprivate processData(): void {\n\t\tlet result = [...this.data]\n\n\t\t// Apply sorting\n\t\tif (this.sortable && this.sortColumn && this.sortDirection) {\n\t\t\t// Find the column configuration for the sorting column\n\t\t\tconst sortColumnConfig = this.columns.find(col => col.key === this.sortColumn)\n\n\t\t\tresult.sort((a, b) => {\n\t\t\t\t// Use the value function if provided in the column configuration\n\t\t\t\tlet aValue, bValue\n\n\t\t\t\tif (sortColumnConfig && sortColumnConfig.value) {\n\t\t\t\t\t// Use custom value function for sorting\n\t\t\t\t\taValue = sortColumnConfig.value(a)\n\t\t\t\t\tbValue = sortColumnConfig.value(b)\n\t\t\t\t} else {\n\t\t\t\t\t// Use standard property access\n\t\t\t\t\taValue = a[this.sortColumn as keyof T]\n\t\t\t\t\tbValue = b[this.sortColumn as keyof T]\n\t\t\t\t}\n\n\t\t\t\t// Handle null/undefined values - always sort them to the end regardless of sort direction\n\t\t\t\tif (aValue === null || aValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? 1 : -1\n\t\t\t\t}\n\t\t\t\tif (bValue === null || bValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? -1 : 1\n\t\t\t\t}\n\n\t\t\t\t// Handle numbers\n\t\t\t\tif (typeof aValue === 'number' && typeof bValue === 'number') {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aValue - bValue : bValue - aValue\n\t\t\t\t}\n\n\t\t\t\t// Detect and handle numeric strings - convert to numbers if both values are numeric\n\t\t\t\tconst aNumeric = typeof aValue === 'string' && !isNaN(Number(aValue))\n\t\t\t\tconst bNumeric = typeof bValue === 'string' && !isNaN(Number(bValue))\n\n\t\t\t\tif (aNumeric && bNumeric) {\n\t\t\t\t\tconst aNum = parseFloat(aValue as string)\n\t\t\t\t\tconst bNum = parseFloat(bValue as string)\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aNum - bNum : bNum - aNum\n\t\t\t\t}\n\n\t\t\t\t// Handle dates - with proper type checking\n\t\t\t\tif (this.isDate(aValue) && this.isDate(bValue)) {\n\t\t\t\t\treturn this.sortDirection === 'asc'\n\t\t\t\t\t\t? aValue.getTime() - bValue.getTime()\n\t\t\t\t\t\t: bValue.getTime() - aValue.getTime()\n\t\t\t\t}\n\n\t\t\t\t// Convert to strings for string comparison or fallback comparison\n\t\t\t\tconst aStr = String(aValue)\n\t\t\t\tconst bStr = String(bValue)\n\t\t\t\treturn this.sortDirection === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr)\n\t\t\t})\n\t\t}\n\n\t\tthis.filteredData = result\n\t}\n\n\t// Toggle sort for a column\n\tprivate toggleSort(column: TableColumn<T>): void {\n\t\tif (!column.key || column.sortable === false) return\n\n\t\tconst columnKey = column.key\n\n\t\t// If clicking the same column, cycle through sort states: asc -> desc -> null\n\t\tif (columnKey === this.sortColumn) {\n\t\t\tif (this.sortDirection === 'asc') {\n\t\t\t\tthis.sortDirection = 'desc'\n\t\t\t} else if (this.sortDirection === 'desc') {\n\t\t\t\tthis.sortDirection = null\n\t\t\t} else {\n\t\t\t\tthis.sortDirection = 'asc'\n\t\t\t}\n\t\t} else {\n\t\t\t// New column, start with ascending\n\t\t\tthis.sortColumn = columnKey\n\t\t\tthis.sortDirection = 'asc'\n\t\t}\n\n\t\t// Dispatch sort event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('sort-change', {\n\t\t\t\tdetail: {\n\t\t\t\t\tcolumn: this.sortColumn,\n\t\t\t\t\tdirection: this.sortDirection,\n\t\t\t\t},\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t// Render sort indicator\n\tprivate renderSortIndicator(column: TableColumn<T>): TemplateResult | null {\n\t\tif (!this.sortable || column.sortable === false || !column.key || column.key !== this.sortColumn) {\n\t\t\treturn null\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"ml-1\">\n\t\t\t\t${this.sortDirection === 'asc'\n\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_upward</schmancy-icon>`\n\t\t\t\t\t: this.sortDirection === 'desc'\n\t\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_downward</schmancy-icon>`\n\t\t\t\t\t\t: null}\n\t\t\t</span>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\tconst columnHeadClasses = column => ({\n\t\t\t'flex items-center': true,\n\t\t\t'cursor-pointer gap-1': this.sortable && column.sortable !== false && column.key,\n\t\t})\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"grid h-full w-full\"\n\t\t\t\tstyle=\"grid-template-columns: 1fr; grid-template-rows: auto 1fr;\"\n\t\t\t>\n\t\t\t\t<schmancy-surface rounded=\"top\" elevation=\"1\" type=\"glass\" class=\"sticky top-0 z-10\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"grid items-center gap-4 px-4 py-3\"\n\t\t\t\t\t\tstyle=${this.styleMap({\n\t\t\t\t\t\t\tgridTemplateColumns: this.cols,\n\t\t\t\t\t\t\tgridTemplateRows: '1fr',\n\t\t\t\t\t\t})}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.columns.map(\n\t\t\t\t\t\t\tcolumn => html`\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=${this.classMap(columnHeadClasses(column))}\n\t\t\t\t\t\t\t\t\t@click=${() => (this.sortable && column.sortable !== false ? this.toggleSort(column) : null)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-typography align=${column.align ?? 'left'} weight=${column.weight ?? 'bold'}>\n\t\t\t\t\t\t\t\t\t\t${column.name}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t${this.renderSortIndicator(column)}\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\t</div>\n\t\t\t\t</schmancy-surface>\n\n\t\t\t\t${this.filteredData.length > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<lit-virtualizer\n\t\t\t\t\t\t\t\tscroller\n\t\t\t\t\t\t\t\tclass=\"w-full h-full relative overflow-auto\"\n\t\t\t\t\t\t\t\t.items=${this.filteredData}\n\t\t\t\t\t\t\t\t.keyFunction=${(item: T, index: number) => {\n\t\t\t\t\t\t\t\t\tconst keyValue = item?.[this.keyField]\n\t\t\t\t\t\t\t\t\tif (keyValue === undefined || keyValue === null) {\n\t\t\t\t\t\t\t\t\t\treturn index\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn typeof keyValue === 'string' || typeof keyValue === 'number' ? keyValue : String(keyValue)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t.renderItem=${(item: T, index: number) =>\n\t\t\t\t\t\t\t\t\thtml`\n\t\t\t\t\t\t\t\t\t\t<schmancy-table-row\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full border-b border-solid border-outlineVariant\"\n\t\t\t\t\t\t\t\t\t\t\t.columns=${this.columns}\n\t\t\t\t\t\t\t\t\t\t\t.item=${item}\n\t\t\t\t\t\t\t\t\t\t\tcols=${this.cols}\n\t\t\t\t\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst detail = { item, index }\n\t\t\t\t\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('click', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdetail,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t></schmancy-table-row>\n\t\t\t\t\t\t\t\t\t` as TemplateResult}\n\t\t\t\t\t\t\t></lit-virtualizer>\n\t\t\t\t\t\t`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<div class=\"flex items-center justify-center w-full h-full p-8 text-center\">\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"lg\"> No data available </schmancy-typography>\n\t\t\t\t\t\t\t</div>\n\t\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'schmancy-table': SchmancyDataTable\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table.cjs","names":[],"sources":["../src/table/row.ts","../src/table/table.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { TableColumn } from './table' // Import TableColumn interface with updated types\n\n@customElement('schmancy-table-row')\nexport class SchmancyTableRow<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Object, attribute: false })\n\titem!: T\n\n\t@property({ type: String })\n\tcols: string = this.columns.map(() => '1fr').join(' ')\n\n\t/**\n\t * Renders a cell based on column configuration.\n\t * Uses custom render function if provided, otherwise extracts data from item.\n\t */\n\tprivate renderCell(column: TableColumn<T>): TemplateResult {\n\t\t// Use the render function if provided\n\t\tif (column.render) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t\t${column.render(this.item)}\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise extract data using the key if available\n\t\tconst value = column.key ? this.item[column.key] : ''\n\n\t\treturn html`\n\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t${value}\n\t\t\t\t</schmancy-typography>\n\t\t\t</div>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<schmancy-list-item class=\"w-full\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"grid items-center gap-4\"\n\t\t\t\t\tstyle=${this.styleMap({ gridTemplateColumns: this.cols })}\n\t\t\t\t>\n\t\t\t\t\t${this.columns.map(column => this.renderCell(column))}\n\t\t\t\t</div>\n\t\t\t</schmancy-list-item>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-table-row': SchmancyTableRow\n\t}\n}\n","import '@lit-labs/virtualizer'\nimport { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport './row' // Import the schmancy-table-row component\n\n// Define a generic TableColumn interface.\n// The `key` is now a key of T, and the render function accepts T.\nexport interface TableColumn<T extends Record<string, any> = any> {\n\tname: string\n\tkey?: keyof T // Key to access the property on the data object.\n\talign?: 'left' | 'right' | 'center'\n\tweight?: 'normal' | 'bold'\n\trender?: (item: T) => TemplateResult | string | number // Custom render function for complex content\n\tsortable?: boolean // Whether this column is sortable\n\tvalue?: (item: T) => any // Custom value function for sorting\n}\n\n// Define an event detail interface for row events.\nexport interface RowEventDetail<T> {\n\titem: T\n\tindex: number\n}\n\n// Define sort direction type\nexport type SortDirection = 'asc' | 'desc' | null\n\n/**\n * SchmancyDataTable is a generic data table component.\n * It supports sorting, filtering, and custom rendering of rows.\n *\n */\n@customElement('schmancy-table')\nexport class SchmancyDataTable<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Array, attribute: false })\n\tdata: T[] = []\n\n\t// The keyField is now of type keyof T.\n\t@property({ type: String })\n\tkeyField: keyof T = 'id' as keyof T\n\n\t@property({ type: String })\n\tcols: string = '1fr'\n\n\t// Sorting property\n\t@property({ type: Boolean })\n\tsortable: boolean = false\n\n\t// Internal state properties\n\t@state() private sortColumn: keyof T | null = null\n\t@state() private sortDirection: SortDirection = null\n\t@state() private filteredData: T[] = []\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.filteredData = this.data\n\t}\n\n\t// Process the data whenever our dependencies change\n\tprotected willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n\t\tif (\n\t\t\tchangedProperties.has('data') ||\n\t\t\tchangedProperties.has('sortColumn') ||\n\t\t\tchangedProperties.has('sortDirection')\n\t\t) {\n\t\t\tthis.processData()\n\t\t}\n\t}\n\n\t/**\n\t * Helper function to check if a value is a Date object in a type-safe way\n\t */\n\tprivate isDate(value: any): value is Date {\n\t\treturn value && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]'\n\t}\n\n\tprivate processData(): void {\n\t\tlet result = [...this.data]\n\n\t\t// Apply sorting\n\t\tif (this.sortable && this.sortColumn && this.sortDirection) {\n\t\t\t// Find the column configuration for the sorting column\n\t\t\tconst sortColumnConfig = this.columns.find(col => col.key === this.sortColumn)\n\n\t\t\tresult.sort((a, b) => {\n\t\t\t\t// Use the value function if provided in the column configuration\n\t\t\t\tlet aValue, bValue\n\n\t\t\t\tif (sortColumnConfig && sortColumnConfig.value) {\n\t\t\t\t\t// Use custom value function for sorting\n\t\t\t\t\taValue = sortColumnConfig.value(a)\n\t\t\t\t\tbValue = sortColumnConfig.value(b)\n\t\t\t\t} else {\n\t\t\t\t\t// Use standard property access\n\t\t\t\t\taValue = a[this.sortColumn as keyof T]\n\t\t\t\t\tbValue = b[this.sortColumn as keyof T]\n\t\t\t\t}\n\n\t\t\t\t// Handle null/undefined values - always sort them to the end regardless of sort direction\n\t\t\t\tif (aValue === null || aValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? 1 : -1\n\t\t\t\t}\n\t\t\t\tif (bValue === null || bValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? -1 : 1\n\t\t\t\t}\n\n\t\t\t\t// Handle numbers\n\t\t\t\tif (typeof aValue === 'number' && typeof bValue === 'number') {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aValue - bValue : bValue - aValue\n\t\t\t\t}\n\n\t\t\t\t// Detect and handle numeric strings - convert to numbers if both values are numeric\n\t\t\t\tconst aNumeric = typeof aValue === 'string' && !isNaN(Number(aValue))\n\t\t\t\tconst bNumeric = typeof bValue === 'string' && !isNaN(Number(bValue))\n\n\t\t\t\tif (aNumeric && bNumeric) {\n\t\t\t\t\tconst aNum = parseFloat(aValue as string)\n\t\t\t\t\tconst bNum = parseFloat(bValue as string)\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aNum - bNum : bNum - aNum\n\t\t\t\t}\n\n\t\t\t\t// Handle dates - with proper type checking\n\t\t\t\tif (this.isDate(aValue) && this.isDate(bValue)) {\n\t\t\t\t\treturn this.sortDirection === 'asc'\n\t\t\t\t\t\t? aValue.getTime() - bValue.getTime()\n\t\t\t\t\t\t: bValue.getTime() - aValue.getTime()\n\t\t\t\t}\n\n\t\t\t\t// Convert to strings for string comparison or fallback comparison\n\t\t\t\tconst aStr = String(aValue)\n\t\t\t\tconst bStr = String(bValue)\n\t\t\t\treturn this.sortDirection === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr)\n\t\t\t})\n\t\t}\n\n\t\tthis.filteredData = result\n\t}\n\n\t// Toggle sort for a column\n\tprivate toggleSort(column: TableColumn<T>): void {\n\t\tif (!column.key || column.sortable === false) return\n\n\t\tconst columnKey = column.key\n\n\t\t// If clicking the same column, cycle through sort states: asc -> desc -> null\n\t\tif (columnKey === this.sortColumn) {\n\t\t\tif (this.sortDirection === 'asc') {\n\t\t\t\tthis.sortDirection = 'desc'\n\t\t\t} else if (this.sortDirection === 'desc') {\n\t\t\t\tthis.sortDirection = null\n\t\t\t} else {\n\t\t\t\tthis.sortDirection = 'asc'\n\t\t\t}\n\t\t} else {\n\t\t\t// New column, start with ascending\n\t\t\tthis.sortColumn = columnKey\n\t\t\tthis.sortDirection = 'asc'\n\t\t}\n\n\t\t// Dispatch sort event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('sort-change', {\n\t\t\t\tdetail: {\n\t\t\t\t\tcolumn: this.sortColumn,\n\t\t\t\t\tdirection: this.sortDirection,\n\t\t\t\t},\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t// Render sort indicator\n\tprivate renderSortIndicator(column: TableColumn<T>): TemplateResult | null {\n\t\tif (!this.sortable || column.sortable === false || !column.key || column.key !== this.sortColumn) {\n\t\t\treturn null\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"ml-1\">\n\t\t\t\t${this.sortDirection === 'asc'\n\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_upward</schmancy-icon>`\n\t\t\t\t\t: this.sortDirection === 'desc'\n\t\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_downward</schmancy-icon>`\n\t\t\t\t\t\t: null}\n\t\t\t</span>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\tconst columnHeadClasses = column => ({\n\t\t\t'flex items-center': true,\n\t\t\t'cursor-pointer gap-1': this.sortable && column.sortable !== false && column.key,\n\t\t})\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"grid h-full w-full\"\n\t\t\t\tstyle=\"grid-template-columns: 1fr; grid-template-rows: auto 1fr;\"\n\t\t\t>\n\t\t\t\t<schmancy-surface type=\"glass\" class=\"rounded-t-2xl shadow-sm sticky top-0 z-10\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"grid items-center gap-4 px-4 py-3\"\n\t\t\t\t\t\tstyle=${this.styleMap({\n\t\t\t\t\t\t\tgridTemplateColumns: this.cols,\n\t\t\t\t\t\t\tgridTemplateRows: '1fr',\n\t\t\t\t\t\t})}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.columns.map(\n\t\t\t\t\t\t\tcolumn => html`\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=${this.classMap(columnHeadClasses(column))}\n\t\t\t\t\t\t\t\t\t@click=${() => (this.sortable && column.sortable !== false ? this.toggleSort(column) : null)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-typography align=${column.align ?? 'left'} weight=${column.weight ?? 'bold'}>\n\t\t\t\t\t\t\t\t\t\t${column.name}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t${this.renderSortIndicator(column)}\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\t</div>\n\t\t\t\t</schmancy-surface>\n\n\t\t\t\t${this.filteredData.length > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<lit-virtualizer\n\t\t\t\t\t\t\t\tscroller\n\t\t\t\t\t\t\t\tclass=\"w-full h-full relative overflow-auto\"\n\t\t\t\t\t\t\t\t.items=${this.filteredData}\n\t\t\t\t\t\t\t\t.keyFunction=${(item: T, index: number) => {\n\t\t\t\t\t\t\t\t\tconst keyValue = item?.[this.keyField]\n\t\t\t\t\t\t\t\t\tif (keyValue === undefined || keyValue === null) {\n\t\t\t\t\t\t\t\t\t\treturn index\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn typeof keyValue === 'string' || typeof keyValue === 'number' ? keyValue : String(keyValue)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t.renderItem=${(item: T, index: number) =>\n\t\t\t\t\t\t\t\t\thtml`\n\t\t\t\t\t\t\t\t\t\t<schmancy-table-row\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full border-b border-solid border-outlineVariant\"\n\t\t\t\t\t\t\t\t\t\t\t.columns=${this.columns}\n\t\t\t\t\t\t\t\t\t\t\t.item=${item}\n\t\t\t\t\t\t\t\t\t\t\tcols=${this.cols}\n\t\t\t\t\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst detail = { item, index }\n\t\t\t\t\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('click', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdetail,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t></schmancy-table-row>\n\t\t\t\t\t\t\t\t\t` as TemplateResult}\n\t\t\t\t\t\t\t></lit-virtualizer>\n\t\t\t\t\t\t`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<div class=\"flex items-center justify-center w-full h-full p-8 text-center\">\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"lg\"> No data available </schmancy-typography>\n\t\t\t\t\t\t\t</div>\n\t\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'schmancy-table': SchmancyDataTable\n\t}\n}\n"],"mappings":"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"}
package/dist/table.js CHANGED
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
- import "./mixins-DGBI7YPO.js";
1
+ import { t as e, u as t } from "./SchmancyElement-OG71FtNv.js";
2
+ import "./mixins-bCEXbwJV.js";
3
3
  import { customElement as n, property as r, state as i } from "lit/decorators.js";
4
4
  import { html as a } from "lit";
5
5
  import "@lit-labs/virtualizer";
@@ -104,7 +104,7 @@ var s = class extends e {
104
104
  class="grid h-full w-full"
105
105
  style="grid-template-columns: 1fr; grid-template-rows: auto 1fr;"
106
106
  >
107
- <schmancy-surface rounded="top" elevation="1" type="glass" class="sticky top-0 z-10">
107
+ <schmancy-surface type="glass" class="rounded-t-2xl shadow-sm sticky top-0 z-10">
108
108
  <div
109
109
  class="grid items-center gap-4 px-4 py-3"
110
110
  style=${this.styleMap({
package/dist/table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":[],"sources":["../src/table/row.ts","../src/table/table.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { TableColumn } from './table' // Import TableColumn interface with updated types\n\n@customElement('schmancy-table-row')\nexport class SchmancyTableRow<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Object, attribute: false })\n\titem!: T\n\n\t@property({ type: String })\n\tcols: string = this.columns.map(() => '1fr').join(' ')\n\n\t/**\n\t * Renders a cell based on column configuration.\n\t * Uses custom render function if provided, otherwise extracts data from item.\n\t */\n\tprivate renderCell(column: TableColumn<T>): TemplateResult {\n\t\t// Use the render function if provided\n\t\tif (column.render) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t\t${column.render(this.item)}\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise extract data using the key if available\n\t\tconst value = column.key ? this.item[column.key] : ''\n\n\t\treturn html`\n\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t${value}\n\t\t\t\t</schmancy-typography>\n\t\t\t</div>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<schmancy-list-item class=\"w-full\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"grid items-center gap-4\"\n\t\t\t\t\tstyle=${this.styleMap({ gridTemplateColumns: this.cols })}\n\t\t\t\t>\n\t\t\t\t\t${this.columns.map(column => this.renderCell(column))}\n\t\t\t\t</div>\n\t\t\t</schmancy-list-item>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-table-row': SchmancyTableRow\n\t}\n}\n","import '@lit-labs/virtualizer'\nimport { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport './row' // Import the schmancy-table-row component\n\n// Define a generic TableColumn interface.\n// The `key` is now a key of T, and the render function accepts T.\nexport interface TableColumn<T extends Record<string, any> = any> {\n\tname: string\n\tkey?: keyof T // Key to access the property on the data object.\n\talign?: 'left' | 'right' | 'center'\n\tweight?: 'normal' | 'bold'\n\trender?: (item: T) => TemplateResult | string | number // Custom render function for complex content\n\tsortable?: boolean // Whether this column is sortable\n\tvalue?: (item: T) => any // Custom value function for sorting\n}\n\n// Define an event detail interface for row events.\nexport interface RowEventDetail<T> {\n\titem: T\n\tindex: number\n}\n\n// Define sort direction type\nexport type SortDirection = 'asc' | 'desc' | null\n\n/**\n * SchmancyDataTable is a generic data table component.\n * It supports sorting, filtering, and custom rendering of rows.\n *\n */\n@customElement('schmancy-table')\nexport class SchmancyDataTable<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Array, attribute: false })\n\tdata: T[] = []\n\n\t// The keyField is now of type keyof T.\n\t@property({ type: String })\n\tkeyField: keyof T = 'id' as keyof T\n\n\t@property({ type: String })\n\tcols: string = '1fr'\n\n\t// Sorting property\n\t@property({ type: Boolean })\n\tsortable: boolean = false\n\n\t// Internal state properties\n\t@state() private sortColumn: keyof T | null = null\n\t@state() private sortDirection: SortDirection = null\n\t@state() private filteredData: T[] = []\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.filteredData = this.data\n\t}\n\n\t// Process the data whenever our dependencies change\n\tprotected willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n\t\tif (\n\t\t\tchangedProperties.has('data') ||\n\t\t\tchangedProperties.has('sortColumn') ||\n\t\t\tchangedProperties.has('sortDirection')\n\t\t) {\n\t\t\tthis.processData()\n\t\t}\n\t}\n\n\t/**\n\t * Helper function to check if a value is a Date object in a type-safe way\n\t */\n\tprivate isDate(value: any): value is Date {\n\t\treturn value && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]'\n\t}\n\n\tprivate processData(): void {\n\t\tlet result = [...this.data]\n\n\t\t// Apply sorting\n\t\tif (this.sortable && this.sortColumn && this.sortDirection) {\n\t\t\t// Find the column configuration for the sorting column\n\t\t\tconst sortColumnConfig = this.columns.find(col => col.key === this.sortColumn)\n\n\t\t\tresult.sort((a, b) => {\n\t\t\t\t// Use the value function if provided in the column configuration\n\t\t\t\tlet aValue, bValue\n\n\t\t\t\tif (sortColumnConfig && sortColumnConfig.value) {\n\t\t\t\t\t// Use custom value function for sorting\n\t\t\t\t\taValue = sortColumnConfig.value(a)\n\t\t\t\t\tbValue = sortColumnConfig.value(b)\n\t\t\t\t} else {\n\t\t\t\t\t// Use standard property access\n\t\t\t\t\taValue = a[this.sortColumn as keyof T]\n\t\t\t\t\tbValue = b[this.sortColumn as keyof T]\n\t\t\t\t}\n\n\t\t\t\t// Handle null/undefined values - always sort them to the end regardless of sort direction\n\t\t\t\tif (aValue === null || aValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? 1 : -1\n\t\t\t\t}\n\t\t\t\tif (bValue === null || bValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? -1 : 1\n\t\t\t\t}\n\n\t\t\t\t// Handle numbers\n\t\t\t\tif (typeof aValue === 'number' && typeof bValue === 'number') {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aValue - bValue : bValue - aValue\n\t\t\t\t}\n\n\t\t\t\t// Detect and handle numeric strings - convert to numbers if both values are numeric\n\t\t\t\tconst aNumeric = typeof aValue === 'string' && !isNaN(Number(aValue))\n\t\t\t\tconst bNumeric = typeof bValue === 'string' && !isNaN(Number(bValue))\n\n\t\t\t\tif (aNumeric && bNumeric) {\n\t\t\t\t\tconst aNum = parseFloat(aValue as string)\n\t\t\t\t\tconst bNum = parseFloat(bValue as string)\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aNum - bNum : bNum - aNum\n\t\t\t\t}\n\n\t\t\t\t// Handle dates - with proper type checking\n\t\t\t\tif (this.isDate(aValue) && this.isDate(bValue)) {\n\t\t\t\t\treturn this.sortDirection === 'asc'\n\t\t\t\t\t\t? aValue.getTime() - bValue.getTime()\n\t\t\t\t\t\t: bValue.getTime() - aValue.getTime()\n\t\t\t\t}\n\n\t\t\t\t// Convert to strings for string comparison or fallback comparison\n\t\t\t\tconst aStr = String(aValue)\n\t\t\t\tconst bStr = String(bValue)\n\t\t\t\treturn this.sortDirection === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr)\n\t\t\t})\n\t\t}\n\n\t\tthis.filteredData = result\n\t}\n\n\t// Toggle sort for a column\n\tprivate toggleSort(column: TableColumn<T>): void {\n\t\tif (!column.key || column.sortable === false) return\n\n\t\tconst columnKey = column.key\n\n\t\t// If clicking the same column, cycle through sort states: asc -> desc -> null\n\t\tif (columnKey === this.sortColumn) {\n\t\t\tif (this.sortDirection === 'asc') {\n\t\t\t\tthis.sortDirection = 'desc'\n\t\t\t} else if (this.sortDirection === 'desc') {\n\t\t\t\tthis.sortDirection = null\n\t\t\t} else {\n\t\t\t\tthis.sortDirection = 'asc'\n\t\t\t}\n\t\t} else {\n\t\t\t// New column, start with ascending\n\t\t\tthis.sortColumn = columnKey\n\t\t\tthis.sortDirection = 'asc'\n\t\t}\n\n\t\t// Dispatch sort event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('sort-change', {\n\t\t\t\tdetail: {\n\t\t\t\t\tcolumn: this.sortColumn,\n\t\t\t\t\tdirection: this.sortDirection,\n\t\t\t\t},\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t// Render sort indicator\n\tprivate renderSortIndicator(column: TableColumn<T>): TemplateResult | null {\n\t\tif (!this.sortable || column.sortable === false || !column.key || column.key !== this.sortColumn) {\n\t\t\treturn null\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"ml-1\">\n\t\t\t\t${this.sortDirection === 'asc'\n\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_upward</schmancy-icon>`\n\t\t\t\t\t: this.sortDirection === 'desc'\n\t\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_downward</schmancy-icon>`\n\t\t\t\t\t\t: null}\n\t\t\t</span>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\tconst columnHeadClasses = column => ({\n\t\t\t'flex items-center': true,\n\t\t\t'cursor-pointer gap-1': this.sortable && column.sortable !== false && column.key,\n\t\t})\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"grid h-full w-full\"\n\t\t\t\tstyle=\"grid-template-columns: 1fr; grid-template-rows: auto 1fr;\"\n\t\t\t>\n\t\t\t\t<schmancy-surface rounded=\"top\" elevation=\"1\" type=\"glass\" class=\"sticky top-0 z-10\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"grid items-center gap-4 px-4 py-3\"\n\t\t\t\t\t\tstyle=${this.styleMap({\n\t\t\t\t\t\t\tgridTemplateColumns: this.cols,\n\t\t\t\t\t\t\tgridTemplateRows: '1fr',\n\t\t\t\t\t\t})}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.columns.map(\n\t\t\t\t\t\t\tcolumn => html`\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=${this.classMap(columnHeadClasses(column))}\n\t\t\t\t\t\t\t\t\t@click=${() => (this.sortable && column.sortable !== false ? this.toggleSort(column) : null)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-typography align=${column.align ?? 'left'} weight=${column.weight ?? 'bold'}>\n\t\t\t\t\t\t\t\t\t\t${column.name}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t${this.renderSortIndicator(column)}\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\t</div>\n\t\t\t\t</schmancy-surface>\n\n\t\t\t\t${this.filteredData.length > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<lit-virtualizer\n\t\t\t\t\t\t\t\tscroller\n\t\t\t\t\t\t\t\tclass=\"w-full h-full relative overflow-auto\"\n\t\t\t\t\t\t\t\t.items=${this.filteredData}\n\t\t\t\t\t\t\t\t.keyFunction=${(item: T, index: number) => {\n\t\t\t\t\t\t\t\t\tconst keyValue = item?.[this.keyField]\n\t\t\t\t\t\t\t\t\tif (keyValue === undefined || keyValue === null) {\n\t\t\t\t\t\t\t\t\t\treturn index\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn typeof keyValue === 'string' || typeof keyValue === 'number' ? keyValue : String(keyValue)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t.renderItem=${(item: T, index: number) =>\n\t\t\t\t\t\t\t\t\thtml`\n\t\t\t\t\t\t\t\t\t\t<schmancy-table-row\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full border-b border-solid border-outlineVariant\"\n\t\t\t\t\t\t\t\t\t\t\t.columns=${this.columns}\n\t\t\t\t\t\t\t\t\t\t\t.item=${item}\n\t\t\t\t\t\t\t\t\t\t\tcols=${this.cols}\n\t\t\t\t\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst detail = { item, index }\n\t\t\t\t\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('click', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdetail,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t></schmancy-table-row>\n\t\t\t\t\t\t\t\t\t` as TemplateResult}\n\t\t\t\t\t\t\t></lit-virtualizer>\n\t\t\t\t\t\t`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<div class=\"flex items-center justify-center w-full h-full p-8 text-center\">\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"lg\"> No data available </schmancy-typography>\n\t\t\t\t\t\t\t</div>\n\t\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'schmancy-table': SchmancyDataTable\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","names":[],"sources":["../src/table/row.ts","../src/table/table.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { TableColumn } from './table' // Import TableColumn interface with updated types\n\n@customElement('schmancy-table-row')\nexport class SchmancyTableRow<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Object, attribute: false })\n\titem!: T\n\n\t@property({ type: String })\n\tcols: string = this.columns.map(() => '1fr').join(' ')\n\n\t/**\n\t * Renders a cell based on column configuration.\n\t * Uses custom render function if provided, otherwise extracts data from item.\n\t */\n\tprivate renderCell(column: TableColumn<T>): TemplateResult {\n\t\t// Use the render function if provided\n\t\tif (column.render) {\n\t\t\treturn html`\n\t\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t\t${column.render(this.item)}\n\t\t\t\t\t</schmancy-typography>\n\t\t\t\t</div>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise extract data using the key if available\n\t\tconst value = column.key ? this.item[column.key] : ''\n\n\t\treturn html`\n\t\t\t<div class=\"overflow-hidden text-ellipsis\">\n\t\t\t\t<schmancy-typography align=\"${column.align || 'left'}\" maxLines=\"2\" weight=\"${column.weight || 'normal'}\">\n\t\t\t\t\t${value}\n\t\t\t\t</schmancy-typography>\n\t\t\t</div>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\treturn html`\n\t\t\t<schmancy-list-item class=\"w-full\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"grid items-center gap-4\"\n\t\t\t\t\tstyle=${this.styleMap({ gridTemplateColumns: this.cols })}\n\t\t\t\t>\n\t\t\t\t\t${this.columns.map(column => this.renderCell(column))}\n\t\t\t\t</div>\n\t\t\t</schmancy-list-item>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-table-row': SchmancyTableRow\n\t}\n}\n","import '@lit-labs/virtualizer'\nimport { SchmancyElement } from '@mixins/index'\nimport { html, TemplateResult } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport './row' // Import the schmancy-table-row component\n\n// Define a generic TableColumn interface.\n// The `key` is now a key of T, and the render function accepts T.\nexport interface TableColumn<T extends Record<string, any> = any> {\n\tname: string\n\tkey?: keyof T // Key to access the property on the data object.\n\talign?: 'left' | 'right' | 'center'\n\tweight?: 'normal' | 'bold'\n\trender?: (item: T) => TemplateResult | string | number // Custom render function for complex content\n\tsortable?: boolean // Whether this column is sortable\n\tvalue?: (item: T) => any // Custom value function for sorting\n}\n\n// Define an event detail interface for row events.\nexport interface RowEventDetail<T> {\n\titem: T\n\tindex: number\n}\n\n// Define sort direction type\nexport type SortDirection = 'asc' | 'desc' | null\n\n/**\n * SchmancyDataTable is a generic data table component.\n * It supports sorting, filtering, and custom rendering of rows.\n *\n */\n@customElement('schmancy-table')\nexport class SchmancyDataTable<T extends Record<string, any> = any> extends SchmancyElement {\n\t@property({ type: Array, attribute: false })\n\tcolumns: TableColumn<T>[] = []\n\n\t@property({ type: Array, attribute: false })\n\tdata: T[] = []\n\n\t// The keyField is now of type keyof T.\n\t@property({ type: String })\n\tkeyField: keyof T = 'id' as keyof T\n\n\t@property({ type: String })\n\tcols: string = '1fr'\n\n\t// Sorting property\n\t@property({ type: Boolean })\n\tsortable: boolean = false\n\n\t// Internal state properties\n\t@state() private sortColumn: keyof T | null = null\n\t@state() private sortDirection: SortDirection = null\n\t@state() private filteredData: T[] = []\n\n\tconstructor() {\n\t\tsuper()\n\t\tthis.filteredData = this.data\n\t}\n\n\t// Process the data whenever our dependencies change\n\tprotected willUpdate(changedProperties: Map<PropertyKey, unknown>): void {\n\t\tif (\n\t\t\tchangedProperties.has('data') ||\n\t\t\tchangedProperties.has('sortColumn') ||\n\t\t\tchangedProperties.has('sortDirection')\n\t\t) {\n\t\t\tthis.processData()\n\t\t}\n\t}\n\n\t/**\n\t * Helper function to check if a value is a Date object in a type-safe way\n\t */\n\tprivate isDate(value: any): value is Date {\n\t\treturn value && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]'\n\t}\n\n\tprivate processData(): void {\n\t\tlet result = [...this.data]\n\n\t\t// Apply sorting\n\t\tif (this.sortable && this.sortColumn && this.sortDirection) {\n\t\t\t// Find the column configuration for the sorting column\n\t\t\tconst sortColumnConfig = this.columns.find(col => col.key === this.sortColumn)\n\n\t\t\tresult.sort((a, b) => {\n\t\t\t\t// Use the value function if provided in the column configuration\n\t\t\t\tlet aValue, bValue\n\n\t\t\t\tif (sortColumnConfig && sortColumnConfig.value) {\n\t\t\t\t\t// Use custom value function for sorting\n\t\t\t\t\taValue = sortColumnConfig.value(a)\n\t\t\t\t\tbValue = sortColumnConfig.value(b)\n\t\t\t\t} else {\n\t\t\t\t\t// Use standard property access\n\t\t\t\t\taValue = a[this.sortColumn as keyof T]\n\t\t\t\t\tbValue = b[this.sortColumn as keyof T]\n\t\t\t\t}\n\n\t\t\t\t// Handle null/undefined values - always sort them to the end regardless of sort direction\n\t\t\t\tif (aValue === null || aValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? 1 : -1\n\t\t\t\t}\n\t\t\t\tif (bValue === null || bValue === undefined) {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? -1 : 1\n\t\t\t\t}\n\n\t\t\t\t// Handle numbers\n\t\t\t\tif (typeof aValue === 'number' && typeof bValue === 'number') {\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aValue - bValue : bValue - aValue\n\t\t\t\t}\n\n\t\t\t\t// Detect and handle numeric strings - convert to numbers if both values are numeric\n\t\t\t\tconst aNumeric = typeof aValue === 'string' && !isNaN(Number(aValue))\n\t\t\t\tconst bNumeric = typeof bValue === 'string' && !isNaN(Number(bValue))\n\n\t\t\t\tif (aNumeric && bNumeric) {\n\t\t\t\t\tconst aNum = parseFloat(aValue as string)\n\t\t\t\t\tconst bNum = parseFloat(bValue as string)\n\t\t\t\t\treturn this.sortDirection === 'asc' ? aNum - bNum : bNum - aNum\n\t\t\t\t}\n\n\t\t\t\t// Handle dates - with proper type checking\n\t\t\t\tif (this.isDate(aValue) && this.isDate(bValue)) {\n\t\t\t\t\treturn this.sortDirection === 'asc'\n\t\t\t\t\t\t? aValue.getTime() - bValue.getTime()\n\t\t\t\t\t\t: bValue.getTime() - aValue.getTime()\n\t\t\t\t}\n\n\t\t\t\t// Convert to strings for string comparison or fallback comparison\n\t\t\t\tconst aStr = String(aValue)\n\t\t\t\tconst bStr = String(bValue)\n\t\t\t\treturn this.sortDirection === 'asc' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr)\n\t\t\t})\n\t\t}\n\n\t\tthis.filteredData = result\n\t}\n\n\t// Toggle sort for a column\n\tprivate toggleSort(column: TableColumn<T>): void {\n\t\tif (!column.key || column.sortable === false) return\n\n\t\tconst columnKey = column.key\n\n\t\t// If clicking the same column, cycle through sort states: asc -> desc -> null\n\t\tif (columnKey === this.sortColumn) {\n\t\t\tif (this.sortDirection === 'asc') {\n\t\t\t\tthis.sortDirection = 'desc'\n\t\t\t} else if (this.sortDirection === 'desc') {\n\t\t\t\tthis.sortDirection = null\n\t\t\t} else {\n\t\t\t\tthis.sortDirection = 'asc'\n\t\t\t}\n\t\t} else {\n\t\t\t// New column, start with ascending\n\t\t\tthis.sortColumn = columnKey\n\t\t\tthis.sortDirection = 'asc'\n\t\t}\n\n\t\t// Dispatch sort event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('sort-change', {\n\t\t\t\tdetail: {\n\t\t\t\t\tcolumn: this.sortColumn,\n\t\t\t\t\tdirection: this.sortDirection,\n\t\t\t\t},\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t// Render sort indicator\n\tprivate renderSortIndicator(column: TableColumn<T>): TemplateResult | null {\n\t\tif (!this.sortable || column.sortable === false || !column.key || column.key !== this.sortColumn) {\n\t\t\treturn null\n\t\t}\n\n\t\treturn html`\n\t\t\t<span class=\"ml-1\">\n\t\t\t\t${this.sortDirection === 'asc'\n\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_upward</schmancy-icon>`\n\t\t\t\t\t: this.sortDirection === 'desc'\n\t\t\t\t\t\t? html`<schmancy-icon class=\"text-base\">arrow_downward</schmancy-icon>`\n\t\t\t\t\t\t: null}\n\t\t\t</span>\n\t\t`\n\t}\n\n\trender(): TemplateResult {\n\t\tconst columnHeadClasses = column => ({\n\t\t\t'flex items-center': true,\n\t\t\t'cursor-pointer gap-1': this.sortable && column.sortable !== false && column.key,\n\t\t})\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=\"grid h-full w-full\"\n\t\t\t\tstyle=\"grid-template-columns: 1fr; grid-template-rows: auto 1fr;\"\n\t\t\t>\n\t\t\t\t<schmancy-surface type=\"glass\" class=\"rounded-t-2xl shadow-sm sticky top-0 z-10\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"grid items-center gap-4 px-4 py-3\"\n\t\t\t\t\t\tstyle=${this.styleMap({\n\t\t\t\t\t\t\tgridTemplateColumns: this.cols,\n\t\t\t\t\t\t\tgridTemplateRows: '1fr',\n\t\t\t\t\t\t})}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this.columns.map(\n\t\t\t\t\t\t\tcolumn => html`\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=${this.classMap(columnHeadClasses(column))}\n\t\t\t\t\t\t\t\t\t@click=${() => (this.sortable && column.sortable !== false ? this.toggleSort(column) : null)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-typography align=${column.align ?? 'left'} weight=${column.weight ?? 'bold'}>\n\t\t\t\t\t\t\t\t\t\t${column.name}\n\t\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t\t${this.renderSortIndicator(column)}\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\t</div>\n\t\t\t\t</schmancy-surface>\n\n\t\t\t\t${this.filteredData.length > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<lit-virtualizer\n\t\t\t\t\t\t\t\tscroller\n\t\t\t\t\t\t\t\tclass=\"w-full h-full relative overflow-auto\"\n\t\t\t\t\t\t\t\t.items=${this.filteredData}\n\t\t\t\t\t\t\t\t.keyFunction=${(item: T, index: number) => {\n\t\t\t\t\t\t\t\t\tconst keyValue = item?.[this.keyField]\n\t\t\t\t\t\t\t\t\tif (keyValue === undefined || keyValue === null) {\n\t\t\t\t\t\t\t\t\t\treturn index\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn typeof keyValue === 'string' || typeof keyValue === 'number' ? keyValue : String(keyValue)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t.renderItem=${(item: T, index: number) =>\n\t\t\t\t\t\t\t\t\thtml`\n\t\t\t\t\t\t\t\t\t\t<schmancy-table-row\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full border-b border-solid border-outlineVariant\"\n\t\t\t\t\t\t\t\t\t\t\t.columns=${this.columns}\n\t\t\t\t\t\t\t\t\t\t\t.item=${item}\n\t\t\t\t\t\t\t\t\t\t\tcols=${this.cols}\n\t\t\t\t\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\t\t\t\t\tconst detail = { item, index }\n\t\t\t\t\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('click', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdetail,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t></schmancy-table-row>\n\t\t\t\t\t\t\t\t\t` as TemplateResult}\n\t\t\t\t\t\t\t></lit-virtualizer>\n\t\t\t\t\t\t`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<div class=\"flex items-center justify-center w-full h-full p-8 text-center\">\n\t\t\t\t\t\t\t\t<schmancy-typography type=\"body\" token=\"lg\"> No data available </schmancy-typography>\n\t\t\t\t\t\t\t</div>\n\t\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'schmancy-table': SchmancyDataTable\n\t}\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { t as e, u as t } from "./SchmancyElement-BNnyBOwk.js";
2
- import "./mixins-DGBI7YPO.js";
1
+ import { t as e, u as t } from "./SchmancyElement-OG71FtNv.js";
2
+ import "./mixins-bCEXbwJV.js";
3
3
  import { filter as n, fromEvent as r, interval as i, map as a, take as o, throttleTime as s } from "rxjs";
4
4
  import { consume as c, createContext as l, provide as u } from "@lit/context";
5
5
  import { customElement as d, property as f, query as p, queryAssignedElements as m, state as h } from "lit/decorators.js";
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-CDQYDc6v.js","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tabs-4T_4kCf-.js","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`);require(`./mixins-fIpzhVMd.cjs`);let t=require(`rxjs`),n=require(`@lit/context`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/repeat.js`);var o=(0,n.createContext)(`tabs`),s=class extends e.t{updated(e){e.has(`active`)&&this.active&&requestAnimationFrame(()=>{window.dispatchEvent(new Event(`resize`))})}render(){return this.mode!==`tabs`||this.active?i.html`<slot></slot>`:i.html``}};e.u([(0,r.property)({type:String,reflect:!0})],s.prototype,`label`,void 0),e.u([(0,r.property)({type:String,reflect:!0})],s.prototype,`value`,void 0),e.u([(0,r.property)({type:Boolean,reflect:!0})],s.prototype,`active`,void 0),e.u([(0,n.consume)({context:o,subscribe:!0}),(0,r.state)()],s.prototype,`mode`,void 0),s=e.u([(0,r.customElement)(`schmancy-tab`)],s);var c=class extends e.t{constructor(...e){super(...e),this.mode=`tabs`,this.rounded=!0,this.tabs=[]}static{this.styles=[i.css`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`);require(`./mixins-BoMURWag.cjs`);let t=require(`rxjs`),n=require(`@lit/context`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/repeat.js`);var o=(0,n.createContext)(`tabs`),s=class extends e.t{updated(e){e.has(`active`)&&this.active&&requestAnimationFrame(()=>{window.dispatchEvent(new Event(`resize`))})}render(){return this.mode!==`tabs`||this.active?i.html`<slot></slot>`:i.html``}};e.u([(0,r.property)({type:String,reflect:!0})],s.prototype,`label`,void 0),e.u([(0,r.property)({type:String,reflect:!0})],s.prototype,`value`,void 0),e.u([(0,r.property)({type:Boolean,reflect:!0})],s.prototype,`active`,void 0),e.u([(0,n.consume)({context:o,subscribe:!0}),(0,r.state)()],s.prototype,`mode`,void 0),s=e.u([(0,r.customElement)(`schmancy-tab`)],s);var c=class extends e.t{constructor(...e){super(...e),this.mode=`tabs`,this.rounded=!0,this.tabs=[]}static{this.styles=[i.css`
2
2
  :host {
3
3
  display: block;
4
4
  height: 100%;
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-CbD9E1gd.cjs","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tabs-Byxxt-AH.cjs","names":[],"sources":["../src/tabs/context.ts","../src/tabs/tab.ts","../src/tabs/tabs-group.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type TSchmancyTabsMode = 'scroll' | 'tabs'\n\nexport const SchmancyTabsModeContext = createContext<TSchmancyTabsMode>('tabs')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SchmancyTabsModeContext } from './context'\n\n@customElement('schmancy-tab')\nexport default class SchmancyTab extends SchmancyElement {\n\t@property({ type: String, reflect: true }) label\n\t@property({ type: String, reflect: true }) value\n\t@property({ type: Boolean, reflect: true }) active!: boolean\n\n\t@consume({ context: SchmancyTabsModeContext, subscribe: true })\n\t@state()\n\tmode\n\n\tprotected updated(changedProperties: Map<PropertyKey, unknown>) {\n\t\tif (changedProperties.has('active') && this.active) {\n\t\t\t// Trigger resize for virtualizers to recalculate when tab becomes visible\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected render(): unknown {\n\t\t// Don't render content until tab is active (virtualizers need actual layout, not hidden)\n\t\tif (this.mode === 'tabs' && !this.active) {\n\t\t\treturn html``\n\t\t}\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab': SchmancyTab\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { filter, fromEvent, interval, map, take, throttleTime } from 'rxjs'\nimport { SchmancyTabsModeContext, TSchmancyTabsMode } from './context'\nimport SchmancyTab from './tab'\n\n/**\n * @slot - The content of the tab group\n * @fires tab-changed - The event fired when the tab is changed\n */\n@customElement('schmancy-tab-group')\nexport default class SchmancyTabGroup extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\theight: 100%;\n\t}\n`];\n\t@provide({ context: SchmancyTabsModeContext })\n\t@property({ type: String })\n\tmode: TSchmancyTabsMode = 'tabs'\n\n\t@property({ type: Boolean }) rounded = true\n\n\t@property({ type: String, reflect: true }) activeTab: string\n\t@queryAssignedElements({\n\t\tflatten: true,\n\t})\n\tprivate tabsElements!: Array<SchmancyTab>\n\n\t@query('#tabsNavigation') navElement!: HTMLElement\n\t@query('#tabsContent') tabsContent!: HTMLElement\n\n\t@state()\n\tprivate tabs: Array<SchmancyTab> = []\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tfromEvent(window, 'scroll')\n\t\t\t.pipe(\n\t\t\t\tthrottleTime(1000),\n\t\t\t\tfilter(() => this.mode === 'scroll'),\n\t\t\t\tmap(() => {\n\t\t\t\t\tlet closestDiv = null\n\t\t\t\t\tlet closestDistance = Infinity\n\t\t\t\t\tthis.tabsElements.forEach(div => {\n\t\t\t\t\t\tconst distance =\n\t\t\t\t\t\t\tdiv.getBoundingClientRect().top - this.navElement.clientHeight + document.body.offsetHeight / 3\n\n\t\t\t\t\t\tif (distance < closestDistance && distance > 0) {\n\t\t\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\t\t\tclosestDiv = div\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\treturn closestDiv\n\t\t\t\t}),\n\t\t\t\tfilter((el: SchmancyTab | null) => el !== null),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (el: SchmancyTab) => {\n\t\t\t\t\tthis.activeTab = el.value\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tinterval(0)\n\t\t\t.pipe(\n\t\t\t\tfilter(() => !!this.navElement.clientHeight),\n\t\t\t\ttake(1),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\t\tif (this.mode === 'scroll') tab.style.paddingTop = this.navElement.clientHeight + 'px'\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\thydrateTabs() {\n\t\tthis.tabs = this.tabsElements\n\t\tif (!this.activeTab && this.tabsElements[0]) {\n\t\t\tthis.activeTab = this.tabsElements[0].value\n\t\t\tthis.tabsElements[0].active = true\n\t\t} else {\n\t\t\tthis.tabsElements.forEach(tab => {\n\t\t\t\tif (tab.value === this.activeTab) tab.active = true\n\t\t\t\telse tab.active = false\n\t\t\t})\n\t\t}\n\t\tconst lastTab = this.tabs?.[-1]\n\t\tif (lastTab) {\n\t\t\tlastTab.style.paddingBottom = lastTab.offsetHeight + 'px'\n\t\t}\n\t}\n\n\ttabChanged(selectedTab: { label: string; value: string }) {\n\t\tlet activeTabElement: SchmancyTab | undefined\n\t\tthis.tabsElements.forEach(tab => {\n\t\t\tif (tab.value === selectedTab.value) {\n\t\t\t\ttab.active = true\n\t\t\t\tactiveTabElement = tab\n\t\t\t\t// scroll to the tab\n\t\t\t\tif (this.mode === 'scroll') {\n\t\t\t\t\t// Scroll the desired element into view\n\t\t\t\t\tactiveTabElement.scrollIntoView({\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'start',\n\t\t\t\t\t\tinline: 'start',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttab.active = false\n\t\t\t}\n\t\t})\n\t\tif (this.mode === 'tabs') {\n\t\t\tthis.activeTab = selectedTab.value\n\t\t}\n\t\tthis.dispatchEvent(new CustomEvent('tab-changed', { detail: this.activeTab }))\n\t}\n\n\tprotected render(): unknown {\n\t\tconst tabs = {\n\t\t\t'bg-surface-default color-surface-on': true,\n\t\t\t'flex z-50 overflow-auto': true,\n\t\t\t'sticky top-0 shadow-md': this.mode === 'scroll',\n\t\t\t'rounded-full': this.rounded,\n\t\t}\n\n\t\tconst activeTab = {\n\t\t\t'text-primary-default': true,\n\t\t}\n\n\t\tconst inactiveTab = {\n\t\t\t'border-transparent': true,\n\t\t\t'hover:text-surface-on': true,\n\t\t\t'hover:border-outlineVariant': true,\n\t\t\t'text-surface-onVariant': true,\n\t\t}\n\n\t\treturn html`\n\t\t\t<section id=\"tabsNavigation\" class=\"${this.classMap(tabs)}\" aria-label=\"Tabs\">\n\t\t\t\t${repeat(\n\t\t\t\t\tthis.tabs,\n\t\t\t\t\ttab => tab.value,\n\t\t\t\t\ttab => html`\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.tabChanged({\n\t\t\t\t\t\t\t\t\tlabel: tab.label,\n\t\t\t\t\t\t\t\t\tvalue: tab.value,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-current=\"page\"\n\t\t\t\t\t\t\tclass=\"h-auto relative\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"px-4 py-3 ${this.activeTab === tab.value\n\t\t\t\t\t\t\t\t\t? this.classMap(activeTab)\n\t\t\t\t\t\t\t\t\t: this.classMap(inactiveTab)}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<schmancy-typography class=\"h-full align-middle flex \" type=\"title\" token=\"md\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t${tab.label}\n\t\t\t\t\t\t\t\t</schmancy-typography>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t.hidden=${this.activeTab !== tab.value}\n\t\t\t\t\t\t\t\t\tclass=\"border-primary-default absolute bottom-0 inset-x-6 border-solid border-2 rounded-t-full\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</section>\n\t\t\t<section id=\"tabsContent\" class=\"h-full\">\n\t\t\t\t<slot @slotchange=${() => this.hydrateTabs()}></slot>\n\t\t\t</section>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-tab-group': SchmancyTabGroup\n\t}\n}\n"],"mappings":"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"}
package/dist/tabs.cjs CHANGED
@@ -1 +1 @@
1
- require(`./tabs-CbD9E1gd.cjs`);
1
+ require(`./tabs-Byxxt-AH.cjs`);
package/dist/tabs.js CHANGED
@@ -1 +1 @@
1
- import "./tabs-CDQYDc6v.js";
1
+ import "./tabs-4T_4kCf-.js";
package/dist/teleport.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-SAXA4LEH.cjs`);exports.HereMorty=e.n,Object.defineProperty(exports,`SchmancyTeleportation`,{enumerable:!0,get:function(){return e.t}}),exports.WhereAreYouRicky=e.r,exports.teleport=e.i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-DK3111z_.cjs`);exports.HereMorty=e.n,Object.defineProperty(exports,`SchmancyTeleportation`,{enumerable:!0,get:function(){return e.t}}),exports.WhereAreYouRicky=e.r,exports.teleport=e.i;
package/dist/teleport.js CHANGED
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, r as n, t as r } from "./src-Dmqjtcmp.js";
1
+ import { i as e, n as t, r as n, t as r } from "./src-DGDTkOvC.js";
2
2
  export { t as HereMorty, r as SchmancyTeleportation, n as WhereAreYouRicky, e as teleport };
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-C41uPa6l.cjs`),t=require(`./mixins-fIpzhVMd.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`),o=require(`lit/directives/ref.js`),s=require(`lit/directives/when.js`);var c=class extends t.o((0,i.unsafeCSS)(`:host{width:-webkit-fill-available;display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host([fillHeight]){flex-direction:column;height:100%;display:flex}:host:focus{box-shadow:unset!important}textarea:focus-visible{outline:none!important}textarea{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;text-indent:inherit;text-shadow:inherit;text-overflow:inherit;text-rendering:inherit;text-size-adjust:inherit;text-align-last:inherit;overflow-y:auto}@keyframes onAutoFillStart{}textarea:-webkit-autofill{animation-name:onAutoFillStart}`)){constructor(...e){super(...e),this.textareaRef=(0,o.createRef)(),this.a11yId=`schmancy-textarea-${Math.random().toString(36).slice(2,10)}`,this.placeholder=``,this.value=``,this.cols=20,this.fillHeight=!1,this.autoHeight=!0,this.resize=`vertical`,this.wrap=`soft`,this.spellcheck=!1,this.align=`left`,this.tabIndex=0}static{this.shadowRootOptions={...i.LitElement.shadowRootOptions,delegatesFocus:!0}}willUpdate(e){super.willUpdate(e),(e.has(`required`)||e.has(`value`))&&this.required&&!this.value&&this.internals?.setValidity({valueMissing:!0},`Please fill out this field.`)}firstUpdated(){this.autofocus&&this.focus(),this.autoHeight&&(0,n.timer)(0).pipe((0,n.takeUntil)(this.disconnecting)).subscribe(()=>this.adjustHeight()),(0,n.fromEvent)(this.textareaElement,`input`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`change`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`keyup`).pipe((0,n.filter)(e=>e.key===`Enter`),(0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent(`enter`,{detail:{value:e},bubbles:!0,composed:!0}))})}get form(){return this.internals?.form}reportValidity(){return this.textareaRef.value?.reportValidity()}checkValidity(){return this.textareaRef.value?.checkValidity()}setCustomValidity(e){return this.textareaRef.value?.setCustomValidity(e)}select(){return this.textareaRef.value?.select()}setSelectionRange(e,t,n){this.textareaRef.value?.setSelectionRange(e,t,n)}get selectionStart(){return this.textareaRef.value?.selectionStart??null}get selectionEnd(){return this.textareaRef.value?.selectionEnd??null}get selectionDirection(){return this.textareaRef.value?.selectionDirection??null}setRangeText(e){this.textareaRef.value?.setRangeText(e)}adjustHeight(){let e=this.textareaRef.value;if(e){let t=e.offsetHeight,n=e.scrollHeight;n>t&&(e.style.height=n+`px`)}}validity(){return this.textareaRef.value?.validity}focus(e={preventScroll:!0}){this.textareaRef.value?.focus(e),this.dispatchEvent(new Event(`focus`))}click(){this.textareaRef.value?.click(),this.dispatchEvent(new Event(`click`))}blur(){this.textareaRef.value?.blur(),this.dispatchEvent(new Event(`blur`))}render(){let e={"block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on":!0,"border-outline":!this.error,"border-error-default":this.error,"outline-secondary-default focus:outline-1 focus:border-secondary-default":!0,"disabled:opacity-40 disabled:cursor-not-allowed":!0,"placeholder:text-muted":!0,"ring-0 focus:ring-1 focus:ring-inset":!0,"focus:ring-secondary-default":!this.error,"focus:ring-error-default":this.error,"caret-transparent focus:outline-hidden cursor-pointer select-none":this.readonly,"text-left":this.align===`left`,"text-center":this.align===`center`,"text-right":this.align===`right`,"h-full":this.fillHeight,"resize-none":this.resize===`none`,"resize-y":this.resize===`vertical`,"resize-x":this.resize===`horizontal`,resize:this.resize===`both`,"px-4 py-3":!0},t=this.rows==null?`field-sizing: content;`:``,n={"block mb-1 font-medium text-sm":!0,"opacity-40":this.disabled,"text-primary-default":!this.error,"text-error-default":this.error},r={"w-full min-w-0":!0,"flex flex-col h-full":this.fillHeight},c=`${this.a11yId}-hint`;return i.html`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`),t=require(`./mixins-BoMURWag.cjs`);let n=require(`rxjs`),r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`),o=require(`lit/directives/ref.js`),s=require(`lit/directives/when.js`);var c=class extends t.o((0,i.unsafeCSS)(`:host{width:-webkit-fill-available;display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host([fillHeight]){flex-direction:column;height:100%;display:flex}:host:focus{box-shadow:unset!important}textarea:focus-visible{outline:none!important}textarea{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;text-indent:inherit;text-shadow:inherit;text-overflow:inherit;text-rendering:inherit;text-size-adjust:inherit;text-align-last:inherit;overflow-y:auto}@keyframes onAutoFillStart{}textarea:-webkit-autofill{animation-name:onAutoFillStart}`)){constructor(...e){super(...e),this.textareaRef=(0,o.createRef)(),this.a11yId=`schmancy-textarea-${Math.random().toString(36).slice(2,10)}`,this.placeholder=``,this.value=``,this.cols=20,this.fillHeight=!1,this.autoHeight=!0,this.resize=`vertical`,this.wrap=`soft`,this.spellcheck=!1,this.align=`left`,this.tabIndex=0}static{this.shadowRootOptions={...i.LitElement.shadowRootOptions,delegatesFocus:!0}}willUpdate(e){super.willUpdate(e),(e.has(`required`)||e.has(`value`))&&this.required&&!this.value&&this.internals?.setValidity({valueMissing:!0},`Please fill out this field.`)}firstUpdated(){this.autofocus&&this.focus(),this.autoHeight&&(0,n.timer)(0).pipe((0,n.takeUntil)(this.disconnecting)).subscribe(()=>this.adjustHeight()),(0,n.fromEvent)(this.textareaElement,`input`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`change`).pipe((0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.autoHeight&&this.adjustHeight(),this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0}))}),(0,n.fromEvent)(this.textareaElement,`keyup`).pipe((0,n.filter)(e=>e.key===`Enter`),(0,n.map)(e=>e.target.value),(0,n.distinctUntilChanged)(),(0,n.takeUntil)(this.disconnecting)).subscribe(e=>{this.value=e,this.dispatchEvent(new CustomEvent(`change`,{detail:{value:e},bubbles:!0,composed:!0})),this.dispatchEvent(new CustomEvent(`enter`,{detail:{value:e},bubbles:!0,composed:!0}))})}get form(){return this.internals?.form}reportValidity(){return this.textareaRef.value?.reportValidity()}checkValidity(){return this.textareaRef.value?.checkValidity()}setCustomValidity(e){return this.textareaRef.value?.setCustomValidity(e)}select(){return this.textareaRef.value?.select()}setSelectionRange(e,t,n){this.textareaRef.value?.setSelectionRange(e,t,n)}get selectionStart(){return this.textareaRef.value?.selectionStart??null}get selectionEnd(){return this.textareaRef.value?.selectionEnd??null}get selectionDirection(){return this.textareaRef.value?.selectionDirection??null}setRangeText(e){this.textareaRef.value?.setRangeText(e)}adjustHeight(){let e=this.textareaRef.value;if(e){let t=e.offsetHeight,n=e.scrollHeight;n>t&&(e.style.height=n+`px`)}}validity(){return this.textareaRef.value?.validity}focus(e={preventScroll:!0}){this.textareaRef.value?.focus(e),this.dispatchEvent(new Event(`focus`))}click(){this.textareaRef.value?.click(),this.dispatchEvent(new Event(`click`))}blur(){this.textareaRef.value?.blur(),this.dispatchEvent(new Event(`blur`))}render(){let e={"block w-full min-w-0 rounded-2xl border bg-surface-containerLowest text-surface-on":!0,"border-outline":!this.error,"border-error-default":this.error,"outline-secondary-default focus:outline-1 focus:border-secondary-default":!0,"disabled:opacity-40 disabled:cursor-not-allowed":!0,"placeholder:text-muted":!0,"ring-0 focus:ring-1 focus:ring-inset":!0,"focus:ring-secondary-default":!this.error,"focus:ring-error-default":this.error,"caret-transparent focus:outline-hidden cursor-pointer select-none":this.readonly,"text-left":this.align===`left`,"text-center":this.align===`center`,"text-right":this.align===`right`,"h-full":this.fillHeight,"resize-none":this.resize===`none`,"resize-y":this.resize===`vertical`,"resize-x":this.resize===`horizontal`,resize:this.resize===`both`,"px-4 py-3":!0},t=this.rows==null?`field-sizing: content;`:``,n={"block mb-1 font-medium text-sm":!0,"opacity-40":this.disabled,"text-primary-default":!this.error,"text-error-default":this.error},r={"w-full min-w-0":!0,"flex flex-col h-full":this.fillHeight},c=`${this.a11yId}-hint`;return i.html`
2
2
  <div class="${this.classMap(r)}">
3
3
  ${(0,s.when)(this.label,()=>i.html`
4
4
  <label class="${this.classMap(n)}" for=${this.id}>