@mhmo91/schmancy 0.9.3 → 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 (369) hide show
  1. package/ai/INDEX.md +53 -302
  2. package/ai/area.md +91 -165
  3. package/ai/mailbox.md +1 -1
  4. package/ai/mixins.md +37 -139
  5. package/ai/store.md +70 -136
  6. package/dist/ai/INDEX.md +53 -302
  7. package/dist/ai/area.md +91 -165
  8. package/dist/ai/mailbox.md +1 -1
  9. package/dist/ai/mixins.md +37 -139
  10. package/dist/ai/store.md +70 -136
  11. package/dist/{area-CC8fUnra.js → area-CRoGqD_u.js} +2 -2
  12. package/dist/area-CRoGqD_u.js.map +1 -0
  13. package/dist/{area-wnWUAHEn.cjs → area-JPykB7A9.cjs} +1 -1
  14. package/dist/area-JPykB7A9.cjs.map +1 -0
  15. package/dist/area.cjs +1 -1
  16. package/dist/area.js +1 -1
  17. package/dist/{autocomplete-B2Z3WK_7.cjs → autocomplete-5rVhbieU.cjs} +1 -1
  18. package/dist/{autocomplete-B2Z3WK_7.cjs.map → autocomplete-5rVhbieU.cjs.map} +1 -1
  19. package/dist/{autocomplete-CJ7YgtKN.js → autocomplete-BllPQwr8.js} +3 -3
  20. package/dist/{autocomplete-CJ7YgtKN.js.map → autocomplete-BllPQwr8.js.map} +1 -1
  21. package/dist/autocomplete.cjs +1 -1
  22. package/dist/autocomplete.js +1 -1
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-C9eU6NO-.js → boat-BDTQ-du9.js} +2 -2
  26. package/dist/{boat-C9eU6NO-.js.map → boat-BDTQ-du9.js.map} +1 -1
  27. package/dist/{boat-B57_4TzJ.cjs → boat-DYEAZ8Qj.cjs} +1 -1
  28. package/dist/{boat-B57_4TzJ.cjs.map → boat-DYEAZ8Qj.cjs.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/{busy-CGZXy0h-.js → busy-ChDAeaKF.js} +1 -1
  32. package/dist/{busy-CGZXy0h-.js.map → busy-ChDAeaKF.js.map} +1 -1
  33. package/dist/{busy--6oimtop.cjs → busy-Dj7Xn0Z0.cjs} +1 -1
  34. package/dist/{busy--6oimtop.cjs.map → busy-Dj7Xn0Z0.cjs.map} +1 -1
  35. package/dist/busy.cjs +1 -1
  36. package/dist/busy.js +1 -1
  37. package/dist/button.cjs +1 -1
  38. package/dist/button.js +2 -2
  39. package/dist/{card-BGJ0Hb1O.cjs → card-BvPWVEJX.cjs} +1 -1
  40. package/dist/{card-BGJ0Hb1O.cjs.map → card-BvPWVEJX.cjs.map} +1 -1
  41. package/dist/{card-C-ee-l5O.js → card-DZFPRPqs.js} +1 -1
  42. package/dist/{card-C-ee-l5O.js.map → card-DZFPRPqs.js.map} +1 -1
  43. package/dist/card.cjs +1 -1
  44. package/dist/card.js +1 -1
  45. package/dist/charts.cjs +1 -1
  46. package/dist/charts.js +2 -2
  47. package/dist/{checkbox-DuYaKoDZ.cjs → checkbox-BC_37rsG.cjs} +1 -1
  48. package/dist/{checkbox-DuYaKoDZ.cjs.map → checkbox-BC_37rsG.cjs.map} +1 -1
  49. package/dist/{checkbox-FRcorDrD.js → checkbox-GSSjqo6w.js} +1 -1
  50. package/dist/{checkbox-FRcorDrD.js.map → checkbox-GSSjqo6w.js.map} +1 -1
  51. package/dist/checkbox.cjs +1 -1
  52. package/dist/checkbox.js +1 -1
  53. package/dist/{chips-BpA0A-qr.cjs → chips-B19XS8Xc.cjs} +1 -1
  54. package/dist/{chips-BpA0A-qr.cjs.map → chips-B19XS8Xc.cjs.map} +1 -1
  55. package/dist/{chips-CyzNbKJD.js → chips-B9oAEfE_.js} +3 -3
  56. package/dist/{chips-CyzNbKJD.js.map → chips-B9oAEfE_.js.map} +1 -1
  57. package/dist/chips.cjs +1 -1
  58. package/dist/chips.js +2 -2
  59. package/dist/{code-highlight-C7O9ltXm.js → code-highlight-DCk5lJY-.js} +1 -1
  60. package/dist/{code-highlight-C7O9ltXm.js.map → code-highlight-DCk5lJY-.js.map} +1 -1
  61. package/dist/{code-highlight-DsBdSQBG.cjs → code-highlight-fSLrlgOb.cjs} +1 -1
  62. package/dist/{code-highlight-DsBdSQBG.cjs.map → code-highlight-fSLrlgOb.cjs.map} +1 -1
  63. package/dist/code-highlight.cjs +1 -1
  64. package/dist/code-highlight.js +1 -1
  65. package/dist/{components-CkMvOiTR.js → components-COsM6sJZ.js} +2 -2
  66. package/dist/{components-CkMvOiTR.js.map → components-COsM6sJZ.js.map} +1 -1
  67. package/dist/{components-dDI3xeIf.cjs → components-CyD6a7gQ.cjs} +1 -1
  68. package/dist/{components-dDI3xeIf.cjs.map → components-CyD6a7gQ.cjs.map} +1 -1
  69. package/dist/components.cjs +1 -1
  70. package/dist/components.js +1 -1
  71. package/dist/connectivity.cjs +1 -1
  72. package/dist/connectivity.js +1 -1
  73. package/dist/content-drawer.cjs +1 -1
  74. package/dist/content-drawer.js +1 -1
  75. package/dist/{date-range-BrN_Bs6_.js → date-range-Sfyco9-n.js} +3 -3
  76. package/dist/{date-range-BrN_Bs6_.js.map → date-range-Sfyco9-n.js.map} +1 -1
  77. package/dist/{date-range-70zhLUKE.cjs → date-range-ZAaQB22I.cjs} +1 -1
  78. package/dist/{date-range-70zhLUKE.cjs.map → date-range-ZAaQB22I.cjs.map} +1 -1
  79. package/dist/{date-range-inline-Cp294DxR.js → date-range-inline-Bl8qbiQF.js} +1 -1
  80. package/dist/{date-range-inline-Cp294DxR.js.map → date-range-inline-Bl8qbiQF.js.map} +1 -1
  81. package/dist/{date-range-inline-CPzD-tIv.cjs → date-range-inline-m7nLjOMI.cjs} +1 -1
  82. package/dist/{date-range-inline-CPzD-tIv.cjs.map → date-range-inline-m7nLjOMI.cjs.map} +1 -1
  83. package/dist/date-range-inline.cjs +1 -1
  84. package/dist/date-range-inline.js +1 -1
  85. package/dist/date-range.cjs +1 -1
  86. package/dist/date-range.js +1 -1
  87. package/dist/{delay-COcAkBqB.cjs → delay-7boauN6N.cjs} +1 -1
  88. package/dist/{delay-COcAkBqB.cjs.map → delay-7boauN6N.cjs.map} +1 -1
  89. package/dist/{delay-IV0Swce2.js → delay-CgX6m0HN.js} +3 -3
  90. package/dist/{delay-IV0Swce2.js.map → delay-CgX6m0HN.js.map} +1 -1
  91. package/dist/delay.cjs +1 -1
  92. package/dist/delay.js +1 -1
  93. package/dist/{details-DgWkPqmt.cjs → details-BHnk8l4q.cjs} +1 -1
  94. package/dist/{details-DgWkPqmt.cjs.map → details-BHnk8l4q.cjs.map} +1 -1
  95. package/dist/{details-CuKmr3Qw.js → details-BPkUg8Cq.js} +2 -2
  96. package/dist/{details-CuKmr3Qw.js.map → details-BPkUg8Cq.js.map} +1 -1
  97. package/dist/details.cjs +1 -1
  98. package/dist/details.js +1 -1
  99. package/dist/dialog.cjs +1 -1
  100. package/dist/dialog.js +2 -2
  101. package/dist/directives.cjs.map +1 -1
  102. package/dist/directives.js.map +1 -1
  103. package/dist/discovery.cjs.map +1 -1
  104. package/dist/discovery.js.map +1 -1
  105. package/dist/{divider-BWoUbfgZ.js → divider-CW9a7MMj.js} +2 -2
  106. package/dist/{divider-BWoUbfgZ.js.map → divider-CW9a7MMj.js.map} +1 -1
  107. package/dist/{divider-BghtrMbn.cjs → divider-_khrhrZo.cjs} +1 -1
  108. package/dist/{divider-BghtrMbn.cjs.map → divider-_khrhrZo.cjs.map} +1 -1
  109. package/dist/divider.cjs +1 -1
  110. package/dist/divider.js +1 -1
  111. package/dist/dropdown.cjs +1 -1
  112. package/dist/dropdown.js +2 -2
  113. package/dist/{expand-XyDE5SsO.cjs → expand-Cp7-PH8b.cjs} +1 -1
  114. package/dist/{expand-XyDE5SsO.cjs.map → expand-Cp7-PH8b.cjs.map} +1 -1
  115. package/dist/{expand-CJU9m4ga.js → expand-iQ7EOMP7.js} +3 -3
  116. package/dist/{expand-CJU9m4ga.js.map → expand-iQ7EOMP7.js.map} +1 -1
  117. package/dist/expand.cjs +1 -1
  118. package/dist/expand.js +1 -1
  119. package/dist/{extra-CsrRKKqE.cjs → extra-IKAiJJhv.cjs} +1 -1
  120. package/dist/{extra-CsrRKKqE.cjs.map → extra-IKAiJJhv.cjs.map} +1 -1
  121. package/dist/{extra-BxXFmW1w.js → extra-wEpvEFbK.js} +2 -2
  122. package/dist/{extra-BxXFmW1w.js.map → extra-wEpvEFbK.js.map} +1 -1
  123. package/dist/extra.cjs +1 -1
  124. package/dist/extra.js +1 -1
  125. package/dist/{float-BD86t_NU.js → float-BQ_urmMs.js} +2 -2
  126. package/dist/{float-BD86t_NU.js.map → float-BQ_urmMs.js.map} +1 -1
  127. package/dist/{float-DBv1FINW.cjs → float-D5rNC82i.cjs} +1 -1
  128. package/dist/{float-DBv1FINW.cjs.map → float-D5rNC82i.cjs.map} +1 -1
  129. package/dist/float.cjs +1 -1
  130. package/dist/float.js +1 -1
  131. package/dist/{form-D0bIeDWT.cjs → form-BqN1AGFj.cjs} +1 -1
  132. package/dist/{form-D0bIeDWT.cjs.map → form-BqN1AGFj.cjs.map} +1 -1
  133. package/dist/{form-Cp5-I_ZV.js → form-CajC5HnO.js} +1 -1
  134. package/dist/{form-Cp5-I_ZV.js.map → form-CajC5HnO.js.map} +1 -1
  135. package/dist/form.cjs +1 -1
  136. package/dist/form.js +1 -1
  137. package/dist/{icons-D8w_20mO.cjs → icons-B57_93VV.cjs} +1 -1
  138. package/dist/{icons-D8w_20mO.cjs.map → icons-B57_93VV.cjs.map} +1 -1
  139. package/dist/{icons-BpU0_l92.js → icons-BDqiGXrO.js} +1 -1
  140. package/dist/{icons-BpU0_l92.js.map → icons-BDqiGXrO.js.map} +1 -1
  141. package/dist/icons.cjs +1 -1
  142. package/dist/icons.js +1 -1
  143. package/dist/{iframe-BjwxA2Pg.cjs → iframe-DNHL3GIk.cjs} +1 -1
  144. package/dist/{iframe-BjwxA2Pg.cjs.map → iframe-DNHL3GIk.cjs.map} +1 -1
  145. package/dist/{iframe-tY1GY5g1.js → iframe-WnWPIrBG.js} +1 -1
  146. package/dist/{iframe-tY1GY5g1.js.map → iframe-WnWPIrBG.js.map} +1 -1
  147. package/dist/iframe.cjs +1 -1
  148. package/dist/iframe.js +1 -1
  149. package/dist/index.cjs +1 -1
  150. package/dist/index.js +33 -33
  151. package/dist/{input-BwxwognS.cjs → input-BiSrTcrR.cjs} +1 -1
  152. package/dist/{input-BwxwognS.cjs.map → input-BiSrTcrR.cjs.map} +1 -1
  153. package/dist/{input-BnfTpRN9.js → input-VaXHFrRn.js} +1 -1
  154. package/dist/{input-BnfTpRN9.js.map → input-VaXHFrRn.js.map} +1 -1
  155. package/dist/{input-chip-MjOwX5EY.cjs → input-chip-Dy-AiP55.cjs} +1 -1
  156. package/dist/{input-chip-MjOwX5EY.cjs.map → input-chip-Dy-AiP55.cjs.map} +1 -1
  157. package/dist/{input-chip-CkM2aYmO.js → input-chip-QejNcRnS.js} +1 -1
  158. package/dist/{input-chip-CkM2aYmO.js.map → input-chip-QejNcRnS.js.map} +1 -1
  159. package/dist/input.cjs +1 -1
  160. package/dist/input.js +1 -1
  161. package/dist/json.cjs +1 -1
  162. package/dist/json.js +2 -2
  163. package/dist/{layout-CJSlZlFL.js → layout-CnsXeCAy.js} +2 -2
  164. package/dist/{layout-CJSlZlFL.js.map → layout-CnsXeCAy.js.map} +1 -1
  165. package/dist/{layout-BV0EeyUS.cjs → layout-DNYG3phx.cjs} +1 -1
  166. package/dist/{layout-BV0EeyUS.cjs.map → layout-DNYG3phx.cjs.map} +1 -1
  167. package/dist/layout.cjs +1 -1
  168. package/dist/layout.js +2 -2
  169. package/dist/{lightbox-groqGmJH.js → lightbox-BrI1Z31s.js} +2 -2
  170. package/dist/{lightbox-groqGmJH.js.map → lightbox-BrI1Z31s.js.map} +1 -1
  171. package/dist/{lightbox-CpNMZHZW.cjs → lightbox-CmACf0t5.cjs} +1 -1
  172. package/dist/{lightbox-CpNMZHZW.cjs.map → lightbox-CmACf0t5.cjs.map} +1 -1
  173. package/dist/lightbox.cjs +1 -1
  174. package/dist/lightbox.js +1 -1
  175. package/dist/{list-DzkqT_r-.js → list-Cm-jjXxM.js} +2 -2
  176. package/dist/{list-DzkqT_r-.js.map → list-Cm-jjXxM.js.map} +1 -1
  177. package/dist/{list-CyHd0Zc2.cjs → list-swIL9VDv.cjs} +1 -1
  178. package/dist/{list-CyHd0Zc2.cjs.map → list-swIL9VDv.cjs.map} +1 -1
  179. package/dist/list.cjs +1 -1
  180. package/dist/list.js +1 -1
  181. package/dist/{litElement.mixin-BG6_-nYX.cjs → litElement.mixin-3llHwB-8.cjs} +1 -1
  182. package/dist/{litElement.mixin-BG6_-nYX.cjs.map → litElement.mixin-3llHwB-8.cjs.map} +1 -1
  183. package/dist/{litElement.mixin-Dm-4L8zL.js → litElement.mixin-6jJYHCrZ.js} +1 -1
  184. package/dist/{litElement.mixin-Dm-4L8zL.js.map → litElement.mixin-6jJYHCrZ.js.map} +1 -1
  185. package/dist/{mailbox-BcqnXYVP.js → mailbox-BuvsVaAQ.js} +4 -4
  186. package/dist/{mailbox-BcqnXYVP.js.map → mailbox-BuvsVaAQ.js.map} +1 -1
  187. package/dist/{mailbox-C5eYTd7p.cjs → mailbox-D6LkQcN5.cjs} +1 -1
  188. package/dist/{mailbox-C5eYTd7p.cjs.map → mailbox-D6LkQcN5.cjs.map} +1 -1
  189. package/dist/mailbox.cjs +1 -1
  190. package/dist/mailbox.js +1 -1
  191. package/dist/{map-C0o1PgLE.js → map-CQiKAxC3.js} +1 -1
  192. package/dist/{map-C0o1PgLE.js.map → map-CQiKAxC3.js.map} +1 -1
  193. package/dist/{map-BncheFt5.cjs → map-D5NN4VET.cjs} +1 -1
  194. package/dist/{map-BncheFt5.cjs.map → map-D5NN4VET.cjs.map} +1 -1
  195. package/dist/map.cjs +1 -1
  196. package/dist/map.js +1 -1
  197. package/dist/{menu-uwqlQbLd.js → menu-C1x04YZw.js} +2 -2
  198. package/dist/{menu-uwqlQbLd.js.map → menu-C1x04YZw.js.map} +1 -1
  199. package/dist/{menu-yXzwJZFf.cjs → menu-CkgMO9K5.cjs} +1 -1
  200. package/dist/{menu-yXzwJZFf.cjs.map → menu-CkgMO9K5.cjs.map} +1 -1
  201. package/dist/menu.cjs +1 -1
  202. package/dist/menu.js +1 -1
  203. package/dist/mixins.cjs +1 -1
  204. package/dist/mixins.js +3 -3
  205. package/dist/nav-drawer.cjs +1 -1
  206. package/dist/nav-drawer.js +1 -1
  207. package/dist/navigation-bar.cjs +1 -1
  208. package/dist/navigation-bar.js +1 -1
  209. package/dist/navigation-rail.cjs +1 -1
  210. package/dist/navigation-rail.js +2 -2
  211. package/dist/{notification-DzYT4deA.js → notification-BnBgxjF-.js} +3 -3
  212. package/dist/{notification-DzYT4deA.js.map → notification-BnBgxjF-.js.map} +1 -1
  213. package/dist/{notification-BjwTfLAl.cjs → notification-CZFEhWxc.cjs} +1 -1
  214. package/dist/{notification-BjwTfLAl.cjs.map → notification-CZFEhWxc.cjs.map} +1 -1
  215. package/dist/notification.cjs +1 -1
  216. package/dist/notification.js +1 -1
  217. package/dist/{option-BJsD3u2D.cjs → option-BrxCVwSx.cjs} +1 -1
  218. package/dist/{option-BJsD3u2D.cjs.map → option-BrxCVwSx.cjs.map} +1 -1
  219. package/dist/{option-JFHxgiYl.js → option-DBO8xZwd.js} +1 -1
  220. package/dist/{option-JFHxgiYl.js.map → option-DBO8xZwd.js.map} +1 -1
  221. package/dist/option.cjs +1 -1
  222. package/dist/option.js +1 -1
  223. package/dist/page.cjs +1 -1
  224. package/dist/page.js +3 -3
  225. package/dist/{progress-BoRmyGAa.cjs → progress-Db2e4_Zd.cjs} +1 -1
  226. package/dist/{progress-BoRmyGAa.cjs.map → progress-Db2e4_Zd.cjs.map} +1 -1
  227. package/dist/{progress-BUh5WBqx.js → progress-DeiHxXo7.js} +2 -2
  228. package/dist/{progress-BUh5WBqx.js.map → progress-DeiHxXo7.js.map} +1 -1
  229. package/dist/progress.cjs +1 -1
  230. package/dist/progress.js +1 -1
  231. package/dist/{provide-8MrDz_qX.js → provide-C1aQhxYo.js} +1 -1
  232. package/dist/{provide-8MrDz_qX.js.map → provide-C1aQhxYo.js.map} +1 -1
  233. package/dist/{provide-CDkxgjHb.cjs → provide-DHnhQtCH.cjs} +1 -1
  234. package/dist/{provide-CDkxgjHb.cjs.map → provide-DHnhQtCH.cjs.map} +1 -1
  235. package/dist/qr-scanner.cjs +1 -1
  236. package/dist/qr-scanner.js +2 -2
  237. package/dist/{radio-group-rhrvhB5X.cjs → radio-group-Cspwd-Vw.cjs} +1 -1
  238. package/dist/{radio-group-rhrvhB5X.cjs.map → radio-group-Cspwd-Vw.cjs.map} +1 -1
  239. package/dist/{radio-group-DbOWUPhi.js → radio-group-zSO0AkJf.js} +1 -1
  240. package/dist/{radio-group-DbOWUPhi.js.map → radio-group-zSO0AkJf.js.map} +1 -1
  241. package/dist/radio-group.cjs +1 -1
  242. package/dist/radio-group.js +1 -1
  243. package/dist/range.cjs +1 -1
  244. package/dist/range.js +1 -1
  245. package/dist/{scroll-BE9W9PF2.cjs → scroll-QMCmbbDv.cjs} +1 -1
  246. package/dist/{scroll-BE9W9PF2.cjs.map → scroll-QMCmbbDv.cjs.map} +1 -1
  247. package/dist/{scroll-qGks1R0k.js → scroll-cBDzye64.js} +1 -1
  248. package/dist/{scroll-qGks1R0k.js.map → scroll-cBDzye64.js.map} +1 -1
  249. package/dist/{select-DXU2kzg4.cjs → select-Ct37l3lg.cjs} +1 -1
  250. package/dist/{select-DXU2kzg4.cjs.map → select-Ct37l3lg.cjs.map} +1 -1
  251. package/dist/{select-D9sgBRjU.js → select-c6HbWvKP.js} +2 -2
  252. package/dist/{select-D9sgBRjU.js.map → select-c6HbWvKP.js.map} +1 -1
  253. package/dist/select.cjs +1 -1
  254. package/dist/select.js +1 -1
  255. package/dist/{sheet-CIxCCJ3H.js → sheet-BMXcUiIm.js} +4 -4
  256. package/dist/{sheet-CIxCCJ3H.js.map → sheet-BMXcUiIm.js.map} +1 -1
  257. package/dist/{sheet-CeX6BbNp.cjs → sheet-CQec-bCV.cjs} +1 -1
  258. package/dist/{sheet-CeX6BbNp.cjs.map → sheet-CQec-bCV.cjs.map} +1 -1
  259. package/dist/sheet.cjs +1 -1
  260. package/dist/sheet.js +2 -2
  261. package/dist/{sheet.service-CAB7weBc.js → sheet.service-BcPV3Du4.js} +1 -1
  262. package/dist/{sheet.service-CAB7weBc.js.map → sheet.service-BcPV3Du4.js.map} +1 -1
  263. package/dist/{sheet.service-DPAp7E3x.cjs → sheet.service-Dumvr1HT.cjs} +1 -1
  264. package/dist/{sheet.service-DPAp7E3x.cjs.map → sheet.service-Dumvr1HT.cjs.map} +1 -1
  265. package/dist/slider.cjs +1 -1
  266. package/dist/slider.js +2 -2
  267. package/dist/{src-CbO5kJ2O.js → src-BLngW2bl.js} +42 -42
  268. package/dist/{src-CbO5kJ2O.js.map → src-BLngW2bl.js.map} +1 -1
  269. package/dist/{src-SraDxEeg.cjs → src-BtQVyqMy.cjs} +1 -1
  270. package/dist/{src-SraDxEeg.cjs.map → src-BtQVyqMy.cjs.map} +1 -1
  271. package/dist/steps.cjs +1 -1
  272. package/dist/steps.js +3 -3
  273. package/dist/{surface-DuH0pm2v.cjs → surface-BjKZoJxK.cjs} +1 -1
  274. package/dist/{surface-DuH0pm2v.cjs.map → surface-BjKZoJxK.cjs.map} +1 -1
  275. package/dist/{surface-eN_Jy2MJ.js → surface-pK8hME5c.js} +3 -3
  276. package/dist/{surface-eN_Jy2MJ.js.map → surface-pK8hME5c.js.map} +1 -1
  277. package/dist/surface.cjs +1 -1
  278. package/dist/surface.js +1 -1
  279. package/dist/{surface.mixin-CIXgN6iw.cjs → surface.mixin-C5sDI1-_.cjs} +1 -1
  280. package/dist/{surface.mixin-CIXgN6iw.cjs.map → surface.mixin-C5sDI1-_.cjs.map} +1 -1
  281. package/dist/{surface.mixin-D9jv1sKG.js → surface.mixin-CBNRpJum.js} +1 -1
  282. package/dist/{surface.mixin-D9jv1sKG.js.map → surface.mixin-CBNRpJum.js.map} +1 -1
  283. package/dist/{table-Dg_tUGB_.js → table-BXIHX9h4.js} +2 -2
  284. package/dist/{table-Dg_tUGB_.js.map → table-BXIHX9h4.js.map} +1 -1
  285. package/dist/{table-C9rRQJEB.cjs → table-CiqgZzSd.cjs} +1 -1
  286. package/dist/{table-C9rRQJEB.cjs.map → table-CiqgZzSd.cjs.map} +1 -1
  287. package/dist/table.cjs +1 -1
  288. package/dist/table.js +1 -1
  289. package/dist/{tabs-soTL-x4G.cjs → tabs-CKa-W4qA.cjs} +1 -1
  290. package/dist/{tabs-soTL-x4G.cjs.map → tabs-CKa-W4qA.cjs.map} +1 -1
  291. package/dist/{tabs-BbFC9omR.js → tabs-nbV5eblZ.js} +2 -2
  292. package/dist/{tabs-BbFC9omR.js.map → tabs-nbV5eblZ.js.map} +1 -1
  293. package/dist/tabs.cjs +1 -1
  294. package/dist/tabs.js +1 -1
  295. package/dist/tailwind.mixin-BCJOOX1_.js +225 -0
  296. package/dist/tailwind.mixin-BCJOOX1_.js.map +1 -0
  297. package/dist/tailwind.mixin-BF1Huas7.cjs +2 -0
  298. package/dist/tailwind.mixin-BF1Huas7.cjs.map +1 -0
  299. package/dist/teleport.cjs +1 -1
  300. package/dist/teleport.js +1 -1
  301. package/dist/{textarea-DaRUJ0ri.cjs → textarea-Cp1ZE60O.cjs} +1 -1
  302. package/dist/{textarea-DaRUJ0ri.cjs.map → textarea-Cp1ZE60O.cjs.map} +1 -1
  303. package/dist/{textarea-hChvHbNM.js → textarea-D7q8exMg.js} +1 -1
  304. package/dist/{textarea-hChvHbNM.js.map → textarea-D7q8exMg.js.map} +1 -1
  305. package/dist/textarea.cjs +1 -1
  306. package/dist/textarea.js +1 -1
  307. package/dist/{theme-ZYH2MqX9.cjs → theme-Da4SPq9X.cjs} +1 -1
  308. package/dist/{theme-ZYH2MqX9.cjs.map → theme-Da4SPq9X.cjs.map} +1 -1
  309. package/dist/{theme-B0M8Hlyo.js → theme-_VPV6Bxh.js} +3 -3
  310. package/dist/{theme-B0M8Hlyo.js.map → theme-_VPV6Bxh.js.map} +1 -1
  311. package/dist/{theme-button-BtlX_Zgd.js → theme-button--sX8A-m1.js} +1 -1
  312. package/dist/{theme-button-BtlX_Zgd.js.map → theme-button--sX8A-m1.js.map} +1 -1
  313. package/dist/{theme-button-Dvqg-rE_.cjs → theme-button-Ci8VQ7KW.cjs} +1 -1
  314. package/dist/{theme-button-Dvqg-rE_.cjs.map → theme-button-Ci8VQ7KW.cjs.map} +1 -1
  315. package/dist/theme-button.cjs +1 -1
  316. package/dist/theme-button.js +1 -1
  317. package/dist/theme.cjs +1 -1
  318. package/dist/theme.js +2 -2
  319. package/dist/tooltip.cjs +1 -1
  320. package/dist/tooltip.js +1 -1
  321. package/dist/tree.cjs +1 -1
  322. package/dist/tree.js +1 -1
  323. package/dist/{typewriter-Cf9f2bdx.cjs → typewriter-B2TnHPjw.cjs} +1 -1
  324. package/dist/{typewriter-Cf9f2bdx.cjs.map → typewriter-B2TnHPjw.cjs.map} +1 -1
  325. package/dist/{typewriter-CCel8Nta.js → typewriter-BrZNa8T-.js} +3 -3
  326. package/dist/{typewriter-CCel8Nta.js.map → typewriter-BrZNa8T-.js.map} +1 -1
  327. package/dist/typewriter.cjs +1 -1
  328. package/dist/typewriter.js +1 -1
  329. package/dist/typography.cjs +1 -1
  330. package/dist/typography.js +1 -1
  331. package/dist/{window-CbgdwOZD.js → window-CM1ycigo.js} +2 -2
  332. package/dist/{window-CbgdwOZD.js.map → window-CM1ycigo.js.map} +1 -1
  333. package/dist/{window-B9_14c12.cjs → window-Uii13x_r.cjs} +1 -1
  334. package/dist/{window-B9_14c12.cjs.map → window-Uii13x_r.cjs.map} +1 -1
  335. package/dist/window.cjs +1 -1
  336. package/dist/window.js +1 -1
  337. package/mixins/baseElement.ts +1 -1
  338. package/mixins/discovery.service.ts +1 -1
  339. package/package.json +1 -2
  340. package/src/area/area.service.ts +1 -1
  341. package/src/area/router.types.ts +1 -1
  342. package/src/directives/animate-text.ts +1 -1
  343. package/src/discovery/discovery.service.ts +1 -1
  344. package/src/input/input.ts +1 -1
  345. package/src/mailbox/README.md +7 -10
  346. package/src/mailbox/types.ts +0 -1
  347. package/types/mixins/discovery.service.d.ts +1 -1
  348. package/types/src/discovery/discovery.service.d.ts +1 -1
  349. package/types/src/mailbox/types.d.ts +0 -1
  350. package/dist/area-CC8fUnra.js.map +0 -1
  351. package/dist/area-wnWUAHEn.cjs.map +0 -1
  352. package/dist/tailwind.mixin-BIVhjNvD.js +0 -225
  353. package/dist/tailwind.mixin-BIVhjNvD.js.map +0 -1
  354. package/dist/tailwind.mixin-DSuEu-y3.cjs +0 -2
  355. package/dist/tailwind.mixin-DSuEu-y3.cjs.map +0 -1
  356. package/src/area/readme.md +0 -338
  357. package/src/area/router-guide.md +0 -360
  358. package/src/autocomplete/README.md +0 -485
  359. package/src/content-drawer/readme.md +0 -709
  360. package/src/icons/readme.md +0 -37
  361. package/src/list/readme.md +0 -62
  362. package/src/radio-group/readme.md +0 -315
  363. package/src/select/README.md +0 -405
  364. package/src/tabs/Readme.md +0 -397
  365. package/src/teleport/readme.md +0 -91
  366. package/src/tree/README.md +0 -59
  367. package/src/typewriter/IMPROVEMENTS.md +0 -174
  368. package/src/typewriter/QUICK_REFERENCE.md +0 -166
  369. package/src/typewriter/test-typewriter.html +0 -97
package/ai/area.md CHANGED
@@ -1,215 +1,141 @@
1
- # Area — Routing Foundation
1
+ # Area — Routing
2
2
 
3
- > **Not just a component. The routing framework your app runs on.**
4
- > `area` is the imperative API. `schmancy-area` is the region where a component lives. `schmancy-route` declares the options.
5
-
6
- Routing in Schmancy is four things working together:
3
+ Schmancy's client-side router. Three pieces:
7
4
 
8
5
  | Piece | Role |
9
6
  |-------|------|
10
- | `<schmancy-area name="...">` | Declares a named region of the screen |
11
- | `<schmancy-route when="tag">` | Declares which component can occupy it |
12
- | `area.push(...)` | Imperative navigation (click handlers, guards, effects) |
13
- | `lazy(() => import('...'))` | Code-split route components |
14
-
15
- ## The Shape of a Real App
16
-
17
- Real apps nest areas. Outer `name="root"` handles public vs. authenticated. Inner `name="aria"` handles sub-views inside the authenticated shell.
18
-
19
- ```typescript
20
- // app root — handles sign-in / public / authenticated
21
- @customElement('my-app')
22
- class MyApp extends $LitElement() {
23
- render() {
24
- return html`
25
- <schmancy-theme root scheme="dark">
26
- <schmancy-surface type="solid" fill="all">
27
- <schmancy-scroll>
28
- <schmancy-area
29
- name="root"
30
- .default=${lazy(() => import('./pages/landing.page'))}
31
- >
32
- <schmancy-route when="landing-page"
33
- .component=${lazy(() => import('./pages/landing.page'))}
34
- ></schmancy-route>
35
-
36
- <schmancy-route when="methodology-page"
37
- .component=${lazy(() => import('./pages/methodology.page'))}
38
- ></schmancy-route>
39
-
40
- <!-- Guarded route -->
41
- <schmancy-route when="app-index"
42
- .component=${lazy(() => import('./app/app.page'))}
43
- .guard=${firebaseAuthState$.pipe(
44
- map(u => !!u && !u.isAnonymous),
45
- takeUntil(this.disconnecting),
46
- )}
47
- @redirect=${() => area.push({
48
- component: 'landing-page',
49
- area: 'root',
50
- historyStrategy: 'replace',
51
- })}
52
- ></schmancy-route>
53
- </schmancy-area>
54
- </schmancy-scroll>
55
- </schmancy-surface>
56
- </schmancy-theme>
57
- `
58
- }
59
- }
60
- ```
61
-
62
- ```typescript
63
- // nested area — inside the app shell
64
- render() {
65
- return html`
66
- <schmancy-nav-drawer>
67
- <schmancy-nav-drawer-navbar width="180px">
68
- <schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-agents-page' })}>
69
- Agents
70
- </schmancy-list-item>
71
- <schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-knowledge-page' })}>
72
- Knowledge
73
- </schmancy-list-item>
74
- </schmancy-nav-drawer-navbar>
75
-
76
- <schmancy-nav-drawer-content>
77
- <schmancy-area name="aria" default="aria-knowledge-page">
78
- <schmancy-route when="aria-agents-page" .component=${lazy(() => import('./pages/agents'))}></schmancy-route>
79
- <schmancy-route when="aria-knowledge-page" .component=${lazy(() => import('./pages/knowledge'))}></schmancy-route>
80
- <schmancy-route when="aria-templates-page" .component=${lazy(() => import('./pages/templates'))}></schmancy-route>
81
- </schmancy-area>
82
- </schmancy-nav-drawer-content>
83
- </schmancy-nav-drawer>
84
- `
85
- }
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>
86
32
  ```
87
33
 
88
- ## `schmancy-area` Properties
34
+ ## `schmancy-area` properties
89
35
 
90
- | Property | Type | Required | Description |
91
- |----------|------|----------|-------------|
92
- | `name` | string | | Unique area identifier referenced in `area.push({ area: name })` |
93
- | `default` | `RouteComponent \| string` | — | Fallback when no route matches — prefer `lazy()` |
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 |
94
40
 
95
- ## `schmancy-route` Properties
41
+ ## `schmancy-route` properties
96
42
 
97
- | Property | Type | Required | Description |
98
- |----------|------|----------|-------------|
99
- | `when` | string | | **Must exactly match** a `@customElement('tag')` tag name |
100
- | `component` | `RouteComponent` | | Class, tag name, or `lazy()` wrapper |
101
- | `guard` | `Observable<boolean>` | — | When emits `false`, route blocks and fires `@redirect` |
102
- | `exact` | boolean | — | Strict-equality matching |
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 |
103
49
 
104
- ## `area` service (imperative API)
50
+ ## `area` service
105
51
 
106
52
  ```typescript
107
53
  import { area } from '@mhmo91/schmancy'
108
54
 
109
55
  area.push({
110
- area: 'root', // target area name
111
- component: 'app-index', // tag name (or class reference)
112
- params?: { id: '123' }, // pushed onto area.params()
56
+ area: 'root',
57
+ component: 'app-index',
58
+ params?: { id: '123' },
113
59
  historyStrategy?: 'push' | 'replace' | 'silent',
114
60
  })
115
61
  ```
116
62
 
117
63
  `historyStrategy`:
118
- - `'push'` (default) — browser back button returns to previous route
119
- - `'replace'` — overwrites current history entry (use after guards / redirects)
120
- - `'silent'` — changes the area without adding any history (transient state)
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
121
67
 
122
68
  ### Subscribe to route state
123
- ```typescript
124
- connectedCallback() {
125
- super.connectedCallback()
126
69
 
127
- area.on('root').pipe(
128
- takeUntil(this.disconnecting),
129
- ).subscribe(route => {
130
- console.log('root area is now:', route.component)
131
- })
70
+ ```typescript
71
+ area.on('root').pipe(
72
+ takeUntil(this.disconnecting),
73
+ ).subscribe(route => { /* route.component, route.params */ })
132
74
 
133
- area.params<{ id: string }>('detail').pipe(
134
- takeUntil(this.disconnecting),
135
- ).subscribe(params => this.loadItem(params.id))
136
- }
75
+ area.params<{ id: string }>('detail').pipe(
76
+ takeUntil(this.disconnecting),
77
+ ).subscribe(params => this.loadItem(params.id))
137
78
  ```
138
79
 
139
- ## Lazy Loading
140
-
141
- Code-split your routes. `lazy()` returns a preloadable reference.
80
+ ## Lazy loading
142
81
 
143
82
  ```typescript
