@mhmo91/schmancy 0.9.2 → 0.9.4

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 (420) hide show
  1. package/README.md +19 -75
  2. package/ai/INDEX.md +72 -0
  3. package/ai/area.md +119 -39
  4. package/ai/audio.md +69 -0
  5. package/ai/boat.md +47 -0
  6. package/ai/charts.md +93 -0
  7. package/ai/connectivity.md +36 -0
  8. package/ai/date-range-inline.md +44 -0
  9. package/ai/delay.md +50 -0
  10. package/ai/discovery.md +67 -0
  11. package/ai/expand.md +63 -0
  12. package/ai/extra.md +59 -0
  13. package/ai/float.md +14 -0
  14. package/ai/iframe.md +44 -0
  15. package/ai/json.md +33 -0
  16. package/ai/layout.md +63 -0
  17. package/ai/mailbox.md +102 -0
  18. package/ai/map.md +55 -0
  19. package/ai/mixins.md +64 -35
  20. package/ai/option.md +43 -0
  21. package/ai/page.md +42 -0
  22. package/ai/qr-scanner.md +51 -0
  23. package/ai/range.md +47 -0
  24. package/ai/rxjs-utils.md +60 -0
  25. package/ai/slider.md +43 -0
  26. package/ai/store.md +92 -49
  27. package/ai/teleport.md +55 -0
  28. package/ai/theme-button.md +26 -0
  29. package/ai/typewriter.md +46 -0
  30. package/ai/utils.md +95 -0
  31. package/ai/window.md +67 -0
  32. package/dist/ai/INDEX.md +72 -0
  33. package/dist/ai/area.md +119 -39
  34. package/dist/ai/audio.md +69 -0
  35. package/dist/ai/boat.md +47 -0
  36. package/dist/ai/charts.md +93 -0
  37. package/dist/ai/connectivity.md +36 -0
  38. package/dist/ai/date-range-inline.md +44 -0
  39. package/dist/ai/delay.md +50 -0
  40. package/dist/ai/discovery.md +67 -0
  41. package/dist/ai/expand.md +63 -0
  42. package/dist/ai/extra.md +59 -0
  43. package/dist/ai/float.md +14 -0
  44. package/dist/ai/iframe.md +44 -0
  45. package/dist/ai/json.md +33 -0
  46. package/dist/ai/layout.md +63 -0
  47. package/dist/ai/mailbox.md +102 -0
  48. package/dist/ai/map.md +55 -0
  49. package/dist/ai/mixins.md +64 -35
  50. package/dist/ai/option.md +43 -0
  51. package/dist/ai/page.md +42 -0
  52. package/dist/ai/qr-scanner.md +51 -0
  53. package/dist/ai/range.md +47 -0
  54. package/dist/ai/rxjs-utils.md +60 -0
  55. package/dist/ai/slider.md +43 -0
  56. package/dist/ai/store.md +92 -49
  57. package/dist/ai/teleport.md +55 -0
  58. package/dist/ai/theme-button.md +26 -0
  59. package/dist/ai/typewriter.md +46 -0
  60. package/dist/ai/utils.md +95 -0
  61. package/dist/ai/window.md +67 -0
  62. package/dist/{area-DbBcfm5p.js → area-CRoGqD_u.js} +2 -2
  63. package/dist/area-CRoGqD_u.js.map +1 -0
  64. package/dist/{area-1h9xEpTc.cjs → area-JPykB7A9.cjs} +1 -1
  65. package/dist/area-JPykB7A9.cjs.map +1 -0
  66. package/dist/area.cjs +1 -1
  67. package/dist/area.js +1 -1
  68. package/dist/{autocomplete-OE70CcYP.cjs → autocomplete-5rVhbieU.cjs} +1 -1
  69. package/dist/{autocomplete-OE70CcYP.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
  70. package/dist/{autocomplete-DDVsegep.js → autocomplete-BllPQwr8.js} +3 -3
  71. package/dist/{autocomplete-DDVsegep.js.map → autocomplete-BllPQwr8.js.map} +1 -1
  72. package/dist/autocomplete.cjs +1 -1
  73. package/dist/autocomplete.js +1 -1
  74. package/dist/badge.cjs +1 -1
  75. package/dist/badge.js +1 -1
  76. package/dist/{boat-T8Ov4-yA.js → boat-BDTQ-du9.js} +2 -2
  77. package/dist/{boat-T8Ov4-yA.js.map → boat-BDTQ-du9.js.map} +1 -1
  78. package/dist/{boat-Cf1oJ0ka.cjs → boat-DYEAZ8Qj.cjs} +1 -1
  79. package/dist/{boat-Cf1oJ0ka.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
  80. package/dist/boat.cjs +1 -1
  81. package/dist/boat.js +1 -1
  82. package/dist/{busy-BD6D5P-l.js → busy-ChDAeaKF.js} +1 -1
  83. package/dist/{busy-BD6D5P-l.js.map → busy-ChDAeaKF.js.map} +1 -1
  84. package/dist/{busy-DF9wztWL.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
  85. package/dist/{busy-DF9wztWL.cjs.map → busy-Dj7Xn0Z0.cjs.map} +1 -1
  86. package/dist/busy.cjs +1 -1
  87. package/dist/busy.js +1 -1
  88. package/dist/button.cjs +1 -1
  89. package/dist/button.js +2 -2
  90. package/dist/{card-Csvu8UJ9.cjs → card-BvPWVEJX.cjs} +1 -1
  91. package/dist/{card-Csvu8UJ9.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
  92. package/dist/{card-DM_miKMd.js → card-DZFPRPqs.js} +1 -1
  93. package/dist/{card-DM_miKMd.js.map → card-DZFPRPqs.js.map} +1 -1
  94. package/dist/card.cjs +1 -1
  95. package/dist/card.js +1 -1
  96. package/dist/charts.cjs +1 -1
  97. package/dist/charts.js +2 -2
  98. package/dist/{checkbox-sJujc_ga.cjs → checkbox-BC_37rsG.cjs} +1 -1
  99. package/dist/{checkbox-sJujc_ga.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
  100. package/dist/{checkbox-BgGtMaMR.js → checkbox-GSSjqo6w.js} +1 -1
  101. package/dist/{checkbox-BgGtMaMR.js.map → checkbox-GSSjqo6w.js.map} +1 -1
  102. package/dist/checkbox.cjs +1 -1
  103. package/dist/checkbox.js +1 -1
  104. package/dist/{chips-D_e6wijp.cjs → chips-B19XS8Xc.cjs} +1 -1
  105. package/dist/{chips-D_e6wijp.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
  106. package/dist/{chips-BZaH4wez.js → chips-B9oAEfE_.js} +3 -3
  107. package/dist/{chips-BZaH4wez.js.map → chips-B9oAEfE_.js.map} +1 -1
  108. package/dist/chips.cjs +1 -1
  109. package/dist/chips.js +2 -2
  110. package/dist/{code-highlight-Q3cc6ukq.js → code-highlight-DCk5lJY-.js} +1 -1
  111. package/dist/{code-highlight-Q3cc6ukq.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
  112. package/dist/{code-highlight-DlhERv_O.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
  113. package/dist/{code-highlight-DlhERv_O.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
  114. package/dist/code-highlight.cjs +1 -1
  115. package/dist/code-highlight.js +1 -1
  116. package/dist/{components-CRhkB3V2.js → components-COsM6sJZ.js} +2 -2
  117. package/dist/{components-CRhkB3V2.js.map → components-COsM6sJZ.js.map} +1 -1
  118. package/dist/{components-DnlEYYDs.cjs → components-CyD6a7gQ.cjs} +1 -1
  119. package/dist/{components-DnlEYYDs.cjs.map → components-CyD6a7gQ.cjs.map} +1 -1
  120. package/dist/components.cjs +1 -1
  121. package/dist/components.js +1 -1
  122. package/dist/connectivity.cjs +1 -1
  123. package/dist/connectivity.js +1 -1
  124. package/dist/content-drawer.cjs +1 -1
  125. package/dist/content-drawer.js +1 -1
  126. package/dist/{date-range-C0IYnvHF.js → date-range-Sfyco9-n.js} +3 -3
  127. package/dist/{date-range-C0IYnvHF.js.map → date-range-Sfyco9-n.js.map} +1 -1
  128. package/dist/{date-range-cymbTDnl.cjs → date-range-ZAaQB22I.cjs} +1 -1
  129. package/dist/{date-range-cymbTDnl.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
  130. package/dist/{date-range-inline-0ENN4Plz.js → date-range-inline-Bl8qbiQF.js} +1 -1
  131. package/dist/{date-range-inline-0ENN4Plz.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
  132. package/dist/{date-range-inline-Cfwt-ReH.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
  133. package/dist/{date-range-inline-Cfwt-ReH.cjs.map → date-range-inline-m7nLjOMI.cjs.map} +1 -1
  134. package/dist/date-range-inline.cjs +1 -1
  135. package/dist/date-range-inline.js +1 -1
  136. package/dist/date-range.cjs +1 -1
  137. package/dist/date-range.js +1 -1
  138. package/dist/{delay-D6mQLUp-.cjs → delay-7boauN6N.cjs} +1 -1
  139. package/dist/{delay-D6mQLUp-.cjs.map → delay-7boauN6N.cjs.map} +1 -1
  140. package/dist/{delay-D1dVP93u.js → delay-CgX6m0HN.js} +3 -3
  141. package/dist/{delay-D1dVP93u.js.map → delay-CgX6m0HN.js.map} +1 -1
  142. package/dist/delay.cjs +1 -1
  143. package/dist/delay.js +1 -1
  144. package/dist/{details-CPT_Mi4e.cjs → details-BHnk8l4q.cjs} +1 -1
  145. package/dist/{details-CPT_Mi4e.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
  146. package/dist/{details-Cv4OOrVW.js → details-BPkUg8Cq.js} +2 -2
  147. package/dist/{details-Cv4OOrVW.js.map → details-BPkUg8Cq.js.map} +1 -1
  148. package/dist/details.cjs +1 -1
  149. package/dist/details.js +1 -1
  150. package/dist/dialog.cjs +1 -1
  151. package/dist/dialog.js +2 -2
  152. package/dist/directives.cjs.map +1 -1
  153. package/dist/directives.js.map +1 -1
  154. package/dist/discovery.cjs.map +1 -1
  155. package/dist/discovery.js.map +1 -1
  156. package/dist/{divider-DDC-kND3.js → divider-CW9a7MMj.js} +2 -2
  157. package/dist/{divider-DDC-kND3.js.map → divider-CW9a7MMj.js.map} +1 -1
  158. package/dist/{divider-nZ_2to2N.cjs → divider-_khrhrZo.cjs} +1 -1
  159. package/dist/{divider-nZ_2to2N.cjs.map → divider-_khrhrZo.cjs.map} +1 -1
  160. package/dist/divider.cjs +1 -1
  161. package/dist/divider.js +1 -1
  162. package/dist/dropdown.cjs +1 -1
  163. package/dist/dropdown.js +2 -2
  164. package/dist/{expand-Crdts9q_.cjs → expand-Cp7-PH8b.cjs} +1 -1
  165. package/dist/{expand-Crdts9q_.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
  166. package/dist/{expand-Bp3N8CcL.js → expand-iQ7EOMP7.js} +3 -3
  167. package/dist/{expand-Bp3N8CcL.js.map → expand-iQ7EOMP7.js.map} +1 -1
  168. package/dist/expand.cjs +1 -1
  169. package/dist/expand.js +1 -1
  170. package/dist/{extra-B0IZCg0t.cjs → extra-IKAiJJhv.cjs} +1 -1
  171. package/dist/{extra-B0IZCg0t.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
  172. package/dist/{extra-DupwhQhC.js → extra-wEpvEFbK.js} +2 -2
  173. package/dist/{extra-DupwhQhC.js.map → extra-wEpvEFbK.js.map} +1 -1
  174. package/dist/extra.cjs +1 -1
  175. package/dist/extra.js +1 -1
  176. package/dist/{float-Dqdc1_S5.js → float-BQ_urmMs.js} +2 -2
  177. package/dist/{float-Dqdc1_S5.js.map → float-BQ_urmMs.js.map} +1 -1
  178. package/dist/{float-CQoJ_oSB.cjs → float-D5rNC82i.cjs} +1 -1
  179. package/dist/{float-CQoJ_oSB.cjs.map → float-D5rNC82i.cjs.map} +1 -1
  180. package/dist/float.cjs +1 -1
  181. package/dist/float.js +1 -1
  182. package/dist/{form-CvoLqMY7.cjs → form-BqN1AGFj.cjs} +1 -1
  183. package/dist/{form-CvoLqMY7.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
  184. package/dist/{form-CW5XNuTg.js → form-CajC5HnO.js} +1 -1
  185. package/dist/{form-CW5XNuTg.js.map → form-CajC5HnO.js.map} +1 -1
  186. package/dist/form.cjs +1 -1
  187. package/dist/form.js +1 -1
  188. package/dist/{icons-BLQHEbIk.cjs → icons-B57_93VV.cjs} +1 -1
  189. package/dist/{icons-BLQHEbIk.cjs.map → icons-B57_93VV.cjs.map} +1 -1
  190. package/dist/{icons-Cpfdb7sA.js → icons-BDqiGXrO.js} +1 -1
  191. package/dist/{icons-Cpfdb7sA.js.map → icons-BDqiGXrO.js.map} +1 -1
  192. package/dist/icons.cjs +1 -1
  193. package/dist/icons.js +1 -1
  194. package/dist/{iframe-sJGXBbxT.cjs → iframe-DNHL3GIk.cjs} +1 -1
  195. package/dist/{iframe-sJGXBbxT.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
  196. package/dist/{iframe-DG6HVYdy.js → iframe-WnWPIrBG.js} +1 -1
  197. package/dist/{iframe-DG6HVYdy.js.map → iframe-WnWPIrBG.js.map} +1 -1
  198. package/dist/iframe.cjs +1 -1
  199. package/dist/iframe.js +1 -1
  200. package/dist/index.cjs +1 -1
  201. package/dist/index.js +33 -33
  202. package/dist/{input-DGTdmp1Q.cjs → input-BiSrTcrR.cjs} +1 -1
  203. package/dist/{input-DGTdmp1Q.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
  204. package/dist/{input-BevxycIt.js → input-VaXHFrRn.js} +1 -1
  205. package/dist/{input-BevxycIt.js.map → input-VaXHFrRn.js.map} +1 -1
  206. package/dist/{input-chip-CKVtjInb.cjs → input-chip-Dy-AiP55.cjs} +1 -1
  207. package/dist/{input-chip-CKVtjInb.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
  208. package/dist/{input-chip-BWS-SFU4.js → input-chip-QejNcRnS.js} +1 -1
  209. package/dist/{input-chip-BWS-SFU4.js.map → input-chip-QejNcRnS.js.map} +1 -1
  210. package/dist/input.cjs +1 -1
  211. package/dist/input.js +1 -1
  212. package/dist/json.cjs +1 -1
  213. package/dist/json.js +2 -2
  214. package/dist/{layout-DxLjlDfr.js → layout-CnsXeCAy.js} +2 -2
  215. package/dist/{layout-DxLjlDfr.js.map → layout-CnsXeCAy.js.map} +1 -1
  216. package/dist/{layout-CQdd8UCr.cjs → layout-DNYG3phx.cjs} +1 -1
  217. package/dist/{layout-CQdd8UCr.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
  218. package/dist/layout.cjs +1 -1
  219. package/dist/layout.js +2 -2
  220. package/dist/{lightbox-Bjc55lHH.js → lightbox-BrI1Z31s.js} +2 -2
  221. package/dist/{lightbox-Bjc55lHH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
  222. package/dist/{lightbox-C_863_XU.cjs → lightbox-CmACf0t5.cjs} +1 -1
  223. package/dist/{lightbox-C_863_XU.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
  224. package/dist/lightbox.cjs +1 -1
  225. package/dist/lightbox.js +1 -1
  226. package/dist/{list-BAqhlzZd.js → list-Cm-jjXxM.js} +2 -2
  227. package/dist/{list-BAqhlzZd.js.map → list-Cm-jjXxM.js.map} +1 -1
  228. package/dist/{list-CaXzdN9_.cjs → list-swIL9VDv.cjs} +1 -1
  229. package/dist/{list-CaXzdN9_.cjs.map → list-swIL9VDv.cjs.map} +1 -1
  230. package/dist/list.cjs +1 -1
  231. package/dist/list.js +1 -1
  232. package/dist/{litElement.mixin-DN6X9_wD.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
  233. package/dist/{litElement.mixin-DN6X9_wD.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
  234. package/dist/{litElement.mixin-Dktub0ri.js → litElement.mixin-6jJYHCrZ.js} +1 -1
  235. package/dist/{litElement.mixin-Dktub0ri.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
  236. package/dist/{mailbox-DuMUH4f3.js → mailbox-BuvsVaAQ.js} +4 -4
  237. package/dist/{mailbox-DuMUH4f3.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
  238. package/dist/{mailbox-BvsLXpvy.cjs → mailbox-D6LkQcN5.cjs} +1 -1
  239. package/dist/{mailbox-BvsLXpvy.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
  240. package/dist/mailbox.cjs +1 -1
  241. package/dist/mailbox.js +1 -1
  242. package/dist/{map-DkIy1ph7.js → map-CQiKAxC3.js} +1 -1
  243. package/dist/{map-DkIy1ph7.js.map → map-CQiKAxC3.js.map} +1 -1
  244. package/dist/{map-C2Msv9TQ.cjs → map-D5NN4VET.cjs} +1 -1
  245. package/dist/{map-C2Msv9TQ.cjs.map → map-D5NN4VET.cjs.map} +1 -1
  246. package/dist/map.cjs +1 -1
  247. package/dist/map.js +1 -1
  248. package/dist/{menu-DEeDKW5U.js → menu-C1x04YZw.js} +2 -2
  249. package/dist/{menu-DEeDKW5U.js.map → menu-C1x04YZw.js.map} +1 -1
  250. package/dist/{menu-Mm71lv9k.cjs → menu-CkgMO9K5.cjs} +1 -1
  251. package/dist/{menu-Mm71lv9k.cjs.map → menu-CkgMO9K5.cjs.map} +1 -1
  252. package/dist/menu.cjs +1 -1
  253. package/dist/menu.js +1 -1
  254. package/dist/mixins.cjs +1 -1
  255. package/dist/mixins.js +3 -3
  256. package/dist/nav-drawer.cjs +1 -1
  257. package/dist/nav-drawer.js +1 -1
  258. package/dist/navigation-bar.cjs +1 -1
  259. package/dist/navigation-bar.js +1 -1
  260. package/dist/navigation-rail.cjs +1 -1
  261. package/dist/navigation-rail.js +2 -2
  262. package/dist/{notification-K-ug8cKk.js → notification-BnBgxjF-.js} +3 -3
  263. package/dist/{notification-K-ug8cKk.js.map → notification-BnBgxjF-.js.map} +1 -1
  264. package/dist/{notification-cTgXEDZ0.cjs → notification-CZFEhWxc.cjs} +1 -1
  265. package/dist/{notification-cTgXEDZ0.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
  266. package/dist/notification.cjs +1 -1
  267. package/dist/notification.js +1 -1
  268. package/dist/{option-5rEOmtAm.cjs → option-BrxCVwSx.cjs} +1 -1
  269. package/dist/{option-5rEOmtAm.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
  270. package/dist/{option-TFSKvSjT.js → option-DBO8xZwd.js} +1 -1
  271. package/dist/{option-TFSKvSjT.js.map → option-DBO8xZwd.js.map} +1 -1
  272. package/dist/option.cjs +1 -1
  273. package/dist/option.js +1 -1
  274. package/dist/page.cjs +1 -1
  275. package/dist/page.js +3 -3
  276. package/dist/{progress-iu0AMbSg.cjs → progress-Db2e4_Zd.cjs} +1 -1
  277. package/dist/{progress-iu0AMbSg.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
  278. package/dist/{progress-Cta3nM-f.js → progress-DeiHxXo7.js} +2 -2
  279. package/dist/{progress-Cta3nM-f.js.map → progress-DeiHxXo7.js.map} +1 -1
  280. package/dist/progress.cjs +1 -1
  281. package/dist/progress.js +1 -1
  282. package/dist/{provide-D69zybs5.js → provide-C1aQhxYo.js} +1 -1
  283. package/dist/{provide-D69zybs5.js.map → provide-C1aQhxYo.js.map} +1 -1
  284. package/dist/{provide-BEyyKlDM.cjs → provide-DHnhQtCH.cjs} +1 -1
  285. package/dist/{provide-BEyyKlDM.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
  286. package/dist/qr-scanner.cjs +1 -1
  287. package/dist/qr-scanner.js +2 -2
  288. package/dist/{radio-group-DKPN0T50.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
  289. package/dist/{radio-group-DKPN0T50.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
  290. package/dist/{radio-group-BjSWmYJC.js → radio-group-zSO0AkJf.js} +1 -1
  291. package/dist/{radio-group-BjSWmYJC.js.map → radio-group-zSO0AkJf.js.map} +1 -1
  292. package/dist/radio-group.cjs +1 -1
  293. package/dist/radio-group.js +1 -1
  294. package/dist/range.cjs +1 -1
  295. package/dist/range.js +1 -1
  296. package/dist/{scroll-mayaGGpE.cjs → scroll-QMCmbbDv.cjs} +1 -1
  297. package/dist/{scroll-mayaGGpE.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
  298. package/dist/{scroll-tG1vaRFO.js → scroll-cBDzye64.js} +1 -1
  299. package/dist/{scroll-tG1vaRFO.js.map → scroll-cBDzye64.js.map} +1 -1
  300. package/dist/{select-C4YK5Arj.cjs → select-Ct37l3lg.cjs} +1 -1
  301. package/dist/{select-C4YK5Arj.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
  302. package/dist/{select-CepryGGP.js → select-c6HbWvKP.js} +2 -2
  303. package/dist/{select-CepryGGP.js.map → select-c6HbWvKP.js.map} +1 -1
  304. package/dist/select.cjs +1 -1
  305. package/dist/select.js +1 -1
  306. package/dist/{sheet-D2uT95S1.js → sheet-BMXcUiIm.js} +4 -4
  307. package/dist/{sheet-D2uT95S1.js.map → sheet-BMXcUiIm.js.map} +1 -1
  308. package/dist/{sheet-Cy4C2-kG.cjs → sheet-CQec-bCV.cjs} +1 -1
  309. package/dist/{sheet-Cy4C2-kG.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
  310. package/dist/sheet.cjs +1 -1
  311. package/dist/sheet.js +2 -2
  312. package/dist/{sheet.service-Os8KJGSE.js → sheet.service-BcPV3Du4.js} +1 -1
  313. package/dist/{sheet.service-Os8KJGSE.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
  314. package/dist/{sheet.service-Dv5Hwj3k.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
  315. package/dist/{sheet.service-Dv5Hwj3k.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
  316. package/dist/slider.cjs +1 -1
  317. package/dist/slider.js +2 -2
  318. package/dist/{src-BLcmKlCH.js → src-BLngW2bl.js} +42 -42
  319. package/dist/{src-BLcmKlCH.js.map → src-BLngW2bl.js.map} +1 -1
  320. package/dist/{src-tfU0akqI.cjs → src-BtQVyqMy.cjs} +1 -1
  321. package/dist/{src-tfU0akqI.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
  322. package/dist/steps.cjs +1 -1
  323. package/dist/steps.js +3 -3
  324. package/dist/{surface-CiiIYeJN.cjs → surface-BjKZoJxK.cjs} +1 -1
  325. package/dist/{surface-CiiIYeJN.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
  326. package/dist/{surface-fXvRpS6s.js → surface-pK8hME5c.js} +3 -3
  327. package/dist/{surface-fXvRpS6s.js.map → surface-pK8hME5c.js.map} +1 -1
  328. package/dist/surface.cjs +1 -1
  329. package/dist/surface.js +1 -1
  330. package/dist/{surface.mixin-C4hbgyaP.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
  331. package/dist/{surface.mixin-C4hbgyaP.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
  332. package/dist/{surface.mixin-DBuxL5aL.js → surface.mixin-CBNRpJum.js} +1 -1
  333. package/dist/{surface.mixin-DBuxL5aL.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
  334. package/dist/{table-BeXnwSsq.js → table-BXIHX9h4.js} +2 -2
  335. package/dist/{table-BeXnwSsq.js.map → table-BXIHX9h4.js.map} +1 -1
  336. package/dist/{table-BRVKlNjl.cjs → table-CiqgZzSd.cjs} +1 -1
  337. package/dist/{table-BRVKlNjl.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
  338. package/dist/table.cjs +1 -1
  339. package/dist/table.js +1 -1
  340. package/dist/{tabs-CBU9Ctqm.cjs → tabs-CKa-W4qA.cjs} +1 -1
  341. package/dist/{tabs-CBU9Ctqm.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
  342. package/dist/{tabs-y708NWQ2.js → tabs-nbV5eblZ.js} +2 -2
  343. package/dist/{tabs-y708NWQ2.js.map → tabs-nbV5eblZ.js.map} +1 -1
  344. package/dist/tabs.cjs +1 -1
  345. package/dist/tabs.js +1 -1
  346. package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
  347. package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
  348. package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
  349. package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
  350. package/dist/teleport.cjs +1 -1
  351. package/dist/teleport.js +1 -1
  352. package/dist/{textarea-BhAoJg8c.cjs → textarea-Cp1ZE60O.cjs} +1 -1
  353. package/dist/{textarea-BhAoJg8c.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
  354. package/dist/{textarea-Bl8-gQEJ.js → textarea-D7q8exMg.js} +1 -1
  355. package/dist/{textarea-Bl8-gQEJ.js.map → textarea-D7q8exMg.js.map} +1 -1
  356. package/dist/textarea.cjs +1 -1
  357. package/dist/textarea.js +1 -1
  358. package/dist/{theme-C-vdR-Ic.cjs → theme-Da4SPq9X.cjs} +1 -1
  359. package/dist/{theme-C-vdR-Ic.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
  360. package/dist/{theme-DZUpYJn-.js → theme-_VPV6Bxh.js} +3 -3
  361. package/dist/{theme-DZUpYJn-.js.map → theme-_VPV6Bxh.js.map} +1 -1
  362. package/dist/{theme-button-CwrvpOMK.js → theme-button--sX8A-m1.js} +1 -1
  363. package/dist/{theme-button-CwrvpOMK.js.map → theme-button--sX8A-m1.js.map} +1 -1
  364. package/dist/{theme-button-Cx1iKh7G.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
  365. package/dist/{theme-button-Cx1iKh7G.cjs.map → theme-button-Ci8VQ7KW.cjs.map} +1 -1
  366. package/dist/theme-button.cjs +1 -1
  367. package/dist/theme-button.js +1 -1
  368. package/dist/theme.cjs +1 -1
  369. package/dist/theme.js +2 -2
  370. package/dist/tooltip.cjs +1 -1
  371. package/dist/tooltip.js +1 -1
  372. package/dist/tree.cjs +1 -1
  373. package/dist/tree.js +1 -1
  374. package/dist/{typewriter-CXQIzqPV.cjs → typewriter-B2TnHPjw.cjs} +1 -1
  375. package/dist/{typewriter-CXQIzqPV.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
  376. package/dist/{typewriter-mxVw5dFn.js → typewriter-BrZNa8T-.js} +3 -3
  377. package/dist/{typewriter-mxVw5dFn.js.map → typewriter-BrZNa8T-.js.map} +1 -1
  378. package/dist/typewriter.cjs +1 -1
  379. package/dist/typewriter.js +1 -1
  380. package/dist/typography.cjs +1 -1
  381. package/dist/typography.js +1 -1
  382. package/dist/{window-EWYJJC_H.js → window-CM1ycigo.js} +2 -2
  383. package/dist/{window-EWYJJC_H.js.map → window-CM1ycigo.js.map} +1 -1
  384. package/dist/{window-DFMlB1Tq.cjs → window-Uii13x_r.cjs} +1 -1
  385. package/dist/{window-DFMlB1Tq.cjs.map → window-Uii13x_r.cjs.map} +1 -1
  386. package/dist/window.cjs +1 -1
  387. package/dist/window.js +1 -1
  388. package/mixins/baseElement.ts +1 -1
  389. package/mixins/discovery.service.ts +1 -1
  390. package/package.json +1 -2
  391. package/src/area/area.service.ts +1 -1
  392. package/src/area/router.types.ts +1 -1
  393. package/src/directives/animate-text.ts +1 -1
  394. package/src/discovery/discovery.service.ts +1 -1
  395. package/src/input/input.ts +1 -1
  396. package/src/mailbox/README.md +7 -10
  397. package/src/mailbox/types.ts +0 -1
  398. package/types/mixins/discovery.service.d.ts +1 -1
  399. package/types/src/discovery/discovery.service.d.ts +1 -1
  400. package/types/src/mailbox/types.d.ts +0 -1
  401. package/dist/area-1h9xEpTc.cjs.map +0 -1
  402. package/dist/area-DbBcfm5p.js.map +0 -1
  403. package/dist/tailwind.mixin-C4cx3IOr.js +0 -225
  404. package/dist/tailwind.mixin-C4cx3IOr.js.map +0 -1
  405. package/dist/tailwind.mixin-DGiyLbEi.cjs +0 -2
  406. package/dist/tailwind.mixin-DGiyLbEi.cjs.map +0 -1
  407. package/src/area/readme.md +0 -338
  408. package/src/area/router-guide.md +0 -360
  409. package/src/autocomplete/README.md +0 -485
  410. package/src/content-drawer/readme.md +0 -709
  411. package/src/icons/readme.md +0 -37
  412. package/src/list/readme.md +0 -62
  413. package/src/radio-group/readme.md +0 -315
  414. package/src/select/README.md +0 -405
  415. package/src/tabs/Readme.md +0 -397
  416. package/src/teleport/readme.md +0 -91
  417. package/src/tree/README.md +0 -59
  418. package/src/typewriter/IMPROVEMENTS.md +0 -174
  419. package/src/typewriter/QUICK_REFERENCE.md +0 -166
  420. package/src/typewriter/test-typewriter.html +0 -97
@@ -0,0 +1,26 @@
1
+ # schmancy-theme-button
2
+
3
+ > Minimal palette-icon button that spins 360° on click. Hook its `click` to toggle/regenerate your theme.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-theme-button @click=${() => this.toggleTheme()}></schmancy-theme-button>
8
+ ```
9
+
10
+ ## Behavior
11
+ - Renders a `schmancy-button` (variant `text`) wrapping a palette `schmancy-icon`.
12
+ - On click: Web Animations API rotates the icon 360° over 300ms.
13
+ - No properties — it's a UI affordance; wire the theme logic via `@click`.
14
+
15
+ ## Typical Wiring
16
+ ```typescript
17
+ import { theme } from '@mhmo91/schmancy'
18
+
19
+ // Toggle dark/light
20
+ <schmancy-theme-button @click=${() => theme.toggleScheme()}></schmancy-theme-button>
21
+
22
+ // Randomize primary color
23
+ <schmancy-theme-button @click=${() => theme.randomize()}></schmancy-theme-button>
24
+ ```
25
+
26
+ See [theme.md](./theme.md) for the full theme service API.
@@ -0,0 +1,46 @@
1
+ # schmancy-typewriter
2
+
3
+ > Text-reveal component powered by [TypeIt](https://typeitjs.com). Characters pop in with entrance + wobble physics; custom cursor pulses with drop-shadow glow.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-typewriter>
8
+ Hello, world.
9
+ </schmancy-typewriter>
10
+ ```
11
+
12
+ ## Properties
13
+ | Property | Type | Default | Description |
14
+ |----------|------|---------|-------------|
15
+ | `speed` | number | `35` | Ms per character typed |
16
+ | `deleteSpeed` | number | `20` | Ms per character deleted |
17
+ | `delay` | number | `0` | Initial delay before typing (inherited via `delayContext`) |
18
+ | `autoStart` | boolean | `true` | Start typing on connect |
19
+ | `cursorChar` | string | `''` | Character for the cursor (empty = default block cursor) |
20
+ | `once` | boolean | `true` | Only animate once per session (`sessionStorage` hash) |
21
+ | `loop` | boolean | `false` | Loop infinitely (overrides `once`) |
22
+ | `cyclePause` | number | `1500` | Default pause for cycling (ms) |
23
+
24
+ ## Behavior
25
+ - **Lazy start** via IntersectionObserver — won't type until visible.
26
+ - **Session caching** — when `once=true`, content hash is stored; subsequent visits skip the animation.
27
+ - **Delay coordination** — consumes `delayContext`, staggering with parent `schmancy-delay`.
28
+ - Character entrance animation: scale 0.3 → 1.1 → 1 with blur-to-focus.
29
+ - Alternating characters get a subtle `wobble` rotation.
30
+ - Cursor pulses with `drop-shadow(0 0 8px currentColor)` glow.
31
+
32
+ ## Slot Content
33
+ Text (or nested HTML) goes in the default slot. TypeIt handles strings, tags, line breaks.
34
+
35
+ ```html
36
+ <schmancy-typewriter speed="50">
37
+ First line.<br>
38
+ <strong>Bold second.</strong>
39
+ </schmancy-typewriter>
40
+ ```
41
+
42
+ ## Vs. `typewriter` directive
43
+ - **Component (`schmancy-typewriter`)**: slot-based, lazy-starts on visibility, one-shot content reveal with cached skipping.
44
+ - **Directive (`typewriter([...phrases])`)**: cycles through a phrase array with typing + deleting + optional Web Audio sound. See [directives.md](./directives.md).
45
+
46
+ Use the directive for looping taglines. Use the component for one-time paragraph reveals.
package/ai/utils.md ADDED
@@ -0,0 +1,95 @@
1
+ # Schmancy Utils
2
+
3
+ > Non-component utilities exported from `@mhmo91/schmancy` (or `@mhmo91/schmancy/utils`). Animation presets, similarity search, number formatting, intersection observer wrapper, overlay z-index manager, and content hashing.
4
+
5
+ ## Animation
6
+
7
+ See [animation.md](./animation.md) for the full Blackbird spring system. In brief:
8
+
9
+ ```typescript
10
+ import {
11
+ SPRING_SMOOTH, SPRING_SNAPPY, SPRING_BOUNCY, SPRING_GENTLE,
12
+ createAnimation, createRevealAnimation, createDismissAnimation, createScaleAnimation,
13
+ getEasing, prefersReducedMotion,
14
+ ANIMATION_CSS_VARS, tailwindAnimations, GRID_ANIMATION_CSS,
15
+ } from '@mhmo91/schmancy'
16
+ ```
17
+
18
+ ## Number Formatting — `numbers` / `Numbers`
19
+ Locale-aware number formatting + currency + rounding.
20
+ ```typescript
21
+ import numbers from '@mhmo91/schmancy'
22
+
23
+ numbers.roundNumber(3.14159, 2) // 3.14
24
+ numbers.format(1234567.89) // "1,234,567.89" (system locale)
25
+ numbers.format(1234.5, 'de-DE') // "1.234,5"
26
+ numbers.formatCurrency(99.95, 'EUR') // "€99.95"
27
+ numbers.systemLocale // "en-US" / "de-DE" / etc.
28
+ ```
29
+
30
+ ## Fuzzy Search — `similarity(query, target, options?)`
31
+ Autocomplete-tuned similarity scoring. Prioritizes start-matches and word boundaries.
32
+ ```typescript
33
+ import { similarity } from '@mhmo91/schmancy'
34
+
35
+ similarity('john', 'John Doe') // ~0.975 (starts-with)
36
+ similarity('doe', 'John Doe') // ~0.765 (word-boundary)
37
+ similarity('jhn', 'John Doe') // ~0.3–0.5 (fuzzy)
38
+ ```
39
+
40
+ Tiers:
41
+ - `1.00` exact
42
+ - `0.95–1.00` target starts with query
43
+ - `0.765–0.85` word-boundary match
44
+ - `0.56–0.70` substring
45
+ - `0.50` subsequence
46
+ - `0.00–0.50` fuzzy (Dice + Levenshtein + Jaccard + anagram)
47
+
48
+ Options:
49
+ | Key | Default | Effect |
50
+ |-----|---------|--------|
51
+ | `normalizeAccents` | `true` | Strip diacritics before compare |
52
+ | `includeWordJaccard` | `true` | Add word-set overlap to fuzzy score |
53
+ | `maxLevenshteinDistance` | `0` | Early-terminate above this distance (`0` = off) |
54
+
55
+ ## Intersection Observer — `intersection$(element, options?)`
56
+ RxJS wrapper around `IntersectionObserver`.
57
+ ```typescript
58
+ import { intersection$ } from '@mhmo91/schmancy'
59
+
60
+ intersection$(this.card, { threshold: 0.5 })
61
+ .pipe(takeUntil(this.disconnecting))
62
+ .subscribe(entries => {
63
+ if (entries[0].isIntersecting) this.loadContent()
64
+ })
65
+ ```
66
+
67
+ ## Overlay Stack — `overlayStack`
68
+ Singleton z-index coordinator used internally by dialogs, sheets, and windows. Ensures overlays stack in open order.
69
+
70
+ ```typescript
71
+ import { overlayStack } from '@mhmo91/schmancy'
72
+
73
+ // Anonymous (fire-and-forget) — dialogs/sheets
74
+ const z = overlayStack.getNextZIndex()
75
+ // …on close:
76
+ overlayStack.release()
77
+
78
+ // ID-tracked — windows (supports bringToFront)
79
+ overlayStack.assignZIndex('my-window')
80
+ overlayStack.bringToFront('my-window')
81
+ overlayStack.releaseId('my-window')
82
+ ```
83
+
84
+ Base z-index: `10000`. Counter resets when all overlays close.
85
+
86
+ ## Content Hashing — `hashContent(string)`
87
+ Fast 32-bit FNV-1a style hash, returns a hex string. Used by [`schmancy-delay`](./delay.md) and [`schmancy-typewriter`](./typewriter.md) for session-scoped caching.
88
+ ```typescript
89
+ import hashContent from '@mhmo91/schmancy/utils/hashContent'
90
+ const key = hashContent(element.outerHTML) // stable across renders for identical content
91
+ ```
92
+
93
+ ## See Also
94
+ - [rxjs-utils](./rxjs-utils.md) — DOM observation helpers (`waitForElement`, `waitUntil`, etc.)
95
+ - [discovery](./discovery.md) — cross-shadow component discovery
package/ai/window.md ADDED
@@ -0,0 +1,67 @@
1
+ # schmancy-window
2
+
3
+ > Floating draggable window with corner snapping, resize, and minimize/maximize states. Replaces deprecated `schmancy-float`.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-window id="chat" corner="bottom-right">
8
+ <span slot="header">Chat</span>
9
+ <schmancy-icon slot="icon">chat</schmancy-icon>
10
+ <div>Window body content…</div>
11
+ </schmancy-window>
12
+ ```
13
+
14
+ ## Properties
15
+ | Property | Type | Default | Description |
16
+ |----------|------|---------|-------------|
17
+ | `id` | string | `'default'` | Unique window identifier (used by `windowManager` registry) |
18
+ | `open` | boolean | `false` | Body expanded state |
19
+ | `corner` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | `'bottom-right'` | Anchor corner |
20
+ | `freePosition` | boolean | `false` | Keep dragged position instead of snapping to corner |
21
+ | `resizable` | boolean | `false` | Allow user resizing from edges |
22
+ | `visualState` | `'minimized' \| 'normal' \| 'maximized'` | `'normal'` | Reflected state attribute |
23
+ | `expandedWidth` | string | responsive | e.g. `'320px'`, `'24rem'` |
24
+ | `expandedHeight` | string | auto | e.g. `'400px'`, `'50vh'` |
25
+ | `minWidth` | number | `280` | Minimum width px during resize |
26
+ | `minHeight` | number | `200` | Minimum height px during resize |
27
+ | `lowered` | boolean | `false` | Lower elevation shadow in collapsed state |
28
+
29
+ ## Slots
30
+ | Slot | Purpose |
31
+ |------|---------|
32
+ | `icon` | Leading icon in the head (minimized FAB state) |
33
+ | `header` | Header label (visible when expanded) |
34
+ | (default) | Window body content (lazy rendered — not in DOM until first open) |
35
+
36
+ ## Behavior
37
+ - Drag from head to reposition. Release snaps to the nearest corner unless `freePosition`.
38
+ - `windowManager` tracks focused window and resolves overlap between multiple windows.
39
+ - `cursorGlow` applied to head while expanded.
40
+ - Collapsed state uses a clip-path reveal animation; expand uses `SPRING_SMOOTH` physics.
41
+ - Body content mounts lazily on first expand (`_hasOpened`).
42
+ - All animations respect `prefers-reduced-motion` via `reducedMotion$`.
43
+
44
+ ## Examples
45
+ ```html
46
+ <!-- Chat-style window docked bottom-right -->
47
+ <schmancy-window id="support" corner="bottom-right">
48
+ <schmancy-icon slot="icon">support_agent</schmancy-icon>
49
+ <span slot="header">Support</span>
50
+ <div class="p-4">How can we help?</div>
51
+ </schmancy-window>
52
+
53
+ <!-- Resizable, free-position floating panel -->
54
+ <schmancy-window id="inspector" resizable free-position expanded-width="420px" expanded-height="60vh">
55
+ <span slot="header">Inspector</span>
56
+ <div>…</div>
57
+ </schmancy-window>
58
+ ```
59
+
60
+ ## windowManager
61
+ ```typescript
62
+ import { windowManager } from '@mhmo91/schmancy/window'
63
+
64
+ windowManager.focus('support') // Bring window to front
65
+ windowManager.getBounds('inspector') // Read tracked bounds
66
+ windowManager.all$ .subscribe(...) // Observable of registered windows
67
+ ```
@@ -0,0 +1,72 @@
1
+ # Schmancy — Documentation Index
2
+
3
+ A Web Component UI library on Lit + RxJS + Tailwind CSS.
4
+
5
+ ## Foundations
6
+
7
+ The framework pieces — touch before components.
8
+
9
+ - [Area](./area.md) — `<schmancy-area>`, `<schmancy-route>`, `area.push()`, `lazy()` for routing.
10
+ - [Store](./store.md) — `createContext`, `@select`, `@selectItem`, storage backends.
11
+ - [Mixins](./mixins.md) — `$LitElement` base class.
12
+ - [Theme](./theme.md) — `<schmancy-theme>`, color scheme, CSS variables.
13
+ - [Directives](./directives.md) — Lit directives for physics, effects, text, visibility, interaction.
14
+ - [Animation](./animation.md) — Spring presets (`SPRING_SMOOTH`, etc.), `createAnimation`.
15
+
16
+ ## Components by job
17
+
18
+ ### Display
19
+ [Typography](./typography.md) · [Icons](./icons.md) · [Avatar](./avatar.md) · [Divider](./divider.md) · [Badge](./badge.md) · [Code Highlight](./code-highlight.md) · [Typewriter](./typewriter.md) · [JSON](./json.md) · [Iframe](./iframe.md) · [Map](./map.md) · [Charts](./charts.md)
20
+
21
+ ### Surfaces & layout
22
+ [Surface](./surface.md) · [Card](./card.md) · [Scroll / Grid / Flex](./layout.md) · [Page](./page.md) · [Content Drawer](./content-drawer.md) · [Window](./window.md) · [Boat](./boat.md) · [Float](./float.md)
23
+
24
+ ### Forms
25
+ [Form](./form.md) · [Input](./input.md) · [Textarea](./textarea.md) · [Select](./select.md) · [Autocomplete](./autocomplete.md) · [Option](./option.md) · [Checkbox](./checkbox.md) · [Radio Group](./radio-group.md) · [Chips](./chips.md) · [Date Range](./date-range.md) · [Date Range Inline](./date-range-inline.md) · [Range](./range.md) · [Extra (Country/Timezone)](./extra.md)
26
+
27
+ ### Navigation
28
+ [Nav Drawer](./nav-drawer.md) · [Tabs](./tabs.md) · [Navigation Bar](./navigation-bar.md) · [Navigation Rail](./navigation-rail.md) · [Steps](./steps.md) · [Teleport](./teleport.md) · [Theme Button](./theme-button.md)
29
+
30
+ ### Overlays
31
+ [Dialog](./dialog.md) · [Sheet](./sheet.md) · [Notification](./notification.md) · [Menu](./menu.md) · [Dropdown](./dropdown.md) · [Tooltip](./tooltip.md) · [Lightbox](./lightbox.md) · [Expand](./expand.md)
32
+
33
+ ### Interactive
34
+ [Button](./button.md) · [List](./list.md) · [Details](./details.md) · [Table](./table.md) · [Tree](./tree.md) · [Slider](./slider.md) · [QR Scanner](./qr-scanner.md)
35
+
36
+ ### Feedback
37
+ [Progress](./progress.md) · [Busy](./busy.md) · [Connectivity](./connectivity.md) · [Delay](./delay.md)
38
+
39
+ ### Domain
40
+ [Mailbox](./mailbox.md)
41
+
42
+ ## Services (imperative APIs)
43
+
44
+ | Service | Purpose |
45
+ |---------|---------|
46
+ | `area` | Route navigation (see [area](./area.md)) |
47
+ | `$dialog` | Open dialogs (see [dialog](./dialog.md)) |
48
+ | `$notify` | Toast notifications (see [notification](./notification.md)) |
49
+ | `schmancyContentDrawer` | Side panel (see [content-drawer](./content-drawer.md)) |
50
+ | `theme` | Theme state, `fullscreen$` (see [theme](./theme.md)) |
51
+ | `sound` | Audio feedback (see [audio](./audio.md)) |
52
+ | `overlayStack` | Z-index coordinator (see [utils](./utils.md)) |
53
+ | `windowManager` | Window registry (see [window](./window.md)) |
54
+
55
+ ## Utilities
56
+
57
+ [Discovery](./discovery.md) — cross-shadow component lookup.
58
+ [RxJS Utils](./rxjs-utils.md) — `waitForElement`, `waitUntil`, `mutationObserver`.
59
+ [Utils](./utils.md) — `similarity`, `numbers`, `overlayStack`, `intersection$`, `hashContent`.
60
+ [Audio](./audio.md) — synthesized feedback sounds.
61
+
62
+ ## Conventions
63
+
64
+ - Lists use `repeat(items, item => item.id, tpl)`.
65
+ - View switching uses `cache(...)`.
66
+ - Expensive work uses `guard([deps], fn)`.
67
+ - DOM access uses `ref(createRef())`.
68
+ - Conditionals use `when(...)`, `choose(...)`, `ifDefined(...)`.
69
+ - All RxJS subscriptions end with `.pipe(takeUntil(this.disconnecting))`.
70
+ - Don't use `setTimeout` / `setInterval` / `addEventListener` — use RxJS (`timer`, `interval`, `fromEvent`).
71
+ - Colors come from `--schmancy-sys-color-*` CSS vars or Tailwind theme classes.
72
+ - `classMap(...)` must be the sole expression in `class=`; never mix with string interpolation.
package/dist/ai/area.md CHANGED
@@ -1,61 +1,141 @@
1
- # schmancy-area / schmancy-route
1
+ # Area Routing
2
2
 
3
- > Client-side router with named areas, lazy loading, route guards, and browser history integration.
3
+ Schmancy's client-side router. Three pieces:
4
+
5
+ | Piece | Role |
6
+ |-------|------|
7
+ | `<schmancy-area name="...">` | Named region that renders one route at a time |
8
+ | `<schmancy-route when="tag">` | Declares which component can render in an area |
9
+ | `area.push(...)` | Imperative navigation |
10
+
11
+ Areas can be nested to compose shell-plus-sub-view layouts.
12
+
13
+ ## Example
4
14
 
5
- ## Usage
6
15
  ```html
7
- <schmancy-area name="main" default="home-page">
8
- <schmancy-route when="home-page" .component=${lazy(() => import('./home'))}></schmancy-route>
9
- <schmancy-route when="settings-page" .component=${lazy(() => import('./settings'))}></schmancy-route>
16
+ <schmancy-area name="root" .default=${lazy(() => import('./pages/home.page'))}>
17
+ <schmancy-route when="home-page"
18
+ .component=${lazy(() => import('./pages/home.page'))}></schmancy-route>
19
+
20
+ <schmancy-route when="app-index"
21
+ .component=${lazy(() => import('./app/app.page'))}
22
+ .guard=${authState$.pipe(
23
+ map(u => !!u && !u.isAnonymous),
24
+ takeUntil(this.disconnecting),
25
+ )}
26
+ @redirect=${() => area.push({
27
+ component: 'home-page',
28
+ area: 'root',
29
+ historyStrategy: 'replace',
30
+ })}></schmancy-route>
10
31
  </schmancy-area>
11
32
  ```
12
33
 
13
- ## Properties (schmancy-area)
14
- | Property | Type | Default | Description |
15
- |----------|------|---------|-------------|
16
- | name | string | required | Unique area name |
17
- | default | RouteComponent | - | Default route component |
18
-
19
- ## Properties (schmancy-route)
20
- | Property | Type | Default | Description |
21
- |----------|------|---------|-------------|
22
- | when | string | required | Route identifier (must match `@customElement` tag) |
23
- | component | RouteComponent | required | Component to render (class, tag name, or lazy) |
24
- | exact | boolean | `false` | Exact path matching |
25
- | guard | Observable<boolean> | - | Route guard observable |
26
-
27
- ## Programmatic Navigation (area service)
34
+ ## `schmancy-area` properties
35
+
36
+ | Property | Type | Description |
37
+ |----------|------|-------------|
38
+ | `name` | string (required) | Area identifier used in `area.push({ area })` |
39
+ | `default` | `RouteComponent \| string` | Fallback when no route matches |
40
+
41
+ ## `schmancy-route` properties
42
+
43
+ | Property | Type | Description |
44
+ |----------|------|-------------|
45
+ | `when` | string (required) | Must match a `@customElement('tag')` tag name |
46
+ | `component` | `RouteComponent` (required) | Class, tag name, or `lazy()` wrapper |
47
+ | `guard` | `Observable<boolean>` | When emits `false`, blocks and dispatches `redirect` event |
48
+ | `exact` | boolean | Strict-equality matching |
49
+
50
+ ## `area` service
51
+
28
52
  ```typescript
29
53
  import { area } from '@mhmo91/schmancy'
30
54
 
31
- // Navigate
32
- area.push({ area: 'main', component: 'settings-page', params: { id: '123' } })
55
+ area.push({
56
+ area: 'root',
57
+ component: 'app-index',
58
+ params?: { id: '123' },
59
+ historyStrategy?: 'push' | 'replace' | 'silent',
60
+ })
61
+ ```
62
+
63
+ `historyStrategy`:
64
+ - `'push'` (default) — adds a browser-history entry
65
+ - `'replace'` — overwrites the current entry (use after guards or redirects)
66
+ - `'silent'` — changes the area without touching history
33
67
 
34
- // Subscribe to area changes
35
- area.on('main').pipe(takeUntil(this.disconnecting)).subscribe(route => { ... })
68
+ ### Subscribe to route state
36
69
 
37
- // Get params
38
- area.params<{id: string}>('main').pipe(takeUntil(this.disconnecting)).subscribe(params => { ... })
70
+ ```typescript
71
+ area.on('root').pipe(
72
+ takeUntil(this.disconnecting),
73
+ ).subscribe(route => { /* route.component, route.params */ })
74
+
75
+ area.params<{ id: string }>('detail').pipe(
76
+ takeUntil(this.disconnecting),
77
+ ).subscribe(params => this.loadItem(params.id))
39
78
  ```
40
79
 
41
- ## Lazy Loading
80
+ ## Lazy loading
81
+
42
82
  ```typescript
43
83
  import { lazy } from '@mhmo91/schmancy'
44
- const LazyPage = lazy(() => import('./my-page'))
84
+ const HomePage = lazy(() => import('./home.page'))
85
+
86
+ // Optional preload
87
+ html`<button @mouseenter=${() => HomePage.preload()}>Home</button>`
88
+ ```
89
+
90
+ ## Guards
91
+
92
+ `guard` is an Observable<boolean>.
93
+
94
+ - Emits `true` → route renders.
95
+ - Emits `false` → route dispatches a `redirect` event. Handle it with `area.push(...)`.
45
96
 
46
- // Preload on hover
47
- element.addEventListener('mouseenter', () => LazyPage.preload())
97
+ Auth guard:
98
+
99
+ ```typescript
100
+ <schmancy-route when="app-index"
101
+ .component=${lazy(() => import('./app'))}
102
+ .guard=${authState$.pipe(
103
+ map(u => !!u),
104
+ takeUntil(this.disconnecting),
105
+ )}
106
+ @redirect=${() => area.push({
107
+ component: 'home-page', area: 'root', historyStrategy: 'replace',
108
+ })}></schmancy-route>
48
109
  ```
49
110
 
50
- ## Examples
111
+ Compound guard (multiple streams):
112
+
113
+ ```typescript
114
+ .guard=${combineLatest([permissions$, orgContext.$]).pipe(
115
+ takeUntil(this.disconnecting),
116
+ map(([perms, org]) => perms.includes('billing.view') && org?.billing?.configured),
117
+ )}
118
+ ```
119
+
120
+ ## Nested areas
121
+
122
+ Areas nest by rendering an inner `<schmancy-area>` inside a route component. A common shape is an outer area for "signed-in vs. not" and an inner area for sub-views of the signed-in shell.
123
+
51
124
  ```html
52
- <!-- With route guard -->
53
- <schmancy-area name="admin" default="admin-dashboard">
54
- <schmancy-route when="admin-dashboard"
55
- .component=${lazy(() => import('./dashboard'))}
56
- .guard=${isAdmin$}>
57
- </schmancy-route>
125
+ <!-- outer -->
126
+ <schmancy-area name="root">
127
+ <schmancy-route when="app-index" .component=${AppShell}></schmancy-route>
128
+ </schmancy-area>
129
+
130
+ <!-- inner (inside AppShell.render()) -->
131
+ <schmancy-area name="app" default="home-page">
132
+ <schmancy-route when="home-page" .component=${...}></schmancy-route>
133
+ <schmancy-route when="settings-page" .component=${...}></schmancy-route>
58
134
  </schmancy-area>
59
135
  ```
60
136
 
61
- **Critical:** `when="tag-name"` MUST exactly match `@customElement('tag-name')` on the component class.
137
+ ## Rules
138
+
139
+ - `when="tag-name"` must match `@customElement('tag-name')` exactly.
140
+ - Guards emit `false` → always use `historyStrategy: 'replace'` in the `@redirect` handler.
141
+ - Every subscription in guards / route state uses `takeUntil(this.disconnecting)`.
@@ -0,0 +1,69 @@
1
+ # Schmancy Audio
2
+
3
+ > Emotional sound service — synthesizes short, empathetic sounds via Web Audio API keyed on feelings (joyful, tense, calm, etc.). No assets. No external players. Just tones + puffs generated on demand.
4
+
5
+ ## Usage
6
+ ```typescript
7
+ import { sound } from '@mhmo91/schmancy'
8
+
9
+ sound.play('joyful') // trigger a feeling sound
10
+ sound.setVolume(0.2) // 0..1
11
+ sound.setMuted(true)
12
+ sound.resetTheme() // back to defaults
13
+ ```
14
+
15
+ ## Feelings
16
+ Organized by emotional category:
17
+
18
+ | Category | Feelings |
19
+ |----------|----------|
20
+ | Happy | `joyful`, `content`, `excited`, `grateful`, `proud`, `loved` |
21
+ | Sad | `sad`, `disappointed`, `hurt`, `lonely`, `melancholy` |
22
+ | Anxious | `worried`, `nervous`, `overwhelmed`, `tense` |
23
+ | Angry | `frustrated`, `angry`, `annoyed` |
24
+ | Tired | `tired`, `drained`, `bored` |
25
+ | Calm | `calm`, `peaceful`, `relaxed`, `focused` |
26
+ | Connected | `connected`, `supported`, `welcomed` |
27
+ | Mixed | `confused`, `nostalgic`, `bittersweet` |
28
+
29
+ (See `mood-audio.types.ts` for the authoritative list.)
30
+
31
+ ## Observable API
32
+ ```typescript
33
+ sound.theme$.subscribe(theme => console.log(theme?.name ?? 'default'))
34
+ sound.volume$.subscribe(v => {})
35
+ sound.muted$.subscribe(m => {})
36
+ ```
37
+
38
+ ## Settings Persistence
39
+ Volume, mute, and custom theme persist to `localStorage` under key `schmancy-sound-settings` (via `createContext`).
40
+
41
+ ## AI-Generated Themes
42
+ ```typescript
43
+ import type { SoundTheme } from '@mhmo91/schmancy'
44
+
45
+ const customTheme: SoundTheme = {
46
+ name: 'ocean',
47
+ sounds: {
48
+ joyful: { puffs: [...], tones: [...] },
49
+ // partial override — falls through to defaults for anything omitted
50
+ }
51
+ }
52
+
53
+ sound.setTheme(customTheme)
54
+ ```
55
+
56
+ Each `FeelingSound` consists of:
57
+ - **puffs** — short bursts (air/noise, e.g. `{ startTime, duration, frequency, volume }`)
58
+ - **tones** — oscillators (`sine`/`triangle`/`square`/`sawtooth` with envelope)
59
+
60
+ ## Built-in Feedback Hooks
61
+ Other Schmancy components play these automatically:
62
+ - [`schmancy-connectivity-status`](./connectivity.md) on offline/online.
63
+ - Some success/error paths in notifications and dialogs via the `$sounds` legacy helper.
64
+
65
+ ## Legacy API
66
+ - `$sounds` — older generator exported for compatibility.
67
+ - `EmotionalSoundGenerator` — underlying class.
68
+
69
+ Prefer `sound` for new code.
@@ -0,0 +1,47 @@
1
+ # schmancy-boat
2
+
3
+ > Draggable floating FAB that expands into a panel. Great for persistent assistant/chat panels.
4
+
5
+ > **Note:** `schmancy-window` is the evolved successor with more capabilities (resize, maximize, multi-window registry). Prefer `schmancy-window` for new code unless you want the simpler FAB-to-panel model.
6
+
7
+ ## Usage
8
+ ```html
9
+ <schmancy-boat id="assistant" icon="smart_toy" label="Assistant">
10
+ <div slot="header">Assistant</div>
11
+ <div class="p-4">Panel body content</div>
12
+ </schmancy-boat>
13
+ ```
14
+
15
+ ## Properties
16
+ | Property | Type | Default | Description |
17
+ |----------|------|---------|-------------|
18
+ | `id` | string | `'default'` | Unique identifier (persists drag position in localStorage) |
19
+ | `icon` | string | — | Material icon for the FAB state |
20
+ | `label` | string | — | Label text in FAB state |
21
+ | `open` | boolean | `false` | Panel open/closed (reflected) |
22
+ | `corner` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | `'bottom-right'` | Anchor corner |
23
+ | `expandedWidth` | string | responsive | e.g. `'320px'` |
24
+ | `lowered` | boolean | `false` | Lower shadow in FAB state |
25
+
26
+ ## Getter / Setter
27
+ ```typescript
28
+ boat.state = 'expanded' | 'collapsed' // equivalent to open = true/false
29
+ boat.state // current state
30
+ boat.expand() / boat.close()
31
+ ```
32
+
33
+ ## Behavior
34
+ - Drag to reposition. Releases snap to the nearest corner.
35
+ - Open/close uses clip-path + `SPRING_SMOOTH` for elegant reveal.
36
+ - Position persists in `localStorage` under `schmancy-boat-{id}`.
37
+ - Respects `prefers-reduced-motion`.
38
+
39
+ ## Example
40
+ ```html
41
+ <schmancy-boat id="chat" icon="chat" label="Chat" corner="bottom-right">
42
+ <span slot="header">Messages</span>
43
+ <schmancy-list class="p-2">
44
+ <!-- messages -->
45
+ </schmancy-list>
46
+ </schmancy-boat>
47
+ ```