@mhmo91/schmancy 0.10.18 → 0.10.20

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 (373) hide show
  1. package/custom-elements.json +0 -13
  2. package/dist/agent/{flow-CvG1fLW5.js.map → flow-3RrZM-e7.js.map} +1 -1
  3. package/dist/agent/overlay.confirm-body-mYm0zq4k.js +2863 -0
  4. package/dist/agent/overlay.confirm-body-mYm0zq4k.js.map +1 -0
  5. package/dist/agent/{rolldown-runtime-DsMetpgY.js → rolldown-runtime-BIIoCavz.js} +9 -2
  6. package/dist/agent/schmancy.agent.js +3932 -5905
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/agent/schmancy.manifest.json +1 -9
  9. package/dist/agent/{vendor-material-color-DcL7ZPxx.js.map → vendor-material-color-33Mj762T.js.map} +1 -1
  10. package/dist/area-C7MNn-3e.cjs +12 -0
  11. package/dist/area-C7MNn-3e.cjs.map +1 -0
  12. package/dist/{area-BIipuSyO.js → area-CRe41aIG.js} +91 -130
  13. package/dist/area-CRe41aIG.js.map +1 -0
  14. package/dist/area.cjs +1 -1
  15. package/dist/area.js +1 -1
  16. package/dist/{audio-D-TZzpXF.cjs → audio-Cvmemu84.cjs} +1 -1
  17. package/dist/{audio-D-TZzpXF.cjs.map → audio-Cvmemu84.cjs.map} +1 -1
  18. package/dist/{audio-DS43uoRA.js → audio-CxO5a2HL.js} +1 -1
  19. package/dist/{audio-DS43uoRA.js.map → audio-CxO5a2HL.js.map} +1 -1
  20. package/dist/audio.cjs +1 -1
  21. package/dist/audio.js +2 -2
  22. package/dist/{autocomplete-Mrb3koUN.js → autocomplete-CRDFL4Ul.js} +2 -2
  23. package/dist/{autocomplete-Mrb3koUN.js.map → autocomplete-CRDFL4Ul.js.map} +1 -1
  24. package/dist/{autocomplete-B8CE5vGw.cjs → autocomplete-CqUl7o0e.cjs} +1 -1
  25. package/dist/{autocomplete-B8CE5vGw.cjs.map → autocomplete-CqUl7o0e.cjs.map} +1 -1
  26. package/dist/autocomplete.cjs +1 -1
  27. package/dist/autocomplete.js +1 -1
  28. package/dist/avatar.cjs +1 -1
  29. package/dist/avatar.js +1 -1
  30. package/dist/badge.cjs +1 -1
  31. package/dist/badge.js +1 -1
  32. package/dist/{boat-DN1_tyvx.cjs → boat-BHV5kOlN.cjs} +1 -1
  33. package/dist/{boat-DN1_tyvx.cjs.map → boat-BHV5kOlN.cjs.map} +1 -1
  34. package/dist/{boat-cuoSkhGI.js → boat-XajM8A3M.js} +2 -2
  35. package/dist/{boat-cuoSkhGI.js.map → boat-XajM8A3M.js.map} +1 -1
  36. package/dist/boat.cjs +1 -1
  37. package/dist/boat.js +1 -1
  38. package/dist/breadcrumb.cjs +1 -1
  39. package/dist/breadcrumb.js +1 -1
  40. package/dist/{busy-CMKX4oQf.cjs → busy-BlBZ5ZOs.cjs} +1 -1
  41. package/dist/{busy-CMKX4oQf.cjs.map → busy-BlBZ5ZOs.cjs.map} +1 -1
  42. package/dist/{busy-Cetzws-m.js → busy-D8YsqVBf.js} +1 -1
  43. package/dist/{busy-Cetzws-m.js.map → busy-D8YsqVBf.js.map} +1 -1
  44. package/dist/busy.cjs +1 -1
  45. package/dist/busy.js +1 -1
  46. package/dist/button.cjs +15 -9
  47. package/dist/button.cjs.map +1 -1
  48. package/dist/button.js +15 -9
  49. package/dist/button.js.map +1 -1
  50. package/dist/{card-D2k3dRL0.js → card-C9TljY2Z.js} +1 -1
  51. package/dist/{card-D2k3dRL0.js.map → card-C9TljY2Z.js.map} +1 -1
  52. package/dist/{card-8VXoo2C_.cjs → card-yT_St83D.cjs} +1 -1
  53. package/dist/{card-8VXoo2C_.cjs.map → card-yT_St83D.cjs.map} +1 -1
  54. package/dist/card.cjs +1 -1
  55. package/dist/card.js +1 -1
  56. package/dist/{checkbox-8hNsBejz.js → checkbox-BDgh4rge.js} +1 -1
  57. package/dist/{checkbox-8hNsBejz.js.map → checkbox-BDgh4rge.js.map} +1 -1
  58. package/dist/{checkbox-Cq5wzeaY.cjs → checkbox-Dz2lkJs0.cjs} +1 -1
  59. package/dist/{checkbox-Cq5wzeaY.cjs.map → checkbox-Dz2lkJs0.cjs.map} +1 -1
  60. package/dist/checkbox.cjs +1 -1
  61. package/dist/checkbox.js +1 -1
  62. package/dist/{chips-DSdvCpmi.cjs → chips-M7Dr2npv.cjs} +2 -4
  63. package/dist/chips-M7Dr2npv.cjs.map +1 -0
  64. package/dist/{chips-m2NPN480.js → chips-N7fu0hA4.js} +4 -6
  65. package/dist/chips-N7fu0hA4.js.map +1 -0
  66. package/dist/chips.cjs +1 -1
  67. package/dist/chips.js +2 -2
  68. package/dist/connectivity.cjs +1 -1
  69. package/dist/connectivity.js +2 -2
  70. package/dist/content-drawer.cjs +1 -1
  71. package/dist/content-drawer.js +1 -1
  72. package/dist/{date-range-DxS3Agbj.cjs → date-range-D2vxD814.cjs} +1 -1
  73. package/dist/{date-range-DxS3Agbj.cjs.map → date-range-D2vxD814.cjs.map} +1 -1
  74. package/dist/{date-range-D98QcCHl.js → date-range-DFWOMgI3.js} +2 -2
  75. package/dist/{date-range-D98QcCHl.js.map → date-range-DFWOMgI3.js.map} +1 -1
  76. package/dist/{date-range-inline-Bvs2ZvEY.cjs → date-range-inline-C5JuZ_Kw.cjs} +1 -1
  77. package/dist/{date-range-inline-Bvs2ZvEY.cjs.map → date-range-inline-C5JuZ_Kw.cjs.map} +1 -1
  78. package/dist/{date-range-inline-TWWnTZlw.js → date-range-inline-D3q1OoKk.js} +1 -1
  79. package/dist/{date-range-inline-TWWnTZlw.js.map → date-range-inline-D3q1OoKk.js.map} +1 -1
  80. package/dist/date-range-inline.cjs +1 -1
  81. package/dist/date-range-inline.js +1 -1
  82. package/dist/date-range.cjs +1 -1
  83. package/dist/date-range.js +1 -1
  84. package/dist/delay.cjs +1 -1
  85. package/dist/delay.js +1 -1
  86. package/dist/{details-Cpg8sH2F.js → details-BrUPmd92.js} +2 -2
  87. package/dist/details-BrUPmd92.js.map +1 -0
  88. package/dist/{details-CwSDur6j.cjs → details-DmDEInaL.cjs} +2 -2
  89. package/dist/details-DmDEInaL.cjs.map +1 -0
  90. package/dist/details.cjs +1 -1
  91. package/dist/details.js +1 -1
  92. package/dist/directives.cjs +1 -1
  93. package/dist/directives.js +1 -1
  94. package/dist/{divider-Be833gGZ.js → divider-BLijs8ba.js} +1 -1
  95. package/dist/{divider-Be833gGZ.js.map → divider-BLijs8ba.js.map} +1 -1
  96. package/dist/{divider-BNdVLE0H.cjs → divider-B_Ts_-qz.cjs} +1 -1
  97. package/dist/{divider-BNdVLE0H.cjs.map → divider-B_Ts_-qz.cjs.map} +1 -1
  98. package/dist/divider.cjs +1 -1
  99. package/dist/divider.js +1 -1
  100. package/dist/dropdown.cjs +1 -1
  101. package/dist/dropdown.js +1 -1
  102. package/dist/{expand-CtoffNNj.js → expand-C-xSpg7M.js} +2 -2
  103. package/dist/{expand-CtoffNNj.js.map → expand-C-xSpg7M.js.map} +1 -1
  104. package/dist/{expand-BP6RLzHw.cjs → expand-DV5sWUB6.cjs} +1 -1
  105. package/dist/{expand-BP6RLzHw.cjs.map → expand-DV5sWUB6.cjs.map} +1 -1
  106. package/dist/expand.cjs +1 -1
  107. package/dist/expand.js +1 -1
  108. package/dist/{float-B8NcSE3a.cjs → float-LyKef0LY.cjs} +1 -1
  109. package/dist/{float-B8NcSE3a.cjs.map → float-LyKef0LY.cjs.map} +1 -1
  110. package/dist/{float-C-glc-3u.js → float-Y22yVBE2.js} +1 -1
  111. package/dist/{float-C-glc-3u.js.map → float-Y22yVBE2.js.map} +1 -1
  112. package/dist/float.cjs +1 -1
  113. package/dist/float.js +1 -1
  114. package/dist/{form-St_IwR7y.cjs → form-C_smXI2-.cjs} +1 -1
  115. package/dist/{form-St_IwR7y.cjs.map → form-C_smXI2-.cjs.map} +1 -1
  116. package/dist/{form-DJvxIyfW.js → form-LFkEQkOX.js} +9 -9
  117. package/dist/{form-DJvxIyfW.js.map → form-LFkEQkOX.js.map} +1 -1
  118. package/dist/form.cjs +1 -1
  119. package/dist/form.js +6 -6
  120. package/dist/handover/agent-runtime-followups.md +1 -1
  121. package/dist/handover/agent-runtime-v1.md +3 -3
  122. package/dist/{icons-D7df1ysG.js → icons-B3pFrwKC.js} +1 -1
  123. package/dist/{icons-D7df1ysG.js.map → icons-B3pFrwKC.js.map} +1 -1
  124. package/dist/{icons-BJld4JHp.cjs → icons-CCNy4Egc.cjs} +1 -1
  125. package/dist/{icons-BJld4JHp.cjs.map → icons-CCNy4Egc.cjs.map} +1 -1
  126. package/dist/icons.cjs +1 -1
  127. package/dist/icons.js +1 -1
  128. package/dist/{iframe-DAbgW9tT.js → iframe-BbFlCEyP.js} +1 -1
  129. package/dist/{iframe-DAbgW9tT.js.map → iframe-BbFlCEyP.js.map} +1 -1
  130. package/dist/{iframe-GT6D8l5Z.cjs → iframe-CCcmLZ_K.cjs} +1 -1
  131. package/dist/{iframe-GT6D8l5Z.cjs.map → iframe-CCcmLZ_K.cjs.map} +1 -1
  132. package/dist/iframe.cjs +1 -1
  133. package/dist/iframe.js +1 -1
  134. package/dist/index.cjs +1 -1
  135. package/dist/index.js +59 -56
  136. package/dist/{input-DC6ap_uN.js → input-Dkneo4uA.js} +2 -2
  137. package/dist/{input-DC6ap_uN.js.map → input-Dkneo4uA.js.map} +1 -1
  138. package/dist/{input-chip-c5n547tg.js → input-chip-C1-TYu4v.js} +1 -1
  139. package/dist/{input-chip-c5n547tg.js.map → input-chip-C1-TYu4v.js.map} +1 -1
  140. package/dist/{input-chip-MsiMu-b5.cjs → input-chip-F5NEkkBU.cjs} +1 -1
  141. package/dist/{input-chip-MsiMu-b5.cjs.map → input-chip-F5NEkkBU.cjs.map} +1 -1
  142. package/dist/{input-BE9wEEw4.cjs → input-sBZ89wz1.cjs} +1 -1
  143. package/dist/{input-BE9wEEw4.cjs.map → input-sBZ89wz1.cjs.map} +1 -1
  144. package/dist/input.cjs +1 -1
  145. package/dist/input.js +1 -1
  146. package/dist/json.cjs +1 -1
  147. package/dist/json.js +2 -2
  148. package/dist/kbd.cjs +1 -1
  149. package/dist/kbd.js +1 -1
  150. package/dist/{layout-Delq-QvR.cjs → layout-BbCIfIgo.cjs} +1 -1
  151. package/dist/{layout-Delq-QvR.cjs.map → layout-BbCIfIgo.cjs.map} +1 -1
  152. package/dist/{layout-BH28sKGc.js → layout-Dq2oeOTS.js} +1 -1
  153. package/dist/{layout-BH28sKGc.js.map → layout-Dq2oeOTS.js.map} +1 -1
  154. package/dist/layout.cjs +1 -1
  155. package/dist/layout.js +1 -1
  156. package/dist/{lightbox-HqJBBjAT.cjs → lightbox-B4m5lxGs.cjs} +1 -1
  157. package/dist/{lightbox-HqJBBjAT.cjs.map → lightbox-B4m5lxGs.cjs.map} +1 -1
  158. package/dist/{lightbox-CNX9Eg3U.js → lightbox-D7hYFspE.js} +1 -1
  159. package/dist/{lightbox-CNX9Eg3U.js.map → lightbox-D7hYFspE.js.map} +1 -1
  160. package/dist/lightbox.cjs +1 -1
  161. package/dist/lightbox.js +1 -1
  162. package/dist/{list-bhyuQSyO.cjs → list-C2ycz-yr.cjs} +1 -1
  163. package/dist/{list-bhyuQSyO.cjs.map → list-C2ycz-yr.cjs.map} +1 -1
  164. package/dist/{list-C76Pb-c1.js → list-Ou72tSeq.js} +1 -1
  165. package/dist/{list-C76Pb-c1.js.map → list-Ou72tSeq.js.map} +1 -1
  166. package/dist/list.cjs +1 -1
  167. package/dist/list.js +1 -1
  168. package/dist/{menu-Dag0cuWV.cjs → menu-ComSx-T0.cjs} +1 -1
  169. package/dist/{menu-Dag0cuWV.cjs.map → menu-ComSx-T0.cjs.map} +1 -1
  170. package/dist/{menu-B_-weNpZ.js → menu-YHbpRa7x.js} +2 -2
  171. package/dist/{menu-B_-weNpZ.js.map → menu-YHbpRa7x.js.map} +1 -1
  172. package/dist/menu.cjs +1 -1
  173. package/dist/menu.js +1 -1
  174. package/dist/mixins-B9kY_60p.js +636 -0
  175. package/dist/{mixins-DCVXqL1Q.js.map → mixins-B9kY_60p.js.map} +1 -1
  176. package/dist/mixins-BwGJwK7X.cjs +254 -0
  177. package/dist/{mixins-Du9HMrIG.cjs.map → mixins-BwGJwK7X.cjs.map} +1 -1
  178. package/dist/mixins.cjs +1 -1
  179. package/dist/mixins.js +1 -1
  180. package/dist/nav-drawer.cjs +1 -1
  181. package/dist/nav-drawer.js +1 -1
  182. package/dist/navigation-bar.cjs +1 -1
  183. package/dist/navigation-bar.js +1 -1
  184. package/dist/navigation-rail.cjs +1 -1
  185. package/dist/navigation-rail.js +1 -1
  186. package/dist/{notification-yd2KeHjd.cjs → notification-DZhL0ZEg.cjs} +1 -1
  187. package/dist/{notification-yd2KeHjd.cjs.map → notification-DZhL0ZEg.cjs.map} +1 -1
  188. package/dist/{notification-DySnvQeO.js → notification-O4Q5pyio.js} +3 -3
  189. package/dist/{notification-DySnvQeO.js.map → notification-O4Q5pyio.js.map} +1 -1
  190. package/dist/notification.cjs +1 -1
  191. package/dist/notification.js +1 -1
  192. package/dist/{option-CBEHYG4U.js → option-BCks0a4i.js} +1 -1
  193. package/dist/{option-CBEHYG4U.js.map → option-BCks0a4i.js.map} +1 -1
  194. package/dist/{option-BDOKUqTy.cjs → option-C2VKw8Yt.cjs} +1 -1
  195. package/dist/{option-BDOKUqTy.cjs.map → option-C2VKw8Yt.cjs.map} +1 -1
  196. package/dist/option.cjs +1 -1
  197. package/dist/option.js +1 -1
  198. package/dist/overlay-C0YSnxoV.js +743 -0
  199. package/dist/overlay-C0YSnxoV.js.map +1 -0
  200. package/dist/overlay-CG1gc1Jw.cjs +80 -0
  201. package/dist/overlay-CG1gc1Jw.cjs.map +1 -0
  202. package/dist/overlay.cjs +1 -80
  203. package/dist/{overlay.confirm-body-sUmd_zVy.cjs → overlay.confirm-body-B-Kmn7LF.cjs} +1 -1
  204. package/dist/{overlay.confirm-body-sUmd_zVy.cjs.map → overlay.confirm-body-B-Kmn7LF.cjs.map} +1 -1
  205. package/dist/{overlay.confirm-body-DESGpbru.js → overlay.confirm-body-BmOnrKbF.js} +1 -1
  206. package/dist/{overlay.confirm-body-DESGpbru.js.map → overlay.confirm-body-BmOnrKbF.js.map} +1 -1
  207. package/dist/overlay.js +5 -746
  208. package/dist/{overlay.service-BxtEFFSH.cjs → overlay.service-BPKV2a8w.cjs} +1 -1
  209. package/dist/{overlay.service-BxtEFFSH.cjs.map → overlay.service-BPKV2a8w.cjs.map} +1 -1
  210. package/dist/{overlay.service-DV_o_xQ0.js → overlay.service-CRoq9Gu-.js} +2 -2
  211. package/dist/{overlay.service-DV_o_xQ0.js.map → overlay.service-CRoq9Gu-.js.map} +1 -1
  212. package/dist/page.cjs +1 -1
  213. package/dist/page.js +4 -4
  214. package/dist/{progress-CMSst_2U.cjs → progress-B9RWAFv5.cjs} +1 -1
  215. package/dist/{progress-CMSst_2U.cjs.map → progress-B9RWAFv5.cjs.map} +1 -1
  216. package/dist/{progress-C4kDZfb7.js → progress-CEEl7vdd.js} +1 -1
  217. package/dist/{progress-C4kDZfb7.js.map → progress-CEEl7vdd.js.map} +1 -1
  218. package/dist/progress.cjs +1 -1
  219. package/dist/progress.js +1 -1
  220. package/dist/radio-group-C2y6H5YY.cjs +19 -0
  221. package/dist/radio-group-C2y6H5YY.cjs.map +1 -0
  222. package/dist/radio-group-VERF_8rC.js +71 -0
  223. package/dist/radio-group-VERF_8rC.js.map +1 -0
  224. package/dist/radio-group.cjs +1 -1
  225. package/dist/radio-group.js +1 -1
  226. package/dist/range.cjs +1 -1
  227. package/dist/range.js +1 -1
  228. package/dist/{rxjs-utils-Dv9T9IpA.js.map → rxjs-utils-Cs6XGwF6.js.map} +1 -1
  229. package/dist/{rxjs-utils-BKB2UM_j.cjs.map → rxjs-utils-Dsj75cJy.cjs.map} +1 -1
  230. package/dist/rxjs-utils.cjs +1 -1
  231. package/dist/rxjs-utils.js +1 -1
  232. package/dist/{scroll-C1klVgSQ.js → scroll-Bj7FsS08.js} +1 -1
  233. package/dist/{scroll-C1klVgSQ.js.map → scroll-Bj7FsS08.js.map} +1 -1
  234. package/dist/{scroll-S-bXF2u6.cjs → scroll-Djz3pJfX.cjs} +1 -1
  235. package/dist/{scroll-S-bXF2u6.cjs.map → scroll-Djz3pJfX.cjs.map} +1 -1
  236. package/dist/{select-UU2pB67h.js → select-ClJj_2AP.js} +3 -3
  237. package/dist/select-ClJj_2AP.js.map +1 -0
  238. package/dist/select-CngphfDB.cjs +56 -0
  239. package/dist/select-CngphfDB.cjs.map +1 -0
  240. package/dist/select.cjs +1 -1
  241. package/dist/select.js +1 -1
  242. package/dist/skeleton.cjs +1 -1
  243. package/dist/skeleton.js +1 -1
  244. package/dist/skills/SKILL.md +12 -0
  245. package/dist/skills/schmancy/SKILL.md +12 -0
  246. package/dist/slider.cjs +1 -1
  247. package/dist/slider.js +1 -1
  248. package/dist/{sound.service-DyY78ukR.cjs → sound.service-DVJZb9ox.cjs} +1 -1
  249. package/dist/{sound.service-DyY78ukR.cjs.map → sound.service-DVJZb9ox.cjs.map} +1 -1
  250. package/dist/{sound.service-BIN2W7Rv.js → sound.service-v_jqCkos.js} +1 -1
  251. package/dist/{sound.service-BIN2W7Rv.js.map → sound.service-v_jqCkos.js.map} +1 -1
  252. package/dist/{splash-screen-bGW_sS4i.js → splash-screen-BQsBy3O1.js} +1 -1
  253. package/dist/{splash-screen-bGW_sS4i.js.map → splash-screen-BQsBy3O1.js.map} +1 -1
  254. package/dist/{splash-screen-25PTDqnp.cjs → splash-screen-CntIFk2h.cjs} +1 -1
  255. package/dist/{splash-screen-25PTDqnp.cjs.map → splash-screen-CntIFk2h.cjs.map} +1 -1
  256. package/dist/splash-screen.cjs +1 -1
  257. package/dist/splash-screen.js +1 -1
  258. package/dist/{src-olrlFt4e.js → src-BAXhEv8f.js} +37 -36
  259. package/dist/{src-olrlFt4e.js.map → src-BAXhEv8f.js.map} +1 -1
  260. package/dist/{src-Blm9PNcf.cjs → src-ChFa-FDD.cjs} +1 -1
  261. package/dist/{src-Blm9PNcf.cjs.map → src-ChFa-FDD.cjs.map} +1 -1
  262. package/dist/{state-nm8yzMPp.js → state-CHbIt2Dw.js} +198 -202
  263. package/dist/{state-nm8yzMPp.js.map → state-CHbIt2Dw.js.map} +1 -1
  264. package/dist/state-DcGj-pJJ.cjs +1 -0
  265. package/dist/{state-avic94Ft.cjs.map → state-DcGj-pJJ.cjs.map} +1 -1
  266. package/dist/state.cjs +1 -1
  267. package/dist/state.js +1 -1
  268. package/dist/steps.cjs +1 -1
  269. package/dist/steps.js +1 -1
  270. package/dist/{surface-DCRy-EyT.js → surface-CHUJSY1o.js} +1 -1
  271. package/dist/{surface-DCRy-EyT.js.map → surface-CHUJSY1o.js.map} +1 -1
  272. package/dist/{surface-DWwQDX9r.cjs → surface-CXmQuXun.cjs} +1 -1
  273. package/dist/{surface-DWwQDX9r.cjs.map → surface-CXmQuXun.cjs.map} +1 -1
  274. package/dist/surface.cjs +1 -1
  275. package/dist/surface.js +1 -1
  276. package/dist/switch.cjs +1 -1
  277. package/dist/switch.js +1 -1
  278. package/dist/table.cjs +1 -1
  279. package/dist/table.js +1 -1
  280. package/dist/{tabs-Dc3_Ox2B.cjs → tabs-Bku0sC0p.cjs} +1 -1
  281. package/dist/{tabs-Dc3_Ox2B.cjs.map → tabs-Bku0sC0p.cjs.map} +1 -1
  282. package/dist/{tabs-BVC_qn8S.js → tabs-DPVX21WM.js} +1 -1
  283. package/dist/{tabs-BVC_qn8S.js.map → tabs-DPVX21WM.js.map} +1 -1
  284. package/dist/tabs.cjs +1 -1
  285. package/dist/tabs.js +1 -1
  286. package/dist/teleport.cjs +1 -1
  287. package/dist/teleport.js +1 -1
  288. package/dist/{textarea-CNa4dSvF.cjs → textarea-CqJNviYi.cjs} +1 -1
  289. package/dist/{textarea-CNa4dSvF.cjs.map → textarea-CqJNviYi.cjs.map} +1 -1
  290. package/dist/{textarea-DkfGmRSI.js → textarea-D6z1UZzs.js} +1 -1
  291. package/dist/{textarea-DkfGmRSI.js.map → textarea-D6z1UZzs.js.map} +1 -1
  292. package/dist/textarea.cjs +1 -1
  293. package/dist/textarea.js +1 -1
  294. package/dist/{theme-DCybsrfv.cjs → theme-BpKVBJCr.cjs} +1 -1
  295. package/dist/{theme-DCybsrfv.cjs.map → theme-BpKVBJCr.cjs.map} +1 -1
  296. package/dist/{theme-BiCwFfCf.js → theme-DbHfINBV.js} +3 -3
  297. package/dist/{theme-BiCwFfCf.js.map → theme-DbHfINBV.js.map} +1 -1
  298. package/dist/{theme-button-DqiA0rJg.js → theme-button-BeU8Nbs2.js} +1 -1
  299. package/dist/{theme-button-DqiA0rJg.js.map → theme-button-BeU8Nbs2.js.map} +1 -1
  300. package/dist/{theme-button-cZGRyQRK.cjs → theme-button-Cof9I85G.cjs} +1 -1
  301. package/dist/{theme-button-cZGRyQRK.cjs.map → theme-button-Cof9I85G.cjs.map} +1 -1
  302. package/dist/theme-button.cjs +1 -1
  303. package/dist/theme-button.js +1 -1
  304. package/dist/theme.cjs +1 -1
  305. package/dist/theme.js +3 -3
  306. package/dist/{theme.service-BOWIT_5k.js → theme.service-CSzNkqBB.js} +1 -1
  307. package/dist/{theme.service-BOWIT_5k.js.map → theme.service-CSzNkqBB.js.map} +1 -1
  308. package/dist/{theme.service-DkdH1t60.cjs → theme.service-CnFUmUpc.cjs} +1 -1
  309. package/dist/{theme.service-DkdH1t60.cjs.map → theme.service-CnFUmUpc.cjs.map} +1 -1
  310. package/dist/tree.cjs +1 -1
  311. package/dist/tree.js +1 -1
  312. package/dist/typography.cjs +1 -1
  313. package/dist/typography.js +1 -1
  314. package/dist/{utils-D2QUu4-g.cjs.map → utils-C-Q8ePtG.cjs.map} +1 -1
  315. package/dist/{utils-Cj_nRRyx.js.map → utils-DXE5fBBd.js.map} +1 -1
  316. package/dist/utils.cjs +1 -1
  317. package/dist/utils.js +1 -1
  318. package/dist/visually-hidden.cjs +1 -1
  319. package/dist/visually-hidden.js +1 -1
  320. package/dist/{window-BMecbTzs.cjs → window-Cql1aIX2.cjs} +1 -1
  321. package/dist/{window-BMecbTzs.cjs.map → window-Cql1aIX2.cjs.map} +1 -1
  322. package/dist/{window-DMy5Gsgu.js → window-DmMNsos0.js} +2 -2
  323. package/dist/{window-DMy5Gsgu.js.map → window-DmMNsos0.js.map} +1 -1
  324. package/dist/window.cjs +1 -1
  325. package/dist/window.js +1 -1
  326. package/package.json +1 -1
  327. package/skills/schmancy/SKILL.md +12 -0
  328. package/src/CLAUDE.md +20 -0
  329. package/src/area/area.component.ts +155 -342
  330. package/src/button/button.ts +8 -5
  331. package/src/button/icon-button.ts +8 -5
  332. package/src/chips/filter-chip.ts +1 -3
  333. package/src/details/details.ts +1 -1
  334. package/src/form/fields/radio-group/radio-button.ts +22 -44
  335. package/src/form/fields/radio-group/radio-group.ts +20 -75
  336. package/src/form/fields/select/select.ts +3 -2
  337. package/src/index.ts +8 -0
  338. package/src/overlay/overlay.component.ts +29 -39
  339. package/src/overlay/overlay.positioning.ts +10 -2
  340. package/src/state/index.ts +31 -9
  341. package/src/state/schmancy-state.html +897 -0
  342. package/src/state/schmancy-state.md +981 -0
  343. package/types/src/area/area.component.d.ts +0 -15
  344. package/types/src/button/icon-button.d.ts +1 -1
  345. package/types/src/form/fields/radio-group/radio-button.d.ts +2 -5
  346. package/types/src/form/fields/radio-group/radio-group.d.ts +2 -10
  347. package/types/src/index.d.ts +1 -0
  348. package/types/src/overlay/overlay.positioning.d.ts +9 -1
  349. package/dist/area-BIipuSyO.js.map +0 -1
  350. package/dist/area-C-EMiNEE.cjs +0 -12
  351. package/dist/area-C-EMiNEE.cjs.map +0 -1
  352. package/dist/chips-DSdvCpmi.cjs.map +0 -1
  353. package/dist/chips-m2NPN480.js.map +0 -1
  354. package/dist/details-Cpg8sH2F.js.map +0 -1
  355. package/dist/details-CwSDur6j.cjs.map +0 -1
  356. package/dist/mixins-DCVXqL1Q.js +0 -636
  357. package/dist/mixins-Du9HMrIG.cjs +0 -254
  358. package/dist/overlay.cjs.map +0 -1
  359. package/dist/overlay.js.map +0 -1
  360. package/dist/radio-group-DB9D2ZkA.js +0 -108
  361. package/dist/radio-group-DB9D2ZkA.js.map +0 -1
  362. package/dist/radio-group-dVUvYFq7.cjs +0 -40
  363. package/dist/radio-group-dVUvYFq7.cjs.map +0 -1
  364. package/dist/select-UU2pB67h.js.map +0 -1
  365. package/dist/select-fu_-rZyn.cjs +0 -56
  366. package/dist/select-fu_-rZyn.cjs.map +0 -1
  367. package/dist/state-avic94Ft.cjs +0 -1
  368. /package/dist/agent/{flow-CvG1fLW5.js → flow-3RrZM-e7.js} +0 -0
  369. /package/dist/agent/{vendor-material-color-DcL7ZPxx.js → vendor-material-color-33Mj762T.js} +0 -0
  370. /package/dist/{rxjs-utils-Dv9T9IpA.js → rxjs-utils-Cs6XGwF6.js} +0 -0
  371. /package/dist/{rxjs-utils-BKB2UM_j.cjs → rxjs-utils-Dsj75cJy.cjs} +0 -0
  372. /package/dist/{utils-D2QUu4-g.cjs → utils-C-Q8ePtG.cjs} +0 -0
  373. /package/dist/{utils-Cj_nRRyx.js → utils-DXE5fBBd.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"audio-DS43uoRA.js","names":[],"sources":["../src/audio/emotional-sounds.ts"],"sourcesContent":["/**\n * Schmancy Emotional Sound Library\n *\n * A curated collection of soft, elegant sounds organized by emotional categories.\n * Each sound is designed to be non-intrusive, emotionally evocative, and beautiful.\n *\n * Inspired by the gentle sounds of nature - soft air, gentle chimes, and warm tones.\n *\n * @example\n * ```typescript\n * import { $sounds } from '@schmancy/audio'\n *\n * // Play a feeling\n * $sounds.play('joyful')\n * $sounds.play('relieved')\n * $sounds.play('curious')\n *\n * // Adjust volume\n * $sounds.setVolume(0.2)\n *\n * // Mute/unmute\n * $sounds.mute()\n * $sounds.unmute()\n * ```\n */\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Happy / Pleasant feelings */\nexport type HappyFeeling =\n | 'joyful' | 'content' | 'excited' | 'proud' | 'hopeful'\n | 'relieved' | 'grateful' | 'peaceful' | 'playful' | 'amused'\n | 'curious' | 'inspired' | 'confident' | 'loved' | 'comforted' | 'energized'\n | 'celebrated'\n\n/** Sad / Low feelings */\nexport type SadFeeling =\n | 'sad' | 'lonely' | 'disappointed' | 'heartbroken' | 'grieving'\n | 'hopeless' | 'empty' | 'discouraged' | 'melancholic' | 'homesick'\n | 'hurt' | 'miserable' | 'regretful' | 'ashamed' | 'inferior'\n\n/** Anxious / Fearful feelings */\nexport type AnxiousFeeling =\n | 'anxious' | 'worried' | 'afraid' | 'terrified' | 'panicked'\n | 'nervous' | 'uneasy' | 'insecure' | 'overwhelmed' | 'stressed'\n | 'tense' | 'apprehensive' | 'startled' | 'suspicious' | 'vulnerable'\n\n/** Angry / Frustrated feelings */\nexport type AngryFeeling =\n | 'annoyed' | 'irritated' | 'frustrated' | 'angry' | 'enraged'\n | 'bitter' | 'resentful' | 'jealous' | 'envious' | 'indignant'\n | 'impatient' | 'hostile' | 'contemptuous'\n\n/** Tired / Drained feelings */\nexport type TiredFeeling =\n | 'tired' | 'exhausted' | 'drained' | 'burnedOut' | 'numb'\n | 'bored' | 'unmotivated' | 'apathetic' | 'restless'\n\n/** Calm / Grounded feelings */\nexport type CalmFeeling =\n | 'calm' | 'relaxed' | 'atEase' | 'balanced' | 'stable'\n | 'secure' | 'safe' | 'centered' | 'grounded' | 'accepting'\n\n/** Connected / Social feelings */\nexport type ConnectedFeeling =\n | 'connected' | 'accepted' | 'included' | 'belonging' | 'appreciated'\n | 'valued' | 'respected' | 'supported' | 'protective' | 'compassionate' | 'empathetic'\n\n/** Mixed / Complicated feelings */\nexport type MixedFeeling =\n | 'conflicted' | 'confused' | 'ambivalent' | 'nostalgic' | 'guilty'\n | 'embarrassed' | 'surprised' | 'shocked' | 'awestruck' | 'skeptical'\n\n/** All feelings */\nexport type Feeling =\n | HappyFeeling | SadFeeling | AnxiousFeeling | AngryFeeling\n | TiredFeeling | CalmFeeling | ConnectedFeeling | MixedFeeling\n\n// FeelingCategory is defined in ../types/mood-audio.types.ts and re-exported\n// from ./index.ts — the canonical source.\n\n// ============================================================================\n// SOUND GENERATOR\n// ============================================================================\n\n/**\n * Emotional Sound Generator\n * Creates soft, beautiful sounds using Web Audio API\n */\nexport class EmotionalSoundGenerator {\n private audioContext: AudioContext | null = null\n private volume = 0.15\n private muted = false\n\n private getContext(): AudioContext {\n if (!this.audioContext) {\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n this.audioContext = new AudioContextClass()\n }\n // Resume if suspended (autoplay policy)\n if (this.audioContext.state === 'suspended') {\n this.audioContext.resume()\n }\n return this.audioContext\n }\n\n // ==========================================================================\n // CORE SOUND PRIMITIVES\n // ==========================================================================\n\n /** Soft air puff - the foundation of our sound palette */\n private puff(startTime: number, duration: number, freq: number, vol: number): void {\n const ctx = this.getContext()\n const bufferSize = Math.floor(ctx.sampleRate * duration)\n const buffer = ctx.createBuffer(1, bufferSize, ctx.sampleRate)\n const data = buffer.getChannelData(0)\n\n for (let i = 0; i < bufferSize; i++) {\n data[i] = Math.random() * 2 - 1\n }\n\n const noise = ctx.createBufferSource()\n noise.buffer = buffer\n\n const filter = ctx.createBiquadFilter()\n filter.type = 'bandpass'\n filter.frequency.value = freq\n filter.Q.value = 0.7\n\n const gain = ctx.createGain()\n gain.gain.setValueAtTime(0, startTime)\n gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.015)\n gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n noise.connect(filter).connect(gain).connect(ctx.destination)\n noise.start(startTime)\n noise.stop(startTime + duration)\n }\n\n /** Gentle tone with envelope */\n private tone(\n startTime: number,\n duration: number,\n freq: number,\n vol: number,\n type: OscillatorType = 'sine',\n freqEnd?: number\n ): void {\n const ctx = this.getContext()\n const osc = ctx.createOscillator()\n const gain = ctx.createGain()\n\n osc.type = type\n osc.frequency.setValueAtTime(freq, startTime)\n if (freqEnd) {\n osc.frequency.exponentialRampToValueAtTime(freqEnd, startTime + duration * 0.8)\n }\n\n gain.gain.setValueAtTime(0, startTime)\n gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.02)\n gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n osc.connect(gain).connect(ctx.destination)\n osc.start(startTime)\n osc.stop(startTime + duration)\n }\n\n /** Warm filtered tone */\n private warmTone(\n startTime: number,\n duration: number,\n freq: number,\n vol: number,\n filterFreq = 800\n ): void {\n const ctx = this.getContext()\n const osc = ctx.createOscillator()\n const filter = ctx.createBiquadFilter()\n const gain = ctx.createGain()\n\n osc.type = 'sine'\n osc.frequency.value = freq\n\n filter.type = 'lowpass'\n filter.frequency.value = filterFreq\n\n gain.gain.setValueAtTime(0, startTime)\n gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.03)\n gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n osc.connect(filter).connect(gain).connect(ctx.destination)\n osc.start(startTime)\n osc.stop(startTime + duration)\n }\n\n /** Shimmer - multiple soft tones */\n private shimmer(startTime: number, duration: number, baseFreq: number, vol: number): void {\n const freqs = [baseFreq, baseFreq * 1.5, baseFreq * 2]\n freqs.forEach((f, i) => {\n this.tone(startTime + i * 0.02, duration - i * 0.02, f, vol * (1 - i * 0.2))\n })\n }\n\n // ==========================================================================\n // HAPPY / PLEASANT FEELINGS\n // ==========================================================================\n\n private playJoyful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Double puff (excited exhale)\n this.puff(now, 0.08, 3000, 0.3)\n this.puff(now + 0.06, 0.1, 3500, 0.35)\n\n // Rising happy tones\n this.tone(now + 0.02, 0.15, 784, 0.25) // G5\n this.tone(now + 0.1, 0.2, 988, 0.3) // B5\n this.tone(now + 0.18, 0.25, 1175, 0.25) // D6\n }\n\n private playContent(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Gentle satisfied sigh\n this.puff(now, 0.2, 1500, 0.25)\n this.warmTone(now + 0.05, 0.3, 523, 0.2) // C5\n this.warmTone(now + 0.15, 0.35, 659, 0.15) // E5\n }\n\n private playExcited(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick ascending puffs\n this.puff(now, 0.06, 2500, 0.25)\n this.puff(now + 0.05, 0.06, 3000, 0.3)\n this.puff(now + 0.1, 0.08, 3500, 0.35)\n\n // Sparkly ascending tones\n this.tone(now + 0.02, 0.12, 880, 0.2)\n this.tone(now + 0.08, 0.12, 1047, 0.25)\n this.tone(now + 0.14, 0.15, 1319, 0.3)\n }\n\n private playProud(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Confident puff\n this.puff(now, 0.15, 1800, 0.3)\n\n // Strong rising chord\n this.tone(now + 0.05, 0.25, 523, 0.25) // C5\n this.tone(now + 0.08, 0.25, 659, 0.2) // E5\n this.tone(now + 0.11, 0.3, 784, 0.25) // G5\n }\n\n private playHopeful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Light ascending puff\n this.puff(now, 0.12, 2200, 0.2)\n\n // Gentle rising tone\n this.tone(now + 0.03, 0.3, 659, 0.2, 'sine', 880) // E5 -> A5\n }\n\n private playRelieved(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Long exhale\n this.puff(now, 0.25, 1200, 0.35)\n\n // Descending release\n this.warmTone(now + 0.1, 0.35, 659, 0.2) // E5\n this.warmTone(now + 0.25, 0.4, 523, 0.15) // C5\n }\n\n private playGrateful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Warm gentle puff\n this.puff(now, 0.15, 1500, 0.25)\n\n // Warm embracing tones\n this.warmTone(now + 0.05, 0.3, 440, 0.2) // A4\n this.warmTone(now + 0.15, 0.35, 523, 0.2) // C5\n this.warmTone(now + 0.25, 0.4, 659, 0.15) // E5\n }\n\n private playPeaceful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Very soft puff\n this.puff(now, 0.3, 800, 0.15)\n\n // Gentle sustained tone\n this.warmTone(now + 0.1, 0.5, 392, 0.12, 500) // G4\n }\n\n private playPlayful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Bouncy puffs\n this.puff(now, 0.05, 2800, 0.2)\n this.puff(now + 0.08, 0.05, 3200, 0.25)\n this.puff(now + 0.14, 0.06, 2800, 0.2)\n\n // Playful tones\n this.tone(now + 0.03, 0.1, 784, 0.2)\n this.tone(now + 0.1, 0.08, 988, 0.25)\n this.tone(now + 0.16, 0.12, 784, 0.2)\n }\n\n private playAmused(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Little chuckle puffs\n this.puff(now, 0.04, 2500, 0.2)\n this.puff(now + 0.06, 0.04, 2800, 0.22)\n this.puff(now + 0.11, 0.05, 2600, 0.18)\n\n // Amused tone\n this.tone(now + 0.05, 0.15, 880, 0.15)\n }\n\n private playCurious(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Questioning puff\n this.puff(now, 0.1, 2000, 0.2)\n\n // Rising questioning tone\n this.tone(now + 0.03, 0.2, 659, 0.2, 'sine', 880) // E5 -> A5 (question)\n }\n\n private playInspired(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Bright puff\n this.puff(now, 0.1, 2500, 0.25)\n\n // Ascending shimmer\n this.shimmer(now + 0.05, 0.3, 523, 0.2)\n }\n\n private playConfident(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Solid puff\n this.puff(now, 0.12, 1500, 0.3)\n\n // Strong chord\n this.tone(now + 0.04, 0.2, 523, 0.25) // C5\n this.tone(now + 0.06, 0.22, 659, 0.2) // E5\n }\n\n private playLoved(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Warm embrace puff\n this.puff(now, 0.2, 1000, 0.2)\n\n // Warm loving tones\n this.warmTone(now + 0.08, 0.4, 392, 0.18, 600) // G4\n this.warmTone(now + 0.2, 0.45, 494, 0.15, 600) // B4\n }\n\n private playComforted(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Soft blanket puff\n this.puff(now, 0.25, 900, 0.18)\n\n // Gentle descending comfort\n this.warmTone(now + 0.1, 0.35, 523, 0.15) // C5\n this.warmTone(now + 0.25, 0.4, 440, 0.12) // A4\n }\n\n private playEnergized(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick energetic puffs\n this.puff(now, 0.05, 3000, 0.25)\n this.puff(now + 0.04, 0.05, 3500, 0.28)\n\n // Bright ascending tones\n this.tone(now + 0.02, 0.1, 784, 0.2)\n this.tone(now + 0.08, 0.12, 988, 0.25)\n this.tone(now + 0.14, 0.15, 1175, 0.22)\n }\n\n private playCelebrated(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Bright celebratory chime\n this.puff(now, 0.08, 2500, 0.2)\n\n // Triumphant ascending arpeggio (C major -> resolve)\n this.tone(now + 0.02, 0.18, 523, 0.22) // C5\n this.tone(now + 0.08, 0.18, 659, 0.24) // E5\n this.tone(now + 0.14, 0.2, 784, 0.26) // G5\n this.tone(now + 0.22, 0.3, 1047, 0.22) // C6 - resolution\n\n // Warm shimmer on resolution\n this.shimmer(now + 0.25, 0.35, 523, 0.12)\n }\n\n // ==========================================================================\n // SAD / LOW FEELINGS\n // ==========================================================================\n\n private playSad(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Heavy sigh\n this.puff(now, 0.3, 600, 0.25)\n\n // Descending sad tone\n this.warmTone(now + 0.1, 0.4, 392, 0.2, 400) // G4\n this.warmTone(now + 0.3, 0.45, 294, 0.15, 350) // D4\n }\n\n private playLonely(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Single isolated puff\n this.puff(now, 0.2, 700, 0.2)\n\n // Sparse, distant tone\n this.warmTone(now + 0.15, 0.5, 330, 0.12, 450) // E4\n }\n\n private playDisappointed(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Deflating puff\n this.puff(now, 0.25, 800, 0.25)\n\n // Falling tone\n this.tone(now + 0.08, 0.3, 523, 0.18, 'sine', 349) // C5 -> F4\n }\n\n private playMelancholic(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Wistful puff\n this.puff(now, 0.3, 700, 0.18)\n\n // Bittersweet tones\n this.warmTone(now + 0.1, 0.45, 440, 0.15, 500) // A4\n this.warmTone(now + 0.3, 0.5, 392, 0.12, 450) // G4\n }\n\n // ==========================================================================\n // ANXIOUS / FEARFUL FEELINGS\n // ==========================================================================\n\n private playAnxious(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Tight, quick puffs\n this.puff(now, 0.08, 1800, 0.2)\n this.puff(now + 0.12, 0.08, 1900, 0.22)\n\n // Uncertain wobble\n const osc = ctx.createOscillator()\n const gain = ctx.createGain()\n const lfo = ctx.createOscillator()\n const lfoGain = ctx.createGain()\n\n osc.frequency.value = 440\n lfo.frequency.value = 8\n lfoGain.gain.value = 20\n\n lfo.connect(lfoGain).connect(osc.frequency)\n\n gain.gain.setValueAtTime(0, now)\n gain.gain.linearRampToValueAtTime(this.volume * 0.15, now + 0.03)\n gain.gain.exponentialRampToValueAtTime(0.001, now + 0.25)\n\n osc.connect(gain).connect(ctx.destination)\n lfo.start(now)\n osc.start(now)\n osc.stop(now + 0.3)\n lfo.stop(now + 0.3)\n }\n\n private playWorried(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Hesitant puff\n this.puff(now, 0.15, 1200, 0.2)\n\n // Minor questioning tone\n this.tone(now + 0.05, 0.25, 349, 0.15, 'sine', 392) // F4 -> G4 (uncertain)\n }\n\n private playNervous(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick shallow puffs\n this.puff(now, 0.05, 2000, 0.18)\n this.puff(now + 0.08, 0.05, 2100, 0.18)\n this.puff(now + 0.15, 0.06, 2000, 0.16)\n\n // Trembling tone\n this.tone(now + 0.04, 0.2, 494, 0.12) // B4\n }\n\n private playStartled(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick sharp puff\n this.puff(now, 0.04, 3500, 0.3)\n\n // Quick high tone\n this.tone(now, 0.08, 1047, 0.25) // C6\n this.tone(now + 0.05, 0.15, 880, 0.15) // A5\n }\n\n // ==========================================================================\n // ANGRY / FRUSTRATED FEELINGS\n // ==========================================================================\n\n private playAnnoyed(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Short frustrated puff\n this.puff(now, 0.1, 1000, 0.25)\n\n // Low rumble\n this.warmTone(now + 0.03, 0.2, 294, 0.18, 400) // D4\n }\n\n private playFrustrated(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Tense puff\n this.puff(now, 0.12, 900, 0.28)\n\n // Blocked feeling\n this.tone(now + 0.04, 0.15, 349, 0.2) // F4\n this.tone(now + 0.12, 0.12, 330, 0.18) // E4\n }\n\n private playImpatient(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick tapping puffs\n this.puff(now, 0.04, 1500, 0.2)\n this.puff(now + 0.08, 0.04, 1500, 0.2)\n this.puff(now + 0.16, 0.04, 1500, 0.22)\n\n // Urgent tone\n this.tone(now + 0.06, 0.1, 523, 0.15)\n }\n\n // ==========================================================================\n // TIRED / DRAINED FEELINGS\n // ==========================================================================\n\n private playTired(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Heavy slow puff\n this.puff(now, 0.35, 500, 0.2)\n\n // Drooping tone\n this.warmTone(now + 0.1, 0.4, 330, 0.12, 350) // E4\n }\n\n private playExhausted(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Very slow, heavy exhale\n this.puff(now, 0.45, 400, 0.18)\n\n // Descending fade\n this.warmTone(now + 0.15, 0.5, 294, 0.1, 300) // D4\n }\n\n private playBored(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Flat sigh\n this.puff(now, 0.25, 600, 0.15)\n\n // Monotone\n this.warmTone(now + 0.1, 0.3, 349, 0.1, 400) // F4\n }\n\n // ==========================================================================\n // CALM / GROUNDED FEELINGS\n // ==========================================================================\n\n private playCalm(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Slow, peaceful puff\n this.puff(now, 0.3, 600, 0.12)\n\n // Sustained gentle tone\n this.warmTone(now + 0.1, 0.5, 392, 0.1, 500) // G4\n }\n\n private playRelaxed(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Long soft exhale\n this.puff(now, 0.35, 700, 0.15)\n\n // Gentle descending\n this.warmTone(now + 0.15, 0.45, 440, 0.1) // A4\n this.warmTone(now + 0.35, 0.5, 392, 0.08) // G4\n }\n\n private playGrounded(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Deep centered puff\n this.puff(now, 0.25, 500, 0.2)\n\n // Low stable tone\n this.warmTone(now + 0.1, 0.4, 262, 0.15, 350) // C4\n }\n\n private playSafe(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Soft enveloping puff\n this.puff(now, 0.3, 700, 0.15)\n\n // Warm embracing tones\n this.warmTone(now + 0.1, 0.4, 349, 0.12) // F4\n this.warmTone(now + 0.25, 0.45, 440, 0.1) // A4\n }\n\n // ==========================================================================\n // CONNECTED / SOCIAL FEELINGS\n // ==========================================================================\n\n private playConnected(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Warm shared breath\n this.puff(now, 0.2, 1200, 0.18)\n\n // Harmonious tones\n this.warmTone(now + 0.08, 0.3, 440, 0.15) // A4\n this.warmTone(now + 0.12, 0.32, 523, 0.12) // C5\n }\n\n private playAppreciated(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Touched puff\n this.puff(now, 0.15, 1500, 0.2)\n\n // Warm ascending\n this.warmTone(now + 0.05, 0.25, 440, 0.15)\n this.warmTone(now + 0.15, 0.3, 523, 0.18)\n }\n\n private playSupported(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Held puff\n this.puff(now, 0.25, 900, 0.18)\n\n // Stable harmonies\n this.warmTone(now + 0.1, 0.35, 349, 0.12)\n this.warmTone(now + 0.15, 0.4, 440, 0.1)\n }\n\n // ==========================================================================\n // MIXED / COMPLICATED FEELINGS\n // ==========================================================================\n\n private playNostalgic(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Wistful distant puff\n this.puff(now, 0.25, 800, 0.15)\n\n // Bittersweet memory tones\n this.warmTone(now + 0.1, 0.4, 440, 0.12, 500) // A4\n this.warmTone(now + 0.3, 0.45, 392, 0.1, 450) // G4\n }\n\n private playSurprised(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick gasp\n this.puff(now, 0.06, 2800, 0.25)\n\n // Rising tone\n this.tone(now + 0.02, 0.15, 659, 0.2, 'sine', 988) // E5 -> B5\n }\n\n private playAwestruck(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Wonder-filled breath\n this.puff(now, 0.2, 1500, 0.2)\n\n // Ascending wonder\n this.shimmer(now + 0.08, 0.4, 440, 0.15)\n }\n\n private playConfused(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Uncertain puff\n this.puff(now, 0.12, 1200, 0.18)\n\n // Questioning wobble\n this.tone(now + 0.04, 0.2, 440, 0.12, 'sine', 494) // A4 -> B4\n this.tone(now + 0.15, 0.15, 466, 0.1) // Bb4 (chromatic confusion)\n }\n\n // ==========================================================================\n // PUBLIC API\n // ==========================================================================\n\n /** Set volume (0.0 - 1.0) */\n setVolume(vol: number): void {\n this.volume = Math.max(0, Math.min(1, vol))\n }\n\n /** Get current volume */\n getVolume(): number {\n return this.volume\n }\n\n /** Mute all sounds */\n mute(): void {\n this.muted = true\n }\n\n /** Unmute sounds */\n unmute(): void {\n this.muted = false\n }\n\n /** Check if muted */\n isMuted(): boolean {\n return this.muted\n }\n\n /** Play a feeling */\n play(feeling: Feeling): void {\n if (this.muted) return\n\n // Map feelings to their sound methods\n const soundMap: Record<Feeling, () => void> = {\n // Happy\n joyful: () => this.playJoyful(),\n content: () => this.playContent(),\n excited: () => this.playExcited(),\n proud: () => this.playProud(),\n hopeful: () => this.playHopeful(),\n relieved: () => this.playRelieved(),\n grateful: () => this.playGrateful(),\n peaceful: () => this.playPeaceful(),\n playful: () => this.playPlayful(),\n amused: () => this.playAmused(),\n curious: () => this.playCurious(),\n inspired: () => this.playInspired(),\n confident: () => this.playConfident(),\n loved: () => this.playLoved(),\n comforted: () => this.playComforted(),\n energized: () => this.playEnergized(),\n celebrated: () => this.playCelebrated(),\n\n // Sad\n sad: () => this.playSad(),\n lonely: () => this.playLonely(),\n disappointed: () => this.playDisappointed(),\n heartbroken: () => this.playSad(), // Similar to sad\n grieving: () => this.playSad(),\n hopeless: () => this.playLonely(),\n empty: () => this.playLonely(),\n discouraged: () => this.playDisappointed(),\n melancholic: () => this.playMelancholic(),\n homesick: () => this.playNostalgic(),\n hurt: () => this.playSad(),\n miserable: () => this.playSad(),\n regretful: () => this.playMelancholic(),\n ashamed: () => this.playDisappointed(),\n inferior: () => this.playDisappointed(),\n\n // Anxious\n anxious: () => this.playAnxious(),\n worried: () => this.playWorried(),\n afraid: () => this.playAnxious(),\n terrified: () => this.playStartled(),\n panicked: () => this.playStartled(),\n nervous: () => this.playNervous(),\n uneasy: () => this.playWorried(),\n insecure: () => this.playNervous(),\n overwhelmed: () => this.playAnxious(),\n stressed: () => this.playAnxious(),\n tense: () => this.playAnxious(),\n apprehensive: () => this.playWorried(),\n startled: () => this.playStartled(),\n suspicious: () => this.playWorried(),\n vulnerable: () => this.playNervous(),\n\n // Angry\n annoyed: () => this.playAnnoyed(),\n irritated: () => this.playAnnoyed(),\n frustrated: () => this.playFrustrated(),\n angry: () => this.playFrustrated(),\n enraged: () => this.playFrustrated(),\n bitter: () => this.playFrustrated(),\n resentful: () => this.playAnnoyed(),\n jealous: () => this.playAnnoyed(),\n envious: () => this.playAnnoyed(),\n indignant: () => this.playFrustrated(),\n impatient: () => this.playImpatient(),\n hostile: () => this.playFrustrated(),\n contemptuous: () => this.playAnnoyed(),\n\n // Tired\n tired: () => this.playTired(),\n exhausted: () => this.playExhausted(),\n drained: () => this.playExhausted(),\n burnedOut: () => this.playExhausted(),\n numb: () => this.playExhausted(),\n bored: () => this.playBored(),\n unmotivated: () => this.playBored(),\n apathetic: () => this.playBored(),\n restless: () => this.playTired(),\n\n // Calm\n calm: () => this.playCalm(),\n relaxed: () => this.playRelaxed(),\n atEase: () => this.playRelaxed(),\n balanced: () => this.playCalm(),\n stable: () => this.playGrounded(),\n secure: () => this.playSafe(),\n safe: () => this.playSafe(),\n centered: () => this.playGrounded(),\n grounded: () => this.playGrounded(),\n accepting: () => this.playCalm(),\n\n // Connected\n connected: () => this.playConnected(),\n accepted: () => this.playAppreciated(),\n included: () => this.playConnected(),\n belonging: () => this.playConnected(),\n appreciated: () => this.playAppreciated(),\n valued: () => this.playAppreciated(),\n respected: () => this.playAppreciated(),\n supported: () => this.playSupported(),\n protective: () => this.playSupported(),\n compassionate: () => this.playConnected(),\n empathetic: () => this.playConnected(),\n\n // Mixed\n conflicted: () => this.playConfused(),\n confused: () => this.playConfused(),\n ambivalent: () => this.playConfused(),\n nostalgic: () => this.playNostalgic(),\n guilty: () => this.playDisappointed(),\n embarrassed: () => this.playNervous(),\n surprised: () => this.playSurprised(),\n shocked: () => this.playStartled(),\n awestruck: () => this.playAwestruck(),\n skeptical: () => this.playConfused(),\n }\n\n const playFn = soundMap[feeling]\n if (playFn) {\n playFn()\n }\n }\n\n /** Dispose audio context */\n dispose(): void {\n if (this.audioContext) {\n this.audioContext.close()\n this.audioContext = null\n }\n }\n}\n\n// ============================================================================\n// SINGLETON EXPORT\n// ============================================================================\n\n/** Global emotional sound player */\nexport const $sounds = new EmotionalSoundGenerator()\n"],"mappings":"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"}