144
83
  import { lazy } from '@mhmo91/schmancy'
145
-
146
84
  const HomePage = lazy(() => import('./home.page'))
147
85
 
148
- // Optional: preload on hover
149
- <schmancy-button
150
- @mouseenter=${() => HomePage.preload()}
151
- @click=${() => area.push({ area: 'root', component: 'home-page' })}
152
- >
153
- Home
154
- </schmancy-button>
86
+ // Optional preload
87
+ html`<button @mouseenter=${() => HomePage.preload()}>Home</button>`
155
88
  ```
156
89
 
157
- ## Guards — the production pattern
90
+ ## Guards
158
91
 
159
- Guards are **RxJS Observables**, not booleans. This lets auth state flow through naturally.
92
+ `guard` is an Observable<boolean>.
160
93
 
161
- ```typescript
162
- import { firebaseAuthState$ } from './contexts/user.context'
94
+ - Emits `true` → route renders.
95
+ - Emits `false` route dispatches a `redirect` event. Handle it with `area.push(...)`.
163
96
 
97
+ Auth guard:
98
+
99
+ ```typescript
164
100
  <schmancy-route when="app-index"
165
- .component=${lazy(() => import('./app/app.page'))}
166
- .guard=${firebaseAuthState$.pipe(
167
- map(user => !!user && !user.isAnonymous),
101
+ .component=${lazy(() => import('./app'))}
102
+ .guard=${authState$.pipe(
103
+ map(u => !!u),
168
104
  takeUntil(this.disconnecting),
169
105
  )}
170
106
  @redirect=${() => area.push({
171
- component: 'landing-page',
172
- area: 'root',
173
- historyStrategy: 'replace',
174
- })}
175
- ></schmancy-route>
107
+ component: 'home-page', area: 'root', historyStrategy: 'replace',
108
+ })}></schmancy-route>
176
109
  ```
