@mhmo91/schmancy 0.10.41 → 0.10.43

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 (764) hide show
  1. package/custom-elements.json +291 -179
  2. package/dist/SchmancyElement-CeKrBW2j.cjs +2 -0
  3. package/dist/SchmancyElement-CeKrBW2j.cjs.map +1 -0
  4. package/dist/SchmancyElement-Ob9yGkiG.js +286 -0
  5. package/dist/SchmancyElement-Ob9yGkiG.js.map +1 -0
  6. package/dist/agent/schmancy.agent.js +4057 -4082
  7. package/dist/agent/schmancy.agent.js.map +1 -1
  8. package/dist/agent/schmancy.manifest.json +225 -94
  9. package/dist/animation-CCOIW4wJ.cjs.map +1 -1
  10. package/dist/animation-DCznELuT.js.map +1 -1
  11. package/dist/area-CbajcnmJ.cjs +21 -0
  12. package/dist/area-CbajcnmJ.cjs.map +1 -0
  13. package/dist/{area-BiM7V2ns.js → area-MxLAyWgV.js} +22 -22
  14. package/dist/area-MxLAyWgV.js.map +1 -0
  15. package/dist/area.cjs +1 -1
  16. package/dist/area.js +1 -1
  17. package/dist/{audio-CxO_j__6.js → audio-B_0PGwYC.js} +1 -1
  18. package/dist/audio-B_0PGwYC.js.map +1 -0
  19. package/dist/{audio-xXFfMPCS.cjs → audio-CpwrIaw-.cjs} +1 -1
  20. package/dist/audio-CpwrIaw-.cjs.map +1 -0
  21. package/dist/audio.cjs +1 -1
  22. package/dist/audio.js +2 -2
  23. package/dist/autocomplete-CILzaDB7.cjs +115 -0
  24. package/dist/autocomplete-CILzaDB7.cjs.map +1 -0
  25. package/dist/{autocomplete-DUBY9RtH.js → autocomplete-DV9RxCun.js} +113 -113
  26. package/dist/autocomplete-DV9RxCun.js.map +1 -0
  27. package/dist/autocomplete.cjs +1 -1
  28. package/dist/autocomplete.js +1 -1
  29. package/dist/avatar.cjs +1 -1
  30. package/dist/avatar.cjs.map +1 -1
  31. package/dist/avatar.js +4 -4
  32. package/dist/avatar.js.map +1 -1
  33. package/dist/badge.cjs +1 -1
  34. package/dist/badge.js +1 -1
  35. package/dist/{boat-ScvAima3.js → boat-DoZGgQ0P.js} +6 -8
  36. package/dist/{boat-ScvAima3.js.map → boat-DoZGgQ0P.js.map} +1 -1
  37. package/dist/{boat-BIYaPAHp.cjs → boat-sg0cWO8a.cjs} +3 -5
  38. package/dist/{boat-BIYaPAHp.cjs.map → boat-sg0cWO8a.cjs.map} +1 -1
  39. package/dist/boat.cjs +1 -1
  40. package/dist/boat.js +1 -1
  41. package/dist/breadcrumb.cjs +32 -31
  42. package/dist/breadcrumb.cjs.map +1 -1
  43. package/dist/breadcrumb.js +33 -32
  44. package/dist/breadcrumb.js.map +1 -1
  45. package/dist/busy-Brs-TDh9.cjs +133 -0
  46. package/dist/busy-Brs-TDh9.cjs.map +1 -0
  47. package/dist/busy-g4LoQmhB.js +172 -0
  48. package/dist/busy-g4LoQmhB.js.map +1 -0
  49. package/dist/busy.cjs +1 -1
  50. package/dist/busy.js +1 -1
  51. package/dist/{button-BTpxQ1Kd.cjs → button-Cml67Y_d.cjs} +41 -32
  52. package/dist/button-Cml67Y_d.cjs.map +1 -0
  53. package/dist/{button-D7QHfYf4.js → button-DWANpZfD.js} +43 -34
  54. package/dist/button-DWANpZfD.js.map +1 -0
  55. package/dist/button.cjs +40 -33
  56. package/dist/button.cjs.map +1 -1
  57. package/dist/button.js +42 -35
  58. package/dist/button.js.map +1 -1
  59. package/dist/calendar-2dJrw9pR.cjs +58 -0
  60. package/dist/calendar-2dJrw9pR.cjs.map +1 -0
  61. package/dist/calendar-kCe5LaBa.js +434 -0
  62. package/dist/calendar-kCe5LaBa.js.map +1 -0
  63. package/dist/calendar.cjs +1 -0
  64. package/dist/calendar.js +2 -0
  65. package/dist/{card-DCdtJ5Dy.js → card-CS_hYJbz.js} +136 -136
  66. package/dist/card-CS_hYJbz.js.map +1 -0
  67. package/dist/card-d0KhTnx5.cjs +177 -0
  68. package/dist/card-d0KhTnx5.cjs.map +1 -0
  69. package/dist/card.cjs +1 -1
  70. package/dist/card.js +1 -1
  71. package/dist/{checkbox-DVtyPk7l.js → checkbox-Bjp7kWuE.js} +2 -2
  72. package/dist/{checkbox-DVtyPk7l.js.map → checkbox-Bjp7kWuE.js.map} +1 -1
  73. package/dist/{checkbox-CYGOVPP-.cjs → checkbox-DZ2Wrz7Y.cjs} +1 -1
  74. package/dist/{checkbox-CYGOVPP-.cjs.map → checkbox-DZ2Wrz7Y.cjs.map} +1 -1
  75. package/dist/checkbox.cjs +1 -1
  76. package/dist/checkbox.js +1 -1
  77. package/dist/{chips-DVes-BSz.cjs → chips-BHBVkxsa.cjs} +142 -153
  78. package/dist/chips-BHBVkxsa.cjs.map +1 -0
  79. package/dist/{chips-C5bpgWyf.js → chips-DACeW7YL.js} +127 -138
  80. package/dist/chips-DACeW7YL.js.map +1 -0
  81. package/dist/chips.cjs +1 -1
  82. package/dist/chips.js +2 -2
  83. package/dist/connectivity.cjs +54 -38
  84. package/dist/connectivity.cjs.map +1 -1
  85. package/dist/connectivity.js +56 -40
  86. package/dist/connectivity.js.map +1 -1
  87. package/dist/content-drawer.cjs +1 -1
  88. package/dist/content-drawer.js +1 -1
  89. package/dist/cursor-glow-Ah7VXSj7.js.map +1 -1
  90. package/dist/cursor-glow-Bulq-38P.cjs.map +1 -1
  91. package/dist/date-range-CVAWMdar.cjs +138 -0
  92. package/dist/date-range-CVAWMdar.cjs.map +1 -0
  93. package/dist/date-range-D2NZU5Yg.js +433 -0
  94. package/dist/date-range-D2NZU5Yg.js.map +1 -0
  95. package/dist/{date-range-inline-Dx4Reboo.cjs → date-range-inline-CGM0SPK9.cjs} +2 -4
  96. package/dist/date-range-inline-CGM0SPK9.cjs.map +1 -0
  97. package/dist/{date-range-inline-DPqY9YYf.js → date-range-inline-D6Ozerzw.js} +3 -5
  98. package/dist/date-range-inline-D6Ozerzw.js.map +1 -0
  99. package/dist/date-range-inline.cjs +1 -1
  100. package/dist/date-range-inline.js +1 -1
  101. package/dist/date-range.cjs +1 -1
  102. package/dist/date-range.js +2 -2
  103. package/dist/dayjs.min-CvRZTfam.cjs +1 -0
  104. package/dist/dayjs.min-CvRZTfam.cjs.map +1 -0
  105. package/dist/dayjs.min-DnELezPs.js +296 -0
  106. package/dist/dayjs.min-DnELezPs.js.map +1 -0
  107. package/dist/delay.cjs +1 -1
  108. package/dist/delay.js +3 -3
  109. package/dist/{details-BnleHmYe.js → details-Ct1_GwKr.js} +104 -92
  110. package/dist/details-Ct1_GwKr.js.map +1 -0
  111. package/dist/{details-Bx2jSJxG.cjs → details-D4fVOaj4.cjs} +109 -97
  112. package/dist/details-D4fVOaj4.cjs.map +1 -0
  113. package/dist/details.cjs +1 -1
  114. package/dist/details.js +1 -1
  115. package/dist/{directives-CYf2fAdA.cjs → directives-B2VxfwRL.cjs} +1 -1
  116. package/dist/directives-B2VxfwRL.cjs.map +1 -0
  117. package/dist/{directives-d1rEbW1A.js → directives-Dj8jlv-Q.js} +3 -3
  118. package/dist/directives-Dj8jlv-Q.js.map +1 -0
  119. package/dist/directives.cjs +1 -1
  120. package/dist/directives.js +2 -2
  121. package/dist/discovery.service-CIa3Eeuk.cjs.map +1 -1
  122. package/dist/discovery.service-DZFxtRwW.js.map +1 -1
  123. package/dist/divider-B3v33OnX.cjs +57 -0
  124. package/dist/divider-B3v33OnX.cjs.map +1 -0
  125. package/dist/divider-BJHW3q11.js +89 -0
  126. package/dist/divider-BJHW3q11.js.map +1 -0
  127. package/dist/divider.cjs +1 -1
  128. package/dist/divider.js +1 -1
  129. package/dist/dropdown.cjs +40 -40
  130. package/dist/dropdown.cjs.map +1 -1
  131. package/dist/dropdown.js +41 -41
  132. package/dist/dropdown.js.map +1 -1
  133. package/dist/{expand-DNrWuG_-.js → expand-BT8mOu8Q.js} +103 -97
  134. package/dist/expand-BT8mOu8Q.js.map +1 -0
  135. package/dist/expand-D0YdR9nR.cjs +147 -0
  136. package/dist/expand-D0YdR9nR.cjs.map +1 -0
  137. package/dist/expand.cjs +1 -1
  138. package/dist/expand.js +1 -1
  139. package/dist/fab.cjs +1 -1
  140. package/dist/fab.cjs.map +1 -1
  141. package/dist/fab.js +2 -2
  142. package/dist/fab.js.map +1 -1
  143. package/dist/{float-V7VQKTb8.cjs → float-BPQlDyai.cjs} +1 -1
  144. package/dist/{float-V7VQKTb8.cjs.map → float-BPQlDyai.cjs.map} +1 -1
  145. package/dist/{float-C_CMle0q.js → float-BQcxj3i_.js} +2 -2
  146. package/dist/{float-C_CMle0q.js.map → float-BQcxj3i_.js.map} +1 -1
  147. package/dist/float.cjs +1 -1
  148. package/dist/float.js +1 -1
  149. package/dist/{form-DaaAQd2A.cjs → form-CoWFnClb.cjs} +8 -13
  150. package/dist/form-CoWFnClb.cjs.map +1 -0
  151. package/dist/{form-CMgYSZ3y.js → form-hC2LvCHX.js} +10 -15
  152. package/dist/form-hC2LvCHX.js.map +1 -0
  153. package/dist/form.cjs +12 -13
  154. package/dist/form.cjs.map +1 -1
  155. package/dist/form.js +23 -24
  156. package/dist/form.js.map +1 -1
  157. package/dist/gravity-6pL6CfIr.cjs.map +1 -1
  158. package/dist/gravity-sVK3zGBF.js.map +1 -1
  159. package/dist/handover/agent-runtime-followups.md +1 -1
  160. package/dist/handover/agent-runtime-v1.md +3 -3
  161. package/dist/{hashContent-iRZJJWtE.cjs.map → hashContent--s09Ed_g.cjs.map} +1 -1
  162. package/dist/{hashContent-BqU6v1Xr.js.map → hashContent-CAvrQ56N.js.map} +1 -1
  163. package/dist/icons-BeGKDZ-k.cjs +22 -0
  164. package/dist/icons-BeGKDZ-k.cjs.map +1 -0
  165. package/dist/{icons-mbpHO_73.js → icons-DEJnIxml.js} +20 -22
  166. package/dist/icons-DEJnIxml.js.map +1 -0
  167. package/dist/icons.cjs +1 -1
  168. package/dist/icons.js +1 -1
  169. package/dist/{iframe-88SN5JPu.cjs → iframe-BkSukM9C.cjs} +9 -9
  170. package/dist/iframe-BkSukM9C.cjs.map +1 -0
  171. package/dist/{iframe-U3P1DnQv.js → iframe-V3S-bwEY.js} +10 -10
  172. package/dist/iframe-V3S-bwEY.js.map +1 -0
  173. package/dist/iframe.cjs +1 -1
  174. package/dist/iframe.js +1 -1
  175. package/dist/index.cjs +1 -1
  176. package/dist/index.js +61 -60
  177. package/dist/{input-CPWvGjE4.js → input-CPFCSQld.js} +3 -10
  178. package/dist/input-CPFCSQld.js.map +1 -0
  179. package/dist/{input-BY4Korc5.cjs → input-DSfwfhhj.cjs} +2 -9
  180. package/dist/input-DSfwfhhj.cjs.map +1 -0
  181. package/dist/input-chip-BUuFJUky.cjs +129 -0
  182. package/dist/input-chip-BUuFJUky.cjs.map +1 -0
  183. package/dist/{input-chip-CCZ3i3Sf.js → input-chip-C3a1fwKB.js} +87 -104
  184. package/dist/input-chip-C3a1fwKB.js.map +1 -0
  185. package/dist/input.cjs +1 -1
  186. package/dist/input.js +1 -1
  187. package/dist/json.cjs +5 -1
  188. package/dist/json.cjs.map +1 -1
  189. package/dist/json.js +8 -4
  190. package/dist/json.js.map +1 -1
  191. package/dist/kbd.cjs +28 -28
  192. package/dist/kbd.cjs.map +1 -1
  193. package/dist/kbd.js +29 -29
  194. package/dist/kbd.js.map +1 -1
  195. package/dist/{layout-BhfC26Ks.cjs → layout-CdyHy_oX.cjs} +1 -1
  196. package/dist/layout-CdyHy_oX.cjs.map +1 -0
  197. package/dist/{layout-DC0Npqu7.js → layout-k6fOkpif.js} +1 -1
  198. package/dist/layout-k6fOkpif.js.map +1 -0
  199. package/dist/layout.cjs +26 -26
  200. package/dist/layout.cjs.map +1 -1
  201. package/dist/layout.js +27 -27
  202. package/dist/layout.js.map +1 -1
  203. package/dist/lazy-BaAiIUru.js.map +1 -1
  204. package/dist/lazy-C-7a4FAe.cjs.map +1 -1
  205. package/dist/{lightbox-BSwWvDQc.js → lightbox-DIG0VLOK.js} +8 -14
  206. package/dist/lightbox-DIG0VLOK.js.map +1 -0
  207. package/dist/{lightbox-KrZQH9w9.cjs → lightbox-E5rgd-hu.cjs} +7 -13
  208. package/dist/lightbox-E5rgd-hu.cjs.map +1 -0
  209. package/dist/lightbox.cjs +1 -1
  210. package/dist/lightbox.js +1 -1
  211. package/dist/list-BRz0rDSH.cjs +47 -0
  212. package/dist/list-BRz0rDSH.cjs.map +1 -0
  213. package/dist/{list-BwGtAAfi.js → list-NrOYDPBo.js} +48 -34
  214. package/dist/list-NrOYDPBo.js.map +1 -0
  215. package/dist/list.cjs +1 -1
  216. package/dist/list.js +1 -1
  217. package/dist/magnetic-DKtc4umC.cjs.map +1 -1
  218. package/dist/magnetic-DaOOv5Dz.js.map +1 -1
  219. package/dist/{menu-DX8d96x-.js → menu-B1Ei9SVj.js} +12 -12
  220. package/dist/menu-B1Ei9SVj.js.map +1 -0
  221. package/dist/{menu-jT_yAk5V.cjs → menu-Duvl66Nl.cjs} +10 -10
  222. package/dist/menu-Duvl66Nl.cjs.map +1 -0
  223. package/dist/menu.cjs +1 -1
  224. package/dist/menu.js +1 -1
  225. package/dist/{mixins-XGVIOvKt.cjs → mixins-Cjn20BQH.cjs} +42 -170
  226. package/dist/mixins-Cjn20BQH.cjs.map +1 -0
  227. package/dist/{mixins-COeG4DiX.js → mixins-q4KAL8Xr.js} +43 -177
  228. package/dist/mixins-q4KAL8Xr.js.map +1 -0
  229. package/dist/mixins.cjs +1 -1
  230. package/dist/mixins.js +2 -2
  231. package/dist/nav-drawer.cjs +1 -1
  232. package/dist/nav-drawer.js +1 -1
  233. package/dist/navigation-bar.cjs +1 -1
  234. package/dist/navigation-bar.js +1 -1
  235. package/dist/navigation-rail.cjs +2 -4
  236. package/dist/navigation-rail.cjs.map +1 -1
  237. package/dist/navigation-rail.js +3 -5
  238. package/dist/navigation-rail.js.map +1 -1
  239. package/dist/{notification-CAJVpLne.js → notification-COhUhUCr.js} +5 -7
  240. package/dist/notification-COhUhUCr.js.map +1 -0
  241. package/dist/{notification-DO3VXceY.cjs → notification-DsdA_MJe.cjs} +2 -4
  242. package/dist/notification-DsdA_MJe.cjs.map +1 -0
  243. package/dist/notification.cjs +1 -1
  244. package/dist/notification.js +1 -1
  245. package/dist/{option-JISY0wZJ.js → option-BIzgTbXz.js} +20 -20
  246. package/dist/option-BIzgTbXz.js.map +1 -0
  247. package/dist/option-C5hhqR2z.cjs +43 -0
  248. package/dist/option-C5hhqR2z.cjs.map +1 -0
  249. package/dist/option.cjs +1 -1
  250. package/dist/option.js +1 -1
  251. package/dist/{overlay-B1jVf-ge.cjs → overlay-BzgF8P7i.cjs} +48 -41
  252. package/dist/overlay-BzgF8P7i.cjs.map +1 -0
  253. package/dist/{overlay-CT-tMHDX.js → overlay-LoRRemny.js} +52 -45
  254. package/dist/overlay-LoRRemny.js.map +1 -0
  255. package/dist/overlay-stack-Bdr9lOqi.cjs.map +1 -1
  256. package/dist/overlay-stack-D2rgxQLh.js.map +1 -1
  257. package/dist/overlay.cjs +1 -1
  258. package/dist/{overlay.confirm-body-Dn-Zgogx.js → overlay.confirm-body-D0b1MoCw.js} +30 -45
  259. package/dist/overlay.confirm-body-D0b1MoCw.js.map +1 -0
  260. package/dist/{overlay.confirm-body-mYDYoJL8.cjs → overlay.confirm-body-DCneq73Z.cjs} +22 -37
  261. package/dist/overlay.confirm-body-DCneq73Z.cjs.map +1 -0
  262. package/dist/overlay.js +3 -3
  263. package/dist/{overlay.service-yqTOyLlr.js → overlay.service-BuUeti6X.js} +2 -2
  264. package/dist/overlay.service-BuUeti6X.js.map +1 -0
  265. package/dist/{overlay.service-BQmva9GY.cjs → overlay.service-MMTiW2T3.cjs} +1 -1
  266. package/dist/overlay.service-MMTiW2T3.cjs.map +1 -0
  267. package/dist/{progress-CGWozq_n.js → progress-D7n3SKAO.js} +50 -50
  268. package/dist/progress-D7n3SKAO.js.map +1 -0
  269. package/dist/progress-DsCnFsH5.cjs +51 -0
  270. package/dist/progress-DsCnFsH5.cjs.map +1 -0
  271. package/dist/progress.cjs +1 -1
  272. package/dist/progress.js +1 -1
  273. package/dist/{radio-group-DoSX5D2V.cjs → radio-group-CaAjg9UV.cjs} +1 -1
  274. package/dist/radio-group-CaAjg9UV.cjs.map +1 -0
  275. package/dist/{radio-group-CXkq6qAF.js → radio-group-Drpl6Pl8.js} +2 -2
  276. package/dist/radio-group-Drpl6Pl8.js.map +1 -0
  277. package/dist/radio-group.cjs +1 -1
  278. package/dist/radio-group.js +1 -1
  279. package/dist/range.cjs +4 -2
  280. package/dist/range.cjs.map +1 -1
  281. package/dist/range.js +5 -3
  282. package/dist/range.js.map +1 -1
  283. package/dist/reduced-motion-D-L12p7G.js.map +1 -1
  284. package/dist/reduced-motion-Ds-HjMzn.cjs.map +1 -1
  285. package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-4P2v57ke.cjs.map} +1 -1
  286. package/dist/{rxjs-utils-d-ivVN84.js.map → rxjs-utils-JMFdgQSl.js.map} +1 -1
  287. package/dist/rxjs-utils.cjs +1 -1
  288. package/dist/rxjs-utils.js +1 -1
  289. package/dist/search-DPKoC-dT.cjs.map +1 -1
  290. package/dist/search-MvIBA93K.js.map +1 -1
  291. package/dist/{select-CU90i50_.js → select-CTXkrrVZ.js} +13 -13
  292. package/dist/select-CTXkrrVZ.js.map +1 -0
  293. package/dist/select-DcLcpPCh.cjs +56 -0
  294. package/dist/select-DcLcpPCh.cjs.map +1 -0
  295. package/dist/select.cjs +1 -1
  296. package/dist/select.js +1 -1
  297. package/dist/skeleton.cjs +37 -33
  298. package/dist/skeleton.cjs.map +1 -1
  299. package/dist/skeleton.js +38 -34
  300. package/dist/skeleton.js.map +1 -1
  301. package/dist/skills/schmancy/surface.md +79 -39
  302. package/dist/skills/surface.md +79 -39
  303. package/dist/slider.cjs +31 -31
  304. package/dist/slider.cjs.map +1 -1
  305. package/dist/slider.js +32 -32
  306. package/dist/slider.js.map +1 -1
  307. package/dist/{sound.service-m8WjOhjn.js → sound.service-AJwuk3yr.js} +1 -1
  308. package/dist/sound.service-AJwuk3yr.js.map +1 -0
  309. package/dist/{sound.service-Qhr8nCeG.cjs → sound.service-CVsxhQkX.cjs} +1 -1
  310. package/dist/sound.service-CVsxhQkX.cjs.map +1 -0
  311. package/dist/{splash-screen-Cs3dbPN3.js → splash-screen-DANfqvlo.js} +23 -26
  312. package/dist/splash-screen-DANfqvlo.js.map +1 -0
  313. package/dist/splash-screen-K74cgU6S.cjs +38 -0
  314. package/dist/splash-screen-K74cgU6S.cjs.map +1 -0
  315. package/dist/splash-screen.cjs +1 -1
  316. package/dist/splash-screen.js +1 -1
  317. package/dist/{src-CCVbLLgC.js → src-DAtcPmCb.js} +295 -389
  318. package/dist/src-DAtcPmCb.js.map +1 -0
  319. package/dist/src-DuRvYagm.cjs +237 -0
  320. package/dist/src-DuRvYagm.cjs.map +1 -0
  321. package/dist/{state--x58-AuK.cjs → state-BWQiqN6I.cjs} +1 -1
  322. package/dist/state-BWQiqN6I.cjs.map +1 -0
  323. package/dist/{state-QSwQ61sA.js → state-DBA_gzJO.js} +1 -1
  324. package/dist/state-DBA_gzJO.js.map +1 -0
  325. package/dist/state.cjs +1 -1
  326. package/dist/state.js +2 -2
  327. package/dist/steps.cjs +20 -12
  328. package/dist/steps.cjs.map +1 -1
  329. package/dist/steps.js +21 -13
  330. package/dist/steps.js.map +1 -1
  331. package/dist/surface-COBvWWFb.cjs +7 -0
  332. package/dist/surface-COBvWWFb.cjs.map +1 -0
  333. package/dist/{surface-cqMsHJHM.js → surface-DXk1X1tL.js} +9 -9
  334. package/dist/surface-DXk1X1tL.js.map +1 -0
  335. package/dist/surface.cjs +1 -1
  336. package/dist/surface.js +1 -1
  337. package/dist/switch.cjs +13 -4
  338. package/dist/switch.cjs.map +1 -1
  339. package/dist/switch.js +14 -5
  340. package/dist/switch.js.map +1 -1
  341. package/dist/table.cjs +4 -10
  342. package/dist/table.cjs.map +1 -1
  343. package/dist/table.js +5 -11
  344. package/dist/table.js.map +1 -1
  345. package/dist/{tabs-Ib0Mh__1.js → tabs-BYhFWnsx.js} +7 -7
  346. package/dist/tabs-BYhFWnsx.js.map +1 -0
  347. package/dist/{tabs-Dk9UDWpq.cjs → tabs-CJwB0fr0.cjs} +6 -6
  348. package/dist/tabs-CJwB0fr0.cjs.map +1 -0
  349. package/dist/tabs.cjs +1 -1
  350. package/dist/tabs.js +1 -1
  351. package/dist/teleport.cjs +1 -1
  352. package/dist/teleport.js +1 -1
  353. package/dist/{textarea-CcRsw08B.js → textarea-BjDx1w2g.js} +37 -41
  354. package/dist/textarea-BjDx1w2g.js.map +1 -0
  355. package/dist/{textarea-Cntd9tfV.cjs → textarea-CGgznhd6.cjs} +36 -40
  356. package/dist/textarea-CGgznhd6.cjs.map +1 -0
  357. package/dist/textarea.cjs +1 -1
  358. package/dist/textarea.js +1 -1
  359. package/dist/{theme-wwFbvp5e.cjs → theme-BVul7lHS.cjs} +6 -6
  360. package/dist/{theme-wwFbvp5e.cjs.map → theme-BVul7lHS.cjs.map} +1 -1
  361. package/dist/{theme-CKYXG0le.js → theme-Dvm5J8nh.js} +11 -11
  362. package/dist/{theme-CKYXG0le.js.map → theme-Dvm5J8nh.js.map} +1 -1
  363. package/dist/{theme-button-iLqT56KA.js → theme-button-Bko5ohFP.js} +2 -2
  364. package/dist/{theme-button-iLqT56KA.js.map → theme-button-Bko5ohFP.js.map} +1 -1
  365. package/dist/{theme-button-DE9Lrl7m.cjs → theme-button-YLY7zR1c.cjs} +1 -1
  366. package/dist/{theme-button-DE9Lrl7m.cjs.map → theme-button-YLY7zR1c.cjs.map} +1 -1
  367. package/dist/theme-button.cjs +1 -1
  368. package/dist/theme-button.js +1 -1
  369. package/dist/theme.cjs +1 -1
  370. package/dist/{theme.interface-CSt7JUBD.cjs.map → theme.interface-B-qxDsZQ.cjs.map} +1 -1
  371. package/dist/{theme.interface-odQEpZZH.js.map → theme.interface-B7caS5cg.js.map} +1 -1
  372. package/dist/theme.js +4 -4
  373. package/dist/{theme.service-5RjyR7Sy.js → theme.service-D94nm7Bf.js} +1 -1
  374. package/dist/theme.service-D94nm7Bf.js.map +1 -0
  375. package/dist/{theme.service-DA6KY52G.cjs → theme.service-h2fXQq7x.cjs} +1 -1
  376. package/dist/theme.service-h2fXQq7x.cjs.map +1 -0
  377. package/dist/tooltip.cjs.map +1 -1
  378. package/dist/tooltip.js.map +1 -1
  379. package/dist/tree.cjs +14 -14
  380. package/dist/tree.cjs.map +1 -1
  381. package/dist/tree.js +15 -15
  382. package/dist/tree.js.map +1 -1
  383. package/dist/types.cjs +1 -1
  384. package/dist/types.cjs.map +1 -1
  385. package/dist/types.js +19 -2
  386. package/dist/types.js.map +1 -1
  387. package/dist/typewriter.cjs.map +1 -1
  388. package/dist/typewriter.js.map +1 -1
  389. package/dist/typography-ByF2k5yW.js +358 -0
  390. package/dist/typography-ByF2k5yW.js.map +1 -0
  391. package/dist/typography-Cfav17it.cjs +282 -0
  392. package/dist/typography-Cfav17it.cjs.map +1 -0
  393. package/dist/typography.cjs +1 -1
  394. package/dist/typography.js +1 -1
  395. package/dist/utils-DIXndz6Q.cjs.map +1 -0
  396. package/dist/utils-dSPH7Oh9.js.map +1 -0
  397. package/dist/utils.cjs +1 -1
  398. package/dist/utils.js +1 -1
  399. package/dist/visually-hidden.cjs +13 -13
  400. package/dist/visually-hidden.cjs.map +1 -1
  401. package/dist/visually-hidden.js +14 -14
  402. package/dist/visually-hidden.js.map +1 -1
  403. package/dist/window-Br1OmpL-.cjs +67 -0
  404. package/dist/window-Br1OmpL-.cjs.map +1 -0
  405. package/dist/{window-Db5ZYY6t.js → window-CCmN4but.js} +28 -20
  406. package/dist/window-CCmN4but.js.map +1 -0
  407. package/dist/window.cjs +1 -1
  408. package/dist/window.js +1 -1
  409. package/package.json +1 -1
  410. package/skills/schmancy/surface.md +79 -39
  411. package/src/area/area.component.ts +249 -163
  412. package/src/area/area.service.test.ts +994 -1006
  413. package/src/area/area.service.ts +76 -72
  414. package/src/area/index.ts +7 -7
  415. package/src/area/lazy.ts +39 -42
  416. package/src/area/route.component.ts +54 -52
  417. package/src/area/router.types.ts +7 -7
  418. package/src/audio/emotional-sounds.ts +880 -801
  419. package/src/audio/sound.service.ts +26 -5
  420. package/src/avatar/avatar.ts +4 -4
  421. package/src/badge/badge.ts +60 -209
  422. package/src/badge/index.ts +1 -1
  423. package/src/boat/boat.ts +2 -4
  424. package/src/breadcrumb/breadcrumb.ts +37 -32
  425. package/src/busy/busy.ts +15 -12
  426. package/src/busy/index.ts +2 -2
  427. package/src/busy/spinner.ts +132 -119
  428. package/src/button/button.test.ts +5 -1
  429. package/src/button/button.ts +113 -72
  430. package/src/button/icon-button.ts +64 -46
  431. package/src/button/index.ts +2 -2
  432. package/src/calendar/calendar.test.ts +504 -0
  433. package/src/calendar/calendar.ts +587 -0
  434. package/src/calendar/index.ts +2 -0
  435. package/src/card/actions.ts +11 -9
  436. package/src/card/card.ts +79 -77
  437. package/src/card/content.ts +8 -6
  438. package/src/card/index.ts +4 -4
  439. package/src/card/media.ts +50 -50
  440. package/src/chips/assist-chip.ts +1 -1
  441. package/src/chips/chips.ts +1 -1
  442. package/src/chips/filter-chip.ts +1 -1
  443. package/src/chips/index.ts +1 -1
  444. package/src/chips/input-chip.ts +1 -1
  445. package/src/chips/suggestion-chip.ts +1 -1
  446. package/src/connectivity/connectivity-status.ts +91 -65
  447. package/src/content-drawer/drawer.service.ts +47 -36
  448. package/src/content-drawer/drawer.ts +31 -18
  449. package/src/content-drawer/index.ts +5 -5
  450. package/src/content-drawer/main.ts +9 -7
  451. package/src/content-drawer/sheet.ts +8 -6
  452. package/src/date-range-inline/date-range-inline.ts +523 -522
  453. package/src/date-range-inline/index.ts +2 -2
  454. package/src/delay/index.ts +1 -1
  455. package/src/details/details.ts +119 -105
  456. package/src/details/index.ts +1 -1
  457. package/src/directives/ai-badge.ts +1 -5
  458. package/src/directives/animate-text.ts +43 -31
  459. package/src/directives/art/effects/howl.ts +1 -4
  460. package/src/directives/art/effects/samwa.ts +11 -5
  461. package/src/directives/art/effects/snow.ts +1 -2
  462. package/src/directives/battery.ts +21 -12
  463. package/src/directives/confirm-click.ts +9 -17
  464. package/src/directives/cursor-glow.ts +1 -1
  465. package/src/directives/cycle-text.ts +7 -21
  466. package/src/directives/drag.ts +50 -45
  467. package/src/directives/fyi.ts +1 -6
  468. package/src/directives/gravity.ts +10 -8
  469. package/src/directives/hummingbird.ts +256 -107
  470. package/src/directives/index.ts +29 -29
  471. package/src/directives/intersect.ts +11 -11
  472. package/src/directives/layout.ts +25 -36
  473. package/src/directives/liquid.ts +4 -10
  474. package/src/directives/living-border.ts +7 -5
  475. package/src/directives/long-press.ts +2 -1
  476. package/src/directives/magnetic.ts +7 -6
  477. package/src/directives/nebula.ts +34 -28
  478. package/src/directives/overflow-within.ts +18 -20
  479. package/src/directives/reduced-motion.ts +9 -9
  480. package/src/directives/reveal.ts +193 -195
  481. package/src/directives/ripple.ts +9 -7
  482. package/src/directives/urgent.ts +3 -1
  483. package/src/directives/working-snake.ts +1 -1
  484. package/src/discovery/discovery.service.ts +198 -210
  485. package/src/discovery/index.ts +1 -1
  486. package/src/divider/divider.ts +49 -47
  487. package/src/divider/index.ts +1 -1
  488. package/src/dropdown/dropdown-content.ts +42 -40
  489. package/src/dropdown/index.ts +2 -2
  490. package/src/expand/expand-root.component.ts +70 -61
  491. package/src/expand/expand.component.ts +48 -43
  492. package/src/fab/fab.test.ts +1 -2
  493. package/src/fab/fab.ts +2 -4
  494. package/src/form/fields/autocomplete/autocomplete.scss +6 -2
  495. package/src/form/fields/autocomplete/autocomplete.ts +712 -724
  496. package/src/form/fields/autocomplete/index.ts +1 -1
  497. package/src/form/fields/checkbox/checkbox.ts +1 -4
  498. package/src/form/fields/chips/assist-chip.ts +69 -72
  499. package/src/form/fields/chips/chips.ts +14 -15
  500. package/src/form/fields/chips/filter-chip.ts +36 -32
  501. package/src/form/fields/chips/index.ts +5 -5
  502. package/src/form/fields/chips/input-chip.ts +130 -142
  503. package/src/form/fields/chips/suggestion-chip.ts +69 -72
  504. package/src/form/fields/date-range/date-range-dialog.ts +141 -194
  505. package/src/form/fields/date-range/date-range-helpers.ts +63 -64
  506. package/src/form/fields/date-range/date-range.test.ts +359 -122
  507. package/src/form/fields/date-range/date-range.ts +319 -395
  508. package/src/form/fields/date-range/index.ts +2 -2
  509. package/src/form/fields/input/index.ts +8 -8
  510. package/src/form/fields/input/input.scss +30 -26
  511. package/src/form/fields/input/input.test.ts +4 -1
  512. package/src/form/fields/input/input.ts +4 -20
  513. package/src/form/fields/radio-group/index.ts +2 -2
  514. package/src/form/fields/radio-group/radio-button.ts +8 -8
  515. package/src/form/fields/radio-group/radio-group.ts +4 -1
  516. package/src/form/fields/range/range.ts +3 -1
  517. package/src/form/fields/select/index.ts +2 -2
  518. package/src/form/fields/select/select.ts +51 -45
  519. package/src/form/fields/switch/switch.ts +13 -7
  520. package/src/form/fields/textarea/index.ts +1 -1
  521. package/src/form/fields/textarea/textarea.ts +44 -49
  522. package/src/form/form-summary.ts +15 -14
  523. package/src/form/form.test.ts +0 -1
  524. package/src/form/form.ts +11 -23
  525. package/src/icons/icon.ts +25 -25
  526. package/src/icons/index.ts +1 -1
  527. package/src/iframe/iframe.ts +11 -9
  528. package/src/index.ts +1 -0
  529. package/src/json/json.ts +9 -2
  530. package/src/kbd/kbd.ts +30 -28
  531. package/src/layout/scroll/index.ts +1 -1
  532. package/src/layout/scroll/scroll.ts +54 -54
  533. package/src/lightbox/lightbox-service.ts +27 -18
  534. package/src/lightbox/lightbox.directive.ts +2 -1
  535. package/src/lightbox/lightbox.ts +21 -38
  536. package/src/list/index.ts +3 -3
  537. package/src/list/list-item.ts +32 -26
  538. package/src/list/list.ts +13 -8
  539. package/src/menu/index.ts +2 -2
  540. package/src/menu/menu-item.ts +7 -5
  541. package/src/menu/menu.ts +8 -6
  542. package/src/nav-drawer/appbar.ts +9 -7
  543. package/src/nav-drawer/content.ts +10 -8
  544. package/src/nav-drawer/drawer.ts +29 -25
  545. package/src/nav-drawer/index.ts +6 -6
  546. package/src/navigation-bar/index.ts +2 -2
  547. package/src/navigation-bar/navigation-bar-item.ts +127 -118
  548. package/src/navigation-bar/navigation-bar.ts +103 -91
  549. package/src/navigation-rail/index.ts +2 -2
  550. package/src/navigation-rail/navigation-rail.ts +21 -22
  551. package/src/notification/index.ts +6 -6
  552. package/src/notification/notification-service.ts +1 -2
  553. package/src/notification/notification.scss +5 -1
  554. package/src/notification/notification.ts +1 -3
  555. package/src/notification/notify.ts +204 -207
  556. package/src/option/index.ts +1 -1
  557. package/src/option/option.ts +26 -25
  558. package/src/overlay/overlay.animations.ts +4 -14
  559. package/src/overlay/overlay.component.ts +110 -131
  560. package/src/overlay/overlay.confirm-body.ts +26 -48
  561. package/src/overlay/overlay.gestures.ts +8 -10
  562. package/src/overlay/overlay.layout.ts +1 -4
  563. package/src/overlay/overlay.positioning.ts +4 -15
  564. package/src/overlay/overlay.service.ts +9 -24
  565. package/src/overlay/overlay.stack.test.ts +4 -1
  566. package/src/overlay/overlay.stack.ts +4 -4
  567. package/src/overlay/overlay.types.ts +11 -20
  568. package/src/progress/index.ts +1 -1
  569. package/src/progress/progress.ts +135 -133
  570. package/src/rxjs-utils/index.ts +6 -6
  571. package/src/rxjs-utils/waitForElement.ts +20 -20
  572. package/src/rxjs-utils/waitForElementAll.ts +21 -21
  573. package/src/rxjs-utils/waitForElements.ts +27 -27
  574. package/src/rxjs-utils/waitForElementsAll.ts +27 -29
  575. package/src/rxjs-utils/waitUntil.ts +7 -12
  576. package/src/skeleton/skeleton.ts +39 -33
  577. package/src/slider/index.ts +2 -2
  578. package/src/slider/slide.ts +14 -12
  579. package/src/slider/slider.ts +24 -22
  580. package/src/splash-screen/index.ts +1 -1
  581. package/src/splash-screen/splash-screen.ts +26 -27
  582. package/src/state/active-host.ts +4 -5
  583. package/src/state/index.ts +34 -53
  584. package/src/state/persist.ts +14 -11
  585. package/src/state/schmancy-context.ts +88 -88
  586. package/src/state/state.test-d.ts +3 -13
  587. package/src/state/state.test.ts +1 -4
  588. package/src/steps/index.ts +3 -3
  589. package/src/steps/schmancy-step.ts +41 -31
  590. package/src/steps/schmancy-steps.ts +7 -5
  591. package/src/surface/index.ts +1 -1
  592. package/src/surface/surface.styles.ts +55 -191
  593. package/src/surface/surface.ts +18 -16
  594. package/src/table/index.ts +2 -2
  595. package/src/table/row.ts +1 -4
  596. package/src/table/table.ts +2 -5
  597. package/src/tabs/index.ts +2 -2
  598. package/src/tabs/tabs-group.ts +8 -6
  599. package/src/teleport/index.ts +2 -2
  600. package/src/test-utils/a11y.ts +1 -3
  601. package/src/theme/index.ts +17 -17
  602. package/src/theme/theme-audio-player.ts +18 -16
  603. package/src/theme/theme-controller-boat.ts +1 -1
  604. package/src/theme/theme-controller.ts +36 -32
  605. package/src/theme/theme.component.ts +5 -9
  606. package/src/theme/theme.events.ts +1 -1
  607. package/src/theme/theme.format.ts +7 -7
  608. package/src/theme/theme.service.ts +453 -468
  609. package/src/theme/theme.style.css +78 -23
  610. package/src/theme-button/index.ts +1 -1
  611. package/src/tooltip/tooltip.directive.ts +1 -1
  612. package/src/tree/index.ts +1 -1
  613. package/src/tree/tree.ts +24 -16
  614. package/src/types/surface.ts +38 -44
  615. package/src/typewriter/typewriter.directive.ts +30 -39
  616. package/src/typography/typography.ts +289 -269
  617. package/src/utils/animation.ts +2 -8
  618. package/src/utils/index.ts +6 -6
  619. package/src/utils/number.ts +480 -517
  620. package/src/utils/overlay-stack.ts +1 -3
  621. package/src/utils/search.ts +5 -9
  622. package/src/visually-hidden/visually-hidden.ts +15 -13
  623. package/src/window/window-manager.ts +6 -1
  624. package/src/window/window-position.ts +7 -5
  625. package/src/window/window.ts +146 -114
  626. package/types/mixins/surface.mixin.d.ts +8 -14
  627. package/types/src/badge/badge.d.ts +15 -48
  628. package/types/src/calendar/calendar.d.ts +108 -0
  629. package/types/src/calendar/calendar.test.d.ts +1 -0
  630. package/types/src/calendar/index.d.ts +2 -0
  631. package/types/src/directives/cursor-glow.d.ts +1 -1
  632. package/types/src/directives/hummingbird.d.ts +3 -3
  633. package/types/src/form/fields/date-range/date-range-dialog.d.ts +24 -28
  634. package/types/src/form/fields/date-range/date-range.d.ts +35 -66
  635. package/types/src/form/fields/date-range/date-range.test.d.ts +1 -0
  636. package/types/src/form/fields/date-range/index.d.ts +1 -1
  637. package/types/src/index.d.ts +1 -0
  638. package/types/src/surface/surface.d.ts +9 -7
  639. package/types/src/surface/surface.styles.d.ts +15 -20
  640. package/types/src/types/surface.d.ts +17 -22
  641. package/types/src/utils/number.d.ts +1 -1
  642. package/types/src/window/window.d.ts +0 -1
  643. package/dist/SchmancyElement-D9WA9FP9.cjs +0 -2
  644. package/dist/SchmancyElement-D9WA9FP9.cjs.map +0 -1
  645. package/dist/SchmancyElement-OWgz9ePG.js +0 -286
  646. package/dist/SchmancyElement-OWgz9ePG.js.map +0 -1
  647. package/dist/area-BiM7V2ns.js.map +0 -1
  648. package/dist/area-C7XjCoet.cjs +0 -21
  649. package/dist/area-C7XjCoet.cjs.map +0 -1
  650. package/dist/audio-CxO_j__6.js.map +0 -1
  651. package/dist/audio-xXFfMPCS.cjs.map +0 -1
  652. package/dist/autocomplete-DD7Hd59N.cjs +0 -115
  653. package/dist/autocomplete-DD7Hd59N.cjs.map +0 -1
  654. package/dist/autocomplete-DUBY9RtH.js.map +0 -1
  655. package/dist/busy-BjsO3y2A.js +0 -173
  656. package/dist/busy-BjsO3y2A.js.map +0 -1
  657. package/dist/busy-UbCGkTAi.cjs +0 -134
  658. package/dist/busy-UbCGkTAi.cjs.map +0 -1
  659. package/dist/button-BTpxQ1Kd.cjs.map +0 -1
  660. package/dist/button-D7QHfYf4.js.map +0 -1
  661. package/dist/card-DCdtJ5Dy.js.map +0 -1
  662. package/dist/card-rprhCYIC.cjs +0 -177
  663. package/dist/card-rprhCYIC.cjs.map +0 -1
  664. package/dist/chips-C5bpgWyf.js.map +0 -1
  665. package/dist/chips-DVes-BSz.cjs.map +0 -1
  666. package/dist/date-range-DDUuBlJ6.cjs +0 -142
  667. package/dist/date-range-DDUuBlJ6.cjs.map +0 -1
  668. package/dist/date-range-IPlbrhwW.js +0 -966
  669. package/dist/date-range-IPlbrhwW.js.map +0 -1
  670. package/dist/date-range-inline-DPqY9YYf.js.map +0 -1
  671. package/dist/date-range-inline-Dx4Reboo.cjs.map +0 -1
  672. package/dist/details-BnleHmYe.js.map +0 -1
  673. package/dist/details-Bx2jSJxG.cjs.map +0 -1
  674. package/dist/directives-CYf2fAdA.cjs.map +0 -1
  675. package/dist/directives-d1rEbW1A.js.map +0 -1
  676. package/dist/divider-CimQJVr3.cjs +0 -57
  677. package/dist/divider-CimQJVr3.cjs.map +0 -1
  678. package/dist/divider-Cr-rx3vA.js +0 -89
  679. package/dist/divider-Cr-rx3vA.js.map +0 -1
  680. package/dist/expand-DNrWuG_-.js.map +0 -1
  681. package/dist/expand-_cp8oBjp.cjs +0 -141
  682. package/dist/expand-_cp8oBjp.cjs.map +0 -1
  683. package/dist/form-CMgYSZ3y.js.map +0 -1
  684. package/dist/form-DaaAQd2A.cjs.map +0 -1
  685. package/dist/icons-C2RkSXjP.cjs +0 -24
  686. package/dist/icons-C2RkSXjP.cjs.map +0 -1
  687. package/dist/icons-mbpHO_73.js.map +0 -1
  688. package/dist/iframe-88SN5JPu.cjs.map +0 -1
  689. package/dist/iframe-U3P1DnQv.js.map +0 -1
  690. package/dist/input-BY4Korc5.cjs.map +0 -1
  691. package/dist/input-CPWvGjE4.js.map +0 -1
  692. package/dist/input-chip-CCZ3i3Sf.js.map +0 -1
  693. package/dist/input-chip-kytMdbaM.cjs +0 -146
  694. package/dist/input-chip-kytMdbaM.cjs.map +0 -1
  695. package/dist/layout-BhfC26Ks.cjs.map +0 -1
  696. package/dist/layout-DC0Npqu7.js.map +0 -1
  697. package/dist/lightbox-BSwWvDQc.js.map +0 -1
  698. package/dist/lightbox-KrZQH9w9.cjs.map +0 -1
  699. package/dist/list-BwGtAAfi.js.map +0 -1
  700. package/dist/list-DIs02A3d.cjs +0 -40
  701. package/dist/list-DIs02A3d.cjs.map +0 -1
  702. package/dist/menu-DX8d96x-.js.map +0 -1
  703. package/dist/menu-jT_yAk5V.cjs.map +0 -1
  704. package/dist/mixins-COeG4DiX.js.map +0 -1
  705. package/dist/mixins-XGVIOvKt.cjs.map +0 -1
  706. package/dist/notification-CAJVpLne.js.map +0 -1
  707. package/dist/notification-DO3VXceY.cjs.map +0 -1
  708. package/dist/option-BNo1Zs-l.cjs +0 -43
  709. package/dist/option-BNo1Zs-l.cjs.map +0 -1
  710. package/dist/option-JISY0wZJ.js.map +0 -1
  711. package/dist/overlay-B1jVf-ge.cjs.map +0 -1
  712. package/dist/overlay-CT-tMHDX.js.map +0 -1
  713. package/dist/overlay.confirm-body-Dn-Zgogx.js.map +0 -1
  714. package/dist/overlay.confirm-body-mYDYoJL8.cjs.map +0 -1
  715. package/dist/overlay.service-BQmva9GY.cjs.map +0 -1
  716. package/dist/overlay.service-yqTOyLlr.js.map +0 -1
  717. package/dist/progress-CGWozq_n.js.map +0 -1
  718. package/dist/progress-DOVJhsR0.cjs +0 -51
  719. package/dist/progress-DOVJhsR0.cjs.map +0 -1
  720. package/dist/radio-group-CXkq6qAF.js.map +0 -1
  721. package/dist/radio-group-DoSX5D2V.cjs.map +0 -1
  722. package/dist/select-CObZenqg.cjs +0 -56
  723. package/dist/select-CObZenqg.cjs.map +0 -1
  724. package/dist/select-CU90i50_.js.map +0 -1
  725. package/dist/sound.service-Qhr8nCeG.cjs.map +0 -1
  726. package/dist/sound.service-m8WjOhjn.js.map +0 -1
  727. package/dist/splash-screen-Ca6Ew8p6.cjs +0 -41
  728. package/dist/splash-screen-Ca6Ew8p6.cjs.map +0 -1
  729. package/dist/splash-screen-Cs3dbPN3.js.map +0 -1
  730. package/dist/src-CCVbLLgC.js.map +0 -1
  731. package/dist/src-CpftzdZV.cjs +0 -264
  732. package/dist/src-CpftzdZV.cjs.map +0 -1
  733. package/dist/state--x58-AuK.cjs.map +0 -1
  734. package/dist/state-QSwQ61sA.js.map +0 -1
  735. package/dist/surface-bTjOiq8n.cjs +0 -7
  736. package/dist/surface-bTjOiq8n.cjs.map +0 -1
  737. package/dist/surface-cqMsHJHM.js.map +0 -1
  738. package/dist/tabs-Dk9UDWpq.cjs.map +0 -1
  739. package/dist/tabs-Ib0Mh__1.js.map +0 -1
  740. package/dist/textarea-CcRsw08B.js.map +0 -1
  741. package/dist/textarea-Cntd9tfV.cjs.map +0 -1
  742. package/dist/theme.service-5RjyR7Sy.js.map +0 -1
  743. package/dist/theme.service-DA6KY52G.cjs.map +0 -1
  744. package/dist/typography-DeEYdMhW.js +0 -358
  745. package/dist/typography-DeEYdMhW.js.map +0 -1
  746. package/dist/typography-Tm7wSaB2.cjs +0 -282
  747. package/dist/typography-Tm7wSaB2.cjs.map +0 -1
  748. package/dist/utils-DTa3QHxk.cjs.map +0 -1
  749. package/dist/utils-H8wNknWC.js.map +0 -1
  750. package/dist/window-Db5ZYY6t.js.map +0 -1
  751. package/dist/window-oQqx5xqQ.cjs +0 -59
  752. package/dist/window-oQqx5xqQ.cjs.map +0 -1
  753. package/src/form/fields/date-range/date-range-presets.ts +0 -220
  754. package/src/form/fields/date-range/date-utils.ts +0 -58
  755. package/types/src/form/fields/date-range/date-range-presets.d.ts +0 -18
  756. package/types/src/form/fields/date-range/date-utils.d.ts +0 -15
  757. /package/dist/{hashContent-iRZJJWtE.cjs → hashContent--s09Ed_g.cjs} +0 -0
  758. /package/dist/{hashContent-BqU6v1Xr.js → hashContent-CAvrQ56N.js} +0 -0
  759. /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-4P2v57ke.cjs} +0 -0
  760. /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-JMFdgQSl.js} +0 -0
  761. /package/dist/{theme.interface-CSt7JUBD.cjs → theme.interface-B-qxDsZQ.cjs} +0 -0
  762. /package/dist/{theme.interface-odQEpZZH.js → theme.interface-B7caS5cg.js} +0 -0
  763. /package/dist/{utils-DTa3QHxk.cjs → utils-DIXndz6Q.cjs} +0 -0
  764. /package/dist/{utils-H8wNknWC.js → utils-dSPH7Oh9.js} +0 -0
