@mhmo91/schmancy 0.9.27 → 0.10.1

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 (1041) hide show
  1. package/custom-elements.json +987 -2259
  2. package/dist/active-host-0of-L858.cjs +1 -0
  3. package/dist/active-host-0of-L858.cjs.map +1 -0
  4. package/dist/active-host-D-a1X-nq.js +57 -0
  5. package/dist/active-host-D-a1X-nq.js.map +1 -0
  6. package/dist/agent/{flow-CvG1fLW5.js.map → flow-CaPi2G8y.js.map} +1 -1
  7. package/dist/agent/{rolldown-runtime-BIIoCavz.js → rolldown-runtime-DsMetpgY.js} +2 -9
  8. package/dist/agent/schmancy.agent.js +6465 -7794
  9. package/dist/agent/schmancy.agent.js.map +1 -1
  10. package/dist/agent/schmancy.manifest.json +262 -1462
  11. package/dist/agent/{vendor-highlight-Dow87ZL_.js → vendor-highlight-CHJZQQB7.js} +85 -90
  12. package/dist/agent/{vendor-highlight-Dow87ZL_.js.map → vendor-highlight-CHJZQQB7.js.map} +1 -1
  13. package/dist/agent/{vendor-jsqr-Bl4iAtKC.js → vendor-jsqr-r7GNh4P3.js} +1 -1
  14. package/dist/agent/{vendor-jsqr-Bl4iAtKC.js.map → vendor-jsqr-r7GNh4P3.js.map} +1 -1
  15. package/dist/agent/{vendor-material-color-DcL7ZPxx.js.map → vendor-material-color-Be96dpGE.js.map} +1 -1
  16. package/dist/{animation-hXFClrIn.js.map → animation-BK-8BwY8.js.map} +1 -1
  17. package/dist/{animation-CQRdLgzX.cjs.map → animation-CO_Csq84.cjs.map} +1 -1
  18. package/dist/{area-BGBCMC79.js → area-C_J4qxKO.js} +20 -15
  19. package/dist/area-C_J4qxKO.js.map +1 -0
  20. package/dist/area-ISC8Mdkh.cjs +12 -0
  21. package/dist/area-ISC8Mdkh.cjs.map +1 -0
  22. package/dist/area.cjs +1 -1
  23. package/dist/area.js +2 -2
  24. package/dist/{audio-Dvr-RBzE.cjs → audio-DZN8HsSS.cjs} +1 -1
  25. package/dist/{audio-Dvr-RBzE.cjs.map → audio-DZN8HsSS.cjs.map} +1 -1
  26. package/dist/{audio-ql6nvY0y.js → audio-Tmre4WyL.js} +1 -1
  27. package/dist/{audio-ql6nvY0y.js.map → audio-Tmre4WyL.js.map} +1 -1
  28. package/dist/audio.cjs +1 -1
  29. package/dist/audio.js +2 -2
  30. package/dist/autocomplete-BDF85W0J.cjs +115 -0
  31. package/dist/autocomplete-BDF85W0J.cjs.map +1 -0
  32. package/dist/{autocomplete-C2P0Soht.js → autocomplete-CM8VqW9S.js} +29 -26
  33. package/dist/autocomplete-CM8VqW9S.js.map +1 -0
  34. package/dist/autocomplete.cjs +1 -1
  35. package/dist/autocomplete.js +1 -1
  36. package/dist/avatar.cjs +7 -0
  37. package/dist/avatar.cjs.map +1 -0
  38. package/dist/avatar.js +87 -0
  39. package/dist/avatar.js.map +1 -0
  40. package/dist/badge.cjs +1 -1
  41. package/dist/badge.js +1 -1
  42. package/dist/boat-CpXe-Qto.cjs +80 -0
  43. package/dist/boat-CpXe-Qto.cjs.map +1 -0
  44. package/dist/{boat-DXZ0k7oa.js → boat-DxYNK4xT.js} +43 -54
  45. package/dist/boat-DxYNK4xT.js.map +1 -0
  46. package/dist/boat.cjs +1 -1
  47. package/dist/boat.js +1 -1
  48. package/dist/breadcrumb.cjs +4 -4
  49. package/dist/breadcrumb.cjs.map +1 -1
  50. package/dist/breadcrumb.js +16 -11
  51. package/dist/breadcrumb.js.map +1 -1
  52. package/dist/{busy-iRjq6Nvd.js → busy-CP-gRfAP.js} +14 -9
  53. package/dist/busy-CP-gRfAP.js.map +1 -0
  54. package/dist/{busy-DGYhpTnO.cjs → busy-Dma4gtnz.cjs} +4 -4
  55. package/dist/busy-Dma4gtnz.cjs.map +1 -0
  56. package/dist/busy.cjs +1 -1
  57. package/dist/busy.js +1 -1
  58. package/dist/button.cjs +24 -24
  59. package/dist/button.cjs.map +1 -1
  60. package/dist/button.js +42 -37
  61. package/dist/button.js.map +1 -1
  62. package/dist/{card-wUTjx0EC.js → card-Bv--HeGO.js} +41 -30
  63. package/dist/card-Bv--HeGO.js.map +1 -0
  64. package/dist/{card-DjYnCckw.cjs → card-ClroODSK.cjs} +6 -6
  65. package/dist/card-ClroODSK.cjs.map +1 -0
  66. package/dist/card.cjs +1 -1
  67. package/dist/card.js +1 -1
  68. package/dist/charts.cjs +5 -5
  69. package/dist/charts.cjs.map +1 -1
  70. package/dist/charts.js +21 -16
  71. package/dist/charts.js.map +1 -1
  72. package/dist/{checkbox-VBSenxgb.js → checkbox-1gQOOcja.js} +86 -82
  73. package/dist/checkbox-1gQOOcja.js.map +1 -0
  74. package/dist/checkbox-DvTZXN1Y.cjs +39 -0
  75. package/dist/checkbox-DvTZXN1Y.cjs.map +1 -0
  76. package/dist/checkbox.cjs +1 -1
  77. package/dist/checkbox.js +1 -1
  78. package/dist/{chips-D6ptH5re.cjs → chips-Bw7FNDpX.cjs} +19 -19
  79. package/dist/chips-Bw7FNDpX.cjs.map +1 -0
  80. package/dist/{chips-BDS9lkPa.js → chips-wkfKzf_e.js} +146 -136
  81. package/dist/chips-wkfKzf_e.js.map +1 -0
  82. package/dist/chips.cjs +1 -1
  83. package/dist/chips.js +2 -2
  84. package/dist/{code-highlight-BzRmBZzz.cjs → code-highlight-CJzuds4c.cjs} +15 -15
  85. package/dist/code-highlight-CJzuds4c.cjs.map +1 -0
  86. package/dist/{code-highlight-Bi91XHJN.js → code-highlight-CcdCFMrn.js} +37 -40
  87. package/dist/code-highlight-CcdCFMrn.js.map +1 -0
  88. package/dist/code-highlight.cjs +1 -1
  89. package/dist/code-highlight.js +1 -1
  90. package/dist/connectivity.cjs +2 -2
  91. package/dist/connectivity.cjs.map +1 -1
  92. package/dist/connectivity.js +10 -7
  93. package/dist/connectivity.js.map +1 -1
  94. package/dist/content-drawer.cjs +1 -1
  95. package/dist/content-drawer.js +2 -2
  96. package/dist/context-Bdu1xt0W.js +3 -0
  97. package/dist/{context-BerzpUhI.js.map → context-Bdu1xt0W.js.map} +1 -1
  98. package/dist/context-daN5G6HS.cjs +1 -0
  99. package/dist/{context-C6dHUHhi.cjs.map → context-daN5G6HS.cjs.map} +1 -1
  100. package/dist/{cursor-glow-BydlDInj.js → cursor-glow-Ah7VXSj7.js} +1 -1
  101. package/dist/{cursor-glow-BydlDInj.js.map → cursor-glow-Ah7VXSj7.js.map} +1 -1
  102. package/dist/{cursor-glow-Duw9jHmh.cjs → cursor-glow-Bulq-38P.cjs} +1 -1
  103. package/dist/{cursor-glow-Duw9jHmh.cjs.map → cursor-glow-Bulq-38P.cjs.map} +1 -1
  104. package/dist/{date-range-ClTMg1AB.js → date-range-BDHz_Olm.js} +16 -17
  105. package/dist/date-range-BDHz_Olm.js.map +1 -0
  106. package/dist/date-range-BsPW60vp.cjs +131 -0
  107. package/dist/date-range-BsPW60vp.cjs.map +1 -0
  108. package/dist/{date-range-inline-CpKG6qt2.js → date-range-inline-1NmZE_Xr.js} +5 -5
  109. package/dist/{date-range-inline-CpKG6qt2.js.map → date-range-inline-1NmZE_Xr.js.map} +1 -1
  110. package/dist/date-range-inline-BsjNNGFR.cjs +43 -0
  111. package/dist/{date-range-inline-B9Dp2z6C.cjs.map → date-range-inline-BsjNNGFR.cjs.map} +1 -1
  112. package/dist/date-range-inline.cjs +1 -1
  113. package/dist/date-range-inline.js +1 -1
  114. package/dist/date-range.cjs +1 -1
  115. package/dist/date-range.js +1 -1
  116. package/dist/delay.cjs +9 -1
  117. package/dist/delay.cjs.map +1 -0
  118. package/dist/delay.js +77 -2
  119. package/dist/delay.js.map +1 -0
  120. package/dist/{details-CPjlqQD4.js → details-BEp2s2ca.js} +19 -18
  121. package/dist/details-BEp2s2ca.js.map +1 -0
  122. package/dist/{details-Cz9ok9si.cjs → details-BtUNqzn8.cjs} +9 -9
  123. package/dist/details-BtUNqzn8.cjs.map +1 -0
  124. package/dist/details.cjs +1 -1
  125. package/dist/details.js +1 -1
  126. package/dist/{dialog-service-DH-tjPuE.js → dialog-service-DI9PPy4H.js} +2 -2
  127. package/dist/dialog-service-DI9PPy4H.js.map +1 -0
  128. package/dist/{dialog-service-CzDO08Gy.cjs → dialog-service-DJd5L0f5.cjs} +1 -1
  129. package/dist/dialog-service-DJd5L0f5.cjs.map +1 -0
  130. package/dist/dialog.cjs +2 -2
  131. package/dist/dialog.cjs.map +1 -1
  132. package/dist/dialog.js +13 -14
  133. package/dist/dialog.js.map +1 -1
  134. package/dist/directives.cjs +2 -11
  135. package/dist/directives.cjs.map +1 -1
  136. package/dist/directives.js +141 -227
  137. package/dist/directives.js.map +1 -1
  138. package/dist/discovery.cjs +1 -1
  139. package/dist/discovery.cjs.map +1 -1
  140. package/dist/discovery.js +1 -1
  141. package/dist/discovery.js.map +1 -1
  142. package/dist/{divider-CILo3_vi.cjs → divider-CpNT11Iy.cjs} +3 -3
  143. package/dist/divider-CpNT11Iy.cjs.map +1 -0
  144. package/dist/{divider-ghgyw5CU.js → divider-VxpjZ8hk.js} +11 -9
  145. package/dist/divider-VxpjZ8hk.js.map +1 -0
  146. package/dist/divider.cjs +1 -1
  147. package/dist/divider.js +1 -1
  148. package/dist/dropdown.cjs +4 -4
  149. package/dist/dropdown.cjs.map +1 -1
  150. package/dist/dropdown.js +29 -28
  151. package/dist/dropdown.js.map +1 -1
  152. package/dist/expand-05azMpho.cjs +141 -0
  153. package/dist/expand-05azMpho.cjs.map +1 -0
  154. package/dist/{expand-CbjBr_Ds.js → expand-CRUl3-mN.js} +24 -20
  155. package/dist/expand-CRUl3-mN.js.map +1 -0
  156. package/dist/expand.cjs +1 -1
  157. package/dist/expand.js +1 -1
  158. package/dist/{extra-BZeZOMBI.cjs → extra-CyERULfm.cjs} +6 -6
  159. package/dist/extra-CyERULfm.cjs.map +1 -0
  160. package/dist/{extra-DK9MQtPJ.js → extra-aNV1fO6W.js} +19 -14
  161. package/dist/extra-aNV1fO6W.js.map +1 -0
  162. package/dist/extra.cjs +1 -1
  163. package/dist/extra.js +1 -1
  164. package/dist/float-DRET9mVZ.cjs +1 -0
  165. package/dist/{float-CuZ8LOgB.cjs.map → float-DRET9mVZ.cjs.map} +1 -1
  166. package/dist/{float-BfCvGeY9.js → float-N3qhNET_.js} +2 -2
  167. package/dist/{float-BfCvGeY9.js.map → float-N3qhNET_.js.map} +1 -1
  168. package/dist/float.cjs +1 -1
  169. package/dist/float.js +1 -1
  170. package/dist/{form-rCZqoAoK.js → form-BtwOBMZ9.js} +1 -1
  171. package/dist/form-BtwOBMZ9.js.map +1 -0
  172. package/dist/{form-wI58M85H.cjs → form-CSJp687X.cjs} +1 -1
  173. package/dist/form-CSJp687X.cjs.map +1 -0
  174. package/dist/form.cjs +1 -1
  175. package/dist/form.js +1 -1
  176. package/dist/handover/agent-runtime-followups.md +1 -1
  177. package/dist/handover/agent-runtime-v1.md +3 -3
  178. package/dist/handover/claude-design-brief.md +19 -54
  179. package/dist/handover/claude-design-setup.md +57 -0
  180. package/dist/{hashContent-B2IntJQf.js.map → hashContent-1ARKIsx9.js.map} +1 -1
  181. package/dist/{hashContent-CahnEuut.cjs.map → hashContent-Bp5S6T4U.cjs.map} +1 -1
  182. package/dist/{icons-Drq4kKy2.js → icons-BBJqwT_B.js} +27 -24
  183. package/dist/icons-BBJqwT_B.js.map +1 -0
  184. package/dist/icons-CNixJ6kL.cjs +52 -0
  185. package/dist/icons-CNixJ6kL.cjs.map +1 -0
  186. package/dist/icons.cjs +1 -1
  187. package/dist/icons.js +1 -1
  188. package/dist/{iframe-BmyHW8km.js → iframe-DoN_toqE.js} +17 -11
  189. package/dist/iframe-DoN_toqE.js.map +1 -0
  190. package/dist/iframe-g-4DjAD7.cjs +24 -0
  191. package/dist/iframe-g-4DjAD7.cjs.map +1 -0
  192. package/dist/iframe.cjs +1 -1
  193. package/dist/iframe.js +1 -1
  194. package/dist/index.cjs +1 -1
  195. package/dist/index.js +77 -77
  196. package/dist/{input-Bc3bVISm.js → input-ClnkMJgh.js} +30 -30
  197. package/dist/input-ClnkMJgh.js.map +1 -0
  198. package/dist/{input-BGNZlfL8.cjs → input-CwFslLcF.cjs} +14 -14
  199. package/dist/input-CwFslLcF.cjs.map +1 -0
  200. package/dist/{input-chip-DN-cwf11.cjs → input-chip-DMXRT7bK.cjs} +2 -2
  201. package/dist/input-chip-DMXRT7bK.cjs.map +1 -0
  202. package/dist/{input-chip-BQrjpjaQ.js → input-chip-DwSyFv1x.js} +7 -4
  203. package/dist/input-chip-DwSyFv1x.js.map +1 -0
  204. package/dist/input.cjs +1 -1
  205. package/dist/input.js +1 -1
  206. package/dist/json.cjs +1 -1
  207. package/dist/json.cjs.map +1 -1
  208. package/dist/json.js +7 -5
  209. package/dist/json.js.map +1 -1
  210. package/dist/kbd.cjs +2 -2
  211. package/dist/kbd.cjs.map +1 -1
  212. package/dist/kbd.js +9 -7
  213. package/dist/kbd.js.map +1 -1
  214. package/dist/{layout-fjM1DWlF.js → layout-BghHmee6.js} +1 -1
  215. package/dist/{layout-fjM1DWlF.js.map → layout-BghHmee6.js.map} +1 -1
  216. package/dist/{layout-CTfRXQoz.cjs → layout-VmxXuGGp.cjs} +1 -1
  217. package/dist/{layout-CTfRXQoz.cjs.map → layout-VmxXuGGp.cjs.map} +1 -1
  218. package/dist/layout.cjs +1 -1
  219. package/dist/layout.js +2 -3
  220. package/dist/{lazy-D6R5N5v4.js.map → lazy-B0ia54tT.js.map} +1 -1
  221. package/dist/{lazy-BDNnH_r7.cjs.map → lazy-Dq9mRRjT.cjs.map} +1 -1
  222. package/dist/{lightbox-CY52Z_ig.js → lightbox-IleIcq19.js} +13 -12
  223. package/dist/lightbox-IleIcq19.js.map +1 -0
  224. package/dist/lightbox-m5FLmYlv.cjs +202 -0
  225. package/dist/lightbox-m5FLmYlv.cjs.map +1 -0
  226. package/dist/lightbox.cjs +1 -1
  227. package/dist/lightbox.js +1 -1
  228. package/dist/{list-D7wUxu1C.js → list-BlXJlm16.js} +26 -21
  229. package/dist/list-BlXJlm16.js.map +1 -0
  230. package/dist/list-C-b9p1yi.cjs +40 -0
  231. package/dist/list-C-b9p1yi.cjs.map +1 -0
  232. package/dist/list.cjs +1 -1
  233. package/dist/list.js +1 -1
  234. package/dist/{magnetic-CVXEkYTA.cjs → magnetic-BH0TsofV.cjs} +1 -1
  235. package/dist/{magnetic-CVXEkYTA.cjs.map → magnetic-BH0TsofV.cjs.map} +1 -1
  236. package/dist/{magnetic-BhXebqF3.js → magnetic-BZGFxAWG.js} +2 -2
  237. package/dist/{magnetic-BhXebqF3.js.map → magnetic-BZGFxAWG.js.map} +1 -1
  238. package/dist/{mailbox-DLiBGJhY.cjs → mailbox-B0hZLpF1.cjs} +64 -66
  239. package/dist/mailbox-B0hZLpF1.cjs.map +1 -0
  240. package/dist/{mailbox--EN-JhjV.js → mailbox-DAmejcKa.js} +137 -126
  241. package/dist/mailbox-DAmejcKa.js.map +1 -0
  242. package/dist/mailbox.cjs +1 -1
  243. package/dist/mailbox.js +1 -1
  244. package/dist/{map-B0S_q3ma.js → map-BoIu47qU.js} +11 -9
  245. package/dist/map-BoIu47qU.js.map +1 -0
  246. package/dist/map-CZ0816EI.cjs +80 -0
  247. package/dist/map-CZ0816EI.cjs.map +1 -0
  248. package/dist/map.cjs +1 -1
  249. package/dist/map.js +1 -1
  250. package/dist/{menu-3edZGQ1x.cjs → menu-BFHBnp5M.cjs} +5 -5
  251. package/dist/menu-BFHBnp5M.cjs.map +1 -0
  252. package/dist/{menu-COeFpb6n.js → menu-BV9_8ys8.js} +15 -10
  253. package/dist/menu-BV9_8ys8.js.map +1 -0
  254. package/dist/menu.cjs +1 -1
  255. package/dist/menu.js +1 -1
  256. package/dist/mixins-BIXF7xkF.cjs +298 -0
  257. package/dist/mixins-BIXF7xkF.cjs.map +1 -0
  258. package/dist/mixins-CL1krSOE.js +627 -0
  259. package/dist/mixins-CL1krSOE.js.map +1 -0
  260. package/dist/mixins.cjs +1 -1
  261. package/dist/mixins.js +2 -87
  262. package/dist/nav-drawer.cjs +1 -1
  263. package/dist/nav-drawer.js +2 -2
  264. package/dist/navigation-bar.cjs +1 -1
  265. package/dist/navigation-bar.js +1 -1
  266. package/dist/navigation-rail.cjs +3 -3
  267. package/dist/navigation-rail.cjs.map +1 -1
  268. package/dist/navigation-rail.js +15 -16
  269. package/dist/navigation-rail.js.map +1 -1
  270. package/dist/notification-CigTy3ia.cjs +23 -0
  271. package/dist/notification-CigTy3ia.cjs.map +1 -0
  272. package/dist/{notification-CC-TFN5v.js → notification-Dzm6zWxX.js} +40 -38
  273. package/dist/notification-Dzm6zWxX.js.map +1 -0
  274. package/dist/notification.cjs +1 -1
  275. package/dist/notification.js +1 -1
  276. package/dist/option-BfvzzkzM.cjs +43 -0
  277. package/dist/option-BfvzzkzM.cjs.map +1 -0
  278. package/dist/{option-BwAF4nAw.js → option-Dyb0Q45u.js} +9 -7
  279. package/dist/option-Dyb0Q45u.js.map +1 -0
  280. package/dist/option.cjs +1 -1
  281. package/dist/option.js +1 -1
  282. package/dist/{overlay-stack-7bs4ZNnh.cjs → overlay-stack-BprhAE9a.cjs} +1 -1
  283. package/dist/{overlay-stack-7bs4ZNnh.cjs.map → overlay-stack-BprhAE9a.cjs.map} +1 -1
  284. package/dist/{overlay-stack-DXPYHPhk.js → overlay-stack-CAQno0CK.js} +1 -1
  285. package/dist/{overlay-stack-DXPYHPhk.js.map → overlay-stack-CAQno0CK.js.map} +1 -1
  286. package/dist/overlay.cjs +43 -45
  287. package/dist/overlay.cjs.map +1 -1
  288. package/dist/overlay.js +684 -268
  289. package/dist/overlay.js.map +1 -1
  290. package/dist/page.cjs +3 -3
  291. package/dist/page.cjs.map +1 -1
  292. package/dist/page.js +15 -13
  293. package/dist/page.js.map +1 -1
  294. package/dist/payment-card-form-CQ6sLlrh.cjs +73 -0
  295. package/dist/{components-DkmEgyAc.cjs.map → payment-card-form-CQ6sLlrh.cjs.map} +1 -1
  296. package/dist/{components-DZgJWHdZ.js → payment-card-form-D9N2Q0wM.js} +21 -22
  297. package/dist/{components-DZgJWHdZ.js.map → payment-card-form-D9N2Q0wM.js.map} +1 -1
  298. package/dist/payment-card-form.cjs +1 -0
  299. package/dist/payment-card-form.js +2 -0
  300. package/dist/{progress-Yz6EMNSu.cjs → progress-Dyri7dc2.cjs} +3 -3
  301. package/dist/progress-Dyri7dc2.cjs.map +1 -0
  302. package/dist/{progress-Bk_Q1Shy.js → progress-LPwPfzBi.js} +16 -13
  303. package/dist/progress-LPwPfzBi.js.map +1 -0
  304. package/dist/progress.cjs +1 -1
  305. package/dist/progress.js +1 -1
  306. package/dist/qr-scanner.cjs +5 -5
  307. package/dist/qr-scanner.cjs.map +1 -1
  308. package/dist/qr-scanner.js +14 -15
  309. package/dist/qr-scanner.js.map +1 -1
  310. package/dist/radio-group-DK-T6jGy.cjs +40 -0
  311. package/dist/radio-group-DK-T6jGy.cjs.map +1 -0
  312. package/dist/{radio-group-BcdcjLNC.js → radio-group-DqP886F-.js} +14 -12
  313. package/dist/radio-group-DqP886F-.js.map +1 -0
  314. package/dist/radio-group.cjs +1 -1
  315. package/dist/radio-group.js +1 -1
  316. package/dist/range.cjs +2 -2
  317. package/dist/range.cjs.map +1 -1
  318. package/dist/range.js +9 -7
  319. package/dist/range.js.map +1 -1
  320. package/dist/{reduced-motion-BZTLqAyl.js.map → reduced-motion-D-L12p7G.js.map} +1 -1
  321. package/dist/{reduced-motion-9RjNnhIg.cjs.map → reduced-motion-Ds-HjMzn.cjs.map} +1 -1
  322. package/dist/{rxjs-utils-DJbZRjp3.cjs.map → rxjs-utils-Csnks202.cjs.map} +1 -1
  323. package/dist/{rxjs-utils-CKTnEKUH.js.map → rxjs-utils-d-ivVN84.js.map} +1 -1
  324. package/dist/rxjs-utils.cjs +1 -1
  325. package/dist/rxjs-utils.js +1 -1
  326. package/dist/{scroll-DXQv0ejL.js → scroll-BD82ANjm.js} +9 -7
  327. package/dist/scroll-BD82ANjm.js.map +1 -0
  328. package/dist/scroll-yfNU0zNO.cjs +26 -0
  329. package/dist/scroll-yfNU0zNO.cjs.map +1 -0
  330. package/dist/search-BLCRsxIC.cjs +1 -0
  331. package/dist/{search-CwMav5QB.cjs.map → search-BLCRsxIC.cjs.map} +1 -1
  332. package/dist/{search-CvUZRLF1.js → search-BTz7-Rev.js} +1 -1
  333. package/dist/{search-CvUZRLF1.js.map → search-BTz7-Rev.js.map} +1 -1
  334. package/dist/{select-BV4lK2zy.cjs → select-BR3r3SZe.cjs} +6 -6
  335. package/dist/select-BR3r3SZe.cjs.map +1 -0
  336. package/dist/{select-DKyGWDsG.js → select-GONAphZI.js} +23 -20
  337. package/dist/select-GONAphZI.js.map +1 -0
  338. package/dist/select.cjs +1 -1
  339. package/dist/select.js +1 -1
  340. package/dist/{sheet-C3TLKItO.js → sheet-C4sAGqTf.js} +22 -20
  341. package/dist/sheet-C4sAGqTf.js.map +1 -0
  342. package/dist/sheet-D9pZMrzs.cjs +35 -0
  343. package/dist/sheet-D9pZMrzs.cjs.map +1 -0
  344. package/dist/sheet.cjs +1 -1
  345. package/dist/sheet.js +2 -2
  346. package/dist/{sheet.service-Dlv20Zfc.js → sheet.service-B7h_-e-q.js} +3 -3
  347. package/dist/{sheet.service-Dlv20Zfc.js.map → sheet.service-B7h_-e-q.js.map} +1 -1
  348. package/dist/sheet.service-C1J0-i4d.cjs +1 -0
  349. package/dist/{sheet.service-RcDBwHmv.cjs.map → sheet.service-C1J0-i4d.cjs.map} +1 -1
  350. package/dist/skeleton.cjs +2 -2
  351. package/dist/skeleton.cjs.map +1 -1
  352. package/dist/skeleton.js +9 -7
  353. package/dist/skeleton.js.map +1 -1
  354. package/dist/skills/INDEX.md +1 -1
  355. package/dist/skills/SKILL.md +17 -5
  356. package/dist/skills/mixins.md +78 -20
  357. package/dist/skills/schmancy/INDEX.md +1 -1
  358. package/dist/skills/schmancy/SKILL.md +17 -5
  359. package/dist/skills/schmancy/mixins.md +78 -20
  360. package/dist/skills/schmancy/state.md +501 -0
  361. package/dist/skills/schmancy/theme.md +15 -0
  362. package/dist/skills/schmancy/timeline-tile.md +95 -0
  363. package/dist/skills/state.md +501 -0
  364. package/dist/skills/theme.md +15 -0
  365. package/dist/skills/timeline-tile.md +95 -0
  366. package/dist/slider.cjs +5 -5
  367. package/dist/slider.cjs.map +1 -1
  368. package/dist/slider.js +18 -13
  369. package/dist/slider.js.map +1 -1
  370. package/dist/{sound.service-DWZe6swU.js → sound.service-Ba_HNBLD.js} +3 -3
  371. package/dist/sound.service-Ba_HNBLD.js.map +1 -0
  372. package/dist/sound.service-CvdB2yUJ.cjs +1 -0
  373. package/dist/sound.service-CvdB2yUJ.cjs.map +1 -0
  374. package/dist/{splash-screen-DbI5RgBf.js → splash-screen-BGMZmQRT.js} +12 -9
  375. package/dist/splash-screen-BGMZmQRT.js.map +1 -0
  376. package/dist/splash-screen-DqULOTZ0.cjs +41 -0
  377. package/dist/splash-screen-DqULOTZ0.cjs.map +1 -0
  378. package/dist/splash-screen.cjs +1 -1
  379. package/dist/splash-screen.js +1 -1
  380. package/dist/{src-00DfxCJq.js → src-CHM4hrEr.js} +299 -351
  381. package/dist/src-CHM4hrEr.js.map +1 -0
  382. package/dist/src-DzFcGdcn.cjs +263 -0
  383. package/dist/src-DzFcGdcn.cjs.map +1 -0
  384. package/dist/state-BAW3C11I.cjs +1 -0
  385. package/dist/state-BAW3C11I.cjs.map +1 -0
  386. package/dist/state-ClRXrqDA.js +846 -0
  387. package/dist/state-ClRXrqDA.js.map +1 -0
  388. package/dist/state.cjs +1 -0
  389. package/dist/state.js +3 -0
  390. package/dist/steps.cjs +10 -10
  391. package/dist/steps.cjs.map +1 -1
  392. package/dist/steps.js +29 -24
  393. package/dist/steps.js.map +1 -1
  394. package/dist/surface-BHJgIDz9.js +24 -0
  395. package/dist/surface-BHJgIDz9.js.map +1 -0
  396. package/dist/surface-DW78bc8W.cjs +7 -0
  397. package/dist/surface-DW78bc8W.cjs.map +1 -0
  398. package/dist/surface.cjs +1 -1
  399. package/dist/surface.js +1 -1
  400. package/dist/switch.cjs +2 -2
  401. package/dist/switch.cjs.map +1 -1
  402. package/dist/switch.js +7 -5
  403. package/dist/switch.js.map +1 -1
  404. package/dist/table.cjs +72 -1
  405. package/dist/table.cjs.map +1 -0
  406. package/dist/table.js +174 -2
  407. package/dist/table.js.map +1 -0
  408. package/dist/{tabs-Ce55RbwF.js → tabs-BCRVyQU1.js} +22 -22
  409. package/dist/tabs-BCRVyQU1.js.map +1 -0
  410. package/dist/tabs-EIEhkEUb.cjs +31 -0
  411. package/dist/tabs-EIEhkEUb.cjs.map +1 -0
  412. package/dist/tabs.cjs +1 -1
  413. package/dist/tabs.js +1 -1
  414. package/dist/teleport.cjs +1 -1
  415. package/dist/teleport.js +2 -2
  416. package/dist/{textarea-DjN1D9u0.js → textarea-DApOhSAL.js} +30 -28
  417. package/dist/textarea-DApOhSAL.js.map +1 -0
  418. package/dist/textarea-zxNlRLVm.cjs +39 -0
  419. package/dist/textarea-zxNlRLVm.cjs.map +1 -0
  420. package/dist/textarea.cjs +1 -1
  421. package/dist/textarea.js +1 -1
  422. package/dist/{theme-pbxlt72h.js → theme-BCUjQH6-.js} +45 -41
  423. package/dist/{theme-pbxlt72h.js.map → theme-BCUjQH6-.js.map} +1 -1
  424. package/dist/theme-Z43TLE61.cjs +181 -0
  425. package/dist/{theme-B-IJ2r7Q.cjs.map → theme-Z43TLE61.cjs.map} +1 -1
  426. package/dist/theme-button-Czsdp3o1.cjs +8 -0
  427. package/dist/theme-button-Czsdp3o1.cjs.map +1 -0
  428. package/dist/{theme-button-CEMeAUOL.js → theme-button-DdSbcivT.js} +3 -4
  429. package/dist/theme-button-DdSbcivT.js.map +1 -0
  430. package/dist/theme-button.cjs +1 -1
  431. package/dist/theme-button.js +1 -1
  432. package/dist/theme.cjs +1 -1
  433. package/dist/{theme.events-NuihzD_p.js.map → theme.events-Cv7N4Toe.js.map} +1 -1
  434. package/dist/{theme.events-DakXxZeP.cjs.map → theme.events-DM4H5F2d.cjs.map} +1 -1
  435. package/dist/{theme.interface-DTwkuAKJ.cjs.map → theme.interface-D9l33b-M.cjs.map} +1 -1
  436. package/dist/{theme.interface-Buged9Cg.js.map → theme.interface-DnVNre4O.js.map} +1 -1
  437. package/dist/theme.js +5 -5
  438. package/dist/{theme.service-cOfPrtfe.js → theme.service-9clsqyee.js} +4 -4
  439. package/dist/theme.service-9clsqyee.js.map +1 -0
  440. package/dist/theme.service-CP71ojp6.cjs +1 -0
  441. package/dist/theme.service-CP71ojp6.cjs.map +1 -0
  442. package/dist/timeline.cjs +277 -0
  443. package/dist/timeline.cjs.map +1 -0
  444. package/dist/timeline.js +326 -0
  445. package/dist/timeline.js.map +1 -0
  446. package/dist/tree.cjs +2 -2
  447. package/dist/tree.cjs.map +1 -1
  448. package/dist/tree.js +15 -13
  449. package/dist/tree.js.map +1 -1
  450. package/dist/typewriter.cjs +10 -123
  451. package/dist/typewriter.cjs.map +1 -1
  452. package/dist/typewriter.js +90 -212
  453. package/dist/typewriter.js.map +1 -1
  454. package/dist/typography.cjs +3 -3
  455. package/dist/typography.cjs.map +1 -1
  456. package/dist/typography.js +18 -112
  457. package/dist/typography.js.map +1 -1
  458. package/dist/utils-Cr-YO4Np.cjs +1 -0
  459. package/dist/utils-Cr-YO4Np.cjs.map +1 -0
  460. package/dist/{utils-Bp2jhyZc.js → utils-hp-DnFf5.js} +16 -6
  461. package/dist/utils-hp-DnFf5.js.map +1 -0
  462. package/dist/utils.cjs +1 -1
  463. package/dist/utils.js +4 -5
  464. package/dist/visually-hidden.cjs +2 -2
  465. package/dist/visually-hidden.cjs.map +1 -1
  466. package/dist/visually-hidden.js +7 -5
  467. package/dist/visually-hidden.js.map +1 -1
  468. package/dist/window-DTgKAQgz.cjs +59 -0
  469. package/dist/window-DTgKAQgz.cjs.map +1 -0
  470. package/dist/{window-CrjZdf7Y.js → window-moDKyGLZ.js} +28 -30
  471. package/dist/window-moDKyGLZ.js.map +1 -0
  472. package/dist/window.cjs +1 -1
  473. package/dist/window.js +1 -1
  474. package/package.json +14 -2
  475. package/plugins/vite-plugin-schmancy-auto-import.ts +143 -0
  476. package/plugins/vite-plugin-schmancy-manifest.ts +438 -0
  477. package/skills/schmancy/INDEX.md +1 -1
  478. package/skills/schmancy/SKILL.md +17 -5
  479. package/skills/schmancy/mixins.md +78 -20
  480. package/skills/schmancy/state.md +501 -0
  481. package/skills/schmancy/theme.md +15 -0
  482. package/skills/schmancy/timeline-tile.md +95 -0
  483. package/src/agent/agent-bundle.test.ts +0 -49
  484. package/src/agent/agent-entry.ts +4 -3
  485. package/src/agent/helpers.ts +1 -95
  486. package/src/agent/schmancy-skill.ts +2 -5
  487. package/src/agent/virtual-manifest.d.ts +1 -12
  488. package/src/area/area.component.ts +7 -19
  489. package/src/area/area.service.test.ts +4 -5
  490. package/src/area/area.service.ts +4 -3
  491. package/src/area/route.component.ts +17 -4
  492. package/src/area/utils.ts +3 -2
  493. package/src/audio/sound.service.ts +7 -11
  494. package/src/autocomplete/autocomplete.ts +18 -21
  495. package/src/{avatar.ts → avatar/avatar.ts} +2 -2
  496. package/src/avatar/index.ts +1 -0
  497. package/src/badge/badge.ts +4 -3
  498. package/src/boat/boat.ts +28 -36
  499. package/src/breadcrumb/breadcrumb.ts +11 -19
  500. package/src/busy/busy.ts +4 -3
  501. package/src/busy/spinner.ts +4 -3
  502. package/src/button/button.ts +6 -11
  503. package/src/button/icon-button.ts +8 -12
  504. package/src/card/actions.ts +4 -12
  505. package/src/card/card.ts +5 -23
  506. package/src/card/content.ts +4 -12
  507. package/src/card/media.ts +4 -9
  508. package/src/charts/area-chart.ts +7 -4
  509. package/src/charts/pills.ts +6 -4
  510. package/src/checkbox/checkbox.test.ts +2 -2
  511. package/src/checkbox/checkbox.ts +3 -9
  512. package/src/chips/assist-chip.ts +6 -14
  513. package/src/chips/chips.ts +7 -21
  514. package/src/chips/filter-chip.ts +4 -3
  515. package/src/chips/input-chip.ts +10 -9
  516. package/src/chips/suggestion-chip.ts +10 -12
  517. package/src/code-highlight/code-highlight.ts +28 -59
  518. package/src/code-highlight/code-preview.ts +11 -9
  519. package/src/connectivity/connectivity-status.ts +4 -3
  520. package/src/content-drawer/drawer.ts +5 -3
  521. package/src/content-drawer/main.ts +5 -3
  522. package/src/content-drawer/sheet.ts +6 -4
  523. package/src/date-range/date-range-dialog.ts +2 -2
  524. package/src/date-range/date-range.ts +3 -2
  525. package/src/delay/delay.ts +2 -2
  526. package/src/details/details.ts +4 -17
  527. package/src/dialog/dialog-service.ts +2 -0
  528. package/src/dialog/dialog.component.ts +9 -9
  529. package/src/directives/drag.ts +1 -9
  530. package/src/directives/index.ts +0 -1
  531. package/src/discovery/discovery.service.ts +1 -1
  532. package/src/divider/divider.ts +5 -14
  533. package/src/dropdown/dropdown-component.ts +5 -16
  534. package/src/dropdown/dropdown-content.ts +7 -14
  535. package/src/expand/expand-root.component.ts +5 -15
  536. package/src/expand/expand.component.ts +4 -17
  537. package/src/extra/countries/countries.ts +5 -13
  538. package/src/extra/timezone/timezone.ts +7 -12
  539. package/src/form/form.test.ts +2 -2
  540. package/src/form/form.ts +2 -9
  541. package/src/icons/icon.ts +4 -3
  542. package/src/iframe/iframe.ts +13 -4
  543. package/src/index.ts +3 -3
  544. package/src/input/input.ts +4 -11
  545. package/src/json/json.ts +4 -3
  546. package/src/kbd/kbd.ts +4 -3
  547. package/src/layout/index.ts +1 -5
  548. package/src/layout/scroll/scroll.ts +5 -8
  549. package/src/lightbox/flip-directive.ts +1 -1
  550. package/src/lightbox/lightbox.ts +5 -14
  551. package/src/list/list-item.ts +4 -13
  552. package/src/list/list.ts +12 -10
  553. package/src/mailbox/email-editor.ts +17 -11
  554. package/src/mailbox/email-layout-selector.ts +2 -2
  555. package/src/mailbox/email-recipients.ts +13 -8
  556. package/src/mailbox/email-template-picker.ts +6 -5
  557. package/src/mailbox/email-viewer.ts +5 -3
  558. package/src/mailbox/mailbox.ts +6 -5
  559. package/src/map/map.ts +8 -6
  560. package/src/menu/menu-item.ts +5 -16
  561. package/src/menu/menu.ts +27 -13
  562. package/src/nav-drawer/appbar.ts +4 -14
  563. package/src/nav-drawer/content.ts +5 -14
  564. package/src/nav-drawer/drawer.ts +5 -18
  565. package/src/nav-drawer/navbar.ts +3 -17
  566. package/src/navigation-bar/navigation-bar-item.ts +8 -6
  567. package/src/navigation-bar/navigation-bar.ts +19 -19
  568. package/src/navigation-rail/navigation-rail-item.ts +9 -5
  569. package/src/navigation-rail/navigation-rail.ts +10 -14
  570. package/src/notification/notification.ts +6 -3
  571. package/src/option/option.ts +4 -3
  572. package/src/overlay/overlay.animations.ts +196 -25
  573. package/src/overlay/overlay.component.ts +397 -190
  574. package/src/overlay/overlay.confirm-body.ts +21 -7
  575. package/src/overlay/overlay.gestures.ts +72 -36
  576. package/src/overlay/overlay.layout.ts +103 -1
  577. package/src/overlay/overlay.positioning.ts +301 -0
  578. package/src/overlay/overlay.service.ts +81 -3
  579. package/src/overlay/overlay.stack.ts +8 -4
  580. package/src/overlay/overlay.types.ts +83 -5
  581. package/src/page/page.ts +16 -11
  582. package/src/payment-card-form/index.ts +1 -0
  583. package/src/{components/form-elements → payment-card-form}/payment-card-form.ts +23 -23
  584. package/src/progress/progress.ts +5 -3
  585. package/src/qr-scanner/qr-scanner.ts +7 -30
  586. package/src/radio-group/radio-button.ts +3 -13
  587. package/src/radio-group/radio-group.ts +5 -22
  588. package/src/range/range.ts +4 -3
  589. package/src/rxjs-utils/waitForElements.ts +1 -1
  590. package/src/rxjs-utils/waitForElementsAll.ts +1 -1
  591. package/src/select/select.ts +10 -18
  592. package/src/sheet/hook.ts +1 -1
  593. package/src/sheet/sheet.ts +5 -20
  594. package/src/skeleton/skeleton.ts +4 -3
  595. package/src/slider/slide.ts +5 -3
  596. package/src/slider/slider.ts +5 -3
  597. package/src/splash-screen/splash-screen.ts +5 -3
  598. package/src/state/CLAUDE.md +161 -0
  599. package/src/state/MIGRATION.md +258 -0
  600. package/src/state/SCOPING.md +134 -0
  601. package/src/state/active-host.ts +156 -0
  602. package/src/state/index.ts +877 -0
  603. package/src/state/persist.ts +208 -0
  604. package/src/state/schmancy-context.ts +84 -0
  605. package/src/state/state.test-d.ts +227 -0
  606. package/src/state/state.test.ts +820 -0
  607. package/src/steps/schmancy-step.ts +5 -3
  608. package/src/steps/schmancy-steps-container.ts +5 -3
  609. package/src/surface/surface.ts +14 -9
  610. package/src/switch/switch.test.ts +2 -2
  611. package/src/switch/switch.ts +8 -10
  612. package/src/table/row.ts +7 -4
  613. package/src/table/table.ts +17 -14
  614. package/src/tabs/index.ts +0 -2
  615. package/src/tabs/tab.ts +2 -2
  616. package/src/tabs/tabs-group.ts +7 -4
  617. package/src/teleport/teleport.component.ts +5 -3
  618. package/src/textarea/textarea.ts +6 -12
  619. package/src/theme/theme-audio-player.ts +7 -5
  620. package/src/theme/theme-controller.ts +2 -2
  621. package/src/theme/theme.component.ts +22 -15
  622. package/src/theme/theme.service.ts +6 -7
  623. package/src/theme/theme.style.css +1 -0
  624. package/src/theme-button/theme-button.ts +2 -2
  625. package/src/timeline/index.ts +1 -0
  626. package/src/timeline/timeline-tile.ts +431 -0
  627. package/src/tree/tree.ts +4 -16
  628. package/src/typewriter/index.ts +1 -1
  629. package/src/typography/typography.ts +5 -98
  630. package/src/utils/intersection.ts +5 -1
  631. package/src/utils/overlay-stack.ts +1 -1
  632. package/src/utils/search.ts +2 -2
  633. package/src/visually-hidden/visually-hidden.ts +4 -3
  634. package/src/window/window-position.ts +3 -6
  635. package/src/window/window.ts +9 -7
  636. package/types/mixins/SchmancyElement.d.ts +49 -0
  637. package/types/mixins/formField.mixin.d.ts +4 -2
  638. package/types/mixins/index.d.ts +1 -0
  639. package/types/mixins/litElement.mixin.d.ts +11 -0
  640. package/types/src/agent/agent-entry.d.ts +1 -1
  641. package/types/src/agent/helpers.d.ts +0 -26
  642. package/types/src/agent/schmancy-skill.d.ts +3 -5
  643. package/types/src/area/area.component.d.ts +3 -17
  644. package/types/src/area/route.component.d.ts +14 -4
  645. package/types/src/autocomplete/autocomplete.d.ts +4 -15
  646. package/types/src/{avatar.d.ts → avatar/avatar.d.ts} +2 -3
  647. package/types/src/avatar/index.d.ts +1 -0
  648. package/types/src/badge/badge.d.ts +3 -3
  649. package/types/src/boat/boat.d.ts +3 -2
  650. package/types/src/breadcrumb/breadcrumb.d.ts +9 -19
  651. package/types/src/busy/busy.d.ts +3 -3
  652. package/types/src/busy/spinner.d.ts +3 -3
  653. package/types/src/button/button.d.ts +4 -10
  654. package/types/src/button/icon-button.d.ts +5 -11
  655. package/types/src/card/actions.d.ts +3 -12
  656. package/types/src/card/card.d.ts +4 -24
  657. package/types/src/card/content.d.ts +3 -12
  658. package/types/src/card/media.d.ts +3 -9
  659. package/types/src/charts/area-chart.d.ts +3 -3
  660. package/types/src/charts/pills.d.ts +3 -3
  661. package/types/src/checkbox/checkbox.d.ts +3 -10
  662. package/types/src/chips/assist-chip.d.ts +5 -15
  663. package/types/src/chips/chips.d.ts +3 -17
  664. package/types/src/chips/filter-chip.d.ts +3 -3
  665. package/types/src/chips/input-chip.d.ts +9 -10
  666. package/types/src/chips/suggestion-chip.d.ts +9 -13
  667. package/types/src/code-highlight/code-highlight.d.ts +4 -11
  668. package/types/src/code-highlight/code-preview.d.ts +3 -3
  669. package/types/src/connectivity/connectivity-status.d.ts +3 -3
  670. package/types/src/content-drawer/drawer.d.ts +4 -4
  671. package/types/src/content-drawer/main.d.ts +3 -3
  672. package/types/src/content-drawer/sheet.d.ts +4 -4
  673. package/types/src/date-range/date-range-dialog.d.ts +2 -3
  674. package/types/src/date-range/date-range.d.ts +2 -3
  675. package/types/src/delay/delay.d.ts +2 -3
  676. package/types/src/details/details.d.ts +3 -14
  677. package/types/src/dialog/dialog.component.d.ts +9 -9
  678. package/types/src/directives/drag.d.ts +1 -3
  679. package/types/src/directives/index.d.ts +0 -1
  680. package/types/src/divider/divider.d.ts +3 -14
  681. package/types/src/dropdown/dropdown-component.d.ts +4 -17
  682. package/types/src/dropdown/dropdown-content.d.ts +6 -14
  683. package/types/src/expand/expand-root.component.d.ts +4 -14
  684. package/types/src/expand/expand.component.d.ts +3 -17
  685. package/types/src/extra/countries/countries.d.ts +3 -13
  686. package/types/src/extra/timezone/timezone.d.ts +4 -11
  687. package/types/src/form/form.d.ts +2 -9
  688. package/types/src/icons/icon.d.ts +3 -3
  689. package/types/src/iframe/iframe.d.ts +5 -3
  690. package/types/src/index.d.ts +3 -3
  691. package/types/src/input/input.d.ts +4 -11
  692. package/types/src/json/json.d.ts +3 -3
  693. package/types/src/kbd/kbd.d.ts +3 -3
  694. package/types/src/layout/index.d.ts +0 -4
  695. package/types/src/layout/scroll/scroll.d.ts +4 -8
  696. package/types/src/lightbox/lightbox.d.ts +3 -14
  697. package/types/src/list/list-item.d.ts +3 -13
  698. package/types/src/list/list.d.ts +11 -10
  699. package/types/src/mailbox/email-editor.d.ts +3 -3
  700. package/types/src/mailbox/email-layout-selector.d.ts +2 -3
  701. package/types/src/mailbox/email-recipients.d.ts +7 -3
  702. package/types/src/mailbox/email-template-picker.d.ts +4 -4
  703. package/types/src/mailbox/email-viewer.d.ts +3 -3
  704. package/types/src/mailbox/mailbox.d.ts +4 -4
  705. package/types/src/map/map.d.ts +4 -3
  706. package/types/src/menu/menu-item.d.ts +3 -16
  707. package/types/src/menu/menu.d.ts +25 -13
  708. package/types/src/nav-drawer/appbar.d.ts +3 -14
  709. package/types/src/nav-drawer/content.d.ts +3 -14
  710. package/types/src/nav-drawer/drawer.d.ts +3 -18
  711. package/types/src/nav-drawer/navbar.d.ts +3 -18
  712. package/types/src/navigation-bar/navigation-bar-item.d.ts +7 -6
  713. package/types/src/navigation-bar/navigation-bar.d.ts +13 -7
  714. package/types/src/navigation-rail/navigation-rail-item.d.ts +9 -6
  715. package/types/src/navigation-rail/navigation-rail.d.ts +10 -15
  716. package/types/src/notification/notification.d.ts +3 -3
  717. package/types/src/option/option.d.ts +3 -3
  718. package/types/src/overlay/overlay.animations.d.ts +54 -5
  719. package/types/src/overlay/overlay.component.d.ts +39 -15
  720. package/types/src/overlay/overlay.confirm-body.d.ts +4 -4
  721. package/types/src/overlay/overlay.gestures.d.ts +26 -17
  722. package/types/src/overlay/overlay.layout.d.ts +27 -1
  723. package/types/src/overlay/overlay.positioning.d.ts +87 -0
  724. package/types/src/overlay/overlay.types.d.ts +59 -5
  725. package/types/src/page/page.d.ts +14 -11
  726. package/types/src/{components/form-elements → payment-card-form}/payment-card-form.d.ts +2 -3
  727. package/types/src/progress/progress.d.ts +3 -3
  728. package/types/src/qr-scanner/qr-scanner.d.ts +3 -3
  729. package/types/src/radio-group/radio-button.d.ts +3 -12
  730. package/types/src/radio-group/radio-group.d.ts +4 -20
  731. package/types/src/range/range.d.ts +3 -3
  732. package/types/src/rxjs-utils/waitForElements.d.ts +1 -1
  733. package/types/src/rxjs-utils/waitForElementsAll.d.ts +1 -1
  734. package/types/src/select/select.d.ts +4 -15
  735. package/types/src/sheet/sheet.d.ts +3 -20
  736. package/types/src/skeleton/skeleton.d.ts +3 -3
  737. package/types/src/slider/slide.d.ts +3 -2
  738. package/types/src/slider/slider.d.ts +3 -3
  739. package/types/src/splash-screen/splash-screen.d.ts +3 -3
  740. package/types/src/state/active-host.d.ts +18 -0
  741. package/types/src/state/index.d.ts +145 -0
  742. package/types/src/state/persist.d.ts +14 -0
  743. package/types/src/state/schmancy-context.d.ts +31 -0
  744. package/types/src/state/state.test-d.d.ts +131 -0
  745. package/types/src/state/state.test.d.ts +1 -0
  746. package/types/src/steps/schmancy-step.d.ts +3 -3
  747. package/types/src/steps/schmancy-steps-container.d.ts +3 -3
  748. package/types/src/surface/surface.d.ts +13 -5
  749. package/types/src/switch/switch.d.ts +7 -11
  750. package/types/src/table/row.d.ts +2 -3
  751. package/types/src/table/table.d.ts +4 -11
  752. package/types/src/tabs/index.d.ts +0 -2
  753. package/types/src/tabs/tab.d.ts +2 -3
  754. package/types/src/tabs/tabs-group.d.ts +3 -3
  755. package/types/src/teleport/teleport.component.d.ts +3 -3
  756. package/types/src/textarea/textarea.d.ts +5 -12
  757. package/types/src/theme/theme-audio-player.d.ts +3 -3
  758. package/types/src/theme/theme-controller.d.ts +2 -2
  759. package/types/src/theme/theme.component.d.ts +18 -13
  760. package/types/src/theme-button/theme-button.d.ts +2 -3
  761. package/types/src/timeline/index.d.ts +1 -0
  762. package/types/src/timeline/timeline-tile.d.ts +44 -0
  763. package/types/src/tree/tree.d.ts +3 -16
  764. package/types/src/typewriter/index.d.ts +1 -1
  765. package/types/src/typography/typography.d.ts +3 -36
  766. package/types/src/visually-hidden/visually-hidden.d.ts +3 -3
  767. package/types/src/window/window.d.ts +3 -3
  768. package/dist/agent/index.es-Dymj8REP.js +0 -489
  769. package/dist/agent/index.es-Dymj8REP.js.map +0 -1
  770. package/dist/area-BGBCMC79.js.map +0 -1
  771. package/dist/area-D7l9KR2N.cjs +0 -12
  772. package/dist/area-D7l9KR2N.cjs.map +0 -1
  773. package/dist/autocomplete-BPD5uraA.cjs +0 -115
  774. package/dist/autocomplete-BPD5uraA.cjs.map +0 -1
  775. package/dist/autocomplete-C2P0Soht.js.map +0 -1
  776. package/dist/boat-BkIO-0No.cjs +0 -80
  777. package/dist/boat-BkIO-0No.cjs.map +0 -1
  778. package/dist/boat-DXZ0k7oa.js.map +0 -1
  779. package/dist/busy-DGYhpTnO.cjs.map +0 -1
  780. package/dist/busy-iRjq6Nvd.js.map +0 -1
  781. package/dist/card-DjYnCckw.cjs.map +0 -1
  782. package/dist/card-wUTjx0EC.js.map +0 -1
  783. package/dist/checkbox-CiYEtw9F.cjs +0 -39
  784. package/dist/checkbox-CiYEtw9F.cjs.map +0 -1
  785. package/dist/checkbox-VBSenxgb.js.map +0 -1
  786. package/dist/chips-BDS9lkPa.js.map +0 -1
  787. package/dist/chips-D6ptH5re.cjs.map +0 -1
  788. package/dist/code-highlight-Bi91XHJN.js.map +0 -1
  789. package/dist/code-highlight-BzRmBZzz.cjs.map +0 -1
  790. package/dist/components-DkmEgyAc.cjs +0 -73
  791. package/dist/components.cjs +0 -1
  792. package/dist/components.js +0 -2
  793. package/dist/context-BerzpUhI.js +0 -3
  794. package/dist/context-C6dHUHhi.cjs +0 -1
  795. package/dist/date-range-BmFxTXiU.cjs +0 -131
  796. package/dist/date-range-BmFxTXiU.cjs.map +0 -1
  797. package/dist/date-range-ClTMg1AB.js.map +0 -1
  798. package/dist/date-range-inline-B9Dp2z6C.cjs +0 -43
  799. package/dist/delay-BHODnTg-.cjs +0 -9
  800. package/dist/delay-BHODnTg-.cjs.map +0 -1
  801. package/dist/delay-Dlk0A3he.js +0 -347
  802. package/dist/delay-Dlk0A3he.js.map +0 -1
  803. package/dist/details-CPjlqQD4.js.map +0 -1
  804. package/dist/details-Cz9ok9si.cjs.map +0 -1
  805. package/dist/dialog-service-CzDO08Gy.cjs.map +0 -1
  806. package/dist/dialog-service-DH-tjPuE.js.map +0 -1
  807. package/dist/divider-CILo3_vi.cjs.map +0 -1
  808. package/dist/divider-ghgyw5CU.js.map +0 -1
  809. package/dist/expand-CbjBr_Ds.js.map +0 -1
  810. package/dist/expand-r3OrSoDk.cjs +0 -141
  811. package/dist/expand-r3OrSoDk.cjs.map +0 -1
  812. package/dist/extra-BZeZOMBI.cjs.map +0 -1
  813. package/dist/extra-DK9MQtPJ.js.map +0 -1
  814. package/dist/float-CuZ8LOgB.cjs +0 -1
  815. package/dist/flow-BPDtbhLe.js +0 -386
  816. package/dist/flow-BPDtbhLe.js.map +0 -1
  817. package/dist/flow-Dn9AZktE.cjs +0 -1
  818. package/dist/flow-Dn9AZktE.cjs.map +0 -1
  819. package/dist/form-rCZqoAoK.js.map +0 -1
  820. package/dist/form-wI58M85H.cjs.map +0 -1
  821. package/dist/handover/agent-runtime-v2-loopback.md +0 -71
  822. package/dist/handover/claude-design-v2-paste.md +0 -42
  823. package/dist/icons-Drq4kKy2.js.map +0 -1
  824. package/dist/icons-DtdhaZdc.cjs +0 -52
  825. package/dist/icons-DtdhaZdc.cjs.map +0 -1
  826. package/dist/iframe-BkwwWIbQ.cjs +0 -24
  827. package/dist/iframe-BkwwWIbQ.cjs.map +0 -1
  828. package/dist/iframe-BmyHW8km.js.map +0 -1
  829. package/dist/index.es-BgmFX1JM.cjs +0 -1
  830. package/dist/index.es-BgmFX1JM.cjs.map +0 -1
  831. package/dist/index.es-CLyb_o3Y.js +0 -489
  832. package/dist/index.es-CLyb_o3Y.js.map +0 -1
  833. package/dist/input-BGNZlfL8.cjs.map +0 -1
  834. package/dist/input-Bc3bVISm.js.map +0 -1
  835. package/dist/input-chip-BQrjpjaQ.js.map +0 -1
  836. package/dist/input-chip-DN-cwf11.cjs.map +0 -1
  837. package/dist/intersection-BrXp4YTO.js +0 -12
  838. package/dist/intersection-BrXp4YTO.js.map +0 -1
  839. package/dist/intersection-DqBqnpgh.cjs +0 -1
  840. package/dist/intersection-DqBqnpgh.cjs.map +0 -1
  841. package/dist/layout-7eyMBmZk.cjs +0 -17
  842. package/dist/layout-7eyMBmZk.cjs.map +0 -1
  843. package/dist/layout-Ox6nJkzC.js +0 -268
  844. package/dist/layout-Ox6nJkzC.js.map +0 -1
  845. package/dist/lightbox-CY52Z_ig.js.map +0 -1
  846. package/dist/lightbox-H8Uq3AXy.cjs +0 -202
  847. package/dist/lightbox-H8Uq3AXy.cjs.map +0 -1
  848. package/dist/list-BGjVo6zb.cjs +0 -40
  849. package/dist/list-BGjVo6zb.cjs.map +0 -1
  850. package/dist/list-D7wUxu1C.js.map +0 -1
  851. package/dist/litElement.mixin-CszkJuNl.js +0 -12
  852. package/dist/litElement.mixin-CszkJuNl.js.map +0 -1
  853. package/dist/litElement.mixin-qh5-IIUq.cjs +0 -1
  854. package/dist/litElement.mixin-qh5-IIUq.cjs.map +0 -1
  855. package/dist/mailbox--EN-JhjV.js.map +0 -1
  856. package/dist/mailbox-DLiBGJhY.cjs.map +0 -1
  857. package/dist/map-B0S_q3ma.js.map +0 -1
  858. package/dist/map-EDQN0I6e.cjs +0 -80
  859. package/dist/map-EDQN0I6e.cjs.map +0 -1
  860. package/dist/menu-3edZGQ1x.cjs.map +0 -1
  861. package/dist/menu-COeFpb6n.js.map +0 -1
  862. package/dist/metric.cjs +0 -69
  863. package/dist/metric.cjs.map +0 -1
  864. package/dist/metric.js +0 -93
  865. package/dist/metric.js.map +0 -1
  866. package/dist/mixins.cjs.map +0 -1
  867. package/dist/mixins.js.map +0 -1
  868. package/dist/notification-CC-TFN5v.js.map +0 -1
  869. package/dist/notification-P4c-kFdH.cjs +0 -23
  870. package/dist/notification-P4c-kFdH.cjs.map +0 -1
  871. package/dist/option-BwAF4nAw.js.map +0 -1
  872. package/dist/option-Cu0ertuF.cjs +0 -43
  873. package/dist/option-Cu0ertuF.cjs.map +0 -1
  874. package/dist/progress-Bk_Q1Shy.js.map +0 -1
  875. package/dist/progress-Yz6EMNSu.cjs.map +0 -1
  876. package/dist/provide-CYgj58u_.cjs +0 -1
  877. package/dist/provide-CYgj58u_.cjs.map +0 -1
  878. package/dist/provide-ydIskwf2.js +0 -107
  879. package/dist/provide-ydIskwf2.js.map +0 -1
  880. package/dist/radio-group-BcdcjLNC.js.map +0 -1
  881. package/dist/radio-group-BpBz5tRA.cjs +0 -40
  882. package/dist/radio-group-BpBz5tRA.cjs.map +0 -1
  883. package/dist/scroll-DXQv0ejL.js.map +0 -1
  884. package/dist/scroll-DbZMTv0K.cjs +0 -26
  885. package/dist/scroll-DbZMTv0K.cjs.map +0 -1
  886. package/dist/search-CwMav5QB.cjs +0 -1
  887. package/dist/select-BV4lK2zy.cjs.map +0 -1
  888. package/dist/select-DKyGWDsG.js.map +0 -1
  889. package/dist/sheet-BAI_jH1t.cjs +0 -35
  890. package/dist/sheet-BAI_jH1t.cjs.map +0 -1
  891. package/dist/sheet-C3TLKItO.js.map +0 -1
  892. package/dist/sheet.service-RcDBwHmv.cjs +0 -1
  893. package/dist/skills/schmancy/store.md +0 -126
  894. package/dist/skills/store.md +0 -126
  895. package/dist/sound.service-BEN6Xjy_.cjs +0 -1
  896. package/dist/sound.service-BEN6Xjy_.cjs.map +0 -1
  897. package/dist/sound.service-DWZe6swU.js.map +0 -1
  898. package/dist/splash-screen-DbI5RgBf.js.map +0 -1
  899. package/dist/splash-screen-DoHRTHi8.cjs +0 -41
  900. package/dist/splash-screen-DoHRTHi8.cjs.map +0 -1
  901. package/dist/src-00DfxCJq.js.map +0 -1
  902. package/dist/src-C_JjQovE.cjs +0 -269
  903. package/dist/src-C_JjQovE.cjs.map +0 -1
  904. package/dist/store-CjFHCSDb.cjs +0 -1
  905. package/dist/store-CjFHCSDb.cjs.map +0 -1
  906. package/dist/store-CjzZDQt8.js +0 -1654
  907. package/dist/store-CjzZDQt8.js.map +0 -1
  908. package/dist/store.cjs +0 -1
  909. package/dist/store.js +0 -2
  910. package/dist/surface-D-GWBcsh.cjs +0 -7
  911. package/dist/surface-D-GWBcsh.cjs.map +0 -1
  912. package/dist/surface-D23JtxYP.js +0 -22
  913. package/dist/surface-D23JtxYP.js.map +0 -1
  914. package/dist/surface.mixin-DqMwoddO.js +0 -320
  915. package/dist/surface.mixin-DqMwoddO.js.map +0 -1
  916. package/dist/surface.mixin-DxOi-xo0.cjs +0 -297
  917. package/dist/surface.mixin-DxOi-xo0.cjs.map +0 -1
  918. package/dist/table-C7b73kdg.cjs +0 -63
  919. package/dist/table-C7b73kdg.cjs.map +0 -1
  920. package/dist/table-CTrhV9-k.js +0 -631
  921. package/dist/table-CTrhV9-k.js.map +0 -1
  922. package/dist/tabs-Ce55RbwF.js.map +0 -1
  923. package/dist/tabs-DAzB8O7w.cjs +0 -31
  924. package/dist/tabs-DAzB8O7w.cjs.map +0 -1
  925. package/dist/tailwind.mixin-DRI1oTYQ.cjs +0 -2
  926. package/dist/tailwind.mixin-DRI1oTYQ.cjs.map +0 -1
  927. package/dist/tailwind.mixin-mdQR3BEO.js +0 -219
  928. package/dist/tailwind.mixin-mdQR3BEO.js.map +0 -1
  929. package/dist/textarea-DjN1D9u0.js.map +0 -1
  930. package/dist/textarea-PuHxBvJA.cjs +0 -39
  931. package/dist/textarea-PuHxBvJA.cjs.map +0 -1
  932. package/dist/theme-B-IJ2r7Q.cjs +0 -181
  933. package/dist/theme-button-BSbYmS4p.cjs +0 -8
  934. package/dist/theme-button-BSbYmS4p.cjs.map +0 -1
  935. package/dist/theme-button-CEMeAUOL.js.map +0 -1
  936. package/dist/theme.service-DxJPUGlu.cjs +0 -1
  937. package/dist/theme.service-DxJPUGlu.cjs.map +0 -1
  938. package/dist/theme.service-cOfPrtfe.js.map +0 -1
  939. package/dist/tslib.es6-Cnt75pb6.cjs +0 -1
  940. package/dist/tslib.es6-Cnt75pb6.cjs.map +0 -1
  941. package/dist/tslib.es6-DMzzJKHV.js +0 -7
  942. package/dist/tslib.es6-DMzzJKHV.js.map +0 -1
  943. package/dist/utils-Bp2jhyZc.js.map +0 -1
  944. package/dist/utils-CBPQvxNW.cjs +0 -1
  945. package/dist/utils-CBPQvxNW.cjs.map +0 -1
  946. package/dist/window-CrjZdf7Y.js.map +0 -1
  947. package/dist/window-DTUARSrU.cjs +0 -59
  948. package/dist/window-DTUARSrU.cjs.map +0 -1
  949. package/skills/schmancy/store.md +0 -126
  950. package/src/components/form-elements/index.ts +0 -1
  951. package/src/components/index.ts +0 -1
  952. package/src/layout/flex/flex.scss +0 -4
  953. package/src/layout/flex/flex.ts +0 -74
  954. package/src/layout/flex/index.ts +0 -1
  955. package/src/layout/grid/.readme +0 -79
  956. package/src/layout/grid/grid.scss +0 -5
  957. package/src/layout/grid/grid.ts +0 -121
  958. package/src/layout/grid/index.ts +0 -1
  959. package/src/layout/layout.ts +0 -122
  960. package/src/layout/v2/flex.ts +0 -243
  961. package/src/layout/v2/index.ts +0 -1
  962. package/src/metric/index.ts +0 -1
  963. package/src/metric/metric.ts +0 -127
  964. package/src/store/context-array.ts +0 -358
  965. package/src/store/context-collection.ts +0 -218
  966. package/src/store/context-create.ts +0 -284
  967. package/src/store/context-object.ts +0 -298
  968. package/src/store/filter-directive.ts +0 -614
  969. package/src/store/index.ts +0 -10
  970. package/src/store/selector-hook.ts +0 -259
  971. package/src/store/selectors.ts +0 -289
  972. package/src/store/storage-manager.ts +0 -269
  973. package/src/store/store.class.ts +0 -239
  974. package/src/store/types.ts +0 -327
  975. package/src/tabs/tabs-compatibility.ts +0 -20
  976. package/src/typewriter/typewriter.ts +0 -410
  977. package/types/src/area/route.test.d.ts +0 -20
  978. package/types/src/button/button.test.d.ts +0 -1
  979. package/types/src/chips/chip.d.ts +0 -3
  980. package/types/src/components/index.d.ts +0 -1
  981. package/types/src/content-drawer/$sheet.d.ts +0 -14
  982. package/types/src/dialog/dailog.d.ts +0 -116
  983. package/types/src/dialog/dialog-content.d.ts +0 -17
  984. package/types/src/directives/guard.d.ts +0 -1
  985. package/types/src/directives/visibility.d.ts +0 -11
  986. package/types/src/form/form-v2.d.ts +0 -22
  987. package/types/src/input/input-v2.d.ts +0 -250
  988. package/types/src/layout/flex/flex.d.ts +0 -26
  989. package/types/src/layout/flex/index.d.ts +0 -1
  990. package/types/src/layout/grid/grid.d.ts +0 -39
  991. package/types/src/layout/grid/index.d.ts +0 -1
  992. package/types/src/layout/layout.d.ts +0 -59
  993. package/types/src/layout/v2/flex.d.ts +0 -65
  994. package/types/src/layout/v2/grid.d.ts +0 -51
  995. package/types/src/layout/v2/index.d.ts +0 -1
  996. package/types/src/lightbox/flip.directive.d.ts +0 -22
  997. package/types/src/metric/index.d.ts +0 -1
  998. package/types/src/metric/metric.d.ts +0 -39
  999. package/types/src/notification/outlet.d.ts +0 -10
  1000. package/types/src/sheet/header.d.ts +0 -10
  1001. package/types/src/store/context-array.d.ts +0 -83
  1002. package/types/src/store/context-collection.d.ts +0 -74
  1003. package/types/src/store/context-create.d.ts +0 -43
  1004. package/types/src/store/context-object.d.ts +0 -46
  1005. package/types/src/store/filter-directive.d.ts +0 -116
  1006. package/types/src/store/immer-integration.d.ts +0 -54
  1007. package/types/src/store/index.d.ts +0 -10
  1008. package/types/src/store/selector-hook.d.ts +0 -46
  1009. package/types/src/store/selectors.d.ts +0 -90
  1010. package/types/src/store/storage-manager.d.ts +0 -48
  1011. package/types/src/store/store.class.d.ts +0 -73
  1012. package/types/src/store/types.d.ts +0 -241
  1013. package/types/src/tabs/tabs-compatibility.d.ts +0 -13
  1014. package/types/src/theme/theme.elevation.d.ts +0 -131
  1015. package/types/src/theme/theme.motion.d.ts +0 -198
  1016. package/types/src/theme/theme.shape.d.ts +0 -144
  1017. package/types/src/theme/theme.state.d.ts +0 -546
  1018. package/types/src/theme/theme.typography.d.ts +0 -74
  1019. package/types/src/tooltip/tooltip.d.ts +0 -33
  1020. package/types/src/typewriter/typewriter.d.ts +0 -94
  1021. /package/dist/agent/{flow-CvG1fLW5.js → flow-CaPi2G8y.js} +0 -0
  1022. /package/dist/agent/{vendor-material-color-DcL7ZPxx.js → vendor-material-color-Be96dpGE.js} +0 -0
  1023. /package/dist/{animation-hXFClrIn.js → animation-BK-8BwY8.js} +0 -0
  1024. /package/dist/{animation-CQRdLgzX.cjs → animation-CO_Csq84.cjs} +0 -0
  1025. /package/dist/{decorate-D_utPUsC.js → decorate-23nYs4Le.js} +0 -0
  1026. /package/dist/{decorate-F9CuyeHg.cjs → decorate-DpFmy0nm.cjs} +0 -0
  1027. /package/dist/{hashContent-B2IntJQf.js → hashContent-1ARKIsx9.js} +0 -0
  1028. /package/dist/{hashContent-CahnEuut.cjs → hashContent-Bp5S6T4U.cjs} +0 -0
  1029. /package/dist/{lazy-D6R5N5v4.js → lazy-B0ia54tT.js} +0 -0
  1030. /package/dist/{lazy-BDNnH_r7.cjs → lazy-Dq9mRRjT.cjs} +0 -0
  1031. /package/dist/{reduced-motion-BZTLqAyl.js → reduced-motion-D-L12p7G.js} +0 -0
  1032. /package/dist/{reduced-motion-9RjNnhIg.cjs → reduced-motion-Ds-HjMzn.cjs} +0 -0
  1033. /package/dist/{rxjs-utils-DJbZRjp3.cjs → rxjs-utils-Csnks202.cjs} +0 -0
  1034. /package/dist/{rxjs-utils-CKTnEKUH.js → rxjs-utils-d-ivVN84.js} +0 -0
  1035. /package/dist/{theme.events-NuihzD_p.js → theme.events-Cv7N4Toe.js} +0 -0
  1036. /package/dist/{theme.events-DakXxZeP.cjs → theme.events-DM4H5F2d.cjs} +0 -0
  1037. /package/dist/{theme.interface-DTwkuAKJ.cjs → theme.interface-D9l33b-M.cjs} +0 -0
  1038. /package/dist/{theme.interface-Buged9Cg.js → theme.interface-DnVNre4O.js} +0 -0
  1039. /package/src/{directives/typewriter.ts → typewriter/typewriter.directive.ts} +0 -0
  1040. /package/types/src/{components/form-elements → payment-card-form}/index.d.ts +0 -0
  1041. /package/types/src/{directives/typewriter.d.ts → typewriter/typewriter.directive.d.ts} +0 -0