177
110
 
178
- - `guard` emits `true` → route renders.
179
- - `guard` emits `false` → Schmancy fires a `redirect` event on the route; handle it with `area.push(...)` using `historyStrategy: 'replace'` so the blocked route doesn't stay in history.
180
-
181
- ## Rules
111
+ Compound guard (multiple streams):
182
112
 
183
- 1. `when="tag-name"` **must exactly match** `@customElement('tag-name')` on the component's class.
184
- 2. Every route component should extend `$LitElement` and use `takeUntil(this.disconnecting)` in subscriptions.
185
- 3. Route components are responsible for their own scroll/focus handling on mount.
186
- 4. When calling `area.push` after auth guards or side-effectful redirects, use `historyStrategy: 'replace'`.
187
- 5. Nested areas are not just allowed — they're the default for any app with a shell + sub-views.
188
-
189
- ## Common recipes
190
-
191
- ### Redirect after sign-in
192
113
  ```typescript
193
- await signIn(email, password)
194
- area.push({ component: 'app-index', area: 'root', historyStrategy: 'replace' })
114
+ .guard=${combineLatest([permissions$, orgContext.$]).pipe(
115
+ takeUntil(this.disconnecting),
116
+ map(([perms, org]) => perms.includes('billing.view') && org?.billing?.configured),
117
+ )}
195
118
  ```
