@mhmo91/schmancy 0.9.2 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/README.md +19 -75
  2. package/ai/INDEX.md +72 -0
  3. package/ai/area.md +119 -39
  4. package/ai/audio.md +69 -0
  5. package/ai/boat.md +47 -0
  6. package/ai/charts.md +93 -0
  7. package/ai/connectivity.md +36 -0
  8. package/ai/date-range-inline.md +44 -0
  9. package/ai/delay.md +50 -0
  10. package/ai/discovery.md +67 -0
  11. package/ai/expand.md +63 -0
  12. package/ai/extra.md +59 -0
  13. package/ai/float.md +14 -0
  14. package/ai/iframe.md +44 -0
  15. package/ai/json.md +33 -0
  16. package/ai/layout.md +63 -0
  17. package/ai/mailbox.md +102 -0
  18. package/ai/map.md +55 -0
  19. package/ai/mixins.md +64 -35
  20. package/ai/option.md +43 -0
  21. package/ai/page.md +42 -0
  22. package/ai/qr-scanner.md +51 -0
  23. package/ai/range.md +47 -0
  24. package/ai/rxjs-utils.md +60 -0
  25. package/ai/slider.md +43 -0
  26. package/ai/store.md +92 -49
  27. package/ai/teleport.md +55 -0
  28. package/ai/theme-button.md +26 -0
  29. package/ai/typewriter.md +46 -0
  30. package/ai/utils.md +95 -0
  31. package/ai/window.md +67 -0
  32. package/dist/ai/INDEX.md +72 -0
  33. package/dist/ai/area.md +119 -39
  34. package/dist/ai/audio.md +69 -0
  35. package/dist/ai/boat.md +47 -0
  36. package/dist/ai/charts.md +93 -0
  37. package/dist/ai/connectivity.md +36 -0
  38. package/dist/ai/date-range-inline.md +44 -0
  39. package/dist/ai/delay.md +50 -0
  40. package/dist/ai/discovery.md +67 -0
  41. package/dist/ai/expand.md +63 -0
  42. package/dist/ai/extra.md +59 -0
  43. package/dist/ai/float.md +14 -0
  44. package/dist/ai/iframe.md +44 -0
  45. package/dist/ai/json.md +33 -0
  46. package/dist/ai/layout.md +63 -0
  47. package/dist/ai/mailbox.md +102 -0
  48. package/dist/ai/map.md +55 -0
  49. package/dist/ai/mixins.md +64 -35
  50. package/dist/ai/option.md +43 -0
  51. package/dist/ai/page.md +42 -0
  52. package/dist/ai/qr-scanner.md +51 -0
  53. package/dist/ai/range.md +47 -0
  54. package/dist/ai/rxjs-utils.md +60 -0
  55. package/dist/ai/slider.md +43 -0
  56. package/dist/ai/store.md +92 -49
  57. package/dist/ai/teleport.md +55 -0
  58. package/dist/ai/theme-button.md +26 -0
  59. package/dist/ai/typewriter.md +46 -0
  60. package/dist/ai/utils.md +95 -0
  61. package/dist/ai/window.md +67 -0
  62. package/dist/{area-DbBcfm5p.js → area-CRoGqD_u.js} +2 -2
  63. package/dist/area-CRoGqD_u.js.map +1 -0
  64. package/dist/{area-1h9xEpTc.cjs → area-JPykB7A9.cjs} +1 -1
  65. package/dist/area-JPykB7A9.cjs.map +1 -0
  66. package/dist/area.cjs +1 -1
  67. package/dist/area.js +1 -1
  68. package/dist/{autocomplete-OE70CcYP.cjs → autocomplete-5rVhbieU.cjs} +1 -1
  69. package/dist/{autocomplete-OE70CcYP.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
  70. package/dist/{autocomplete-DDVsegep.js → autocomplete-BllPQwr8.js} +3 -3
  71. package/dist/{autocomplete-DDVsegep.js.map → autocomplete-BllPQwr8.js.map} +1 -1
  72. package/dist/autocomplete.cjs +1 -1
  73. package/dist/autocomplete.js +1 -1
  74. package/dist/badge.cjs +1 -1
  75. package/dist/badge.js +1 -1
  76. package/dist/{boat-T8Ov4-yA.js → boat-BDTQ-du9.js} +2 -2
  77. package/dist/{boat-T8Ov4-yA.js.map → boat-BDTQ-du9.js.map} +1 -1
  78. package/dist/{boat-Cf1oJ0ka.cjs → boat-DYEAZ8Qj.cjs} +1 -1
  79. package/dist/{boat-Cf1oJ0ka.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
  80. package/dist/boat.cjs +1 -1
  81. package/dist/boat.js +1 -1
  82. package/dist/{busy-BD6D5P-l.js → busy-ChDAeaKF.js} +1 -1
  83. package/dist/{busy-BD6D5P-l.js.map → busy-ChDAeaKF.js.map} +1 -1
  84. package/dist/{busy-DF9wztWL.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
  85. package/dist/{busy-DF9wztWL.cjs.map → busy-Dj7Xn0Z0.cjs.map} +1 -1
  86. package/dist/busy.cjs +1 -1
  87. package/dist/busy.js +1 -1
  88. package/dist/button.cjs +1 -1
  89. package/dist/button.js +2 -2
  90. package/dist/{card-Csvu8UJ9.cjs → card-BvPWVEJX.cjs} +1 -1
  91. package/dist/{card-Csvu8UJ9.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
  92. package/dist/{card-DM_miKMd.js → card-DZFPRPqs.js} +1 -1
  93. package/dist/{card-DM_miKMd.js.map → card-DZFPRPqs.js.map} +1 -1
  94. package/dist/card.cjs +1 -1
  95. package/dist/card.js +1 -1
  96. package/dist/charts.cjs +1 -1
  97. package/dist/charts.js +2 -2
  98. package/dist/{checkbox-sJujc_ga.cjs → checkbox-BC_37rsG.cjs} +1 -1
  99. package/dist/{checkbox-sJujc_ga.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
  100. package/dist/{checkbox-BgGtMaMR.js → checkbox-GSSjqo6w.js} +1 -1
  101. package/dist/{checkbox-BgGtMaMR.js.map → checkbox-GSSjqo6w.js.map} +1 -1
  102. package/dist/checkbox.cjs +1 -1
  103. package/dist/checkbox.js +1 -1
  104. package/dist/{chips-D_e6wijp.cjs → chips-B19XS8Xc.cjs} +1 -1
  105. package/dist/{chips-D_e6wijp.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
  106. package/dist/{chips-BZaH4wez.js → chips-B9oAEfE_.js} +3 -3
  107. package/dist/{chips-BZaH4wez.js.map → chips-B9oAEfE_.js.map} +1 -1
  108. package/dist/chips.cjs +1 -1
  109. package/dist/chips.js +2 -2
  110. package/dist/{code-highlight-Q3cc6ukq.js → code-highlight-DCk5lJY-.js} +1 -1
  111. package/dist/{code-highlight-Q3cc6ukq.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
  112. package/dist/{code-highlight-DlhERv_O.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
  113. package/dist/{code-highlight-DlhERv_O.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
  114. package/dist/code-highlight.cjs +1 -1
  115. package/dist/code-highlight.js +1 -1
  116. package/dist/{components-CRhkB3V2.js → components-COsM6sJZ.js} +2 -2
  117. package/dist/{components-CRhkB3V2.js.map → components-COsM6sJZ.js.map} +1 -1
  118. package/dist/{components-DnlEYYDs.cjs → components-CyD6a7gQ.cjs} +1 -1
  119. package/dist/{components-DnlEYYDs.cjs.map → components-CyD6a7gQ.cjs.map} +1 -1
  120. package/dist/components.cjs +1 -1
  121. package/dist/components.js +1 -1
  122. package/dist/connectivity.cjs +1 -1
  123. package/dist/connectivity.js +1 -1
  124. package/dist/content-drawer.cjs +1 -1
  125. package/dist/content-drawer.js +1 -1
  126. package/dist/{date-range-C0IYnvHF.js → date-range-Sfyco9-n.js} +3 -3
  127. package/dist/{date-range-C0IYnvHF.js.map → date-range-Sfyco9-n.js.map} +1 -1
  128. package/dist/{date-range-cymbTDnl.cjs → date-range-ZAaQB22I.cjs} +1 -1
  129. package/dist/{date-range-cymbTDnl.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
  130. package/dist/{date-range-inline-0ENN4Plz.js → date-range-inline-Bl8qbiQF.js} +1 -1
  131. package/dist/{date-range-inline-0ENN4Plz.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
  132. package/dist/{date-range-inline-Cfwt-ReH.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
  133. package/dist/{date-range-inline-Cfwt-ReH.cjs.map → date-range-inline-m7nLjOMI.cjs.map} +1 -1
  134. package/dist/date-range-inline.cjs +1 -1
  135. package/dist/date-range-inline.js +1 -1
  136. package/dist/date-range.cjs +1 -1
  137. package/dist/date-range.js +1 -1
  138. package/dist/{delay-D6mQLUp-.cjs → delay-7boauN6N.cjs} +1 -1
  139. package/dist/{delay-D6mQLUp-.cjs.map → delay-7boauN6N.cjs.map} +1 -1
  140. package/dist/{delay-D1dVP93u.js → delay-CgX6m0HN.js} +3 -3
  141. package/dist/{delay-D1dVP93u.js.map → delay-CgX6m0HN.js.map} +1 -1
  142. package/dist/delay.cjs +1 -1
  143. package/dist/delay.js +1 -1
  144. package/dist/{details-CPT_Mi4e.cjs → details-BHnk8l4q.cjs} +1 -1
  145. package/dist/{details-CPT_Mi4e.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
  146. package/dist/{details-Cv4OOrVW.js → details-BPkUg8Cq.js} +2 -2
  147. package/dist/{details-Cv4OOrVW.js.map → details-BPkUg8Cq.js.map} +1 -1
  148. package/dist/details.cjs +1 -1
  149. package/dist/details.js +1 -1
  150. package/dist/dialog.cjs +1 -1
  151. package/dist/dialog.js +2 -2
  152. package/dist/directives.cjs.map +1 -1
  153. package/dist/directives.js.map +1 -1
  154. package/dist/discovery.cjs.map +1 -1
  155. package/dist/discovery.js.map +1 -1
  156. package/dist/{divider-DDC-kND3.js → divider-CW9a7MMj.js} +2 -2
  157. package/dist/{divider-DDC-kND3.js.map → divider-CW9a7MMj.js.map} +1 -1
  158. package/dist/{divider-nZ_2to2N.cjs → divider-_khrhrZo.cjs} +1 -1
  159. package/dist/{divider-nZ_2to2N.cjs.map → divider-_khrhrZo.cjs.map} +1 -1
  160. package/dist/divider.cjs +1 -1
  161. package/dist/divider.js +1 -1
  162. package/dist/dropdown.cjs +1 -1
  163. package/dist/dropdown.js +2 -2
  164. package/dist/{expand-Crdts9q_.cjs → expand-Cp7-PH8b.cjs} +1 -1
  165. package/dist/{expand-Crdts9q_.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
  166. package/dist/{expand-Bp3N8CcL.js → expand-iQ7EOMP7.js} +3 -3
  167. package/dist/{expand-Bp3N8CcL.js.map → expand-iQ7EOMP7.js.map} +1 -1
  168. package/dist/expand.cjs +1 -1
  169. package/dist/expand.js +1 -1
  170. package/dist/{extra-B0IZCg0t.cjs → extra-IKAiJJhv.cjs} +1 -1
  171. package/dist/{extra-B0IZCg0t.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
  172. package/dist/{extra-DupwhQhC.js → extra-wEpvEFbK.js} +2 -2
  173. package/dist/{extra-DupwhQhC.js.map → extra-wEpvEFbK.js.map} +1 -1
  174. package/dist/extra.cjs +1 -1
  175. package/dist/extra.js +1 -1
  176. package/dist/{float-Dqdc1_S5.js → float-BQ_urmMs.js} +2 -2
  177. package/dist/{float-Dqdc1_S5.js.map → float-BQ_urmMs.js.map} +1 -1
  178. package/dist/{float-CQoJ_oSB.cjs → float-D5rNC82i.cjs} +1 -1
  179. package/dist/{float-CQoJ_oSB.cjs.map → float-D5rNC82i.cjs.map} +1 -1
  180. package/dist/float.cjs +1 -1
  181. package/dist/float.js +1 -1
  182. package/dist/{form-CvoLqMY7.cjs → form-BqN1AGFj.cjs} +1 -1
  183. package/dist/{form-CvoLqMY7.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
  184. package/dist/{form-CW5XNuTg.js → form-CajC5HnO.js} +1 -1
  185. package/dist/{form-CW5XNuTg.js.map → form-CajC5HnO.js.map} +1 -1
  186. package/dist/form.cjs +1 -1
  187. package/dist/form.js +1 -1
  188. package/dist/{icons-BLQHEbIk.cjs → icons-B57_93VV.cjs} +1 -1
  189. package/dist/{icons-BLQHEbIk.cjs.map → icons-B57_93VV.cjs.map} +1 -1
  190. package/dist/{icons-Cpfdb7sA.js → icons-BDqiGXrO.js} +1 -1
  191. package/dist/{icons-Cpfdb7sA.js.map → icons-BDqiGXrO.js.map} +1 -1
  192. package/dist/icons.cjs +1 -1
  193. package/dist/icons.js +1 -1
  194. package/dist/{iframe-sJGXBbxT.cjs → iframe-DNHL3GIk.cjs} +1 -1
  195. package/dist/{iframe-sJGXBbxT.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
  196. package/dist/{iframe-DG6HVYdy.js → iframe-WnWPIrBG.js} +1 -1
  197. package/dist/{iframe-DG6HVYdy.js.map → iframe-WnWPIrBG.js.map} +1 -1
  198. package/dist/iframe.cjs +1 -1
  199. package/dist/iframe.js +1 -1
  200. package/dist/index.cjs +1 -1
  201. package/dist/index.js +33 -33
  202. package/dist/{input-DGTdmp1Q.cjs → input-BiSrTcrR.cjs} +1 -1
  203. package/dist/{input-DGTdmp1Q.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
  204. package/dist/{input-BevxycIt.js → input-VaXHFrRn.js} +1 -1
  205. package/dist/{input-BevxycIt.js.map → input-VaXHFrRn.js.map} +1 -1
  206. package/dist/{input-chip-CKVtjInb.cjs → input-chip-Dy-AiP55.cjs} +1 -1
  207. package/dist/{input-chip-CKVtjInb.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
  208. package/dist/{input-chip-BWS-SFU4.js → input-chip-QejNcRnS.js} +1 -1
  209. package/dist/{input-chip-BWS-SFU4.js.map → input-chip-QejNcRnS.js.map} +1 -1
  210. package/dist/input.cjs +1 -1
  211. package/dist/input.js +1 -1
  212. package/dist/json.cjs +1 -1
  213. package/dist/json.js +2 -2
  214. package/dist/{layout-DxLjlDfr.js → layout-CnsXeCAy.js} +2 -2
  215. package/dist/{layout-DxLjlDfr.js.map → layout-CnsXeCAy.js.map} +1 -1
  216. package/dist/{layout-CQdd8UCr.cjs → layout-DNYG3phx.cjs} +1 -1
  217. package/dist/{layout-CQdd8UCr.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
  218. package/dist/layout.cjs +1 -1
  219. package/dist/layout.js +2 -2
  220. package/dist/{lightbox-Bjc55lHH.js → lightbox-BrI1Z31s.js} +2 -2
  221. package/dist/{lightbox-Bjc55lHH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
  222. package/dist/{lightbox-C_863_XU.cjs → lightbox-CmACf0t5.cjs} +1 -1
  223. package/dist/{lightbox-C_863_XU.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
  224. package/dist/lightbox.cjs +1 -1
  225. package/dist/lightbox.js +1 -1
  226. package/dist/{list-BAqhlzZd.js → list-Cm-jjXxM.js} +2 -2
  227. package/dist/{list-BAqhlzZd.js.map → list-Cm-jjXxM.js.map} +1 -1
  228. package/dist/{list-CaXzdN9_.cjs → list-swIL9VDv.cjs} +1 -1
  229. package/dist/{list-CaXzdN9_.cjs.map → list-swIL9VDv.cjs.map} +1 -1
  230. package/dist/list.cjs +1 -1
  231. package/dist/list.js +1 -1
  232. package/dist/{litElement.mixin-DN6X9_wD.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
  233. package/dist/{litElement.mixin-DN6X9_wD.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
  234. package/dist/{litElement.mixin-Dktub0ri.js → litElement.mixin-6jJYHCrZ.js} +1 -1
  235. package/dist/{litElement.mixin-Dktub0ri.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
  236. package/dist/{mailbox-DuMUH4f3.js → mailbox-BuvsVaAQ.js} +4 -4
  237. package/dist/{mailbox-DuMUH4f3.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
  238. package/dist/{mailbox-BvsLXpvy.cjs → mailbox-D6LkQcN5.cjs} +1 -1
  239. package/dist/{mailbox-BvsLXpvy.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
  240. package/dist/mailbox.cjs +1 -1
  241. package/dist/mailbox.js +1 -1
  242. package/dist/{map-DkIy1ph7.js → map-CQiKAxC3.js} +1 -1
  243. package/dist/{map-DkIy1ph7.js.map → map-CQiKAxC3.js.map} +1 -1
  244. package/dist/{map-C2Msv9TQ.cjs → map-D5NN4VET.cjs} +1 -1
  245. package/dist/{map-C2Msv9TQ.cjs.map → map-D5NN4VET.cjs.map} +1 -1
  246. package/dist/map.cjs +1 -1
  247. package/dist/map.js +1 -1
  248. package/dist/{menu-DEeDKW5U.js → menu-C1x04YZw.js} +2 -2
  249. package/dist/{menu-DEeDKW5U.js.map → menu-C1x04YZw.js.map} +1 -1
  250. package/dist/{menu-Mm71lv9k.cjs → menu-CkgMO9K5.cjs} +1 -1
  251. package/dist/{menu-Mm71lv9k.cjs.map → menu-CkgMO9K5.cjs.map} +1 -1
  252. package/dist/menu.cjs +1 -1
  253. package/dist/menu.js +1 -1
  254. package/dist/mixins.cjs +1 -1
  255. package/dist/mixins.js +3 -3
  256. package/dist/nav-drawer.cjs +1 -1
  257. package/dist/nav-drawer.js +1 -1
  258. package/dist/navigation-bar.cjs +1 -1
  259. package/dist/navigation-bar.js +1 -1
  260. package/dist/navigation-rail.cjs +1 -1
  261. package/dist/navigation-rail.js +2 -2
  262. package/dist/{notification-K-ug8cKk.js → notification-BnBgxjF-.js} +3 -3
  263. package/dist/{notification-K-ug8cKk.js.map → notification-BnBgxjF-.js.map} +1 -1
  264. package/dist/{notification-cTgXEDZ0.cjs → notification-CZFEhWxc.cjs} +1 -1
  265. package/dist/{notification-cTgXEDZ0.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
  266. package/dist/notification.cjs +1 -1
  267. package/dist/notification.js +1 -1
  268. package/dist/{option-5rEOmtAm.cjs → option-BrxCVwSx.cjs} +1 -1
  269. package/dist/{option-5rEOmtAm.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
  270. package/dist/{option-TFSKvSjT.js → option-DBO8xZwd.js} +1 -1
  271. package/dist/{option-TFSKvSjT.js.map → option-DBO8xZwd.js.map} +1 -1
  272. package/dist/option.cjs +1 -1
  273. package/dist/option.js +1 -1
  274. package/dist/page.cjs +1 -1
  275. package/dist/page.js +3 -3
  276. package/dist/{progress-iu0AMbSg.cjs → progress-Db2e4_Zd.cjs} +1 -1
  277. package/dist/{progress-iu0AMbSg.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
  278. package/dist/{progress-Cta3nM-f.js → progress-DeiHxXo7.js} +2 -2
  279. package/dist/{progress-Cta3nM-f.js.map → progress-DeiHxXo7.js.map} +1 -1
  280. package/dist/progress.cjs +1 -1
  281. package/dist/progress.js +1 -1
  282. package/dist/{provide-D69zybs5.js → provide-C1aQhxYo.js} +1 -1
  283. package/dist/{provide-D69zybs5.js.map → provide-C1aQhxYo.js.map} +1 -1
  284. package/dist/{provide-BEyyKlDM.cjs → provide-DHnhQtCH.cjs} +1 -1
  285. package/dist/{provide-BEyyKlDM.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
  286. package/dist/qr-scanner.cjs +1 -1
  287. package/dist/qr-scanner.js +2 -2
  288. package/dist/{radio-group-DKPN0T50.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
  289. package/dist/{radio-group-DKPN0T50.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
  290. package/dist/{radio-group-BjSWmYJC.js → radio-group-zSO0AkJf.js} +1 -1
  291. package/dist/{radio-group-BjSWmYJC.js.map → radio-group-zSO0AkJf.js.map} +1 -1
  292. package/dist/radio-group.cjs +1 -1
  293. package/dist/radio-group.js +1 -1
  294. package/dist/range.cjs +1 -1
  295. package/dist/range.js +1 -1
  296. package/dist/{scroll-mayaGGpE.cjs → scroll-QMCmbbDv.cjs} +1 -1
  297. package/dist/{scroll-mayaGGpE.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
  298. package/dist/{scroll-tG1vaRFO.js → scroll-cBDzye64.js} +1 -1
  299. package/dist/{scroll-tG1vaRFO.js.map → scroll-cBDzye64.js.map} +1 -1
  300. package/dist/{select-C4YK5Arj.cjs → select-Ct37l3lg.cjs} +1 -1
  301. package/dist/{select-C4YK5Arj.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
  302. package/dist/{select-CepryGGP.js → select-c6HbWvKP.js} +2 -2
  303. package/dist/{select-CepryGGP.js.map → select-c6HbWvKP.js.map} +1 -1
  304. package/dist/select.cjs +1 -1
  305. package/dist/select.js +1 -1
  306. package/dist/{sheet-D2uT95S1.js → sheet-BMXcUiIm.js} +4 -4
  307. package/dist/{sheet-D2uT95S1.js.map → sheet-BMXcUiIm.js.map} +1 -1
  308. package/dist/{sheet-Cy4C2-kG.cjs → sheet-CQec-bCV.cjs} +1 -1
  309. package/dist/{sheet-Cy4C2-kG.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
  310. package/dist/sheet.cjs +1 -1
  311. package/dist/sheet.js +2 -2
  312. package/dist/{sheet.service-Os8KJGSE.js → sheet.service-BcPV3Du4.js} +1 -1
  313. package/dist/{sheet.service-Os8KJGSE.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
  314. package/dist/{sheet.service-Dv5Hwj3k.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
  315. package/dist/{sheet.service-Dv5Hwj3k.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
  316. package/dist/slider.cjs +1 -1
  317. package/dist/slider.js +2 -2
  318. package/dist/{src-BLcmKlCH.js → src-BLngW2bl.js} +42 -42
  319. package/dist/{src-BLcmKlCH.js.map → src-BLngW2bl.js.map} +1 -1
  320. package/dist/{src-tfU0akqI.cjs → src-BtQVyqMy.cjs} +1 -1
  321. package/dist/{src-tfU0akqI.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
  322. package/dist/steps.cjs +1 -1
  323. package/dist/steps.js +3 -3
  324. package/dist/{surface-CiiIYeJN.cjs → surface-BjKZoJxK.cjs} +1 -1
  325. package/dist/{surface-CiiIYeJN.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
  326. package/dist/{surface-fXvRpS6s.js → surface-pK8hME5c.js} +3 -3
  327. package/dist/{surface-fXvRpS6s.js.map → surface-pK8hME5c.js.map} +1 -1
  328. package/dist/surface.cjs +1 -1
  329. package/dist/surface.js +1 -1
  330. package/dist/{surface.mixin-C4hbgyaP.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
  331. package/dist/{surface.mixin-C4hbgyaP.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
  332. package/dist/{surface.mixin-DBuxL5aL.js → surface.mixin-CBNRpJum.js} +1 -1
  333. package/dist/{surface.mixin-DBuxL5aL.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
  334. package/dist/{table-BeXnwSsq.js → table-BXIHX9h4.js} +2 -2
  335. package/dist/{table-BeXnwSsq.js.map → table-BXIHX9h4.js.map} +1 -1
  336. package/dist/{table-BRVKlNjl.cjs → table-CiqgZzSd.cjs} +1 -1
  337. package/dist/{table-BRVKlNjl.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
  338. package/dist/table.cjs +1 -1
  339. package/dist/table.js +1 -1
  340. package/dist/{tabs-CBU9Ctqm.cjs → tabs-CKa-W4qA.cjs} +1 -1
  341. package/dist/{tabs-CBU9Ctqm.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
  342. package/dist/{tabs-y708NWQ2.js → tabs-nbV5eblZ.js} +2 -2
  343. package/dist/{tabs-y708NWQ2.js.map → tabs-nbV5eblZ.js.map} +1 -1
  344. package/dist/tabs.cjs +1 -1
  345. package/dist/tabs.js +1 -1
  346. package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
  347. package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
  348. package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
  349. package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
  350. package/dist/teleport.cjs +1 -1
  351. package/dist/teleport.js +1 -1
  352. package/dist/{textarea-BhAoJg8c.cjs → textarea-Cp1ZE60O.cjs} +1 -1
  353. package/dist/{textarea-BhAoJg8c.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
  354. package/dist/{textarea-Bl8-gQEJ.js → textarea-D7q8exMg.js} +1 -1
  355. package/dist/{textarea-Bl8-gQEJ.js.map → textarea-D7q8exMg.js.map} +1 -1
  356. package/dist/textarea.cjs +1 -1
  357. package/dist/textarea.js +1 -1
  358. package/dist/{theme-C-vdR-Ic.cjs → theme-Da4SPq9X.cjs} +1 -1
  359. package/dist/{theme-C-vdR-Ic.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
  360. package/dist/{theme-DZUpYJn-.js → theme-_VPV6Bxh.js} +3 -3
  361. package/dist/{theme-DZUpYJn-.js.map → theme-_VPV6Bxh.js.map} +1 -1
  362. package/dist/{theme-button-CwrvpOMK.js → theme-button--sX8A-m1.js} +1 -1
  363. package/dist/{theme-button-CwrvpOMK.js.map → theme-button--sX8A-m1.js.map} +1 -1
  364. package/dist/{theme-button-Cx1iKh7G.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
  365. package/dist/{theme-button-Cx1iKh7G.cjs.map → theme-button-Ci8VQ7KW.cjs.map} +1 -1
  366. package/dist/theme-button.cjs +1 -1
  367. package/dist/theme-button.js +1 -1
  368. package/dist/theme.cjs +1 -1
  369. package/dist/theme.js +2 -2
  370. package/dist/tooltip.cjs +1 -1
  371. package/dist/tooltip.js +1 -1
  372. package/dist/tree.cjs +1 -1
  373. package/dist/tree.js +1 -1
  374. package/dist/{typewriter-CXQIzqPV.cjs → typewriter-B2TnHPjw.cjs} +1 -1
  375. package/dist/{typewriter-CXQIzqPV.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
  376. package/dist/{typewriter-mxVw5dFn.js → typewriter-BrZNa8T-.js} +3 -3
  377. package/dist/{typewriter-mxVw5dFn.js.map → typewriter-BrZNa8T-.js.map} +1 -1
  378. package/dist/typewriter.cjs +1 -1
  379. package/dist/typewriter.js +1 -1
  380. package/dist/typography.cjs +1 -1
  381. package/dist/typography.js +1 -1
  382. package/dist/{window-EWYJJC_H.js → window-CM1ycigo.js} +2 -2
  383. package/dist/{window-EWYJJC_H.js.map → window-CM1ycigo.js.map} +1 -1
  384. package/dist/{window-DFMlB1Tq.cjs → window-Uii13x_r.cjs} +1 -1
  385. package/dist/{window-DFMlB1Tq.cjs.map → window-Uii13x_r.cjs.map} +1 -1
  386. package/dist/window.cjs +1 -1
  387. package/dist/window.js +1 -1
  388. package/mixins/baseElement.ts +1 -1
  389. package/mixins/discovery.service.ts +1 -1
  390. package/package.json +1 -2
  391. package/src/area/area.service.ts +1 -1
  392. package/src/area/router.types.ts +1 -1
  393. package/src/directives/animate-text.ts +1 -1
  394. package/src/discovery/discovery.service.ts +1 -1
  395. package/src/input/input.ts +1 -1
  396. package/src/mailbox/README.md +7 -10
  397. package/src/mailbox/types.ts +0 -1
  398. package/types/mixins/discovery.service.d.ts +1 -1
  399. package/types/src/discovery/discovery.service.d.ts +1 -1
  400. package/types/src/mailbox/types.d.ts +0 -1
  401. package/dist/area-1h9xEpTc.cjs.map +0 -1
  402. package/dist/area-DbBcfm5p.js.map +0 -1
  403. package/dist/tailwind.mixin-C4cx3IOr.js +0 -225
  404. package/dist/tailwind.mixin-C4cx3IOr.js.map +0 -1
  405. package/dist/tailwind.mixin-DGiyLbEi.cjs +0 -2
  406. package/dist/tailwind.mixin-DGiyLbEi.cjs.map +0 -1
  407. package/src/area/readme.md +0 -338
  408. package/src/area/router-guide.md +0 -360
  409. package/src/autocomplete/README.md +0 -485
  410. package/src/content-drawer/readme.md +0 -709
  411. package/src/icons/readme.md +0 -37
  412. package/src/list/readme.md +0 -62
  413. package/src/radio-group/readme.md +0 -315
  414. package/src/select/README.md +0 -405
  415. package/src/tabs/Readme.md +0 -397
  416. package/src/teleport/readme.md +0 -91
  417. package/src/tree/README.md +0 -59
  418. package/src/typewriter/IMPROVEMENTS.md +0 -174
  419. package/src/typewriter/QUICK_REFERENCE.md +0 -166
  420. package/src/typewriter/test-typewriter.html +0 -97
package/ai/mixins.md CHANGED
@@ -1,70 +1,99 @@
1
- # Schmancy Mixins
1
+ # `$LitElement`
2
2
 
3
- > Base classes and utilities: `$LitElement`, `disconnecting`, `classMap`, `styleMap`.
3
+ Base class for Schmancy components. Extends `LitElement` with RxJS cleanup, Tailwind support, and cross-shadow discovery.
4
4
 
5
- ## $LitElement
6
-
7
- The base class for all Schmancy components. Extends LitElement with Tailwind support and RxJS cleanup.
5
+ ## Usage
8
6
 
9
7
  ```typescript
10
- import { $LitElement } from '@mhmo91/schmancy/dist/mixins'
11
- import { css } from 'lit'
8
+ import { $LitElement } from '@mhmo91/schmancy/mixins'
9
+ import { customElement } from 'lit/decorators.js'
10
+ import { css, html } from 'lit'
12
11
 
13
12
  @customElement('my-component')
14
- class MyComponent extends $LitElement(css`:host { display: block }`) {
15
- // ...
13
+ class MyComponent extends $LitElement(css`
14
+ :host { display: block; }
15
+ `) {
16
+ render() {
17
+ return html`<slot></slot>`
18
+ }
16
19
  }
17
20
  ```
18
21
 
19
- ## Provided Features
22
+ `$LitElement(style?)` accepts either a Lit `css` tagged literal or a string (e.g. SCSS imported with `?inline`).
23
+
24
+ ## Provided members
20
25
 
21
- ### disconnecting (Subject)
22
- RxJS Subject that emits when the component is disconnected. Use with `takeUntil` for automatic cleanup.
26
+ ### `disconnecting: Subject<void>`
27
+ Emits once when the element disconnects. Pair with `takeUntil` for cleanup:
23
28
 
24
29
  ```typescript
25
30
  connectedCallback() {
26
31
  super.connectedCallback()
27
32
  someObservable$.pipe(
28
- takeUntil(this.disconnecting)
33
+ takeUntil(this.disconnecting),
29
34
  ).subscribe()
30
35
  }
31
36
  ```
32
37
 
33
- ### classMap(classes)
34
- Enhanced version of Lit's `classMap` that splits space-separated keys.
38
+ ### `classMap(obj)`
39
+ Wraps Lit's `classMap` so keys can be space-separated:
35
40
 
36
41
  ```typescript
37
- // Supports space-separated class keys (unlike standard classMap)
38
- class=${this.classMap({
42
+ html`<div class=${this.classMap({
39
43
  'flex items-center gap-2': true,
40
- 'bg-primary-default': this.active,
41
- })}
44
+ 'opacity-50': this.disabled,
45
+ })}></div>`
42
46
  ```
43
47
 
44
- **Critical:** Must be the SOLE expression in `class=`. Never mix with string interpolation.
48
+ Must be the only expression in `class=` don't mix with string interpolation.
45
49
 
46
- ### styleMap(styles)
47
- Direct passthrough to Lit's `styleMap` directive.
50
+ ### `styleMap(obj)`
51
+ Passthrough to Lit's `styleMap`.
48
52
 
49
53
  ```typescript
50
- style=${this.styleMap({ width: '100px', opacity: this.visible ? 1 : 0 })}
54
+ html`<div style=${this.styleMap({ width: `${w}px` })}></div>`
51
55
  ```
52
56
 
53
- ### discover(tag)
54
- Find components by tag name via event-based discovery.
57
+ ### `discover<T>(tag): Observable<T | null>`
58
+ Find another Schmancy component by tag via event-based handshake. Works across shadow DOM.
55
59
 
56
60
  ```typescript
57
- this.discover<MyOtherComponent>('my-other-component').pipe(
58
- takeUntil(this.disconnecting)
59
- ).subscribe(component => { ... })
61
+ this.discover<SchmancyDialog>('schmancy-dialog').pipe(
62
+ takeUntil(this.disconnecting),
63
+ ).subscribe(dialog => dialog?.setDefaultAction('confirm'))
60
64
  ```
61
65
 
62
- ### stableId / uid
63
- - `stableId`: Deterministic ID based on DOM path (stable across renders)
64
- - `uid`: Unique instance ID (auto-generated or set via attribute)
66
+ ### Auto-response to discovery
67
+ Every `$LitElement` responds to `{its-tag}-where-are-you` events with `{its-tag}-here-i-am` carrying `{ detail: { component: this } }`.
68
+
69
+ ## Component skeleton
70
+
71
+ ```typescript
72
+ @customElement('my-component')
73
+ export class MyComponent extends $LitElement(css`:host { display: block }`) {
74
+ @property({ type: String, reflect: true }) variant: 'a' | 'b' = 'a'
75
+ @state() private _open = false
76
+
77
+ connectedCallback() {
78
+ super.connectedCallback()
79
+ // subscriptions here, with takeUntil(this.disconnecting)
80
+ }
81
+
82
+ render() {
83
+ return html`<slot></slot>`
84
+ }
85
+ }
86
+
87
+ declare global {
88
+ interface HTMLElementTagNameMap {
89
+ 'my-component': MyComponent
90
+ }
91
+ }
92
+ ```
65
93
 
66
- ### dispatchScopedEvent(name, detail, options)
67
- Dispatches both a scoped event (`name::uid`) and generic event for backward compatibility.
94
+ ## Rules
68
95
 
69
- ### locale
70
- Current locale from theme context, falls back to `navigator.language`.
96
+ - Call `super.connectedCallback()` / `super.disconnectedCallback()` when overriding.
97
+ - All RxJS subscriptions end with `.pipe(takeUntil(this.disconnecting))`.
98
+ - Register the tag in `HTMLElementTagNameMap` for TypeScript.
99
+ - Don't mix `classMap` with string interpolation in the same attribute.
package/ai/option.md ADDED
@@ -0,0 +1,43 @@
1
+ # schmancy-option
2
+
3
+ > Selectable item for `schmancy-select`, `schmancy-autocomplete`, and `schmancy-menu`. Lightweight and a11y-ready.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-select label="Country">
8
+ <schmancy-option value="us">United States</schmancy-option>
9
+ <schmancy-option value="de">Germany</schmancy-option>
10
+ <schmancy-option value="jp" disabled>Japan</schmancy-option>
11
+ </schmancy-select>
12
+ ```
13
+
14
+ ## Properties
15
+ | Property | Type | Default | Description |
16
+ |----------|------|---------|-------------|
17
+ | `value` | string | `''` | Value reported when this option is selected |
18
+ | `label` | string | auto | Display label (falls back to text content) |
19
+ | `selected` | boolean | `false` | Reflects selected state |
20
+ | `disabled` | boolean | `false` | Disables interaction |
21
+ | `group` | string | `''` | Grouping identifier for grouped lists |
22
+ | `icon` | string | `''` | Material icon name before the label |
23
+
24
+ ## Events
25
+ | Event | Payload | When |
26
+ |-------|---------|------|
27
+ | `click` | — | Standard click event |
28
+ | `option-select` | `CustomEvent<{ value, label }>` | Dispatched on activation |
29
+
30
+ ## Behavior
31
+ - Auto-generates `id` for ARIA wiring if not set.
32
+ - Infers `label` from text content when omitted.
33
+ - Keyboard focusable with a visible focus ring via `:focus-visible`.
34
+ - Parent select/autocomplete coordinates selection state via slot query.
35
+
36
+ ## Example — grouped options
37
+ ```html
38
+ <schmancy-select label="Framework">
39
+ <schmancy-option value="lit" group="web" icon="bolt">Lit</schmancy-option>
40
+ <schmancy-option value="react" group="web">React</schmancy-option>
41
+ <schmancy-option value="swift" group="mobile">Swift</schmancy-option>
42
+ </schmancy-select>
43
+ ```
package/ai/page.md ADDED
@@ -0,0 +1,42 @@
1
+ # schmancy-page
2
+
3
+ > Native mobile-like page container. Fills remaining viewport height, prevents rubber-banding, pull-to-refresh, and double-tap zoom.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-page rows="auto_1fr_auto">
8
+ <header>App bar</header>
9
+ <main>Scrollable content</main>
10
+ <footer>Bottom nav</footer>
11
+ </schmancy-page>
12
+ ```
13
+
14
+ ## Properties
15
+ | Property | Type | Default | Description |
16
+ |----------|------|---------|-------------|
17
+ | `rows` | string | `'auto_1fr_auto'` | Grid template rows — underscores become spaces (e.g. `'1fr_2fr_auto'`) |
18
+ | `show-scrollbar` | boolean | `false` | Display scrollbar on scrollable area |
19
+ | `no-select` | boolean | `false` | Disable text selection |
20
+
21
+ ## Behavior
22
+ - Listens to `visualViewport` resize/scroll + `orientationchange` + keyboard focus events to recompute height.
23
+ - Accounts for theme bottom offset (iOS safe area, home indicator).
24
+ - Auto-assigns semantic elements (`header`, `main`, `footer`) to slots.
25
+ - Inner scroll area uses `schmancy-scroll` for momentum-preserving scroll.
26
+
27
+ ## When to Use
28
+ - Root of a mobile view or panel that should feel like a native page.
29
+ - Any container where viewport-aware height + scroll containment matters.
30
+
31
+ ## Example — 3-row app shell
32
+ ```html
33
+ <schmancy-page rows="auto_1fr_auto">
34
+ <schmancy-surface type="solid" rounded="none">
35
+ <schmancy-typography type="title">My App</schmancy-typography>
36
+ </schmancy-surface>
37
+
38
+ <div class="p-4">…scrollable content…</div>
39
+
40
+ <schmancy-navigation-bar></schmancy-navigation-bar>
41
+ </schmancy-page>
42
+ ```
@@ -0,0 +1,51 @@
1
+ # schmancy-qr-scanner
2
+
3
+ > Camera-based QR code scanner using `jsQR`. Requests rear-camera access, decodes frames in real time, deduplicates reads.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-qr-scanner
8
+ continuous
9
+ @scan-result=${e => this.handleScan(e.detail.data)}
10
+ ></schmancy-qr-scanner>
11
+ ```
12
+
13
+ ```typescript
14
+ handleScan(data: string) {
15
+ console.log('QR decoded:', data)
16
+ }
17
+ ```
18
+
19
+ ## Properties
20
+ | Property | Type | Default | Description |
21
+ |----------|------|---------|-------------|
22
+ | `continuous` | boolean | `true` | Keep scanning after a successful read (dedupe repeated reads) |
23
+
24
+ ## Events
25
+ | Event | Detail | When |
26
+ |-------|--------|------|
27
+ | `scan-result` | `{ data: string, timestamp: number }` | QR code successfully decoded |
28
+
29
+ ## Behavior
30
+ - Requests `getUserMedia` with `facingMode: 'environment'` (rear camera) at 1280×720.
31
+ - Decodes via `jsQR` on `animationFrames` stream with `throttleTime` to avoid CPU thrashing.
32
+ - `distinctUntilChanged` prevents duplicate emissions for the same code.
33
+ - Brief success flash on each valid read.
34
+ - Stops camera + tears down subscriptions on disconnect.
35
+ - Displays an error state if camera permission is denied.
36
+
37
+ ## Requires
38
+ - HTTPS (or `localhost`) for camera access.
39
+ - User permission to the camera.
40
+
41
+ ## Example
42
+ ```html
43
+ <schmancy-surface type="glass" rounded="all">
44
+ <schmancy-qr-scanner
45
+ @scan-result=${(e: CustomEvent<{ data: string }>) => {
46
+ $notify.success(`Scanned: ${e.detail.data}`)
47
+ this.scannedCode = e.detail.data
48
+ }}
49
+ ></schmancy-qr-scanner>
50
+ </schmancy-surface>
51
+ ```
package/ai/range.md ADDED
@@ -0,0 +1,47 @@
1
+ # schmancy-range
2
+
3
+ > Numeric slider input with theme-driven track gradient and focus halo.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-range
8
+ label="Volume"
9
+ min="0"
10
+ max="100"
11
+ step="1"
12
+ .value=${50}
13
+ @change=${e => this.volume = e.detail.value}
14
+ ></schmancy-range>
15
+ ```
16
+
17
+ ## Properties
18
+ | Property | Type | Default | Description |
19
+ |----------|------|---------|-------------|
20
+ | `min` | number | `0` | Minimum value |
21
+ | `max` | number | `1` | Maximum value |
22
+ | `step` | number | `0.01` | Increment per tick |
23
+ | `value` | number | `0` | Current value |
24
+ | `label` | string | — | Optional label (current value displays on the right) |
25
+ | `disabled` | boolean | `false` | Disabled state (38% opacity) |
26
+
27
+ ## Events
28
+ | Event | Payload | When |
29
+ |-------|---------|------|
30
+ | `change` | `{ value: number }` | On input change |
31
+
32
+ ## Visual
33
+ - Primary-colored track gradient (filled portion = primary, empty = 30% primary).
34
+ - Circular thumb with hover halo (8px primary glow at 12% opacity).
35
+ - Disabled state: 38% opacity, not-allowed cursor.
36
+
37
+ ## Example — precise float control
38
+ ```html
39
+ <schmancy-range
40
+ label="Mass"
41
+ min="0.5"
42
+ max="2.0"
43
+ step="0.05"
44
+ .value=${this.mass}
45
+ @change=${(e: CustomEvent<{ value: number }>) => this.mass = e.detail.value}
46
+ ></schmancy-range>
47
+ ```
@@ -0,0 +1,60 @@
1
+ # Schmancy RxJS Utils
2
+
3
+ > RxJS-wrapped DOM observation helpers. Use when you need to react to elements appearing, disappearing, or changing across the document.
4
+
5
+ ## Imports
6
+ ```typescript
7
+ import {
8
+ mutationObserver,
9
+ waitForElement,
10
+ waitForElementAll,
11
+ waitForElements,
12
+ waitForElementsAll,
13
+ waitUntil,
14
+ } from '@mhmo91/schmancy'
15
+ ```
16
+
17
+ ## `mutationObserver(target, options?)`
18
+ RxJS wrapper around `MutationObserver`.
19
+ ```typescript
20
+ mutationObserver(document.body, { childList: true, subtree: true })
21
+ .pipe(takeUntil(this.disconnecting))
22
+ .subscribe(mutations => { /* react */ })
23
+ ```
24
+
25
+ ## `waitForElement(selector, timeout = 5000)`
26
+ Emits the first matching element once it exists in the DOM. Throws on timeout. Pass `undefined` to wait forever.
27
+ ```typescript
28
+ waitForElement('#auth-banner').subscribe(el => el.focus())
29
+ waitForElement('.lazy-panel', 10000).subscribe(el => el.click())
30
+ ```
31
+
32
+ ## `waitForElementAll(selector, timeout?)`
33
+ Emits whenever the matching set changes (all current matches).
34
+ ```typescript
35
+ waitForElementAll('.live-tile').subscribe(tiles => {
36
+ tiles.forEach(t => observe(t))
37
+ })
38
+ ```
39
+
40
+ ## `waitForElements([sel1, sel2, ...], timeout?)` / `waitForElementsAll`
41
+ Multi-selector variants — resolve once *any*/`every` selector is present.
42
+
43
+ ## `waitUntil([selectors], timeout = 5000)`
44
+ Emits once when **all** selectors have matches. Throws on timeout.
45
+ ```typescript
46
+ waitUntil(['header', 'main', 'footer'])
47
+ .subscribe(() => console.log('Page shell ready'))
48
+ ```
49
+
50
+ ## How It Works
51
+ All helpers share `mutationObserver(document.body)` with `childList: true, subtree: true` and `.startWith(document.body)` so they check once immediately and re-check on every DOM mutation.
52
+
53
+ ## When to Use
54
+ - Integrating third-party scripts that inject DOM late.
55
+ - Coordinating with slot-projected children that may mount asynchronously.
56
+ - Awaiting app-shell elements before attaching shortcuts.
57
+
58
+ ## When NOT to Use
59
+ - Inside your own component — use `firstUpdated()` or `queryAssignedElements`.
60
+ - For cross-shadow discovery — use [discovery](./discovery.md) instead.
package/ai/slider.md ADDED
@@ -0,0 +1,43 @@
1
+ # schmancy-slider / schmancy-slide
2
+
3
+ > Horizontal snap-scrolling carousel with optional arrow controls.
4
+
5
+ ## Usage
6
+ ```html
7
+ <schmancy-slider show-arrows>
8
+ <schmancy-slide>
9
+ <img src="a.jpg" />
10
+ </schmancy-slide>
11
+ <schmancy-slide>
12
+ <div class="p-8">Second slide</div>
13
+ </schmancy-slide>
14
+ <schmancy-slide>
15
+ <div class="p-8">Third slide</div>
16
+ </schmancy-slide>
17
+ </schmancy-slider>
18
+ ```
19
+
20
+ ## schmancy-slider Properties
21
+ | Property | Type | Default | Description |
22
+ |----------|------|---------|-------------|
23
+ | `showArrows` | boolean | `true` | Render prev/next navigation buttons |
24
+
25
+ ## Events
26
+ | Event | Payload | When |
27
+ |-------|---------|------|
28
+ | `slide-changed` | `{ index: number }` | Centered slide changes after scroll settles |
29
+
30
+ ## Behavior
31
+ - Each `schmancy-slide` is sized to `flex: 0 0 100%` of the slider.
32
+ - `scroll-snap-type: x mandatory` — scroll always lands on a slide.
33
+ - Scrollbars hidden across browsers.
34
+ - Scroll events throttled to 100ms for stable index tracking.
35
+ - Arrow buttons scroll to previous/next slide when `show-arrows` is true.
36
+
37
+ ## Example — programmatic control
38
+ ```typescript
39
+ const slider = this.renderRoot.querySelector('schmancy-slider')
40
+ slider?.addEventListener('slide-changed', (e: CustomEvent<{ index: number }>) => {
41
+ this.activeIndex = e.detail.index
42
+ })
43
+ ```
package/ai/store.md CHANGED
@@ -1,83 +1,126 @@
1
- # Schmancy Store (Context System)
1
+ # Store Context System
2
2
 
3
- > Reactive state management with `createContext`, `@select` decorator, and persistent storage.
3
+ Reactive state management: `createContext`, `@select`, `@selectItem`.
4
+
5
+ ## Creating a context
4
6
 
5
- ## Creating a Context
6
7
  ```typescript
7
8
  import { createContext } from '@mhmo91/schmancy'
8
9
 
9
- // Object store
10
- const userContext = createContext({ name: '', email: '' }, 'local', 'user')
10
+ // Object
11
+ const userContext = createContext<User>(new User(), 'local', 'user')
11
12
 
12
- // Collection store (Map-based)
13
- const itemsContext = createContext(new Map<string, Item>(), 'indexeddb', 'items')
13
+ // Map (collection)
14
+ const itemsContext = createContext<Map<string, Item>>(new Map(), 'indexeddb', 'items')
14
15
 
15
- // Array store
16
- const tagsContext = createContext<string>([], 'memory', 'tags')
16
+ // Array
17
+ const tagsContext = createContext<string[]>([], 'memory', 'tags')
17
18
  ```
18
19
 
19
- ## Storage Types
20
- | Type | Description |
21
- |------|-------------|
22
- | `'memory'` | In-memory only (lost on refresh) |
23
- | `'local'` | localStorage (persistent) |
24
- | `'session'` | sessionStorage (per tab) |
25
- | `'indexeddb'` | IndexedDB (large data, persistent) |
20
+ Signature: `createContext(initial, storage, key)`.
21
+
22
+ ## Storage backends
23
+
24
+ | Mode | Backing | Survives refresh | Survives tab close | Capacity |
25
+ |------|---------|------------------|--------------------|----------|
26
+ | `'memory'` | JS heap | | ❌ | RAM |
27
+ | `'session'` | `sessionStorage` | ✅ | ❌ (per-tab) | ~5 MB |
28
+ | `'local'` | `localStorage` | ✅ | ✅ | ~5 MB |
29
+ | `'indexeddb'` | IndexedDB | ✅ | ✅ | GB |
30
+
31
+ Pick by data size and lifetime:
32
+ - User prefs, long-lived drafts → `'local'`
33
+ - Per-tab ephemeral (cart, wizard) → `'session'`
34
+ - Fetched from API, regenerable → `'memory'`
35
+ - Collections with >100 entries you want cached → `'indexeddb'`
36
+
37
+ ## Reading with `@select`
26
38
 
27
- ## Reading State with @select
28
39
  ```typescript
29
40
  import { select } from '@mhmo91/schmancy'
30
41
 
31
42
  @customElement('my-component')
32
43
  class MyComponent extends $LitElement() {
33
- // Auto-subscribes to context changes, triggers re-render
34
- @select(userContext)
35
- user!: { name: string; email: string }
44
+ @select(userContext) user!: User
36
45
 
37
- // With selector function
38
- @select(itemsContext, (items) => items.size)
39
- itemCount!: number
46
+ // Selector narrows the dependency
47
+ @select(itemsContext, m => m.size) count!: number
40
48
 
41
- // Collection as Map
42
- @select(itemsContext)
43
- items!: Map<string, Item>
49
+ @select(itemsContext) items!: Map<string, Item>
44
50
  }
45
51
  ```
46
52
 
47
- ## Writing State
53
+ `@select` options:
54
+ - `required` (default `true`) — wait for `.ready` before `connectedCallback` completes.
55
+ - `updateOnly` — call `requestUpdate` without assigning.
56
+ - `deepClone` — `structuredClone` the value.
57
+ - `debug` — log every emission.
58
+
59
+ ## `@selectItem`
60
+
61
+ Pick one entry from a collection context, keyed off a component property:
62
+
48
63
  ```typescript
49
- // Object store
50
- userContext.set({ name: 'Alice', email: 'alice@test.com' })
64
+ @selectItem(itemsContext, component => component.itemId)
65
+ item!: Item | undefined
66
+ ```
51
67
 
52
- // Collection store
53
- itemsContext.set('item-1', { name: 'Widget' })
54
- itemsContext.delete('item-1')
55
- itemsContext.replace(new Map([...]))
68
+ ## Writing
56
69
 
57
- // Array store
58
- tagsContext.push('new-tag')
59
- tagsContext.replace(['a', 'b', 'c'])
70
+ ```typescript
71
+ // Object
72
+ userContext.set({ name: 'Alice' })
73
+ userContext.set({ ...userContext.value, name: 'Bob' })
74
+
75
+ // Map
76
+ itemsContext.set('id-1', item)
77
+ itemsContext.delete('id-1')
78
+ itemsContext.replace(newMap)
79
+
80
+ // Array
81
+ tagsContext.push('new')
82
+ tagsContext.replace(['a', 'b'])
60
83
  ```
61
84
 
62
85
  ## Observable API
86
+
63
87
  ```typescript
64
- // Subscribe to changes
65
88
  userContext.$.pipe(
66
- takeUntil(this.disconnecting)
67
- ).subscribe(user => { ... })
89
+ filter(() => userContext.ready),
90
+ takeUntil(this.disconnecting),
91
+ ).subscribe(user => { /* ... */ })
68
92
 
69
- // Current value (synchronous)
70
- const current = userContext.value
71
-
72
- // Ready state
73
- if (userContext.ready) { ... }
93
+ userContext.value // synchronous snapshot
94
+ userContext.ready // true once the backing store has loaded
74
95
  ```
75
96
 
76
- ## @select Options
77
- `required` (default true): wait for value before connectedCallback. `updateOnly`: only requestUpdate. `deepClone`: structuredClone. `debug`: log activity.
97
+ Gate subscriptions on `.ready` — `'local'` / `'session'` / `'indexeddb'` contexts emit their default value before the real stored value hydrates.
98
+
99
+ ## Dynamic contexts
100
+
101
+ For per-instance state with persistence, create the context inside `connectedCallback` with an instance-scoped key:
78
102
 
79
- ## selectItem (Collection Helper)
80
103
  ```typescript
81
- @selectItem(itemsContext, (component) => component.itemId)
82
- selectedItem!: Item | undefined
104
+ private draftCtx: IStore<{ text: string }> | null = null
105
+
106
+ connectedCallback() {
107
+ super.connectedCallback()
108
+ if (this.draftKey) {
109
+ this.draftCtx = createContext<{ text: string }>(
110
+ { text: '' },
111
+ 'session',
112
+ this.draftKey,
113
+ )
114
+ }
115
+ }
83
116
  ```
117
+
118
+ ## Rules
119
+
120
+ - Declare contexts at module scope (except dynamic per-instance ones).
121
+ - Name the storage key even for `'memory'` contexts — it helps debugging.
122
+ - Keep each context single-purpose. One write shouldn't invalidate unrelated readers.
123
+ - Only the owning component writes. Others read via `@select`.
124
+ - Every subscription uses `takeUntil(this.disconnecting)`.
125
+ - Gate on `.ready` before async cascading work.
126
+ - Don't store Promises, Observables, functions, or class instances in persistent contexts.
package/ai/teleport.md ADDED
@@ -0,0 +1,55 @@
1
+ # schmancy-teleport
2
+
3
+ > Move DOM between locations with a FLIP-animated transition. Two instances sharing an `id` handshake via broadcast events — when one mounts, it finds the other and flies the content between them.
4
+
5
+ ## Usage
6
+ ```html
7
+ <!-- Start position -->
8
+ <schmancy-teleport id="hero-image">
9
+ <img src="portrait.jpg" alt="" />
10
+ </schmancy-teleport>
11
+
12
+ <!-- Later, in a different view -->
13
+ <schmancy-teleport id="hero-image"></schmancy-teleport>
14
+ ```
15
+
16
+ When the second instance mounts, the image smoothly animates from its old bounding rect to the new one.
17
+
18
+ ## Properties
19
+ | Property | Type | Default | Description |
20
+ |----------|------|---------|-------------|
21
+ | `id` | string | **required** | Shared identifier between source and target |
22
+ | `uuid` | number | auto | Instance UUID for disambiguation (read-only) |
23
+ | `delay` | number | `0` | Delay before teleporting (ms) |
24
+
25
+ ## Discovery Events
26
+ The service broadcasts on `window`:
27
+ - `FINDING_MORTIES` — "is anyone mounted with id X?"
28
+ - `HERE_RICKY` — instances reply with self reference
29
+ - `WhereAreYouRicky` / `HereMorty` — instance-to-instance handshake
30
+
31
+ Uses RxJS with a race/throwIfEmpty pattern to handle missing counterparts gracefully.
32
+
33
+ ## Typical Pattern — route transitions
34
+ ```html
35
+ <!-- List view -->
36
+ ${repeat(items, item => item.id, item => html`
37
+ <schmancy-teleport id=${`card-${item.id}`}>
38
+ <schmancy-card @click=${() => router.push(`/item/${item.id}`)}>
39
+ <img src=${item.thumbnail} />
40
+ </schmancy-card>
41
+ </schmancy-teleport>
42
+ `)}
43
+
44
+ <!-- Detail view -->
45
+ <schmancy-teleport id=${`card-${this.params.id}`}></schmancy-teleport>
46
+ ```
47
+
48
+ ## Notes
49
+ - Uses `watchElementRect` (ResizeObserver + scroll tracking) to keep source/target in sync.
50
+ - Animation uses the FLIP technique: capture first rect, invert on mount, play to final.
51
+ - All subscriptions clean up via `takeUntil(this.disconnecting)`.
52
+ - Each teleport pair must share a unique `id` string.
53
+
54
+ ## See Also
55
+ - For programmatic teleportation from JS: import `teleportationService` from `@mhmo91/schmancy/teleport`.