@@ -1,107 +1,7 @@
1
1
  {
2
- "schemaVersion": "1.1.0",
2
+ "schemaVersion": "1.0.0",
3
3
  "readme": "# Schmancy\n\nA Web Component UI library built on Lit, RxJS, and Tailwind CSS. Surfaces are glass. Depth is light. Interactions are physics.\n\n## Agent runtime\n\nFor sandboxed-iframe agents (Claude Design, Claude Artifacts, any LLM that can\nonly write HTML), schmancy ships a single-URL runtime at `@mhmo91/schmancy/agent`.\nDrop one `<script type=\"module\">` tag and every `<schmancy-*>` element is\nregistered. No bundler, no bare specifiers, no npm install.\n\n```html\n<script type=\"module\">\n import { $dialog, theme } from 'https://esm.sh/@mhmo91/schmancy/agent';\n</script>\n<schmancy-theme root scheme=\"dark\">\n <schmancy-surface type=\"solid\" fill=\"all\">\n <schmancy-button>Hi</schmancy-button>\n <schmancy-skill></schmancy-skill>\n </schmancy-surface>\n</schmancy-theme>\n```\n\nThe `<schmancy-skill>` tag installs `window.schmancy` for runtime discovery:\n\n- `window.schmancy.help()` — full manifest (CEM v1 shape).\n- `window.schmancy.help('schmancy-button')` — one tag's attributes, events, slots, CSS parts.\n- `window.schmancy.tokens()` — build-time-extracted list of `--schmancy-*` theme tokens.\n- `window.schmancy.manifestUrl` — Blob URL; `fetch()` it for the same data.\n- `window.schmancy.a11yAudit()` — walks the live DOM and reports ARIA / shadow-root / form-association status per instance.\n- `window.schmancy.platformPrimitive('schmancy-dialog')` — map to the native element a component wraps (present when the component's JSDoc has `@platform`).\n- `window.schmancy.capabilities()` — runtime feature probe (`popover`, `declarativeShadowDom`, `scopedRegistries`, `trustedTypes`, `cssRegisteredProperties`, `elementInternalsAria`, `formAssociated`, `adoptedStyleSheets`). Agents use this to adapt to the sandbox they're in rather than the one they expect.\n\nEvery enum-typed attribute carries a `values` array — e.g. `schmancy-button`'s `variant` ships `[\"elevated\", \"filled\", \"filled tonal\", \"tonal\", \"outlined\", \"text\"]` so agents never have to parse `\"'filled' | 'tonal' | ...\"` strings.\n\nThe manifest is also emitted as a sibling file at `@mhmo91/schmancy/agent/manifest`\nfor tooling that prefers reading JSON from disk.\n\n## Install\n\n```bash\nnpm install @mhmo91/schmancy\n```\n\n```typescript\nimport '@mhmo91/schmancy'\nimport { magnetic, cursorGlow, gravity } from '@mhmo91/schmancy/directives'\n```\n\n## Use with Claude Code\n\nSchmancy ships a Claude Code plugin. In any Claude Code session, run:\n\n```\n/plugin install https://github.com/samwaai/schmancy\n```\n\nClaude now knows every Schmancy component, foundation pattern, and convention in your project. The skill activates automatically when you work on schmancy code — no CLAUDE.md edits, no symlinks.\n\n## Quick Start\n\n```html\n<schmancy-theme root scheme=\"dark\">\n <schmancy-surface type=\"solid\" fill=\"all\">\n <schmancy-area name=\"root\" .default=${lazy(() => import('./home.page'))}>\n <schmancy-route when=\"home-page\" .component=${lazy(() => import('./home.page'))} />\n </schmancy-area>\n </schmancy-surface>\n</schmancy-theme>\n```\n\n## Design: Luminous Glass\n\n| Surface | Opacity | Blur | Purpose |\n|---------|---------|------|---------|\n| `solid` | 92% | — | Dense glass, high readability |\n| `subtle` | 78% | 8px | Frosted panel (default) |\n| `glass` | 55% | 16px | Overlays, dialogs, dropdowns |\n| `luminous` | 42% | 20px | Hero panels with glow halo |\n\n## Docs\n\nSchmancy is organized in four layers:\n\n- **Foundations** — [Area](./skills/schmancy/area.md) · [Store](./skills/schmancy/store.md) · [Mixins ($LitElement)](./skills/schmancy/mixins.md) · [Theme](./skills/schmancy/theme.md) · [Directives](./skills/schmancy/directives.md)\n- **Atoms** — [Typography](./skills/schmancy/typography.md) · [Icons](./skills/schmancy/icons.md) · [Button](./skills/schmancy/button.md) · [Surface](./skills/schmancy/surface.md) · [Divider](./skills/schmancy/divider.md) · [Avatar](./skills/schmancy/avatar.md)\n- **Composites (by job)** — Forms, Navigation, Overlays, Interaction, Feedback, Display\n- **Utilities** — [Animation](./skills/schmancy/animation.md) · [Audio](./skills/schmancy/audio.md) · [Discovery](./skills/schmancy/discovery.md) · [RxJS Utils](./skills/schmancy/rxjs-utils.md) · [Utils](./skills/schmancy/utils.md)\n\n**Full component index:** [skills/schmancy/INDEX.md](./skills/schmancy/INDEX.md) — the single-file map with every tag, service, and convention. Written primarily for AI agents; humans welcome.\n\n## Tech Stack\n\n[Lit](https://lit.dev) · [RxJS](https://rxjs.dev) · [Tailwind CSS v4](https://tailwindcss.com) · [Blackbird](./src/utils/animation.ts)\n\n## License\n\nApache-2.0\n",
4
4
  "modules": [
5
- {
6
- "kind": "javascript-module",
7
- "path": "avatar.ts",
8
- "declarations": [
9
- {
10
- "kind": "class",
11
- "name": "SchmancyAvatar",
12
- "tagName": "schmancy-avatar",
13
- "description": "A customizable avatar component that displays initials or an icon Designed to match the Schmancy design system",
14
- "attributes": [
15
- {
16
- "name": "initials",
17
- "type": {
18
- "text": "string"
19
- },
20
- "default": "''"
21
- },
22
- {
23
- "name": "src",
24
- "type": {
25
- "text": "string"
26
- },
27
- "default": "''"
28
- },
29
- {
30
- "name": "icon",
31
- "type": {
32
- "text": "string"
33
- },
34
- "default": "''"
35
- },
36
- {
37
- "name": "size",
38
- "type": {
39
- "text": "AvatarSize"
40
- },
41
- "values": [
42
- "xxs",
43
- "xs",
44
- "sm",
45
- "md",
46
- "lg",
47
- "xl"
48
- ],
49
- "default": "'md'"
50
- },
51
- {
52
- "name": "color",
53
- "type": {
54
- "text": "AvatarColor"
55
- },
56
- "values": [
57
- "primary",
58
- "secondary",
59
- "tertiary",
60
- "success",
61
- "error",
62
- "neutral"
63
- ],
64
- "default": "'primary'"
65
- },
66
- {
67
- "name": "shape",
68
- "type": {
69
- "text": "AvatarShape"
70
- },
71
- "values": [
72
- "circle",
73
- "square"
74
- ],
75
- "default": "'circle'"
76
- },
77
- {
78
- "name": "bordered",
79
- "type": {
80
- "text": "boolean"
81
- },
82
- "default": "false"
83
- },
84
- {
85
- "name": "status",
86
- "type": {
87
- "text": "AvatarStatus"
88
- },
89
- "values": [
90
- "online",
91
- "offline",
92
- "busy",
93
- "away",
94
- "none"
95
- ],
96
- "default": "'none'"
97
- }
98
- ],
99
- "examples": [
100
- "<schmancy-avatar\n initials=\"JD\"\n size=\"md\"\n color=\"primary\"\n></schmancy-avatar>"
101
- ]
102
- }
103
- ]
104
- },
105
5
  {
106
6
  "kind": "javascript-module",
107
7
  "path": "agent/schmancy-skill.ts",
@@ -122,13 +22,6 @@
122
22
  "kind": "class",
123
23
  "name": "SchmancyArea",
124
24
  "tagName": "schmancy-area",
125
- "description": "Router outlet — renders the active route's component for the named area. Drives the schmancy router via the `area` service.",
126
- "summary": "Mount once per \"addressable region\" of the app (typically the main content area). Use the imperative `area.push({ area, component, params })` service to navigate. Multiple named areas can coexist on a page (e.g. main content + a sheet).",
127
- "platformPrimitive": {
128
- "tag": "div",
129
- "mode": "-",
130
- "note": "Routing outlet. Degrades to an empty div if the tag never registers — routing is lost but the page stays accessible."
131
- },
132
25
  "attributes": [
133
26
  {
134
27
  "name": "name",
@@ -143,15 +36,6 @@
143
36
  "text": "RouteComponent"
144
37
  }
145
38
  }
146
- ],
147
- "events": [
148
- {
149
- "name": "redirect",
150
- "description": "When the area resolves a route to a different destination (programmatic redirect). `detail.from` and `detail.to` are the route names."
151
- }
152
- ],
153
- "examples": [
154
- "<schmancy-area name=\"main\"></schmancy-area>\n<script>\n import { area } from '@mhmo91/schmancy';\n area.push({ area: 'main', component: MyDashboardView, params: { id: 42 } });\n</script>"
155
39
  ]
156
40
  }
157
41
  ]