@@ -30,53 +30,138 @@
30
30
 
31
31
  /** Happy / Pleasant feelings */
32
32
  export type HappyFeeling =
33
- | 'joyful' | 'content' | 'excited' | 'proud' | 'hopeful'
34
- | 'relieved' | 'grateful' | 'peaceful' | 'playful' | 'amused'
35
- | 'curious' | 'inspired' | 'confident' | 'loved' | 'comforted' | 'energized'
36
- | 'celebrated'
33
+ | 'joyful'
34
+ | 'content'
35
+ | 'excited'
36
+ | 'proud'
37
+ | 'hopeful'
38
+ | 'relieved'
39
+ | 'grateful'
40
+ | 'peaceful'
41
+ | 'playful'
42
+ | 'amused'
43
+ | 'curious'
44
+ | 'inspired'
45
+ | 'confident'
46
+ | 'loved'
47
+ | 'comforted'
48
+ | 'energized'
49
+ | 'celebrated'
37
50
 
38
51
  /** Sad / Low feelings */
39
52
  export type SadFeeling =
40
- | 'sad' | 'lonely' | 'disappointed' | 'heartbroken' | 'grieving'
41
- | 'hopeless' | 'empty' | 'discouraged' | 'melancholic' | 'homesick'
42
- | 'hurt' | 'miserable' | 'regretful' | 'ashamed' | 'inferior'
53
+ | 'sad'
54
+ | 'lonely'
55
+ | 'disappointed'
56
+ | 'heartbroken'
57
+ | 'grieving'
58
+ | 'hopeless'
59
+ | 'empty'
60
+ | 'discouraged'
61
+ | 'melancholic'
62
+ | 'homesick'
63
+ | 'hurt'
64
+ | 'miserable'
65
+ | 'regretful'
66
+ | 'ashamed'
67
+ | 'inferior'
43
68
 
