@mhmo91/schmancy 0.9.2 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/README.md +19 -75
  2. package/ai/INDEX.md +72 -0
  3. package/ai/area.md +119 -39
  4. package/ai/audio.md +69 -0
  5. package/ai/boat.md +47 -0
  6. package/ai/charts.md +93 -0
  7. package/ai/connectivity.md +36 -0
  8. package/ai/date-range-inline.md +44 -0
  9. package/ai/delay.md +50 -0
  10. package/ai/discovery.md +67 -0
  11. package/ai/expand.md +63 -0
  12. package/ai/extra.md +59 -0
  13. package/ai/float.md +14 -0
  14. package/ai/iframe.md +44 -0
  15. package/ai/json.md +33 -0
  16. package/ai/layout.md +63 -0
  17. package/ai/mailbox.md +102 -0
  18. package/ai/map.md +55 -0
  19. package/ai/mixins.md +64 -35
  20. package/ai/option.md +43 -0
  21. package/ai/page.md +42 -0
  22. package/ai/qr-scanner.md +51 -0
  23. package/ai/range.md +47 -0
  24. package/ai/rxjs-utils.md +60 -0
  25. package/ai/slider.md +43 -0
  26. package/ai/store.md +92 -49
  27. package/ai/teleport.md +55 -0
  28. package/ai/theme-button.md +26 -0
  29. package/ai/typewriter.md +46 -0
  30. package/ai/utils.md +95 -0
  31. package/ai/window.md +67 -0
  32. package/dist/ai/INDEX.md +72 -0
  33. package/dist/ai/area.md +119 -39
  34. package/dist/ai/audio.md +69 -0
  35. package/dist/ai/boat.md +47 -0
  36. package/dist/ai/charts.md +93 -0
  37. package/dist/ai/connectivity.md +36 -0
  38. package/dist/ai/date-range-inline.md +44 -0
  39. package/dist/ai/delay.md +50 -0
  40. package/dist/ai/discovery.md +67 -0
  41. package/dist/ai/expand.md +63 -0
  42. package/dist/ai/extra.md +59 -0
  43. package/dist/ai/float.md +14 -0
  44. package/dist/ai/iframe.md +44 -0
  45. package/dist/ai/json.md +33 -0
  46. package/dist/ai/layout.md +63 -0
  47. package/dist/ai/mailbox.md +102 -0
  48. package/dist/ai/map.md +55 -0
  49. package/dist/ai/mixins.md +64 -35
  50. package/dist/ai/option.md +43 -0
  51. package/dist/ai/page.md +42 -0
  52. package/dist/ai/qr-scanner.md +51 -0
  53. package/dist/ai/range.md +47 -0
  54. package/dist/ai/rxjs-utils.md +60 -0
  55. package/dist/ai/slider.md +43 -0
  56. package/dist/ai/store.md +92 -49
  57. package/dist/ai/teleport.md +55 -0
  58. package/dist/ai/theme-button.md +26 -0
  59. package/dist/ai/typewriter.md +46 -0
  60. package/dist/ai/utils.md +95 -0
  61. package/dist/ai/window.md +67 -0
  62. package/dist/{area-DbBcfm5p.js → area-CRoGqD_u.js} +2 -2
  63. package/dist/area-CRoGqD_u.js.map +1 -0
  64. package/dist/{area-1h9xEpTc.cjs → area-JPykB7A9.cjs} +1 -1
  65. package/dist/area-JPykB7A9.cjs.map +1 -0
  66. package/dist/area.cjs +1 -1
  67. package/dist/area.js +1 -1
  68. package/dist/{autocomplete-OE70CcYP.cjs → autocomplete-5rVhbieU.cjs} +1 -1
  69. package/dist/{autocomplete-OE70CcYP.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
  70. package/dist/{autocomplete-DDVsegep.js → autocomplete-BllPQwr8.js} +3 -3
  71. package/dist/{autocomplete-DDVsegep.js.map → autocomplete-BllPQwr8.js.map} +1 -1
  72. package/dist/autocomplete.cjs +1 -1
  73. package/dist/autocomplete.js +1 -1
  74. package/dist/badge.cjs +1 -1
  75. package/dist/badge.js +1 -1
  76. package/dist/{boat-T8Ov4-yA.js → boat-BDTQ-du9.js} +2 -2
  77. package/dist/{boat-T8Ov4-yA.js.map → boat-BDTQ-du9.js.map} +1 -1
  78. package/dist/{boat-Cf1oJ0ka.cjs → boat-DYEAZ8Qj.cjs} +1 -1
  79. package/dist/{boat-Cf1oJ0ka.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
  80. package/dist/boat.cjs +1 -1
  81. package/dist/boat.js +1 -1
  82. package/dist/{busy-BD6D5P-l.js → busy-ChDAeaKF.js} +1 -1
  83. package/dist/{busy-BD6D5P-l.js.map → busy-ChDAeaKF.js.map} +1 -1
  84. package/dist/{busy-DF9wztWL.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
  85. package/dist/{busy-DF9wztWL.cjs.map → busy-Dj7Xn0Z0.cjs.map} +1 -1
  86. package/dist/busy.cjs +1 -1
  87. package/dist/busy.js +1 -1
  88. package/dist/button.cjs +1 -1
  89. package/dist/button.js +2 -2
  90. package/dist/{card-Csvu8UJ9.cjs → card-BvPWVEJX.cjs} +1 -1
  91. package/dist/{card-Csvu8UJ9.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
  92. package/dist/{card-DM_miKMd.js → card-DZFPRPqs.js} +1 -1
  93. package/dist/{card-DM_miKMd.js.map → card-DZFPRPqs.js.map} +1 -1
  94. package/dist/card.cjs +1 -1
  95. package/dist/card.js +1 -1
  96. package/dist/charts.cjs +1 -1
  97. package/dist/charts.js +2 -2
  98. package/dist/{checkbox-sJujc_ga.cjs → checkbox-BC_37rsG.cjs} +1 -1
  99. package/dist/{checkbox-sJujc_ga.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
  100. package/dist/{checkbox-BgGtMaMR.js → checkbox-GSSjqo6w.js} +1 -1
  101. package/dist/{checkbox-BgGtMaMR.js.map → checkbox-GSSjqo6w.js.map} +1 -1
  102. package/dist/checkbox.cjs +1 -1
  103. package/dist/checkbox.js +1 -1
  104. package/dist/{chips-D_e6wijp.cjs → chips-B19XS8Xc.cjs} +1 -1
  105. package/dist/{chips-D_e6wijp.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
  106. package/dist/{chips-BZaH4wez.js → chips-B9oAEfE_.js} +3 -3
  107. package/dist/{chips-BZaH4wez.js.map → chips-B9oAEfE_.js.map} +1 -1
  108. package/dist/chips.cjs +1 -1
  109. package/dist/chips.js +2 -2
  110. package/dist/{code-highlight-Q3cc6ukq.js → code-highlight-DCk5lJY-.js} +1 -1
  111. package/dist/{code-highlight-Q3cc6ukq.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
  112. package/dist/{code-highlight-DlhERv_O.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
  113. package/dist/{code-highlight-DlhERv_O.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
  114. package/dist/code-highlight.cjs +1 -1
  115. package/dist/code-highlight.js +1 -1
  116. package/dist/{components-CRhkB3V2.js → components-COsM6sJZ.js} +2 -2
  117. package/dist/{components-CRhkB3V2.js.map → components-COsM6sJZ.js.map} +1 -1
  118. package/dist/{components-DnlEYYDs.cjs → components-CyD6a7gQ.cjs} +1 -1
  119. package/dist/{components-DnlEYYDs.cjs.map → components-CyD6a7gQ.cjs.map} +1 -1
  120. package/dist/components.cjs +1 -1
  121. package/dist/components.js +1 -1
  122. package/dist/connectivity.cjs +1 -1
  123. package/dist/connectivity.js +1 -1
  124. package/dist/content-drawer.cjs +1 -1
  125. package/dist/content-drawer.js +1 -1
  126. package/dist/{date-range-C0IYnvHF.js → date-range-Sfyco9-n.js} +3 -3
  127. package/dist/{date-range-C0IYnvHF.js.map → date-range-Sfyco9-n.js.map} +1 -1
  128. package/dist/{date-range-cymbTDnl.cjs → date-range-ZAaQB22I.cjs} +1 -1
  129. package/dist/{date-range-cymbTDnl.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
  130. package/dist/{date-range-inline-0ENN4Plz.js → date-range-inline-Bl8qbiQF.js} +1 -1
  131. package/dist/{date-range-inline-0ENN4Plz.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
  132. package/dist/{date-range-inline-Cfwt-ReH.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
  133. package/dist/{date-range-inline-Cfwt-ReH.cjs.map → date-range-inline-m7nLjOMI.cjs.map} +1 -1
  134. package/dist/date-range-inline.cjs +1 -1
  135. package/dist/date-range-inline.js +1 -1
  136. package/dist/date-range.cjs +1 -1
  137. package/dist/date-range.js +1 -1
  138. package/dist/{delay-D6mQLUp-.cjs → delay-7boauN6N.cjs} +1 -1
  139. package/dist/{delay-D6mQLUp-.cjs.map → delay-7boauN6N.cjs.map} +1 -1
  140. package/dist/{delay-D1dVP93u.js → delay-CgX6m0HN.js} +3 -3
  141. package/dist/{delay-D1dVP93u.js.map → delay-CgX6m0HN.js.map} +1 -1
  142. package/dist/delay.cjs +1 -1
  143. package/dist/delay.js +1 -1
  144. package/dist/{details-CPT_Mi4e.cjs → details-BHnk8l4q.cjs} +1 -1
  145. package/dist/{details-CPT_Mi4e.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
  146. package/dist/{details-Cv4OOrVW.js → details-BPkUg8Cq.js} +2 -2
  147. package/dist/{details-Cv4OOrVW.js.map → details-BPkUg8Cq.js.map} +1 -1
  148. package/dist/details.cjs +1 -1
  149. package/dist/details.js +1 -1
  150. package/dist/dialog.cjs +1 -1
  151. package/dist/dialog.js +2 -2
  152. package/dist/directives.cjs.map +1 -1
  153. package/dist/directives.js.map +1 -1
  154. package/dist/discovery.cjs.map +1 -1
  155. package/dist/discovery.js.map +1 -1
  156. package/dist/{divider-DDC-kND3.js → divider-CW9a7MMj.js} +2 -2
  157. package/dist/{divider-DDC-kND3.js.map → divider-CW9a7MMj.js.map} +1 -1
  158. package/dist/{divider-nZ_2to2N.cjs → divider-_khrhrZo.cjs} +1 -1
  159. package/dist/{divider-nZ_2to2N.cjs.map → divider-_khrhrZo.cjs.map} +1 -1
  160. package/dist/divider.cjs +1 -1
  161. package/dist/divider.js +1 -1
  162. package/dist/dropdown.cjs +1 -1
  163. package/dist/dropdown.js +2 -2
  164. package/dist/{expand-Crdts9q_.cjs → expand-Cp7-PH8b.cjs} +1 -1
  165. package/dist/{expand-Crdts9q_.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
  166. package/dist/{expand-Bp3N8CcL.js → expand-iQ7EOMP7.js} +3 -3
  167. package/dist/{expand-Bp3N8CcL.js.map → expand-iQ7EOMP7.js.map} +1 -1
  168. package/dist/expand.cjs +1 -1
  169. package/dist/expand.js +1 -1
  170. package/dist/{extra-B0IZCg0t.cjs → extra-IKAiJJhv.cjs} +1 -1
  171. package/dist/{extra-B0IZCg0t.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
  172. package/dist/{extra-DupwhQhC.js → extra-wEpvEFbK.js} +2 -2
  173. package/dist/{extra-DupwhQhC.js.map → extra-wEpvEFbK.js.map} +1 -1
  174. package/dist/extra.cjs +1 -1
  175. package/dist/extra.js +1 -1
  176. package/dist/{float-Dqdc1_S5.js → float-BQ_urmMs.js} +2 -2
  177. package/dist/{float-Dqdc1_S5.js.map → float-BQ_urmMs.js.map} +1 -1
  178. package/dist/{float-CQoJ_oSB.cjs → float-D5rNC82i.cjs} +1 -1
  179. package/dist/{float-CQoJ_oSB.cjs.map → float-D5rNC82i.cjs.map} +1 -1
  180. package/dist/float.cjs +1 -1
  181. package/dist/float.js +1 -1
  182. package/dist/{form-CvoLqMY7.cjs → form-BqN1AGFj.cjs} +1 -1
  183. package/dist/{form-CvoLqMY7.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
  184. package/dist/{form-CW5XNuTg.js → form-CajC5HnO.js} +1 -1
  185. package/dist/{form-CW5XNuTg.js.map → form-CajC5HnO.js.map} +1 -1
  186. package/dist/form.cjs +1 -1
  187. package/dist/form.js +1 -1
  188. package/dist/{icons-BLQHEbIk.cjs → icons-B57_93VV.cjs} +1 -1
  189. package/dist/{icons-BLQHEbIk.cjs.map → icons-B57_93VV.cjs.map} +1 -1
  190. package/dist/{icons-Cpfdb7sA.js → icons-BDqiGXrO.js} +1 -1
  191. package/dist/{icons-Cpfdb7sA.js.map → icons-BDqiGXrO.js.map} +1 -1
  192. package/dist/icons.cjs +1 -1
  193. package/dist/icons.js +1 -1
  194. package/dist/{iframe-sJGXBbxT.cjs → iframe-DNHL3GIk.cjs} +1 -1
  195. package/dist/{iframe-sJGXBbxT.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
  196. package/dist/{iframe-DG6HVYdy.js → iframe-WnWPIrBG.js} +1 -1
  197. package/dist/{iframe-DG6HVYdy.js.map → iframe-WnWPIrBG.js.map} +1 -1
  198. package/dist/iframe.cjs +1 -1
  199. package/dist/iframe.js +1 -1
  200. package/dist/index.cjs +1 -1
  201. package/dist/index.js +33 -33
  202. package/dist/{input-DGTdmp1Q.cjs → input-BiSrTcrR.cjs} +1 -1
  203. package/dist/{input-DGTdmp1Q.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
  204. package/dist/{input-BevxycIt.js → input-VaXHFrRn.js} +1 -1
  205. package/dist/{input-BevxycIt.js.map → input-VaXHFrRn.js.map} +1 -1
  206. package/dist/{input-chip-CKVtjInb.cjs → input-chip-Dy-AiP55.cjs} +1 -1
  207. package/dist/{input-chip-CKVtjInb.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
  208. package/dist/{input-chip-BWS-SFU4.js → input-chip-QejNcRnS.js} +1 -1
  209. package/dist/{input-chip-BWS-SFU4.js.map → input-chip-QejNcRnS.js.map} +1 -1
  210. package/dist/input.cjs +1 -1
  211. package/dist/input.js +1 -1
  212. package/dist/json.cjs +1 -1
  213. package/dist/json.js +2 -2
  214. package/dist/{layout-DxLjlDfr.js → layout-CnsXeCAy.js} +2 -2
  215. package/dist/{layout-DxLjlDfr.js.map → layout-CnsXeCAy.js.map} +1 -1
  216. package/dist/{layout-CQdd8UCr.cjs → layout-DNYG3phx.cjs} +1 -1
  217. package/dist/{layout-CQdd8UCr.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
  218. package/dist/layout.cjs +1 -1
  219. package/dist/layout.js +2 -2
  220. package/dist/{lightbox-Bjc55lHH.js → lightbox-BrI1Z31s.js} +2 -2
  221. package/dist/{lightbox-Bjc55lHH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
  222. package/dist/{lightbox-C_863_XU.cjs → lightbox-CmACf0t5.cjs} +1 -1
  223. package/dist/{lightbox-C_863_XU.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
  224. package/dist/lightbox.cjs +1 -1
  225. package/dist/lightbox.js +1 -1
  226. package/dist/{list-BAqhlzZd.js → list-Cm-jjXxM.js} +2 -2
  227. package/dist/{list-BAqhlzZd.js.map → list-Cm-jjXxM.js.map} +1 -1
  228. package/dist/{list-CaXzdN9_.cjs → list-swIL9VDv.cjs} +1 -1
  229. package/dist/{list-CaXzdN9_.cjs.map → list-swIL9VDv.cjs.map} +1 -1
  230. package/dist/list.cjs +1 -1
  231. package/dist/list.js +1 -1
  232. package/dist/{litElement.mixin-DN6X9_wD.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
  233. package/dist/{litElement.mixin-DN6X9_wD.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
  234. package/dist/{litElement.mixin-Dktub0ri.js → litElement.mixin-6jJYHCrZ.js} +1 -1
  235. package/dist/{litElement.mixin-Dktub0ri.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
  236. package/dist/{mailbox-DuMUH4f3.js → mailbox-BuvsVaAQ.js} +4 -4
  237. package/dist/{mailbox-DuMUH4f3.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
  238. package/dist/{mailbox-BvsLXpvy.cjs → mailbox-D6LkQcN5.cjs} +1 -1
  239. package/dist/{mailbox-BvsLXpvy.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
  240. package/dist/mailbox.cjs +1 -1
  241. package/dist/mailbox.js +1 -1
  242. package/dist/{map-DkIy1ph7.js → map-CQiKAxC3.js} +1 -1
  243. package/dist/{map-DkIy1ph7.js.map → map-CQiKAxC3.js.map} +1 -1
  244. package/dist/{map-C2Msv9TQ.cjs → map-D5NN4VET.cjs} +1 -1
  245. package/dist/{map-C2Msv9TQ.cjs.map → map-D5NN4VET.cjs.map} +1 -1
  246. package/dist/map.cjs +1 -1
  247. package/dist/map.js +1 -1
  248. package/dist/{menu-DEeDKW5U.js → menu-C1x04YZw.js} +2 -2
  249. package/dist/{menu-DEeDKW5U.js.map → menu-C1x04YZw.js.map} +1 -1
  250. package/dist/{menu-Mm71lv9k.cjs → menu-CkgMO9K5.cjs} +1 -1
  251. package/dist/{menu-Mm71lv9k.cjs.map → menu-CkgMO9K5.cjs.map} +1 -1
  252. package/dist/menu.cjs +1 -1
  253. package/dist/menu.js +1 -1
  254. package/dist/mixins.cjs +1 -1
  255. package/dist/mixins.js +3 -3
  256. package/dist/nav-drawer.cjs +1 -1
  257. package/dist/nav-drawer.js +1 -1
  258. package/dist/navigation-bar.cjs +1 -1
  259. package/dist/navigation-bar.js +1 -1
  260. package/dist/navigation-rail.cjs +1 -1
  261. package/dist/navigation-rail.js +2 -2
  262. package/dist/{notification-K-ug8cKk.js → notification-BnBgxjF-.js} +3 -3
  263. package/dist/{notification-K-ug8cKk.js.map → notification-BnBgxjF-.js.map} +1 -1
  264. package/dist/{notification-cTgXEDZ0.cjs → notification-CZFEhWxc.cjs} +1 -1
  265. package/dist/{notification-cTgXEDZ0.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
  266. package/dist/notification.cjs +1 -1
  267. package/dist/notification.js +1 -1
  268. package/dist/{option-5rEOmtAm.cjs → option-BrxCVwSx.cjs} +1 -1
  269. package/dist/{option-5rEOmtAm.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
  270. package/dist/{option-TFSKvSjT.js → option-DBO8xZwd.js} +1 -1
  271. package/dist/{option-TFSKvSjT.js.map → option-DBO8xZwd.js.map} +1 -1
  272. package/dist/option.cjs +1 -1
  273. package/dist/option.js +1 -1
  274. package/dist/page.cjs +1 -1
  275. package/dist/page.js +3 -3
  276. package/dist/{progress-iu0AMbSg.cjs → progress-Db2e4_Zd.cjs} +1 -1
  277. package/dist/{progress-iu0AMbSg.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
  278. package/dist/{progress-Cta3nM-f.js → progress-DeiHxXo7.js} +2 -2
  279. package/dist/{progress-Cta3nM-f.js.map → progress-DeiHxXo7.js.map} +1 -1
  280. package/dist/progress.cjs +1 -1
  281. package/dist/progress.js +1 -1
  282. package/dist/{provide-D69zybs5.js → provide-C1aQhxYo.js} +1 -1
  283. package/dist/{provide-D69zybs5.js.map → provide-C1aQhxYo.js.map} +1 -1
  284. package/dist/{provide-BEyyKlDM.cjs → provide-DHnhQtCH.cjs} +1 -1
  285. package/dist/{provide-BEyyKlDM.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
  286. package/dist/qr-scanner.cjs +1 -1
  287. package/dist/qr-scanner.js +2 -2
  288. package/dist/{radio-group-DKPN0T50.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
  289. package/dist/{radio-group-DKPN0T50.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
  290. package/dist/{radio-group-BjSWmYJC.js → radio-group-zSO0AkJf.js} +1 -1
  291. package/dist/{radio-group-BjSWmYJC.js.map → radio-group-zSO0AkJf.js.map} +1 -1
  292. package/dist/radio-group.cjs +1 -1
  293. package/dist/radio-group.js +1 -1
  294. package/dist/range.cjs +1 -1
  295. package/dist/range.js +1 -1
  296. package/dist/{scroll-mayaGGpE.cjs → scroll-QMCmbbDv.cjs} +1 -1
  297. package/dist/{scroll-mayaGGpE.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
  298. package/dist/{scroll-tG1vaRFO.js → scroll-cBDzye64.js} +1 -1
  299. package/dist/{scroll-tG1vaRFO.js.map → scroll-cBDzye64.js.map} +1 -1
  300. package/dist/{select-C4YK5Arj.cjs → select-Ct37l3lg.cjs} +1 -1
  301. package/dist/{select-C4YK5Arj.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
  302. package/dist/{select-CepryGGP.js → select-c6HbWvKP.js} +2 -2
  303. package/dist/{select-CepryGGP.js.map → select-c6HbWvKP.js.map} +1 -1
  304. package/dist/select.cjs +1 -1
  305. package/dist/select.js +1 -1
  306. package/dist/{sheet-D2uT95S1.js → sheet-BMXcUiIm.js} +4 -4
  307. package/dist/{sheet-D2uT95S1.js.map → sheet-BMXcUiIm.js.map} +1 -1
  308. package/dist/{sheet-Cy4C2-kG.cjs → sheet-CQec-bCV.cjs} +1 -1
  309. package/dist/{sheet-Cy4C2-kG.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
  310. package/dist/sheet.cjs +1 -1
  311. package/dist/sheet.js +2 -2
  312. package/dist/{sheet.service-Os8KJGSE.js → sheet.service-BcPV3Du4.js} +1 -1
  313. package/dist/{sheet.service-Os8KJGSE.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
  314. package/dist/{sheet.service-Dv5Hwj3k.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
  315. package/dist/{sheet.service-Dv5Hwj3k.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
  316. package/dist/slider.cjs +1 -1
  317. package/dist/slider.js +2 -2
  318. package/dist/{src-BLcmKlCH.js → src-BLngW2bl.js} +42 -42
  319. package/dist/{src-BLcmKlCH.js.map → src-BLngW2bl.js.map} +1 -1
  320. package/dist/{src-tfU0akqI.cjs → src-BtQVyqMy.cjs} +1 -1
  321. package/dist/{src-tfU0akqI.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
  322. package/dist/steps.cjs +1 -1
  323. package/dist/steps.js +3 -3
  324. package/dist/{surface-CiiIYeJN.cjs → surface-BjKZoJxK.cjs} +1 -1
  325. package/dist/{surface-CiiIYeJN.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
  326. package/dist/{surface-fXvRpS6s.js → surface-pK8hME5c.js} +3 -3
  327. package/dist/{surface-fXvRpS6s.js.map → surface-pK8hME5c.js.map} +1 -1
  328. package/dist/surface.cjs +1 -1
  329. package/dist/surface.js +1 -1
  330. package/dist/{surface.mixin-C4hbgyaP.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
  331. package/dist/{surface.mixin-C4hbgyaP.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
  332. package/dist/{surface.mixin-DBuxL5aL.js → surface.mixin-CBNRpJum.js} +1 -1
  333. package/dist/{surface.mixin-DBuxL5aL.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
  334. package/dist/{table-BeXnwSsq.js → table-BXIHX9h4.js} +2 -2
  335. package/dist/{table-BeXnwSsq.js.map → table-BXIHX9h4.js.map} +1 -1
  336. package/dist/{table-BRVKlNjl.cjs → table-CiqgZzSd.cjs} +1 -1
  337. package/dist/{table-BRVKlNjl.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
  338. package/dist/table.cjs +1 -1
  339. package/dist/table.js +1 -1
  340. package/dist/{tabs-CBU9Ctqm.cjs → tabs-CKa-W4qA.cjs} +1 -1
  341. package/dist/{tabs-CBU9Ctqm.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
  342. package/dist/{tabs-y708NWQ2.js → tabs-nbV5eblZ.js} +2 -2
  343. package/dist/{tabs-y708NWQ2.js.map → tabs-nbV5eblZ.js.map} +1 -1
  344. package/dist/tabs.cjs +1 -1
  345. package/dist/tabs.js +1 -1
  346. package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
  347. package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
  348. package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
  349. package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
  350. package/dist/teleport.cjs +1 -1
  351. package/dist/teleport.js +1 -1
  352. package/dist/{textarea-BhAoJg8c.cjs → textarea-Cp1ZE60O.cjs} +1 -1
  353. package/dist/{textarea-BhAoJg8c.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
  354. package/dist/{textarea-Bl8-gQEJ.js → textarea-D7q8exMg.js} +1 -1
  355. package/dist/{textarea-Bl8-gQEJ.js.map → textarea-D7q8exMg.js.map} +1 -1
  356. package/dist/textarea.cjs +1 -1
  357. package/dist/textarea.js +1 -1
  358. package/dist/{theme-C-vdR-Ic.cjs → theme-Da4SPq9X.cjs} +1 -1
  359. package/dist/{theme-C-vdR-Ic.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
  360. package/dist/{theme-DZUpYJn-.js → theme-_VPV6Bxh.js} +3 -3
  361. package/dist/{theme-DZUpYJn-.js.map → theme-_VPV6Bxh.js.map} +1 -1
  362. package/dist/{theme-button-CwrvpOMK.js → theme-button--sX8A-m1.js} +1 -1
  363. package/dist/{theme-button-CwrvpOMK.js.map → theme-button--sX8A-m1.js.map} +1 -1
  364. package/dist/{theme-button-Cx1iKh7G.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
  365. package/dist/{theme-button-Cx1iKh7G.cjs.map → theme-button-Ci8VQ7KW.cjs.map} +1 -1
  366. package/dist/theme-button.cjs +1 -1
  367. package/dist/theme-button.js +1 -1
  368. package/dist/theme.cjs +1 -1
  369. package/dist/theme.js +2 -2
  370. package/dist/tooltip.cjs +1 -1
  371. package/dist/tooltip.js +1 -1
  372. package/dist/tree.cjs +1 -1
  373. package/dist/tree.js +1 -1
  374. package/dist/{typewriter-CXQIzqPV.cjs → typewriter-B2TnHPjw.cjs} +1 -1
  375. package/dist/{typewriter-CXQIzqPV.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
  376. package/dist/{typewriter-mxVw5dFn.js → typewriter-BrZNa8T-.js} +3 -3
  377. package/dist/{typewriter-mxVw5dFn.js.map → typewriter-BrZNa8T-.js.map} +1 -1
  378. package/dist/typewriter.cjs +1 -1
  379. package/dist/typewriter.js +1 -1
  380. package/dist/typography.cjs +1 -1
  381. package/dist/typography.js +1 -1
  382. package/dist/{window-EWYJJC_H.js → window-CM1ycigo.js} +2 -2
  383. package/dist/{window-EWYJJC_H.js.map → window-CM1ycigo.js.map} +1 -1
  384. package/dist/{window-DFMlB1Tq.cjs → window-Uii13x_r.cjs} +1 -1
  385. package/dist/{window-DFMlB1Tq.cjs.map → window-Uii13x_r.cjs.map} +1 -1
  386. package/dist/window.cjs +1 -1
  387. package/dist/window.js +1 -1
  388. package/mixins/baseElement.ts +1 -1
  389. package/mixins/discovery.service.ts +1 -1
  390. package/package.json +1 -2
  391. package/src/area/area.service.ts +1 -1
  392. package/src/area/router.types.ts +1 -1
  393. package/src/directives/animate-text.ts +1 -1
  394. package/src/discovery/discovery.service.ts +1 -1
  395. package/src/input/input.ts +1 -1
  396. package/src/mailbox/README.md +7 -10
  397. package/src/mailbox/types.ts +0 -1
  398. package/types/mixins/discovery.service.d.ts +1 -1
  399. package/types/src/discovery/discovery.service.d.ts +1 -1
  400. package/types/src/mailbox/types.d.ts +0 -1
  401. package/dist/area-1h9xEpTc.cjs.map +0 -1
  402. package/dist/area-DbBcfm5p.js.map +0 -1
  403. package/dist/tailwind.mixin-C4cx3IOr.js +0 -225
  404. package/dist/tailwind.mixin-C4cx3IOr.js.map +0 -1
  405. package/dist/tailwind.mixin-DGiyLbEi.cjs +0 -2
  406. package/dist/tailwind.mixin-DGiyLbEi.cjs.map +0 -1
  407. package/src/area/readme.md +0 -338
  408. package/src/area/router-guide.md +0 -360
  409. package/src/autocomplete/README.md +0 -485
  410. package/src/content-drawer/readme.md +0 -709
  411. package/src/icons/readme.md +0 -37
  412. package/src/list/readme.md +0 -62
  413. package/src/radio-group/readme.md +0 -315
  414. package/src/select/README.md +0 -405
  415. package/src/tabs/Readme.md +0 -397
  416. package/src/teleport/readme.md +0 -91
  417. package/src/tree/README.md +0 -59
  418. package/src/typewriter/IMPROVEMENTS.md +0 -174
  419. package/src/typewriter/QUICK_REFERENCE.md +0 -166
  420. package/src/typewriter/test-typewriter.html +0 -97
@@ -0,0 +1,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).
@@ -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()`.
@@ -0,0 +1,63 @@
1
+ # schmancy-expand
2
+
3
+ > Expandable/accordion component. Inline mode uses grid-template-rows transitions; portal mode teleports content to a body-level `schmancy-expand-root` with backdrop.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-expand summary="Details">
8
+ <p>Content appears when expanded.</p>
9
+ </schmancy-expand>
10
+ ```
11
+
12
+ ## Properties
13
+ | Property | Type | Default | Description |
14
+ |----------|------|---------|-------------|
15
+ | `summary` | string | `''` | Summary text shown when collapsed |
16
+ | `open` | boolean | `false` | Expansion state (reflected) |
17
+ | `summary-padding` | string | — | CSS padding for the summary row |
18
+ | `content-padding` | string | — | CSS padding for the body |
19
+ | `hide-indicator` | boolean | `false` | Hide the chevron indicator |
20
+ | `indicator-rotate` | number | `90` | Rotation angle (deg) when open |
21
+ | `backdrop` | boolean | `true` | Show semi-transparent backdrop in portal mode |
22
+ | `inline` | boolean | `false` | Inline expansion instead of portal (no backdrop) |
23
+
24
+ ## Slots
25
+ | Slot | Purpose |
26
+ |------|---------|
27
+ | (default) | Expanded content |
28
+ | `summary` | Custom summary markup (overrides `summary` property) |
29
+
30
+ ## Behavior
31
+ - **Portal mode (default)**: on open, content is teleported into a body-anchored `schmancy-expand-root` with a backdrop. Click outside or press `Escape` to close.
32
+ - **Inline mode** (`inline`): uses `grid-template-rows: 0fr → 1fr` transition inside the host — no portal, no backdrop.
33
+ - `SPRING_SNAPPY` physics for indicator rotation.
34
+ - Respects `prefers-reduced-motion`.
35
+ - Broadcast event `SCHMANCY_EXPAND_REQUEST_CLOSE` on `window` closes whichever instance is currently open.
36
+
37
+ ## Example — inline accordion
38
+ ```html
39
+ ${repeat(this.faqs, faq => faq.id, faq => html`
40
+ <schmancy-expand inline .summary=${faq.question}>
41
+ <p>${faq.answer}</p>
42
+ </schmancy-expand>
43
+ `)}
44
+ ```
45
+
46
+ ## Example — portal with custom summary slot
47
+ ```html
48
+ <schmancy-expand>
49
+ <div slot="summary" class="flex items-center gap-2">
50
+ <schmancy-icon>info</schmancy-icon>
51
+ <schmancy-typography type="title">Advanced options</schmancy-typography>
52
+ </div>
53
+ <div class="p-4">
54
+ <!-- settings form -->
55
+ </div>
56
+ </schmancy-expand>
57
+ ```
58
+
59
+ ## Programmatic Close
60
+ ```typescript
61
+ import { SCHMANCY_EXPAND_REQUEST_CLOSE } from '@mhmo91/schmancy'
62
+ window.dispatchEvent(new Event(SCHMANCY_EXPAND_REQUEST_CLOSE))
63
+ ```
@@ -0,0 +1,59 @@
1
+ # Schmancy Extra
2
+
3
+ > Data-driven dropdowns for common localization fields. Country and timezone pickers, form-associated and autocomplete-backed.
4
+
5
+ ## schmancy-select-countries
6
+ Fully autocomplete-searchable country dropdown. Form-associated (participates in `<form>` submission and validation via `ElementInternals`).
7
+
8
+ ```html
9
+ <schmancy-select-countries
10
+ name="country"
11
+ label="Country"
12
+ placeholder="Select a country"
13
+ required
14
+ value="DE"
15
+ @change=${e => this.country = e.target.value}
16
+ ></schmancy-select-countries>
17
+ ```
18
+
19
+ | Property | Type | Default | Description |
20
+ |----------|------|---------|-------------|
21
+ | `value` | string | — | ISO country code (reflected) |
22
+ | `name` | string | `''` | Form field name |
23
+ | `label` | string | `'Country'` | Visible label |
24
+ | `hint` | string | `'Please select a country'` | Helper text |
25
+ | `placeholder` | string | `'Select a country'` | Placeholder in the input |
26
+ | `required` | boolean | `false` | Validation constraint |
27
+
28
+ ## schmancy-select-timezones
29
+ Same pattern as countries, backed by timezone data.
30
+
31
+ ```html
32
+ <schmancy-select-timezones
33
+ name="timezone"
34
+ label="Timezone"
35
+ value="Europe/Berlin"
36
+ ></schmancy-select-timezones>
37
+ ```
38
+
39
+ Accepts the same set of properties (`value`, `name`, `label`, `hint`, `placeholder`, `required`).
40
+
41
+ ## Raw Data Exports
42
+ If you want the underlying data without the component:
43
+ ```typescript
44
+ import countries from '@mhmo91/schmancy' // default export from countries.data
45
+ import timezones from '@mhmo91/schmancy' // default export from timezones.data
46
+ ```
47
+
48
+ Each countries row: `{ code, name, dialCode?, flag?, ... }`. Timezones: `{ name, offset, label, ... }`.
49
+
50
+ ## Form Integration
51
+ Both use `formAssociated = true` and register with the parent `<form>`. Works with native `form.checkValidity()` and with [`schmancy-form`](./form.md).
52
+
53
+ ```html
54
+ <schmancy-form @submit=${this.onSubmit}>
55
+ <schmancy-select-countries name="country" required></schmancy-select-countries>
56
+ <schmancy-select-timezones name="timezone" required></schmancy-select-timezones>
57
+ <schmancy-button type="submit" variant="filled">Save</schmancy-button>
58
+ </schmancy-form>
59
+ ```
@@ -0,0 +1,14 @@
1
+ # schmancy-float (deprecated alias)
2
+
3
+ > Backward-compatibility alias for [`schmancy-window`](./window.md). Existing code keeps working — new code should use `schmancy-window` directly.
4
+
5
+ ## Migration
6
+ ```html
7
+ <!-- Before -->
8
+ <schmancy-float id="panel">…</schmancy-float>
9
+
10
+ <!-- After -->
11
+ <schmancy-window id="panel">…</schmancy-window>
12
+ ```
13
+
14
+ All properties are identical. See [window.md](./window.md) for full API.
@@ -0,0 +1,44 @@
1
+ # schmancy-iframe
2
+
3
+ > Sandboxed iframe that auto-sizes to its content. Ships with sensible document resets (font, spacing, tables, pre, blockquote).
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-iframe .html=${emailBodyHtml}></schmancy-iframe>
8
+ ```
9
+
10
+ ## Properties
11
+ | Property | Type | Default | Description |
12
+ |----------|------|---------|-------------|
13
+ | `html` | string | `''` | Body HTML fragment to render |
14
+ | `css` | string | `''` | Extra CSS injected after `baseCss` |
15
+ | `baseCss` | string | default reset | Document CSS — override for fully custom styling |
16
+ | `sandbox` | string | `'allow-same-origin allow-popups'` | Iframe sandbox attribute |
17
+ | `minHeight` | number | `60` | Minimum iframe height in px |
18
+
19
+ ## Events
20
+ | Event | When |
21
+ |-------|------|
22
+ | `load` | Native iframe load; height auto-syncs after |
23
+
24
+ ## Default Resets
25
+ The built-in `baseCss` applies: system font, 14px/1.6 line-height, reset margins for headings/lists/paragraphs, bordered tables, blockquote styling, code/pre backgrounds, responsive images.
26
+
27
+ ## Examples
28
+ ```html
29
+ <!-- Email preview with extra styles -->
30
+ <schmancy-iframe
31
+ .html=${this.email.bodyHtml}
32
+ .css=${`h1 { color: #6200ee; }`}
33
+ ></schmancy-iframe>
34
+
35
+ <!-- Fully custom base styling -->
36
+ <schmancy-iframe
37
+ .html=${fragment}
38
+ .baseCss=${'html,body{margin:0;background:#000;color:#fff}'}
39
+ ></schmancy-iframe>
40
+ ```
41
+
42
+ ## When to Use
43
+ - Rendering untrusted / styled third-party HTML (emails, rich snippets, MD-rendered content) in isolation.
44
+ - Preview panes for user-generated HTML.
@@ -0,0 +1,33 @@
1
+ # schmancy-json
2
+
3
+ > Pretty-printed JSON viewer with key highlighting and click-to-copy.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-json .data=${{ user: 'alice', score: 42 }}></schmancy-json>
8
+ ```
9
+
10
+ ## Properties
11
+ | Property | Type | Default | Description |
12
+ |----------|------|---------|-------------|
13
+ | `data` | object | `{}` | JSON-serialisable data to display |
14
+ | `highlightKeys` | string[] | `[]` | Keys whose values are highlighted (warning color, bold) |
15
+ | `compact` | boolean | `false` | Disable pretty-printing (single line) |
16
+
17
+ ## Behavior
18
+ - Click anywhere on the viewer to copy the full JSON to clipboard (fires `$notify.success`).
19
+ - Container uses `surface-container` glass background with hover state.
20
+ - Monospace font, 10px size — optimized for dense debug output.
21
+ - Values for `highlightKeys` render inside `<span class="text-warning-default font-bold">`.
22
+
23
+ ## Examples
24
+ ```html
25
+ <!-- Debug view with key highlights -->
26
+ <schmancy-json
27
+ .data=${this.state}
28
+ .highlightKeys=${['error', 'pending']}
29
+ ></schmancy-json>
30
+
31
+ <!-- Compact inline -->
32
+ <schmancy-json compact .data=${{ id: 42, status: 'ok' }}></schmancy-json>
33
+ ```
@@ -0,0 +1,63 @@
1
+ # Schmancy Layout
2
+
3
+ > Layout primitives: `schmancy-grid`, `schmancy-flex`, `schmancy-scroll`, plus `sch-grid` / `sch-flex` v2 variants.
4
+
5
+ > **Prefer Tailwind classes directly** for layout in new code. These components exist for quick composition and design-token consistency (`gap="sm|md|lg"` maps to theme spacing).
6
+
7
+ ## schmancy-grid
8
+ ```html
9
+ <schmancy-grid cols="1fr 2fr 1fr" gap="md" align="center">
10
+ <div>Left</div><div>Center</div><div>Right</div>
11
+ </schmancy-grid>
12
+ ```
13
+
14
+ | Property | Type | Default | Description |
15
+ |----------|------|---------|-------------|
16
+ | `flow` | `'row' \| 'col' \| 'dense' \| 'row-dense' \| 'col-dense'` | `'row'` | Grid auto-flow |
17
+ | `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'stretch'` | Item alignment |
18
+ | `justify` | `'start' \| 'center' \| 'end' \| 'stretch'` | `'stretch'` | Item justification |
19
+ | `content` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'around' \| 'evenly' \| 'between'` | — | Align-content |
20
+ | `gap` | `'none' \| 'xs' \| 'sm' \| 'md' \| 'lg'` | `'none'` | Grid gap |
21
+ | `cols` | string | — | grid-template-columns (e.g. `"1fr 2fr"`) |
22
+ | `rows` | string | — | grid-template-rows |
23
+ | `rcols` | object | — | Responsive cols: `{ sm: '1fr', md: '1fr 1fr', lg: '1fr 2fr 1fr' }` |
24
+ | `wrap` | boolean | `false` | Grid auto-wrap |
25
+
26
+ ## schmancy-flex
27
+ ```html
28
+ <schmancy-flex flow="row" justify="between" align="center" gap="md">
29
+ <div>Logo</div><div>Nav</div>
30
+ </schmancy-flex>
31
+ ```
32
+
33
+ | Property | Type | Default |
34
+ |----------|------|---------|
35
+ | `flow` | `'row' \| 'row-reverse' \| 'col' \| 'col-reverse'` | `'col'` |
36
+ | `wrap` | `'wrap' \| 'nowrap' \| 'wrap-reverse'` | `'wrap'` |
37
+ | `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'start'` |
38
+ | `justify` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'between'` | `'start'` |
39
+ | `gap` | `'none' \| 'sm' \| 'md' \| 'lg'` | `'none'` |
40
+
41
+ ## schmancy-scroll
42
+ ```html
43
+ <schmancy-scroll hide direction="vertical" name="main">
44
+ <!-- long content -->
45
+ </schmancy-scroll>
46
+ ```
47
+
48
+ | Property | Type | Default | Description |
49
+ |----------|------|---------|-------------|
50
+ | `hide` | boolean | `false` | Hide scrollbar in supported browsers |
51
+ | `direction` | `'vertical' \| 'horizontal' \| 'both'` | `'both'` | Scroll axes |
52
+ | `name` | string | — | Identifier for global scroll events |
53
+ | `debounce` | number | — | Debounce time in ms for scroll events |
54
+
55
+ Smooth scroll-behavior, overscroll containment, and support for flex-shrink sizing.
56
+
57
+ ## sch-grid / sch-flex (v2)
58
+
59
+ Reflected-attribute variants optimized for styling via CSS selectors. Same prop model as the classic components with a `sch-` prefix. Use when you need to target the layout from parent CSS without Tailwind.
60
+
61
+ ## Notes
62
+ - All layout components extend the base `Layout` class which exposes pass-through CSS properties (padding, margin, width, position, border, etc.).
63
+ - Prefer Tailwind (`class="flex items-center gap-2"`) for new code — these components remain for consistent theme-driven gaps and rapid prototyping.
@@ -0,0 +1,102 @@
1
+ # Schmancy Mailbox
2
+
3
+ > Full email composition + campaign management system. Orchestrates recipients, templates, editor, attachments, and preview.
4
+
5
+ ## Components
6
+
7
+ | Tag | Purpose |
8
+ |-----|---------|
9
+ | `schmancy-mailbox` | Top-level orchestrator |
10
+ | `schmancy-email-editor` | Subject + body composition |
11
+ | `schmancy-email-viewer` | HTML/plaintext preview |
12
+ | `schmancy-email-recipients` | Recipient list with import/CSV |
13
+ | `schmancy-email-layout-selector` | Layout template picker |
14
+ | `schmancy-email-template-picker` | Email template browser |
15
+
16
+ ## Usage
17
+ ```html
18
+ <schmancy-mailbox
19
+ .config=${{
20
+ sendEndpoint: '/api/emails/send',
21
+ uploadEndpoint: '/api/uploads',
22
+ authenticateRequest: (req) => ({ ...req, headers: { Authorization: `Bearer ${token}` } })
23
+ }}
24
+ .templates=${myTemplates}
25
+ .importSources=${[
26
+ { id: 'ticketholders', label: 'Ticket holders', icon: 'confirmation_number', handler: loadTicketHolders },
27
+ { id: 'waitlist', label: 'Waitlist', icon: 'hourglass_empty', handler: loadWaitlist },
28
+ ]}
29
+ ></schmancy-mailbox>
30
+ ```
31
+
32
+ ## schmancy-mailbox Properties
33
+ | Property | Type | Default | Description |
34
+ |----------|------|---------|-------------|
35
+ | `config` | `EmailComposeConfig` | `{}` | Endpoints, auth, upload handlers |
36
+ | `templates` | `EmailTemplate[]` | `[]` | Available email templates |
37
+ | `importSources` | `ImportSource[]` | `[]` | Import buttons shown in recipients panel |
38
+ | `disabled` | boolean | `false` | Disable all interactions |
39
+ | `recipientsTitle` | string | `'Recipients'` | Recipients panel heading |
40
+ | `recipientsEmptyTitle` | string | `'No recipients yet'` | Empty state title |
41
+ | `recipientsEmptyMessage` | string | `'Import from sources or upload a CSV'` | Empty state body |
42
+ | `enableCsvImport` | boolean | `true` | Allow CSV file import |
43
+ | `enableDragDrop` | boolean | `true` | Accept dropped CSV files |
44
+
45
+ ## Key Types
46
+ ```typescript
47
+ interface EmailTemplate { id, name, subject, body, category?, thumbnail? }
48
+
49
+ interface EmailComposeConfig {
50
+ sendEndpoint?: string
51
+ templatesEndpoint?: string
52
+ uploadEndpoint?: string
53
+ authenticateRequest?: (req: RequestInit) => RequestInit
54
+ uploadHandler?: (file: File) => Promise<string>
55
+ imageUploadHandler?: (file: File) => Promise<string>
56
+ }
57
+
58
+ interface SendEmailRequest {
59
+ recipients: string[]
60
+ subject: string
61
+ body: string
62
+ attachments: EmailAttachment[]
63
+ templateId?: string | null
64
+ }
65
+
66
+ interface ImportSource {
67
+ id: string
68
+ label: string
69
+ icon: string // Material icon name
70
+ handler: () => void // Populates recipients via events
71
+ }
72
+ ```
73
+
74
+ ## Events
75
+ | Event | Detail | Where |
76
+ |-------|--------|-------|
77
+ | `emails-imported` | `{ emails, source }` | Recipients |
78
+ | `recipient-removed` | `{ email }` | Recipients |
79
+ | `recipients-cleared` | `{}` | Recipients |
80
+ | `selection-changed` | `{ selectedEmails }` | Recipients |
81
+ | `compose-changed` | `{ subject, body, templateId, attachments }` | Editor |
82
+ | `send-email` | `{ request: SendEmailRequest }` | Mailbox — consumer POSTs to backend |
83
+ | `send-error` | `{ error }` | Mailbox |
84
+
85
+ ## Recipients Flow
86
+ 1. User clicks an `ImportSource` button (or drops a CSV).
87
+ 2. CSV is parsed → `validEmails`, `invalidEmails`, `duplicates` reported.
88
+ 3. `emails-imported` event fires; mailbox merges into selected recipients.
89
+ 4. User edits subject/body via email-editor; changes bubble as `compose-changed`.
90
+ 5. On send, `send-email` fires with the full `SendEmailRequest` — parent handles network.
91
+
92
+ ## Minimal Integration
93
+ ```typescript
94
+ <schmancy-mailbox
95
+ .config=${config}
96
+ .templates=${templates}
97
+ @send-email=${async (e: CustomEvent<{ request: SendEmailRequest }>) => {
98
+ const result = await api.sendCampaign(e.detail.request)
99
+ if (!result.success) this.dispatchError(result.message)
100
+ }}
101
+ ></schmancy-mailbox>
102
+ ```