@@ -219,6 +103,15 @@
219
103
  }
220
104
  }
221
105
  ],
106
+ "events": [
107
+ {
108
+ "name": "redirect",
109
+ "type": {
110
+ "text": "SchmancyRouteRedirectEvent"
111
+ },
112
+ "description": "Fired by the parent schmancy-area on this element when the route's guard emits false. Listen with `@redirect`."
113
+ }
114
+ ],
222
115
  "examples": [
223
116
  "<schmancy-area>\n <schmancy-route\n when=\"users\"\n .component=${UserComponent}\n exact\n ></schmancy-route>\n</schmancy-area>"
224
117
  ]
@@ -233,13 +126,7 @@
233
126
  "kind": "class",
234
127
  "name": "SchmancyAutocomplete",
235
128
  "tagName": "schmancy-autocomplete",
236
- "description": "Combobox with type-ahead filtering over a list of `<schmancy-option>` children. Single or multi-select. Form-associated.",
237
- "summary": "Use when users need to pick from a known list of options but the list is too long for a plain select dropdown. Prefer schmancy-select for short static lists.",
238
- "platformPrimitive": {
239
- "tag": "combobox",
240
- "mode": "change",
241
- "note": "Composed of a schmancy-input + a floating listbox populated from `<schmancy-option>` children. Multi-select renders selections as schmancy-input-chip chips. Degrades to a datalist-backed native input if the tag never registers."
242
- },
129
+ "description": "Autocomplete input component with filtering and multi-select support.",
243
130
  "attributes": [
244
131
  {
245
132
  "name": "required",
@@ -339,15 +226,106 @@
339
226
  },
340
227
  "default": "''"
341
228
  }