44
69
  /** Anxious / Fearful feelings */
45
70
  export type AnxiousFeeling =
46
- | 'anxious' | 'worried' | 'afraid' | 'terrified' | 'panicked'
47
- | 'nervous' | 'uneasy' | 'insecure' | 'overwhelmed' | 'stressed'
48
- | 'tense' | 'apprehensive' | 'startled' | 'suspicious' | 'vulnerable'
71
+ | 'anxious'
72
+ | 'worried'
73
+ | 'afraid'
74
+ | 'terrified'
75
+ | 'panicked'
76
+ | 'nervous'
77
+ | 'uneasy'
78
+ | 'insecure'
79
+ | 'overwhelmed'
80
+ | 'stressed'
81
+ | 'tense'
82
+ | 'apprehensive'
83
+ | 'startled'
84
+ | 'suspicious'
85
+ | 'vulnerable'
49
86
 
50
87
  /** Angry / Frustrated feelings */
51
88
  export type AngryFeeling =
52
- | 'annoyed' | 'irritated' | 'frustrated' | 'angry' | 'enraged'
53
- | 'bitter' | 'resentful' | 'jealous' | 'envious' | 'indignant'
54
- | 'impatient' | 'hostile' | 'contemptuous'
89
+ | 'annoyed'
90
+ | 'irritated'
91
+ | 'frustrated'
92
+ | 'angry'
93
+ | 'enraged'
94
+ | 'bitter'
95
+ | 'resentful'
96
+ | 'jealous'
97
+ | 'envious'
98
+ | 'indignant'
99
+ | 'impatient'
100
+ | 'hostile'
101
+ | 'contemptuous'
55
102
 
