@mhmo91/schmancy 0.10.42 → 0.10.44

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 (759) hide show
  1. package/custom-elements.json +264 -79
  2. package/dist/SchmancyElement-CeKrBW2j.cjs +2 -0
  3. package/dist/SchmancyElement-CeKrBW2j.cjs.map +1 -0
  4. package/dist/SchmancyElement-Ob9yGkiG.js +286 -0
  5. package/dist/SchmancyElement-Ob9yGkiG.js.map +1 -0
  6. package/dist/agent/schmancy.agent.js +4032 -3886
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/agent/schmancy.manifest.json +215 -58
  9. package/dist/animation-CCOIW4wJ.cjs.map +1 -1
  10. package/dist/animation-DCznELuT.js.map +1 -1
  11. package/dist/area-CbajcnmJ.cjs +21 -0
  12. package/dist/area-CbajcnmJ.cjs.map +1 -0
  13. package/dist/{area-DtCNCb8w.js → area-MxLAyWgV.js} +22 -22
  14. package/dist/area-MxLAyWgV.js.map +1 -0
  15. package/dist/area.cjs +1 -1
  16. package/dist/area.js +1 -1
  17. package/dist/{audio-DdN76ikW.js → audio-B_0PGwYC.js} +1 -1
  18. package/dist/audio-B_0PGwYC.js.map +1 -0
  19. package/dist/{audio-B924fI5N.cjs → audio-CpwrIaw-.cjs} +1 -1
  20. package/dist/audio-CpwrIaw-.cjs.map +1 -0
  21. package/dist/audio.cjs +1 -1
  22. package/dist/audio.js +2 -2
  23. package/dist/autocomplete-CILzaDB7.cjs +115 -0
  24. package/dist/autocomplete-CILzaDB7.cjs.map +1 -0
  25. package/dist/{autocomplete-UNOknYUz.js → autocomplete-DV9RxCun.js} +113 -113
  26. package/dist/autocomplete-DV9RxCun.js.map +1 -0
  27. package/dist/autocomplete.cjs +1 -1
  28. package/dist/autocomplete.js +1 -1
  29. package/dist/avatar.cjs +1 -1
  30. package/dist/avatar.cjs.map +1 -1
  31. package/dist/avatar.js +4 -4
  32. package/dist/avatar.js.map +1 -1
  33. package/dist/badge.cjs +1 -1
  34. package/dist/badge.js +1 -1
  35. package/dist/{boat-BZah1Sf9.js → boat-DoZGgQ0P.js} +5 -5
  36. package/dist/{boat-BZah1Sf9.js.map → boat-DoZGgQ0P.js.map} +1 -1
  37. package/dist/{boat-D3bEjxf8.cjs → boat-sg0cWO8a.cjs} +2 -2
  38. package/dist/{boat-D3bEjxf8.cjs.map → boat-sg0cWO8a.cjs.map} +1 -1
  39. package/dist/boat.cjs +1 -1
  40. package/dist/boat.js +1 -1
  41. package/dist/breadcrumb.cjs +32 -31
  42. package/dist/breadcrumb.cjs.map +1 -1
  43. package/dist/breadcrumb.js +33 -32
  44. package/dist/breadcrumb.js.map +1 -1
  45. package/dist/busy-Brs-TDh9.cjs +133 -0
  46. package/dist/busy-Brs-TDh9.cjs.map +1 -0
  47. package/dist/busy-g4LoQmhB.js +172 -0
  48. package/dist/busy-g4LoQmhB.js.map +1 -0
  49. package/dist/busy.cjs +1 -1
  50. package/dist/busy.js +1 -1
  51. package/dist/{button-CTvS5YX4.cjs → button-Cml67Y_d.cjs} +41 -32
  52. package/dist/button-Cml67Y_d.cjs.map +1 -0
  53. package/dist/{button-DgoDfcJx.js → button-DWANpZfD.js} +43 -34
  54. package/dist/button-DWANpZfD.js.map +1 -0
  55. package/dist/button.cjs +40 -33
  56. package/dist/button.cjs.map +1 -1
  57. package/dist/button.js +42 -35
  58. package/dist/button.js.map +1 -1
  59. package/dist/calendar-2dJrw9pR.cjs +58 -0
  60. package/dist/calendar-2dJrw9pR.cjs.map +1 -0
  61. package/dist/calendar-kCe5LaBa.js +434 -0
  62. package/dist/calendar-kCe5LaBa.js.map +1 -0
  63. package/dist/calendar.cjs +1 -0
  64. package/dist/calendar.js +2 -0
  65. package/dist/{card-C6ijJZpF.js → card-CS_hYJbz.js} +136 -136
  66. package/dist/card-CS_hYJbz.js.map +1 -0
  67. package/dist/card-d0KhTnx5.cjs +177 -0
  68. package/dist/card-d0KhTnx5.cjs.map +1 -0
  69. package/dist/card.cjs +1 -1
  70. package/dist/card.js +1 -1
  71. package/dist/{checkbox-7vEPZuGC.js → checkbox-Bjp7kWuE.js} +2 -2
  72. package/dist/{checkbox-7vEPZuGC.js.map → checkbox-Bjp7kWuE.js.map} +1 -1
  73. package/dist/{checkbox-DXKdxkXE.cjs → checkbox-DZ2Wrz7Y.cjs} +1 -1
  74. package/dist/{checkbox-DXKdxkXE.cjs.map → checkbox-DZ2Wrz7Y.cjs.map} +1 -1
  75. package/dist/checkbox.cjs +1 -1
  76. package/dist/checkbox.js +1 -1
  77. package/dist/{chips-9eG-96_D.cjs → chips-BHBVkxsa.cjs} +142 -153
  78. package/dist/chips-BHBVkxsa.cjs.map +1 -0
  79. package/dist/{chips-DF7akwz7.js → chips-DACeW7YL.js} +127 -138
  80. package/dist/chips-DACeW7YL.js.map +1 -0
  81. package/dist/chips.cjs +1 -1
  82. package/dist/chips.js +2 -2
  83. package/dist/connectivity.cjs +53 -35
  84. package/dist/connectivity.cjs.map +1 -1
  85. package/dist/connectivity.js +55 -37
  86. package/dist/connectivity.js.map +1 -1
  87. package/dist/content-drawer.cjs +1 -1
  88. package/dist/content-drawer.js +1 -1
  89. package/dist/cursor-glow-Ah7VXSj7.js.map +1 -1
  90. package/dist/cursor-glow-Bulq-38P.cjs.map +1 -1
  91. package/dist/date-range-B2VN7cl_.cjs +138 -0
  92. package/dist/date-range-B2VN7cl_.cjs.map +1 -0
  93. package/dist/date-range-CDF_5ju_.js +439 -0
  94. package/dist/date-range-CDF_5ju_.js.map +1 -0
  95. package/dist/{date-range-inline-DV2c_gWM.cjs → date-range-inline-CGM0SPK9.cjs} +2 -4
  96. package/dist/date-range-inline-CGM0SPK9.cjs.map +1 -0
  97. package/dist/{date-range-inline-BnOD-ddB.js → date-range-inline-D6Ozerzw.js} +3 -5
  98. package/dist/date-range-inline-D6Ozerzw.js.map +1 -0
  99. package/dist/date-range-inline.cjs +1 -1
  100. package/dist/date-range-inline.js +1 -1
  101. package/dist/date-range.cjs +1 -1
  102. package/dist/date-range.js +2 -2
  103. package/dist/dayjs.min-CvRZTfam.cjs +1 -0
  104. package/dist/dayjs.min-CvRZTfam.cjs.map +1 -0
  105. package/dist/dayjs.min-DnELezPs.js +296 -0
  106. package/dist/dayjs.min-DnELezPs.js.map +1 -0
  107. package/dist/delay.cjs +1 -1
  108. package/dist/delay.js +3 -3
  109. package/dist/{details-ByF66CyY.js → details-Ct1_GwKr.js} +104 -93
  110. package/dist/details-Ct1_GwKr.js.map +1 -0
  111. package/dist/{details-B2-jECBh.cjs → details-D4fVOaj4.cjs} +109 -98
  112. package/dist/details-D4fVOaj4.cjs.map +1 -0
  113. package/dist/details.cjs +1 -1
  114. package/dist/details.js +1 -1
  115. package/dist/{directives-DCb_LA9R.cjs → directives-B2VxfwRL.cjs} +1 -1
  116. package/dist/directives-B2VxfwRL.cjs.map +1 -0
  117. package/dist/{directives-BL7mzVsA.js → directives-Dj8jlv-Q.js} +3 -3
  118. package/dist/directives-Dj8jlv-Q.js.map +1 -0
  119. package/dist/directives.cjs +1 -1
  120. package/dist/directives.js +2 -2
  121. package/dist/discovery.service-CIa3Eeuk.cjs.map +1 -1
  122. package/dist/discovery.service-DZFxtRwW.js.map +1 -1
  123. package/dist/divider-B3v33OnX.cjs +57 -0
  124. package/dist/divider-B3v33OnX.cjs.map +1 -0
  125. package/dist/divider-BJHW3q11.js +89 -0
  126. package/dist/divider-BJHW3q11.js.map +1 -0
  127. package/dist/divider.cjs +1 -1
  128. package/dist/divider.js +1 -1
  129. package/dist/dropdown.cjs +40 -40
  130. package/dist/dropdown.cjs.map +1 -1
  131. package/dist/dropdown.js +41 -41
  132. package/dist/dropdown.js.map +1 -1
  133. package/dist/{expand-cZ8rfCWP.js → expand-BT8mOu8Q.js} +103 -97
  134. package/dist/expand-BT8mOu8Q.js.map +1 -0
  135. package/dist/expand-D0YdR9nR.cjs +147 -0
  136. package/dist/expand-D0YdR9nR.cjs.map +1 -0
  137. package/dist/expand.cjs +1 -1
  138. package/dist/expand.js +1 -1
  139. package/dist/fab.cjs +1 -1
  140. package/dist/fab.cjs.map +1 -1
  141. package/dist/fab.js +2 -2
  142. package/dist/fab.js.map +1 -1
  143. package/dist/{float-DkGyWSWy.cjs → float-BPQlDyai.cjs} +1 -1
  144. package/dist/{float-DkGyWSWy.cjs.map → float-BPQlDyai.cjs.map} +1 -1
  145. package/dist/{float-zn3DgXBT.js → float-BQcxj3i_.js} +2 -2
  146. package/dist/{float-zn3DgXBT.js.map → float-BQcxj3i_.js.map} +1 -1
  147. package/dist/float.cjs +1 -1
  148. package/dist/float.js +1 -1
  149. package/dist/{form-DowzVsgI.cjs → form-CoWFnClb.cjs} +8 -13
  150. package/dist/form-CoWFnClb.cjs.map +1 -0
  151. package/dist/{form-tG7LwDm4.js → form-hC2LvCHX.js} +10 -15
  152. package/dist/form-hC2LvCHX.js.map +1 -0
  153. package/dist/form.cjs +12 -13
  154. package/dist/form.cjs.map +1 -1
  155. package/dist/form.js +23 -24
  156. package/dist/form.js.map +1 -1
  157. package/dist/gravity-6pL6CfIr.cjs.map +1 -1
  158. package/dist/gravity-sVK3zGBF.js.map +1 -1
  159. package/dist/handover/agent-runtime-followups.md +1 -1
  160. package/dist/handover/agent-runtime-v1.md +3 -3
  161. package/dist/{hashContent-iRZJJWtE.cjs.map → hashContent--s09Ed_g.cjs.map} +1 -1
  162. package/dist/{hashContent-BqU6v1Xr.js.map → hashContent-CAvrQ56N.js.map} +1 -1
  163. package/dist/icons-BeGKDZ-k.cjs +22 -0
  164. package/dist/icons-BeGKDZ-k.cjs.map +1 -0
  165. package/dist/{icons-Dup5skuk.js → icons-DEJnIxml.js} +20 -22
  166. package/dist/icons-DEJnIxml.js.map +1 -0
  167. package/dist/icons.cjs +1 -1
  168. package/dist/icons.js +1 -1
  169. package/dist/{iframe-CDJjnNmo.cjs → iframe-BkSukM9C.cjs} +9 -9
  170. package/dist/iframe-BkSukM9C.cjs.map +1 -0
  171. package/dist/{iframe-Xc3EPMZT.js → iframe-V3S-bwEY.js} +10 -10
  172. package/dist/iframe-V3S-bwEY.js.map +1 -0
  173. package/dist/iframe.cjs +1 -1
  174. package/dist/iframe.js +1 -1
  175. package/dist/index.cjs +1 -1
  176. package/dist/index.js +61 -60
  177. package/dist/{input-cTyDxW9L.js → input-CPFCSQld.js} +3 -10
  178. package/dist/input-CPFCSQld.js.map +1 -0
  179. package/dist/{input-DnmC6J1T.cjs → input-DSfwfhhj.cjs} +2 -9
  180. package/dist/input-DSfwfhhj.cjs.map +1 -0
  181. package/dist/input-chip-BUuFJUky.cjs +129 -0
  182. package/dist/input-chip-BUuFJUky.cjs.map +1 -0
  183. package/dist/{input-chip-CYI17YOq.js → input-chip-C3a1fwKB.js} +87 -104
  184. package/dist/input-chip-C3a1fwKB.js.map +1 -0
  185. package/dist/input.cjs +1 -1
  186. package/dist/input.js +1 -1
  187. package/dist/json.cjs +5 -1
  188. package/dist/json.cjs.map +1 -1
  189. package/dist/json.js +8 -4
  190. package/dist/json.js.map +1 -1
  191. package/dist/kbd.cjs +28 -28
  192. package/dist/kbd.cjs.map +1 -1
  193. package/dist/kbd.js +29 -29
  194. package/dist/kbd.js.map +1 -1
  195. package/dist/{layout-CNlZSJFU.cjs → layout-CdyHy_oX.cjs} +1 -1
  196. package/dist/layout-CdyHy_oX.cjs.map +1 -0
  197. package/dist/{layout-DDxw0EwL.js → layout-k6fOkpif.js} +1 -1
  198. package/dist/layout-k6fOkpif.js.map +1 -0
  199. package/dist/layout.cjs +26 -26
  200. package/dist/layout.cjs.map +1 -1
  201. package/dist/layout.js +27 -27
  202. package/dist/layout.js.map +1 -1
  203. package/dist/lazy-BaAiIUru.js.map +1 -1
  204. package/dist/lazy-C-7a4FAe.cjs.map +1 -1
  205. package/dist/{lightbox-CH-y3rYB.js → lightbox-DIG0VLOK.js} +8 -14
  206. package/dist/lightbox-DIG0VLOK.js.map +1 -0
  207. package/dist/{lightbox-CvtqoInF.cjs → lightbox-E5rgd-hu.cjs} +7 -13
  208. package/dist/lightbox-E5rgd-hu.cjs.map +1 -0
  209. package/dist/lightbox.cjs +1 -1
  210. package/dist/lightbox.js +1 -1
  211. package/dist/list-BRz0rDSH.cjs +47 -0
  212. package/dist/list-BRz0rDSH.cjs.map +1 -0
  213. package/dist/{list-DrsawQ5R.js → list-NrOYDPBo.js} +42 -35
  214. package/dist/list-NrOYDPBo.js.map +1 -0
  215. package/dist/list.cjs +1 -1
  216. package/dist/list.js +1 -1
  217. package/dist/magnetic-DKtc4umC.cjs.map +1 -1
  218. package/dist/magnetic-DaOOv5Dz.js.map +1 -1
  219. package/dist/{menu-CsY5lMqY.js → menu-B1Ei9SVj.js} +12 -12
  220. package/dist/menu-B1Ei9SVj.js.map +1 -0
  221. package/dist/{menu-BFRcTe3o.cjs → menu-Duvl66Nl.cjs} +10 -10
  222. package/dist/menu-Duvl66Nl.cjs.map +1 -0
  223. package/dist/menu.cjs +1 -1
  224. package/dist/menu.js +1 -1
  225. package/dist/{mixins-BoMURWag.cjs → mixins-Cjn20BQH.cjs} +42 -100
  226. package/dist/mixins-Cjn20BQH.cjs.map +1 -0
  227. package/dist/{mixins-bCEXbwJV.js → mixins-q4KAL8Xr.js} +42 -100
  228. package/dist/mixins-q4KAL8Xr.js.map +1 -0
  229. package/dist/mixins.cjs +1 -1
  230. package/dist/mixins.js +2 -2
  231. package/dist/nav-drawer.cjs +1 -1
  232. package/dist/nav-drawer.js +1 -1
  233. package/dist/navigation-bar.cjs +1 -1
  234. package/dist/navigation-bar.js +1 -1
  235. package/dist/navigation-rail.cjs +2 -4
  236. package/dist/navigation-rail.cjs.map +1 -1
  237. package/dist/navigation-rail.js +3 -5
  238. package/dist/navigation-rail.js.map +1 -1
  239. package/dist/{notification-DFKRMmSq.js → notification-COhUhUCr.js} +5 -7
  240. package/dist/notification-COhUhUCr.js.map +1 -0
  241. package/dist/{notification-FBf3Mb2e.cjs → notification-DsdA_MJe.cjs} +2 -4
  242. package/dist/notification-DsdA_MJe.cjs.map +1 -0
  243. package/dist/notification.cjs +1 -1
  244. package/dist/notification.js +1 -1
  245. package/dist/{option-Ct0lGdH3.js → option-BIzgTbXz.js} +20 -20
  246. package/dist/option-BIzgTbXz.js.map +1 -0
  247. package/dist/option-C5hhqR2z.cjs +43 -0
  248. package/dist/option-C5hhqR2z.cjs.map +1 -0
  249. package/dist/option.cjs +1 -1
  250. package/dist/option.js +1 -1
  251. package/dist/{overlay-sRXiMkjn.cjs → overlay-BzgF8P7i.cjs} +48 -41
  252. package/dist/overlay-BzgF8P7i.cjs.map +1 -0
  253. package/dist/{overlay-Bh8Q_R01.js → overlay-LoRRemny.js} +52 -45
  254. package/dist/overlay-LoRRemny.js.map +1 -0
  255. package/dist/overlay-stack-Bdr9lOqi.cjs.map +1 -1
  256. package/dist/overlay-stack-D2rgxQLh.js.map +1 -1
  257. package/dist/overlay.cjs +1 -1
  258. package/dist/{overlay.confirm-body-CQihsR20.js → overlay.confirm-body-D0b1MoCw.js} +30 -45
  259. package/dist/overlay.confirm-body-D0b1MoCw.js.map +1 -0
  260. package/dist/{overlay.confirm-body-Jc1EuMGs.cjs → overlay.confirm-body-DCneq73Z.cjs} +22 -37
  261. package/dist/overlay.confirm-body-DCneq73Z.cjs.map +1 -0
  262. package/dist/overlay.js +3 -3
  263. package/dist/{overlay.service-BXPgS7ay.js → overlay.service-BuUeti6X.js} +2 -2
  264. package/dist/overlay.service-BuUeti6X.js.map +1 -0
  265. package/dist/{overlay.service-9Dp3g7ot.cjs → overlay.service-MMTiW2T3.cjs} +1 -1
  266. package/dist/overlay.service-MMTiW2T3.cjs.map +1 -0
  267. package/dist/{progress-CYLshdo2.js → progress-D7n3SKAO.js} +50 -50
  268. package/dist/progress-D7n3SKAO.js.map +1 -0
  269. package/dist/progress-DsCnFsH5.cjs +51 -0
  270. package/dist/progress-DsCnFsH5.cjs.map +1 -0
  271. package/dist/progress.cjs +1 -1
  272. package/dist/progress.js +1 -1
  273. package/dist/{radio-group-6kCgOgBL.cjs → radio-group-CaAjg9UV.cjs} +1 -1
  274. package/dist/radio-group-CaAjg9UV.cjs.map +1 -0
  275. package/dist/{radio-group-bZtZHOj_.js → radio-group-Drpl6Pl8.js} +2 -2
  276. package/dist/radio-group-Drpl6Pl8.js.map +1 -0
  277. package/dist/radio-group.cjs +1 -1
  278. package/dist/radio-group.js +1 -1
  279. package/dist/range.cjs +4 -2
  280. package/dist/range.cjs.map +1 -1
  281. package/dist/range.js +5 -3
  282. package/dist/range.js.map +1 -1
  283. package/dist/reduced-motion-D-L12p7G.js.map +1 -1
  284. package/dist/reduced-motion-Ds-HjMzn.cjs.map +1 -1
  285. package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-4P2v57ke.cjs.map} +1 -1
  286. package/dist/{rxjs-utils-d-ivVN84.js.map → rxjs-utils-JMFdgQSl.js.map} +1 -1
  287. package/dist/rxjs-utils.cjs +1 -1
  288. package/dist/rxjs-utils.js +1 -1
  289. package/dist/search-DPKoC-dT.cjs.map +1 -1
  290. package/dist/search-MvIBA93K.js.map +1 -1
  291. package/dist/{select-CU3X-PIa.js → select-CTXkrrVZ.js} +13 -13
  292. package/dist/select-CTXkrrVZ.js.map +1 -0
  293. package/dist/select-DcLcpPCh.cjs +56 -0
  294. package/dist/select-DcLcpPCh.cjs.map +1 -0
  295. package/dist/select.cjs +1 -1
  296. package/dist/select.js +1 -1
  297. package/dist/skeleton.cjs +37 -33
  298. package/dist/skeleton.cjs.map +1 -1
  299. package/dist/skeleton.js +38 -34
  300. package/dist/skeleton.js.map +1 -1
  301. package/dist/skills/schmancy/surface.md +38 -22
  302. package/dist/skills/surface.md +38 -22
  303. package/dist/slider.cjs +31 -31
  304. package/dist/slider.cjs.map +1 -1
  305. package/dist/slider.js +32 -32
  306. package/dist/slider.js.map +1 -1
  307. package/dist/{sound.service-B4ZmXpH9.js → sound.service-AJwuk3yr.js} +1 -1
  308. package/dist/sound.service-AJwuk3yr.js.map +1 -0
  309. package/dist/{sound.service-DjlMvicQ.cjs → sound.service-CVsxhQkX.cjs} +1 -1
  310. package/dist/sound.service-CVsxhQkX.cjs.map +1 -0
  311. package/dist/{splash-screen-emCLYoVl.js → splash-screen-DANfqvlo.js} +23 -26
  312. package/dist/splash-screen-DANfqvlo.js.map +1 -0
  313. package/dist/splash-screen-K74cgU6S.cjs +38 -0
  314. package/dist/splash-screen-K74cgU6S.cjs.map +1 -0
  315. package/dist/splash-screen.cjs +1 -1
  316. package/dist/splash-screen.js +1 -1
  317. package/dist/{src-DGDTkOvC.js → src-Bo-vvN6m.js} +173 -175
  318. package/dist/src-Bo-vvN6m.js.map +1 -0
  319. package/dist/src-MdpH1zth.cjs +237 -0
  320. package/dist/src-MdpH1zth.cjs.map +1 -0
  321. package/dist/{state-CumAEPQH.cjs → state-BWQiqN6I.cjs} +1 -1
  322. package/dist/state-BWQiqN6I.cjs.map +1 -0
  323. package/dist/{state-DMd_FUeA.js → state-DBA_gzJO.js} +1 -1
  324. package/dist/state-DBA_gzJO.js.map +1 -0
  325. package/dist/state.cjs +1 -1
  326. package/dist/state.js +2 -2
  327. package/dist/steps.cjs +20 -12
  328. package/dist/steps.cjs.map +1 -1
  329. package/dist/steps.js +21 -13
  330. package/dist/steps.js.map +1 -1
  331. package/dist/surface-COBvWWFb.cjs +7 -0
  332. package/dist/surface-COBvWWFb.cjs.map +1 -0
  333. package/dist/{surface-DNiYigsX.js → surface-DXk1X1tL.js} +9 -9
  334. package/dist/{surface-DNiYigsX.js.map → surface-DXk1X1tL.js.map} +1 -1
  335. package/dist/surface.cjs +1 -1
  336. package/dist/surface.js +1 -1
  337. package/dist/switch.cjs +13 -4
  338. package/dist/switch.cjs.map +1 -1
  339. package/dist/switch.js +14 -5
  340. package/dist/switch.js.map +1 -1
  341. package/dist/table.cjs +4 -10
  342. package/dist/table.cjs.map +1 -1
  343. package/dist/table.js +5 -11
  344. package/dist/table.js.map +1 -1
  345. package/dist/{tabs-4T_4kCf-.js → tabs-BYhFWnsx.js} +7 -7
  346. package/dist/tabs-BYhFWnsx.js.map +1 -0
  347. package/dist/{tabs-Byxxt-AH.cjs → tabs-CJwB0fr0.cjs} +6 -6
  348. package/dist/tabs-CJwB0fr0.cjs.map +1 -0
  349. package/dist/tabs.cjs +1 -1
  350. package/dist/tabs.js +1 -1
  351. package/dist/teleport.cjs +1 -1
  352. package/dist/teleport.js +1 -1
  353. package/dist/{textarea-kkYNk1ET.js → textarea-BjDx1w2g.js} +37 -41
  354. package/dist/textarea-BjDx1w2g.js.map +1 -0
  355. package/dist/{textarea-BwYwH9fu.cjs → textarea-CGgznhd6.cjs} +36 -40
  356. package/dist/textarea-CGgznhd6.cjs.map +1 -0
  357. package/dist/textarea.cjs +1 -1
  358. package/dist/textarea.js +1 -1
  359. package/dist/{theme-BG0EnzYP.cjs → theme-BVul7lHS.cjs} +6 -6
  360. package/dist/{theme-BG0EnzYP.cjs.map → theme-BVul7lHS.cjs.map} +1 -1
  361. package/dist/{theme-DwQBl6sr.js → theme-Dvm5J8nh.js} +11 -11
  362. package/dist/{theme-DwQBl6sr.js.map → theme-Dvm5J8nh.js.map} +1 -1
  363. package/dist/{theme-button-BD8anzsZ.js → theme-button-Bko5ohFP.js} +2 -2
  364. package/dist/{theme-button-BD8anzsZ.js.map → theme-button-Bko5ohFP.js.map} +1 -1
  365. package/dist/{theme-button-DlrNoCMA.cjs → theme-button-YLY7zR1c.cjs} +1 -1
  366. package/dist/{theme-button-DlrNoCMA.cjs.map → theme-button-YLY7zR1c.cjs.map} +1 -1
  367. package/dist/theme-button.cjs +1 -1
  368. package/dist/theme-button.js +1 -1
  369. package/dist/theme.cjs +1 -1
  370. package/dist/{theme.interface-CSt7JUBD.cjs.map → theme.interface-B-qxDsZQ.cjs.map} +1 -1
  371. package/dist/{theme.interface-odQEpZZH.js.map → theme.interface-B7caS5cg.js.map} +1 -1
  372. package/dist/theme.js +4 -4
  373. package/dist/{theme.service-Dv_55nfE.js → theme.service-D94nm7Bf.js} +1 -1
  374. package/dist/theme.service-D94nm7Bf.js.map +1 -0
  375. package/dist/{theme.service-pjkTM209.cjs → theme.service-h2fXQq7x.cjs} +1 -1
  376. package/dist/theme.service-h2fXQq7x.cjs.map +1 -0
  377. package/dist/tooltip.cjs.map +1 -1
  378. package/dist/tooltip.js.map +1 -1
  379. package/dist/tree.cjs +14 -14
  380. package/dist/tree.cjs.map +1 -1
  381. package/dist/tree.js +15 -15
  382. package/dist/tree.js.map +1 -1
  383. package/dist/types.cjs +1 -1
  384. package/dist/types.cjs.map +1 -1
  385. package/dist/types.js +19 -2
  386. package/dist/types.js.map +1 -1
  387. package/dist/typewriter.cjs.map +1 -1
  388. package/dist/typewriter.js.map +1 -1
  389. package/dist/typography-ByF2k5yW.js +358 -0
  390. package/dist/typography-ByF2k5yW.js.map +1 -0
  391. package/dist/typography-Cfav17it.cjs +282 -0
  392. package/dist/typography-Cfav17it.cjs.map +1 -0
  393. package/dist/typography.cjs +1 -1
  394. package/dist/typography.js +1 -1
  395. package/dist/utils-DIXndz6Q.cjs.map +1 -0
  396. package/dist/utils-dSPH7Oh9.js.map +1 -0
  397. package/dist/utils.cjs +1 -1
  398. package/dist/utils.js +1 -1
  399. package/dist/visually-hidden.cjs +13 -13
  400. package/dist/visually-hidden.cjs.map +1 -1
  401. package/dist/visually-hidden.js +14 -14
  402. package/dist/visually-hidden.js.map +1 -1
  403. package/dist/window-Br1OmpL-.cjs +67 -0
  404. package/dist/window-Br1OmpL-.cjs.map +1 -0
  405. package/dist/{window-C76zstbV.js → window-CCmN4but.js} +24 -15
  406. package/dist/window-CCmN4but.js.map +1 -0
  407. package/dist/window.cjs +1 -1
  408. package/dist/window.js +1 -1
  409. package/package.json +1 -1
  410. package/skills/schmancy/surface.md +38 -22
  411. package/src/area/area.component.ts +249 -163
  412. package/src/area/area.service.test.ts +994 -1006
  413. package/src/area/area.service.ts +76 -72
  414. package/src/area/index.ts +7 -7
  415. package/src/area/lazy.ts +39 -42
  416. package/src/area/route.component.ts +54 -52
  417. package/src/area/router.types.ts +7 -7
  418. package/src/audio/emotional-sounds.ts +880 -801
  419. package/src/audio/sound.service.ts +26 -5
  420. package/src/avatar/avatar.ts +4 -4
  421. package/src/badge/badge.ts +15 -12
  422. package/src/badge/index.ts +1 -1
  423. package/src/boat/boat.ts +1 -1
  424. package/src/breadcrumb/breadcrumb.ts +37 -32
  425. package/src/busy/busy.ts +15 -12
  426. package/src/busy/index.ts +2 -2
  427. package/src/busy/spinner.ts +132 -119
  428. package/src/button/button.test.ts +5 -1
  429. package/src/button/button.ts +113 -72
  430. package/src/button/icon-button.ts +64 -46
  431. package/src/button/index.ts +2 -2
  432. package/src/calendar/calendar.test.ts +504 -0
  433. package/src/calendar/calendar.ts +587 -0
  434. package/src/calendar/index.ts +2 -0
  435. package/src/card/actions.ts +11 -9
  436. package/src/card/card.ts +79 -77
  437. package/src/card/content.ts +8 -6
  438. package/src/card/index.ts +4 -4
  439. package/src/card/media.ts +50 -50
  440. package/src/chips/assist-chip.ts +1 -1
  441. package/src/chips/chips.ts +1 -1
  442. package/src/chips/filter-chip.ts +1 -1
  443. package/src/chips/index.ts +1 -1
  444. package/src/chips/input-chip.ts +1 -1
  445. package/src/chips/suggestion-chip.ts +1 -1
  446. package/src/connectivity/connectivity-status.ts +90 -62
  447. package/src/content-drawer/drawer.service.ts +47 -36
  448. package/src/content-drawer/drawer.ts +31 -18
  449. package/src/content-drawer/index.ts +5 -5
  450. package/src/content-drawer/main.ts +9 -7
  451. package/src/content-drawer/sheet.ts +8 -6
  452. package/src/date-range-inline/date-range-inline.ts +523 -522
  453. package/src/date-range-inline/index.ts +2 -2
  454. package/src/delay/index.ts +1 -1
  455. package/src/details/details.ts +119 -105
  456. package/src/details/index.ts +1 -1
  457. package/src/directives/ai-badge.ts +1 -5
  458. package/src/directives/animate-text.ts +43 -31
  459. package/src/directives/art/effects/howl.ts +1 -4
  460. package/src/directives/art/effects/samwa.ts +11 -5
  461. package/src/directives/art/effects/snow.ts +1 -2
  462. package/src/directives/battery.ts +21 -12
  463. package/src/directives/confirm-click.ts +9 -17
  464. package/src/directives/cursor-glow.ts +1 -1
  465. package/src/directives/cycle-text.ts +7 -21
  466. package/src/directives/drag.ts +50 -45
  467. package/src/directives/fyi.ts +1 -6
  468. package/src/directives/gravity.ts +10 -8
  469. package/src/directives/hummingbird.ts +256 -107
  470. package/src/directives/index.ts +29 -29
  471. package/src/directives/intersect.ts +11 -11
  472. package/src/directives/layout.ts +25 -36
  473. package/src/directives/liquid.ts +4 -10
  474. package/src/directives/living-border.ts +7 -5
  475. package/src/directives/long-press.ts +2 -1
  476. package/src/directives/magnetic.ts +7 -6
  477. package/src/directives/nebula.ts +34 -28
  478. package/src/directives/overflow-within.ts +18 -20
  479. package/src/directives/reduced-motion.ts +9 -9
  480. package/src/directives/reveal.ts +193 -195
  481. package/src/directives/ripple.ts +9 -7
  482. package/src/directives/urgent.ts +3 -1
  483. package/src/directives/working-snake.ts +1 -1
  484. package/src/discovery/discovery.service.ts +198 -210
  485. package/src/discovery/index.ts +1 -1
  486. package/src/divider/divider.ts +49 -47
  487. package/src/divider/index.ts +1 -1
  488. package/src/dropdown/dropdown-content.ts +42 -40
  489. package/src/dropdown/index.ts +2 -2
  490. package/src/expand/expand-root.component.ts +70 -61
  491. package/src/expand/expand.component.ts +48 -43
  492. package/src/fab/fab.test.ts +1 -2
  493. package/src/fab/fab.ts +2 -4
  494. package/src/form/fields/autocomplete/autocomplete.scss +6 -2
  495. package/src/form/fields/autocomplete/autocomplete.ts +712 -724
  496. package/src/form/fields/autocomplete/index.ts +1 -1
  497. package/src/form/fields/checkbox/checkbox.ts +1 -4
  498. package/src/form/fields/chips/assist-chip.ts +69 -72
  499. package/src/form/fields/chips/chips.ts +14 -15
  500. package/src/form/fields/chips/filter-chip.ts +36 -32
  501. package/src/form/fields/chips/index.ts +5 -5
  502. package/src/form/fields/chips/input-chip.ts +130 -142
  503. package/src/form/fields/chips/suggestion-chip.ts +69 -72
  504. package/src/form/fields/date-range/date-range-dialog.ts +154 -194
  505. package/src/form/fields/date-range/date-range-helpers.ts +63 -64
  506. package/src/form/fields/date-range/date-range.test.ts +575 -121
  507. package/src/form/fields/date-range/date-range.ts +343 -395
  508. package/src/form/fields/date-range/index.ts +2 -2
  509. package/src/form/fields/input/index.ts +8 -8
  510. package/src/form/fields/input/input.scss +30 -26
  511. package/src/form/fields/input/input.test.ts +4 -1
  512. package/src/form/fields/input/input.ts +4 -20
  513. package/src/form/fields/radio-group/index.ts +2 -2
  514. package/src/form/fields/radio-group/radio-button.ts +8 -8
  515. package/src/form/fields/radio-group/radio-group.ts +4 -1
  516. package/src/form/fields/range/range.ts +3 -1
  517. package/src/form/fields/select/index.ts +2 -2
  518. package/src/form/fields/select/select.ts +51 -45
  519. package/src/form/fields/switch/switch.ts +13 -7
  520. package/src/form/fields/textarea/index.ts +1 -1
  521. package/src/form/fields/textarea/textarea.ts +44 -49
  522. package/src/form/form-summary.ts +15 -14
  523. package/src/form/form.test.ts +0 -1
  524. package/src/form/form.ts +11 -23
  525. package/src/icons/icon.ts +25 -25
  526. package/src/icons/index.ts +1 -1
  527. package/src/iframe/iframe.ts +11 -9
  528. package/src/index.ts +1 -0
  529. package/src/json/json.ts +9 -2
  530. package/src/kbd/kbd.ts +30 -28
  531. package/src/layout/scroll/index.ts +1 -1
  532. package/src/layout/scroll/scroll.ts +54 -54
  533. package/src/lightbox/lightbox-service.ts +27 -18
  534. package/src/lightbox/lightbox.directive.ts +2 -1
  535. package/src/lightbox/lightbox.ts +21 -38
  536. package/src/list/index.ts +3 -3
  537. package/src/list/list-item.ts +32 -26
  538. package/src/list/list.ts +13 -8
  539. package/src/menu/index.ts +2 -2
  540. package/src/menu/menu-item.ts +7 -5
  541. package/src/menu/menu.ts +8 -6
  542. package/src/nav-drawer/appbar.ts +9 -7
  543. package/src/nav-drawer/content.ts +10 -8
  544. package/src/nav-drawer/drawer.ts +29 -25
  545. package/src/nav-drawer/index.ts +6 -6
  546. package/src/navigation-bar/index.ts +2 -2
  547. package/src/navigation-bar/navigation-bar-item.ts +127 -118
  548. package/src/navigation-bar/navigation-bar.ts +103 -91
  549. package/src/navigation-rail/index.ts +2 -2
  550. package/src/navigation-rail/navigation-rail.ts +21 -22
  551. package/src/notification/index.ts +6 -6
  552. package/src/notification/notification-service.ts +1 -2
  553. package/src/notification/notification.scss +5 -1
  554. package/src/notification/notification.ts +1 -3
  555. package/src/notification/notify.ts +204 -207
  556. package/src/option/index.ts +1 -1
  557. package/src/option/option.ts +26 -25
  558. package/src/overlay/overlay.animations.ts +4 -14
  559. package/src/overlay/overlay.component.ts +110 -131
  560. package/src/overlay/overlay.confirm-body.ts +26 -48
  561. package/src/overlay/overlay.gestures.ts +8 -10
  562. package/src/overlay/overlay.layout.ts +1 -4
  563. package/src/overlay/overlay.positioning.ts +4 -15
  564. package/src/overlay/overlay.service.ts +9 -24
  565. package/src/overlay/overlay.stack.test.ts +4 -1
  566. package/src/overlay/overlay.stack.ts +4 -4
  567. package/src/overlay/overlay.types.ts +11 -20
  568. package/src/progress/index.ts +1 -1
  569. package/src/progress/progress.ts +135 -133
  570. package/src/rxjs-utils/index.ts +6 -6
  571. package/src/rxjs-utils/waitForElement.ts +20 -20
  572. package/src/rxjs-utils/waitForElementAll.ts +21 -21
  573. package/src/rxjs-utils/waitForElements.ts +27 -27
  574. package/src/rxjs-utils/waitForElementsAll.ts +27 -29
  575. package/src/rxjs-utils/waitUntil.ts +7 -12
  576. package/src/skeleton/skeleton.ts +39 -33
  577. package/src/slider/index.ts +2 -2
  578. package/src/slider/slide.ts +14 -12
  579. package/src/slider/slider.ts +24 -22
  580. package/src/splash-screen/index.ts +1 -1
  581. package/src/splash-screen/splash-screen.ts +26 -27
  582. package/src/state/active-host.ts +4 -5
  583. package/src/state/index.ts +34 -53
  584. package/src/state/persist.ts +14 -11
  585. package/src/state/schmancy-context.ts +88 -88
  586. package/src/state/state.test-d.ts +3 -13
  587. package/src/state/state.test.ts +1 -4
  588. package/src/steps/index.ts +3 -3
  589. package/src/steps/schmancy-step.ts +41 -31
  590. package/src/steps/schmancy-steps.ts +7 -5
  591. package/src/surface/index.ts +1 -1
  592. package/src/surface/surface.styles.ts +53 -104
  593. package/src/surface/surface.ts +10 -8
  594. package/src/table/index.ts +2 -2
  595. package/src/table/row.ts +1 -4
  596. package/src/table/table.ts +2 -5
  597. package/src/tabs/index.ts +2 -2
  598. package/src/tabs/tabs-group.ts +8 -6
  599. package/src/teleport/index.ts +2 -2
  600. package/src/test-utils/a11y.ts +1 -3
  601. package/src/theme/index.ts +17 -17
  602. package/src/theme/theme-audio-player.ts +18 -16
  603. package/src/theme/theme-controller-boat.ts +1 -1
  604. package/src/theme/theme-controller.ts +36 -32
  605. package/src/theme/theme.component.ts +5 -9
  606. package/src/theme/theme.events.ts +1 -1
  607. package/src/theme/theme.format.ts +7 -7
  608. package/src/theme/theme.service.ts +453 -468
  609. package/src/theme/theme.style.css +78 -23
  610. package/src/theme-button/index.ts +1 -1
  611. package/src/tooltip/tooltip.directive.ts +1 -1
  612. package/src/tree/index.ts +1 -1
  613. package/src/tree/tree.ts +24 -16
  614. package/src/types/surface.ts +38 -44
  615. package/src/typewriter/typewriter.directive.ts +30 -39
  616. package/src/typography/typography.ts +289 -269
  617. package/src/utils/animation.ts +2 -8
  618. package/src/utils/index.ts +6 -6
  619. package/src/utils/number.ts +480 -517
  620. package/src/utils/overlay-stack.ts +1 -3
  621. package/src/utils/search.ts +5 -9
  622. package/src/visually-hidden/visually-hidden.ts +15 -13
  623. package/src/window/window-manager.ts +6 -1
  624. package/src/window/window-position.ts +7 -5
  625. package/src/window/window.ts +143 -108
  626. package/types/src/calendar/calendar.d.ts +108 -0
  627. package/types/src/calendar/calendar.test.d.ts +1 -0
  628. package/types/src/calendar/index.d.ts +2 -0
  629. package/types/src/directives/cursor-glow.d.ts +1 -1
  630. package/types/src/directives/hummingbird.d.ts +3 -3
  631. package/types/src/form/fields/date-range/date-range-dialog.d.ts +24 -28
  632. package/types/src/form/fields/date-range/date-range.d.ts +39 -66
  633. package/types/src/form/fields/date-range/date-range.test.d.ts +1 -0
  634. package/types/src/form/fields/date-range/index.d.ts +1 -1
  635. package/types/src/index.d.ts +1 -0
  636. package/types/src/surface/surface.styles.d.ts +13 -6
  637. package/types/src/types/surface.d.ts +17 -22
  638. package/types/src/utils/number.d.ts +1 -1
  639. package/dist/SchmancyElement-OG71FtNv.js +0 -286
  640. package/dist/SchmancyElement-OG71FtNv.js.map +0 -1
  641. package/dist/SchmancyElement-PS1u0j1B.cjs +0 -2
  642. package/dist/SchmancyElement-PS1u0j1B.cjs.map +0 -1
  643. package/dist/area-CaEI33G0.cjs +0 -21
  644. package/dist/area-CaEI33G0.cjs.map +0 -1
  645. package/dist/area-DtCNCb8w.js.map +0 -1
  646. package/dist/audio-B924fI5N.cjs.map +0 -1
  647. package/dist/audio-DdN76ikW.js.map +0 -1
  648. package/dist/autocomplete-Dq3BkitV.cjs +0 -115
  649. package/dist/autocomplete-Dq3BkitV.cjs.map +0 -1
  650. package/dist/autocomplete-UNOknYUz.js.map +0 -1
  651. package/dist/busy--WqiXKnl.cjs +0 -134
  652. package/dist/busy--WqiXKnl.cjs.map +0 -1
  653. package/dist/busy-DzXyO0z6.js +0 -173
  654. package/dist/busy-DzXyO0z6.js.map +0 -1
  655. package/dist/button-CTvS5YX4.cjs.map +0 -1
  656. package/dist/button-DgoDfcJx.js.map +0 -1
  657. package/dist/card-C6ijJZpF.js.map +0 -1
  658. package/dist/card-Ci3_9Dd4.cjs +0 -177
  659. package/dist/card-Ci3_9Dd4.cjs.map +0 -1
  660. package/dist/chips-9eG-96_D.cjs.map +0 -1
  661. package/dist/chips-DF7akwz7.js.map +0 -1
  662. package/dist/date-range-C13_R3OA.js +0 -966
  663. package/dist/date-range-C13_R3OA.js.map +0 -1
  664. package/dist/date-range-Q2xj5Syc.cjs +0 -142
  665. package/dist/date-range-Q2xj5Syc.cjs.map +0 -1
  666. package/dist/date-range-inline-BnOD-ddB.js.map +0 -1
  667. package/dist/date-range-inline-DV2c_gWM.cjs.map +0 -1
  668. package/dist/details-B2-jECBh.cjs.map +0 -1
  669. package/dist/details-ByF66CyY.js.map +0 -1
  670. package/dist/directives-BL7mzVsA.js.map +0 -1
  671. package/dist/directives-DCb_LA9R.cjs.map +0 -1
  672. package/dist/divider-Bv2QiOZL.cjs +0 -57
  673. package/dist/divider-Bv2QiOZL.cjs.map +0 -1
  674. package/dist/divider-gYuz0zDU.js +0 -89
  675. package/dist/divider-gYuz0zDU.js.map +0 -1
  676. package/dist/expand-B9IUGVtc.cjs +0 -141
  677. package/dist/expand-B9IUGVtc.cjs.map +0 -1
  678. package/dist/expand-cZ8rfCWP.js.map +0 -1
  679. package/dist/form-DowzVsgI.cjs.map +0 -1
  680. package/dist/form-tG7LwDm4.js.map +0 -1
  681. package/dist/icons-BZeCloP9.cjs +0 -24
  682. package/dist/icons-BZeCloP9.cjs.map +0 -1
  683. package/dist/icons-Dup5skuk.js.map +0 -1
  684. package/dist/iframe-CDJjnNmo.cjs.map +0 -1
  685. package/dist/iframe-Xc3EPMZT.js.map +0 -1
  686. package/dist/input-DnmC6J1T.cjs.map +0 -1
  687. package/dist/input-cTyDxW9L.js.map +0 -1
  688. package/dist/input-chip-CV91URyU.cjs +0 -146
  689. package/dist/input-chip-CV91URyU.cjs.map +0 -1
  690. package/dist/input-chip-CYI17YOq.js.map +0 -1
  691. package/dist/layout-CNlZSJFU.cjs.map +0 -1
  692. package/dist/layout-DDxw0EwL.js.map +0 -1
  693. package/dist/lightbox-CH-y3rYB.js.map +0 -1
  694. package/dist/lightbox-CvtqoInF.cjs.map +0 -1
  695. package/dist/list-Dl8KfxrF.cjs +0 -40
  696. package/dist/list-Dl8KfxrF.cjs.map +0 -1
  697. package/dist/list-DrsawQ5R.js.map +0 -1
  698. package/dist/menu-BFRcTe3o.cjs.map +0 -1
  699. package/dist/menu-CsY5lMqY.js.map +0 -1
  700. package/dist/mixins-BoMURWag.cjs.map +0 -1
  701. package/dist/mixins-bCEXbwJV.js.map +0 -1
  702. package/dist/notification-DFKRMmSq.js.map +0 -1
  703. package/dist/notification-FBf3Mb2e.cjs.map +0 -1
  704. package/dist/option-Ct0lGdH3.js.map +0 -1
  705. package/dist/option-Il1KpU8M.cjs +0 -43
  706. package/dist/option-Il1KpU8M.cjs.map +0 -1
  707. package/dist/overlay-Bh8Q_R01.js.map +0 -1
  708. package/dist/overlay-sRXiMkjn.cjs.map +0 -1
  709. package/dist/overlay.confirm-body-CQihsR20.js.map +0 -1
  710. package/dist/overlay.confirm-body-Jc1EuMGs.cjs.map +0 -1
  711. package/dist/overlay.service-9Dp3g7ot.cjs.map +0 -1
  712. package/dist/overlay.service-BXPgS7ay.js.map +0 -1
  713. package/dist/progress-CWC5XYZ_.cjs +0 -51
  714. package/dist/progress-CWC5XYZ_.cjs.map +0 -1
  715. package/dist/progress-CYLshdo2.js.map +0 -1
  716. package/dist/radio-group-6kCgOgBL.cjs.map +0 -1
  717. package/dist/radio-group-bZtZHOj_.js.map +0 -1
  718. package/dist/select-CU3X-PIa.js.map +0 -1
  719. package/dist/select-MXsF8KsU.cjs +0 -56
  720. package/dist/select-MXsF8KsU.cjs.map +0 -1
  721. package/dist/sound.service-B4ZmXpH9.js.map +0 -1
  722. package/dist/sound.service-DjlMvicQ.cjs.map +0 -1
  723. package/dist/splash-screen-CN9dZcqC.cjs +0 -41
  724. package/dist/splash-screen-CN9dZcqC.cjs.map +0 -1
  725. package/dist/splash-screen-emCLYoVl.js.map +0 -1
  726. package/dist/src-DGDTkOvC.js.map +0 -1
  727. package/dist/src-DK3111z_.cjs +0 -240
  728. package/dist/src-DK3111z_.cjs.map +0 -1
  729. package/dist/state-CumAEPQH.cjs.map +0 -1
  730. package/dist/state-DMd_FUeA.js.map +0 -1
  731. package/dist/surface-DGI-FBoi.cjs +0 -7
  732. package/dist/surface-DGI-FBoi.cjs.map +0 -1
  733. package/dist/tabs-4T_4kCf-.js.map +0 -1
  734. package/dist/tabs-Byxxt-AH.cjs.map +0 -1
  735. package/dist/textarea-BwYwH9fu.cjs.map +0 -1
  736. package/dist/textarea-kkYNk1ET.js.map +0 -1
  737. package/dist/theme.service-Dv_55nfE.js.map +0 -1
  738. package/dist/theme.service-pjkTM209.cjs.map +0 -1
  739. package/dist/typography-BVkU11_q.js +0 -358
  740. package/dist/typography-BVkU11_q.js.map +0 -1
  741. package/dist/typography-aaQaIcNc.cjs +0 -282
  742. package/dist/typography-aaQaIcNc.cjs.map +0 -1
  743. package/dist/utils-DTa3QHxk.cjs.map +0 -1
  744. package/dist/utils-H8wNknWC.js.map +0 -1
  745. package/dist/window-C76zstbV.js.map +0 -1
  746. package/dist/window-CmB9XZzT.cjs +0 -58
  747. package/dist/window-CmB9XZzT.cjs.map +0 -1
  748. package/src/form/fields/date-range/date-range-presets.ts +0 -220
  749. package/src/form/fields/date-range/date-utils.ts +0 -58
  750. package/types/src/form/fields/date-range/date-range-presets.d.ts +0 -18
  751. package/types/src/form/fields/date-range/date-utils.d.ts +0 -15
  752. /package/dist/{hashContent-iRZJJWtE.cjs → hashContent--s09Ed_g.cjs} +0 -0
  753. /package/dist/{hashContent-BqU6v1Xr.js → hashContent-CAvrQ56N.js} +0 -0
  754. /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-4P2v57ke.cjs} +0 -0
  755. /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-JMFdgQSl.js} +0 -0
  756. /package/dist/{theme.interface-CSt7JUBD.cjs → theme.interface-B-qxDsZQ.cjs} +0 -0
  757. /package/dist/{theme.interface-odQEpZZH.js → theme.interface-B7caS5cg.js} +0 -0
  758. /package/dist/{utils-DTa3QHxk.cjs → utils-DIXndz6Q.cjs} +0 -0
  759. /package/dist/{utils-H8wNknWC.js → utils-dSPH7Oh9.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"autocomplete-Dq3BkitV.cjs","names":[],"sources":["../src/form/fields/autocomplete/autocomplete.scss?inline","../src/form/fields/autocomplete/autocomplete.ts"],"sourcesContent":[":host {\n\tdisplay: block;\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\n@keyframes onAutoFillStart {\n\tfrom {/**/}\n\tto {/**/}\n}\n\nsch-input::part(input):-webkit-autofill,\nsch-input input:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n\tanimation-duration: 1ms;\n}\n","import { SchmancyFormField } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html, nothing, unsafeCSS } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n timer\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n takeUntil,\n tap\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../../../utils/search'\n// Import chip component for multi-select display\nimport '../../../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n/**\n * Autocomplete input component with filtering and multi-select support.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} label - Label text displayed above the input\n * @prop {string} placeholder - Placeholder text for the input\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} multi - Enable multi-select mode\n * @prop {string} value - Selected value (single select mode)\n * @prop {string[]} values - Selected values (multi-select mode)\n */\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends SchmancyFormField(unsafeCSS(style)) {\n\n // `formAssociated`, `internals`, `attachInternals`, `name`, `label`,\n // `required`, `disabled`, `error`, `validationMessage`, `hint`, `id`,\n // `validateOn`, `touched/dirty/submitted`, `markTouched/markSubmitted`,\n // `setCustomValidity`, `formDisabledCallback`, FIELD_CONNECT_EVENT dispatch\n // — all from the mixin.\n\n /** Override mixin's resetForm with autocomplete-specific subject reset. */\n override resetForm(): void {\n if (this.multi) {\n this.selectedValues$.next([])\n } else {\n this.selectedValue$.next('')\n }\n this.inputValue = ''\n this.inputValue$.next('')\n super.resetForm()\n }\n\n // Track whether value/values have been explicitly set\n valueSet: boolean = false\n valuesSet: boolean = false\n\n // Autocomplete-specific properties only — `name`, `label`, `required`,\n // `error`, `validationMessage` come from the mixin.\n @property({ type: String }) placeholder = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n\n private readonly a11yId = `schmancy-autocomplete-${Math.random().toString(36).slice(2, 10)}`\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this.selectedValues$.value]\n }\n set values(vals: string[]) {\n this.valuesSet = true\n this.selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property — narrowed override of the mixin's wide value union.\n @property({ type: String, reflect: true })\n override get value(): string {\n return this.multi\n ? this.selectedValues$.value.join(',')\n : this.selectedValue$.value\n }\n override set value(val: string) {\n this.valueSet = true\n if (this.multi) {\n const newValues = val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n const currentValues = this.selectedValues$.value\n // Only update if values actually changed\n if (JSON.stringify(newValues) !== JSON.stringify(currentValues)) {\n this.selectedValues$.next(newValues)\n }\n } else {\n // Only update if value actually changed\n if (val !== this.selectedValue$.value) {\n this.selectedValue$.next(val)\n // Update the input display when value is set\n this.updateInputDisplay()\n }\n }\n }\n\n // State\n @state() private open = false\n @state() private inputValue = ''\n @state() private visibleOptionsCount = 0\n @state() private hasResults = true\n\n // DOM references\n @query('#options') listbox!: HTMLUListElement\n @query('sch-input') input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n private inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects - only what we actually need\n private selectedValue$ = new BehaviorSubject<string>('')\n private selectedValues$ = new BehaviorSubject<string[]>([])\n private inputValue$ = new BehaviorSubject<string>('')\n\n override connectedCallback() {\n // FIELD_CONNECT_EVENT is dispatched by the mixin's connectedCallback.\n super.connectedCallback()\n this.setupAutocompleteLogic()\n this.setupDocumentClickHandler()\n }\n\n private setupAutocompleteLogic() {\n // Sync selection state\n combineLatest([\n this.selectedValue$,\n this.selectedValues$\n ]).pipe(\n tap(([selectedValue, selectedValues]) => {\n this.updateOptionSelection(selectedValue, selectedValues)\n // Keep ElementInternals form value in sync with selection (single and multi).\n const formValue = this.multi ? selectedValues.join(',') : selectedValue\n this.internals?.setFormValue(formValue || null)\n if (this.required) {\n const missing = this.multi ? selectedValues.length === 0 : !selectedValue\n this.internals?.setValidity(\n missing ? { valueMissing: true } : {},\n missing ? this.validationMessage || 'Please select an option.' : undefined,\n )\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Filter options based on input\n this.inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n tap(searchTerm => {\n if (this.open) {\n this.filterOptions(searchTerm)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private setupOptionHandlers() {\n this.options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n // Idempotent: slotchange may fire repeatedly for the same option nodes,\n // and addEventListener doesn't replace prior handlers like onfoo= did.\n if (option.dataset.schmancyAutocompleteHandlers === 'attached') return\n option.dataset.schmancyAutocompleteHandlers = 'attached'\n\n // Prevent blur handler from interfering with option selection\n fromEvent<MouseEvent>(option, 'mousedown')\n .pipe(takeUntil(this.disconnecting))\n .subscribe(e => e.preventDefault())\n\n // Handle the actual selection\n fromEvent<MouseEvent>(option, 'click')\n .pipe(takeUntil(this.disconnecting))\n .subscribe(e => {\n e.stopPropagation()\n this.selectOption(option)\n })\n })\n }\n\n private updateOptionSelection(selectedValue: string, selectedValues: string[]) {\n this.options.forEach(option => {\n option.selected = this.multi\n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }\n\n private filterOptions(searchTerm: string) {\n const term = searchTerm.trim()\n\n if (!term) {\n // Show all options if no search term\n this.options.forEach(option => {\n option.hidden = false\n option.style.order = '0'\n })\n this.visibleOptionsCount = this.options.length\n this.hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = this.options.map(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n const score = Math.max(labelScore * 1.1, valueScore)\n\n return { option, score }\n })\n\n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n\n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n option.style.order = String(index)\n }\n })\n\n this.visibleOptionsCount = visibleCount\n this.hasResults = visibleCount > 0\n }\n\n this.announceToScreenReader(\n this.visibleOptionsCount > 0\n ? `${this.visibleOptionsCount} option${this.visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }\n\n private openDropdown() {\n this.open = true\n // Reset filters based on current input value when dropdown opens\n this.filterOptions(this.inputValue)\n }\n\n private selectOption(option: SchmancyOption) {\n if (this.multi) {\n const currentValues = this.selectedValues$.value\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? currentValues.filter(v => v !== option.value)\n : [...currentValues, option.value]\n\n this.selectedValues$.next(newValues)\n this.announceToScreenReader(\n newValues.length > 0\n ? `Selected: ${this.getSelectedLabels().join(', ')}`\n : 'No options selected'\n )\n this.fireChangeEvent()\n } else {\n // Update value first\n this.selectedValue$.next(option.value)\n\n // Close dropdown IMMEDIATELY to prevent blur handler from firing\n this.open = false\n\n // Now fire event with the NEW value\n this.fireChangeEvent()\n\n // Update UI\n this.inputValue = option.label || option.textContent || ''\n this.inputValue$.next(this.inputValue)\n\n this.announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }\n\n private setupDocumentClickHandler() {\n fromEvent<MouseEvent>(document, 'click')\n .pipe(takeUntil(this.disconnecting))\n .subscribe(e => {\n if (!this.open) return\n const path = e.composedPath()\n if (!path.includes(this) && !this.options.some(opt => path.includes(opt))) {\n this.open = false\n this.updateInputDisplay()\n }\n })\n }\n\n\n private updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) return\n\n const selectedValue = this.selectedValue$.value\n const option = this.options.find(opt => opt.value === selectedValue)\n this.inputValue = option ? option.label || option.textContent || '' : ''\n this.inputValue$.next(this.inputValue)\n\n if (this.inputElementRef.value) {\n this.inputElementRef.value.value = this.inputValue\n }\n }\n\n private getSelectedLabels(): string[] {\n return this.options\n .filter(option => \n this.multi \n ? this.selectedValues$.value.includes(option.value)\n : option.value === this.selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this.selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this.selectedValues$.value.length > 0 \n : Boolean(this.selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this.inputElementRef.value) {\n return this.inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n this.setupOptionHandlers()\n\n // Sync initial value with display after options are available\n this.updateInputDisplay()\n\n // Update options when slot changes\n const slot = this.shadowRoot?.querySelector('slot')\n slot?.addEventListener('slotchange', () => {\n this.setupOptionHandlers()\n this.updateOptionSelection(this.selectedValue$.value, this.selectedValues$.value)\n })\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this.selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this.selectedValues$.next(newValues)\n this.fireChangeEvent()\n this.announceToScreenReader(`Removed: ${this.getChipLabel(value)}`)\n }\n\n private getChipLabel(value: string): string {\n const option = this.options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private focusTextInput() {\n if (this.inputElementRef.value) {\n this.inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this.focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this.open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this.selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"shrink-0 my-0.5\"\n >\n ${this.getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this.inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .placeholder=${this.selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this.inputValue}\n .autocomplete=${this.autocomplete}\n aria-invalid=${this.error ? 'true' : 'false'}\n aria-required=${this.required ? 'true' : 'false'}\n aria-describedby=${this.error && this.validationMessage ? `${this.a11yId}-err` : nothing}\n aria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this.inputValue = value\n this.inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this.inputValue = ''\n this.inputValue$.next('')\n this.openDropdown()\n }}\n @keydown=${(e: KeyboardEvent) => {\n this.handleKeyDown(e)\n }}\n @blur=${() => {\n this.handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div id=\"${this.a11yId}-err\" class=\"mt-1 text-sm text-error-default\" role=\"alert\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this.inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this.inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this.open}\n aria-describedby=${ifDefined(this.description ? descriptionId : undefined)}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this.inputValue = value\n this.inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this.openDropdown()\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this.openDropdown()\n }}\n @keydown=${(e: KeyboardEvent) => {\n this.handleKeyDown(e)\n }}\n @blur=${() => {\n this.handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this.open}\n style=\"max-height: ${this.maxHeight}; display: ${this.open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this.setupOptionHandlers()\n }}\n >\n <slot></slot>\n ${!this.hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private handleAutoSelectOnBlur() {\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this.open || !this.inputValue.trim()) {\n return\n }\n \n const searchTerm = this.inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this.options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Silently update the selected value without firing change event\n this.selectedValue$.next(bestMatch.value)\n this.inputValue = bestMatch.label || bestMatch.textContent || ''\n this.inputValue$.next(this.inputValue)\n this.open = false\n }\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n const isOpen = this.open\n const selectedValues = this.selectedValues$.value\n\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this.inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this.openDropdown()\n\n timer(10)\n .pipe(takeUntil(this.disconnecting))\n .subscribe(() => {\n const firstVisible = this.options.find(opt => !opt.hidden)\n firstVisible?.focus()\n })\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = this.options.filter(opt => !opt.hidden)\n .toSorted((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n\n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this.open = false\n this.updateInputDisplay()\n this.inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this.open = false\n this.updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this.selectOption(focusedOption)\n }\n break\n }\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"autocomplete-UNOknYUz.js","names":[],"sources":["../src/form/fields/autocomplete/autocomplete.scss?inline","../src/form/fields/autocomplete/autocomplete.ts"],"sourcesContent":[":host {\n\tdisplay: block;\n\tborder: unset !important;\n\tline-height: unset !important;\n\tbackground: unset !important;\n\tpadding: unset !important;\n\tfont-size: unset !important;\n\tbox-shadow: unset !important;\n}\n\n:host:focus {\n\tbox-shadow: unset !important;\n}\n\n@keyframes onAutoFillStart {\n\tfrom {/**/}\n\tto {/**/}\n}\n\nsch-input::part(input):-webkit-autofill,\nsch-input input:-webkit-autofill {\n\tanimation-name: onAutoFillStart;\n\tanimation-duration: 1ms;\n}\n","import { SchmancyFormField } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html, nothing, unsafeCSS } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest,\n fromEvent,\n timer\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n takeUntil,\n tap\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../../../utils/search'\n// Import chip component for multi-select display\nimport '../../../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n/**\n * Autocomplete input component with filtering and multi-select support.\n *\n * @prop {string} name - Name attribute for form submission\n * @prop {string} label - Label text displayed above the input\n * @prop {string} placeholder - Placeholder text for the input\n * @prop {boolean} required - Whether the field is required\n * @prop {boolean} multi - Enable multi-select mode\n * @prop {string} value - Selected value (single select mode)\n * @prop {string[]} values - Selected values (multi-select mode)\n */\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends SchmancyFormField(unsafeCSS(style)) {\n\n // `formAssociated`, `internals`, `attachInternals`, `name`, `label`,\n // `required`, `disabled`, `error`, `validationMessage`, `hint`, `id`,\n // `validateOn`, `touched/dirty/submitted`, `markTouched/markSubmitted`,\n // `setCustomValidity`, `formDisabledCallback`, FIELD_CONNECT_EVENT dispatch\n // — all from the mixin.\n\n /** Override mixin's resetForm with autocomplete-specific subject reset. */\n override resetForm(): void {\n if (this.multi) {\n this.selectedValues$.next([])\n } else {\n this.selectedValue$.next('')\n }\n this.inputValue = ''\n this.inputValue$.next('')\n super.resetForm()\n }\n\n // Track whether value/values have been explicitly set\n valueSet: boolean = false\n valuesSet: boolean = false\n\n // Autocomplete-specific properties only — `name`, `label`, `required`,\n // `error`, `validationMessage` come from the mixin.\n @property({ type: String }) placeholder = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n\n private readonly a11yId = `schmancy-autocomplete-${Math.random().toString(36).slice(2, 10)}`\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this.selectedValues$.value]\n }\n set values(vals: string[]) {\n this.valuesSet = true\n this.selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property — narrowed override of the mixin's wide value union.\n @property({ type: String, reflect: true })\n override get value(): string {\n return this.multi\n ? this.selectedValues$.value.join(',')\n : this.selectedValue$.value\n }\n override set value(val: string) {\n this.valueSet = true\n if (this.multi) {\n const newValues = val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n const currentValues = this.selectedValues$.value\n // Only update if values actually changed\n if (JSON.stringify(newValues) !== JSON.stringify(currentValues)) {\n this.selectedValues$.next(newValues)\n }\n } else {\n // Only update if value actually changed\n if (val !== this.selectedValue$.value) {\n this.selectedValue$.next(val)\n // Update the input display when value is set\n this.updateInputDisplay()\n }\n }\n }\n\n // State\n @state() private open = false\n @state() private inputValue = ''\n @state() private visibleOptionsCount = 0\n @state() private hasResults = true\n\n // DOM references\n @query('#options') listbox!: HTMLUListElement\n @query('sch-input') input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n private inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects - only what we actually need\n private selectedValue$ = new BehaviorSubject<string>('')\n private selectedValues$ = new BehaviorSubject<string[]>([])\n private inputValue$ = new BehaviorSubject<string>('')\n\n override connectedCallback() {\n // FIELD_CONNECT_EVENT is dispatched by the mixin's connectedCallback.\n super.connectedCallback()\n this.setupAutocompleteLogic()\n this.setupDocumentClickHandler()\n }\n\n private setupAutocompleteLogic() {\n // Sync selection state\n combineLatest([\n this.selectedValue$,\n this.selectedValues$\n ]).pipe(\n tap(([selectedValue, selectedValues]) => {\n this.updateOptionSelection(selectedValue, selectedValues)\n // Keep ElementInternals form value in sync with selection (single and multi).\n const formValue = this.multi ? selectedValues.join(',') : selectedValue\n this.internals?.setFormValue(formValue || null)\n if (this.required) {\n const missing = this.multi ? selectedValues.length === 0 : !selectedValue\n this.internals?.setValidity(\n missing ? { valueMissing: true } : {},\n missing ? this.validationMessage || 'Please select an option.' : undefined,\n )\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Filter options based on input\n this.inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n tap(searchTerm => {\n if (this.open) {\n this.filterOptions(searchTerm)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private setupOptionHandlers() {\n this.options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n // Idempotent: slotchange may fire repeatedly for the same option nodes,\n // and addEventListener doesn't replace prior handlers like onfoo= did.\n if (option.dataset.schmancyAutocompleteHandlers === 'attached') return\n option.dataset.schmancyAutocompleteHandlers = 'attached'\n\n // Prevent blur handler from interfering with option selection\n fromEvent<MouseEvent>(option, 'mousedown')\n .pipe(takeUntil(this.disconnecting))\n .subscribe(e => e.preventDefault())\n\n // Handle the actual selection\n fromEvent<MouseEvent>(option, 'click')\n .pipe(takeUntil(this.disconnecting))\n .subscribe(e => {\n e.stopPropagation()\n this.selectOption(option)\n })\n })\n }\n\n private updateOptionSelection(selectedValue: string, selectedValues: string[]) {\n this.options.forEach(option => {\n option.selected = this.multi\n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }\n\n private filterOptions(searchTerm: string) {\n const term = searchTerm.trim()\n\n if (!term) {\n // Show all options if no search term\n this.options.forEach(option => {\n option.hidden = false\n option.style.order = '0'\n })\n this.visibleOptionsCount = this.options.length\n this.hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = this.options.map(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n const score = Math.max(labelScore * 1.1, valueScore)\n\n return { option, score }\n })\n\n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n\n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n option.style.order = String(index)\n }\n })\n\n this.visibleOptionsCount = visibleCount\n this.hasResults = visibleCount > 0\n }\n\n this.announceToScreenReader(\n this.visibleOptionsCount > 0\n ? `${this.visibleOptionsCount} option${this.visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }\n\n private openDropdown() {\n this.open = true\n // Reset filters based on current input value when dropdown opens\n this.filterOptions(this.inputValue)\n }\n\n private selectOption(option: SchmancyOption) {\n if (this.multi) {\n const currentValues = this.selectedValues$.value\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? currentValues.filter(v => v !== option.value)\n : [...currentValues, option.value]\n\n this.selectedValues$.next(newValues)\n this.announceToScreenReader(\n newValues.length > 0\n ? `Selected: ${this.getSelectedLabels().join(', ')}`\n : 'No options selected'\n )\n this.fireChangeEvent()\n } else {\n // Update value first\n this.selectedValue$.next(option.value)\n\n // Close dropdown IMMEDIATELY to prevent blur handler from firing\n this.open = false\n\n // Now fire event with the NEW value\n this.fireChangeEvent()\n\n // Update UI\n this.inputValue = option.label || option.textContent || ''\n this.inputValue$.next(this.inputValue)\n\n this.announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }\n\n private setupDocumentClickHandler() {\n fromEvent<MouseEvent>(document, 'click')\n .pipe(takeUntil(this.disconnecting))\n .subscribe(e => {\n if (!this.open) return\n const path = e.composedPath()\n if (!path.includes(this) && !this.options.some(opt => path.includes(opt))) {\n this.open = false\n this.updateInputDisplay()\n }\n })\n }\n\n\n private updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) return\n\n const selectedValue = this.selectedValue$.value\n const option = this.options.find(opt => opt.value === selectedValue)\n this.inputValue = option ? option.label || option.textContent || '' : ''\n this.inputValue$.next(this.inputValue)\n\n if (this.inputElementRef.value) {\n this.inputElementRef.value.value = this.inputValue\n }\n }\n\n private getSelectedLabels(): string[] {\n return this.options\n .filter(option => \n this.multi \n ? this.selectedValues$.value.includes(option.value)\n : option.value === this.selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this.selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this.selectedValues$.value.length > 0 \n : Boolean(this.selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this.inputElementRef.value) {\n return this.inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n this.setupOptionHandlers()\n\n // Sync initial value with display after options are available\n this.updateInputDisplay()\n\n // Update options when slot changes\n const slot = this.shadowRoot?.querySelector('slot')\n slot?.addEventListener('slotchange', () => {\n this.setupOptionHandlers()\n this.updateOptionSelection(this.selectedValue$.value, this.selectedValues$.value)\n })\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this.selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this.selectedValues$.next(newValues)\n this.fireChangeEvent()\n this.announceToScreenReader(`Removed: ${this.getChipLabel(value)}`)\n }\n\n private getChipLabel(value: string): string {\n const option = this.options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private focusTextInput() {\n if (this.inputElementRef.value) {\n this.inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this.focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this.open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this.selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"shrink-0 my-0.5\"\n >\n ${this.getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this.inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .placeholder=${this.selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this.inputValue}\n .autocomplete=${this.autocomplete}\n aria-invalid=${this.error ? 'true' : 'false'}\n aria-required=${this.required ? 'true' : 'false'}\n aria-describedby=${this.error && this.validationMessage ? `${this.a11yId}-err` : nothing}\n aria-label=${!this.label && this.placeholder ? this.placeholder : nothing}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this.inputValue = value\n this.inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this.inputValue = ''\n this.inputValue$.next('')\n this.openDropdown()\n }}\n @keydown=${(e: KeyboardEvent) => {\n this.handleKeyDown(e)\n }}\n @blur=${() => {\n this.handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div id=\"${this.a11yId}-err\" class=\"mt-1 text-sm text-error-default\" role=\"alert\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this.inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-') || ''}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this.inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this.open}\n aria-describedby=${ifDefined(this.description ? descriptionId : undefined)}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this.inputValue = value\n this.inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this.openDropdown()\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this.openDropdown()\n }}\n @keydown=${(e: KeyboardEvent) => {\n this.handleKeyDown(e)\n }}\n @blur=${() => {\n this.handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this.open}\n style=\"max-height: ${this.maxHeight}; display: ${this.open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this.setupOptionHandlers()\n }}\n >\n <slot></slot>\n ${!this.hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private handleAutoSelectOnBlur() {\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this.open || !this.inputValue.trim()) {\n return\n }\n \n const searchTerm = this.inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this.options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Silently update the selected value without firing change event\n this.selectedValue$.next(bestMatch.value)\n this.inputValue = bestMatch.label || bestMatch.textContent || ''\n this.inputValue$.next(this.inputValue)\n this.open = false\n }\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n const isOpen = this.open\n const selectedValues = this.selectedValues$.value\n\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this.inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this.openDropdown()\n\n timer(10)\n .pipe(takeUntil(this.disconnecting))\n .subscribe(() => {\n const firstVisible = this.options.find(opt => !opt.hidden)\n firstVisible?.focus()\n })\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = this.options.filter(opt => !opt.hidden)\n .toSorted((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n\n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this.open = false\n this.updateInputDisplay()\n this.inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this.open = false\n this.updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this.selectOption(focusedOption)\n }\n break\n }\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}\n"],"mappings":";;;;;;;;;;;;;ICmDe,IAAA,cAAmC,EAAkB,EAAA,6fAAA,CAAA,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,WAAA,CAqB3C,GAAA,KAAA,YAAA,CACC,GAAA,KAAA,cAIoB,IAAA,KAAA,YACF,SAAA,KAAA,QAAA,CACH,GAAA,KAAA,cACK,IAAA,KAAA,OACmB,MAAA,KAAA,eAClB,OAAA,KAAA,aACF,KAAA,KAAA,sBACS,IAAA,KAAA,SAExB,yBAAyB,KAAK,OAAA,EAAS,SAAS,EAAA,EAAI,MAAM,GAAG,EAAA,KAAA,KAAA,OAAA,CAuC/D,GAAA,KAAA,aACM,IAAA,KAAA,sBACS,GAAA,KAAA,aAAA,CACT,GAAA,KAAA,kBAMJ,EAAA,GAAA,KAAA,iBAGD,IAAI,EAAwB,EAAA,GAAA,KAAA,kBAC3B,IAAI,EAA0B,CAAA,CAAA,GAAA,KAAA,cAClC,IAAI,EAAwB,EAAA;CAAA;CA/ElD,YAAA;EACQ,KAAK,QACL,KAAK,gBAAgB,KAAK,CAAA,CAAA,IAE1B,KAAK,eAAe,KAAK,EAAA,GAE7B,KAAK,aAAa,IAClB,KAAK,YAAY,KAAK,EAAA,GACtB,MAAM,UAAA;CACV;CAoBA,IAAA,SACI;EACA,OAAO,CAAA,GAAI,KAAK,gBAAgB,KAAA;CACpC;CACA,IAAA,OAAW,GAAA;EACP,KAAK,YAAA,CAAY,GACjB,KAAK,gBAAgB,KAAK,MAAM,QAAQ,CAAA,IAAQ,CAAA,GAAI,CAAA,IAAQ,CAAA,CAAA;CAChE;CAGA,IAAA,QACa;EACT,OAAO,KAAK,QACN,KAAK,gBAAgB,MAAM,KAAK,GAAA,IAChC,KAAK,eAAe;CAC9B;CACA,IAAA,MAAmB,GAAA;EAEf,IADA,KAAK,WAAA,CAAW,GACZ,KAAK,OAAO;GACZ,IAAM,IAAY,IAAM,EAAI,MAAM,GAAA,EAAK,KAAI,MAAK,EAAE,KAAA,CAAA,EAAQ,OAAO,OAAA,IAAW,CAAA,GACtE,IAAgB,KAAK,gBAAgB;GAEvC,KAAK,UAAU,CAAA,MAAe,KAAK,UAAU,CAAA,KAC7C,KAAK,gBAAgB,KAAK,CAAA;EAElC,OAEQ,MAAQ,KAAK,eAAe,UAC5B,KAAK,eAAe,KAAK,CAAA,GAEzB,KAAK,mBAAA;CAGjB;CAmBA,oBAAA;EAEI,MAAM,kBAAA,GACN,KAAK,uBAAA,GACL,KAAK,0BAAA;CACT;CAEA,yBAAA;EAEI,EAAc,CACV,KAAK,gBACL,KAAK,eAAA,CAAA,EACN,KACC,GAAA,CAAM,GAAe,OAAA;GACjB,KAAK,sBAAsB,GAAe,CAAA;GAE1C,IAAM,IAAY,KAAK,QAAQ,EAAe,KAAK,GAAA,IAAO;GAE1D,IADA,KAAK,WAAW,aAAa,KAAa,IAAA,GACtC,KAAK,UAAU;IACf,IAAM,IAAU,KAAK,QAAQ,EAAe,WAAW,IAAX,CAAgB;IAC5D,KAAK,WAAW,YACZ,IAAU,EAAE,cAAA,CAAc,EAAA,IAAS,CAAC,GACpC,IAAU,KAAK,qBAAqB,6BAAA,KAA6B,CAAA;GAEzE;EAAA,CAAA,GAEJ,EAAU,KAAK,aAAA,CAAA,EACjB,UAAA,GAGF,KAAK,YAAY,KACb,EAAA,GACA,EAAa,KAAK,UAAA,GAClB,GAAI,MAAA;GACI,KAAK,QACL,KAAK,cAAc,CAAA;EAAA,CAAA,GAG3B,EAAU,KAAK,aAAA,CAAA,EACjB,UAAA;CACN;CAEA,sBAAA;EACI,KAAK,QAAQ,SAAS,GAAQ,MAAA;GAC1B,EAAO,aAAa,QAAQ,QAAA,GAC5B,EAAO,WAAA,IACF,AACD,EAAO,OAAK,GAAG,KAAK,GAAA,UAAa,KAIjC,EAAO,QAAQ,iCAAiC,eACpD,EAAO,QAAQ,+BAA+B,YAG9C,EAAsB,GAAQ,WAAA,EACzB,KAAK,EAAU,KAAK,aAAA,CAAA,EACpB,WAAU,MAAK,EAAE,eAAA,CAAA,GAGtB,EAAsB,GAAQ,OAAA,EACzB,KAAK,EAAU,KAAK,aAAA,CAAA,EACpB,WAAU,MAAA;IACP,EAAE,gBAAA,GACF,KAAK,aAAa,CAAA;GAAA,CAAA;EAAA,CAAA;CAGlC;CAEA,sBAA8B,GAAuB,GAAA;EACjD,KAAK,QAAQ,SAAQ,MAAA;GACjB,EAAO,WAAW,KAAK,QACjB,EAAe,SAAS,EAAO,KAAA,IAC/B,EAAO,UAAU,GACvB,EAAO,aAAa,iBAAiB,OAAO,EAAO,QAAA,CAAA;EAAA,CAAA;CAE3D;CAEA,cAAsB,GAAA;EAClB,IAAM,IAAO,EAAW,KAAA;EAExB,IAAK,GAQE;GAEH,IAAM,IAAkC,KAAK,QAAQ,KAAI,MAAA;IACrD,IAAM,IAAc,EAAO,SAAS,EAAO,eAAe,IACpD,IAAc,EAAO,OAErB,IAAa,EAAW,GAAM,CAAA,GAC9B,IAAa,EAAW,GAAM,CAAA;IAGpC,OAAO;KAAE,QAAA;KAAQ,OAFH,KAAK,IAAiB,MAAb,GAAkB,CAAA;IAAA;GAAA,CAAA;GAM7C,EAAc,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAA;GAGzC,IAAI,IAAe;GACnB,EAAc,SAAS,GAAM,MAAA;IACzB,IAAA,EAAM,QAAE,GAAA,OAAQ,MAAU;IAEtB,IAAQ,KAAK,sBACb,EAAO,SAAA,CAAS,KAEhB,EAAO,SAAA,CAAS,GAChB,KACA,EAAO,MAAM,QAAQ,OAAO,CAAA;GAAA,CAAA,GAIpC,KAAK,sBAAsB,GAC3B,KAAK,aAAa,IAAe;EACrC,OAtCI,KAAK,QAAQ,SAAQ,MAAA;GACjB,EAAO,SAAA,CAAS,GAChB,EAAO,MAAM,QAAQ;EAAA,CAAA,GAEzB,KAAK,sBAAsB,KAAK,QAAQ,QACxC,KAAK,aAAA,CAAa;EAmCtB,KAAK,uBACD,KAAK,sBAAsB,IACrB,GAAG,KAAK,oBAAA,SAA6B,KAAK,wBAAwB,IAAI,KAAK,IAAA,eAC3E,mBAAA;CAEd;CAEA,eAAA;EACI,KAAK,OAAA,CAAO,GAEZ,KAAK,cAAc,KAAK,UAAA;CAC5B;CAEA,aAAqB,GAAA;EACjB,IAAI,KAAK,OAAO;GACZ,IAAM,IAAgB,KAAK,gBAAgB,OAErC,IADQ,EAAc,QAAQ,EAAO,KAAA,IAAA,KAErC,EAAc,QAAO,MAAK,MAAM,EAAO,KAAA,IACvC,CAAA,GAAI,GAAe,EAAO,KAAA;GAEhC,KAAK,gBAAgB,KAAK,CAAA,GAC1B,KAAK,uBACD,EAAU,SAAS,IACb,aAAa,KAAK,kBAAA,EAAoB,KAAK,IAAA,MAC3C,qBAAA,GAEV,KAAK,gBAAA;EACT,OAEI,KAAK,eAAe,KAAK,EAAO,KAAA,GAGhC,KAAK,OAAA,CAAO,GAGZ,KAAK,gBAAA,GAGL,KAAK,aAAa,EAAO,SAAS,EAAO,eAAe,IACxD,KAAK,YAAY,KAAK,KAAK,UAAA,GAE3B,KAAK,uBAAuB,aAAa,EAAO,SAAS,EAAO,aAAA;CAExE;CAEA,4BAAA;EACI,EAAsB,UAAU,OAAA,EAC3B,KAAK,EAAU,KAAK,aAAA,CAAA,EACpB,WAAU,MAAA;GACP,IAAA,CAAK,KAAK,MAAM;GAChB,IAAM,IAAO,EAAE,aAAA;GACV,EAAK,SAAS,IAAA,KAAU,KAAK,QAAQ,MAAK,MAAO,EAAK,SAAS,CAAA,CAAA,MAChE,KAAK,OAAA,CAAO,GACZ,KAAK,mBAAA;EAAA,CAAA;CAGrB;CAGA,qBAAA;EAEI,IAAI,KAAK,OAAO;EAEhB,IAAM,IAAgB,KAAK,eAAe,OACpC,IAAS,KAAK,QAAQ,MAAK,MAAO,EAAI,UAAU,CAAA;EACtD,KAAK,aAAa,MAAS,EAAO,SAAS,EAAO,gBAAoB,IACtE,KAAK,YAAY,KAAK,KAAK,UAAA,GAEvB,KAAK,gBAAgB,UACrB,KAAK,gBAAgB,MAAM,QAAQ,KAAK;CAEhD;CAEA,oBAAA;EACI,OAAO,KAAK,QACP,QAAO,MACJ,KAAK,QACC,KAAK,gBAAgB,MAAM,SAAS,EAAO,KAAA,IAC3C,EAAO,UAAU,KAAK,eAAe,KAAA,EAE9C,KAAI,MAAU,EAAO,SAAS,EAAO,eAAe,EAAA;CAC7D;CAEA,uBAA+B,GAAA;EAC3B,IAAM,IAAa,KAAK,YAAY,cAAc,cAAA;EAC9C,MACA,EAAW,cAAc;CAEjC;CAEA,kBAAA;EACI,IAAM,IAAoD,EACtD,OAAO,KAAK,MAAA;EAGZ,KAAK,UACL,EAAO,SAAS,CAAA,GAAI,KAAK,gBAAgB,KAAA,IAG7C,KAAK,cACD,IAAI,YAAuD,UAAU;GACjE,QAAA;GACA,SAAA,CAAS;GACT,UAAA,CAAU;EAAA,CAAA,CAAA;CAGtB;CAEA,gBAAA;EACI,OAAA,CAAK,KAAK,aACH,KAAK,QACN,KAAK,gBAAgB,MAAM,SAAS,IACpC,EAAQ,KAAK,eAAe;CACtC;CAEA,iBAAA;EACI,OAAI,KAAK,gBAAgB,QACd,KAAK,gBAAgB,MAAM,eAAA,IAE/B,KAAK,cAAA;CAChB;CAEA,eAAA;EACI,KAAK,oBAAA,GAGL,KAAK,mBAAA,IAGQ,KAAK,YAAY,cAAc,MAAA,IACtC,iBAAiB,oBAAA;GACnB,KAAK,oBAAA,GACL,KAAK,sBAAsB,KAAK,eAAe,OAAO,KAAK,gBAAgB,KAAA;EAAA,CAAA;CAEnF;CAEA,iBAAyB,GAAA;EAErB,IAAM,IADgB,KAAK,gBAAgB,MACX,QAAO,MAAK,MAAM,CAAA;EAClD,KAAK,gBAAgB,KAAK,CAAA,GAC1B,KAAK,gBAAA,GACL,KAAK,uBAAuB,YAAY,KAAK,aAAa,CAAA,GAAA;CAC9D;CAEA,aAAqB,GAAA;EACjB,IAAM,IAAS,KAAK,QAAQ,MAAK,MAAO,EAAI,UAAU,CAAA;EACtD,OAAO,MAAS,EAAO,SAAS,EAAO,gBAAuB;CAClE;CAEA,iBAAA;EACQ,KAAK,gBAAgB,SACrB,KAAK,gBAAgB,MAAM,MAAA;CAEnC;CAEA,SAAA;EACI,IAAM,IAAgB,GAAG,KAAK,GAAA,QAAA,EA8BxB,QAAE,GAAA,SAAQ,GAAA,UAAS,GAAA,WAAU,aA3B7B;GACF,QAAQ,KAAK,MAAb;IACI,KAAK,MACD,OAAO;KACH,QAAQ;KACR,SAAS;KACT,UAAU;KACV,WAAW;IAAA;IAEnB,KAAK,MACD,OAAO;KACH,QAAQ;KACR,SAAS;KACT,UAAU;KACV,WAAW;IAAA;IAGnB,SACI,OAAO;KACH,QAAQ;KACR,SAAS;KACT,UAAU;KACV,WAAW;IAAA;GAAA;EAAA,GAKsB;EAEjD,OAAO,CAAI;;;;;;kBAMD,KAAK,cAAc,CAAI,YAAY,EAAA,oBAAkC,KAAK,YAAA,UAAsB,GAAA;;;;sBAI5F,EAAK,KAAK,aACF,CAAI;;;kCAGA,EAAK,KAAK,aAAa,CAAI;oDACT,EAAS;GACrB,0BAAA,CAA0B;GAC1B,wBAAA,CAAyB,KAAK;GAC9B,sBAAsB,KAAK;IAC1B,IAAA,CAAY;EAAA,CAAA,EAAA;0CAEX,KAAK,QAAQ,KAAK,WAAW,CAAI,mDAAmD,GAAA;;;;6CAIjF,EAAS;GACd,qCAAA,CAAqC;IACpC,IAAA,CAAS;IACT,IAAA,CAAU;GACX,+CAAA,CAA+C;GAC/C,sCAAA,CAAsC;GACtC,iEAAA,CAAiE;GACjE,+DAAA,CAAgE,KAAK;GACrE,sDAAsD,KAAK;GAC3D,8CAAA,CAA8C;EAAA,CAAA,EAAA;mDAEnC,KAAK,eAAA,EAAA;;;;;oDAKJ,KAAK,KAAA;;;sCAGnB,EACE,KAAK,gBAAgB,QACrB,MAAS,IACT,MAAS,CAAI;;yDAEI,EAAA;2DACE,MAAmB,KAAK,iBAAiB,EAAE,OAAO,KAAA,EAAA;;;kDAG3D,KAAK,aAAa,CAAA,EAAA;;;;;;0CAO1B,EAAI,KAAK,eAAA,EAAA;;;mHAGgE,EAAA;+CACpE,KAAK,QAAQ,KAAK,OAAO,YAAA,EAAc,QAAQ,QAAQ,GAAA,KAAQ,GAAA;uDACvD,KAAK,gBAAgB,MAAM,SAAS,IAAI,gBAAgB,KAAK,YAAA;iDACnE,KAAK,WAAA;wDACE,KAAK,aAAA;uDACN,KAAK,QAAQ,SAAS,QAAA;wDACrB,KAAK,WAAW,SAAS,QAAA;2DACtB,KAAK,SAAS,KAAK,oBAAoB,GAAG,KAAK,OAAA,QAAe,EAAA;sDACnE,KAAK,SAAS,KAAK,cAAc,KAAK,cAAc,EAAA;kDACxD,MAAA;GACN,IAAM,IAAS,EAAE,OAA4B;GAC7C,KAAK,aAAa,GAClB,KAAK,YAAY,KAAK,CAAA;EAAA,EAAA;kDAEhB,MAAA;GACN,EAAE,gBAAA,GAEF,KAAK,aAAa,IAClB,KAAK,YAAY,KAAK,EAAA,GACtB,KAAK,aAAA;EAAA,EAAA;oDAEG,MAAA;GACR,KAAK,cAAc,CAAA;EAAA,EAAA;;GAGnB,KAAK,uBAAA;EAAA,EAAA;;;;;kCAMf,EAAK,KAAK,SAAS,KAAK,yBAAyB,CAAI;+CACxC,KAAK,OAAA;0CACV,KAAK,kBAAA;;;;iCAKjB,CAAI;;;wCAGM,KAAK,KAAA;kCACX,EAAI,KAAK,eAAA,EAAA;;;wCAGH,KAAK,QAAQ,KAAK,OAAO,YAAA,EAAc,QAAQ,QAAQ,GAAA,KAAQ,GAAA;yCAC9D,KAAK,MAAA;+CACC,KAAK,YAAA;4CACR,KAAK,SAAA;yCACR,KAAK,WAAA;;+CAEC,KAAK,aAAA;;;;;;gDAMJ,KAAK,KAAA;mDACF,EAAU,KAAK,cAAc,IAAA,KAAgB,CAAA,EAAA;0CACtD,MAAA;GACN,IAAM,IAAS,EAAE,OAA4B;GAC7C,KAAK,aAAa,GAClB,KAAK,YAAY,KAAK,CAAA;EAAA,EAAA;0CAEhB,MAAA;GACN,EAAE,gBAAA,GACF,KAAK,aAAA;EAAA,EAAA;0CAEC,MAAA;GACN,EAAE,gBAAA,GACF,KAAK,aAAA;EAAA,EAAA;4CAEG,MAAA;GACR,KAAK,cAAc,CAAA;EAAA,EAAA;;GAGnB,KAAK,uBAAA;EAAA,EAAA;;;;;;;;;4BAWb,EAAS;GACb,UAAA,CAAY;GACZ,YAAA,CAAY;GACZ,QAAA,CAAQ;GACR,UAAA,CAAU;GACV,cAAA,CAAc;GACd,aAAA,CAAa;GACb,iBAAA,CAAiB;GACjB,cAAA,CAAc;GACd,kBAAA,CAAkB;GAClB,MAAA,CAAQ;GACR,YAAA,CAAY;EAAA,CAAA,EAAA;;2CAGO,KAAK,QAAQ,SAAS,QAAA;iCAChC,GAAG,KAAK,SAAS,UAAA,WAAA;+BACnB,KAAK,KAAA;yCACK,KAAK,UAAA,aAAuB,KAAK,OAAO,SAAS,OAAA;;GAElE,KAAK,oBAAA;EAAA,EAAA;;;sBAIN,KAAK,aAEJ,KAFiB,CAAI;;;;;;CAMzC;CAEA,yBAAA;EAEI,IAAI,KAAK,SAAA,CAAU,KAAK,QAAA,CAAS,KAAK,WAAW,KAAA,GAC7C;EAGJ,IAAM,IAAa,KAAK,WAAW,KAAA,GAG/B,IAAmC,MACnC,IAAY;EAEhB,KAAK,QAAQ,SAAQ,MAAA;GAEjB,IAAI,EAAO,QAAQ;GAGnB,IAAM,IAAc,EAAO,SAAS,EAAO,eAAe,IACpD,IAAc,EAAO,OAGrB,IAAa,EAAW,GAAY,CAAA,GACpC,IAAa,EAAW,GAAY,CAAA,GAGpC,IAAQ,KAAK,IAAiB,MAAb,GAAkB,CAAA;GAGrC,IAAQ,KAAa,KAAS,KAAK,wBACnC,IAAY,GACZ,IAAY;EAAA,CAAA,GAKhB,MAEA,KAAK,eAAe,KAAK,EAAU,KAAA,GACnC,KAAK,aAAa,EAAU,SAAS,EAAU,eAAe,IAC9D,KAAK,YAAY,KAAK,KAAK,UAAA,GAC3B,KAAK,OAAA,CAAO;CAEpB;CAEA,cAAsB,GAAA;EAClB,IAAM,IAAS,KAAK,MACd,IAAiB,KAAK,gBAAgB;EAG5C,IAAI,KAAK,SAAS,EAAM,QAAQ,eAAR,CAAwB,KAAK,cAAc,EAAe,SAAS,KAAA,CAAM,GAAQ;GACrG,EAAM,eAAA;GACN,IAAM,IAAY,EAAe,EAAe,SAAS;GAEzD,AADA,KAAK,iBAAiB,CAAA;GACtB;EACJ;EAEA,IAAA,CAAK,MAAW,EAAM,QAAQ,eAAe,EAAM,QAAQ,UAUvD,OATA,EAAM,eAAA,GACN,KAAK,aAAA,GAAA,KAEL,EAAM,EAAA,EACD,KAAK,EAAU,KAAK,aAAA,CAAA,EACpB,gBAAA;GAEG,KAD0B,QAAQ,MAAK,MAAA,CAAQ,EAAI,MAAA,GACrC,MAAA;EAAA,CAAA;EAK1B,IAAA,CAAK,GAAQ;EAEb,IAAM,IAAiB,KAAK,QAAQ,QAAO,MAAA,CAAQ,EAAI,MAAA,EAClD,UAAU,GAAG,MAAM,SAAS,EAAE,MAAM,SAAS,GAAA,IAAO,SAAS,EAAE,MAAM,SAAS,GAAA,CAAA,GAE7E,IAAgB,EAAe,MAAK,MAAO,MAAQ,SAAS,aAAA,GAC5D,IAAe,IAAgB,EAAe,QAAQ,CAAA,IAAA;EAE5D,QAAQ,EAAM,KAAd;GACI,KAAK;IACD,EAAM,eAAA,GACN,KAAK,OAAA,CAAO,GACZ,KAAK,mBAAA,GACL,KAAK,gBAAgB,OAAO,MAAA;IAC5B;GAEJ,KAAK;IACD,KAAK,OAAA,CAAO,GACZ,KAAK,mBAAA;IACL;GAEJ,KAAK;IACD,EAAM,eAAA,GAEN,EADkB,IAAe,EAAe,SAAS,IAAI,IAAe,IAAI,IACrD,MAAA;IAC3B;GAEJ,KAAK;IACD,EAAM,eAAA,GAEN,EADkB,IAAe,IAAI,IAAe,IAAI,EAAe,SAAS,IACrD,MAAA;IAC3B;GAEJ,KAAK;IACD,EAAM,eAAA,GACN,EAAe,IAAI,MAAA;IACnB;GAEJ,KAAK;IACD,EAAM,eAAA,GACN,EAAe,EAAe,SAAS,IAAI,MAAA;IAC3C;GAEJ,KAAK;GACL,KAAK,KACG,MACA,EAAM,eAAA,GACN,KAAK,aAAa,CAAA;EAAA;CAIlC;AAAA;AAAA,EAAA,CArqBC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,eAAA,KAAA,CAAA,GAAA,EAAA,CACzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,aAAA,KAAA,CAAA,GAAA,EAAA,CACzB,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,eAAA,KAAA,CAAA,GAAA,EAAA,CACzB,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CACxC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,gBAAA,KAAA,CAAA,GAAA,EAAA,CACzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,cAAA,KAAA,CAAA,GAAA,EAAA,CACzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,uBAAA,KAAA,CAAA,GAAA,EAAA,CAKzB,EAAS,EAAE,MAAM,MAAA,CAAA,CAAA,GAAO,EAAA,WAAA,UAAA,IAAA,GAAA,EAAA,CAUxB,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,SAAA,IAAA,GAAA,EAAA,CA0BxC,EAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CACN,EAAA,CAAA,GAAM,EAAA,WAAA,cAAA,KAAA,CAAA,GAAA,EAAA,CACN,EAAA,CAAA,GAAM,EAAA,WAAA,uBAAA,KAAA,CAAA,GAAA,EAAA,CACN,EAAA,CAAA,GAAM,EAAA,WAAA,cAAA,KAAA,CAAA,GAAA,EAAA,CAGN,EAAM,UAAA,CAAA,GAAU,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,EAAA,CAChB,EAAM,WAAA,CAAA,GAAW,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,EAAA,CACjB,EAAsB,EAAE,SAAA,CAAS,EAAA,CAAA,CAAA,GAAM,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CAnF3C,EAAc,uBAAA,CAAA,GAAuB,CAAA"}
@@ -1,134 +0,0 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-PS1u0j1B.cjs`);require(`./mixins-BoMURWag.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);var r=class extends e.t{static{this.styles=[n.css`
2
- :host {
3
- display: inline;
4
- position: absolute;
5
- inset: 0;
6
- pointer-events: all;
7
- z-index: 50;
8
- }
9
- `]}render(){return n.html`
10
- <!-- Clean overlay with subtle backdrop -->
11
- <div class="absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]">
12
- <!-- Content container with clean surface -->
13
- <div class="relative flex items-center justify-center p-4">
14
-
15
- <!-- Content slot -->
16
- <div class="relative z-10">
17
- <slot>
18
- <!-- Default spinner if no content provided -->
19
- <schmancy-spinner ></schmancy-spinner>
20
- </slot>
21
- </div>
22
- </div>
23
- </div>
24
- `}};r=e.u([(0,t.customElement)(`schmancy-busy`)],r);var i=class extends e.t{constructor(...e){super(...e),this.size=`md`,this.glass=!1}static{this.styles=[n.css`
25
- :host {
26
- display: inline-block;
27
- color: inherit; /* Inherit from parent by default */
28
- }
29
-
30
- /* Explicit color options when needed */
31
- :host([color="primary"]) {
32
- color: var(--schmancy-sys-color-primary-default);
33
- }
34
-
35
- :host([color="on-primary"]) {
36
- color: var(--schmancy-sys-color-primary-on);
37
- }
38
-
39
- :host([color="secondary"]) {
40
- color: var(--schmancy-sys-color-secondary-default);
41
- }
42
-
43
- :host([color="on-secondary"]) {
44
- color: var(--schmancy-sys-color-secondary-on);
45
- }
46
-
47
- :host([color="tertiary"]) {
48
- color: var(--schmancy-sys-color-tertiary-default);
49
- }
50
-
51
- :host([color="on-tertiary"]) {
52
- color: var(--schmancy-sys-color-tertiary-on);
53
- }
54
-
55
- :host([color="error"]) {
56
- color: var(--schmancy-sys-color-error-default);
57
- }
58
-
59
- :host([color="on-error"]) {
60
- color: var(--schmancy-sys-color-error-on);
61
- }
62
-
63
- :host([color="success"]) {
64
- color: var(--schmancy-sys-color-success-default);
65
- }
66
-
67
- :host([color="on-success"]) {
68
- color: var(--schmancy-sys-color-success-on);
69
- }
70
-
71
- :host([color="surface"]) {
72
- color: var(--schmancy-sys-color-surface-default);
73
- }
74
-
75
- :host([color="on-surface"]) {
76
- color: var(--schmancy-sys-color-surface-on);
77
- }
78
-
79
- :host([color="surface-variant"]) {
80
- color: var(--schmancy-sys-color-surface-variant-default);
81
- }
82
-
83
- :host([color="on-surface-variant"]) {
84
- color: var(--schmancy-sys-color-surface-onVariant);
85
- }
86
-
87
- .spinner {
88
- animation: spin 1s linear infinite;
89
- animation-direction: reverse;
90
- }
91
-
92
- @keyframes spin {
93
- from {
94
- transform: rotate(0deg);
95
- }
96
- to {
97
- transform: rotate(360deg);
98
- }
99
- }
100
- `]}render(){let e={xxs:12,xs:16,sm:20,md:24,lg:32},t;t=typeof this.size==`string`&&this.size in e?e[this.size]:typeof this.size!=`number`||isNaN(this.size)?24:4*this.size;let r={width:`${t}px`,height:`${t}px`};return this.glass?n.html`
101
- <div class="spinner relative" style=${this.styleMap(r)}>
102
- <!-- Glass container with Apple-style effect -->
103
- <div class="absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150
104
- bg-surface-container/20
105
- shadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]
106
- border border-outline-variant/30"></div>
107
-
108
- <!-- Spinner SVG -->
109
- <svg fill="none" viewBox="0 0 16 16" aria-hidden="true" role="img"
110
- style="width: 100%; height: 100%;" class="relative z-10">
111
- <path
112
- opacity=".7"
113
- d="M8 15A7 7 0 108 1a7 7 0 000 14v0z"
114
- stroke="currentColor"
115
- stroke-width="2"
116
- ></path>
117
- <path d="M15 8a7 7 0 01-7 7" stroke="currentColor" stroke-width="2"></path>
118
- <path d="M8 12a4 4 0 100-8 4 4 0 000 8z" fill="currentColor" opacity="0.8"></path>
119
- </svg>
120
- </div>
121
- `:n.html`
122
- <div class="spinner" style=${this.styleMap(r)}>
123
- <svg fill="none" viewBox="0 0 16 16" aria-hidden="true" role="img" style="width: 100%; height: 100%;">
124
- <path
125
- opacity=".5"
126
- d="M8 15A7 7 0 108 1a7 7 0 000 14v0z"
127
- stroke="currentColor"
128
- stroke-width="2"
129
- ></path>
130
- <path d="M15 8a7 7 0 01-7 7" stroke="currentColor" stroke-width="2"></path>
131
- <path d="M8 12a4 4 0 100-8 4 4 0 000 8z" fill="currentColor"></path>
132
- </svg>
133
- </div>
134
- `}};e.u([(0,t.property)({type:String,reflect:!0})],i.prototype,`color`,void 0),e.u([(0,t.property)()],i.prototype,`size`,void 0),e.u([(0,t.property)({type:Boolean})],i.prototype,`glass`,void 0),i=e.u([(0,t.customElement)(`schmancy-spinner`)],i);
@@ -1 +0,0 @@
1
- {"version":3,"file":"busy--WqiXKnl.cjs","names":[],"sources":["../src/busy/busy.ts","../src/busy/spinner.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-busy')\nexport default class SchmancyBusy extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline;\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: all;\n\t\tz-index: 50;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<!-- Clean overlay with subtle backdrop -->\n\t\t\t<div class=\"absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]\">\n\t\t\t\t<!-- Content container with clean surface -->\n\t\t\t\t<div class=\"relative flex items-center justify-center p-4\">\n\t\t\t\t\t\n\t\t\t\t\t<!-- Content slot -->\n\t\t\t\t\t<div class=\"relative z-10\">\n\t\t\t\t\t\t<slot>\n\t\t\t\t\t\t\t<!-- Default spinner if no content provided -->\n\t\t\t\t\t\t\t<schmancy-spinner ></schmancy-spinner>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-busy': SchmancyBusy\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-spinner')\nexport default class SchmnacySpinner extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\tcolor: inherit; /* Inherit from parent by default */\n\t}\n\n\t/* Explicit color options when needed */\n\t:host([color=\"primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-default);\n\t}\n\n\t:host([color=\"on-primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t}\n\n\t:host([color=\"secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-default);\n\t}\n\n\t:host([color=\"on-secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-on);\n\t}\n\n\t:host([color=\"tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-default);\n\t}\n\n\t:host([color=\"on-tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-on);\n\t}\n\n\t:host([color=\"error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-default);\n\t}\n\n\t:host([color=\"on-error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-on);\n\t}\n\n\t:host([color=\"success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-default);\n\t}\n\n\t:host([color=\"on-success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-on);\n\t}\n\n\t:host([color=\"surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-default);\n\t}\n\n\t:host([color=\"on-surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t}\n\n\t:host([color=\"surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-variant-default);\n\t}\n\n\t:host([color=\"on-surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t}\n\n\t.spinner {\n\t\tanimation: spin 1s linear infinite;\n\t\tanimation-direction: reverse;\n\t}\n\n\t@keyframes spin {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tcolor?: 'primary' | 'on-primary' | 'secondary' | 'on-secondary' |\n\t 'tertiary' | 'on-tertiary' | 'error' | 'on-error' |\n\t 'success' | 'on-success' | 'surface' | 'on-surface' |\n\t 'surface-variant' | 'on-surface-variant'\n\n\t/**\n\t * Size of the spinner - M3 aligned tokens or numeric Tailwind units\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Numeric: Tailwind units where each unit = 4px (e.g., 6 = 24px)\n\t */\n\t@property() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number = 'md'\n\t@property({ type: Boolean }) glass: boolean = false\n\n\tprotected render(): unknown {\n\t\t// M3 aligned token sizes (fit inside buttons of same token)\n\t\tconst tokenSizes: Record<string, number> = {\n\t\t\txxs: 12, // fits in 24px button (ultra-compact)\n\t\t\txs: 16, // fits in 32px button\n\t\t\tsm: 20, // fits in 40px button\n\t\t\tmd: 24, // fits in 48px button (default)\n\t\t\tlg: 32, // fits in 56px button\n\t\t}\n\n\t\t// Support both token and numeric sizes for backward compatibility\n\t\tlet sizeInPx: number\n\t\tif (typeof this.size === 'string' && this.size in tokenSizes) {\n\t\t\tsizeInPx = tokenSizes[this.size]\n\t\t} else if (typeof this.size === 'number' && !isNaN(this.size)) {\n\t\t\t// Legacy numeric: Tailwind units (each unit = 4px)\n\t\t\tsizeInPx = this.size * 4\n\t\t} else {\n\t\t\tsizeInPx = 24 // fallback to md\n\t\t}\n\n\t\tconst style = {\n\t\t\twidth: `${sizeInPx}px`,\n\t\t\theight: `${sizeInPx}px`,\n\t\t}\n\t\t\n\t\treturn this.glass ? html`\n\t\t\t<div class=\"spinner relative\" style=${this.styleMap(style)}>\n\t\t\t\t<!-- Glass container with Apple-style effect -->\n\t\t\t\t<div class=\"absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150\n\t\t\t\t\t\t\tbg-surface-container/20\n\t\t\t\t\t\t\tshadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]\n\t\t\t\t\t\t\tborder border-outline-variant/30\"></div>\n\t\t\t\t\n\t\t\t\t<!-- Spinner SVG -->\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" \n\t\t\t\t\t style=\"width: 100%; height: 100%;\" class=\"relative z-10\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".7\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\" opacity=\"0.8\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t` : html`\n\t\t\t<div class=\"spinner\" style=${this.styleMap(style)}>\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" style=\"width: 100%; height: 100%;\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".5\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-spinner': SchmnacySpinner\n\t}\n}\n"],"mappings":"uKAKe,IAAA,EAAA,cAA2B,EAAA,CAAA,CAAA,OAAA,KAAA,OACzB,CAAC,EAAA,GAAG;;;;;;;;GASpB,QAAA,CACC,MAAO,GAAA,IAAI;;;;;;;;;;;;;;;GAgBZ,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA5Bc,eAAA,CAAA,EAAe,CAAA,ECCf,IAAA,EAAA,cAA8B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KAyFmB,KAAA,KAAA,MAAA,CACjB,CAAA,CAAA,OAAA,KAAA,OAzF9B,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FpB,QAAA,CAEC,IAAM,EAAqC,CAC1C,IAAK,GACL,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EAAA,EAID,EAEH,EADwB,OAAd,KAAK,MAAS,UAAY,KAAK,QAAQ,EACtC,EAAW,KAAK,MACI,OAAd,KAAK,MAAS,UAAa,MAAM,KAAK,IAAA,EAI5C,GAFY,EAAZ,KAAK,KAKjB,IAAM,EAAQ,CACb,MAAO,GAAG,EAAA,IACV,OAAQ,GAAG,EAAA,GAAA,EAGZ,OAAO,KAAK,MAAQ,EAAA,IAAI;yCACe,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;;;;;;;;IAoBjD,EAAA,IAAI;gCACsB,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;GAa7C,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UA3EU,CAAE,KAAM,OAAQ,QAAA,CAAS,CAAA,CAAA,CAAA,EAAM,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAW/B,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACA,CAAE,KAAM,OAAA,CAAA,CAAA,EAAS,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eA3Fb,kBAAA,CAAA,EAAkB,CAAA"}
@@ -1,173 +0,0 @@
1
- import { t as e, u as t } from "./SchmancyElement-OG71FtNv.js";
2
- import "./mixins-bCEXbwJV.js";
3
- import { customElement as n, property as r } from "lit/decorators.js";
4
- import { css as i, html as a } from "lit";
5
- var o = class extends e {
6
- static {
7
- this.styles = [i`
8
- :host {
9
- display: inline;
10
- position: absolute;
11
- inset: 0;
12
- pointer-events: all;
13
- z-index: 50;
14
- }
15
- `];
16
- }
17
- render() {
18
- return a`
19
- <!-- Clean overlay with subtle backdrop -->
20
- <div class="absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]">
21
- <!-- Content container with clean surface -->
22
- <div class="relative flex items-center justify-center p-4">
23
-
24
- <!-- Content slot -->
25
- <div class="relative z-10">
26
- <slot>
27
- <!-- Default spinner if no content provided -->
28
- <schmancy-spinner ></schmancy-spinner>
29
- </slot>
30
- </div>
31
- </div>
32
- </div>
33
- `;
34
- }
35
- };
36
- o = t([n("schmancy-busy")], o);
37
- var s = class extends e {
38
- constructor(...e) {
39
- super(...e), this.size = "md", this.glass = !1;
40
- }
41
- static {
42
- this.styles = [i`
43
- :host {
44
- display: inline-block;
45
- color: inherit; /* Inherit from parent by default */
46
- }
47
-
48
- /* Explicit color options when needed */
49
- :host([color="primary"]) {
50
- color: var(--schmancy-sys-color-primary-default);
51
- }
52
-
53
- :host([color="on-primary"]) {
54
- color: var(--schmancy-sys-color-primary-on);
55
- }
56
-
57
- :host([color="secondary"]) {
58
- color: var(--schmancy-sys-color-secondary-default);
59
- }
60
-
61
- :host([color="on-secondary"]) {
62
- color: var(--schmancy-sys-color-secondary-on);
63
- }
64
-
65
- :host([color="tertiary"]) {
66
- color: var(--schmancy-sys-color-tertiary-default);
67
- }
68
-
69
- :host([color="on-tertiary"]) {
70
- color: var(--schmancy-sys-color-tertiary-on);
71
- }
72
-
73
- :host([color="error"]) {
74
- color: var(--schmancy-sys-color-error-default);
75
- }
76
-
77
- :host([color="on-error"]) {
78
- color: var(--schmancy-sys-color-error-on);
79
- }
80
-
81
- :host([color="success"]) {
82
- color: var(--schmancy-sys-color-success-default);
83
- }
84
-
85
- :host([color="on-success"]) {
86
- color: var(--schmancy-sys-color-success-on);
87
- }
88
-
89
- :host([color="surface"]) {
90
- color: var(--schmancy-sys-color-surface-default);
91
- }
92
-
93
- :host([color="on-surface"]) {
94
- color: var(--schmancy-sys-color-surface-on);
95
- }
96
-
97
- :host([color="surface-variant"]) {
98
- color: var(--schmancy-sys-color-surface-variant-default);
99
- }
100
-
101
- :host([color="on-surface-variant"]) {
102
- color: var(--schmancy-sys-color-surface-onVariant);
103
- }
104
-
105
- .spinner {
106
- animation: spin 1s linear infinite;
107
- animation-direction: reverse;
108
- }
109
-
110
- @keyframes spin {
111
- from {
112
- transform: rotate(0deg);
113
- }
114
- to {
115
- transform: rotate(360deg);
116
- }
117
- }
118
- `];
119
- }
120
- render() {
121
- let e = {
122
- xxs: 12,
123
- xs: 16,
124
- sm: 20,
125
- md: 24,
126
- lg: 32
127
- }, t;
128
- t = typeof this.size == "string" && this.size in e ? e[this.size] : typeof this.size != "number" || isNaN(this.size) ? 24 : 4 * this.size;
129
- let n = {
130
- width: `${t}px`,
131
- height: `${t}px`
132
- };
133
- return this.glass ? a`
134
- <div class="spinner relative" style=${this.styleMap(n)}>
135
- <!-- Glass container with Apple-style effect -->
136
- <div class="absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150
137
- bg-surface-container/20
138
- shadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]
139
- border border-outline-variant/30"></div>
140
-
141
- <!-- Spinner SVG -->
142
- <svg fill="none" viewBox="0 0 16 16" aria-hidden="true" role="img"
143
- style="width: 100%; height: 100%;" class="relative z-10">
144
- <path
145
- opacity=".7"
146
- d="M8 15A7 7 0 108 1a7 7 0 000 14v0z"
147
- stroke="currentColor"
148
- stroke-width="2"
149
- ></path>
150
- <path d="M15 8a7 7 0 01-7 7" stroke="currentColor" stroke-width="2"></path>
151
- <path d="M8 12a4 4 0 100-8 4 4 0 000 8z" fill="currentColor" opacity="0.8"></path>
152
- </svg>
153
- </div>
154
- ` : a`
155
- <div class="spinner" style=${this.styleMap(n)}>
156
- <svg fill="none" viewBox="0 0 16 16" aria-hidden="true" role="img" style="width: 100%; height: 100%;">
157
- <path
158
- opacity=".5"
159
- d="M8 15A7 7 0 108 1a7 7 0 000 14v0z"
160
- stroke="currentColor"
161
- stroke-width="2"
162
- ></path>
163
- <path d="M15 8a7 7 0 01-7 7" stroke="currentColor" stroke-width="2"></path>
164
- <path d="M8 12a4 4 0 100-8 4 4 0 000 8z" fill="currentColor"></path>
165
- </svg>
166
- </div>
167
- `;
168
- }
169
- };
170
- t([r({
171
- type: String,
172
- reflect: !0
173
- })], s.prototype, "color", void 0), t([r()], s.prototype, "size", void 0), t([r({ type: Boolean })], s.prototype, "glass", void 0), s = t([n("schmancy-spinner")], s);
@@ -1 +0,0 @@
1
- {"version":3,"file":"busy-DzXyO0z6.js","names":[],"sources":["../src/busy/busy.ts","../src/busy/spinner.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-busy')\nexport default class SchmancyBusy extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline;\n\t\tposition: absolute;\n\t\tinset: 0;\n\t\tpointer-events: all;\n\t\tz-index: 50;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<!-- Clean overlay with subtle backdrop -->\n\t\t\t<div class=\"absolute inset-0 flex items-center justify-center bg-surface-container/10 backdrop-blur-xs rounded-[inherit]\">\n\t\t\t\t<!-- Content container with clean surface -->\n\t\t\t\t<div class=\"relative flex items-center justify-center p-4\">\n\t\t\t\t\t\n\t\t\t\t\t<!-- Content slot -->\n\t\t\t\t\t<div class=\"relative z-10\">\n\t\t\t\t\t\t<slot>\n\t\t\t\t\t\t\t<!-- Default spinner if no content provided -->\n\t\t\t\t\t\t\t<schmancy-spinner ></schmancy-spinner>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-busy': SchmancyBusy\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-spinner')\nexport default class SchmnacySpinner extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\tcolor: inherit; /* Inherit from parent by default */\n\t}\n\n\t/* Explicit color options when needed */\n\t:host([color=\"primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-default);\n\t}\n\n\t:host([color=\"on-primary\"]) {\n\t\tcolor: var(--schmancy-sys-color-primary-on);\n\t}\n\n\t:host([color=\"secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-default);\n\t}\n\n\t:host([color=\"on-secondary\"]) {\n\t\tcolor: var(--schmancy-sys-color-secondary-on);\n\t}\n\n\t:host([color=\"tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-default);\n\t}\n\n\t:host([color=\"on-tertiary\"]) {\n\t\tcolor: var(--schmancy-sys-color-tertiary-on);\n\t}\n\n\t:host([color=\"error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-default);\n\t}\n\n\t:host([color=\"on-error\"]) {\n\t\tcolor: var(--schmancy-sys-color-error-on);\n\t}\n\n\t:host([color=\"success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-default);\n\t}\n\n\t:host([color=\"on-success\"]) {\n\t\tcolor: var(--schmancy-sys-color-success-on);\n\t}\n\n\t:host([color=\"surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-default);\n\t}\n\n\t:host([color=\"on-surface\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-on);\n\t}\n\n\t:host([color=\"surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-variant-default);\n\t}\n\n\t:host([color=\"on-surface-variant\"]) {\n\t\tcolor: var(--schmancy-sys-color-surface-onVariant);\n\t}\n\n\t.spinner {\n\t\tanimation: spin 1s linear infinite;\n\t\tanimation-direction: reverse;\n\t}\n\n\t@keyframes spin {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tcolor?: 'primary' | 'on-primary' | 'secondary' | 'on-secondary' |\n\t 'tertiary' | 'on-tertiary' | 'error' | 'on-error' |\n\t 'success' | 'on-success' | 'surface' | 'on-surface' |\n\t 'surface-variant' | 'on-surface-variant'\n\n\t/**\n\t * Size of the spinner - M3 aligned tokens or numeric Tailwind units\n\t * Tokens: 'xxs' (12px), 'xs' (16px), 'sm' (20px), 'md' (24px), 'lg' (32px)\n\t * Numeric: Tailwind units where each unit = 4px (e.g., 6 = 24px)\n\t */\n\t@property() size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | number = 'md'\n\t@property({ type: Boolean }) glass: boolean = false\n\n\tprotected render(): unknown {\n\t\t// M3 aligned token sizes (fit inside buttons of same token)\n\t\tconst tokenSizes: Record<string, number> = {\n\t\t\txxs: 12, // fits in 24px button (ultra-compact)\n\t\t\txs: 16, // fits in 32px button\n\t\t\tsm: 20, // fits in 40px button\n\t\t\tmd: 24, // fits in 48px button (default)\n\t\t\tlg: 32, // fits in 56px button\n\t\t}\n\n\t\t// Support both token and numeric sizes for backward compatibility\n\t\tlet sizeInPx: number\n\t\tif (typeof this.size === 'string' && this.size in tokenSizes) {\n\t\t\tsizeInPx = tokenSizes[this.size]\n\t\t} else if (typeof this.size === 'number' && !isNaN(this.size)) {\n\t\t\t// Legacy numeric: Tailwind units (each unit = 4px)\n\t\t\tsizeInPx = this.size * 4\n\t\t} else {\n\t\t\tsizeInPx = 24 // fallback to md\n\t\t}\n\n\t\tconst style = {\n\t\t\twidth: `${sizeInPx}px`,\n\t\t\theight: `${sizeInPx}px`,\n\t\t}\n\t\t\n\t\treturn this.glass ? html`\n\t\t\t<div class=\"spinner relative\" style=${this.styleMap(style)}>\n\t\t\t\t<!-- Glass container with Apple-style effect -->\n\t\t\t\t<div class=\"absolute inset-0 rounded-full backdrop-blur-xl backdrop-saturate-150\n\t\t\t\t\t\t\tbg-surface-container/20\n\t\t\t\t\t\t\tshadow-[inset_0_1px_1px_0_rgba(255,255,255,0.2)]\n\t\t\t\t\t\t\tborder border-outline-variant/30\"></div>\n\t\t\t\t\n\t\t\t\t<!-- Spinner SVG -->\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" \n\t\t\t\t\t style=\"width: 100%; height: 100%;\" class=\"relative z-10\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".7\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\" opacity=\"0.8\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t` : html`\n\t\t\t<div class=\"spinner\" style=${this.styleMap(style)}>\n\t\t\t\t<svg fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" role=\"img\" style=\"width: 100%; height: 100%;\">\n\t\t\t\t\t<path\n\t\t\t\t\t\topacity=\".5\"\n\t\t\t\t\t\td=\"M8 15A7 7 0 108 1a7 7 0 000 14v0z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path d=\"M15 8a7 7 0 01-7 7\" stroke=\"currentColor\" stroke-width=\"2\"></path>\n\t\t\t\t\t<path d=\"M8 12a4 4 0 100-8 4 4 0 000 8z\" fill=\"currentColor\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-spinner': SchmnacySpinner\n\t}\n}\n"],"mappings":";;;;AAKe,IAAA,IAAA,cAA2B,EAAA;CAAA;EAAA,KAAA,SACzB,CAAC,CAAG;;;;;;;;;;CASpB,SAAA;EACC,OAAO,CAAI;;;;;;;;;;;;;;;;CAgBZ;AAAA;AAAA,IAAA,EAAA,CA5BA,EAAc,eAAA,CAAA,GAAe,CAAA;ACCf,IAAA,IAAA,cAA8B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAyFmB,MAAA,KAAA,QAAA,CACjB;CAAA;CAAA;EAAA,KAAA,SAzF9B,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FpB,SAAA;EAEC,IAAM,IAAqC;GAC1C,KAAK;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EAAA,GAID;EAEH,IADwB,OAAd,KAAK,QAAS,YAAY,KAAK,QAAQ,IACtC,EAAW,KAAK,QACI,OAAd,KAAK,QAAS,YAAa,MAAM,KAAK,IAAA,IAI5C,KAFY,IAAZ,KAAK;EAKjB,IAAM,IAAQ;GACb,OAAO,GAAG,EAAA;GACV,QAAQ,GAAG,EAAA;EAAA;EAGZ,OAAO,KAAK,QAAQ,CAAI;yCACe,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;;;;;;;;MAoBjD,CAAI;gCACsB,KAAK,SAAS,CAAA,EAAA;;;;;;;;;;;;;CAa7C;AAAA;AAAA,EAAA,CA3EC,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,EAAA,CAWxC,EAAA,CAAA,GAAS,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CACT,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CA3F3B,EAAc,kBAAA,CAAA,GAAkB,CAAA"}