@mhmo91/schmancy 0.9.2 → 0.9.3

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 (386) hide show
  1. package/README.md +19 -75
  2. package/ai/INDEX.md +321 -0
  3. package/ai/area.md +194 -40
  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 +169 -38
  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 +158 -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 +321 -0
  33. package/dist/ai/area.md +194 -40
  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 +169 -38
  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 +158 -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-CC8fUnra.js} +2 -2
  63. package/dist/{area-DbBcfm5p.js.map → area-CC8fUnra.js.map} +1 -1
  64. package/dist/{area-1h9xEpTc.cjs → area-wnWUAHEn.cjs} +1 -1
  65. package/dist/{area-1h9xEpTc.cjs.map → area-wnWUAHEn.cjs.map} +1 -1
  66. package/dist/area.cjs +1 -1
  67. package/dist/area.js +1 -1
  68. package/dist/{autocomplete-OE70CcYP.cjs → autocomplete-B2Z3WK_7.cjs} +1 -1
  69. package/dist/{autocomplete-OE70CcYP.cjs.map → autocomplete-B2Z3WK_7.cjs.map} +1 -1
  70. package/dist/{autocomplete-DDVsegep.js → autocomplete-CJ7YgtKN.js} +3 -3
  71. package/dist/{autocomplete-DDVsegep.js.map → autocomplete-CJ7YgtKN.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-Cf1oJ0ka.cjs → boat-B57_4TzJ.cjs} +1 -1
  77. package/dist/{boat-Cf1oJ0ka.cjs.map → boat-B57_4TzJ.cjs.map} +1 -1
  78. package/dist/{boat-T8Ov4-yA.js → boat-C9eU6NO-.js} +2 -2
  79. package/dist/{boat-T8Ov4-yA.js.map → boat-C9eU6NO-.js.map} +1 -1
  80. package/dist/boat.cjs +1 -1
  81. package/dist/boat.js +1 -1
  82. package/dist/{busy-DF9wztWL.cjs → busy--6oimtop.cjs} +1 -1
  83. package/dist/{busy-DF9wztWL.cjs.map → busy--6oimtop.cjs.map} +1 -1
  84. package/dist/{busy-BD6D5P-l.js → busy-CGZXy0h-.js} +1 -1
  85. package/dist/{busy-BD6D5P-l.js.map → busy-CGZXy0h-.js.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-BGJ0Hb1O.cjs} +1 -1
  91. package/dist/{card-Csvu8UJ9.cjs.map → card-BGJ0Hb1O.cjs.map} +1 -1
  92. package/dist/{card-DM_miKMd.js → card-C-ee-l5O.js} +1 -1
  93. package/dist/{card-DM_miKMd.js.map → card-C-ee-l5O.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-DuYaKoDZ.cjs} +1 -1
  99. package/dist/{checkbox-sJujc_ga.cjs.map → checkbox-DuYaKoDZ.cjs.map} +1 -1
  100. package/dist/{checkbox-BgGtMaMR.js → checkbox-FRcorDrD.js} +1 -1
  101. package/dist/{checkbox-BgGtMaMR.js.map → checkbox-FRcorDrD.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-BpA0A-qr.cjs} +1 -1
  105. package/dist/{chips-D_e6wijp.cjs.map → chips-BpA0A-qr.cjs.map} +1 -1
  106. package/dist/{chips-BZaH4wez.js → chips-CyzNbKJD.js} +3 -3
  107. package/dist/{chips-BZaH4wez.js.map → chips-CyzNbKJD.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-C7O9ltXm.js} +1 -1
  111. package/dist/{code-highlight-Q3cc6ukq.js.map → code-highlight-C7O9ltXm.js.map} +1 -1
  112. package/dist/{code-highlight-DlhERv_O.cjs → code-highlight-DsBdSQBG.cjs} +1 -1
  113. package/dist/{code-highlight-DlhERv_O.cjs.map → code-highlight-DsBdSQBG.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-CkMvOiTR.js} +2 -2
  117. package/dist/{components-CRhkB3V2.js.map → components-CkMvOiTR.js.map} +1 -1
  118. package/dist/{components-DnlEYYDs.cjs → components-dDI3xeIf.cjs} +1 -1
  119. package/dist/{components-DnlEYYDs.cjs.map → components-dDI3xeIf.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-cymbTDnl.cjs → date-range-70zhLUKE.cjs} +1 -1
  127. package/dist/{date-range-cymbTDnl.cjs.map → date-range-70zhLUKE.cjs.map} +1 -1
  128. package/dist/{date-range-C0IYnvHF.js → date-range-BrN_Bs6_.js} +3 -3
  129. package/dist/{date-range-C0IYnvHF.js.map → date-range-BrN_Bs6_.js.map} +1 -1
  130. package/dist/{date-range-inline-Cfwt-ReH.cjs → date-range-inline-CPzD-tIv.cjs} +1 -1
  131. package/dist/{date-range-inline-Cfwt-ReH.cjs.map → date-range-inline-CPzD-tIv.cjs.map} +1 -1
  132. package/dist/{date-range-inline-0ENN4Plz.js → date-range-inline-Cp294DxR.js} +1 -1
  133. package/dist/{date-range-inline-0ENN4Plz.js.map → date-range-inline-Cp294DxR.js.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-COcAkBqB.cjs} +1 -1
  139. package/dist/{delay-D6mQLUp-.cjs.map → delay-COcAkBqB.cjs.map} +1 -1
  140. package/dist/{delay-D1dVP93u.js → delay-IV0Swce2.js} +3 -3
  141. package/dist/{delay-D1dVP93u.js.map → delay-IV0Swce2.js.map} +1 -1
  142. package/dist/delay.cjs +1 -1
  143. package/dist/delay.js +1 -1
  144. package/dist/{details-Cv4OOrVW.js → details-CuKmr3Qw.js} +2 -2
  145. package/dist/{details-Cv4OOrVW.js.map → details-CuKmr3Qw.js.map} +1 -1
  146. package/dist/{details-CPT_Mi4e.cjs → details-DgWkPqmt.cjs} +1 -1
  147. package/dist/{details-CPT_Mi4e.cjs.map → details-DgWkPqmt.cjs.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/{divider-DDC-kND3.js → divider-BWoUbfgZ.js} +2 -2
  153. package/dist/{divider-DDC-kND3.js.map → divider-BWoUbfgZ.js.map} +1 -1
  154. package/dist/{divider-nZ_2to2N.cjs → divider-BghtrMbn.cjs} +1 -1
  155. package/dist/{divider-nZ_2to2N.cjs.map → divider-BghtrMbn.cjs.map} +1 -1
  156. package/dist/divider.cjs +1 -1
  157. package/dist/divider.js +1 -1
  158. package/dist/dropdown.cjs +1 -1
  159. package/dist/dropdown.js +2 -2
  160. package/dist/{expand-Bp3N8CcL.js → expand-CJU9m4ga.js} +3 -3
  161. package/dist/{expand-Bp3N8CcL.js.map → expand-CJU9m4ga.js.map} +1 -1
  162. package/dist/{expand-Crdts9q_.cjs → expand-XyDE5SsO.cjs} +1 -1
  163. package/dist/{expand-Crdts9q_.cjs.map → expand-XyDE5SsO.cjs.map} +1 -1
  164. package/dist/expand.cjs +1 -1
  165. package/dist/expand.js +1 -1
  166. package/dist/{extra-DupwhQhC.js → extra-BxXFmW1w.js} +2 -2
  167. package/dist/{extra-DupwhQhC.js.map → extra-BxXFmW1w.js.map} +1 -1
  168. package/dist/{extra-B0IZCg0t.cjs → extra-CsrRKKqE.cjs} +1 -1
  169. package/dist/{extra-B0IZCg0t.cjs.map → extra-CsrRKKqE.cjs.map} +1 -1
  170. package/dist/extra.cjs +1 -1
  171. package/dist/extra.js +1 -1
  172. package/dist/{float-Dqdc1_S5.js → float-BD86t_NU.js} +2 -2
  173. package/dist/{float-Dqdc1_S5.js.map → float-BD86t_NU.js.map} +1 -1
  174. package/dist/{float-CQoJ_oSB.cjs → float-DBv1FINW.cjs} +1 -1
  175. package/dist/{float-CQoJ_oSB.cjs.map → float-DBv1FINW.cjs.map} +1 -1
  176. package/dist/float.cjs +1 -1
  177. package/dist/float.js +1 -1
  178. package/dist/{form-CW5XNuTg.js → form-Cp5-I_ZV.js} +1 -1
  179. package/dist/{form-CW5XNuTg.js.map → form-Cp5-I_ZV.js.map} +1 -1
  180. package/dist/{form-CvoLqMY7.cjs → form-D0bIeDWT.cjs} +1 -1
  181. package/dist/{form-CvoLqMY7.cjs.map → form-D0bIeDWT.cjs.map} +1 -1
  182. package/dist/form.cjs +1 -1
  183. package/dist/form.js +1 -1
  184. package/dist/{icons-Cpfdb7sA.js → icons-BpU0_l92.js} +1 -1
  185. package/dist/{icons-Cpfdb7sA.js.map → icons-BpU0_l92.js.map} +1 -1
  186. package/dist/{icons-BLQHEbIk.cjs → icons-D8w_20mO.cjs} +1 -1
  187. package/dist/{icons-BLQHEbIk.cjs.map → icons-D8w_20mO.cjs.map} +1 -1
  188. package/dist/icons.cjs +1 -1
  189. package/dist/icons.js +1 -1
  190. package/dist/{iframe-sJGXBbxT.cjs → iframe-BjwxA2Pg.cjs} +1 -1
  191. package/dist/{iframe-sJGXBbxT.cjs.map → iframe-BjwxA2Pg.cjs.map} +1 -1
  192. package/dist/{iframe-DG6HVYdy.js → iframe-tY1GY5g1.js} +1 -1
  193. package/dist/{iframe-DG6HVYdy.js.map → iframe-tY1GY5g1.js.map} +1 -1
  194. package/dist/iframe.cjs +1 -1
  195. package/dist/iframe.js +1 -1
  196. package/dist/index.cjs +1 -1
  197. package/dist/index.js +33 -33
  198. package/dist/{input-BevxycIt.js → input-BnfTpRN9.js} +1 -1
  199. package/dist/{input-BevxycIt.js.map → input-BnfTpRN9.js.map} +1 -1
  200. package/dist/{input-DGTdmp1Q.cjs → input-BwxwognS.cjs} +1 -1
  201. package/dist/{input-DGTdmp1Q.cjs.map → input-BwxwognS.cjs.map} +1 -1
  202. package/dist/{input-chip-BWS-SFU4.js → input-chip-CkM2aYmO.js} +1 -1
  203. package/dist/{input-chip-BWS-SFU4.js.map → input-chip-CkM2aYmO.js.map} +1 -1
  204. package/dist/{input-chip-CKVtjInb.cjs → input-chip-MjOwX5EY.cjs} +1 -1
  205. package/dist/{input-chip-CKVtjInb.cjs.map → input-chip-MjOwX5EY.cjs.map} +1 -1
  206. package/dist/input.cjs +1 -1
  207. package/dist/input.js +1 -1
  208. package/dist/json.cjs +1 -1
  209. package/dist/json.js +2 -2
  210. package/dist/{layout-CQdd8UCr.cjs → layout-BV0EeyUS.cjs} +1 -1
  211. package/dist/{layout-CQdd8UCr.cjs.map → layout-BV0EeyUS.cjs.map} +1 -1
  212. package/dist/{layout-DxLjlDfr.js → layout-CJSlZlFL.js} +2 -2
  213. package/dist/{layout-DxLjlDfr.js.map → layout-CJSlZlFL.js.map} +1 -1
  214. package/dist/layout.cjs +1 -1
  215. package/dist/layout.js +2 -2
  216. package/dist/{lightbox-C_863_XU.cjs → lightbox-CpNMZHZW.cjs} +1 -1
  217. package/dist/{lightbox-C_863_XU.cjs.map → lightbox-CpNMZHZW.cjs.map} +1 -1
  218. package/dist/{lightbox-Bjc55lHH.js → lightbox-groqGmJH.js} +2 -2
  219. package/dist/{lightbox-Bjc55lHH.js.map → lightbox-groqGmJH.js.map} +1 -1
  220. package/dist/lightbox.cjs +1 -1
  221. package/dist/lightbox.js +1 -1
  222. package/dist/{list-CaXzdN9_.cjs → list-CyHd0Zc2.cjs} +1 -1
  223. package/dist/{list-CaXzdN9_.cjs.map → list-CyHd0Zc2.cjs.map} +1 -1
  224. package/dist/{list-BAqhlzZd.js → list-DzkqT_r-.js} +2 -2
  225. package/dist/{list-BAqhlzZd.js.map → list-DzkqT_r-.js.map} +1 -1
  226. package/dist/list.cjs +1 -1
  227. package/dist/list.js +1 -1
  228. package/dist/{litElement.mixin-DN6X9_wD.cjs → litElement.mixin-BG6_-nYX.cjs} +1 -1
  229. package/dist/{litElement.mixin-DN6X9_wD.cjs.map → litElement.mixin-BG6_-nYX.cjs.map} +1 -1
  230. package/dist/{litElement.mixin-Dktub0ri.js → litElement.mixin-Dm-4L8zL.js} +1 -1
  231. package/dist/{litElement.mixin-Dktub0ri.js.map → litElement.mixin-Dm-4L8zL.js.map} +1 -1
  232. package/dist/{mailbox-DuMUH4f3.js → mailbox-BcqnXYVP.js} +4 -4
  233. package/dist/{mailbox-DuMUH4f3.js.map → mailbox-BcqnXYVP.js.map} +1 -1
  234. package/dist/{mailbox-BvsLXpvy.cjs → mailbox-C5eYTd7p.cjs} +1 -1
  235. package/dist/{mailbox-BvsLXpvy.cjs.map → mailbox-C5eYTd7p.cjs.map} +1 -1
  236. package/dist/mailbox.cjs +1 -1
  237. package/dist/mailbox.js +1 -1
  238. package/dist/{map-C2Msv9TQ.cjs → map-BncheFt5.cjs} +1 -1
  239. package/dist/{map-C2Msv9TQ.cjs.map → map-BncheFt5.cjs.map} +1 -1
  240. package/dist/{map-DkIy1ph7.js → map-C0o1PgLE.js} +1 -1
  241. package/dist/{map-DkIy1ph7.js.map → map-C0o1PgLE.js.map} +1 -1
  242. package/dist/map.cjs +1 -1
  243. package/dist/map.js +1 -1
  244. package/dist/{menu-DEeDKW5U.js → menu-uwqlQbLd.js} +2 -2
  245. package/dist/{menu-DEeDKW5U.js.map → menu-uwqlQbLd.js.map} +1 -1
  246. package/dist/{menu-Mm71lv9k.cjs → menu-yXzwJZFf.cjs} +1 -1
  247. package/dist/{menu-Mm71lv9k.cjs.map → menu-yXzwJZFf.cjs.map} +1 -1
  248. package/dist/menu.cjs +1 -1
  249. package/dist/menu.js +1 -1
  250. package/dist/mixins.cjs +1 -1
  251. package/dist/mixins.js +3 -3
  252. package/dist/nav-drawer.cjs +1 -1
  253. package/dist/nav-drawer.js +1 -1
  254. package/dist/navigation-bar.cjs +1 -1
  255. package/dist/navigation-bar.js +1 -1
  256. package/dist/navigation-rail.cjs +1 -1
  257. package/dist/navigation-rail.js +2 -2
  258. package/dist/{notification-cTgXEDZ0.cjs → notification-BjwTfLAl.cjs} +1 -1
  259. package/dist/{notification-cTgXEDZ0.cjs.map → notification-BjwTfLAl.cjs.map} +1 -1
  260. package/dist/{notification-K-ug8cKk.js → notification-DzYT4deA.js} +3 -3
  261. package/dist/{notification-K-ug8cKk.js.map → notification-DzYT4deA.js.map} +1 -1
  262. package/dist/notification.cjs +1 -1
  263. package/dist/notification.js +1 -1
  264. package/dist/{option-5rEOmtAm.cjs → option-BJsD3u2D.cjs} +1 -1
  265. package/dist/{option-5rEOmtAm.cjs.map → option-BJsD3u2D.cjs.map} +1 -1
  266. package/dist/{option-TFSKvSjT.js → option-JFHxgiYl.js} +1 -1
  267. package/dist/{option-TFSKvSjT.js.map → option-JFHxgiYl.js.map} +1 -1
  268. package/dist/option.cjs +1 -1
  269. package/dist/option.js +1 -1
  270. package/dist/page.cjs +1 -1
  271. package/dist/page.js +3 -3
  272. package/dist/{progress-Cta3nM-f.js → progress-BUh5WBqx.js} +2 -2
  273. package/dist/{progress-Cta3nM-f.js.map → progress-BUh5WBqx.js.map} +1 -1
  274. package/dist/{progress-iu0AMbSg.cjs → progress-BoRmyGAa.cjs} +1 -1
  275. package/dist/{progress-iu0AMbSg.cjs.map → progress-BoRmyGAa.cjs.map} +1 -1
  276. package/dist/progress.cjs +1 -1
  277. package/dist/progress.js +1 -1
  278. package/dist/{provide-D69zybs5.js → provide-8MrDz_qX.js} +1 -1
  279. package/dist/{provide-D69zybs5.js.map → provide-8MrDz_qX.js.map} +1 -1
  280. package/dist/{provide-BEyyKlDM.cjs → provide-CDkxgjHb.cjs} +1 -1
  281. package/dist/{provide-BEyyKlDM.cjs.map → provide-CDkxgjHb.cjs.map} +1 -1
  282. package/dist/qr-scanner.cjs +1 -1
  283. package/dist/qr-scanner.js +2 -2
  284. package/dist/{radio-group-BjSWmYJC.js → radio-group-DbOWUPhi.js} +1 -1
  285. package/dist/{radio-group-BjSWmYJC.js.map → radio-group-DbOWUPhi.js.map} +1 -1
  286. package/dist/{radio-group-DKPN0T50.cjs → radio-group-rhrvhB5X.cjs} +1 -1
  287. package/dist/{radio-group-DKPN0T50.cjs.map → radio-group-rhrvhB5X.cjs.map} +1 -1
  288. package/dist/radio-group.cjs +1 -1
  289. package/dist/radio-group.js +1 -1
  290. package/dist/range.cjs +1 -1
  291. package/dist/range.js +1 -1
  292. package/dist/{scroll-mayaGGpE.cjs → scroll-BE9W9PF2.cjs} +1 -1
  293. package/dist/{scroll-mayaGGpE.cjs.map → scroll-BE9W9PF2.cjs.map} +1 -1
  294. package/dist/{scroll-tG1vaRFO.js → scroll-qGks1R0k.js} +1 -1
  295. package/dist/{scroll-tG1vaRFO.js.map → scroll-qGks1R0k.js.map} +1 -1
  296. package/dist/{select-CepryGGP.js → select-D9sgBRjU.js} +2 -2
  297. package/dist/{select-CepryGGP.js.map → select-D9sgBRjU.js.map} +1 -1
  298. package/dist/{select-C4YK5Arj.cjs → select-DXU2kzg4.cjs} +1 -1
  299. package/dist/{select-C4YK5Arj.cjs.map → select-DXU2kzg4.cjs.map} +1 -1
  300. package/dist/select.cjs +1 -1
  301. package/dist/select.js +1 -1
  302. package/dist/{sheet-D2uT95S1.js → sheet-CIxCCJ3H.js} +4 -4
  303. package/dist/{sheet-D2uT95S1.js.map → sheet-CIxCCJ3H.js.map} +1 -1
  304. package/dist/{sheet-Cy4C2-kG.cjs → sheet-CeX6BbNp.cjs} +1 -1
  305. package/dist/{sheet-Cy4C2-kG.cjs.map → sheet-CeX6BbNp.cjs.map} +1 -1
  306. package/dist/sheet.cjs +1 -1
  307. package/dist/sheet.js +2 -2
  308. package/dist/{sheet.service-Os8KJGSE.js → sheet.service-CAB7weBc.js} +1 -1
  309. package/dist/{sheet.service-Os8KJGSE.js.map → sheet.service-CAB7weBc.js.map} +1 -1
  310. package/dist/{sheet.service-Dv5Hwj3k.cjs → sheet.service-DPAp7E3x.cjs} +1 -1
  311. package/dist/{sheet.service-Dv5Hwj3k.cjs.map → sheet.service-DPAp7E3x.cjs.map} +1 -1
  312. package/dist/slider.cjs +1 -1
  313. package/dist/slider.js +2 -2
  314. package/dist/{src-BLcmKlCH.js → src-CbO5kJ2O.js} +42 -42
  315. package/dist/{src-BLcmKlCH.js.map → src-CbO5kJ2O.js.map} +1 -1
  316. package/dist/{src-tfU0akqI.cjs → src-SraDxEeg.cjs} +1 -1
  317. package/dist/{src-tfU0akqI.cjs.map → src-SraDxEeg.cjs.map} +1 -1
  318. package/dist/steps.cjs +1 -1
  319. package/dist/steps.js +3 -3
  320. package/dist/{surface-CiiIYeJN.cjs → surface-DuH0pm2v.cjs} +1 -1
  321. package/dist/{surface-CiiIYeJN.cjs.map → surface-DuH0pm2v.cjs.map} +1 -1
  322. package/dist/{surface-fXvRpS6s.js → surface-eN_Jy2MJ.js} +3 -3
  323. package/dist/{surface-fXvRpS6s.js.map → surface-eN_Jy2MJ.js.map} +1 -1
  324. package/dist/surface.cjs +1 -1
  325. package/dist/surface.js +1 -1
  326. package/dist/{surface.mixin-C4hbgyaP.cjs → surface.mixin-CIXgN6iw.cjs} +1 -1
  327. package/dist/{surface.mixin-C4hbgyaP.cjs.map → surface.mixin-CIXgN6iw.cjs.map} +1 -1
  328. package/dist/{surface.mixin-DBuxL5aL.js → surface.mixin-D9jv1sKG.js} +1 -1
  329. package/dist/{surface.mixin-DBuxL5aL.js.map → surface.mixin-D9jv1sKG.js.map} +1 -1
  330. package/dist/{table-BRVKlNjl.cjs → table-C9rRQJEB.cjs} +1 -1
  331. package/dist/{table-BRVKlNjl.cjs.map → table-C9rRQJEB.cjs.map} +1 -1
  332. package/dist/{table-BeXnwSsq.js → table-Dg_tUGB_.js} +2 -2
  333. package/dist/{table-BeXnwSsq.js.map → table-Dg_tUGB_.js.map} +1 -1
  334. package/dist/table.cjs +1 -1
  335. package/dist/table.js +1 -1
  336. package/dist/{tabs-y708NWQ2.js → tabs-BbFC9omR.js} +2 -2
  337. package/dist/{tabs-y708NWQ2.js.map → tabs-BbFC9omR.js.map} +1 -1
  338. package/dist/{tabs-CBU9Ctqm.cjs → tabs-soTL-x4G.cjs} +1 -1
  339. package/dist/{tabs-CBU9Ctqm.cjs.map → tabs-soTL-x4G.cjs.map} +1 -1
  340. package/dist/tabs.cjs +1 -1
  341. package/dist/tabs.js +1 -1
  342. package/dist/tailwind.mixin-BIVhjNvD.js +225 -0
  343. package/dist/{tailwind.mixin-C4cx3IOr.js.map → tailwind.mixin-BIVhjNvD.js.map} +1 -1
  344. package/dist/tailwind.mixin-DSuEu-y3.cjs +2 -0
  345. package/dist/{tailwind.mixin-DGiyLbEi.cjs.map → tailwind.mixin-DSuEu-y3.cjs.map} +1 -1
  346. package/dist/teleport.cjs +1 -1
  347. package/dist/teleport.js +1 -1
  348. package/dist/{textarea-BhAoJg8c.cjs → textarea-DaRUJ0ri.cjs} +1 -1
  349. package/dist/{textarea-BhAoJg8c.cjs.map → textarea-DaRUJ0ri.cjs.map} +1 -1
  350. package/dist/{textarea-Bl8-gQEJ.js → textarea-hChvHbNM.js} +1 -1
  351. package/dist/{textarea-Bl8-gQEJ.js.map → textarea-hChvHbNM.js.map} +1 -1
  352. package/dist/textarea.cjs +1 -1
  353. package/dist/textarea.js +1 -1
  354. package/dist/{theme-DZUpYJn-.js → theme-B0M8Hlyo.js} +3 -3
  355. package/dist/{theme-DZUpYJn-.js.map → theme-B0M8Hlyo.js.map} +1 -1
  356. package/dist/{theme-C-vdR-Ic.cjs → theme-ZYH2MqX9.cjs} +1 -1
  357. package/dist/{theme-C-vdR-Ic.cjs.map → theme-ZYH2MqX9.cjs.map} +1 -1
  358. package/dist/{theme-button-CwrvpOMK.js → theme-button-BtlX_Zgd.js} +1 -1
  359. package/dist/{theme-button-CwrvpOMK.js.map → theme-button-BtlX_Zgd.js.map} +1 -1
  360. package/dist/{theme-button-Cx1iKh7G.cjs → theme-button-Dvqg-rE_.cjs} +1 -1
  361. package/dist/{theme-button-Cx1iKh7G.cjs.map → theme-button-Dvqg-rE_.cjs.map} +1 -1
  362. package/dist/theme-button.cjs +1 -1
  363. package/dist/theme-button.js +1 -1
  364. package/dist/theme.cjs +1 -1
  365. package/dist/theme.js +2 -2
  366. package/dist/tooltip.cjs +1 -1
  367. package/dist/tooltip.js +1 -1
  368. package/dist/tree.cjs +1 -1
  369. package/dist/tree.js +1 -1
  370. package/dist/{typewriter-mxVw5dFn.js → typewriter-CCel8Nta.js} +3 -3
  371. package/dist/{typewriter-mxVw5dFn.js.map → typewriter-CCel8Nta.js.map} +1 -1
  372. package/dist/{typewriter-CXQIzqPV.cjs → typewriter-Cf9f2bdx.cjs} +1 -1
  373. package/dist/{typewriter-CXQIzqPV.cjs.map → typewriter-Cf9f2bdx.cjs.map} +1 -1
  374. package/dist/typewriter.cjs +1 -1
  375. package/dist/typewriter.js +1 -1
  376. package/dist/typography.cjs +1 -1
  377. package/dist/typography.js +1 -1
  378. package/dist/{window-DFMlB1Tq.cjs → window-B9_14c12.cjs} +1 -1
  379. package/dist/{window-DFMlB1Tq.cjs.map → window-B9_14c12.cjs.map} +1 -1
  380. package/dist/{window-EWYJJC_H.js → window-CbgdwOZD.js} +2 -2
  381. package/dist/{window-EWYJJC_H.js.map → window-CbgdwOZD.js.map} +1 -1
  382. package/dist/window.cjs +1 -1
  383. package/dist/window.js +1 -1
  384. package/package.json +1 -1
  385. package/dist/tailwind.mixin-C4cx3IOr.js +0 -225
  386. package/dist/tailwind.mixin-DGiyLbEi.cjs +0 -2
package/ai/area.md CHANGED
@@ -1,61 +1,215 @@
1
- # schmancy-area / schmancy-route
1
+ # Area Routing Foundation
2
2
 
3
- > Client-side router with named areas, lazy loading, route guards, and browser history integration.
3
+ > **Not just a component. The routing framework your app runs on.**
4
+ > `area` is the imperative API. `schmancy-area` is the region where a component lives. `schmancy-route` declares the options.
4
5
 
5
- ## Usage
6
- ```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>
10
- </schmancy-area>
6
+ Routing in Schmancy is four things working together:
7
+
8
+ | Piece | Role |
9
+ |-------|------|
10
+ | `<schmancy-area name="...">` | Declares a named region of the screen |
11
+ | `<schmancy-route when="tag">` | Declares which component can occupy it |
12
+ | `area.push(...)` | Imperative navigation (click handlers, guards, effects) |
13
+ | `lazy(() => import('...'))` | Code-split route components |
14
+
15
+ ## The Shape of a Real App
16
+
17
+ Real apps nest areas. Outer `name="root"` handles public vs. authenticated. Inner `name="aria"` handles sub-views inside the authenticated shell.
18
+
19
+ ```typescript
20
+ // app root — handles sign-in / public / authenticated
21
+ @customElement('my-app')
22
+ class MyApp extends $LitElement() {
23
+ render() {
24
+ return html`
25
+ <schmancy-theme root scheme="dark">
26
+ <schmancy-surface type="solid" fill="all">
27
+ <schmancy-scroll>
28
+ <schmancy-area
29
+ name="root"
30
+ .default=${lazy(() => import('./pages/landing.page'))}
31
+ >
32
+ <schmancy-route when="landing-page"
33
+ .component=${lazy(() => import('./pages/landing.page'))}
34
+ ></schmancy-route>
35
+
36
+ <schmancy-route when="methodology-page"
37
+ .component=${lazy(() => import('./pages/methodology.page'))}
38
+ ></schmancy-route>
39
+
40
+ <!-- Guarded route -->
41
+ <schmancy-route when="app-index"
42
+ .component=${lazy(() => import('./app/app.page'))}
43
+ .guard=${firebaseAuthState$.pipe(
44
+ map(u => !!u && !u.isAnonymous),
45
+ takeUntil(this.disconnecting),
46
+ )}
47
+ @redirect=${() => area.push({
48
+ component: 'landing-page',
49
+ area: 'root',
50
+ historyStrategy: 'replace',
51
+ })}
52
+ ></schmancy-route>
53
+ </schmancy-area>
54
+ </schmancy-scroll>
55
+ </schmancy-surface>
56
+ </schmancy-theme>
57
+ `
58
+ }
59
+ }
60
+ ```
61
+
62
+ ```typescript
63
+ // nested area — inside the app shell
64
+ render() {
65
+ return html`
66
+ <schmancy-nav-drawer>
67
+ <schmancy-nav-drawer-navbar width="180px">
68
+ <schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-agents-page' })}>
69
+ Agents
70
+ </schmancy-list-item>
71
+ <schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-knowledge-page' })}>
72
+ Knowledge
73
+ </schmancy-list-item>
74
+ </schmancy-nav-drawer-navbar>
75
+
76
+ <schmancy-nav-drawer-content>
77
+ <schmancy-area name="aria" default="aria-knowledge-page">
78
+ <schmancy-route when="aria-agents-page" .component=${lazy(() => import('./pages/agents'))}></schmancy-route>
79
+ <schmancy-route when="aria-knowledge-page" .component=${lazy(() => import('./pages/knowledge'))}></schmancy-route>
80
+ <schmancy-route when="aria-templates-page" .component=${lazy(() => import('./pages/templates'))}></schmancy-route>
81
+ </schmancy-area>
82
+ </schmancy-nav-drawer-content>
83
+ </schmancy-nav-drawer>
84
+ `
85
+ }
11
86
  ```
12
87
 
13
- ## Properties (schmancy-area)
14
- | Property | Type | Default | Description |
15
- |----------|------|---------|-------------|
16
- | name | string | required | Unique area name |
17
- | default | RouteComponent | - | Default route component |
88
+ ## `schmancy-area` Properties
18
89
 
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 |
90
+ | Property | Type | Required | Description |
91
+ |----------|------|----------|-------------|
92
+ | `name` | string | ✅ | Unique area identifier referenced in `area.push({ area: name })` |
93
+ | `default` | `RouteComponent \| string` | | Fallback when no route matches — prefer `lazy()` |
94
+
95
+ ## `schmancy-route` Properties
96
+
97
+ | Property | Type | Required | Description |
98
+ |----------|------|----------|-------------|
99
+ | `when` | string | ✅ | **Must exactly match** a `@customElement('tag')` tag name |
100
+ | `component` | `RouteComponent` | ✅ | Class, tag name, or `lazy()` wrapper |
101
+ | `guard` | `Observable<boolean>` | — | When emits `false`, route blocks and fires `@redirect` |
102
+ | `exact` | boolean | — | Strict-equality matching |
103
+
104
+ ## `area` service (imperative API)
26
105
 
27
- ## Programmatic Navigation (area service)
28
106
  ```typescript
29
107
  import { area } from '@mhmo91/schmancy'
30
108
 
31
- // Navigate
32
- area.push({ area: 'main', component: 'settings-page', params: { id: '123' } })
109
+ area.push({
110
+ area: 'root', // target area name
111
+ component: 'app-index', // tag name (or class reference)
112
+ params?: { id: '123' }, // pushed onto area.params()
113
+ historyStrategy?: 'push' | 'replace' | 'silent',
114
+ })
115
+ ```
116
+
117
+ `historyStrategy`:
118
+ - `'push'` (default) — browser back button returns to previous route
119
+ - `'replace'` — overwrites current history entry (use after guards / redirects)
120
+ - `'silent'` — changes the area without adding any history (transient state)
33
121
 
34
- // Subscribe to area changes
35
- area.on('main').pipe(takeUntil(this.disconnecting)).subscribe(route => { ... })
122
+ ### Subscribe to route state
123
+ ```typescript
124
+ connectedCallback() {
125
+ super.connectedCallback()
126
+
127
+ area.on('root').pipe(
128
+ takeUntil(this.disconnecting),
129
+ ).subscribe(route => {
130
+ console.log('root area is now:', route.component)
131
+ })
36
132
 
37
- // Get params
38
- area.params<{id: string}>('main').pipe(takeUntil(this.disconnecting)).subscribe(params => { ... })
133
+ area.params<{ id: string }>('detail').pipe(
134
+ takeUntil(this.disconnecting),
135
+ ).subscribe(params => this.loadItem(params.id))
136
+ }
39
137
  ```
40
138
 
41
139
  ## Lazy Loading
140
+
141
+ Code-split your routes. `lazy()` returns a preloadable reference.
142
+
42
143
  ```typescript
43
144
  import { lazy } from '@mhmo91/schmancy'
44
- const LazyPage = lazy(() => import('./my-page'))
45
145
 
46
- // Preload on hover
47
- element.addEventListener('mouseenter', () => LazyPage.preload())
146
+ const HomePage = lazy(() => import('./home.page'))
147
+
148
+ // Optional: preload on hover
149
+ <schmancy-button
150
+ @mouseenter=${() => HomePage.preload()}
151
+ @click=${() => area.push({ area: 'root', component: 'home-page' })}
152
+ >
153
+ Home
154
+ </schmancy-button>
48
155
  ```
49
156
 
50
- ## Examples
51
- ```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>
58
- </schmancy-area>
157
+ ## Guards — the production pattern
158
+
159
+ Guards are **RxJS Observables**, not booleans. This lets auth state flow through naturally.
160
+
161
+ ```typescript
162
+ import { firebaseAuthState$ } from './contexts/user.context'
163
+
164
+ <schmancy-route when="app-index"
165
+ .component=${lazy(() => import('./app/app.page'))}
166
+ .guard=${firebaseAuthState$.pipe(
167
+ map(user => !!user && !user.isAnonymous),
168
+ takeUntil(this.disconnecting),
169
+ )}
170
+ @redirect=${() => area.push({
171
+ component: 'landing-page',
172
+ area: 'root',
173
+ historyStrategy: 'replace',
174
+ })}
175
+ ></schmancy-route>
176
+ ```
177
+
178
+ - `guard` emits `true` → route renders.
179
+ - `guard` emits `false` → Schmancy fires a `redirect` event on the route; handle it with `area.push(...)` using `historyStrategy: 'replace'` so the blocked route doesn't stay in history.
180
+
181
+ ## Rules
182
+
183
+ 1. `when="tag-name"` **must exactly match** `@customElement('tag-name')` on the component's class.
184
+ 2. Every route component should extend `$LitElement` and use `takeUntil(this.disconnecting)` in subscriptions.
185
+ 3. Route components are responsible for their own scroll/focus handling on mount.
186
+ 4. When calling `area.push` after auth guards or side-effectful redirects, use `historyStrategy: 'replace'`.
187
+ 5. Nested areas are not just allowed — they're the default for any app with a shell + sub-views.
188
+
189
+ ## Common recipes
190
+
191
+ ### Redirect after sign-in
192
+ ```typescript
193
+ await signIn(email, password)
194
+ area.push({ component: 'app-index', area: 'root', historyStrategy: 'replace' })
195
+ ```
196
+
197
+ ### Silent state swap (no history pollution)
198
+ ```typescript
199
+ // e.g. swapping between auth screens without adding history
200
+ area.push({ component: 'signup-form', area: 'sign', historyStrategy: 'silent' })
201
+ ```
202
+
203
+ ### Click-driven sub-nav
204
+ ```typescript
205
+ <schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-agents-page' })}>
206
+ Agents
207
+ </schmancy-list-item>
59
208
  ```
60
209
 
61
- **Critical:** `when="tag-name"` MUST exactly match `@customElement('tag-name')` on the component class.
210
+ ### Preload routes on hover
211
+ ```typescript
212
+ const DashboardPage = lazy(() => import('./dashboard.page'))
213
+
214
+ html`<a @mouseenter=${() => DashboardPage.preload()} @click=${() => area.push({ area: 'root', component: 'dashboard-page' })}>Dashboard</a>`
215
+ ```
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).
package/ai/delay.md ADDED
@@ -0,0 +1,50 @@
1
+ # schmancy-delay
2
+
3
+ > Defers rendering of children by a duration, with an entrance motion. Siblings auto-stagger without manual delay math.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-delay delay="200">
8
+ <h1>Appears after 200ms</h1>
9
+ </schmancy-delay>
10
+
11
+ <!-- Auto-staggered list: each child inherits + stacks its own delay -->
12
+ <schmancy-delay delay="100">
13
+ <schmancy-delay delay="100"><div>Step 1</div></schmancy-delay>
14
+ <schmancy-delay delay="100"><div>Step 2</div></schmancy-delay>
15
+ <schmancy-delay delay="100"><div>Step 3</div></schmancy-delay>
16
+ </schmancy-delay>
17
+ ```
18
+
19
+ ## Properties
20
+ | Property | Type | Default | Description |
21
+ |----------|------|---------|-------------|
22
+ | `delay` | number | `0` | Ms to wait before rendering this node |
23
+ | `motion` | `'flyBelow' \| 'flyAbove' \| 'fadeIn'` | `'flyBelow'` | `@lit-labs/motion` entrance animation |
24
+ | `once` | boolean | `true` | Skip delay on subsequent renders within the same session (keyed on content hash) |
25
+
26
+ ## Context
27
+ - Consumes parent `delayContext` and adds its own delay.
28
+ - Walks previous siblings that are also `schmancy-delay` and accumulates their delays.
29
+ - Provides the resulting `effectiveDelay` down to descendants via context.
30
+
31
+ Result: nested `schmancy-delay` nodes produce natural staggered entrances without manual math.
32
+
33
+ ## Session Caching
34
+ - When `once=true`, the content is hashed on first render and cached in `sessionStorage`.
35
+ - On subsequent component mounts (route revisits), the delay is skipped — content appears instantly.
36
+ - Set `once=false` to always replay the delay.
37
+
38
+ ## Example — hero reveal
39
+ ```html
40
+ <schmancy-delay delay="0" motion="fadeIn">
41
+ <schmancy-delay delay="300"><h1>Welcome</h1></schmancy-delay>
42
+ <schmancy-delay delay="200"><p>Subtitle…</p></schmancy-delay>
43
+ <schmancy-delay delay="200">
44
+ <schmancy-button variant="filled">Get started</schmancy-button>
45
+ </schmancy-delay>
46
+ </schmancy-delay>
47
+ ```
48
+
49
+ ## See Also
50
+ - Use [`gravity`](./directives.md#gravity--elements-fall-into-place-with-mass-based-bounce) directive for mass-based staggered reveal on lists — often simpler than nested `schmancy-delay`.
@@ -0,0 +1,67 @@
1
+ # Schmancy Discovery
2
+
3
+ > Event-based component and element discovery across shadow DOM boundaries. No DOM traversal — just broadcast and race.
4
+
5
+ ## Why
6
+ Web components hide inside shadow DOM. Traversing with `querySelector` + `shadowRoot` everywhere is fragile. Discovery broadcasts a "where are you?" event; components respond with themselves.
7
+
8
+ ## API
9
+ ```typescript
10
+ import {
11
+ discover,
12
+ discoverComponent,
13
+ discoverAnyComponent,
14
+ discoverElement,
15
+ discoverAllElements,
16
+ } from '@mhmo91/schmancy'
17
+ ```
18
+
19
+ ### `discover(query, timeout?)`
20
+ Smart auto-detect. Routes to `discoverElement` for CSS selectors (`#`, `.`, `[`) and `discoverComponent` for tag names.
21
+ ```typescript
22
+ discover<SchmancyNavigationRail>('schmancy-navigation-rail').subscribe(el => el?.select('home'))
23
+ discover('#hero-card').subscribe(el => el?.focus())
24
+ ```
25
+
26
+ ### `discoverComponent(tag, timeout = 100)`
27
+ Broadcasts `{tag}-where-are-you`; first responder wins.
28
+ ```typescript
29
+ discoverComponent<SchmancyDialog>('schmancy-dialog')
30
+ .subscribe(dialog => dialog?.open())
31
+ ```
32
+
33
+ ### `discoverAnyComponent(...tags)`
34
+ Race between multiple tags — first to respond wins.
35
+ ```typescript
36
+ discoverAnyComponent('schmancy-navigation-rail', 'schmancy-navigation-bar')
37
+ .subscribe(nav => nav?.select(route))
38
+ ```
39
+
40
+ ### `discoverElement(selector, timeout = 150)`
41
+ Finds any element by CSS selector across shadow DOM. Uses a request ID + universal `schmancy-discover` event. Every `$LitElement` responds if it finds a match in its shadow root.
42
+ ```typescript
43
+ discoverElement('[data-section="pricing"]').subscribe(section => section?.scrollIntoView())
44
+ ```
45
+
46
+ ### `discoverAllElements(selector, timeout = 150)`
47
+ Collects **all** matching responses within the timeout window.
48
+ ```typescript
49
+ discoverAllElements('.flagged').subscribe(all => console.log(all.length))
50
+ ```
51
+
52
+ ## How the Handshake Works
53
+ 1. Caller creates a unique `requestId` and broadcasts `schmancy-discover` on `window` with `{ selector, requestId }`.
54
+ 2. Every `$LitElement` listens for this event (wired up in the base class).
55
+ 3. Any matching element dispatches `schmancy-discover-response` with `{ requestId, element }`.
56
+ 4. Caller collects responses for the timeout window and emits via RxJS.
57
+
58
+ ## Pattern in Base Class
59
+ Every `$LitElement` inherits auto-response: `discover<T>(tag)` (method on the component) and `{tagName}-where-are-you`/`{tagName}-here-i-am` events. See [mixins.md](./mixins.md).
60
+
61
+ ## When to Use
62
+ - Cross-shadow coordination between unrelated components.
63
+ - Imperatively focusing or driving a far-away UI piece from a handler.
64
+
65
+ ## When NOT to Use
66
+ - Same-tree data flow — use `@provide`/`@consume` (Lit context) or Schmancy [`store`](./store.md).
67
+ - Parent-to-child directly — just use `this.renderRoot.querySelector()`.