@mhmo91/schmancy 0.9.3 → 0.9.5

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 (583) hide show
  1. package/.claude-plugin/plugin.json +13 -0
  2. package/README.md +14 -4
  3. package/dist/.claude-plugin/plugin.json +13 -0
  4. package/dist/{area-CC8fUnra.js → area-CRoGqD_u.js} +2 -2
  5. package/dist/area-CRoGqD_u.js.map +1 -0
  6. package/dist/{area-wnWUAHEn.cjs → area-JPykB7A9.cjs} +1 -1
  7. package/dist/area-JPykB7A9.cjs.map +1 -0
  8. package/dist/area.cjs +1 -1
  9. package/dist/area.js +1 -1
  10. package/dist/{autocomplete-B2Z3WK_7.cjs → autocomplete-5rVhbieU.cjs} +1 -1
  11. package/dist/{autocomplete-B2Z3WK_7.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
  12. package/dist/{autocomplete-CJ7YgtKN.js → autocomplete-BllPQwr8.js} +3 -3
  13. package/dist/{autocomplete-CJ7YgtKN.js.map → autocomplete-BllPQwr8.js.map} +1 -1
  14. package/dist/autocomplete.cjs +1 -1
  15. package/dist/autocomplete.js +1 -1
  16. package/dist/badge.cjs +1 -1
  17. package/dist/badge.js +1 -1
  18. package/dist/{boat-C9eU6NO-.js → boat-BDTQ-du9.js} +2 -2
  19. package/dist/{boat-C9eU6NO-.js.map → boat-BDTQ-du9.js.map} +1 -1
  20. package/dist/{boat-B57_4TzJ.cjs → boat-DYEAZ8Qj.cjs} +1 -1
  21. package/dist/{boat-B57_4TzJ.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
  22. package/dist/boat.cjs +1 -1
  23. package/dist/boat.js +1 -1
  24. package/dist/{busy-CGZXy0h-.js → busy-ChDAeaKF.js} +1 -1
  25. package/dist/{busy-CGZXy0h-.js.map → busy-ChDAeaKF.js.map} +1 -1
  26. package/dist/{busy--6oimtop.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
  27. package/dist/{busy--6oimtop.cjs.map → busy-Dj7Xn0Z0.cjs.map} +1 -1
  28. package/dist/busy.cjs +1 -1
  29. package/dist/busy.js +1 -1
  30. package/dist/button.cjs +1 -1
  31. package/dist/button.js +2 -2
  32. package/dist/{card-BGJ0Hb1O.cjs → card-BvPWVEJX.cjs} +1 -1
  33. package/dist/{card-BGJ0Hb1O.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
  34. package/dist/{card-C-ee-l5O.js → card-DZFPRPqs.js} +1 -1
  35. package/dist/{card-C-ee-l5O.js.map → card-DZFPRPqs.js.map} +1 -1
  36. package/dist/card.cjs +1 -1
  37. package/dist/card.js +1 -1
  38. package/dist/charts.cjs +1 -1
  39. package/dist/charts.js +2 -2
  40. package/dist/{checkbox-DuYaKoDZ.cjs → checkbox-BC_37rsG.cjs} +1 -1
  41. package/dist/{checkbox-DuYaKoDZ.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
  42. package/dist/{checkbox-FRcorDrD.js → checkbox-GSSjqo6w.js} +1 -1
  43. package/dist/{checkbox-FRcorDrD.js.map → checkbox-GSSjqo6w.js.map} +1 -1
  44. package/dist/checkbox.cjs +1 -1
  45. package/dist/checkbox.js +1 -1
  46. package/dist/{chips-BpA0A-qr.cjs → chips-B19XS8Xc.cjs} +1 -1
  47. package/dist/{chips-BpA0A-qr.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
  48. package/dist/{chips-CyzNbKJD.js → chips-B9oAEfE_.js} +3 -3
  49. package/dist/{chips-CyzNbKJD.js.map → chips-B9oAEfE_.js.map} +1 -1
  50. package/dist/chips.cjs +1 -1
  51. package/dist/chips.js +2 -2
  52. package/dist/{code-highlight-C7O9ltXm.js → code-highlight-DCk5lJY-.js} +1 -1
  53. package/dist/{code-highlight-C7O9ltXm.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
  54. package/dist/{code-highlight-DsBdSQBG.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
  55. package/dist/{code-highlight-DsBdSQBG.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
  56. package/dist/code-highlight.cjs +1 -1
  57. package/dist/code-highlight.js +1 -1
  58. package/dist/{components-CkMvOiTR.js → components-COsM6sJZ.js} +2 -2
  59. package/dist/{components-CkMvOiTR.js.map → components-COsM6sJZ.js.map} +1 -1
  60. package/dist/{components-dDI3xeIf.cjs → components-CyD6a7gQ.cjs} +1 -1
  61. package/dist/{components-dDI3xeIf.cjs.map → components-CyD6a7gQ.cjs.map} +1 -1
  62. package/dist/components.cjs +1 -1
  63. package/dist/components.js +1 -1
  64. package/dist/connectivity.cjs +1 -1
  65. package/dist/connectivity.js +1 -1
  66. package/dist/content-drawer.cjs +1 -1
  67. package/dist/content-drawer.js +1 -1
  68. package/dist/{date-range-BrN_Bs6_.js → date-range-Sfyco9-n.js} +3 -3
  69. package/dist/{date-range-BrN_Bs6_.js.map → date-range-Sfyco9-n.js.map} +1 -1
  70. package/dist/{date-range-70zhLUKE.cjs → date-range-ZAaQB22I.cjs} +1 -1
  71. package/dist/{date-range-70zhLUKE.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
  72. package/dist/{date-range-inline-Cp294DxR.js → date-range-inline-Bl8qbiQF.js} +1 -1
  73. package/dist/{date-range-inline-Cp294DxR.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
  74. package/dist/{date-range-inline-CPzD-tIv.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
  75. package/dist/{date-range-inline-CPzD-tIv.cjs.map → date-range-inline-m7nLjOMI.cjs.map} +1 -1
  76. package/dist/date-range-inline.cjs +1 -1
  77. package/dist/date-range-inline.js +1 -1
  78. package/dist/date-range.cjs +1 -1
  79. package/dist/date-range.js +1 -1
  80. package/dist/{delay-COcAkBqB.cjs → delay-7boauN6N.cjs} +1 -1
  81. package/dist/{delay-COcAkBqB.cjs.map → delay-7boauN6N.cjs.map} +1 -1
  82. package/dist/{delay-IV0Swce2.js → delay-CgX6m0HN.js} +3 -3
  83. package/dist/{delay-IV0Swce2.js.map → delay-CgX6m0HN.js.map} +1 -1
  84. package/dist/delay.cjs +1 -1
  85. package/dist/delay.js +1 -1
  86. package/dist/{details-DgWkPqmt.cjs → details-BHnk8l4q.cjs} +1 -1
  87. package/dist/{details-DgWkPqmt.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
  88. package/dist/{details-CuKmr3Qw.js → details-BPkUg8Cq.js} +2 -2
  89. package/dist/{details-CuKmr3Qw.js.map → details-BPkUg8Cq.js.map} +1 -1
  90. package/dist/details.cjs +1 -1
  91. package/dist/details.js +1 -1
  92. package/dist/dialog.cjs +1 -1
  93. package/dist/dialog.js +2 -2
  94. package/dist/directives.cjs.map +1 -1
  95. package/dist/directives.js.map +1 -1
  96. package/dist/discovery.cjs.map +1 -1
  97. package/dist/discovery.js.map +1 -1
  98. package/dist/{divider-BWoUbfgZ.js → divider-CW9a7MMj.js} +2 -2
  99. package/dist/{divider-BWoUbfgZ.js.map → divider-CW9a7MMj.js.map} +1 -1
  100. package/dist/{divider-BghtrMbn.cjs → divider-_khrhrZo.cjs} +1 -1
  101. package/dist/{divider-BghtrMbn.cjs.map → divider-_khrhrZo.cjs.map} +1 -1
  102. package/dist/divider.cjs +1 -1
  103. package/dist/divider.js +1 -1
  104. package/dist/dropdown.cjs +1 -1
  105. package/dist/dropdown.js +2 -2
  106. package/dist/{expand-XyDE5SsO.cjs → expand-Cp7-PH8b.cjs} +1 -1
  107. package/dist/{expand-XyDE5SsO.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
  108. package/dist/{expand-CJU9m4ga.js → expand-iQ7EOMP7.js} +3 -3
  109. package/dist/{expand-CJU9m4ga.js.map → expand-iQ7EOMP7.js.map} +1 -1
  110. package/dist/expand.cjs +1 -1
  111. package/dist/expand.js +1 -1
  112. package/dist/{extra-CsrRKKqE.cjs → extra-IKAiJJhv.cjs} +1 -1
  113. package/dist/{extra-CsrRKKqE.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
  114. package/dist/{extra-BxXFmW1w.js → extra-wEpvEFbK.js} +2 -2
  115. package/dist/{extra-BxXFmW1w.js.map → extra-wEpvEFbK.js.map} +1 -1
  116. package/dist/extra.cjs +1 -1
  117. package/dist/extra.js +1 -1
  118. package/dist/{float-BD86t_NU.js → float-BQ_urmMs.js} +2 -2
  119. package/dist/{float-BD86t_NU.js.map → float-BQ_urmMs.js.map} +1 -1
  120. package/dist/{float-DBv1FINW.cjs → float-D5rNC82i.cjs} +1 -1
  121. package/dist/{float-DBv1FINW.cjs.map → float-D5rNC82i.cjs.map} +1 -1
  122. package/dist/float.cjs +1 -1
  123. package/dist/float.js +1 -1
  124. package/dist/{form-D0bIeDWT.cjs → form-BqN1AGFj.cjs} +1 -1
  125. package/dist/{form-D0bIeDWT.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
  126. package/dist/{form-Cp5-I_ZV.js → form-CajC5HnO.js} +1 -1
  127. package/dist/{form-Cp5-I_ZV.js.map → form-CajC5HnO.js.map} +1 -1
  128. package/dist/form.cjs +1 -1
  129. package/dist/form.js +1 -1
  130. package/dist/{icons-D8w_20mO.cjs → icons-B57_93VV.cjs} +1 -1
  131. package/dist/{icons-D8w_20mO.cjs.map → icons-B57_93VV.cjs.map} +1 -1
  132. package/dist/{icons-BpU0_l92.js → icons-BDqiGXrO.js} +1 -1
  133. package/dist/{icons-BpU0_l92.js.map → icons-BDqiGXrO.js.map} +1 -1
  134. package/dist/icons.cjs +1 -1
  135. package/dist/icons.js +1 -1
  136. package/dist/{iframe-BjwxA2Pg.cjs → iframe-DNHL3GIk.cjs} +1 -1
  137. package/dist/{iframe-BjwxA2Pg.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
  138. package/dist/{iframe-tY1GY5g1.js → iframe-WnWPIrBG.js} +1 -1
  139. package/dist/{iframe-tY1GY5g1.js.map → iframe-WnWPIrBG.js.map} +1 -1
  140. package/dist/iframe.cjs +1 -1
  141. package/dist/iframe.js +1 -1
  142. package/dist/index.cjs +1 -1
  143. package/dist/index.js +33 -33
  144. package/dist/{input-BwxwognS.cjs → input-BiSrTcrR.cjs} +1 -1
  145. package/dist/{input-BwxwognS.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
  146. package/dist/{input-BnfTpRN9.js → input-VaXHFrRn.js} +1 -1
  147. package/dist/{input-BnfTpRN9.js.map → input-VaXHFrRn.js.map} +1 -1
  148. package/dist/{input-chip-MjOwX5EY.cjs → input-chip-Dy-AiP55.cjs} +1 -1
  149. package/dist/{input-chip-MjOwX5EY.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
  150. package/dist/{input-chip-CkM2aYmO.js → input-chip-QejNcRnS.js} +1 -1
  151. package/dist/{input-chip-CkM2aYmO.js.map → input-chip-QejNcRnS.js.map} +1 -1
  152. package/dist/input.cjs +1 -1
  153. package/dist/input.js +1 -1
  154. package/dist/json.cjs +1 -1
  155. package/dist/json.js +2 -2
  156. package/dist/{layout-CJSlZlFL.js → layout-CnsXeCAy.js} +2 -2
  157. package/dist/{layout-CJSlZlFL.js.map → layout-CnsXeCAy.js.map} +1 -1
  158. package/dist/{layout-BV0EeyUS.cjs → layout-DNYG3phx.cjs} +1 -1
  159. package/dist/{layout-BV0EeyUS.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
  160. package/dist/layout.cjs +1 -1
  161. package/dist/layout.js +2 -2
  162. package/dist/{lightbox-groqGmJH.js → lightbox-BrI1Z31s.js} +2 -2
  163. package/dist/{lightbox-groqGmJH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
  164. package/dist/{lightbox-CpNMZHZW.cjs → lightbox-CmACf0t5.cjs} +1 -1
  165. package/dist/{lightbox-CpNMZHZW.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
  166. package/dist/lightbox.cjs +1 -1
  167. package/dist/lightbox.js +1 -1
  168. package/dist/{list-DzkqT_r-.js → list-Cm-jjXxM.js} +2 -2
  169. package/dist/{list-DzkqT_r-.js.map → list-Cm-jjXxM.js.map} +1 -1
  170. package/dist/{list-CyHd0Zc2.cjs → list-swIL9VDv.cjs} +1 -1
  171. package/dist/{list-CyHd0Zc2.cjs.map → list-swIL9VDv.cjs.map} +1 -1
  172. package/dist/list.cjs +1 -1
  173. package/dist/list.js +1 -1
  174. package/dist/{litElement.mixin-BG6_-nYX.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
  175. package/dist/{litElement.mixin-BG6_-nYX.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
  176. package/dist/{litElement.mixin-Dm-4L8zL.js → litElement.mixin-6jJYHCrZ.js} +1 -1
  177. package/dist/{litElement.mixin-Dm-4L8zL.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
  178. package/dist/{mailbox-BcqnXYVP.js → mailbox-BuvsVaAQ.js} +4 -4
  179. package/dist/{mailbox-BcqnXYVP.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
  180. package/dist/{mailbox-C5eYTd7p.cjs → mailbox-D6LkQcN5.cjs} +1 -1
  181. package/dist/{mailbox-C5eYTd7p.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
  182. package/dist/mailbox.cjs +1 -1
  183. package/dist/mailbox.js +1 -1
  184. package/dist/{map-C0o1PgLE.js → map-CQiKAxC3.js} +1 -1
  185. package/dist/{map-C0o1PgLE.js.map → map-CQiKAxC3.js.map} +1 -1
  186. package/dist/{map-BncheFt5.cjs → map-D5NN4VET.cjs} +1 -1
  187. package/dist/{map-BncheFt5.cjs.map → map-D5NN4VET.cjs.map} +1 -1
  188. package/dist/map.cjs +1 -1
  189. package/dist/map.js +1 -1
  190. package/dist/{menu-uwqlQbLd.js → menu-C1x04YZw.js} +2 -2
  191. package/dist/{menu-uwqlQbLd.js.map → menu-C1x04YZw.js.map} +1 -1
  192. package/dist/{menu-yXzwJZFf.cjs → menu-CkgMO9K5.cjs} +1 -1
  193. package/dist/{menu-yXzwJZFf.cjs.map → menu-CkgMO9K5.cjs.map} +1 -1
  194. package/dist/menu.cjs +1 -1
  195. package/dist/menu.js +1 -1
  196. package/dist/mixins.cjs +1 -1
  197. package/dist/mixins.js +3 -3
  198. package/dist/nav-drawer.cjs +1 -1
  199. package/dist/nav-drawer.js +1 -1
  200. package/dist/navigation-bar.cjs +1 -1
  201. package/dist/navigation-bar.js +1 -1
  202. package/dist/navigation-rail.cjs +1 -1
  203. package/dist/navigation-rail.js +2 -2
  204. package/dist/{notification-DzYT4deA.js → notification-BnBgxjF-.js} +3 -3
  205. package/dist/{notification-DzYT4deA.js.map → notification-BnBgxjF-.js.map} +1 -1
  206. package/dist/{notification-BjwTfLAl.cjs → notification-CZFEhWxc.cjs} +1 -1
  207. package/dist/{notification-BjwTfLAl.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
  208. package/dist/notification.cjs +1 -1
  209. package/dist/notification.js +1 -1
  210. package/dist/{option-BJsD3u2D.cjs → option-BrxCVwSx.cjs} +1 -1
  211. package/dist/{option-BJsD3u2D.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
  212. package/dist/{option-JFHxgiYl.js → option-DBO8xZwd.js} +1 -1
  213. package/dist/{option-JFHxgiYl.js.map → option-DBO8xZwd.js.map} +1 -1
  214. package/dist/option.cjs +1 -1
  215. package/dist/option.js +1 -1
  216. package/dist/page.cjs +1 -1
  217. package/dist/page.js +3 -3
  218. package/dist/{progress-BoRmyGAa.cjs → progress-Db2e4_Zd.cjs} +1 -1
  219. package/dist/{progress-BoRmyGAa.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
  220. package/dist/{progress-BUh5WBqx.js → progress-DeiHxXo7.js} +2 -2
  221. package/dist/{progress-BUh5WBqx.js.map → progress-DeiHxXo7.js.map} +1 -1
  222. package/dist/progress.cjs +1 -1
  223. package/dist/progress.js +1 -1
  224. package/dist/{provide-8MrDz_qX.js → provide-C1aQhxYo.js} +1 -1
  225. package/dist/{provide-8MrDz_qX.js.map → provide-C1aQhxYo.js.map} +1 -1
  226. package/dist/{provide-CDkxgjHb.cjs → provide-DHnhQtCH.cjs} +1 -1
  227. package/dist/{provide-CDkxgjHb.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
  228. package/dist/qr-scanner.cjs +1 -1
  229. package/dist/qr-scanner.js +2 -2
  230. package/dist/{radio-group-rhrvhB5X.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
  231. package/dist/{radio-group-rhrvhB5X.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
  232. package/dist/{radio-group-DbOWUPhi.js → radio-group-zSO0AkJf.js} +1 -1
  233. package/dist/{radio-group-DbOWUPhi.js.map → radio-group-zSO0AkJf.js.map} +1 -1
  234. package/dist/radio-group.cjs +1 -1
  235. package/dist/radio-group.js +1 -1
  236. package/dist/range.cjs +1 -1
  237. package/dist/range.js +1 -1
  238. package/dist/{scroll-BE9W9PF2.cjs → scroll-QMCmbbDv.cjs} +1 -1
  239. package/dist/{scroll-BE9W9PF2.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
  240. package/dist/{scroll-qGks1R0k.js → scroll-cBDzye64.js} +1 -1
  241. package/dist/{scroll-qGks1R0k.js.map → scroll-cBDzye64.js.map} +1 -1
  242. package/dist/{select-DXU2kzg4.cjs → select-Ct37l3lg.cjs} +1 -1
  243. package/dist/{select-DXU2kzg4.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
  244. package/dist/{select-D9sgBRjU.js → select-c6HbWvKP.js} +2 -2
  245. package/dist/{select-D9sgBRjU.js.map → select-c6HbWvKP.js.map} +1 -1
  246. package/dist/select.cjs +1 -1
  247. package/dist/select.js +1 -1
  248. package/dist/{sheet-CIxCCJ3H.js → sheet-BMXcUiIm.js} +4 -4
  249. package/dist/{sheet-CIxCCJ3H.js.map → sheet-BMXcUiIm.js.map} +1 -1
  250. package/dist/{sheet-CeX6BbNp.cjs → sheet-CQec-bCV.cjs} +1 -1
  251. package/dist/{sheet-CeX6BbNp.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
  252. package/dist/sheet.cjs +1 -1
  253. package/dist/sheet.js +2 -2
  254. package/dist/{sheet.service-CAB7weBc.js → sheet.service-BcPV3Du4.js} +1 -1
  255. package/dist/{sheet.service-CAB7weBc.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
  256. package/dist/{sheet.service-DPAp7E3x.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
  257. package/dist/{sheet.service-DPAp7E3x.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
  258. package/dist/skills/INDEX.md +72 -0
  259. package/dist/skills/SKILL.md +120 -0
  260. package/dist/skills/area.md +141 -0
  261. package/{ai → dist/skills}/mailbox.md +1 -1
  262. package/dist/skills/mixins.md +99 -0
  263. package/dist/skills/schmancy/INDEX.md +72 -0
  264. package/dist/skills/schmancy/SKILL.md +120 -0
  265. package/dist/skills/schmancy/area.md +141 -0
  266. package/dist/{ai → skills/schmancy}/mailbox.md +1 -1
  267. package/dist/skills/schmancy/mixins.md +99 -0
  268. package/dist/skills/schmancy/store.md +126 -0
  269. package/dist/skills/store.md +126 -0
  270. package/dist/slider.cjs +1 -1
  271. package/dist/slider.js +2 -2
  272. package/dist/{src-CbO5kJ2O.js → src-BLngW2bl.js} +42 -42
  273. package/dist/{src-CbO5kJ2O.js.map → src-BLngW2bl.js.map} +1 -1
  274. package/dist/{src-SraDxEeg.cjs → src-BtQVyqMy.cjs} +1 -1
  275. package/dist/{src-SraDxEeg.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
  276. package/dist/steps.cjs +1 -1
  277. package/dist/steps.js +3 -3
  278. package/dist/{surface-DuH0pm2v.cjs → surface-BjKZoJxK.cjs} +1 -1
  279. package/dist/{surface-DuH0pm2v.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
  280. package/dist/{surface-eN_Jy2MJ.js → surface-pK8hME5c.js} +3 -3
  281. package/dist/{surface-eN_Jy2MJ.js.map → surface-pK8hME5c.js.map} +1 -1
  282. package/dist/surface.cjs +1 -1
  283. package/dist/surface.js +1 -1
  284. package/dist/{surface.mixin-CIXgN6iw.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
  285. package/dist/{surface.mixin-CIXgN6iw.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
  286. package/dist/{surface.mixin-D9jv1sKG.js → surface.mixin-CBNRpJum.js} +1 -1
  287. package/dist/{surface.mixin-D9jv1sKG.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
  288. package/dist/{table-Dg_tUGB_.js → table-BXIHX9h4.js} +2 -2
  289. package/dist/{table-Dg_tUGB_.js.map → table-BXIHX9h4.js.map} +1 -1
  290. package/dist/{table-C9rRQJEB.cjs → table-CiqgZzSd.cjs} +1 -1
  291. package/dist/{table-C9rRQJEB.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
  292. package/dist/table.cjs +1 -1
  293. package/dist/table.js +1 -1
  294. package/dist/{tabs-soTL-x4G.cjs → tabs-CKa-W4qA.cjs} +1 -1
  295. package/dist/{tabs-soTL-x4G.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
  296. package/dist/{tabs-BbFC9omR.js → tabs-nbV5eblZ.js} +2 -2
  297. package/dist/{tabs-BbFC9omR.js.map → tabs-nbV5eblZ.js.map} +1 -1
  298. package/dist/tabs.cjs +1 -1
  299. package/dist/tabs.js +1 -1
  300. package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
  301. package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
  302. package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
  303. package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
  304. package/dist/teleport.cjs +1 -1
  305. package/dist/teleport.js +1 -1
  306. package/dist/{textarea-DaRUJ0ri.cjs → textarea-Cp1ZE60O.cjs} +1 -1
  307. package/dist/{textarea-DaRUJ0ri.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
  308. package/dist/{textarea-hChvHbNM.js → textarea-D7q8exMg.js} +1 -1
  309. package/dist/{textarea-hChvHbNM.js.map → textarea-D7q8exMg.js.map} +1 -1
  310. package/dist/textarea.cjs +1 -1
  311. package/dist/textarea.js +1 -1
  312. package/dist/{theme-ZYH2MqX9.cjs → theme-Da4SPq9X.cjs} +1 -1
  313. package/dist/{theme-ZYH2MqX9.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
  314. package/dist/{theme-B0M8Hlyo.js → theme-_VPV6Bxh.js} +3 -3
  315. package/dist/{theme-B0M8Hlyo.js.map → theme-_VPV6Bxh.js.map} +1 -1
  316. package/dist/{theme-button-BtlX_Zgd.js → theme-button--sX8A-m1.js} +1 -1
  317. package/dist/{theme-button-BtlX_Zgd.js.map → theme-button--sX8A-m1.js.map} +1 -1
  318. package/dist/{theme-button-Dvqg-rE_.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
  319. package/dist/{theme-button-Dvqg-rE_.cjs.map → theme-button-Ci8VQ7KW.cjs.map} +1 -1
  320. package/dist/theme-button.cjs +1 -1
  321. package/dist/theme-button.js +1 -1
  322. package/dist/theme.cjs +1 -1
  323. package/dist/theme.js +2 -2
  324. package/dist/tooltip.cjs +1 -1
  325. package/dist/tooltip.js +1 -1
  326. package/dist/tree.cjs +1 -1
  327. package/dist/tree.js +1 -1
  328. package/dist/{typewriter-Cf9f2bdx.cjs → typewriter-B2TnHPjw.cjs} +1 -1
  329. package/dist/{typewriter-Cf9f2bdx.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
  330. package/dist/{typewriter-CCel8Nta.js → typewriter-BrZNa8T-.js} +3 -3
  331. package/dist/{typewriter-CCel8Nta.js.map → typewriter-BrZNa8T-.js.map} +1 -1
  332. package/dist/typewriter.cjs +1 -1
  333. package/dist/typewriter.js +1 -1
  334. package/dist/typography.cjs +1 -1
  335. package/dist/typography.js +1 -1
  336. package/dist/{window-CbgdwOZD.js → window-CM1ycigo.js} +2 -2
  337. package/dist/{window-CbgdwOZD.js.map → window-CM1ycigo.js.map} +1 -1
  338. package/dist/{window-B9_14c12.cjs → window-Uii13x_r.cjs} +1 -1
  339. package/dist/{window-B9_14c12.cjs.map → window-Uii13x_r.cjs.map} +1 -1
  340. package/dist/window.cjs +1 -1
  341. package/dist/window.js +1 -1
  342. package/mixins/baseElement.ts +1 -1
  343. package/mixins/discovery.service.ts +1 -1
  344. package/package.json +3 -4
  345. package/skills/schmancy/INDEX.md +72 -0
  346. package/skills/schmancy/SKILL.md +120 -0
  347. package/skills/schmancy/animation.md +64 -0
  348. package/skills/schmancy/area.md +141 -0
  349. package/skills/schmancy/audio.md +69 -0
  350. package/skills/schmancy/autocomplete.md +53 -0
  351. package/skills/schmancy/avatar.md +47 -0
  352. package/skills/schmancy/badge.md +41 -0
  353. package/skills/schmancy/boat.md +47 -0
  354. package/skills/schmancy/busy.md +36 -0
  355. package/skills/schmancy/button.md +59 -0
  356. package/skills/schmancy/card.md +53 -0
  357. package/skills/schmancy/charts.md +93 -0
  358. package/skills/schmancy/checkbox.md +36 -0
  359. package/skills/schmancy/chips.md +87 -0
  360. package/skills/schmancy/code-highlight.md +47 -0
  361. package/skills/schmancy/connectivity.md +36 -0
  362. package/skills/schmancy/content-drawer.md +65 -0
  363. package/skills/schmancy/date-range-inline.md +44 -0
  364. package/skills/schmancy/date-range.md +50 -0
  365. package/skills/schmancy/delay.md +50 -0
  366. package/skills/schmancy/details.md +66 -0
  367. package/skills/schmancy/dialog.md +69 -0
  368. package/skills/schmancy/directives.md +298 -0
  369. package/skills/schmancy/discovery.md +67 -0
  370. package/skills/schmancy/divider.md +31 -0
  371. package/skills/schmancy/dropdown.md +47 -0
  372. package/skills/schmancy/expand.md +63 -0
  373. package/skills/schmancy/extra.md +59 -0
  374. package/skills/schmancy/float.md +14 -0
  375. package/skills/schmancy/form.md +49 -0
  376. package/skills/schmancy/icons.md +44 -0
  377. package/skills/schmancy/iframe.md +44 -0
  378. package/skills/schmancy/input.md +56 -0
  379. package/skills/schmancy/json.md +33 -0
  380. package/skills/schmancy/layout.md +63 -0
  381. package/skills/schmancy/lightbox.md +36 -0
  382. package/skills/schmancy/list.md +67 -0
  383. package/skills/schmancy/mailbox.md +102 -0
  384. package/skills/schmancy/map.md +55 -0
  385. package/skills/schmancy/menu.md +39 -0
  386. package/skills/schmancy/mixins.md +99 -0
  387. package/skills/schmancy/nav-drawer.md +52 -0
  388. package/skills/schmancy/navigation-bar.md +48 -0
  389. package/skills/schmancy/navigation-rail.md +62 -0
  390. package/skills/schmancy/notification.md +60 -0
  391. package/skills/schmancy/option.md +43 -0
  392. package/skills/schmancy/page.md +42 -0
  393. package/skills/schmancy/progress.md +30 -0
  394. package/skills/schmancy/qr-scanner.md +51 -0
  395. package/skills/schmancy/radio-group.md +50 -0
  396. package/skills/schmancy/range.md +47 -0
  397. package/skills/schmancy/rxjs-utils.md +60 -0
  398. package/skills/schmancy/select.md +49 -0
  399. package/skills/schmancy/sheet.md +76 -0
  400. package/skills/schmancy/slider.md +43 -0
  401. package/skills/schmancy/steps.md +53 -0
  402. package/skills/schmancy/store.md +126 -0
  403. package/skills/schmancy/surface.md +86 -0
  404. package/skills/schmancy/table.md +60 -0
  405. package/skills/schmancy/tabs.md +49 -0
  406. package/skills/schmancy/teleport.md +55 -0
  407. package/skills/schmancy/textarea.md +48 -0
  408. package/skills/schmancy/theme-button.md +26 -0
  409. package/skills/schmancy/theme.md +58 -0
  410. package/skills/schmancy/tooltip.md +38 -0
  411. package/skills/schmancy/tree.md +53 -0
  412. package/skills/schmancy/typewriter.md +46 -0
  413. package/skills/schmancy/typography.md +53 -0
  414. package/skills/schmancy/utils.md +95 -0
  415. package/skills/schmancy/window.md +67 -0
  416. package/src/area/area.service.ts +1 -1
  417. package/src/area/router.types.ts +1 -1
  418. package/src/directives/animate-text.ts +1 -1
  419. package/src/discovery/discovery.service.ts +1 -1
  420. package/src/input/input.ts +1 -1
  421. package/src/mailbox/README.md +7 -10
  422. package/src/mailbox/types.ts +0 -1
  423. package/types/mixins/discovery.service.d.ts +1 -1
  424. package/types/src/discovery/discovery.service.d.ts +1 -1
  425. package/types/src/mailbox/types.d.ts +0 -1
  426. package/ai/INDEX.md +0 -321
  427. package/ai/area.md +0 -215
  428. package/ai/mixins.md +0 -201
  429. package/ai/store.md +0 -192
  430. package/dist/ai/INDEX.md +0 -321
  431. package/dist/ai/area.md +0 -215
  432. package/dist/ai/mixins.md +0 -201
  433. package/dist/ai/store.md +0 -192
  434. package/dist/area-CC8fUnra.js.map +0 -1
  435. package/dist/area-wnWUAHEn.cjs.map +0 -1
  436. package/dist/tailwind.mixin-BIVhjNvD.js +0 -225
  437. package/dist/tailwind.mixin-BIVhjNvD.js.map +0 -1
  438. package/dist/tailwind.mixin-DSuEu-y3.cjs +0 -2
  439. package/dist/tailwind.mixin-DSuEu-y3.cjs.map +0 -1
  440. package/src/area/readme.md +0 -338
  441. package/src/area/router-guide.md +0 -360
  442. package/src/autocomplete/README.md +0 -485
  443. package/src/content-drawer/readme.md +0 -709
  444. package/src/icons/readme.md +0 -37
  445. package/src/list/readme.md +0 -62
  446. package/src/radio-group/readme.md +0 -315
  447. package/src/select/README.md +0 -405
  448. package/src/tabs/Readme.md +0 -397
  449. package/src/teleport/readme.md +0 -91
  450. package/src/tree/README.md +0 -59
  451. package/src/typewriter/IMPROVEMENTS.md +0 -174
  452. package/src/typewriter/QUICK_REFERENCE.md +0 -166
  453. package/src/typewriter/test-typewriter.html +0 -97
  454. /package/{ai → dist/skills}/animation.md +0 -0
  455. /package/{ai → dist/skills}/audio.md +0 -0
  456. /package/{ai → dist/skills}/autocomplete.md +0 -0
  457. /package/{ai → dist/skills}/avatar.md +0 -0
  458. /package/{ai → dist/skills}/badge.md +0 -0
  459. /package/{ai → dist/skills}/boat.md +0 -0
  460. /package/{ai → dist/skills}/busy.md +0 -0
  461. /package/{ai → dist/skills}/button.md +0 -0
  462. /package/{ai → dist/skills}/card.md +0 -0
  463. /package/{ai → dist/skills}/charts.md +0 -0
  464. /package/{ai → dist/skills}/checkbox.md +0 -0
  465. /package/{ai → dist/skills}/chips.md +0 -0
  466. /package/{ai → dist/skills}/code-highlight.md +0 -0
  467. /package/{ai → dist/skills}/connectivity.md +0 -0
  468. /package/{ai → dist/skills}/content-drawer.md +0 -0
  469. /package/{ai → dist/skills}/date-range-inline.md +0 -0
  470. /package/{ai → dist/skills}/date-range.md +0 -0
  471. /package/{ai → dist/skills}/delay.md +0 -0
  472. /package/{ai → dist/skills}/details.md +0 -0
  473. /package/{ai → dist/skills}/dialog.md +0 -0
  474. /package/{ai → dist/skills}/directives.md +0 -0
  475. /package/{ai → dist/skills}/discovery.md +0 -0
  476. /package/{ai → dist/skills}/divider.md +0 -0
  477. /package/{ai → dist/skills}/dropdown.md +0 -0
  478. /package/{ai → dist/skills}/expand.md +0 -0
  479. /package/{ai → dist/skills}/extra.md +0 -0
  480. /package/{ai → dist/skills}/float.md +0 -0
  481. /package/{ai → dist/skills}/form.md +0 -0
  482. /package/{ai → dist/skills}/icons.md +0 -0
  483. /package/{ai → dist/skills}/iframe.md +0 -0
  484. /package/{ai → dist/skills}/input.md +0 -0
  485. /package/{ai → dist/skills}/json.md +0 -0
  486. /package/{ai → dist/skills}/layout.md +0 -0
  487. /package/{ai → dist/skills}/lightbox.md +0 -0
  488. /package/{ai → dist/skills}/list.md +0 -0
  489. /package/{ai → dist/skills}/map.md +0 -0
  490. /package/{ai → dist/skills}/menu.md +0 -0
  491. /package/{ai → dist/skills}/nav-drawer.md +0 -0
  492. /package/{ai → dist/skills}/navigation-bar.md +0 -0
  493. /package/{ai → dist/skills}/navigation-rail.md +0 -0
  494. /package/{ai → dist/skills}/notification.md +0 -0
  495. /package/{ai → dist/skills}/option.md +0 -0
  496. /package/{ai → dist/skills}/page.md +0 -0
  497. /package/{ai → dist/skills}/progress.md +0 -0
  498. /package/{ai → dist/skills}/qr-scanner.md +0 -0
  499. /package/{ai → dist/skills}/radio-group.md +0 -0
  500. /package/{ai → dist/skills}/range.md +0 -0
  501. /package/{ai → dist/skills}/rxjs-utils.md +0 -0
  502. /package/dist/{ai → skills/schmancy}/animation.md +0 -0
  503. /package/dist/{ai → skills/schmancy}/audio.md +0 -0
  504. /package/dist/{ai → skills/schmancy}/autocomplete.md +0 -0
  505. /package/dist/{ai → skills/schmancy}/avatar.md +0 -0
  506. /package/dist/{ai → skills/schmancy}/badge.md +0 -0
  507. /package/dist/{ai → skills/schmancy}/boat.md +0 -0
  508. /package/dist/{ai → skills/schmancy}/busy.md +0 -0
  509. /package/dist/{ai → skills/schmancy}/button.md +0 -0
  510. /package/dist/{ai → skills/schmancy}/card.md +0 -0
  511. /package/dist/{ai → skills/schmancy}/charts.md +0 -0
  512. /package/dist/{ai → skills/schmancy}/checkbox.md +0 -0
  513. /package/dist/{ai → skills/schmancy}/chips.md +0 -0
  514. /package/dist/{ai → skills/schmancy}/code-highlight.md +0 -0
  515. /package/dist/{ai → skills/schmancy}/connectivity.md +0 -0
  516. /package/dist/{ai → skills/schmancy}/content-drawer.md +0 -0
  517. /package/dist/{ai → skills/schmancy}/date-range-inline.md +0 -0
  518. /package/dist/{ai → skills/schmancy}/date-range.md +0 -0
  519. /package/dist/{ai → skills/schmancy}/delay.md +0 -0
  520. /package/dist/{ai → skills/schmancy}/details.md +0 -0
  521. /package/dist/{ai → skills/schmancy}/dialog.md +0 -0
  522. /package/dist/{ai → skills/schmancy}/directives.md +0 -0
  523. /package/dist/{ai → skills/schmancy}/discovery.md +0 -0
  524. /package/dist/{ai → skills/schmancy}/divider.md +0 -0
  525. /package/dist/{ai → skills/schmancy}/dropdown.md +0 -0
  526. /package/dist/{ai → skills/schmancy}/expand.md +0 -0
  527. /package/dist/{ai → skills/schmancy}/extra.md +0 -0
  528. /package/dist/{ai → skills/schmancy}/float.md +0 -0
  529. /package/dist/{ai → skills/schmancy}/form.md +0 -0
  530. /package/dist/{ai → skills/schmancy}/icons.md +0 -0
  531. /package/dist/{ai → skills/schmancy}/iframe.md +0 -0
  532. /package/dist/{ai → skills/schmancy}/input.md +0 -0
  533. /package/dist/{ai → skills/schmancy}/json.md +0 -0
  534. /package/dist/{ai → skills/schmancy}/layout.md +0 -0
  535. /package/dist/{ai → skills/schmancy}/lightbox.md +0 -0
  536. /package/dist/{ai → skills/schmancy}/list.md +0 -0
  537. /package/dist/{ai → skills/schmancy}/map.md +0 -0
  538. /package/dist/{ai → skills/schmancy}/menu.md +0 -0
  539. /package/dist/{ai → skills/schmancy}/nav-drawer.md +0 -0
  540. /package/dist/{ai → skills/schmancy}/navigation-bar.md +0 -0
  541. /package/dist/{ai → skills/schmancy}/navigation-rail.md +0 -0
  542. /package/dist/{ai → skills/schmancy}/notification.md +0 -0
  543. /package/dist/{ai → skills/schmancy}/option.md +0 -0
  544. /package/dist/{ai → skills/schmancy}/page.md +0 -0
  545. /package/dist/{ai → skills/schmancy}/progress.md +0 -0
  546. /package/dist/{ai → skills/schmancy}/qr-scanner.md +0 -0
  547. /package/dist/{ai → skills/schmancy}/radio-group.md +0 -0
  548. /package/dist/{ai → skills/schmancy}/range.md +0 -0
  549. /package/dist/{ai → skills/schmancy}/rxjs-utils.md +0 -0
  550. /package/{ai → dist/skills/schmancy}/select.md +0 -0
  551. /package/{ai → dist/skills/schmancy}/sheet.md +0 -0
  552. /package/{ai → dist/skills/schmancy}/slider.md +0 -0
  553. /package/{ai → dist/skills/schmancy}/steps.md +0 -0
  554. /package/{ai → dist/skills/schmancy}/surface.md +0 -0
  555. /package/{ai → dist/skills/schmancy}/table.md +0 -0
  556. /package/{ai → dist/skills/schmancy}/tabs.md +0 -0
  557. /package/{ai → dist/skills/schmancy}/teleport.md +0 -0
  558. /package/{ai → dist/skills/schmancy}/textarea.md +0 -0
  559. /package/{ai → dist/skills/schmancy}/theme-button.md +0 -0
  560. /package/{ai → dist/skills/schmancy}/theme.md +0 -0
  561. /package/{ai → dist/skills/schmancy}/tooltip.md +0 -0
  562. /package/{ai → dist/skills/schmancy}/tree.md +0 -0
  563. /package/{ai → dist/skills/schmancy}/typewriter.md +0 -0
  564. /package/{ai → dist/skills/schmancy}/typography.md +0 -0
  565. /package/{ai → dist/skills/schmancy}/utils.md +0 -0
  566. /package/{ai → dist/skills/schmancy}/window.md +0 -0
  567. /package/dist/{ai → skills}/select.md +0 -0
  568. /package/dist/{ai → skills}/sheet.md +0 -0
  569. /package/dist/{ai → skills}/slider.md +0 -0
  570. /package/dist/{ai → skills}/steps.md +0 -0
  571. /package/dist/{ai → skills}/surface.md +0 -0
  572. /package/dist/{ai → skills}/table.md +0 -0
  573. /package/dist/{ai → skills}/tabs.md +0 -0
  574. /package/dist/{ai → skills}/teleport.md +0 -0
  575. /package/dist/{ai → skills}/textarea.md +0 -0
  576. /package/dist/{ai → skills}/theme-button.md +0 -0
  577. /package/dist/{ai → skills}/theme.md +0 -0
  578. /package/dist/{ai → skills}/tooltip.md +0 -0
  579. /package/dist/{ai → skills}/tree.md +0 -0
  580. /package/dist/{ai → skills}/typewriter.md +0 -0
  581. /package/dist/{ai → skills}/typography.md +0 -0
  582. /package/dist/{ai → skills}/utils.md +0 -0
  583. /package/dist/{ai → skills}/window.md +0 -0
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: schmancy
3
+ description: UI patterns, component APIs, and conventions for the @mhmo91/schmancy web-component library (Lit + RxJS + Tailwind). Activate whenever the user works on any <schmancy-*> tag, routing with schmancy-area, state with createContext/@select, the $LitElement base class, theme, directives, or overlay services ($dialog, $notify, schmancyContentDrawer, sheet).
4
+ ---
5
+
6
+ # Schmancy
7
+
8
+ Web-component UI library on Lit + RxJS + Tailwind CSS. This skill bundles the full library reference as supporting files alongside this SKILL.md.
9
+
10
+ ## How to use this skill
11
+
12
+ All reference files live in this directory. Read by filename.
13
+
14
+ 1. **Start with `INDEX.md`** for the full catalog organized by job (foundations / atoms / forms / navigation / overlays / interaction / feedback / display).
15
+ 2. **Before writing any `<schmancy-X>` tag**, read `X.md`. Example: `<schmancy-button>` → `button.md`.
16
+ 3. **Before editing foundations** (routing, state, base class, theme), read the matching foundation file below.
17
+ 4. **Apply the conventions** at the end of this file.
18
+
19
+ ## Foundations (the framework pieces — touch first)
20
+
21
+ | Piece | Read |
22
+ |-------|------|
23
+ | Routing (`<schmancy-area>`, `<schmancy-route>`, `area.push()`, `lazy()`) | `area.md` |
24
+ | State (`createContext`, `@select`, `@selectItem`) | `store.md` |
25
+ | Base class (`$LitElement`) | `mixins.md` |
26
+ | Theme (`<schmancy-theme>`, `theme` service) | `theme.md` |
27
+ | Directives (`magnetic`, `cursorGlow`, `gravity`, `reveal`, `animateText`, …) | `directives.md` |
28
+ | Spring physics presets | `animation.md` |
29
+
30
+ ## Overlay services (prefer over tags)
31
+
32
+ For modals, toasts, sheets, side drawers — reach for the **imperative service API** first:
33
+
34
+ ```typescript
35
+ import { $dialog, $notify, schmancyContentDrawer, sheet, SchmancySheetPosition } from '@mhmo91/schmancy'
36
+
37
+ $dialog.component(new EditForm()) // modal
38
+ $dialog.component(new QuickPicker(), { position: e }) // anchored modal
39
+ $notify.success('Saved'); $notify.error('Failed') // toast
40
+ schmancyContentDrawer.open({ component: new Detail() }) // side panel
41
+ sheet.open({ component: new Picker(), position: SchmancySheetPosition.BOTTOM }) // bottom sheet
42
+ ```
43
+
44
+ References: `dialog.md`, `notification.md`, `content-drawer.md`, `sheet.md`.
45
+
46
+ Use component tags (`<schmancy-menu>`, `<schmancy-dropdown>`, `<schmancy-tooltip>`, `<schmancy-lightbox>`, `<schmancy-expand>`) only when the tag is the natural fit (anchored panels, tooltips, galleries).
47
+
48
+ ## Non-negotiable conventions
49
+
50
+ **Component authoring**
51
+ - Every component extends `$LitElement(style?)`. Never raw `LitElement`.
52
+ - Every RxJS subscription ends with `.pipe(takeUntil(this.disconnecting))`.
53
+ - Register the tag in `HTMLElementTagNameMap` for TypeScript.
54
+
55
+ **State**
56
+ - Contexts live at module scope. Many small contexts beat one monolith.
57
+ - Gate subscriptions with `filter(() => ctx.ready)` when reading persisted contexts.
58
+ - Storage tiers: `'memory'` (regenerable) · `'session'` (per-tab) · `'local'` (user prefs) · `'indexeddb'` (>100-entry collections).
59
+
60
+ **Routing**
61
+ - Route guards are `Observable<boolean>`, never cached booleans.
62
+ - `when="tag-name"` must exactly match `@customElement('tag-name')`.
63
+ - Lazy-load route components: `lazy(() => import('./page'))`.
64
+ - After auth/permission guards, use `historyStrategy: 'replace'` or `'pop'` — never `'push'`.
65
+
66
+ **Templates**
67
+ - Lists: `repeat(items, i => i.id, tpl)`. Never `.map()`.
68
+ - View switching: `cache(...)`.
69
+ - Expensive work: `guard([deps], () => expensive())`.
70
+ - Conditionals: `when(...)` / `choose(...)` / `ifDefined(...)`.
71
+ - DOM access: `ref(createRef())`.
72
+ - `classMap(this.classMap({...}))` must be the sole expression in `class=` — never mix with string interpolation.
73
+
74
+ **Styling**
75
+ - Colors: `--schmancy-sys-color-*` CSS vars or Tailwind theme classes. Never hardcoded hex.
76
+ - No `setTimeout` / `setInterval` / `addEventListener` — use RxJS (`timer`, `interval`, `fromEvent`).
77
+
78
+ **Accessibility (combobox forms)**
79
+ ```typescript
80
+ role="combobox"
81
+ aria-haspopup="listbox"
82
+ aria-expanded=${this._open}
83
+ aria-controls="listbox-id"
84
+ ```
85
+ Plus a live region: `<div id="live-status" role="status" aria-live="polite" class="sr-only"></div>`.
86
+
87
+ ## Minimal app skeleton
88
+
89
+ ```typescript
90
+ <schmancy-theme root scheme="dark">
91
+ <schmancy-surface type="solid" fill="all">
92
+ <schmancy-scroll>
93
+ <schmancy-area
94
+ name="root"
95
+ .default=${lazy(() => import('./home.page'))}
96
+ >
97
+ <schmancy-route when="home-page"
98
+ .component=${lazy(() => import('./home.page'))}></schmancy-route>
99
+
100
+ <schmancy-route when="app-index"
101
+ .component=${lazy(() => import('./app.page'))}
102
+ .guard=${authState$.pipe(
103
+ map(u => !!u),
104
+ takeUntil(this.disconnecting),
105
+ )}
106
+ @redirect=${() => area.push({
107
+ component: 'home-page', area: 'root', historyStrategy: 'replace',
108
+ })}></schmancy-route>
109
+ </schmancy-area>
110
+ </schmancy-scroll>
111
+ </schmancy-surface>
112
+ </schmancy-theme>
113
+ ```
114
+
115
+ ## Workflow
116
+
117
+ 1. User describes a UI task.
118
+ 2. Read `INDEX.md` to find the relevant components or foundations.
119
+ 3. Read the specific `.md` files for the APIs involved.
120
+ 4. Write code that follows the conventions above.
@@ -0,0 +1,141 @@
1
+ # Area — Routing
2
+
3
+ Schmancy's client-side router. Three pieces:
4
+
5
+ | Piece | Role |
6
+ |-------|------|
7
+ | `<schmancy-area name="...">` | Named region that renders one route at a time |
8
+ | `<schmancy-route when="tag">` | Declares which component can render in an area |
9
+ | `area.push(...)` | Imperative navigation |
10
+
11
+ Areas can be nested to compose shell-plus-sub-view layouts.
12
+
13
+ ## Example
14
+
15
+ ```html
16
+ <schmancy-area name="root" .default=${lazy(() => import('./pages/home.page'))}>
17
+ <schmancy-route when="home-page"
18
+ .component=${lazy(() => import('./pages/home.page'))}></schmancy-route>
19
+
20
+ <schmancy-route when="app-index"
21
+ .component=${lazy(() => import('./app/app.page'))}
22
+ .guard=${authState$.pipe(
23
+ map(u => !!u && !u.isAnonymous),
24
+ takeUntil(this.disconnecting),
25
+ )}
26
+ @redirect=${() => area.push({
27
+ component: 'home-page',
28
+ area: 'root',
29
+ historyStrategy: 'replace',
30
+ })}></schmancy-route>
31
+ </schmancy-area>
32
+ ```
33
+
34
+ ## `schmancy-area` properties
35
+
36
+ | Property | Type | Description |
37
+ |----------|------|-------------|
38
+ | `name` | string (required) | Area identifier used in `area.push({ area })` |
39
+ | `default` | `RouteComponent \| string` | Fallback when no route matches |
40
+
41
+ ## `schmancy-route` properties
42
+
43
+ | Property | Type | Description |
44
+ |----------|------|-------------|
45
+ | `when` | string (required) | Must match a `@customElement('tag')` tag name |
46
+ | `component` | `RouteComponent` (required) | Class, tag name, or `lazy()` wrapper |
47
+ | `guard` | `Observable<boolean>` | When emits `false`, blocks and dispatches `redirect` event |
48
+ | `exact` | boolean | Strict-equality matching |
49
+
50
+ ## `area` service
51
+
52
+ ```typescript
53
+ import { area } from '@mhmo91/schmancy'
54
+
55
+ area.push({
56
+ area: 'root',
57
+ component: 'app-index',
58
+ params?: { id: '123' },
59
+ historyStrategy?: 'push' | 'replace' | 'silent',
60
+ })
61
+ ```
62
+
63
+ `historyStrategy`:
64
+ - `'push'` (default) — adds a browser-history entry
65
+ - `'replace'` — overwrites the current entry (use after guards or redirects)
66
+ - `'silent'` — changes the area without touching history
67
+
68
+ ### Subscribe to route state
69
+
70
+ ```typescript
71
+ area.on('root').pipe(
72
+ takeUntil(this.disconnecting),
73
+ ).subscribe(route => { /* route.component, route.params */ })
74
+
75
+ area.params<{ id: string }>('detail').pipe(
76
+ takeUntil(this.disconnecting),
77
+ ).subscribe(params => this.loadItem(params.id))
78
+ ```
79
+
80
+ ## Lazy loading
81
+
82
+ ```typescript
83
+ import { lazy } from '@mhmo91/schmancy'
84
+ const HomePage = lazy(() => import('./home.page'))
85
+
86
+ // Optional preload
87
+ html`<button @mouseenter=${() => HomePage.preload()}>Home</button>`
88
+ ```
89
+
90
+ ## Guards
91
+
92
+ `guard` is an Observable<boolean>.
93
+
94
+ - Emits `true` → route renders.
95
+ - Emits `false` → route dispatches a `redirect` event. Handle it with `area.push(...)`.
96
+
97
+ Auth guard:
98
+
99
+ ```typescript
100
+ <schmancy-route when="app-index"
101
+ .component=${lazy(() => import('./app'))}
102
+ .guard=${authState$.pipe(
103
+ map(u => !!u),
104
+ takeUntil(this.disconnecting),
105
+ )}
106
+ @redirect=${() => area.push({
107
+ component: 'home-page', area: 'root', historyStrategy: 'replace',
108
+ })}></schmancy-route>
109
+ ```
110
+
111
+ Compound guard (multiple streams):
112
+
113
+ ```typescript
114
+ .guard=${combineLatest([permissions$, orgContext.$]).pipe(
115
+ takeUntil(this.disconnecting),
116
+ map(([perms, org]) => perms.includes('billing.view') && org?.billing?.configured),
117
+ )}
118
+ ```
119
+
120
+ ## Nested areas
121
+
122
+ Areas nest by rendering an inner `<schmancy-area>` inside a route component. A common shape is an outer area for "signed-in vs. not" and an inner area for sub-views of the signed-in shell.
123
+
124
+ ```html
125
+ <!-- outer -->
126
+ <schmancy-area name="root">
127
+ <schmancy-route when="app-index" .component=${AppShell}></schmancy-route>
128
+ </schmancy-area>
129
+
130
+ <!-- inner (inside AppShell.render()) -->
131
+ <schmancy-area name="app" default="home-page">
132
+ <schmancy-route when="home-page" .component=${...}></schmancy-route>
133
+ <schmancy-route when="settings-page" .component=${...}></schmancy-route>
134
+ </schmancy-area>
135
+ ```
136
+
137
+ ## Rules
138
+
139
+ - `when="tag-name"` must match `@customElement('tag-name')` exactly.
140
+ - Guards emit `false` → always use `historyStrategy: 'replace'` in the `@redirect` handler.
141
+ - Every subscription in guards / route state uses `takeUntil(this.disconnecting)`.
@@ -1,6 +1,6 @@
1
1
  # Schmancy Mailbox
2
2
 
3
- > Full email composition + campaign management system. Orchestrates recipients, templates, editor, attachments, and preview. Extracted from funkhaus-events and generalized.
3
+ > Full email composition + campaign management system. Orchestrates recipients, templates, editor, attachments, and preview.
4
4
 
5
5
  ## Components
6
6
 
@@ -0,0 +1,99 @@
1
+ # `$LitElement`
2
+
3
+ Base class for Schmancy components. Extends `LitElement` with RxJS cleanup, Tailwind support, and cross-shadow discovery.
4
+
5
+ ## Usage
6
+
7
+ ```typescript
8
+ import { $LitElement } from '@mhmo91/schmancy/mixins'
9
+ import { customElement } from 'lit/decorators.js'
10
+ import { css, html } from 'lit'
11
+
12
+ @customElement('my-component')
13
+ class MyComponent extends $LitElement(css`
14
+ :host { display: block; }
15
+ `) {
16
+ render() {
17
+ return html`<slot></slot>`
18
+ }
19
+ }
20
+ ```
21
+
22
+ `$LitElement(style?)` accepts either a Lit `css` tagged literal or a string (e.g. SCSS imported with `?inline`).
23
+
24
+ ## Provided members
25
+
26
+ ### `disconnecting: Subject<void>`
27
+ Emits once when the element disconnects. Pair with `takeUntil` for cleanup:
28
+
29
+ ```typescript
30
+ connectedCallback() {
31
+ super.connectedCallback()
32
+ someObservable$.pipe(
33
+ takeUntil(this.disconnecting),
34
+ ).subscribe()
35
+ }
36
+ ```
37
+
38
+ ### `classMap(obj)`
39
+ Wraps Lit's `classMap` so keys can be space-separated:
40
+
41
+ ```typescript
42
+ html`<div class=${this.classMap({
43
+ 'flex items-center gap-2': true,
44
+ 'opacity-50': this.disabled,
45
+ })}></div>`
46
+ ```
47
+
48
+ Must be the only expression in `class=` — don't mix with string interpolation.
49
+
50
+ ### `styleMap(obj)`
51
+ Passthrough to Lit's `styleMap`.
52
+
53
+ ```typescript
54
+ html`<div style=${this.styleMap({ width: `${w}px` })}></div>`
55
+ ```
56
+
57
+ ### `discover<T>(tag): Observable<T | null>`
58
+ Find another Schmancy component by tag via event-based handshake. Works across shadow DOM.
59
+
60
+ ```typescript
61
+ this.discover<SchmancyDialog>('schmancy-dialog').pipe(
62
+ takeUntil(this.disconnecting),
63
+ ).subscribe(dialog => dialog?.setDefaultAction('confirm'))
64
+ ```
65
+
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
+ ```
93
+
94
+ ## Rules
95
+
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.
@@ -0,0 +1,126 @@
1
+ # Store — Context System
2
+
3
+ Reactive state management: `createContext`, `@select`, `@selectItem`.
4
+
5
+ ## Creating a context
6
+
7
+ ```typescript
8
+ import { createContext } from '@mhmo91/schmancy'
9
+
10
+ // Object
11
+ const userContext = createContext<User>(new User(), 'local', 'user')
12
+
13
+ // Map (collection)
14
+ const itemsContext = createContext<Map<string, Item>>(new Map(), 'indexeddb', 'items')
15
+
16
+ // Array
17
+ const tagsContext = createContext<string[]>([], 'memory', 'tags')
18
+ ```
19
+
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`
38
+
39
+ ```typescript
40
+ import { select } from '@mhmo91/schmancy'
41
+
42
+ @customElement('my-component')
43
+ class MyComponent extends $LitElement() {
44
+ @select(userContext) user!: User
45
+
46
+ // Selector narrows the dependency
47
+ @select(itemsContext, m => m.size) count!: number
48
+
49
+ @select(itemsContext) items!: Map<string, Item>
50
+ }
51
+ ```
52
+
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
+
63
+ ```typescript
64
+ @selectItem(itemsContext, component => component.itemId)
65
+ item!: Item | undefined
66
+ ```
67
+
68
+ ## Writing
69
+
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'])
83
+ ```
84
+
85
+ ## Observable API
86
+
87
+ ```typescript
88
+ userContext.$.pipe(
89
+ filter(() => userContext.ready),
90
+ takeUntil(this.disconnecting),
91
+ ).subscribe(user => { /* ... */ })
92
+
93
+ userContext.value // synchronous snapshot
94
+ userContext.ready // true once the backing store has loaded
95
+ ```
96
+
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:
102
+
103
+ ```typescript
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
+ }
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.
@@ -0,0 +1,126 @@
1
+ # Store — Context System
2
+
3
+ Reactive state management: `createContext`, `@select`, `@selectItem`.
4
+
5
+ ## Creating a context
6
+
7
+ ```typescript
8
+ import { createContext } from '@mhmo91/schmancy'
9
+
10
+ // Object
11
+ const userContext = createContext<User>(new User(), 'local', 'user')
12
+
13
+ // Map (collection)
14
+ const itemsContext = createContext<Map<string, Item>>(new Map(), 'indexeddb', 'items')
15
+
16
+ // Array
17
+ const tagsContext = createContext<string[]>([], 'memory', 'tags')
18
+ ```
19
+
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`
38
+
39
+ ```typescript
40
+ import { select } from '@mhmo91/schmancy'
41
+
42
+ @customElement('my-component')
43
+ class MyComponent extends $LitElement() {
44
+ @select(userContext) user!: User
45
+
46
+ // Selector narrows the dependency
47
+ @select(itemsContext, m => m.size) count!: number
48
+
49
+ @select(itemsContext) items!: Map<string, Item>
50
+ }
51
+ ```
52
+
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
+
63
+ ```typescript
64
+ @selectItem(itemsContext, component => component.itemId)
65
+ item!: Item | undefined
66
+ ```
67
+
68
+ ## Writing
69
+
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'])
83
+ ```
84
+
85
+ ## Observable API
86
+
87
+ ```typescript
88
+ userContext.$.pipe(
89
+ filter(() => userContext.ready),
90
+ takeUntil(this.disconnecting),
91
+ ).subscribe(user => { /* ... */ })
92
+
93
+ userContext.value // synchronous snapshot
94
+ userContext.ready // true once the backing store has loaded
95
+ ```
96
+
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:
102
+
103
+ ```typescript
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
+ }
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/dist/slider.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-DSuEu-y3.cjs`),t=require(`./litElement.mixin-BG6_-nYX.cjs`);require(`./mixins.cjs`);let n=require(`rxjs`),r=require(`rxjs/operators`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/cache.js`);var s=class extends t.t(a.css`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-BCfY8kxB.cjs`);const e=require(`./tailwind.mixin-BF1Huas7.cjs`),t=require(`./litElement.mixin-3llHwB-8.cjs`);require(`./mixins.cjs`);let n=require(`rxjs`),r=require(`rxjs/operators`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/cache.js`);var s=class extends t.t(a.css`
2
2
  :host {
3
3
  display: block;
4
4
  scroll-snap-align: center; /* If your slider uses scroll-snap */
package/dist/slider.js CHANGED
@@ -1,5 +1,5 @@
1
- import { i as e } from "./tailwind.mixin-BIVhjNvD.js";
2
- import { t } from "./litElement.mixin-Dm-4L8zL.js";
1
+ import { i as e } from "./tailwind.mixin-BCJOOX1_.js";
2
+ import { t } from "./litElement.mixin-6jJYHCrZ.js";
3
3
  import "./mixins.js";
4
4
  import { fromEvent as n } from "rxjs";
5
5
  import { throttleTime as r } from "rxjs/operators";