56
103
  /** Tired / Drained feelings */
57
104
  export type TiredFeeling =
58
- | 'tired' | 'exhausted' | 'drained' | 'burnedOut' | 'numb'
59
- | 'bored' | 'unmotivated' | 'apathetic' | 'restless'
105
+ | 'tired'
106
+ | 'exhausted'
107
+ | 'drained'
108
+ | 'burnedOut'
109
+ | 'numb'
110
+ | 'bored'
111
+ | 'unmotivated'
112
+ | 'apathetic'
113
+ | 'restless'
60
114
 
61
115
  /** Calm / Grounded feelings */
62
116
  export type CalmFeeling =
63
- | 'calm' | 'relaxed' | 'atEase' | 'balanced' | 'stable'
64
- | 'secure' | 'safe' | 'centered' | 'grounded' | 'accepting'
117
+ | 'calm'
118
+ | 'relaxed'
119
+ | 'atEase'
120
+ | 'balanced'
121
+ | 'stable'
122
+ | 'secure'
123
+ | 'safe'
124
+ | 'centered'
125
+ | 'grounded'
126
+ | 'accepting'
65
127
 
66
128
  /** Connected / Social feelings */
67
129
  export type ConnectedFeeling =
68
- | 'connected' | 'accepted' | 'included' | 'belonging' | 'appreciated'
69
- | 'valued' | 'respected' | 'supported' | 'protective' | 'compassionate' | 'empathetic'
130
+ | 'connected'
131
+ | 'accepted'
132
+ | 'included'
133
+ | 'belonging'
134
+ | 'appreciated'
135
+ | 'valued'
136
+ | 'respected'
137
+ | 'supported'
138
+ | 'protective'
139
+ | 'compassionate'
140
+ | 'empathetic'
70
141
 
71
142
  /** Mixed / Complicated feelings */
72
143
  export type MixedFeeling =
73
- | 'conflicted' | 'confused' | 'ambivalent' | 'nostalgic' | 'guilty'
74
- | 'embarrassed' | 'surprised' | 'shocked' | 'awestruck' | 'skeptical'
144
+ | 'conflicted'
145
+ | 'confused'
146
+ | 'ambivalent'
147
+ | 'nostalgic'
148
+ | 'guilty'
149
+ | 'embarrassed'
150
+ | 'surprised'
151
+ | 'shocked'
152
+ | 'awestruck'
153
+ | 'skeptical'
75
154
 
76
155
  /** All feelings */
77
156
  export type Feeling =
78
- | HappyFeeling | SadFeeling | AnxiousFeeling | AngryFeeling
79
- | TiredFeeling | CalmFeeling | ConnectedFeeling | MixedFeeling
157
+ | HappyFeeling
158
+ | SadFeeling
159
+ | AnxiousFeeling
160
+ | AngryFeeling
161
+ | TiredFeeling
162
+ | CalmFeeling
163
+ | ConnectedFeeling
164
+ | MixedFeeling
80
165
 
81
166
  // FeelingCategory is defined in ../types/mood-audio.types.ts and re-exported
82
167
  // from ./index.ts — the canonical source.
@@ -90,842 +175,836 @@ export type Feeling =
90
175
  * Creates soft, beautiful sounds using Web Audio API
91
176
  */
