@mhmo91/schmancy 0.2.160 → 0.2.162

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 (254) hide show
  1. package/dist/{animated-text-ButDz3vC.cjs → animated-text-CSOz5SCF.cjs} +2 -2
  2. package/dist/{animated-text-ButDz3vC.cjs.map → animated-text-CSOz5SCF.cjs.map} +1 -1
  3. package/dist/{animated-text-Be992jA_.js → animated-text-DUB2OEsp.js} +3 -3
  4. package/dist/{animated-text-Be992jA_.js.map → animated-text-DUB2OEsp.js.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-BNFH4xlv.js → area.component-BWaTpFPB.js} +6 -6
  9. package/dist/{area.component-BNFH4xlv.js.map → area.component-BWaTpFPB.js.map} +1 -1
  10. package/dist/{area.component-H7yKE0i1.cjs → area.component-kK1WKJY2.cjs} +2 -2
  11. package/dist/{area.component-H7yKE0i1.cjs.map → area.component-kK1WKJY2.cjs.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-BoqVyf_5.cjs → autocomplete-BKPUk9e5.cjs} +2 -2
  14. package/dist/{autocomplete-BoqVyf_5.cjs.map → autocomplete-BKPUk9e5.cjs.map} +1 -1
  15. package/dist/{autocomplete-Dq94h33i.js → autocomplete-Di9kiTER.js} +3 -3
  16. package/dist/{autocomplete-Dq94h33i.js.map → autocomplete-Di9kiTER.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/badge.cjs +1 -1
  20. package/dist/badge.js +1 -1
  21. package/dist/busy.cjs +1 -1
  22. package/dist/busy.js +1 -1
  23. package/dist/button.cjs +1 -1
  24. package/dist/button.js +1 -1
  25. package/dist/card.cjs +1 -1
  26. package/dist/card.js +1 -1
  27. package/dist/{checkbox-C3oCN6-m.cjs → checkbox-CwMYYFc5.cjs} +2 -2
  28. package/dist/{checkbox-C3oCN6-m.cjs.map → checkbox-CwMYYFc5.cjs.map} +1 -1
  29. package/dist/{checkbox-D82AhpUU.js → checkbox-Dr_Nv_NO.js} +2 -2
  30. package/dist/{checkbox-D82AhpUU.js.map → checkbox-Dr_Nv_NO.js.map} +1 -1
  31. package/dist/checkbox.cjs +1 -1
  32. package/dist/checkbox.js +1 -1
  33. package/dist/{chips-C1lJe-VM.cjs → chips-CMSDxpu9.cjs} +2 -2
  34. package/dist/{chips-C1lJe-VM.cjs.map → chips-CMSDxpu9.cjs.map} +1 -1
  35. package/dist/{chips-BImfI_Cy.js → chips-Dy8t83by.js} +3 -3
  36. package/dist/{chips-BImfI_Cy.js.map → chips-Dy8t83by.js.map} +1 -1
  37. package/dist/chips.cjs +1 -1
  38. package/dist/chips.js +1 -1
  39. package/dist/components.cjs +1 -1
  40. package/dist/components.js +1 -1
  41. package/dist/content-drawer.cjs +1 -1
  42. package/dist/content-drawer.js +1 -1
  43. package/dist/{date-range-D_TITodq.cjs → date-range-B2cD9hQe.cjs} +2 -2
  44. package/dist/{date-range-D_TITodq.cjs.map → date-range-B2cD9hQe.cjs.map} +1 -1
  45. package/dist/{date-range-B36NwQJj.js → date-range-BSRsyfMM.js} +3 -3
  46. package/dist/{date-range-B36NwQJj.js.map → date-range-BSRsyfMM.js.map} +1 -1
  47. package/dist/date-range.cjs +1 -1
  48. package/dist/date-range.js +1 -1
  49. package/dist/{delay-u3ZtuHuD.js → delay-DN-mtGtE.js} +11 -11
  50. package/dist/{delay-u3ZtuHuD.js.map → delay-DN-mtGtE.js.map} +1 -1
  51. package/dist/{delay-BZANXguW.cjs → delay-DUjqSk9U.cjs} +2 -2
  52. package/dist/{delay-BZANXguW.cjs.map → delay-DUjqSk9U.cjs.map} +1 -1
  53. package/dist/delay.cjs +1 -1
  54. package/dist/delay.js +1 -1
  55. package/dist/{divider-4xKbeJOK.js → divider-CwrrRepk.js} +3 -3
  56. package/dist/{divider-4xKbeJOK.js.map → divider-CwrrRepk.js.map} +1 -1
  57. package/dist/{divider-BGh7WiTm.cjs → divider-D-3b8xBH.cjs} +2 -2
  58. package/dist/{divider-BGh7WiTm.cjs.map → divider-D-3b8xBH.cjs.map} +1 -1
  59. package/dist/divider.cjs +1 -1
  60. package/dist/divider.js +1 -1
  61. package/dist/extra.cjs +1 -1
  62. package/dist/extra.js +1 -1
  63. package/dist/flex-BJPUKHgq.cjs +41 -0
  64. package/dist/flex-BJPUKHgq.cjs.map +1 -0
  65. package/dist/flex-D4HMvbL2.js +238 -0
  66. package/dist/flex-D4HMvbL2.js.map +1 -0
  67. package/dist/{form-DwRU18it.cjs → form-CPm25cLE.cjs} +2 -2
  68. package/dist/{form-DwRU18it.cjs.map → form-CPm25cLE.cjs.map} +1 -1
  69. package/dist/{form-DEWs5VTx.js → form-D-CN4Npb.js} +2 -2
  70. package/dist/{form-DEWs5VTx.js.map → form-D-CN4Npb.js.map} +1 -1
  71. package/dist/form.cjs +1 -1
  72. package/dist/form.js +1 -1
  73. package/dist/{icon-Bpgf3d2W.cjs → icon-DUTbI5sF.cjs} +2 -2
  74. package/dist/{icon-Bpgf3d2W.cjs.map → icon-DUTbI5sF.cjs.map} +1 -1
  75. package/dist/{icon-D8bGIsnU.js → icon-baMFKlix.js} +3 -3
  76. package/dist/{icon-D8bGIsnU.js.map → icon-baMFKlix.js.map} +1 -1
  77. package/dist/{icon-button-BShbUJzz.js → icon-button-Dytz2u7f.js} +3 -3
  78. package/dist/{icon-button-BShbUJzz.js.map → icon-button-Dytz2u7f.js.map} +1 -1
  79. package/dist/{icon-button-Rmv2a0U5.cjs → icon-button-M79Lwelv.cjs} +2 -2
  80. package/dist/{icon-button-Rmv2a0U5.cjs.map → icon-button-M79Lwelv.cjs.map} +1 -1
  81. package/dist/icons.cjs +1 -1
  82. package/dist/icons.js +1 -1
  83. package/dist/index.cjs +1 -1
  84. package/dist/index.js +119 -121
  85. package/dist/index.js.map +1 -1
  86. package/dist/{input-CAJ-MBq7.cjs → input-C2wFU_S6.cjs} +2 -2
  87. package/dist/{input-CAJ-MBq7.cjs.map → input-C2wFU_S6.cjs.map} +1 -1
  88. package/dist/{input-D211jB9f.js → input-D390Osy4.js} +2 -2
  89. package/dist/{input-D211jB9f.js.map → input-D390Osy4.js.map} +1 -1
  90. package/dist/input.cjs +1 -1
  91. package/dist/input.js +1 -1
  92. package/dist/layout.cjs +1 -1
  93. package/dist/layout.js +1 -1
  94. package/dist/{list-DMXqpSCh.js → list-BJFvg0LF.js} +2 -2
  95. package/dist/{list-DMXqpSCh.js.map → list-BJFvg0LF.js.map} +1 -1
  96. package/dist/{list-CwdYlei9.cjs → list-Bn-B6Pbl.cjs} +2 -2
  97. package/dist/{list-CwdYlei9.cjs.map → list-Bn-B6Pbl.cjs.map} +1 -1
  98. package/dist/list.cjs +1 -1
  99. package/dist/list.js +1 -1
  100. package/dist/{litElement.mixin-B1zxT55T.js → litElement.mixin-CRbxrdrS.js} +2 -2
  101. package/dist/{litElement.mixin-B1zxT55T.js.map → litElement.mixin-CRbxrdrS.js.map} +1 -1
  102. package/dist/{litElement.mixin-Bl5r_3iS.cjs → litElement.mixin-CwAqMl79.cjs} +2 -2
  103. package/dist/{litElement.mixin-Bl5r_3iS.cjs.map → litElement.mixin-CwAqMl79.cjs.map} +1 -1
  104. package/dist/{menu-phn2-8UA.js → menu-5krKi7zq.js} +3 -3
  105. package/dist/{menu-phn2-8UA.js.map → menu-5krKi7zq.js.map} +1 -1
  106. package/dist/{menu-CBin71yi.cjs → menu-D6SHzgaV.cjs} +2 -2
  107. package/dist/{menu-CBin71yi.cjs.map → menu-D6SHzgaV.cjs.map} +1 -1
  108. package/dist/menu.cjs +1 -1
  109. package/dist/menu.js +1 -1
  110. package/dist/nav-drawer.cjs +1 -1
  111. package/dist/nav-drawer.js +1 -1
  112. package/dist/{notification-container-CRjLSf2l.cjs → notification-service-BFfFPd1Q.cjs} +19 -19
  113. package/dist/notification-service-BFfFPd1Q.cjs.map +1 -0
  114. package/dist/{notification-container-C5o2dqpe.js → notification-service-DA3l75i3.js} +127 -94
  115. package/dist/notification-service-DA3l75i3.js.map +1 -0
  116. package/dist/notification.cjs +1 -1
  117. package/dist/notification.js +5 -7
  118. package/dist/notification.js.map +1 -1
  119. package/dist/{option-CAZq8vIE.js → option-BAMNOMye.js} +2 -2
  120. package/dist/{option-CAZq8vIE.js.map → option-BAMNOMye.js.map} +1 -1
  121. package/dist/{option-DO30M5mj.cjs → option-DBh0pEws.cjs} +2 -2
  122. package/dist/{option-DO30M5mj.cjs.map → option-DBh0pEws.cjs.map} +1 -1
  123. package/dist/option.cjs +1 -1
  124. package/dist/option.js +1 -1
  125. package/dist/{payment-card-form-CFYt0jpm.js → payment-card-form-CNWsIJhu.js} +3 -3
  126. package/dist/{payment-card-form-CFYt0jpm.js.map → payment-card-form-CNWsIJhu.js.map} +1 -1
  127. package/dist/{payment-card-form-C0ib712J.cjs → payment-card-form-CklVDo7L.cjs} +2 -2
  128. package/dist/{payment-card-form-C0ib712J.cjs.map → payment-card-form-CklVDo7L.cjs.map} +1 -1
  129. package/dist/{radio-group-Xgv957h3.cjs → radio-group-8d4MJqaa.cjs} +2 -2
  130. package/dist/{radio-group-Xgv957h3.cjs.map → radio-group-8d4MJqaa.cjs.map} +1 -1
  131. package/dist/{radio-group-yCmH2g1m.js → radio-group-CRXQ4ajE.js} +2 -2
  132. package/dist/{radio-group-yCmH2g1m.js.map → radio-group-CRXQ4ajE.js.map} +1 -1
  133. package/dist/radio-group.cjs +1 -1
  134. package/dist/radio-group.js +1 -1
  135. package/dist/rxjs-utils.js +4 -4
  136. package/dist/{schmancy-steps-container-DozeItXT.js → schmancy-steps-container-DzeJED2U.js} +2 -2
  137. package/dist/{schmancy-steps-container-DozeItXT.js.map → schmancy-steps-container-DzeJED2U.js.map} +1 -1
  138. package/dist/{schmancy-steps-container-BUUNK6-a.cjs → schmancy-steps-container-KinQK3rz.cjs} +2 -2
  139. package/dist/{schmancy-steps-container-BUUNK6-a.cjs.map → schmancy-steps-container-KinQK3rz.cjs.map} +1 -1
  140. package/dist/{select-hrpNF0ay.cjs → select-DlblA74_.cjs} +2 -2
  141. package/dist/{select-hrpNF0ay.cjs.map → select-DlblA74_.cjs.map} +1 -1
  142. package/dist/{select-D1GqH9az.js → select-dxNE4mnd.js} +3 -3
  143. package/dist/{select-D1GqH9az.js.map → select-dxNE4mnd.js.map} +1 -1
  144. package/dist/select.cjs +1 -1
  145. package/dist/select.js +1 -1
  146. package/dist/selector-hook-omsuyAOu.js.map +1 -1
  147. package/dist/{sheet-BheMSUgv.js → sheet-BmIoE7Ej.js} +12 -12
  148. package/dist/{sheet-BheMSUgv.js.map → sheet-BmIoE7Ej.js.map} +1 -1
  149. package/dist/{sheet-j8iBPQ6T.cjs → sheet-D2sUghqi.cjs} +2 -2
  150. package/dist/{sheet-j8iBPQ6T.cjs.map → sheet-D2sUghqi.cjs.map} +1 -1
  151. package/dist/sheet.cjs +1 -1
  152. package/dist/sheet.js +1 -1
  153. package/dist/{slider-5_06CQZJ.js → slider-DCysIErg.js} +3 -3
  154. package/dist/{slider-5_06CQZJ.js.map → slider-DCysIErg.js.map} +1 -1
  155. package/dist/{slider-Dk2AGCrw.cjs → slider-VShAooYp.cjs} +2 -2
  156. package/dist/{slider-Dk2AGCrw.cjs.map → slider-VShAooYp.cjs.map} +1 -1
  157. package/dist/slider.cjs +1 -1
  158. package/dist/slider.js +1 -1
  159. package/dist/{spinner-CmaRhtzu.cjs → spinner-Dv-uGeoR.cjs} +2 -2
  160. package/dist/{spinner-CmaRhtzu.cjs.map → spinner-Dv-uGeoR.cjs.map} +1 -1
  161. package/dist/{spinner-DQPVv48S.js → spinner-UC31R_xS.js} +3 -3
  162. package/dist/{spinner-DQPVv48S.js.map → spinner-UC31R_xS.js.map} +1 -1
  163. package/dist/steps.cjs +1 -1
  164. package/dist/steps.js +1 -1
  165. package/dist/{surface-D5Jqe0bf.js → surface-B3v9NfAj.js} +2 -2
  166. package/dist/{surface-D5Jqe0bf.js.map → surface-B3v9NfAj.js.map} +1 -1
  167. package/dist/{surface-DAkIsvJB.cjs → surface-ClnnQP3o.cjs} +2 -2
  168. package/dist/{surface-DAkIsvJB.cjs.map → surface-ClnnQP3o.cjs.map} +1 -1
  169. package/dist/surface.cjs +1 -1
  170. package/dist/surface.js +1 -1
  171. package/dist/{table-CdsT8VSZ.js → table-BZ4h621V.js} +2 -2
  172. package/dist/{table-CdsT8VSZ.js.map → table-BZ4h621V.js.map} +1 -1
  173. package/dist/{table-CljxYE7x.cjs → table-CWDtSTrW.cjs} +2 -2
  174. package/dist/{table-CljxYE7x.cjs.map → table-CWDtSTrW.cjs.map} +1 -1
  175. package/dist/table.cjs +1 -1
  176. package/dist/table.js +1 -1
  177. package/dist/{tabs-group-DLwYQyDv.cjs → tabs-group-Bb4uOpJc.cjs} +2 -2
  178. package/dist/{tabs-group-DLwYQyDv.cjs.map → tabs-group-Bb4uOpJc.cjs.map} +1 -1
  179. package/dist/{tabs-group-BmHljUlz.js → tabs-group-WJjM75TT.js} +2 -2
  180. package/dist/{tabs-group-BmHljUlz.js.map → tabs-group-WJjM75TT.js.map} +1 -1
  181. package/dist/tabs.cjs +1 -1
  182. package/dist/tabs.js +1 -1
  183. package/dist/tailwind.mixin-B_hJc1PP.js +43 -0
  184. package/dist/{tailwind.mixin-Q2P-9IKt.js.map → tailwind.mixin-B_hJc1PP.js.map} +1 -1
  185. package/dist/tailwind.mixin-DLuYz9Iz.cjs +2 -0
  186. package/dist/{tailwind.mixin-CryL2ZOy.cjs.map → tailwind.mixin-DLuYz9Iz.cjs.map} +1 -1
  187. package/dist/teleport.cjs +1 -1
  188. package/dist/{teleport.component-CnH7tw9d.cjs → teleport.component-CNVTORt3.cjs} +2 -2
  189. package/dist/{teleport.component-CnH7tw9d.cjs.map → teleport.component-CNVTORt3.cjs.map} +1 -1
  190. package/dist/{teleport.component-CX0EcZsB.js → teleport.component-DSs12GIK.js} +38 -38
  191. package/dist/{teleport.component-CX0EcZsB.js.map → teleport.component-DSs12GIK.js.map} +1 -1
  192. package/dist/teleport.js +1 -1
  193. package/dist/{textarea-BFtirUYQ.cjs → textarea-B3_G9W-u.cjs} +2 -2
  194. package/dist/{textarea-BFtirUYQ.cjs.map → textarea-B3_G9W-u.cjs.map} +1 -1
  195. package/dist/{textarea-C-ZczaeA.js → textarea-B5V4jvIX.js} +2 -2
  196. package/dist/{textarea-C-ZczaeA.js.map → textarea-B5V4jvIX.js.map} +1 -1
  197. package/dist/textarea.cjs +1 -1
  198. package/dist/textarea.js +1 -1
  199. package/dist/{theme-button-Co1FWQZy.cjs → theme-button-C6pyxtwQ.cjs} +2 -2
  200. package/dist/{theme-button-Co1FWQZy.cjs.map → theme-button-C6pyxtwQ.cjs.map} +1 -1
  201. package/dist/{theme-button-DkSJ3DGG.js → theme-button-D-ojrnYh.js} +2 -2
  202. package/dist/{theme-button-DkSJ3DGG.js.map → theme-button-D-ojrnYh.js.map} +1 -1
  203. package/dist/theme-button.cjs +1 -1
  204. package/dist/theme-button.js +1 -1
  205. package/dist/theme.cjs +1 -1
  206. package/dist/{theme.component-DPvN4am3.js → theme.component-B6Hvc574.js} +2 -2
  207. package/dist/{theme.component-DPvN4am3.js.map → theme.component-B6Hvc574.js.map} +1 -1
  208. package/dist/{theme.component-kt0rSKAw.cjs → theme.component-DR4uOck9.cjs} +2 -2
  209. package/dist/{theme.component-kt0rSKAw.cjs.map → theme.component-DR4uOck9.cjs.map} +1 -1
  210. package/dist/theme.js +1 -1
  211. package/dist/{timezone-CoXF6uCH.js → timezone-CyDIsW4A.js} +3 -3
  212. package/dist/{timezone-CoXF6uCH.js.map → timezone-CyDIsW4A.js.map} +1 -1
  213. package/dist/{timezone-BAw4bWdz.cjs → timezone-vGpDPCRT.cjs} +2 -2
  214. package/dist/{timezone-BAw4bWdz.cjs.map → timezone-vGpDPCRT.cjs.map} +1 -1
  215. package/dist/{tooltip-FWNQFOV4.cjs → tooltip-BJ_lQc8I.cjs} +2 -2
  216. package/dist/{tooltip-FWNQFOV4.cjs.map → tooltip-BJ_lQc8I.cjs.map} +1 -1
  217. package/dist/{tooltip-Dl2N0nLg.js → tooltip-Ck-JUG_m.js} +2 -2
  218. package/dist/{tooltip-Dl2N0nLg.js.map → tooltip-Ck-JUG_m.js.map} +1 -1
  219. package/dist/tooltip.cjs +1 -1
  220. package/dist/tooltip.js +1 -1
  221. package/dist/{tree-DNotOnkS.js → tree-BE0sci4r.js} +2 -2
  222. package/dist/{tree-DNotOnkS.js.map → tree-BE0sci4r.js.map} +1 -1
  223. package/dist/{tree-DE0EGUP8.cjs → tree-plC4VSNF.cjs} +2 -2
  224. package/dist/{tree-DE0EGUP8.cjs.map → tree-plC4VSNF.cjs.map} +1 -1
  225. package/dist/tree.cjs +1 -1
  226. package/dist/tree.js +1 -1
  227. package/dist/{typewriter--Sc6E-hJ.js → typewriter-CFULjoNm.js} +11 -11
  228. package/dist/{typewriter--Sc6E-hJ.js.map → typewriter-CFULjoNm.js.map} +1 -1
  229. package/dist/{typewriter-DxMBpsNX.cjs → typewriter-CwrZhpWq.cjs} +2 -2
  230. package/dist/{typewriter-DxMBpsNX.cjs.map → typewriter-CwrZhpWq.cjs.map} +1 -1
  231. package/dist/typewriter.cjs +1 -1
  232. package/dist/typewriter.js +1 -1
  233. package/dist/{typography-CXGW5mh2.js → typography-BB5uUnkZ.js} +2 -2
  234. package/dist/{typography-CXGW5mh2.js.map → typography-BB5uUnkZ.js.map} +1 -1
  235. package/dist/{typography-CbJoawFE.cjs → typography-CRoZbt0O.cjs} +2 -2
  236. package/dist/{typography-CbJoawFE.cjs.map → typography-CRoZbt0O.cjs.map} +1 -1
  237. package/dist/typography.cjs +1 -1
  238. package/dist/typography.js +1 -1
  239. package/package.json +1 -1
  240. package/types/src/layout/scroll/scroll.d.ts +36 -1
  241. package/types/src/notification/index.d.ts +1 -1
  242. package/types/src/notification/notification-service.d.ts +20 -0
  243. package/dist/flex-5tU3sgUP.js +0 -232
  244. package/dist/flex-5tU3sgUP.js.map +0 -1
  245. package/dist/flex-M_YoqXnB.cjs +0 -41
  246. package/dist/flex-M_YoqXnB.cjs.map +0 -1
  247. package/dist/notification-container-C5o2dqpe.js.map +0 -1
  248. package/dist/notification-container-CRjLSf2l.cjs.map +0 -1
  249. package/dist/notification-service-DWeUoHi2.js +0 -29
  250. package/dist/notification-service-DWeUoHi2.js.map +0 -1
  251. package/dist/notification-service-DXXrRCmK.cjs +0 -2
  252. package/dist/notification-service-DXXrRCmK.cjs.map +0 -1
  253. package/dist/tailwind.mixin-CryL2ZOy.cjs +0 -2
  254. package/dist/tailwind.mixin-Q2P-9IKt.js +0 -43
@@ -1 +0,0 @@
1
- {"version":3,"file":"notification-container-C5o2dqpe.js","sources":["../src/notification/notification.ts","../src/notification/notification-audio-generator.ts","../src/notification/notification-audio.ts","../src/notification/notification-container.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { html, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport style from './notification.scss?inline'\n\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error'\n\n/**\n * @fires close - When notification is closed\n */\n@customElement('sch-notification')\nexport default class SchmancyNotification extends $LitElement(style) {\n\t@property({ type: String }) title = ''\n\t@property({ type: String }) message = ''\n\t@property({ type: String }) type: NotificationType = 'info'\n\t@property({ type: Boolean }) closable = true\n\t@property({ type: Number }) duration = 5000 // 0 means no auto-close\n\t@property({ type: String }) id = `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\t@property({ type: Boolean }) playSound = true\n\n\t@state() private _visible = true\n\t@state() private _progress = 100\n\t@state() private _hovered = false\n\t@state() private _closing = false\n\t@state() private _autoCloseTimer?: number\n\t@state() private _progressTimer?: number\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tif (this.duration > 0) {\n\t\t\tthis._startAutoCloseTimer()\n\t\t}\n\n\t\tif (this.playSound) {\n\t\t\tthis._playSound()\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis._clearTimers()\n\t\tsuper.disconnectedCallback()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('duration') && this.duration > 0) {\n\t\t\tthis._clearTimers()\n\t\t\tthis._startAutoCloseTimer()\n\t\t}\n\t}\n\n\tprivate _startAutoCloseTimer() {\n\t\tif (this.duration <= 0) return\n\n\t\tconst startTime = Date.now()\n\t\tconst endTime = startTime + this.duration\n\n\t\t// Setup the auto-close timer\n\t\tthis._autoCloseTimer = window.setTimeout(() => {\n\t\t\tthis.close()\n\t\t}, this.duration)\n\n\t\t// Setup the progress timer to update every 16ms (60fps)\n\t\tthis._progressTimer = window.setInterval(() => {\n\t\t\tif (this._hovered) return\n\n\t\t\tconst now = Date.now()\n\t\t\tconst remaining = Math.max(0, endTime - now)\n\t\t\tthis._progress = (remaining / this.duration) * 100\n\n\t\t\tif (remaining <= 0) {\n\t\t\t\tthis._clearTimers()\n\t\t\t}\n\t\t}, 16)\n\t}\n\n\tprivate _clearTimers() {\n\t\tif (this._autoCloseTimer) {\n\t\t\tclearTimeout(this._autoCloseTimer)\n\t\t\tthis._autoCloseTimer = undefined\n\t\t}\n\n\t\tif (this._progressTimer) {\n\t\t\tclearInterval(this._progressTimer)\n\t\t\tthis._progressTimer = undefined\n\t\t}\n\t}\n\n\tprivate _pauseTimers() {\n\t\tthis._clearTimers()\n\t}\n\n\tprivate _resumeTimers() {\n\t\tif (this.duration > 0) {\n\t\t\t// Calculate remaining time based on progress\n\t\t\tconst remainingTime = (this._progress / 100) * this.duration\n\n\t\t\tif (remainingTime > 0) {\n\t\t\t\tthis._autoCloseTimer = window.setTimeout(() => {\n\t\t\t\t\tthis.close()\n\t\t\t\t}, remainingTime)\n\n\t\t\t\tconst startTime = Date.now()\n\t\t\t\tconst endTime = startTime + remainingTime\n\n\t\t\t\tthis._progressTimer = window.setInterval(() => {\n\t\t\t\t\tif (this._hovered) return\n\n\t\t\t\t\tconst now = Date.now()\n\t\t\t\t\tconst remaining = Math.max(0, endTime - now)\n\t\t\t\t\tthis._progress = (remaining / remainingTime) * 100\n\n\t\t\t\t\tif (remaining <= 0) {\n\t\t\t\t\t\tthis._clearTimers()\n\t\t\t\t\t}\n\t\t\t\t}, 16)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _playSound() {\n\t\t// Dispatch event to play sound through audio service\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('playsound', {\n\t\t\t\tdetail: { type: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate _handleMouseEnter() {\n\t\tthis._hovered = true\n\t\tthis._pauseTimers()\n\t}\n\n\tprivate _handleMouseLeave() {\n\t\tthis._hovered = false\n\t\tthis._resumeTimers()\n\t}\n\n\tpublic close() {\n\t\tif (this._closing) return\n\n\t\tthis._closing = true\n\t\tthis._clearTimers()\n\n\t\t// Add closing animation\n\t\tthis._visible = false\n\n\t\t// Dispatch close event\n\t\tsetTimeout(() => {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('close', {\n\t\t\t\t\tdetail: { id: this.id },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}, 300) // Match animation duration\n\t}\n\n\trender() {\n\t\tif (!this._visible && this._closing) return html``\n\n\t\tconst typeStyles = this._getTypeStyles()\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap({\n\t\t\t\t\tnotification: true,\n\t\t\t\t\tclosing: this._closing,\n\t\t\t\t\t[this.type]: true,\n\t\t\t\t})}\n\t\t\t\trole=\"alert\"\n\t\t\t\tstyle=${styleMap({\n\t\t\t\t\ttransform: this._closing ? 'translateX(120%)' : 'translateX(0)',\n\t\t\t\t\topacity: this._closing ? '0' : '1',\n\t\t\t\t})}\n\t\t\t\t@mouseenter=${this._handleMouseEnter}\n\t\t\t\t@mouseleave=${this._handleMouseLeave}\n\t\t\t>\n\t\t\t\t<div class=\"notification-content\">\n\t\t\t\t\t<div class=\"icon-container\" ${color({ color: typeStyles.iconColor })}>${typeStyles.icon}</div>\n\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t${this.title ? html` <div class=\"title\">${this.title}</div> ` : ''}\n\n\t\t\t\t\t\t<div class=\"message\">${this.message}</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t${this.closable\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<button class=\"close-button\" aria-label=\"Close notification\" @click=${this.close}>\n\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t\t\t\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: ''}\n\t\t\t\t</div>\n\n\t\t\t\t${this.duration > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"progress-bar-container\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"progress-bar\"\n\t\t\t\t\t\t\t\t\tstyle=\"width: ${this._progress}%\"\n\t\t\t\t\t\t\t\t\t${color({ bgColor: typeStyles.progressColor })}\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`\n\t\t\t\t\t: ''}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate _getTypeStyles() {\n\t\tswitch (this.type) {\n\t\t\tcase 'success':\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path>\n\t\t\t\t\t\t\t<polyline points=\"22 4 12 14.01 9 11.01\"></polyline>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.success.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.success.default,\n\t\t\t\t}\n\t\t\tcase 'warning':\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.tertiary.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.tertiary.default,\n\t\t\t\t}\n\t\t\tcase 'error':\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n\t\t\t\t\t\t\t<line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>\n\t\t\t\t\t\t\t<line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.error.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.error.default,\n\t\t\t\t}\n\t\t\tcase 'info':\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.primary.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.primary.default,\n\t\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-notification': SchmancyNotification\n\t}\n}\n","/**\n * Programmatic sound generator for Schmancy notifications\n * Uses Web Audio API to generate gentle, subtle and soft sounds for each notification type\n */\nexport class NotificationSoundGenerator {\n\tprivate audioContext: AudioContext | null = null\n\n\t/**\n\t * Get or create AudioContext\n\t */\n\tprivate getAudioContext(): AudioContext {\n\t\tif (!this.audioContext) {\n\t\t\tconst AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n\t\t\tthis.audioContext = new AudioContextClass()\n\t\t}\n\t\treturn this.audioContext\n\t}\n\n\tpublic playInfoSound(volume = 0.2): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst oscillator = ctx.createOscillator()\n\t\tconst gainNode = ctx.createGain()\n\t\tconst filter = ctx.createBiquadFilter()\n\n\t\toscillator.type = 'sine'\n\t\toscillator.frequency.setValueAtTime(392, now) // G4\n\t\toscillator.frequency.exponentialRampToValueAtTime(523.25, now + 0.25) // C5\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = 1500\n\n\t\tgainNode.gain.setValueAtTime(0.0001, now)\n\t\tgainNode.gain.exponentialRampToValueAtTime(volume, now + 0.15)\n\t\tgainNode.gain.exponentialRampToValueAtTime(0.0001, now + 0.4)\n\n\t\toscillator.connect(filter).connect(gainNode).connect(ctx.destination)\n\t\toscillator.start(now)\n\t\toscillator.stop(now + 0.45)\n\t}\n\n\tpublic playSuccessSound(volume = 0.2): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst createBell = (freq: number, start: number, duration: number) => {\n\t\t\tconst osc = ctx.createOscillator()\n\t\t\tconst gain = ctx.createGain()\n\t\t\tconst filter = ctx.createBiquadFilter()\n\n\t\t\tosc.type = 'sine'\n\t\t\tosc.frequency.setValueAtTime(freq, now)\n\t\t\tfilter.type = 'lowpass'\n\t\t\tfilter.frequency.value = freq * 4\n\n\t\t\tgain.gain.setValueAtTime(0.0001, now)\n\t\t\tgain.gain.exponentialRampToValueAtTime(volume, now + 0.1)\n\t\t\tgain.gain.exponentialRampToValueAtTime(0.0001, now + duration)\n\n\t\t\tosc.connect(filter).connect(gain).connect(ctx.destination)\n\t\t\tosc.start(now + start)\n\t\t\tosc.stop(now + duration)\n\t\t}\n\n\t\tcreateBell(659.25, 0, 0.6) // E5\n\t\tcreateBell(523.25, 0.05, 0.55) // C5\n\t}\n\n\tpublic playWarningSound(volume = 0.25): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst osc1 = ctx.createOscillator()\n\t\tconst osc2 = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\t\tconst filter = ctx.createBiquadFilter()\n\n\t\tosc1.type = 'sine'\n\t\tosc2.type = 'sine'\n\t\tosc1.frequency.setValueAtTime(349.23, now) // F4\n\t\tosc2.frequency.setValueAtTime(440, now) // A4\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = 1000\n\n\t\tgain.gain.setValueAtTime(0.0001, now)\n\t\tgain.gain.exponentialRampToValueAtTime(volume, now + 0.08)\n\t\tgain.gain.exponentialRampToValueAtTime(0.0001, now + 0.5)\n\n\t\tosc1.connect(filter)\n\t\tosc2.connect(filter)\n\t\tfilter.connect(gain).connect(ctx.destination)\n\n\t\tosc1.start(now)\n\t\tosc2.start(now)\n\t\tosc1.stop(now + 0.55)\n\t\tosc2.stop(now + 0.55)\n\t}\n\n\tpublic playErrorSound(volume = 0.25): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst osc = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\t\tconst filter = ctx.createBiquadFilter()\n\n\t\tosc.type = 'triangle'\n\t\tosc.frequency.setValueAtTime(220, now) // A3\n\t\tosc.frequency.exponentialRampToValueAtTime(1760, now + 0.3) // A6\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = 800\n\t\tfilter.Q.value = 0.5\n\n\t\tgain.gain.setValueAtTime(0.0001, now)\n\t\tgain.gain.exponentialRampToValueAtTime(volume * 0.8, now + 0.1)\n\t\tgain.gain.exponentialRampToValueAtTime(0.0001, now + 0.7)\n\n\t\tosc.connect(filter).connect(gain).connect(ctx.destination)\n\t\tosc.start(now)\n\t\tosc.stop(now + 0.75)\n\t}\n\n\t/**\n\t * Generate audio blob files for all notification sounds\n\t * Returns a Promise that resolves with URLs to the generated audio files\n\t */\n\tpublic async generateAudioFiles(volume = 0.25): Promise<Record<string, string>> {\n\t\t// Create offline audio context for rendering\n\t\tconst sampleRate = 44100\n\t\tconst duration = 1 // 1 second duration to capture the full sound\n\n\t\tconst audioUrls: Record<string, string> = {}\n\n\t\t// Generate info sound\n\t\taudioUrls.info = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create oscillator for main tone\n\t\t\t\tconst oscillator = ctx.createOscillator()\n\t\t\t\toscillator.type = 'sine'\n\t\t\t\toscillator.frequency.setValueAtTime(320, 0)\n\t\t\t\toscillator.frequency.exponentialRampToValueAtTime(520, 0.3)\n\n\t\t\t\t// Create gain node for volume control with softer attack/release\n\t\t\t\tconst gainNode = ctx.createGain()\n\t\t\t\tgainNode.gain.setValueAtTime(0, 0)\n\t\t\t\tgainNode.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgainNode.gain.linearRampToValueAtTime(0, 0.5)\n\n\t\t\t\t// Connect and play\n\t\t\t\toscillator.connect(gainNode)\n\t\t\t\tgainNode.connect(ctx.destination)\n\t\t\t\toscillator.start()\n\t\t\t\toscillator.stop(0.5)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\t// Generate success sound\n\t\taudioUrls.success = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create main oscillator (higher note)\n\t\t\t\tconst osc1 = ctx.createOscillator()\n\t\t\t\tosc1.type = 'sine'\n\t\t\t\tosc1.frequency.setValueAtTime(660, 0)\n\n\t\t\t\t// Create secondary oscillator (lower note)\n\t\t\t\tconst osc2 = ctx.createOscillator()\n\t\t\t\tosc2.type = 'sine'\n\t\t\t\tosc2.frequency.setValueAtTime(440, 0)\n\n\t\t\t\t// Create gain nodes with softer envelope\n\t\t\t\tconst gain1 = ctx.createGain()\n\t\t\t\tgain1.gain.setValueAtTime(0, 0)\n\t\t\t\tgain1.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgain1.gain.linearRampToValueAtTime(0, 0.5)\n\n\t\t\t\tconst gain2 = ctx.createGain()\n\t\t\t\tgain2.gain.setValueAtTime(0, 0)\n\t\t\t\tgain2.gain.linearRampToValueAtTime(volume * 0.6, 0.15)\n\t\t\t\tgain2.gain.linearRampToValueAtTime(0, 0.7)\n\n\t\t\t\t// Connect and play\n\t\t\t\tosc1.connect(gain1)\n\t\t\t\tgain1.connect(ctx.destination)\n\n\t\t\t\tosc2.connect(gain2)\n\t\t\t\tgain2.connect(ctx.destination)\n\n\t\t\t\tosc1.start()\n\t\t\t\tosc2.start(0.15)\n\n\t\t\t\tosc1.stop(0.5)\n\t\t\t\tosc2.stop(0.7)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\t// Generate warning sound\n\t\taudioUrls.warning = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create oscillators for a two-tone warning\n\t\t\t\tconst osc1 = ctx.createOscillator()\n\t\t\t\tosc1.type = 'sine'\n\t\t\t\tosc1.frequency.setValueAtTime(293.66, 0)\n\n\t\t\t\tconst osc2 = ctx.createOscillator()\n\t\t\t\tosc2.type = 'sine'\n\t\t\t\tosc2.frequency.setValueAtTime(349.23, 0)\n\n\t\t\t\t// Create gain node with softer envelope\n\t\t\t\tconst gain = ctx.createGain()\n\t\t\t\tgain.gain.setValueAtTime(0, 0)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.6, 0.2)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.8, 0.3)\n\t\t\t\tgain.gain.linearRampToValueAtTime(0, 0.6)\n\n\t\t\t\t// Connect and play\n\t\t\t\tosc1.connect(gain)\n\t\t\t\tosc2.connect(gain)\n\t\t\t\tgain.connect(ctx.destination)\n\n\t\t\t\tosc1.start()\n\t\t\t\tosc2.start()\n\n\t\t\t\tosc1.stop(0.6)\n\t\t\t\tosc2.stop(0.6)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\t// Generate error sound\n\t\taudioUrls.error = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create main oscillator\n\t\t\t\tconst osc = ctx.createOscillator()\n\t\t\t\tosc.type = 'sine'\n\t\t\t\tosc.frequency.setValueAtTime(196, 0)\n\n\t\t\t\t// Create gain node with softer envelope\n\t\t\t\tconst gain = ctx.createGain()\n\t\t\t\tgain.gain.setValueAtTime(0, 0)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.4, 0.2)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.6, 0.3)\n\t\t\t\tgain.gain.linearRampToValueAtTime(0, 0.7)\n\n\t\t\t\t// Additional filter to make it even softer\n\t\t\t\tconst filter = ctx.createBiquadFilter()\n\t\t\t\tfilter.type = 'lowpass'\n\t\t\t\tfilter.frequency.value = 600\n\t\t\t\tfilter.Q.value = 0.7\n\n\t\t\t\t// Connect and play\n\t\t\t\tosc.connect(filter)\n\t\t\t\tfilter.connect(gain)\n\t\t\t\tgain.connect(ctx.destination)\n\n\t\t\t\tosc.start()\n\t\t\t\tosc.stop(0.7)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\treturn audioUrls\n\t}\n\n\t/**\n\t * Generate an audio file from a sound generation function\n\t * @param renderFunction Function that creates the sound in the provided context\n\t * @param sampleRate Sample rate for the audio\n\t * @param duration Duration in seconds\n\t * @returns Promise that resolves with the URL to the generated audio file\n\t */\n\tprivate async generateAudioFile(\n\t\trenderFunction: (ctx: OfflineAudioContext) => Promise<void>,\n\t\tsampleRate = 44100,\n\t\tduration = 1,\n\t): Promise<string> {\n\t\t// Create offline context\n\t\tconst offlineCtx = new OfflineAudioContext(2, sampleRate * duration, sampleRate)\n\n\t\t// Render the sound\n\t\tawait renderFunction(offlineCtx)\n\n\t\t// Render the audio\n\t\tconst audioBuffer = await offlineCtx.startRendering()\n\n\t\t// Convert to WAV format\n\t\tconst wavBlob = this.audioBufferToWav(audioBuffer)\n\n\t\t// Create URL\n\t\treturn URL.createObjectURL(wavBlob)\n\t}\n\n\t/**\n\t * Convert AudioBuffer to WAV format\n\t * Based on https://github.com/Jam3/audiobuffer-to-wav\n\t */\n\tprivate audioBufferToWav(buffer: AudioBuffer): Blob {\n\t\tconst numChannels = buffer.numberOfChannels\n\t\tconst sampleRate = buffer.sampleRate\n\t\tconst format = 1 // PCM\n\t\tconst bitDepth = 16\n\n\t\tconst bytesPerSample = bitDepth / 8\n\t\tconst blockAlign = numChannels * bytesPerSample\n\n\t\tconst samples = this.getAudioSamples(buffer, bitDepth)\n\t\tconst dataLength = samples.length * bytesPerSample\n\n\t\t// Create WAV header\n\t\tconst headerLength = 44\n\t\tconst wavBuffer = new ArrayBuffer(headerLength + dataLength)\n\t\tconst view = new DataView(wavBuffer)\n\n\t\t// RIFF identifier\n\t\tthis.writeString(view, 0, 'RIFF')\n\t\t// File length minus RIFF identifier and file size\n\t\tview.setUint32(4, 36 + dataLength, true)\n\t\t// RIFF type\n\t\tthis.writeString(view, 8, 'WAVE')\n\t\t// Format chunk identifier\n\t\tthis.writeString(view, 12, 'fmt ')\n\t\t// Format chunk length\n\t\tview.setUint32(16, 16, true)\n\t\t// Sample format (PCM)\n\t\tview.setUint16(20, format, true)\n\t\t// Channel count\n\t\tview.setUint16(22, numChannels, true)\n\t\t// Sample rate\n\t\tview.setUint32(24, sampleRate, true)\n\t\t// Byte rate (sample rate * block align)\n\t\tview.setUint32(28, sampleRate * blockAlign, true)\n\t\t// Block align (channel count * bytes per sample)\n\t\tview.setUint16(32, blockAlign, true)\n\t\t// Bits per sample\n\t\tview.setUint16(34, bitDepth, true)\n\t\t// Data chunk identifier\n\t\tthis.writeString(view, 36, 'data')\n\t\t// Data chunk length\n\t\tview.setUint32(40, dataLength, true)\n\n\t\t// Write the audio data\n\t\tif (bitDepth === 16) {\n\t\t\tthis.writeInt16Samples(view, headerLength, samples)\n\t\t} else {\n\t\t\tthrow new Error('Only 16-bit audio is supported')\n\t\t}\n\n\t\treturn new Blob([wavBuffer], { type: 'audio/wav' })\n\t}\n\n\t/**\n\t * Get audio samples from an AudioBuffer\n\t */\n\tprivate getAudioSamples(buffer: AudioBuffer, bitDepth: number): number[] {\n\t\tconst numChannels = buffer.numberOfChannels\n\t\tconst length = buffer.length\n\t\tconst samples: number[] = []\n\t\tconst scale = bitDepth === 16 ? 32768 : 128\n\n\t\t// Get samples from all channels\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tfor (let channel = 0; channel < numChannels; channel++) {\n\t\t\t\tconst sample = buffer.getChannelData(channel)[i]\n\t\t\t\t// Convert float32 to int16 or int8\n\t\t\t\tconst intSample = Math.max(-1, Math.min(1, sample))\n\t\t\t\tsamples.push(intSample * scale)\n\t\t\t}\n\t\t}\n\n\t\treturn samples\n\t}\n\n\t/**\n\t * Write 16-bit samples to a DataView\n\t */\n\tprivate writeInt16Samples(view: DataView, offset: number, samples: number[]): void {\n\t\tfor (let i = 0; i < samples.length; i++) {\n\t\t\tview.setInt16(offset + i * 2, samples[i], true)\n\t\t}\n\t}\n\n\t/**\n\t * Write a string to a DataView\n\t */\n\tprivate writeString(view: DataView, offset: number, string: string): void {\n\t\tfor (let i = 0; i < string.length; i++) {\n\t\t\tview.setUint8(offset + i, string.charCodeAt(i))\n\t\t}\n\t}\n}\n","import { NotificationType } from './notification'\nimport { NotificationSoundGenerator } from './notification-audio-generator'\n\n/**\n * Audio service for playing notification sounds.\n * Uses Web Audio API with fallback to HTML5 Audio.\n */\nexport class NotificationAudioService {\n\tprivate audioContext: AudioContext | null = null\n\tprivate soundBuffers: Map<NotificationType, AudioBuffer> = new Map()\n\tprivate volume: number = 0.5\n\tprivate muted: boolean = false\n\tprivate soundGenerator = new NotificationSoundGenerator()\n\n\t// Default sound URLs (will be generated programmatically as fallback)\n\tprivate soundUrls: Record<NotificationType, string> = {\n\t\tinfo: '/assets/sounds/notification-info.mp3',\n\t\tsuccess: '/assets/sounds/notification-success.mp3',\n\t\twarning: '/assets/sounds/notification-warning.mp3',\n\t\terror: '/assets/sounds/notification-error.mp3',\n\t}\n\n\tconstructor() {\n\t\t// Initialize audio context when first needed\n\t\tthis.initializeAudioFiles()\n\t}\n\n\t/**\n\t * Initialize audio files - generate programmatically if needed\n\t */\n\tprivate async initializeAudioFiles(): Promise<void> {\n\t\ttry {\n\t\t\t// Try to load from default URLs\n\t\t\tawait this.preloadSounds()\n\t\t} catch (err) {\n\t\t\tconsole.log('Generating programmatic notification sounds')\n\n\t\t\t// If loading fails, generate programmatically\n\t\t\ttry {\n\t\t\t\tconst generatedUrls = await this.soundGenerator.generateAudioFiles(this.volume)\n\t\t\t\tthis.soundUrls = generatedUrls\n\t\t\t} catch (genErr) {\n\t\t\t\tconsole.warn('Failed to generate notification sounds:', genErr)\n\t\t\t\t// Will fall back to direct playback when needed\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Lazy-initialize the audio context\n\t */\n\tprivate getAudioContext(): AudioContext {\n\t\tif (!this.audioContext) {\n\t\t\t// Use AudioContext with webkit prefix fallback for Safari\n\t\t\tconst AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n\t\t\tthis.audioContext = new AudioContextClass()\n\t\t}\n\n\t\treturn this.audioContext\n\t}\n\n\t/**\n\t * Preload all notification sounds\n\t */\n\tprivate async preloadSounds(): Promise<void> {\n\t\tconst types: NotificationType[] = ['info', 'success', 'warning', 'error']\n\n\t\tfor (const type of types) {\n\t\t\ttry {\n\t\t\t\tconst buffer = await this.loadSound(type)\n\t\t\t\tthis.soundBuffers.set(type, buffer)\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(`Failed to preload ${type} sound:`, err)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Load a sound file and decode it\n\t */\n\tprivate async loadSound(type: NotificationType): Promise<AudioBuffer> {\n\t\tconst url = this.soundUrls[type]\n\t\tconst response = await fetch(url)\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to load sound from ${url}: ${response.statusText}`)\n\t\t}\n\n\t\tconst arrayBuffer = await response.arrayBuffer()\n\t\treturn await this.getAudioContext().decodeAudioData(arrayBuffer)\n\t}\n\n\t/**\n\t * Play a notification sound\n\t */\n\tpublic async playSound(type: NotificationType): Promise<void> {\n\t\tif (this.muted) return\n\n\t\ttry {\n\t\t\t// Try to use Web Audio API first\n\t\t\tconst context = this.getAudioContext()\n\n\t\t\t// Ensure audio context is resumed (needed due to autoplay policy)\n\t\t\tif (context.state === 'suspended') {\n\t\t\t\tawait context.resume()\n\t\t\t}\n\n\t\t\t// Try to use programmatically generated sound first\n\t\t\tif (this.soundUrls[type].startsWith('blob:')) {\n\t\t\t\tthis.playFallbackSound(type)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Load sound if not already cached\n\t\t\tif (!this.soundBuffers.has(type)) {\n\t\t\t\ttry {\n\t\t\t\t\tconst buffer = await this.loadSound(type)\n\t\t\t\t\tthis.soundBuffers.set(type, buffer)\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Fall back to direct generator\n\t\t\t\t\tthis.playDirectGeneratedSound(type)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst buffer = this.soundBuffers.get(type)\n\t\t\tif (!buffer) {\n\t\t\t\tthrow new Error(`Sound buffer for ${type} not available`)\n\t\t\t}\n\n\t\t\t// Create source and gain nodes\n\t\t\tconst source = context.createBufferSource()\n\t\t\tsource.buffer = buffer\n\n\t\t\tconst gainNode = context.createGain()\n\t\t\tgainNode.gain.value = this.volume\n\n\t\t\t// Connect and play\n\t\t\tsource.connect(gainNode)\n\t\t\tgainNode.connect(context.destination)\n\t\t\tsource.start(0)\n\t\t} catch (err) {\n\t\t\tconsole.warn(`Web Audio API buffer playback failed, trying direct generation:`, err)\n\t\t\tthis.playDirectGeneratedSound(type)\n\t\t}\n\t}\n\n\t/**\n\t * Play a directly generated sound when other methods fail\n\t */\n\tprivate playDirectGeneratedSound(type: NotificationType): void {\n\t\tif (this.muted) return\n\n\t\ttry {\n\t\t\tswitch (type) {\n\t\t\t\tcase 'info':\n\t\t\t\t\tthis.soundGenerator.playInfoSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'success':\n\t\t\t\t\tthis.soundGenerator.playSuccessSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'warning':\n\t\t\t\t\tthis.soundGenerator.playWarningSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'error':\n\t\t\t\t\tthis.soundGenerator.playErrorSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(`Failed to play generated sound for ${type}:`, err)\n\t\t}\n\t}\n\n\t/**\n\t * Play sound using HTML5 Audio as a fallback\n\t */\n\tprivate playFallbackSound(type: NotificationType): void {\n\t\tif (this.muted) return\n\n\t\ttry {\n\t\t\tconst audio = new Audio(this.soundUrls[type])\n\t\t\taudio.volume = this.volume\n\n\t\t\t// Add event listener to clean up after playback\n\t\t\taudio.addEventListener('ended', () => {\n\t\t\t\taudio.remove()\n\t\t\t})\n\n\t\t\taudio.play().catch(err => {\n\t\t\t\tconsole.error(`Failed to play fallback sound for ${type}:`, err)\n\t\t\t\tthis.playDirectGeneratedSound(type)\n\t\t\t})\n\t\t} catch (err) {\n\t\t\tconsole.error('HTML5 Audio fallback failed:', err)\n\t\t\tthis.playDirectGeneratedSound(type)\n\t\t}\n\t}\n\n\t/**\n\t * Set volume for notification sounds (0.0 to 1.0)\n\t */\n\tpublic setVolume(volume: number): void {\n\t\tthis.volume = Math.max(0, Math.min(1, volume))\n\t}\n\n\t/**\n\t * Get current volume level\n\t */\n\tpublic getVolume(): number {\n\t\treturn this.volume\n\t}\n\n\t/**\n\t * Mute notification sounds\n\t */\n\tpublic mute(): void {\n\t\tthis.muted = true\n\t}\n\n\t/**\n\t * Unmute notification sounds\n\t */\n\tpublic unmute(): void {\n\t\tthis.muted = false\n\t}\n\n\t/**\n\t * Check if notification sounds are muted\n\t */\n\tpublic isMuted(): boolean {\n\t\treturn this.muted\n\t}\n\n\t/**\n\t * Set custom sound URL for a notification type\n\t */\n\tpublic setSoundUrl(type: NotificationType, url: string): void {\n\t\tthis.soundUrls[type] = url\n\n\t\t// Clear cached buffer to force reload\n\t\tthis.soundBuffers.delete(type)\n\t}\n\n\t/**\n\t * Get the current sound URL for a notification type\n\t */\n\tpublic getSoundUrl(type: NotificationType): string {\n\t\treturn this.soundUrls[type]\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { fromEvent, takeUntil } from 'rxjs'\nimport { NotificationType } from './notification'\nimport { NotificationAudioService } from './notification-audio'\nimport style from './notification-container.scss?inline'\n\nexport interface NotificationItem {\n\tid: string\n\ttitle: string\n\tmessage: string\n\ttype: NotificationType\n\tduration: number\n\tclosable: boolean\n\tplaySound: boolean\n}\n\nexport interface NotificationOptions {\n\tid?: string\n\ttitle?: string\n\tmessage: string\n\ttype?: NotificationType\n\tduration?: number\n\tclosable?: boolean\n\tplaySound?: boolean\n}\n\n/**\n * Container component for displaying stacked notifications.\n *\n * @element sch-notification-container\n */\n@customElement('sch-notification-container')\nexport default class SchmancyNotificationContainer extends $LitElement(style) {\n\t@property({ type: String }) position:\n\t\t| 'top-right'\n\t\t| 'top-left'\n\t\t| 'bottom-right'\n\t\t| 'bottom-left'\n\t\t| 'top-center'\n\t\t| 'bottom-center' = 'top-right'\n\t@property({ type: Number }) maxVisibleNotifications = 5\n\t@property({ type: Boolean }) playSound = false\n\t@property({ type: Number }) audioVolume = 0.5\n\n\t@state() private _notifications: NotificationItem[] = []\n\n\t// Audio service\n\tprivate _audioService = new NotificationAudioService()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Set audio volume\n\t\tthis._audioService.setVolume(this.audioVolume)\n\n\t\t// Listen for notification events\n\t\tfromEvent<CustomEvent<NotificationOptions>>(window, 'schmancy-notification')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(event => {\n\t\t\t\tthis.addNotification(event.detail)\n\t\t\t})\n\n\t\t// Listen for play sound events from child notifications\n\t\tthis.addEventListener('playsound', ((event: CustomEvent) => {\n\t\t\tif (this.playSound) {\n\t\t\t\tthis._audioService.playSound(event.detail.type)\n\t\t\t}\n\t\t}) as EventListener)\n\t}\n\n\t// Public API to add notifications\n\tpublic addNotification(options: NotificationOptions): string {\n\t\tconst id = options.id || `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\n\t\tconst notification: NotificationItem = {\n\t\t\tid,\n\t\t\ttitle: options.title || '',\n\t\t\tmessage: options.message,\n\t\t\ttype: options.type || 'info',\n\t\t\tduration: options.duration !== undefined ? options.duration : 750,\n\t\t\tclosable: options.closable !== undefined ? options.closable : true,\n\t\t\tplaySound: options.playSound !== undefined ? options.playSound : this.playSound,\n\t\t}\n\n\t\t// Add new notification (top for top-* positions, bottom for bottom-* positions)\n\t\tif (this.position.startsWith('top')) {\n\t\t\tthis._notifications = [...this._notifications, notification]\n\t\t} else {\n\t\t\tthis._notifications = [notification, ...this._notifications]\n\t\t}\n\n\t\t// Enforce max visible notifications\n\t\tif (this._notifications.length > this.maxVisibleNotifications) {\n\t\t\tthis._notifications = this._notifications.slice(-this.maxVisibleNotifications)\n\t\t}\n\n\t\t// Play sound if enabled\n\t\tif (notification.playSound) {\n\t\t\tthis._audioService.playSound(notification.type)\n\t\t}\n\n\t\treturn id\n\t}\n\n\tpublic removeNotification(id: string) {\n\t\tthis._notifications = this._notifications.filter(n => n.id !== id)\n\t}\n\n\tprivate _handleClose(e: CustomEvent) {\n\t\tconst id = e.detail.id\n\t\tthis.removeNotification(id)\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap({\n\t\t\t\t\t'notification-container': true,\n\t\t\t\t\t[this.position]: true,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t${repeat(\n\t\t\t\t\tthis._notifications,\n\t\t\t\t\tnotification => notification.id,\n\t\t\t\t\tnotification => html`\n <sch-notification\n .id=${notification.id}\n .title=${notification.title}\n .message=${notification.message}\n .type=${notification.type}\n .duration=${notification.duration}\n ?closable=${notification.closable}\n ?playSound=${false} /* We already played the sound on add */\n @close=${this._handleClose}\n ></sch-notification>\n `,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-notification-container': SchmancyNotificationContainer\n\t}\n}\n"],"names":["SchmancyNotification","$LitElement","super","arguments","this","title","message","type","closable","duration","id","Date","now","Math","floor","random","playSound","_visible","_progress","_hovered","_closing","connectedCallback","_startAutoCloseTimer","_playSound","disconnectedCallback","_clearTimers","changedProps","updated","has","endTime","_autoCloseTimer","window","setTimeout","close","_progressTimer","setInterval","remaining","max","clearTimeout","clearInterval","_pauseTimers","remainingTime","dispatchEvent","CustomEvent","detail","bubbles","composed","_resumeTimers","html","typeStyles","_getTypeStyles","classMap","notification","closing","styleMap","transform","opacity","_handleMouseEnter","_handleMouseLeave","color","iconColor","icon","bgColor","progressColor","SchmancyTheme","sys","success","default","tertiary","error","primary","__decorateClass","property","String","prototype","Boolean","Number","state","customElement","NotificationSoundGenerator","audioContext","getAudioContext","AudioContextClass","AudioContext","webkitAudioContext","volume","ctx","currentTime","oscillator","createOscillator","gainNode","createGain","filter","createBiquadFilter","frequency","setValueAtTime","exponentialRampToValueAtTime","value","gain","connect","destination","start","stop","createBell","freq","osc","osc1","osc2","Q","generateAudioFiles","audioUrls","info","generateAudioFile","async","linearRampToValueAtTime","sampleRate","gain1","gain2","warning","renderFunction","offlineCtx","OfflineAudioContext","audioBuffer","startRendering","wavBlob","audioBufferToWav","URL","createObjectURL","buffer","numChannels","numberOfChannels","blockAlign","bitDepth","samples","getAudioSamples","dataLength","length","wavBuffer","ArrayBuffer","view","DataView","writeString","setUint32","setUint16","writeInt16Samples","Blob","scale","i","channel","sample","getChannelData","intSample","min","push","offset","setInt16","string","setUint8","charCodeAt","NotificationAudioService","constructor","soundBuffers","Map","muted","soundGenerator","soundUrls","initializeAudioFiles","preloadSounds","err","generatedUrls","types","loadSound","set","url","response","fetch","ok","Error","statusText","arrayBuffer","decodeAudioData","context","resume","startsWith","playFallbackSound","playDirectGeneratedSound","get","source","createBufferSource","playInfoSound","playSuccessSound","playWarningSound","playErrorSound","audio","Audio","addEventListener","remove","play","catch","mute","unmute","delete","SchmancyNotificationContainer","position","maxVisibleNotifications","audioVolume","_notifications","_audioService","setVolume","fromEvent","pipe","takeUntil","disconnecting","subscribe","event","addNotification","options","slice","n","e","removeNotification","repeat","_handleClose"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"notification-container-CRjLSf2l.cjs","sources":["../src/notification/notification.ts","../src/notification/notification-audio-generator.ts","../src/notification/notification-audio.ts","../src/notification/notification-container.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { html, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport style from './notification.scss?inline'\n\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error'\n\n/**\n * @fires close - When notification is closed\n */\n@customElement('sch-notification')\nexport default class SchmancyNotification extends $LitElement(style) {\n\t@property({ type: String }) title = ''\n\t@property({ type: String }) message = ''\n\t@property({ type: String }) type: NotificationType = 'info'\n\t@property({ type: Boolean }) closable = true\n\t@property({ type: Number }) duration = 5000 // 0 means no auto-close\n\t@property({ type: String }) id = `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\t@property({ type: Boolean }) playSound = true\n\n\t@state() private _visible = true\n\t@state() private _progress = 100\n\t@state() private _hovered = false\n\t@state() private _closing = false\n\t@state() private _autoCloseTimer?: number\n\t@state() private _progressTimer?: number\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\tif (this.duration > 0) {\n\t\t\tthis._startAutoCloseTimer()\n\t\t}\n\n\t\tif (this.playSound) {\n\t\t\tthis._playSound()\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis._clearTimers()\n\t\tsuper.disconnectedCallback()\n\t}\n\n\tupdated(changedProps: PropertyValues) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('duration') && this.duration > 0) {\n\t\t\tthis._clearTimers()\n\t\t\tthis._startAutoCloseTimer()\n\t\t}\n\t}\n\n\tprivate _startAutoCloseTimer() {\n\t\tif (this.duration <= 0) return\n\n\t\tconst startTime = Date.now()\n\t\tconst endTime = startTime + this.duration\n\n\t\t// Setup the auto-close timer\n\t\tthis._autoCloseTimer = window.setTimeout(() => {\n\t\t\tthis.close()\n\t\t}, this.duration)\n\n\t\t// Setup the progress timer to update every 16ms (60fps)\n\t\tthis._progressTimer = window.setInterval(() => {\n\t\t\tif (this._hovered) return\n\n\t\t\tconst now = Date.now()\n\t\t\tconst remaining = Math.max(0, endTime - now)\n\t\t\tthis._progress = (remaining / this.duration) * 100\n\n\t\t\tif (remaining <= 0) {\n\t\t\t\tthis._clearTimers()\n\t\t\t}\n\t\t}, 16)\n\t}\n\n\tprivate _clearTimers() {\n\t\tif (this._autoCloseTimer) {\n\t\t\tclearTimeout(this._autoCloseTimer)\n\t\t\tthis._autoCloseTimer = undefined\n\t\t}\n\n\t\tif (this._progressTimer) {\n\t\t\tclearInterval(this._progressTimer)\n\t\t\tthis._progressTimer = undefined\n\t\t}\n\t}\n\n\tprivate _pauseTimers() {\n\t\tthis._clearTimers()\n\t}\n\n\tprivate _resumeTimers() {\n\t\tif (this.duration > 0) {\n\t\t\t// Calculate remaining time based on progress\n\t\t\tconst remainingTime = (this._progress / 100) * this.duration\n\n\t\t\tif (remainingTime > 0) {\n\t\t\t\tthis._autoCloseTimer = window.setTimeout(() => {\n\t\t\t\t\tthis.close()\n\t\t\t\t}, remainingTime)\n\n\t\t\t\tconst startTime = Date.now()\n\t\t\t\tconst endTime = startTime + remainingTime\n\n\t\t\t\tthis._progressTimer = window.setInterval(() => {\n\t\t\t\t\tif (this._hovered) return\n\n\t\t\t\t\tconst now = Date.now()\n\t\t\t\t\tconst remaining = Math.max(0, endTime - now)\n\t\t\t\t\tthis._progress = (remaining / remainingTime) * 100\n\n\t\t\t\t\tif (remaining <= 0) {\n\t\t\t\t\t\tthis._clearTimers()\n\t\t\t\t\t}\n\t\t\t\t}, 16)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _playSound() {\n\t\t// Dispatch event to play sound through audio service\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('playsound', {\n\t\t\t\tdetail: { type: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate _handleMouseEnter() {\n\t\tthis._hovered = true\n\t\tthis._pauseTimers()\n\t}\n\n\tprivate _handleMouseLeave() {\n\t\tthis._hovered = false\n\t\tthis._resumeTimers()\n\t}\n\n\tpublic close() {\n\t\tif (this._closing) return\n\n\t\tthis._closing = true\n\t\tthis._clearTimers()\n\n\t\t// Add closing animation\n\t\tthis._visible = false\n\n\t\t// Dispatch close event\n\t\tsetTimeout(() => {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('close', {\n\t\t\t\t\tdetail: { id: this.id },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}, 300) // Match animation duration\n\t}\n\n\trender() {\n\t\tif (!this._visible && this._closing) return html``\n\n\t\tconst typeStyles = this._getTypeStyles()\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap({\n\t\t\t\t\tnotification: true,\n\t\t\t\t\tclosing: this._closing,\n\t\t\t\t\t[this.type]: true,\n\t\t\t\t})}\n\t\t\t\trole=\"alert\"\n\t\t\t\tstyle=${styleMap({\n\t\t\t\t\ttransform: this._closing ? 'translateX(120%)' : 'translateX(0)',\n\t\t\t\t\topacity: this._closing ? '0' : '1',\n\t\t\t\t})}\n\t\t\t\t@mouseenter=${this._handleMouseEnter}\n\t\t\t\t@mouseleave=${this._handleMouseLeave}\n\t\t\t>\n\t\t\t\t<div class=\"notification-content\">\n\t\t\t\t\t<div class=\"icon-container\" ${color({ color: typeStyles.iconColor })}>${typeStyles.icon}</div>\n\n\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t${this.title ? html` <div class=\"title\">${this.title}</div> ` : ''}\n\n\t\t\t\t\t\t<div class=\"message\">${this.message}</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t${this.closable\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<button class=\"close-button\" aria-label=\"Close notification\" @click=${this.close}>\n\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n\t\t\t\t\t\t\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: ''}\n\t\t\t\t</div>\n\n\t\t\t\t${this.duration > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"progress-bar-container\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"progress-bar\"\n\t\t\t\t\t\t\t\t\tstyle=\"width: ${this._progress}%\"\n\t\t\t\t\t\t\t\t\t${color({ bgColor: typeStyles.progressColor })}\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`\n\t\t\t\t\t: ''}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate _getTypeStyles() {\n\t\tswitch (this.type) {\n\t\t\tcase 'success':\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path>\n\t\t\t\t\t\t\t<polyline points=\"22 4 12 14.01 9 11.01\"></polyline>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.success.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.success.default,\n\t\t\t\t}\n\t\t\tcase 'warning':\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.tertiary.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.tertiary.default,\n\t\t\t\t}\n\t\t\tcase 'error':\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n\t\t\t\t\t\t\t<line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>\n\t\t\t\t\t\t\t<line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.error.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.error.default,\n\t\t\t\t}\n\t\t\tcase 'info':\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\ticon: html`\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"></line>\n\t\t\t\t\t\t\t<line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"></line>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t`,\n\t\t\t\t\ticonColor: SchmancyTheme.sys.color.primary.default,\n\t\t\t\t\tprogressColor: SchmancyTheme.sys.color.primary.default,\n\t\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-notification': SchmancyNotification\n\t}\n}\n","/**\n * Programmatic sound generator for Schmancy notifications\n * Uses Web Audio API to generate gentle, subtle and soft sounds for each notification type\n */\nexport class NotificationSoundGenerator {\n\tprivate audioContext: AudioContext | null = null\n\n\t/**\n\t * Get or create AudioContext\n\t */\n\tprivate getAudioContext(): AudioContext {\n\t\tif (!this.audioContext) {\n\t\t\tconst AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n\t\t\tthis.audioContext = new AudioContextClass()\n\t\t}\n\t\treturn this.audioContext\n\t}\n\n\tpublic playInfoSound(volume = 0.2): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst oscillator = ctx.createOscillator()\n\t\tconst gainNode = ctx.createGain()\n\t\tconst filter = ctx.createBiquadFilter()\n\n\t\toscillator.type = 'sine'\n\t\toscillator.frequency.setValueAtTime(392, now) // G4\n\t\toscillator.frequency.exponentialRampToValueAtTime(523.25, now + 0.25) // C5\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = 1500\n\n\t\tgainNode.gain.setValueAtTime(0.0001, now)\n\t\tgainNode.gain.exponentialRampToValueAtTime(volume, now + 0.15)\n\t\tgainNode.gain.exponentialRampToValueAtTime(0.0001, now + 0.4)\n\n\t\toscillator.connect(filter).connect(gainNode).connect(ctx.destination)\n\t\toscillator.start(now)\n\t\toscillator.stop(now + 0.45)\n\t}\n\n\tpublic playSuccessSound(volume = 0.2): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst createBell = (freq: number, start: number, duration: number) => {\n\t\t\tconst osc = ctx.createOscillator()\n\t\t\tconst gain = ctx.createGain()\n\t\t\tconst filter = ctx.createBiquadFilter()\n\n\t\t\tosc.type = 'sine'\n\t\t\tosc.frequency.setValueAtTime(freq, now)\n\t\t\tfilter.type = 'lowpass'\n\t\t\tfilter.frequency.value = freq * 4\n\n\t\t\tgain.gain.setValueAtTime(0.0001, now)\n\t\t\tgain.gain.exponentialRampToValueAtTime(volume, now + 0.1)\n\t\t\tgain.gain.exponentialRampToValueAtTime(0.0001, now + duration)\n\n\t\t\tosc.connect(filter).connect(gain).connect(ctx.destination)\n\t\t\tosc.start(now + start)\n\t\t\tosc.stop(now + duration)\n\t\t}\n\n\t\tcreateBell(659.25, 0, 0.6) // E5\n\t\tcreateBell(523.25, 0.05, 0.55) // C5\n\t}\n\n\tpublic playWarningSound(volume = 0.25): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst osc1 = ctx.createOscillator()\n\t\tconst osc2 = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\t\tconst filter = ctx.createBiquadFilter()\n\n\t\tosc1.type = 'sine'\n\t\tosc2.type = 'sine'\n\t\tosc1.frequency.setValueAtTime(349.23, now) // F4\n\t\tosc2.frequency.setValueAtTime(440, now) // A4\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = 1000\n\n\t\tgain.gain.setValueAtTime(0.0001, now)\n\t\tgain.gain.exponentialRampToValueAtTime(volume, now + 0.08)\n\t\tgain.gain.exponentialRampToValueAtTime(0.0001, now + 0.5)\n\n\t\tosc1.connect(filter)\n\t\tosc2.connect(filter)\n\t\tfilter.connect(gain).connect(ctx.destination)\n\n\t\tosc1.start(now)\n\t\tosc2.start(now)\n\t\tosc1.stop(now + 0.55)\n\t\tosc2.stop(now + 0.55)\n\t}\n\n\tpublic playErrorSound(volume = 0.25): void {\n\t\tconst ctx = this.getAudioContext()\n\t\tconst now = ctx.currentTime\n\n\t\tconst osc = ctx.createOscillator()\n\t\tconst gain = ctx.createGain()\n\t\tconst filter = ctx.createBiquadFilter()\n\n\t\tosc.type = 'triangle'\n\t\tosc.frequency.setValueAtTime(220, now) // A3\n\t\tosc.frequency.exponentialRampToValueAtTime(1760, now + 0.3) // A6\n\n\t\tfilter.type = 'lowpass'\n\t\tfilter.frequency.value = 800\n\t\tfilter.Q.value = 0.5\n\n\t\tgain.gain.setValueAtTime(0.0001, now)\n\t\tgain.gain.exponentialRampToValueAtTime(volume * 0.8, now + 0.1)\n\t\tgain.gain.exponentialRampToValueAtTime(0.0001, now + 0.7)\n\n\t\tosc.connect(filter).connect(gain).connect(ctx.destination)\n\t\tosc.start(now)\n\t\tosc.stop(now + 0.75)\n\t}\n\n\t/**\n\t * Generate audio blob files for all notification sounds\n\t * Returns a Promise that resolves with URLs to the generated audio files\n\t */\n\tpublic async generateAudioFiles(volume = 0.25): Promise<Record<string, string>> {\n\t\t// Create offline audio context for rendering\n\t\tconst sampleRate = 44100\n\t\tconst duration = 1 // 1 second duration to capture the full sound\n\n\t\tconst audioUrls: Record<string, string> = {}\n\n\t\t// Generate info sound\n\t\taudioUrls.info = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create oscillator for main tone\n\t\t\t\tconst oscillator = ctx.createOscillator()\n\t\t\t\toscillator.type = 'sine'\n\t\t\t\toscillator.frequency.setValueAtTime(320, 0)\n\t\t\t\toscillator.frequency.exponentialRampToValueAtTime(520, 0.3)\n\n\t\t\t\t// Create gain node for volume control with softer attack/release\n\t\t\t\tconst gainNode = ctx.createGain()\n\t\t\t\tgainNode.gain.setValueAtTime(0, 0)\n\t\t\t\tgainNode.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgainNode.gain.linearRampToValueAtTime(0, 0.5)\n\n\t\t\t\t// Connect and play\n\t\t\t\toscillator.connect(gainNode)\n\t\t\t\tgainNode.connect(ctx.destination)\n\t\t\t\toscillator.start()\n\t\t\t\toscillator.stop(0.5)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\t// Generate success sound\n\t\taudioUrls.success = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create main oscillator (higher note)\n\t\t\t\tconst osc1 = ctx.createOscillator()\n\t\t\t\tosc1.type = 'sine'\n\t\t\t\tosc1.frequency.setValueAtTime(660, 0)\n\n\t\t\t\t// Create secondary oscillator (lower note)\n\t\t\t\tconst osc2 = ctx.createOscillator()\n\t\t\t\tosc2.type = 'sine'\n\t\t\t\tosc2.frequency.setValueAtTime(440, 0)\n\n\t\t\t\t// Create gain nodes with softer envelope\n\t\t\t\tconst gain1 = ctx.createGain()\n\t\t\t\tgain1.gain.setValueAtTime(0, 0)\n\t\t\t\tgain1.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgain1.gain.linearRampToValueAtTime(0, 0.5)\n\n\t\t\t\tconst gain2 = ctx.createGain()\n\t\t\t\tgain2.gain.setValueAtTime(0, 0)\n\t\t\t\tgain2.gain.linearRampToValueAtTime(volume * 0.6, 0.15)\n\t\t\t\tgain2.gain.linearRampToValueAtTime(0, 0.7)\n\n\t\t\t\t// Connect and play\n\t\t\t\tosc1.connect(gain1)\n\t\t\t\tgain1.connect(ctx.destination)\n\n\t\t\t\tosc2.connect(gain2)\n\t\t\t\tgain2.connect(ctx.destination)\n\n\t\t\t\tosc1.start()\n\t\t\t\tosc2.start(0.15)\n\n\t\t\t\tosc1.stop(0.5)\n\t\t\t\tosc2.stop(0.7)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\t// Generate warning sound\n\t\taudioUrls.warning = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create oscillators for a two-tone warning\n\t\t\t\tconst osc1 = ctx.createOscillator()\n\t\t\t\tosc1.type = 'sine'\n\t\t\t\tosc1.frequency.setValueAtTime(293.66, 0)\n\n\t\t\t\tconst osc2 = ctx.createOscillator()\n\t\t\t\tosc2.type = 'sine'\n\t\t\t\tosc2.frequency.setValueAtTime(349.23, 0)\n\n\t\t\t\t// Create gain node with softer envelope\n\t\t\t\tconst gain = ctx.createGain()\n\t\t\t\tgain.gain.setValueAtTime(0, 0)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.6, 0.2)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.8, 0.3)\n\t\t\t\tgain.gain.linearRampToValueAtTime(0, 0.6)\n\n\t\t\t\t// Connect and play\n\t\t\t\tosc1.connect(gain)\n\t\t\t\tosc2.connect(gain)\n\t\t\t\tgain.connect(ctx.destination)\n\n\t\t\t\tosc1.start()\n\t\t\t\tosc2.start()\n\n\t\t\t\tosc1.stop(0.6)\n\t\t\t\tosc2.stop(0.6)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\t// Generate error sound\n\t\taudioUrls.error = await this.generateAudioFile(\n\t\t\tasync ctx => {\n\t\t\t\t// Create main oscillator\n\t\t\t\tconst osc = ctx.createOscillator()\n\t\t\t\tosc.type = 'sine'\n\t\t\t\tosc.frequency.setValueAtTime(196, 0)\n\n\t\t\t\t// Create gain node with softer envelope\n\t\t\t\tconst gain = ctx.createGain()\n\t\t\t\tgain.gain.setValueAtTime(0, 0)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume, 0.1)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.4, 0.2)\n\t\t\t\tgain.gain.linearRampToValueAtTime(volume * 0.6, 0.3)\n\t\t\t\tgain.gain.linearRampToValueAtTime(0, 0.7)\n\n\t\t\t\t// Additional filter to make it even softer\n\t\t\t\tconst filter = ctx.createBiquadFilter()\n\t\t\t\tfilter.type = 'lowpass'\n\t\t\t\tfilter.frequency.value = 600\n\t\t\t\tfilter.Q.value = 0.7\n\n\t\t\t\t// Connect and play\n\t\t\t\tosc.connect(filter)\n\t\t\t\tfilter.connect(gain)\n\t\t\t\tgain.connect(ctx.destination)\n\n\t\t\t\tosc.start()\n\t\t\t\tosc.stop(0.7)\n\t\t\t},\n\t\t\tsampleRate,\n\t\t\tduration,\n\t\t)\n\n\t\treturn audioUrls\n\t}\n\n\t/**\n\t * Generate an audio file from a sound generation function\n\t * @param renderFunction Function that creates the sound in the provided context\n\t * @param sampleRate Sample rate for the audio\n\t * @param duration Duration in seconds\n\t * @returns Promise that resolves with the URL to the generated audio file\n\t */\n\tprivate async generateAudioFile(\n\t\trenderFunction: (ctx: OfflineAudioContext) => Promise<void>,\n\t\tsampleRate = 44100,\n\t\tduration = 1,\n\t): Promise<string> {\n\t\t// Create offline context\n\t\tconst offlineCtx = new OfflineAudioContext(2, sampleRate * duration, sampleRate)\n\n\t\t// Render the sound\n\t\tawait renderFunction(offlineCtx)\n\n\t\t// Render the audio\n\t\tconst audioBuffer = await offlineCtx.startRendering()\n\n\t\t// Convert to WAV format\n\t\tconst wavBlob = this.audioBufferToWav(audioBuffer)\n\n\t\t// Create URL\n\t\treturn URL.createObjectURL(wavBlob)\n\t}\n\n\t/**\n\t * Convert AudioBuffer to WAV format\n\t * Based on https://github.com/Jam3/audiobuffer-to-wav\n\t */\n\tprivate audioBufferToWav(buffer: AudioBuffer): Blob {\n\t\tconst numChannels = buffer.numberOfChannels\n\t\tconst sampleRate = buffer.sampleRate\n\t\tconst format = 1 // PCM\n\t\tconst bitDepth = 16\n\n\t\tconst bytesPerSample = bitDepth / 8\n\t\tconst blockAlign = numChannels * bytesPerSample\n\n\t\tconst samples = this.getAudioSamples(buffer, bitDepth)\n\t\tconst dataLength = samples.length * bytesPerSample\n\n\t\t// Create WAV header\n\t\tconst headerLength = 44\n\t\tconst wavBuffer = new ArrayBuffer(headerLength + dataLength)\n\t\tconst view = new DataView(wavBuffer)\n\n\t\t// RIFF identifier\n\t\tthis.writeString(view, 0, 'RIFF')\n\t\t// File length minus RIFF identifier and file size\n\t\tview.setUint32(4, 36 + dataLength, true)\n\t\t// RIFF type\n\t\tthis.writeString(view, 8, 'WAVE')\n\t\t// Format chunk identifier\n\t\tthis.writeString(view, 12, 'fmt ')\n\t\t// Format chunk length\n\t\tview.setUint32(16, 16, true)\n\t\t// Sample format (PCM)\n\t\tview.setUint16(20, format, true)\n\t\t// Channel count\n\t\tview.setUint16(22, numChannels, true)\n\t\t// Sample rate\n\t\tview.setUint32(24, sampleRate, true)\n\t\t// Byte rate (sample rate * block align)\n\t\tview.setUint32(28, sampleRate * blockAlign, true)\n\t\t// Block align (channel count * bytes per sample)\n\t\tview.setUint16(32, blockAlign, true)\n\t\t// Bits per sample\n\t\tview.setUint16(34, bitDepth, true)\n\t\t// Data chunk identifier\n\t\tthis.writeString(view, 36, 'data')\n\t\t// Data chunk length\n\t\tview.setUint32(40, dataLength, true)\n\n\t\t// Write the audio data\n\t\tif (bitDepth === 16) {\n\t\t\tthis.writeInt16Samples(view, headerLength, samples)\n\t\t} else {\n\t\t\tthrow new Error('Only 16-bit audio is supported')\n\t\t}\n\n\t\treturn new Blob([wavBuffer], { type: 'audio/wav' })\n\t}\n\n\t/**\n\t * Get audio samples from an AudioBuffer\n\t */\n\tprivate getAudioSamples(buffer: AudioBuffer, bitDepth: number): number[] {\n\t\tconst numChannels = buffer.numberOfChannels\n\t\tconst length = buffer.length\n\t\tconst samples: number[] = []\n\t\tconst scale = bitDepth === 16 ? 32768 : 128\n\n\t\t// Get samples from all channels\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tfor (let channel = 0; channel < numChannels; channel++) {\n\t\t\t\tconst sample = buffer.getChannelData(channel)[i]\n\t\t\t\t// Convert float32 to int16 or int8\n\t\t\t\tconst intSample = Math.max(-1, Math.min(1, sample))\n\t\t\t\tsamples.push(intSample * scale)\n\t\t\t}\n\t\t}\n\n\t\treturn samples\n\t}\n\n\t/**\n\t * Write 16-bit samples to a DataView\n\t */\n\tprivate writeInt16Samples(view: DataView, offset: number, samples: number[]): void {\n\t\tfor (let i = 0; i < samples.length; i++) {\n\t\t\tview.setInt16(offset + i * 2, samples[i], true)\n\t\t}\n\t}\n\n\t/**\n\t * Write a string to a DataView\n\t */\n\tprivate writeString(view: DataView, offset: number, string: string): void {\n\t\tfor (let i = 0; i < string.length; i++) {\n\t\t\tview.setUint8(offset + i, string.charCodeAt(i))\n\t\t}\n\t}\n}\n","import { NotificationType } from './notification'\nimport { NotificationSoundGenerator } from './notification-audio-generator'\n\n/**\n * Audio service for playing notification sounds.\n * Uses Web Audio API with fallback to HTML5 Audio.\n */\nexport class NotificationAudioService {\n\tprivate audioContext: AudioContext | null = null\n\tprivate soundBuffers: Map<NotificationType, AudioBuffer> = new Map()\n\tprivate volume: number = 0.5\n\tprivate muted: boolean = false\n\tprivate soundGenerator = new NotificationSoundGenerator()\n\n\t// Default sound URLs (will be generated programmatically as fallback)\n\tprivate soundUrls: Record<NotificationType, string> = {\n\t\tinfo: '/assets/sounds/notification-info.mp3',\n\t\tsuccess: '/assets/sounds/notification-success.mp3',\n\t\twarning: '/assets/sounds/notification-warning.mp3',\n\t\terror: '/assets/sounds/notification-error.mp3',\n\t}\n\n\tconstructor() {\n\t\t// Initialize audio context when first needed\n\t\tthis.initializeAudioFiles()\n\t}\n\n\t/**\n\t * Initialize audio files - generate programmatically if needed\n\t */\n\tprivate async initializeAudioFiles(): Promise<void> {\n\t\ttry {\n\t\t\t// Try to load from default URLs\n\t\t\tawait this.preloadSounds()\n\t\t} catch (err) {\n\t\t\tconsole.log('Generating programmatic notification sounds')\n\n\t\t\t// If loading fails, generate programmatically\n\t\t\ttry {\n\t\t\t\tconst generatedUrls = await this.soundGenerator.generateAudioFiles(this.volume)\n\t\t\t\tthis.soundUrls = generatedUrls\n\t\t\t} catch (genErr) {\n\t\t\t\tconsole.warn('Failed to generate notification sounds:', genErr)\n\t\t\t\t// Will fall back to direct playback when needed\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Lazy-initialize the audio context\n\t */\n\tprivate getAudioContext(): AudioContext {\n\t\tif (!this.audioContext) {\n\t\t\t// Use AudioContext with webkit prefix fallback for Safari\n\t\t\tconst AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n\t\t\tthis.audioContext = new AudioContextClass()\n\t\t}\n\n\t\treturn this.audioContext\n\t}\n\n\t/**\n\t * Preload all notification sounds\n\t */\n\tprivate async preloadSounds(): Promise<void> {\n\t\tconst types: NotificationType[] = ['info', 'success', 'warning', 'error']\n\n\t\tfor (const type of types) {\n\t\t\ttry {\n\t\t\t\tconst buffer = await this.loadSound(type)\n\t\t\t\tthis.soundBuffers.set(type, buffer)\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(`Failed to preload ${type} sound:`, err)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Load a sound file and decode it\n\t */\n\tprivate async loadSound(type: NotificationType): Promise<AudioBuffer> {\n\t\tconst url = this.soundUrls[type]\n\t\tconst response = await fetch(url)\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to load sound from ${url}: ${response.statusText}`)\n\t\t}\n\n\t\tconst arrayBuffer = await response.arrayBuffer()\n\t\treturn await this.getAudioContext().decodeAudioData(arrayBuffer)\n\t}\n\n\t/**\n\t * Play a notification sound\n\t */\n\tpublic async playSound(type: NotificationType): Promise<void> {\n\t\tif (this.muted) return\n\n\t\ttry {\n\t\t\t// Try to use Web Audio API first\n\t\t\tconst context = this.getAudioContext()\n\n\t\t\t// Ensure audio context is resumed (needed due to autoplay policy)\n\t\t\tif (context.state === 'suspended') {\n\t\t\t\tawait context.resume()\n\t\t\t}\n\n\t\t\t// Try to use programmatically generated sound first\n\t\t\tif (this.soundUrls[type].startsWith('blob:')) {\n\t\t\t\tthis.playFallbackSound(type)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Load sound if not already cached\n\t\t\tif (!this.soundBuffers.has(type)) {\n\t\t\t\ttry {\n\t\t\t\t\tconst buffer = await this.loadSound(type)\n\t\t\t\t\tthis.soundBuffers.set(type, buffer)\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Fall back to direct generator\n\t\t\t\t\tthis.playDirectGeneratedSound(type)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst buffer = this.soundBuffers.get(type)\n\t\t\tif (!buffer) {\n\t\t\t\tthrow new Error(`Sound buffer for ${type} not available`)\n\t\t\t}\n\n\t\t\t// Create source and gain nodes\n\t\t\tconst source = context.createBufferSource()\n\t\t\tsource.buffer = buffer\n\n\t\t\tconst gainNode = context.createGain()\n\t\t\tgainNode.gain.value = this.volume\n\n\t\t\t// Connect and play\n\t\t\tsource.connect(gainNode)\n\t\t\tgainNode.connect(context.destination)\n\t\t\tsource.start(0)\n\t\t} catch (err) {\n\t\t\tconsole.warn(`Web Audio API buffer playback failed, trying direct generation:`, err)\n\t\t\tthis.playDirectGeneratedSound(type)\n\t\t}\n\t}\n\n\t/**\n\t * Play a directly generated sound when other methods fail\n\t */\n\tprivate playDirectGeneratedSound(type: NotificationType): void {\n\t\tif (this.muted) return\n\n\t\ttry {\n\t\t\tswitch (type) {\n\t\t\t\tcase 'info':\n\t\t\t\t\tthis.soundGenerator.playInfoSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'success':\n\t\t\t\t\tthis.soundGenerator.playSuccessSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'warning':\n\t\t\t\t\tthis.soundGenerator.playWarningSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t\tcase 'error':\n\t\t\t\t\tthis.soundGenerator.playErrorSound(this.volume)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(`Failed to play generated sound for ${type}:`, err)\n\t\t}\n\t}\n\n\t/**\n\t * Play sound using HTML5 Audio as a fallback\n\t */\n\tprivate playFallbackSound(type: NotificationType): void {\n\t\tif (this.muted) return\n\n\t\ttry {\n\t\t\tconst audio = new Audio(this.soundUrls[type])\n\t\t\taudio.volume = this.volume\n\n\t\t\t// Add event listener to clean up after playback\n\t\t\taudio.addEventListener('ended', () => {\n\t\t\t\taudio.remove()\n\t\t\t})\n\n\t\t\taudio.play().catch(err => {\n\t\t\t\tconsole.error(`Failed to play fallback sound for ${type}:`, err)\n\t\t\t\tthis.playDirectGeneratedSound(type)\n\t\t\t})\n\t\t} catch (err) {\n\t\t\tconsole.error('HTML5 Audio fallback failed:', err)\n\t\t\tthis.playDirectGeneratedSound(type)\n\t\t}\n\t}\n\n\t/**\n\t * Set volume for notification sounds (0.0 to 1.0)\n\t */\n\tpublic setVolume(volume: number): void {\n\t\tthis.volume = Math.max(0, Math.min(1, volume))\n\t}\n\n\t/**\n\t * Get current volume level\n\t */\n\tpublic getVolume(): number {\n\t\treturn this.volume\n\t}\n\n\t/**\n\t * Mute notification sounds\n\t */\n\tpublic mute(): void {\n\t\tthis.muted = true\n\t}\n\n\t/**\n\t * Unmute notification sounds\n\t */\n\tpublic unmute(): void {\n\t\tthis.muted = false\n\t}\n\n\t/**\n\t * Check if notification sounds are muted\n\t */\n\tpublic isMuted(): boolean {\n\t\treturn this.muted\n\t}\n\n\t/**\n\t * Set custom sound URL for a notification type\n\t */\n\tpublic setSoundUrl(type: NotificationType, url: string): void {\n\t\tthis.soundUrls[type] = url\n\n\t\t// Clear cached buffer to force reload\n\t\tthis.soundBuffers.delete(type)\n\t}\n\n\t/**\n\t * Get the current sound URL for a notification type\n\t */\n\tpublic getSoundUrl(type: NotificationType): string {\n\t\treturn this.soundUrls[type]\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { fromEvent, takeUntil } from 'rxjs'\nimport { NotificationType } from './notification'\nimport { NotificationAudioService } from './notification-audio'\nimport style from './notification-container.scss?inline'\n\nexport interface NotificationItem {\n\tid: string\n\ttitle: string\n\tmessage: string\n\ttype: NotificationType\n\tduration: number\n\tclosable: boolean\n\tplaySound: boolean\n}\n\nexport interface NotificationOptions {\n\tid?: string\n\ttitle?: string\n\tmessage: string\n\ttype?: NotificationType\n\tduration?: number\n\tclosable?: boolean\n\tplaySound?: boolean\n}\n\n/**\n * Container component for displaying stacked notifications.\n *\n * @element sch-notification-container\n */\n@customElement('sch-notification-container')\nexport default class SchmancyNotificationContainer extends $LitElement(style) {\n\t@property({ type: String }) position:\n\t\t| 'top-right'\n\t\t| 'top-left'\n\t\t| 'bottom-right'\n\t\t| 'bottom-left'\n\t\t| 'top-center'\n\t\t| 'bottom-center' = 'top-right'\n\t@property({ type: Number }) maxVisibleNotifications = 5\n\t@property({ type: Boolean }) playSound = false\n\t@property({ type: Number }) audioVolume = 0.5\n\n\t@state() private _notifications: NotificationItem[] = []\n\n\t// Audio service\n\tprivate _audioService = new NotificationAudioService()\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Set audio volume\n\t\tthis._audioService.setVolume(this.audioVolume)\n\n\t\t// Listen for notification events\n\t\tfromEvent<CustomEvent<NotificationOptions>>(window, 'schmancy-notification')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(event => {\n\t\t\t\tthis.addNotification(event.detail)\n\t\t\t})\n\n\t\t// Listen for play sound events from child notifications\n\t\tthis.addEventListener('playsound', ((event: CustomEvent) => {\n\t\t\tif (this.playSound) {\n\t\t\t\tthis._audioService.playSound(event.detail.type)\n\t\t\t}\n\t\t}) as EventListener)\n\t}\n\n\t// Public API to add notifications\n\tpublic addNotification(options: NotificationOptions): string {\n\t\tconst id = options.id || `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\n\t\tconst notification: NotificationItem = {\n\t\t\tid,\n\t\t\ttitle: options.title || '',\n\t\t\tmessage: options.message,\n\t\t\ttype: options.type || 'info',\n\t\t\tduration: options.duration !== undefined ? options.duration : 750,\n\t\t\tclosable: options.closable !== undefined ? options.closable : true,\n\t\t\tplaySound: options.playSound !== undefined ? options.playSound : this.playSound,\n\t\t}\n\n\t\t// Add new notification (top for top-* positions, bottom for bottom-* positions)\n\t\tif (this.position.startsWith('top')) {\n\t\t\tthis._notifications = [...this._notifications, notification]\n\t\t} else {\n\t\t\tthis._notifications = [notification, ...this._notifications]\n\t\t}\n\n\t\t// Enforce max visible notifications\n\t\tif (this._notifications.length > this.maxVisibleNotifications) {\n\t\t\tthis._notifications = this._notifications.slice(-this.maxVisibleNotifications)\n\t\t}\n\n\t\t// Play sound if enabled\n\t\tif (notification.playSound) {\n\t\t\tthis._audioService.playSound(notification.type)\n\t\t}\n\n\t\treturn id\n\t}\n\n\tpublic removeNotification(id: string) {\n\t\tthis._notifications = this._notifications.filter(n => n.id !== id)\n\t}\n\n\tprivate _handleClose(e: CustomEvent) {\n\t\tconst id = e.detail.id\n\t\tthis.removeNotification(id)\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap({\n\t\t\t\t\t'notification-container': true,\n\t\t\t\t\t[this.position]: true,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t${repeat(\n\t\t\t\t\tthis._notifications,\n\t\t\t\t\tnotification => notification.id,\n\t\t\t\t\tnotification => html`\n <sch-notification\n .id=${notification.id}\n .title=${notification.title}\n .message=${notification.message}\n .type=${notification.type}\n .duration=${notification.duration}\n ?closable=${notification.closable}\n ?playSound=${false} /* We already played the sound on add */\n @close=${this._handleClose}\n ></sch-notification>\n `,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'sch-notification-container': SchmancyNotificationContainer\n\t}\n}\n"],"names":["SchmancyNotification","$LitElement","constructor","super","arguments","this","title","message","type","closable","duration","id","Date","now","Math","floor","random","playSound","_visible","_progress","_hovered","_closing","connectedCallback","_startAutoCloseTimer","_playSound","_clearTimers","disconnectedCallback","changedProps","updated","has","endTime","_autoCloseTimer","window","setTimeout","close","_progressTimer","setInterval","remaining","max","clearTimeout","clearInterval","remainingTime","dispatchEvent","CustomEvent","detail","bubbles","composed","_pauseTimers","_resumeTimers","render","html","typeStyles","_getTypeStyles","classMap","notification","closing","styleMap","transform","opacity","_handleMouseEnter","_handleMouseLeave","color","iconColor","icon","bgColor","progressColor","SchmancyTheme","sys","success","default","tertiary","error","primary","__decorateClass","property","String","prototype","Boolean","Number","state","customElement","NotificationSoundGenerator","audioContext","getAudioContext","AudioContextClass","AudioContext","webkitAudioContext","volume","ctx","currentTime","oscillator","createOscillator","gainNode","createGain","filter","createBiquadFilter","frequency","setValueAtTime","exponentialRampToValueAtTime","value","gain","connect","destination","start","stop","createBell","freq","osc","osc1","osc2","Q","generateAudioFiles","audioUrls","info","generateAudioFile","async","linearRampToValueAtTime","sampleRate","gain1","gain2","warning","renderFunction","offlineCtx","OfflineAudioContext","audioBuffer","startRendering","wavBlob","audioBufferToWav","URL","createObjectURL","buffer","numChannels","numberOfChannels","blockAlign","bitDepth","samples","getAudioSamples","dataLength","length","wavBuffer","ArrayBuffer","view","DataView","writeString","setUint32","setUint16","writeInt16Samples","Blob","scale","i","channel","sample","getChannelData","intSample","min","push","offset","setInt16","string","setUint8","charCodeAt","NotificationAudioService","soundBuffers","Map","muted","soundGenerator","soundUrls","initializeAudioFiles","preloadSounds","err","generatedUrls","genErr","types","loadSound","set","url","response","fetch","ok","Error","statusText","arrayBuffer","decodeAudioData","context","resume","startsWith","playFallbackSound","playDirectGeneratedSound","get","source","createBufferSource","playInfoSound","playSuccessSound","playWarningSound","playErrorSound","audio","Audio","addEventListener","remove","play","catch","mute","isMuted","delete","SchmancyNotificationContainer","position","maxVisibleNotifications","audioVolume","_notifications","_audioService","setVolume","fromEvent","pipe","takeUntil","disconnecting","subscribe","event","addNotification","options","slice","n","e","removeNotification","repeat","_handleClose"],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- class s {
2
- constructor() {
3
- }
4
- static getInstance() {
5
- return s.instance || (s.instance = new s()), s.instance;
6
- }
7
- notify(n) {
8
- const t = n.id || `notification-${Date.now()}-${Math.floor(1e4 * Math.random())}`, i = new CustomEvent("schmancy-notification", { bubbles: !0, composed: !0, detail: { ...n, id: t } });
9
- return window.dispatchEvent(i), t;
10
- }
11
- info(n, t = {}) {
12
- return this.notify({ message: n, type: "info", ...t });
13
- }
14
- success(n, t = {}) {
15
- return this.notify({ message: n, type: "success", ...t });
16
- }
17
- warning(n, t = {}) {
18
- return this.notify({ message: n, type: "warning", ...t });
19
- }
20
- error(n, t = {}) {
21
- return this.notify({ message: n, type: "error", ...t });
22
- }
23
- }
24
- const r = { show: (e) => s.getInstance().notify(e), info: (e, n = {}) => s.getInstance().info(e, n), success: (e, n = {}) => s.getInstance().success(e, n), warning: (e, n = {}) => s.getInstance().warning(e, n), error: (e, n = {}) => s.getInstance().error(e, n) };
25
- export {
26
- r as $,
27
- s as N
28
- };
29
- //# sourceMappingURL=notification-service-DWeUoHi2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notification-service-DWeUoHi2.js","sources":["../src/notification/notification-service.ts"],"sourcesContent":["import { NotificationOptions } from './notification-container'\n\n/**\n * Notification service for centralized notification management.\n * Provides a simple API for showing notifications.\n */\nexport class NotificationService {\n\tprivate static instance: NotificationService\n\n\t// Private constructor for singleton pattern\n\tprivate constructor() {}\n\n\t/**\n\t * Get the singleton instance\n\t */\n\tpublic static getInstance(): NotificationService {\n\t\tif (!NotificationService.instance) {\n\t\t\tNotificationService.instance = new NotificationService()\n\t\t}\n\t\treturn NotificationService.instance\n\t}\n\n\t/**\n\t * Show a notification\n\t * @returns The ID of the created notification\n\t */\n\tpublic notify(options: NotificationOptions): string {\n\t\tconst id = options.id || `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\n\t\t// Create and dispatch event\n\t\tconst event = new CustomEvent('schmancy-notification', {\n\t\t\tbubbles: true,\n\t\t\tcomposed: true,\n\t\t\tdetail: {\n\t\t\t\t...options,\n\t\t\t\tid,\n\t\t\t},\n\t\t})\n\n\t\twindow.dispatchEvent(event)\n\t\treturn id\n\t}\n\n\t/**\n\t * Show an info notification\n\t */\n\tpublic info(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'info',\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a success notification\n\t */\n\tpublic success(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'success',\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a warning notification\n\t */\n\tpublic warning(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'warning',\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show an error notification\n\t */\n\tpublic error(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'error',\n\t\t\t...options,\n\t\t})\n\t}\n}\n\n/**\n * Global notification utility - provides a quick way to show notifications\n */\nexport const $notify = {\n\t/**\n\t * Show a notification\n\t */\n\tshow: (options: NotificationOptions): string => {\n\t\treturn NotificationService.getInstance().notify(options)\n\t},\n\n\t/**\n\t * Show an info notification\n\t */\n\tinfo: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().info(message, options)\n\t},\n\n\t/**\n\t * Show a success notification\n\t */\n\tsuccess: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().success(message, options)\n\t},\n\n\t/**\n\t * Show a warning notification\n\t */\n\twarning: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().warning(message, options)\n\t},\n\n\t/**\n\t * Show an error notification\n\t */\n\terror: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().error(message, options)\n\t},\n}\n\nexport default NotificationService\n"],"names":["NotificationService","constructor","instance","options","id","Date","now","Math","floor","random","event","CustomEvent","bubbles","composed","detail","window","dispatchEvent","message","this","notify","type","$notify","show","getInstance","info","success","warning","error"],"mappings":"AAMO,MAAMA;EAIJ,cAAAC;AAAAA,EAAc;AAAA,EAKtB,OAAA;AAIC,WAHKD,EAAoBE,aACJF,EAAAE,WAAW,IAAIF,MAE7BA,EAAoBE;AAAAA,EAAA;AAAA,EAOrB,OAAOC,GACb;AAAA,UAAMC,IAAKD,EAAQC,MAAM,gBAAgBC,KAAKC,SAASC,KAAKC,MAAsB,MAAhBD,KAAKE,aAGjEC,IAAQ,IAAIC,YAAY,yBAAyB,EACtDC,aACAC,UAAAA,IACAC,QAAQ,KACJX,GACHC,IAAAA,EAAAA,EAAAA,CAAAA;AAKK,WADPW,OAAOC,cAAcN,CACdN,GAAAA;AAAAA,EAAA;AAAA,EAMD,KAAKa,GAAiBd,IAAkE,IAC9F;AAAA,WAAOe,KAAKC,OAAO,EAClBF,SACAG,GAAAA,MAAM,WACHjB,EACH,CAAA;AAAA,EAAA;AAAA,EAMK,QAAQc,GAAiBd,IAAkE,IACjG;AAAA,WAAOe,KAAKC,OAAO,EAClBF,YACAG,MAAM,WAAA,GACHjB;EACH;AAAA,EAMK,QAAQc,GAAiBd,IAAkE;AACjG,WAAOe,KAAKC,OAAO,EAClBF,SAAAA,GACAG,MAAM,WAAA,GACHjB;EACH;AAAA,EAMK,MAAMc,GAAiBd,IAAkE,IAC/F;AAAA,WAAOe,KAAKC,OAAO,EAClBF,SACAG,GAAAA,MAAM,SACHjB,GAAAA,EAAAA,CAAAA;AAAAA,EACH;;AAOI,MAAMkB,IAAU,EAItBC,MAAOnB,CAAAA,MACCH,EAAoBuB,YAAAA,EAAcJ,OAAOhB,CAMjDqB,GAAAA,MAAM,CAACP,GAAiBd,IAAkE,OAClFH,EAAoBuB,YAAcC,EAAAA,KAAKP,GAASd,CAAAA,GAMxDsB,SAAS,CAACR,GAAiBd,IAAkE,OACrFH,EAAoBuB,YAAAA,EAAcE,QAAQR,GAASd,CAAAA,GAM3DuB,SAAS,CAACT,GAAiBd,IAAkE,OACrFH,EAAoBuB,YAAAA,EAAcG,QAAQT,GAASd,IAM3DwB,OAAO,CAACV,GAAiBd,IAAkE,OACnFH,EAAoBuB,cAAcI,MAAMV,GAASd;"}
@@ -1,2 +0,0 @@
1
- "use strict";class t{constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}notify(n){const e=n.id||`notification-${Date.now()}-${Math.floor(1e4*Math.random())}`,i=new CustomEvent("schmancy-notification",{bubbles:!0,composed:!0,detail:{...n,id:e}});return window.dispatchEvent(i),e}info(n,e={}){return this.notify({message:n,type:"info",...e})}success(n,e={}){return this.notify({message:n,type:"success",...e})}warning(n,e={}){return this.notify({message:n,type:"warning",...e})}error(n,e={}){return this.notify({message:n,type:"error",...e})}}const o={show:s=>t.getInstance().notify(s),info:(s,n={})=>t.getInstance().info(s,n),success:(s,n={})=>t.getInstance().success(s,n),warning:(s,n={})=>t.getInstance().warning(s,n),error:(s,n={})=>t.getInstance().error(s,n)};exports.$notify=o,exports.NotificationService=t;
2
- //# sourceMappingURL=notification-service-DXXrRCmK.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notification-service-DXXrRCmK.cjs","sources":["../src/notification/notification-service.ts"],"sourcesContent":["import { NotificationOptions } from './notification-container'\n\n/**\n * Notification service for centralized notification management.\n * Provides a simple API for showing notifications.\n */\nexport class NotificationService {\n\tprivate static instance: NotificationService\n\n\t// Private constructor for singleton pattern\n\tprivate constructor() {}\n\n\t/**\n\t * Get the singleton instance\n\t */\n\tpublic static getInstance(): NotificationService {\n\t\tif (!NotificationService.instance) {\n\t\t\tNotificationService.instance = new NotificationService()\n\t\t}\n\t\treturn NotificationService.instance\n\t}\n\n\t/**\n\t * Show a notification\n\t * @returns The ID of the created notification\n\t */\n\tpublic notify(options: NotificationOptions): string {\n\t\tconst id = options.id || `notification-${Date.now()}-${Math.floor(Math.random() * 10000)}`\n\n\t\t// Create and dispatch event\n\t\tconst event = new CustomEvent('schmancy-notification', {\n\t\t\tbubbles: true,\n\t\t\tcomposed: true,\n\t\t\tdetail: {\n\t\t\t\t...options,\n\t\t\t\tid,\n\t\t\t},\n\t\t})\n\n\t\twindow.dispatchEvent(event)\n\t\treturn id\n\t}\n\n\t/**\n\t * Show an info notification\n\t */\n\tpublic info(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'info',\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a success notification\n\t */\n\tpublic success(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'success',\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show a warning notification\n\t */\n\tpublic warning(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'warning',\n\t\t\t...options,\n\t\t})\n\t}\n\n\t/**\n\t * Show an error notification\n\t */\n\tpublic error(message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string {\n\t\treturn this.notify({\n\t\t\tmessage,\n\t\t\ttype: 'error',\n\t\t\t...options,\n\t\t})\n\t}\n}\n\n/**\n * Global notification utility - provides a quick way to show notifications\n */\nexport const $notify = {\n\t/**\n\t * Show a notification\n\t */\n\tshow: (options: NotificationOptions): string => {\n\t\treturn NotificationService.getInstance().notify(options)\n\t},\n\n\t/**\n\t * Show an info notification\n\t */\n\tinfo: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().info(message, options)\n\t},\n\n\t/**\n\t * Show a success notification\n\t */\n\tsuccess: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().success(message, options)\n\t},\n\n\t/**\n\t * Show a warning notification\n\t */\n\twarning: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().warning(message, options)\n\t},\n\n\t/**\n\t * Show an error notification\n\t */\n\terror: (message: string, options: Partial<Omit<NotificationOptions, 'message' | 'type'>> = {}): string => {\n\t\treturn NotificationService.getInstance().error(message, options)\n\t},\n}\n\nexport default NotificationService\n"],"names":["NotificationService","instance","options","id","Date","now","Math","floor","random","event","CustomEvent","bubbles","composed","detail","s","window","dispatchEvent","message","this","notify","type","$notify","show","getInstance","info","success","warning","error"],"mappings":"aAMO,MAAMA,CAIJ,CAAA,aAAc,CAAA,CAKtB,oBAIC,CAAA,OAHKA,EAAoBC,WACJD,EAAAC,SAAW,IAAID,GAE7BA,EAAoBC,QAAA,CAOrB,OAAOC,EACb,CAAA,MAAMC,EAAKD,EAAQC,IAAM,gBAAgBC,KAAKC,IAAAA,CAAAA,IAASC,KAAKC,MAAsB,IAAhBD,KAAKE,OAAAA,CAAAA,CAAAA,GAGjEC,EAAQ,IAAIC,YAAY,wBAAyB,CACtDC,QAAAA,GACAC,SAAU,GACVC,OAAQ,CAAA,GACJX,EACHC,GAKKW,CAAA,CAAA,CAAA,EAAA,OADPC,OAAOC,cAAcP,GACdN,CAAA,CAMD,KAAKc,EAAiBf,EAAkE,IAC9F,OAAOgB,KAAKC,OAAO,CAClBF,QAAAA,EACAG,KAAM,OAAA,GACHlB,GACH,CAMK,QAAQe,EAAiBf,EAAkE,GACjG,CAAA,OAAOgB,KAAKC,OAAO,CAClBF,QACAG,EAAAA,KAAM,aACHlB,CACH,CAAA,CAAA,CAMK,QAAQe,EAAiBf,EAAkE,IACjG,OAAOgB,KAAKC,OAAO,CAClBF,UACAG,KAAM,UAAA,GACHlB,CACH,CAAA,CAAA,CAMK,MAAMe,EAAiBf,EAAkE,IAC/F,OAAOgB,KAAKC,OAAO,CAClBF,QAAAA,EACAG,KAAM,QACHlB,GAAAA,CAAAA,CAAAA,CACH,EAOI,MAAMmB,EAAU,CAItBC,KAAOpB,GACCF,EAAoBuB,YAAAA,EAAcJ,OAAOjB,CAMjDsB,EAAAA,KAAM,CAACP,EAAiBf,EAAkE,KAClFF,EAAoBuB,YAAcC,EAAAA,KAAKP,EAASf,CAMxDuB,EAAAA,QAAS,CAACR,EAAiBf,EAAkE,KACrFF,EAAoBuB,YAAAA,EAAcE,QAAQR,EAASf,CAAAA,EAM3DwB,QAAS,CAACT,EAAiBf,EAAkE,KACrFF,EAAoBuB,YAAAA,EAAcG,QAAQT,EAASf,CAAAA,EAM3DyB,MAAO,CAACV,EAAiBf,EAAkE,KACnFF,EAAoBuB,YAAAA,EAAcI,MAAMV,EAASf,CAAAA,CAAAA"}
@@ -1,2 +0,0 @@
1
- "use strict";const i=require("lit"),s=require("rxjs"),l=require("lit/directives/class-map.js"),d=require("lit/directives/style-map.js"),a=r=>class extends r{constructor(){super(...arguments),this.disconnecting=new s.Subject}classMap(t){const e={};return Object.keys(t).forEach(o=>{o.trim().split(" ").filter(Boolean).forEach(n=>{e[n]=t[o]})}),l.classMap(e)}styleMap(t){return d.styleMap(t)}disconnectedCallback(){this.disconnecting.next(!0),this.disconnecting.complete(),super.disconnectedCallback()}},c=i.unsafeCSS('/*! tailwindcss v4.1.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme;@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-6{inset-inline:1.5rem}.top-0{top:0}.top-1\\/2{top:50%}.top-6{top:1.5rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.left-0{left:0}.left-1\\/2{left:50%}.left-2{left:.5rem}.left-2\\.5{left:.625rem}.left-3{left:.75rem}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-49{z-index:49}.z-50{z-index:50}.z-\\[1000\\]{z-index:1000}.z-\\[9999999\\]{z-index:9999999}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\\[4px\\]{margin-bottom:4px}.-ml-px{margin-left:-1px}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.box-border{box-sizing:border-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-4{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-6{-webkit-line-clamp:6;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-none{-webkit-line-clamp:unset;-webkit-box-orient:horizontal;display:block;overflow:visible}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.table{display:table}.size-2\\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-5{width:1.25rem;height:1.25rem}.h-4{height:1rem}.h-10{height:2.5rem}.h-\\[24px\\]{height:24px}.h-\\[50px\\]{height:50px}.h-\\[320px\\]{height:320px}.h-\\[440px\\]{height:440px}.h-auto{height:auto}.h-full{height:100%}.max-h-96{max-height:24rem}.max-h-\\[24px\\]{max-height:24px}.max-h-\\[90vh\\]{max-height:90vh}.min-h-\\[50vh\\]{min-height:50vh}.min-h-\\[56px\\]{min-height:56px}.w-0\\.5{width:.125rem}.w-4{width:1rem}.w-\\[24px\\]{width:24px}.w-\\[320px\\]{width:320px}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.max-w-96{max-width:24rem}.max-w-\\[24px\\]{max-width:24px}.max-w-\\[320px\\]{max-width:320px}.max-w-\\[360px\\]{max-width:360px}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.min-w-0{min-width:0}.min-w-64{min-width:16rem}.min-w-\\[50vw\\]{min-width:50vw}.min-w-\\[160px\\]{min-width:160px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.flex-grow,.grow{flex-grow:1}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/4{--tw-translate-y: -25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.transform-gpu{transform:translateZ(0)var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.auto-cols-max{grid-auto-columns:max-content}.grid-flow-col{grid-auto-flow:column}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-flow-dense{grid-auto-flow:dense}.grid-flow-row{grid-auto-flow:row}.grid-flow-row-dense{grid-auto-flow:dense}.auto-rows-max{grid-auto-rows:max-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.content-around{align-content:space-around}.content-between{align-content:space-between}.content-center{align-content:center}.content-end{align-content:flex-end}.content-evenly{align-content:space-evenly}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-baseline{justify-content:baseline}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.justify-stretch{justify-content:stretch}.justify-items-center{justify-items:center}.justify-items-end{justify-items:end}.justify-items-start{justify-items:start}.justify-items-stretch{justify-items:stretch}.gap-0{gap:0}.gap-0\\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-\\[8px\\]{gap:8px}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(.5rem *var(--tw-space-x-reverse));margin-inline-end:calc(.5rem *calc(1 - var(--tw-space-x-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.overscroll-none{overscroll-behavior:none}.scroll-smooth{scroll-behavior:smooth}.rounded-\\[8px\\]{border-radius:8px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-t-\\[8px\\]{border-top-left-radius:8px;border-top-right-radius:8px}.rounded-t-full{border-top-left-radius:3.40282e38px;border-top-right-radius:3.40282e38px}.rounded-l-\\[8px\\]{border-top-left-radius:8px;border-bottom-left-radius:8px}.rounded-r-\\[8px\\]{border-top-right-radius:8px;border-bottom-right-radius:8px}.rounded-b-\\[8px\\]{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-solid{--tw-border-style:solid;border-style:solid}.border-gray-300{border-color:#d1d5dc}.border-outline{border-color:var(--schmancy-sys-color-outline)}.border-outlineVariant{border-color:var(--schmancy-sys-color-outlineVariant)}.border-primary-default{border-color:var(--schmancy-sys-color-primary-default)}.border-tertiary-default{border-color:var(--schmancy-sys-color-tertiary-default)}.border-transparent{border-color:#0000}.bg-blue-500{background-color:#3280ff;background-color:oklch(.623 .214 259.815)}.bg-gray-300{background-color:#d1d5dc}.bg-green-500{background-color:#00c65a;background-color:oklch(.723 .219 149.579)}.bg-indigo-500{background-color:#6260ff;background-color:oklch(.585 .233 277.117)}.bg-pink-500{background-color:#f6339a}.bg-primary-container{background-color:var(--schmancy-sys-color-primary-container)}.bg-primary-default{background-color:var(--schmancy-sys-color-primary-default)}.bg-purple-500{background-color:#ab4eff;background-color:oklch(.627 .265 303.9)}.bg-red-500{background-color:#fb2c36}.bg-secondary-container{background-color:var(--schmancy-sys-color-secondary-container)}.bg-surface-bright{background-color:var(--schmancy-sys-color-surface-bright)}.bg-surface-container{background-color:var(--schmancy-sys-color-surface-container)}.bg-surface-default{background-color:var(--schmancy-sys-color-surface-default)}.bg-surface-dim{background-color:var(--schmancy-sys-color-surface-dim)}.bg-surface-high{background-color:var(--schmancy-sys-color-surface-high)}.bg-surface-highest{background-color:var(--schmancy-sys-color-surface-highest)}.bg-surface-low{background-color:var(--schmancy-sys-color-surface-low)}.bg-surface-lowest{background-color:var(--schmancy-sys-color-surface-lowest)}.bg-teal-500{background-color:#00b9a6;background-color:oklch(.704 .14 182.503)}.bg-tertiary-default{background-color:var(--schmancy-sys-color-tertiary-default)}.bg-transparent{background-color:#0000}.bg-white{background-color:#fff}.bg-yellow-500{background-color:#eab300;background-color:oklch(.795 .184 86.047)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-none{object-fit:none}.object-scale-down{object-fit:scale-down}.object-center{object-position:center}.p-0{padding:0}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\\[16px\\]{padding:16px}.p-\\[32px\\]{padding:32px}.px-1\\.5{padding-inline:.375rem}.px-2{padding-inline:.5rem}.px-2\\.5{padding-inline:.625rem}.px-3{padding-inline:.75rem}.px-4{padding-inline:1rem}.px-6{padding-inline:1.5rem}.px-7{padding-inline:1.75rem}.px-\\[6px\\]{padding-inline:6px}.px-\\[8px\\]{padding-inline:8px}.px-\\[12px\\]{padding-inline:12px}.px-\\[16px\\]{padding-inline:16px}.py-1{padding-block:.25rem}.py-1\\.5{padding-block:.375rem}.py-2{padding-block:.5rem}.py-3{padding-block:.75rem}.py-5{padding-block:1.25rem}.py-12{padding-block:3rem}.py-\\[6px\\]{padding-block:6px}.py-\\[8px\\]{padding-block:8px}.py-\\[12px\\]{padding-block:12px}.py-\\[24px\\]{padding-block:24px}.pt-\\[1px\\]{padding-top:1px}.pt-\\[2px\\]{padding-top:2px}.pt-\\[3px\\]{padding-top:3px}.pt-\\[4px\\]{padding-top:4px}.pb-4{padding-bottom:1rem}.pb-12{padding-bottom:3rem}.pb-\\[300px\\]{padding-bottom:300px}.pl-2{padding-left:.5rem}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.text-2xl{font-size:1.5rem;line-height:var(--tw-leading,calc(2/1.5))}.text-base{font-size:1rem;line-height:var(--tw-leading, 1.5 )}.text-lg{font-size:1.125rem;line-height:var(--tw-leading,calc(1.75/1.125))}.text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25/.875))}.text-xs{font-size:.75rem;line-height:var(--tw-leading,calc(1/.75))}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[14px\\]{font-size:14px}.text-\\[16px\\]{font-size:16px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[28px\\]{font-size:28px}.text-\\[32px\\]{font-size:32px}.text-\\[36px\\]{font-size:36px}.text-\\[45px\\]{font-size:45px}.text-\\[57px\\]{font-size:57px}.leading-6{--tw-leading: 1.5rem ;line-height:1.5rem}.leading-\\[16px\\]{--tw-leading:16px;line-height:16px}.leading-\\[20px\\]{--tw-leading:20px;line-height:20px}.leading-\\[24px\\]{--tw-leading:24px;line-height:24px}.leading-\\[28px\\]{--tw-leading:28px;line-height:28px}.leading-\\[32px\\]{--tw-leading:32px;line-height:32px}.leading-\\[36px\\]{--tw-leading:36px;line-height:36px}.leading-\\[40px\\]{--tw-leading:40px;line-height:40px}.leading-\\[44px\\]{--tw-leading:44px;line-height:44px}.leading-\\[52px\\]{--tw-leading:52px;line-height:52px}.leading-\\[64px\\]{--tw-leading:64px;line-height:64px}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:700;font-weight:700}.font-medium{--tw-font-weight:500;font-weight:500}.font-normal{--tw-font-weight:400;font-weight:400}.font-semibold{--tw-font-weight:600;font-weight:600}.tracking-\\[-0\\.25px\\]{--tw-tracking:-.25px;letter-spacing:-.25px}.tracking-\\[0\\.1px\\]{--tw-tracking:.1px;letter-spacing:.1px}.tracking-\\[0\\.4px\\]{--tw-tracking:.4px;letter-spacing:.4px}.tracking-\\[0\\.5px\\]{--tw-tracking:.5px;letter-spacing:.5px}.tracking-\\[0\\.15px\\]{--tw-tracking:.15px;letter-spacing:.15px}.tracking-\\[0\\.25px\\]{--tw-tracking:.25px;letter-spacing:.25px}.tracking-\\[0px\\]{--tw-tracking:0px;letter-spacing:0}.tracking-wide{--tw-tracking:.025em;letter-spacing:.025em}.text-ellipsis{text-overflow:ellipsis}.hyphens-none{-webkit-hyphens:none;hyphens:none}.text-error-default{color:var(--schmancy-sys-color-error-default)}.text-gray-500{color:#6a7282}.text-gray-900{color:#101828}.text-indigo-600{color:#4f39f6}.text-primary-default{color:var(--schmancy-sys-color-primary-default)}.text-primary-on{color:var(--schmancy-sys-color-primary-on)}.text-primary-onContainer{color:var(--schmancy-sys-color-primary-onContainer)}.text-secondary-onContainer{color:var(--schmancy-sys-color-secondary-onContainer)}.text-success-default{color:var(--schmancy-sys-color-success-default)}.text-surface-on{color:var(--schmancy-sys-color-surface-on)}.text-tertiary-default{color:var(--schmancy-sys-color-tertiary-default)}.text-white{color:#fff}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.caret-transparent{caret-color:#0000}.opacity-0{opacity:0}.opacity-1{opacity:.01}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.opacity-\\[0\\.08\\]{opacity:.08}.opacity-\\[0\\.38\\]{opacity:.38}.shadow-1{--tw-shadow:var(--schmancy-sys-elevation-1);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-5{--tw-shadow:var(--schmancy-sys-elevation-5);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-error-default{--tw-ring-color:var(--schmancy-sys-color-error-default)}.ring-outline{--tw-ring-color:var(--schmancy-sys-color-outline)}.ring-primary-default{--tw-ring-color:var(--schmancy-sys-color-primary-default)}.ring-secondary-default{--tw-ring-color:var(--schmancy-sys-color-secondary-default)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-secondary-default{outline-color:var(--schmancy-sys-color-secondary-default)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{--tw-ease:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{--tw-ease:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\\:border-gray-400:is(:where(.group):hover *){border-color:#99a1af}.group-hover\\:bg-gray-300:is(:where(.group):hover *){background-color:#d1d5dc}.group-hover\\:bg-tertiary-onContainer:is(:where(.group):hover *){background-color:var(--schmancy-sys-color-tertiary-onContainer)}.hover\\:border-gray-300:hover{border-color:#d1d5dc}.hover\\:bg-primary-default:hover{background-color:var(--schmancy-sys-color-primary-default)}.hover\\:bg-primary-on:hover{background-color:var(--schmancy-sys-color-primary-on)}.hover\\:bg-secondary-container:hover{background-color:var(--schmancy-sys-color-secondary-container)}.hover\\:bg-surface-high:hover{background-color:var(--schmancy-sys-color-surface-high)}.hover\\:bg-surface-on:hover{background-color:var(--schmancy-sys-color-surface-on)}.hover\\:text-gray-700:hover{color:#364153}.hover\\:opacity-\\[0\\.08\\]:hover{opacity:.08}.hover\\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xs:hover{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-error-default:focus{--tw-ring-color:var(--schmancy-sys-color-error-default)}.focus\\:ring-indigo-600:focus{--tw-ring-color:oklch(.511 .262 276.966)}.focus\\:ring-primary-default:focus{--tw-ring-color:var(--schmancy-sys-color-primary-default)}.focus\\:ring-secondary-default:focus{--tw-ring-color:var(--schmancy-sys-color-secondary-default)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\\:outline-1:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\\:ring-inset:focus{--tw-ring-inset:inset}.focus-visible\\:z-1:focus-visible{z-index:1}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-0:focus-visible{outline-offset:0px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-solid:focus-visible{--tw-outline-style:solid;outline-style:solid}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}@media (min-width:40rem){.sm\\:px-\\[12px\\]{padding-inline:12px}}@media (min-width:48rem){.md\\:right-0{right:0}.md\\:left-\\[unset\\]{left:unset}.md\\:block{display:block}.md\\:hidden{display:none}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\\:px-\\[16px\\]{padding-inline:16px}}}:host,:root{font-family:var(--schmancy-font-family)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}'),p=r=>{const e=class e extends i.LitElement{};e.styles=[i.unsafeCSS(r),c];let t=e;return t};exports.BaseElement=a,exports.TailwindElement=r=>{class t extends a(p(r)){constructor(){super(...arguments),this.disconnectedCallback=()=>{super.disconnectedCallback()}}}return t};
2
- //# sourceMappingURL=tailwind.mixin-CryL2ZOy.cjs.map
@@ -1,43 +0,0 @@
1
- import { unsafeCSS as o, LitElement as n } from "lit";
2
- import { Subject as s } from "rxjs";
3
- import { classMap as l } from "lit/directives/class-map.js";
4
- import { styleMap as d } from "lit/directives/style-map.js";
5
- const c = (r) => class extends r {
6
- constructor() {
7
- super(...arguments), this.disconnecting = new s();
8
- }
9
- classMap(t) {
10
- const e = {};
11
- return Object.keys(t).forEach((i) => {
12
- i.trim().split(" ").filter(Boolean).forEach((a) => {
13
- e[a] = t[i];
14
- });
15
- }), l(e);
16
- }
17
- styleMap(t) {
18
- return d(t);
19
- }
20
- disconnectedCallback() {
21
- this.disconnecting.next(!0), this.disconnecting.complete(), super.disconnectedCallback();
22
- }
23
- }, p = o('/*! tailwindcss v4.1.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme;@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-6{inset-inline:1.5rem}.top-0{top:0}.top-1\\/2{top:50%}.top-6{top:1.5rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.left-0{left:0}.left-1\\/2{left:50%}.left-2{left:.5rem}.left-2\\.5{left:.625rem}.left-3{left:.75rem}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-49{z-index:49}.z-50{z-index:50}.z-\\[1000\\]{z-index:1000}.z-\\[9999999\\]{z-index:9999999}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-0\\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\\[4px\\]{margin-bottom:4px}.-ml-px{margin-left:-1px}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.box-border{box-sizing:border-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-4{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-6{-webkit-line-clamp:6;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-none{-webkit-line-clamp:unset;-webkit-box-orient:horizontal;display:block;overflow:visible}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.table{display:table}.size-2\\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-5{width:1.25rem;height:1.25rem}.h-4{height:1rem}.h-10{height:2.5rem}.h-\\[24px\\]{height:24px}.h-\\[50px\\]{height:50px}.h-\\[320px\\]{height:320px}.h-\\[440px\\]{height:440px}.h-auto{height:auto}.h-full{height:100%}.max-h-96{max-height:24rem}.max-h-\\[24px\\]{max-height:24px}.max-h-\\[90vh\\]{max-height:90vh}.min-h-\\[50vh\\]{min-height:50vh}.min-h-\\[56px\\]{min-height:56px}.w-0\\.5{width:.125rem}.w-4{width:1rem}.w-\\[24px\\]{width:24px}.w-\\[320px\\]{width:320px}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.max-w-96{max-width:24rem}.max-w-\\[24px\\]{max-width:24px}.max-w-\\[320px\\]{max-width:320px}.max-w-\\[360px\\]{max-width:360px}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.min-w-0{min-width:0}.min-w-64{min-width:16rem}.min-w-\\[50vw\\]{min-width:50vw}.min-w-\\[160px\\]{min-width:160px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.flex-grow,.grow{flex-grow:1}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/4{--tw-translate-y: -25% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.transform-gpu{transform:translateZ(0)var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.auto-cols-max{grid-auto-columns:max-content}.grid-flow-col{grid-auto-flow:column}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-flow-dense{grid-auto-flow:dense}.grid-flow-row{grid-auto-flow:row}.grid-flow-row-dense{grid-auto-flow:dense}.auto-rows-max{grid-auto-rows:max-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.content-around{align-content:space-around}.content-between{align-content:space-between}.content-center{align-content:center}.content-end{align-content:flex-end}.content-evenly{align-content:space-evenly}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-baseline{justify-content:baseline}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.justify-stretch{justify-content:stretch}.justify-items-center{justify-items:center}.justify-items-end{justify-items:end}.justify-items-start{justify-items:start}.justify-items-stretch{justify-items:stretch}.gap-0{gap:0}.gap-0\\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-\\[8px\\]{gap:8px}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(.5rem *var(--tw-space-x-reverse));margin-inline-end:calc(.5rem *calc(1 - var(--tw-space-x-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.overscroll-none{overscroll-behavior:none}.scroll-smooth{scroll-behavior:smooth}.rounded-\\[8px\\]{border-radius:8px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-t-\\[8px\\]{border-top-left-radius:8px;border-top-right-radius:8px}.rounded-t-full{border-top-left-radius:3.40282e38px;border-top-right-radius:3.40282e38px}.rounded-l-\\[8px\\]{border-top-left-radius:8px;border-bottom-left-radius:8px}.rounded-r-\\[8px\\]{border-top-right-radius:8px;border-bottom-right-radius:8px}.rounded-b-\\[8px\\]{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-solid{--tw-border-style:solid;border-style:solid}.border-gray-300{border-color:#d1d5dc}.border-outline{border-color:var(--schmancy-sys-color-outline)}.border-outlineVariant{border-color:var(--schmancy-sys-color-outlineVariant)}.border-primary-default{border-color:var(--schmancy-sys-color-primary-default)}.border-tertiary-default{border-color:var(--schmancy-sys-color-tertiary-default)}.border-transparent{border-color:#0000}.bg-blue-500{background-color:#3280ff;background-color:oklch(.623 .214 259.815)}.bg-gray-300{background-color:#d1d5dc}.bg-green-500{background-color:#00c65a;background-color:oklch(.723 .219 149.579)}.bg-indigo-500{background-color:#6260ff;background-color:oklch(.585 .233 277.117)}.bg-pink-500{background-color:#f6339a}.bg-primary-container{background-color:var(--schmancy-sys-color-primary-container)}.bg-primary-default{background-color:var(--schmancy-sys-color-primary-default)}.bg-purple-500{background-color:#ab4eff;background-color:oklch(.627 .265 303.9)}.bg-red-500{background-color:#fb2c36}.bg-secondary-container{background-color:var(--schmancy-sys-color-secondary-container)}.bg-surface-bright{background-color:var(--schmancy-sys-color-surface-bright)}.bg-surface-container{background-color:var(--schmancy-sys-color-surface-container)}.bg-surface-default{background-color:var(--schmancy-sys-color-surface-default)}.bg-surface-dim{background-color:var(--schmancy-sys-color-surface-dim)}.bg-surface-high{background-color:var(--schmancy-sys-color-surface-high)}.bg-surface-highest{background-color:var(--schmancy-sys-color-surface-highest)}.bg-surface-low{background-color:var(--schmancy-sys-color-surface-low)}.bg-surface-lowest{background-color:var(--schmancy-sys-color-surface-lowest)}.bg-teal-500{background-color:#00b9a6;background-color:oklch(.704 .14 182.503)}.bg-tertiary-default{background-color:var(--schmancy-sys-color-tertiary-default)}.bg-transparent{background-color:#0000}.bg-white{background-color:#fff}.bg-yellow-500{background-color:#eab300;background-color:oklch(.795 .184 86.047)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-none{object-fit:none}.object-scale-down{object-fit:scale-down}.object-center{object-position:center}.p-0{padding:0}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\\[16px\\]{padding:16px}.p-\\[32px\\]{padding:32px}.px-1\\.5{padding-inline:.375rem}.px-2{padding-inline:.5rem}.px-2\\.5{padding-inline:.625rem}.px-3{padding-inline:.75rem}.px-4{padding-inline:1rem}.px-6{padding-inline:1.5rem}.px-7{padding-inline:1.75rem}.px-\\[6px\\]{padding-inline:6px}.px-\\[8px\\]{padding-inline:8px}.px-\\[12px\\]{padding-inline:12px}.px-\\[16px\\]{padding-inline:16px}.py-1{padding-block:.25rem}.py-1\\.5{padding-block:.375rem}.py-2{padding-block:.5rem}.py-3{padding-block:.75rem}.py-5{padding-block:1.25rem}.py-12{padding-block:3rem}.py-\\[6px\\]{padding-block:6px}.py-\\[8px\\]{padding-block:8px}.py-\\[12px\\]{padding-block:12px}.py-\\[24px\\]{padding-block:24px}.pt-\\[1px\\]{padding-top:1px}.pt-\\[2px\\]{padding-top:2px}.pt-\\[3px\\]{padding-top:3px}.pt-\\[4px\\]{padding-top:4px}.pb-4{padding-bottom:1rem}.pb-12{padding-bottom:3rem}.pb-\\[300px\\]{padding-bottom:300px}.pl-2{padding-left:.5rem}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.text-2xl{font-size:1.5rem;line-height:var(--tw-leading,calc(2/1.5))}.text-base{font-size:1rem;line-height:var(--tw-leading, 1.5 )}.text-lg{font-size:1.125rem;line-height:var(--tw-leading,calc(1.75/1.125))}.text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25/.875))}.text-xs{font-size:.75rem;line-height:var(--tw-leading,calc(1/.75))}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[14px\\]{font-size:14px}.text-\\[16px\\]{font-size:16px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[28px\\]{font-size:28px}.text-\\[32px\\]{font-size:32px}.text-\\[36px\\]{font-size:36px}.text-\\[45px\\]{font-size:45px}.text-\\[57px\\]{font-size:57px}.leading-6{--tw-leading: 1.5rem ;line-height:1.5rem}.leading-\\[16px\\]{--tw-leading:16px;line-height:16px}.leading-\\[20px\\]{--tw-leading:20px;line-height:20px}.leading-\\[24px\\]{--tw-leading:24px;line-height:24px}.leading-\\[28px\\]{--tw-leading:28px;line-height:28px}.leading-\\[32px\\]{--tw-leading:32px;line-height:32px}.leading-\\[36px\\]{--tw-leading:36px;line-height:36px}.leading-\\[40px\\]{--tw-leading:40px;line-height:40px}.leading-\\[44px\\]{--tw-leading:44px;line-height:44px}.leading-\\[52px\\]{--tw-leading:52px;line-height:52px}.leading-\\[64px\\]{--tw-leading:64px;line-height:64px}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:700;font-weight:700}.font-medium{--tw-font-weight:500;font-weight:500}.font-normal{--tw-font-weight:400;font-weight:400}.font-semibold{--tw-font-weight:600;font-weight:600}.tracking-\\[-0\\.25px\\]{--tw-tracking:-.25px;letter-spacing:-.25px}.tracking-\\[0\\.1px\\]{--tw-tracking:.1px;letter-spacing:.1px}.tracking-\\[0\\.4px\\]{--tw-tracking:.4px;letter-spacing:.4px}.tracking-\\[0\\.5px\\]{--tw-tracking:.5px;letter-spacing:.5px}.tracking-\\[0\\.15px\\]{--tw-tracking:.15px;letter-spacing:.15px}.tracking-\\[0\\.25px\\]{--tw-tracking:.25px;letter-spacing:.25px}.tracking-\\[0px\\]{--tw-tracking:0px;letter-spacing:0}.tracking-wide{--tw-tracking:.025em;letter-spacing:.025em}.text-ellipsis{text-overflow:ellipsis}.hyphens-none{-webkit-hyphens:none;hyphens:none}.text-error-default{color:var(--schmancy-sys-color-error-default)}.text-gray-500{color:#6a7282}.text-gray-900{color:#101828}.text-indigo-600{color:#4f39f6}.text-primary-default{color:var(--schmancy-sys-color-primary-default)}.text-primary-on{color:var(--schmancy-sys-color-primary-on)}.text-primary-onContainer{color:var(--schmancy-sys-color-primary-onContainer)}.text-secondary-onContainer{color:var(--schmancy-sys-color-secondary-onContainer)}.text-success-default{color:var(--schmancy-sys-color-success-default)}.text-surface-on{color:var(--schmancy-sys-color-surface-on)}.text-tertiary-default{color:var(--schmancy-sys-color-tertiary-default)}.text-white{color:#fff}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.caret-transparent{caret-color:#0000}.opacity-0{opacity:0}.opacity-1{opacity:.01}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.opacity-\\[0\\.08\\]{opacity:.08}.opacity-\\[0\\.38\\]{opacity:.38}.shadow-1{--tw-shadow:var(--schmancy-sys-elevation-1);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-5{--tw-shadow:var(--schmancy-sys-elevation-5);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-error-default{--tw-ring-color:var(--schmancy-sys-color-error-default)}.ring-outline{--tw-ring-color:var(--schmancy-sys-color-outline)}.ring-primary-default{--tw-ring-color:var(--schmancy-sys-color-primary-default)}.ring-secondary-default{--tw-ring-color:var(--schmancy-sys-color-secondary-default)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-secondary-default{outline-color:var(--schmancy-sys-color-secondary-default)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,ease);transition-duration:var(--tw-duration,0s)}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{--tw-ease:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{--tw-ease:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ring-inset{--tw-ring-inset:inset}@media (hover:hover){.group-hover\\:border-gray-400:is(:where(.group):hover *){border-color:#99a1af}.group-hover\\:bg-gray-300:is(:where(.group):hover *){background-color:#d1d5dc}.group-hover\\:bg-tertiary-onContainer:is(:where(.group):hover *){background-color:var(--schmancy-sys-color-tertiary-onContainer)}.hover\\:border-gray-300:hover{border-color:#d1d5dc}.hover\\:bg-primary-default:hover{background-color:var(--schmancy-sys-color-primary-default)}.hover\\:bg-primary-on:hover{background-color:var(--schmancy-sys-color-primary-on)}.hover\\:bg-secondary-container:hover{background-color:var(--schmancy-sys-color-secondary-container)}.hover\\:bg-surface-high:hover{background-color:var(--schmancy-sys-color-surface-high)}.hover\\:bg-surface-on:hover{background-color:var(--schmancy-sys-color-surface-on)}.hover\\:text-gray-700:hover{color:#364153}.hover\\:opacity-\\[0\\.08\\]:hover{opacity:.08}.hover\\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-xs:hover{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-error-default:focus{--tw-ring-color:var(--schmancy-sys-color-error-default)}.focus\\:ring-indigo-600:focus{--tw-ring-color:oklch(.511 .262 276.966)}.focus\\:ring-primary-default:focus{--tw-ring-color:var(--schmancy-sys-color-primary-default)}.focus\\:ring-secondary-default:focus{--tw-ring-color:var(--schmancy-sys-color-secondary-default)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\\:outline-1:focus{outline-style:var(--tw-outline-style);outline-width:1px}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus\\:ring-inset:focus{--tw-ring-inset:inset}.focus-visible\\:z-1:focus-visible{z-index:1}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-0:focus-visible{outline-offset:0px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-solid:focus-visible{--tw-outline-style:solid;outline-style:solid}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}@media (min-width:40rem){.sm\\:px-\\[12px\\]{padding-inline:12px}}@media (min-width:48rem){.md\\:right-0{right:0}.md\\:left-\\[unset\\]{left:unset}.md\\:block{display:block}.md\\:hidden{display:none}.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\\:px-\\[16px\\]{padding-inline:16px}}}:host,:root{font-family:var(--schmancy-font-family)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}'), w = (r) => {
24
- const e = class e extends n {
25
- };
26
- e.styles = [o(r), p];
27
- let t = e;
28
- return t;
29
- }, b = (r) => {
30
- class t extends c(w(r)) {
31
- constructor() {
32
- super(...arguments), this.disconnectedCallback = () => {
33
- super.disconnectedCallback();
34
- };
35
- }
36
- }
37
- return t;
38
- };
39
- export {
40
- c as B,
41
- b as T
42
- };
43
- //# sourceMappingURL=tailwind.mixin-Q2P-9IKt.js.map