342
- ],
343
- "events": [
229
+ ]
230
+ }
231
+ ]
232
+ },
233
+ {
234
+ "kind": "javascript-module",
235
+ "path": "avatar/avatar.ts",
236
+ "declarations": [
237
+ {
238
+ "kind": "class",
239
+ "name": "SchmancyAvatar",
240
+ "tagName": "schmancy-avatar",
241
+ "description": "A customizable avatar component that displays initials or an icon Designed to match the Schmancy design system",
242
+ "attributes": [
344
243
  {
345
- "name": "change",
346
- "description": "`SchmancyAutocompleteChangeEvent` with `{ value }` (single) or `{ value, values }` (multi)."
244
+ "name": "initials",
245
+ "type": {
246
+ "text": "string"
247
+ },
248
+ "default": "''"
249
+ },
250
+ {
251
+ "name": "src",
252
+ "type": {
253
+ "text": "string"
254
+ },
255
+ "default": "''"
256
+ },
257
+ {
258
+ "name": "icon",
259
+ "type": {
260
+ "text": "string"
261
+ },
262
+ "default": "''"
263
+ },
264
+ {
265
+ "name": "size",
266
+ "type": {
267
+ "text": "AvatarSize"
268
+ },
269
+ "values": [
270
+ "xxs",
271
+ "xs",
272
+ "sm",
273
+ "md",
274
+ "lg",
275
+ "xl"
276
+ ],
277
+ "default": "'md'"
278
+ },
279
+ {
280
+ "name": "color",
281
+ "type": {
282
+ "text": "AvatarColor"
283
+ },
284
+ "values": [
285
+ "primary",
286
+ "secondary",
287
+ "tertiary",
288
+ "success",
289
+ "error",
290
+ "neutral"
291
+ ],
292
+ "default": "'primary'"
293
+ },
294
+ {
295
+ "name": "shape",
296
+ "type": {
297
+ "text": "AvatarShape"
298
+ },
299
+ "values": [
300
+ "circle",
301
+ "square"
302
+ ],
303
+ "default": "'circle'"
304
+ },
305
+ {
306
+ "name": "bordered",
307
+ "type": {
308
+ "text": "boolean"
309
+ },
310
+ "default": "false"
311
+ },
312
+ {
313
+ "name": "status",
314
+ "type": {
315
+ "text": "AvatarStatus"
316
+ },
317
+ "values": [
318
+ "online",
319
+ "offline",
320
+ "busy",
321
+ "away",
322
+ "none"
323
+ ],
324
+ "default": "'none'"
347
325
  }
348
326
  ],
349
327
  "examples": [
350
- "<schmancy-autocomplete name=\"country\" label=\"Country\" placeholder=\"Start typing…\">\n <schmancy-option value=\"US\">United States</schmancy-option>\n <schmancy-option value=\"CA\">Canada</schmancy-option>\n <schmancy-option value=\"GB\">United Kingdom</schmancy-option>\n</schmancy-autocomplete>"
328
+ "<schmancy-avatar\n initials=\"JD\"\n size=\"md\"\n color=\"primary\"\n></schmancy-avatar>"
351
329
  ]
352
330
  }
353
331
  ]
@@ -540,13 +518,7 @@
540
518
  "kind": "class",
541
519
  "name": "SchmancyBreadcrumb",
542
520
  "tagName": "schmancy-breadcrumb",
543
- "description": "Breadcrumb trail — navigation history from root to current page. Renders schmancy-breadcrumb-item children with separators between.",
544
- "summary": "Use for deep hierarchical navigation (file explorer paths, e-commerce category chains, admin settings trees). Last item is styled as the current page automatically.",
545
- "platformPrimitive": {
546
- "tag": "nav",
547
- "mode": "-",
548
- "note": "Styled `<nav aria-label=\"Breadcrumb\">`. Degrades to a plain nav if the tag never registers."
549
- },
521
+ "description": "Breadcrumb navigation container. Wraps a list of `schmancy-breadcrumb-item` elements with the correct ARIA landmark and semantics.",
550
522
  "attributes": [
551
523
  {
552
524
  "name": "separator",
@@ -567,22 +539,13 @@
567
539
  "name": "separator",
568
540
  "description": "The separator element."
569
541
  }
570
- ],
571
- "examples": [
572
- "<schmancy-breadcrumb separator=\"›\">\n <schmancy-breadcrumb-item href=\"/\">Home</schmancy-breadcrumb-item>\n <schmancy-breadcrumb-item href=\"/docs\">Docs</schmancy-breadcrumb-item>\n <schmancy-breadcrumb-item>Getting started</schmancy-breadcrumb-item>\n</schmancy-breadcrumb>"
573
542
  ]
574
543
  },
575
544
  {
576
545
  "kind": "class",
577
546
  "name": "SchmancyBreadcrumbItem",
578
547
  "tagName": "schmancy-breadcrumb-item",
579
- "description": "Single segment in a schmancy-breadcrumb trail — a link when `href` is set, or a plain span (the current page) when omitted.",
580
- "summary": "Always nested inside schmancy-breadcrumb. Omit `href` on the current page — it gets aria-current=\"page\" automatically.",
581
- "platformPrimitive": {
582
- "tag": "a",
583
- "mode": "-",
584
- "note": "Renders an `<a>` or `<span>` depending on href. Degrades to a plain anchor/span if the tag never registers."
585
- },
548
+ "description": "Individual breadcrumb item. Renders as a link when `href` is provided, otherwise as a plain span (represents the current page).",
586
549
  "attributes": [
587
550
  {
588
551
  "name": "href",
@@ -604,9 +567,6 @@
604
567
  "name": "",
605
568
  "description": "Label content."
606
569
  }
607
- ],
608
- "examples": [
609
- "<schmancy-breadcrumb-item href=\"/products\">Products</schmancy-breadcrumb-item>"
610
570
  ]
611
571
  }
612
572
  ]
@@ -680,13 +640,7 @@
680
640
  "kind": "class",
681
641
  "name": "SchmancyButton",
682
642
  "tagName": "schmancy-button",
683
- "description": "Material Design button — primary interactive surface for triggering actions or navigation.",
684
- "summary": "Trigger actions or navigate. Form-associated; participates in native form submission.",
685
- "platformPrimitive": {
686
- "tag": "button",
687
- "mode": "click",
688
- "note": "Schmancy-skinned native `<button type=\"submit\">`. When `href` is set, degrades to `<a href=\"…\">`. Falls back to plain `<button>` styled with Tailwind if the tag never registers."
689
- },
643
+ "description": "A button component.",
690
644
  "attributes": [
691
645
  {
692
646
  "name": "variant",
@@ -796,9 +750,6 @@
796
750
  "description": "The underlying native `<button>` (or `<a>` when `href` is set)."
797
751
  }
798
752
  ],
799
- "examples": [
800
- "<schmancy-button variant=\"filled\" @click=${() => save()}>Save</schmancy-button>\n<schmancy-button variant=\"outlined\" href=\"/next\">Continue</schmancy-button>"
801
- ],
802
753
  "contexts": [
803
754
  {
804
755
  "name": "SchmancyButtonSizeContext",
@@ -816,13 +767,7 @@
816
767
  "kind": "class",
817
768
  "name": "SchmnacyIconButton",
818
769
  "tagName": "schmancy-icon-button",
819
- "description": "Icon-only button for toolbar actions, close affordances, or overflow menus.",
820
- "summary": "Compact round/square button wrapping a single icon glyph. Form-associated like schmancy-button.",
821
- "platformPrimitive": {
822
- "tag": "button",
823
- "mode": "click",
824
- "note": "Schmancy-skinned native `<button>` (or `<a>` when `href` is set). aria-label is required for a11y because there's no text content."
825
- },
770
+ "description": "An icon button component.",
826
771
  "attributes": [
827
772
  {
828
773
  "name": "size",
@@ -923,9 +868,6 @@
923
868
  "name": "base",
924
869
  "description": "The underlying native `<button>` (or `<a>` when `href` is set)."
925
870
  }
926
- ],
927
- "examples": [
928
- "<schmancy-icon-button aria-label=\"Close\" @click=${() => close()}>\n <schmancy-icon>close</schmancy-icon>\n</schmancy-icon-button>"
929
871
  ]
930
872
  }
931
873
  ]
@@ -938,21 +880,11 @@
938
880
  "kind": "class",
939
881
  "name": "SchmancyCardAction",
940
882
  "tagName": "schmancy-card-action",
941
- "description": "Action row of a schmancy-card — holds the card's buttons / links (typically aligned bottom-right).",
942
- "summary": "Always nested inside schmancy-card. Holds the primary + secondary CTAs for the card.",
943
- "platformPrimitive": {
944
- "tag": "div",
945
- "mode": "-",
946
- "note": "Styled flex container. Degrades to a plain div if the tag never registers."
947
- },
948
883
  "slots": [
949
884
  {
950
885
  "name": "",
951
886
  "description": "The content of the action"
952
887
  }
953
- ],
954
- "examples": [
955
- "<schmancy-card-action>\n <schmancy-button variant=\"text\">Cancel</schmancy-button>\n <schmancy-button variant=\"filled\">Save</schmancy-button>\n</schmancy-card-action>"
956
888
  ]
957
889
  }
958
890
  ]
@@ -965,13 +897,6 @@
965
897
  "kind": "class",
966
898
  "name": "SchmancyCard",
967
899
  "tagName": "schmancy-card",
968
- "description": "Material Design card — a surface-level container for grouping related content with media / content / actions slots.",
969
- "summary": "Use for discrete pieces of content that appear in a list (a product, a note, a message). Combine with schmancy-card-media / schmancy-card-content / schmancy-card-action children.",
970
- "platformPrimitive": {
971
- "tag": "div",
972
- "mode": "-",
973
- "note": "Styled `<div>`; becomes an `<a>` when `href` is set so the whole card is a single interactive surface. Degrades to a plain div/a if the tag never registers."
974
- },
975
900
  "attributes": [
976
901
  {
977
902
  "name": "type",
@@ -1040,15 +965,6 @@
1040
965
  "default": "''",
1041
966
  "description": "ARIA label for accessibility."
1042
967
  }
1043
- ],
1044
- "events": [
1045
- {
1046
- "name": "schmancy-click",
1047
- "description": "When an interactive card is clicked or activated via keyboard. `detail.value` echoes the card's `type`. Only fires when `interactive` is set."
1048
- }
1049
- ],
1050
- "examples": [
1051
- "<schmancy-card type=\"elevated\" href=\"/items/42\">\n <schmancy-card-media src=\"/thumb.jpg\" alt=\"Thumbnail\"></schmancy-card-media>\n <schmancy-card-content>\n <h3>Title</h3>\n <p>One-line description of the card's content.</p>\n </schmancy-card-content>\n <schmancy-card-action>\n <schmancy-button variant=\"text\">Open</schmancy-button>\n </schmancy-card-action>\n</schmancy-card>"
1052
968
  ]
1053
969
  }
1054
970
  ]
@@ -1060,17 +976,7 @@
1060
976
  {
1061
977
  "kind": "class",
1062
978
  "name": "SchmancyCardContent",
1063
- "tagName": "schmancy-card-content",
1064
- "description": "Content region of a schmancy-card — holds the card's headline, supporting text, and inline controls.",
1065
- "summary": "Always nested inside schmancy-card. The padded content block between the media and action rows.",
1066
- "platformPrimitive": {
1067
- "tag": "div",
1068
- "mode": "-",
1069
- "note": "Styled `<div>` with padding. Degrades to a plain div if the tag never registers."
1070
- },
1071
- "examples": [
1072
- "<schmancy-card-content>\n <h3>Card title</h3>\n <p>Supporting text that describes the card's subject.</p>\n</schmancy-card-content>"
1073
- ]
979
+ "tagName": "schmancy-card-content"
1074
980
  }
1075
981
  ]
1076
982
  },
@@ -1082,13 +988,6 @@
1082
988
  "kind": "class",
1083
989
  "name": "SchmancyCardMedia",
1084
990
  "tagName": "schmancy-card-media",
1085
- "description": "Media region of a schmancy-card — the image / thumbnail at the top of the card.",
1086
- "summary": "Always nested inside schmancy-card. Pass `src` + `alt` props or slot an `<img>` / `<video>` for custom media.",
1087
- "platformPrimitive": {
1088
- "tag": "img",
1089
- "mode": "-",
1090
- "note": "Renders an `<img>` (or wraps a slotted media element). Degrades to a styled `<img>` if the tag never registers."
1091
- },
1092
991
  "attributes": [
1093
992
  {
1094
993
  "name": "src",
@@ -1118,9 +1017,6 @@
1118
1017
  },
1119
1018
  "default": "''"
1120
1019
  }
1121
- ],
1122
- "examples": [
1123
- "<schmancy-card-media src=\"/thumb.jpg\" alt=\"Product photo\"></schmancy-card-media>"
1124
1020
  ]
1125
1021
  }
1126
1022
  ]
@@ -1335,13 +1231,6 @@
1335
1231
  "kind": "class",
1336
1232
  "name": "SchmancyCheckboxElement",
1337
1233
  "tagName": "schmancy-checkbox",
1338
- "description": "Binary checkbox for multi-select or boolean form fields. Wraps Material Web's `<md-checkbox>`; form-associated.",
1339
- "summary": "Use for \"select many from a list\" or any boolean that's part of a form submission. Prefer schmancy-switch for immediate-effect toggles.",
1340
- "platformPrimitive": {
1341
- "tag": "checkbox",
1342
- "mode": "change",
1343
- "note": "Wraps `<md-checkbox>` from `@material/web`. Degrades to styled native `<input type=\"checkbox\">` if the tag never registers."
1344
- },
1345
1234
  "attributes": [
1346
1235
  {
1347
1236
  "name": "value",
@@ -1402,7 +1291,7 @@
1402
1291
  "events": [
1403
1292
  {
1404
1293
  "name": "valueChange",
1405
- "description": "`CustomEvent<{ value: boolean }>` when the checkbox is toggled."
1294
+ "description": "Event fired when the checkbox value changes."
1406
1295
  }
1407
1296
  ],
1408
1297
  "slots": [
@@ -1410,9 +1299,6 @@
1410
1299
  "name": "",
1411
1300
  "description": "The label for the checkbox."
1412
1301
  }
1413
- ],
1414
- "examples": [
1415
- "<schmancy-checkbox name=\"tos\" required>I accept the terms</schmancy-checkbox>"
1416
1302
  ]
1417
1303
  }
1418
1304
  ]
@@ -1425,13 +1311,7 @@
1425
1311
  "kind": "class",
1426
1312
  "name": "SchmancyAssistChip",
1427
1313
  "tagName": "schmancy-assist-chip",