92
177
  export class EmotionalSoundGenerator {
93
- private audioContext: AudioContext | null = null
94
- private volume = 0.15
95
- private muted = false
96
-
97
- private getContext(): AudioContext {
98
- if (!this.audioContext) {
99
- const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext
100
- this.audioContext = new AudioContextClass()
101
- }
102
- // Resume if suspended (autoplay policy)
103
- if (this.audioContext.state === 'suspended') {
104
- this.audioContext.resume()
105
- }
106
- return this.audioContext
107
- }
108
-
109
- // ==========================================================================
110
- // CORE SOUND PRIMITIVES
111
- // ==========================================================================
112
-
113
- /** Soft air puff - the foundation of our sound palette */
114
- private puff(startTime: number, duration: number, freq: number, vol: number): void {
115
- const ctx = this.getContext()
116
- const bufferSize = Math.floor(ctx.sampleRate * duration)
117
- const buffer = ctx.createBuffer(1, bufferSize, ctx.sampleRate)
118
- const data = buffer.getChannelData(0)
119
-
120
- for (let i = 0; i < bufferSize; i++) {
121
- data[i] = Math.random() * 2 - 1
122
- }
123
-
124
- const noise = ctx.createBufferSource()
125
- noise.buffer = buffer
126
-
127
- const filter = ctx.createBiquadFilter()
128
- filter.type = 'bandpass'
129
- filter.frequency.value = freq
130
- filter.Q.value = 0.7
131
-
132
- const gain = ctx.createGain()
133
- gain.gain.setValueAtTime(0, startTime)
134
- gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.015)
135
- gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)
136
-
137
- noise.connect(filter).connect(gain).connect(ctx.destination)
138
- noise.start(startTime)
139
- noise.stop(startTime + duration)
140
- }
141
-
142
- /** Gentle tone with envelope */
143
- private tone(
144
- startTime: number,
145
- duration: number,
146
- freq: number,
147
- vol: number,
148
- type: OscillatorType = 'sine',
149
- freqEnd?: number
150
- ): void {
151
- const ctx = this.getContext()
152
- const osc = ctx.createOscillator()
153
- const gain = ctx.createGain()
154
-
155
- osc.type = type
156
- osc.frequency.setValueAtTime(freq, startTime)
157
- if (freqEnd) {
158
- osc.frequency.exponentialRampToValueAtTime(freqEnd, startTime + duration * 0.8)
159
- }
160
-
161
- gain.gain.setValueAtTime(0, startTime)
162
- gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.02)
163
- gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)
164
-
165
- osc.connect(gain).connect(ctx.destination)
166
- osc.start(startTime)
167
- osc.stop(startTime + duration)
168
- }
169
-
170
- /** Warm filtered tone */
171
- private warmTone(
172
- startTime: number,
173
- duration: number,
174
- freq: number,
175
- vol: number,
176
- filterFreq = 800
177
- ): void {
178
- const ctx = this.getContext()
179
- const osc = ctx.createOscillator()
180
- const filter = ctx.createBiquadFilter()
181
- const gain = ctx.createGain()
182
-
183
- osc.type = 'sine'
184
- osc.frequency.value = freq
185
-
186
- filter.type = 'lowpass'
187
- filter.frequency.value = filterFreq
188
-
189
- gain.gain.setValueAtTime(0, startTime)
190
- gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.03)
191
- gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)
192
-
193
- osc.connect(filter).connect(gain).connect(ctx.destination)
194
- osc.start(startTime)
195
- osc.stop(startTime + duration)
196
- }
197
-
198
- /** Shimmer - multiple soft tones */
199
- private shimmer(startTime: number, duration: number, baseFreq: number, vol: number): void {
200
- const freqs = [baseFreq, baseFreq * 1.5, baseFreq * 2]
201
- freqs.forEach((f, i) => {
202
- this.tone(startTime + i * 0.02, duration - i * 0.02, f, vol * (1 - i * 0.2))
203
- })
204
- }
205
-
206
- // ==========================================================================
207
- // HAPPY / PLEASANT FEELINGS
208
- // ==========================================================================
209
-
210
- private playJoyful(): void {
211
- const ctx = this.getContext()
212
- const now = ctx.currentTime
213
-
214
- // Double puff (excited exhale)
215
- this.puff(now, 0.08, 3000, 0.3)
216
- this.puff(now + 0.06, 0.1, 3500, 0.35)
217
-
218
- // Rising happy tones
219
- this.tone(now + 0.02, 0.15, 784, 0.25) // G5
220
- this.tone(now + 0.1, 0.2, 988, 0.3) // B5
221
- this.tone(now + 0.18, 0.25, 1175, 0.25) // D6
222
- }
223
-
224
- private playContent(): void {
225
- const ctx = this.getContext()
226
- const now = ctx.currentTime
227
-
228
- // Gentle satisfied sigh
229
- this.puff(now, 0.2, 1500, 0.25)
230
- this.warmTone(now + 0.05, 0.3, 523, 0.2) // C5
231
- this.warmTone(now + 0.15, 0.35, 659, 0.15) // E5
232
- }
233
-
234
- private playExcited(): void {
235
- const ctx = this.getContext()
236
- const now = ctx.currentTime
237
-
238
- // Quick ascending puffs
239
- this.puff(now, 0.06, 2500, 0.25)
240
- this.puff(now + 0.05, 0.06, 3000, 0.3)
241
- this.puff(now + 0.1, 0.08, 3500, 0.35)
242
-
243
- // Sparkly ascending tones
244
- this.tone(now + 0.02, 0.12, 880, 0.2)
245
- this.tone(now + 0.08, 0.12, 1047, 0.25)
246
- this.tone(now + 0.14, 0.15, 1319, 0.3)
247
- }
248
-
249
- private playProud(): void {
250
- const ctx = this.getContext()
251
- const now = ctx.currentTime
252
-
253
- // Confident puff
254
- this.puff(now, 0.15, 1800, 0.3)
255
-
256
- // Strong rising chord
257
- this.tone(now + 0.05, 0.25, 523, 0.25) // C5
258
- this.tone(now + 0.08, 0.25, 659, 0.2) // E5
259
- this.tone(now + 0.11, 0.3, 784, 0.25) // G5
260
- }
261
-
262
- private playHopeful(): void {
263
- const ctx = this.getContext()
264
- const now = ctx.currentTime
265
-
266
- // Light ascending puff
267
- this.puff(now, 0.12, 2200, 0.2)
268
-
269
- // Gentle rising tone
270
- this.tone(now + 0.03, 0.3, 659, 0.2, 'sine', 880) // E5 -> A5
271
- }
272
-
273
- private playRelieved(): void {
274
- const ctx = this.getContext()
275
- const now = ctx.currentTime
276
-
277
- // Long exhale
278
- this.puff(now, 0.25, 1200, 0.35)
279
-
280
- // Descending release
281
- this.warmTone(now + 0.1, 0.35, 659, 0.2) // E5
282
- this.warmTone(now + 0.25, 0.4, 523, 0.15) // C5
283
- }
284
-
285
- private playGrateful(): void {
286
- const ctx = this.getContext()
287
- const now = ctx.currentTime
288
-
289
- // Warm gentle puff
290
- this.puff(now, 0.15, 1500, 0.25)
291
-
292
- // Warm embracing tones
293
- this.warmTone(now + 0.05, 0.3, 440, 0.2) // A4
294
- this.warmTone(now + 0.15, 0.35, 523, 0.2) // C5
295
- this.warmTone(now + 0.25, 0.4, 659, 0.15) // E5
296
- }
297
-
298
- private playPeaceful(): void {
299
- const ctx = this.getContext()
300
- const now = ctx.currentTime
301
-
302
- // Very soft puff
303
- this.puff(now, 0.3, 800, 0.15)
304
-
305
- // Gentle sustained tone
306
- this.warmTone(now + 0.1, 0.5, 392, 0.12, 500) // G4
307
- }
308
-
309
- private playPlayful(): void {
310
- const ctx = this.getContext()
311
- const now = ctx.currentTime
312
-
313
- // Bouncy puffs
314
- this.puff(now, 0.05, 2800, 0.2)
315
- this.puff(now + 0.08, 0.05, 3200, 0.25)
316
- this.puff(now + 0.14, 0.06, 2800, 0.2)
317
-
318
- // Playful tones
319
- this.tone(now + 0.03, 0.1, 784, 0.2)
320
- this.tone(now + 0.1, 0.08, 988, 0.25)
321
- this.tone(now + 0.16, 0.12, 784, 0.2)
322
- }
323
-
324
- private playAmused(): void {
325
- const ctx = this.getContext()
326
- const now = ctx.currentTime
327
-
328
- // Little chuckle puffs
329
- this.puff(now, 0.04, 2500, 0.2)
330
- this.puff(now + 0.06, 0.04, 2800, 0.22)
331
- this.puff(now + 0.11, 0.05, 2600, 0.18)
332
-
333
- // Amused tone
334
- this.tone(now + 0.05, 0.15, 880, 0.15)
335
- }
336
-
337
- private playCurious(): void {
338
- const ctx = this.getContext()
339
- const now = ctx.currentTime
340
-
341
- // Questioning puff
342
- this.puff(now, 0.1, 2000, 0.2)
343
-
344
- // Rising questioning tone
345
- this.tone(now + 0.03, 0.2, 659, 0.2, 'sine', 880) // E5 -> A5 (question)
346
- }
347
-
348
- private playInspired(): void {
349
- const ctx = this.getContext()
350
- const now = ctx.currentTime
351
-
352
- // Bright puff
353
- this.puff(now, 0.1, 2500, 0.25)
354
-
355
- // Ascending shimmer
356
- this.shimmer(now + 0.05, 0.3, 523, 0.2)
357
- }
358
-
359
- private playConfident(): void {
360
- const ctx = this.getContext()
361
- const now = ctx.currentTime
362
-
363
- // Solid puff
364
- this.puff(now, 0.12, 1500, 0.3)
178
+ private audioContext: AudioContext | null = null
179
+ private volume = 0.15
180
+ private muted = false
181
+
182
+ private getContext(): AudioContext {
183
+ if (!this.audioContext) {
184
+ const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext
185
+ this.audioContext = new AudioContextClass()
186
+ }
187
+ // Resume if suspended (autoplay policy)
188
+ if (this.audioContext.state === 'suspended') {
189
+ this.audioContext.resume()
190
+ }
191
+ return this.audioContext
192
+ }
193
+
194
+ // ==========================================================================
195
+ // CORE SOUND PRIMITIVES
196
+ // ==========================================================================
197
+
198
+ /** Soft air puff - the foundation of our sound palette */
199
+ private puff(startTime: number, duration: number, freq: number, vol: number): void {
200
+ const ctx = this.getContext()
201
+ const bufferSize = Math.floor(ctx.sampleRate * duration)
202
+ const buffer = ctx.createBuffer(1, bufferSize, ctx.sampleRate)
203
+ const data = buffer.getChannelData(0)
204
+
205
+ for (let i = 0; i < bufferSize; i++) {
206
+ data[i] = Math.random() * 2 - 1
207
+ }
208
+
209
+ const noise = ctx.createBufferSource()
210
+ noise.buffer = buffer
211
+
212
+ const filter = ctx.createBiquadFilter()
213
+ filter.type = 'bandpass'
214
+ filter.frequency.value = freq
215
+ filter.Q.value = 0.7
216
+
217
+ const gain = ctx.createGain()
218
+ gain.gain.setValueAtTime(0, startTime)
219
+ gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.015)
220
+ gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)
221
+
222
+ noise.connect(filter).connect(gain).connect(ctx.destination)
223
+ noise.start(startTime)
224
+ noise.stop(startTime + duration)
225
+ }
226
+
227
+ /** Gentle tone with envelope */
228
+ private tone(
229
+ startTime: number,
230
+ duration: number,
231
+ freq: number,
232
+ vol: number,
233
+ type: OscillatorType = 'sine',
234
+ freqEnd?: number,
235
+ ): void {
236
+ const ctx = this.getContext()
237
+ const osc = ctx.createOscillator()
238
+ const gain = ctx.createGain()
239
+
240
+ osc.type = type
241
+ osc.frequency.setValueAtTime(freq, startTime)
242
+ if (freqEnd) {
243
+ osc.frequency.exponentialRampToValueAtTime(freqEnd, startTime + duration * 0.8)
244
+ }
245
+
246
+ gain.gain.setValueAtTime(0, startTime)
247
+ gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.02)
248
+ gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)
249
+
250
+ osc.connect(gain).connect(ctx.destination)
251
+ osc.start(startTime)
252
+ osc.stop(startTime + duration)
253
+ }
254
+
255
+ /** Warm filtered tone */
256
+ private warmTone(startTime: number, duration: number, freq: number, vol: number, filterFreq = 800): void {
257
+ const ctx = this.getContext()
258
+ const osc = ctx.createOscillator()
259
+ const filter = ctx.createBiquadFilter()
260
+ const gain = ctx.createGain()
261
+
262
+ osc.type = 'sine'
263
+ osc.frequency.value = freq
264
+
265
+ filter.type = 'lowpass'
266
+ filter.frequency.value = filterFreq
267
+
268
+ gain.gain.setValueAtTime(0, startTime)
269
+ gain.gain.linearRampToValueAtTime(vol * this.volume, startTime + 0.03)
270
+ gain.gain.exponentialRampToValueAtTime(0.001, startTime + duration)
271
+
272
+ osc.connect(filter).connect(gain).connect(ctx.destination)
273
+ osc.start(startTime)
274
+ osc.stop(startTime + duration)
275
+ }
276
+
277
+ /** Shimmer - multiple soft tones */
278
+ private shimmer(startTime: number, duration: number, baseFreq: number, vol: number): void {
279
+ const freqs = [baseFreq, baseFreq * 1.5, baseFreq * 2]
280
+ freqs.forEach((f, i) => {
281
+ this.tone(startTime + i * 0.02, duration - i * 0.02, f, vol * (1 - i * 0.2))
282
+ })
283
+ }
284
+
285
+ // ==========================================================================
286
+ // HAPPY / PLEASANT FEELINGS
287
+ // ==========================================================================
288
+
289
+ private playJoyful(): void {
290
+ const ctx = this.getContext()
291
+ const now = ctx.currentTime
292
+
293
+ // Double puff (excited exhale)
294
+ this.puff(now, 0.08, 3000, 0.3)
295
+ this.puff(now + 0.06, 0.1, 3500, 0.35)
296
+
297
+ // Rising happy tones
298
+ this.tone(now + 0.02, 0.15, 784, 0.25) // G5
299
+ this.tone(now + 0.1, 0.2, 988, 0.3) // B5
300
+ this.tone(now + 0.18, 0.25, 1175, 0.25) // D6
301
+ }
302
+
303
+ private playContent(): void {
304
+ const ctx = this.getContext()
305
+ const now = ctx.currentTime
306
+
307
+ // Gentle satisfied sigh
308
+ this.puff(now, 0.2, 1500, 0.25)
309
+ this.warmTone(now + 0.05, 0.3, 523, 0.2) // C5
310
+ this.warmTone(now + 0.15, 0.35, 659, 0.15) // E5
311
+ }
312
+
313
+ private playExcited(): void {
314
+ const ctx = this.getContext()
315
+ const now = ctx.currentTime
316
+
317
+ // Quick ascending puffs
318
+ this.puff(now, 0.06, 2500, 0.25)
319
+ this.puff(now + 0.05, 0.06, 3000, 0.3)
320
+ this.puff(now + 0.1, 0.08, 3500, 0.35)
321
+
322
+ // Sparkly ascending tones
323
+ this.tone(now + 0.02, 0.12, 880, 0.2)
324
+ this.tone(now + 0.08, 0.12, 1047, 0.25)
325
+ this.tone(now + 0.14, 0.15, 1319, 0.3)
326
+ }
327
+
328
+ private playProud(): void {
329
+ const ctx = this.getContext()
330
+ const now = ctx.currentTime
331
+
332
+ // Confident puff
333
+ this.puff(now, 0.15, 1800, 0.3)
334
+
335
+ // Strong rising chord
336
+ this.tone(now + 0.05, 0.25, 523, 0.25) // C5
337
+ this.tone(now + 0.08, 0.25, 659, 0.2) // E5
338
+ this.tone(now + 0.11, 0.3, 784, 0.25) // G5
339
+ }
340
+
341
+ private playHopeful(): void {
342
+ const ctx = this.getContext()
343
+ const now = ctx.currentTime
344
+
345
+ // Light ascending puff
346
+ this.puff(now, 0.12, 2200, 0.2)
347
+
348
+ // Gentle rising tone
349
+ this.tone(now + 0.03, 0.3, 659, 0.2, 'sine', 880) // E5 -> A5
350
+ }
351
+
352
+ private playRelieved(): void {
353
+ const ctx = this.getContext()
354
+ const now = ctx.currentTime
355
+
356
+ // Long exhale
357
+ this.puff(now, 0.25, 1200, 0.35)
358
+
359
+ // Descending release
360
+ this.warmTone(now + 0.1, 0.35, 659, 0.2) // E5
361
+ this.warmTone(now + 0.25, 0.4, 523, 0.15) // C5
362
+ }
363
+
364
+ private playGrateful(): void {
365
+ const ctx = this.getContext()
366
+ const now = ctx.currentTime
367
+
368
+ // Warm gentle puff
369
+ this.puff(now, 0.15, 1500, 0.25)
370
+
371
+ // Warm embracing tones
372
+ this.warmTone(now + 0.05, 0.3, 440, 0.2) // A4
373
+ this.warmTone(now + 0.15, 0.35, 523, 0.2) // C5
374
+ this.warmTone(now + 0.25, 0.4, 659, 0.15) // E5
375
+ }
376
+
377
+ private playPeaceful(): void {
378
+ const ctx = this.getContext()
379
+ const now = ctx.currentTime
380
+
381
+ // Very soft puff
382
+ this.puff(now, 0.3, 800, 0.15)
383
+
384
+ // Gentle sustained tone
385
+ this.warmTone(now + 0.1, 0.5, 392, 0.12, 500) // G4
386
+ }
387
+
388
+ private playPlayful(): void {
389
+ const ctx = this.getContext()
390
+ const now = ctx.currentTime
391
+
392
+ // Bouncy puffs
393
+ this.puff(now, 0.05, 2800, 0.2)
394
+ this.puff(now + 0.08, 0.05, 3200, 0.25)
395
+ this.puff(now + 0.14, 0.06, 2800, 0.2)
396
+
397
+ // Playful tones
398
+ this.tone(now + 0.03, 0.1, 784, 0.2)
399
+ this.tone(now + 0.1, 0.08, 988, 0.25)
400
+ this.tone(now + 0.16, 0.12, 784, 0.2)
401
+ }
402
+
403
+ private playAmused(): void {
404
+ const ctx = this.getContext()
405
+ const now = ctx.currentTime
406
+
407
+ // Little chuckle puffs
408
+ this.puff(now, 0.04, 2500, 0.2)
409
+ this.puff(now + 0.06, 0.04, 2800, 0.22)
410
+ this.puff(now + 0.11, 0.05, 2600, 0.18)
411
+
412
+ // Amused tone
413
+ this.tone(now + 0.05, 0.15, 880, 0.15)
414
+ }
415
+
416
+ private playCurious(): void {
417
+ const ctx = this.getContext()
418
+ const now = ctx.currentTime
419
+
420
+ // Questioning puff
421
+ this.puff(now, 0.1, 2000, 0.2)
422
+
423
+ // Rising questioning tone
424
+ this.tone(now + 0.03, 0.2, 659, 0.2, 'sine', 880) // E5 -> A5 (question)
425
+ }
426
+
427
+ private playInspired(): void {
428
+ const ctx = this.getContext()
429
+ const now = ctx.currentTime
430
+
431
+ // Bright puff
432
+ this.puff(now, 0.1, 2500, 0.25)
433
+
434
+ // Ascending shimmer
435
+ this.shimmer(now + 0.05, 0.3, 523, 0.2)
436
+ }
437
+
438
+ private playConfident(): void {
439
+ const ctx = this.getContext()
440
+ const now = ctx.currentTime
441
+
442
+ // Solid puff
443
+ this.puff(now, 0.12, 1500, 0.3)
365
444
 
366
- // Strong chord
367
- this.tone(now + 0.04, 0.2, 523, 0.25) // C5
368
- this.tone(now + 0.06, 0.22, 659, 0.2) // E5
369
- }
445
+ // Strong chord
446
+ this.tone(now + 0.04, 0.2, 523, 0.25) // C5
447
+ this.tone(now + 0.06, 0.22, 659, 0.2) // E5
448
+ }
370
449
 