196
119
 
197
- ### Silent state swap (no history pollution)
198
- ```typescript
199
- // e.g. swapping between auth screens without adding history
200
- area.push({ component: 'signup-form', area: 'sign', historyStrategy: 'silent' })
201
- ```
120
+ ## Nested areas
202
121
 
203
- ### Click-driven sub-nav
204
- ```typescript
205
- <schmancy-list-item @click=${() => area.push({ area: 'aria', component: 'aria-agents-page' })}>
206
- Agents
207
- </schmancy-list-item>
208
- ```
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.
209
123
 
210
- ### Preload routes on hover
211
- ```typescript
212
- const DashboardPage = lazy(() => import('./dashboard.page'))
124
+ ```html
125
+ <!-- outer -->
126
+ <schmancy-area name="root">
127
+ <schmancy-route when="app-index" .component=${AppShell}></schmancy-route>
128
+ </schmancy-area>
213
129
 
214
- html`<a @mouseenter=${() => DashboardPage.preload()} @click=${() => area.push({ area: 'root', component: 'dashboard-page' })}>Dashboard</a>`
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>
215
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)`.
package/ai/mailbox.md CHANGED
@@ -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
 
package/ai/mixins.md CHANGED
@@ -1,17 +1,16 @@
1
- # $LitElement — Base Class Foundation
1
+ # `$LitElement`
2
2
 
3
- > **Every Schmancy component extends `$LitElement`. No exceptions.**
4
- > It wires RxJS cleanup, Tailwind, cross-shadow discovery, and a few quality-of-life helpers into every element — so you never write that plumbing yourself.
3
+ Base class for Schmancy components. Extends `LitElement` with RxJS cleanup, Tailwind support, and cross-shadow discovery.
5
4
 
6
- ## The minimal component
5
+ ## Usage
7
6
 
8
7
  ```typescript
