@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
package/README.md CHANGED
@@ -16,17 +16,17 @@ import { magnetic, cursorGlow, gravity } from '@mhmo91/schmancy/directives'
16
16
  ## Quick Start
17
17
 
18
18
  ```html
19
- <schmancy-theme color="#6200ee" scheme="auto">
20
- <schmancy-surface type="subtle" rounded="all" fill="all">
21
- <schmancy-button variant="filled">Click me</schmancy-button>
19
+ <schmancy-theme root scheme="dark">
20
+ <schmancy-surface type="solid" fill="all">
21
+ <schmancy-area name="root" .default=${lazy(() => import('./home.page'))}>
22
+ <schmancy-route when="home-page" .component=${lazy(() => import('./home.page'))} />
23
+ </schmancy-area>
22
24
  </schmancy-surface>
23
25
  </schmancy-theme>
24
26
  ```
25
27
 
26
28
  ## Design: Luminous Glass
27
29
 
28
- Every surface is translucent glass. Depth = blur intensity. Elevation = colored glow. Interactions = spring physics.
29
-
30
30
  | Surface | Opacity | Blur | Purpose |
31
31
  |---------|---------|------|---------|
32
32
  | `solid` | 92% | — | Dense glass, high readability |
@@ -34,77 +34,21 @@ Every surface is translucent glass. Depth = blur intensity. Elevation = colored
34
34
  | `glass` | 55% | 16px | Overlays, dialogs, dropdowns |
35
35
  | `luminous` | 42% | 20px | Hero panels with glow halo |
36
36
 