371
- private playLoved(): void {
372
- const ctx = this.getContext()
373
- const now = ctx.currentTime
374
-
375
- // Warm embrace puff
376
- this.puff(now, 0.2, 1000, 0.2)
377
-
378
- // Warm loving tones
379
- this.warmTone(now + 0.08, 0.4, 392, 0.18, 600) // G4
380
- this.warmTone(now + 0.2, 0.45, 494, 0.15, 600) // B4
381
- }
382
-
383
- private playComforted(): void {
384
- const ctx = this.getContext()
385
- const now = ctx.currentTime
386
-
387
- // Soft blanket puff
388
- this.puff(now, 0.25, 900, 0.18)
389
-
390
- // Gentle descending comfort
391
- this.warmTone(now + 0.1, 0.35, 523, 0.15) // C5
392
- this.warmTone(now + 0.25, 0.4, 440, 0.12) // A4
393
- }
394
-
395
- private playEnergized(): void {
396
- const ctx = this.getContext()
397
- const now = ctx.currentTime
398
-
399
- // Quick energetic puffs
400
- this.puff(now, 0.05, 3000, 0.25)
401
- this.puff(now + 0.04, 0.05, 3500, 0.28)
402
-
403
- // Bright ascending tones
404
- this.tone(now + 0.02, 0.1, 784, 0.2)
405
- this.tone(now + 0.08, 0.12, 988, 0.25)
406
- this.tone(now + 0.14, 0.15, 1175, 0.22)
407
- }
408
-
409
- private playCelebrated(): void {
410
- const ctx = this.getContext()
411
- const now = ctx.currentTime
412
-
413
- // Bright celebratory chime
414
- this.puff(now, 0.08, 2500, 0.2)
415
-
416
- // Triumphant ascending arpeggio (C major -> resolve)
417
- this.tone(now + 0.02, 0.18, 523, 0.22) // C5
418
- this.tone(now + 0.08, 0.18, 659, 0.24) // E5
419
- this.tone(now + 0.14, 0.2, 784, 0.26) // G5
420
- this.tone(now + 0.22, 0.3, 1047, 0.22) // C6 - resolution
450
+ private playLoved(): void {
451
+ const ctx = this.getContext()
452
+ const now = ctx.currentTime
453
+
454
+ // Warm embrace puff
455
+ this.puff(now, 0.2, 1000, 0.2)
456
+
457
+ // Warm loving tones
458
+ this.warmTone(now + 0.08, 0.4, 392, 0.18, 600) // G4
459
+ this.warmTone(now + 0.2, 0.45, 494, 0.15, 600) // B4
460
+ }
461
+
462
+ private playComforted(): void {
463
+ const ctx = this.getContext()
464
+ const now = ctx.currentTime
465
+
466
+ // Soft blanket puff
467
+ this.puff(now, 0.25, 900, 0.18)
468
+
469
+ // Gentle descending comfort
470
+ this.warmTone(now + 0.1, 0.35, 523, 0.15) // C5
471
+ this.warmTone(now + 0.25, 0.4, 440, 0.12) // A4
472
+ }
473
+
474
+ private playEnergized(): void {
475
+ const ctx = this.getContext()
476
+ const now = ctx.currentTime
477
+
478
+ // Quick energetic puffs
479
+ this.puff(now, 0.05, 3000, 0.25)
480
+ this.puff(now + 0.04, 0.05, 3500, 0.28)
481
+
482
+ // Bright ascending tones
483
+ this.tone(now + 0.02, 0.1, 784, 0.2)
484
+ this.tone(now + 0.08, 0.12, 988, 0.25)
485
+ this.tone(now + 0.14, 0.15, 1175, 0.22)
486
+ }
487
+
488
+ private playCelebrated(): void {
489
+ const ctx = this.getContext()
490
+ const now = ctx.currentTime
491
+
492
+ // Bright celebratory chime
493
+ this.puff(now, 0.08, 2500, 0.2)
494
+
495
+ // Triumphant ascending arpeggio (C major -> resolve)
496
+ this.tone(now + 0.02, 0.18, 523, 0.22) // C5
497
+ this.tone(now + 0.08, 0.18, 659, 0.24) // E5
498
+ this.tone(now + 0.14, 0.2, 784, 0.26) // G5
499
+ this.tone(now + 0.22, 0.3, 1047, 0.22) // C6 - resolution
421
500
 
422
- // Warm shimmer on resolution
423
- this.shimmer(now + 0.25, 0.35, 523, 0.12)
424
- }
501
+ // Warm shimmer on resolution
502
+ this.shimmer(now + 0.25, 0.35, 523, 0.12)
503
+ }
425
504
 
426
- // ==========================================================================
427
- // SAD / LOW FEELINGS
428
- // ==========================================================================
429
-
430
- private playSad(): void {
431
- const ctx = this.getContext()
432
- const now = ctx.currentTime
433
-
434
- // Heavy sigh
435
- this.puff(now, 0.3, 600, 0.25)
505
+ // ==========================================================================
506
+ // SAD / LOW FEELINGS
507
+ // ==========================================================================
508
+
509
+ private playSad(): void {
510
+ const ctx = this.getContext()
511
+ const now = ctx.currentTime
512
+
513
+ // Heavy sigh
514
+ this.puff(now, 0.3, 600, 0.25)
436
515
 
437
- // Descending sad tone
438
- this.warmTone(now + 0.1, 0.4, 392, 0.2, 400) // G4
439
- this.warmTone(now + 0.3, 0.45, 294, 0.15, 350) // D4
440
- }
516
+ // Descending sad tone
517
+ this.warmTone(now + 0.1, 0.4, 392, 0.2, 400) // G4
518
+ this.warmTone(now + 0.3, 0.45, 294, 0.15, 350) // D4
519
+ }
441
520
 
442
- private playLonely(): void {
443
- const ctx = this.getContext()
444
- const now = ctx.currentTime
445
-
446
- // Single isolated puff
447
- this.puff(now, 0.2, 700, 0.2)
448
-
449
- // Sparse, distant tone
450
- this.warmTone(now + 0.15, 0.5, 330, 0.12, 450) // E4
451
- }
452
-
453
- private playDisappointed(): void {
454
- const ctx = this.getContext()
455
- const now = ctx.currentTime
456
-
457
- // Deflating puff
458
- this.puff(now, 0.25, 800, 0.25)
459
-
460
- // Falling tone
461
- this.tone(now + 0.08, 0.3, 523, 0.18, 'sine', 349) // C5 -> F4
462
- }
463
-
464
- private playMelancholic(): void {
465
- const ctx = this.getContext()
466
- const now = ctx.currentTime
467
-
468
- // Wistful puff
469
- this.puff(now, 0.3, 700, 0.18)
521
+ private playLonely(): void {
522
+ const ctx = this.getContext()
523
+ const now = ctx.currentTime
524
+
525
+ // Single isolated puff
526
+ this.puff(now, 0.2, 700, 0.2)
527
+
528
+ // Sparse, distant tone
529
+ this.warmTone(now + 0.15, 0.5, 330, 0.12, 450) // E4
530
+ }
531
+
532
+ private playDisappointed(): void {
533
+ const ctx = this.getContext()
534
+ const now = ctx.currentTime
535
+
536
+ // Deflating puff
537
+ this.puff(now, 0.25, 800, 0.25)
538
+
539
+ // Falling tone
540
+ this.tone(now + 0.08, 0.3, 523, 0.18, 'sine', 349) // C5 -> F4
541
+ }
542
+
543
+ private playMelancholic(): void {
544
+ const ctx = this.getContext()
545
+ const now = ctx.currentTime
546
+
547
+ // Wistful puff
548
+ this.puff(now, 0.3, 700, 0.18)
470
549
 
471
- // Bittersweet tones
472
- this.warmTone(now + 0.1, 0.45, 440, 0.15, 500) // A4
473
- this.warmTone(now + 0.3, 0.5, 392, 0.12, 450) // G4
474
- }
475
-
476
- // ==========================================================================
477
- // ANXIOUS / FEARFUL FEELINGS
478
- // ==========================================================================
479
-
480
- private playAnxious(): void {
481
- const ctx = this.getContext()
482
- const now = ctx.currentTime
483
-
484
- // Tight, quick puffs
485
- this.puff(now, 0.08, 1800, 0.2)
486
- this.puff(now + 0.12, 0.08, 1900, 0.22)
487
-
488
- // Uncertain wobble
489
- const osc = ctx.createOscillator()
490
- const gain = ctx.createGain()
491
- const lfo = ctx.createOscillator()
492
- const lfoGain = ctx.createGain()
493
-
494
- osc.frequency.value = 440
495
- lfo.frequency.value = 8
496
- lfoGain.gain.value = 20
550
+ // Bittersweet tones
551
+ this.warmTone(now + 0.1, 0.45, 440, 0.15, 500) // A4
552
+ this.warmTone(now + 0.3, 0.5, 392, 0.12, 450) // G4
553
+ }
554
+
555
+ // ==========================================================================
556
+ // ANXIOUS / FEARFUL FEELINGS
557
+ // ==========================================================================
558
+
559
+ private playAnxious(): void {
560
+ const ctx = this.getContext()
561
+ const now = ctx.currentTime
562
+
563
+ // Tight, quick puffs
564
+ this.puff(now, 0.08, 1800, 0.2)
565
+ this.puff(now + 0.12, 0.08, 1900, 0.22)
566
+
567
+ // Uncertain wobble
568
+ const osc = ctx.createOscillator()
569
+ const gain = ctx.createGain()
570
+ const lfo = ctx.createOscillator()
571
+ const lfoGain = ctx.createGain()
572
+
573
+ osc.frequency.value = 440
574
+ lfo.frequency.value = 8
575
+ lfoGain.gain.value = 20
497
576
 
498
- lfo.connect(lfoGain).connect(osc.frequency)
499
-
500
- gain.gain.setValueAtTime(0, now)
501
- gain.gain.linearRampToValueAtTime(this.volume * 0.15, now + 0.03)
502
- gain.gain.exponentialRampToValueAtTime(0.001, now + 0.25)
503
-
504
- osc.connect(gain).connect(ctx.destination)
505
- lfo.start(now)
506
- osc.start(now)
507
- osc.stop(now + 0.3)
508
- lfo.stop(now + 0.3)
509
- }
577
+ lfo.connect(lfoGain).connect(osc.frequency)
578
+
579
+ gain.gain.setValueAtTime(0, now)
580
+ gain.gain.linearRampToValueAtTime(this.volume * 0.15, now + 0.03)
581
+ gain.gain.exponentialRampToValueAtTime(0.001, now + 0.25)
582
+
583
+ osc.connect(gain).connect(ctx.destination)
584
+ lfo.start(now)
585
+ osc.start(now)
586
+ osc.stop(now + 0.3)
587
+ lfo.stop(now + 0.3)
588
+ }
510
589
 