9
8
  import { $LitElement } from '@mhmo91/schmancy/mixins'
10
9
  import { customElement } from 'lit/decorators.js'
11
10
  import { css, html } from 'lit'
12
11
 
13
- @customElement('my-card')
14
- class MyCard extends $LitElement(css`
12
+ @customElement('my-component')
13
+ class MyComponent extends $LitElement(css`
15
14
  :host { display: block; }
16
15
  `) {
17
16
  render() {
@@ -20,147 +19,69 @@ class MyCard extends $LitElement(css`
20
19
  }
21
20
  ```
22
21
 
23
- That's it. You now get the five things below for free.
22
+ `$LitElement(style?)` accepts either a Lit `css` tagged literal or a string (e.g. SCSS imported with `?inline`).
23
+
24
+ ## Provided members
24
25
 
25
- ## What `$LitElement` gives you
26
+ ### `disconnecting: Subject<void>`
27
+ Emits once when the element disconnects. Pair with `takeUntil` for cleanup:
26
28
 
27
- ### 1. `disconnecting` — automatic RxJS cleanup
28
29
  ```typescript
29
30
  connectedCallback() {
30
31
  super.connectedCallback()
31
-
32
- userContext.$.pipe(
32
+ someObservable$.pipe(
33
33
  takeUntil(this.disconnecting),
34
- ).subscribe(user => this.user = user)
35
- }
36
- ```
37
-
38
- `disconnecting` is a `Subject<void>` that emits once when the element is detached from the DOM. Paired with `takeUntil`, it makes the entire Schmancy codebase manual-unsubscribe-free.
39
-
40
- **This is the single most-used line in a Schmancy app.** If you see an RxJS pipe without `takeUntil(this.disconnecting)` — it's a leak.
41
-
42
- ### 2. `classMap(obj)` — space-splitting enhanced
43
- ```typescript
44
- render() {
45
- return html`
46
- <div class=${this.classMap({
47
- 'flex items-center gap-2': true,
48
- 'bg-primary-default': this.active,
49
- 'opacity-50 pointer-events-none': this.disabled,
50
- })}>
51
-
52
- </div>
53
- `
54
- }
55
- ```
56
-
57
- Unlike standard Lit `classMap`, keys can be **space-separated** ("flex items-center gap-2"). Combined with Tailwind, you write natural class strings instead of one-class-per-key.
58
-
59
- **Hard rule:** `class=${this.classMap(...)}` must be the *sole* expression in `class=`. You cannot mix it with string interpolation (` class="foo ${this.classMap(...)}"`) — Lit will fail silently.
60
-
61
- ### 3. `styleMap(obj)` — inline styles (passthrough)
62
- ```typescript
63
- render() {
64
- return html`
65
- <div style=${this.styleMap({
66
- width: `${this.size}px`,
67
- opacity: this.visible ? 1 : 0,
68
- })}></div>
69
- `
34
+ ).subscribe()
70
35
  }