1
+ {"version":3,"file":"audio-CxO5a2HL.js","names":[],"sources":["../src/audio/emotional-sounds.ts"],"sourcesContent":["/**\n * Schmancy Emotional Sound Library\n *\n * A curated collection of soft, elegant sounds organized by emotional categories.\n * Each sound is designed to be non-intrusive, emotionally evocative, and beautiful.\n *\n * Inspired by the gentle sounds of nature - soft air, gentle chimes, and warm tones.\n *\n * @example\n * ```typescript\n * import { $sounds } from '@schmancy/audio'\n *\n * // Play a feeling\n * $sounds.play('joyful')\n * $sounds.play('relieved')\n * $sounds.play('curious')\n *\n * // Adjust volume\n * $sounds.setVolume(0.2)\n *\n * // Mute/unmute\n * $sounds.mute()\n * $sounds.unmute()\n * ```\n */\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Happy / Pleasant feelings */\nexport type HappyFeeling =\n | 'joyful' | 'content' | 'excited' | 'proud' | 'hopeful'\n | 'relieved' | 'grateful' | 'peaceful' | 'playful' | 'amused'\n | 'curious' | 'inspired' | 'confident' | 'loved' | 'comforted' | 'energized'\n | 'celebrated'\n\n/** Sad / Low feelings */\nexport type SadFeeling =\n | 'sad' | 'lonely' | 'disappointed' | 'heartbroken' | 'grieving'\n | 'hopeless' | 'empty' | 'discouraged' | 'melancholic' | 'homesick'\n | 'hurt' | 'miserable' | 'regretful' | 'ashamed' | 'inferior'\n\n/** Anxious / Fearful feelings */\nexport type AnxiousFeeling =\n | 'anxious' | 'worried' | 'afraid' | 'terrified' | 'panicked'\n | 'nervous' | 'uneasy' | 'insecure' | 'overwhelmed' | 'stressed'\n | 'tense' | 'apprehensive' | 'startled' | 'suspicious' | 'vulnerable'\n\n/** Angry / Frustrated feelings */\nexport type AngryFeeling =\n | 'annoyed' | 'irritated' | 'frustrated' | 'angry' | 'enraged'\n | 'bitter' | 'resentful' | 'jealous' | 'envious' | 'indignant'\n | 'impatient' | 'hostile' | 'contemptuous'\n\n/** Tired / Drained feelings */\nexport type TiredFeeling =\n | 'tired' | 'exhausted' | 'drained' | 'burnedOut' | 'numb'\n | 'bored' | 'unmotivated' | 'apathetic' | 'restless'\n\n/** Calm / Grounded feelings */\nexport type CalmFeeling =\n | 'calm' | 'relaxed' | 'atEase' | 'balanced' | 'stable'\n | 'secure' | 'safe' | 'centered' | 'grounded' | 'accepting'\n\n/** Connected / Social feelings */\nexport type ConnectedFeeling =\n | 'connected' | 'accepted' | 'included' | 'belonging' | 'appreciated'\n | 'valued' | 'respected' | 'supported' | 'protective' | 'compassionate' | 'empathetic'\n\n/** Mixed / Complicated feelings */\nexport type MixedFeeling =\n | 'conflicted' | 'confused' | 'ambivalent' | 'nostalgic' | 'guilty'\n | 'embarrassed' | 'surprised' | 'shocked' | 'awestruck' | 'skeptical'\n\n/** All feelings */\nexport type Feeling =\n | HappyFeeling | SadFeeling | AnxiousFeeling | AngryFeeling\n | TiredFeeling | CalmFeeling | ConnectedFeeling | MixedFeeling\n\n// FeelingCategory is defined in ../types/mood-audio.types.ts and re-exported\n// from ./index.ts — the canonical source.\n\n// ============================================================================\n// SOUND GENERATOR\n// ============================================================================\n\n/**\n * Emotional Sound Generator\n * Creates soft, beautiful sounds using Web Audio API\n */\nexport class EmotionalSoundGenerator {\n private audioContext: AudioContext | null = null\n private volume = 0.15\n private muted = false\n\n private getContext(): AudioContext {\n if (!this.audioContext) {\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext\n this.audioContext = new AudioContextClass()\n }\n // Resume if suspended (autoplay policy)\n if (this.audioContext.state === 'suspended') {\n this.audioContext.resume()\n }\n return this.audioContext\n }\n\n // ==========================================================================\n // CORE SOUND PRIMITIVES\n // ==========================================================================\n\n /** Soft air puff - the foundation of our sound palette */\n private puff(startTime: number, duration: number, freq: number, vol: number): void {\n const ctx = this.getContext()\n const bufferSize = Math.floor(ctx.sampleRate * duration)\n const buffer = ctx.createBuffer(1, bufferSize, ctx.sampleRate)\n const data = buffer.getChannelData(0)\n\n for (let i = 0; i < bufferSize; i++) {\n data[i] = Math.random() * 2 - 1\n }\n\n const noise = ctx.createBufferSource()\n noise.buffer = buffer\n\n const filter = ctx.createBiquadFilter()\n filter.type = 'bandpass'\n filter.frequency.value = freq\n filter.Q.value = 0.7\n\n const gain = ctx.createGain()\n gain.gain.setValueAtTime(0, startTime)\n gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.015)\n gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n noise.connect(filter).connect(gain).connect(ctx.destination)\n noise.start(startTime)\n noise.stop(startTime + duration)\n }\n\n /** Gentle tone with envelope */\n private tone(\n startTime: number,\n duration: number,\n freq: number,\n vol: number,\n type: OscillatorType = 'sine',\n freqEnd?: number\n ): void {\n const ctx = this.getContext()\n const osc = ctx.createOscillator()\n const gain = ctx.createGain()\n\n osc.type = type\n osc.frequency.setValueAtTime(freq, startTime)\n if (freqEnd) {\n osc.frequency.exponentialRampToValueAtTime(freqEnd, startTime + duration * 0.8)\n }\n\n gain.gain.setValueAtTime(0, startTime)\n gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.02)\n gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n osc.connect(gain).connect(ctx.destination)\n osc.start(startTime)\n osc.stop(startTime + duration)\n }\n\n /** Warm filtered tone */\n private warmTone(\n startTime: number,\n duration: number,\n freq: number,\n vol: number,\n filterFreq = 800\n ): void {\n const ctx = this.getContext()\n const osc = ctx.createOscillator()\n const filter = ctx.createBiquadFilter()\n const gain = ctx.createGain()\n\n osc.type = 'sine'\n osc.frequency.value = freq\n\n filter.type = 'lowpass'\n filter.frequency.value = filterFreq\n\n gain.gain.setValueAtTime(0, startTime)\n gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.03)\n gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)\n\n osc.connect(filter).connect(gain).connect(ctx.destination)\n osc.start(startTime)\n osc.stop(startTime + duration)\n }\n\n /** Shimmer - multiple soft tones */\n private shimmer(startTime: number, duration: number, baseFreq: number, vol: number): void {\n const freqs = [baseFreq, baseFreq * 1.5, baseFreq * 2]\n freqs.forEach((f, i) => {\n this.tone(startTime + i * 0.02, duration - i * 0.02, f, vol * (1 - i * 0.2))\n })\n }\n\n // ==========================================================================\n // HAPPY / PLEASANT FEELINGS\n // ==========================================================================\n\n private playJoyful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Double puff (excited exhale)\n this.puff(now, 0.08, 3000, 0.3)\n this.puff(now + 0.06, 0.1, 3500, 0.35)\n\n // Rising happy tones\n this.tone(now + 0.02, 0.15, 784, 0.25) // G5\n this.tone(now + 0.1, 0.2, 988, 0.3) // B5\n this.tone(now + 0.18, 0.25, 1175, 0.25) // D6\n }\n\n private playContent(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Gentle satisfied sigh\n this.puff(now, 0.2, 1500, 0.25)\n this.warmTone(now + 0.05, 0.3, 523, 0.2) // C5\n this.warmTone(now + 0.15, 0.35, 659, 0.15) // E5\n }\n\n private playExcited(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick ascending puffs\n this.puff(now, 0.06, 2500, 0.25)\n this.puff(now + 0.05, 0.06, 3000, 0.3)\n this.puff(now + 0.1, 0.08, 3500, 0.35)\n\n // Sparkly ascending tones\n this.tone(now + 0.02, 0.12, 880, 0.2)\n this.tone(now + 0.08, 0.12, 1047, 0.25)\n this.tone(now + 0.14, 0.15, 1319, 0.3)\n }\n\n private playProud(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Confident puff\n this.puff(now, 0.15, 1800, 0.3)\n\n // Strong rising chord\n this.tone(now + 0.05, 0.25, 523, 0.25) // C5\n this.tone(now + 0.08, 0.25, 659, 0.2) // E5\n this.tone(now + 0.11, 0.3, 784, 0.25) // G5\n }\n\n private playHopeful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Light ascending puff\n this.puff(now, 0.12, 2200, 0.2)\n\n // Gentle rising tone\n this.tone(now + 0.03, 0.3, 659, 0.2, 'sine', 880) // E5 -> A5\n }\n\n private playRelieved(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Long exhale\n this.puff(now, 0.25, 1200, 0.35)\n\n // Descending release\n this.warmTone(now + 0.1, 0.35, 659, 0.2) // E5\n this.warmTone(now + 0.25, 0.4, 523, 0.15) // C5\n }\n\n private playGrateful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Warm gentle puff\n this.puff(now, 0.15, 1500, 0.25)\n\n // Warm embracing tones\n this.warmTone(now + 0.05, 0.3, 440, 0.2) // A4\n this.warmTone(now + 0.15, 0.35, 523, 0.2) // C5\n this.warmTone(now + 0.25, 0.4, 659, 0.15) // E5\n }\n\n private playPeaceful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Very soft puff\n this.puff(now, 0.3, 800, 0.15)\n\n // Gentle sustained tone\n this.warmTone(now + 0.1, 0.5, 392, 0.12, 500) // G4\n }\n\n private playPlayful(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Bouncy puffs\n this.puff(now, 0.05, 2800, 0.2)\n this.puff(now + 0.08, 0.05, 3200, 0.25)\n this.puff(now + 0.14, 0.06, 2800, 0.2)\n\n // Playful tones\n this.tone(now + 0.03, 0.1, 784, 0.2)\n this.tone(now + 0.1, 0.08, 988, 0.25)\n this.tone(now + 0.16, 0.12, 784, 0.2)\n }\n\n private playAmused(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Little chuckle puffs\n this.puff(now, 0.04, 2500, 0.2)\n this.puff(now + 0.06, 0.04, 2800, 0.22)\n this.puff(now + 0.11, 0.05, 2600, 0.18)\n\n // Amused tone\n this.tone(now + 0.05, 0.15, 880, 0.15)\n }\n\n private playCurious(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Questioning puff\n this.puff(now, 0.1, 2000, 0.2)\n\n // Rising questioning tone\n this.tone(now + 0.03, 0.2, 659, 0.2, 'sine', 880) // E5 -> A5 (question)\n }\n\n private playInspired(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Bright puff\n this.puff(now, 0.1, 2500, 0.25)\n\n // Ascending shimmer\n this.shimmer(now + 0.05, 0.3, 523, 0.2)\n }\n\n private playConfident(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Solid puff\n this.puff(now, 0.12, 1500, 0.3)\n\n // Strong chord\n this.tone(now + 0.04, 0.2, 523, 0.25) // C5\n this.tone(now + 0.06, 0.22, 659, 0.2) // E5\n }\n\n private playLoved(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Warm embrace puff\n this.puff(now, 0.2, 1000, 0.2)\n\n // Warm loving tones\n this.warmTone(now + 0.08, 0.4, 392, 0.18, 600) // G4\n this.warmTone(now + 0.2, 0.45, 494, 0.15, 600) // B4\n }\n\n private playComforted(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Soft blanket puff\n this.puff(now, 0.25, 900, 0.18)\n\n // Gentle descending comfort\n this.warmTone(now + 0.1, 0.35, 523, 0.15) // C5\n this.warmTone(now + 0.25, 0.4, 440, 0.12) // A4\n }\n\n private playEnergized(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick energetic puffs\n this.puff(now, 0.05, 3000, 0.25)\n this.puff(now + 0.04, 0.05, 3500, 0.28)\n\n // Bright ascending tones\n this.tone(now + 0.02, 0.1, 784, 0.2)\n this.tone(now + 0.08, 0.12, 988, 0.25)\n this.tone(now + 0.14, 0.15, 1175, 0.22)\n }\n\n private playCelebrated(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Bright celebratory chime\n this.puff(now, 0.08, 2500, 0.2)\n\n // Triumphant ascending arpeggio (C major -> resolve)\n this.tone(now + 0.02, 0.18, 523, 0.22) // C5\n this.tone(now + 0.08, 0.18, 659, 0.24) // E5\n this.tone(now + 0.14, 0.2, 784, 0.26) // G5\n this.tone(now + 0.22, 0.3, 1047, 0.22) // C6 - resolution\n\n // Warm shimmer on resolution\n this.shimmer(now + 0.25, 0.35, 523, 0.12)\n }\n\n // ==========================================================================\n // SAD / LOW FEELINGS\n // ==========================================================================\n\n private playSad(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Heavy sigh\n this.puff(now, 0.3, 600, 0.25)\n\n // Descending sad tone\n this.warmTone(now + 0.1, 0.4, 392, 0.2, 400) // G4\n this.warmTone(now + 0.3, 0.45, 294, 0.15, 350) // D4\n }\n\n private playLonely(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Single isolated puff\n this.puff(now, 0.2, 700, 0.2)\n\n // Sparse, distant tone\n this.warmTone(now + 0.15, 0.5, 330, 0.12, 450) // E4\n }\n\n private playDisappointed(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Deflating puff\n this.puff(now, 0.25, 800, 0.25)\n\n // Falling tone\n this.tone(now + 0.08, 0.3, 523, 0.18, 'sine', 349) // C5 -> F4\n }\n\n private playMelancholic(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Wistful puff\n this.puff(now, 0.3, 700, 0.18)\n\n // Bittersweet tones\n this.warmTone(now + 0.1, 0.45, 440, 0.15, 500) // A4\n this.warmTone(now + 0.3, 0.5, 392, 0.12, 450) // G4\n }\n\n // ==========================================================================\n // ANXIOUS / FEARFUL FEELINGS\n // ==========================================================================\n\n private playAnxious(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Tight, quick puffs\n this.puff(now, 0.08, 1800, 0.2)\n this.puff(now + 0.12, 0.08, 1900, 0.22)\n\n // Uncertain wobble\n const osc = ctx.createOscillator()\n const gain = ctx.createGain()\n const lfo = ctx.createOscillator()\n const lfoGain = ctx.createGain()\n\n osc.frequency.value = 440\n lfo.frequency.value = 8\n lfoGain.gain.value = 20\n\n lfo.connect(lfoGain).connect(osc.frequency)\n\n gain.gain.setValueAtTime(0, now)\n gain.gain.linearRampToValueAtTime(this.volume * 0.15, now + 0.03)\n gain.gain.exponentialRampToValueAtTime(0.001, now + 0.25)\n\n osc.connect(gain).connect(ctx.destination)\n lfo.start(now)\n osc.start(now)\n osc.stop(now + 0.3)\n lfo.stop(now + 0.3)\n }\n\n private playWorried(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Hesitant puff\n this.puff(now, 0.15, 1200, 0.2)\n\n // Minor questioning tone\n this.tone(now + 0.05, 0.25, 349, 0.15, 'sine', 392) // F4 -> G4 (uncertain)\n }\n\n private playNervous(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick shallow puffs\n this.puff(now, 0.05, 2000, 0.18)\n this.puff(now + 0.08, 0.05, 2100, 0.18)\n this.puff(now + 0.15, 0.06, 2000, 0.16)\n\n // Trembling tone\n this.tone(now + 0.04, 0.2, 494, 0.12) // B4\n }\n\n private playStartled(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick sharp puff\n this.puff(now, 0.04, 3500, 0.3)\n\n // Quick high tone\n this.tone(now, 0.08, 1047, 0.25) // C6\n this.tone(now + 0.05, 0.15, 880, 0.15) // A5\n }\n\n // ==========================================================================\n // ANGRY / FRUSTRATED FEELINGS\n // ==========================================================================\n\n private playAnnoyed(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Short frustrated puff\n this.puff(now, 0.1, 1000, 0.25)\n\n // Low rumble\n this.warmTone(now + 0.03, 0.2, 294, 0.18, 400) // D4\n }\n\n private playFrustrated(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Tense puff\n this.puff(now, 0.12, 900, 0.28)\n\n // Blocked feeling\n this.tone(now + 0.04, 0.15, 349, 0.2) // F4\n this.tone(now + 0.12, 0.12, 330, 0.18) // E4\n }\n\n private playImpatient(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick tapping puffs\n this.puff(now, 0.04, 1500, 0.2)\n this.puff(now + 0.08, 0.04, 1500, 0.2)\n this.puff(now + 0.16, 0.04, 1500, 0.22)\n\n // Urgent tone\n this.tone(now + 0.06, 0.1, 523, 0.15)\n }\n\n // ==========================================================================\n // TIRED / DRAINED FEELINGS\n // ==========================================================================\n\n private playTired(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Heavy slow puff\n this.puff(now, 0.35, 500, 0.2)\n\n // Drooping tone\n this.warmTone(now + 0.1, 0.4, 330, 0.12, 350) // E4\n }\n\n private playExhausted(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Very slow, heavy exhale\n this.puff(now, 0.45, 400, 0.18)\n\n // Descending fade\n this.warmTone(now + 0.15, 0.5, 294, 0.1, 300) // D4\n }\n\n private playBored(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Flat sigh\n this.puff(now, 0.25, 600, 0.15)\n\n // Monotone\n this.warmTone(now + 0.1, 0.3, 349, 0.1, 400) // F4\n }\n\n // ==========================================================================\n // CALM / GROUNDED FEELINGS\n // ==========================================================================\n\n private playCalm(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Slow, peaceful puff\n this.puff(now, 0.3, 600, 0.12)\n\n // Sustained gentle tone\n this.warmTone(now + 0.1, 0.5, 392, 0.1, 500) // G4\n }\n\n private playRelaxed(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Long soft exhale\n this.puff(now, 0.35, 700, 0.15)\n\n // Gentle descending\n this.warmTone(now + 0.15, 0.45, 440, 0.1) // A4\n this.warmTone(now + 0.35, 0.5, 392, 0.08) // G4\n }\n\n private playGrounded(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Deep centered puff\n this.puff(now, 0.25, 500, 0.2)\n\n // Low stable tone\n this.warmTone(now + 0.1, 0.4, 262, 0.15, 350) // C4\n }\n\n private playSafe(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Soft enveloping puff\n this.puff(now, 0.3, 700, 0.15)\n\n // Warm embracing tones\n this.warmTone(now + 0.1, 0.4, 349, 0.12) // F4\n this.warmTone(now + 0.25, 0.45, 440, 0.1) // A4\n }\n\n // ==========================================================================\n // CONNECTED / SOCIAL FEELINGS\n // ==========================================================================\n\n private playConnected(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Warm shared breath\n this.puff(now, 0.2, 1200, 0.18)\n\n // Harmonious tones\n this.warmTone(now + 0.08, 0.3, 440, 0.15) // A4\n this.warmTone(now + 0.12, 0.32, 523, 0.12) // C5\n }\n\n private playAppreciated(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Touched puff\n this.puff(now, 0.15, 1500, 0.2)\n\n // Warm ascending\n this.warmTone(now + 0.05, 0.25, 440, 0.15)\n this.warmTone(now + 0.15, 0.3, 523, 0.18)\n }\n\n private playSupported(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Held puff\n this.puff(now, 0.25, 900, 0.18)\n\n // Stable harmonies\n this.warmTone(now + 0.1, 0.35, 349, 0.12)\n this.warmTone(now + 0.15, 0.4, 440, 0.1)\n }\n\n // ==========================================================================\n // MIXED / COMPLICATED FEELINGS\n // ==========================================================================\n\n private playNostalgic(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Wistful distant puff\n this.puff(now, 0.25, 800, 0.15)\n\n // Bittersweet memory tones\n this.warmTone(now + 0.1, 0.4, 440, 0.12, 500) // A4\n this.warmTone(now + 0.3, 0.45, 392, 0.1, 450) // G4\n }\n\n private playSurprised(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Quick gasp\n this.puff(now, 0.06, 2800, 0.25)\n\n // Rising tone\n this.tone(now + 0.02, 0.15, 659, 0.2, 'sine', 988) // E5 -> B5\n }\n\n private playAwestruck(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Wonder-filled breath\n this.puff(now, 0.2, 1500, 0.2)\n\n // Ascending wonder\n this.shimmer(now + 0.08, 0.4, 440, 0.15)\n }\n\n private playConfused(): void {\n const ctx = this.getContext()\n const now = ctx.currentTime\n\n // Uncertain puff\n this.puff(now, 0.12, 1200, 0.18)\n\n // Questioning wobble\n this.tone(now + 0.04, 0.2, 440, 0.12, 'sine', 494) // A4 -> B4\n this.tone(now + 0.15, 0.15, 466, 0.1) // Bb4 (chromatic confusion)\n }\n\n // ==========================================================================\n // PUBLIC API\n // ==========================================================================\n\n /** Set volume (0.0 - 1.0) */\n setVolume(vol: number): void {\n this.volume = Math.max(0, Math.min(1, vol))\n }\n\n /** Get current volume */\n getVolume(): number {\n return this.volume\n }\n\n /** Mute all sounds */\n mute(): void {\n this.muted = true\n }\n\n /** Unmute sounds */\n unmute(): void {\n this.muted = false\n }\n\n /** Check if muted */\n isMuted(): boolean {\n return this.muted\n }\n\n /** Play a feeling */\n play(feeling: Feeling): void {\n if (this.muted) return\n\n // Map feelings to their sound methods\n const soundMap: Record<Feeling, () => void> = {\n // Happy\n joyful: () => this.playJoyful(),\n content: () => this.playContent(),\n excited: () => this.playExcited(),\n proud: () => this.playProud(),\n hopeful: () => this.playHopeful(),\n relieved: () => this.playRelieved(),\n grateful: () => this.playGrateful(),\n peaceful: () => this.playPeaceful(),\n playful: () => this.playPlayful(),\n amused: () => this.playAmused(),\n curious: () => this.playCurious(),\n inspired: () => this.playInspired(),\n confident: () => this.playConfident(),\n loved: () => this.playLoved(),\n comforted: () => this.playComforted(),\n energized: () => this.playEnergized(),\n celebrated: () => this.playCelebrated(),\n\n // Sad\n sad: () => this.playSad(),\n lonely: () => this.playLonely(),\n disappointed: () => this.playDisappointed(),\n heartbroken: () => this.playSad(), // Similar to sad\n grieving: () => this.playSad(),\n hopeless: () => this.playLonely(),\n empty: () => this.playLonely(),\n discouraged: () => this.playDisappointed(),\n melancholic: () => this.playMelancholic(),\n homesick: () => this.playNostalgic(),\n hurt: () => this.playSad(),\n miserable: () => this.playSad(),\n regretful: () => this.playMelancholic(),\n ashamed: () => this.playDisappointed(),\n inferior: () => this.playDisappointed(),\n\n // Anxious\n anxious: () => this.playAnxious(),\n worried: () => this.playWorried(),\n afraid: () => this.playAnxious(),\n terrified: () => this.playStartled(),\n panicked: () => this.playStartled(),\n nervous: () => this.playNervous(),\n uneasy: () => this.playWorried(),\n insecure: () => this.playNervous(),\n overwhelmed: () => this.playAnxious(),\n stressed: () => this.playAnxious(),\n tense: () => this.playAnxious(),\n apprehensive: () => this.playWorried(),\n startled: () => this.playStartled(),\n suspicious: () => this.playWorried(),\n vulnerable: () => this.playNervous(),\n\n // Angry\n annoyed: () => this.playAnnoyed(),\n irritated: () => this.playAnnoyed(),\n frustrated: () => this.playFrustrated(),\n angry: () => this.playFrustrated(),\n enraged: () => this.playFrustrated(),\n bitter: () => this.playFrustrated(),\n resentful: () => this.playAnnoyed(),\n jealous: () => this.playAnnoyed(),\n envious: () => this.playAnnoyed(),\n indignant: () => this.playFrustrated(),\n impatient: () => this.playImpatient(),\n hostile: () => this.playFrustrated(),\n contemptuous: () => this.playAnnoyed(),\n\n // Tired\n tired: () => this.playTired(),\n exhausted: () => this.playExhausted(),\n drained: () => this.playExhausted(),\n burnedOut: () => this.playExhausted(),\n numb: () => this.playExhausted(),\n bored: () => this.playBored(),\n unmotivated: () => this.playBored(),\n apathetic: () => this.playBored(),\n restless: () => this.playTired(),\n\n // Calm\n calm: () => this.playCalm(),\n relaxed: () => this.playRelaxed(),\n atEase: () => this.playRelaxed(),\n balanced: () => this.playCalm(),\n stable: () => this.playGrounded(),\n secure: () => this.playSafe(),\n safe: () => this.playSafe(),\n centered: () => this.playGrounded(),\n grounded: () => this.playGrounded(),\n accepting: () => this.playCalm(),\n\n // Connected\n connected: () => this.playConnected(),\n accepted: () => this.playAppreciated(),\n included: () => this.playConnected(),\n belonging: () => this.playConnected(),\n appreciated: () => this.playAppreciated(),\n valued: () => this.playAppreciated(),\n respected: () => this.playAppreciated(),\n supported: () => this.playSupported(),\n protective: () => this.playSupported(),\n compassionate: () => this.playConnected(),\n empathetic: () => this.playConnected(),\n\n // Mixed\n conflicted: () => this.playConfused(),\n confused: () => this.playConfused(),\n ambivalent: () => this.playConfused(),\n nostalgic: () => this.playNostalgic(),\n guilty: () => this.playDisappointed(),\n embarrassed: () => this.playNervous(),\n surprised: () => this.playSurprised(),\n shocked: () => this.playStartled(),\n awestruck: () => this.playAwestruck(),\n skeptical: () => this.playConfused(),\n }\n\n const playFn = soundMap[feeling]\n if (playFn) {\n playFn()\n }\n }\n\n /** Dispose audio context */\n dispose(): void {\n if (this.audioContext) {\n this.audioContext.close()\n this.audioContext = null\n }\n }\n}\n\n// ============================================================================\n// SINGLETON EXPORT\n// ============================================================================\n\n/** Global emotional sound player */\nexport const $sounds = new EmotionalSoundGenerator()\n"],"mappings":"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"}
package/dist/audio.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./sound.service-DyY78ukR.cjs`),t=require(`./audio-D-TZzpXF.cjs`);exports.$sounds=t.t,exports.EmotionalSoundGenerator=t.n,exports.schmancySound=e.t,exports.sound=e.n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./sound.service-DVJZb9ox.cjs`),t=require(`./audio-Cvmemu84.cjs`);exports.$sounds=t.t,exports.EmotionalSoundGenerator=t.n,exports.schmancySound=e.t,exports.sound=e.n;
package/dist/audio.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as e, t } from "./sound.service-BIN2W7Rv.js";
2
- import { n, t as r } from "./audio-DS43uoRA.js";
1
+ import { n as e, t } from "./sound.service-v_jqCkos.js";
2
+ import { n, t as r } from "./audio-CxO5a2HL.js";
3
3
  export { r as $sounds, n as EmotionalSoundGenerator, t as schmancySound, e as sound };