511
- private playWorried(): void {
512
- const ctx = this.getContext()
513
- const now = ctx.currentTime
590
+ private playWorried(): void {
591
+ const ctx = this.getContext()
592
+ const now = ctx.currentTime
514
593
 
515
- // Hesitant puff
516
- this.puff(now, 0.15, 1200, 0.2)
594
+ // Hesitant puff
595
+ this.puff(now, 0.15, 1200, 0.2)
517
596
 
518
- // Minor questioning tone
519
- this.tone(now + 0.05, 0.25, 349, 0.15, 'sine', 392) // F4 -> G4 (uncertain)
520
- }
597
+ // Minor questioning tone
598
+ this.tone(now + 0.05, 0.25, 349, 0.15, 'sine', 392) // F4 -> G4 (uncertain)
599
+ }
521
600
 
522
- private playNervous(): void {
523
- const ctx = this.getContext()
524
- const now = ctx.currentTime
601
+ private playNervous(): void {
602
+ const ctx = this.getContext()
603
+ const now = ctx.currentTime
525
604
 
526
- // Quick shallow puffs
527
- this.puff(now, 0.05, 2000, 0.18)
528
- this.puff(now + 0.08, 0.05, 2100, 0.18)
529
- this.puff(now + 0.15, 0.06, 2000, 0.16)
605
+ // Quick shallow puffs
606
+ this.puff(now, 0.05, 2000, 0.18)
607
+ this.puff(now + 0.08, 0.05, 2100, 0.18)
608
+ this.puff(now + 0.15, 0.06, 2000, 0.16)
530
609
 
531
- // Trembling tone
532
- this.tone(now + 0.04, 0.2, 494, 0.12) // B4
533
- }
610
+ // Trembling tone
611
+ this.tone(now + 0.04, 0.2, 494, 0.12) // B4
612
+ }
534
613
 
535
- private playStartled(): void {
536
- const ctx = this.getContext()
537
- const now = ctx.currentTime
614
+ private playStartled(): void {
615
+ const ctx = this.getContext()
616
+ const now = ctx.currentTime
538
617
 
539
- // Quick sharp puff
540
- this.puff(now, 0.04, 3500, 0.3)
618
+ // Quick sharp puff
619
+ this.puff(now, 0.04, 3500, 0.3)
541
620
 
542
- // Quick high tone
543
- this.tone(now, 0.08, 1047, 0.25) // C6
544
- this.tone(now + 0.05, 0.15, 880, 0.15) // A5
545
- }
621
+ // Quick high tone
622
+ this.tone(now, 0.08, 1047, 0.25) // C6
623
+ this.tone(now + 0.05, 0.15, 880, 0.15) // A5
624
+ }
546
625
 
547
- // ==========================================================================
548
- // ANGRY / FRUSTRATED FEELINGS
549
- // ==========================================================================
626
+ // ==========================================================================
627
+ // ANGRY / FRUSTRATED FEELINGS
628
+ // ==========================================================================
550
629
 
551
- private playAnnoyed(): void {
552
- const ctx = this.getContext()
553
- const now = ctx.currentTime
630
+ private playAnnoyed(): void {
631
+ const ctx = this.getContext()
632
+ const now = ctx.currentTime
554
633
 
555
- // Short frustrated puff
556
- this.puff(now, 0.1, 1000, 0.25)
634
+ // Short frustrated puff
635
+ this.puff(now, 0.1, 1000, 0.25)
557
636
 
558
- // Low rumble
559
- this.warmTone(now + 0.03, 0.2, 294, 0.18, 400) // D4
560
- }
637
+ // Low rumble
638
+ this.warmTone(now + 0.03, 0.2, 294, 0.18, 400) // D4
639
+ }
561
640
 
562
- private playFrustrated(): void {
563
- const ctx = this.getContext()
564
- const now = ctx.currentTime
641
+ private playFrustrated(): void {
642
+ const ctx = this.getContext()
643
+ const now = ctx.currentTime
565
644
 
566
- // Tense puff
567
- this.puff(now, 0.12, 900, 0.28)
645
+ // Tense puff
646
+ this.puff(now, 0.12, 900, 0.28)
568
647
 
569
- // Blocked feeling
570
- this.tone(now + 0.04, 0.15, 349, 0.2) // F4
571
- this.tone(now + 0.12, 0.12, 330, 0.18) // E4
572
- }
648
+ // Blocked feeling
649
+ this.tone(now + 0.04, 0.15, 349, 0.2) // F4
650
+ this.tone(now + 0.12, 0.12, 330, 0.18) // E4
651
+ }
573
652
 
574
- private playImpatient(): void {
575
- const ctx = this.getContext()
576
- const now = ctx.currentTime
653
+ private playImpatient(): void {
654
+ const ctx = this.getContext()
655
+ const now = ctx.currentTime
577
656
 
578
- // Quick tapping puffs
579
- this.puff(now, 0.04, 1500, 0.2)
580
- this.puff(now + 0.08, 0.04, 1500, 0.2)
581
- this.puff(now + 0.16, 0.04, 1500, 0.22)
657
+ // Quick tapping puffs
658
+ this.puff(now, 0.04, 1500, 0.2)
659
+ this.puff(now + 0.08, 0.04, 1500, 0.2)
660
+ this.puff(now + 0.16, 0.04, 1500, 0.22)
582
661
 
583
- // Urgent tone
584
- this.tone(now + 0.06, 0.1, 523, 0.15)
585
- }
662
+ // Urgent tone
663
+ this.tone(now + 0.06, 0.1, 523, 0.15)
664
+ }
586
665
 
587
- // ==========================================================================
588
- // TIRED / DRAINED FEELINGS
589
- // ==========================================================================
666
+ // ==========================================================================
667
+ // TIRED / DRAINED FEELINGS
668
+ // ==========================================================================
590
669
 
591
- private playTired(): void {
592
- const ctx = this.getContext()
593
- const now = ctx.currentTime
670
+ private playTired(): void {
671
+ const ctx = this.getContext()
672
+ const now = ctx.currentTime
594
673
 
595
- // Heavy slow puff
596
- this.puff(now, 0.35, 500, 0.2)
674
+ // Heavy slow puff
675
+ this.puff(now, 0.35, 500, 0.2)
597
676
 
598
- // Drooping tone
599
- this.warmTone(now + 0.1, 0.4, 330, 0.12, 350) // E4
600
- }
677
+ // Drooping tone
678
+ this.warmTone(now + 0.1, 0.4, 330, 0.12, 350) // E4
679
+ }
601
680
 
602
- private playExhausted(): void {
603
- const ctx = this.getContext()
604
- const now = ctx.currentTime
681
+ private playExhausted(): void {
682
+ const ctx = this.getContext()
683
+ const now = ctx.currentTime
605
684
 
606
- // Very slow, heavy exhale
607
- this.puff(now, 0.45, 400, 0.18)
685
+ // Very slow, heavy exhale
686
+ this.puff(now, 0.45, 400, 0.18)
608
687
 
609
- // Descending fade
610
- this.warmTone(now + 0.15, 0.5, 294, 0.1, 300) // D4
611
- }
688
+ // Descending fade
689
+ this.warmTone(now + 0.15, 0.5, 294, 0.1, 300) // D4
690
+ }
612
691
 
613
- private playBored(): void {
614
- const ctx = this.getContext()
615
- const now = ctx.currentTime
692
+ private playBored(): void {
693
+ const ctx = this.getContext()
694
+ const now = ctx.currentTime
616
695
 
617
- // Flat sigh
618
- this.puff(now, 0.25, 600, 0.15)
696
+ // Flat sigh
697
+ this.puff(now, 0.25, 600, 0.15)
619
698
 
620
- // Monotone
621
- this.warmTone(now + 0.1, 0.3, 349, 0.1, 400) // F4
622
- }
699
+ // Monotone
700
+ this.warmTone(now + 0.1, 0.3, 349, 0.1, 400) // F4
701
+ }
623
702
 
624
- // ==========================================================================
625
- // CALM / GROUNDED FEELINGS
626
- // ==========================================================================
703
+ // ==========================================================================
704
+ // CALM / GROUNDED FEELINGS
705
+ // ==========================================================================
627
706
 
628
- private playCalm(): void {
629
- const ctx = this.getContext()
630
- const now = ctx.currentTime
707
+ private playCalm(): void {
708
+ const ctx = this.getContext()
709
+ const now = ctx.currentTime
631
710
 
632
- // Slow, peaceful puff
633
- this.puff(now, 0.3, 600, 0.12)
711
+ // Slow, peaceful puff
712
+ this.puff(now, 0.3, 600, 0.12)
634
713
 
635
- // Sustained gentle tone
636
- this.warmTone(now + 0.1, 0.5, 392, 0.1, 500) // G4
637
- }
714
+ // Sustained gentle tone
715
+ this.warmTone(now + 0.1, 0.5, 392, 0.1, 500) // G4
716
+ }
638
717
 
639
- private playRelaxed(): void {
640
- const ctx = this.getContext()
641
- const now = ctx.currentTime
718
+ private playRelaxed(): void {
719
+ const ctx = this.getContext()
720
+ const now = ctx.currentTime
642
721
 
643
- // Long soft exhale
644
- this.puff(now, 0.35, 700, 0.15)
722
+ // Long soft exhale
723
+ this.puff(now, 0.35, 700, 0.15)
645
724
 
646
- // Gentle descending
647
- this.warmTone(now + 0.15, 0.45, 440, 0.1) // A4
648
- this.warmTone(now + 0.35, 0.5, 392, 0.08) // G4
649
- }
725
+ // Gentle descending
726
+ this.warmTone(now + 0.15, 0.45, 440, 0.1) // A4
727
+ this.warmTone(now + 0.35, 0.5, 392, 0.08) // G4
728
+ }
650
729
 
651
- private playGrounded(): void {
652
- const ctx = this.getContext()
653
- const now = ctx.currentTime
730
+ private playGrounded(): void {
731
+ const ctx = this.getContext()
732
+ const now = ctx.currentTime
654
733
 
655
- // Deep centered puff
656
- this.puff(now, 0.25, 500, 0.2)
734
+ // Deep centered puff
735
+ this.puff(now, 0.25, 500, 0.2)
657
736
 
658
- // Low stable tone
659
- this.warmTone(now + 0.1, 0.4, 262, 0.15, 350) // C4
660
- }
737
+ // Low stable tone
738
+ this.warmTone(now + 0.1, 0.4, 262, 0.15, 350) // C4
739
+ }
661
740
 
662
- private playSafe(): void {
663
- const ctx = this.getContext()
664
- const now = ctx.currentTime
741
+ private playSafe(): void {
742
+ const ctx = this.getContext()
743
+ const now = ctx.currentTime
665
744
 
666
- // Soft enveloping puff
667
- this.puff(now, 0.3, 700, 0.15)
745
+ // Soft enveloping puff
746
+ this.puff(now, 0.3, 700, 0.15)
668
747
 
669
- // Warm embracing tones
670
- this.warmTone(now + 0.1, 0.4, 349, 0.12) // F4
671
- this.warmTone(now + 0.25, 0.45, 440, 0.1) // A4
672
- }
748
+ // Warm embracing tones
749
+ this.warmTone(now + 0.1, 0.4, 349, 0.12) // F4
750
+ this.warmTone(now + 0.25, 0.45, 440, 0.1) // A4
751
+ }
673
752
 
674
- // ==========================================================================
675
- // CONNECTED / SOCIAL FEELINGS
676
- // ==========================================================================
753
+ // ==========================================================================
754
+ // CONNECTED / SOCIAL FEELINGS
755
+ // ==========================================================================
677
756
 
678
- private playConnected(): void {
679
- const ctx = this.getContext()
680
- const now = ctx.currentTime
757
+ private playConnected(): void {
758
+ const ctx = this.getContext()
759
+ const now = ctx.currentTime
681
760
 
682
- // Warm shared breath
683
- this.puff(now, 0.2, 1200, 0.18)
761
+ // Warm shared breath
762
+ this.puff(now, 0.2, 1200, 0.18)
684
763
 
685
- // Harmonious tones
686
- this.warmTone(now + 0.08, 0.3, 440, 0.15) // A4
687
- this.warmTone(now + 0.12, 0.32, 523, 0.12) // C5
688
- }
764
+ // Harmonious tones
765
+ this.warmTone(now + 0.08, 0.3, 440, 0.15) // A4
766
+ this.warmTone(now + 0.12, 0.32, 523, 0.12) // C5
767
+ }
689
768
 
690
- private playAppreciated(): void {
691
- const ctx = this.getContext()
692
- const now = ctx.currentTime
769
+ private playAppreciated(): void {
770
+ const ctx = this.getContext()
771
+ const now = ctx.currentTime
693
772
 
694
- // Touched puff
695
- this.puff(now, 0.15, 1500, 0.2)
773
+ // Touched puff
774
+ this.puff(now, 0.15, 1500, 0.2)
696
775
 
697
- // Warm ascending
698
- this.warmTone(now + 0.05, 0.25, 440, 0.15)
699
- this.warmTone(now + 0.15, 0.3, 523, 0.18)
700
- }
776
+ // Warm ascending
777
+ this.warmTone(now + 0.05, 0.25, 440, 0.15)
778
+ this.warmTone(now + 0.15, 0.3, 523, 0.18)
779
+ }
701
780
 