1428
- "description": "Assist chip single-tap trigger for a contextual action (open calendar event, share content, jump to related view). Distinct from filter and input chips: assist chips have no selected state; clicking fires `action`.",
1429
- "summary": "Use for \"do this thing\" suggestions surfaced in context (next to a date, after a recipient list, near a long description). Pair with schmancy-icon for the leading glyph.",
1430
- "platformPrimitive": {
1431
- "tag": "button",
1432
- "mode": "click",
1433
- "note": "Material 3 assist-chip semantics. Degrades to a plain `<button>` if the tag never registers."
1434
- },
1314
+ "description": "Assist chip component - prompts user actions like opening calendar events or sharing content Pure Schmancy implementation with Tailwind CSS and RxJS state management",
1435
1315
  "attributes": [
1436
1316
  {
1437
1317
  "name": "value",
@@ -1481,15 +1361,6 @@
1481
1361
  "default": "true",
1482
1362
  "description": "Elevated style variant - true by default per M3 spec for assist chips"
1483
1363
  }
1484
- ],
1485
- "events": [
1486
- {
1487
- "name": "action",
1488
- "description": "When the chip is clicked or activated via keyboard. `detail.value` echoes the chip's `value` attribute."
1489
- }
1490
- ],
1491
- "examples": [
1492
- "<schmancy-assist-chip @action=${(e) => share(e.detail.value)}>\n <schmancy-icon slot=\"icon\">share</schmancy-icon>\n Share\n</schmancy-assist-chip>"
1493
1364
  ]
1494
1365
  }
1495
1366
  ]
@@ -1502,13 +1373,6 @@
1502
1373
  "kind": "class",
1503
1374
  "name": "SchmancyChips",
1504
1375
  "tagName": "schmancy-chips",
1505
- "description": "Filter-chip group — container for selectable `<schmancy-chip>` children. Single or multi-select.",
1506
- "summary": "Use for filtering or choosing from 2–8 mutually-visible options (\"Status: active / paused / archived\"). Prefer schmancy-select when the list gets long or vertical.",
1507
- "platformPrimitive": {
1508
- "tag": "chip-group",
1509
- "mode": "change",
1510
- "note": "No direct native equivalent. Degrades to a styled schmancy-select with similar semantics if the tag never registers."
1511
- },
1512
1376
  "attributes": [
1513
1377
  {
1514
1378
  "name": "wrap",
@@ -1536,15 +1400,6 @@
1536
1400
  ],
1537
1401
  "default": "'start'"
1538
1402
  }
1539
- ],
1540
- "events": [
1541
- {
1542
- "name": "change",
1543
- "description": "`CustomEvent<{ value: string }>` (single) or `{ values: string[] }` (multi)."
1544
- }
1545
- ],
1546
- "examples": [
1547
- "<schmancy-chips multi @change=${(e) => this.filters = e.detail.values}>\n <schmancy-chip value=\"active\">Active</schmancy-chip>\n <schmancy-chip value=\"paused\">Paused</schmancy-chip>\n <schmancy-chip value=\"archived\">Archived</schmancy-chip>\n</schmancy-chips>"
1548
1403
  ]
1549
1404
  }
1550
1405
  ]
@@ -1557,13 +1412,7 @@
1557
1412
  "kind": "class",
1558
1413
  "name": "SchmancyInputChip",
1559
1414
  "tagName": "schmancy-input-chip",
1560
- "description": "Input chip displays user-provided information (tags, recipients, filters) that can be removed but not toggled. IMPORTANT: Per Material Design 3 specification, input chips do NOT have selected state. They represent discrete pieces of user input (like entered tags, selections from lists, etc.) that can only be removed, not toggled on/off. Use cases: - Displaying selected recipients in an email - Showing applied filters that can be removed - Tags or keywords entered by the user - Selected items from a multi-select dropdown",
1561
- "summary": "Removable pill that represents a single user input value. No selected state — use schmancy-chip (filter chip) for toggleable options.",
1562
- "platformPrimitive": {
1563
- "tag": "chip",
1564
- "mode": "remove",
1565
- "note": "No native equivalent. Composed of a labeled pill + close button. Degrades to a styled `<span>` with a trailing close `<button>` if the tag never registers."
1566
- },
1415
+ "description": "Input chip component - represents user-provided information that can be removed. IMPORTANT: Per Material Design 3 specification, input chips do NOT have selected state. They represent discrete pieces of user input (like entered tags, selections from lists, etc.) that can only be removed, not toggled on/off. Use cases: - Displaying selected recipients in an email - Showing applied filters that can be removed - Tags or keywords entered by the user - Selected items from a multi-select dropdown",
1567
1416
  "attributes": [
1568
1417
  {
1569
1418
  "name": "value",
@@ -1638,13 +1487,7 @@
1638
1487
  "kind": "class",
1639
1488
  "name": "SchmancySuggestionChip",
1640
1489
  "tagName": "schmancy-suggestion-chip",
1641
- "description": "Suggestion chip single-tap insertion of a recommended value. Distinct from filter chips (no selected state) and assist chips (assist triggers an action; suggestion offers a value the user can pick).",
1642
- "summary": "Use for \"would you also like to…\" prompts above a search input or below a message thread. Click fires `action` with the chip's `value` so the parent can insert it into a field or trigger a search.",
1643
- "platformPrimitive": {
1644
- "tag": "button",
1645
- "mode": "click",
1646
- "note": "Material 3 suggestion-chip semantics. Degrades to a plain `<button>` if the tag never registers."
1647
- },
1490
+ "description": "Suggestion chip component - provides contextual recommendations to users IMPORTANT: Suggestion chips do NOT have a selected state. They are designed to provide suggestions and recommendations that trigger actions when clicked. Unlike filter chips, they cannot be toggled on/off. Pure Schmancy implementation with Tailwind CSS and RxJS state management",
1648
1491
  "attributes": [
1649
1492
  {
1650
1493
  "name": "value",
@@ -1694,15 +1537,6 @@
1694
1537
  "default": "false",
1695
1538
  "description": "Elevated style variant - flat by default per M3 spec"
1696
1539
  }
1697
- ],
1698
- "events": [
1699
- {
1700
- "name": "action",
1701
- "description": "When the chip is clicked or activated via keyboard. `detail.value` echoes the chip's `value` attribute."
1702
- }
1703
- ],
1704
- "examples": [
1705
- "<schmancy-suggestion-chip value=\"yesterday\" @action=${(e) => setRange(e.detail.value)}>\n Yesterday\n</schmancy-suggestion-chip>"
1706
1540
  ]
1707
1541
  }
1708
1542
  ]
@@ -2313,13 +2147,6 @@
2313
2147
  "kind": "class",
2314
2148
  "name": "SchmancyDetails",
2315
2149
  "tagName": "schmancy-details",
2316
- "description": "Expandable disclosure panel — a styled `<details>` / `<summary>` pair with animated expand + overlay options.",
2317
- "summary": "Use for progressive-disclosure content: FAQs, collapsible settings sections, accordion-style lists. Prefer schmancy-expand for full-page accordions where only one section can be open at a time.",
2318
- "platformPrimitive": {
2319
- "tag": "details",
2320
- "mode": "toggle",
2321
- "note": "Wraps native `<details>`/`<summary>`. Degrades to the native element if the tag never registers — same keyboard accessibility, just no animation."
2322
- },
2323
2150
  "attributes": [
2324
2151
  {
2325
2152
  "name": "summary",
@@ -2381,15 +2208,6 @@
2381
2208
  },
2382
2209
  "default": "'p-3'"
2383
2210
  }
2384
- ],
2385
- "events": [
2386
- {
2387
- "name": "toggle",
2388
- "description": "When the open state changes (bubbles from the native `<details>`)."
2389
- }
2390
- ],
2391
- "examples": [
2392
- "<schmancy-details summary=\"Shipping details\">\n <p>Order ships in 2 business days.</p>\n</schmancy-details>"
2393
2211
  ]
2394
2212
  }
2395
2213
  ]
@@ -2437,13 +2255,7 @@
2437
2255
  "kind": "class",
2438
2256
  "name": "SchmancyDialog",
2439
2257
  "tagName": "schmancy-dialog",
2440
- "description": "Modal dialog content-only (just a styled panel) or confirm mode (title + message + confirm/cancel buttons). Prefer the imperative `$dialog` service for most use cases; use the element directly only when you want a declaratively-positioned dialog.",
2441
- "summary": "Blocks interaction with the rest of the page until dismissed. For quick confirmations, prefer `$dialog.confirm({ ... })` over this element. For arbitrary dialog content driven imperatively, prefer `$dialog.component(MyComponent)`.",
2442
- "platformPrimitive": {
2443
- "tag": "dialog",
2444
- "mode": "close",
2445
- "note": "Positioned overlay in light DOM. Degrades to a styled `<dialog>` if the tag never registers — loses custom animations but keeps focus trap + ESC close."
2446
- },
2258
+ "description": "Unified dialog component that handles both content-only and confirm modes.",
2447
2259
  "attributes": [
2448
2260
  {
2449
2261
  "name": "uid",
@@ -2513,16 +2325,6 @@
2513
2325
  "description": "Whether to hide action buttons (force content mode)"
2514
2326
  }
2515
2327
  ],
2516
- "events": [
2517
- {
2518
- "name": "confirm",
2519
- "description": "In confirm mode, when the confirm button is clicked."
2520
- },
2521
- {
2522
- "name": "cancel",
2523
- "description": "In confirm mode, when the cancel button or ESC is activated."
2524
- }
2525
- ],
2526
2328
  "slots": [
2527
2329
  {
2528
2330
  "name": "default",
@@ -2534,8 +2336,8 @@
2534
2336
  }
2535
2337
  ],
2536
2338
  "examples": [
2537
- "Content mode (no buttons):\n<schmancy-dialog>\n <my-custom-content></my-custom-content>\n</schmancy-dialog>",
2538
- "Confirm mode (with buttons):\n<schmancy-dialog\n title=\"Delete item?\"\n message=\"This action cannot be undone.\"\n confirm-text=\"Delete\"\n cancel-text=\"Keep\"\n></schmancy-dialog>"
2339
+ "Content mode (no buttons):\n\n<schmancy-dialog>\n <my-custom-content></my-custom-content>\n</schmancy-dialog>",
2340
+ "Confirm mode (with buttons):\n\n<schmancy-dialog\n title=\"Confirm Action\"\n message=\"Are you sure?\"\n confirm-text=\"Yes\"\n cancel-text=\"No\"\n></schmancy-dialog>"
2539
2341
  ]
2540
2342
  }
2541
2343
  ]
@@ -2548,13 +2350,6 @@
2548
2350
  "kind": "class",
2549
2351
  "name": "SchmancyDivider",
2550
2352
  "tagName": "schmancy-divider",
2551
- "description": "Thin horizontal (or vertical) separator rule between sections of content.",
2552
- "summary": "Semantic separator between groups — list items, menu sections, content blocks. Uses outline theme token.",
2553
- "platformPrimitive": {
2554
- "tag": "hr",
2555
- "mode": "-",
2556
- "note": "Styled horizontal rule. Degrades to a native `<hr>` if the tag never registers."
2557
- },
2558
2353
  "attributes": [
2559
2354
  {
2560
2355
  "name": "outline",
@@ -2586,9 +2381,6 @@
2586
2381
  ],
2587
2382
  "default": "'start'"
2588
2383
  }
2589
- ],
2590
- "examples": [
2591
- "<schmancy-list-item>First</schmancy-list-item>\n<schmancy-divider></schmancy-divider>\n<schmancy-list-item>Second</schmancy-list-item>"
2592
2384
  ]
2593
2385
  }
2594
2386
  ]
@@ -2601,13 +2393,7 @@
2601
2393
  "kind": "class",
2602
2394
  "name": "SchmancyDropdown",
2603
2395
  "tagName": "schmancy-dropdown",
2604
- "description": "Anchored floating dropdown a generic \"show this content relative to that trigger\" primitive. Unlike schmancy-menu (which uses the dialog service and is list-shaped), dropdown is a low-level popover anchored with Floating UI. Use when you want a custom-shaped overlay tied to a specific trigger element without the menu semantics.",
2605
- "summary": "Prefer schmancy-menu for action lists, schmancy-autocomplete for type-ahead, schmancy-tooltip for hover hints. Reach for schmancy-dropdown when none of those fit — custom filters, color pickers, inline forms anchored to a trigger.",
2606
- "platformPrimitive": {
2607
- "tag": "div",
2608
- "mode": "-",
2609
- "note": "Anchored via Floating UI (autoUpdate, flip, shift). Degrades to inline content if the tag never registers — loses positioning but content stays accessible."
2610
- },
2396
+ "description": "A dropdown component that displays content when triggered.",
2611
2397
  "attributes": [
2612
2398
  {
2613
2399
  "name": "open",
@@ -2648,16 +2434,6 @@
2648
2434
  "description": "Offset distance in pixels"
2649
2435
  }
2650
2436
  ],
2651
- "events": [
2652
- {
2653
- "name": "open",
2654
- "description": "When the dropdown opens."
2655
- },
2656
- {
2657
- "name": "close",
2658
- "description": "When the dropdown closes."
2659
- }
2660
- ],
2661
2437
  "slots": [
2662
2438
  {
2663
2439
  "name": "trigger",
@@ -2667,9 +2443,6 @@
2667
2443
  "name": "",
2668
2444
  "description": "Default slot for the dropdown content"
2669
2445
  }
2670
- ],
2671
- "examples": [
2672
- "<schmancy-dropdown>\n <schmancy-button slot=\"trigger\">Filters</schmancy-button>\n <schmancy-dropdown-content>\n <schmancy-form>…</schmancy-form>\n </schmancy-dropdown-content>\n</schmancy-dropdown>"
2673
2446
  ]
2674
2447
  }
2675
2448
  ]
@@ -2682,13 +2455,7 @@
2682
2455
  "kind": "class",
2683
2456
  "name": "SchmancyDropdownContent",
2684
2457
  "tagName": "schmancy-dropdown-content",
2685
- "description": "Content panel for a schmancy-dropdown — a styled positioned surface. Always nested inside schmancy-dropdown and placed alongside the trigger slot.",
2686
- "summary": "Nest this inside schmancy-dropdown (not in the trigger slot). Use the `content` CSS part to customize backgrounds / shadows / padding without shadow-root piercing.",
2687
- "platformPrimitive": {
2688
- "tag": "div",
2689
- "mode": "-",
2690
- "note": "Positioned panel with theme-aware styling. Degrades to an inline div if the tag never registers."
2691
- },
2458
+ "description": "Content container for the schmancy-dropdown component.",
2692
2459
  "attributes": [
2693
2460
  {
2694
2461
  "name": "width",
@@ -2741,9 +2508,6 @@
2741
2508
  "name": "content",
2742
2509
  "description": "The inner wrapper element; style to override panel backgrounds, shadows, padding, or borders without shadow-root piercing."
2743
2510
  }
2744
- ],
2745
- "examples": [
2746
- "<schmancy-dropdown>\n <schmancy-button slot=\"trigger\">Open</schmancy-button>\n <schmancy-dropdown-content>\n Panel contents…\n </schmancy-dropdown-content>\n</schmancy-dropdown>"
2747
2511
  ]
2748
2512
  }
2749
2513
  ]
@@ -2756,13 +2520,6 @@
2756
2520
  "kind": "class",
2757
2521
  "name": "SchmancyExpandRoot",
2758
2522
  "tagName": "schmancy-expand-root",
2759
- "description": "Container for schmancy-expand children — coordinates mutual-exclusion so only one child is open at a time. Also renders the portal panel that the active child expands into.",
2760
- "summary": "Always wrap a group of schmancy-expand children. Without a root, each schmancy-expand behaves independently (which is usually not what you want — prefer schmancy-details for that).",
2761
- "platformPrimitive": {
2762
- "tag": "div",
2763
- "mode": "-",
2764
- "note": "Coordinating wrapper. Degrades to a plain div if the tag never registers — children fall back to independent `<details>` behavior."
2765
- },
2766
2523
  "attributes": [
2767
2524
  {
2768
2525
  "name": "type",
@@ -2795,9 +2552,6 @@
2795
2552
  ],
2796
2553
  "default": "'solid'"
2797
2554
  }
2798
- ],
2799
- "examples": [
2800
- "<schmancy-expand-root>\n <schmancy-expand summary=\"Step 1\">…</schmancy-expand>\n <schmancy-expand summary=\"Step 2\">…</schmancy-expand>\n</schmancy-expand-root>"
2801
2555
  ]
2802
2556
  }
2803
2557
  ]
@@ -2810,13 +2564,6 @@
2810
2564
  "kind": "class",
2811
2565
  "name": "SchmancyExpand",
2812
2566
  "tagName": "schmancy-expand",
2813
- "description": "Accordion-style section — expands on click, coordinates with siblings via schmancy-expand-root to close any sibling when a new one opens. Only one schmancy-expand can be open at a time within the same root.",
2814
- "summary": "Use for grouped progressive-disclosure where only one section should be open at a time. Prefer schmancy-details when sections should be independent.",
2815
- "platformPrimitive": {
2816
- "tag": "details",
2817
- "mode": "toggle",
2818
- "note": "Schmancy-skinned accordion section. Degrades to `<details>` if the tag never registers — loses mutual-exclusion behavior but stays functional."
2819
- },
2820
2567
  "attributes": [
2821
2568
  {
2822
2569
  "name": "summary",
@@ -2874,15 +2621,6 @@
2874
2621
  },
2875
2622
  "default": "false"
2876
2623
  }
2877
- ],
2878
- "events": [
2879
- {
2880
- "name": "toggle",
2881
- "description": "When the open state changes."
2882
- }
2883
- ],
2884
- "examples": [
2885
- "<schmancy-expand-root>\n <schmancy-expand summary=\"Billing\">Billing form…</schmancy-expand>\n <schmancy-expand summary=\"Shipping\">Shipping form…</schmancy-expand>\n <schmancy-expand summary=\"Review\">Order review…</schmancy-expand>\n</schmancy-expand-root>"
2886
2624
  ]
2887
2625
  }
2888
2626
  ]
@@ -2906,13 +2644,7 @@
2906
2644
  "kind": "class",
2907
2645
  "name": "SchmancyForm",
2908
2646
  "tagName": "schmancy-form",
2909
- "description": "Ergonomic wrapper around a native `<form>`. Children are reparented into a light-DOM `<form>` on connection so form-associated custom elements resolve `internals.form` via native DOM ancestry. - Form-associated custom elements (FACE) resolve their `internals.form` correctly via native DOM ancestry. - `new FormData(form)` collects values from every FACE + native control without any manual walking. - `form.reset()` triggers `formResetCallback()` on every FACE. - `form.reportValidity()` runs native validation UI. - `<button type=\"submit\">` and `<schmancy-button type=\"submit\">` both submit the form via the native submitter pipeline. This component exists only to translate the native `submit` / `reset` events into the Schmancy event shape (`detail: FormData`). All heavy lifting is the platform's.",
2910
- "summary": "Always wrap form-associated schmancy components in schmancy-form (or a native `<form>`) so `new FormData(form)` just works.",
2911
- "platformPrimitive": {
2912
- "tag": "form",
2913
- "mode": "submit",
2914
- "note": "Light-DOM native `<form>` element. Degrades to a `<form>` if the tag never registers — same semantics, just no CustomEvent translation."
2915
- },
2647
+ "description": "A thin ergonomic wrapper around a native `<form>` element. Its children are reparented into a `<form>` element in light DOM on connection, so: - Form-associated custom elements (FACE) resolve their `internals.form` correctly via native DOM ancestry. - `new FormData(form)` collects values from every FACE + native control without any manual walking. - `form.reset()` triggers `formResetCallback()` on every FACE. - `form.reportValidity()` runs native validation UI. - `<button type=\"submit\">` and `<schmancy-button type=\"submit\">` both submit the form via the native submitter pipeline. This component exists only to translate the native `submit` / `reset` events into the Schmancy event shape (`detail: FormData`). All heavy lifting is the platform's.",
2916
2648
  "events": [
2917
2649
  {
2918
2650
  "name": "submit",
@@ -2922,9 +2654,6 @@
2922
2654
  "name": "reset",
2923
2655
  "description": "Emitted after the underlying form resets."
2924
2656
  }
2925
- ],
2926
- "examples": [
2927
- "<schmancy-form @submit=${(e) => console.log(Object.fromEntries(e.detail))}>\n <schmancy-input name=\"email\" type=\"email\" required></schmancy-input>\n <schmancy-input name=\"password\" type=\"password\" required></schmancy-input>\n <schmancy-button type=\"submit\" variant=\"filled\">Sign in</schmancy-button>\n</schmancy-form>"
2928
2657
  ]
2929
2658
  }
2930
2659
  ]
@@ -3105,13 +2834,7 @@
3105
2834
  "kind": "class",
3106
2835
  "name": "SchmancyInput",
3107
2836
  "tagName": "schmancy-input",
3108
- "description": "Single-line text input the primary form-text primitive. Form-associated via ElementInternals, so it participates in native `<form>` submission, validation, and reset without additional wiring.",
3109
- "summary": "Text input with Material Design styling, native form integration, and RxJS-debounced input/change/enter events.",
3110
- "platformPrimitive": {
3111
- "tag": "input",
3112
- "mode": "change",
3113
- "note": "Schmancy-skinned native `<input>`. Degrades to `<input class=\"…\">` styled via Tailwind if the tag never registers."
3114
- },
2837
+ "description": "Enhanced version of the SchmancyInput component with improved form integration and compatibility with legacy API. This component uses the native form association API and maintains parity with native input behaviors while providing a stylish, accessible interface.",
3115
2838
  "attributes": [
3116
2839
  {
3117
2840
  "name": "value",
@@ -3280,23 +3003,6 @@
3280
3003
  },
3281
3004
  "description": "For datalist support"
3282
3005
  }
3283
- ],
3284
- "events": [
3285
- {
3286
- "name": "input",
3287
- "description": "`CustomEvent<{value: string}>` on every keystroke."
3288
- },
3289
- {
3290
- "name": "change",
3291
- "description": "`CustomEvent<{value: string}>` on blur/change."
3292
- },
3293
- {
3294
- "name": "enter",
3295
- "description": "`CustomEvent<{value: string}>` when user presses Enter."
3296
- }
3297
- ],
3298
- "examples": [
3299
- "<schmancy-form @submit=${onSubmit}>\n <schmancy-input name=\"email\" type=\"email\" label=\"Email\" required></schmancy-input>\n</schmancy-form>"
3300
3006
  ]
3301
3007
  },
3302
3008
  {
@@ -3386,13 +3092,6 @@
3386
3092
  "kind": "class",
3387
3093
  "name": "SchmancyLightbox",
3388
3094
  "tagName": "schmancy-lightbox",
3389
- "description": "Image lightbox — thumbnail grid that opens to a full-screen viewer on click, with keyboard navigation between images.",
3390
- "summary": "Drop-in for galleries / image lists where each thumbnail should expand to fill the viewport. Pass an `images` array of `{ src, alt, caption? }`.",
3391
- "platformPrimitive": {
3392
- "tag": "dialog",
3393
- "mode": "close",
3394
- "note": "Modal full-screen viewer with keyboard navigation. Degrades to a plain image grid if the tag never registers."
3395
- },
3396
3095
  "attributes": [
3397
3096
  {
3398
3097
  "name": "src",
@@ -3422,19 +3121,6 @@
3422
3121
  },
3423
3122
  "default": "false"
3424
3123
  }
3425
- ],
3426
- "events": [
3427
- {
3428
- "name": "change",
3429
- "description": "When the active image index changes (next/prev). `detail.index` is the new active image's position in the array."
3430
- },
3431
- {
3432
- "name": "close",
3433
- "description": "When the viewer is dismissed (ESC, backdrop click, close button)."
3434
- }
3435
- ],
3436
- "examples": [
3437
- "<schmancy-lightbox .images=${[{ src: '/a.jpg', alt: 'A' }, { src: '/b.jpg', alt: 'B' }]}></schmancy-lightbox>"
3438
3124
  ]
3439
3125
  }
3440
3126
  ]
@@ -3447,13 +3133,6 @@
3447
3133
  "kind": "class",
3448
3134
  "name": "SchmancyListItem",
3449
3135
  "tagName": "schmancy-list-item",
3450
- "description": "Single row in a schmancy-list — supports leading icon/avatar, main content, trailing actions. Clickable via click event, or used as a schmancy-menu-item's visual base.",
3451
- "summary": "Prefer nesting inside schmancy-list for consistent spacing/surface. Use `href` to make the row a navigation target (renders as `<a>`), or a click handler for in-app actions.",
3452
- "platformPrimitive": {
3453
- "tag": "li",
3454
- "mode": "click",
3455
- "note": "Styled `<li>` or `<a>` depending on `href`. Degrades to a plain list item if the tag never registers."
3456
- },
3457
3136
  "attributes": [
3458
3137
  {
3459
3138
  "name": "variant",
@@ -3519,9 +3198,6 @@
3519
3198
  "description": "default content"
3520
3199
  }
3521
3200
  ],