@@ -1,7 +1,7 @@
1
- import { o as e } from "./mixins-DCVXqL1Q.js";
1
+ import { o as e } from "./mixins-B9kY_60p.js";
2
2
  import { a as t } from "./active-host-BP0zy_Y9.js";
3
3
  import { t as n } from "./search-MvIBA93K.js";
4
- import "./input-chip-c5n547tg.js";
4
+ import "./input-chip-C1-TYu4v.js";
5
5
  import { BehaviorSubject as r, combineLatest as i, fromEvent as a, timer as o } from "rxjs";
6
6
  import { debounceTime as s, distinctUntilChanged as c, takeUntil as l, tap as u } from "rxjs/operators";
7
7
  import { classMap as d } from "lit/directives/class-map.js";
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-Mrb3koUN.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":"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"}
1
+ {"version":3,"file":"autocomplete-CRDFL4Ul.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":"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"}
@@ -1,4 +1,4 @@
1
- require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-Du9HMrIG.cjs`),t=require(`./active-host-jH3iloCR.cjs`),n=require(`./search-DPKoC-dT.cjs`);require(`./input-chip-MsiMu-b5.cjs`);let r=require(`rxjs`),i=require(`rxjs/operators`),a=require(`lit/directives/class-map.js`),o=require(`lit/decorators.js`),s=require(`lit`),c=require(`lit/directives/if-defined.js`),l=require(`lit/directives/ref.js`),u=require(`lit/directives/repeat.js`),d=require(`lit/directives/when.js`);var f=class extends e.o((0,s.unsafeCSS)(`:host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}@keyframes onAutoFillStart{0%{}to{}}:-webkit-any(sch-input::part(input):-webkit-autofill,sch-input input:-webkit-autofill){animation-name:onAutoFillStart;animation-duration:1ms}:is(sch-input::part(input):autofill,sch-input input:autofill){animation-name:onAutoFillStart;animation-duration:1ms}`)){constructor(...e){super(...e),this._valueSet=!1,this._valuesSet=!1,this.placeholder=``,this.maxHeight=`300px`,this.multi=!1,this.description=``,this.size=`md`,this.autocomplete=`off`,this.debounceMs=200,this.similarityThreshold=.3,this._a11yId=`schmancy-autocomplete-${Math.random().toString(36).slice(2,10)}`,this._open=!1,this._inputValue=``,this._visibleOptionsCount=0,this._hasResults=!0,this._inputElementRef=(0,l.createRef)(),this._selectedValue$=new r.BehaviorSubject(``),this._selectedValues$=new r.BehaviorSubject([]),this._inputValue$=new r.BehaviorSubject(``)}resetForm(){this.multi?this._selectedValues$.next([]):this._selectedValue$.next(``),this._inputValue=``,this._inputValue$.next(``),super.resetForm()}get values(){return[...this._selectedValues$.value]}set values(e){this._valuesSet=!0,this._selectedValues$.next(Array.isArray(e)?[...e]:[])}get value(){return this.multi?this._selectedValues$.value.join(`,`):this._selectedValue$.value}set value(e){if(this._valueSet=!0,this.multi){let t=e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[],n=this._selectedValues$.value;JSON.stringify(t)!==JSON.stringify(n)&&this._selectedValues$.next(t)}else e!==this._selectedValue$.value&&(this._selectedValue$.next(e),this._updateInputDisplay())}connectedCallback(){super.connectedCallback(),this._setupAutocompleteLogic(),this._setupDocumentClickHandler()}_setupAutocompleteLogic(){(0,r.combineLatest)([this._selectedValue$,this._selectedValues$]).pipe((0,i.tap)(([e,t])=>{this._updateOptionSelection(e,t);let n=this.multi?t.join(`,`):e;if(this.internals?.setFormValue(n||null),this.required){let n=this.multi?t.length===0:!e;this.internals?.setValidity(n?{valueMissing:!0}:{},n?this.validationMessage||`Please select an option.`:void 0)}}),(0,i.takeUntil)(this.disconnecting)).subscribe(),this._inputValue$.pipe((0,i.distinctUntilChanged)(),(0,i.debounceTime)(this.debounceMs),(0,i.tap)(e=>{this._open&&this._filterOptions(e)}),(0,i.takeUntil)(this.disconnecting)).subscribe()}_setupOptionHandlers(){this._options.forEach((e,t)=>{e.setAttribute(`role`,`option`),e.tabIndex=-1,e.id||=`${this.id}-option-${t}`,e.dataset.schmancyAutocompleteHandlers!==`attached`&&(e.dataset.schmancyAutocompleteHandlers=`attached`,(0,r.fromEvent)(e,`mousedown`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(e=>e.preventDefault()),(0,r.fromEvent)(e,`click`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(t=>{t.stopPropagation(),this._selectOption(e)}))})}_updateOptionSelection(e,t){this._options.forEach(n=>{n.selected=this.multi?t.includes(n.value):n.value===e,n.setAttribute(`aria-selected`,String(n.selected))})}_filterOptions(e){let t=e.trim();if(t){let e=this._options.map(e=>{let r=e.label||e.textContent||``,i=e.value,a=n.t(t,r),o=n.t(t,i);return{option:e,score:Math.max(1.1*a,o)}});e.sort((e,t)=>t.score-e.score);let r=0;e.forEach((e,t)=>{let{option:n,score:i}=e;i<this.similarityThreshold?n.hidden=!0:(n.hidden=!1,r++,n.style.order=String(t))}),this._visibleOptionsCount=r,this._hasResults=r>0}else this._options.forEach(e=>{e.hidden=!1,e.style.order=`0`}),this._visibleOptionsCount=this._options.length,this._hasResults=!0;this._announceToScreenReader(this._visibleOptionsCount>0?`${this._visibleOptionsCount} option${this._visibleOptionsCount===1?``:`s`} available.`:`No results found.`)}_openDropdown(){this._open=!0,this._filterOptions(this._inputValue)}_selectOption(e){if(this.multi){let t=this._selectedValues$.value,n=t.indexOf(e.value)>-1?t.filter(t=>t!==e.value):[...t,e.value];this._selectedValues$.next(n),this._announceToScreenReader(n.length>0?`Selected: ${this._getSelectedLabels().join(`, `)}`:`No options selected`),this._fireChangeEvent()}else this._selectedValue$.next(e.value),this._open=!1,this._fireChangeEvent(),this._inputValue=e.label||e.textContent||``,this._inputValue$.next(this._inputValue),this._announceToScreenReader(`Selected: ${e.label||e.textContent}`)}_setupDocumentClickHandler(){(0,r.fromEvent)(document,`click`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(e=>{if(!this._open)return;let t=e.composedPath();t.includes(this)||this._options.some(e=>t.includes(e))||(this._open=!1,this._updateInputDisplay())})}_updateInputDisplay(){if(this.multi)return;let e=this._selectedValue$.value,t=this._options.find(t=>t.value===e);this._inputValue=t&&(t.label||t.textContent)||``,this._inputValue$.next(this._inputValue),this._inputElementRef.value&&(this._inputElementRef.value.value=this._inputValue)}_getSelectedLabels(){return this._options.filter(e=>this.multi?this._selectedValues$.value.includes(e.value):e.value===this._selectedValue$.value).map(e=>e.label||e.textContent||``)}_announceToScreenReader(e){let t=this.shadowRoot?.querySelector(`#live-status`);t&&(t.textContent=e)}_fireChangeEvent(){let e={value:this.value};this.multi&&(e.values=[...this._selectedValues$.value]),this.dispatchEvent(new CustomEvent(`change`,{detail:e,bubbles:!0,composed:!0}))}checkValidity(){return!this.required||(this.multi?this._selectedValues$.value.length>0:!!this._selectedValue$.value)}reportValidity(){return this._inputElementRef.value?this._inputElementRef.value.reportValidity():this.checkValidity()}firstUpdated(){this._setupOptionHandlers(),this._updateInputDisplay(),(this.shadowRoot?.querySelector(`slot`))?.addEventListener(`slotchange`,()=>{this._setupOptionHandlers(),this._updateOptionSelection(this._selectedValue$.value,this._selectedValues$.value)})}handleChipRemove(e){let t=this._selectedValues$.value.filter(t=>t!==e);this._selectedValues$.next(t),this._fireChangeEvent(),this._announceToScreenReader(`Removed: ${this._getChipLabel(e)}`)}_getChipLabel(e){let t=this._options.find(t=>t.value===e);return t&&(t.label||t.textContent)||e}_focusTextInput(){this._inputElementRef.value&&this._inputElementRef.value.focus()}render(){let e=`${this.id}-desc`,{height:t,padding:n,fontSize:r,labelSize:i}=(()=>{switch(this.size){case`sm`:return{height:`min-h-[40px]`,padding:`px-2`,fontSize:`text-sm`,labelSize:`text-sm`};case`lg`:return{height:`min-h-[60px]`,padding:`px-5`,fontSize:`text-lg`,labelSize:`text-lg`};default:return{height:`min-h-[50px]`,padding:`px-4`,fontSize:`text-base`,labelSize:`text-base`}}})();return s.html`
1
+ require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BwGJwK7X.cjs`),t=require(`./active-host-jH3iloCR.cjs`),n=require(`./search-DPKoC-dT.cjs`);require(`./input-chip-F5NEkkBU.cjs`);let r=require(`rxjs`),i=require(`rxjs/operators`),a=require(`lit/directives/class-map.js`),o=require(`lit/decorators.js`),s=require(`lit`),c=require(`lit/directives/if-defined.js`),l=require(`lit/directives/ref.js`),u=require(`lit/directives/repeat.js`),d=require(`lit/directives/when.js`);var f=class extends e.o((0,s.unsafeCSS)(`:host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}@keyframes onAutoFillStart{0%{}to{}}:-webkit-any(sch-input::part(input):-webkit-autofill,sch-input input:-webkit-autofill){animation-name:onAutoFillStart;animation-duration:1ms}:is(sch-input::part(input):autofill,sch-input input:autofill){animation-name:onAutoFillStart;animation-duration:1ms}`)){constructor(...e){super(...e),this._valueSet=!1,this._valuesSet=!1,this.placeholder=``,this.maxHeight=`300px`,this.multi=!1,this.description=``,this.size=`md`,this.autocomplete=`off`,this.debounceMs=200,this.similarityThreshold=.3,this._a11yId=`schmancy-autocomplete-${Math.random().toString(36).slice(2,10)}`,this._open=!1,this._inputValue=``,this._visibleOptionsCount=0,this._hasResults=!0,this._inputElementRef=(0,l.createRef)(),this._selectedValue$=new r.BehaviorSubject(``),this._selectedValues$=new r.BehaviorSubject([]),this._inputValue$=new r.BehaviorSubject(``)}resetForm(){this.multi?this._selectedValues$.next([]):this._selectedValue$.next(``),this._inputValue=``,this._inputValue$.next(``),super.resetForm()}get values(){return[...this._selectedValues$.value]}set values(e){this._valuesSet=!0,this._selectedValues$.next(Array.isArray(e)?[...e]:[])}get value(){return this.multi?this._selectedValues$.value.join(`,`):this._selectedValue$.value}set value(e){if(this._valueSet=!0,this.multi){let t=e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[],n=this._selectedValues$.value;JSON.stringify(t)!==JSON.stringify(n)&&this._selectedValues$.next(t)}else e!==this._selectedValue$.value&&(this._selectedValue$.next(e),this._updateInputDisplay())}connectedCallback(){super.connectedCallback(),this._setupAutocompleteLogic(),this._setupDocumentClickHandler()}_setupAutocompleteLogic(){(0,r.combineLatest)([this._selectedValue$,this._selectedValues$]).pipe((0,i.tap)(([e,t])=>{this._updateOptionSelection(e,t);let n=this.multi?t.join(`,`):e;if(this.internals?.setFormValue(n||null),this.required){let n=this.multi?t.length===0:!e;this.internals?.setValidity(n?{valueMissing:!0}:{},n?this.validationMessage||`Please select an option.`:void 0)}}),(0,i.takeUntil)(this.disconnecting)).subscribe(),this._inputValue$.pipe((0,i.distinctUntilChanged)(),(0,i.debounceTime)(this.debounceMs),(0,i.tap)(e=>{this._open&&this._filterOptions(e)}),(0,i.takeUntil)(this.disconnecting)).subscribe()}_setupOptionHandlers(){this._options.forEach((e,t)=>{e.setAttribute(`role`,`option`),e.tabIndex=-1,e.id||=`${this.id}-option-${t}`,e.dataset.schmancyAutocompleteHandlers!==`attached`&&(e.dataset.schmancyAutocompleteHandlers=`attached`,(0,r.fromEvent)(e,`mousedown`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(e=>e.preventDefault()),(0,r.fromEvent)(e,`click`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(t=>{t.stopPropagation(),this._selectOption(e)}))})}_updateOptionSelection(e,t){this._options.forEach(n=>{n.selected=this.multi?t.includes(n.value):n.value===e,n.setAttribute(`aria-selected`,String(n.selected))})}_filterOptions(e){let t=e.trim();if(t){let e=this._options.map(e=>{let r=e.label||e.textContent||``,i=e.value,a=n.t(t,r),o=n.t(t,i);return{option:e,score:Math.max(1.1*a,o)}});e.sort((e,t)=>t.score-e.score);let r=0;e.forEach((e,t)=>{let{option:n,score:i}=e;i<this.similarityThreshold?n.hidden=!0:(n.hidden=!1,r++,n.style.order=String(t))}),this._visibleOptionsCount=r,this._hasResults=r>0}else this._options.forEach(e=>{e.hidden=!1,e.style.order=`0`}),this._visibleOptionsCount=this._options.length,this._hasResults=!0;this._announceToScreenReader(this._visibleOptionsCount>0?`${this._visibleOptionsCount} option${this._visibleOptionsCount===1?``:`s`} available.`:`No results found.`)}_openDropdown(){this._open=!0,this._filterOptions(this._inputValue)}_selectOption(e){if(this.multi){let t=this._selectedValues$.value,n=t.indexOf(e.value)>-1?t.filter(t=>t!==e.value):[...t,e.value];this._selectedValues$.next(n),this._announceToScreenReader(n.length>0?`Selected: ${this._getSelectedLabels().join(`, `)}`:`No options selected`),this._fireChangeEvent()}else this._selectedValue$.next(e.value),this._open=!1,this._fireChangeEvent(),this._inputValue=e.label||e.textContent||``,this._inputValue$.next(this._inputValue),this._announceToScreenReader(`Selected: ${e.label||e.textContent}`)}_setupDocumentClickHandler(){(0,r.fromEvent)(document,`click`).pipe((0,i.takeUntil)(this.disconnecting)).subscribe(e=>{if(!this._open)return;let t=e.composedPath();t.includes(this)||this._options.some(e=>t.includes(e))||(this._open=!1,this._updateInputDisplay())})}_updateInputDisplay(){if(this.multi)return;let e=this._selectedValue$.value,t=this._options.find(t=>t.value===e);this._inputValue=t&&(t.label||t.textContent)||``,this._inputValue$.next(this._inputValue),this._inputElementRef.value&&(this._inputElementRef.value.value=this._inputValue)}_getSelectedLabels(){return this._options.filter(e=>this.multi?this._selectedValues$.value.includes(e.value):e.value===this._selectedValue$.value).map(e=>e.label||e.textContent||``)}_announceToScreenReader(e){let t=this.shadowRoot?.querySelector(`#live-status`);t&&(t.textContent=e)}_fireChangeEvent(){let e={value:this.value};this.multi&&(e.values=[...this._selectedValues$.value]),this.dispatchEvent(new CustomEvent(`change`,{detail:e,bubbles:!0,composed:!0}))}checkValidity(){return!this.required||(this.multi?this._selectedValues$.value.length>0:!!this._selectedValue$.value)}reportValidity(){return this._inputElementRef.value?this._inputElementRef.value.reportValidity():this.checkValidity()}firstUpdated(){this._setupOptionHandlers(),this._updateInputDisplay(),(this.shadowRoot?.querySelector(`slot`))?.addEventListener(`slotchange`,()=>{this._setupOptionHandlers(),this._updateOptionSelection(this._selectedValue$.value,this._selectedValues$.value)})}handleChipRemove(e){let t=this._selectedValues$.value.filter(t=>t!==e);this._selectedValues$.next(t),this._fireChangeEvent(),this._announceToScreenReader(`Removed: ${this._getChipLabel(e)}`)}_getChipLabel(e){let t=this._options.find(t=>t.value===e);return t&&(t.label||t.textContent)||e}_focusTextInput(){this._inputElementRef.value&&this._inputElementRef.value.focus()}render(){let e=`${this.id}-desc`,{height:t,padding:n,fontSize:r,labelSize:i}=(()=>{switch(this.size){case`sm`:return{height:`min-h-[40px]`,padding:`px-2`,fontSize:`text-sm`,labelSize:`text-sm`};case`lg`:return{height:`min-h-[60px]`,padding:`px-5`,fontSize:`text-lg`,labelSize:`text-lg`};default:return{height:`min-h-[50px]`,padding:`px-4`,fontSize:`text-base`,labelSize:`text-base`}}})();return s.html`
2
2
  <div class="relative">
3
3
  <!-- Screen reader live region -->
4
4
  <div id="live-status" role="status" aria-live="polite" class="sr-only"></div>