702
- private playSupported(): void {
703
- const ctx = this.getContext()
704
- const now = ctx.currentTime
705
-
706
- // Held puff
707
- this.puff(now, 0.25, 900, 0.18)
708
-
709
- // Stable harmonies
710
- this.warmTone(now + 0.1, 0.35, 349, 0.12)
711
- this.warmTone(now + 0.15, 0.4, 440, 0.1)
712
- }
713
-
714
- // ==========================================================================
715
- // MIXED / COMPLICATED FEELINGS
716
- // ==========================================================================
717
-
718
- private playNostalgic(): void {
719
- const ctx = this.getContext()
720
- const now = ctx.currentTime
721
-
722
- // Wistful distant puff
723
- this.puff(now, 0.25, 800, 0.15)
724
-
725
- // Bittersweet memory tones
726
- this.warmTone(now + 0.1, 0.4, 440, 0.12, 500) // A4
727
- this.warmTone(now + 0.3, 0.45, 392, 0.1, 450) // G4
728
- }
729
-
730
- private playSurprised(): void {
731
- const ctx = this.getContext()
732
- const now = ctx.currentTime
733
-
734
- // Quick gasp
735
- this.puff(now, 0.06, 2800, 0.25)
736
-
737
- // Rising tone
738
- this.tone(now + 0.02, 0.15, 659, 0.2, 'sine', 988) // E5 -> B5
739
- }
740
-
741
- private playAwestruck(): void {
742
- const ctx = this.getContext()
743
- const now = ctx.currentTime
744
-
745
- // Wonder-filled breath
746
- this.puff(now, 0.2, 1500, 0.2)
747
-
748
- // Ascending wonder
749
- this.shimmer(now + 0.08, 0.4, 440, 0.15)
750
- }
751
-
752
- private playConfused(): void {
753
- const ctx = this.getContext()
754
- const now = ctx.currentTime
755
-
756
- // Uncertain puff
757
- this.puff(now, 0.12, 1200, 0.18)
758
-
759
- // Questioning wobble
760
- this.tone(now + 0.04, 0.2, 440, 0.12, 'sine', 494) // A4 -> B4
761
- this.tone(now + 0.15, 0.15, 466, 0.1) // Bb4 (chromatic confusion)
762
- }
763
-
764
- // ==========================================================================
765
- // PUBLIC API
766
- // ==========================================================================
767
-
768
- /** Set volume (0.0 - 1.0) */
769
- setVolume(vol: number): void {
770
- this.volume = Math.max(0, Math.min(1, vol))
771
- }
772
-
773
- /** Get current volume */
774
- getVolume(): number {
775
- return this.volume
776
- }
777
-
778
- /** Mute all sounds */
779
- mute(): void {
780
- this.muted = true
781
- }
782
-
783
- /** Unmute sounds */
784
- unmute(): void {
785
- this.muted = false
786
- }
787
-
788
- /** Check if muted */
789
- isMuted(): boolean {
790
- return this.muted
791
- }
792
-
793
- /** Play a feeling */
794
- play(feeling: Feeling): void {
795
- if (this.muted) return
796
-
797
- // Map feelings to their sound methods
798
- const soundMap: Record<Feeling, () => void> = {
799
- // Happy
800
- joyful: () => this.playJoyful(),
801
- content: () => this.playContent(),
802
- excited: () => this.playExcited(),
803
- proud: () => this.playProud(),
804
- hopeful: () => this.playHopeful(),
805
- relieved: () => this.playRelieved(),
806
- grateful: () => this.playGrateful(),
807
- peaceful: () => this.playPeaceful(),
808
- playful: () => this.playPlayful(),
809
- amused: () => this.playAmused(),
810
- curious: () => this.playCurious(),
811
- inspired: () => this.playInspired(),
812
- confident: () => this.playConfident(),
813
- loved: () => this.playLoved(),
814
- comforted: () => this.playComforted(),
815
- energized: () => this.playEnergized(),
816
- celebrated: () => this.playCelebrated(),
817
-
818
- // Sad
819
- sad: () => this.playSad(),
820
- lonely: () => this.playLonely(),
821
- disappointed: () => this.playDisappointed(),
822
- heartbroken: () => this.playSad(), // Similar to sad
823
- grieving: () => this.playSad(),
824
- hopeless: () => this.playLonely(),
825
- empty: () => this.playLonely(),
826
- discouraged: () => this.playDisappointed(),
827
- melancholic: () => this.playMelancholic(),
828
- homesick: () => this.playNostalgic(),
829
- hurt: () => this.playSad(),
830
- miserable: () => this.playSad(),
831
- regretful: () => this.playMelancholic(),
832
- ashamed: () => this.playDisappointed(),
833
- inferior: () => this.playDisappointed(),
834
-
835
- // Anxious
836
- anxious: () => this.playAnxious(),
837
- worried: () => this.playWorried(),
838
- afraid: () => this.playAnxious(),
839
- terrified: () => this.playStartled(),
840
- panicked: () => this.playStartled(),
841
- nervous: () => this.playNervous(),
842
- uneasy: () => this.playWorried(),
843
- insecure: () => this.playNervous(),
844
- overwhelmed: () => this.playAnxious(),
845
- stressed: () => this.playAnxious(),
846
- tense: () => this.playAnxious(),
847
- apprehensive: () => this.playWorried(),
848
- startled: () => this.playStartled(),
849
- suspicious: () => this.playWorried(),
850
- vulnerable: () => this.playNervous(),
851
-
852
- // Angry
853
- annoyed: () => this.playAnnoyed(),
854
- irritated: () => this.playAnnoyed(),
855
- frustrated: () => this.playFrustrated(),
856
- angry: () => this.playFrustrated(),
857
- enraged: () => this.playFrustrated(),
858
- bitter: () => this.playFrustrated(),
859
- resentful: () => this.playAnnoyed(),
860
- jealous: () => this.playAnnoyed(),
861
- envious: () => this.playAnnoyed(),
862
- indignant: () => this.playFrustrated(),
863
- impatient: () => this.playImpatient(),
864
- hostile: () => this.playFrustrated(),
865
- contemptuous: () => this.playAnnoyed(),
866
-
867
- // Tired
868
- tired: () => this.playTired(),
869
- exhausted: () => this.playExhausted(),
870
- drained: () => this.playExhausted(),
871
- burnedOut: () => this.playExhausted(),
872
- numb: () => this.playExhausted(),
873
- bored: () => this.playBored(),
874
- unmotivated: () => this.playBored(),
875
- apathetic: () => this.playBored(),
876
- restless: () => this.playTired(),
877
-
878
- // Calm
879
- calm: () => this.playCalm(),
880
- relaxed: () => this.playRelaxed(),
881
- atEase: () => this.playRelaxed(),
882
- balanced: () => this.playCalm(),
883
- stable: () => this.playGrounded(),
884
- secure: () => this.playSafe(),
885
- safe: () => this.playSafe(),
886
- centered: () => this.playGrounded(),
887
- grounded: () => this.playGrounded(),
888
- accepting: () => this.playCalm(),
889
-
890
- // Connected
891
- connected: () => this.playConnected(),
892
- accepted: () => this.playAppreciated(),
893
- included: () => this.playConnected(),
894
- belonging: () => this.playConnected(),
895
- appreciated: () => this.playAppreciated(),
896
- valued: () => this.playAppreciated(),
897
- respected: () => this.playAppreciated(),
898
- supported: () => this.playSupported(),
899
- protective: () => this.playSupported(),
900
- compassionate: () => this.playConnected(),
901
- empathetic: () => this.playConnected(),
902
-
903
- // Mixed
904
- conflicted: () => this.playConfused(),
905
- confused: () => this.playConfused(),
906
- ambivalent: () => this.playConfused(),
907
- nostalgic: () => this.playNostalgic(),
908
- guilty: () => this.playDisappointed(),
909
- embarrassed: () => this.playNervous(),
910
- surprised: () => this.playSurprised(),
911
- shocked: () => this.playStartled(),
912
- awestruck: () => this.playAwestruck(),
913
- skeptical: () => this.playConfused(),
914
- }
915
-
916
- const playFn = soundMap[feeling]
917
- if (playFn) {
918
- playFn()
919
- }
920
- }
921
-
922
- /** Dispose audio context */
923
- dispose(): void {
924
- if (this.audioContext) {
925
- this.audioContext.close()
926
- this.audioContext = null
927
- }
928
- }
781
+ private playSupported(): void {
782
+ const ctx = this.getContext()
783
+ const now = ctx.currentTime
784
+
785
+ // Held puff
786
+ this.puff(now, 0.25, 900, 0.18)
787
+
788
+ // Stable harmonies
789
+ this.warmTone(now + 0.1, 0.35, 349, 0.12)
790
+ this.warmTone(now + 0.15, 0.4, 440, 0.1)
791
+ }
792
+
793
+ // ==========================================================================
794
+ // MIXED / COMPLICATED FEELINGS
795
+ // ==========================================================================
796
+
797
+ private playNostalgic(): void {
798
+ const ctx = this.getContext()
799
+ const now = ctx.currentTime
800
+
801
+ // Wistful distant puff
802
+ this.puff(now, 0.25, 800, 0.15)
803
+
804
+ // Bittersweet memory tones
805
+ this.warmTone(now + 0.1, 0.4, 440, 0.12, 500) // A4
806
+ this.warmTone(now + 0.3, 0.45, 392, 0.1, 450) // G4
807
+ }
808
+
809
+ private playSurprised(): void {
810
+ const ctx = this.getContext()
811
+ const now = ctx.currentTime
812
+
813
+ // Quick gasp
814
+ this.puff(now, 0.06, 2800, 0.25)
815
+
816
+ // Rising tone
817
+ this.tone(now + 0.02, 0.15, 659, 0.2, 'sine', 988) // E5 -> B5
818
+ }
819
+
820
+ private playAwestruck(): void {
821
+ const ctx = this.getContext()
822
+ const now = ctx.currentTime
823
+
824
+ // Wonder-filled breath
825
+ this.puff(now, 0.2, 1500, 0.2)
826
+
827
+ // Ascending wonder
828
+ this.shimmer(now + 0.08, 0.4, 440, 0.15)
829
+ }
830
+
831
+ private playConfused(): void {
832
+ const ctx = this.getContext()
833
+ const now = ctx.currentTime
834
+
835
+ // Uncertain puff
836
+ this.puff(now, 0.12, 1200, 0.18)
837
+
838
+ // Questioning wobble
839
+ this.tone(now + 0.04, 0.2, 440, 0.12, 'sine', 494) // A4 -> B4
840
+ this.tone(now + 0.15, 0.15, 466, 0.1) // Bb4 (chromatic confusion)
841
+ }
842
+
843
+ // ==========================================================================
844
+ // PUBLIC API
845
+ // ==========================================================================
846
+
847
+ /** Set volume (0.0 - 1.0) */
848
+ setVolume(vol: number): void {
849
+ this.volume = Math.max(0, Math.min(1, vol))
850
+ }
851
+
852
+ /** Get current volume */
853
+ getVolume(): number {
854
+ return this.volume
855
+ }
856
+
857
+ /** Mute all sounds */
858
+ mute(): void {
859
+ this.muted = true
860
+ }
861
+
862
+ /** Unmute sounds */
863
+ unmute(): void {
864
+ this.muted = false
865
+ }
866
+
867
+ /** Check if muted */
868
+ isMuted(): boolean {
869
+ return this.muted
870
+ }
871
+
872
+ /** Play a feeling */
873
+ play(feeling: Feeling): void {
874
+ if (this.muted) return
875
+
876
+ // Map feelings to their sound methods
877
+ const soundMap: Record<Feeling, () => void> = {
878
+ // Happy
879
+ joyful: () => this.playJoyful(),
880
+ content: () => this.playContent(),
881
+ excited: () => this.playExcited(),
882
+ proud: () => this.playProud(),
883
+ hopeful: () => this.playHopeful(),
884
+ relieved: () => this.playRelieved(),
885
+ grateful: () => this.playGrateful(),
886
+ peaceful: () => this.playPeaceful(),
887
+ playful: () => this.playPlayful(),
888
+ amused: () => this.playAmused(),
889
+ curious: () => this.playCurious(),
890
+ inspired: () => this.playInspired(),
891
+ confident: () => this.playConfident(),
892
+ loved: () => this.playLoved(),
893
+ comforted: () => this.playComforted(),
894
+ energized: () => this.playEnergized(),
895
+ celebrated: () => this.playCelebrated(),
896
+
897
+ // Sad
898
+ sad: () => this.playSad(),
899
+ lonely: () => this.playLonely(),
900
+ disappointed: () => this.playDisappointed(),
901
+ heartbroken: () => this.playSad(), // Similar to sad
902
+ grieving: () => this.playSad(),
903
+ hopeless: () => this.playLonely(),
904
+ empty: () => this.playLonely(),
905
+ discouraged: () => this.playDisappointed(),
906
+ melancholic: () => this.playMelancholic(),
907
+ homesick: () => this.playNostalgic(),
908
+ hurt: () => this.playSad(),
909
+ miserable: () => this.playSad(),
910
+ regretful: () => this.playMelancholic(),
911
+ ashamed: () => this.playDisappointed(),
912
+ inferior: () => this.playDisappointed(),
913
+
914
+ // Anxious
915
+ anxious: () => this.playAnxious(),
916
+ worried: () => this.playWorried(),
917
+ afraid: () => this.playAnxious(),
918
+ terrified: () => this.playStartled(),
919
+ panicked: () => this.playStartled(),
920
+ nervous: () => this.playNervous(),
921
+ uneasy: () => this.playWorried(),
922
+ insecure: () => this.playNervous(),
923
+ overwhelmed: () => this.playAnxious(),
924
+ stressed: () => this.playAnxious(),
925
+ tense: () => this.playAnxious(),
926
+ apprehensive: () => this.playWorried(),
927
+ startled: () => this.playStartled(),
928
+ suspicious: () => this.playWorried(),
929
+ vulnerable: () => this.playNervous(),
930
+
931
+ // Angry
932
+ annoyed: () => this.playAnnoyed(),
933
+ irritated: () => this.playAnnoyed(),
934
+ frustrated: () => this.playFrustrated(),
935
+ angry: () => this.playFrustrated(),
936
+ enraged: () => this.playFrustrated(),
937
+ bitter: () => this.playFrustrated(),
938
+ resentful: () => this.playAnnoyed(),
939
+ jealous: () => this.playAnnoyed(),
940
+ envious: () => this.playAnnoyed(),
941
+ indignant: () => this.playFrustrated(),
942
+ impatient: () => this.playImpatient(),
943
+ hostile: () => this.playFrustrated(),
944
+ contemptuous: () => this.playAnnoyed(),
945
+
946
+ // Tired
947
+ tired: () => this.playTired(),
948
+ exhausted: () => this.playExhausted(),
949
+ drained: () => this.playExhausted(),
950
+ burnedOut: () => this.playExhausted(),
951
+ numb: () => this.playExhausted(),
952
+ bored: () => this.playBored(),
953
+ unmotivated: () => this.playBored(),
954
+ apathetic: () => this.playBored(),
955
+ restless: () => this.playTired(),
956
+
957
+ // Calm
958
+ calm: () => this.playCalm(),
959
+ relaxed: () => this.playRelaxed(),
960
+ atEase: () => this.playRelaxed(),
961
+ balanced: () => this.playCalm(),
962
+ stable: () => this.playGrounded(),
963
+ secure: () => this.playSafe(),
964
+ safe: () => this.playSafe(),
965
+ centered: () => this.playGrounded(),
966
+ grounded: () => this.playGrounded(),
967
+ accepting: () => this.playCalm(),
968
+
969
+ // Connected
970
+ connected: () => this.playConnected(),
971
+ accepted: () => this.playAppreciated(),
972
+ included: () => this.playConnected(),
973
+ belonging: () => this.playConnected(),
974
+ appreciated: () => this.playAppreciated(),
975
+ valued: () => this.playAppreciated(),
976
+ respected: () => this.playAppreciated(),
977
+ supported: () => this.playSupported(),
978
+ protective: () => this.playSupported(),
979
+ compassionate: () => this.playConnected(),
980
+ empathetic: () => this.playConnected(),
981
+
982
+ // Mixed
983
+ conflicted: () => this.playConfused(),
984
+ confused: () => this.playConfused(),
985
+ ambivalent: () => this.playConfused(),
986
+ nostalgic: () => this.playNostalgic(),
987
+ guilty: () => this.playDisappointed(),
988
+ embarrassed: () => this.playNervous(),
989
+ surprised: () => this.playSurprised(),
990
+ shocked: () => this.playStartled(),
991
+ awestruck: () => this.playAwestruck(),
992
+ skeptical: () => this.playConfused(),
993
+ }
994
+
995
+ const playFn = soundMap[feeling]
996
+ if (playFn) {
997
+ playFn()
998
+ }
999
+ }
1000
+
1001
+ /** Dispose audio context */
1002
+ dispose(): void {
1003
+ if (this.audioContext) {
1004
+ this.audioContext.close()
1005
+ this.audioContext = null
1006
+ }
1007
+ }
929
1008
  }
930
1009
 
931
1010
  // ============================================================================