71
36
  ```
72
37
 
73
- Direct passthrough to Lit's `styleMap` directive, exposed as a method so you don't have to import it in every component.
38
+ ### `classMap(obj)`
39
+ Wraps Lit's `classMap` so keys can be space-separated:
74
40
 
75
- ### 4. `discover<T>(tag)` — cross-shadow component lookup
76
41
  ```typescript
77
- connectedCallback() {
78
- super.connectedCallback()
79
-
80
- this.discover<SchmancyDialog>('schmancy-dialog').pipe(
81
- takeUntil(this.disconnecting),
82
- ).subscribe(dialog => dialog?.setDefaultAction('confirm'))
83
- }
42
+ html`<div class=${this.classMap({
43
+ 'flex items-center gap-2': true,
44
+ 'opacity-50': this.disabled,
45
+ })}></div>`
84
46
  ```
85
47
 
86
- Broadcasts a `{tag}-where-are-you` event. Any mounted `$LitElement` with that tag responds with itself. Works **across shadow DOM boundaries** — zero traversal.
48
+ Must be the only expression in `class=` don't mix with string interpolation.
87
49
 
88
- ### 5. Auto-response to discovery events
89
- Every `$LitElement` automatically answers `{its-tag}-where-are-you` by dispatching `{its-tag}-here-i-am` with `{ detail: { component: this } }`. You opt in by extending — opt out by not.
90
-
91
- ## Tailwind support
92
-
93
- Styles you import are pre-processed through the Schmancy Tailwind pipeline. Tailwind utility classes work in both the host and slotted content. All theme CSS variables (`--schmancy-sys-color-primary-default`, etc.) resolve inside the component's shadow root.
50
+ ### `styleMap(obj)`
51
+ Passthrough to Lit's `styleMap`.
94
52
 
95
53
  ```typescript