37
- ## Components
38
-
39
- ### Surfaces & Layout
40
- - [Surface](./ai/surface.md) — Glass depth system: solid, subtle, glass, luminous
41
- - [Card](./ai/card.md) Content containers with glow elevation and cursorGlow
42
- - [Content Drawer](./ai/content-drawer.md) Master-detail split panels
43
- - [Divider](./ai/divider.md) — Visual separators
44
-
45
- ### Navigation
46
- - [Tabs](./ai/tabs.md) — Tabbed interfaces
47
- - [Navigation Bar](./ai/navigation-bar.md) — Bottom navigation (mobile)
48
- - [Navigation Rail](./ai/navigation-rail.md) — Side navigation (desktop)
49
- - [Nav Drawer](./ai/nav-drawer.md) — Slide-out navigation drawer
50
- - [Steps](./ai/steps.md) — Multi-step process indicator
51
- - [Area](./ai/area.md) — Client-side routing
52
-
53
- ### Overlays
54
- - [Dialog](./ai/dialog.md) — Glass modal dialogs with cursorGlow
55
- - [Sheet](./ai/sheet.md) — Side/bottom panels with glass backdrop
56
- - [Notification](./ai/notification.md) — Toast notifications with type-colored glow
57
- - [Menu](./ai/menu.md) — Context menus
58
- - [Dropdown](./ai/dropdown.md) — Floating dropdown panels
59
- - [Tooltip](./ai/tooltip.md) — Hover tooltips
60
- - [Lightbox](./ai/lightbox.md) — Image gallery with FLIP animations
61
-
62
- ### Form Elements
63
- - [Input](./ai/input.md) — Text input with luminous focus glow
64
- - [Textarea](./ai/textarea.md) — Multi-line text input
65
- - [Select](./ai/select.md) — Dropdown select
66
- - [Autocomplete](./ai/autocomplete.md) — Searchable dropdown
67
- - [Checkbox](./ai/checkbox.md) — Checkboxes
68
- - [Radio Group](./ai/radio-group.md) — Radio buttons
69
- - [Chips](./ai/chips.md) — Filter/input/suggestion chips with magnetic
70
- - [Form](./ai/form.md) — Form container with validation
71
- - [Date Range](./ai/date-range.md) — Date pickers
72
-
73
- ### Interactive Elements
74
- - [Button](./ai/button.md) — Buttons with magnetic + glow hover
75
- - [List](./ai/list.md) — Interactive lists with glass hover
76
- - [Details](./ai/details.md) — Expandable sections with magnetic summary
77
- - [Table](./ai/table.md) — Data tables
78
- - [Tree](./ai/tree.md) — Hierarchical tree view
79
-
80
- ### Feedback
81
- - [Progress](./ai/progress.md) — Linear progress bar
82
- - [Busy](./ai/busy.md) — Loading overlays
83
- - [Badge](./ai/badge.md) — Status indicators
84
-
85
- ### Display
86
- - [Typography](./ai/typography.md) — Text styling system
87
- - [Icons](./ai/icons.md) — Material Symbols
88
- - [Avatar](./ai/avatar.md) — Profile images with fallback initials
89
- - [Code Highlight](./ai/code-highlight.md) — Syntax highlighting
90
-
91
- ## Directives
92
-
93
- 19 Lit directives that snap onto any element. [Full reference →](./ai/directives.md)
94
-
95
- **Physics:** `magnetic`, `cursorGlow`, `livingBorder`, `gravity`, `depthOfField`, `longPress`
96
- **Effects:** `nebula`, `liquid`, `ripple`
97
- **Text:** `animateText`, `cycleText`, `typewriter`
98
- **Visibility:** `reveal`, `intersect`
99
- **Interaction:** `drag`, `drop`, `color`
100
-
101
- ## System
102
-
103
- - [Theme](./ai/theme.md) — Color theming + dark/light mode
104
- - [Store](./ai/store.md) — Reactive state management with persistence
105
- - [Mixins](./ai/mixins.md) — $LitElement base mixin with RxJS lifecycle
106
- - [Animation](./ai/animation.md) — Blackbird spring physics system
37
+ ## Docs
38
+
39
+ Schmancy is organized in four layers:
40
+
41
+ - **Foundations** — [Area](./ai/area.md) · [Store](./ai/store.md) · [Mixins ($LitElement)](./ai/mixins.md) · [Theme](./ai/theme.md) · [Directives](./ai/directives.md)
42
+ - **Atoms** — [Typography](./ai/typography.md) · [Icons](./ai/icons.md) · [Button](./ai/button.md) · [Surface](./ai/surface.md) · [Divider](./ai/divider.md) · [Avatar](./ai/avatar.md)
43
+ - **Composites (by job)**Forms, Navigation, Overlays, Interaction, Feedback, Display
44
+ - **Utilities** — [Animation](./ai/animation.md) · [Audio](./ai/audio.md) · [Discovery](./ai/discovery.md) · [RxJS Utils](./ai/rxjs-utils.md) · [Utils](./ai/utils.md)
45
+
46
+ **Full component index:** [ai/INDEX.md](./ai/INDEX.md) — the single-file map with every tag, service, and convention. Written primarily for AI agents; humans welcome.
107
47
 
108
48
  ## Tech Stack
109
49
 