3522
- "examples": [
3523
- "<schmancy-list-item href=\"/profile\">\n <schmancy-icon slot=\"leading\">person</schmancy-icon>\n Profile\n <schmancy-icon slot=\"trailing\">chevron_right</schmancy-icon>\n</schmancy-list-item>"
3524
- ],
3525
3201
  "contexts": [
3526
3202
  {
3527
3203
  "name": "SchmancySurfaceTypeContext",
@@ -3539,13 +3215,7 @@
3539
3215
  "kind": "class",
3540
3216
  "name": "List",
3541
3217
  "tagName": "schmancy-list",
3542
- "description": "Wrapped list container holds schmancy-list-item children on a themed surface. Optionally scrollable.",
3543
- "summary": "Use for vertical lists of similarly-shaped items: settings entries, menu items, contact lists, notification lists. Pair with schmancy-list-item children.",
3544
- "platformPrimitive": {
3545
- "tag": "ul",
3546
- "mode": "-",
3547
- "note": "Styled list container. Degrades to a plain ul/div if the tag never registers."
3548
- },
3218
+ "description": "`<schmancy-list>` component. A list component that wraps its content within a customizable surface. It allows you to set the surface type and fill style, and can optionally enable scrolling behavior by delegating the scroller attribute to the surface.",
3549
3219
  "attributes": [
3550
3220
  {
3551
3221
  "name": "surface",
@@ -3608,7 +3278,7 @@
3608
3278
  }
3609
3279
  ],
3610
3280
  "examples": [
3611
- "<schmancy-list surface=\"container\" scroller>\n <schmancy-list-item>First</schmancy-list-item>\n <schmancy-list-item>Second</schmancy-list-item>\n <schmancy-list-item>Third</schmancy-list-item>\n</schmancy-list>"
3281
+ "<schmancy-list surface=\"container\" scroller>\n <schmancy-list-item>List Item 1</schmancy-list-item>\n</schmancy-list>"
3612
3282
  ],
3613
3283
  "contexts": [
3614
3284
  {
@@ -3728,6 +3398,14 @@
3728
3398
  "default": "[]",
3729
3399
  "description": "All available recipients"
3730
3400
  },
3401
+ {
3402
+ "name": "importSources",
3403
+ "type": {
3404
+ "text": "ImportSource[]"
3405
+ },
3406
+ "default": "[]",
3407
+ "description": "Sources users can import recipients from (forwarded from parent)"
3408
+ },
3731
3409
  {
3732
3410
  "name": "selectedRecipients",
3733
3411
  "type": {
@@ -4088,23 +3766,7 @@
4088
3766
  {
4089
3767
  "kind": "class",
4090
3768
  "name": "SchmancyMenuItem",
4091
- "tagName": "schmancy-menu-item",
4092
- "description": "Single item inside a schmancy-menu. Auto-dismisses the menu dialog on click — attach your action handler to `@click` and it just works.",
4093
- "summary": "Always nested inside schmancy-menu. The click handler runs before the dialog closes, so `@click=${() => doThing()}` is the full pattern.",
4094
- "platformPrimitive": {
4095
- "tag": "menuitem",
4096
- "mode": "click",
4097
- "note": "Wraps schmancy-list-item with auto-dismiss. Degrades to a styled `<button role=\"menuitem\">` if the tag never registers."
4098
- },
4099
- "slots": [
4100
- {
4101
- "name": "",
4102
- "description": "The item label and optional icons."
4103
- }
4104
- ],
4105
- "examples": [
4106
- "<schmancy-menu-item @click=${() => archive()}>\n <schmancy-icon slot=\"leading\">archive</schmancy-icon>\n Archive\n</schmancy-menu-item>"
4107
- ]
3769
+ "tagName": "schmancy-menu-item"
4108
3770
  }
4109
3771
  ]
4110
3772
  },
@@ -4116,13 +3778,7 @@
4116
3778
  "kind": "class",
4117
3779
  "name": "SchmancyMenu",
4118
3780
  "tagName": "schmancy-menu",
4119
- "description": "Floating menu a trigger button + a list of schmancy-menu-item children that open as a positioned dialog on click.",
4120
- "summary": "Use for dropdown menus attached to a button or icon — \"More actions\", \"Account\", row overflow menus in tables. Clicking a schmancy-menu-item inside auto-dismisses; custom components slotted inside must call `$dialog.dismiss()` themselves.",
4121
- "platformPrimitive": {
4122
- "tag": "menu",
4123
- "mode": "close",
4124
- "note": "Trigger + floating listbox dialog. Degrades to a native `<select>` or inline list if the tag never registers."
4125
- },
3781
+ "description": "Menu Component CRITICAL: The dialog ONLY renders the raw menu items passed via the default slot. NO <ul> wrapper, NO classes, NO additional markup in the dialog call. The dialog service handles positioning and display - we just pass the pure content.",
4126
3782
  "slots": [
4127
3783
  {
4128
3784
  "name": "trigger",
@@ -4138,102 +3794,8 @@
4138
3794
  }
4139
3795
  ],
4140
3796
  "examples": [
4141
- "<schmancy-menu>\n <schmancy-icon-button slot=\"trigger\" aria-label=\"Actions\">\n <schmancy-icon>more_vert</schmancy-icon>\n </schmancy-icon-button>\n <schmancy-menu-item @click=${() => edit()}>Edit</schmancy-menu-item>\n <schmancy-menu-item @click=${() => remove()}>Delete</schmancy-menu-item>\n</schmancy-menu>"
4142
- ]
4143
- }
4144
- ]
4145
- },
4146
- {
4147
- "kind": "javascript-module",
4148
- "path": "metric/metric.ts",
4149
- "declarations": [
4150
- {
4151
- "kind": "class",
4152
- "name": "SchmancyMetric",
4153
- "tagName": "schmancy-metric",
4154
- "description": "KPI metric — a label + value pair for dashboards, with optional trend + delta indicators.",
4155
- "summary": "The building block of dashboards and meta bars. Pass `label` + `value` for a basic stat; add `trend` / `delta` for the delta-from-last-period pattern. Use multiple metrics side-by-side with Tailwind flex/grid utilities.",
4156
- "platformPrimitive": {
4157
- "tag": "div",
4158
- "mode": "-",
4159
- "note": "Styled `<div>` with two text lines + optional trend arrow. Degrades to a plain div+spans if the tag never registers."
4160
- },
4161
- "attributes": [
4162
- {
4163
- "name": "label",
4164
- "type": {
4165
- "text": "string"
4166
- },
4167
- "default": "''",
4168
- "description": "Upper-case caption shown above the value."
4169
- },
4170
- {
4171
- "name": "value",
4172
- "type": {
4173
- "text": "string"
4174
- },
4175
- "default": "''",
4176
- "description": "Primary metric value, rendered large. Pre-format numbers/currency yourself."
4177
- },
4178
- {
4179
- "name": "trend",
4180
- "type": {
4181
- "text": "MetricTrend"
4182
- },
4183
- "values": [
4184
- "neutral",
4185
- "up",
4186
- "down"
4187
- ],
4188
- "description": "Optional trend direction. Controls the color + arrow on the delta pill."
4189
- },
4190
- {
4191
- "name": "delta",
4192
- "type": {
4193
- "text": "string"
4194
- },
4195
- "description": "Optional delta copy displayed in a pill next to the value (e.g. `+12%`)."
4196
- },
4197
- {
4198
- "name": "size",
4199
- "type": {
4200
- "text": "MetricSize"
4201
- },
4202
- "values": [
4203
- "sm",
4204
- "md",
4205
- "lg"
4206
- ],
4207
- "default": "'md'",
4208
- "description": "Size scale affecting label + value typography."
4209
- }
4210
- ],
4211
- "slots": [
4212
- {
4213
- "name": "",
4214
- "description": "Optional custom value rendering (overrides the `value` attribute if present)."
4215
- },
4216
- {
4217
- "name": "label",
4218
- "description": "Optional custom label rendering (overrides the `label` attribute if present)."
4219
- }
4220
- ],
4221
- "cssParts": [
4222
- {
4223
- "name": "label",
4224
- "description": "The label line."
4225
- },
4226
- {
4227
- "name": "value",
4228
- "description": "The value line."
4229
- },
4230
- {
4231
- "name": "delta",
4232
- "description": "The delta pill (only when `delta` is set)."
4233
- }
4234
- ],
4235
- "examples": [
4236
- "<schmancy-metric label=\"In flight\" value=\"4\"></schmancy-metric>\n<schmancy-metric label=\"Open value\" value=\"€165,900\" trend=\"up\" delta=\"+12%\"></schmancy-metric>\n<schmancy-metric label=\"Error rate\" value=\"0.3%\" trend=\"down\" delta=\"-0.1%\"></schmancy-metric>"
3797
+ "Basic menu with auto-dismiss\n\n<schmancy-menu>\n <schmancy-button slot=\"trigger\">Actions</schmancy-button>\n <schmancy-menu-item @click=${() => editItem()}>Edit</schmancy-menu-item>\n <schmancy-menu-item @click=${() => deleteItem()}>Delete</schmancy-menu-item>\n</schmancy-menu>\n\nNote: Dialog auto-dismisses when schmancy-menu-item is clicked",
3798
+ "Custom component (manual dismiss)\n\n<schmancy-menu>\n <schmancy-icon-button slot=\"trigger\">settings</schmancy-icon-button>\n <my-settings-form @submit=${() => $dialog.dismiss()}></my-settings-form>\n</schmancy-menu>\n\nNote: Custom components must call $dialog.dismiss() manually"
4237
3799
  ]
4238
3800
  }
4239
3801
  ]
@@ -4246,21 +3808,11 @@
4246
3808
  "kind": "class",
4247
3809
  "name": "SchmancyDrawerAppbar",
4248
3810
  "tagName": "schmancy-nav-drawer-appbar",
4249
- "description": "Top app bar region inside schmancy-nav-drawer — the horizontal strip above the content area that typically holds the page title, hamburger trigger, and contextual actions.",
4250
- "summary": "Always nested inside schmancy-nav-drawer. Holds the page-level title + top-right actions. On mobile, the drawer's hamburger button renders inside this region.",
4251
- "platformPrimitive": {
4252
- "tag": "header",
4253
- "mode": "-",
4254
- "note": "Styled horizontal bar. Degrades to a plain header element if the tag never registers."
4255
- },
4256
3811
  "slots": [
4257
3812
  {
4258
3813
  "name": "",
4259
3814
  "description": "The default slot"
4260
3815
  }
4261
- ],
4262
- "examples": [
4263
- "<schmancy-nav-drawer-appbar>\n <schmancy-typography type=\"title\" token=\"lg\">Dashboard</schmancy-typography>\n <schmancy-icon-button slot=\"trailing\" aria-label=\"Notifications\">\n <schmancy-icon>notifications</schmancy-icon>\n </schmancy-icon-button>\n</schmancy-nav-drawer-appbar>"
4264
3816
  ]
4265
3817
  }
4266
3818
  ]
@@ -4272,17 +3824,7 @@
4272
3824
  {
4273
3825
  "kind": "class",
4274
3826
  "name": "SchmancyNavigationDrawerContent",
4275
- "tagName": "schmancy-nav-drawer-content",
4276
- "description": "Main content region inside schmancy-nav-drawer — typically hosts the router outlet or the page's body content.",
4277
- "summary": "Always nested inside schmancy-nav-drawer. Scrollable by default; propagates scroll events up so the drawer can collapse app-bar on scroll.",
4278
- "platformPrimitive": {
4279
- "tag": "main",
4280
- "mode": "scroll",
4281
- "note": "Scrollable `<main>`. Degrades to a plain scrollable div if the tag never registers."
4282
- },
4283
- "examples": [
4284
- "<schmancy-nav-drawer-content>\n <schmancy-area name=\"main\"></schmancy-area>\n</schmancy-nav-drawer-content>"
4285
- ]
3827
+ "tagName": "schmancy-nav-drawer-content"
4286
3828
  }
4287
3829
  ]
4288
3830
  },
@@ -4294,13 +3836,6 @@
4294
3836
  "kind": "class",
4295
3837
  "name": "SchmancyNavigationDrawer",
4296
3838
  "tagName": "schmancy-nav-drawer",
4297
- "description": "Responsive navigation drawer — a left sidebar that becomes a hamburger-triggered modal overlay on narrow viewports. Composes schmancy-nav-drawer-navbar (the nav rail), schmancy-nav-drawer-appbar (the top bar), and schmancy-nav-drawer-content (the main region).",
4298
- "summary": "The app-shell layout primitive. Wrap your whole app in this when you want \"persistent sidebar on desktop, drawer on mobile\" behavior. Mode auto-switches at the breakpoint.",
4299
- "platformPrimitive": {
4300
- "tag": "div",
4301
- "mode": "-",
4302
- "note": "Flex layout with viewport-width mode switching. Degrades to a stack of plain divs if the tag never registers."
4303
- },
4304
3839
  "attributes": [
4305
3840
  {
4306
3841
  "name": "fullscreen",
@@ -4334,21 +3869,12 @@
4334
3869
  ]
4335
3870
  }
4336
3871
  ],
4337
- "events": [
4338
- {
4339
- "name": "schmancy-drawer-state",
4340
- "description": "When the drawer open/close state changes on mobile."
4341
- }
4342
- ],
4343
3872
  "slots": [
4344
3873
  {
4345
3874
  "name": "",
4346
3875
  "description": "The content slot"
4347
3876
  }
4348
3877
  ],
4349
- "examples": [
4350
- "<schmancy-nav-drawer>\n <schmancy-nav-drawer-navbar>\n <!-- nav items, typically schmancy-list-item links -->\n </schmancy-nav-drawer-navbar>\n <schmancy-nav-drawer-appbar>App title</schmancy-nav-drawer-appbar>\n <schmancy-nav-drawer-content>\n <!-- router outlet / page content -->\n </schmancy-nav-drawer-content>\n</schmancy-nav-drawer>"
4351
- ],
4352
3878
  "contexts": [
4353
3879
  {
4354
3880
  "name": "SchmancyDrawerNavbarMode",
@@ -4370,13 +3896,6 @@
4370
3896
  "kind": "class",
4371
3897
  "name": "SchmancyNavigationDrawerSidebar",
4372
3898
  "tagName": "schmancy-nav-drawer-navbar",
4373
- "description": "Sidebar region inside schmancy-nav-drawer — the persistent-on-desktop / modal-on-mobile nav rail.",
4374
- "summary": "Always nested inside schmancy-nav-drawer. On desktop: pinned left sidebar. On mobile: modal overlay triggered by the hamburger button in schmancy-nav-drawer-appbar.",
4375
- "platformPrimitive": {
4376
- "tag": "nav",
4377
- "mode": "-",
4378
- "note": "Sidebar `<nav>` with responsive open/close behavior. Degrades to a plain sidebar div if the tag never registers."
4379
- },
4380
3899
  "attributes": [
4381
3900
  {
4382
3901
  "name": "width",
@@ -4386,9 +3905,6 @@
4386
3905
  "default": "'220px'"
4387
3906
  }
4388
3907
  ],
4389
- "examples": [
4390
- "<schmancy-nav-drawer-navbar>\n <schmancy-list>\n <schmancy-list-item href=\"/dashboard\">Dashboard</schmancy-list-item>\n <schmancy-list-item href=\"/settings\">Settings</schmancy-list-item>\n </schmancy-list>\n</schmancy-nav-drawer-navbar>"
4391
- ],
4392
3908
  "contexts": [
4393
3909
  {
4394
3910
  "name": "SchmancyDrawerNavbarMode",
@@ -4410,13 +3926,7 @@
4410
3926
  "kind": "class",
4411
3927
  "name": "SchmancyNavigationBarItem",
4412
3928
  "tagName": "schmancy-navigation-bar-item",
4413
- "description": "Single destination inside schmancy-navigation-bar an icon + optional label representing one primary app destination.",
4414
- "summary": "Always nested inside schmancy-navigation-bar. Use `icon` attr for a Material Symbols glyph or slot=icon for custom content.",
4415
- "platformPrimitive": {
4416
- "tag": "button",
4417
- "mode": "click",
4418
- "note": "Styled navigation target. Degrades to a plain `<button>` if the tag never registers."
4419
- },
3929
+ "description": "`<schmancy-navigation-bar-item>` component Individual navigation item for use within a navigation bar. Represents a single destination with an icon and optional label following Material Design 3 specifications.",
4420
3930
  "attributes": [
4421
3931
  {
4422
3932
  "name": "icon",
@@ -4498,13 +4008,7 @@
4498
4008
  "kind": "class",
4499
4009
  "name": "SchmancyNavigationBar",
4500
4010
  "tagName": "schmancy-navigation-bar",
4501
- "description": "Bottom navigation bar Material Design 3 horizontal nav for mobile primary destinations (37 items). Auto-hides in fullscreen mode.",
4502
- "summary": "Use for mobile primary navigation (home, search, favorites, settings). For persistent desktop nav, prefer schmancy-navigation-rail or schmancy-nav-drawer. Consumer is responsible for fixed-bottom positioning via class.",
4503
- "platformPrimitive": {
4504
- "tag": "nav",
4505
- "mode": "-",
4506
- "note": "Styled horizontal nav with schmancy-navigation-bar-item children. Degrades to a plain flex container if the tag never registers."
4507
- },
4011
+ "description": "`<schmancy-navigation-bar>` component A horizontal navigation component following Material Design 3 specifications. Navigation bars provide access to between 3-7 primary destinations. Automatically hides in fullscreen mode when triggered via schmancyTheme.next({ fullscreen: true }). **IMPORTANT**: This component includes `z-10` by default (consistent with navigation-rail). The consumer is responsible for positioning the navigation bar in their layout. For typical bottom-fixed positioning, add: `class=\"fixed bottom-0 left-0 right-0\"`.",
4508
4012
  "attributes": [
4509
4013
  {
4510
4014
  "name": "hideLabels",
@@ -4558,13 +4062,7 @@
4558
4062
  "kind": "class",
4559
4063
  "name": "SchmancyNavigationRailItem",
4560
4064
  "tagName": "schmancy-navigation-rail-item",
4561
- "description": "Single destination inside schmancy-navigation-rail vertically-stacked icon + optional label. @see https://m3.material.io/components/navigation-rail/overview",
4562
- "summary": "Always nested inside schmancy-navigation-rail. Use `icon` attr for a Material Symbols glyph, or slot=icon for custom content. Supports a `badge` slot for notification dots / counts.",
4563
- "platformPrimitive": {
4564
- "tag": "button",
4565
- "mode": "click",
4566
- "note": "Styled vertical navigation target. Degrades to a plain `<button>` if the tag never registers."
4567
- },
4065
+ "description": "Material Design 3 Navigation Rail Item Component",
4568
4066
  "attributes": [
4569
4067
  {
4570
4068
  "name": "icon",
@@ -4702,7 +4200,7 @@
4702
4200
  "kind": "class",
4703
4201
  "name": "SchmancyNavigationRail",
4704
4202
  "tagName": "schmancy-navigation-rail",
4705
- "description": "Vertical navigation rail Material Design 3 compact left-side nav for desktop / tablet layouts with 37 primary destinations. Auto-hides in fullscreen mode. @see https://m3.material.io/components/navigation-rail/overview\r @element schmancy-navigation-rail\r @summary Use as the desktop counterpart of schmancy-navigation-bar: same destinations, different form factor. Prefer schmancy-nav-drawer when you also want a drawer + app-bar combo.",
4203
+ "description": "Material Design 3 Navigation Rail Component\r @see https://m3.material.io/components/navigation-rail/overview\r `<schmancy-navigation-rail>` component\r A Material Design 3 vertical navigation component positioned on the left side of an application.\r Navigation rails provide access to between 3-7 primary destinations with a compact footprint.\r Automatically hides in fullscreen mode when triggered via schmancyTheme.next({ fullscreen: true }).\r @element schmancy-navigation-rail\r @slot fab - Slot for a floating action button at the top\r @slot menu - Slot for a menu icon or button below the FAB\r @slot header - Custom header content slot\r @slot footer - Custom footer content slot\r @slot - Default slot for navigation rail items\r @fires navigate - When a navigation item is selected\r @fires menu-click - When the menu button is clicked\r @fires fab-click - When the FAB is clicked\r @csspart rail - The main rail container\r @csspart header - The header section\r @csspart nav - The navigation items container\r @csspart footer - The footer section",
4706
4204
  "attributes": [
4707
4205
  {
4708
4206
  "name": "label-visibility",
@@ -4756,7 +4254,6 @@
4756
4254
  }
4757
4255
  ],
4758
4256
  "examples": [
4759
- "<schmancy-navigation-rail activeIndex=\"0\">\r\n <schmancy-icon-button slot=\"fab\" variant=\"filled\">\r\n <schmancy-icon>add</schmancy-icon>\r\n </schmancy-icon-button>\r\n <schmancy-navigation-rail-item icon=\"home\" label=\"Home\"></schmancy-navigation-rail-item>\r\n <schmancy-navigation-rail-item icon=\"search\" label=\"Search\"></schmancy-navigation-rail-item>\r\n <schmancy-navigation-rail-item icon=\"settings\" label=\"Settings\"></schmancy-navigation-rail-item>\r\n</schmancy-navigation-rail>\r\n@platform nav - Vertical styled nav. Degrades to a plain vertical flex container if the tag never registers.\r\n@slot fab - Slot for a floating action button at the top\r\n@slot menu - Slot for a menu icon or button below the FAB\r\n@slot header - Custom header content slot\r\n@slot footer - Custom footer content slot\r\n@slot - Default slot for navigation rail items\r\n\n@fires navigate - When a navigation item is selected\r\n@fires menu-click - When the menu button is clicked\r\n@fires fab-click - When the FAB is clicked\r\n\n@csspart rail - The main rail container\r\n@csspart header - The header section\r\n@csspart nav - The navigation items container\r\n@csspart footer - The footer section",
4760
4257
  "<schmancy-navigation-rail activeIndex=\"0\">\r\n <schmancy-button slot=\"fab\" variant=\"filled\" aria-label=\"Compose\">\r\n <schmancy-icon>add</schmancy-icon>\r\n </schmancy-button>\r\n <schmancy-button slot=\"menu\" variant=\"text\" aria-label=\"Menu\">\r\n <schmancy-icon>menu</schmancy-icon>\r\n </schmancy-button>\r\n <schmancy-navigation-rail-item icon=\"home\" label=\"Home\"></schmancy-navigation-rail-item>\r\n <schmancy-navigation-rail-item icon=\"search\" label=\"Search\"></schmancy-navigation-rail-item>\r\n <schmancy-navigation-rail-item icon=\"favorite\" label=\"Favorites\" badge=\"3\"></schmancy-navigation-rail-item>\r\n <schmancy-navigation-rail-item icon=\"settings\" label=\"Settings\"></schmancy-navigation-rail-item>\r\n</schmancy-navigation-rail>"
4761
4258
  ]
4762
4259
  }
@@ -4961,7 +4458,7 @@
4961
4458
  "kind": "class",
4962
4459
  "name": "SchmancyOverlay",
4963
4460
  "tagName": "schmancy-overlay",
4964
- "description": "The single overlay element. Hosts a native `<dialog>` in its shadow root for centered/sheet layouts; for anchored, we stay modeless by using `<dialog>` with .show() (non-modal) + explicit positioning. Public lifecycle: the service calls `open()` to mount content and animate in, `close(reason)` to animate out and dismiss. The element dispatches `overlay-close` when closed; the service listens and resolves the caller's Observable.",
4461
+ "description": "The single overlay element. Custom `<div>` shell (not a native `<dialog>`) one backdrop mechanism for all layouts, one focus-trap path, one animation orchestrator. The shell is always rendered; the backdrop only renders when modal. The surface is positioned per tier: - Modal layouts (centered / sheet) backdrop + surface, focus-trapped, library-managed z-index. - Anchored 'css-anchor' tier → surface as `popover=\"auto\"` with CSS Anchor Positioning; native top-layer + light-dismiss. - Anchored 'popover-fui' tier → surface as `popover=\"auto\"` + Floating UI position math; native top-layer + light-dismiss. - Anchored 'fui-only' tier → surface positioned by Floating UI; manual click-outside + manual Esc. Public lifecycle: the service calls `open()` to mount content and animate in, `close(reason)` to animate out and dismiss. The element exposes `closed$` (Observable emitting reason + result once) and `tier` / `layout` / `modal` as properties for the stack entry.",
4965
4462
  "attributes": [
4966
4463
  {
4967
4464
  "name": "layout",
@@ -4988,6 +4485,19 @@
4988
4485
  "text": "boolean"
4989
4486
  },
4990
4487
  "default": "true"
4488
+ },
4489
+ {
4490
+ "name": "tier",
4491
+ "type": {
4492
+ "text": "OverlayTier"
4493
+ },
4494
+ "values": [
4495
+ "css-anchor",
4496
+ "popover-fui",
4497
+ "fui-only",
4498
+ "modal"
4499
+ ],
4500
+ "default": "'modal'"
4991
4501
  }
4992
4502
  ]
4993
4503
  }
@@ -5080,8 +4590,20 @@
5080
4590
  {
5081
4591
  "name": "input-type",
5082
4592
  "type": {
5083
- "text": "string"
4593
+ "text": "\"number\" | \"text\" | \"date\" | \"datetime-local\" | \"tel\" | \"search\" | \"email\" | \"url\" | \"password\" | \"time\""
5084
4594
  },
4595
+ "values": [
4596
+ "number",
4597
+ "text",
4598
+ "date",
4599
+ "datetime-local",
4600
+ "tel",
4601
+ "search",
4602
+ "email",
4603
+ "url",
4604
+ "password",
4605
+ "time"
4606
+ ],
5085
4607
  "default": "'text'"
5086
4608
  },
5087
4609
  {
@@ -5109,13 +4631,7 @@
5109
4631
  "kind": "class",
5110
4632
  "name": "SchmancyPage",
5111
4633
  "tagName": "schmancy-page",
5112
- "description": "Mobile-first page container fills remaining viewport height, suppresses double-tap zoom / pull-to-refresh / rubber-banding. Lays children in a CSS grid whose row template is `rows`.",
5113
- "summary": "The root of any app view — wraps header / main / footer children in a full-viewport grid. Use rows=\"auto_1fr_auto\" to make the middle child scroll while header/footer stay pinned.",
5114
- "platformPrimitive": {
5115
- "tag": "div",
5116
- "mode": "-",
5117
- "note": "Full-height CSS-grid container. Degrades to a plain div if the tag never registers — children still flow vertically but without the height fill and gesture suppression."
5118
- },
4634
+ "description": "Native mobile-like page container. Prevents double-tap zoom, pull-to-refresh, rubber-banding. Automatically fills remaining viewport height.",
5119
4635
  "attributes": [
5120
4636
  {
5121
4637
  "name": "rows",
@@ -5141,7 +4657,40 @@
5141
4657
  }
5142
4658
  ],
5143
4659
  "examples": [
5144
- "<schmancy-page rows=\"auto_1fr_auto\">\n <schmancy-nav-drawer-appbar>Title</schmancy-nav-drawer-appbar>\n <main>Scrollable content</main>\n <schmancy-navigation-bar></schmancy-navigation-bar>\n</schmancy-page>"
4660
+ "html`\n <schmancy-page rows=\"1fr_2fr_auto\">\n <header>App Bar</header>\n <main>Scrollable content</main>\n <footer>Navigation</footer>\n </schmancy-page>\n`"
4661
+ ]
4662
+ }
4663
+ ]
4664
+ },
4665
+ {
4666
+ "kind": "javascript-module",
4667
+ "path": "payment-card-form/payment-card-form.ts",
4668
+ "declarations": [
4669
+ {
4670
+ "kind": "class",
4671
+ "name": "SchmancyPaymentCardForm",
4672
+ "tagName": "schmancy-payment-card-form",
4673
+ "attributes": [
4674
+ {
4675
+ "name": "value",
4676
+ "type": {
4677
+ "text": "{ cardName: string; cardNumber: string; expirationDate: string; cvv: string; }"
4678
+ },
4679
+ "default": "{\n\t\tcardName: '',\n\t\tcardNumber: '',\n\t\texpirationDate: '',\n\t\tcvv: '',\n\t}",
4680
+ "description": "The form data containing all payment card information"
4681
+ }
4682
+ ],
4683
+ "events": [
4684
+ {
4685
+ "name": "change",
4686
+ "description": "Fires when any field in the form changes"
4687
+ }
4688
+ ],
4689
+ "slots": [
4690
+ {
4691
+ "name": "",
4692
+ "description": "Default slot for any additional content"
4693
+ }
5145
4694
  ]
5146
4695
  }
5147
4696
  ]
@@ -5242,13 +4791,7 @@
5242
4791
  "kind": "class",
5243
4792
  "name": "RadioButton",
5244
4793
  "tagName": "schmancy-radio-button",
5245
- "description": "Single radio button always rendered as a child of `<schmancy-radio-group>`, never standalone.",
5246
- "summary": "Low-level primitive. Use schmancy-radio-group and pass `.options` for the common path; only instantiate schmancy-radio-button directly when you need per-button custom rendering.",
5247
- "platformPrimitive": {
5248
- "tag": "radio",
5249
- "mode": "change",
5250
- "note": "Schmancy-skinned `<input type=\"radio\">` semantics. Degrades to native radio if the tag never registers."
5251
- },
4794
+ "description": "Radio button component for use within radio groups.",
5252
4795
  "attributes": [
5253
4796
  {
5254
4797
  "name": "value",
@@ -5278,15 +4821,6 @@
5278
4821
  },
5279
4822
  "default": "''"
5280
4823
  }
5281
- ],
5282
- "events": [
5283
- {
5284
- "name": "radio-button-click",
5285
- "description": "Internal event consumed by the parent schmancy-radio-group; `detail.value` is the clicked button's value. Listen on schmancy-radio-group for the public `change` event instead of subscribing here."
5286
- }
5287
- ],
5288
- "examples": [
5289
- "<schmancy-radio-group name=\"plan\">\n <schmancy-radio-button value=\"free\">Free</schmancy-radio-button>\n <schmancy-radio-button value=\"pro\" checked>Pro</schmancy-radio-button>\n</schmancy-radio-group>"
5290
4824
  ]
5291
4825
  }
5292
4826
  ]
@@ -5299,13 +4833,6 @@
5299
4833
  "kind": "class",
5300
4834
  "name": "RadioGroup",
5301
4835
  "tagName": "schmancy-radio-group",
5302
- "description": "Radio-button group — single-select from a static list of mutually-exclusive options. Form-associated.",
5303
- "summary": "Use for 2–5 mutually-exclusive options where all should stay visible (\"Shipping: standard / express / overnight\"). Prefer schmancy-select when the list grows.",
5304
- "platformPrimitive": {
5305
- "tag": "radiogroup",
5306
- "mode": "change",
5307
- "note": "Renders schmancy-radio-button children. Degrades to a fieldset with native `<input type=\"radio\" name=\"…\">` siblings if the tag never registers."
5308
- },
5309
4836
  "attributes": [
5310
4837
  {
5311
4838
  "name": "label",
@@ -5342,15 +4869,6 @@
5342
4869
  },
5343
4870
  "default": "false"
5344
4871
  }
5345
- ],
5346
- "events": [
5347
- {
5348
- "name": "change",
5349
- "description": "`SchmancyRadioGroupChangeEvent` with the selected `value`."
5350
- }
5351
- ],
5352
- "examples": [
5353
- "<schmancy-radio-group\n name=\"shipping\"\n label=\"Shipping\"\n .options=${[\n { label: 'Standard (5 days)', value: 'standard' },\n { label: 'Express (2 days)', value: 'express' },\n { label: 'Overnight', value: 'overnight' },\n ]}\n></schmancy-radio-group>"
5354
4872
  ]
5355
4873
  }
5356
4874
  ]
