@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
@@ -1,338 +0,0 @@
1
- # Schmancy Area
2
-
3
- A lightweight, reactive routing and state management system for web components.
4
-
5
- ## Overview
6
-
7
- Schmancy Area simplifies client-side routing for web component applications by providing a seamless way to handle navigation, component loading, and state management with a minimal API.
8
-
9
- ```typescript
10
- // Define router outlets in your template
11
- <schmancy-area name="main" default="home-page"></schmancy-area>
12
-
13
- // Navigate to a component
14
- area.push({
15
- component: 'user-profile',
16
- area: 'main',
17
- params: { userId: '123' }
18
- });
19
-
20
- // Subscribe to changes
21
- area.on('main').subscribe(route => {
22
- console.log(`Component: ${route.component}`);
23
- });
24
- ```
25
-
26
- ## Installation
27
-
28
- ```bash
29
- npm install @schmancy/area
30
- ```
31
-
32
- ## Basic Usage
33
-
34
- ### Define Router Areas
35
-
36
- Place `<schmancy-area>` elements wherever you want dynamic components to render:
37
-
38
- ```html
39
- <!-- Main content area -->
40
- <schmancy-area name="main" default="home-page"></schmancy-area>
41
-
42
- <!-- Optional additional areas -->
43
- <schmancy-area name="sidebar"></schmancy-area>
44
- <schmancy-area name="modal"></schmancy-area>
45
- ```
46
-
47
- Each area is an independent router outlet that can display different components.
48
-
49
- ### Navigate Between Views
50
-
51
- ```typescript
52
- import { area } from '@schmancy/area';
53
-
54
- // Using a tag name
55
- area.push({
56
- component: 'user-profile',
57
- area: 'main',
58
- params: { userId: '123' }
59
- });
60
-
61
- // Using a component constructor
62
- area.push({
63
- component: UserProfileComponent,
64
- area: 'main',
65
- state: { view: 'details' }
66
- });
67
-
68
- // Using a component instance
69
- const customElement = document.createElement('custom-element');
70
- customElement.setAttribute('custom-attr', 'value');
71
- area.push({
72
- component: customElement,
73
- area: 'main'
74
- });
75
-
76
- // Using a dynamic import (lazy-loading)
77
- area.push({
78
- component: import('./components/heavy-dashboard.js'),
79
- area: 'main'
80
- });
81
- ```
82
-
83
- ### Subscribe to Area Changes
84
-
85
- The area service provides a reactive API for subscribing to navigation changes:
86
-
87
- ```typescript
88
- // Subscribe to a specific area
89
- area.on('main').subscribe(route => {
90
- console.log('Component:', route.component);
91
- console.log('Params:', route.params);
92
- console.log('State:', route.state);
93
- });
94
-
95
- // Monitor all active routes
96
- area.all().subscribe(routes => {
97
- console.log('Active routes:', routes);
98
- });
99
- ```
100
-
101
- ### Type-Safe State and Parameters
102
-
103
- Use TypeScript generics for type safety:
104
-
105
- ```typescript
106
- // Type-safe state
107
- interface UserState {
108
- name: string;
109
- permissions: string[];
110
- }
111
-
112
- area.getState<UserState>('user').subscribe(state => {
113
- console.log(`User: ${state.name}`);
114
- console.log(`Permissions: ${state.permissions.join(', ')}`);
115
- });
116
-
117
- // Type-safe parameters
118
- area.params<{ id: string }>('user').subscribe(params => {
119
- fetchUser(params.id);
120
- });
121
-
122
- // Get a specific parameter value
123
- area.param<string>('user', 'id').subscribe(id => {
124
- console.log('User ID:', id);
125
- });
126
- ```
127
-
128
- ## Advanced Features
129
-
130
- ### History Strategy Options
131
-
132
- Control how the browser history is updated:
133
-
134
- ```typescript
135
- area.push({
136
- component: 'user-profile',
137
- area: 'main',
138
- historyStrategy: 'push' // Adds a new history entry (default)
139
- });
140
-
141
- area.push({
142
- component: 'settings',
143
- area: 'main',
144
- historyStrategy: 'replace' // Replaces the current history entry
145
- });
146
-
147
- area.push({
148
- component: 'sidebar-menu',
149
- area: 'sidebar',
150
- historyStrategy: 'silent' // No history change
151
- });
152
-
153
- area.push({
154
- component: 'menu',
155
- area: 'popup',
156
- historyStrategy: 'pop' // Similar to replace
157
- });
158
- ```
159
-
160
- ### Managing Query Parameters
161
-
162
- Clear specific query parameters during navigation:
163
-
164
- ```typescript
165
- area.push({
166
- component: 'search-results',
167
- area: 'main',
168
- params: { query: 'new-search' },
169
- clearQueryParams: ['page', 'sort'] // Removes these query params
170
- });
171
- ```
172
-
173
- ### Remove Areas
174
-
175
- Remove an area from the current state:
176
-
177
- ```typescript
178
- // Remove the 'modal' area
179
- area.pop('modal');
180
- ```
181
-
182
- ### DOM Event Listening
183
-
184
- For non-RxJS consumers, area changes also dispatch DOM events:
185
-
186
- ```javascript
187
- // Format: schmancy-area-${areaName}-changed
188
- window.addEventListener('schmancy-area-main-changed', event => {
189
- const { component, params, state } = event.detail;
190
- updateUI(component, params, state);
191
- });
192
- ```
193
-
194
- ## API Reference
195
-
196
- ### SchmancyArea Component
197
-
198
- ```typescript
199
- @customElement('schmancy-area')
200
- export class SchmancyArea extends LitElement {
201
- /**
202
- * The name of the router outlet
203
- * @required
204
- */
205
- @property() name!: string;
206
-
207
- /**
208
- * Default component to display if none is specified
209
- * Can be a tag name, component constructor, or template
210
- */
211
- @property() default!: string | Promise<NodeModule> | CustomElementConstructor | TemplateResult<1>;
212
- }
213
- ```
214
-
215
- ### Area Service
216
-
217
- ```typescript
218
- // Navigation
219
- area.push(routeAction: RouteAction): void
220
- area.pop(areaName: string): void
221
-
222
- // Subscriptions
223
- area.on(areaName: string, skipCurrent?: boolean): Observable<ActiveRoute>
224
- area.all(skipCurrent?: boolean): Observable<Map<string, ActiveRoute>>
225
- area.getState<T>(areaName: string): Observable<T>
226
- area.params<T>(areaName: string): Observable<T>
227
- area.param<T>(areaName: string, key: string): Observable<T>
228
-
229
- // URL State
230
- area.state: Record<string, unknown> // Current URL state object
231
- ```
232
-
233
- ### Types
234
-
235
- ```typescript
236
- // Route Action - used for navigation
237
- interface RouteAction {
238
- component: CustomElementConstructor | string | HTMLElement | Promise<NodeModule>;
239
- area: string;
240
- state?: Record<string, unknown>;
241
- params?: Record<string, unknown>;
242
- historyStrategy?: 'push' | 'replace' | 'pop' | 'silent';
243
- clearQueryParams?: string[] | null;
244
- }
245
-
246
- // Active Route - current state of an area
247
- interface ActiveRoute {
248
- component: string;
249
- area: string;
250
- state?: Record<string, unknown>;
251
- params?: Record<string, unknown>;
252
- }
253
- ```
254
-
255
- ## Integration with Other Schmancy Components
256
-
257
- Schmancy Area works seamlessly with:
258
- - **Schmancy Store** for more complex state management
259
- - **Schmancy Layout** for responsive layouts
260
- - **Schmancy Teleport** for advanced component transportation
261
- - **Schmancy Sheet** for modal overlays
262
-
263
- ## Examples
264
-
265
- ### Basic Navigation
266
-
267
- ```typescript
268
- // Define router outlets
269
- <schmancy-area name="main" default="home-page"></schmancy-area>
270
-
271
- // Navigate to a component
272
- area.push({
273
- component: 'user-profile',
274
- area: 'main'
275
- });
276
- ```
277
-
278
- ### Parameters and State
279
-
280
- ```typescript
281
- // Navigate with params and state
282
- area.push({
283
- component: 'product-detail',
284
- area: 'main',
285
- params: { productId: '12345' },
286
- state: { showReviews: true }
287
- });
288
-
289
- // Access params and state
290
- area.param<string>('main', 'productId').subscribe(id => {
291
- fetchProduct(id);
292
- });
293
-
294
- area.getState<{ showReviews: boolean }>('main').subscribe(state => {
295
- if (state.showReviews) {
296
- loadReviews();
297
- }
298
- });
299
- ```
300
-
301
- ### Multiple Independent Areas
302
-
303
- ```typescript
304
- // Define multiple areas
305
- <schmancy-area name="main"></schmancy-area>
306
- <schmancy-area name="sidebar"></schmancy-area>
307
- <schmancy-area name="modal"></schmancy-area>
308
-
309
- // Update each area independently
310
- area.push({ component: 'product-list', area: 'main' });
311
- area.push({ component: 'filter-panel', area: 'sidebar' });
312
- area.push({ component: 'quick-view', area: 'modal', params: { id: '123' } });
313
-
314
- // Remove a modal
315
- area.pop('modal');
316
- ```
317
-
318
- ### Navigation Guards
319
-
320
- ```typescript
321
- area.on('protected-area').pipe(
322
- switchMap(route => {
323
- if (!isAuthenticated()) {
324
- area.push({ component: 'login-page', area: 'main' });
325
- return EMPTY;
326
- }
327
- return of(route);
328
- })
329
- ).subscribe(handleProtectedRoute);
330
- ```
331
-
332
- ## Best Practices
333
-
334
- 1. **Define clear area responsibilities** - Each area should have a well-defined purpose
335
- 2. **Use type-safe state and params** - Leverage TypeScript generics for type safety
336
- 3. **Unsubscribe from observables** - Always clean up subscriptions in disconnectedCallback()
337
- 4. **Be consistent with history strategies** - Use the same strategy for similar navigation patterns
338
- 5. **Consider using default components** - Provide fallback components for empty areas
@@ -1,360 +0,0 @@
1
- # Schmancy Area Router - Developer Guide
2
-
3
- ## Quick Start Examples
4
-
5
- ### Example 1: Basic Navigation
6
-
7
- ```typescript
8
- import { area, HISTORY_STRATEGY } from '@schmancy/area'
9
- import { LitElement, html } from 'lit'
10
- import { customElement } from 'lit/decorators.js'
11
-
12
- // Define your page components
13
- @customElement('page-home')
14
- class PageHome extends LitElement {
15
- render() {
16
- return html`<h1>Welcome Home!</h1>`
17
- }
18
- }
19
-
20
- @customElement('page-about')
21
- class PageAbout extends LitElement {
22
- render() {
23
- return html`<h1>About Us</h1>`
24
- }
25
- }
26
-
27
- // Main app with navigation
28
- @customElement('my-app')
29
- class MyApp extends LitElement {
30
- navigate(page: string) {
31
- area.push({
32
- area: 'main',
33
- component: `page-${page}`,
34
- historyStrategy: HISTORY_STRATEGY.push
35
- })
36
- }
37
-
38
- render() {
39
- return html`
40
- <nav>
41
- <button @click=${() => this.navigate('home')}>Home</button>
42
- <button @click=${() => this.navigate('about')}>About</button>
43
- </nav>
44
-
45
- <schmancy-area name="main" default="page-home"></schmancy-area>
46
- `
47
- }
48
- }
49
- ```
50
-
51
- ### Example 2: Route Parameters
52
-
53
- ```typescript
54
- @customElement('user-profile')
55
- class UserProfile extends LitElement {
56
- @state() userId = ''
57
- @state() userData: any = {}
58
-
59
- connectedCallback() {
60
- super.connectedCallback()
61
-
62
- // Subscribe to userId parameter
63
- area.param<string>('main', 'userId').subscribe(id => {
64
- if (id) {
65
- this.userId = id
66
- this.loadUserData(id)
67
- }
68
- })
69
- }
70
-
71
- async loadUserData(id: string) {
72
- // Fetch user data
73
- this.userData = await fetch(`/api/users/${id}`).then(r => r.json())
74
- }
75
-
76
- render() {
77
- return html`
78
- <div>
79
- <h1>User: ${this.userData.name}</h1>
80
- <p>ID: ${this.userId}</p>
81
- </div>
82
- `
83
- }
84
- }
85
-
86
- // Navigate with parameters
87
- area.push({
88
- area: 'main',
89
- component: 'user-profile',
90
- params: { userId: '12345' },
91
- historyStrategy: HISTORY_STRATEGY.push
92
- })
93
- ```
94
-
95
- ### Example 3: Persistent Form State
96
-
97
- ```typescript
98
- @customElement('contact-form')
99
- class ContactForm extends LitElement {
100
- @state() formData = {
101
- name: '',
102
- email: '',
103
- message: ''
104
- }
105
-
106
- connectedCallback() {
107
- super.connectedCallback()
108
-
109
- // Restore form state from route
110
- area.getState<typeof this.formData>('main').subscribe(state => {
111
- if (state) {
112
- this.formData = { ...this.formData, ...state }
113
- }
114
- })
115
- }
116
-
117
- updateField(field: string, value: string) {
118
- this.formData = { ...this.formData, [field]: value }
119
-
120
- // Save form state to route (replace to avoid history spam)
121
- area.push({
122
- area: 'main',
123
- component: 'contact-form',
124
- state: this.formData,
125
- historyStrategy: HISTORY_STRATEGY.replace
126
- })
127
- }
128
-
129
- render() {
130
- return html`
131
- <form>
132
- <input
133
- .value=${this.formData.name}
134
- @input=${(e: Event) => this.updateField('name', (e.target as HTMLInputElement).value)}
135
- placeholder="Name"
136
- />
137
- <input
138
- .value=${this.formData.email}
139
- @input=${(e: Event) => this.updateField('email', (e.target as HTMLInputElement).value)}
140
- placeholder="Email"
141
- />
142
- <textarea
143
- .value=${this.formData.message}
144
- @input=${(e: Event) => this.updateField('message', (e.target as HTMLTextAreaElement).value)}
145
- placeholder="Message"
146
- ></textarea>
147
- </form>
148
- `
149
- }
150
- }
151
- ```
152
-
153
- ### Example 4: Modal Router
154
-
155
- ```typescript
156
- @customElement('app-modal')
157
- class AppModal extends LitElement {
158
- @property() title = ''
159
- @property() content = ''
160
-
161
- connectedCallback() {
162
- super.connectedCallback()
163
-
164
- area.params<{title: string, content: string}>('modal').subscribe(params => {
165
- this.title = params.title || ''
166
- this.content = params.content || ''
167
- })
168
- }
169
-
170
- close() {
171
- area.pop('modal')
172
- }
173
-
174
- render() {
175
- return html`
176
- <div class="modal-backdrop" @click=${this.close}>
177
- <div class="modal-content" @click=${(e: Event) => e.stopPropagation()}>
178
- <h2>${this.title}</h2>
179
- <p>${this.content}</p>
180
- <button @click=${this.close}>Close</button>
181
- </div>
182
- </div>
183
- `
184
- }
185
- }
186
-
187
- // Open modal
188
- area.push({
189
- area: 'modal',
190
- component: 'app-modal',
191
- params: {
192
- title: 'Confirm Action',
193
- content: 'Are you sure you want to proceed?'
194
- },
195
- historyStrategy: HISTORY_STRATEGY.push
196
- })
197
-
198
- // In your main app template
199
- render() {
200
- return html`
201
- <main>
202
- <schmancy-area name="main" default="page-home"></schmancy-area>
203
- </main>
204
-
205
- ${this.modalOpen ? html`
206
- <schmancy-area name="modal"></schmancy-area>
207
- ` : ''}
208
- `
209
- }
210
- ```
211
-
212
- ### Example 5: Tab Navigation
213
-
214
- ```typescript
215
- @customElement('settings-page')
216
- class SettingsPage extends LitElement {
217
- @state() activeTab = 'general'
218
-
219
- connectedCallback() {
220
- super.connectedCallback()
221
-
222
- area.param<string>('main', 'tab').subscribe(tab => {
223
- this.activeTab = tab || 'general'
224
- })
225
- }
226
-
227
- switchTab(tab: string) {
228
- area.push({
229
- area: 'main',
230
- component: 'settings-page',
231
- params: { tab },
232
- historyStrategy: HISTORY_STRATEGY.push
233
- })
234
- }
235
-
236
- render() {
237
- return html`
238
- <div class="tabs">
239
- <button
240
- class=${this.activeTab === 'general' ? 'active' : ''}
241
- @click=${() => this.switchTab('general')}
242
- >
243
- General
244
- </button>
245
- <button
246
- class=${this.activeTab === 'privacy' ? 'active' : ''}
247
- @click=${() => this.switchTab('privacy')}
248
- >
249
- Privacy
250
- </button>
251
- <button
252
- class=${this.activeTab === 'notifications' ? 'active' : ''}
253
- @click=${() => this.switchTab('notifications')}
254
- >
255
- Notifications
256
- </button>
257
- </div>
258
-
259
- <div class="tab-content">
260
- ${this.activeTab === 'general' ? html`
261
- <h3>General Settings</h3>
262
- <!-- General settings content -->
263
- ` : this.activeTab === 'privacy' ? html`
264
- <h3>Privacy Settings</h3>
265
- <!-- Privacy settings content -->
266
- ` : html`
267
- <h3>Notification Settings</h3>
268
- <!-- Notification settings content -->
269
- `}
270
- </div>
271
- `
272
- }
273
- }
274
- ```
275
-
276
- ## Common Patterns
277
-
278
- ### Protected Routes
279
-
280
- ```typescript
281
- // Check authentication before navigation
282
- function navigateToProtected(component: string) {
283
- if (!isAuthenticated()) {
284
- area.push({
285
- area: 'main',
286
- component: 'login-page',
287
- state: { redirect: component }
288
- })
289
- return
290
- }
291
-
292
- area.push({
293
- area: 'main',
294
- component,
295
- historyStrategy: HISTORY_STRATEGY.push
296
- })
297
- }
298
- ```
299
-
300
- ### Nested Routes
301
-
302
- ```typescript
303
- // Parent component with sub-area
304
- @customElement('dashboard-layout')
305
- class DashboardLayout extends LitElement {
306
- render() {
307
- return html`
308
- <div class="dashboard">
309
- <aside class="sidebar">
310
- <nav><!-- Dashboard navigation --></nav>
311
- </aside>
312
- <main>
313
- <schmancy-area name="dashboard-content" default="dashboard-overview"></schmancy-area>
314
- </main>
315
- </div>
316
- `
317
- }
318
- }
319
- ```
320
-
321
- ### Route Guards
322
-
323
- ```typescript
324
- // Intercept navigation
325
- const originalPush = area.push.bind(area)
326
- area.push = (route) => {
327
- // Check permissions
328
- if (route.component === 'admin-panel' && !hasAdminRole()) {
329
- console.warn('Access denied')
330
- return
331
- }
332
-
333
- // Proceed with navigation
334
- originalPush(route)
335
- }
336
- ```
337
-
338
- ### Query Parameters
339
-
340
- ```typescript
341
- // Handle query params separately
342
- const urlParams = new URLSearchParams(window.location.search)
343
- const searchQuery = urlParams.get('q')
344
-
345
- // Include in navigation
346
- area.push({
347
- area: 'main',
348
- component: 'search-results',
349
- params: { query: searchQuery },
350
- clearQueryParams: ['q'] // Optional: clear from URL
351
- })
352
- ```
353
-
354
- ## Tips & Tricks
355
-
356
- 1. **Preload Components**: Import components at app start for instant navigation
357
- 2. **Use Replace for Filters**: When updating filters/sorting, use `replace` strategy
358
- 3. **Handle Deep Links**: Always handle direct navigation to any route
359
- 4. **Clean Subscriptions**: Unsubscribe in `disconnectedCallback`
360
- 5. **Type Your Routes**: Create interfaces for your route params and state