110
50
  [Lit](https://lit.dev) · [RxJS](https://rxjs.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Blackbird](./src/utils/animation.ts)
51
+
52
+ ## License
53
+
54
+ Apache-2.0
package/ai/INDEX.md ADDED
@@ -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/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)`.
package/ai/audio.md ADDED
@@ -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.
package/ai/boat.md ADDED
@@ -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
+ ```
package/ai/charts.md ADDED
@@ -0,0 +1,93 @@
1
+ # Schmancy Charts
2
+
3
+ > Canvas-rendered area chart and horizontal pill chart. Theme-aware, lazy-animated, with auto peak highlighting.
4
+
5
+ ## schmancy-area-chart
6
+
7
+ > Smooth Catmull-Rom spline area chart with peak markers and hover tooltips.
8
+
9
+ ```html
10
+ <schmancy-area-chart
11
+ .data=${[
12
+ { label: '9 AM', value: 12.4 },
13
+ { label: '10 AM', value: 18.9 },
14
+ { label: '11 AM', value: 42.1, metadata: { users: 320 } },
15
+ { label: '12 PM', value: 56.7 },
16
+ ]}
17
+ value-prefix="EUR "
18
+ value-decimals="2"
19
+ peak-count="2"
20
+ height="240"
21
+ ></schmancy-area-chart>
22
+ ```
23
+
24
+ ### Properties
25
+ | Property | Type | Default | Description |
26
+ |----------|------|---------|-------------|
27
+ | `data` | `ChartDataPoint[]` | `[]` | `{ label, value, metadata? }[]` |
28
+ | `height` | number | `200` | Chart height in px |
29
+ | `showGrid` | boolean | `true` | Background grid lines |
30
+ | `showLabels` | boolean | `true` | X-axis labels |
31
+ | `showTooltip` | boolean | `true` | Hover tooltip |
32
+ | `peakCount` | number | `3` | Top-N points highlighted larger |
33
+ | `animationDuration` | number | `800` | Entrance animation ms |
34
+ | `animated` | boolean | `true` | Animate on first visible |
35
+ | `valuePrefix` | string | `''` | Display prefix (e.g. `"EUR "`) |
36
+ | `valueSuffix` | string | `''` | Display suffix (e.g. `"%"`) |
37
+ | `valueDecimals` | number | `2` | Decimal places |
38
+ | `theme` | `Partial<ChartTheme>` | `{}` | Override colors, stroke, radii |
39
+
40
+ ### ChartTheme
41
+ | Key | Default | Description |
42
+ |-----|---------|-------------|
43
+ | `primaryColor` | `--schmancy-sys-color-primary` | Line + fill gradient color |
44
+ | `gradientOpacity` | `[0.4, 0.05]` | Top/bottom fill opacity |
45
+ | `strokeWidth` | `2` | Line thickness |
46
+ | `pointRadius` | `4` | Normal point radius |
47
+ | `peakRadius` | `6` | Peak point radius |
48
+
49
+ ## schmancy-pills
50
+
51
+ > Horizontal bar chart with optional stacked segments, medal ranks, and peak/low styling.
52
+
53
+ ```html
54
+ <schmancy-pills
55
+ .data=${[
56
+ { label: 'Mon', value: 1240, rank: 1 },
57
+ { label: 'Tue', value: 980 },
58
+ { label: 'Wed', value: 1830, rank: 2, segments: [
59
+ { label: 'Pizza', value: 1200 },
60
+ { label: 'Drinks', value: 630 }
61
+ ]},
62
+ ]}
63
+ ></schmancy-pills>
64
+ ```
65
+
66
+ ### Properties
67
+ | Property | Type | Default | Description |
68
+ |----------|------|---------|-------------|
69
+ | `data` | `PillDataPoint[]` | `[]` | Rows with optional stacked `segments` |
70
+ | `valuePrefix` / `valueSuffix` / `valueDecimals` | — | — | Value formatting (same as area chart) |
71
+ | `showMedals` | boolean | `true` | Show 🥇🥈🥉 for rank 1/2/3 |
72
+
73
+ ### PillDataPoint
74
+ ```typescript
75
+ {
76
+ label: string
77
+ value: number
78
+ segments?: { label, value, color }[] // stacked
79
+ isPeak?: boolean // highlighted
80
+ isLow?: boolean // muted
81
+ rank?: 1 | 2 | 3 // medal
82
+ metadata?: Record<string, unknown>
83
+ }
84
+ ```
85
+
86
+ ## Behavior
87
+ - Both charts use an IntersectionObserver to defer animation until visible.
88
+ - Responsive — resize triggers a re-render.
89
+ - Dark/light aware via theme CSS variables.
90
+
91
+ ## When to Use
92
+ - Area chart: time-series or comparative trends.
93
+ - Pills: ranked categorical data (leaderboards, top days, distribution).
@@ -0,0 +1,36 @@
1
+ # schmancy-connectivity-status
2
+
3
+ > App-wide online/offline banner. Mount once near the root and forget it.
4
+
5
+ ## Usage
6
+ ```html
7
+ <!-- In your app shell -->
8
+ <schmancy-connectivity-status></schmancy-connectivity-status>
9
+ ```
10
+
11
+ ## Properties
12
+ None — it's entirely self-driven from `window` online/offline events.
13
+
14
+ ## Behavior
15
+ - Listens to `window` `online` / `offline` events via RxJS `merge`.
16
+ - `distinctUntilChanged` prevents duplicate banners.
17
+ - Animated slide-down banner with spring-style easing when state changes.
18
+ - Offline: error-colored banner with pulsing icon.
19
+ - Online (after offline): success-colored banner with bouncing icon, auto-dismisses after a short timer.
20
+ - Plays matching sounds from the `$sounds` audio service (skipped on initial load).
21
+ - Respects `prefers-reduced-motion` implicitly via CSS.
22
+
23
+ ## Setup
24
+ Place it once at the root — typically just inside your main `schmancy-theme` or app shell:
25
+
26
+ ```html
27
+ <schmancy-theme>
28
+ <schmancy-connectivity-status></schmancy-connectivity-status>
29
+ <schmancy-page>
30
+ <!-- rest of app -->
31
+ </schmancy-page>
32
+ </schmancy-theme>
33
+ ```
34
+
35
+ ## See Also
36
+ - [audio.md](./audio.md) — the `$sounds` service used for feedback tones.
@@ -0,0 +1,44 @@
1
+ # schmancy-date-range-inline
2
+
3
+ > Smart inline from/to date picker with validation, auto-correction, and gap constraints. Simpler surface than the full `schmancy-date-range` popover.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-date-range-inline
8
+ .dateFrom=${{ label: 'Check-in', value: '2026-05-01' }}
9
+ .dateTo=${{ label: 'Check-out', value: '2026-05-05' }}
10
+ min-date="2026-01-01"
11
+ max-date="2026-12-31"
12
+ .minGap=${1}
13
+ .maxGap=${30}
14
+ @change=${e => this.handleRange(e.detail)}
15
+ ></schmancy-date-range-inline>
16
+ ```
17
+
18
+ ## Properties
19
+ | Property | Type | Default | Description |
20
+ |----------|------|---------|-------------|
21
+ | `type` | `'date' \| 'datetime-local'` | `'date'` | Underlying input type |
22
+ | `dateFrom` | `{ label, value }` | `{ label: 'From', value: '' }` | From-date configuration |
23
+ | `dateTo` | `{ label, value }` | `{ label: 'To', value: '' }` | To-date configuration |
24
+ | `minDate` | string | — | Minimum selectable date (ISO string) |
25
+ | `maxDate` | string | — | Maximum selectable date (ISO string) |
26
+ | `compact` | boolean | `false` | Tighter UI spacing |
27
+ | `autoCorrect` | boolean | `true` | Auto-fix invalid ranges (e.g. swap if from > to) |
28
+ | `minGap` | number | `0` | Minimum days between from and to |
29
+ | `maxGap` | number | — | Maximum days between from and to |
30
+ | `defaultGap` | number | `1` | Default gap when seeding the second date |
31
+ | `allowSameDate` | boolean | `false` | Permit from === to |
32
+
33
+ ## Events
34
+ | Event | Detail | When |
35
+ |-------|--------|------|
36
+ | `change` | `{ dateFrom, dateTo, isValid }` | Either input changes |
37
+
38
+ ## Behavior
39
+ - Extends `SchmancyFormField()` — integrates with `schmancy-form` validation.
40
+ - Auto-correction: invalid ranges flip, or the second date shifts to respect `minGap`/`maxGap`.
41
+ - Inline (not a popover) — always visible, good for filters and trip-planning UIs.
42
+
43
+ ## Prefer full picker
44
+ For a popup calendar with presets and visual selection, use [`schmancy-date-range`](./date-range.md).