96
- // Works out of the box
97
- render() {
98
- return html`<div class="flex items-center gap-2 text-primary-default">…</div>`
99
- }
54
+ html`<div style=${this.styleMap({ width: `${w}px` })}></div>`
100
55
  ```
101
56
 
102
- ## Extending with SCSS
103
-
104
- For complex styling, import a `.scss?inline` file and pass it to `$LitElement`:
57
+ ### `discover<T>(tag): Observable<T | null>`
58
+ Find another Schmancy component by tag via event-based handshake. Works across shadow DOM.
105
59
 
106
60
  ```typescript
107
- import style from './my-card.scss?inline'
108
-
109
- @customElement('my-card')
110
- class MyCard extends $LitElement(style) {
111
- // SCSS features: nesting, mixins, @layer
112
- }
61
+ this.discover<SchmancyDialog>('schmancy-dialog').pipe(
62
+ takeUntil(this.disconnecting),
63
+ ).subscribe(dialog => dialog?.setDefaultAction('confirm'))
113
64
  ```
114
65
 
115
- Simple components use template-literal CSS; complex ones use SCSS.
116
-
117
- ## Standard component shape
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 } }`.
118
68
 
119
- This is the skeleton 90% of Schmancy components follow:
69
+ ## Component skeleton
120
70
 