@@ -5423,13 +4941,7 @@
5423
4941
  "kind": "class",
5424
4942
  "name": "SchmancySelect",
5425
4943
  "tagName": "schmancy-select",
5426
- "description": "Dropdown selector single or multi-select from a list of `<schmancy-option>` children. Form-associated.",
5427
- "summary": "Material Design dropdown with type-to-filter, keyboard nav, single or multi-select. Options are declared as `<schmancy-option>` children; value / values props sync with selection.",
5428
- "platformPrimitive": {
5429
- "tag": "select",
5430
- "mode": "change",
5431
- "note": "Floating-UI-positioned listbox. Degrades to native `<select>` styled via Tailwind if the tag never registers, though multi-select UX is lost."
5432
- },
4944
+ "description": "Select dropdown component with single and multi-select support.",
5433
4945
  "attributes": [
5434
4946
  {
5435
4947
  "name": "name",
@@ -5513,15 +5025,6 @@
5513
5025
  },
5514
5026
  "default": "''"
5515
5027
  }
5516
- ],
5517
- "events": [
5518
- {
5519
- "name": "change",
5520
- "description": "`SchmancySelectChangeEvent` with `{ value }` (single) or `{ value: string[] }` (multi)."
5521
- }
5522
- ],
5523
- "examples": [
5524
- "<schmancy-select name=\"priority\" label=\"Priority\" value=\"medium\">\n <schmancy-option value=\"low\">Low</schmancy-option>\n <schmancy-option value=\"medium\">Medium</schmancy-option>\n <schmancy-option value=\"high\">High</schmancy-option>\n</schmancy-select>"
5525
5028
  ]
5526
5029
  }
5527
5030
  ]
@@ -5557,13 +5060,6 @@
5557
5060
  "kind": "class",
5558
5061
  "name": "SchmancySheet",
5559
5062
  "tagName": "schmancy-sheet",
5560
- "description": "Side-docked or bottom-docked panel — a dialog variant that slides in from an edge. Driven imperatively by the `sheet` service; rarely instantiated directly.",
5561
- "summary": "Prefer `sheet.open({ component, position })` over placing this element declaratively — the service handles stacking, focus, close on outside-click, ESC, and router integration.",
5562
- "platformPrimitive": {
5563
- "tag": "dialog",
5564
- "mode": "close",
5565
- "note": "Positioned-fixed panel with backdrop. Degrades to a `<dialog>` if the tag never registers — loses slide animation, keeps focus trap + dismiss."
5566
- },
5567
5063
  "attributes": [
5568
5064
  {
5569
5065
  "name": "open",
@@ -5604,15 +5100,6 @@
5604
5100
  },
5605
5101
  "default": "true"
5606
5102
  }
5607
- ],
5608
- "events": [
5609
- {
5610
- "name": "close",
5611
- "description": "When the sheet is dismissed (backdrop click, close button, ESC)."
5612
- }
5613
- ],
5614
- "examples": [
5615
- "import { sheet, SchmancySheetPosition } from '@mhmo91/schmancy'\nsheet.open({\n component: new MyEditorElement(),\n position: SchmancySheetPosition.Side,\n title: 'Edit item',\n})"
5616
5103
  ]
5617
5104
  }
5618
5105
  ]
@@ -5928,13 +5415,7 @@
5928
5415
  "kind": "class",
5929
5416
  "name": "SchmancySurface",
5930
5417
  "tagName": "schmancy-surface",
5931
- "description": "Themed container the root surface primitive. Sets background, text color, rounding, elevation, and (optionally) internal scroll. Provides a `SchmancySurfaceTypeContext` so descendants can adapt to the enclosing surface variant.",
5932
- "summary": "Wrap a region of a page when you need it to pick up theme tokens (background + on-color + elevation). Nest surfaces to express Material Design's hierarchical color stacking.",
5933
- "platformPrimitive": {
5934
- "tag": "div",
5935
- "mode": "-",
5936
- "note": "Styled `<div>` with theme-driven background/color/elevation. Degrades to a plain `<div>` if the tag never registers — text stays readable, just loses theming."
5937
- },
5418
+ "description": "`<schmancy-surface>` component This component renders a styled container that adapts its dimensions based on the `fill` property. It supports various rounding options, elevation levels, and applies background and text color classes based on the specified surface variant. Additionally, when the `scroller` property is true, the component enables internal scrolling by applying overflow and scroll-behavior styles. SurfaceMixin automatically provides surfaceStyles CSS.",
5938
5419
  "attributes": [
5939
5420
  {
5940
5421
  "name": "type",
@@ -5995,13 +5476,7 @@
5995
5476
  "kind": "class",
5996
5477
  "name": "SchmancySwitch",
5997
5478
  "tagName": "schmancy-switch",
5998
- "description": "Binary on/off control with immediate effect. Form-associated, keyboard-accessible, semantically a switch (ARIA role=\"switch\"). Distinct from `schmancy-checkbox`: a switch represents an immediate state change, a checkbox represents a selection in a form to be submitted.",
5999
- "summary": "Use when flipping the control takes effect right away (e.g. \"Dark mode\", \"Enable notifications\"). Prefer schmancy-checkbox for form submissions.",
6000
- "platformPrimitive": {
6001
- "tag": "switch",
6002
- "mode": "change",
6003
- "note": "Accessible native `<button role=\"switch\" aria-checked>` under the hood. No native HTML element exists; falls back to a styled checkbox if the tag never registers."
6004
- },
5479
+ "description": "Binary on/off control. Form-associated, keyboard-accessible, semantically a switch (ARIA role=\"switch\"). Distinct from `schmancy-checkbox`: a switch represents an immediate state change, a checkbox represents a selection in a form to be submitted.",
6005
5480
  "attributes": [
6006
5481
  {
6007
5482
  "name": "checked",
@@ -6061,9 +5536,6 @@
6061
5536
  "name": "thumb",
6062
5537
  "description": "The moving thumb."
6063
5538
  }
6064
- ],
6065
- "examples": [
6066
- "<schmancy-switch ?checked=${this.darkMode} @change=${(e) => this.darkMode = e.detail.value}>\n Dark mode\n</schmancy-switch>"
6067
5539
  ]
6068
5540
  }
6069
5541
  ]
@@ -6096,13 +5568,7 @@
6096
5568
  "kind": "class",
6097
5569
  "name": "SchmancyDataTable",
6098
5570
  "tagName": "schmancy-table",
6099
- "description": "Generic data table typed columns, optional sort, custom renderers per column. Pass `data` (array) and `columns` (TableColumn descriptors).",
6100
- "summary": "Use for tabular data where each column has a known shape. Pair with `<schmancy-table-row>` for the per-row interaction surface. Sort by setting `sortable: true` on a column descriptor; the table emits `sort-change` so the parent can re-fetch / re-sort in the data layer if needed.",
6101
- "platformPrimitive": {
6102
- "tag": "table",
6103
- "mode": "-",
6104
- "note": "Renders an accessible table with `<lit-virtualizer>` for large datasets. Degrades to a styled `<table>` if the tag never registers."
6105
- },
5571
+ "description": "SchmancyDataTable is a generic data table component. It supports sorting, filtering, and custom rendering of rows.",
6106
5572
  "attributes": [
6107
5573
  {
6108
5574
  "name": "keyField",
@@ -6125,19 +5591,6 @@
6125
5591
  },
6126
5592
  "default": "false"
6127
5593
  }
6128
- ],
6129
- "events": [
6130
- {
6131
- "name": "click",
6132
- "description": "When a data row is activated. `detail.item` is the row's source object, `detail.index` is the position in the data array."
6133
- },
6134
- {
6135
- "name": "sort-change",
6136
- "description": "When the user toggles a column sort. `detail.column` is the column key, `detail.direction` is `'asc' | 'desc' | null`."
6137
- }
6138
- ],
6139
- "examples": [
6140
- "<schmancy-table .data=${rows} .columns=${[{ name: 'Name', key: 'name' }, { name: 'Status', key: 'status' }]}></schmancy-table>"
6141
5594
  ]
6142
5595
  }
6143
5596
  ]
@@ -6275,13 +5728,7 @@
6275
5728
  "kind": "class",
6276
5729
  "name": "SchmancyTextarea",
6277
5730
  "tagName": "schmancy-textarea",
6278
- "description": "Multi-line text input with auto-resize and form integration. Form-associated.",
6279
- "summary": "Textarea for freeform text — notes, descriptions, messages. Auto-grows with content up to a maxlength.",
6280
- "platformPrimitive": {
6281
- "tag": "textarea",
6282
- "mode": "change",
6283
- "note": "Schmancy-skinned native `<textarea>`. Degrades to styled native `<textarea>` if the tag never registers."
6284
- },
5731
+ "description": "Textarea component with auto-resize and form integration.",
6285
5732
  "attributes": [
6286
5733
  {
6287
5734
  "name": "label",
@@ -6460,19 +5907,6 @@
6460
5907
  },
6461
5908
  "default": "false"
6462
5909
  }
6463
- ],
6464
- "events": [
6465
- {
6466
- "name": "input",
6467
- "description": "On every keystroke."
6468
- },
6469
- {
6470
- "name": "change",
6471
- "description": "On blur."
6472
- }
6473
- ],
6474
- "examples": [
6475
- "<schmancy-textarea name=\"description\" label=\"Description\" rows=\"4\" maxlength=\"500\"></schmancy-textarea>"
6476
5910
  ]
6477
5911
  }
6478
5912
  ]
@@ -6535,13 +5969,7 @@
6535
5969
  "kind": "class",
6536
5970
  "name": "SchmancyThemeComponent",
6537
5971
  "tagName": "schmancy-theme",
6538
- "description": "Theme provider generates a Material 3 palette from a seed color, resolves light/dark scheme, and publishes the token set to descendants as CSS custom properties (var(--schmancy-sys-color-…)).",
6539
- "summary": "Always wrap your app root in a `<schmancy-theme root scheme=\"auto\" color=\"#…\">`. Nest additional `<schmancy-theme>` blocks to override theming for a subtree.",
6540
- "platformPrimitive": {
6541
- "tag": "div",
6542
- "mode": "-",
6543
- "note": "Styled `<div>` that publishes theme tokens via inline `--schmancy-sys-color-*` custom properties. Degrades to a plain div if the tag never registers — children lose theming and fall back to browser defaults."
6544
- },
5972
+ "description": "SchmancyThemeComponent - Provides theming capabilities for Schmancy components. This component manages color schemes, primary colors, and theme distribution throughout the component tree. It can be used at the root level or nested to provide different themes to different parts of the application.",
6545
5973
  "attributes": [
6546
5974
  {
6547
5975
  "name": "color",
@@ -6596,8 +6024,7 @@
6596
6024
  }
6597
6025
  ],
6598
6026
  "examples": [
6599
- "<!-- Root theme provider -->\n<schmancy-theme root scheme=\"auto\" color=\"#6200ee\">\n <your-app></your-app>\n</schmancy-theme>",
6600
- "<!-- Nested theme for a specific section -->\n<schmancy-theme scheme=\"dark\" color=\"#2196f3\">\n <schmancy-surface fill=\"all\">\n <!-- Components here use the blue dark theme -->\n </schmancy-surface>\n</schmancy-theme>"
6027
+ "<!-- Root theme provider -->\n<schmancy-theme color=\"#6200ee\" scheme=\"auto\" root>\n <your-app></your-app>\n</schmancy-theme>\n\n<!-- Nested theme for specific section -->\n<schmancy-theme color=\"#2196f3\" scheme=\"dark\">\n <div class=\"dark-section\">\n <!-- Components here will use blue dark theme -->\n </div>\n</schmancy-theme>"
6601
6028
  ],
6602
6029
  "contexts": [
6603
6030
  {
@@ -6647,145 +6074,87 @@
6647
6074
  },
6648
6075
  {
6649
6076
  "kind": "javascript-module",
6650
- "path": "tree/tree.ts",
6077
+ "path": "timeline/timeline-tile.ts",
6651
6078
  "declarations": [
6652
6079
  {
6653
6080
  "kind": "class",
6654
- "name": "SchmancyTree",
6655
- "tagName": "schmancy-tree",
6656
- "description": "Expandable tree node — a recursive disclosure widget. One root slot, one default slot for child nodes. Each node can itself contain schmancy-tree children.",
6657
- "summary": "Use for hierarchical navigation / file-explorer layouts. Each level is a schmancy-tree with a `root` slot (the parent label) and default slot (the children, which may be more schmancy-trees).",
6658
- "platformPrimitive": {
6659
- "tag": "details",
6660
- "mode": "toggle",
6661
- "note": "Recursive `<details>`-like disclosure. Degrades to a plain nested list if the tag never registers — loses expand/collapse but stays navigable."
6662
- },
6081
+ "name": "SchmancyTimelineTile",
6082
+ "tagName": "schmancy-timeline-tile",
6663
6083
  "attributes": [
6664
6084
  {
6665
- "name": "open",
6085
+ "name": "state",
6666
6086
  "type": {
6667
- "text": "boolean"
6087
+ "text": "TimelineTileState"
6668
6088
  },
6669
- "default": "false",
6670
- "description": "Whether the tree’s children are visible"
6671
- }
6672
- ],
6673
- "events": [
6089
+ "values": [
6090
+ "filled",
6091
+ "empty",
6092
+ "stack-top",
6093
+ "stack-sibling"
6094
+ ],
6095
+ "default": "'empty'"
6096
+ },
6674
6097
  {
6675
- "name": "toggle",
6676
- "description": "When the root toggler or chevron is clicked. Fires before the open state flips; the host's `open` property reflects the new state on the next animation frame."
6677
- }
6678
- ],
6679
- "slots": [
6680
- {
6681
- "name": "root",
6682
- "description": "The root element of the tree"
6683
- },
6684
- {
6685
- "name": "",
6686
- "description": "The children of the tree"
6687
- }
6688
- ],
6689
- "examples": [
6690
- "<schmancy-tree>\n <schmancy-list-item slot=\"root\">src/</schmancy-list-item>\n <schmancy-tree>\n <schmancy-list-item slot=\"root\">components/</schmancy-list-item>\n <schmancy-list-item>button.ts</schmancy-list-item>\n </schmancy-tree>\n</schmancy-tree>"
6691
- ]
6692
- }
6693
- ]
6694
- },
6695
- {
6696
- "kind": "javascript-module",
6697
- "path": "typewriter/typewriter.ts",
6698
- "declarations": [
6699
- {
6700
- "kind": "class",
6701
- "name": "TypewriterElement",
6702
- "tagName": "schmancy-typewriter",
6703
- "description": "Typewriter effect — animates text typing/deletion with a cursor. Wraps the TypeIt library, lazy-loaded on first render.",
6704
- "summary": "Drop string content as the default slot or use `<p>` / `<span>` with `cycle=\"A|B|C\"` attribute children for cycling phrases. Set `loop` for infinite cycling, `once` to remember completion across sessions via sessionStorage.",
6705
- "platformPrimitive": {
6706
- "tag": "span",
6707
- "mode": "-",
6708
- "note": "Animated text container. Degrades to its raw text content if the tag never registers — animation is lost but content stays visible."
6709
- },
6710
- "attributes": [
6711
- {
6712
- "name": "speed",
6098
+ "name": "glyph",
6713
6099
  "type": {
6714
- "text": "number"
6100
+ "text": "string"
6715
6101
  },
6716
- "default": "35",
6717
- "description": "Typing speed in milliseconds per character."
6102
+ "default": "''"
6718
6103
  },
6719
6104
  {
6720
- "name": "delay",
6105
+ "name": "stack-count",
6721
6106
  "type": {
6722
6107
  "text": "number"
6723
- },
6724
- "default": "0",
6725
- "description": "Delay before typing starts (ms)."
6108
+ }
6726
6109
  },
6727
6110
  {
6728
- "name": "autoStart",
6111
+ "name": "index",
6729
6112
  "type": {
6730
- "text": "boolean"
6731
- },
6732
- "default": "true",
6733
- "description": "Automatically start typing on initialization."
6113
+ "text": "number"
6114
+ }
6734
6115
  },
6735
6116
  {
6736
- "name": "cursorChar",
6117
+ "name": "tooltip",
6737
6118
  "type": {
6738
6119
  "text": "string"
6739
- },
6740
- "default": "''",
6741
- "description": "The cursor character."
6742
- },
6743
- {
6744
- "name": "deleteSpeed",
6745
- "type": {
6746
- "text": "number"
6747
- },
6748
- "default": "20",
6749
- "description": "Typing speed for deletions (ms per character)."
6120
+ }
6750
6121
  },
6751
6122
  {
6752
- "name": "once",
6123
+ "name": "caption",
6753
6124
  "type": {
6754
- "text": "boolean"
6755
- },
6756
- "default": "true",
6757
- "description": "Only animate once per session."
6758
- },
6125
+ "text": "string"
6126
+ }
6127
+ }
6128
+ ]
6129
+ }
6130
+ ]
6131
+ },
6132
+ {
6133
+ "kind": "javascript-module",
6134
+ "path": "tree/tree.ts",
6135
+ "declarations": [
6136
+ {
6137
+ "kind": "class",
6138
+ "name": "SchmancyTree",
6139
+ "tagName": "schmancy-tree",
6140
+ "attributes": [
6759
6141
  {
6760
- "name": "loop",
6142
+ "name": "open",
6761
6143
  "type": {
6762
6144
  "text": "boolean"
6763
6145
  },
6764
6146
  "default": "false",
6765
- "description": "Loop the animation infinitely (overrides once)."
6766
- },
6767
- {
6768
- "name": "cyclePause",
6769
- "type": {
6770
- "text": "number"
6771
- },
6772
- "default": "1500",
6773
- "description": "Default pause duration for cycling (ms)."
6147
+ "description": "Whether the tree’s children are visible"
6774
6148
  }
6775
6149
  ],
6776
- "events": [
6150
+ "slots": [
6777
6151
  {
6778
- "name": "typeit-complete",
6779
- "description": "When the animation finishes typing all content. Fires after the final `afterComplete` callback in the underlying TypeIt instance."
6780
- }
6781
- ],
6782
- "examples": [
6783
- "<schmancy-typewriter speed=\"35\" cursor-char=\"|\">\n Hello, world.\n</schmancy-typewriter>"
6784
- ],
6785
- "contexts": [
6152
+ "name": "root",
6153
+ "description": "The root element of the tree"
6154
+ },
6786
6155
  {
6787
- "name": "delayContext",
6788
- "kind": "consume"
6156
+ "name": "",
6157
+ "description": "The children of the tree"
6789
6158
  }
6790
6159
  ]
6791
6160
  }
@@ -6815,50 +6184,6 @@
6815
6184
  ],
6816
6185
  "default": "'body'"
6817
6186
  },