121
71
  ```typescript
122
- import { $LitElement } from '@mhmo91/schmancy/mixins'
123
- import { css, html } from 'lit'
124
- import { customElement, property, state } from 'lit/decorators.js'
125
- import { Subject, takeUntil } from 'rxjs'
126
-
127
72
  @customElement('my-component')
128
- export class MyComponent extends $LitElement(css`
129
- :host { display: block; }
130
- `) {
131
- // 1. Public API — reflected / typed
73
+ export class MyComponent extends $LitElement(css`:host { display: block }`) {
132
74
  @property({ type: String, reflect: true }) variant: 'a' | 'b' = 'a'
133
- @property({ type: Boolean, reflect: true }) disabled = false
134
-
135
- // 2. Internal state
136
75
  @state() private _open = false
137
76
 
138
- // 3. Private RxJS subjects (if needed)
139
- private _value$ = new Subject<string>()
140
-
141
- // 4. Lifecycle
142
77
  connectedCallback() {
143
78
  super.connectedCallback()
144
- this._value$.pipe(
145
- debounceTime(150),
146
- takeUntil(this.disconnecting),
147
- ).subscribe(v => this.handleValue(v))
79
+ // subscriptions here, with takeUntil(this.disconnecting)
148
80
  }
149
81
 
150
- // 5. Rendering
151
82
  render() {
152
- return html`
153
- <div class=${this.classMap({
154
- 'flex items-center': true,
155
- 'opacity-50': this.disabled,
156
- })}>
157
- <slot></slot>
158
- </div>
159
- `
83
+ return html`<slot></slot>`
160
84
  }
161
-
162
- // 6. Public imperative API (if any)
163
- public open() { this._open = true }
164
85
  }
165
86
 
166
87
  declare global {
@@ -170,32 +91,9 @@ declare global {
170
91
  }
171
92
  ```
172
93
 
173
- Guarantees from this shape:
174
- - Every subscription dies with the element.
175
- - Tailwind + theme tokens work.
176
- - Component is discoverable from anywhere via `discover('my-component')`.
177
- - Declared in the global tag map for TypeScript.
178
-
179
- ## Why not `LitElement` directly?
180
-
181
- You can, but you'll re-implement:
182
- - Manual unsubscribe handling in `disconnectedCallback` for every `Observable`.
183
- - `classMap` space-splitting.
184
- - Tailwind variable wiring.
185
- - Cross-shadow discovery.
186
-
187
- `$LitElement` is 200 lines of common-denominator plumbing that keeps apps consistent. Using it is the convention; not using it is the outlier.
188
-
189
94
  ## Rules
190
95
 
191
- 1. **Every custom element extends `$LitElement(style?)`.**
192
- 2. **Every RxJS subscription ends with `.pipe(takeUntil(this.disconnecting))`** — or you have a leak.
193
- 3. **Call `super.connectedCallback()` and `super.disconnectedCallback()`** when you override them.
194
- 4. **Don't mix `classMap` with string interpolation** in the same attribute.
195
- 5. **Prefer `ref(createRef())` over `querySelector`** for your own shadow tree.
196
- 6. **Register in `HTMLElementTagNameMap`** for TypeScript autocompletion.
197
-
198
- ## See also
199
- - [store](./store.md) — contexts pair with `takeUntil(this.disconnecting)` for auto-cleaning subscriptions.
200
- - [area](./area.md) — route components all extend `$LitElement`.
201
- - [discovery](./discovery.md) — the discovery events `$LitElement` handles automatically.
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.