6818
- {
6819
- "name": "preset",
6820
- "type": {
6821
- "text": "TypographyPreset"
6822
- },
6823
- "values": [
6824
- "display",
6825
- "display-lg",
6826
- "display-md",
6827
- "display-sm",
6828
- "heading-lg",
6829
- "heading-md",
6830
- "heading-sm",
6831
- "title-lg",
6832
- "title-md",
6833
- "title-sm",
6834
- "body-lg",
6835
- "body-md",
6836
- "body-sm",
6837
- "label-lg",
6838
- "label-md",
6839
- "label-sm",
6840
- "caption"
6841
- ],
6842
- "description": "Shorthand for picking a (type, token) pair in one go. When set, derives `type` and `token` automatically — saves the two-decisions-per-text-node fatigue that hits when a single page has 50+ typography nodes."
6843
- },
6844
- {
6845
- "name": "as",
6846
- "type": {
6847
- "text": "TypographyTag"
6848
- },
6849
- "values": [
6850
- "h1",
6851
- "h2",
6852
- "h3",
6853
- "h4",
6854
- "h5",
6855
- "h6",
6856
- "p",
6857
- "span",
6858
- "div"
6859
- ],
6860
- "description": "Render the slot wrapped in the requested semantic HTML element so screen readers expose the right role / heading level. Without `as`, the slot sits directly in the shadow root and the host is a generic element."
6861
- },
6862
6187
  {
6863
6188
  "name": "token",
6864
6189
  "type": {
@@ -6940,12 +6265,6 @@
6940
6265
  "description": "Placeholder shown when editable and empty"
6941
6266
  }
6942
6267
  ],
6943
- "events": [
6944
- {
6945
- "name": "change",
6946
- "description": "When `editable` is true, fires on blur or Enter with `detail.value` set to the new text content. Not fired when `editable` is unset (the default)."
6947
- }
6948
- ],
6949
6268
  "slots": [
6950
6269
  {
6951
6270
  "name": "",
@@ -7082,39 +6401,6 @@
7082
6401
  }
7083
6402
  ]
7084
6403
  },
7085
- {
7086
- "kind": "javascript-module",
7087
- "path": "components/form-elements/payment-card-form.ts",
7088
- "declarations": [
7089
- {
7090
- "kind": "class",
7091
- "name": "SchmancyPaymentCardForm",
7092
- "tagName": "schmancy-payment-card-form",
7093
- "attributes": [
7094
- {
7095
- "name": "value",
7096
- "type": {
7097
- "text": "{ cardName: string; cardNumber: string; expirationDate: string; cvv: string; }"
7098
- },
7099
- "default": "{\n\t\tcardName: '',\n\t\tcardNumber: '',\n\t\texpirationDate: '',\n\t\tcvv: '',\n\t}",
7100
- "description": "The form data containing all payment card information"
7101
- }
7102
- ],
7103
- "events": [
7104
- {
7105
- "name": "change",
7106
- "description": "Fires when any field in the form changes"
7107
- }
7108
- ],
7109
- "slots": [
7110
- {
7111
- "name": "",
7112
- "description": "Default slot for any additional content"
7113
- }
7114
- ]
7115
- }
7116
- ]
7117
- },
7118
6404
  {
7119
6405
  "kind": "javascript-module",
7120
6406
  "path": "extra/countries/countries.ts",
@@ -7123,13 +6409,6 @@
7123
6409
  "kind": "class",
7124
6410
  "name": "SchmancyCountriesSelect",
7125
6411
  "tagName": "schmancy-select-countries",
7126
- "description": "Country picker — type-ahead autocomplete over the ISO 3166-1 country list. Form-associated.",
7127
- "summary": "Drop-in replacement for schmancy-autocomplete when the options are specifically \"every country\". Pre-seeds the list from countries.data.",
7128
- "platformPrimitive": {
7129
- "tag": "combobox",
7130
- "mode": "change",
7131
- "note": "Composes schmancy-autocomplete with a static options list. Value is the 2-letter ISO code."
7132
- },
7133
6412
  "attributes": [
7134
6413
  {
7135
6414
  "name": "value",
@@ -7172,15 +6451,6 @@
7172
6451
  },
7173
6452
  "default": "''"
7174
6453
  }
7175
- ],
7176
- "events": [
7177
- {
7178
- "name": "change",
7179
- "description": "`SchmancyAutocompleteChangeEvent` with `{ value: string }` (the ISO code)."
7180
- }
7181
- ],
7182
- "examples": [
7183
- "<schmancy-select-countries name=\"country\" label=\"Shipping country\" required></schmancy-select-countries>"
7184
6454
  ]
7185
6455
  }
7186
6456
  ]
@@ -7193,13 +6463,7 @@
7193
6463
  "kind": "class",
7194
6464
  "name": "SchmancyTimezonesSelect",
7195
6465
  "tagName": "schmancy-select-timezones",
7196
- "description": "Timezone picker type-ahead autocomplete over the IANA tz database. Form-associated.",
7197
- "summary": "Drop-in replacement for schmancy-autocomplete when the options are IANA timezone names. Value is the IANA identifier (\"America/Los_Angeles\").",
7198
- "platformPrimitive": {
7199
- "tag": "combobox",
7200
- "mode": "change",
7201
- "note": "Composes schmancy-autocomplete with a static IANA timezones list."
7202
- },
6466
+ "description": "Timezone selector component with autocomplete filtering.",
7203
6467
  "attributes": [
7204
6468
  {
7205
6469
  "name": "value",
@@ -7242,203 +6506,6 @@
7242
6506
  },
7243
6507
  "default": "''"
7244
6508
  }
7245
- ],
7246
- "events": [
7247
- {
7248
- "name": "change",
7249
- "description": "`SchmancyAutocompleteChangeEvent` with `{ value: string }` (the IANA tz name)."
7250
- }
7251
- ],
7252
- "examples": [
7253
- "<schmancy-select-timezones name=\"tz\" label=\"Timezone\" value=\"America/New_York\"></schmancy-select-timezones>"
7254
- ]
7255
- }
7256
- ]
7257
- },
7258
- {
7259
- "kind": "javascript-module",
7260
- "path": "layout/flex/flex.ts",
7261
- "declarations": [
7262
- {
7263
- "kind": "class",
7264
- "name": "SchmancyFlex",
7265
- "tagName": "schmancy-flex",
7266
- "attributes": [
7267
- {
7268
- "name": "flow",
7269
- "type": {
7270
- "text": "\"row\" | \"row-reverse\" | \"col\" | \"col-reverse\""
7271
- },
7272
- "values": [
7273
- "row",
7274
- "row-reverse",
7275
- "col",
7276
- "col-reverse"
7277
- ],
7278
- "default": "'col'"
7279
- },
7280
- {
7281
- "name": "wrap",
7282
- "type": {
7283
- "text": "\"wrap\" | \"nowrap\" | \"wrap-reverse\""
7284
- },
7285
- "values": [
7286
- "wrap",
7287
- "nowrap",
7288
- "wrap-reverse"
7289
- ],
7290
- "default": "'wrap'"
7291
- },
7292
- {
7293
- "name": "align",
7294
- "type": {
7295
- "text": "\"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\""
7296
- },
7297
- "values": [
7298
- "start",
7299
- "center",
7300
- "end",
7301
- "stretch",
7302
- "baseline"
7303
- ],
7304
- "default": "'start'"
7305
- },
7306
- {
7307
- "name": "justify",
7308
- "type": {
7309
- "text": "\"start\" | \"center\" | \"end\" | \"stretch\" | \"between\""
7310
- },
7311
- "values": [
7312
- "start",
7313
- "center",
7314
- "end",
7315
- "stretch",
7316
- "between"
7317
- ],
7318
- "default": "'start'"
7319
- },
7320
- {
7321
- "name": "gap",
7322
- "type": {
7323
- "text": "\"sm\" | \"md\" | \"lg\" | \"none\""
7324
- },
7325
- "values": [
7326
- "sm",
7327
- "md",
7328
- "lg",
7329
- "none"
7330
- ],
7331
- "default": "'none'"
7332
- }
7333
- ]
7334
- }
7335
- ]
7336
- },
7337
- {
7338
- "kind": "javascript-module",
7339
- "path": "layout/grid/grid.ts",
7340
- "declarations": [
7341
- {
7342
- "kind": "class",
7343
- "name": "SchmancyGrid",
7344
- "tagName": "schmancy-grid",
7345
- "attributes": [
7346
- {
7347
- "name": "flow",
7348
- "type": {
7349
- "text": "\"row\" | \"col\" | \"dense\" | \"row-dense\" | \"col-dense\""
7350
- },
7351
- "values": [
7352
- "row",
7353
- "col",
7354
- "dense",
7355
- "row-dense",
7356
- "col-dense"
7357
- ],
7358
- "default": "'row'"
7359
- },
7360
- {
7361
- "name": "align",
7362
- "type": {
7363
- "text": "\"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\""
7364
- },
7365
- "values": [
7366
- "start",
7367
- "center",
7368
- "end",
7369
- "stretch",
7370
- "baseline"
7371
- ],
7372
- "default": "'stretch'"
7373
- },
7374
- {
7375
- "name": "justify",
7376
- "type": {
7377
- "text": "\"start\" | \"center\" | \"end\" | \"stretch\""
7378
- },
7379
- "values": [
7380
- "start",
7381
- "center",
7382
- "end",
7383
- "stretch"
7384
- ],
7385
- "default": "'stretch'"
7386
- },
7387
- {
7388
- "name": "content",
7389
- "type": {
7390
- "text": "\"start\" | \"center\" | \"end\" | \"stretch\" | \"between\" | \"around\" | \"evenly\""
7391
- },
7392
- "values": [
7393
- "start",
7394
- "center",
7395
- "end",
7396
- "stretch",
7397
- "between",
7398
- "around",
7399
- "evenly"
7400
- ],
7401
- "default": "'stretch'"
7402
- },
7403
- {
7404
- "name": "gap",
7405
- "type": {
7406
- "text": "\"xs\" | \"sm\" | \"md\" | \"lg\" | \"none\""
7407
- },
7408
- "values": [
7409
- "xs",
7410
- "sm",
7411
- "md",
7412
- "lg",
7413
- "none"
7414
- ],
7415
- "default": "'none'"
7416
- },
7417
- {
7418
- "name": "cols",
7419
- "type": {
7420
- "text": "string"
7421
- }
7422
- },
7423
- {
7424
- "name": "rows",
7425
- "type": {
7426
- "text": "string"
7427
- }
7428
- },
7429
- {
7430
- "name": "rcols",
7431
- "type": {
7432
- "text": "{ xs?: string | number; sm?: string | number; md?: string | number; lg?: string | number; xl?: string | number; '2xl'?: string | number; }"
7433
- }
7434
- },
7435
- {
7436
- "name": "wrap",
7437
- "type": {
7438
- "text": "boolean"
7439
- },
7440
- "default": "false"
7441
- }
7442
6509
  ]
7443
6510
  }
7444
6511
  ]
@@ -7451,13 +6518,7 @@
7451
6518
  "kind": "class",
7452
6519
  "name": "SchmancyScroll",
7453
6520
  "tagName": "schmancy-scroll",
7454
- "description": "Scrollable container with debounced scroll events, horizontal/vertical direction, optional hidden scrollbar, and programmatic scrollTo via command events or refs.",
7455
- "summary": "Use anywhere you'd reach for `overflow: auto` but also need debounced scroll events (for sticky headers, scroll spies, virtualization triggers) or the ability to drive scroll from elsewhere in the app by dispatching a schmancy-scroll-command event.",
7456
- "platformPrimitive": {
7457
- "tag": "div",
7458
- "mode": "-",
7459
- "note": "Styled scrollable `<div>`. Degrades to a plain scrollable div if the tag never registers — loses the debounced scroll event and the command-bus integration."
7460
- },
6521
+ "description": "A custom scrollable container with enhanced features.",
7461
6522
  "attributes": [
7462
6523
  {
7463
6524
  "name": "hide",
@@ -7524,132 +6585,6 @@
7524
6585
  ]
7525
6586
  }
7526
6587
  ]
7527
- },
7528
- {
7529
- "kind": "javascript-module",
7530
- "path": "layout/v2/flex.ts",
7531
- "declarations": [
7532
- {
7533
- "kind": "class",
7534
- "name": "SchmancyFlexV2",
7535
- "tagName": "sch-flex",
7536
- "attributes": [
7537
- {
7538
- "name": "inline",
7539
- "type": {
7540
- "text": "boolean"
7541
- },
7542
- "default": "false"
7543
- },
7544
- {
7545
- "name": "flow",
7546
- "type": {
7547
- "text": "\"row\" | \"row-reverse\" | \"col\" | \"col-reverse\" | \"row-dense\" | \"col-dense\""
7548
- },
7549
- "values": [
7550
- "row",
7551
- "row-reverse",
7552
- "col",
7553
- "col-reverse",
7554
- "row-dense",
7555
- "col-dense"
7556
- ],
7557
- "default": "'row'",
7558
- "description": "Flow property that determines the flex direction. Allowed values: - Standard: 'row', 'row-reverse', 'col', 'col-reverse' - Dense variants: 'row-dense', 'col-dense' (dense implies wrapping)"
7559
- },
7560
- {
7561
- "name": "wrap",
7562
- "type": {
7563
- "text": "\"wrap\" | \"nowrap\" | \"wrap-reverse\""
7564
- },
7565
- "values": [
7566
- "wrap",
7567
- "nowrap",
7568
- "wrap-reverse"
7569
- ],
7570
- "default": "'wrap'",
7571
- "description": "Flex-wrap options: - 'wrap', 'nowrap', or 'wrap-reverse'"
7572
- },
7573
- {
7574
- "name": "align",
7575
- "type": {
7576
- "text": "\"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\""
7577
- },
7578
- "values": [
7579
- "start",
7580
- "center",
7581
- "end",
7582
- "stretch",
7583
- "baseline"
7584
- ],
7585
- "default": "'stretch'",
7586
- "description": "Align-items (vertical alignment of flex items): - 'start', 'center', 'end', 'stretch', or 'baseline'"
7587
- },
7588
- {
7589
- "name": "justify",
7590
- "type": {
7591
- "text": "\"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\""
7592
- },
7593
- "values": [
7594
- "start",
7595
- "center",
7596
- "end",
7597
- "between",
7598
- "around",
7599
- "evenly"
7600
- ],
7601
- "default": "'start'",
7602
- "description": "Justify-content (horizontal distribution): - 'start', 'center', 'end', 'between', 'around', or 'evenly'"
7603
- },
7604
- {
7605
- "name": "content",
7606
- "type": {
7607
- "text": "\"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\""
7608
- },
7609
- "values": [
7610
- "start",
7611
- "center",
7612
- "end",
7613
- "between",
7614
- "around",
7615
- "evenly"
7616
- ],
7617
- "description": "Align-content (spacing between rows when wrapping): - 'start', 'center', 'end', 'between', 'around', or 'evenly'"
7618
- },
7619
- {
7620
- "name": "gap",
7621
- "type": {
7622
- "text": "\"none\" | \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\" | \"10\" | \"12\" | \"16\" | \"20\" | \"24\" | \"32\" | \"40\" | \"48\" | \"56\" | \"64\""
7623
- },
7624
- "values": [
7625
- "none",
7626
- "0",
7627
- "1",
7628
- "2",
7629
- "3",
7630
- "4",
7631
- "5",
7632
- "6",
7633
- "7",
7634
- "8",
7635
- "9",
7636
- "10",
7637
- "12",
7638
- "16",
7639
- "20",
7640
- "24",
7641
- "32",
7642
- "40",
7643
- "48",
7644
- "56",
7645
- "64"
7646
- ],
7647
- "default": "'none'",
7648
- "description": "Gap between flex items. Options (based on Tailwind CSS 4 spacing scale): - 'none', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '12', '16', '20', '24', '32', '40', '48', '56', or '64'"
7649
- }
7650
- ]
7651
- }
7652
- ]
7653
6588
  }
7654
6589
  ],
7655
6590
  "tokens": [
@@ -7785,145 +6720,10 @@
7785
6720
  "schmancy-sys-typescale-title-small"
7786
6721
  ],
7787
6722
  "conventions": [
7788
- "Before authoring any custom element, call window.schmancy.help() to scan the elements[] list. Only compose from primitives if no existing tag fits.",
7789
- "Use $dialog.confirm / sheet.open / $notify imperatively for overlays. Do not roll element-based dialogs, sheets, or toasts.",
7790
- "Every UI tag must be a <schmancy-*> custom element. Replace <button> with <schmancy-button>, <input> with <schmancy-input>, <li> with <schmancy-list-item>, etc.",
7791
- "Every <schmancy-*> tag used in output must exist in the manifest declarations[]. Hand-rolled tags are violations.",
7792
- "Every attribute on a <schmancy-*> element must be declared in that tag's attributes[] in the manifest.",
7793
- "When an attribute has a values[] enum, only those values are valid.",
7794
- "Never use hex literals (#6200ee) in style or class. Reference --schmancy-sys-color-* tokens or the Tailwind utilities that wrap them.",
7795
- "Never use Tailwind arbitrary values like bg-[#xxx] or text-[13px]. Use bg-primary-default, text-surface-on, and the typography presets instead.",
7796
- "Prefer Tailwind utility classes (bg-primary-default, text-surface-on) over raw --schmancy-sys-color-* CSS variables. Fall back to the CSS variable only when Tailwind lacks a utility for the property.",
7797
- "Form-associated controls work standalone, but always wrap a related group in <schmancy-form> so its submit event fires with a FormData payload.",
7798
- "schmancy-icon-button has no text content; provide aria-label so screen readers can announce it.",
7799
6723
  "Every component extends `$LitElement`, not raw `LitElement`. Use the mixin from `@mhmo91/schmancy/mixins`.",
7800
6724
  "RxJS subscriptions inside a component must end with `.pipe(takeUntil(this.disconnecting))` for automatic cleanup on disconnect.",
7801
6725
  "Theme must wrap a surface: `<schmancy-theme>` provides design tokens, `<schmancy-surface>` paints the background and inherits text color.",
7802
6726
  "Use `repeat()` from `lit/directives/repeat.js` for dynamic lists — never `.map()` inside `html```.",
7803
6727
  "Prefer `fromEvent(target, type).pipe(takeUntil(this.disconnecting))` over raw `addEventListener` inside components."
7804
- ],
7805
- "rules": [
7806
- {
7807
- "id": "discovery-first",
7808
- "scope": "workflow",
7809
- "rule": "Before authoring any custom element, call window.schmancy.help() to scan the elements[] list. Only compose from primitives if no existing tag fits.",
7810
- "severity": "error"
7811
- },
7812
- {
7813
- "id": "use-existing-overlay-services",
7814
- "scope": "workflow",
7815
- "rule": "Use $dialog.confirm / sheet.open / $notify imperatively for overlays. Do not roll element-based dialogs, sheets, or toasts.",
7816
- "severity": "error"
7817
- },
7818
- {
7819
- "id": "schmancy-tags-only",
7820
- "scope": "global",
7821
- "rule": "Every UI tag must be a <schmancy-*> custom element. Replace <button> with <schmancy-button>, <input> with <schmancy-input>, <li> with <schmancy-list-item>, etc.",
7822
- "severity": "error",
7823
- "validator": "tag-namespace"
7824
- },
7825
- {
7826
- "id": "tag-must-exist",
7827
- "scope": "tag",
7828
- "rule": "Every <schmancy-*> tag used in output must exist in the manifest declarations[]. Hand-rolled tags are violations.",
7829
- "severity": "error",
7830
- "validator": "tag-exists"
7831
- },
7832
- {
7833
- "id": "attribute-in-spec",
7834
- "scope": "attribute",
7835
- "rule": "Every attribute on a <schmancy-*> element must be declared in that tag's attributes[] in the manifest.",
7836
- "severity": "error",
7837
- "validator": "attr-in-spec"
7838
- },
7839
- {
7840
- "id": "enum-attribute-value",
7841
- "scope": "attribute",
7842
- "rule": "When an attribute has a values[] enum, only those values are valid.",
7843
- "severity": "error",
7844
- "validator": "enum-value-valid"
7845
- },
7846
- {
7847
- "id": "no-hex-literals",
7848
- "scope": "token",
7849
- "applies": [
7850
- "style",
7851
- "class"
7852
- ],
7853
- "rule": "Never use hex literals (#6200ee) in style or class. Reference --schmancy-sys-color-* tokens or the Tailwind utilities that wrap them.",
7854
- "severity": "error",
7855
- "validator": "no-hex"
7856
- },
7857
- {
7858
- "id": "no-arbitrary-tailwind-values",
7859
- "scope": "token",
7860
- "applies": [
7861
- "class"
7862
- ],
7863
- "rule": "Never use Tailwind arbitrary values like bg-[#xxx] or text-[13px]. Use bg-primary-default, text-surface-on, and the typography presets instead.",
7864
- "severity": "error",
7865
- "validator": "no-arbitrary-values"
7866
- },
7867
- {
7868
- "id": "tailwind-classes-preferred-over-css-vars",
7869
- "scope": "token",
7870
- "rule": "Prefer Tailwind utility classes (bg-primary-default, text-surface-on) over raw --schmancy-sys-color-* CSS variables. Fall back to the CSS variable only when Tailwind lacks a utility for the property.",
7871
- "severity": "warn"
7872
- },
7873
- {
7874
- "id": "form-controls-inside-schmancy-form",
7875
- "scope": "tag",
7876
- "applies": [
7877
- "schmancy-input",
7878
- "schmancy-select",
7879
- "schmancy-checkbox",
7880
- "schmancy-radio-group",
7881
- "schmancy-textarea",
7882
- "schmancy-switch",
7883
- "schmancy-autocomplete"
7884
- ],
7885
- "rule": "Form-associated controls work standalone, but always wrap a related group in <schmancy-form> so its submit event fires with a FormData payload.",
7886
- "severity": "warn"
7887
- },
7888
- {
7889
- "id": "icon-buttons-need-aria-label",
7890
- "scope": "tag",
7891
- "applies": [
7892
- "schmancy-icon-button"
7893
- ],
7894
- "rule": "schmancy-icon-button has no text content; provide aria-label so screen readers can announce it.",
7895
- "severity": "error",
7896
- "validator": "icon-button-aria-label"
7897
- },
7898
- {
7899
- "id": "lit-mixin",
7900
- "scope": "global",
7901
- "rule": "Every component extends `$LitElement`, not raw `LitElement`. Use the mixin from `@mhmo91/schmancy/mixins`.",
7902
- "severity": "hint"
7903
- },
7904
- {
7905
- "id": "rxjs-cleanup",
7906
- "scope": "global",
7907
- "rule": "RxJS subscriptions inside a component must end with `.pipe(takeUntil(this.disconnecting))` for automatic cleanup on disconnect.",
7908
- "severity": "hint"
7909
- },
7910
- {
7911
- "id": "theme-wraps-surface",
7912
- "scope": "global",
7913
- "rule": "Theme must wrap a surface: `<schmancy-theme>` provides design tokens, `<schmancy-surface>` paints the background and inherits text color.",
7914
- "severity": "hint"
7915
- },
7916
- {
7917
- "id": "lit-repeat-not-map",
7918
- "scope": "global",
7919
- "rule": "Use `repeat()` from `lit/directives/repeat.js` for dynamic lists — never `.map()` inside `html```.",
7920
- "severity": "hint"
7921
- },
7922
- {
7923
- "id": "rxjs-fromevent",
7924
- "scope": "global",
7925
- "rule": "Prefer `fromEvent(target, type).pipe(takeUntil(this.disconnecting))` over raw `addEventListener` inside components.",
7926
- "severity": "hint"
7927
- }
7928
6728
  ]
7929
6729
  }